@yandy0725/memory-core 1.0.1 → 2.0.1

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 (53) hide show
  1. package/README.md +77 -11
  2. package/README.zh.md +66 -10
  3. package/dist/config.d.ts +40 -22
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +36 -36
  6. package/dist/config.js.map +1 -1
  7. package/dist/index.d.ts +10 -9
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +5 -5
  10. package/dist/index.js.map +1 -1
  11. package/dist/injection.d.ts +9 -1
  12. package/dist/injection.d.ts.map +1 -1
  13. package/dist/injection.js +10 -3
  14. package/dist/injection.js.map +1 -1
  15. package/dist/orchestration/conversation.d.ts +1 -1
  16. package/dist/orchestration/dream.d.ts +3 -30
  17. package/dist/orchestration/dream.d.ts.map +1 -1
  18. package/dist/orchestration/dream.js +32 -57
  19. package/dist/orchestration/dream.js.map +1 -1
  20. package/dist/orchestration/extract.d.ts +8 -38
  21. package/dist/orchestration/extract.d.ts.map +1 -1
  22. package/dist/orchestration/extract.js +43 -31
  23. package/dist/orchestration/extract.js.map +1 -1
  24. package/dist/orchestration/ports.d.ts +41 -4
  25. package/dist/orchestration/ports.d.ts.map +1 -1
  26. package/dist/orchestration/status.d.ts +19 -0
  27. package/dist/orchestration/status.d.ts.map +1 -0
  28. package/dist/orchestration/status.js +23 -0
  29. package/dist/orchestration/status.js.map +1 -0
  30. package/dist/orchestration/surfacing.d.ts +9 -21
  31. package/dist/orchestration/surfacing.d.ts.map +1 -1
  32. package/dist/orchestration/surfacing.js +31 -35
  33. package/dist/orchestration/surfacing.js.map +1 -1
  34. package/dist/orchestration/task.d.ts +84 -0
  35. package/dist/orchestration/task.d.ts.map +1 -0
  36. package/dist/orchestration/task.js +145 -0
  37. package/dist/orchestration/task.js.map +1 -0
  38. package/dist/orchestration/tasks.d.ts +18 -0
  39. package/dist/orchestration/tasks.d.ts.map +1 -0
  40. package/dist/orchestration/tasks.js +16 -0
  41. package/dist/orchestration/tasks.js.map +1 -0
  42. package/package.json +3 -1
  43. package/src/config.ts +58 -46
  44. package/src/index.ts +19 -9
  45. package/src/injection.ts +18 -4
  46. package/src/orchestration/conversation.ts +1 -1
  47. package/src/orchestration/dream.ts +33 -75
  48. package/src/orchestration/extract.ts +50 -65
  49. package/src/orchestration/ports.ts +29 -4
  50. package/src/orchestration/status.ts +37 -0
  51. package/src/orchestration/surfacing.ts +45 -45
  52. package/src/orchestration/task.ts +236 -0
  53. package/src/orchestration/tasks.ts +22 -0
@@ -95,7 +95,15 @@ export declare const SIDE_QUERY_MAX_ENTRIES = 200;
95
95
  * 不封顶会把 prompt 和每轮迭代开销一起拉爆。
96
96
  */
97
97
  export declare function scanEntries(store: MemoryStore): Promise<EntryManifest[]>;
98
- export declare function renderSurfacedBlock(store: MemoryStore, selectedFiles: string[], maxEntryBytes: number, maxInjectionBytes: number): Promise<string>;
98
+ export declare function renderSurfacedEntries(store: MemoryStore, selectedFiles: string[], maxEntryBytes: number, maxInjectionBytes: number): Promise<{
99
+ files: string[];
100
+ content: string;
101
+ }>;
102
+ /**
103
+ * 单块渲染的兼容入口:只返回渲染文本。
104
+ * 该签名是既有公开契约,保留为 `renderSurfacedEntries` 的薄壳。
105
+ */
106
+ export declare const renderSurfacedBlock: (store: MemoryStore, selectedFiles: string[], maxEntryBytes: number, maxInjectionBytes: number) => Promise<string>;
99
107
  /** Build the side-query task prompt. */
100
108
  export declare function buildSideQueryTask(manifest: EntryManifest[], userPrompt: string, maxFiles: number): string;
101
109
  //# sourceMappingURL=injection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"injection.d.ts","sourceRoot":"","sources":["../src/injection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;GAGG;AACH,eAAO,MAAM,uBAAuB,sDAAsD,CAAC;AAE3F;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CActD;AAeD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,6EAA6E,CAAC;AAwDlH;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAQtD;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAS/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI/G;AAED,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,2DAA2D;AAC3D,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,2CAA2C;AAC3C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAQ9E;AAED,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,MAAM,EAAE,EACvB,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoB1G"}
1
+ {"version":3,"file":"injection.d.ts","sourceRoot":"","sources":["../src/injection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;GAGG;AACH,eAAO,MAAM,uBAAuB,sDAAsD,CAAC;AAE3F;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CActD;AAeD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,6EAA6E,CAAC;AAwDlH;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAQtD;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACd;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAS/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI/G;AAED,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,2DAA2D;AAC3D,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,2CAA2C;AAC3C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAQ9E;AAED,wBAAsB,qBAAqB,CAC1C,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,MAAM,EAAE,EACvB,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB/C;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,UACxB,WAAW,iBACH,MAAM,EAAE,iBACR,MAAM,qBACF,MAAM,KACvB,OAAO,CAAC,MAAM,CACoF,CAAC;AAEtG,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoB1G"}
package/dist/injection.js CHANGED
@@ -174,8 +174,9 @@ export async function scanEntries(store) {
174
174
  .sort((a, b) => a.modified === b.modified ? a.file.localeCompare(b.file) : b.modified.localeCompare(a.modified))
175
175
  .slice(0, SIDE_QUERY_MAX_ENTRIES);
176
176
  }
177
- export async function renderSurfacedBlock(store, selectedFiles, maxEntryBytes, maxInjectionBytes) {
177
+ export async function renderSurfacedEntries(store, selectedFiles, maxEntryBytes, maxInjectionBytes) {
178
178
  const blocks = [];
179
+ const files = [];
179
180
  let totalBytes = 0;
180
181
  for (const file of selectedFiles) {
181
182
  // 经 store 读:v2 的注入单位是 entry 的**正文**,不是整个文件(frontmatter 不进上下文)。
@@ -192,12 +193,18 @@ export async function renderSurfacedBlock(store, selectedFiles, maxEntryBytes, m
192
193
  if (totalBytes + blockBytes > maxInjectionBytes)
193
194
  break;
194
195
  blocks.push(block);
196
+ files.push(file);
195
197
  totalBytes += blockBytes;
196
198
  }
197
199
  if (blocks.length === 0)
198
- return "";
199
- return `<relevant_memories>\n${blocks.join("\n\n")}\n</relevant_memories>`;
200
+ return { files: [], content: "" };
201
+ return { files, content: `<relevant_memories>\n${blocks.join("\n\n")}\n</relevant_memories>` };
200
202
  }
203
+ /**
204
+ * 单块渲染的兼容入口:只返回渲染文本。
205
+ * 该签名是既有公开契约,保留为 `renderSurfacedEntries` 的薄壳。
206
+ */
207
+ export const renderSurfacedBlock = (store, selectedFiles, maxEntryBytes, maxInjectionBytes) => renderSurfacedEntries(store, selectedFiles, maxEntryBytes, maxInjectionBytes).then((r) => r.content);
201
208
  /** Build the side-query task prompt. */
202
209
  export function buildSideQueryTask(manifest, userPrompt, maxFiles) {
203
210
  // `Math.max(1, …)`:空清单不会走到这里(侧查询先返回 []),但除零会得到 Infinity。
@@ -1 +1 @@
1
- {"version":3,"file":"injection.js","sourceRoot":"","sources":["../src/injection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"injection.js","sourceRoot":"","sources":["../src/injection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,mDAAmD,CAAC;AAE3F;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CACnC,OAAe,EACf,QAAgB,EAChB,QAAgB;IAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC7B,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,SAAS,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QAC/C,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,IAAI,SAAS;QAAE,GAAG,IAAI,KAAK,uBAAuB,EAAE,CAAC;IACrD,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,QAAgB;IACjD,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACpF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,0EAA0E,CAAC;AAElH;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAC9E,OAAO,KAAK,CAAC;AACd,CAAC;AAWD;iDACiD;AACjD,SAAS,WAAW,CAAC,KAAe,EAAE,QAAgB,EAAE,QAAgB;IACvE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,IAAI,UAAU,GAAG,IAAI,GAAG,QAAQ;YAAE,MAAM;QACnE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnB,UAAU,IAAI,IAAI,CAAC;IACpB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC3E,gDAAgD;QAChD,6CAA6C;QAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,4DAA4D;QAC5D,4BAA4B;QAC5B,WAAW,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AAC1F,CAAC;AAED,2CAA2C;AAC3C,SAAS,eAAe,CAAC,KAAe;IACvC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CACxC,OAAe,EACf,QAAgB,EAChB,QAAgB;IAEhB,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAEvF,MAAM,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1E,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAClH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,uBAAuB,KAAK,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAChH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACrC,OAAe,EACf,QAAgB,EAChB,QAAgB;IAEhB,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAE7F,MAAM,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1E,OAAO;QACN,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;QAC9B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,SAAS,EAAE,MAAM,CAAC,SAAS;KAC3B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAkB,EAAE,QAAgB,EAAE,QAAgB;IAC7F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvE,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAWD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAC9C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAC5C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAkB;IACnD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,OAAO,SAAS;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC5G,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACd,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAC/F;SACA,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,KAAkB,EAClB,aAAuB,EACvB,aAAqB,EACrB,iBAAyB;IAEzB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QAClC,+DAA+D;QAC/D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAC5E,uDAAuD;QACvD,6BAA6B;QAC7B,6CAA6C;QAC7C,yBAAyB;QACzB,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;QACzF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,UAAU,GAAG,UAAU,GAAG,iBAAiB;YAAE,MAAM;QACvD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,UAAU,IAAI,UAAU,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC3D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,wBAAwB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC;AAChG,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAClC,KAAkB,EAClB,aAAuB,EACvB,aAAqB,EACrB,iBAAyB,EACP,EAAE,CACpB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAEtG,wCAAwC;AACxC,MAAM,UAAU,kBAAkB,CAAC,QAAyB,EAAE,UAAkB,EAAE,QAAgB;IACjG,yDAAyD;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACxB,yBAAyB,EACzB,IAAI,CAAC,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CACpE,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjG,OAAO;QACN,qDAAqD,QAAQ,gDAAgD;QAC7G,kCAAkC;QAClC,EAAE;QACF,sBAAsB;QACtB,GAAG,KAAK;QACR,EAAE;QACF,oBAAoB;QACpB,UAAU;QACV,EAAE;QACF,2EAA2E;KAC3E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
@@ -3,7 +3,7 @@ import type { ExtractMessage } from "./ports.js";
3
3
  * 对话渲染:把中立的 `ExtractMessage` 序列压成 extract prompt 里的那一段文本,
4
4
  * 并在超出预算时做「首尾优先、中段裁减」。
5
5
  *
6
- * 与 `prompts.ts` 分开是为了不打环:prompt 文本依赖渲染结果,而 `runExtract` 依赖 prompt 文本。
6
+ * 与 `prompts.ts` 分开是为了不打环:prompt 文本依赖渲染结果,而 extract 描述符依赖 prompt 文本。
7
7
  */
8
8
  export interface ConversationLimits {
9
9
  maxToolResultChars: number;
@@ -1,31 +1,4 @@
1
- import type { SessionPersistenceConfig } from "../config.js";
2
- import { type MemoryStore } from "../store/memory-store.js";
3
- import type { HeadlessAgentPort } from "./ports.js";
4
- export interface RunDreamOpts {
5
- /** 必填:模型来自显式配置(启动校验已保证可解析),没有父模型回退。 */
6
- model: string;
7
- /** 宿主的思考/推理档位。core 不解释,原样透传给端口。 */
8
- effort?: string;
9
- memoryDir: string;
10
- /** 唯一写入通道。dream 的整轮互斥与快照都挂在它上面。 */
11
- store: MemoryStore;
12
- /** 索引行数硬上限(= `config.memIndexMaxLines`),写进 prompt 让 dream 承担容量管理。 */
13
- maxLines: number;
14
- sessionPersistence?: SessionPersistenceConfig;
15
- }
16
- /**
17
- * 跑一轮 dream:整轮持有进程内逻辑锁 → 对整目录拍一次快照 → 起一个只有 `memory` 工具的
18
- * headless 会话。
19
- *
20
- * 整轮持锁是刻意的:dream 的多次 `replace` / `remove` 必须对同进程的 `memory add` 与 extract
21
- * 呈现为**一个**原子区间,否则用户会在 dream 中途读到半合并的状态。锁在进程内(不是 `.lock`),
22
- * 所以跨进程的其它 worktree 仍能正常写入 —— 它们的每次物理写入只被挡毫秒级。
23
- *
24
- * 其内部的每个原语调用必须带 `{ skipLogicalLock: true, skipSnapshot: true }`(由 `memoryTool`
25
- * 请求字段表达,适配层据此构造子会话的工具),否则它们会去抢自己已持有的锁而自锁到超时,
26
- * 并且会为同一批变更各拍一次快照。
27
- */
28
- export declare function runDream(opts: RunDreamOpts, ports: {
29
- headless: HeadlessAgentPort;
30
- }): Promise<string>;
1
+ import type { MemoryTask } from "./task.js";
2
+ /** dream 描述符:core 自读 `cfg.memIndexMaxLines`,适配层只给触发点与端口。 */
3
+ export declare const dream: MemoryTask<Record<string, never>, string>;
31
4
  //# sourceMappingURL=dream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dream.d.ts","sourceRoot":"","sources":["../../src/orchestration/dream.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC5B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,KAAK,EAAE,WAAW,CAAC;IACnB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAeD;;;;;;;;;;;GAWG;AAEH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,iBAAiB,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC1G"}
1
+ {"version":3,"file":"dream.d.ts","sourceRoot":"","sources":["../../src/orchestration/dream.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAO5C,4DAA4D;AAC5D,eAAO,MAAM,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CA4B3D,CAAC"}
@@ -1,62 +1,37 @@
1
- import { readdir } from "node:fs/promises";
2
- import { join } from "node:path";
3
- import { BACKUP_DIR } from "../store/memory-store.js";
4
- import { createSnapshot } from "../store/snapshot.js";
5
- import { isReservedWindowsName } from "../store/windows-names.js";
6
1
  import { DREAM_ACTIONS } from "../tool/actions.js";
7
2
  import { buildDreamTask } from "./prompts.js";
8
- async function snapshotFiles(memoryDir, platform = process.platform) {
9
- const entries = await readdir(memoryDir, { withFileTypes: true }).catch(() => []);
10
- return (entries
11
- .filter((entry) => entry.isFile() && !entry.name.startsWith("."))
12
- // win32:保留设备名文件按名打开会命中设备(CON 等),`createSnapshot` 的 cp 会失败;
13
- // dream 是 fail-closed 的,一次 cp 失败就打断整轮(与 `MemoryStore` 的 `#entryFiles` 同一契约)。
14
- .filter((entry) => !(platform === "win32" && isReservedWindowsName(entry.name)))
15
- .map((entry) => entry.name)
16
- .sort());
3
+ /** `incomplete` / `not-run` 的短诊断:`cause`,`not-run` 带上 `detail`。 */
4
+ function describeCause(why) {
5
+ return why.detail ? `${why.cause} (${why.detail})` : why.cause;
17
6
  }
18
- /**
19
- * 跑一轮 dream:整轮持有进程内逻辑锁 → 对整目录拍一次快照 → 起一个只有 `memory` 工具的
20
- * headless 会话。
21
- *
22
- * 整轮持锁是刻意的:dream 的多次 `replace` / `remove` 必须对同进程的 `memory add` 与 extract
23
- * 呈现为**一个**原子区间,否则用户会在 dream 中途读到半合并的状态。锁在进程内(不是 `.lock`),
24
- * 所以跨进程的其它 worktree 仍能正常写入 —— 它们的每次物理写入只被挡毫秒级。
25
- *
26
- * 其内部的每个原语调用必须带 `{ skipLogicalLock: true, skipSnapshot: true }`(由 `memoryTool`
27
- * 请求字段表达,适配层据此构造子会话的工具),否则它们会去抢自己已持有的锁而自锁到超时,
28
- * 并且会为同一批变更各拍一次快照。
29
- */
30
- export async function runDream(opts, ports) {
31
- return opts.store.withLogicalLock(async () => {
32
- // 启动自检:忘了包 withLogicalLock 会静默失去整轮互斥。
33
- if (!opts.store.logicalLockActive()) {
34
- throw new Error("dream must run under the memory logical lock");
7
+ /** dream 描述符:core 自读 `cfg.memIndexMaxLines`,适配层只给触发点与端口。 */
8
+ export const dream = {
9
+ id: "dream",
10
+ plan: {
11
+ timeoutMs: 600_000,
12
+ memoryTool: DREAM_ACTIONS,
13
+ lock: "logical+snapshot",
14
+ errorPolicy: "rethrow",
15
+ },
16
+ buildPrompt(cfg) {
17
+ return buildDreamTask(cfg.memIndexMaxLines);
18
+ },
19
+ parse(_cfg, _deps, _input, text) {
20
+ return text;
21
+ },
22
+ notCompleted(_cfg, _deps, _input, why) {
23
+ switch (why.status) {
24
+ case "no-input":
25
+ // 理论不可达(dream 的 prompt 恒有值),但用户显式触发的任务不许静默报成功。
26
+ throw new Error("dream has no input to work with");
27
+ case "lock-busy":
28
+ throw new Error("the dream round could not start: the memory logical lock is busy");
29
+ case "no-output":
30
+ throw new Error("the host ran the dream round but produced no summary");
31
+ case "incomplete":
32
+ case "not-run":
33
+ throw new Error(`the dream round did not complete (${describeCause(why)})`);
35
34
  }
36
- // 进入时对整目录拍一次快照;这一轮里各原语的逐文件快照被 skipSnapshot 跳过。
37
- const files = await snapshotFiles(opts.memoryDir, opts.store.cfg.platform);
38
- await createSnapshot(join(opts.memoryDir, BACKUP_DIR), "dream", files, opts.memoryDir, {
39
- keep: opts.store.cfg.lock.snapshotKeep,
40
- platform: opts.store.cfg.platform,
41
- });
42
- const result = await ports.headless.run({
43
- task: buildDreamTask(opts.maxLines),
44
- cwd: opts.memoryDir,
45
- model: opts.model,
46
- effort: opts.effort,
47
- maxTurns: undefined,
48
- timeoutMs: 600_000,
49
- // 没有裸写权限:dream 的重构能力边界由 7 个原语定义,因此首次可被单测覆盖。
50
- builtinTools: "none",
51
- // dream 专属的 7 个 action;整轮持锁与进入时的全目录快照都在外面,所以两个 skip 都开。
52
- memoryTool: { actions: DREAM_ACTIONS, skipLogicalLock: true, skipSnapshot: true },
53
- sessionPersistence: opts.sessionPersistence,
54
- });
55
- // `null` = 宿主没跑这一轮。dream 是用户显式触发的(`/dream` 或 nudge 确认后),
56
- // 静默返回空摘要会让用户以为合并成功了 —— 显式抛错,由适配层转成失败通知。
57
- if (result === null)
58
- throw new Error("the host did not run the dream round");
59
- return result;
60
- });
61
- }
35
+ },
36
+ };
62
37
  //# sourceMappingURL=dream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dream.js","sourceRoot":"","sources":["../../src/orchestration/dream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dream.js","sourceRoot":"","sources":["../../src/orchestration/dream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,mEAAmE;AACnE,SAAS,aAAa,CAAC,GAAuC;IAC7D,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;AAChE,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,KAAK,GAA8C;IAC/D,EAAE,EAAE,OAAO;IACX,IAAI,EAAE;QACL,SAAS,EAAE,OAAO;QAClB,UAAU,EAAE,aAAa;QACzB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,SAAS;KACtB;IACD,WAAW,CAAC,GAAG;QACd,OAAO,cAAc,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;QACpC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,UAAU;gBACd,+CAA+C;gBAC/C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACpD,KAAK,WAAW;gBACf,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;YACrF,KAAK,WAAW;gBACf,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACzE,KAAK,YAAY,CAAC;YAClB,KAAK,SAAS;gBACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;IACF,CAAC;CACD,CAAC"}
@@ -1,48 +1,18 @@
1
- import type { SessionPersistenceConfig } from "../config.js";
2
- import type { MemoryStore } from "../store/memory-store.js";
3
1
  import { type MemoryAction } from "../tool/actions.js";
4
- import type { HeadlessAgentPort, HostTranscriptPort } from "./ports.js";
5
- export interface RunExtractOpts {
6
- /** 必填:模型来自显式配置(启动校验已保证可解析),没有父模型回退。 */
7
- model: string;
8
- /** 宿主的思考/推理档位。core 不解释,原样透传给端口。 */
9
- effort?: string;
10
- memoryDir: string;
11
- /** 唯一写入通道:extract 的整轮互斥挂在它的 `tryWithLogicalLock` 上。 */
12
- store: MemoryStore;
13
- /** 宿主的原始消息序列(pi 的 `AgentMessage[]` 等),经 `ports.transcript` 转成中立形状。 */
2
+ import type { MemoryTask } from "./task.js";
3
+ /** `runTask(TASKS.extractMemories, …)` 的输入:宿主只给数据,预算由 core 从 `cfg` 自读。 */
4
+ export interface ExtractInput {
14
5
  messages: unknown[];
15
- maxContextTokens: number;
16
- maxToolResultChars: number;
17
- maxAssistantChars: number;
18
- sessionPersistence?: SessionPersistenceConfig;
19
- agentsMdBlocks?: string[];
20
- /**
21
- * 子会话里的 `memory` 工具每成功写入一条就回调一次。
22
- *
23
- * extract 跑在 headless 子会话里,适配层看不到它写了几条,只能靠这个回调计数(用来决定
24
- * 要不要弹「Extracted N memories」)。core 不解释它,只负责透到工具规格里。
25
- */
6
+ agentsMdBlocks: string[];
26
7
  onWrite?: (info: {
27
8
  action: MemoryAction;
28
9
  name?: string;
29
10
  }) => void;
30
11
  }
31
- export interface ExtractPorts {
32
- headless: HeadlessAgentPort;
33
- transcript: HostTranscriptPort;
34
- }
35
- /**
36
- * 跑一轮 extract。
37
- *
38
- * **不等待逻辑锁**:拿不到就跳过本轮并返回 `{ skipped: true }`。extract 在每轮结束都触发,
39
- * 让它排队等 dream(分钟级)只会把一批批早已过时的对话堆在队列里,等 dream 结束后依次重放。
40
- *
41
- * 错误**不吞**:吞掉会让 extract 的失败对用户完全不可见。由调用方决定如何呈现(适配层通常
42
- * 做限流通知)。
43
- */
44
- export declare function runExtract(opts: RunExtractOpts, ports: ExtractPorts): Promise<{
12
+ export interface ExtractResult {
45
13
  skipped: boolean;
46
14
  result?: string;
47
- }>;
15
+ }
16
+ /** extractMemories 描述符:core 自读 `cfg.extractMemories` 的预算,适配层只给宿主数据。 */
17
+ export declare const extractMemories: MemoryTask<ExtractInput, ExtractResult>;
48
18
  //# sourceMappingURL=extract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/orchestration/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,cAAc;IAC9B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,KAAK,EAAE,WAAW,CAAC;IACnB,sEAAsE;IACtE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC/B,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,YAAY,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BhD"}
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/orchestration/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAE,UAAU,CAAC,YAAY,EAAE,aAAa,CAyCnE,CAAC"}
@@ -1,36 +1,48 @@
1
1
  import { MAIN_AGENT_ACTIONS } from "../tool/actions.js";
2
2
  import { buildExtractTask } from "./prompts.js";
3
- /**
4
- * 跑一轮 extract。
5
- *
6
- * **不等待逻辑锁**:拿不到就跳过本轮并返回 `{ skipped: true }`。extract 在每轮结束都触发,
7
- * 让它排队等 dream(分钟级)只会把一批批早已过时的对话堆在队列里,等 dream 结束后依次重放。
8
- *
9
- * 错误**不吞**:吞掉会让 extract 的失败对用户完全不可见。由调用方决定如何呈现(适配层通常
10
- * 做限流通知)。
11
- */
12
- export async function runExtract(opts, ports) {
13
- const messages = ports.transcript.toExtractMessages(opts.messages);
14
- if (messages.length === 0)
15
- return { skipped: true };
16
- const task = buildExtractTask(messages, opts.maxContextTokens, opts.agentsMdBlocks ?? [], {
17
- maxToolResultChars: opts.maxToolResultChars,
18
- maxAssistantChars: opts.maxAssistantChars,
19
- });
20
- const result = await opts.store.tryWithLogicalLock(() => ports.headless.run({
21
- task,
22
- cwd: opts.memoryDir,
23
- model: opts.model,
24
- effort: opts.effort,
3
+ /** extractMemories 描述符:core 自读 `cfg.extractMemories` 的预算,适配层只给宿主数据。 */
4
+ export const extractMemories = {
5
+ id: "extractMemories",
6
+ plan: {
25
7
  maxTurns: 5,
26
8
  timeoutMs: 120_000,
27
- // 没有文件工具:extract 只能通过 memory 原语写。
28
- builtinTools: "none",
29
- memoryTool: { actions: MAIN_AGENT_ACTIONS, skipLogicalLock: true, onWrite: opts.onWrite },
30
- sessionPersistence: opts.sessionPersistence,
31
- }));
32
- if (result === null)
33
- return { skipped: true };
34
- return { skipped: false, result };
35
- }
9
+ memoryTool: MAIN_AGENT_ACTIONS,
10
+ lock: "logical",
11
+ errorPolicy: "rethrow",
12
+ },
13
+ buildPrompt(cfg, deps, input) {
14
+ if (!deps.transcript)
15
+ throw new Error("the extract task requires a transcript port");
16
+ const messages = deps.transcript.toExtractMessages(input.messages);
17
+ // 「判空在锁之前」由 `runTask` 的顺序契约保证(buildPrompt 先于 plan.lock 执行),
18
+ // 这里只做纯计算,不碰 store / lock。
19
+ if (messages.length === 0)
20
+ return null;
21
+ return buildExtractTask(messages, cfg.extractMemories.maxContextTokens, input.agentsMdBlocks, {
22
+ maxToolResultChars: cfg.extractMemories.maxToolResultChars,
23
+ maxAssistantChars: cfg.extractMemories.maxAssistantChars,
24
+ });
25
+ },
26
+ parse(_cfg, _deps, _input, text) {
27
+ return { skipped: false, result: text };
28
+ },
29
+ notCompleted(_cfg, _deps, _input, why) {
30
+ switch (why.status) {
31
+ case "no-input":
32
+ case "lock-busy":
33
+ case "not-run":
34
+ return { skipped: true };
35
+ case "no-output":
36
+ // pi 的空回复一直是 `{ skipped: false, result: "" }`:这一轮确实跑完、只是没写出文本,
37
+ // 得让「Extracted N memories」通知的既有语义活下来。
38
+ return { skipped: false, result: "" };
39
+ case "incomplete":
40
+ // 写入可能已经通过子会话工具发生过:报失败会歪曲一个确实落盘了的轮次。
41
+ return { skipped: false };
42
+ }
43
+ },
44
+ memoryToolHooks(input) {
45
+ return { onWrite: input.onWrite };
46
+ },
47
+ };
36
48
  //# sourceMappingURL=extract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/orchestration/extract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgChD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,IAAoB,EACpB,KAAmB;IAEnB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAEpD,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE;QACzF,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KACzC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE,CACvD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,IAAI;QACJ,GAAG,EAAE,IAAI,CAAC,SAAS;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,OAAO;QAClB,kCAAkC;QAClC,YAAY,EAAE,MAAM;QACpB,UAAU,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;QACzF,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;KAC3C,CAAC,CACF,CAAC;IAEF,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/orchestration/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAehD,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAA4C;IACvE,EAAE,EAAE,iBAAiB;IACrB,IAAI,EAAE;QACL,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,OAAO;QAClB,UAAU,EAAE,kBAAkB;QAC9B,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,SAAS;KACtB;IACD,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnE,4DAA4D;QAC5D,2BAA2B;QAC3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,OAAO,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,gBAAgB,EAAE,KAAK,CAAC,cAAc,EAAE;YAC7F,kBAAkB,EAAE,GAAG,CAAC,eAAe,CAAC,kBAAkB;YAC1D,iBAAiB,EAAE,GAAG,CAAC,eAAe,CAAC,iBAAiB;SACxD,CAAC,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;QAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IACD,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG;QACpC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,UAAU,CAAC;YAChB,KAAK,WAAW,CAAC;YACjB,KAAK,SAAS;gBACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC1B,KAAK,WAAW;gBACf,+DAA+D;gBAC/D,sCAAsC;gBACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YACvC,KAAK,YAAY;gBAChB,qCAAqC;gBACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACF,CAAC;IACD,eAAe,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;CACD,CAAC"}
@@ -6,11 +6,42 @@ import type { MemoryAction } from "../tool/actions.js";
6
6
  * (选中的文件名、dream 的摘要文本、`{ skipped, result }`),由适配层决定怎么呈现。
7
7
  */
8
8
  /**
9
- * 跑一轮受限工具的 headless 会话,返回 assistant 文本。
9
+ * 一轮 headless 会话的结果。
10
10
  *
11
- * `null` = 本轮**未执行**(宿主拒绝、超时、或适配层判定不该跑)。调用方必须能区分
12
- * 「跑了但没写出东西」与「根本没跑」:`runExtract` 靠它决定要不要报 `{ skipped: true }`。
11
+ * **判别规则**:请求**发出之前**就结束 → `not-run`(没跑);**发出之后**没拿到完整文本 →
12
+ * `incomplete`(跑过一部分,写入可能已发生)。`no-output` 是「跑完但终止事件没有任何 assistant
13
+ * 文本」—— 它是 `incomplete` 的极端形态,单独留一个 arm 是因为调用方对「跑了、没写出东西」与
14
+ * 「写了半截」的处置不同。
13
15
  */
16
+ export type HeadlessOutcome =
17
+ /** 跑完并拿到了最终文本。空回复是 `text: ""`,**不是** `no-output`。 */
18
+ {
19
+ status: "completed";
20
+ text: string;
21
+ }
22
+ /** 跑过但拿不到最终文本(终止事件无 assistant 输出)。 */
23
+ | {
24
+ status: "no-output";
25
+ }
26
+ /** 跑过一部分:写入可能已发生。`aborted` 指请求已发出、中途被取消。 */
27
+ | {
28
+ status: "incomplete";
29
+ cause: "max-tokens" | "turn-limit" | "aborted";
30
+ }
31
+ /**
32
+ * 请求从未真正开始:宿主拒绝、模型不可用、适配层判定不该发、请求前就超时。
33
+ * `aborted` 指发出前取消。`detail` 是可选的一句人读诊断(宿主原始报错等)。
34
+ */
35
+ | {
36
+ status: "not-run";
37
+ cause: "host-refused" | "unavailable" | "timeout" | "aborted";
38
+ detail?: string;
39
+ };
40
+ /** 描述符的 `incomplete` 收的那一半:除 `completed` 之外的一切。 */
41
+ export type IncompleteOutcome = Exclude<HeadlessOutcome, {
42
+ status: "completed";
43
+ }>;
44
+ /** 跑一轮受限工具的 headless 会话的请求:core 构造,适配层执行。 */
14
45
  export interface HeadlessRunRequest {
15
46
  /** prompt 全文,由 core 的 `orchestration/prompts.ts` 生成。 */
16
47
  task: string;
@@ -55,7 +86,13 @@ export interface HeadlessRunRequest {
55
86
  };
56
87
  }
57
88
  export interface HeadlessAgentPort {
58
- run(req: HeadlessRunRequest): Promise<string | null>;
89
+ /**
90
+ * 跑一轮受限工具的 headless 会话。
91
+ *
92
+ * 结果必须是 `HeadlessOutcome`:调用方要靠 `status` 区分「跑了但没写出东西」与「根本没跑」
93
+ * (extract 描述符靠它决定要不要报 `{ skipped: true }`)。传输级异常仍可抛。
94
+ */
95
+ run(req: HeadlessRunRequest): Promise<HeadlessOutcome>;
59
96
  }
60
97
  /**
61
98
  * 渲染进 extract prompt 的一条消息。
@@ -1 +1 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/orchestration/ports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,UAAU,EAAE;QACX,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;QACjC,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,MAAM,EAAE,YAAY,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;KAClE,GAAG,IAAI,CAAC;IACT,8BAA8B;IAC9B,kBAAkB,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,iBAAiB;IACjC,GAAG,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACrD;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IAClC,mCAAmC;IACnC,cAAc,CACb,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;CACpD;AAED,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IAClC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;CAChC"}
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/orchestration/ports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe;AAC1B,qDAAqD;AACnD;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACvC,sCAAsC;GACpC;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE;AACzB,4CAA4C;GAC1C;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,CAAA;CAAE;AAC1E;;;GAGG;GACD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzG,mDAAmD;AACnD,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAElF,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;OAGG;IACH,UAAU,EAAE;QACX,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;QACjC,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,MAAM,EAAE,YAAY,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;KAClE,GAAG,IAAI,CAAC;IACT,8BAA8B;IAC9B,kBAAkB,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,iBAAiB;IACjC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACvD;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IAClC,mCAAmC;IACnC,cAAc,CACb,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;CACpD;AAED,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IAClC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;CAChC"}
@@ -0,0 +1,19 @@
1
+ import type { MemoryConfig, ModelTask } from "../config.js";
2
+ /**
3
+ * 一行模块状态:core 只给**数据**,不给文案。怎么措辞、按什么顺序展示,是适配层的事。
4
+ */
5
+ export interface ModuleStatusRow {
6
+ id: ModelTask;
7
+ /** 适配层是否声明实现了该任务(`tasks` 参数里有没有它)。 */
8
+ implemented: boolean;
9
+ /** 该任务是否可用:`dream` 无包级开关恒 `true`,其余取各自的 `enabled`。 */
10
+ enabled: boolean;
11
+ /** 生效模型值(per-task 优先,其次 defaults.model);仅当 `enabled && implemented` 时给出。 */
12
+ model?: string;
13
+ }
14
+ /**
15
+ * 每个任务的模块状态行数据。适配层声明自己实现了哪些任务(`tasks`),core 补上
16
+ * `implemented` / `enabled` / `model` 三样事实;展示顺序与措辞仍是适配层自己的事。
17
+ */
18
+ export declare function moduleStatusRows(cfg: MemoryConfig, tasks: readonly ModelTask[]): ModuleStatusRow[];
19
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/orchestration/status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,SAAS,CAAC;IACd,sCAAsC;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAKD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,eAAe,EAAE,CAalG"}
@@ -0,0 +1,23 @@
1
+ import { taskModel } from "../config.js";
2
+ /** 顺序恒为 dream → extractMemories → autoSurfacing(与 `requiredModels` 同一口径)。 */
3
+ const ORDER = ["dream", "extractMemories", "autoSurfacing"];
4
+ /**
5
+ * 每个任务的模块状态行数据。适配层声明自己实现了哪些任务(`tasks`),core 补上
6
+ * `implemented` / `enabled` / `model` 三样事实;展示顺序与措辞仍是适配层自己的事。
7
+ */
8
+ export function moduleStatusRows(cfg, tasks) {
9
+ return ORDER.map((id) => {
10
+ const implemented = tasks.includes(id);
11
+ // dream 没有包级开关:恒启用。其余取各自的 `enabled`(`deepMerge` 可能把用户写的
12
+ // `null` 子树原样带进来,`?.` 让那类配置按「关闭」读,而不是抛 TypeError)。
13
+ const enabled = id === "dream" ? true : cfg[id]?.enabled === true;
14
+ const row = { id, implemented, enabled };
15
+ if (enabled && implemented) {
16
+ const model = taskModel(cfg, id);
17
+ if (model !== undefined)
18
+ row.model = model;
19
+ }
20
+ return row;
21
+ });
22
+ }
23
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/orchestration/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAgBzC,6EAA6E;AAC7E,MAAM,KAAK,GAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;AAElF;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAiB,EAAE,KAA2B;IAC9E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACvB,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,wDAAwD;QACxD,mDAAmD;QACnD,MAAM,OAAO,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;QAClE,MAAM,GAAG,GAAoB,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC1D,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,30 +1,18 @@
1
- import type { SessionPersistenceConfig } from "../config.js";
2
1
  import type { EntryManifest } from "../injection.js";
3
- import type { HeadlessAgentPort } from "./ports.js";
4
- export interface RunSideQueryOpts {
2
+ import type { MemoryTask } from "./task.js";
3
+ export interface SurfacingInput {
5
4
  /** 本轮的候选清单(`scanEntries` 的产出)。 */
6
5
  manifest: EntryManifest[];
7
6
  /** 用户这一轮的输入(调用方负责先截到预算内)。 */
8
7
  userPrompt: string;
9
8
  /** 本 session 已经注入过的文件,不再重复选。 */
10
9
  injectedFiles: Set<string>;
11
- maxFiles: number;
12
- /** 宿主的思考/推理档位,core 原样透传。 */
13
- effort?: string;
14
- model: string;
15
- /** 子会话 cwd;传 memoryDir。 */
16
- cwd: string;
17
- sessionPersistence?: SessionPersistenceConfig;
18
10
  }
19
- /**
20
- * 跑一轮轻量侧查询,选出与用户输入相关的 entry 文件名。
21
- *
22
- * 超时/失败一律返回 `[]`,**没有回退**:auto-surfacing 是纯增益,选不出来就不注入,
23
- * 绝不因为侧查询挂了而打断用户这一轮。
24
- *
25
- * 返回的是**文件名**,不是注入内容 —— 「注入到哪个通道、本 session 已注入过哪些」是适配层的事。
26
- */
27
- export declare function runSideQuery(opts: RunSideQueryOpts, ports: {
28
- headless: HeadlessAgentPort;
29
- }): Promise<string[]>;
11
+ export interface SurfacingResult {
12
+ /** 本轮真正渲染成功的文件;渲染不出内容时恒为 `[]`(不标记已注入)。 */
13
+ files: string[];
14
+ content: string;
15
+ }
16
+ /** autoSurfacing 描述符:core 自读 `cfg.autoSurfacing` 的预算,适配层只给宿主数据。 */
17
+ export declare const autoSurfacing: MemoryTask<SurfacingInput, SurfacingResult>;
30
18
  //# sourceMappingURL=surfacing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"surfacing.d.ts","sourceRoot":"","sources":["../../src/orchestration/surfacing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAChC,kCAAkC;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAeD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CACjC,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE;IAAE,QAAQ,EAAE,iBAAiB,CAAA;CAAE,GACpC,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBnB"}
1
+ {"version":3,"file":"surfacing.d.ts","sourceRoot":"","sources":["../../src/orchestration/surfacing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC9B,kCAAkC;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC/B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAoBD,mEAAmE;AACnE,eAAO,MAAM,aAAa,EAAE,UAAU,CAAC,cAAc,EAAE,eAAe,CA4BrE,CAAC"}