@nowcrew/daemon 0.6.88-beta.11 → 0.6.88-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -878,23 +878,26 @@ export function createExecutionJournal(agentsRoot, options = {}) {
878
878
  },
879
879
  acknowledgeCompletion: async (executionId) => {
880
880
  validateExecutionId(executionId);
881
- const updated = await serializedExecution(executionId, "acknowledge_completion", async () => {
881
+ const result = await serializedExecution(executionId, "acknowledge_completion", async () => {
882
882
  const entry = await requireRecord(executionId);
883
883
  if (entry.state !== "completed" && entry.state !== "interrupted") {
884
884
  throw new JournalTransitionError(`Cannot acknowledge ${entry.state} execution`);
885
885
  }
886
- if (entry.completionAcknowledged)
887
- return confirmDurable(entry);
886
+ if (entry.completionAcknowledged) {
887
+ return { entry: await confirmDurable(entry), newlyAcknowledged: false };
888
+ }
888
889
  const updated = JournalEntrySchema.parse({
889
890
  ...entry,
890
891
  completionAcknowledged: true,
891
892
  updatedAt: now().toISOString(),
892
893
  });
893
894
  await writeRecord(updated);
894
- return updated;
895
+ return { entry: updated, newlyAcknowledged: true };
895
896
  });
896
- await serializedDirectory(pruneInternal);
897
- return updated;
897
+ // 重复 ACK 仍确认持久化,但不能反复全目录清理并阻塞后续控制帧。
898
+ if (result.newlyAcknowledged)
899
+ await serializedDirectory(pruneInternal);
900
+ return result.entry;
898
901
  },
899
902
  get: async (executionId) => {
900
903
  validateExecutionId(executionId);
@@ -53,8 +53,10 @@ crew-memory search --query <关键词> [--file MEMORY.md|notes/文件.md] [--lim
53
53
  crew-memory read [--file MEMORY.md|notes/文件.md] [--offset 0] [--limit 2000]
54
54
  crew-memory search-pending --query <关键词> [--cursor <游标>] [--limit 10]
55
55
  crew-memory read-pending --id <候选ID> [--offset 0] [--limit 2000] [--if-hash <sha256>]
56
+ read/read-pending 的 --limit 必须为 1—4000 的整数,默认 2000;search/search-pending 为 1—40 的整数,默认 10。
56
57
  search 关键词按空白分隔,同一行须全部命中;返回完整文件中的行号和字符偏移。
57
58
  读取的 offset/limit 按 Unicode 字符计数;用 nextOffset 继续,eof=true 表示结束。
59
+ 读取的 --limit 超出范围时,保留原文件或候选 ID 及 offset,将 --limit 改为 2000 后重试;成功后按 nextOffset 分页,不要增大 limit 来一次读完整文件。
58
60
  后续页可传 --if-hash <前一页的 sha256>,文件变化时停止,避免混读不同版本。
59
61
  search/read 读取 MEMORY.md 和 notes 原文,不过滤失效段落,也不扫描 pending。
60
62
  search-pending 只查因容量延期的 create 候选;有 nextCursor 就继续,即使本页 matches 为空。
@@ -235,7 +237,7 @@ export async function runMemoryReadCommand(argv, io) {
235
237
  }
236
238
  }
237
239
  catch {
238
- io.err(`memory_arguments_invalid: 参数不合法,记忆读取未完成。\n${USAGE}`);
240
+ io.err(`memory_arguments_invalid: 参数不合法,记忆读取未完成;请按以下参数范围修正后重试,不要当作没有记忆。\n${USAGE}`);
239
241
  return 2;
240
242
  }
241
243
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nowcrew/daemon",
3
- "version": "0.6.88-beta.11",
3
+ "version": "0.6.88-beta.13",
4
4
  "type": "module",
5
5
  "description": "crew daemon — 运行在用户机器:拉起/管理 agent 进程,注入 crew CLI,归一化 runtime 事件",
6
6
  "license": "Apache-2.0",