@coralai/sps-cli 0.89.21 → 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 (147) 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/memory2/capture.d.ts +15 -12
  39. package/dist/core/memory2/capture.d.ts.map +1 -1
  40. package/dist/core/memory2/capture.js +32 -22
  41. package/dist/core/memory2/capture.js.map +1 -1
  42. package/dist/core/memory2/config.d.ts +3 -7
  43. package/dist/core/memory2/config.d.ts.map +1 -1
  44. package/dist/core/memory2/config.js +3 -13
  45. package/dist/core/memory2/config.js.map +1 -1
  46. package/dist/core/memory2/digest.d.ts +20 -14
  47. package/dist/core/memory2/digest.d.ts.map +1 -1
  48. package/dist/core/memory2/digest.js +15 -44
  49. package/dist/core/memory2/digest.js.map +1 -1
  50. package/dist/core/memory2/fakeStore.d.ts +26 -0
  51. package/dist/core/memory2/fakeStore.d.ts.map +1 -0
  52. package/dist/core/memory2/fakeStore.js +36 -0
  53. package/dist/core/memory2/fakeStore.js.map +1 -0
  54. package/dist/core/memory2/inject.d.ts +21 -2
  55. package/dist/core/memory2/inject.d.ts.map +1 -1
  56. package/dist/core/memory2/inject.js +4 -18
  57. package/dist/core/memory2/inject.js.map +1 -1
  58. package/dist/core/memory2/types.d.ts +8 -47
  59. package/dist/core/memory2/types.d.ts.map +1 -1
  60. package/dist/core/memory2/types.js +10 -10
  61. package/dist/core/memory2/types.js.map +1 -1
  62. package/dist/engines/MonitorEngine.d.ts.map +1 -1
  63. package/dist/engines/MonitorEngine.js +1 -1
  64. package/dist/engines/MonitorEngine.js.map +1 -1
  65. package/dist/engines/StageEngine.d.ts.map +1 -1
  66. package/dist/engines/StageEngine.js +4 -2
  67. package/dist/engines/StageEngine.js.map +1 -1
  68. package/dist/main.js +1 -1
  69. package/dist/main.js.map +1 -1
  70. package/dist/manager/worker-manager-impl.d.ts +1 -1
  71. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  72. package/dist/manager/worker-manager-impl.js +12 -10
  73. package/dist/manager/worker-manager-impl.js.map +1 -1
  74. package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -1
  75. package/dist/providers/mcp/spsMcpServer.js +124 -116
  76. package/dist/providers/mcp/spsMcpServer.js.map +1 -1
  77. package/dist/providers/media/mediaProviders.js +1 -1
  78. package/dist/providers/media/mediaProviders.js.map +1 -1
  79. package/dist/seams/memory/index.d.ts +83 -28
  80. package/dist/seams/memory/index.d.ts.map +1 -1
  81. package/dist/seams/memory/index.js +103 -9
  82. package/dist/seams/memory/index.js.map +1 -1
  83. package/dist/seams/memory/optional.d.ts +38 -0
  84. package/dist/seams/memory/optional.d.ts.map +1 -0
  85. package/dist/seams/memory/optional.js +26 -0
  86. package/dist/seams/memory/optional.js.map +1 -0
  87. package/dist/services/MemoryService.d.ts +1 -2
  88. package/dist/services/MemoryService.d.ts.map +1 -1
  89. package/dist/services/MemoryService.js +67 -25
  90. package/dist/services/MemoryService.js.map +1 -1
  91. package/dist/services/SystemService.d.ts +6 -0
  92. package/dist/services/SystemService.d.ts.map +1 -1
  93. package/dist/services/SystemService.js +6 -0
  94. package/dist/services/SystemService.js.map +1 -1
  95. package/dist/services/container.d.ts.map +1 -1
  96. package/dist/services/container.js +1 -0
  97. package/dist/services/container.js.map +1 -1
  98. package/dist/services/executors.d.ts.map +1 -1
  99. package/dist/services/executors.js +1 -1
  100. package/dist/services/executors.js.map +1 -1
  101. package/dist/services/promptPreview.d.ts.map +1 -1
  102. package/dist/services/promptPreview.js +2 -1
  103. package/dist/services/promptPreview.js.map +1 -1
  104. package/docs/help/02-commands.md +2 -2
  105. package/docs/help/05-api.md +2 -2
  106. package/package.json +2 -1
  107. package/dist/core/memory2/claudeMdRule.d.ts +0 -7
  108. package/dist/core/memory2/claudeMdRule.d.ts.map +0 -1
  109. package/dist/core/memory2/claudeMdRule.js +0 -73
  110. package/dist/core/memory2/claudeMdRule.js.map +0 -1
  111. package/dist/core/memory2/ftsIndex.d.ts +0 -8
  112. package/dist/core/memory2/ftsIndex.d.ts.map +0 -1
  113. package/dist/core/memory2/ftsIndex.js +0 -172
  114. package/dist/core/memory2/ftsIndex.js.map +0 -1
  115. package/dist/core/memory2/gc.d.ts +0 -9
  116. package/dist/core/memory2/gc.d.ts.map +0 -1
  117. package/dist/core/memory2/gc.js +0 -45
  118. package/dist/core/memory2/gc.js.map +0 -1
  119. package/dist/core/memory2/lock.d.ts +0 -12
  120. package/dist/core/memory2/lock.d.ts.map +0 -1
  121. package/dist/core/memory2/lock.js +0 -61
  122. package/dist/core/memory2/lock.js.map +0 -1
  123. package/dist/core/memory2/migrate.d.ts +0 -12
  124. package/dist/core/memory2/migrate.d.ts.map +0 -1
  125. package/dist/core/memory2/migrate.js +0 -119
  126. package/dist/core/memory2/migrate.js.map +0 -1
  127. package/dist/core/memory2/recallResult.d.ts +0 -19
  128. package/dist/core/memory2/recallResult.d.ts.map +0 -1
  129. package/dist/core/memory2/recallResult.js +0 -33
  130. package/dist/core/memory2/recallResult.js.map +0 -1
  131. package/dist/core/memory2/redact.d.ts +0 -21
  132. package/dist/core/memory2/redact.d.ts.map +0 -1
  133. package/dist/core/memory2/redact.js +0 -116
  134. package/dist/core/memory2/redact.js.map +0 -1
  135. package/dist/core/memory2/retrieve.d.ts +0 -29
  136. package/dist/core/memory2/retrieve.d.ts.map +0 -1
  137. package/dist/core/memory2/retrieve.js +0 -79
  138. package/dist/core/memory2/retrieve.js.map +0 -1
  139. package/dist/core/memory2/store.d.ts +0 -35
  140. package/dist/core/memory2/store.d.ts.map +0 -1
  141. package/dist/core/memory2/store.js +0 -240
  142. package/dist/core/memory2/store.js.map +0 -1
  143. package/dist/seams/memory-local/client.js +0 -135
  144. package/dist/seams/memory-local/index.d.ts +0 -34
  145. package/dist/seams/memory-local/index.d.ts.map +0 -1
  146. package/dist/seams/memory-local/index.js +0 -58
  147. package/dist/seams/memory-local/index.js.map +0 -1
@@ -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"}