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
package/dist/cli/card.js CHANGED
@@ -1,13 +1,28 @@
1
1
  // The `hippo card` verb (the agent work board); main() loads it lazily from the command table.
2
- import { createCard, loadCard, listCards, loadCardRuns, claimCard, heartbeatCard, blockCard, reviewCard, completeCard, reclaimExpiredCards, addCardComment, } from '../store/cards.js';
2
+ import * as cardsApi from '../api/cards.js';
3
+ import { cliApiContext } from './api-context.js';
3
4
  import { isHandoffOutcome } from '../core/handoff.js';
4
5
  import { isCardStatus } from '../core/card.js';
5
- import { loadCardDetail } from '../store/card-detail.js';
6
- import { resolveTenantId } from '../store/tenant.js';
7
6
  import { printError } from './output.js';
8
7
  import { stringFlagOrExit } from './flag-values.js';
9
8
  import { requireInit } from './shared.js';
10
9
  import { errorMessage } from '../util/log.js';
10
+ import { CliExit } from './exit.js';
11
+ // Each subcommand's usage line, written once so the repeated checks cannot drift.
12
+ const CARD_USAGE = {
13
+ create: 'hippo card create --title "..." [--repo <name>] [--contract <text>] [--budget <n>] [--depends-on <id>...]',
14
+ show: 'hippo card show <id> [--json]',
15
+ claim: 'hippo card claim <id> --runtime <name> [--session <id>]',
16
+ heartbeat: 'hippo card heartbeat <id> --run <n>',
17
+ review: 'hippo card review <id> [--run <n>]',
18
+ complete: 'hippo card complete <id> --outcome <success|failure|partial> [--run <n>]',
19
+ reclaim: 'hippo card reclaim (sweeps every expired lease; use hippo card block <id> for one card)',
20
+ comment: 'hippo card comment <id> --body "..." [--author <name>]',
21
+ };
22
+ function usageError(sub) {
23
+ printError(`Usage: ${CARD_USAGE[sub]}`);
24
+ return new CliExit(1);
25
+ }
11
26
  // Mirrors ARCHIVE_REASON_REQUIRED so the block message can't drift from its usage line.
12
27
  const CARD_BLOCK_REASON_REQUIRED = 'hippo card block <id> requires --reason "<why>" (recorded as a comment).';
13
28
  function printCard(detail) {
@@ -59,14 +74,15 @@ function cardRunFlag(flags) {
59
74
  const n = Number(raw);
60
75
  if (!/^\d+$/.test(raw) || !Number.isSafeInteger(n) || n <= 0) {
61
76
  printError(`Invalid --run: "${raw}" (expected a positive integer).`);
62
- process.exit(1);
77
+ throw new CliExit(1);
63
78
  }
64
79
  return n;
65
80
  }
66
81
  // Reads after the store already refused, so this only explains the refusal, never changes it.
67
82
  function cardRefusal(hippoRoot, tenantId, id) {
68
- const card = loadCard(hippoRoot, tenantId, id);
69
- const liveRun = loadCardRuns(hippoRoot, tenantId, id).find((r) => !r.ended);
83
+ const ctx = cliApiContext(hippoRoot, tenantId);
84
+ const card = cardsApi.cardLoad(ctx, id);
85
+ const liveRun = cardsApi.cardRuns(ctx, id).find((r) => !r.ended);
70
86
  return `status ${card?.status ?? 'unknown'}, live run ${liveRun?.id ?? 'none'}`;
71
87
  }
72
88
  const CARD_SUBCOMMAND_FLAGS = {
@@ -82,13 +98,12 @@ const CARD_SUBCOMMAND_FLAGS = {
82
98
  comment: ['body', 'author'],
83
99
  };
84
100
  /** Runs `hippo card <subcommand>`: rejects flags the subcommand never reads, then hands off to its handler. */
85
- export function cmdCard(hippoRoot, args, flags) {
101
+ export function handleCard({ hippoRoot, tenantId, args, flags }) {
86
102
  requireInit(hippoRoot);
87
- const tenantId = resolveTenantId({});
88
103
  const subcommand = args[0] ?? '';
89
104
  if (!Object.hasOwn(CARD_SUBCOMMAND_FLAGS, subcommand)) {
90
105
  printError('Usage: hippo card <create|show|list|claim|heartbeat|block|review|complete|reclaim|comment>');
91
- process.exit(1);
106
+ throw new CliExit(1);
92
107
  }
93
108
  // SAFETY: hasOwn, unlike `in`, skips inherited keys such as constructor, so subcommand is a real key.
94
109
  const known = subcommand;
@@ -97,7 +112,7 @@ export function cmdCard(hippoRoot, args, flags) {
97
112
  if (!allowedFlags.includes(key)) {
98
113
  const valid = allowedFlags.length > 0 ? allowedFlags.map((f) => `--${f}`).join(', ') : '(none)';
99
114
  printError(`Unknown flag --${key} for hippo card ${subcommand}. Valid flags: ${valid}`);
100
- process.exit(1);
115
+ throw new CliExit(1);
101
116
  }
102
117
  }
103
118
  CARD_HANDLERS[known](hippoRoot, tenantId, args, flags);
@@ -105,8 +120,7 @@ export function cmdCard(hippoRoot, args, flags) {
105
120
  function cardCreate(hippoRoot, tenantId, _args, flags) {
106
121
  const title = stringFlagOrExit(flags, 'title') ?? '';
107
122
  if (!title) {
108
- printError('Usage: hippo card create --title "..." [--repo <name>] [--contract <text>] [--budget <n>] [--depends-on <id>...]');
109
- process.exit(1);
123
+ throw usageError('create');
110
124
  }
111
125
  const repo = stringFlagOrExit(flags, 'repo') || undefined;
112
126
  const contract = stringFlagOrExit(flags, 'contract') || undefined;
@@ -115,36 +129,35 @@ function cardCreate(hippoRoot, tenantId, _args, flags) {
115
129
  if (budgetRaw !== undefined) {
116
130
  if (!/^\d+$/.test(budgetRaw)) {
117
131
  printError(`Invalid budget: "${budgetRaw}" (expected a positive integer)`);
118
- process.exit(1);
132
+ throw new CliExit(1);
119
133
  }
120
134
  budget = Number(budgetRaw);
121
135
  }
122
136
  const dependsOnFlag = flags['depends-on'];
123
137
  if (dependsOnFlag === true) {
124
138
  printError('--depends-on requires a value');
125
- process.exit(1);
139
+ throw new CliExit(1);
126
140
  }
127
141
  const dependsOn = Array.isArray(dependsOnFlag) ? dependsOnFlag : [];
128
142
  let card;
129
143
  try {
130
- card = createCard(hippoRoot, tenantId, { title, repo, contract, budget, dependsOn });
144
+ card = cardsApi.cardCreate(cliApiContext(hippoRoot, tenantId), { title, repo, contract, budget, dependsOn });
131
145
  }
132
146
  catch (error) {
133
147
  printError(errorMessage(error));
134
- process.exit(1);
148
+ throw new CliExit(1);
135
149
  }
136
150
  console.log(`Created card ${card.id} (status: ${card.status})`);
137
151
  }
138
152
  function cardShow(hippoRoot, tenantId, args, flags) {
139
153
  const id = args[1];
140
154
  if (!id) {
141
- printError('Usage: hippo card show <id> [--json]');
142
- process.exit(1);
155
+ throw usageError('show');
143
156
  }
144
- const detail = loadCardDetail(hippoRoot, tenantId, id);
157
+ const detail = cardsApi.cardDetail(cliApiContext(hippoRoot, tenantId), id);
145
158
  if (!detail) {
146
159
  printError(`No card found with id ${id}.`);
147
- process.exit(1);
160
+ throw new CliExit(1);
148
161
  }
149
162
  if (flags['json']) {
150
163
  console.log(JSON.stringify(detail, null, 2));
@@ -156,9 +169,9 @@ function cardList(hippoRoot, tenantId, _args, flags) {
156
169
  const status = stringFlagOrExit(flags, 'status');
157
170
  if (status !== undefined && !isCardStatus(status)) {
158
171
  printError(`Invalid status: "${status}".`);
159
- process.exit(1);
172
+ throw new CliExit(1);
160
173
  }
161
- const cards = listCards(hippoRoot, tenantId, { status });
174
+ const cards = cardsApi.cardList(cliApiContext(hippoRoot, tenantId), { status });
162
175
  if (flags['json']) {
163
176
  console.log(JSON.stringify({ cards }, null, 2));
164
177
  return;
@@ -175,21 +188,20 @@ function cardClaim(hippoRoot, tenantId, args, flags) {
175
188
  const id = args[1];
176
189
  const runtime = stringFlagOrExit(flags, 'runtime') ?? '';
177
190
  if (!id || !runtime) {
178
- printError('Usage: hippo card claim <id> --runtime <name> [--session <id>]');
179
- process.exit(1);
191
+ throw usageError('claim');
180
192
  }
181
193
  const sessionId = stringFlagOrExit(flags, 'session') || undefined;
182
194
  let card;
183
195
  try {
184
- card = claimCard(hippoRoot, tenantId, id, runtime, sessionId);
196
+ card = cardsApi.cardClaim(cliApiContext(hippoRoot, tenantId), id, runtime, sessionId);
185
197
  }
186
198
  catch (error) {
187
199
  printError(errorMessage(error));
188
- process.exit(1);
200
+ throw new CliExit(1);
189
201
  }
190
202
  if (!card) {
191
203
  printError(`Could not claim card ${id} (not ready/blocked, or already claimed).`);
192
- process.exit(1);
204
+ throw new CliExit(1);
193
205
  }
194
206
  console.log(`Claimed card ${card.id} for ${runtime} (run ${card.runId}, lease until ${card.leaseUntil})`);
195
207
  }
@@ -197,20 +209,19 @@ function cardHeartbeat(hippoRoot, tenantId, args, flags) {
197
209
  const id = args[1];
198
210
  const runId = cardRunFlag(flags);
199
211
  if (!id || runId === undefined) {
200
- printError('Usage: hippo card heartbeat <id> --run <n>');
201
- process.exit(1);
212
+ throw usageError('heartbeat');
202
213
  }
203
214
  let card;
204
215
  try {
205
- card = heartbeatCard(hippoRoot, tenantId, id, runId);
216
+ card = cardsApi.cardHeartbeat(cliApiContext(hippoRoot, tenantId), id, runId);
206
217
  }
207
218
  catch (error) {
208
219
  printError(errorMessage(error));
209
- process.exit(1);
220
+ throw new CliExit(1);
210
221
  }
211
222
  if (!card) {
212
223
  printError(`Could not heartbeat card ${id} (${cardRefusal(hippoRoot, tenantId, id)}).`);
213
- process.exit(1);
224
+ throw new CliExit(1);
214
225
  }
215
226
  console.log(`Heartbeat card ${card.id}: lease until ${card.leaseUntil}`);
216
227
  }
@@ -219,43 +230,42 @@ function cardBlock(hippoRoot, tenantId, args, flags) {
219
230
  const reason = stringFlagOrExit(flags, 'reason') ?? '';
220
231
  if (!id || !reason) {
221
232
  printError(CARD_BLOCK_REASON_REQUIRED);
222
- process.exit(1);
233
+ throw new CliExit(1);
223
234
  }
224
235
  const runId = cardRunFlag(flags);
225
236
  let card;
226
237
  try {
227
- card = blockCard(hippoRoot, tenantId, id, reason, runId);
238
+ card = cardsApi.cardBlock(cliApiContext(hippoRoot, tenantId), id, reason, runId);
228
239
  }
229
240
  catch (error) {
230
241
  printError(errorMessage(error));
231
- process.exit(1);
242
+ throw new CliExit(1);
232
243
  }
233
244
  if (!card) {
234
245
  const why = runId === undefined ? 'not running' : cardRefusal(hippoRoot, tenantId, id);
235
246
  printError(`Could not block card ${id} (${why}).`);
236
- process.exit(1);
247
+ throw new CliExit(1);
237
248
  }
238
249
  console.log(`Blocked card ${card.id}`);
239
250
  }
240
251
  function cardReview(hippoRoot, tenantId, args, flags) {
241
252
  const id = args[1];
242
253
  if (!id) {
243
- printError('Usage: hippo card review <id> [--run <n>]');
244
- process.exit(1);
254
+ throw usageError('review');
245
255
  }
246
256
  const runId = cardRunFlag(flags);
247
257
  let card;
248
258
  try {
249
- card = reviewCard(hippoRoot, tenantId, id, runId);
259
+ card = cardsApi.cardReview(cliApiContext(hippoRoot, tenantId), id, runId);
250
260
  }
251
261
  catch (error) {
252
262
  printError(errorMessage(error));
253
- process.exit(1);
263
+ throw new CliExit(1);
254
264
  }
255
265
  if (!card) {
256
266
  const why = runId === undefined ? 'not running' : cardRefusal(hippoRoot, tenantId, id);
257
267
  printError(`Could not move card ${id} to review (${why}).`);
258
- process.exit(1);
268
+ throw new CliExit(1);
259
269
  }
260
270
  console.log(`Card ${card.id} moved to review`);
261
271
  }
@@ -263,22 +273,21 @@ function cardComplete(hippoRoot, tenantId, args, flags) {
263
273
  const id = args[1];
264
274
  const outcomeRaw = flags['outcome'];
265
275
  if (!id || !isHandoffOutcome(outcomeRaw)) {
266
- printError('Usage: hippo card complete <id> --outcome <success|failure|partial> [--run <n>]');
267
- process.exit(1);
276
+ throw usageError('complete');
268
277
  }
269
278
  const runId = cardRunFlag(flags);
270
279
  let result;
271
280
  try {
272
- result = completeCard(hippoRoot, tenantId, id, outcomeRaw, runId);
281
+ result = cardsApi.cardComplete(cliApiContext(hippoRoot, tenantId), id, outcomeRaw, runId);
273
282
  }
274
283
  catch (error) {
275
284
  printError(errorMessage(error));
276
- process.exit(1);
285
+ throw new CliExit(1);
277
286
  }
278
287
  if (!result) {
279
288
  const why = runId === undefined ? 'not in review' : cardRefusal(hippoRoot, tenantId, id);
280
289
  printError(`Could not complete card ${id} (${why}).`);
281
- process.exit(1);
290
+ throw new CliExit(1);
282
291
  }
283
292
  console.log(`Completed card ${result.card.id} (status: ${result.card.status})`);
284
293
  if (result.promotedChildren.length > 0) {
@@ -287,10 +296,9 @@ function cardComplete(hippoRoot, tenantId, args, flags) {
287
296
  }
288
297
  function cardReclaim(hippoRoot, tenantId, args) {
289
298
  if (args.length > 1) {
290
- printError('Usage: hippo card reclaim (sweeps every expired lease; use hippo card block <id> for one card)');
291
- process.exit(1);
299
+ throw usageError('reclaim');
292
300
  }
293
- const ids = reclaimExpiredCards(hippoRoot, tenantId);
301
+ const ids = cardsApi.cardReclaimExpired(cliApiContext(hippoRoot, tenantId));
294
302
  if (ids.length === 0) {
295
303
  console.log('No expired leases.');
296
304
  return;
@@ -302,22 +310,21 @@ function cardReclaim(hippoRoot, tenantId, args) {
302
310
  function cardComment(hippoRoot, tenantId, args, flags) {
303
311
  const id = args[1];
304
312
  if (!id) {
305
- printError('Usage: hippo card comment <id> --body "..." [--author <name>]');
306
- process.exit(1);
313
+ throw usageError('comment');
307
314
  }
308
315
  // Only show and comment look the card up directly; claim/heartbeat/block/review/complete throw from the store instead.
309
- const card = loadCard(hippoRoot, tenantId, id);
316
+ const ctx = cliApiContext(hippoRoot, tenantId);
317
+ const card = cardsApi.cardLoad(ctx, id);
310
318
  if (!card) {
311
319
  printError(`No card found with id ${id}.`);
312
- process.exit(1);
320
+ throw new CliExit(1);
313
321
  }
314
322
  const body = stringFlagOrExit(flags, 'body') ?? '';
315
323
  if (!body) {
316
- printError('Usage: hippo card comment <id> --body "..." [--author <name>]');
317
- process.exit(1);
324
+ throw usageError('comment');
318
325
  }
319
326
  const author = stringFlagOrExit(flags, 'author') || 'cli';
320
- const comment = addCardComment(hippoRoot, tenantId, id, author, body);
327
+ const comment = cardsApi.cardComment(ctx, id, author, body);
321
328
  console.log(`Added comment ${comment.id} to card ${id}`);
322
329
  }
323
330
  const CARD_HANDLERS = {
@@ -1,26 +1,17 @@
1
- /**
2
- * HTTP client wrapper for `hippo serve`.
3
- *
4
- * Only the writes the CLI routes (remember, forget, archive, promote), which are
5
- * also all HIPPO_REQUIRE_SERVER covers; every other command opens the store
6
- * directly. Each call returns the same shape that api.ts would.
7
- *
8
- * Errors from the server (4xx/5xx) are mapped back into thrown Errors with
9
- * the server's `error` message preserved verbatim so existing CLI handlers
10
- * that match on substrings (e.g. "not found", "already superseded") still
11
- * work unchanged.
12
- *
13
- * Network errors (ECONNREFUSED on a stale pidfile, etc.) propagate as the
14
- * native fetch failure so the caller can detect them and self-heal.
15
- */
1
+ /** HTTP client wrapper for `hippo serve`: only the routed writes (remember, forget, archive, promote); every other command opens the store directly.
2
+ * Server errors rethrow with the message verbatim so CLI substring matches still work; network errors propagate as the native fetch failure. */
16
3
  import type { RememberOpts, RememberResult } from '../api/index.js';
17
- /** An error the server answered with, not one the transport raised. The
18
- * refused-connection classifier sniffs message text, and a server message
19
- * quotes the caller's own id or content back verbatim. */
4
+ /** An error the server answered with, not one the transport raised: the refused-connection classifier sniffs message text,
5
+ * and a server message quotes the caller's own id or content back verbatim. */
20
6
  export declare class HttpResponseError extends Error {
21
7
  readonly status: number;
22
8
  constructor(message: string, status: number);
23
9
  }
10
+ /** A 2xx reply that is not the JSON object the route promises: another process may now own the pidfile's port. */
11
+ export declare class MalformedReplyError extends Error {
12
+ readonly route: string;
13
+ constructor(route: string, detail: string);
14
+ }
24
15
  export declare function remember(serverUrl: string, apiKey: string | undefined, opts: RememberOpts): Promise<RememberResult>;
25
16
  export declare function forget(serverUrl: string, apiKey: string | undefined, id: string): Promise<{
26
17
  ok: true;
@@ -35,14 +26,8 @@ export declare function archiveRaw(serverUrl: string, apiKey: string | undefined
35
26
  ok: true;
36
27
  archivedAt: string;
37
28
  }>;
38
- /**
39
- * How far a request got before the transport failed.
40
- *
41
- * 'never-sent' means the connection never opened, so the caller may safely
42
- * replay the call locally. 'delivery-unknown' means the socket broke with the
43
- * request already on the wire: the server may have committed it, so replaying a
44
- * write would store it twice. 'none' means this was not a transport failure.
45
- */
29
+ /** 'never-sent': connection never opened, safe to replay locally. 'delivery-unknown': the request was on the wire and may have
30
+ * committed, so never replay a write. 'none': not a transport failure. */
46
31
  export type TransportFailure = 'none' | 'never-sent' | 'delivery-unknown';
47
- export declare function classifyTransportFailure(err: unknown): TransportFailure;
32
+ export declare function classifyTransportFailure(err: Error): TransportFailure;
48
33
  //# sourceMappingURL=client.d.ts.map
@@ -1,28 +1,20 @@
1
- /**
2
- * HTTP client wrapper for `hippo serve`.
3
- *
4
- * Only the writes the CLI routes (remember, forget, archive, promote), which are
5
- * also all HIPPO_REQUIRE_SERVER covers; every other command opens the store
6
- * directly. Each call returns the same shape that api.ts would.
7
- *
8
- * Errors from the server (4xx/5xx) are mapped back into thrown Errors with
9
- * the server's `error` message preserved verbatim so existing CLI handlers
10
- * that match on substrings (e.g. "not found", "already superseded") still
11
- * work unchanged.
12
- *
13
- * Network errors (ECONNREFUSED on a stale pidfile, etc.) propagate as the
14
- * native fetch failure so the caller can detect them and self-heal.
15
- */
1
+ /** HTTP client wrapper for `hippo serve`: only the routed writes (remember, forget, archive, promote); every other command opens the store directly.
2
+ * Server errors rethrow with the message verbatim so CLI substring matches still work; network errors propagate as the native fetch failure. */
16
3
  import { fetchWithRetry } from '../util/http-retry.js';
4
+ import { readCappedJson } from '../util/capped-json.js';
5
+ import { isJsonObject, isJsonString } from '../util/json.js';
17
6
  /** A write the local server has not answered in this long is stuck; the caller treats it as delivery-unknown. */
18
7
  const SERVER_TIMEOUT_MS = 30_000;
19
8
  /** Five tries at the server's 1 s Retry-After keeps the roughly 5 s wait the CLI had before the server answered busy with 503. */
20
9
  const STORE_BUSY_ATTEMPTS = 5;
10
+ /** Every routed write answers with a few short fields; the pidfile's port may now be another process, so cap what it sends. */
11
+ const MAX_REPLY_BYTES = 1024 * 1024;
21
12
  /** The server sets Retry-After on a 503 only for a held write lock (server.ts replyFor); the auth-provider 503 has none. */
22
13
  function isStoreBusy(res) {
23
14
  return res.status === 503 && res.headers.has('retry-after');
24
15
  }
25
- /** Replaying is safe because each routed write commits in one transaction and anything after it is best-effort, so a busy 503 means nothing landed; a sleep is safe too, as a re-run finishes a partial one. */
16
+ /** Replaying is safe because each routed write commits in one transaction and anything after it is best-effort, so a busy 503 means
17
+ * nothing landed; a sleep is safe too, as a re-run finishes a partial one. */
26
18
  function sendWrite(url, init) {
27
19
  return fetchWithRetry(url, init, { timeoutMs: SERVER_TIMEOUT_MS, attempts: STORE_BUSY_ATTEMPTS, retryOn: isStoreBusy });
28
20
  }
@@ -34,12 +26,8 @@ function buildHeaders(apiKey, withBody) {
34
26
  headers['authorization'] = `Bearer ${apiKey}`;
35
27
  return headers;
36
28
  }
37
- function isNonEmptyString(value) {
38
- return typeof value === 'string' && value.length > 0;
39
- }
40
- /** An error the server answered with, not one the transport raised. The
41
- * refused-connection classifier sniffs message text, and a server message
42
- * quotes the caller's own id or content back verbatim. */
29
+ /** An error the server answered with, not one the transport raised: the refused-connection classifier sniffs message text,
30
+ * and a server message quotes the caller's own id or content back verbatim. */
43
31
  export class HttpResponseError extends Error {
44
32
  status;
45
33
  constructor(message, status) {
@@ -48,25 +36,41 @@ export class HttpResponseError extends Error {
48
36
  this.name = 'HttpResponseError';
49
37
  }
50
38
  }
51
- /**
52
- * Throw an Error matching the server's error message. Keeps message strings
53
- * intact so cli.ts handlers can match on the same substrings ("not found",
54
- * "already superseded", "Unknown key_id") whether the call went through
55
- * api.ts or client.ts.
56
- */
39
+ /** Throw an Error carrying the server's message verbatim, so cli.ts handlers can match the same substrings
40
+ * ("not found", "already superseded") as on the direct path. */
57
41
  async function throwForStatus(res) {
58
42
  let message = `${res.status} ${res.statusText}`;
59
43
  try {
60
- const body = await res.json();
61
- if (body && isNonEmptyString(body.error)) {
44
+ const body = await readCappedJson(res, MAX_REPLY_BYTES);
45
+ if (isJsonObject(body) && isJsonString(body.error) && body.error.length > 0) {
62
46
  message = body.error;
63
47
  }
64
48
  }
65
49
  catch {
66
- // body wasn't JSON; fall back to status line.
50
+ // body wasn't JSON or ran past the cap; fall back to status line.
67
51
  }
68
52
  throw new HttpResponseError(message, res.status);
69
53
  }
54
+ /** A 2xx reply that is not the JSON object the route promises: another process may now own the pidfile's port. */
55
+ export class MalformedReplyError extends Error {
56
+ route;
57
+ constructor(route, detail) {
58
+ super(`the hippo server's reply to ${route} was not the expected JSON object (${detail})`);
59
+ this.route = route;
60
+ this.name = 'MalformedReplyError';
61
+ }
62
+ }
63
+ /** A 2xx reply's body, read under the cap; it must be a JSON object, and `guard` narrows it further where the shape is known. */
64
+ async function readReply(res, route, guard) {
65
+ const body = await readCappedJson(res, MAX_REPLY_BYTES);
66
+ if (!isJsonObject(body))
67
+ throw new MalformedReplyError(route, body === null ? 'null' : Array.isArray(body) ? 'array' : 'a scalar');
68
+ if (guard && !guard(body))
69
+ throw new MalformedReplyError(route, 'unexpected fields');
70
+ const reply = body;
71
+ // SAFETY: the reply comes from hippo's own server, whose route returns this api result as JSON.
72
+ return reply;
73
+ }
70
74
  export async function remember(serverUrl, apiKey, opts) {
71
75
  const res = await sendWrite(`${serverUrl}/v1/memories`, {
72
76
  method: 'POST',
@@ -75,8 +79,7 @@ export async function remember(serverUrl, apiKey, opts) {
75
79
  });
76
80
  if (!res.ok)
77
81
  await throwForStatus(res);
78
- const result = await res.json();
79
- return result;
82
+ return readReply(res, 'POST /v1/memories');
80
83
  }
81
84
  export async function forget(serverUrl, apiKey, id) {
82
85
  const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}`, {
@@ -85,8 +88,7 @@ export async function forget(serverUrl, apiKey, id) {
85
88
  });
86
89
  if (!res.ok)
87
90
  await throwForStatus(res);
88
- const result = await res.json();
89
- return result;
91
+ return readReply(res, 'DELETE /v1/memories/:id', (b) => isJsonString(b.id));
90
92
  }
91
93
  export async function promote(serverUrl, apiKey, id) {
92
94
  const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}/promote`, {
@@ -95,8 +97,7 @@ export async function promote(serverUrl, apiKey, id) {
95
97
  });
96
98
  if (!res.ok)
97
99
  await throwForStatus(res);
98
- const result = await res.json();
99
- return result;
100
+ return readReply(res, 'POST /v1/memories/:id/promote', (b) => isJsonString(b.sourceId) && isJsonString(b.globalId));
100
101
  }
101
102
  export async function archiveRaw(serverUrl, apiKey, id, reason) {
102
103
  const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}/archive`, {
@@ -106,18 +107,14 @@ export async function archiveRaw(serverUrl, apiKey, id, reason) {
106
107
  });
107
108
  if (!res.ok)
108
109
  await throwForStatus(res);
109
- const result = await res.json();
110
- return result;
110
+ return readReply(res, 'POST /v1/memories/:id/archive', (b) => isJsonString(b.archivedAt));
111
111
  }
112
112
  function hasObjectCause(e) {
113
- // Node's fs/net system errors (ECONNREFUSED, ECONNRESET) attach the syscall
114
- // code on a non-null object `cause`; the strict-equality checks below
115
- // validate the code value before it is used for anything.
113
+ // Node's fs/net system errors (ECONNREFUSED, ECONNRESET) attach the syscall code on a non-null object `cause`;
114
+ // the strict-equality checks below validate it before use.
116
115
  return typeof e.cause === 'object' && e.cause !== null;
117
116
  }
118
117
  export function classifyTransportFailure(err) {
119
- if (!(err instanceof Error))
120
- return 'none';
121
118
  // The server answered, so the transport worked, whatever the message says.
122
119
  if (err instanceof HttpResponseError)
123
120
  return 'none';
@@ -1,5 +1,6 @@
1
1
  // The payload gate for `hippo compact-resume`.
2
- import { isSubagentPayload } from '../store/token-ledger.js';
2
+ import { isSubagentPayload } from '../util/hook-payload.js';
3
+ import { isJsonObject, isJsonString } from '../util/json.js';
3
4
  /** Fail-closed read of the SessionStart payload: only a manual run or a main-session `source: 'compact'` payload may print. */
4
5
  export function readCompactResumePayload(stdinText, stdinTimedOut) {
5
6
  // An older Claude Code that ignores `matcher: 'compact'` runs this on every SessionStart, so a parsed payload with any other source stays silent.
@@ -18,7 +19,7 @@ export function readCompactResumePayload(stdinText, stdinTimedOut) {
18
19
  // Malformed JSON is handled as a null payload by the fail-closed check below.
19
20
  payload = null;
20
21
  }
21
- if (!payload || typeof payload !== 'object') {
22
+ if (!isJsonObject(payload)) {
22
23
  // Fail closed on malformed non-empty stdin; only a TTY/no-stdin manual run, which never reaches here, prints.
23
24
  suppressOutput = true;
24
25
  }
@@ -29,7 +30,7 @@ export function readCompactResumePayload(stdinText, stdinTimedOut) {
29
30
  if (payload.source !== 'compact' || isSubagentPayload(stdinText)) {
30
31
  suppressOutput = true;
31
32
  }
32
- if (typeof payload.session_id === 'string') {
33
+ if (isJsonString(payload.session_id)) {
33
34
  payloadSessionId = payload.session_id;
34
35
  }
35
36
  }
@@ -1,4 +1,3 @@
1
- import { type CliFlags, type CommandContext } from './flag-values.js';
2
- export declare function cmdContext(hippoRoot: string, args: string[], flags: CliFlags, stdinText?: string): Promise<void>;
3
- export declare function handleContext({ hippoRoot, args, flags }: CommandContext): Promise<void>;
1
+ import { type CommandContext } from './flag-values.js';
2
+ export declare function handleContext({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
4
3
  //# sourceMappingURL=context.d.ts.map
@@ -1,23 +1,27 @@
1
1
  // The `hippo context` verb, which the per-prompt hook also runs; main() loads it lazily from the command table.
2
- import { isSubagentPayload } from '../store/token-ledger.js';
2
+ import { isSubagentPayload } from '../util/hook-payload.js';
3
3
  import { estimateTokens } from '../util/token-text.js';
4
4
  import { autoDetectContext } from '../api/context-auto.js';
5
- import { detectScope } from '../sharing/scope.js';
5
+ import { detectScope } from '../core/active-scope.js';
6
6
  import { bookLedgerTurn } from '../api/ledger-db.js';
7
7
  import { readHookStdin } from './stdin.js';
8
+ import { isJsonObject, isJsonString } from '../util/json.js';
8
9
  import * as api from '../api/index.js';
9
- import { resolveTenantId } from '../store/tenant.js';
10
+ import { DEFAULT_CONTEXT_BUDGET } from '../api/context.js';
11
+ import { cliApiContext } from './api-context.js';
10
12
  import { renderAmbientSummary } from '../core/ambient.js';
11
13
  import { contextBlockLines, contextCost, crossProjectLines, settleTokens } from '../api/context-render.js';
12
- import { additionalContextOutput, flushDeliveryRecorder, hasContextData, sessionStartEnvelope, toRenderItems, } from '../api/prompt-hook.js';
14
+ import { additionalContextOutput, flushDeliveryRecorder, hasContextData, startDeliveryRecorder, sessionStartEnvelope, toRenderItems, } from '../api/prompt-hook.js';
13
15
  import { parseLimitFlag, parseCountFlag, parseBudgetFlag, flagIsTrue } from './flag-values.js';
14
16
  import { requireInit } from './shared.js';
15
17
  import { printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
16
- import { hostSessionId, hookStoreRoot, hookRuntime, payloadCwdRoot, runHookWithStores, inPilotHoldout, startDeliveryRecorder } from './hook-runtime.js';
17
- export async function cmdContext(hippoRoot, args, flags, stdinText) {
18
- const rec = flagIsTrue(flags, 'pinned-only') ? startDeliveryRecorder(hippoRoot, stdinText, hookRuntime(flags)) : null;
18
+ import { hostSessionId, hookStoreRoot, hookRuntime, payloadCwdRoot, runHookWithStores, inPilotHoldout } from './hook-runtime.js';
19
+ async function cmdContext(hippoRoot, tenantId, args, flags, stdinText) {
20
+ const rec = startDeliveryRecorder(cliApiContext(hippoRoot, tenantId), {
21
+ stdinText, runtime: hookRuntime(flags), eventType: flagIsTrue(flags, 'pinned-only') ? undefined : 'context', envSessionId: hostSessionId(),
22
+ });
19
23
  // No try/finally: a render throw keeps its own exit code and writes no event.
20
- await renderContext(hippoRoot, args, flags, stdinText, rec);
24
+ await renderContext(hippoRoot, tenantId, args, flags, stdinText, rec);
21
25
  flushDeliveryRecorder(rec);
22
26
  }
23
27
  /** The hook payload's session id and raw prompt; a malformed or empty payload yields neither. */
@@ -26,11 +30,12 @@ function readHookPayload(stdinText) {
26
30
  let prompt;
27
31
  if (stdinText && stdinText.trim() !== '') {
28
32
  try {
29
- // SAFETY: both fields are type-checked below before use; `?? {}` covers a JSON null payload.
30
- const { session_id: sid, prompt: raw } = (JSON.parse(stdinText.trim()) ?? {});
31
- if (typeof sid === 'string' && sid.trim() !== '')
33
+ const payload = JSON.parse(stdinText.trim());
34
+ const sid = isJsonObject(payload) ? payload['session_id'] : undefined;
35
+ const raw = isJsonObject(payload) ? payload['prompt'] : undefined;
36
+ if (isJsonString(sid) && sid.trim() !== '')
32
37
  sessionId = sid;
33
- if (typeof raw === 'string')
38
+ if (isJsonString(raw))
34
39
  prompt = raw;
35
40
  }
36
41
  catch {
@@ -39,7 +44,7 @@ function readHookPayload(stdinText) {
39
44
  }
40
45
  return { sessionId, prompt };
41
46
  }
42
- async function renderContext(hippoRoot, args, flags, stdinText, rec) {
47
+ async function renderContext(hippoRoot, resolvedTenant, args, flags, stdinText, rec) {
43
48
  // --pinned-only fires on every prompt, even where no local .hippo exists, so it skips requireInit
44
49
  // and api.getContext falls back to global-only.
45
50
  const pinnedOnly = flagIsTrue(flags, 'pinned-only');
@@ -49,19 +54,18 @@ async function renderContext(hippoRoot, args, flags, stdinText, rec) {
49
54
  const session = resolveContextSession(stdinText);
50
55
  const { currentSessionId, ledgerSessionId, payloadSessionId } = session;
51
56
  // The pilot arm is booked at the first hook call whatever the flags, so the holdout sees no budget or content branch.
52
- const resolvedTenant = resolveTenantId({});
53
57
  if (inPilotHoldout(hippoRoot, resolvedTenant, currentSessionId, payloadSessionId !== undefined)) {
54
58
  rec?.disabled();
55
59
  return;
56
60
  }
57
- const budget = parseBudgetFlag(flags['budget'], 1500);
61
+ const budget = parseBudgetFlag(flags['budget'], DEFAULT_CONTEXT_BUDGET);
58
62
  if (budget <= 0) {
59
63
  rec?.disabled();
60
64
  return;
61
65
  }
62
66
  // --auto shells out to git, so it stays CLI-side; api.getContext stays host-agnostic and falls back to '*'.
63
67
  const query = contextQuery(args, flags);
64
- const ctx = { hippoRoot, tenantId: resolvedTenant, actor: api.adminActor('cli') };
68
+ const ctx = cliApiContext(hippoRoot, resolvedTenant);
65
69
  const format = String(flags['format'] ?? 'markdown');
66
70
  const framing = String(flags['framing'] ?? 'observe');
67
71
  const opts = buildContextOpts(flags, { query, budget, pinnedOnly, format, framing, session, rec });
@@ -195,10 +199,10 @@ function printCrossProjectSection(items) {
195
199
  for (const line of crossProjectLines(items))
196
200
  console.log(line);
197
201
  }
198
- export async function handleContext({ hippoRoot, args, flags }) {
202
+ export async function handleContext({ hippoRoot, tenantId, args, flags }) {
199
203
  // Bounded, not a TTY guard: the hot stdin path and a manual run share this one command.
200
204
  const { text: stdinText } = await readHookStdin();
201
205
  const root = payloadCwdRoot(hippoRoot, stdinText, hookRuntime(flags));
202
- await runHookWithStores(() => cmdContext(hookStoreRoot(root), args, flags, stdinText));
206
+ await runHookWithStores(() => cmdContext(hookStoreRoot(root), tenantId, args, flags, stdinText));
203
207
  }
204
208
  //# sourceMappingURL=context.js.map