hippo-memory 1.69.0 → 1.71.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 (1014) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,523 +0,0 @@
1
- /**
2
- * Project_brief first-class object.
3
- *
4
- * A `project_brief` is the living, repo-scoped summary of a repository's state: a
5
- * `summary` body scoped to a `repo`, evolving via the supersede delta lifecycle.
6
- * "Auto-refreshes from receipts" is scoped to a DETERMINISTIC (no-LLM) assembler:
7
- * `refreshBrief` gathers the repo's recent receipts (memory rows tagged
8
- * `path:<repo>`) and assembles them into the brief body. The distinguishing
9
- * capability is therefore the refresh assembler (analog of skill's export
10
- * renderer), not an LLM/async pipeline (deferred).
11
- *
12
- * Reuses the skill/process supersede machinery verbatim (superseded_by self-FK +
13
- * CAS + INSERT-preflight + server-derived version + change_summary + supersede
14
- * tenant-match trigger). It DROPS skill's `skill_name`/`trigger_text` and ADDS
15
- * `repo` (the repo-scoping dimension) + `summary` (the brief body).
16
- *
17
- * The `project_briefs` table is the source of truth (survives memory decay); the
18
- * memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
19
- *
20
- * Lifecycle: active -> superseded (a newer version replaces it) or active ->
21
- * closed (retired).
22
- */
23
- import { BadRequestError, ConflictError, NotFoundError } from './api-errors.js';
24
- import { openHippoDb, closeHippoDb } from './db.js';
25
- import { writeEntry } from './store/entry-writes.js';
26
- import { assertTenantId } from './tenant.js';
27
- import { scopeAdmitSql } from './recall-scope.js';
28
- import { markGraphDirty, removeGraphEntitiesForObject } from './graph/write.js';
29
- import { createMemory, Layer } from './memory.js';
30
- import { appendAuditEvent } from './audit.js';
31
- import { objectHalfLifeDays } from './half-life-migration.js';
32
- import { keysetAfter } from './keyset.js';
33
- import { escapeLike } from './escape.js';
34
- export const VALID_BRIEF_STATES = new Set([
35
- 'active',
36
- 'superseded',
37
- 'closed',
38
- ]);
39
- /** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
40
- * cap than the 4096 short-field convention. */
41
- export const MAX_REPO_LEN = 256;
42
- export const MAX_BRIEF_SUMMARY_LEN = 8192;
43
- export const MAX_CHANGE_SUMMARY_LEN = 4096;
44
- /** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
45
- * + the rendered body). Realistic repos have far fewer recent receipts than this. */
46
- export const MAX_BRIEF_RECEIPTS = 50;
47
- /** Truncate each receipt's headline in the assembled digest. */
48
- export const MAX_RECEIPT_HEADLINE_LEN = 200;
49
- // ---------------------------------------------------------------------------
50
- // Validation
51
- // ---------------------------------------------------------------------------
52
- /**
53
- * Validate + normalise brief fields. `repo` is trimmed and MUST be a single line
54
- * (no newlines): it becomes a path tag on the refresh match AND an H1 heading in
55
- * the assembled digest. `summary` is kept verbatim (operator content) but capped.
56
- * Returns the normalised repo.
57
- */
58
- function validateBriefFields(repo, summary, changeSummary) {
59
- const normalizedRepo = (repo ?? '').trim();
60
- if (normalizedRepo.length === 0)
61
- throw new BadRequestError('saveProjectBrief: repo is required');
62
- if (/[\r\n]/.test(normalizedRepo)) {
63
- throw new BadRequestError('saveProjectBrief: repo must be a single line (no newlines)');
64
- }
65
- if (normalizedRepo.length > MAX_REPO_LEN) {
66
- throw new BadRequestError(`saveProjectBrief: repo exceeds the ${MAX_REPO_LEN}-char cap`);
67
- }
68
- if (!summary || summary.trim().length === 0) {
69
- throw new BadRequestError('saveProjectBrief: summary is required');
70
- }
71
- if (summary.length > MAX_BRIEF_SUMMARY_LEN) {
72
- throw new BadRequestError(`saveProjectBrief: summary exceeds the ${MAX_BRIEF_SUMMARY_LEN}-char cap`);
73
- }
74
- if (changeSummary !== undefined && changeSummary.length > MAX_CHANGE_SUMMARY_LEN) {
75
- throw new BadRequestError(`saveProjectBrief: changeSummary exceeds the ${MAX_CHANGE_SUMMARY_LEN}-char cap`);
76
- }
77
- return { repo: normalizedRepo };
78
- }
79
- function rowToProjectBrief(row) {
80
- return {
81
- id: row.id,
82
- memoryId: row.memory_id,
83
- tenantId: row.tenant_id,
84
- repo: row.repo,
85
- summary: row.summary,
86
- version: row.version,
87
- // SAFETY: row.status is DB-constrained to BriefStatus values; every INSERT/
88
- // UPDATE in this file writes only the literal 'active' | 'superseded' | 'closed'.
89
- status: row.status,
90
- supersededBy: row.superseded_by,
91
- supersededAt: row.superseded_at,
92
- changeSummary: row.change_summary,
93
- closedAt: row.closed_at,
94
- createdAt: row.created_at,
95
- };
96
- }
97
- const BRIEF_COLS = `
98
- id, memory_id, tenant_id, repo, summary, version, status,
99
- superseded_by, superseded_at, change_summary, closed_at, created_at
100
- `;
101
- /** Recall-surface content for the memory mirror: repo + summary. Named (mirrors
102
- * buildSkillContent) so the recall surface is deterministic + unit-testable. */
103
- function buildBriefContent(repo, summary) {
104
- return `${repo}\n\n${summary}`;
105
- }
106
- // Preflight the supersede target BEFORE inserting the new row (so the new
107
- // autoincrement id can never be its own supersede target); read the
108
- // predecessor version in the same SELECT for server-derived versioning.
109
- // Mirrors saveSkill / saveProcess.
110
- function preflightBriefSupersede(db, tenantId, supersedesId) {
111
- // SAFETY: SELECT projects exactly status, version; .get() returns that
112
- // shape for the matching row, or undefined when no brief/tenant pair matches.
113
- const pred = db.prepare(`SELECT status, version FROM project_briefs WHERE id = ? AND tenant_id = ?`).get(supersedesId, tenantId);
114
- if (!pred) {
115
- throw new NotFoundError(`saveProjectBrief: brief ${supersedesId} to supersede not found for tenant ${tenantId}`);
116
- }
117
- if (pred.status !== 'active') {
118
- throw new ConflictError(`saveProjectBrief: brief ${supersedesId} is not active (status='${pred.status}'); only active briefs can be superseded.`);
119
- }
120
- return pred.version + 1;
121
- }
122
- function insertBriefRow(db, memoryId, w, version) {
123
- const result = db.prepare(`
124
- INSERT INTO project_briefs(
125
- memory_id, tenant_id, repo, summary, version,
126
- status, superseded_by, superseded_at, change_summary, closed_at, created_at
127
- ) VALUES (?, ?, ?, ?, ?, 'active', NULL, NULL, ?, NULL, ?)
128
- `).run(memoryId, w.tenantId, w.repo, w.summary, version, w.changeSummary, w.now);
129
- return Number(result.lastInsertRowid ?? 0);
130
- }
131
- function supersedeBriefRow(db, w, supersedesId, briefId, version) {
132
- const sup = db.prepare(`
133
- UPDATE project_briefs
134
- SET status = 'superseded', superseded_by = ?, superseded_at = ?
135
- WHERE id = ? AND tenant_id = ? AND status = 'active' AND id != ?
136
- `).run(briefId, w.now, supersedesId, w.tenantId, briefId);
137
- if (sup.changes === 0) {
138
- throw new ConflictError(`saveProjectBrief: brief ${supersedesId} could not be superseded (no longer active or self-reference).`);
139
- }
140
- appendAuditEvent(db, {
141
- tenantId: w.tenantId,
142
- actor: w.actor,
143
- op: 'project_brief_supersede',
144
- targetId: String(supersedesId),
145
- metadata: {
146
- brief_id: supersedesId,
147
- superseded_by: briefId,
148
- new_version: version,
149
- refreshed: w.isRefresh,
150
- ...w.refreshAuditExtra,
151
- },
152
- });
153
- }
154
- /** The afterWrite body: preflight, INSERT, supersede, reload, create audit, all in one SAVEPOINT. */
155
- function writeBriefRow(db, memoryId, w) {
156
- const version = w.supersedesId !== undefined ? preflightBriefSupersede(db, w.tenantId, w.supersedesId) : 1;
157
- const briefId = insertBriefRow(db, memoryId, w, version);
158
- if (w.supersedesId !== undefined)
159
- supersedeBriefRow(db, w, w.supersedesId, briefId, version);
160
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
161
- // columns; .get() returns that row, or undefined only if the
162
- // just-inserted id can't be found.
163
- const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ?`)
164
- .get(briefId);
165
- if (!row)
166
- throw new Error('saveProjectBrief: failed to reload saved brief row');
167
- // GDPR-light metadata: ids + flags only, no brief text.
168
- appendAuditEvent(db, {
169
- tenantId: w.tenantId,
170
- actor: w.actor,
171
- op: 'project_brief_create',
172
- targetId: String(briefId),
173
- metadata: {
174
- brief_id: briefId,
175
- repo: w.repo,
176
- version,
177
- refreshed: w.isRefresh,
178
- ...w.refreshAuditExtra,
179
- },
180
- });
181
- return row;
182
- }
183
- /**
184
- * Create a project_brief (or a new version that supersedes an existing one). Writes
185
- * the memory mirror + the project_briefs row atomically inside writeEntry's
186
- * SAVEPOINT. When supersedesBriefId is given, the referenced ACTIVE row is
187
- * preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
188
- * in the same SAVEPOINT; the new version = predecessor.version + 1 (server-derived).
189
- */
190
- export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
191
- assertTenantId('saveProjectBrief', tenantId);
192
- const { repo } = validateBriefFields(opts.repo, opts.summary, opts.changeSummary);
193
- const isSupersede = opts.supersedesBriefId !== undefined;
194
- const changeSummary = isSupersede ? (opts.changeSummary ?? null) : null;
195
- const isRefresh = opts.refreshReceiptCount !== undefined;
196
- const refreshAuditExtra = {};
197
- if (isRefresh)
198
- refreshAuditExtra.receipt_count = opts.refreshReceiptCount;
199
- const now = new Date().toISOString();
200
- const content = buildBriefContent(repo, opts.summary);
201
- const tags = ['project_brief', ...(opts.extraTags ?? [])];
202
- const mem = createMemory(content, {
203
- tags,
204
- layer: Layer.Semantic,
205
- confidence: 'verified',
206
- source: 'project_brief',
207
- baseHalfLifeDays: objectHalfLifeDays(hippoRoot),
208
- tenantId,
209
- });
210
- const w = {
211
- tenantId,
212
- actor,
213
- repo,
214
- summary: opts.summary,
215
- changeSummary,
216
- supersedesId: opts.supersedesBriefId,
217
- isRefresh,
218
- refreshAuditExtra,
219
- now,
220
- };
221
- let savedRow;
222
- writeEntry(hippoRoot, mem, {
223
- actor,
224
- afterWrite: (db, memoryId) => {
225
- savedRow = writeBriefRow(db, memoryId, w);
226
- },
227
- // afterCommit covers refreshBrief (delegates here) + brief new/supersede.
228
- afterCommit: () => markGraphDirty(hippoRoot, tenantId, mem.id),
229
- });
230
- if (!savedRow) {
231
- throw new Error('saveProjectBrief: afterWrite did not populate the row');
232
- }
233
- return rowToProjectBrief(savedRow);
234
- }
235
- /**
236
- * Close (retire) an active brief. CAS guard WHERE status='active'; 0 changes
237
- * distinguishes not-found from not-active. A superseded row is terminal.
238
- */
239
- export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
240
- assertTenantId('closeProjectBrief', tenantId);
241
- const now = new Date().toISOString();
242
- const db = openHippoDb(hippoRoot);
243
- try {
244
- db.exec('BEGIN IMMEDIATE');
245
- try {
246
- const updateResult = db.prepare(`
247
- UPDATE project_briefs
248
- SET status = 'closed', closed_at = ?
249
- WHERE id = ? AND tenant_id = ? AND status = 'active'
250
- `).run(now, id, tenantId);
251
- if (updateResult.changes === 0) {
252
- // SAFETY: SELECT projects exactly the status column; .get() returns that
253
- // shape, or undefined when the id/tenant pair doesn't exist.
254
- const existing = db.prepare(`SELECT status FROM project_briefs WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
255
- if (!existing) {
256
- throw new NotFoundError(`closeProjectBrief: brief ${id} not found for tenant ${tenantId}`);
257
- }
258
- throw new ConflictError(`closeProjectBrief: brief ${id} is not active (status='${existing.status}'); only active briefs can be closed.`);
259
- }
260
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
261
- // columns; .get() returns that row for the just-updated id, or undefined
262
- // only in an impossible race since the UPDATE above already matched it.
263
- const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ? AND tenant_id = ?`)
264
- .get(id, tenantId);
265
- if (!row)
266
- throw new NotFoundError(`closeProjectBrief: brief ${id} not found after UPDATE`);
267
- appendAuditEvent(db, {
268
- tenantId,
269
- actor,
270
- op: 'project_brief_close',
271
- targetId: String(id),
272
- metadata: { brief_id: id },
273
- });
274
- db.exec('COMMIT');
275
- const closed = rowToProjectBrief(row);
276
- // Closing removes the object from the graph. Remove its rows DIRECTLY (deterministic),
277
- // not only via an enqueued rebuild whose queue item is lost if the mirror is later
278
- // forgotten (the queue row cascade-deletes with the memory), which would leave the closed
279
- // object stale and could block that forget. Still enqueue when a mirror exists
280
- // so a concurrent rebuild re-derives consistently (harmless if it also runs).
281
- removeGraphEntitiesForObject(hippoRoot, tenantId, 'project', closed.id);
282
- if (closed.memoryId) {
283
- markGraphDirty(hippoRoot, tenantId, closed.memoryId);
284
- }
285
- return closed;
286
- }
287
- catch (e) {
288
- try {
289
- db.exec('ROLLBACK');
290
- }
291
- catch {
292
- // Ignore rollback failures — the throw below is what matters.
293
- }
294
- throw e;
295
- }
296
- }
297
- finally {
298
- closeHippoDb(db);
299
- }
300
- }
301
- export function loadProjectBriefById(hippoRoot, tenantId, id) {
302
- assertTenantId('loadProjectBriefById', tenantId);
303
- const db = openHippoDb(hippoRoot);
304
- try {
305
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
306
- // columns; .get() returns that row, or undefined when the id/tenant pair
307
- // doesn't exist.
308
- const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ? AND tenant_id = ?`)
309
- .get(id, tenantId);
310
- return row ? rowToProjectBrief(row) : null;
311
- }
312
- finally {
313
- closeHippoDb(db);
314
- }
315
- }
316
- export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
317
- assertTenantId('loadProjectBriefs', tenantId);
318
- const limit = opts.limit ?? 100;
319
- const after = keysetAfter('created_at', 'id', opts.after);
320
- if (opts.status && !VALID_BRIEF_STATES.has(opts.status)) {
321
- throw new BadRequestError(`loadProjectBriefs: status must be one of ${Array.from(VALID_BRIEF_STATES).join('|')}; got ${opts.status}`);
322
- }
323
- const db = openHippoDb(hippoRoot);
324
- try {
325
- const clauses = ['tenant_id = ?'];
326
- const params = [tenantId];
327
- if (opts.status) {
328
- clauses.push('status = ?');
329
- params.push(opts.status);
330
- }
331
- if (opts.repo) {
332
- clauses.push('repo = ?');
333
- params.push(opts.repo);
334
- }
335
- params.push(...after.params, limit);
336
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow columns
337
- // regardless of the dynamic WHERE clause built above; .all() returns rows
338
- // in that shape.
339
- const rows = db.prepare(`
340
- SELECT ${BRIEF_COLS} FROM project_briefs
341
- WHERE ${clauses.join(' AND ')}${after.sql}
342
- ORDER BY created_at DESC, id DESC
343
- LIMIT ?
344
- `).all(...params);
345
- return rows.map(rowToProjectBrief);
346
- }
347
- finally {
348
- closeHippoDb(db);
349
- }
350
- }
351
- /**
352
- * The repo's CURRENT active brief, or null. By convention there is one active brief
353
- * per (tenant, repo); if an operator created more than one (the DB does not prevent
354
- * it, consistent with every other first-class object), the MOST-RECENT active row wins.
355
- */
356
- export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
357
- assertTenantId('loadActiveBriefForRepo', tenantId);
358
- const db = openHippoDb(hippoRoot);
359
- try {
360
- // SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
361
- // columns; .get() returns that row, or undefined when no active brief
362
- // exists for this tenant/repo.
363
- const row = db.prepare(`
364
- SELECT ${BRIEF_COLS} FROM project_briefs
365
- WHERE tenant_id = ? AND repo = ? AND status = 'active'
366
- ORDER BY created_at DESC, id DESC
367
- LIMIT 1
368
- `).get(tenantId, repo);
369
- return row ? rowToProjectBrief(row) : null;
370
- }
371
- finally {
372
- closeHippoDb(db);
373
- }
374
- }
375
- // ---------------------------------------------------------------------------
376
- // Refresh assembler (the distinguishing deliverable)
377
- // ---------------------------------------------------------------------------
378
- /** Single-line headline for a receipt: first non-empty line, newline-stripped,
379
- * truncated. Deterministic + safe for the markdown bullet list. */
380
- function receiptHeadline(content) {
381
- const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
382
- const trimmed = firstLine.trim();
383
- return trimmed.length > MAX_RECEIPT_HEADLINE_LEN
384
- ? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
385
- : trimmed;
386
- }
387
- /** The repo's receipt rows, newest first, capped at MAX_BRIEF_RECEIPTS. */
388
- function loadBriefReceipts(hippoRoot, tenantId, normalizedRepo) {
389
- const tag = `path:${normalizedRepo.toLowerCase()}`;
390
- const likeParam = `%"${escapeLike(tag)}"%`;
391
- const deny = scopeAdmitSql('');
392
- const db = openHippoDb(hippoRoot);
393
- try {
394
- // SAFETY: SELECT projects exactly id, created, source, content (the
395
- // ReceiptRow columns); .all() returns rows in that shape.
396
- return db.prepare(`
397
- SELECT id, created, source, content FROM memories
398
- WHERE tenant_id = ?
399
- AND source != 'project_brief'
400
- AND LOWER(tags_json) LIKE ? ESCAPE '\\'
401
- AND ${deny.sql}
402
- ORDER BY created DESC, id DESC
403
- LIMIT ?
404
- `).all(tenantId, likeParam, ...deny.params, MAX_BRIEF_RECEIPTS);
405
- }
406
- finally {
407
- closeHippoDb(db);
408
- }
409
- }
410
- // NOTE on ordering: the `id DESC` tiebreak is lexical on a random-ish memory id
411
- // (e.g. `sem_<hex>`), NOT chronological — within the same `created` timestamp the
412
- // order is stable-but-arbitrary, not insertion order. `created DESC` is the real
413
- // recency ordering.
414
- //
415
- // Budget-aware assembly: the digest is the
416
- // brief `summary`, which saveProjectBrief caps at MAX_BRIEF_SUMMARY_LEN. The
417
- // receipt/headline caps (50 x ~200) could otherwise build an ~11KB body that the
418
- // store then REJECTS, breaking refresh for inputs within the advertised caps. So
419
- // include receipt lines newest-first only while they fit under the cap (reserving
420
- // slack for the header + an omission footer), and note the omitted remainder.
421
- function fitReceiptLines(receipts) {
422
- const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
423
- const receiptLines = [];
424
- if (receipts.length > 0) {
425
- // Header + "## Recent receipts" + a worst-case omission footer cost; keep slack
426
- // so the joined markdown stays <= MAX_BRIEF_SUMMARY_LEN even after the footer.
427
- const SLACK = 400;
428
- let bodyBudget = MAX_BRIEF_SUMMARY_LEN - SLACK;
429
- for (const r of receipts) {
430
- const line = buildReceiptLine(r);
431
- if (line.length + 1 > bodyBudget)
432
- break;
433
- receiptLines.push(line);
434
- bodyBudget -= line.length + 1;
435
- }
436
- }
437
- return receiptLines;
438
- }
439
- function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
440
- const omitted = receiptCount - receiptLines.length;
441
- const lines = [];
442
- lines.push(`# Project Brief: ${normalizedRepo}`);
443
- lines.push('');
444
- lines.push(omitted > 0
445
- ? `_Auto-assembled from ${receiptLines.length} of ${receiptCount} receipt(s)._`
446
- : `_Auto-assembled from ${receiptCount} receipt(s)._`);
447
- lines.push('');
448
- lines.push('## Recent receipts');
449
- lines.push('');
450
- if (receiptCount === 0) {
451
- lines.push(`_No receipts found for ${normalizedRepo}._`);
452
- }
453
- else {
454
- lines.push(...receiptLines);
455
- if (omitted > 0) {
456
- lines.push('');
457
- lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
458
- }
459
- }
460
- // Belt-and-suspenders: the budget loop keeps us under the cap, but hard-clamp the
461
- // joined string so the store's NOT-NULL/<=cap contract can never be violated even
462
- // for a pathological single oversized line.
463
- let markdown = lines.join('\n');
464
- if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
465
- markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
466
- }
467
- return markdown;
468
- }
469
- /**
470
- * Assemble the repo's recent receipts into a deterministic markdown digest, and
471
- * return it WITH the receipt count (the count feeds refreshBrief's change_summary +
472
- * audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
473
- * `summary` is NOT NULL), including the zero-receipts case.
474
- *
475
- * A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
476
- * brief's OWN memory mirror (source='project_brief') is excluded so a brief never
477
- * becomes its own receipt on the next refresh. The match is against the JSON-array
478
- * serialization (each element is a double-quoted string `"path:hippo"`); the
479
- * surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
480
- * `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
481
- */
482
- export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
483
- assertTenantId('assembleBriefFromReceipts', tenantId);
484
- const normalizedRepo = (repo ?? '').trim();
485
- if (normalizedRepo.length === 0) {
486
- throw new BadRequestError('assembleBriefFromReceipts: repo is required');
487
- }
488
- const receipts = loadBriefReceipts(hippoRoot, tenantId, normalizedRepo);
489
- const markdown = renderBriefDigest(normalizedRepo, receipts.length, fitReceiptLines(receipts));
490
- return { markdown, receiptCount: receipts.length };
491
- }
492
- /**
493
- * Auto-refresh the repo's brief from its receipts: assemble the digest, then create
494
- * a new version. If the repo already has an active brief it is superseded (the
495
- * change_summary records the auto-refresh + the audit metadata carries
496
- * `refreshed: true`); otherwise a v1 is created. Returns the new brief.
497
- *
498
- * The assemble (a read of `memories`) happens BEFORE writeEntry opens its SAVEPOINT;
499
- * a concurrent receipt write landing between the read and the brief write simply
500
- * appears in the NEXT refresh — the brief is a derived snapshot, not a transactional
501
- * aggregate, so no consistency invariant is violated.
502
- */
503
- export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
504
- assertTenantId('refreshBrief', tenantId);
505
- const normalizedRepo = (repo ?? '').trim();
506
- if (normalizedRepo.length === 0)
507
- throw new BadRequestError('refreshBrief: repo is required');
508
- const { markdown, receiptCount } = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
509
- const active = loadActiveBriefForRepo(hippoRoot, tenantId, normalizedRepo);
510
- return saveProjectBrief(hippoRoot, tenantId, {
511
- repo: normalizedRepo,
512
- summary: markdown,
513
- changeSummary: active ? `auto-refresh from ${receiptCount} receipt(s)` : undefined,
514
- supersedesBriefId: active ? active.id : undefined,
515
- refreshReceiptCount: receiptCount,
516
- // Tag the refreshed brief's mirror as repo-local so path-aware recall boosts
517
- // it like the manual `brief new`/`supersede` paths do.
518
- // Safe vs self-recursion: assembleBriefFromReceipts excludes
519
- // source='project_brief', so the brief never becomes its own receipt.
520
- extraTags: [`path:${normalizedRepo.toLowerCase()}`],
521
- }, actor);
522
- }
523
- //# sourceMappingURL=project-briefs.js.map
@@ -1,18 +0,0 @@
1
- import { MemoryEntry } from './memory.js';
2
- export interface ProvenanceCoverage {
3
- rawTotal: number;
4
- rawWithEnvelope: number;
5
- coverage: number;
6
- gaps: Array<{
7
- id: string;
8
- missing: ('owner' | 'artifact_ref')[];
9
- }>;
10
- }
11
- /**
12
- * Provenance coverage gate: every `kind='raw'` row must carry both `owner`
13
- * and `artifact_ref`. Distilled / superseded / archived rows are excluded —
14
- * those are derivative or terminal, not source receipts. Coverage of 1.0 on
15
- * a non-empty raw set is the ship gate from the Company Brain scorecard.
16
- */
17
- export declare function buildProvenanceCoverage(entries: MemoryEntry[]): ProvenanceCoverage;
18
- //# sourceMappingURL=provenance-coverage.d.ts.map
@@ -1,34 +0,0 @@
1
- /**
2
- * Per-key token-bucket rate limiter for inbound /v1/* requests.
3
- *
4
- * Bounds api-key-id enumeration: a
5
- * client that drains its bucket is denied until it refills. Dependency-free
6
- * and unit-testable in isolation via the injectable `now`.
7
- */
8
- export interface RateLimiter {
9
- /**
10
- * Consume one token for `key`. Returns true if the request is allowed,
11
- * false if the key's bucket is exhausted. `now` (epoch ms) is injectable
12
- * for deterministic tests.
13
- */
14
- check(key: string, now?: number): boolean;
15
- readonly retryAfterSec: number;
16
- }
17
- export interface RateLimiterOpts {
18
- /** Sustained refill rate in tokens per second. */
19
- ratePerSec: number;
20
- /** Bucket capacity — the largest burst a fresh client may spend at once. */
21
- burst: number;
22
- /** A bucket untouched for this many ms is dropped by the throttled sweep. */
23
- idleEvictMs: number;
24
- /** Hard cap on tracked keys; the least-recently-used key is evicted on overflow. */
25
- maxKeys: number;
26
- }
27
- /**
28
- * Build a token-bucket limiter. Memory is bounded two ways: a sweep (throttled
29
- * to once per `idleEvictMs`) drops idle buckets, and a hard `maxKeys` cap evicts
30
- * the least-recently-used key, so a client rotating source addresses cannot
31
- * grow the map without bound between sweeps.
32
- */
33
- export declare function createRateLimiter(opts: RateLimiterOpts): RateLimiter;
34
- //# sourceMappingURL=rate-limit.d.ts.map
@@ -1,20 +0,0 @@
1
- import type { DatabaseSyncLike } from './db.js';
2
- /**
3
- * Path A backfill cleanup: existing raw_archive rows that were archived BEFORE
4
- * commit 70180b5 left their markdown mirrors at <hippoRoot>/<layer>/<id>.md
5
- * with original content intact. The DB is already redacted via migration v20;
6
- * this function deletes those filesystem mirrors so RTBF holds for historical
7
- * archives too.
8
- *
9
- * Per-row tracking via raw_archive.mirror_cleaned_at (added in v21):
10
- * - SELECT only rows WHERE mirror_cleaned_at IS NULL.
11
- * - On success (every layer either deleted or didn't exist), UPDATE the row
12
- * with the cleanup timestamp.
13
- * - On any unlink failure, leave mirror_cleaned_at NULL so the next
14
- * openHippoDb call retries. Warn (capped at MAX_WARN_LOGS rows per call).
15
- *
16
- * Steady-state cost is one SELECT returning empty after every row has been
17
- * cleaned successfully.
18
- */
19
- export declare function cleanupArchivedMirrors(hippoRoot: string, db: DatabaseSyncLike): void;
20
- //# sourceMappingURL=raw-archive-mirror-cleanup.d.ts.map
@@ -1,24 +0,0 @@
1
- import type { DatabaseSyncLike } from './db.js';
2
- export interface ArchiveOpts {
3
- reason: string;
4
- who: string;
5
- /**
6
- * Optional hook invoked inside the same SAVEPOINT as the archive INSERT/DELETE,
7
- * after the audit row is appended and before RELEASE. Used by the Slack
8
- * deletion connector to mark the deletion event seen atomically — a crash
9
- * mid-archive must not leave the deletion event untracked. Throwing rolls
10
- * back the entire archive (including the audit row).
11
- */
12
- afterArchive?: (db: DatabaseSyncLike, archivedMemoryId: string) => void;
13
- }
14
- /**
15
- * The only legitimate path to remove a `kind='raw'` row from `memories`.
16
- *
17
- * Snapshots the full row into `raw_archive`, flips `kind` to `'archived'` so the
18
- * append-only trigger lets the delete through, then deletes the row. All in one
19
- * write scope, which nests inside an outer transaction (e.g. batchWriteAndDelete).
20
- *
21
- * Throws if the row does not exist or is not `kind='raw'`. Returns the archived_at it wrote.
22
- */
23
- export declare function archiveRawMemory(db: DatabaseSyncLike, id: string, opts: ArchiveOpts): string;
24
- //# sourceMappingURL=raw-archive.d.ts.map