mewkit 1.14.1 → 1.15.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 (264) hide show
  1. package/README.md +7 -0
  2. package/dist/commands/capabilities.d.ts +13 -0
  3. package/dist/commands/capabilities.d.ts.map +1 -0
  4. package/dist/commands/capabilities.js +230 -0
  5. package/dist/commands/capabilities.js.map +1 -0
  6. package/dist/commands/context.d.ts +10 -0
  7. package/dist/commands/context.d.ts.map +1 -0
  8. package/dist/commands/context.js +125 -0
  9. package/dist/commands/context.js.map +1 -0
  10. package/dist/commands/doctor.d.ts +27 -0
  11. package/dist/commands/doctor.d.ts.map +1 -1
  12. package/dist/commands/doctor.js +123 -0
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/providers.d.ts +2 -0
  15. package/dist/commands/providers.d.ts.map +1 -1
  16. package/dist/commands/providers.js +77 -0
  17. package/dist/commands/providers.js.map +1 -1
  18. package/dist/commands/task-state.d.ts +13 -0
  19. package/dist/commands/task-state.d.ts.map +1 -0
  20. package/dist/commands/task-state.js +106 -0
  21. package/dist/commands/task-state.js.map +1 -0
  22. package/dist/commands/validate.d.ts +48 -1
  23. package/dist/commands/validate.d.ts.map +1 -1
  24. package/dist/commands/validate.js +97 -24
  25. package/dist/commands/validate.js.map +1 -1
  26. package/dist/core/availability.d.ts +40 -0
  27. package/dist/core/availability.d.ts.map +1 -0
  28. package/dist/core/availability.js +47 -0
  29. package/dist/core/availability.js.map +1 -0
  30. package/dist/core/bootstrap.d.ts +19 -0
  31. package/dist/core/bootstrap.d.ts.map +1 -0
  32. package/dist/core/bootstrap.js +42 -0
  33. package/dist/core/bootstrap.js.map +1 -0
  34. package/dist/core/build-capabilities.d.ts +9 -0
  35. package/dist/core/build-capabilities.d.ts.map +1 -0
  36. package/dist/core/build-capabilities.js +123 -0
  37. package/dist/core/build-capabilities.js.map +1 -0
  38. package/dist/core/build-inventory.d.ts +2 -0
  39. package/dist/core/build-inventory.d.ts.map +1 -1
  40. package/dist/core/build-inventory.js +1 -1
  41. package/dist/core/build-inventory.js.map +1 -1
  42. package/dist/core/capability-authored.d.ts +26 -0
  43. package/dist/core/capability-authored.d.ts.map +1 -0
  44. package/dist/core/capability-authored.js +117 -0
  45. package/dist/core/capability-authored.js.map +1 -0
  46. package/dist/core/capability-snapshot.d.ts +13 -0
  47. package/dist/core/capability-snapshot.d.ts.map +1 -0
  48. package/dist/core/capability-snapshot.js +53 -0
  49. package/dist/core/capability-snapshot.js.map +1 -0
  50. package/dist/core/capability.d.ts +519 -0
  51. package/dist/core/capability.d.ts.map +1 -0
  52. package/dist/core/capability.js +114 -0
  53. package/dist/core/capability.js.map +1 -0
  54. package/dist/core/compute-checksums.d.ts.map +1 -1
  55. package/dist/core/compute-checksums.js +8 -2
  56. package/dist/core/compute-checksums.js.map +1 -1
  57. package/dist/core/consolidation-ledger.d.ts +30 -0
  58. package/dist/core/consolidation-ledger.d.ts.map +1 -0
  59. package/dist/core/consolidation-ledger.js +145 -0
  60. package/dist/core/consolidation-ledger.js.map +1 -0
  61. package/dist/core/generate-capability-view.d.ts +21 -0
  62. package/dist/core/generate-capability-view.d.ts.map +1 -0
  63. package/dist/core/generate-capability-view.js +48 -0
  64. package/dist/core/generate-capability-view.js.map +1 -0
  65. package/dist/core/install-metadata.d.ts +47 -30
  66. package/dist/core/install-metadata.d.ts.map +1 -1
  67. package/dist/core/install-metadata.js +49 -9
  68. package/dist/core/install-metadata.js.map +1 -1
  69. package/dist/core/plugin-manifest.d.ts +16 -16
  70. package/dist/core/provider-adapter.d.ts +28 -0
  71. package/dist/core/provider-adapter.d.ts.map +1 -0
  72. package/dist/core/provider-adapter.js +31 -0
  73. package/dist/core/provider-adapter.js.map +1 -0
  74. package/dist/core/provider-invocation.d.ts +14 -0
  75. package/dist/core/provider-invocation.d.ts.map +1 -0
  76. package/dist/core/provider-invocation.js +56 -0
  77. package/dist/core/provider-invocation.js.map +1 -0
  78. package/dist/core/provider-lifecycle.d.ts +35 -0
  79. package/dist/core/provider-lifecycle.d.ts.map +1 -0
  80. package/dist/core/provider-lifecycle.js +101 -0
  81. package/dist/core/provider-lifecycle.js.map +1 -0
  82. package/dist/core/provider-projection.d.ts +29 -0
  83. package/dist/core/provider-projection.d.ts.map +1 -0
  84. package/dist/core/provider-projection.js +47 -0
  85. package/dist/core/provider-projection.js.map +1 -0
  86. package/dist/core/release-metadata.d.ts +9 -2
  87. package/dist/core/release-metadata.d.ts.map +1 -1
  88. package/dist/core/release-metadata.js +13 -0
  89. package/dist/core/release-metadata.js.map +1 -1
  90. package/dist/core/repo-context-adapter.d.ts +23 -0
  91. package/dist/core/repo-context-adapter.d.ts.map +1 -0
  92. package/dist/core/repo-context-adapter.js +44 -0
  93. package/dist/core/repo-context-adapter.js.map +1 -0
  94. package/dist/core/repo-context.d.ts +147 -0
  95. package/dist/core/repo-context.d.ts.map +1 -0
  96. package/dist/core/repo-context.js +204 -0
  97. package/dist/core/repo-context.js.map +1 -0
  98. package/dist/core/resolve-capabilities.d.ts +70 -0
  99. package/dist/core/resolve-capabilities.d.ts.map +1 -0
  100. package/dist/core/resolve-capabilities.js +124 -0
  101. package/dist/core/resolve-capabilities.js.map +1 -0
  102. package/dist/core/smart-update.d.ts.map +1 -1
  103. package/dist/core/smart-update.js +13 -12
  104. package/dist/core/smart-update.js.map +1 -1
  105. package/dist/core/task-record.d.ts +252 -0
  106. package/dist/core/task-record.d.ts.map +1 -0
  107. package/dist/core/task-record.js +252 -0
  108. package/dist/core/task-record.js.map +1 -0
  109. package/dist/core/validate-capabilities.d.ts +12 -0
  110. package/dist/core/validate-capabilities.d.ts.map +1 -0
  111. package/dist/core/validate-capabilities.js +138 -0
  112. package/dist/core/validate-capabilities.js.map +1 -0
  113. package/dist/index.js +66 -4
  114. package/dist/index.js.map +1 -1
  115. package/dist/migrate/capability-bootstrap-projection.d.ts +11 -0
  116. package/dist/migrate/capability-bootstrap-projection.d.ts.map +1 -0
  117. package/dist/migrate/capability-bootstrap-projection.js +48 -0
  118. package/dist/migrate/capability-bootstrap-projection.js.map +1 -0
  119. package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
  120. package/dist/migrate/migrate-orchestrator.js +22 -0
  121. package/dist/migrate/migrate-orchestrator.js.map +1 -1
  122. package/dist/migrate/reconcile/portable-registry.d.ts +18 -18
  123. package/dist/orchviz-web/index.js +3 -3
  124. package/package.json +1 -1
  125. package/dist/commands/evolve.d.ts +0 -11
  126. package/dist/commands/evolve.d.ts.map +0 -1
  127. package/dist/commands/evolve.js +0 -63
  128. package/dist/commands/evolve.js.map +0 -1
  129. package/dist/commands/health.d.ts +0 -14
  130. package/dist/commands/health.d.ts.map +0 -1
  131. package/dist/commands/health.js +0 -193
  132. package/dist/commands/health.js.map +0 -1
  133. package/dist/commands/policy.d.ts +0 -8
  134. package/dist/commands/policy.d.ts.map +0 -1
  135. package/dist/commands/policy.js +0 -65
  136. package/dist/commands/policy.js.map +0 -1
  137. package/dist/commands/portability.d.ts +0 -7
  138. package/dist/commands/portability.d.ts.map +0 -1
  139. package/dist/commands/portability.js +0 -50
  140. package/dist/commands/portability.js.map +0 -1
  141. package/dist/commands/reflect.d.ts +0 -14
  142. package/dist/commands/reflect.d.ts.map +0 -1
  143. package/dist/commands/reflect.js +0 -135
  144. package/dist/commands/reflect.js.map +0 -1
  145. package/dist/commands/simulate.d.ts +0 -14
  146. package/dist/commands/simulate.d.ts.map +0 -1
  147. package/dist/commands/simulate.js +0 -86
  148. package/dist/commands/simulate.js.map +0 -1
  149. package/dist/core/event-log.d.ts +0 -44
  150. package/dist/core/event-log.d.ts.map +0 -1
  151. package/dist/core/event-log.js +0 -169
  152. package/dist/core/event-log.js.map +0 -1
  153. package/dist/core/evolution/event-clusters.d.ts +0 -4
  154. package/dist/core/evolution/event-clusters.d.ts.map +0 -1
  155. package/dist/core/evolution/event-clusters.js +0 -82
  156. package/dist/core/evolution/event-clusters.js.map +0 -1
  157. package/dist/core/evolution/recommendation-renderer.d.ts +0 -3
  158. package/dist/core/evolution/recommendation-renderer.d.ts.map +0 -1
  159. package/dist/core/evolution/recommendation-renderer.js +0 -24
  160. package/dist/core/evolution/recommendation-renderer.js.map +0 -1
  161. package/dist/core/evolution/review-failure-clusters.d.ts +0 -10
  162. package/dist/core/evolution/review-failure-clusters.d.ts.map +0 -1
  163. package/dist/core/evolution/review-failure-clusters.js +0 -30
  164. package/dist/core/evolution/review-failure-clusters.js.map +0 -1
  165. package/dist/core/evolution/suggestions.d.ts +0 -24
  166. package/dist/core/evolution/suggestions.d.ts.map +0 -1
  167. package/dist/core/evolution/suggestions.js +0 -11
  168. package/dist/core/evolution/suggestions.js.map +0 -1
  169. package/dist/core/gate-policy.d.ts +0 -20
  170. package/dist/core/gate-policy.d.ts.map +0 -1
  171. package/dist/core/gate-policy.js +0 -64
  172. package/dist/core/gate-policy.js.map +0 -1
  173. package/dist/core/portability-matrix.d.ts +0 -17
  174. package/dist/core/portability-matrix.d.ts.map +0 -1
  175. package/dist/core/portability-matrix.js +0 -31
  176. package/dist/core/portability-matrix.js.map +0 -1
  177. package/dist/core/simulation-runner.d.ts +0 -93
  178. package/dist/core/simulation-runner.d.ts.map +0 -1
  179. package/dist/core/simulation-runner.js +0 -161
  180. package/dist/core/simulation-runner.js.map +0 -1
  181. package/dist/core/usage/usage-analyzer.d.ts +0 -18
  182. package/dist/core/usage/usage-analyzer.d.ts.map +0 -1
  183. package/dist/core/usage/usage-analyzer.js +0 -41
  184. package/dist/core/usage/usage-analyzer.js.map +0 -1
  185. package/dist/memory/archive.d.ts +0 -9
  186. package/dist/memory/archive.d.ts.map +0 -1
  187. package/dist/memory/archive.js +0 -42
  188. package/dist/memory/archive.js.map +0 -1
  189. package/dist/memory/compact.d.ts +0 -9
  190. package/dist/memory/compact.d.ts.map +0 -1
  191. package/dist/memory/compact.js +0 -33
  192. package/dist/memory/compact.js.map +0 -1
  193. package/dist/memory/conflicts.d.ts +0 -8
  194. package/dist/memory/conflicts.d.ts.map +0 -1
  195. package/dist/memory/conflicts.js +0 -28
  196. package/dist/memory/conflicts.js.map +0 -1
  197. package/dist/memory/promote.d.ts +0 -8
  198. package/dist/memory/promote.d.ts.map +0 -1
  199. package/dist/memory/promote.js +0 -10
  200. package/dist/memory/promote.js.map +0 -1
  201. package/dist/memory/store-utils.d.ts +0 -14
  202. package/dist/memory/store-utils.d.ts.map +0 -1
  203. package/dist/memory/store-utils.js +0 -44
  204. package/dist/memory/store-utils.js.map +0 -1
  205. package/dist/migrate/__tests__/frontmatter-parser.test.d.ts +0 -2
  206. package/dist/migrate/__tests__/frontmatter-parser.test.d.ts.map +0 -1
  207. package/dist/migrate/__tests__/frontmatter-parser.test.js +0 -73
  208. package/dist/migrate/__tests__/frontmatter-parser.test.js.map +0 -1
  209. package/dist/migrate/__tests__/md-strip-mewkit.test.d.ts +0 -2
  210. package/dist/migrate/__tests__/md-strip-mewkit.test.d.ts.map +0 -1
  211. package/dist/migrate/__tests__/md-strip-mewkit.test.js +0 -55
  212. package/dist/migrate/__tests__/md-strip-mewkit.test.js.map +0 -1
  213. package/dist/migrate/__tests__/migrate-scope-resolver.test.d.ts +0 -2
  214. package/dist/migrate/__tests__/migrate-scope-resolver.test.d.ts.map +0 -1
  215. package/dist/migrate/__tests__/migrate-scope-resolver.test.js +0 -53
  216. package/dist/migrate/__tests__/migrate-scope-resolver.test.js.map +0 -1
  217. package/dist/migrate/__tests__/process-lock.test.d.ts +0 -2
  218. package/dist/migrate/__tests__/process-lock.test.d.ts.map +0 -1
  219. package/dist/migrate/__tests__/process-lock.test.js +0 -63
  220. package/dist/migrate/__tests__/process-lock.test.js.map +0 -1
  221. package/dist/migrate/__tests__/provider-registry.test.d.ts +0 -2
  222. package/dist/migrate/__tests__/provider-registry.test.d.ts.map +0 -1
  223. package/dist/migrate/__tests__/provider-registry.test.js +0 -53
  224. package/dist/migrate/__tests__/provider-registry.test.js.map +0 -1
  225. package/dist/migrate/__tests__/reconciler.test.d.ts +0 -2
  226. package/dist/migrate/__tests__/reconciler.test.d.ts.map +0 -1
  227. package/dist/migrate/__tests__/reconciler.test.js +0 -180
  228. package/dist/migrate/__tests__/reconciler.test.js.map +0 -1
  229. package/dist/migrate/__tests__/skill-id-utils.test.d.ts +0 -2
  230. package/dist/migrate/__tests__/skill-id-utils.test.d.ts.map +0 -1
  231. package/dist/migrate/__tests__/skill-id-utils.test.js +0 -78
  232. package/dist/migrate/__tests__/skill-id-utils.test.js.map +0 -1
  233. package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.d.ts +0 -15
  234. package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.d.ts.map +0 -1
  235. package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.js +0 -165
  236. package/dist/orchviz/plan/__tests__/apply-todo-toggle.test.js.map +0 -1
  237. package/dist/orchviz/plan/__tests__/atomic-write.test.d.ts +0 -11
  238. package/dist/orchviz/plan/__tests__/atomic-write.test.d.ts.map +0 -1
  239. package/dist/orchviz/plan/__tests__/atomic-write.test.js +0 -89
  240. package/dist/orchviz/plan/__tests__/atomic-write.test.js.map +0 -1
  241. package/dist/orchviz/plan/__tests__/end-to-end.test.d.ts +0 -10
  242. package/dist/orchviz/plan/__tests__/end-to-end.test.d.ts.map +0 -1
  243. package/dist/orchviz/plan/__tests__/end-to-end.test.js +0 -132
  244. package/dist/orchviz/plan/__tests__/end-to-end.test.js.map +0 -1
  245. package/dist/orchviz/plan/__tests__/etag.test.d.ts +0 -11
  246. package/dist/orchviz/plan/__tests__/etag.test.d.ts.map +0 -1
  247. package/dist/orchviz/plan/__tests__/etag.test.js +0 -92
  248. package/dist/orchviz/plan/__tests__/etag.test.js.map +0 -1
  249. package/dist/orchviz/plan/__tests__/list-plans.test.d.ts +0 -14
  250. package/dist/orchviz/plan/__tests__/list-plans.test.d.ts.map +0 -1
  251. package/dist/orchviz/plan/__tests__/list-plans.test.js +0 -154
  252. package/dist/orchviz/plan/__tests__/list-plans.test.js.map +0 -1
  253. package/dist/orchviz/server/__tests__/security-smoke.test.d.ts +0 -13
  254. package/dist/orchviz/server/__tests__/security-smoke.test.d.ts.map +0 -1
  255. package/dist/orchviz/server/__tests__/security-smoke.test.js +0 -207
  256. package/dist/orchviz/server/__tests__/security-smoke.test.js.map +0 -1
  257. package/dist/orchviz/server/__tests__/write-handlers.test.d.ts +0 -24
  258. package/dist/orchviz/server/__tests__/write-handlers.test.d.ts.map +0 -1
  259. package/dist/orchviz/server/__tests__/write-handlers.test.js +0 -347
  260. package/dist/orchviz/server/__tests__/write-handlers.test.js.map +0 -1
  261. package/dist/orchviz/test-server-boot.d.ts +0 -28
  262. package/dist/orchviz/test-server-boot.d.ts.map +0 -1
  263. package/dist/orchviz/test-server-boot.js +0 -64
  264. package/dist/orchviz/test-server-boot.js.map +0 -1
@@ -1,64 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- export const POLICY_PRESETS = {
4
- strict: {
5
- profile: "strict",
6
- planGate: "hard",
7
- requireApprovedPlan: true,
8
- contractGate: "hard",
9
- reviewGate: "hard",
10
- buildVerify: "on",
11
- humanApproval: "required",
12
- },
13
- balanced: {
14
- profile: "balanced",
15
- planGate: "hard",
16
- requireApprovedPlan: false,
17
- contractGate: "optional",
18
- reviewGate: "hard-on-fail",
19
- buildVerify: "on",
20
- humanApproval: "selected",
21
- },
22
- lightweight: {
23
- profile: "lightweight",
24
- planGate: "advisory",
25
- requireApprovedPlan: false,
26
- contractGate: "off",
27
- reviewGate: "advisory",
28
- buildVerify: "on",
29
- humanApproval: "optional",
30
- },
31
- };
32
- export function policyPath(claudeDir) {
33
- return path.join(claudeDir, "policy.json");
34
- }
35
- export function parsePolicyProfile(value) {
36
- return value === "strict" || value === "balanced" || value === "lightweight" ? value : null;
37
- }
38
- export function readGatePolicy(claudeDir) {
39
- const p = policyPath(claudeDir);
40
- if (!fs.existsSync(p))
41
- return { policy: POLICY_PRESETS.balanced, source: "default" };
42
- try {
43
- const parsed = JSON.parse(fs.readFileSync(p, "utf-8"));
44
- const profile = parsePolicyProfile(parsed.profile);
45
- if (!profile)
46
- return { policy: POLICY_PRESETS.strict, source: p, error: "unknown profile; failing safe as strict" };
47
- return { policy: POLICY_PRESETS[profile], source: p };
48
- }
49
- catch {
50
- return { policy: POLICY_PRESETS.strict, source: p, error: "unreadable policy; failing safe as strict" };
51
- }
52
- }
53
- export function writeGatePolicy(claudeDir, profile) {
54
- const p = policyPath(claudeDir);
55
- const tmp = `${p}.tmp`;
56
- const body = {
57
- profile,
58
- updatedAt: new Date().toISOString(),
59
- note: "Privacy and prompt-injection blocks are never disabled by policy profiles.",
60
- };
61
- fs.writeFileSync(tmp, `${JSON.stringify(body, null, 2)}\n`, "utf-8");
62
- fs.renameSync(tmp, p);
63
- }
64
- //# sourceMappingURL=gate-policy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gate-policy.js","sourceRoot":"","sources":["../../src/core/gate-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAc7B,MAAM,CAAC,MAAM,cAAc,GAA0C;IACpE,MAAM,EAAE;QACP,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,MAAM;QAChB,mBAAmB,EAAE,IAAI;QACzB,YAAY,EAAE,MAAM;QACpB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,UAAU;KACzB;IACD,QAAQ,EAAE;QACT,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,MAAM;QAChB,mBAAmB,EAAE,KAAK;QAC1B,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,UAAU;KACzB;IACD,WAAW,EAAE;QACZ,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,UAAU;QACpB,mBAAmB,EAAE,KAAK;QAC1B,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,UAAU;KACzB;CACD,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAyB;IAC3D,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrF,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAyB,CAAC;QAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;QACpH,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;IACzG,CAAC;AACF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,OAA0B;IAC5E,MAAM,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,MAAM,IAAI,GAAG;QACZ,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,4EAA4E;KAClF,CAAC;IACF,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACvB,CAAC"}
@@ -1,17 +0,0 @@
1
- import { type ProviderContractDiagnostic } from "../migrate/provider-contract-diagnostics.js";
2
- import type { ProviderType } from "../migrate/types.js";
3
- export interface PortabilityMatrixRow extends ProviderContractDiagnostic {
4
- displayStatus: "native" | "documented" | "disabled" | "unsupported" | "warn" | "fail";
5
- }
6
- export interface PortabilityCoverage {
7
- providers: number;
8
- surfaces: number;
9
- documented: number;
10
- disabledUnsupported: number;
11
- warn: number;
12
- fail: number;
13
- }
14
- export declare function buildPortabilityMatrix(): PortabilityMatrixRow[];
15
- export declare function explainProvider(provider: ProviderType): PortabilityMatrixRow[];
16
- export declare function coverage(rows?: PortabilityMatrixRow[]): PortabilityCoverage;
17
- //# sourceMappingURL=portability-matrix.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portability-matrix.d.ts","sourceRoot":"","sources":["../../src/core/portability-matrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAClI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,oBAAqB,SAAQ,0BAA0B;IACvE,aAAa,EAAE,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;CACtF;AAED,MAAM,WAAW,mBAAmB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAWD,wBAAgB,sBAAsB,IAAI,oBAAoB,EAAE,CAE/D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,oBAAoB,EAAE,CAE9E;AAED,wBAAgB,QAAQ,CAAC,IAAI,yBAA2B,GAAG,mBAAmB,CAS7E"}
@@ -1,31 +0,0 @@
1
- import { collectProviderContractDiagnostics } from "../migrate/provider-contract-diagnostics.js";
2
- function displayStatus(d) {
3
- if (d.provider === "claude-code" && d.surfaceStatus === "documented" && d.severity === "pass")
4
- return "native";
5
- if (d.severity === "fail")
6
- return "fail";
7
- if (d.severity === "warn")
8
- return "warn";
9
- if (d.surfaceStatus === "documented")
10
- return "documented";
11
- if (d.surfaceStatus === "unsupported")
12
- return "unsupported";
13
- return "disabled";
14
- }
15
- export function buildPortabilityMatrix() {
16
- return collectProviderContractDiagnostics().map((d) => ({ ...d, displayStatus: displayStatus(d) }));
17
- }
18
- export function explainProvider(provider) {
19
- return buildPortabilityMatrix().filter((r) => r.provider === provider);
20
- }
21
- export function coverage(rows = buildPortabilityMatrix()) {
22
- return {
23
- providers: new Set(rows.map((r) => r.provider)).size,
24
- surfaces: rows.length,
25
- documented: rows.filter((r) => r.surfaceStatus === "documented").length,
26
- disabledUnsupported: rows.filter((r) => r.surfaceStatus !== "documented" && r.severity !== "fail").length,
27
- warn: rows.filter((r) => r.severity === "warn").length,
28
- fail: rows.filter((r) => r.severity === "fail").length,
29
- };
30
- }
31
- //# sourceMappingURL=portability-matrix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"portability-matrix.js","sourceRoot":"","sources":["../../src/core/portability-matrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAmC,MAAM,6CAA6C,CAAC;AAgBlI,SAAS,aAAa,CAAC,CAA6B;IACnD,IAAI,CAAC,CAAC,QAAQ,KAAK,aAAa,IAAI,CAAC,CAAC,aAAa,KAAK,YAAY,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IAC/G,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,CAAC,CAAC,aAAa,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IAC1D,IAAI,CAAC,CAAC,aAAa,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IAC5D,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACrC,OAAO,kCAAkC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAsB;IACrD,OAAO,sBAAsB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAI,GAAG,sBAAsB,EAAE;IACvD,OAAO;QACN,SAAS,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;QACpD,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,YAAY,CAAC,CAAC,MAAM;QACvE,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,YAAY,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;QACzG,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;QACtD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;KACtD,CAAC;AACH,CAAC"}
@@ -1,93 +0,0 @@
1
- import { hasHarness } from "./harness-scaffold.js";
2
- import { type HookRunResult } from "./hook-runner.js";
3
- /**
4
- * Declarative scenario engine that generalizes the hardcoded `doctor --hard-gates`
5
- * probes into data-driven given→when→expect cases. Reuses the Phase-1 scaffold +
6
- * hook-runner (the real configured-hook execution path) — independent of the event
7
- * log. The `assertOutcome` here is THE single assertion path, also consumed by
8
- * `doctor-hard-gates.ts`, so the two never diverge.
9
- */
10
- export type SimStatus = "PASS" | "FAIL" | "SKIP";
11
- export interface ExpectSpec {
12
- /** Whether the hook should block the tool call. */
13
- blocked: boolean;
14
- /** Marker string expected on the named stream when blocked. */
15
- marker?: string;
16
- /** Exact exit code; when omitted on a block, any non-zero passes. */
17
- exitCode?: number;
18
- /** Which stream carries the marker — explicit per scenario (block markers vary). */
19
- expectStream?: "stdout" | "stderr";
20
- }
21
- interface WhenSpec {
22
- /** Tool name (matched against settings.json hook matchers). */
23
- tool: string;
24
- /** Hook script basename to exercise (the `only` filter — keeps runs deterministic). */
25
- hook: string;
26
- file_path?: string;
27
- command?: string;
28
- /** Extra env for this step (e.g. MEOWKIT_GATE1_REQUIRE_APPROVED=1). */
29
- env?: Record<string, string>;
30
- }
31
- interface GivenSpec {
32
- /** Create an (unapproved) plan so Gate 1 existence passes. */
33
- plan?: boolean;
34
- /** Remove all plans (force the no-plan state). */
35
- clearPlans?: boolean;
36
- /** Arrange arbitrary files in the temp project. */
37
- files?: Array<{
38
- path: string;
39
- content: string;
40
- }>;
41
- }
42
- interface StepSpec {
43
- given?: GivenSpec;
44
- when: WhenSpec;
45
- expect: ExpectSpec;
46
- }
47
- export interface Scenario {
48
- name: string;
49
- description?: string;
50
- /** Single-step shorthand (mutually exclusive with `steps`). */
51
- given?: GivenSpec;
52
- when?: WhenSpec;
53
- expect?: ExpectSpec;
54
- /** Ordered multi-step lifecycle (e.g. full-lifecycle). */
55
- steps?: StepSpec[];
56
- }
57
- export interface StepResult {
58
- status: SimStatus;
59
- detail: string;
60
- expected: string;
61
- actual: string;
62
- }
63
- export interface ScenarioResult {
64
- name: string;
65
- description?: string;
66
- status: SimStatus;
67
- steps: StepResult[];
68
- }
69
- /**
70
- * THE shared assertion: compare a hook run result against an expectation. Returns
71
- * PASS / FAIL / SKIP. Two honesty guards:
72
- * - an allow-case (`blocked:false`) where NO hook ran → SKIP (never a vacuous PASS),
73
- * - a block-case where no hook ran → FAIL (the gate was not exercised).
74
- */
75
- export declare function assertOutcome(result: HookRunResult | undefined, expect: ExpectSpec): {
76
- status: SimStatus;
77
- detail: string;
78
- };
79
- /** Execute one scenario against a freshly-scaffolded temp harness. Cleans up always. */
80
- export declare function runScenario(scenario: Scenario, srcRoot: string): ScenarioResult;
81
- /** Load + validate a scenario YAML file. Throws on a malformed/under-specified scenario. */
82
- export declare function loadScenario(file: string): Scenario;
83
- export interface SimulationsDir {
84
- /** Absolute path to `<repoRoot>/.claude/simulations`. */
85
- dir: string;
86
- exists: boolean;
87
- }
88
- export declare function simulationsDir(srcRoot: string): SimulationsDir;
89
- /** List scenario YAML basenames (without extension) in the simulations dir. */
90
- export declare function listScenarios(srcRoot: string): string[];
91
- export declare function loadScenarioByName(srcRoot: string, name: string): Scenario;
92
- export { hasHarness };
93
- //# sourceMappingURL=simulation-runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simulation-runner.d.ts","sourceRoot":"","sources":["../../src/core/simulation-runner.ts"],"names":[],"mappings":"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"}
@@ -1,161 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import yaml from "js-yaml";
4
- import { scaffoldHarnessProject, hasHarness } from "./harness-scaffold.js";
5
- import { runConfiguredHook } from "./hook-runner.js";
6
- /**
7
- * THE shared assertion: compare a hook run result against an expectation. Returns
8
- * PASS / FAIL / SKIP. Two honesty guards:
9
- * - an allow-case (`blocked:false`) where NO hook ran → SKIP (never a vacuous PASS),
10
- * - a block-case where no hook ran → FAIL (the gate was not exercised).
11
- */
12
- export function assertOutcome(result, expect) {
13
- const stream = expect.expectStream ?? "stderr";
14
- if (!result) {
15
- if (expect.blocked === false) {
16
- return { status: "SKIP", detail: "No hook matched the tool — allow-case not exercised (would pass vacuously)." };
17
- }
18
- return { status: "FAIL", detail: "Expected a block but no hook ran for this tool." };
19
- }
20
- const streamText = stream === "stdout" ? result.stdout : result.stderr;
21
- if (expect.blocked) {
22
- const markerOk = !expect.marker || streamText.includes(expect.marker);
23
- const exitOk = expect.exitCode !== undefined ? result.status === expect.exitCode : result.status !== 0;
24
- if (markerOk && exitOk) {
25
- return { status: "PASS", detail: `Blocked as expected (exit ${result.status}${expect.marker ? `, ${expect.marker} on ${stream}` : ""}).` };
26
- }
27
- return {
28
- status: "FAIL",
29
- detail: `Expected block (exit ${expect.exitCode ?? "≠0"}${expect.marker ? `, ${expect.marker} on ${stream}` : ""}) but got exit ${result.status}; marker ${markerOk ? "present" : "absent"}.`,
30
- };
31
- }
32
- if (result.status === 0)
33
- return { status: "PASS", detail: "Allowed (exit 0)." };
34
- return { status: "FAIL", detail: `Expected allow (exit 0) but got exit ${result.status}.` };
35
- }
36
- /** Apply a step's `given` to the scaffolded project (in-place). */
37
- function applyGiven(project, given) {
38
- if (!given)
39
- return;
40
- if (given.clearPlans)
41
- project.clearPlans();
42
- if (given.plan)
43
- project.addPlan({ nested: true });
44
- for (const f of given.files ?? []) {
45
- const abs = path.join(project.dir, f.path);
46
- fs.mkdirSync(path.dirname(abs), { recursive: true });
47
- fs.writeFileSync(abs, f.content);
48
- }
49
- }
50
- /** Run a single step's `when` against the project and assert against `expect`. */
51
- function runStep(project, settings, step) {
52
- applyGiven(project, step.given);
53
- const results = runConfiguredHook(settings, {
54
- projectDir: project.dir,
55
- event: "PreToolUse",
56
- tool: step.when.tool,
57
- toolName: step.when.tool,
58
- toolInput: { file_path: step.when.file_path, command: step.when.command },
59
- only: step.when.hook,
60
- extraEnv: step.when.env,
61
- });
62
- const result = results.find((r) => r.script === step.when.hook);
63
- const outcome = assertOutcome(result, step.expect);
64
- const stream = step.expect.expectStream ?? "stderr";
65
- return {
66
- status: outcome.status,
67
- detail: outcome.detail,
68
- expected: `${step.when.hook}: ${step.expect.blocked ? `block ${step.expect.marker ?? ""} on ${stream}` : "allow"}`.trim(),
69
- actual: result ? `exit ${result.status}` : "no hook ran",
70
- };
71
- }
72
- /** Normalize a scenario into its ordered step list (single-step shorthand → one step). */
73
- function scenarioSteps(scenario) {
74
- if (scenario.steps && scenario.steps.length > 0)
75
- return scenario.steps;
76
- if (scenario.when && scenario.expect) {
77
- return [{ given: scenario.given, when: scenario.when, expect: scenario.expect }];
78
- }
79
- return [];
80
- }
81
- /** worst of the step statuses: FAIL > SKIP > PASS (SKIP is a soft failure for --all). */
82
- function rollupSteps(steps) {
83
- if (steps.length === 0)
84
- return "FAIL";
85
- if (steps.some((s) => s.status === "FAIL"))
86
- return "FAIL";
87
- if (steps.some((s) => s.status === "SKIP"))
88
- return "SKIP";
89
- return "PASS";
90
- }
91
- /** Execute one scenario against a freshly-scaffolded temp harness. Cleans up always. */
92
- export function runScenario(scenario, srcRoot) {
93
- const steps = scenarioSteps(scenario);
94
- if (steps.length === 0) {
95
- return {
96
- name: scenario.name,
97
- description: scenario.description,
98
- status: "FAIL",
99
- steps: [{ status: "FAIL", detail: "Scenario has neither a valid `when/expect` nor `steps`.", expected: "a runnable step", actual: "none" }],
100
- };
101
- }
102
- const project = scaffoldHarnessProject(srcRoot);
103
- try {
104
- const stepResults = steps.map((step) => runStep(project, settingsOf(srcRoot), step));
105
- return { name: scenario.name, description: scenario.description, status: rollupSteps(stepResults), steps: stepResults };
106
- }
107
- finally {
108
- // try/finally so the temp dir (which may hold a synthetic .env) is removed even
109
- // on a spawnSync timeout/throw.
110
- project.cleanup();
111
- }
112
- }
113
- let _settingsCache = null;
114
- function settingsOf(srcRoot) {
115
- if (_settingsCache?.root === srcRoot)
116
- return _settingsCache.settings;
117
- const settings = JSON.parse(fs.readFileSync(path.join(srcRoot, ".claude", "settings.json"), "utf8"));
118
- _settingsCache = { root: srcRoot, settings };
119
- return settings;
120
- }
121
- /** Load + validate a scenario YAML file. Throws on a malformed/under-specified scenario. */
122
- export function loadScenario(file) {
123
- const parsed = yaml.load(fs.readFileSync(file, "utf8"));
124
- if (typeof parsed !== "object" || parsed === null)
125
- throw new Error(`${path.basename(file)}: not a YAML object`);
126
- const s = parsed;
127
- if (typeof s.name !== "string" || s.name.length === 0)
128
- throw new Error(`${path.basename(file)}: missing 'name'`);
129
- const hasSingle = s.when !== undefined && s.expect !== undefined;
130
- const hasSteps = Array.isArray(s.steps) && s.steps.length > 0;
131
- if (!hasSingle && !hasSteps) {
132
- throw new Error(`${path.basename(file)}: must define either when+expect or a non-empty steps list`);
133
- }
134
- return s;
135
- }
136
- export function simulationsDir(srcRoot) {
137
- const dir = path.join(srcRoot, ".claude", "simulations");
138
- return { dir, exists: fs.existsSync(dir) };
139
- }
140
- /** List scenario YAML basenames (without extension) in the simulations dir. */
141
- export function listScenarios(srcRoot) {
142
- const { dir, exists } = simulationsDir(srcRoot);
143
- if (!exists)
144
- return [];
145
- return fs
146
- .readdirSync(dir)
147
- .filter((f) => f.endsWith(".yaml") || f.endsWith(".yml"))
148
- .map((f) => f.replace(/\.ya?ml$/, ""))
149
- .sort();
150
- }
151
- export function loadScenarioByName(srcRoot, name) {
152
- const { dir } = simulationsDir(srcRoot);
153
- for (const ext of [".yaml", ".yml"]) {
154
- const file = path.join(dir, `${name}${ext}`);
155
- if (fs.existsSync(file))
156
- return loadScenario(file);
157
- }
158
- throw new Error(`Scenario '${name}' not found in ${dir}`);
159
- }
160
- export { hasHarness };
161
- //# sourceMappingURL=simulation-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simulation-runner.js","sourceRoot":"","sources":["../../src/core/simulation-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAuB,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAsB,MAAM,kBAAkB,CAAC;AA0EzE;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiC,EAAE,MAAkB;IAClF,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,6EAA6E,EAAE,CAAC;QAClH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iDAAiD,EAAE,CAAC;IACtF,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACvE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACvG,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC5I,CAAC;QACD,OAAO;YACN,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,wBAAwB,MAAM,CAAC,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,MAAM,CAAC,MAAM,YAAY,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG;SAC7L,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAChF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,wCAAwC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;AAC7F,CAAC;AAED,mEAAmE;AACnE,SAAS,UAAU,CAAC,OAAuB,EAAE,KAA4B;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IAC3C,IAAI,KAAK,CAAC,IAAI;QAAE,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;AACF,CAAC;AAED,kFAAkF;AAClF,SAAS,OAAO,CAAC,OAAuB,EAAE,QAAiC,EAAE,IAAc;IAC1F,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE;QAC3C,UAAU,EAAE,OAAO,CAAC,GAAG;QACvB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACpB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACxB,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QACzE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACpB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;KACvB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAC;IACpD,OAAO;QACN,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;QACzH,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,aAAa;KACxD,CAAC;AACH,CAAC;AAED,0FAA0F;AAC1F,SAAS,aAAa,CAAC,QAAkB;IACxC,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACvE,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,yFAAyF;AACzF,SAAS,WAAW,CAAC,KAAmB;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1D,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1D,OAAO,MAAM,CAAC;AACf,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,QAAkB,EAAE,OAAe;IAC9D,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACN,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,yDAAyD,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;SAC3I,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACrF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACzH,CAAC;YAAS,CAAC;QACV,gFAAgF;QAChF,gCAAgC;QAChC,OAAO,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACF,CAAC;AAED,IAAI,cAAc,GAA+D,IAAI,CAAC;AACtF,SAAS,UAAU,CAAC,OAAe;IAClC,IAAI,cAAc,EAAE,IAAI,KAAK,OAAO;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAA4B,CAAC;IAChI,cAAc,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC7C,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChH,MAAM,CAAC,GAAG,MAA2B,CAAC;IACtC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjH,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;IACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,CAAa,CAAC;AACtB,CAAC;AAQD,MAAM,UAAU,cAAc,CAAC,OAAe;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACzD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,OAAe;IAC5C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,EAAE;SACP,WAAW,CAAC,GAAG,CAAC;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACxD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SACrC,IAAI,EAAE,CAAC;AACV,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,IAAY;IAC/D,MAAM,EAAE,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;QAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,kBAAkB,GAAG,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -1,18 +0,0 @@
1
- import type { EventRecord } from "../event-log.js";
2
- import type { InventoryEntry } from "../build-inventory.js";
3
- export type UsageStatus = "available" | "na";
4
- export interface ArtifactUsage {
5
- id: string;
6
- type: string;
7
- count: number;
8
- lastSeen?: string;
9
- status: UsageStatus;
10
- }
11
- export interface UsageReport {
12
- status: UsageStatus;
13
- reason?: string;
14
- artifacts: ArtifactUsage[];
15
- }
16
- export declare function analyzeArtifactUsage(entries: InventoryEntry[], events: EventRecord[]): UsageReport;
17
- export declare function filterUnused(report: UsageReport, threshold?: number): ArtifactUsage[];
18
- //# sourceMappingURL=usage-analyzer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-analyzer.d.ts","sourceRoot":"","sources":["../../../src/core/usage/usage-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC3B;AAQD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CA2BlG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,SAAI,GAAG,aAAa,EAAE,CAGhF"}
@@ -1,41 +0,0 @@
1
- function eventArtifactId(event) {
2
- if (event.event === "skill.invoked" && typeof event.data.skill === "string")
3
- return event.data.skill;
4
- if (event.event === "agent.invoked" && typeof event.data.agent === "string")
5
- return event.data.agent;
6
- return null;
7
- }
8
- export function analyzeArtifactUsage(entries, events) {
9
- const usageEvents = events.filter((e) => eventArtifactId(e) !== null);
10
- if (usageEvents.length === 0) {
11
- return {
12
- status: "na",
13
- reason: "Usage events are not emitted yet; pruning cannot honestly classify artifacts as unused.",
14
- artifacts: entries.map((e) => ({ id: e.id, type: e.type, count: 0, status: "na" })),
15
- };
16
- }
17
- const counts = new Map();
18
- for (const event of usageEvents) {
19
- const id = eventArtifactId(event);
20
- if (!id)
21
- continue;
22
- const row = counts.get(id) ?? { count: 0 };
23
- row.count++;
24
- if (!row.lastSeen || event.ts > row.lastSeen)
25
- row.lastSeen = event.ts;
26
- counts.set(id, row);
27
- }
28
- return {
29
- status: "available",
30
- artifacts: entries.map((entry) => {
31
- const row = counts.get(entry.id);
32
- return { id: entry.id, type: entry.type, count: row?.count ?? 0, lastSeen: row?.lastSeen, status: "available" };
33
- }),
34
- };
35
- }
36
- export function filterUnused(report, threshold = 1) {
37
- if (report.status !== "available")
38
- return [];
39
- return report.artifacts.filter((a) => a.count < threshold);
40
- }
41
- //# sourceMappingURL=usage-analyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage-analyzer.js","sourceRoot":"","sources":["../../../src/core/usage/usage-analyzer.ts"],"names":[],"mappings":"AAmBA,SAAS,eAAe,CAAC,KAAkB;IAC1C,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACrG,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACrG,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAyB,EAAE,MAAqB;IACpF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACtE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACN,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,yFAAyF;YACjG,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;SACnF,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgD,CAAC;IACvE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACN,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACjH,CAAC,CAAC;KACF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,SAAS,GAAG,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;AAC5D,CAAC"}
@@ -1,9 +0,0 @@
1
- export interface ArchiveResult {
2
- file: string;
3
- archived: number;
4
- wrote: boolean;
5
- }
6
- export declare function archiveMemory(memoryDir: string, olderThanDays: number, opts?: {
7
- dryRun?: boolean;
8
- }): ArchiveResult[];
9
- //# sourceMappingURL=archive.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/memory/archive.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CACf;AAYD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,aAAa,EAAE,CAyBxH"}
@@ -1,42 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { renderViews } from "./render-views.js";
4
- import { entryDate, loadStores } from "./store-utils.js";
5
- function cutoffMs(days) {
6
- return Date.now() - days * 86_400_000;
7
- }
8
- function atomicWrite(file, data) {
9
- const tmp = `${file}.tmp`;
10
- fs.writeFileSync(tmp, data, "utf-8");
11
- fs.renameSync(tmp, file);
12
- }
13
- export function archiveMemory(memoryDir, olderThanDays, opts = {}) {
14
- const cutoff = cutoffMs(olderThanDays);
15
- const archiveDir = path.join(memoryDir, "archive");
16
- const results = [];
17
- for (const store of loadStores(memoryDir)) {
18
- const keep = [];
19
- const archive = [];
20
- for (const item of store.items) {
21
- const date = entryDate(item);
22
- if (date && Date.parse(date) < cutoff)
23
- archive.push({ ...item, archivedAt: new Date().toISOString() });
24
- else
25
- keep.push(item);
26
- }
27
- if (archive.length > 0 && !opts.dryRun) {
28
- fs.mkdirSync(archiveDir, { recursive: true });
29
- store.data[store.itemsKey] = keep;
30
- atomicWrite(path.join(memoryDir, store.file), `${JSON.stringify(store.data, null, 2)}\n`);
31
- const archivePath = path.join(archiveDir, store.file);
32
- const prior = fs.existsSync(archivePath) ? JSON.parse(fs.readFileSync(archivePath, "utf-8")) : { archived: [] };
33
- const archived = Array.isArray(prior.archived) ? prior.archived : [];
34
- atomicWrite(archivePath, `${JSON.stringify({ ...prior, archived: [...archived, ...archive] }, null, 2)}\n`);
35
- }
36
- results.push({ file: store.file, archived: archive.length, wrote: archive.length > 0 && !opts.dryRun });
37
- }
38
- if (!opts.dryRun)
39
- renderViews(memoryDir, { check: false });
40
- return results;
41
- }
42
- //# sourceMappingURL=archive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/memory/archive.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export interface CompactResult {
2
- file: string;
3
- removed: number;
4
- wrote: boolean;
5
- }
6
- export declare function compactMemory(memoryDir: string, opts?: {
7
- dryRun?: boolean;
8
- }): CompactResult[];
9
- //# sourceMappingURL=compact.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../src/memory/compact.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CACf;AAQD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,aAAa,EAAE,CAoBjG"}
@@ -1,33 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { renderViews } from "./render-views.js";
4
- import { loadStores } from "./store-utils.js";
5
- function atomicWrite(file, data) {
6
- const tmp = `${file}.tmp`;
7
- fs.writeFileSync(tmp, data, "utf-8");
8
- fs.renameSync(tmp, file);
9
- }
10
- export function compactMemory(memoryDir, opts = {}) {
11
- const results = [];
12
- for (const store of loadStores(memoryDir)) {
13
- const seen = new Set();
14
- const compacted = [];
15
- for (const item of store.items) {
16
- const key = JSON.stringify(item);
17
- if (seen.has(key))
18
- continue;
19
- seen.add(key);
20
- compacted.push(item);
21
- }
22
- const removed = store.items.length - compacted.length;
23
- if (removed > 0 && !opts.dryRun) {
24
- store.data[store.itemsKey] = compacted;
25
- atomicWrite(path.join(memoryDir, store.file), `${JSON.stringify(store.data, null, 2)}\n`);
26
- }
27
- results.push({ file: store.file, removed, wrote: removed > 0 && !opts.dryRun });
28
- }
29
- if (!opts.dryRun)
30
- renderViews(memoryDir, { check: false });
31
- return results;
32
- }
33
- //# sourceMappingURL=compact.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../src/memory/compact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQ9C,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC9C,MAAM,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC;IAC1B,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,OAA6B,EAAE;IAC/E,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,SAAS,GAAmC,EAAE,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QACtD,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,WAAW,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -1,8 +0,0 @@
1
- export interface MemoryConflict {
2
- store: string;
3
- key: string;
4
- ids: string[];
5
- reason: string;
6
- }
7
- export declare function findMemoryConflicts(memoryDir: string): MemoryConflict[];
8
- //# sourceMappingURL=conflicts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/memory/conflicts.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAwBvE"}
@@ -1,28 +0,0 @@
1
- import { entryId, entryTitle, loadStores } from "./store-utils.js";
2
- export function findMemoryConflicts(memoryDir) {
3
- const conflicts = [];
4
- for (const store of loadStores(memoryDir)) {
5
- const byTitle = new Map();
6
- store.items.forEach((entry, i) => {
7
- const title = entryTitle(entry).toLowerCase();
8
- const bucket = byTitle.get(title) ?? [];
9
- bucket.push({ ...entry, __fallback: `${store.file}:${i}` });
10
- byTitle.set(title, bucket);
11
- });
12
- for (const [key, entries] of byTitle) {
13
- if (entries.length < 2)
14
- continue;
15
- const rendered = new Set(entries.map((e) => JSON.stringify(e)));
16
- if (rendered.size > 1) {
17
- conflicts.push({
18
- store: store.file,
19
- key,
20
- ids: entries.map((e, i) => entryId(e, `${store.file}:${i}`)),
21
- reason: "same title/context appears with different entry bodies",
22
- });
23
- }
24
- }
25
- }
26
- return conflicts;
27
- }
28
- //# sourceMappingURL=conflicts.js.map