hippo-memory 1.70.0 → 1.72.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 (855) hide show
  1. package/README.md +2 -2
  2. package/dist/agent-memories/apply.d.ts +0 -11
  3. package/dist/agent-memories/apply.js +6 -21
  4. package/dist/agent-memories/claude-code.d.ts +4 -2
  5. package/dist/agent-memories/claude-code.js +15 -6
  6. package/dist/agent-memories/codex.js +1 -1
  7. package/dist/agent-memories/copilot.d.ts +1 -3
  8. package/dist/agent-memories/copilot.js +1 -17
  9. package/dist/agent-memories/files.js +23 -12
  10. package/dist/agent-memories/markdown.d.ts +1 -3
  11. package/dist/agent-memories/markdown.js +1 -3
  12. package/dist/agent-memories/project-folds.d.ts +10 -0
  13. package/dist/agent-memories/project-folds.js +34 -0
  14. package/dist/agent-memories/report.js +2 -1
  15. package/dist/agent-memories/sync.d.ts +4 -2
  16. package/dist/agent-memories/sync.js +18 -11
  17. package/dist/api/assemble.d.ts +7 -44
  18. package/dist/api/assemble.js +3 -23
  19. package/dist/api/audit.d.ts +33 -1
  20. package/dist/api/audit.js +48 -1
  21. package/dist/api/auth.d.ts +20 -26
  22. package/dist/api/auth.js +43 -29
  23. package/dist/api/auto-sleep.d.ts +5 -2
  24. package/dist/api/auto-sleep.js +9 -5
  25. package/dist/api/availability.d.ts +2 -15
  26. package/dist/api/availability.js +4 -18
  27. package/dist/api/cards.d.ts +42 -0
  28. package/dist/api/cards.js +52 -0
  29. package/dist/api/conflicts.d.ts +28 -0
  30. package/dist/api/conflicts.js +61 -0
  31. package/dist/api/context-render.js +4 -3
  32. package/dist/api/context-select.js +12 -15
  33. package/dist/api/context-types.d.ts +10 -35
  34. package/dist/api/context.d.ts +5 -22
  35. package/dist/api/context.js +38 -46
  36. package/dist/api/continuity.d.ts +47 -0
  37. package/dist/api/continuity.js +66 -0
  38. package/dist/{cli → api}/correction-latency.d.ts +2 -14
  39. package/dist/{cli → api}/correction-latency.js +2 -14
  40. package/dist/api/dormant.d.ts +5 -21
  41. package/dist/api/dormant.js +11 -28
  42. package/dist/api/drill-down.d.ts +7 -46
  43. package/dist/api/drill-down.js +6 -27
  44. package/dist/api/embeddings.d.ts +17 -0
  45. package/dist/api/embeddings.js +28 -0
  46. package/dist/api/error-reply.d.ts +8 -0
  47. package/dist/api/error-reply.js +21 -0
  48. package/dist/api/forget.d.ts +11 -26
  49. package/dist/api/forget.js +23 -35
  50. package/dist/api/goals.d.ts +1 -1
  51. package/dist/api/goals.js +5 -9
  52. package/dist/api/graph.d.ts +8 -0
  53. package/dist/api/graph.js +7 -0
  54. package/dist/api/index.d.ts +6 -2
  55. package/dist/api/index.js +6 -2
  56. package/dist/api/instruction-detect.js +21 -6
  57. package/dist/api/learn.d.ts +4 -0
  58. package/dist/api/learn.js +53 -27
  59. package/dist/api/ledger-db.d.ts +2 -5
  60. package/dist/api/ledger-db.js +5 -35
  61. package/dist/api/memories.d.ts +23 -0
  62. package/dist/api/memories.js +46 -0
  63. package/dist/api/objects.d.ts +9 -0
  64. package/dist/api/objects.js +11 -0
  65. package/dist/api/on-store.js +5 -3
  66. package/dist/api/outcome.js +1 -1
  67. package/dist/api/pilot-arm.d.ts +1 -11
  68. package/dist/api/pilot-arm.js +5 -45
  69. package/dist/api/predictions.d.ts +11 -0
  70. package/dist/api/predictions.js +24 -0
  71. package/dist/api/projects.d.ts +21 -0
  72. package/dist/api/projects.js +24 -0
  73. package/dist/api/promote.d.ts +13 -17
  74. package/dist/api/promote.js +12 -20
  75. package/dist/api/prompt-hook.d.ts +19 -6
  76. package/dist/api/prompt-hook.js +54 -13
  77. package/dist/api/provenance-coverage.d.ts +14 -0
  78. package/dist/{cli → api}/provenance-coverage.js +2 -6
  79. package/dist/api/recall-cli.d.ts +58 -0
  80. package/dist/api/recall-cli.js +103 -0
  81. package/dist/api/recall-core.js +17 -9
  82. package/dist/api/recall-finish.d.ts +53 -0
  83. package/dist/api/recall-finish.js +30 -0
  84. package/dist/api/recall-history.d.ts +17 -84
  85. package/dist/api/recall-history.js +15 -88
  86. package/dist/api/recall-pipeline.d.ts +2 -3
  87. package/dist/api/recall-pipeline.js +21 -15
  88. package/dist/api/recall-request.js +1 -1
  89. package/dist/api/recall-types.d.ts +64 -304
  90. package/dist/api/recall.d.ts +3 -34
  91. package/dist/api/recall.js +63 -89
  92. package/dist/api/refine.d.ts +7 -0
  93. package/dist/api/refine.js +10 -0
  94. package/dist/api/remember-local.d.ts +57 -0
  95. package/dist/api/remember-local.js +90 -0
  96. package/dist/api/remember.d.ts +20 -2
  97. package/dist/api/remember.js +16 -3
  98. package/dist/api/session-end.d.ts +22 -0
  99. package/dist/api/session-end.js +101 -0
  100. package/dist/api/sleep-run.d.ts +2 -4
  101. package/dist/api/sleep-run.js +28 -28
  102. package/dist/api/sleep.d.ts +9 -28
  103. package/dist/api/status.d.ts +24 -0
  104. package/dist/api/status.js +40 -0
  105. package/dist/api/store-init.d.ts +4 -0
  106. package/dist/api/store-init.js +9 -0
  107. package/dist/api/tokens.d.ts +3 -10
  108. package/dist/api/tokens.js +4 -11
  109. package/dist/api/types.d.ts +8 -29
  110. package/dist/api/types.js +10 -23
  111. package/dist/capture/caller-session.d.ts +0 -3
  112. package/dist/capture/caller-session.js +1 -12
  113. package/dist/capture/capture-error.d.ts +2 -2
  114. package/dist/capture/capture-error.js +23 -18
  115. package/dist/capture/codex-patch.js +3 -1
  116. package/dist/capture/command.d.ts +4 -12
  117. package/dist/capture/command.js +39 -114
  118. package/dist/capture/compact.d.ts +4 -15
  119. package/dist/capture/compact.js +26 -30
  120. package/dist/capture/compaction-items-caller.js +11 -20
  121. package/dist/capture/compaction-record.d.ts +7 -93
  122. package/dist/capture/compaction-record.js +34 -399
  123. package/dist/capture/compaction-spool.d.ts +5 -3
  124. package/dist/capture/compaction-spool.js +21 -7
  125. package/dist/capture/copilot-transcript.d.ts +2 -1
  126. package/dist/capture/copilot-transcript.js +2 -1
  127. package/dist/capture/extract.d.ts +5 -2
  128. package/dist/capture/extract.js +4 -3
  129. package/dist/capture/failure-caller.d.ts +1 -1
  130. package/dist/capture/failure-caller.js +21 -16
  131. package/dist/capture/failure-reading.d.ts +2 -1
  132. package/dist/capture/failure-reading.js +7 -9
  133. package/dist/capture/pre-compact-caller.js +5 -4
  134. package/dist/capture/session-digest.d.ts +1 -1
  135. package/dist/capture/session-digest.js +17 -10
  136. package/dist/capture/session-end-caller.js +2 -1
  137. package/dist/capture/session-worker.js +3 -4
  138. package/dist/capture/transcript.d.ts +4 -11
  139. package/dist/capture/transcript.js +10 -21
  140. package/dist/capture/working-state.d.ts +4 -2
  141. package/dist/capture/working-state.js +4 -2
  142. package/dist/cli/api-context.d.ts +3 -0
  143. package/dist/cli/api-context.js +6 -0
  144. package/dist/cli/audit-prune.d.ts +1 -59
  145. package/dist/cli/audit-prune.js +2 -61
  146. package/dist/cli/audit.d.ts +1 -1
  147. package/dist/cli/audit.js +42 -43
  148. package/dist/cli/auth.d.ts +2 -2
  149. package/dist/cli/auth.js +61 -44
  150. package/dist/cli/briefs.d.ts +1 -4
  151. package/dist/cli/briefs.js +42 -301
  152. package/dist/cli/card.d.ts +2 -2
  153. package/dist/cli/card.js +63 -56
  154. package/dist/cli/client.d.ts +12 -27
  155. package/dist/cli/client.js +41 -44
  156. package/dist/cli/compact-resume-payload.js +4 -3
  157. package/dist/cli/context.d.ts +2 -3
  158. package/dist/cli/context.js +22 -18
  159. package/dist/cli/continuity.d.ts +6 -6
  160. package/dist/cli/continuity.js +81 -86
  161. package/dist/cli/curate.d.ts +13 -17
  162. package/dist/cli/curate.js +88 -116
  163. package/dist/cli/dag.d.ts +4 -4
  164. package/dist/cli/dag.js +55 -34
  165. package/dist/cli/decisions.d.ts +2 -4
  166. package/dist/cli/decisions.js +18 -309
  167. package/dist/cli/eval.d.ts +1 -1
  168. package/dist/cli/eval.js +27 -26
  169. package/dist/cli/exit.d.ts +6 -0
  170. package/dist/cli/exit.js +11 -0
  171. package/dist/cli/explain.d.ts +2 -3
  172. package/dist/cli/explain.js +25 -27
  173. package/dist/cli/flag-values.d.ts +6 -1
  174. package/dist/cli/flag-values.js +42 -15
  175. package/dist/cli/flags.d.ts +0 -288
  176. package/dist/cli/flags.js +3 -138
  177. package/dist/cli/github.d.ts +14 -0
  178. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  179. package/dist/cli/goals.d.ts +2 -2
  180. package/dist/cli/goals.js +46 -50
  181. package/dist/cli/graph.d.ts +3 -0
  182. package/dist/cli/graph.js +83 -0
  183. package/dist/cli/hook-runtime.d.ts +12 -32
  184. package/dist/cli/hook-runtime.js +21 -64
  185. package/dist/cli/incidents.d.ts +3 -0
  186. package/dist/cli/incidents.js +112 -0
  187. package/dist/cli/init.d.ts +2 -2
  188. package/dist/cli/init.js +33 -30
  189. package/dist/cli/install-steps.d.ts +2 -1
  190. package/dist/cli/install-steps.js +13 -14
  191. package/dist/cli/last-sleep.d.ts +2 -1
  192. package/dist/cli/last-sleep.js +4 -1
  193. package/dist/cli/lenient-id.d.ts +2 -0
  194. package/dist/cli/lenient-id.js +13 -0
  195. package/dist/cli/maintenance.d.ts +5 -5
  196. package/dist/cli/maintenance.js +37 -43
  197. package/dist/cli/notes.d.ts +2 -0
  198. package/dist/cli/notes.js +41 -0
  199. package/dist/cli/object-verbs.js +4 -3
  200. package/dist/cli/open-browser.d.ts +14 -0
  201. package/dist/cli/open-browser.js +26 -0
  202. package/dist/cli/owner-validation.d.ts +5 -28
  203. package/dist/cli/owner-validation.js +5 -28
  204. package/dist/cli/playbooks.d.ts +3 -4
  205. package/dist/cli/playbooks.js +131 -300
  206. package/dist/cli/predictions.d.ts +3 -0
  207. package/dist/cli/predictions.js +175 -0
  208. package/dist/cli/print.d.ts +2 -5
  209. package/dist/cli/print.js +3 -5
  210. package/dist/cli/projects.d.ts +2 -2
  211. package/dist/cli/projects.js +31 -25
  212. package/dist/cli/quality-repair-once.d.ts +1 -1
  213. package/dist/cli/quality-repair-once.js +7 -6
  214. package/dist/cli/recall.d.ts +2 -4
  215. package/dist/cli/recall.js +67 -137
  216. package/dist/cli/refine-llm.d.ts +5 -31
  217. package/dist/cli/refine-llm.js +23 -50
  218. package/dist/cli/remember.d.ts +3 -3
  219. package/dist/cli/remember.js +134 -192
  220. package/dist/cli/scheduler.d.ts +2 -17
  221. package/dist/cli/scheduler.js +14 -19
  222. package/dist/cli/serve.js +23 -14
  223. package/dist/cli/session-hooks.d.ts +11 -19
  224. package/dist/cli/session-hooks.js +143 -214
  225. package/dist/cli/setup.d.ts +4 -4
  226. package/dist/cli/setup.js +35 -30
  227. package/dist/cli/shared.d.ts +7 -25
  228. package/dist/cli/shared.js +17 -60
  229. package/dist/cli/slack.d.ts +2 -2
  230. package/dist/cli/slack.js +19 -23
  231. package/dist/cli/sleep-render.js +6 -3
  232. package/dist/cli/sleep.d.ts +3 -2
  233. package/dist/cli/sleep.js +17 -49
  234. package/dist/cli/status.d.ts +11 -14
  235. package/dist/cli/status.js +74 -120
  236. package/dist/cli/stdin.d.ts +4 -6
  237. package/dist/cli/stdin.js +2 -3
  238. package/dist/cli/transfer.d.ts +9 -9
  239. package/dist/cli/transfer.js +87 -108
  240. package/dist/cli/usage.d.ts +0 -79
  241. package/dist/cli/usage.js +1 -689
  242. package/dist/cli/verb-row.d.ts +32 -0
  243. package/dist/cli/verb-row.js +6 -0
  244. package/dist/cli/verbs/health.d.ts +27 -0
  245. package/dist/cli/verbs/health.js +232 -0
  246. package/dist/cli/verbs/memory.d.ts +16 -0
  247. package/dist/cli/verbs/memory.js +244 -0
  248. package/dist/cli/verbs/objects.d.ts +20 -0
  249. package/dist/cli/verbs/objects.js +254 -0
  250. package/dist/cli/verbs/sessions.d.ts +31 -0
  251. package/dist/cli/verbs/sessions.js +312 -0
  252. package/dist/cli/verbs.d.ts +81 -0
  253. package/dist/cli/verbs.js +7 -0
  254. package/dist/cli/versioned-verbs.d.ts +51 -0
  255. package/dist/cli/versioned-verbs.js +79 -0
  256. package/dist/cli.d.ts +1 -654
  257. package/dist/cli.js +44 -510
  258. package/dist/connectors/dlq.d.ts +39 -3
  259. package/dist/connectors/dlq.js +37 -3
  260. package/dist/connectors/github/backfill.d.ts +5 -25
  261. package/dist/connectors/github/backfill.js +26 -52
  262. package/dist/connectors/github/deletion.d.ts +4 -18
  263. package/dist/connectors/github/deletion.js +2 -15
  264. package/dist/connectors/github/dlq.d.ts +8 -33
  265. package/dist/connectors/github/dlq.js +34 -93
  266. package/dist/connectors/github/ingest.d.ts +4 -12
  267. package/dist/connectors/github/ingest.js +5 -36
  268. package/dist/connectors/github/octokit-client.d.ts +4 -16
  269. package/dist/connectors/github/octokit-client.js +27 -24
  270. package/dist/connectors/github/ratelimit.d.ts +3 -14
  271. package/dist/connectors/github/ratelimit.js +3 -14
  272. package/dist/connectors/github/scope.d.ts +3 -5
  273. package/dist/connectors/github/scope.js +3 -5
  274. package/dist/connectors/github/signature.d.ts +4 -26
  275. package/dist/connectors/github/signature.js +4 -26
  276. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  277. package/dist/connectors/github/tenant-routing.js +4 -26
  278. package/dist/connectors/github/transform.js +2 -16
  279. package/dist/connectors/github/types.d.ts +3 -15
  280. package/dist/connectors/github/types.js +2 -9
  281. package/dist/connectors/github/webhook.d.ts +3 -16
  282. package/dist/connectors/github/webhook.js +38 -23
  283. package/dist/connectors/ingest.d.ts +10 -0
  284. package/dist/connectors/ingest.js +28 -0
  285. package/dist/connectors/slack/backfill.d.ts +4 -17
  286. package/dist/connectors/slack/backfill.js +4 -13
  287. package/dist/connectors/slack/dlq.d.ts +2 -19
  288. package/dist/connectors/slack/dlq.js +51 -90
  289. package/dist/connectors/slack/ingest.d.ts +4 -9
  290. package/dist/connectors/slack/ingest.js +4 -30
  291. package/dist/connectors/slack/scope.d.ts +2 -8
  292. package/dist/connectors/slack/scope.js +2 -8
  293. package/dist/connectors/slack/signature.d.ts +1 -6
  294. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  295. package/dist/connectors/slack/tenant-routing.js +2 -21
  296. package/dist/connectors/slack/transform.d.ts +2 -18
  297. package/dist/connectors/slack/transform.js +2 -18
  298. package/dist/connectors/slack/types.d.ts +3 -9
  299. package/dist/connectors/slack/types.js +2 -4
  300. package/dist/connectors/slack/web-client.js +33 -27
  301. package/dist/connectors/slack/webhook.d.ts +3 -19
  302. package/dist/connectors/slack/webhook.js +6 -26
  303. package/dist/connectors/slack/workspaces.d.ts +4 -24
  304. package/dist/connectors/slack/workspaces.js +4 -24
  305. package/dist/consolidate/conflicts.js +7 -15
  306. package/dist/consolidate/dag-summary.d.ts +8 -0
  307. package/dist/consolidate/dag-summary.js +41 -0
  308. package/dist/consolidate/dag.d.ts +5 -28
  309. package/dist/consolidate/dag.js +29 -84
  310. package/dist/consolidate/decay.js +7 -19
  311. package/dist/consolidate/dedupe.d.ts +13 -52
  312. package/dist/consolidate/dedupe.js +18 -74
  313. package/dist/consolidate/flush-units.d.ts +3 -4
  314. package/dist/consolidate/flush-units.js +3 -3
  315. package/dist/consolidate/half-life-migration.d.ts +3 -26
  316. package/dist/consolidate/half-life-migration.js +11 -28
  317. package/dist/consolidate/llm-passes.js +49 -40
  318. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  319. package/dist/consolidate/memory-value-weights.js +2 -13
  320. package/dist/consolidate/memory-value.d.ts +11 -84
  321. package/dist/consolidate/memory-value.js +18 -105
  322. package/dist/consolidate/merge.js +12 -33
  323. package/dist/consolidate/physics-pass.d.ts +6 -1
  324. package/dist/consolidate/physics-pass.js +27 -9
  325. package/dist/consolidate/replay.d.ts +6 -38
  326. package/dist/consolidate/replay.js +25 -56
  327. package/dist/consolidate/run.js +1 -1
  328. package/dist/consolidate/sleep.d.ts +1 -8
  329. package/dist/consolidate/sleep.js +13 -22
  330. package/dist/consolidate/trace.d.ts +3 -18
  331. package/dist/consolidate/trace.js +3 -18
  332. package/dist/consolidate/traces.js +9 -25
  333. package/dist/core/ablation.d.ts +14 -91
  334. package/dist/core/ablation.js +16 -91
  335. package/dist/core/active-scope.d.ts +7 -0
  336. package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
  337. package/dist/core/ambient.d.ts +5 -8
  338. package/dist/core/ambient.js +40 -26
  339. package/dist/core/api-errors.d.ts +16 -0
  340. package/dist/core/api-errors.js +20 -0
  341. package/dist/core/capture-contract.d.ts +4 -2
  342. package/dist/core/capture-contract.js +4 -2
  343. package/dist/core/card.d.ts +4 -1
  344. package/dist/core/card.js +11 -1
  345. package/dist/core/compaction-timing.d.ts +7 -0
  346. package/dist/core/compaction-timing.js +9 -0
  347. package/dist/core/compare.d.ts +11 -67
  348. package/dist/core/compare.js +9 -63
  349. package/dist/core/config.d.ts +10 -24
  350. package/dist/core/config.js +20 -16
  351. package/dist/core/cosine.d.ts +3 -0
  352. package/dist/core/cosine.js +19 -0
  353. package/dist/core/handoff.d.ts +1 -7
  354. package/dist/core/handoff.js +1 -7
  355. package/dist/core/markdown.d.ts +6 -0
  356. package/dist/{store → core}/markdown.js +23 -22
  357. package/dist/core/memory-audit.d.ts +17 -0
  358. package/dist/core/memory-audit.js +54 -0
  359. package/dist/core/memory-quality.js +1 -1
  360. package/dist/core/memory.d.ts +51 -168
  361. package/dist/core/memory.js +76 -239
  362. package/dist/{consolidate → core}/merged-row.d.ts +1 -1
  363. package/dist/{consolidate → core}/merged-row.js +3 -2
  364. package/dist/core/package-root.d.ts +3 -0
  365. package/dist/core/package-root.js +5 -0
  366. package/dist/core/physics-config.d.ts +1 -4
  367. package/dist/core/physics-config.js +3 -8
  368. package/dist/core/physics.d.ts +15 -61
  369. package/dist/core/physics.js +65 -138
  370. package/dist/core/prediction.d.ts +3 -0
  371. package/dist/core/prediction.js +6 -0
  372. package/dist/core/project-identity.d.ts +20 -58
  373. package/dist/core/project-identity.js +27 -39
  374. package/dist/core/project-remote.js +13 -2
  375. package/dist/core/raw-append-only.d.ts +5 -0
  376. package/dist/core/raw-append-only.js +7 -0
  377. package/dist/core/recall-scope.d.ts +69 -0
  378. package/dist/core/recall-scope.js +138 -0
  379. package/dist/core/salience.d.ts +1 -7
  380. package/dist/core/salience.js +1 -7
  381. package/dist/dashboard/dashboard-actions.js +2 -2
  382. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  383. package/dist/dashboard/dashboard-snapshot.js +11 -2
  384. package/dist/dashboard/dashboard-types.d.ts +2 -1
  385. package/dist/dashboard/dashboard.d.ts +1 -0
  386. package/dist/dashboard/dashboard.js +50 -4
  387. package/dist/db/busy.d.ts +3 -8
  388. package/dist/db/busy.js +37 -33
  389. package/dist/db/connect.js +7 -8
  390. package/dist/db/index.d.ts +3 -3
  391. package/dist/db/index.js +3 -3
  392. package/dist/db/migrate.js +3 -3
  393. package/dist/db/migrations/index.d.ts +1 -1
  394. package/dist/db/migrations/index.js +3 -1
  395. package/dist/db/migrations/types.d.ts +2 -5
  396. package/dist/db/migrations/v14.js +2 -3
  397. package/dist/db/migrations/v15.js +2 -8
  398. package/dist/db/migrations/v16.js +2 -3
  399. package/dist/db/migrations/v17.js +2 -3
  400. package/dist/db/migrations/v19.js +2 -5
  401. package/dist/db/migrations/v20.js +2 -7
  402. package/dist/db/migrations/v22.js +4 -17
  403. package/dist/db/migrations/v23.js +3 -14
  404. package/dist/db/migrations/v24.js +2 -4
  405. package/dist/db/migrations/v25.js +3 -8
  406. package/dist/db/migrations/v26.js +2 -13
  407. package/dist/db/migrations/v27.js +3 -11
  408. package/dist/db/migrations/v28.js +2 -14
  409. package/dist/db/migrations/v29.js +4 -18
  410. package/dist/db/migrations/v30.js +4 -16
  411. package/dist/db/migrations/v31.js +2 -15
  412. package/dist/db/migrations/v32.js +4 -22
  413. package/dist/db/migrations/v33.js +2 -15
  414. package/dist/db/migrations/v34.js +2 -11
  415. package/dist/db/migrations/v35.js +2 -11
  416. package/dist/db/migrations/v36.js +2 -11
  417. package/dist/db/migrations/v37.js +8 -33
  418. package/dist/db/migrations/v38.js +5 -38
  419. package/dist/db/migrations/v39.js +9 -20
  420. package/dist/db/migrations/v40.js +2 -9
  421. package/dist/db/migrations/v41.js +2 -24
  422. package/dist/db/migrations/v43.js +1 -1
  423. package/dist/db/migrations/v44.js +2 -8
  424. package/dist/db/migrations/v45.js +2 -7
  425. package/dist/db/migrations/v47.js +2 -3
  426. package/dist/db/migrations/v51.js +1 -1
  427. package/dist/db/migrations/v55.d.ts +3 -0
  428. package/dist/db/migrations/v55.js +17 -0
  429. package/dist/db/open.d.ts +2 -2
  430. package/dist/db/open.js +21 -9
  431. package/dist/db/physics-state.d.ts +6 -22
  432. package/dist/db/physics-state.js +28 -39
  433. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  434. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  435. package/dist/db/tables.d.ts +2 -0
  436. package/dist/db/tables.js +6 -2
  437. package/dist/db/vector-store.d.ts +2 -0
  438. package/dist/db/vector-store.js +25 -5
  439. package/dist/db/wal-checkpointer.js +2 -1
  440. package/dist/doctor.js +85 -27
  441. package/dist/embeddings/local.d.ts +62 -0
  442. package/dist/embeddings/local.js +146 -0
  443. package/dist/embeddings/provider.d.ts +43 -0
  444. package/dist/{store/embeddings → embeddings}/provider.js +58 -83
  445. package/dist/embeddings/transformers.d.ts +26 -0
  446. package/dist/embeddings/transformers.js +89 -0
  447. package/dist/entry/session-text.d.ts +1 -1
  448. package/dist/entry/session-text.js +3 -2
  449. package/dist/eval/eval-stats.d.ts +15 -53
  450. package/dist/eval/eval-stats.js +12 -42
  451. package/dist/eval/eval-suite.d.ts +2 -13
  452. package/dist/eval/eval-suite.js +91 -45
  453. package/dist/eval/eval.d.ts +6 -24
  454. package/dist/eval/eval.js +8 -35
  455. package/dist/eval/judgment.d.ts +0 -3
  456. package/dist/eval/judgment.js +30 -15
  457. package/dist/extensions/openclaw-plugin/index.js +1 -1
  458. package/dist/graph/extract.d.ts +5 -27
  459. package/dist/graph/extract.js +10 -36
  460. package/dist/graph/recall.d.ts +7 -20
  461. package/dist/graph/recall.js +15 -77
  462. package/dist/graph/stream.d.ts +7 -39
  463. package/dist/graph/stream.js +11 -34
  464. package/dist/graph/view.d.ts +9 -35
  465. package/dist/graph/view.js +24 -44
  466. package/dist/graph/write.d.ts +1 -1
  467. package/dist/graph/write.js +9 -9
  468. package/dist/hooks/codex-session.js +3 -2
  469. package/dist/hooks/codex-wrapper.js +4 -3
  470. package/dist/hooks/copilot.js +2 -1
  471. package/dist/hooks/hook-blocks.d.ts +6 -2
  472. package/dist/hooks/hook-blocks.js +37 -124
  473. package/dist/hooks/json-hooks.d.ts +4 -36
  474. package/dist/hooks/json-hooks.js +22 -59
  475. package/dist/hooks/opencode.d.ts +0 -38
  476. package/dist/hooks/opencode.js +17 -81
  477. package/dist/hooks/shared.d.ts +6 -21
  478. package/dist/hooks/shared.js +31 -33
  479. package/dist/importers/core.d.ts +12 -37
  480. package/dist/importers/core.js +10 -28
  481. package/dist/importers/markdown-parse.d.ts +8 -22
  482. package/dist/importers/markdown-parse.js +8 -25
  483. package/dist/importers/markdown.js +3 -12
  484. package/dist/importers/sources.js +12 -39
  485. package/dist/importers/vault.d.ts +2 -8
  486. package/dist/importers/vault.js +31 -85
  487. package/dist/index.d.ts +8 -3
  488. package/dist/index.js +8 -3
  489. package/dist/learn/autolearn.d.ts +23 -42
  490. package/dist/learn/autolearn.js +45 -52
  491. package/dist/learn/churn-git.js +13 -4
  492. package/dist/learn/extract.d.ts +3 -2
  493. package/dist/learn/extract.js +8 -8
  494. package/dist/learn/forward-claim-detector.d.ts +6 -30
  495. package/dist/learn/forward-claim-detector.js +18 -68
  496. package/dist/learn/invalidation.d.ts +6 -18
  497. package/dist/learn/invalidation.js +18 -31
  498. package/dist/mcp/admin-tools.d.ts +2 -2
  499. package/dist/mcp/admin-tools.js +30 -53
  500. package/dist/mcp/format.js +3 -2
  501. package/dist/mcp/framing.d.ts +1 -0
  502. package/dist/mcp/framing.js +1 -1
  503. package/dist/mcp/memory-tools.js +7 -10
  504. package/dist/mcp/protocol.d.ts +15 -29
  505. package/dist/mcp/protocol.js +26 -16
  506. package/dist/mcp/recall-tools.js +14 -11
  507. package/dist/mcp/request.d.ts +3 -11
  508. package/dist/mcp/request.js +12 -27
  509. package/dist/mcp/server.d.ts +3 -9
  510. package/dist/mcp/server.js +5 -16
  511. package/dist/mcp/session-state.d.ts +1 -1
  512. package/dist/mcp/session-state.js +5 -11
  513. package/dist/mcp/stdio.d.ts +2 -6
  514. package/dist/mcp/stdio.js +68 -16
  515. package/dist/mcp/tool-args.js +2 -1
  516. package/dist/mcp/tools.js +47 -22
  517. package/dist/objects/customer-notes.d.ts +9 -44
  518. package/dist/objects/customer-notes.js +7 -48
  519. package/dist/objects/decisions.d.ts +14 -52
  520. package/dist/objects/decisions.js +15 -53
  521. package/dist/objects/descriptor.d.ts +1 -1
  522. package/dist/objects/incidents.d.ts +9 -40
  523. package/dist/objects/incidents.js +7 -41
  524. package/dist/objects/lifecycle.d.ts +1 -1
  525. package/dist/objects/lifecycle.js +2 -1
  526. package/dist/objects/policies.d.ts +13 -91
  527. package/dist/objects/policies.js +13 -99
  528. package/dist/objects/processes.d.ts +9 -54
  529. package/dist/objects/processes.js +7 -61
  530. package/dist/objects/project-briefs.d.ts +13 -57
  531. package/dist/objects/project-briefs.js +16 -78
  532. package/dist/objects/skills.d.ts +9 -44
  533. package/dist/objects/skills.js +8 -54
  534. package/dist/postinstall.js +7 -20
  535. package/dist/predictions/planning-fallacy.d.ts +11 -34
  536. package/dist/rerankers/clef.js +6 -37
  537. package/dist/rerankers/cross-encoder.d.ts +31 -2
  538. package/dist/rerankers/cross-encoder.js +65 -101
  539. package/dist/rerankers/index.js +5 -4
  540. package/dist/rerankers/jev.js +11 -10
  541. package/dist/rerankers/llm.d.ts +2 -11
  542. package/dist/rerankers/llm.js +14 -14
  543. package/dist/rerankers/outage-warning.d.ts +5 -2
  544. package/dist/rerankers/outage-warning.js +7 -4
  545. package/dist/rerankers/remote.d.ts +1 -0
  546. package/dist/rerankers/remote.js +2 -0
  547. package/dist/rerankers/types.d.ts +2 -14
  548. package/dist/search/bm25-search.js +1 -1
  549. package/dist/search/boosts.d.ts +0 -2
  550. package/dist/search/boosts.js +3 -3
  551. package/dist/search/embed-memories.d.ts +9 -0
  552. package/dist/search/embed-memories.js +377 -0
  553. package/dist/search/goal-boost.d.ts +23 -0
  554. package/dist/search/goal-boost.js +93 -0
  555. package/dist/search/hybrid.d.ts +11 -2
  556. package/dist/search/hybrid.js +9 -4
  557. package/dist/search/multihop.js +2 -3
  558. package/dist/search/path-context.d.ts +5 -18
  559. package/dist/search/path-context.js +5 -18
  560. package/dist/search/physics-search.d.ts +6 -3
  561. package/dist/search/physics-search.js +29 -19
  562. package/dist/search/rerank.js +1 -1
  563. package/dist/search/rrf.d.ts +7 -35
  564. package/dist/search/rrf.js +5 -30
  565. package/dist/search/vector.d.ts +13 -4
  566. package/dist/search/vector.js +40 -13
  567. package/dist/server/auth.d.ts +11 -28
  568. package/dist/server/auth.js +49 -32
  569. package/dist/server/boot.d.ts +2 -21
  570. package/dist/server/boot.js +69 -161
  571. package/dist/server/client-ip.d.ts +3 -21
  572. package/dist/server/client-ip.js +8 -30
  573. package/dist/server/deadline.d.ts +0 -2
  574. package/dist/server/deadline.js +1 -7
  575. package/dist/server/defaults.d.ts +4 -0
  576. package/dist/server/defaults.js +5 -0
  577. package/dist/server/key-check-bounds.d.ts +2 -1
  578. package/dist/server/lifecycle.d.ts +5 -4
  579. package/dist/server/lifecycle.js +19 -4
  580. package/dist/server/mcp-http.js +24 -53
  581. package/dist/server/rate-limit.d.ts +5 -18
  582. package/dist/server/rate-limit.js +4 -13
  583. package/dist/server/request.d.ts +4 -8
  584. package/dist/server/request.js +16 -19
  585. package/dist/server/route-checks.d.ts +7 -0
  586. package/dist/server/route-checks.js +42 -0
  587. package/dist/server/route-table.d.ts +9 -8
  588. package/dist/server/route-table.js +127 -139
  589. package/dist/server/routes/admin.d.ts +8 -8
  590. package/dist/server/routes/admin.js +35 -49
  591. package/dist/server/routes/customer-notes.d.ts +6 -6
  592. package/dist/server/routes/customer-notes.js +8 -14
  593. package/dist/server/routes/decisions.d.ts +6 -6
  594. package/dist/server/routes/decisions.js +12 -21
  595. package/dist/server/routes/incidents.d.ts +6 -6
  596. package/dist/server/routes/incidents.js +14 -25
  597. package/dist/server/routes/memories.d.ts +9 -9
  598. package/dist/server/routes/memories.js +20 -63
  599. package/dist/server/routes/object-routes.d.ts +6 -11
  600. package/dist/server/routes/object-routes.js +11 -22
  601. package/dist/server/routes/policies.d.ts +7 -7
  602. package/dist/server/routes/policies.js +12 -22
  603. package/dist/server/routes/predictions.d.ts +6 -6
  604. package/dist/server/routes/predictions.js +22 -38
  605. package/dist/server/routes/processes.d.ts +6 -6
  606. package/dist/server/routes/processes.js +17 -28
  607. package/dist/server/routes/project-briefs.d.ts +7 -7
  608. package/dist/server/routes/project-briefs.js +11 -20
  609. package/dist/server/routes/recall.d.ts +5 -5
  610. package/dist/server/routes/recall.js +16 -45
  611. package/dist/server/routes/skills.d.ts +7 -7
  612. package/dist/server/routes/skills.js +10 -22
  613. package/dist/server/server-detect.d.ts +15 -53
  614. package/dist/server/server-detect.js +55 -96
  615. package/dist/server/sleep-child.js +26 -7
  616. package/dist/server/sleep-offload.d.ts +11 -5
  617. package/dist/server/sleep-offload.js +21 -12
  618. package/dist/server/types.d.ts +32 -18
  619. package/dist/server/validation.d.ts +3 -2
  620. package/dist/server/validation.js +15 -33
  621. package/dist/server.d.ts +7 -6
  622. package/dist/server.js +8 -6
  623. package/dist/sharing/global-store.d.ts +19 -0
  624. package/dist/sharing/global-store.js +75 -0
  625. package/dist/sharing/global-sync.d.ts +6 -0
  626. package/dist/sharing/global-sync.js +73 -0
  627. package/dist/sharing/project-merge.d.ts +11 -19
  628. package/dist/sharing/project-merge.js +63 -125
  629. package/dist/sharing/search-both.d.ts +60 -0
  630. package/dist/sharing/search-both.js +138 -0
  631. package/dist/sharing/share.d.ts +40 -0
  632. package/dist/sharing/share.js +229 -0
  633. package/dist/store/ambient.js +9 -15
  634. package/dist/store/audit-event.d.ts +5 -13
  635. package/dist/store/audit-event.js +4 -12
  636. package/dist/store/audit.d.ts +2 -21
  637. package/dist/store/audit.js +8 -67
  638. package/dist/store/auth.d.ts +10 -8
  639. package/dist/store/auth.js +17 -12
  640. package/dist/store/candidates.d.ts +23 -5
  641. package/dist/store/candidates.js +119 -71
  642. package/dist/store/capture-write.d.ts +17 -0
  643. package/dist/store/capture-write.js +35 -0
  644. package/dist/store/card-detail.d.ts +2 -1
  645. package/dist/store/card-detail.js +2 -1
  646. package/dist/store/cards.d.ts +14 -9
  647. package/dist/store/cards.js +72 -126
  648. package/dist/store/compaction-caller.d.ts +18 -0
  649. package/dist/store/compaction-caller.js +29 -0
  650. package/dist/store/compactions-record.d.ts +115 -0
  651. package/dist/store/compactions-record.js +417 -0
  652. package/dist/store/compactions.js +6 -4
  653. package/dist/store/conflicts.d.ts +4 -21
  654. package/dist/store/conflicts.js +76 -152
  655. package/dist/store/connectors/dlq.d.ts +10 -0
  656. package/dist/store/connectors/dlq.js +32 -0
  657. package/dist/store/connectors/github.d.ts +14 -16
  658. package/dist/store/connectors/github.js +34 -57
  659. package/dist/store/connectors/slack.d.ts +2 -11
  660. package/dist/store/connectors/slack.js +18 -47
  661. package/dist/store/dashboard-reads.js +11 -14
  662. package/dist/store/delete-and-batch.d.ts +17 -31
  663. package/dist/store/delete-and-batch.js +84 -67
  664. package/dist/store/delivery-recorder.d.ts +15 -4
  665. package/dist/store/delivery-recorder.js +34 -17
  666. package/dist/store/descendant-page.js +6 -3
  667. package/dist/store/diagnostics.js +6 -13
  668. package/dist/store/dormant.d.ts +8 -30
  669. package/dist/store/dormant.js +18 -57
  670. package/dist/store/embeddings/index.d.ts +11 -90
  671. package/dist/store/embeddings/index.js +18 -523
  672. package/dist/store/entry-reads.d.ts +34 -61
  673. package/dist/store/entry-reads.js +111 -136
  674. package/dist/store/entry-row.d.ts +6 -35
  675. package/dist/store/entry-row.js +9 -37
  676. package/dist/store/entry-writes.d.ts +12 -18
  677. package/dist/store/entry-writes.js +46 -44
  678. package/dist/store/failure-log-at.d.ts +8 -0
  679. package/dist/store/failure-log-at.js +16 -0
  680. package/dist/store/failure-log.d.ts +2 -2
  681. package/dist/store/failure-log.js +5 -3
  682. package/dist/{trust → store}/gated-write.d.ts +3 -1
  683. package/dist/{trust → store}/gated-write.js +7 -5
  684. package/dist/store/goals.d.ts +3 -40
  685. package/dist/store/goals.js +41 -178
  686. package/dist/store/graph-queue.d.ts +6 -22
  687. package/dist/store/graph-queue.js +14 -45
  688. package/dist/store/graph-reads.d.ts +11 -35
  689. package/dist/store/graph-reads.js +24 -60
  690. package/dist/store/graph-rows.d.ts +3 -6
  691. package/dist/store/graph-rows.js +6 -9
  692. package/dist/store/graph-view-rows.d.ts +2 -1
  693. package/dist/store/graph-view-rows.js +2 -1
  694. package/dist/store/graph-writes.d.ts +10 -35
  695. package/dist/store/graph-writes.js +59 -106
  696. package/dist/store/half-life.d.ts +2 -1
  697. package/dist/store/half-life.js +14 -16
  698. package/dist/store/handoffs.d.ts +6 -12
  699. package/dist/store/handoffs.js +22 -40
  700. package/dist/store/index-and-stats.d.ts +6 -19
  701. package/dist/store/index-and-stats.js +36 -84
  702. package/dist/store/key-writes.js +1 -1
  703. package/dist/store/ledger-turn.d.ts +9 -0
  704. package/dist/store/ledger-turn.js +38 -0
  705. package/dist/store/mirrors.d.ts +2 -6
  706. package/dist/store/mirrors.js +24 -29
  707. package/dist/store/open.d.ts +0 -4
  708. package/dist/store/open.js +42 -62
  709. package/dist/store/pilot-arm.d.ts +12 -0
  710. package/dist/store/pilot-arm.js +42 -0
  711. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  712. package/dist/store/planning-fallacy-evidence.js +8 -37
  713. package/dist/store/port.d.ts +91 -82
  714. package/dist/store/port.js +8 -0
  715. package/dist/store/predictions.d.ts +12 -53
  716. package/dist/store/predictions.js +41 -125
  717. package/dist/store/project-tags.d.ts +62 -0
  718. package/dist/store/project-tags.js +67 -0
  719. package/dist/{cli → store}/quality-repair.js +15 -31
  720. package/dist/store/quarantine.js +2 -1
  721. package/dist/store/raw-archive.d.ts +4 -16
  722. package/dist/store/raw-archive.js +14 -29
  723. package/dist/store/recall-trace.d.ts +12 -77
  724. package/dist/store/recall-trace.js +37 -97
  725. package/dist/store/rejected-values.js +9 -20
  726. package/dist/store/rejection-probe.d.ts +4 -0
  727. package/dist/store/rejection-probe.js +19 -0
  728. package/dist/store/rejection.d.ts +10 -73
  729. package/dist/store/rejection.js +12 -84
  730. package/dist/store/report-reads.d.ts +6 -0
  731. package/dist/store/report-reads.js +29 -0
  732. package/dist/store/rows.d.ts +9 -19
  733. package/dist/store/rows.js +36 -34
  734. package/dist/store/rule-sql.d.ts +14 -0
  735. package/dist/store/rule-sql.js +56 -0
  736. package/dist/store/search-rows.d.ts +7 -38
  737. package/dist/store/search-rows.js +23 -54
  738. package/dist/store/sessions.d.ts +10 -47
  739. package/dist/store/sessions.js +21 -75
  740. package/dist/store/set-aside.d.ts +14 -0
  741. package/dist/store/set-aside.js +23 -0
  742. package/dist/store/sqlite/busy.d.ts +3 -0
  743. package/dist/store/sqlite/busy.js +8 -0
  744. package/dist/store/sqlite/connector-events-group.js +5 -8
  745. package/dist/store/sqlite/connector-writes-group.js +3 -3
  746. package/dist/store/sqlite/entry-writes-group.js +4 -4
  747. package/dist/store/sqlite/error-codec.js +8 -5
  748. package/dist/store/sqlite/executor.d.ts +2 -1
  749. package/dist/store/sqlite/executor.js +12 -5
  750. package/dist/store/sqlite/graph-reads-group.js +1 -1
  751. package/dist/store/sqlite/held-connection.d.ts +9 -0
  752. package/dist/store/sqlite/held-connection.js +41 -0
  753. package/dist/store/sqlite/local.d.ts +3 -3
  754. package/dist/store/sqlite/local.js +1 -0
  755. package/dist/store/sqlite/object-rows.d.ts +1 -1
  756. package/dist/store/sqlite/object-rows.js +6 -3
  757. package/dist/store/sqlite/objects-group.d.ts +1 -1
  758. package/dist/store/sqlite/objects-group.js +5 -3
  759. package/dist/store/sqlite/quarantine-group.js +2 -2
  760. package/dist/store/sqlite/store.d.ts +1 -4
  761. package/dist/store/sqlite/store.js +16 -15
  762. package/dist/store/sqlite/vector-reads-group.js +2 -2
  763. package/dist/store/sqlite/worker-jobs.js +1 -1
  764. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  765. package/dist/store/sqlite/worker-ops.js +13 -2
  766. package/dist/store/sqlite/worker-store.js +5 -2
  767. package/dist/store/summaries.d.ts +11 -63
  768. package/dist/store/summaries.js +37 -148
  769. package/dist/store/summary-dirty.js +1 -1
  770. package/dist/store/tenant-lookup.d.ts +6 -1
  771. package/dist/store/tenant-lookup.js +7 -0
  772. package/dist/store/tenant.d.ts +2 -16
  773. package/dist/store/tenant.js +4 -19
  774. package/dist/store/token-ledger.d.ts +13 -50
  775. package/dist/store/token-ledger.js +19 -85
  776. package/dist/store/usage-reports.js +5 -13
  777. package/dist/store/vector-index.d.ts +46 -0
  778. package/dist/store/vector-index.js +171 -0
  779. package/dist/store/working-memory.d.ts +6 -25
  780. package/dist/store/working-memory.js +18 -52
  781. package/dist/support-bundle.js +9 -8
  782. package/dist/trust/reject-flow.js +3 -5
  783. package/dist/util/agent-homes.d.ts +15 -0
  784. package/dist/util/agent-homes.js +34 -0
  785. package/dist/util/anthropic-messages.d.ts +3 -0
  786. package/dist/util/anthropic-messages.js +35 -6
  787. package/dist/util/atomic-write.d.ts +2 -1
  788. package/dist/util/atomic-write.js +35 -4
  789. package/dist/util/capped-json.d.ts +6 -0
  790. package/dist/util/capped-json.js +46 -0
  791. package/dist/util/chunked.d.ts +3 -0
  792. package/dist/util/chunked.js +10 -0
  793. package/dist/util/crash-handlers.d.ts +8 -1
  794. package/dist/util/crash-handlers.js +52 -10
  795. package/dist/util/ellipsize.d.ts +3 -0
  796. package/dist/util/ellipsize.js +5 -0
  797. package/dist/util/env.d.ts +14 -6
  798. package/dist/util/env.js +15 -7
  799. package/dist/util/format.d.ts +3 -0
  800. package/dist/util/format.js +6 -0
  801. package/dist/util/home-path.d.ts +2 -1
  802. package/dist/util/home-path.js +4 -2
  803. package/dist/util/hook-payload.d.ts +8 -0
  804. package/dist/util/hook-payload.js +37 -0
  805. package/dist/util/http-retry.d.ts +9 -1
  806. package/dist/util/http-retry.js +67 -8
  807. package/dist/util/http-util.d.ts +0 -8
  808. package/dist/util/http-util.js +10 -21
  809. package/dist/util/limits.d.ts +7 -0
  810. package/dist/util/limits.js +14 -0
  811. package/dist/util/log.d.ts +7 -2
  812. package/dist/util/log.js +34 -9
  813. package/dist/util/request-scope.d.ts +5 -2
  814. package/dist/util/request-scope.js +13 -7
  815. package/dist/util/secret-detect.d.ts +5 -30
  816. package/dist/util/secret-detect.js +19 -40
  817. package/dist/util/sqlite-blocked.d.ts +2 -0
  818. package/dist/util/sqlite-blocked.js +5 -0
  819. package/dist/util/stored-json.d.ts +1 -1
  820. package/dist/util/stored-json.js +1 -1
  821. package/dist/util/stream-tee.d.ts +3 -0
  822. package/dist/util/stream-tee.js +35 -0
  823. package/dist/util/time.d.ts +4 -0
  824. package/dist/util/time.js +4 -0
  825. package/dist/util/token-text.d.ts +1 -4
  826. package/dist/util/token-text.js +1 -4
  827. package/dist/util/transcript-tail.d.ts +2 -0
  828. package/dist/util/transcript-tail.js +24 -23
  829. package/dist/util/version.d.ts +5 -20
  830. package/dist/util/version.js +5 -20
  831. package/dist/{store → util}/yaml.d.ts +1 -5
  832. package/dist/{store → util}/yaml.js +2 -6
  833. package/extensions/openclaw-plugin/index.ts +1 -1
  834. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  835. package/extensions/openclaw-plugin/package.json +1 -1
  836. package/openclaw.plugin.json +1 -1
  837. package/package.json +2 -2
  838. package/dist/cli/provenance-coverage.d.ts +0 -18
  839. package/dist/connectors/github/cli-impl.d.ts +0 -25
  840. package/dist/sharing/scope.d.ts +0 -14
  841. package/dist/sharing/shared.d.ts +0 -187
  842. package/dist/sharing/shared.js +0 -563
  843. package/dist/store/embeddings/local.d.ts +0 -15
  844. package/dist/store/embeddings/local.js +0 -192
  845. package/dist/store/embeddings/provider.d.ts +0 -77
  846. package/dist/store/markdown.d.ts +0 -10
  847. package/dist/store/recall-scope.d.ts +0 -138
  848. package/dist/store/recall-scope.js +0 -216
  849. package/dist/store/vector-writes.d.ts +0 -13
  850. package/dist/store/vector-writes.js +0 -89
  851. /package/dist/{store → core}/object-types.d.ts +0 -0
  852. /package/dist/{store → core}/object-types.js +0 -0
  853. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
  854. /package/dist/{capture → util}/compaction-items.d.ts +0 -0
  855. /package/dist/{capture → util}/compaction-items.js +0 -0
@@ -0,0 +1,35 @@
1
+ import { closeHippoDb } from '../db/index.js';
2
+ import { duplicateKey } from '../util/same-text.js';
3
+ import { writeEntryMirrors } from './entry-writes.js';
4
+ import { stampOriginProject } from './entry-row.js';
5
+ import { gatedWrite } from './gated-write.js';
6
+ import { updateStatsOn } from './index-and-stats.js';
7
+ import { openStore } from './open.js';
8
+ /** One outcome per item, in order. `keys` holds the texts already stored and gains each one written, so a repeat inside the batch is skipped. */
9
+ export function writeCapturedItems(hippoRoot, items, keys, opts) {
10
+ const db = openStore(hippoRoot);
11
+ try {
12
+ return items.map((item) => {
13
+ if (keys.has(duplicateKey(item.content)))
14
+ return 'skipped';
15
+ const entry = item.makeEntry();
16
+ // One rejected item must not abort the rest of this capture's items.
17
+ const stamped = stampOriginProject(hippoRoot, entry);
18
+ const outcome = gatedWrite(db, hippoRoot, stamped, { actor: opts.actor });
19
+ if (outcome === 'skipped:rejected')
20
+ return 'rejected';
21
+ if (outcome !== 'written')
22
+ return 'skipped';
23
+ writeEntryMirrors(hippoRoot, stamped);
24
+ if (!opts.lean)
25
+ updateStatsOn(db, hippoRoot, { remembered: 1 });
26
+ keys.add(duplicateKey(item.content)); // within-batch dedup
27
+ opts.onCaptured?.(entry);
28
+ return 'captured';
29
+ });
30
+ }
31
+ finally {
32
+ closeHippoDb(db);
33
+ }
34
+ }
35
+ //# sourceMappingURL=capture-write.js.map
@@ -9,6 +9,7 @@ export interface CardDetail {
9
9
  comments: CardComment[];
10
10
  handoff: SessionHandoff | null;
11
11
  }
12
- /** Loads the detail behind `hippo card show` and `GET /api/cards/:id` (null when the tenant has no such card); five separate reads, so a write landing between them can show a mixed view, as `card show` always could. */
12
+ /** Loads the detail behind `hippo card show` and `GET /api/cards/:id` (null when the tenant has no such card);
13
+ * five separate reads, so a write landing between them can show a mixed view, as `card show` always could. */
13
14
  export declare function loadCardDetail(hippoRoot: string, tenantId: string, id: string): CardDetail | null;
14
15
  //# sourceMappingURL=card-detail.d.ts.map
@@ -1,5 +1,6 @@
1
1
  import { loadCard, loadCardComments, loadCardDeps, loadCardRuns, loadLatestHandoffForCard } from './cards.js';
2
- /** Loads the detail behind `hippo card show` and `GET /api/cards/:id` (null when the tenant has no such card); five separate reads, so a write landing between them can show a mixed view, as `card show` always could. */
2
+ /** Loads the detail behind `hippo card show` and `GET /api/cards/:id` (null when the tenant has no such card);
3
+ * five separate reads, so a write landing between them can show a mixed view, as `card show` always could. */
3
4
  export function loadCardDetail(hippoRoot, tenantId, id) {
4
5
  const card = loadCard(hippoRoot, tenantId, id);
5
6
  if (!card)
@@ -1,4 +1,3 @@
1
- import { type DatabaseSyncLike } from '../db/index.js';
2
1
  import { SessionHandoff, HandoffOutcome } from '../core/handoff.js';
3
2
  import { Card, CardStatus, CardRun, CardComment } from '../core/card.js';
4
3
  export interface TransitionCardOptions {
@@ -10,8 +9,8 @@ export interface TransitionCardOptions {
10
9
  params?: unknown[];
11
10
  };
12
11
  }
13
- export declare function transitionCard(db: DatabaseSyncLike, tenantId: string, cardId: string, options: TransitionCardOptions): number;
14
- /** Creates a card; status is ready with no deps or once every dependsOn id is done, else backlog. An unknown dependsOn id throws and commits nothing. A repeated dependsOn id is recorded once. */
12
+ /** Creates a card; status is ready with no deps or once every dependsOn id is done, else backlog.
13
+ * An unknown dependsOn id throws and commits nothing. A repeated dependsOn id is recorded once. */
15
14
  export declare function createCard(hippoRoot: string, tenantId: string, input: {
16
15
  title: string;
17
16
  repo?: string;
@@ -36,22 +35,28 @@ export declare function loadCardRuns(hippoRoot: string, tenantId: string, id: st
36
35
  export declare function loadCardComments(hippoRoot: string, tenantId: string, id: string): CardComment[];
37
36
  /** Read side of the card <-> handoff round trip: the newest handoff filed against this card. */
38
37
  export declare function loadLatestHandoffForCard(hippoRoot: string, tenantId: string, cardId: string): SessionHandoff | null;
39
- /** Atomic claim: WHERE status IN (ready, blocked) AND assignee_runtime IS NULL decides the race. Throws on an unknown card id; returns null for a card not ready/blocked or already claimed. Sets a CARD_LEASE_MS lease and returns the new run's id as runId. */
38
+ /** Atomic claim: WHERE status IN (ready, blocked) AND assignee_runtime IS NULL decides the race. Throws on an unknown card id;
39
+ * returns null for a card not ready/blocked or already claimed. Sets a CARD_LEASE_MS lease and returns the new run's id as runId. */
40
40
  export declare function claimCard(hippoRoot: string, tenantId: string, id: string, runtime: string, sessionId?: string): (Card & {
41
41
  runId: number;
42
42
  }) | null;
43
- /** Moves a running card's lease to CARD_LEASE_MS from now and records the heartbeat; updated_at is left alone. Throws on an unknown card id or a run id that is not a positive integer; returns null unless the card is running and runId is its live run. */
43
+ /** Moves a running card's lease to CARD_LEASE_MS from now and records the heartbeat; updated_at is left alone. Throws on an
44
+ * unknown card id or a run id that is not a positive integer; returns null unless the card is running and runId is its live run. */
44
45
  export declare function heartbeatCard(hippoRoot: string, tenantId: string, id: string, runId: number): Card | null;
45
- /** Requires the card be running; closes the live run as blocked and files reason as a comment. Throws on an unknown card id; returns null for a card not running. When runId is given, returns null unless it is the card's live run. */
46
+ /** Requires the card be running; closes the live run as blocked and files reason as a comment. Throws on an unknown
47
+ * card id; returns null for a card not running. When runId is given, returns null unless it is the card's live run. */
46
48
  export declare function blockCard(hippoRoot: string, tenantId: string, id: string, reason: string, runId?: number): Card | null;
47
- /** Requires the card be running; moves it to review, clearing its lease and heartbeat and keeping its live run. When runId is given, returns null unless it is the card's live run. Throws on an unknown card id; returns null for a card not running. */
49
+ /** Requires the card be running; moves it to review, clearing its lease and heartbeat and keeping its live run. When runId is
50
+ * given, returns null unless it is the card's live run. Throws on an unknown card id; returns null for a card not running. */
48
51
  export declare function reviewCard(hippoRoot: string, tenantId: string, id: string, runId?: number): Card | null;
49
- /** Requires the card be in review; closes the live run with outcome. Outcome 'success' moves the card to done and, in the same transaction, promotes any child whose parents are now all done; 'failure' or 'partial' moves it to shelved and promotes nothing. Throws on an unknown card id; returns null for a card not in review. When runId is given, returns null unless it is the card's live run. */
52
+ /** Closes the live run of a card in review: 'success' moves it to done and promotes children whose parents are all done; 'failure'/'partial' shelves it.
53
+ * Throws on an unknown card id; returns null for a card not in review, or when `runId` is given and is not the card's live run. */
50
54
  export declare function completeCard(hippoRoot: string, tenantId: string, id: string, outcome: HandoffOutcome, runId?: number): {
51
55
  card: Card;
52
56
  promotedChildren: string[];
53
57
  } | null;
54
- /** Returns to ready every running card of the tenant whose lease has expired or is missing: clears its assignee, closes its live run as 'reclaimed' and leaves its handoffs alone, all in one write transaction. Returns the reclaimed card ids in id order. */
58
+ /** Returns to ready every running card of the tenant whose lease has expired or is missing: clears its assignee, closes its live
59
+ * run as 'reclaimed' and leaves its handoffs alone, all in one write transaction. Returns the reclaimed card ids in id order. */
55
60
  export declare function reclaimExpiredCards(hippoRoot: string, tenantId: string): string[];
56
61
  /** Appends a comment to cardId in any card status; throws if cardId is not a card of this tenant. */
57
62
  export declare function addCardComment(hippoRoot: string, tenantId: string, cardId: string, author: string, body: string): CardComment;
@@ -1,9 +1,10 @@
1
1
  import { generateId } from '../core/memory.js';
2
- import { closeHippoDb, withWriteScope, withWriteScopeOr } from '../db/index.js';
2
+ import { withWriteScope, withWriteScopeOr } from '../db/index.js';
3
3
  import { rowToSessionHandoff, isHandoffOutcome } from '../core/handoff.js';
4
- import { CARD_TRANSITIONS, CARD_LEASE_MS } from '../core/card.js';
4
+ import { CARD_LEASE_MS, assertCardTransition } from '../core/card.js';
5
5
  import { assertTenantId } from './tenant.js';
6
- import { openStore } from './open.js';
6
+ import { onHandle, openStore } from './open.js';
7
+ import { chunked } from '../util/chunked.js';
7
8
  import { HANDOFF_COLUMNS } from './handoffs.js';
8
9
  const CARD_COLUMNS = 'id, title, status, assignee_runtime, repo, contract, budget, lease_until, heartbeat_at, created_at, updated_at, tenant_id, scope';
9
10
  function rowToCard(row) {
@@ -77,26 +78,27 @@ function closeLiveRun(db, tenantId, cardId, outcome, now) {
77
78
  WHERE card = ? AND tenant_id = ? AND ended IS NULL
78
79
  `).run(now, outcome, now, cardId, tenantId);
79
80
  }
80
- export function transitionCard(db, tenantId, cardId, options) {
81
+ function transitionCard(db, tenantId, cardId, options) {
82
+ return transitionCards(db, tenantId, [cardId], options);
83
+ }
84
+ /** transitionCard for every card in `cardIds`, as one statement with one timestamp; returns how many moved. */
85
+ function transitionCards(db, tenantId, cardIds, options) {
81
86
  const { from, to, extra } = options;
82
- for (const status of from) {
83
- if (!CARD_TRANSITIONS[status].includes(to)) {
84
- throw new Error(`illegal card transition: ${status} -> ${to}`);
85
- }
86
- }
87
+ assertCardTransition(from, to);
87
88
  const now = new Date().toISOString();
88
89
  // Lease columns follow status: set on the move to running, cleared on every other move (rule 15).
89
90
  const lease = to === 'running' ? [leaseUntilFrom(now), now] : [null, null];
90
91
  const fromPlaceholders = from.map(() => '?').join(', ');
91
92
  const sql = `
92
93
  UPDATE cards SET status = ?, updated_at = ?, lease_until = ?, heartbeat_at = ?${extra?.setSql ? `, ${extra.setSql}` : ''}
93
- WHERE id = ? AND tenant_id = ? AND status IN (${fromPlaceholders})${extra?.whereSql ? ` AND ${extra.whereSql}` : ''}
94
+ WHERE id IN (${cardIds.map(() => '?').join(', ')}) AND tenant_id = ? AND status IN (${fromPlaceholders})${extra?.whereSql ? ` AND ${extra.whereSql}` : ''}
94
95
  `;
95
- const params = [to, now, ...lease, ...(extra?.params ?? []), cardId, tenantId, ...from];
96
+ const params = [to, now, ...lease, ...(extra?.params ?? []), ...cardIds, tenantId, ...from];
96
97
  const result = db.prepare(sql).run(...params);
97
98
  return Number(result.changes ?? 0);
98
99
  }
99
- /** Creates a card; status is ready with no deps or once every dependsOn id is done, else backlog. An unknown dependsOn id throws and commits nothing. A repeated dependsOn id is recorded once. */
100
+ /** Creates a card; status is ready with no deps or once every dependsOn id is done, else backlog.
101
+ * An unknown dependsOn id throws and commits nothing. A repeated dependsOn id is recorded once. */
100
102
  export function createCard(hippoRoot, tenantId, input) {
101
103
  assertTenantId('createCard', tenantId);
102
104
  if (input.title.trim() === '') {
@@ -105,8 +107,7 @@ export function createCard(hippoRoot, tenantId, input) {
105
107
  if (input.budget !== undefined && !(Number.isSafeInteger(input.budget) && input.budget > 0)) {
106
108
  throw new Error(`Invalid budget: ${input.budget} (expected a positive integer)`);
107
109
  }
108
- const db = openStore(hippoRoot);
109
- try {
110
+ return onHandle(hippoRoot, (db) => {
110
111
  const dependsOn = [...new Set(input.dependsOn ?? [])];
111
112
  let id = '';
112
113
  withWriteScope(db, 'create_card', () => {
@@ -120,17 +121,14 @@ export function createCard(hippoRoot, tenantId, input) {
120
121
  INSERT INTO cards (id, title, status, repo, contract, budget, created_at, updated_at, tenant_id)
121
122
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
122
123
  `).run(id, input.title, status, input.repo ?? null, input.contract ?? null, input.budget ?? null, now, now, tenantId);
123
- for (const parentId of dependsOn) {
124
- db.prepare(`
125
- INSERT INTO card_deps (parent, child, tenant_id, created_at) VALUES (?, ?, ?, ?)
126
- `).run(parentId, id, tenantId, now);
127
- }
124
+ const insertDep = db.prepare(`
125
+ INSERT INTO card_deps (parent, child, tenant_id, created_at) VALUES (?, ?, ?, ?)
126
+ `);
127
+ for (const parentId of dependsOn)
128
+ insertDep.run(parentId, id, tenantId, now);
128
129
  });
129
130
  return loadCardRow(db, tenantId, id);
130
- }
131
- finally {
132
- closeHippoDb(db);
133
- }
131
+ }, openStore);
134
132
  }
135
133
  /** Whether every dependsOn card is done, true for none; throws on an id that is no card of the tenant. Call inside the write scope. */
136
134
  function everyParentDone(db, tenantId, dependsOn) {
@@ -151,19 +149,14 @@ function everyParentDone(db, tenantId, dependsOn) {
151
149
  /** Returns the card row for id, or null if it does not exist under this tenant. */
152
150
  export function loadCard(hippoRoot, tenantId, id) {
153
151
  assertTenantId('loadCard', tenantId);
154
- const db = openStore(hippoRoot);
155
- try {
152
+ return onHandle(hippoRoot, (db) => {
156
153
  return loadCardRow(db, tenantId, id);
157
- }
158
- finally {
159
- closeHippoDb(db);
160
- }
154
+ }, openStore);
161
155
  }
162
156
  /** Lists cards for this tenant, optionally filtered to one status, newest-updated first. */
163
157
  export function listCards(hippoRoot, tenantId, opts = {}) {
164
158
  assertTenantId('listCards', tenantId);
165
- const db = openStore(hippoRoot);
166
- try {
159
+ return onHandle(hippoRoot, (db) => {
167
160
  const conditions = ['tenant_id = ?'];
168
161
  const params = [tenantId];
169
162
  if (opts.status) {
@@ -175,82 +168,63 @@ export function listCards(hippoRoot, tenantId, opts = {}) {
175
168
  SELECT ${CARD_COLUMNS} FROM cards WHERE ${conditions.join(' AND ')} ORDER BY updated_at DESC, id DESC
176
169
  `).all(...params);
177
170
  return rows.map(rowToCard);
178
- }
179
- finally {
180
- closeHippoDb(db);
181
- }
171
+ }, openStore);
182
172
  }
183
173
  /** Returns this card's parent and child ids from card_deps. */
184
174
  export function loadCardDeps(hippoRoot, tenantId, id) {
185
175
  assertTenantId('loadCardDeps', tenantId);
186
- const db = openStore(hippoRoot);
187
- try {
176
+ return onHandle(hippoRoot, (db) => {
188
177
  // SAFETY: rows' shape matches the single `parent` column named in the SELECT below.
189
178
  const parents = db.prepare(`SELECT parent FROM card_deps WHERE tenant_id = ? AND child = ?`).all(tenantId, id).map((r) => r.parent);
190
179
  // SAFETY: rows' shape matches the single `child` column named in the SELECT below.
191
180
  const children = db.prepare(`SELECT child FROM card_deps WHERE tenant_id = ? AND parent = ?`).all(tenantId, id).map((r) => r.child);
192
181
  return { parents, children };
193
- }
194
- finally {
195
- closeHippoDb(db);
196
- }
182
+ }, openStore);
197
183
  }
198
184
  /** Returns this card's run history, most recent first. */
199
185
  export function loadCardRuns(hippoRoot, tenantId, id) {
200
186
  assertTenantId('loadCardRuns', tenantId);
201
- const db = openStore(hippoRoot);
202
- try {
187
+ return onHandle(hippoRoot, (db) => {
203
188
  // SAFETY: rows' shape matches CardRunRow.
204
189
  const rows = db.prepare(`
205
190
  SELECT id, card, runtime, session_id, started, ended, outcome
206
191
  FROM card_runs WHERE tenant_id = ? AND card = ? ORDER BY started DESC, id DESC
207
192
  `).all(tenantId, id);
208
193
  return rows.map(rowToCardRun);
209
- }
210
- finally {
211
- closeHippoDb(db);
212
- }
194
+ }, openStore);
213
195
  }
214
196
  /** Returns this card's comments, most recent first. */
215
197
  export function loadCardComments(hippoRoot, tenantId, id) {
216
198
  assertTenantId('loadCardComments', tenantId);
217
- const db = openStore(hippoRoot);
218
- try {
199
+ return onHandle(hippoRoot, (db) => {
219
200
  // SAFETY: rows' shape matches CardCommentRow.
220
201
  const rows = db.prepare(`
221
202
  SELECT id, card_id, author, body, created_at
222
203
  FROM card_comments WHERE tenant_id = ? AND card_id = ? ORDER BY created_at DESC, id DESC
223
204
  `).all(tenantId, id);
224
205
  return rows.map(rowToCardComment);
225
- }
226
- finally {
227
- closeHippoDb(db);
228
- }
206
+ }, openStore);
229
207
  }
230
208
  /** Read side of the card <-> handoff round trip: the newest handoff filed against this card. */
231
209
  export function loadLatestHandoffForCard(hippoRoot, tenantId, cardId) {
232
210
  assertTenantId('loadLatestHandoffForCard', tenantId);
233
- const db = openStore(hippoRoot);
234
- try {
211
+ return onHandle(hippoRoot, (db) => {
235
212
  // SAFETY: row's shape matches HANDOFF_COLUMNS.
236
213
  const row = db.prepare(`
237
214
  SELECT ${HANDOFF_COLUMNS} FROM session_handoffs
238
215
  WHERE tenant_id = ? AND card_id = ? ORDER BY created_at DESC, id DESC LIMIT 1
239
216
  `).get(tenantId, cardId);
240
217
  return row ? rowToSessionHandoff(row) : null;
241
- }
242
- finally {
243
- closeHippoDb(db);
244
- }
218
+ }, openStore);
245
219
  }
246
- /** Atomic claim: WHERE status IN (ready, blocked) AND assignee_runtime IS NULL decides the race. Throws on an unknown card id; returns null for a card not ready/blocked or already claimed. Sets a CARD_LEASE_MS lease and returns the new run's id as runId. */
220
+ /** Atomic claim: WHERE status IN (ready, blocked) AND assignee_runtime IS NULL decides the race. Throws on an unknown card id;
221
+ * returns null for a card not ready/blocked or already claimed. Sets a CARD_LEASE_MS lease and returns the new run's id as runId. */
247
222
  export function claimCard(hippoRoot, tenantId, id, runtime, sessionId) {
248
223
  assertTenantId('claimCard', tenantId);
249
224
  if (runtime.trim() === '') {
250
225
  throw new Error('runtime must not be empty');
251
226
  }
252
- const db = openStore(hippoRoot);
253
- try {
227
+ return onHandle(hippoRoot, (db) => {
254
228
  const runId = withWriteScopeOr(db, 'claim_card', (rollback) => {
255
229
  const changes = transitionCard(db, tenantId, id, {
256
230
  from: ['ready', 'blocked'],
@@ -271,17 +245,14 @@ export function claimCard(hippoRoot, tenantId, id, runtime, sessionId) {
271
245
  return Number(insert.lastInsertRowid ?? 0);
272
246
  });
273
247
  return runId === null ? null : { ...loadCardRow(db, tenantId, id), runId };
274
- }
275
- finally {
276
- closeHippoDb(db);
277
- }
248
+ }, openStore);
278
249
  }
279
- /** Moves a running card's lease to CARD_LEASE_MS from now and records the heartbeat; updated_at is left alone. Throws on an unknown card id or a run id that is not a positive integer; returns null unless the card is running and runId is its live run. */
250
+ /** Moves a running card's lease to CARD_LEASE_MS from now and records the heartbeat; updated_at is left alone. Throws on an
251
+ * unknown card id or a run id that is not a positive integer; returns null unless the card is running and runId is its live run. */
280
252
  export function heartbeatCard(hippoRoot, tenantId, id, runId) {
281
253
  assertTenantId('heartbeatCard', tenantId);
282
254
  assertRunId(runId);
283
- const db = openStore(hippoRoot);
284
- try {
255
+ return onHandle(hippoRoot, (db) => {
285
256
  const beat = withWriteScopeOr(db, 'heartbeat_card', (rollback) => {
286
257
  const card = loadCardRow(db, tenantId, id);
287
258
  if (!card) {
@@ -296,12 +267,10 @@ export function heartbeatCard(hippoRoot, tenantId, id, runId) {
296
267
  return true;
297
268
  });
298
269
  return beat ? loadCardRow(db, tenantId, id) : null;
299
- }
300
- finally {
301
- closeHippoDb(db);
302
- }
270
+ }, openStore);
303
271
  }
304
- /** Requires the card be running; closes the live run as blocked and files reason as a comment. Throws on an unknown card id; returns null for a card not running. When runId is given, returns null unless it is the card's live run. */
272
+ /** Requires the card be running; closes the live run as blocked and files reason as a comment. Throws on an unknown
273
+ * card id; returns null for a card not running. When runId is given, returns null unless it is the card's live run. */
305
274
  export function blockCard(hippoRoot, tenantId, id, reason, runId) {
306
275
  assertTenantId('blockCard', tenantId);
307
276
  if (reason.trim() === '') {
@@ -309,8 +278,7 @@ export function blockCard(hippoRoot, tenantId, id, reason, runId) {
309
278
  }
310
279
  if (runId !== undefined)
311
280
  assertRunId(runId);
312
- const db = openStore(hippoRoot);
313
- try {
281
+ return onHandle(hippoRoot, (db) => {
314
282
  const blocked = withWriteScopeOr(db, 'block_card', (rollback) => {
315
283
  const allowed = runId === undefined || isLiveRun(db, tenantId, id, runId);
316
284
  const changes = allowed ? transitionCard(db, tenantId, id, { from: ['running'], to: 'blocked', extra: { setSql: 'assignee_runtime = NULL' } }) : 0;
@@ -327,18 +295,15 @@ export function blockCard(hippoRoot, tenantId, id, reason, runId) {
327
295
  return true;
328
296
  });
329
297
  return blocked ? loadCardRow(db, tenantId, id) : null;
330
- }
331
- finally {
332
- closeHippoDb(db);
333
- }
298
+ }, openStore);
334
299
  }
335
- /** Requires the card be running; moves it to review, clearing its lease and heartbeat and keeping its live run. When runId is given, returns null unless it is the card's live run. Throws on an unknown card id; returns null for a card not running. */
300
+ /** Requires the card be running; moves it to review, clearing its lease and heartbeat and keeping its live run. When runId is
301
+ * given, returns null unless it is the card's live run. Throws on an unknown card id; returns null for a card not running. */
336
302
  export function reviewCard(hippoRoot, tenantId, id, runId) {
337
303
  assertTenantId('reviewCard', tenantId);
338
304
  if (runId !== undefined)
339
305
  assertRunId(runId);
340
- const db = openStore(hippoRoot);
341
- try {
306
+ return onHandle(hippoRoot, (db) => {
342
307
  const moved = withWriteScopeOr(db, 'review_card', (rollback) => {
343
308
  const allowed = runId === undefined || isLiveRun(db, tenantId, id, runId);
344
309
  const changes = allowed ? transitionCard(db, tenantId, id, { from: ['running'], to: 'review' }) : 0;
@@ -351,12 +316,10 @@ export function reviewCard(hippoRoot, tenantId, id, runId) {
351
316
  return true;
352
317
  });
353
318
  return moved ? loadCardRow(db, tenantId, id) : null;
354
- }
355
- finally {
356
- closeHippoDb(db);
357
- }
319
+ }, openStore);
358
320
  }
359
- /** Requires the card be in review; closes the live run with outcome. Outcome 'success' moves the card to done and, in the same transaction, promotes any child whose parents are now all done; 'failure' or 'partial' moves it to shelved and promotes nothing. Throws on an unknown card id; returns null for a card not in review. When runId is given, returns null unless it is the card's live run. */
321
+ /** Closes the live run of a card in review: 'success' moves it to done and promotes children whose parents are all done; 'failure'/'partial' shelves it.
322
+ * Throws on an unknown card id; returns null for a card not in review, or when `runId` is given and is not the card's live run. */
360
323
  export function completeCard(hippoRoot, tenantId, id, outcome, runId) {
361
324
  assertTenantId('completeCard', tenantId);
362
325
  if (!isHandoffOutcome(outcome)) {
@@ -364,8 +327,7 @@ export function completeCard(hippoRoot, tenantId, id, outcome, runId) {
364
327
  }
365
328
  if (runId !== undefined)
366
329
  assertRunId(runId);
367
- const db = openStore(hippoRoot);
368
- try {
330
+ return onHandle(hippoRoot, (db) => {
369
331
  const promoted = withWriteScopeOr(db, 'complete_card', (rollback) => {
370
332
  const target = outcome === 'success' ? 'done' : 'shelved';
371
333
  const allowed = runId === undefined || isLiveRun(db, tenantId, id, runId);
@@ -383,38 +345,29 @@ export function completeCard(hippoRoot, tenantId, id, outcome, runId) {
383
345
  return target === 'done' ? promoteUnblockedChildren(db, tenantId, id) : [];
384
346
  });
385
347
  return promoted === null ? null : { card: loadCardRow(db, tenantId, id), promotedChildren: promoted };
386
- }
387
- finally {
388
- closeHippoDb(db);
389
- }
348
+ }, openStore);
390
349
  }
391
350
  /** Moves to ready each backlog child of `parentId` whose parents are all done, and returns their ids. Call inside the write scope. */
392
351
  function promoteUnblockedChildren(db, tenantId, parentId) {
393
- const promotedChildren = [];
394
- // SAFETY: rows' shape matches the single `child` column named in the SELECT below.
395
- const children = db.prepare(`SELECT child FROM card_deps WHERE tenant_id = ? AND parent = ?`).all(tenantId, parentId).map((r) => r.child);
396
- for (const childId of children) {
397
- // SAFETY: row's shape matches the single `status` column named in the SELECT below.
398
- const child = db.prepare(`SELECT status FROM cards WHERE tenant_id = ? AND id = ?`).get(tenantId, childId);
399
- if (!child || child.status !== 'backlog')
400
- continue;
401
- // SAFETY: rows' shape matches the single `parent` column named in the SELECT below.
402
- const parents = db.prepare(`SELECT parent FROM card_deps WHERE tenant_id = ? AND child = ?`).all(tenantId, childId).map((r) => r.parent);
403
- const placeholders = parents.map(() => '?').join(', ');
404
- // SAFETY: row's shape matches the single `c` column named in the SELECT below.
405
- const doneCount = db.prepare(`SELECT COUNT(*) as c FROM cards WHERE tenant_id = ? AND id IN (${placeholders}) AND status = 'done'`).get(tenantId, ...parents).c;
406
- if (doneCount === parents.length) {
407
- transitionCard(db, tenantId, childId, { from: ['backlog'], to: 'ready' });
408
- promotedChildren.push(childId);
409
- }
410
- }
411
- return promotedChildren;
352
+ // The child's status and its open parents are result columns, not joins, so the rows keep the order of a plain read of the parent's children.
353
+ // SAFETY: rows' shape matches the three columns named in the SELECT below.
354
+ const children = db.prepare(`
355
+ SELECT d.child AS child,
356
+ (SELECT c.status FROM cards c WHERE c.tenant_id = ? AND c.id = d.child) AS status,
357
+ (SELECT COUNT(*) FROM card_deps p WHERE p.tenant_id = ? AND p.child = d.child
358
+ AND NOT EXISTS (SELECT 1 FROM cards pc WHERE pc.tenant_id = ? AND pc.id = p.parent AND pc.status = 'done')) AS open_parents
359
+ FROM card_deps d WHERE d.tenant_id = ? AND d.parent = ?
360
+ `).all(tenantId, tenantId, tenantId, tenantId, parentId);
361
+ const unblocked = children.filter((r) => r.status === 'backlog' && r.open_parents === 0).map((r) => r.child);
362
+ for (const ids of chunked(unblocked))
363
+ transitionCards(db, tenantId, ids, { from: ['backlog'], to: 'ready' });
364
+ return unblocked;
412
365
  }
413
- /** Returns to ready every running card of the tenant whose lease has expired or is missing: clears its assignee, closes its live run as 'reclaimed' and leaves its handoffs alone, all in one write transaction. Returns the reclaimed card ids in id order. */
366
+ /** Returns to ready every running card of the tenant whose lease has expired or is missing: clears its assignee, closes its live
367
+ * run as 'reclaimed' and leaves its handoffs alone, all in one write transaction. Returns the reclaimed card ids in id order. */
414
368
  export function reclaimExpiredCards(hippoRoot, tenantId) {
415
369
  assertTenantId('reclaimExpiredCards', tenantId);
416
- const db = openStore(hippoRoot);
417
- try {
370
+ return onHandle(hippoRoot, (db) => {
418
371
  return withWriteScope(db, 'reclaim_expired_cards', () => {
419
372
  // Read lease times under the write lock, so a heartbeat that committed while we waited wins.
420
373
  const now = new Date().toISOString();
@@ -430,10 +383,7 @@ export function reclaimExpiredCards(hippoRoot, tenantId) {
430
383
  }
431
384
  return ids;
432
385
  });
433
- }
434
- finally {
435
- closeHippoDb(db);
436
- }
386
+ }, openStore);
437
387
  }
438
388
  /** Appends a comment to cardId in any card status; throws if cardId is not a card of this tenant. */
439
389
  export function addCardComment(hippoRoot, tenantId, cardId, author, body) {
@@ -441,12 +391,8 @@ export function addCardComment(hippoRoot, tenantId, cardId, author, body) {
441
391
  if (body.trim() === '') {
442
392
  throw new Error('body must not be empty');
443
393
  }
444
- const db = openStore(hippoRoot);
445
- try {
394
+ return onHandle(hippoRoot, (db) => {
446
395
  return insertCardComment(db, tenantId, cardId, author, body);
447
- }
448
- finally {
449
- closeHippoDb(db);
450
- }
396
+ }, openStore);
451
397
  }
452
398
  //# sourceMappingURL=cards.js.map
@@ -0,0 +1,18 @@
1
+ import { type CompactionStart, type Log } from './compactions-record.js';
2
+ /** {@link startCompaction} on a handle of its own, for a caller's request. */
3
+ export declare function startCompactionAt(hippoRoot: string, tenantId: string, start: CompactionStart): string;
4
+ /** {@link markSnapshotSaved} on a handle of its own, for a caller's request. */
5
+ export declare function markSnapshotSavedAt(hippoRoot: string, tenantId: string, recordId: string): void;
6
+ export interface CallerItems {
7
+ readonly sessionId: string;
8
+ readonly trigger: string | null;
9
+ readonly requestId: string;
10
+ readonly project: string;
11
+ readonly items: readonly string[];
12
+ /** The caller's audit actor and its project's names. */
13
+ readonly owner: string;
14
+ readonly origins: readonly string[];
15
+ }
16
+ /** A caller's items, already scrubbed, under its record: a retry of a finished request answers with the first count, and a `summarised` one is reused. */
17
+ export declare function saveCallerItems(hippoRoot: string, tenantId: string, req: CallerItems, log: Log): number;
18
+ //# sourceMappingURL=compaction-caller.d.ts.map
@@ -0,0 +1,29 @@
1
+ // A caller's compaction calls on a handle of its own, for code that has a folder and no connection.
2
+ import { onHandle } from './open.js';
3
+ import { compactionByRequest, markSnapshotSaved, recordSummary, saveItems, startCompaction, } from './compactions-record.js';
4
+ /** {@link startCompaction} on a handle of its own, for a caller's request. */
5
+ export function startCompactionAt(hippoRoot, tenantId, start) {
6
+ return onHandle(hippoRoot, (db) => startCompaction(db, tenantId, start));
7
+ }
8
+ /** {@link markSnapshotSaved} on a handle of its own, for a caller's request. */
9
+ export function markSnapshotSavedAt(hippoRoot, tenantId, recordId) {
10
+ onHandle(hippoRoot, (db) => markSnapshotSaved(db, tenantId, recordId));
11
+ }
12
+ /** A caller's items, already scrubbed, under its record: a retry of a finished request answers with the first count, and a `summarised` one is reused. */
13
+ export function saveCallerItems(hippoRoot, tenantId, req, log) {
14
+ return onHandle(hippoRoot, (db) => {
15
+ const earlier = compactionByRequest(db, tenantId, req.requestId, req.sessionId);
16
+ if (earlier !== null && earlier.status !== 'summarised')
17
+ return earlier.itemsWritten;
18
+ const meta = { sessionId: req.sessionId, trigger: req.trigger, cwd: null, transcriptPath: null };
19
+ const text = { summary: '', items: [...req.items] };
20
+ const record = earlier ?? recordSummary(db, hippoRoot, tenantId, {
21
+ meta, text, at: new Date(), caller: { originProject: req.project, requestId: req.requestId },
22
+ });
23
+ return saveItems(db, hippoRoot, {
24
+ tenantId, recordId: record.id, sessionId: req.sessionId, originProject: record.originProject, cwd: null,
25
+ items: record.items, caller: { actor: req.owner, origins: req.origins },
26
+ }, log);
27
+ });
28
+ }
29
+ //# sourceMappingURL=compaction-caller.js.map