From 3bc3d58a9d4462b458dd7216e1ef675aedb1968a Mon Sep 17 00:00:00 2001 From: sun-970 <3843544764@qq.com> Date: Sun, 20 Sep 2026 09:19:03 +0000 Subject: [PATCH] feat(cli): add one-way mem put --watch (#110) Foreground poll watcher consumes the shared ingest core. New files ingest after one quiet interval; changed files are reported not re-ingested; local deletes never propagate. --- CHANGELOG.md | 4 + GOAL.md | 2 +- README.md | 1 + SPEC.md | 2 +- server/cmd/mem/cmds_file.go | 24 + server/cmd/mem/cmds_watch.go | 510 ++++++++++++++++++++++ server/cmd/mem/cmds_watch_lock.go | 38 ++ server/cmd/mem/cmds_watch_lock_other.go | 20 + server/cmd/mem/cmds_watch_lock_unix.go | 22 + server/cmd/mem/cmds_watch_lock_windows.go | 29 ++ server/cmd/mem/cmds_watch_report.go | 87 ++++ server/cmd/mem/cmds_watch_test.go | 405 +++++++++++++++++ server/internal/ingest/ingest.go | 6 + 13 files changed, 1148 insertions(+), 2 deletions(-) create mode 100644 server/cmd/mem/cmds_watch.go create mode 100644 server/cmd/mem/cmds_watch_lock.go create mode 100644 server/cmd/mem/cmds_watch_lock_other.go create mode 100644 server/cmd/mem/cmds_watch_lock_unix.go create mode 100644 server/cmd/mem/cmds_watch_lock_windows.go create mode 100644 server/cmd/mem/cmds_watch_report.go create mode 100644 server/cmd/mem/cmds_watch_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 563e24c..d4e0a13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ The project publishes 0.x prerelease versions; a stable release line is not yet ## [Unreleased] +### Added + +- `mem put --watch` one-way foreground directory watch: poll `--interval` (default 30s), ingest new files after one quiet interval, report changed files without re-ingesting, and never propagate local deletes. Refs #110. + ### Changed - Ingest cursor locks try non-blocking exclusive locks and give up after 5s so a wedged peer becomes a warning instead of a silent hang. Refs #139. diff --git a/GOAL.md b/GOAL.md index 8515d46..c2a9804 100644 --- a/GOAL.md +++ b/GOAL.md @@ -121,7 +121,7 @@ mem 只有一份数据和能力内核,但面向两类使用者: - [x] 实现 API / CLI / Web 的 workspace export 与空目标 `fresh` import。 - [x] 实现导入前校验、幂等 ledger、冲突明细、失败补偿和导入后重新索引。 - [x] 实现 `merge_conservative`。 -- [ ] 实现增量包、断点上传与完整本地同步盘体验。 +- [ ] 实现增量包、断点上传与完整本地同步盘体验。 One-way `mem put --watch` is #110 and is not this item. ### P2 — 让全部 Agent 数据可见可控 diff --git a/README.md b/README.md index a9b7b2e..a63ed2e 100644 --- a/README.md +++ b/README.md @@ -260,6 +260,7 @@ curl --fail http://127.0.0.1:8080/healthz export MEM_SERVER=http://localhost:8080 mem auth login mem put ~/Photos --recursive +mem put ~/Photos --watch # one-way watch of new files (#110); not a sync drive # 可选:同步端附带可信的拍摄时间、位置和来源;AI 建议稍后在 Web 中确认 mem put ~/Photos/IMG_0001.jpg \ --captured-at 2026-07-29T08:00:00+08:00 \ diff --git a/SPEC.md b/SPEC.md index 8755146..228a86c 100644 --- a/SPEC.md +++ b/SPEC.md @@ -607,7 +607,7 @@ mem put --tag ... mem put --captured-at --lat --lon \ [--location-accuracy ] [--place