@zhixuan92/multi-model-agent-core 4.2.1 → 4.3.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 (235) hide show
  1. package/README.md +1 -1
  2. package/dist/config/schema.d.ts +3 -0
  3. package/dist/config/schema.d.ts.map +1 -1
  4. package/dist/config/schema.js +7 -4
  5. package/dist/config/schema.js.map +1 -1
  6. package/dist/error-codes.d.ts +1 -0
  7. package/dist/error-codes.d.ts.map +1 -1
  8. package/dist/error-codes.js +2 -0
  9. package/dist/error-codes.js.map +1 -1
  10. package/dist/events/running-headline-sink.d.ts.map +1 -1
  11. package/dist/events/running-headline-sink.js +47 -7
  12. package/dist/events/running-headline-sink.js.map +1 -1
  13. package/dist/events/telemetry-types.d.ts +24 -20
  14. package/dist/events/telemetry-types.d.ts.map +1 -1
  15. package/dist/identity/auth-token-store.d.ts +36 -0
  16. package/dist/identity/auth-token-store.d.ts.map +1 -1
  17. package/dist/identity/auth-token-store.js +71 -2
  18. package/dist/identity/auth-token-store.js.map +1 -1
  19. package/dist/identity/cwd-validator.d.ts.map +1 -1
  20. package/dist/identity/cwd-validator.js +15 -3
  21. package/dist/identity/cwd-validator.js.map +1 -1
  22. package/dist/identity/main-model-resolver.d.ts +14 -0
  23. package/dist/identity/main-model-resolver.d.ts.map +1 -0
  24. package/dist/identity/main-model-resolver.js +83 -0
  25. package/dist/identity/main-model-resolver.js.map +1 -0
  26. package/dist/index.d.ts +3 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +4 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/intake/brief-compiler-slots/delegate.d.ts +10 -11
  31. package/dist/intake/brief-compiler-slots/delegate.d.ts.map +1 -1
  32. package/dist/intake/brief-compiler-slots/delegate.js +12 -14
  33. package/dist/intake/brief-compiler-slots/delegate.js.map +1 -1
  34. package/dist/intake/brief-compiler-slots/execute-plan.js +3 -1
  35. package/dist/intake/brief-compiler-slots/execute-plan.js.map +1 -1
  36. package/dist/intake/context-overflow-estimator.d.ts +33 -0
  37. package/dist/intake/context-overflow-estimator.d.ts.map +1 -0
  38. package/dist/intake/context-overflow-estimator.js +36 -0
  39. package/dist/intake/context-overflow-estimator.js.map +1 -0
  40. package/dist/intake/pipeline.d.ts.map +1 -1
  41. package/dist/intake/pipeline.js +46 -0
  42. package/dist/intake/pipeline.js.map +1 -1
  43. package/dist/intake/plan-extractor.d.ts.map +1 -1
  44. package/dist/intake/plan-extractor.js +10 -1
  45. package/dist/intake/plan-extractor.js.map +1 -1
  46. package/dist/intake/types.d.ts +1 -0
  47. package/dist/intake/types.d.ts.map +1 -1
  48. package/dist/lifecycle/diff-tracker.d.ts +17 -1
  49. package/dist/lifecycle/diff-tracker.d.ts.map +1 -1
  50. package/dist/lifecycle/diff-tracker.js +115 -2
  51. package/dist/lifecycle/diff-tracker.js.map +1 -1
  52. package/dist/lifecycle/handlers/annotate-completion-handler.d.ts +9 -0
  53. package/dist/lifecycle/handlers/annotate-completion-handler.d.ts.map +1 -0
  54. package/dist/lifecycle/handlers/annotate-completion-handler.js +171 -0
  55. package/dist/lifecycle/handlers/annotate-completion-handler.js.map +1 -0
  56. package/dist/lifecycle/handlers/annotate-criteria-handler.d.ts +3 -0
  57. package/dist/lifecycle/handlers/annotate-criteria-handler.d.ts.map +1 -0
  58. package/dist/lifecycle/handlers/annotate-criteria-handler.js +67 -0
  59. package/dist/lifecycle/handlers/annotate-criteria-handler.js.map +1 -0
  60. package/dist/lifecycle/handlers/baseline-handlers.d.ts.map +1 -1
  61. package/dist/lifecycle/handlers/baseline-handlers.js +152 -65
  62. package/dist/lifecycle/handlers/baseline-handlers.js.map +1 -1
  63. package/dist/lifecycle/handlers/files-written-cross-check.d.ts +21 -0
  64. package/dist/lifecycle/handlers/files-written-cross-check.d.ts.map +1 -0
  65. package/dist/lifecycle/handlers/files-written-cross-check.js +85 -0
  66. package/dist/lifecycle/handlers/files-written-cross-check.js.map +1 -0
  67. package/dist/lifecycle/handlers/review-handler.d.ts +3 -0
  68. package/dist/lifecycle/handlers/review-handler.d.ts.map +1 -0
  69. package/dist/lifecycle/handlers/review-handler.js +141 -0
  70. package/dist/lifecycle/handlers/review-handler.js.map +1 -0
  71. package/dist/lifecycle/handlers/rework-handler.d.ts +3 -0
  72. package/dist/lifecycle/handlers/rework-handler.d.ts.map +1 -0
  73. package/dist/lifecycle/handlers/rework-handler.js +77 -0
  74. package/dist/lifecycle/handlers/rework-handler.js.map +1 -0
  75. package/dist/lifecycle/handlers/terminal-handlers.d.ts.map +1 -1
  76. package/dist/lifecycle/handlers/terminal-handlers.js +16 -3
  77. package/dist/lifecycle/handlers/terminal-handlers.js.map +1 -1
  78. package/dist/lifecycle/lifecycle-context.d.ts +4 -0
  79. package/dist/lifecycle/lifecycle-context.d.ts.map +1 -1
  80. package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
  81. package/dist/lifecycle/lifecycle-driver.js +12 -7
  82. package/dist/lifecycle/lifecycle-driver.js.map +1 -1
  83. package/dist/lifecycle/parallel-criteria-routes.d.ts +1 -1
  84. package/dist/lifecycle/parallel-criteria-routes.d.ts.map +1 -1
  85. package/dist/lifecycle/parallel-criteria-routes.js +21 -1
  86. package/dist/lifecycle/parallel-criteria-routes.js.map +1 -1
  87. package/dist/lifecycle/shared-compute.d.ts +9 -0
  88. package/dist/lifecycle/shared-compute.d.ts.map +1 -1
  89. package/dist/lifecycle/shared-compute.js +35 -3
  90. package/dist/lifecycle/shared-compute.js.map +1 -1
  91. package/dist/lifecycle/stage-plan-builder.d.ts.map +1 -1
  92. package/dist/lifecycle/stage-plan-builder.js +65 -85
  93. package/dist/lifecycle/stage-plan-builder.js.map +1 -1
  94. package/dist/lifecycle/stage-plan-types.d.ts +48 -0
  95. package/dist/lifecycle/stage-plan-types.d.ts.map +1 -1
  96. package/dist/lifecycle/stage-progression.d.ts.map +1 -1
  97. package/dist/lifecycle/stage-progression.js +17 -24
  98. package/dist/lifecycle/stage-progression.js.map +1 -1
  99. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  100. package/dist/lifecycle/task-runner.js +12 -1
  101. package/dist/lifecycle/task-runner.js.map +1 -1
  102. package/dist/model-profiles.json +192 -53
  103. package/dist/providers/anthropic-messages-adapter.d.ts +8 -0
  104. package/dist/providers/anthropic-messages-adapter.d.ts.map +1 -1
  105. package/dist/providers/anthropic-messages-adapter.js +16 -1
  106. package/dist/providers/anthropic-messages-adapter.js.map +1 -1
  107. package/dist/providers/file-tracker.d.ts +33 -0
  108. package/dist/providers/file-tracker.d.ts.map +1 -1
  109. package/dist/providers/file-tracker.js +54 -0
  110. package/dist/providers/file-tracker.js.map +1 -1
  111. package/dist/providers/provider-factory.d.ts.map +1 -1
  112. package/dist/providers/provider-factory.js +27 -2
  113. package/dist/providers/provider-factory.js.map +1 -1
  114. package/dist/providers/runner-shell-types.d.ts +14 -0
  115. package/dist/providers/runner-shell-types.d.ts.map +1 -1
  116. package/dist/providers/runner-shell.d.ts.map +1 -1
  117. package/dist/providers/runner-shell.js +103 -26
  118. package/dist/providers/runner-shell.js.map +1 -1
  119. package/dist/providers/tool-implementations.d.ts +12 -0
  120. package/dist/providers/tool-implementations.d.ts.map +1 -1
  121. package/dist/providers/tool-implementations.js +33 -0
  122. package/dist/providers/tool-implementations.js.map +1 -1
  123. package/dist/reporting/annotate-completion-parser.d.ts +39 -0
  124. package/dist/reporting/annotate-completion-parser.d.ts.map +1 -0
  125. package/dist/reporting/annotate-completion-parser.js +43 -0
  126. package/dist/reporting/annotate-completion-parser.js.map +1 -0
  127. package/dist/reporting/compose-running-headline.d.ts +15 -1
  128. package/dist/reporting/compose-running-headline.d.ts.map +1 -1
  129. package/dist/reporting/compose-running-headline.js +76 -1
  130. package/dist/reporting/compose-running-headline.js.map +1 -1
  131. package/dist/reporting/report-parser-slots/research-report.d.ts +1 -1
  132. package/dist/review/default-engines.d.ts.map +1 -1
  133. package/dist/review/default-engines.js +8 -4
  134. package/dist/review/default-engines.js.map +1 -1
  135. package/dist/review/parse-review-report.d.ts +6 -0
  136. package/dist/review/parse-review-report.d.ts.map +1 -0
  137. package/dist/review/parse-review-report.js +40 -0
  138. package/dist/review/parse-review-report.js.map +1 -0
  139. package/dist/review/reviewer-engine.d.ts +12 -3
  140. package/dist/review/reviewer-engine.d.ts.map +1 -1
  141. package/dist/review/reviewer-engine.js +4 -3
  142. package/dist/review/reviewer-engine.js.map +1 -1
  143. package/dist/review/templates/annotate-completion.d.ts +12 -0
  144. package/dist/review/templates/annotate-completion.d.ts.map +1 -0
  145. package/dist/review/templates/annotate-completion.js +72 -0
  146. package/dist/review/templates/annotate-completion.js.map +1 -0
  147. package/dist/review/templates/quality-review.d.ts +3 -0
  148. package/dist/review/templates/quality-review.d.ts.map +1 -0
  149. package/dist/review/templates/quality-review.js +40 -0
  150. package/dist/review/templates/quality-review.js.map +1 -0
  151. package/dist/review/templates/rework.d.ts +3 -0
  152. package/dist/review/templates/rework.d.ts.map +1 -0
  153. package/dist/review/templates/rework.js +42 -0
  154. package/dist/review/templates/rework.js.map +1 -0
  155. package/dist/review/templates/shared.d.ts +32 -0
  156. package/dist/review/templates/shared.d.ts.map +1 -1
  157. package/dist/review/templates/spec-review.d.ts +1 -16
  158. package/dist/review/templates/spec-review.d.ts.map +1 -1
  159. package/dist/review/templates/spec-review.js +23 -31
  160. package/dist/review/templates/spec-review.js.map +1 -1
  161. package/dist/stores/context-block-project-cap.d.ts +14 -0
  162. package/dist/stores/context-block-project-cap.d.ts.map +1 -0
  163. package/dist/stores/context-block-project-cap.js +68 -0
  164. package/dist/stores/context-block-project-cap.js.map +1 -0
  165. package/dist/stores/context-block-tool.d.ts +2 -0
  166. package/dist/stores/context-block-tool.d.ts.map +1 -1
  167. package/dist/stores/context-block-tool.js +3 -2
  168. package/dist/stores/context-block-tool.js.map +1 -1
  169. package/dist/stores/file-backed-context-block-store.d.ts +8 -1
  170. package/dist/stores/file-backed-context-block-store.d.ts.map +1 -1
  171. package/dist/stores/file-backed-context-block-store.js +118 -6
  172. package/dist/stores/file-backed-context-block-store.js.map +1 -1
  173. package/dist/tools/audit/plan-audit-criteria.d.ts +35 -0
  174. package/dist/tools/audit/plan-audit-criteria.d.ts.map +1 -0
  175. package/dist/tools/audit/plan-audit-criteria.js +136 -0
  176. package/dist/tools/audit/plan-audit-criteria.js.map +1 -0
  177. package/dist/tools/audit/plan-audit-verdict.d.ts +15 -0
  178. package/dist/tools/audit/plan-audit-verdict.d.ts.map +1 -0
  179. package/dist/tools/audit/plan-audit-verdict.js +44 -0
  180. package/dist/tools/audit/plan-audit-verdict.js.map +1 -0
  181. package/dist/tools/audit/schema.d.ts +1 -0
  182. package/dist/tools/audit/schema.d.ts.map +1 -1
  183. package/dist/tools/audit/schema.js +6 -3
  184. package/dist/tools/audit/schema.js.map +1 -1
  185. package/dist/tools/audit/tool-config.d.ts +3 -0
  186. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  187. package/dist/tools/audit/tool-config.js +8 -0
  188. package/dist/tools/audit/tool-config.js.map +1 -1
  189. package/dist/tools/delegate/implementer-criteria.d.ts +31 -47
  190. package/dist/tools/delegate/implementer-criteria.d.ts.map +1 -1
  191. package/dist/tools/delegate/implementer-criteria.js +60 -88
  192. package/dist/tools/delegate/implementer-criteria.js.map +1 -1
  193. package/dist/tools/delegate/tool-config.js +4 -4
  194. package/dist/tools/delegate/tool-config.js.map +1 -1
  195. package/dist/tools/execute-plan/implementer-criteria.d.ts +42 -37
  196. package/dist/tools/execute-plan/implementer-criteria.d.ts.map +1 -1
  197. package/dist/tools/execute-plan/implementer-criteria.js +79 -79
  198. package/dist/tools/execute-plan/implementer-criteria.js.map +1 -1
  199. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  200. package/dist/tools/execute-plan/tool-config.js +23 -13
  201. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  202. package/dist/types/config.d.ts +1 -0
  203. package/dist/types/config.d.ts.map +1 -1
  204. package/dist/types/enums.d.ts +2 -2
  205. package/dist/types/run-result.d.ts +71 -0
  206. package/dist/types/run-result.d.ts.map +1 -1
  207. package/dist/types/task-spec.d.ts +14 -0
  208. package/dist/types/task-spec.d.ts.map +1 -1
  209. package/dist/types.d.ts +10 -0
  210. package/dist/types.d.ts.map +1 -1
  211. package/package.json +5 -1
  212. package/dist/lifecycle/handlers/quality-chain-handlers.d.ts +0 -22
  213. package/dist/lifecycle/handlers/quality-chain-handlers.d.ts.map +0 -1
  214. package/dist/lifecycle/handlers/quality-chain-handlers.js +0 -369
  215. package/dist/lifecycle/handlers/quality-chain-handlers.js.map +0 -1
  216. package/dist/lifecycle/handlers/review-diff-handler.d.ts +0 -31
  217. package/dist/lifecycle/handlers/review-diff-handler.d.ts.map +0 -1
  218. package/dist/lifecycle/handlers/review-diff-handler.js +0 -168
  219. package/dist/lifecycle/handlers/review-diff-handler.js.map +0 -1
  220. package/dist/lifecycle/handlers/run-verify-command-handler.d.ts +0 -25
  221. package/dist/lifecycle/handlers/run-verify-command-handler.d.ts.map +0 -1
  222. package/dist/lifecycle/handlers/run-verify-command-handler.js +0 -84
  223. package/dist/lifecycle/handlers/run-verify-command-handler.js.map +0 -1
  224. package/dist/lifecycle/handlers/spec-chain-handlers.d.ts +0 -21
  225. package/dist/lifecycle/handlers/spec-chain-handlers.d.ts.map +0 -1
  226. package/dist/lifecycle/handlers/spec-chain-handlers.js +0 -287
  227. package/dist/lifecycle/handlers/spec-chain-handlers.js.map +0 -1
  228. package/dist/review/templates/diff-review.d.ts +0 -11
  229. package/dist/review/templates/diff-review.d.ts.map +0 -1
  230. package/dist/review/templates/diff-review.js +0 -39
  231. package/dist/review/templates/diff-review.js.map +0 -1
  232. package/dist/review/templates/quality-review-artifact.d.ts +0 -16
  233. package/dist/review/templates/quality-review-artifact.d.ts.map +0 -1
  234. package/dist/review/templates/quality-review-artifact.js +0 -46
  235. package/dist/review/templates/quality-review-artifact.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rework.js","sourceRoot":"","sources":["../../../src/review/templates/rework.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,YAAY,EAAE;QACZ,sIAAsI;QACtI,4DAA4D;QAC5D,EAAE;QACF,wLAAwL;QACxL,EAAE;QACF,0BAA0B;QAC1B,oEAAoE;QACpE,wCAAwC;QACxC,mDAAmD;QACnD,EAAE;QACF,aAAa;QACb,+EAA+E;QAC/E,iKAAiK;QACjK,8CAA8C;QAC9C,EAAE;QACF,4GAA4G;KAC7G,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,eAAe,CAAC,GAAG;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,qCAAqC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,iCAAiC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9G,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,yCAAyC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,CAAC,IAAI,CACR,YAAY;YACZ,mCAAmC;YACnC,kEAAkE;YAClE,0CAA0C,CAC3C,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC"}
@@ -18,6 +18,38 @@ export interface ReviewTemplateContext {
18
18
  * so it can verify "did the rework address X" rather than re-deriving.
19
19
  */
20
20
  priorConcerns?: string[];
21
+ /**
22
+ * For execute-plan tasks: the verbatim plan section the worker was
23
+ * asked to execute, separate from `brief` (which contains the worker's
24
+ * full prompt with orientation, fidelity rules, etc.). When set, the
25
+ * spec reviewer compares the diff against this section's verbatim code
26
+ * blocks character-for-character — semantically-equivalent rewrites
27
+ * are CODE SUBSTITUTION, not approval. Unset for non-execute-plan
28
+ * routes (delegate, audit, review, verify, debug, investigate).
29
+ */
30
+ planContext?: string;
31
+ /** Spec lint-reviewer raw report. */
32
+ specReviewerNotes?: string | null;
33
+ /** Quality lint-reviewer raw report. */
34
+ qualityReviewerNotes?: string | null;
35
+ /** Spec lint-reviewer transport/return error. */
36
+ specReviewError?: string | null;
37
+ /** Quality lint-reviewer transport/return error. */
38
+ qualityReviewError?: string | null;
39
+ /** True if rework stage ran and applied edits. */
40
+ reworkApplied?: boolean | null;
41
+ /** Rework worker's free-text summary. */
42
+ reworkOutput?: string | null;
43
+ /** Rework transport/return error. */
44
+ reworkError?: string | null;
45
+ /** Deterministic verify command result (Stage 4 pre-step). */
46
+ verifyResult?: {
47
+ ran: boolean;
48
+ passed: boolean | null;
49
+ exitCode: number | null;
50
+ command: string[];
51
+ tailOutput: string | null;
52
+ } | null;
21
53
  }
22
54
  export interface ReviewTemplate {
23
55
  systemPrompt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/review/templates/shared.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAAC;CACrD"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/review/templates/shared.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kDAAkD;IAClD,aAAa,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,8DAA8D;IAC9D,YAAY,CAAC,EAAE;QACb,GAAG,EAAE,OAAO,CAAC;QACb,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,GAAG,EAAE,qBAAqB,GAAG,MAAM,CAAC;CACrD"}
@@ -1,18 +1,3 @@
1
1
  import type { ReviewTemplate } from './shared.js';
2
- /**
3
- * Spec compliance reviewer.
4
- *
5
- * Tool sweep #6 rewrite: pre-fix this template gave the LLM only
6
- * `Task: <brief>` + `Worker output: <text>`. The reviewer was
7
- * reviewing the worker's CLAIM, not the worker's WORK — it had no
8
- * way to verify whether the claim was true. Result: skeptical
9
- * reviewers defaulted to "changes_required" and triggered endless
10
- * rework spirals on already-correct edits.
11
- *
12
- * Post-fix: the reviewer also sees the cumulative diff (the truth)
13
- * and any prior reviewer concerns it should verify are addressed.
14
- * With evidence in hand, "changes_required" must point to a
15
- * specific diff line — no more vague rejections.
16
- */
17
- export declare const specTemplate: ReviewTemplate;
2
+ export declare const specLintTemplate: ReviewTemplate;
18
3
  //# sourceMappingURL=spec-review.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec-review.d.ts","sourceRoot":"","sources":["../../../src/review/templates/spec-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,EAAE,cAsC1B,CAAC"}
1
+ {"version":3,"file":"spec-review.d.ts","sourceRoot":"","sources":["../../../src/review/templates/spec-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,gBAAgB,EAAE,cAsC9B,CAAC"}
@@ -1,47 +1,39 @@
1
- /**
2
- * Spec compliance reviewer.
3
- *
4
- * Tool sweep #6 rewrite: pre-fix this template gave the LLM only
5
- * `Task: <brief>` + `Worker output: <text>`. The reviewer was
6
- * reviewing the worker's CLAIM, not the worker's WORK — it had no
7
- * way to verify whether the claim was true. Result: skeptical
8
- * reviewers defaulted to "changes_required" and triggered endless
9
- * rework spirals on already-correct edits.
10
- *
11
- * Post-fix: the reviewer also sees the cumulative diff (the truth)
12
- * and any prior reviewer concerns it should verify are addressed.
13
- * With evidence in hand, "changes_required" must point to a
14
- * specific diff line — no more vague rejections.
15
- */
16
- export const specTemplate = {
1
+ export const specLintTemplate = {
17
2
  systemPrompt: [
18
- 'You are a spec compliance reviewer. Your job is to decide whether the cumulative diff fulfills the task brief — nothing else.',
3
+ 'You are the SPEC reviewer for a plan-execution task. You are LINT-ONLY do NOT edit files.',
4
+ 'Your sole job: compare the on-disk state against the plan and emit a structured report.',
5
+ 'Read files as needed to verify. A separate REWORK stage will apply your findings.',
19
6
  '',
20
- 'Reply with a JSON block: {"verdict":"approved"|"changes_required","concerns":["..."]}.',
7
+ 'Output format (mandatory):',
21
8
  '',
22
- 'Verdict rules:',
23
- '- "approved": the diff implements the brief, with no missing or wrong elements. The "concerns" list MUST be empty.',
24
- '- "changes_required": cite at least one concrete concern, each tied to a specific diff line or a specific missing element from the brief. Do NOT use this verdict for stylistic preferences not in the brief.',
25
- '- An empty diff (no files changed) is "changes_required" UNLESS the brief explicitly requested a no-op or "no change needed".',
26
- '- A diff that fully satisfies the brief is "approved" even if you would have written it differently.',
9
+ '## Verdict',
10
+ 'approved | changes_required',
27
11
  '',
28
- 'You do not see future rework rounds. Decide on this evidence alone.',
12
+ '## Deviations',
13
+ '- <one short line per gap, naming the file and what is missing/wrong>',
14
+ '- ...',
15
+ '',
16
+ 'Rules:',
17
+ '- "approved" means the diff fully implements the plan section. Trivial wording differences are OK.',
18
+ '- "changes_required" when any plan step is missing, partial, or wrong on disk.',
19
+ '- Each deviation must be specific enough that a rework worker can act on it without re-deriving.',
20
+ '- If approved, write "## Deviations\\n(none)".',
21
+ '- Do NOT use editor tools. Read-only investigation only. Editing is the rework stage\'s job.',
29
22
  ].join('\n'),
30
23
  buildUserPrompt(ctx) {
31
24
  const parts = [];
32
25
  parts.push(`# Task brief\n${ctx.brief}`);
33
- if (ctx.priorConcerns && ctx.priorConcerns.length > 0) {
34
- parts.push(`# Prior reviewer concerns from earlier rounds in this chain\nVerify the rework has addressed each one:\n` +
35
- ctx.priorConcerns.map((c, i) => `${i + 1}. ${c}`).join('\n'));
26
+ if (ctx.planContext && ctx.planContext.trim().length > 0) {
27
+ parts.push(`# Plan section (the contract to compare against)\n\n\`\`\`markdown\n${ctx.planContext.trim()}\n\`\`\``);
36
28
  }
37
- parts.push(`# Worker's most recent summary\n${ctx.workerOutput || '(no summary)'}`);
29
+ parts.push(`# Worker's summary\n${ctx.workerOutput || '(no summary)'}`);
38
30
  if (ctx.diff && ctx.diff.length > 0) {
39
- parts.push(`# Cumulative diff (the truth of what changed)\n\n\`\`\`diff\n${ctx.diff}\n\`\`\``);
31
+ parts.push(`# Cumulative diff (current on-disk state)\n\n\`\`\`diff\n${ctx.diff}\n\`\`\``);
40
32
  }
41
33
  else {
42
- parts.push(`# Cumulative diff\n(no file changes detected)`);
34
+ parts.push('# Cumulative diff\n(no file changes detected)');
43
35
  }
44
- parts.push(`# Decide\nDoes the cumulative diff fulfill the task brief? Reply with the JSON block specified in the system prompt.`);
36
+ parts.push('# Action\nCompare diff vs plan. Emit the report. Do not edit.');
45
37
  return parts.join('\n\n');
46
38
  },
47
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"spec-review.js","sourceRoot":"","sources":["../../../src/review/templates/spec-review.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,YAAY,EAAE;QACZ,+HAA+H;QAC/H,EAAE;QACF,wFAAwF;QACxF,EAAE;QACF,gBAAgB;QAChB,oHAAoH;QACpH,+MAA+M;QAC/M,+HAA+H;QAC/H,sGAAsG;QACtG,EAAE;QACF,qEAAqE;KACtE,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,eAAe,CAAC,GAAG;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAEzC,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CACR,0GAA0G;gBAC1G,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7D,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,mCAAmC,GAAG,CAAC,YAAY,IAAI,cAAc,EAAE,CAAC,CAAC;QAEpF,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,gEAAgE,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,sHAAsH,CAAC,CAAC;QAEnI,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"spec-review.js","sourceRoot":"","sources":["../../../src/review/templates/spec-review.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,YAAY,EAAE;QACZ,6FAA6F;QAC7F,yFAAyF;QACzF,mFAAmF;QACnF,EAAE;QACF,4BAA4B;QAC5B,EAAE;QACF,YAAY;QACZ,6BAA6B;QAC7B,EAAE;QACF,eAAe;QACf,uEAAuE;QACvE,OAAO;QACP,EAAE;QACF,QAAQ;QACR,oGAAoG;QACpG,gFAAgF;QAChF,kGAAkG;QAClG,gDAAgD;QAChD,8FAA8F;KAC/F,CAAC,IAAI,CAAC,IAAI,CAAC;IAEZ,eAAe,CAAC,GAAG;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,uEAAuE,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,YAAY,IAAI,cAAc,EAAE,CAAC,CAAC;QACxE,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,4DAA4D,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Per-project recency signal — the value used to decide LRU ordering.
3
+ * For non-empty dirs: max(mtime of any file). For empty dirs: dir mtime.
4
+ *
5
+ * This helper is exported so the storage migration (A1.7) can use the
6
+ * same calculation. Without sharing, the two code paths can drift and
7
+ * different "recent" projects survive a sweep vs a migration.
8
+ */
9
+ export declare function computeProjectRecencyMs(projectDir: string): number;
10
+ export declare function sweepProjectCap(contextBlocksRoot: string, maxProjects: number): {
11
+ kept: number;
12
+ evicted: number;
13
+ };
14
+ //# sourceMappingURL=context-block-project-cap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-block-project-cap.d.ts","sourceRoot":"","sources":["../../src/stores/context-block-project-cap.ts"],"names":[],"mappings":"AAmBA;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAgBlE;AAED,wBAAgB,eAAe,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAcjH"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Outer LRU sweep for the context-block project directory.
3
+ *
4
+ * Walks all project-hash subdirectories under `contextBlocksRoot`. If the
5
+ * count exceeds `maxProjects`, removes (rm -rf) the oldest-mtime project
6
+ * directories until the count is at or below cap. mtime of the project
7
+ * directory is used as the recency signal — directory mtime updates
8
+ * whenever a file inside is added/removed, so it tracks last activity.
9
+ *
10
+ * For empty project dirs (no files), the dir's own mtime is the signal,
11
+ * which is stable from creation; they typically rank lower than active
12
+ * projects and fall off first.
13
+ *
14
+ * No-op when the count is at or under cap. Synchronous (called once at
15
+ * daemon startup, low expected cost).
16
+ */
17
+ import * as fs from 'node:fs';
18
+ import * as path from 'node:path';
19
+ /**
20
+ * Per-project recency signal — the value used to decide LRU ordering.
21
+ * For non-empty dirs: max(mtime of any file). For empty dirs: dir mtime.
22
+ *
23
+ * This helper is exported so the storage migration (A1.7) can use the
24
+ * same calculation. Without sharing, the two code paths can drift and
25
+ * different "recent" projects survive a sweep vs a migration.
26
+ */
27
+ export function computeProjectRecencyMs(projectDir) {
28
+ let mtimeMs = 0;
29
+ try {
30
+ const files = fs.readdirSync(projectDir);
31
+ if (files.length === 0) {
32
+ mtimeMs = fs.statSync(projectDir).mtimeMs;
33
+ }
34
+ else {
35
+ for (const f of files) {
36
+ try {
37
+ const m = fs.statSync(path.join(projectDir, f)).mtimeMs;
38
+ if (m > mtimeMs)
39
+ mtimeMs = m;
40
+ }
41
+ catch { /* skip */ }
42
+ }
43
+ }
44
+ }
45
+ catch { /* skip */ }
46
+ return mtimeMs;
47
+ }
48
+ export function sweepProjectCap(contextBlocksRoot, maxProjects) {
49
+ if (!fs.existsSync(contextBlocksRoot))
50
+ return { kept: 0, evicted: 0 };
51
+ const entries = fs.readdirSync(contextBlocksRoot, { withFileTypes: true });
52
+ const projects = entries
53
+ .filter(e => e.isDirectory())
54
+ .map(e => ({ name: e.name, mtimeMs: computeProjectRecencyMs(path.join(contextBlocksRoot, e.name)) }));
55
+ if (projects.length <= maxProjects)
56
+ return { kept: projects.length, evicted: 0 };
57
+ projects.sort((a, b) => b.mtimeMs - a.mtimeMs);
58
+ const keep = projects.slice(0, maxProjects);
59
+ const drop = projects.slice(maxProjects);
60
+ for (const p of drop) {
61
+ try {
62
+ fs.rmSync(path.join(contextBlocksRoot, p.name), { recursive: true, force: true });
63
+ }
64
+ catch { /* skip */ }
65
+ }
66
+ return { kept: keep.length, evicted: drop.length };
67
+ }
68
+ //# sourceMappingURL=context-block-project-cap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-block-project-cap.js","sourceRoot":"","sources":["../../src/stores/context-block-project-cap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBACxD,IAAI,CAAC,GAAG,OAAO;wBAAE,OAAO,GAAG,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,iBAAyB,EAAE,WAAmB;IAC5E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,OAAO;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxG,IAAI,QAAQ,CAAC,MAAM,IAAI,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACjF,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC;YAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACrD,CAAC"}
@@ -22,6 +22,7 @@ export interface ContextBlockStore {
22
22
  * UUID. Returns the id, length, and sha256 hash. */
23
23
  register(content: string, opts?: {
24
24
  id?: string;
25
+ ttlMs?: number;
25
26
  }): RegisteredBlock;
26
27
  /** Fetch content by id. Returns `undefined` if the id is unknown or
27
28
  * the entry has expired. Touches the LRU access time on success. */
@@ -83,6 +84,7 @@ export declare class InMemoryContextBlockStore implements ContextBlockStore {
83
84
  constructor(opts?: InMemoryContextBlockStoreOptions);
84
85
  register(content: string, opts?: {
85
86
  id?: string;
87
+ ttlMs?: number;
86
88
  }): RegisteredBlock;
87
89
  get(id: string): string | undefined;
88
90
  delete(id: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"context-block-tool.d.ts","sourceRoot":"","sources":["../../src/stores/context-block-tool.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC;yDACqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,CAAC;IACnE;yEACqE;IACrE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,6EAA6E;IAC7E,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACrD,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;sDAEkD;IAClD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,mEAAmE;IACnE,KAAK,IAAI,IAAI,CAAC;IACd,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;aACtB,EAAE,EAAE,MAAM;gBAAV,EAAE,EAAE,MAAM;CAQvC;AAiBD,MAAM,WAAW,gCAAgC;IAC/C,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,yBAA0B,YAAW,iBAAiB;IACjE,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAK;gBAEL,IAAI,GAAE,gCAAqC;IAKvD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,eAAe;IAmBtE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAenC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B;sEACkE;IAClE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKrB;qCACiC;IACjC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKvB;0EACsE;IACtE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAYpD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI5B,oDAAoD;IACpD,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,gBAAgB;CAgBzB"}
1
+ {"version":3,"file":"context-block-tool.d.ts","sourceRoot":"","sources":["../../src/stores/context-block-tool.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC;yDACqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,CAAC;IACnF;yEACqE;IACrE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,6EAA6E;IAC7E,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACrD,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;sDAEkD;IAClD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,mEAAmE;IACnE,KAAK,IAAI,IAAI,CAAC;IACd,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;aACtB,EAAE,EAAE,MAAM;gBAAV,EAAE,EAAE,MAAM;CAQvC;AAuBD,MAAM,WAAW,gCAAgC;IAC/C,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,yBAA0B,YAAW,iBAAiB;IACjE,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAK;gBAEL,IAAI,GAAE,gCAAqC;IAKvD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,eAAe;IAoBtF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAenC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B;sEACkE;IAClE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKrB;qCACiC;IACjC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKvB;0EACsE;IACtE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAYpD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI5B,oDAAoD;IACpD,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -46,7 +46,8 @@ export class InMemoryContextBlockStore {
46
46
  process.stderr.write(`[mma] WARN context-block ${id} is ${(byteSize / 1024 / 1024).toFixed(1)} MiB (>10 MiB)\n`);
47
47
  }
48
48
  const now = Date.now();
49
- this.entries.set(id, { content, addedAtMs: now, lastAccessTick: ++this.tick, pinCount: 0 });
49
+ const entryTtl = opts.ttlMs ?? this._ttlMs;
50
+ this.entries.set(id, { content, addedAtMs: now, ttlMs: entryTtl, lastAccessTick: ++this.tick, pinCount: 0 });
50
51
  this.evictIfOverBound();
51
52
  return {
52
53
  id,
@@ -59,7 +60,7 @@ export class InMemoryContextBlockStore {
59
60
  if (!entry)
60
61
  return undefined;
61
62
  const now = Date.now();
62
- if (now - entry.addedAtMs > this._ttlMs) {
63
+ if (now - entry.addedAtMs > entry.ttlMs) {
63
64
  // Expired — do not revive
64
65
  this.entries.delete(id);
65
66
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"context-block-tool.js","sourceRoot":"","sources":["../../src/stores/context-block-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-block-tool.js","sourceRoot":"","sources":["../../src/stores/context-block-tool.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,10 @@ export interface FileBackedContextBlockStoreOptions {
10
10
  maxTotalBytes?: number;
11
11
  /** Override `os.homedir()` — used by tests for filesystem isolation. */
12
12
  homeDir?: string;
13
+ maxBlocksPerProject?: number;
13
14
  }
14
15
  export declare class FileBackedContextBlockStore implements ContextBlockStore {
15
- /** Absolute root: `<homeDir>/.multi-model-agent/context-blocks/<sha256(projectCwd)>`.
16
+ /** Absolute root: `<homeDir>/.multi-model/context-blocks/<sha256(projectCwd)>`.
16
17
  * Public so tests can read meta files directly without re-deriving the path. */
17
18
  readonly rootDir: string;
18
19
  private _ttlMs;
@@ -24,8 +25,10 @@ export declare class FileBackedContextBlockStore implements ContextBlockStore {
24
25
  * protection signal, not a persistence concern. Lost on restart;
25
26
  * TTL-based GC handles the recovery side. */
26
27
  private pinCounts;
28
+ private readonly maxBlocksPerProject;
27
29
  constructor(projectCwd: string, opts?: FileBackedContextBlockStoreOptions);
28
30
  register(content: string, opts?: {
31
+ ttlMs?: number;
29
32
  id?: string;
30
33
  }): RegisteredBlock;
31
34
  get(id: string): string | undefined;
@@ -56,6 +59,8 @@ export declare class FileBackedContextBlockStore implements ContextBlockStore {
56
59
  * random nonce so concurrent writers don't collide.
57
60
  */
58
61
  private atomicWrite;
62
+ /** TTL pass first; if still at or above maxBlocksPerProject, evict oldest-mtime block(s) until under cap. */
63
+ private sweepInnerLruIfNeeded;
59
64
  /**
60
65
  * Oldest-first eviction loop until total disk usage + incoming bytes
61
66
  * fits under maxTotalBytes. Pinned entries are skipped (matches
@@ -63,5 +68,7 @@ export declare class FileBackedContextBlockStore implements ContextBlockStore {
63
68
  * batch and shouldn't be evicted mid-run).
64
69
  */
65
70
  private evictUntilFits;
71
+ /** Scan this project's meta files for one whose recorded sha256 matches `sha256`. Returns the id, or null. */
72
+ private findByContentSha;
66
73
  }
67
74
  //# sourceMappingURL=file-backed-context-block-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-backed-context-block-store.d.ts","sourceRoot":"","sources":["../../src/stores/file-backed-context-block-store.ts"],"names":[],"mappings":"AA0CA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAcjC,MAAM,WAAW,kCAAkC;IACjD,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,2BAA4B,YAAW,iBAAiB;IACnE;qFACiF;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB;;kDAE8C;IAC9C,OAAO,CAAC,SAAS,CAA6B;gBAElC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,kCAAuC;IAW7E,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,eAAe;IA+BtE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAoBnC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAO3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIrB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMvB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI5B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAuBpD,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;qCACiC;IACjC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,qEAAqE;IACrE,KAAK,IAAI,IAAI;IAKb;4CACwC;IACxC,gBAAgB,IAAI,MAAM;IAc1B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,WAAW;IAKnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAYnB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;CAuBvB"}
1
+ {"version":3,"file":"file-backed-context-block-store.d.ts","sourceRoot":"","sources":["../../src/stores/file-backed-context-block-store.ts"],"names":[],"mappings":"AA0CA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAcjC,MAAM,WAAW,kCAAkC;IACjD,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,2BAA4B,YAAW,iBAAiB;IACnE;qFACiF;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB;;kDAE8C;IAC9C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEjC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,kCAAuC;IAqB7E,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,eAAe;IA0DtF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAoBnC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAO3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIrB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMvB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI5B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAuBpD,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;qCACiC;IACjC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,qEAAqE;IACrE,KAAK,IAAI,IAAI;IAKb;4CACwC;IACxC,gBAAgB,IAAI,MAAM;IAc1B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,WAAW;IAKnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAYnB,6GAA6G;IAC7G,OAAO,CAAC,qBAAqB;IAqC7B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAwBtB,8GAA8G;IAC9G,OAAO,CAAC,gBAAgB;CAczB"}
@@ -7,7 +7,7 @@
7
7
  * everything on `npm run serve` cycles, breaking the recipe. This store
8
8
  * persists to disk and reloads lazily on first access.
9
9
  *
10
- * Layout: `<homeDir>/.multi-model-agent/context-blocks/<sha256(projectCwd)>/<id>.txt`
10
+ * Layout: `<homeDir>/.multi-model/context-blocks/<sha256(projectCwd)>/<id>.txt`
11
11
  * (content) + `<id>.meta.json` ({ createdAt, ttlMs, lengthChars, sha256 }).
12
12
  * Storing in the user home (not the project tree) keeps repos clean —
13
13
  * no `.gitignore` entries needed — while the per-project hash subdir
@@ -45,7 +45,7 @@ const DEFAULT_GC_INTERVAL_MS = 60 * 60 * 1000;
45
45
  const DEFAULT_MAX_BLOCK_BYTES = 1 * 1024 * 1024;
46
46
  const DEFAULT_MAX_TOTAL_BYTES = 100 * 1024 * 1024;
47
47
  export class FileBackedContextBlockStore {
48
- /** Absolute root: `<homeDir>/.multi-model-agent/context-blocks/<sha256(projectCwd)>`.
48
+ /** Absolute root: `<homeDir>/.multi-model/context-blocks/<sha256(projectCwd)>`.
49
49
  * Public so tests can read meta files directly without re-deriving the path. */
50
50
  rootDir;
51
51
  _ttlMs;
@@ -57,27 +57,62 @@ export class FileBackedContextBlockStore {
57
57
  * protection signal, not a persistence concern. Lost on restart;
58
58
  * TTL-based GC handles the recovery side. */
59
59
  pinCounts = new Map();
60
+ maxBlocksPerProject;
60
61
  constructor(projectCwd, opts = {}) {
61
62
  const home = opts.homeDir ?? os.homedir();
62
- const projectHash = createHash('sha256').update(path.resolve(projectCwd)).digest('hex');
63
- this.rootDir = path.join(home, '.multi-model-agent', 'context-blocks', projectHash);
63
+ let canonical;
64
+ try {
65
+ canonical = fs.realpathSync(path.resolve(projectCwd));
66
+ }
67
+ catch {
68
+ // Path doesn't exist on disk yet — fall back to absolute. The store is
69
+ // still usable for callers who pass a future cwd; symlink-collapse
70
+ // semantics only kick in once the path exists.
71
+ canonical = path.resolve(projectCwd);
72
+ }
73
+ const projectHash = createHash('sha256').update(canonical).digest('hex');
74
+ this.rootDir = path.join(home, '.multi-model', 'context-blocks', projectHash);
64
75
  this._ttlMs = opts.ttlMs ?? DEFAULT_TTL_MS;
65
76
  this.gcCheckIntervalMs = opts.gcCheckIntervalMs ?? DEFAULT_GC_INTERVAL_MS;
66
77
  this.maxBlockBytes = opts.maxBlockBytes ?? DEFAULT_MAX_BLOCK_BYTES;
67
78
  this.maxTotalBytes = opts.maxTotalBytes ?? DEFAULT_MAX_TOTAL_BYTES;
79
+ this.maxBlocksPerProject = opts.maxBlocksPerProject ?? 500;
68
80
  this.ensureRoot();
69
81
  }
70
82
  register(content, opts = {}) {
83
+ const sha256 = createHash('sha256').update(content).digest('hex');
84
+ // 4.2.3+: fall back to the class-level _ttlMs default (configured at
85
+ // construction) rather than a hardcoded constant. Earlier draft of
86
+ // the plan literally said `?? 28_800_000` which broke the
87
+ // "lazy-deletes on get when entry is past TTL" pre-existing test —
88
+ // that test constructs the store with `ttlMs: 1` and then calls
89
+ // `register('x')` (no opts), expecting the per-call TTL to inherit
90
+ // the class default.
91
+ const ttlMs = opts.ttlMs ?? this._ttlMs;
92
+ // DEDUPE: look for existing block in this project with matching content sha
93
+ if (!opts.id) {
94
+ const existing = this.findByContentSha(sha256);
95
+ if (existing) {
96
+ // Bump mtime + reset TTL on the existing block
97
+ const now = Date.now();
98
+ const metaContent = JSON.parse(fs.readFileSync(this.metaPath(existing), 'utf8'));
99
+ metaContent.ttlMs = ttlMs;
100
+ metaContent.createdAt = now;
101
+ fs.writeFileSync(this.metaPath(existing), JSON.stringify(metaContent), { mode: 0o600 });
102
+ fs.utimesSync(this.contentPath(existing), now / 1000, now / 1000);
103
+ fs.utimesSync(this.metaPath(existing), now / 1000, now / 1000);
104
+ return { id: existing, lengthChars: content.length, sha256 };
105
+ }
106
+ }
71
107
  const byteSize = Buffer.byteLength(content, 'utf8');
72
108
  if (byteSize > this.maxBlockBytes) {
73
109
  throw new Error(`Context block exceeds per-block cap of ${this.maxBlockBytes} bytes (got ${byteSize}).`);
74
110
  }
75
111
  const id = opts.id ?? randomUUID();
76
112
  const now = Date.now();
77
- const sha256 = createHash('sha256').update(content).digest('hex');
78
113
  const meta = {
79
114
  createdAt: now,
80
- ttlMs: this._ttlMs,
115
+ ttlMs,
81
116
  lengthChars: content.length,
82
117
  sha256,
83
118
  };
@@ -87,6 +122,7 @@ export class FileBackedContextBlockStore {
87
122
  this.lastSweepMs = now;
88
123
  }
89
124
  this.evictUntilFits(byteSize);
125
+ this.sweepInnerLruIfNeeded();
90
126
  this.atomicWrite(this.contentPath(id), content);
91
127
  this.atomicWrite(this.metaPath(id), JSON.stringify(meta) + '\n');
92
128
  return { id, lengthChars: content.length, sha256 };
@@ -251,6 +287,63 @@ export class FileBackedContextBlockStore {
251
287
  }
252
288
  fs.renameSync(tmpPath, targetPath);
253
289
  }
290
+ /** TTL pass first; if still at or above maxBlocksPerProject, evict oldest-mtime block(s) until under cap. */
291
+ sweepInnerLruIfNeeded() {
292
+ if (!fs.existsSync(this.rootDir))
293
+ return;
294
+ // TTL pass
295
+ const now = Date.now();
296
+ const files = fs.readdirSync(this.rootDir);
297
+ for (const file of files) {
298
+ if (!file.endsWith('.meta.json'))
299
+ continue;
300
+ try {
301
+ const meta = JSON.parse(fs.readFileSync(path.join(this.rootDir, file), 'utf8'));
302
+ if (typeof meta.createdAt === 'number' && typeof meta.ttlMs === 'number' && now > meta.createdAt + meta.ttlMs) {
303
+ const id = file.slice(0, -'.meta.json'.length);
304
+ try {
305
+ fs.unlinkSync(path.join(this.rootDir, `${id}.txt`));
306
+ }
307
+ catch { }
308
+ try {
309
+ fs.unlinkSync(path.join(this.rootDir, `${id}.meta.json`));
310
+ }
311
+ catch { }
312
+ }
313
+ }
314
+ catch { /* skip malformed */ }
315
+ }
316
+ // LRU pass
317
+ let blockIds = fs.readdirSync(this.rootDir)
318
+ .filter(f => f.endsWith('.txt'))
319
+ .map(f => f.slice(0, -'.txt'.length));
320
+ while (blockIds.length >= this.maxBlocksPerProject) {
321
+ // Find oldest-mtime block
322
+ let oldestId = null;
323
+ let oldestMtime = Infinity;
324
+ for (const id of blockIds) {
325
+ try {
326
+ const m = fs.statSync(path.join(this.rootDir, `${id}.txt`)).mtimeMs;
327
+ if (m < oldestMtime) {
328
+ oldestMtime = m;
329
+ oldestId = id;
330
+ }
331
+ }
332
+ catch { /* skip */ }
333
+ }
334
+ if (!oldestId)
335
+ break;
336
+ try {
337
+ fs.unlinkSync(path.join(this.rootDir, `${oldestId}.txt`));
338
+ }
339
+ catch { }
340
+ try {
341
+ fs.unlinkSync(path.join(this.rootDir, `${oldestId}.meta.json`));
342
+ }
343
+ catch { }
344
+ blockIds = blockIds.filter(i => i !== oldestId);
345
+ }
346
+ }
254
347
  /**
255
348
  * Oldest-first eviction loop until total disk usage + incoming bytes
256
349
  * fits under maxTotalBytes. Pinned entries are skipped (matches
@@ -286,5 +379,24 @@ export class FileBackedContextBlockStore {
286
379
  total -= c.bytes;
287
380
  }
288
381
  }
382
+ /** Scan this project's meta files for one whose recorded sha256 matches `sha256`. Returns the id, or null. */
383
+ findByContentSha(sha256) {
384
+ if (!fs.existsSync(this.rootDir))
385
+ return null;
386
+ const files = fs.readdirSync(this.rootDir);
387
+ for (const file of files) {
388
+ if (!file.endsWith('.meta.json'))
389
+ continue;
390
+ try {
391
+ const meta = JSON.parse(fs.readFileSync(path.join(this.rootDir, file), 'utf8'));
392
+ if (meta.sha256 === sha256)
393
+ return file.slice(0, -'.meta.json'.length);
394
+ }
395
+ catch {
396
+ // Skip malformed meta files
397
+ }
398
+ }
399
+ return null;
400
+ }
289
401
  }
290
402
  //# sourceMappingURL=file-backed-context-block-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-backed-context-block-store.js","sourceRoot":"","sources":["../../src/stores/file-backed-context-block-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-backed-context-block-store.js","sourceRoot":"","sources":["../../src/stores/file-backed-context-block-store.ts"],"names":[],"mappings":"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"}