@coralai/sps-cli 0.89.20 → 0.90.0

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.
Files changed (153) hide show
  1. package/assembly/base.yml +0 -7
  2. package/dist/commands/agentCommand.d.ts.map +1 -1
  3. package/dist/commands/agentCommand.js +2 -1
  4. package/dist/commands/agentCommand.js.map +1 -1
  5. package/dist/commands/cardDashboard.js +1 -1
  6. package/dist/commands/cardDashboard.js.map +1 -1
  7. package/dist/commands/cardMarkComplete.d.ts +24 -0
  8. package/dist/commands/cardMarkComplete.d.ts.map +1 -1
  9. package/dist/commands/cardMarkComplete.js +1 -1
  10. package/dist/commands/cardMarkComplete.js.map +1 -1
  11. package/dist/commands/cardMarkStarted.d.ts +23 -0
  12. package/dist/commands/cardMarkStarted.d.ts.map +1 -1
  13. package/dist/commands/cardMarkStarted.js +1 -1
  14. package/dist/commands/cardMarkStarted.js.map +1 -1
  15. package/dist/commands/hookCommand.js +1 -1
  16. package/dist/commands/hookCommand.js.map +1 -1
  17. package/dist/commands/memoryCommand.d.ts.map +1 -1
  18. package/dist/commands/memoryCommand.js +45 -34
  19. package/dist/commands/memoryCommand.js.map +1 -1
  20. package/dist/commands/pipelineTick.js +1 -1
  21. package/dist/commands/pipelineTick.js.map +1 -1
  22. package/dist/commands/qaTick.js +1 -1
  23. package/dist/commands/qaTick.js.map +1 -1
  24. package/dist/commands/tick.d.ts.map +1 -1
  25. package/dist/commands/tick.js +3 -2
  26. package/dist/commands/tick.js.map +1 -1
  27. package/dist/commands/workerLaunch.js +1 -1
  28. package/dist/commands/workerLaunch.js.map +1 -1
  29. package/dist/console/index.js +3 -3
  30. package/dist/console/index.js.map +1 -1
  31. package/dist/console/routes/chat.d.ts.map +1 -1
  32. package/dist/console/routes/chat.js +1 -1
  33. package/dist/console/routes/chat.js.map +1 -1
  34. package/dist/console/routes/help.js +1 -1
  35. package/dist/console/routes/help.js.map +1 -1
  36. package/dist/console/routes/projectConfig.js +1 -1
  37. package/dist/console/routes/projectConfig.js.map +1 -1
  38. package/dist/core/agents/ClaudeSdkBackend.d.ts.map +1 -1
  39. package/dist/core/agents/ClaudeSdkBackend.js +5 -0
  40. package/dist/core/agents/ClaudeSdkBackend.js.map +1 -1
  41. package/dist/core/memory2/capture.d.ts +15 -12
  42. package/dist/core/memory2/capture.d.ts.map +1 -1
  43. package/dist/core/memory2/capture.js +32 -22
  44. package/dist/core/memory2/capture.js.map +1 -1
  45. package/dist/core/memory2/config.d.ts +3 -7
  46. package/dist/core/memory2/config.d.ts.map +1 -1
  47. package/dist/core/memory2/config.js +3 -13
  48. package/dist/core/memory2/config.js.map +1 -1
  49. package/dist/core/memory2/digest.d.ts +20 -14
  50. package/dist/core/memory2/digest.d.ts.map +1 -1
  51. package/dist/core/memory2/digest.js +15 -44
  52. package/dist/core/memory2/digest.js.map +1 -1
  53. package/dist/core/memory2/fakeStore.d.ts +26 -0
  54. package/dist/core/memory2/fakeStore.d.ts.map +1 -0
  55. package/dist/core/memory2/fakeStore.js +36 -0
  56. package/dist/core/memory2/fakeStore.js.map +1 -0
  57. package/dist/core/memory2/inject.d.ts +21 -2
  58. package/dist/core/memory2/inject.d.ts.map +1 -1
  59. package/dist/core/memory2/inject.js +4 -18
  60. package/dist/core/memory2/inject.js.map +1 -1
  61. package/dist/core/memory2/types.d.ts +8 -47
  62. package/dist/core/memory2/types.d.ts.map +1 -1
  63. package/dist/core/memory2/types.js +10 -10
  64. package/dist/core/memory2/types.js.map +1 -1
  65. package/dist/engines/MonitorEngine.d.ts.map +1 -1
  66. package/dist/engines/MonitorEngine.js +1 -1
  67. package/dist/engines/MonitorEngine.js.map +1 -1
  68. package/dist/engines/StageEngine.d.ts.map +1 -1
  69. package/dist/engines/StageEngine.js +4 -2
  70. package/dist/engines/StageEngine.js.map +1 -1
  71. package/dist/main.js +1 -1
  72. package/dist/main.js.map +1 -1
  73. package/dist/manager/worker-manager-impl.d.ts +1 -1
  74. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  75. package/dist/manager/worker-manager-impl.js +12 -10
  76. package/dist/manager/worker-manager-impl.js.map +1 -1
  77. package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -1
  78. package/dist/providers/mcp/spsMcpServer.js +124 -116
  79. package/dist/providers/mcp/spsMcpServer.js.map +1 -1
  80. package/dist/providers/media/mediaProviders.js +1 -1
  81. package/dist/providers/media/mediaProviders.js.map +1 -1
  82. package/dist/runtime/backends/claude/ClaudeBackend.d.ts.map +1 -1
  83. package/dist/runtime/backends/claude/ClaudeBackend.js +4 -2
  84. package/dist/runtime/backends/claude/ClaudeBackend.js.map +1 -1
  85. package/dist/seams/memory/index.d.ts +83 -28
  86. package/dist/seams/memory/index.d.ts.map +1 -1
  87. package/dist/seams/memory/index.js +103 -9
  88. package/dist/seams/memory/index.js.map +1 -1
  89. package/dist/seams/memory/optional.d.ts +38 -0
  90. package/dist/seams/memory/optional.d.ts.map +1 -0
  91. package/dist/seams/memory/optional.js +26 -0
  92. package/dist/seams/memory/optional.js.map +1 -0
  93. package/dist/services/MemoryService.d.ts +1 -2
  94. package/dist/services/MemoryService.d.ts.map +1 -1
  95. package/dist/services/MemoryService.js +67 -25
  96. package/dist/services/MemoryService.js.map +1 -1
  97. package/dist/services/SystemService.d.ts +6 -0
  98. package/dist/services/SystemService.d.ts.map +1 -1
  99. package/dist/services/SystemService.js +9 -0
  100. package/dist/services/SystemService.js.map +1 -1
  101. package/dist/services/container.d.ts.map +1 -1
  102. package/dist/services/container.js +1 -0
  103. package/dist/services/container.js.map +1 -1
  104. package/dist/services/executors.d.ts.map +1 -1
  105. package/dist/services/executors.js +1 -1
  106. package/dist/services/executors.js.map +1 -1
  107. package/dist/services/promptPreview.d.ts.map +1 -1
  108. package/dist/services/promptPreview.js +2 -1
  109. package/dist/services/promptPreview.js.map +1 -1
  110. package/docs/help/02-commands.md +2 -2
  111. package/docs/help/05-api.md +2 -2
  112. package/package.json +3 -1
  113. package/dist/core/memory2/claudeMdRule.d.ts +0 -7
  114. package/dist/core/memory2/claudeMdRule.d.ts.map +0 -1
  115. package/dist/core/memory2/claudeMdRule.js +0 -73
  116. package/dist/core/memory2/claudeMdRule.js.map +0 -1
  117. package/dist/core/memory2/ftsIndex.d.ts +0 -8
  118. package/dist/core/memory2/ftsIndex.d.ts.map +0 -1
  119. package/dist/core/memory2/ftsIndex.js +0 -172
  120. package/dist/core/memory2/ftsIndex.js.map +0 -1
  121. package/dist/core/memory2/gc.d.ts +0 -9
  122. package/dist/core/memory2/gc.d.ts.map +0 -1
  123. package/dist/core/memory2/gc.js +0 -45
  124. package/dist/core/memory2/gc.js.map +0 -1
  125. package/dist/core/memory2/lock.d.ts +0 -12
  126. package/dist/core/memory2/lock.d.ts.map +0 -1
  127. package/dist/core/memory2/lock.js +0 -61
  128. package/dist/core/memory2/lock.js.map +0 -1
  129. package/dist/core/memory2/migrate.d.ts +0 -12
  130. package/dist/core/memory2/migrate.d.ts.map +0 -1
  131. package/dist/core/memory2/migrate.js +0 -119
  132. package/dist/core/memory2/migrate.js.map +0 -1
  133. package/dist/core/memory2/recallResult.d.ts +0 -19
  134. package/dist/core/memory2/recallResult.d.ts.map +0 -1
  135. package/dist/core/memory2/recallResult.js +0 -33
  136. package/dist/core/memory2/recallResult.js.map +0 -1
  137. package/dist/core/memory2/redact.d.ts +0 -21
  138. package/dist/core/memory2/redact.d.ts.map +0 -1
  139. package/dist/core/memory2/redact.js +0 -116
  140. package/dist/core/memory2/redact.js.map +0 -1
  141. package/dist/core/memory2/retrieve.d.ts +0 -29
  142. package/dist/core/memory2/retrieve.d.ts.map +0 -1
  143. package/dist/core/memory2/retrieve.js +0 -79
  144. package/dist/core/memory2/retrieve.js.map +0 -1
  145. package/dist/core/memory2/store.d.ts +0 -35
  146. package/dist/core/memory2/store.d.ts.map +0 -1
  147. package/dist/core/memory2/store.js +0 -240
  148. package/dist/core/memory2/store.js.map +0 -1
  149. package/dist/seams/memory-local/client.js +0 -135
  150. package/dist/seams/memory-local/index.d.ts +0 -34
  151. package/dist/seams/memory-local/index.d.ts.map +0 -1
  152. package/dist/seams/memory-local/index.js +0 -58
  153. package/dist/seams/memory-local/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ClaudeSdkBackend.d.ts","sourceRoot":"","sources":["../../../src/core/agents/ClaudeSdkBackend.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKxF,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,YAAW,YAAY;IAavC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAkB;IAEhC,wCAAwC;IACxC,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IACD,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;gBAE3C,IAAI,EAAE,oBAAoB;IAEvD,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI;IAIhE,OAAO,CAAC,IAAI;IAUN,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7C,2CAA2C;IAC3C,OAAO,CAAC,SAAS;IA0BX,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAIlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
1
+ {"version":3,"file":"ClaudeSdkBackend.d.ts","sourceRoot":"","sources":["../../../src/core/agents/ClaudeSdkBackend.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKxF,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,YAAW,YAAY;IAavC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZjC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAkB;IAEhC,wCAAwC;IACxC,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IACD,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;gBAE3C,IAAI,EAAE,oBAAoB;IAEvD,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI;IAIhE,OAAO,CAAC,IAAI;IAUN,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC7C,2CAA2C;IAC3C,OAAO,CAAC,SAAS;IA0BX,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAIlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
@@ -59,6 +59,11 @@ export class ClaudeSdkBackend {
59
59
  // worker 要无人值守地真改文件/跑命令,等价 ACP worker 的 skip-permissions。
60
60
  permissionMode: 'bypassPermissions',
61
61
  systemPrompt: { type: 'preset', preset: 'claude_code' },
62
+ // 🔴 必须显式给,且**不含 `'user'`**:省略 ⇒ SDK 加载全部来源 ⇒ worker 会继承
63
+ // 运行账号 `~/.claude/settings.json` 里 `enabledPlugins` 声明的插件。
64
+ // 2026-08-27 实测:不传 ⇒ 插件表里多出一个用户级插件;给 `['local']` 或 `[]` ⇒ 干净。
65
+ // `'project'` 是加载 CLAUDE.md 的必要条件,`'local'` 是 settings.local.json(模型/端点)。
66
+ settingSources: ['project', 'local'],
62
67
  // claude 自带编码工具;SPS 专属能力经共享 MCP(stdio)挂载。
63
68
  mcpServers: { sps: { type: 'stdio', command: sps.command, args: sps.args } },
64
69
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ClaudeSdkBackend.js","sourceRoot":"","sources":["../../../src/core/agents/ClaudeSdkBackend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClaudeSdkBackend.js","sourceRoot":"","sources":["../../../src/core/agents/ClaudeSdkBackend.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,22 @@
1
+ import type { WorkerOutputEvent } from '../agents/AgentBackend.js';
2
+ import type { MemoryEntry, SaveInput, ScopeRef } from './types.js';
1
3
  /**
2
- * @module core/memory2/capture
3
- * @description 自动捕获(设计 §3 写路 · 默认开):派活前起订 AgentBackend.subscribe 的归一化
4
- * WorkerOutputEvent,按 project:cardId 缓冲;卡片完成(StageEngine.releaseAndDone)
5
- * 抽结论段 → 去重 → 落 store(source: capture)。**只吃归一化事件,绝不碰 jsonl**(红线)。
6
- * 进程内单例登记表:worker-manager(写)与 StageEngine(读+提交)同进程共享(executors.ts)。
7
- * SPS_MEMORY_CAPTURE=off 关。
8
- * @layer core
9
- * @boundedContext memory
4
+ * 捕获用到的**数据面**,由调用方(worker-manager / StageEngine)从 `sps.memory` seam 传入。
5
+ *
6
+ * 🔴 这里刻意**不 import `MemorySeam`** —— seam 已经 import 了本目录的类型,
7
+ * 反向依赖会成环。用结构类型声明「我只需要这四件」,`MemorySeam` 天然兼容,
8
+ * 换后端时这段一个字都不用改。
10
9
  */
11
- import type { WorkerOutputEvent } from '../agents/AgentBackend.js';
12
- import type { MemoryEntry } from './types.js';
10
+ export interface CaptureStore {
11
+ enabled(): boolean;
12
+ listEntries(ref: ScopeRef): MemoryEntry[];
13
+ saveEntry(ref: ScopeRef, input: SaveInput): MemoryEntry;
14
+ reindex(ref: ScopeRef): void;
15
+ }
13
16
  /** 归一化文本用于去重:小写、去 markdown 标点、压空白。 */
14
17
  export declare function normalizeForDedup(s: string): string;
15
18
  /** 派活前起订:建空 buffer(幂等)。off 时不建(flush 会返 skipped)。 */
16
- export declare function captureStart(project: string, cardId: string): void;
19
+ export declare function captureStart(mem: CaptureStore, project: string, cardId: string): void;
17
20
  /** 绑退订函数(subscribe 的返回值);flush/discard 时自动调用。buffer 不存在则立即退订。 */
18
21
  export declare function captureBindUnsub(project: string, cardId: string, unsub: () => void): void;
19
22
  /** 把一条归一化事件喂进 buffer(text 累积;result 记为最终结论)。无 buffer 则忽略。 */
@@ -31,5 +34,5 @@ export type CaptureOutcome = {
31
34
  * 卡片完成时调用。distill=on → 异步 LLM 蒸馏整段叙述成多条实质记忆(设计 §5);否则规则版取末尾结论段。
32
35
  * 无论结果都清 buffer。捕获层异常不阻断卡片完成(调用方仍 try/catch 兜底)。
33
36
  */
34
- export declare function captureFlush(project: string, cardId: string): CaptureOutcome;
37
+ export declare function captureFlush(mem: CaptureStore, project: string, cardId: string): CaptureOutcome;
35
38
  //# sourceMappingURL=capture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAMnE,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,YAAY,CAAC;AAiBxD,sCAAsC;AACtC,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGlE;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,CAIzF;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAKxF;AAED,mCAAmC;AACnC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIpE;AA6BD,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GACtB;IAAE,UAAU,EAAE,IAAI,CAAA;CAAE,GACpB;IAAE,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;CAAE,CAAC;AA+B1E;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAwB5E"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/capture.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,IAAI,OAAO,CAAC;IACnB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC;IACxD,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC9B;AAiBD,sCAAsC;AACtC,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGrF;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,CAIzF;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAKxF;AAED,mCAAmC;AACnC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIpE;AA6BD,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GACtB;IAAE,UAAU,EAAE,IAAI,CAAA;CAAE,GACpB;IAAE,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;CAAE,CAAC;AAiC1E;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAwB/F"}
@@ -1,21 +1,29 @@
1
- import { distillEnabled, isMemoryOff } from './config.js';
2
- import { writeMemoryIndex } from './digest.js';
1
+ /**
2
+ * @module core/memory2/capture
3
+ * @description 自动捕获(设计 §3 写路 · 默认开):派活前起订 AgentBackend.subscribe 的归一化
4
+ * WorkerOutputEvent,按 project:cardId 缓冲;卡片完成(StageEngine.releaseAndDone)
5
+ * 抽结论段 → 去重 → 落 store(source: capture)。**只吃归一化事件,绝不碰 jsonl**(红线)。
6
+ * 进程内单例登记表:worker-manager(写)与 StageEngine(读+提交)同进程共享(executors.ts)。
7
+ * SPS_MEMORY_CAPTURE=off 关。
8
+ * @layer core
9
+ * @boundedContext memory
10
+ */
11
+ import { MEMORY_REDACTED_CODE } from '@coralai/sps-plugin-api';
12
+ import { distillEnabled } from './config.js';
3
13
  import { distillNarrative } from './distill.js';
4
- import { RedactedEntryDropped } from './redact.js';
5
- import { listEntries, saveEntry } from './store.js';
6
14
  const buffers = new Map();
7
15
  const key = (project, cardId) => `${project}::${cardId}`;
8
- function isOff() {
9
- // mode=none 整体关,或显式 SPS_MEMORY_CAPTURE=off 细关。
10
- return isMemoryOff() || (process.env.SPS_MEMORY_CAPTURE ?? '').toLowerCase() === 'off';
16
+ function isOff(mem) {
17
+ // 后端整体关(本地实现读 mode=none),或显式 SPS_MEMORY_CAPTURE=off 细关。
18
+ return !mem.enabled() || (process.env.SPS_MEMORY_CAPTURE ?? '').toLowerCase() === 'off';
11
19
  }
12
20
  /** 归一化文本用于去重:小写、去 markdown 标点、压空白。 */
13
21
  export function normalizeForDedup(s) {
14
22
  return s.toLowerCase().replace(/[#*`_>\-\s]+/g, ' ').replace(/[^\p{L}\p{N} ]+/gu, '').trim();
15
23
  }
16
24
  /** 派活前起订:建空 buffer(幂等)。off 时不建(flush 会返 skipped)。 */
17
- export function captureStart(project, cardId) {
18
- if (isOff())
25
+ export function captureStart(mem, project, cardId) {
26
+ if (isOff(mem))
19
27
  return;
20
28
  buffers.set(key(project, cardId), { texts: [] });
21
29
  }
@@ -69,45 +77,47 @@ function titleOf(body) {
69
77
  return t.length > 80 ? `${t.slice(0, 80)}…` : t;
70
78
  }
71
79
  /** 一条(去重后)落库。返回落盘的 entry 或 null(重复/脱敏丢弃)。 */
72
- function persist(ref, m, seen) {
80
+ function persist(mem, ref, m, seen) {
73
81
  if (seen.has(normalizeForDedup(m.body)))
74
82
  return null;
75
83
  try {
76
- const saved = saveEntry(ref, { title: m.title, body: m.body, category: m.category, tags: m.tags, source: 'capture', salience: m.salience ?? 2 });
84
+ const saved = mem.saveEntry(ref, { title: m.title, body: m.body, category: m.category, tags: m.tags, source: 'capture', salience: m.salience ?? 2 });
77
85
  seen.add(normalizeForDedup(saved.body));
78
86
  return saved;
79
87
  }
80
88
  catch (err) {
81
- if (err instanceof RedactedEntryDropped)
89
+ // 🔴 用**契约码**而不是 instanceof:后端是独立的包,它的异常类不在宿主这边,
90
+ // instanceof 跨包永远为 false(而症状是"脱敏丢弃被当成真错误抛出去")。
91
+ if (err?.code === MEMORY_REDACTED_CODE)
82
92
  return null;
83
93
  throw err;
84
94
  }
85
95
  }
86
96
  /** LLM 蒸馏(异步 fire-and-forget):整段叙述 → N 条实质记忆;LLM 不可用则回退规则版单条结论。 */
87
- async function distillAndSave(project, narrative) {
97
+ async function distillAndSave(mem, project, narrative) {
88
98
  const ref = { scope: 'project', project };
89
- const seen = new Set(listEntries(ref).map((e) => normalizeForDedup(e.body)));
99
+ const seen = new Set(mem.listEntries(ref).map((e) => normalizeForDedup(e.body)));
90
100
  const memories = await distillNarrative(narrative);
91
101
  let n = 0;
92
102
  if (memories && memories.length) {
93
103
  for (const m of memories)
94
- if (persist(ref, m, seen))
104
+ if (persist(mem, ref, m, seen))
95
105
  n++;
96
106
  }
97
107
  else {
98
108
  // LLM 挂/返空 → 回退规则版单条(不丢这次捕获)
99
109
  const concl = conclusionOf(narrative);
100
- if (concl && persist(ref, { title: titleOf(concl), body: concl, category: 'note' }, seen))
110
+ if (concl && persist(mem, ref, { title: titleOf(concl), body: concl, category: 'note' }, seen))
101
111
  n++;
102
112
  }
103
113
  if (n)
104
- writeMemoryIndex(ref);
114
+ mem.reindex(ref);
105
115
  }
106
116
  /**
107
117
  * 卡片完成时调用。distill=on → 异步 LLM 蒸馏整段叙述成多条实质记忆(设计 §5);否则规则版取末尾结论段。
108
118
  * 无论结果都清 buffer。捕获层异常不阻断卡片完成(调用方仍 try/catch 兜底)。
109
119
  */
110
- export function captureFlush(project, cardId) {
120
+ export function captureFlush(mem, project, cardId) {
111
121
  const k = key(project, cardId);
112
122
  const buf = buffers.get(k);
113
123
  buffers.delete(k);
@@ -118,7 +128,7 @@ export function captureFlush(project, cardId) {
118
128
  if (narrative.length < MIN_LEN)
119
129
  return { skipped: buf.texts.length || buf.result ? 'too-short' : 'empty' };
120
130
  if (distillEnabled()) {
121
- void distillAndSave(project, narrative).catch(() => { }); // 异步,不阻塞卡片收尾
131
+ void distillAndSave(mem, project, narrative).catch(() => { }); // 异步,不阻塞卡片收尾
122
132
  return { distilling: true };
123
133
  }
124
134
  // 规则版:单条结论
@@ -126,11 +136,11 @@ export function captureFlush(project, cardId) {
126
136
  const concl = conclusionOf(narrative);
127
137
  if (!concl)
128
138
  return { skipped: 'too-short' };
129
- const seen = new Set(listEntries(ref).map((e) => normalizeForDedup(e.body)));
130
- const saved = persist(ref, { title: titleOf(concl), body: concl, category: 'note' }, seen);
139
+ const seen = new Set(mem.listEntries(ref).map((e) => normalizeForDedup(e.body)));
140
+ const saved = persist(mem, ref, { title: titleOf(concl), body: concl, category: 'note' }, seen);
131
141
  if (!saved)
132
142
  return { skipped: 'duplicate' };
133
- writeMemoryIndex(ref);
143
+ mem.reindex(ref);
134
144
  return { saved };
135
145
  }
136
146
  //# sourceMappingURL=capture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/core/memory2/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/core/memory2/capture.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * @module core/memory2/config
3
- * @description 记忆 v2 运行模式(设计 §8)SPS_MEMORY_MODE = local(默认)| local+external |
3
+ * @description **只剩宿主机制的配置**(蒸馏)。运行模式(`SPS_MEMORY_MODE`)归后端,
4
+ * 由 `sps.memory` 的 `enabled()` 表达 —— 宿主不认识那个键。
5
+ * @orig-description 记忆 v2 运行模式(设计 §8)。SPS_MEMORY_MODE = local(默认)| local+external |
4
6
  * external | none。此处只做「本地读写是否启用」这个**当前真需要**的判定:mode=none
5
7
  * → 本地注入/捕获全关。
6
8
  *
@@ -8,19 +10,13 @@
8
10
  * ⚠️ 刻意未实现(YAGNI,设计 §4/§5 明列「按需、默认关、需要才建」):
9
11
  * - external / local+external 的外部后端适配器与合并(RRF)——无已接外部后端、无 scale 压力;
10
12
  * - embedding 向量混检、LLM 蒸馏。
11
- * 需求出现时,在此扩 `memoryMode()` 的分支 + 加一层可选适配器即可,基线纯本地永远能跑。
12
13
  * @layer core
13
14
  * @boundedContext memory
14
15
  */
15
- export type MemoryMode = 'local' | 'local+external' | 'external' | 'none';
16
16
  /** 写配置(SystemService.writeMemory)后调用,让长命进程无需重启即读到新值。 */
17
17
  export declare function resetMemoryEnvCache(): void;
18
18
  /** 读 memory 相关 env:优先 process.env(显式覆盖),回落 ~/.coral/env。 */
19
19
  export declare function memoryEnv(key: string): string | undefined;
20
- /** 读运行模式。未配置/非法值 → 'local'。 */
21
- export declare function memoryMode(): MemoryMode;
22
- /** 记忆整体是否关闭(mode=none):关则本地注入与捕获都不做。 */
23
- export declare function isMemoryOff(): boolean;
24
20
  /** 是否启用 LLM 蒸馏捕获(SPS_MEMORY_DISTILL=on)。关则走规则版(取末尾结论段)。 */
25
21
  export declare function distillEnabled(): boolean;
26
22
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAAC;AAW1E,wDAAwD;AACxD,wBAAgB,mBAAmB,IAAI,IAAI,CAAqB;AAEhE,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzD;AAED,+BAA+B;AAC/B,wBAAgB,UAAU,IAAI,UAAU,CAIvC;AAED,wCAAwC;AACxC,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAID,2DAA2D;AAC3D,wBAAgB,cAAc,IAAI,OAAO,CAExC;AACD;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AACD,uBAAuB;AACvB,wBAAgB,YAAY,IAAI,MAAM,CAErC;AACD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAWtC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH,wDAAwD;AACxD,wBAAgB,mBAAmB,IAAI,IAAI,CAAqB;AAEhE,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzD;AAID,2DAA2D;AAC3D,wBAAgB,cAAc,IAAI,OAAO,CAExC;AACD;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AACD,uBAAuB;AACvB,wBAAgB,YAAY,IAAI,MAAM,CAErC;AACD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAWtC"}
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * @module core/memory2/config
3
- * @description 记忆 v2 运行模式(设计 §8)SPS_MEMORY_MODE = local(默认)| local+external |
3
+ * @description **只剩宿主机制的配置**(蒸馏)。运行模式(`SPS_MEMORY_MODE`)归后端,
4
+ * 由 `sps.memory` 的 `enabled()` 表达 —— 宿主不认识那个键。
5
+ * @orig-description 记忆 v2 运行模式(设计 §8)。SPS_MEMORY_MODE = local(默认)| local+external |
4
6
  * external | none。此处只做「本地读写是否启用」这个**当前真需要**的判定:mode=none
5
7
  * → 本地注入/捕获全关。
6
8
  *
@@ -8,7 +10,6 @@
8
10
  * ⚠️ 刻意未实现(YAGNI,设计 §4/§5 明列「按需、默认关、需要才建」):
9
11
  * - external / local+external 的外部后端适配器与合并(RRF)——无已接外部后端、无 scale 压力;
10
12
  * - embedding 向量混检、LLM 蒸馏。
11
- * 需求出现时,在此扩 `memoryMode()` 的分支 + 加一层可选适配器即可,基线纯本地永远能跑。
12
13
  * @layer core
13
14
  * @boundedContext memory
14
15
  */
@@ -36,17 +37,6 @@ export function resetMemoryEnvCache() { _fileEnv = null; }
36
37
  export function memoryEnv(key) {
37
38
  return process.env[key] ?? fileEnv()[key];
38
39
  }
39
- /** 读运行模式。未配置/非法值 → 'local'。 */
40
- export function memoryMode() {
41
- const raw = (memoryEnv('SPS_MEMORY_MODE') ?? '').toLowerCase();
42
- if (raw === 'none' || raw === 'external' || raw === 'local+external')
43
- return raw;
44
- return 'local';
45
- }
46
- /** 记忆整体是否关闭(mode=none):关则本地注入与捕获都不做。 */
47
- export function isMemoryOff() {
48
- return memoryMode() === 'none';
49
- }
50
40
  // ─── LLM 蒸馏(设计 §5,默认关)——完成时把整段会话叙述提炼成多条实质记忆 ───
51
41
  /** 是否启用 LLM 蒸馏捕获(SPS_MEMORY_DISTILL=on)。关则走规则版(取末尾结论段)。 */
52
42
  export function distillEnabled() {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/memory2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,+EAA+E;AAC/E,2DAA2D;AAC3D,IAAI,QAAQ,GAAkC,IAAI,CAAC;AACnD,SAAS,OAAO;IACd,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAC3C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QAAC,QAAQ,GAAG,aAAa,EAA4B,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,QAAQ,GAAG,EAAE,CAAC;IAAC,CAAC;IACtF,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD,wDAAwD;AACxD,MAAM,UAAU,mBAAmB,KAAW,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;AAEhE,4DAA4D;AAC5D,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,gBAAgB;QAAE,OAAO,GAAG,CAAC;IACjF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,EAAE,KAAK,MAAM,CAAC;AACjC,CAAC;AAED,iDAAiD;AAEjD,2DAA2D;AAC3D,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;AACxE,CAAC;AACD;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AACD,uBAAuB;AACvB,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACrD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;QAClG,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/memory2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,+EAA+E;AAC/E,2DAA2D;AAC3D,IAAI,QAAQ,GAAkC,IAAI,CAAC;AACnD,SAAS,OAAO;IACd,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAC3C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QAAC,QAAQ,GAAG,aAAa,EAA4B,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,QAAQ,GAAG,EAAE,CAAC;IAAC,CAAC;IACtF,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD,wDAAwD;AACxD,MAAM,UAAU,mBAAmB,KAAW,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;AAEhE,4DAA4D;AAC5D,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,iDAAiD;AAEjD,2DAA2D;AAC3D,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;AACxE,CAAC;AACD;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AACD,uBAAuB;AACvB,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACrD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;QAClG,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,16 +1,22 @@
1
+ /**
2
+ * @module core/memory2/digest
3
+ * @description 注入/展示用的紧凑 digest —— 多作用域合并的标题清单。
4
+ * @layer core
5
+ * @boundedContext memory
6
+ *
7
+ * ⚠️ 这里只剩"取哪些条目"这一步。**渲染在契约包**(`buildMemoryDigest`) ——
8
+ * 摘要格式若各后端不同,人看到的东西会跟着换后端变形。
9
+ * 写盘的 `<scope>/MEMORY.md` 归后端:那是本地实现的派生物,不是所有后端都有。
10
+ */
11
+ import { type MemoryDigestOpts } from '@coralai/sps-plugin-api';
1
12
  import type { MemoryEntry, ScopeRef } from './types.js';
2
- export interface DigestOpts {
3
- /** 标题清单最多列几条(默认 60)。 */
4
- maxTitles?: number;
5
- /** 内联几条高 salience 正文(默认 6)。 */
6
- maxBodies?: number;
7
- /** 每条正文最多字符(默认 500)。 */
8
- bodyChars?: number;
9
- }
10
- /** 生成 digest markdown(标题清单 + top 高 salience 正文) */
11
- export declare function buildDigest(entries: MemoryEntry[], opts?: DigestOpts): string;
12
- /** 把某作用域的 digest 落成 <scope>/MEMORY.md(派生,可重建)。 */
13
- export declare function writeMemoryIndex(ref: ScopeRef): void;
14
- /** 供注入用:多作用域合并的紧凑 digest(标题清单;正文靠相关性注入另给)。 */
15
- export declare function buildInjectionDigest(refs: ScopeRef[], opts?: DigestOpts): string;
13
+ /**
14
+ * 多作用域合并的紧凑 digest(标题清单;正文靠相关性检索另给)。
15
+ *
16
+ * 🔴 条目从 `sps.memory` seam 取 —— 原先直读 `scopeDir`/`existsSync`,
17
+ * 那是本地文件系统的假设,换后端就空。`listEntries` 对不存在的作用域返 `[]`。
18
+ */
19
+ export declare function buildInjectionDigest(mem: {
20
+ listEntries(ref: ScopeRef): MemoryEntry[];
21
+ }, refs: ScopeRef[], opts?: MemoryDigestOpts): string;
16
22
  //# sourceMappingURL=digest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/digest.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CA0BjF;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAKpD;AAED,8CAA8C;AAC9C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,GAAE,UAAe,GAAG,MAAM,CAGpF"}
1
+ {"version":3,"file":"digest.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE;IAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE,CAAA;CAAE,EAClD,IAAI,EAAE,QAAQ,EAAE,EAChB,IAAI,GAAE,gBAAqB,GAC1B,MAAM,CAGR"}
@@ -1,51 +1,22 @@
1
1
  /**
2
2
  * @module core/memory2/digest
3
- * @description entries 派生「常驻摘要 digest」(设计 §1B 渐进式披露):标题清单 +
4
- * 高 salience 条目正文,有 token 预算。digest 每次派活/开会话必注入;
5
- * 也落成 <scope>/MEMORY.md(人类可读、派生、勿手改)。
3
+ * @description 注入/展示用的紧凑 digest —— 多作用域合并的标题清单。
6
4
  * @layer core
7
5
  * @boundedContext memory
6
+ *
7
+ * ⚠️ 这里只剩"取哪些条目"这一步。**渲染在契约包**(`buildMemoryDigest`) ——
8
+ * 摘要格式若各后端不同,人看到的东西会跟着换后端变形。
9
+ * 写盘的 `<scope>/MEMORY.md` 归后端:那是本地实现的派生物,不是所有后端都有。
8
10
  */
9
- import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
10
- import { join } from 'node:path';
11
- import { listEntries, scopeDir } from './store.js';
12
- /** 生成 digest markdown(标题清单 + top 高 salience 正文)。 */
13
- export function buildDigest(entries, opts = {}) {
14
- const maxTitles = opts.maxTitles ?? 60;
15
- const maxBodies = opts.maxBodies ?? 6;
16
- const bodyChars = opts.bodyChars ?? 500;
17
- if (entries.length === 0)
18
- return '';
19
- // salience 高→低,再新鲜度
20
- const ranked = entries.slice().sort((a, b) => b.salience - a.salience || b.updated.localeCompare(a.updated));
21
- const lines = ['# 记忆摘要', ''];
22
- lines.push('## 索引');
23
- for (const e of ranked.slice(0, maxTitles)) {
24
- const tags = e.tags.length ? ` #${e.tags.join(' #')}` : '';
25
- lines.push(`- [${e.id}] (${e.category}, s${e.salience}) ${e.title}${tags}`);
26
- }
27
- if (ranked.length > maxTitles)
28
- lines.push(`- …还有 ${ranked.length - maxTitles} 条(用 memory_recall 检索)`);
29
- const bodies = ranked.slice(0, maxBodies);
30
- if (bodies.length) {
31
- lines.push('', '## 高显著度');
32
- for (const e of bodies) {
33
- const body = e.body.length > bodyChars ? `${e.body.slice(0, bodyChars)}…` : e.body;
34
- lines.push('', `### ${e.title}`, body);
35
- }
36
- }
37
- return lines.join('\n').trim();
38
- }
39
- /** 把某作用域的 digest 落成 <scope>/MEMORY.md(派生,可重建)。 */
40
- export function writeMemoryIndex(ref) {
41
- const dir = scopeDir(ref);
42
- mkdirSync(dir, { recursive: true });
43
- const digest = buildDigest(listEntries(ref));
44
- writeFileSync(join(dir, 'MEMORY.md'), digest ? `${digest}\n` : '');
45
- }
46
- /** 供注入用:多作用域合并的紧凑 digest(标题清单;正文靠相关性注入另给)。 */
47
- export function buildInjectionDigest(refs, opts = {}) {
48
- const all = refs.flatMap((r) => (existsSync(scopeDir(r)) ? listEntries(r) : []));
49
- return buildDigest(all, { maxBodies: 0, ...opts });
11
+ import { buildMemoryDigest } from '@coralai/sps-plugin-api';
12
+ /**
13
+ * 多作用域合并的紧凑 digest(标题清单;正文靠相关性检索另给)。
14
+ *
15
+ * 🔴 条目从 `sps.memory` seam 取 —— 原先直读 `scopeDir`/`existsSync`,
16
+ * 那是本地文件系统的假设,换后端就空。`listEntries` 对不存在的作用域返 `[]`。
17
+ */
18
+ export function buildInjectionDigest(mem, refs, opts = {}) {
19
+ const all = refs.flatMap((r) => mem.listEntries(r));
20
+ return buildMemoryDigest(all, { maxBodies: 0, ...opts });
50
21
  }
51
22
  //# sourceMappingURL=digest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../../src/core/memory2/digest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../../src/core/memory2/digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,iBAAiB,EAAyB,MAAM,yBAAyB,CAAC;AAGnF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAkD,EAClD,IAAgB,EAChB,OAAyB,EAAE;IAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @module core/memory2/fakeStore
3
+ * @description **测试替身** —— 内存里的记忆数据面,供宿主的机制测试使用。
4
+ * @layer core
5
+ * @boundedContext memory
6
+ *
7
+ * 🔴 宿主的机制(捕获/注入/蒸馏)测试**不该依赖任何真实后端** ——
8
+ * 真实的存储实现已经在独立插件包里,宿主编译时看不见它。
9
+ * 这也是个好判据:如果某个机制测试非要真 store 才能跑,
10
+ * 说明那段"机制"其实混进了后端的东西。
11
+ *
12
+ * ⚠️ 它实现的是 `CaptureStore`/`InjectStore` 那几个结构接口,不是完整的 `MemorySeam`。
13
+ */
14
+ import type { MemoryEntry, SaveInput, ScopeRef } from './types.js';
15
+ export interface FakeStore {
16
+ enabled(): boolean;
17
+ listEntries(ref: ScopeRef): MemoryEntry[];
18
+ saveEntry(ref: ScopeRef, input: SaveInput): MemoryEntry;
19
+ reindex(ref: ScopeRef): void;
20
+ /** 测试用:重建次数 —— 用来断言"批量写完只重建一次"。 */
21
+ reindexCount: number;
22
+ }
23
+ export declare function createFakeStore(opts?: {
24
+ enabled?: boolean;
25
+ }): FakeStore;
26
+ //# sourceMappingURL=fakeStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fakeStore.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/fakeStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAInE,MAAM,WAAW,SAAS;IACxB,OAAO,IAAI,OAAO,CAAC;IACnB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC;IACxD,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC7B,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,SAAS,CAiC3E"}
@@ -0,0 +1,36 @@
1
+ const keyOf = (r) => `${r.scope}:${r.project ?? r.agentId ?? ''}`;
2
+ export function createFakeStore(opts = {}) {
3
+ const byScope = new Map();
4
+ let seq = 0;
5
+ return {
6
+ reindexCount: 0,
7
+ enabled: () => opts.enabled ?? true,
8
+ listEntries: (ref) => byScope.get(keyOf(ref)) ?? [],
9
+ saveEntry(ref, input) {
10
+ const k = keyOf(ref);
11
+ const now = new Date(0).toISOString();
12
+ seq += 1;
13
+ const e = {
14
+ id: input.id ?? `m-fake${seq}`,
15
+ title: input.title,
16
+ body: input.body,
17
+ scope: ref.scope,
18
+ category: input.category ?? 'note',
19
+ tags: input.tags ?? [],
20
+ salience: input.salience ?? 2,
21
+ uses: 0,
22
+ source: input.source ?? 'human',
23
+ created: now,
24
+ updated: now,
25
+ ...(input.project ?? ref.project ? { project: input.project ?? ref.project } : {}),
26
+ };
27
+ const list = byScope.get(k) ?? [];
28
+ byScope.set(k, [...list.filter((x) => x.id !== e.id), e]);
29
+ return e;
30
+ },
31
+ reindex() {
32
+ this.reindexCount += 1;
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=fakeStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fakeStore.js","sourceRoot":"","sources":["../../../src/core/memory2/fakeStore.ts"],"names":[],"mappings":"AAeA,MAAM,KAAK,GAAG,CAAC,CAAW,EAAU,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;AAWpF,MAAM,UAAU,eAAe,CAAC,OAA8B,EAAE;IAC9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IACjD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO;QACL,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;QACnC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QACnD,SAAS,CAAC,GAAG,EAAE,KAAK;YAClB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACtC,GAAG,IAAI,CAAC,CAAC;YACT,MAAM,CAAC,GAAgB;gBACrB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,SAAS,GAAG,EAAE;gBAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM;gBAClC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;gBAC7B,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,OAAO;gBAC/B,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,GAAG;gBACZ,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnF,CAAC;YACF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO;YACL,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,23 @@
1
- import type { ScopeRef } from './types.js';
1
+ /**
2
+ * @module core/memory2/inject
3
+ * @description 读路注入(设计 §3):派活/开会话前把记忆拼成 `<memory>` 块 = 常驻 digest
4
+ * (标题清单)+ 按当前任务文本相关性检索的 top-K 正文。worker 走 project+global,
5
+ * harness 走 agent+global。agent 无关——只产出文本,由派活方 prepend 进 prompt。
6
+ * @layer core
7
+ * @boundedContext memory
8
+ */
9
+ import type { MemoryEntry, ScopeRef } from './types.js';
10
+ /**
11
+ * 注入只需要"这些作用域下共有几条"。由调用方从 `sps.memory` seam 传入。
12
+ *
13
+ * 🔴 不 import `MemorySeam`(会与 seams 成环),也**不再碰 `scopeDir`/`existsSync`** ——
14
+ * 那是本地文件系统的假设,一个远程后端根本没有目录。
15
+ * `listEntries` 对不存在的作用域返回 `[]`,原先那层 existsSync 过滤是多余的。
16
+ */
17
+ export interface InjectStore {
18
+ enabled(): boolean;
19
+ listEntries(ref: ScopeRef): MemoryEntry[];
20
+ }
2
21
  /**
3
22
  * 拼 `<memory>` 注入块 —— **只出一行指针,不再喂摘要内容**(设计决策:内容退回 store,按需 pull)。
4
23
  *
@@ -13,5 +32,5 @@ import type { ScopeRef } from './types.js';
13
32
  * @param refs 作用域集(worker: [project, global];harness: [agent, global])。
14
33
  * 无任何记忆时返回 ''(派活方据此决定是否 prepend)。
15
34
  */
16
- export declare function buildMemoryInjection(refs: ScopeRef[]): string;
35
+ export declare function buildMemoryInjection(mem: InjectStore, refs: ScopeRef[]): string;
17
36
  //# sourceMappingURL=inject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/inject.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAa7D"}
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/inject.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC;IACnB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;CAC3C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAW/E"}
@@ -1,14 +1,3 @@
1
- /**
2
- * @module core/memory2/inject
3
- * @description 读路注入(设计 §3):派活/开会话前把记忆拼成 `<memory>` 块 = 常驻 digest
4
- * (标题清单)+ 按当前任务文本相关性检索的 top-K 正文。worker 走 project+global,
5
- * harness 走 agent+global。agent 无关——只产出文本,由派活方 prepend 进 prompt。
6
- * @layer core
7
- * @boundedContext memory
8
- */
9
- import { existsSync } from 'node:fs';
10
- import { isMemoryOff } from './config.js';
11
- import { listEntries, scopeDir } from './store.js';
12
1
  /**
13
2
  * 拼 `<memory>` 注入块 —— **只出一行指针,不再喂摘要内容**(设计决策:内容退回 store,按需 pull)。
14
3
  *
@@ -23,13 +12,10 @@ import { listEntries, scopeDir } from './store.js';
23
12
  * @param refs 作用域集(worker: [project, global];harness: [agent, global])。
24
13
  * 无任何记忆时返回 ''(派活方据此决定是否 prepend)。
25
14
  */
26
- export function buildMemoryInjection(refs) {
27
- if (isMemoryOff())
28
- return ''; // mode=none:不注入
29
- const present = refs.filter((r) => existsSync(scopeDir(r)));
30
- if (present.length === 0)
31
- return '';
32
- const n = present.reduce((sum, r) => sum + listEntries(r).length, 0);
15
+ export function buildMemoryInjection(mem, refs) {
16
+ if (!mem.enabled())
17
+ return ''; // 后端关着(本地实现:mode=none):不注入
18
+ const n = refs.reduce((sum, r) => sum + mem.listEntries(r).length, 0);
33
19
  if (n === 0)
34
20
  return '';
35
21
  return (`<memory>本项目有 ${n} 条本地记忆(约定/决策/坑/模式)。` +
@@ -1 +1 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../src/core/memory2/inject.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGnD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,IAAI,WAAW,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,gBAAgB;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvB,OAAO,CACL,gBAAgB,CAAC,qBAAqB;QACtC,wEAAwE;QACxE,WAAW,CACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../src/core/memory2/inject.ts"],"names":[],"mappings":"AAsBA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAgB,EAAE,IAAgB;IACrE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,2BAA2B;IAE1D,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvB,OAAO,CACL,gBAAgB,CAAC,qBAAqB;QACtC,wEAAwE;QACxE,WAAW,CACZ,CAAC;AACJ,CAAC"}