hippo-memory 1.70.0 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-memories/claude-code.d.ts +4 -2
  3. package/dist/agent-memories/claude-code.js +14 -5
  4. package/dist/agent-memories/files.js +23 -12
  5. package/dist/agent-memories/markdown.d.ts +1 -3
  6. package/dist/agent-memories/markdown.js +1 -3
  7. package/dist/agent-memories/report.js +2 -1
  8. package/dist/agent-memories/sync.d.ts +4 -2
  9. package/dist/agent-memories/sync.js +10 -5
  10. package/dist/api/assemble.d.ts +7 -44
  11. package/dist/api/assemble.js +2 -22
  12. package/dist/api/audit.d.ts +5 -1
  13. package/dist/api/audit.js +9 -1
  14. package/dist/api/auth.d.ts +13 -22
  15. package/dist/api/auth.js +34 -24
  16. package/dist/api/auto-sleep.js +2 -2
  17. package/dist/api/availability.d.ts +2 -15
  18. package/dist/api/availability.js +2 -15
  19. package/dist/api/context-select.js +3 -4
  20. package/dist/api/context-types.d.ts +10 -35
  21. package/dist/api/context.d.ts +5 -22
  22. package/dist/api/context.js +21 -38
  23. package/dist/api/dormant.d.ts +5 -21
  24. package/dist/api/dormant.js +7 -26
  25. package/dist/api/drill-down.d.ts +7 -46
  26. package/dist/api/drill-down.js +5 -26
  27. package/dist/api/forget.d.ts +5 -24
  28. package/dist/api/forget.js +5 -28
  29. package/dist/api/graph.d.ts +8 -0
  30. package/dist/api/graph.js +7 -0
  31. package/dist/api/index.d.ts +2 -0
  32. package/dist/api/index.js +2 -0
  33. package/dist/api/instruction-detect.js +16 -5
  34. package/dist/api/ledger-db.d.ts +2 -1
  35. package/dist/api/ledger-db.js +5 -3
  36. package/dist/api/memories.d.ts +5 -0
  37. package/dist/api/memories.js +7 -0
  38. package/dist/api/objects.d.ts +9 -0
  39. package/dist/api/objects.js +11 -0
  40. package/dist/api/on-store.js +5 -3
  41. package/dist/api/predictions.d.ts +9 -0
  42. package/dist/api/predictions.js +18 -0
  43. package/dist/api/promote.d.ts +13 -17
  44. package/dist/api/promote.js +11 -19
  45. package/dist/api/prompt-hook.d.ts +4 -4
  46. package/dist/api/prompt-hook.js +10 -9
  47. package/dist/api/recall-cli.d.ts +55 -0
  48. package/dist/api/recall-cli.js +94 -0
  49. package/dist/api/recall-core.js +14 -6
  50. package/dist/api/recall-finish.d.ts +53 -0
  51. package/dist/api/recall-finish.js +30 -0
  52. package/dist/api/recall-history.d.ts +17 -84
  53. package/dist/api/recall-history.js +15 -88
  54. package/dist/api/recall-pipeline.d.ts +2 -3
  55. package/dist/api/recall-pipeline.js +16 -9
  56. package/dist/api/recall-types.d.ts +64 -304
  57. package/dist/api/recall.d.ts +5 -33
  58. package/dist/api/recall.js +59 -60
  59. package/dist/api/refine.d.ts +7 -0
  60. package/dist/api/refine.js +10 -0
  61. package/dist/api/remember-local.d.ts +57 -0
  62. package/dist/api/remember-local.js +90 -0
  63. package/dist/api/remember.d.ts +18 -1
  64. package/dist/api/remember.js +13 -1
  65. package/dist/api/sleep-run.d.ts +1 -3
  66. package/dist/api/sleep-run.js +17 -21
  67. package/dist/api/sleep.d.ts +9 -28
  68. package/dist/api/tokens.d.ts +3 -10
  69. package/dist/api/tokens.js +3 -10
  70. package/dist/api/types.d.ts +6 -29
  71. package/dist/api/types.js +4 -22
  72. package/dist/capture/command.d.ts +4 -12
  73. package/dist/capture/command.js +6 -22
  74. package/dist/capture/compact.d.ts +4 -15
  75. package/dist/capture/compact.js +16 -25
  76. package/dist/capture/compaction-record.js +101 -69
  77. package/dist/capture/compaction-spool.d.ts +1 -1
  78. package/dist/capture/compaction-spool.js +1 -1
  79. package/dist/capture/session-digest.d.ts +1 -1
  80. package/dist/capture/session-digest.js +13 -7
  81. package/dist/capture/transcript.d.ts +2 -10
  82. package/dist/capture/transcript.js +4 -18
  83. package/dist/cli/api-context.d.ts +3 -0
  84. package/dist/cli/api-context.js +6 -0
  85. package/dist/cli/audit-prune.d.ts +6 -39
  86. package/dist/cli/audit-prune.js +6 -39
  87. package/dist/cli/audit.d.ts +1 -1
  88. package/dist/cli/audit.js +33 -34
  89. package/dist/cli/auth.d.ts +2 -2
  90. package/dist/cli/auth.js +57 -39
  91. package/dist/cli/briefs.d.ts +4 -4
  92. package/dist/cli/briefs.js +18 -22
  93. package/dist/cli/card.d.ts +2 -2
  94. package/dist/cli/card.js +31 -32
  95. package/dist/cli/client.d.ts +7 -27
  96. package/dist/cli/client.js +24 -43
  97. package/dist/cli/compact-resume-payload.js +3 -2
  98. package/dist/cli/context.d.ts +1 -2
  99. package/dist/cli/context.js +12 -8
  100. package/dist/cli/continuity.d.ts +6 -6
  101. package/dist/cli/continuity.js +62 -64
  102. package/dist/cli/correction-latency.d.ts +2 -14
  103. package/dist/cli/correction-latency.js +2 -14
  104. package/dist/cli/curate.d.ts +13 -17
  105. package/dist/cli/curate.js +68 -92
  106. package/dist/cli/dag.d.ts +4 -4
  107. package/dist/cli/dag.js +33 -27
  108. package/dist/cli/decisions.d.ts +4 -4
  109. package/dist/cli/decisions.js +33 -47
  110. package/dist/cli/eval.js +15 -13
  111. package/dist/cli/exit.d.ts +6 -0
  112. package/dist/cli/exit.js +11 -0
  113. package/dist/cli/explain.d.ts +1 -2
  114. package/dist/cli/explain.js +6 -4
  115. package/dist/cli/flag-values.d.ts +6 -1
  116. package/dist/cli/flag-values.js +27 -10
  117. package/dist/cli/flags.d.ts +1 -0
  118. package/dist/cli/flags.js +1 -1
  119. package/dist/cli/github.d.ts +14 -0
  120. package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
  121. package/dist/cli/goals.d.ts +2 -2
  122. package/dist/cli/goals.js +46 -50
  123. package/dist/cli/hook-runtime.d.ts +9 -27
  124. package/dist/cli/hook-runtime.js +15 -31
  125. package/dist/cli/init.d.ts +2 -2
  126. package/dist/cli/init.js +6 -12
  127. package/dist/cli/install-steps.js +3 -12
  128. package/dist/cli/last-sleep.d.ts +2 -1
  129. package/dist/cli/last-sleep.js +3 -0
  130. package/dist/cli/maintenance.d.ts +4 -4
  131. package/dist/cli/maintenance.js +14 -19
  132. package/dist/cli/object-verbs.js +4 -3
  133. package/dist/cli/owner-validation.d.ts +5 -28
  134. package/dist/cli/owner-validation.js +5 -28
  135. package/dist/cli/playbooks.d.ts +4 -4
  136. package/dist/cli/playbooks.js +23 -28
  137. package/dist/cli/print.d.ts +2 -5
  138. package/dist/cli/print.js +1 -4
  139. package/dist/cli/projects.d.ts +2 -2
  140. package/dist/cli/projects.js +1 -3
  141. package/dist/cli/provenance-coverage.d.ts +2 -6
  142. package/dist/cli/provenance-coverage.js +2 -6
  143. package/dist/cli/quality-repair-once.js +2 -2
  144. package/dist/cli/recall.d.ts +2 -4
  145. package/dist/cli/recall.js +55 -131
  146. package/dist/cli/refine-llm.d.ts +5 -31
  147. package/dist/cli/refine-llm.js +9 -36
  148. package/dist/cli/remember.d.ts +3 -3
  149. package/dist/cli/remember.js +122 -180
  150. package/dist/cli/scheduler.d.ts +2 -17
  151. package/dist/cli/scheduler.js +12 -18
  152. package/dist/cli/serve.js +21 -12
  153. package/dist/cli/session-hooks.d.ts +10 -18
  154. package/dist/cli/session-hooks.js +112 -113
  155. package/dist/cli/setup.d.ts +4 -4
  156. package/dist/cli/setup.js +19 -21
  157. package/dist/cli/shared.d.ts +9 -23
  158. package/dist/cli/shared.js +9 -32
  159. package/dist/cli/slack.d.ts +2 -2
  160. package/dist/cli/slack.js +19 -23
  161. package/dist/cli/sleep.d.ts +3 -2
  162. package/dist/cli/sleep.js +15 -16
  163. package/dist/cli/status.d.ts +9 -12
  164. package/dist/cli/status.js +55 -98
  165. package/dist/cli/stdin.d.ts +4 -6
  166. package/dist/cli/stdin.js +2 -3
  167. package/dist/cli/transfer.d.ts +9 -9
  168. package/dist/cli/transfer.js +66 -89
  169. package/dist/cli/usage.js +11 -5
  170. package/dist/cli.d.ts +66 -448
  171. package/dist/cli.js +87 -263
  172. package/dist/connectors/github/backfill.d.ts +5 -25
  173. package/dist/connectors/github/backfill.js +14 -49
  174. package/dist/connectors/github/deletion.d.ts +4 -18
  175. package/dist/connectors/github/deletion.js +2 -15
  176. package/dist/connectors/github/dlq.d.ts +8 -33
  177. package/dist/connectors/github/dlq.js +12 -29
  178. package/dist/connectors/github/ingest.d.ts +2 -6
  179. package/dist/connectors/github/ingest.js +4 -10
  180. package/dist/connectors/github/octokit-client.d.ts +4 -16
  181. package/dist/connectors/github/octokit-client.js +27 -24
  182. package/dist/connectors/github/ratelimit.d.ts +3 -14
  183. package/dist/connectors/github/ratelimit.js +3 -14
  184. package/dist/connectors/github/scope.d.ts +3 -5
  185. package/dist/connectors/github/scope.js +3 -5
  186. package/dist/connectors/github/signature.d.ts +4 -26
  187. package/dist/connectors/github/signature.js +4 -26
  188. package/dist/connectors/github/tenant-routing.d.ts +2 -24
  189. package/dist/connectors/github/tenant-routing.js +4 -26
  190. package/dist/connectors/github/transform.js +2 -16
  191. package/dist/connectors/github/types.d.ts +3 -15
  192. package/dist/connectors/github/types.js +2 -9
  193. package/dist/connectors/github/webhook.d.ts +2 -16
  194. package/dist/connectors/github/webhook.js +6 -22
  195. package/dist/connectors/slack/backfill.d.ts +4 -17
  196. package/dist/connectors/slack/backfill.js +4 -13
  197. package/dist/connectors/slack/dlq.d.ts +2 -19
  198. package/dist/connectors/slack/dlq.js +2 -19
  199. package/dist/connectors/slack/ingest.d.ts +2 -3
  200. package/dist/connectors/slack/ingest.js +2 -3
  201. package/dist/connectors/slack/scope.d.ts +2 -8
  202. package/dist/connectors/slack/scope.js +2 -8
  203. package/dist/connectors/slack/signature.d.ts +1 -6
  204. package/dist/connectors/slack/tenant-routing.d.ts +2 -19
  205. package/dist/connectors/slack/tenant-routing.js +2 -21
  206. package/dist/connectors/slack/transform.d.ts +2 -18
  207. package/dist/connectors/slack/transform.js +2 -18
  208. package/dist/connectors/slack/types.d.ts +3 -9
  209. package/dist/connectors/slack/types.js +2 -4
  210. package/dist/connectors/slack/web-client.js +33 -27
  211. package/dist/connectors/slack/webhook.d.ts +2 -19
  212. package/dist/connectors/slack/webhook.js +5 -26
  213. package/dist/connectors/slack/workspaces.d.ts +4 -24
  214. package/dist/connectors/slack/workspaces.js +4 -24
  215. package/dist/consolidate/conflicts.js +6 -14
  216. package/dist/consolidate/dag-summary.d.ts +8 -0
  217. package/dist/consolidate/dag-summary.js +41 -0
  218. package/dist/consolidate/dag.d.ts +5 -28
  219. package/dist/consolidate/dag.js +14 -75
  220. package/dist/consolidate/decay.js +7 -19
  221. package/dist/consolidate/dedupe.d.ts +6 -52
  222. package/dist/consolidate/dedupe.js +13 -71
  223. package/dist/consolidate/flush-units.d.ts +3 -4
  224. package/dist/consolidate/flush-units.js +3 -3
  225. package/dist/consolidate/half-life-migration.d.ts +3 -26
  226. package/dist/consolidate/half-life-migration.js +11 -28
  227. package/dist/consolidate/llm-passes.js +4 -21
  228. package/dist/consolidate/memory-value-weights.d.ts +2 -13
  229. package/dist/consolidate/memory-value-weights.js +2 -13
  230. package/dist/consolidate/memory-value.d.ts +11 -84
  231. package/dist/consolidate/memory-value.js +16 -104
  232. package/dist/consolidate/merge.js +10 -31
  233. package/dist/consolidate/merged-row.js +2 -1
  234. package/dist/consolidate/physics-pass.js +1 -3
  235. package/dist/consolidate/replay.d.ts +6 -38
  236. package/dist/consolidate/replay.js +14 -52
  237. package/dist/consolidate/run.js +1 -1
  238. package/dist/consolidate/sleep.d.ts +1 -8
  239. package/dist/consolidate/sleep.js +5 -17
  240. package/dist/consolidate/trace.d.ts +3 -18
  241. package/dist/consolidate/trace.js +3 -18
  242. package/dist/consolidate/traces.js +6 -22
  243. package/dist/core/ablation.d.ts +4 -91
  244. package/dist/core/ablation.js +4 -91
  245. package/dist/core/ambient.d.ts +1 -8
  246. package/dist/core/ambient.js +1 -8
  247. package/dist/core/capture-contract.d.ts +4 -2
  248. package/dist/core/capture-contract.js +4 -2
  249. package/dist/core/card.d.ts +4 -1
  250. package/dist/core/card.js +8 -0
  251. package/dist/core/compare.d.ts +11 -67
  252. package/dist/core/compare.js +9 -63
  253. package/dist/core/config.d.ts +10 -24
  254. package/dist/core/config.js +13 -14
  255. package/dist/core/handoff.d.ts +1 -7
  256. package/dist/core/handoff.js +1 -7
  257. package/dist/core/memory-quality.js +1 -1
  258. package/dist/core/memory.d.ts +41 -164
  259. package/dist/core/memory.js +51 -221
  260. package/dist/core/package-root.d.ts +3 -0
  261. package/dist/core/package-root.js +5 -0
  262. package/dist/core/physics-config.d.ts +1 -4
  263. package/dist/core/physics-config.js +3 -8
  264. package/dist/core/physics.d.ts +15 -61
  265. package/dist/core/physics.js +59 -122
  266. package/dist/core/project-identity.d.ts +17 -58
  267. package/dist/core/project-identity.js +17 -38
  268. package/dist/core/project-remote.js +13 -2
  269. package/dist/core/raw-append-only.d.ts +5 -0
  270. package/dist/core/raw-append-only.js +7 -0
  271. package/dist/core/salience.d.ts +1 -7
  272. package/dist/core/salience.js +1 -7
  273. package/dist/dashboard/dashboard-actions.js +2 -2
  274. package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
  275. package/dist/dashboard/dashboard-snapshot.js +11 -2
  276. package/dist/dashboard/dashboard-types.d.ts +2 -1
  277. package/dist/dashboard/dashboard.d.ts +1 -0
  278. package/dist/dashboard/dashboard.js +50 -4
  279. package/dist/db/busy.d.ts +1 -1
  280. package/dist/db/busy.js +17 -8
  281. package/dist/db/connect.d.ts +1 -0
  282. package/dist/db/connect.js +3 -3
  283. package/dist/db/migrate.js +3 -3
  284. package/dist/db/migrations/types.d.ts +2 -5
  285. package/dist/db/migrations/v14.js +2 -3
  286. package/dist/db/migrations/v15.js +2 -8
  287. package/dist/db/migrations/v16.js +2 -3
  288. package/dist/db/migrations/v17.js +2 -3
  289. package/dist/db/migrations/v19.js +2 -5
  290. package/dist/db/migrations/v20.js +2 -7
  291. package/dist/db/migrations/v22.js +4 -17
  292. package/dist/db/migrations/v23.js +3 -14
  293. package/dist/db/migrations/v24.js +2 -4
  294. package/dist/db/migrations/v25.js +3 -8
  295. package/dist/db/migrations/v26.js +2 -13
  296. package/dist/db/migrations/v27.js +3 -11
  297. package/dist/db/migrations/v28.js +2 -14
  298. package/dist/db/migrations/v29.js +4 -18
  299. package/dist/db/migrations/v30.js +4 -16
  300. package/dist/db/migrations/v31.js +2 -15
  301. package/dist/db/migrations/v32.js +4 -22
  302. package/dist/db/migrations/v33.js +2 -15
  303. package/dist/db/migrations/v34.js +2 -11
  304. package/dist/db/migrations/v35.js +2 -11
  305. package/dist/db/migrations/v36.js +2 -11
  306. package/dist/db/migrations/v37.js +8 -33
  307. package/dist/db/migrations/v38.js +5 -38
  308. package/dist/db/migrations/v39.js +9 -20
  309. package/dist/db/migrations/v40.js +2 -9
  310. package/dist/db/migrations/v41.js +2 -24
  311. package/dist/db/migrations/v43.js +1 -1
  312. package/dist/db/migrations/v44.js +2 -8
  313. package/dist/db/migrations/v45.js +2 -7
  314. package/dist/db/migrations/v47.js +2 -3
  315. package/dist/db/migrations/v51.js +1 -1
  316. package/dist/db/open.d.ts +2 -0
  317. package/dist/db/open.js +17 -1
  318. package/dist/db/physics-state.d.ts +6 -22
  319. package/dist/db/physics-state.js +25 -36
  320. package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
  321. package/dist/db/raw-archive-mirror-cleanup.js +2 -17
  322. package/dist/db/vector-store.d.ts +2 -0
  323. package/dist/db/vector-store.js +8 -1
  324. package/dist/doctor.js +74 -19
  325. package/dist/entry/session-text.js +2 -1
  326. package/dist/eval/eval-stats.d.ts +15 -53
  327. package/dist/eval/eval-stats.js +12 -42
  328. package/dist/eval/eval-suite.d.ts +2 -13
  329. package/dist/eval/eval-suite.js +74 -34
  330. package/dist/eval/eval.d.ts +6 -24
  331. package/dist/eval/eval.js +7 -34
  332. package/dist/eval/judgment.d.ts +0 -3
  333. package/dist/eval/judgment.js +19 -11
  334. package/dist/extensions/openclaw-plugin/index.js +1 -1
  335. package/dist/graph/extract.d.ts +5 -27
  336. package/dist/graph/extract.js +7 -33
  337. package/dist/graph/recall.d.ts +7 -20
  338. package/dist/graph/recall.js +14 -76
  339. package/dist/graph/stream.d.ts +7 -39
  340. package/dist/graph/stream.js +11 -34
  341. package/dist/graph/view.d.ts +9 -35
  342. package/dist/graph/view.js +11 -39
  343. package/dist/hooks/codex-wrapper.js +2 -2
  344. package/dist/hooks/copilot.js +2 -1
  345. package/dist/hooks/hook-blocks.d.ts +6 -2
  346. package/dist/hooks/hook-blocks.js +37 -124
  347. package/dist/hooks/json-hooks.d.ts +4 -36
  348. package/dist/hooks/json-hooks.js +18 -57
  349. package/dist/hooks/opencode.d.ts +0 -38
  350. package/dist/hooks/opencode.js +9 -76
  351. package/dist/hooks/shared.d.ts +8 -17
  352. package/dist/hooks/shared.js +29 -20
  353. package/dist/importers/core.d.ts +12 -37
  354. package/dist/importers/core.js +9 -27
  355. package/dist/importers/markdown-parse.d.ts +8 -22
  356. package/dist/importers/markdown-parse.js +8 -25
  357. package/dist/importers/markdown.js +3 -12
  358. package/dist/importers/sources.js +7 -35
  359. package/dist/importers/vault.d.ts +2 -8
  360. package/dist/importers/vault.js +25 -81
  361. package/dist/index.d.ts +6 -2
  362. package/dist/index.js +6 -2
  363. package/dist/learn/autolearn.d.ts +14 -41
  364. package/dist/learn/autolearn.js +14 -41
  365. package/dist/learn/extract.js +2 -4
  366. package/dist/learn/forward-claim-detector.d.ts +6 -30
  367. package/dist/learn/forward-claim-detector.js +14 -66
  368. package/dist/learn/invalidation.d.ts +6 -18
  369. package/dist/learn/invalidation.js +9 -26
  370. package/dist/mcp/admin-tools.js +3 -5
  371. package/dist/mcp/memory-tools.js +4 -9
  372. package/dist/mcp/protocol.d.ts +8 -26
  373. package/dist/mcp/protocol.js +3 -6
  374. package/dist/mcp/recall-tools.js +3 -3
  375. package/dist/mcp/request.d.ts +3 -11
  376. package/dist/mcp/request.js +10 -26
  377. package/dist/mcp/server.d.ts +3 -9
  378. package/dist/mcp/server.js +5 -16
  379. package/dist/mcp/session-state.d.ts +1 -1
  380. package/dist/mcp/session-state.js +5 -11
  381. package/dist/mcp/stdio.d.ts +2 -6
  382. package/dist/mcp/stdio.js +48 -12
  383. package/dist/mcp/tools.js +5 -3
  384. package/dist/objects/customer-notes.d.ts +7 -42
  385. package/dist/objects/customer-notes.js +7 -48
  386. package/dist/objects/decisions.d.ts +12 -50
  387. package/dist/objects/decisions.js +15 -53
  388. package/dist/objects/incidents.d.ts +7 -38
  389. package/dist/objects/incidents.js +7 -41
  390. package/dist/objects/policies.d.ts +11 -89
  391. package/dist/objects/policies.js +11 -98
  392. package/dist/objects/processes.d.ts +7 -52
  393. package/dist/objects/processes.js +7 -61
  394. package/dist/objects/project-briefs.d.ts +11 -55
  395. package/dist/objects/project-briefs.js +14 -75
  396. package/dist/objects/skills.d.ts +7 -42
  397. package/dist/objects/skills.js +8 -54
  398. package/dist/postinstall.js +6 -19
  399. package/dist/predictions/planning-fallacy.d.ts +11 -34
  400. package/dist/rerankers/clef.js +3 -31
  401. package/dist/rerankers/cross-encoder.js +4 -6
  402. package/dist/rerankers/jev.js +9 -6
  403. package/dist/rerankers/llm.d.ts +2 -11
  404. package/dist/rerankers/llm.js +14 -14
  405. package/dist/rerankers/outage-warning.d.ts +2 -1
  406. package/dist/rerankers/outage-warning.js +2 -1
  407. package/dist/rerankers/remote.d.ts +1 -0
  408. package/dist/rerankers/remote.js +2 -0
  409. package/dist/rerankers/types.d.ts +2 -14
  410. package/dist/search/boosts.d.ts +0 -2
  411. package/dist/search/boosts.js +2 -2
  412. package/dist/search/goal-boost.d.ts +23 -0
  413. package/dist/search/goal-boost.js +90 -0
  414. package/dist/search/hybrid.d.ts +2 -0
  415. package/dist/search/multihop.js +2 -3
  416. package/dist/search/path-context.d.ts +5 -18
  417. package/dist/search/path-context.js +5 -18
  418. package/dist/search/physics-search.js +11 -8
  419. package/dist/search/rrf.d.ts +7 -35
  420. package/dist/search/rrf.js +5 -30
  421. package/dist/search/vector.d.ts +7 -0
  422. package/dist/search/vector.js +35 -5
  423. package/dist/server/auth.d.ts +9 -28
  424. package/dist/server/auth.js +32 -25
  425. package/dist/server/boot.d.ts +2 -21
  426. package/dist/server/boot.js +63 -96
  427. package/dist/server/client-ip.d.ts +3 -19
  428. package/dist/server/client-ip.js +5 -28
  429. package/dist/server/defaults.d.ts +3 -0
  430. package/dist/server/defaults.js +4 -0
  431. package/dist/server/key-check-bounds.d.ts +2 -1
  432. package/dist/server/lifecycle.d.ts +5 -4
  433. package/dist/server/lifecycle.js +19 -4
  434. package/dist/server/mcp-http.js +10 -44
  435. package/dist/server/rate-limit.d.ts +5 -18
  436. package/dist/server/rate-limit.js +4 -13
  437. package/dist/server/request.d.ts +4 -8
  438. package/dist/server/request.js +9 -17
  439. package/dist/server/route-table.js +42 -49
  440. package/dist/server/routes/admin.js +22 -28
  441. package/dist/server/routes/customer-notes.js +7 -12
  442. package/dist/server/routes/decisions.js +10 -17
  443. package/dist/server/routes/incidents.js +12 -20
  444. package/dist/server/routes/memories.js +12 -32
  445. package/dist/server/routes/object-routes.d.ts +0 -5
  446. package/dist/server/routes/object-routes.js +7 -15
  447. package/dist/server/routes/policies.js +10 -18
  448. package/dist/server/routes/predictions.js +13 -25
  449. package/dist/server/routes/processes.js +16 -26
  450. package/dist/server/routes/project-briefs.js +9 -16
  451. package/dist/server/routes/recall.js +10 -35
  452. package/dist/server/routes/skills.js +8 -18
  453. package/dist/server/server-detect.d.ts +9 -53
  454. package/dist/server/server-detect.js +24 -90
  455. package/dist/server/sleep-offload.js +4 -1
  456. package/dist/server/types.d.ts +12 -10
  457. package/dist/server/validation.d.ts +3 -1
  458. package/dist/server/validation.js +10 -23
  459. package/dist/server.d.ts +2 -2
  460. package/dist/server.js +3 -2
  461. package/dist/sharing/global-store.d.ts +19 -0
  462. package/dist/sharing/global-store.js +75 -0
  463. package/dist/sharing/global-sync.d.ts +6 -0
  464. package/dist/sharing/global-sync.js +80 -0
  465. package/dist/sharing/project-merge.d.ts +4 -5
  466. package/dist/sharing/project-merge.js +9 -7
  467. package/dist/sharing/scope.d.ts +4 -11
  468. package/dist/sharing/scope.js +4 -11
  469. package/dist/sharing/search-both.d.ts +60 -0
  470. package/dist/sharing/search-both.js +138 -0
  471. package/dist/sharing/share.d.ts +38 -0
  472. package/dist/sharing/share.js +226 -0
  473. package/dist/store/ambient.js +4 -9
  474. package/dist/store/audit-event.d.ts +4 -12
  475. package/dist/store/audit-event.js +4 -12
  476. package/dist/store/audit.d.ts +2 -5
  477. package/dist/store/audit.js +4 -12
  478. package/dist/store/auth.d.ts +6 -6
  479. package/dist/store/auth.js +10 -9
  480. package/dist/store/candidates.d.ts +20 -3
  481. package/dist/store/candidates.js +77 -48
  482. package/dist/store/card-detail.d.ts +2 -1
  483. package/dist/store/card-detail.js +2 -1
  484. package/dist/store/cards.d.ts +14 -9
  485. package/dist/store/cards.js +72 -126
  486. package/dist/store/conflicts.d.ts +4 -21
  487. package/dist/store/conflicts.js +71 -150
  488. package/dist/store/connectors/github.d.ts +10 -10
  489. package/dist/store/connectors/github.js +10 -10
  490. package/dist/store/dashboard-reads.js +4 -8
  491. package/dist/store/delete-and-batch.d.ts +11 -31
  492. package/dist/store/delete-and-batch.js +48 -64
  493. package/dist/store/delivery-recorder.d.ts +8 -4
  494. package/dist/store/delivery-recorder.js +25 -15
  495. package/dist/store/diagnostics.js +6 -13
  496. package/dist/store/dormant.d.ts +7 -29
  497. package/dist/store/dormant.js +15 -56
  498. package/dist/store/embeddings/index.d.ts +11 -80
  499. package/dist/store/embeddings/index.js +71 -207
  500. package/dist/store/embeddings/local.js +15 -32
  501. package/dist/store/embeddings/provider.d.ts +16 -53
  502. package/dist/store/embeddings/provider.js +41 -69
  503. package/dist/store/entry-reads.d.ts +21 -57
  504. package/dist/store/entry-reads.js +65 -126
  505. package/dist/store/entry-row.d.ts +6 -35
  506. package/dist/store/entry-row.js +9 -37
  507. package/dist/store/entry-writes.d.ts +10 -16
  508. package/dist/store/entry-writes.js +17 -35
  509. package/dist/store/goals.d.ts +3 -40
  510. package/dist/store/goals.js +21 -160
  511. package/dist/store/graph-queue.d.ts +6 -22
  512. package/dist/store/graph-queue.js +14 -45
  513. package/dist/store/graph-reads.d.ts +11 -35
  514. package/dist/store/graph-reads.js +20 -58
  515. package/dist/store/graph-rows.d.ts +3 -6
  516. package/dist/store/graph-rows.js +6 -9
  517. package/dist/store/graph-view-rows.d.ts +2 -1
  518. package/dist/store/graph-view-rows.js +2 -1
  519. package/dist/store/graph-writes.d.ts +6 -31
  520. package/dist/store/graph-writes.js +13 -37
  521. package/dist/store/half-life.d.ts +2 -1
  522. package/dist/store/half-life.js +14 -16
  523. package/dist/store/handoffs.d.ts +5 -11
  524. package/dist/store/handoffs.js +16 -34
  525. package/dist/store/index-and-stats.d.ts +6 -19
  526. package/dist/store/index-and-stats.js +34 -82
  527. package/dist/store/markdown.d.ts +2 -6
  528. package/dist/store/markdown.js +21 -20
  529. package/dist/store/mirrors.d.ts +2 -6
  530. package/dist/store/mirrors.js +14 -23
  531. package/dist/store/open.js +6 -13
  532. package/dist/store/planning-fallacy-evidence.d.ts +2 -30
  533. package/dist/store/planning-fallacy-evidence.js +8 -37
  534. package/dist/store/port.d.ts +82 -79
  535. package/dist/store/predictions.d.ts +11 -51
  536. package/dist/store/predictions.js +38 -119
  537. package/dist/{cli → store}/quality-repair.js +15 -31
  538. package/dist/store/raw-archive.d.ts +4 -16
  539. package/dist/store/raw-archive.js +14 -29
  540. package/dist/store/recall-scope.d.ts +19 -79
  541. package/dist/store/recall-scope.js +21 -82
  542. package/dist/store/recall-trace.d.ts +10 -77
  543. package/dist/store/recall-trace.js +19 -95
  544. package/dist/store/rejected-values.js +7 -19
  545. package/dist/store/rejection.d.ts +12 -58
  546. package/dist/store/rejection.js +13 -65
  547. package/dist/store/report-reads.d.ts +6 -0
  548. package/dist/store/report-reads.js +29 -0
  549. package/dist/store/rows.d.ts +9 -19
  550. package/dist/store/rows.js +36 -34
  551. package/dist/store/rule-sql.d.ts +5 -0
  552. package/dist/store/rule-sql.js +37 -0
  553. package/dist/store/search-rows.d.ts +7 -38
  554. package/dist/store/search-rows.js +14 -50
  555. package/dist/store/sessions.d.ts +10 -47
  556. package/dist/store/sessions.js +17 -73
  557. package/dist/store/sqlite/connector-events-group.js +2 -2
  558. package/dist/store/sqlite/entry-writes-group.js +2 -2
  559. package/dist/store/sqlite/error-codec.js +4 -2
  560. package/dist/store/sqlite/executor.d.ts +2 -1
  561. package/dist/store/sqlite/executor.js +2 -1
  562. package/dist/store/sqlite/local.d.ts +3 -3
  563. package/dist/store/sqlite/local.js +1 -0
  564. package/dist/store/sqlite/object-rows.js +6 -3
  565. package/dist/store/sqlite/objects-group.js +4 -2
  566. package/dist/store/sqlite/quarantine-group.js +2 -2
  567. package/dist/store/sqlite/store.d.ts +1 -4
  568. package/dist/store/sqlite/store.js +2 -3
  569. package/dist/store/sqlite/vector-reads-group.js +2 -2
  570. package/dist/store/sqlite/worker-jobs.js +1 -1
  571. package/dist/store/sqlite/worker-ops.d.ts +13 -2
  572. package/dist/store/sqlite/worker-ops.js +13 -2
  573. package/dist/store/sqlite/worker-store.js +5 -2
  574. package/dist/store/summaries.d.ts +10 -62
  575. package/dist/store/summaries.js +34 -146
  576. package/dist/store/summary-dirty.js +1 -1
  577. package/dist/store/tenant-lookup.d.ts +6 -1
  578. package/dist/store/tenant-lookup.js +7 -0
  579. package/dist/store/tenant.d.ts +2 -16
  580. package/dist/store/tenant.js +4 -19
  581. package/dist/store/token-ledger.d.ts +13 -43
  582. package/dist/store/token-ledger.js +19 -50
  583. package/dist/store/usage-reports.js +5 -13
  584. package/dist/store/vector-index.d.ts +46 -0
  585. package/dist/store/vector-index.js +170 -0
  586. package/dist/store/working-memory.d.ts +6 -25
  587. package/dist/store/working-memory.js +18 -52
  588. package/dist/store/yaml.d.ts +1 -5
  589. package/dist/store/yaml.js +2 -6
  590. package/dist/support-bundle.js +7 -5
  591. package/dist/trust/reject-flow.js +1 -3
  592. package/dist/util/anthropic-messages.js +14 -2
  593. package/dist/util/atomic-write.d.ts +2 -1
  594. package/dist/util/atomic-write.js +35 -4
  595. package/dist/util/capped-json.d.ts +6 -0
  596. package/dist/util/capped-json.js +46 -0
  597. package/dist/util/crash-handlers.d.ts +8 -1
  598. package/dist/util/crash-handlers.js +52 -10
  599. package/dist/util/env.d.ts +13 -6
  600. package/dist/util/env.js +14 -7
  601. package/dist/util/home-path.d.ts +2 -1
  602. package/dist/util/home-path.js +4 -2
  603. package/dist/util/http-retry.d.ts +3 -1
  604. package/dist/util/http-retry.js +26 -5
  605. package/dist/util/log.d.ts +3 -2
  606. package/dist/util/log.js +25 -9
  607. package/dist/util/request-scope.d.ts +2 -1
  608. package/dist/util/request-scope.js +2 -1
  609. package/dist/util/secret-detect.d.ts +5 -30
  610. package/dist/util/secret-detect.js +13 -39
  611. package/dist/util/stored-json.d.ts +1 -1
  612. package/dist/util/stored-json.js +1 -1
  613. package/dist/util/token-text.d.ts +1 -4
  614. package/dist/util/token-text.js +1 -4
  615. package/dist/util/transcript-tail.d.ts +2 -0
  616. package/dist/util/transcript-tail.js +24 -23
  617. package/dist/util/version.d.ts +5 -20
  618. package/dist/util/version.js +5 -20
  619. package/extensions/openclaw-plugin/index.ts +1 -1
  620. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  621. package/extensions/openclaw-plugin/package.json +1 -1
  622. package/openclaw.plugin.json +1 -1
  623. package/package.json +1 -1
  624. package/dist/connectors/github/cli-impl.d.ts +0 -25
  625. package/dist/sharing/shared.d.ts +0 -187
  626. package/dist/sharing/shared.js +0 -563
  627. package/dist/store/vector-writes.d.ts +0 -13
  628. package/dist/store/vector-writes.js +0 -89
  629. /package/dist/{cli → store}/quality-repair.d.ts +0 -0
package/dist/cli.js CHANGED
@@ -1,54 +1,22 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * Hippo CLI - biologically-inspired memory system for AI agents.
4
- *
5
- * Commands:
6
- * hippo init [--global]
7
- * hippo remember <text> [--tag <t>] [--error] [--pin] [--global]
8
- * hippo recall <query> [--budget <n>] [--json] [--why]
9
- * hippo sleep [--dry-run]
10
- * hippo status
11
- * hippo outcome --good | --bad [--id <id>]
12
- * hippo conflicts [--status <status>] [--json]
13
- * hippo snapshot <save|show|clear>
14
- * hippo session <log|show|latest|resume|complete>
15
- * hippo handoff <create|latest|show>
16
- * hippo card <create|show|list|claim|heartbeat|block|review|complete|reclaim|comment>
17
- * hippo current <show>
18
- * hippo forget <id> [--archive --reason "<why>"]
19
- * hippo reject <id>|--value "<text>" --reason "<why>"
20
- * hippo rejections
21
- * hippo unreject <digest-prefix>
22
- * hippo dormant [<query>] [--limit <n>] [--json] | restore <id> | forget <id>
23
- * hippo projects [--json] | merge <from> <into> [--apply] | repair [--apply]
24
- * hippo tokens [--days <n>] [--json] [--global]
25
- * hippo doctor [--json]
26
- * hippo inspect <id>
27
- * hippo embed [--status]
28
- * hippo watch "<command>"
29
- * hippo learn --git [--days <n>] [--repos <paths>]
30
- * hippo daily-runner
31
- * hippo promote <id>
32
- * hippo sync
33
- * hippo decide "<decision>" [--context "<why>"] [--supersedes <id>]
34
- * hippo wm <push|read|clear|flush>
35
- */
2
+ // Hippo CLI entry point: parses argv and dispatches each verb through the table below.
3
+ // `hippo help` prints the verb list from that table, so no list is kept here.
36
4
  import { envSkipAutoIntegrations } from './util/env.js';
37
5
  import * as path from 'path';
38
6
  import * as fs from 'fs';
39
7
  import { fileURLToPath } from 'node:url';
40
8
  import { repairCodexWrapperIfInstalled } from './hooks/codex-wrapper.js';
41
9
  import { getHippoRoot } from './store/open.js';
42
- import { cmdGithub, printGithubBackfillUsage } from './connectors/github/cli-impl.js';
10
+ import { resolveTenantId } from './store/tenant.js';
11
+ import { handleGitHub, printGitHubBackfillUsage } from './cli/github.js';
43
12
  import { printError } from './cli/output.js';
44
13
  import { errorFields, errorMessage, isLevelEnabled, log } from './util/log.js';
45
14
  import { isStoreBusy, STORE_BUSY_MESSAGE } from './db/busy.js';
46
- import { boolFlag, flagIsTrue } from './cli/flag-values.js';
15
+ import { boolFlag, flagIsTrue, isBooleanFlag, isStringFlag } from './cli/flag-values.js';
47
16
  import { VERB_USAGE, USAGE_HEADER, USAGE_EXAMPLES, printAuditPruneUsage, printSlackBackfillUsage, printSlackWorkspacesUsage } from './cli/usage.js';
48
17
  import { VERB_FLAGS, flagKind, isKnownFlag, undeclaredFlags } from './cli/flags.js';
49
- // ---------------------------------------------------------------------------
18
+ import { CliExit } from './cli/exit.js';
50
19
  // Helpers
51
- // ---------------------------------------------------------------------------
52
20
  // Commands that delete or hide memories: an unknown flag here stops the run instead of being ignored.
53
21
  const DESTRUCTIVE_COMMANDS = new Set([
54
22
  'audit', 'dedup', 'forget', 'invalidate', 'projects', 'reject', 'resolve', 'sleep', 'supersede',
@@ -154,11 +122,8 @@ export function shouldAutoRepairCodexWrapper(currentCommand, flags) {
154
122
  return false;
155
123
  return true;
156
124
  }
157
- // Repair-only: keeps the wrapper healthy for users who opted in via `hippo
158
- // hook install codex` (a Codex update can restore the real binary over our
159
- // shim). Never first-installs — silently swapping the codex binary on routine
160
- // commands is a consent violation and reads as binary hijacking to
161
- // supply-chain scanners.
125
+ // Repair-only: never first-installs, because silently swapping the codex binary on routine commands
126
+ // is a consent violation and reads as binary hijacking to supply-chain scanners.
162
127
  function maybeRepairCodexWrapper(currentCommand, flags) {
163
128
  if (!shouldAutoRepairCodexWrapper(currentCommand, flags))
164
129
  return;
@@ -169,417 +134,274 @@ function maybeRepairCodexWrapper(currentCommand, flags) {
169
134
  log.debug(`codex wrapper not repaired: ${errorMessage(err)}`);
170
135
  }
171
136
  }
172
- /** Every verb main() dispatches, keyed by name, with its handler, aliases and help blocks. */
173
- export const COMMANDS = {
137
+ // A verb's entry is handle<Verb>(ctx); cmd<Name> is a typed function below an entry, never called from this table.
138
+ /** Every verb main() dispatches, keyed by name; a verb without a VERB_FLAGS entry, or the reverse, fails to compile. */
139
+ export const VERB_HANDLERS = {
174
140
  init: {
175
- run: async ({ hippoRoot, flags }) => { (await import('./cli/init.js')).cmdInit(hippoRoot, flags); },
176
- usage: VERB_USAGE.init,
177
- flags: VERB_FLAGS.init,
141
+ run: async (c) => { (await import('./cli/init.js')).handleInit(c); },
178
142
  },
179
143
  remember: {
180
144
  run: async (c) => { await (await import('./cli/remember.js')).handleRemember(c); },
181
- usage: VERB_USAGE.remember,
182
- flags: VERB_FLAGS.remember,
183
145
  },
184
146
  recall: {
185
147
  run: async (c) => { await (await import('./cli/recall.js')).handleRecall(c); },
186
148
  scoped: true,
187
- usage: VERB_USAGE.recall,
188
- flags: VERB_FLAGS.recall,
189
149
  },
190
150
  drill: {
191
151
  run: async (c) => { await (await import('./cli/dag.js')).handleDrill(c); },
192
152
  scoped: true,
193
- usage: VERB_USAGE.drill,
194
- flags: VERB_FLAGS.drill,
195
153
  },
196
154
  assemble: {
197
155
  run: async (c) => { await (await import('./cli/dag.js')).handleAssemble(c); },
198
156
  scoped: true,
199
- usage: VERB_USAGE.assemble,
200
- flags: VERB_FLAGS.assemble,
201
157
  },
202
158
  supersede: {
203
159
  run: async (c) => { await (await import('./cli/remember.js')).handleSupersede(c); },
204
- usage: VERB_USAGE.supersede,
205
- flags: VERB_FLAGS.supersede,
206
160
  },
207
161
  explain: {
208
162
  run: async (c) => { await (await import('./cli/explain.js')).handleExplain(c); },
209
163
  scoped: true,
210
- usage: VERB_USAGE.explain,
211
- flags: VERB_FLAGS.explain,
212
164
  },
213
165
  eval: {
214
166
  run: async (c) => { await (await import('./cli/eval.js')).handleEval(c); },
215
- usage: VERB_USAGE.eval,
216
- flags: VERB_FLAGS.eval,
217
167
  },
218
168
  trace: {
219
169
  run: async (c) => { await (await import('./cli/remember.js')).handleTrace(c); },
220
- usage: VERB_USAGE.trace,
221
- flags: VERB_FLAGS.trace,
222
170
  },
223
171
  refine: {
224
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/maintenance.js')).cmdRefine(hippoRoot, flags); },
225
- usage: VERB_USAGE.refine,
226
- flags: VERB_FLAGS.refine,
172
+ run: async (c) => { await (await import('./cli/maintenance.js')).handleRefine(c); },
227
173
  },
228
174
  sleep: {
229
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/sleep.js')).cmdSleep(hippoRoot, flags); },
175
+ run: async (c) => { await (await import('./cli/sleep.js')).handleSleep(c); },
230
176
  scoped: true,
231
- usage: VERB_USAGE.sleep,
232
- flags: VERB_FLAGS.sleep,
233
177
  },
234
178
  'last-sleep': {
235
- run: async ({ hippoRoot, flags }) => { (await import('./cli/last-sleep.js')).cmdLastSleep(hippoRoot, flags); },
236
- usage: VERB_USAGE['last-sleep'],
237
- flags: VERB_FLAGS['last-sleep'],
179
+ run: async (c) => { (await import('./cli/last-sleep.js')).handleLastSleep(c); },
238
180
  },
239
181
  'session-end': {
240
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdSessionEnd(hippoRoot, flags); },
241
- usage: VERB_USAGE['session-end'],
242
- flags: VERB_FLAGS['session-end'],
182
+ run: async (c) => { await (await import('./cli/session-hooks.js')).handleSessionEnd(c); },
243
183
  },
244
184
  '__session-end-worker': {
245
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdSessionEndWorker(hippoRoot, flags); },
246
- usage: [],
247
- flags: VERB_FLAGS['__session-end-worker'],
185
+ run: async (c) => { await (await import('./cli/session-hooks.js')).handleSessionEndWorker(c); },
248
186
  },
249
187
  'pre-compact': {
250
188
  run: async (c) => { await (await import('./cli/session-hooks.js')).handlePreCompact(c); },
251
- usage: VERB_USAGE['pre-compact'],
252
- flags: VERB_FLAGS['pre-compact'],
253
189
  },
254
190
  'post-compact': {
255
191
  run: async (c) => { await (await import('./cli/session-hooks.js')).handlePostCompact(c); },
256
- usage: VERB_USAGE['post-compact'],
257
- flags: VERB_FLAGS['post-compact'],
258
192
  },
259
193
  'capture-error': {
260
194
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCaptureError(c); },
261
- usage: VERB_USAGE['capture-error'],
262
- flags: VERB_FLAGS['capture-error'],
263
195
  },
264
196
  'compact-resume': {
265
197
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCompactResume(c); },
266
- usage: VERB_USAGE['compact-resume'],
267
- flags: VERB_FLAGS['compact-resume'],
268
198
  },
269
199
  'codex-run': {
270
- run: async ({ hippoRoot, args }) => { (await import('./cli/session-hooks.js')).cmdCodexRun(hippoRoot, args); },
271
- usage: VERB_USAGE['codex-run'],
272
- flags: VERB_FLAGS['codex-run'],
200
+ run: async (c) => { (await import('./cli/session-hooks.js')).handleCodexRun(c); },
273
201
  },
274
202
  '__codex-session-end-worker': {
275
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdCodexSessionEndWorker(hippoRoot, flags); },
276
- usage: [],
277
- flags: VERB_FLAGS['__codex-session-end-worker'],
203
+ run: async (c) => { await (await import('./cli/session-hooks.js')).handleCodexSessionEndWorker(c); },
278
204
  },
279
205
  dedup: {
280
- run: async ({ hippoRoot, flags }) => { (await import('./cli/maintenance.js')).cmdDedup(hippoRoot, flags); },
281
- usage: VERB_USAGE.dedup,
282
- flags: VERB_FLAGS.dedup,
206
+ run: async (c) => { (await import('./cli/maintenance.js')).handleDedup(c); },
283
207
  },
284
208
  dag: {
285
- run: async ({ hippoRoot, flags }) => { (await import('./cli/dag.js')).cmdDag(hippoRoot, flags); },
286
- usage: VERB_USAGE.dag,
287
- flags: VERB_FLAGS.dag,
209
+ run: async (c) => { (await import('./cli/dag.js')).handleDag(c); },
288
210
  },
289
211
  auth: {
290
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/auth.js')).cmdAuth(hippoRoot, args, flags); },
212
+ run: async (c) => { (await import('./cli/auth.js')).handleAuth(c); },
291
213
  scoped: true,
292
- usage: VERB_USAGE.auth,
293
- flags: VERB_FLAGS.auth,
294
214
  },
295
215
  goal: {
296
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/goals.js')).cmdGoal(hippoRoot, args, flags); },
216
+ run: async (c) => { (await import('./cli/goals.js')).handleGoal(c); },
297
217
  scoped: true,
298
- usage: VERB_USAGE.goal,
299
- flags: VERB_FLAGS.goal,
300
218
  },
301
219
  slack: {
302
- run: async ({ hippoRoot, args, flags }) => { await (await import('./cli/slack.js')).cmdSlack(hippoRoot, args, flags); },
303
- usage: VERB_USAGE.slack,
304
- flags: VERB_FLAGS.slack,
220
+ run: async (c) => { await (await import('./cli/slack.js')).handleSlack(c); },
305
221
  },
306
222
  github: {
307
- run: async ({ hippoRoot, args, flags }) => { await cmdGithub(hippoRoot, args, flags); },
308
- usage: VERB_USAGE.github,
309
- flags: VERB_FLAGS.github,
223
+ run: async (c) => { await handleGitHub(c); },
310
224
  },
311
225
  audit: {
312
226
  run: async (c) => { await (await import('./cli/audit.js')).handleAudit(c); },
313
227
  scoped: true,
314
- usage: VERB_USAGE.audit,
315
- flags: VERB_FLAGS.audit,
316
228
  },
317
229
  'correction-latency': {
318
230
  run: async (c) => { await (await import('./cli/status.js')).handleCorrectionLatency(c); },
319
- usage: VERB_USAGE['correction-latency'],
320
- flags: VERB_FLAGS['correction-latency'],
321
231
  },
322
232
  provenance: {
323
233
  run: async (c) => { await (await import('./cli/status.js')).handleProvenance(c); },
324
- usage: VERB_USAGE.provenance,
325
- flags: VERB_FLAGS.provenance,
326
234
  },
327
235
  status: {
328
- run: async ({ hippoRoot }) => { (await import('./cli/status.js')).cmdStatus(hippoRoot); },
329
- usage: VERB_USAGE.status,
330
- flags: VERB_FLAGS.status,
236
+ run: async (c) => { (await import('./cli/status.js')).handleStatus(c); },
331
237
  },
332
238
  outcome: {
333
- run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdOutcome(hippoRoot, flags); },
239
+ run: async (c) => { (await import('./cli/curate.js')).handleOutcome(c); },
334
240
  scoped: true,
335
- usage: VERB_USAGE.outcome,
336
- flags: VERB_FLAGS.outcome,
337
241
  },
338
242
  conflicts: {
339
- run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdConflicts(hippoRoot, flags); },
340
- usage: VERB_USAGE.conflicts,
341
- flags: VERB_FLAGS.conflicts,
243
+ run: async (c) => { (await import('./cli/curate.js')).handleConflicts(c); },
342
244
  },
343
245
  resolve: {
344
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdResolve(hippoRoot, args, flags); },
345
- usage: VERB_USAGE.resolve,
346
- flags: VERB_FLAGS.resolve,
246
+ run: async (c) => { await (await import('./cli/curate.js')).handleResolve(c); },
347
247
  },
348
248
  reject: {
349
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdReject(hippoRoot, args, flags); },
350
- usage: VERB_USAGE.reject,
351
- flags: VERB_FLAGS.reject,
249
+ run: async (c) => { (await import('./cli/curate.js')).handleReject(c); },
352
250
  },
353
251
  rejections: {
354
- run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdRejections(hippoRoot, flags); },
355
- usage: VERB_USAGE.rejections,
356
- flags: VERB_FLAGS.rejections,
252
+ run: async (c) => { (await import('./cli/curate.js')).handleRejections(c); },
357
253
  },
358
254
  unreject: {
359
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdUnreject(hippoRoot, args, flags); },
360
- usage: VERB_USAGE.unreject,
361
- flags: VERB_FLAGS.unreject,
255
+ run: async (c) => { (await import('./cli/curate.js')).handleUnreject(c); },
362
256
  },
363
257
  dormant: {
364
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdDormant(hippoRoot, args, flags); },
258
+ run: async (c) => { (await import('./cli/curate.js')).handleDormant(c); },
365
259
  scoped: true,
366
- usage: VERB_USAGE.dormant,
367
- flags: VERB_FLAGS.dormant,
368
260
  },
369
261
  projects: {
370
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/projects.js')).cmdProjects(hippoRoot, args, flags); },
371
- usage: VERB_USAGE.projects,
372
- flags: VERB_FLAGS.projects,
262
+ run: async (c) => { (await import('./cli/projects.js')).handleProjects(c); },
373
263
  },
374
264
  quarantine: {
375
- run: async ({ hippoRoot, args, flags }) => { await (await import('./cli/curate.js')).cmdQuarantine(hippoRoot, args, flags); },
265
+ run: async (c) => { await (await import('./cli/curate.js')).handleQuarantine(c); },
376
266
  scoped: true,
377
- usage: VERB_USAGE.quarantine,
378
- flags: VERB_FLAGS.quarantine,
379
267
  },
380
268
  tokens: {
381
- run: async ({ hippoRoot, flags }) => { (await import('./cli/status.js')).cmdTokens(hippoRoot, flags); },
269
+ run: async (c) => { (await import('./cli/status.js')).handleTokens(c); },
382
270
  scoped: true,
383
- usage: VERB_USAGE.tokens,
384
- flags: VERB_FLAGS.tokens,
385
271
  },
386
272
  failures: {
387
- run: async ({ hippoRoot, flags }) => { (await import('./cli/status.js')).cmdFailures(hippoRoot, flags); },
273
+ run: async (c) => { (await import('./cli/status.js')).handleFailures(c); },
388
274
  scoped: true,
389
- usage: VERB_USAGE.failures,
390
- flags: VERB_FLAGS.failures,
391
275
  },
392
276
  doctor: {
393
277
  run: async (c) => { await (await import('./cli/status.js')).handleDoctor(c); },
394
- usage: VERB_USAGE.doctor,
395
- flags: VERB_FLAGS.doctor,
396
278
  },
397
279
  'support-bundle': {
398
280
  run: async (c) => { await (await import('./cli/status.js')).handleSupportBundle(c); },
399
- usage: VERB_USAGE['support-bundle'],
400
- flags: VERB_FLAGS['support-bundle'],
401
281
  },
402
282
  snapshot: {
403
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdSnapshot(hippoRoot, args, flags); },
404
- usage: VERB_USAGE.snapshot,
405
- flags: VERB_FLAGS.snapshot,
283
+ run: async (c) => { (await import('./cli/continuity.js')).handleSnapshot(c); },
406
284
  },
407
285
  session: {
408
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdSession(hippoRoot, args, flags); },
409
- usage: VERB_USAGE.session,
410
- flags: VERB_FLAGS.session,
286
+ run: async (c) => { (await import('./cli/continuity.js')).handleSession(c); },
411
287
  },
412
288
  handoff: {
413
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdHandoff(hippoRoot, args, flags); },
414
- usage: VERB_USAGE.handoff,
415
- flags: VERB_FLAGS.handoff,
289
+ run: async (c) => { (await import('./cli/continuity.js')).handleHandoff(c); },
416
290
  },
417
291
  card: {
418
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/card.js')).cmdCard(hippoRoot, args, flags); },
419
- usage: VERB_USAGE.card,
420
- flags: VERB_FLAGS.card,
292
+ run: async (c) => { (await import('./cli/card.js')).handleCard(c); },
421
293
  },
422
294
  predict: {
423
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdPredict(hippoRoot, args, flags); },
424
- usage: VERB_USAGE.predict,
425
- flags: VERB_FLAGS.predict,
295
+ run: async (c) => { (await import('./cli/decisions.js')).handlePredict(c); },
426
296
  },
427
297
  current: {
428
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdCurrent(hippoRoot, args, flags); },
429
- usage: VERB_USAGE.current,
430
- flags: VERB_FLAGS.current,
298
+ run: async (c) => { (await import('./cli/continuity.js')).handleCurrent(c); },
431
299
  },
432
300
  forget: {
433
301
  run: async (c) => { await (await import('./cli/curate.js')).handleForget(c); },
434
302
  scoped: true,
435
- usage: VERB_USAGE.forget,
436
- flags: VERB_FLAGS.forget,
437
303
  },
438
304
  inspect: {
439
305
  run: async (c) => { await (await import('./cli/status.js')).handleInspect(c); },
440
- usage: VERB_USAGE.inspect,
441
- flags: VERB_FLAGS.inspect,
442
306
  },
443
307
  context: {
444
308
  run: async (c) => { await (await import('./cli/context.js')).handleContext(c); },
445
- usage: VERB_USAGE.context,
446
- flags: VERB_FLAGS.context,
447
309
  },
448
310
  hook: {
449
- run: async ({ args }) => { (await import('./cli/setup.js')).cmdHook(args); },
450
- usage: VERB_USAGE.hook,
451
- flags: VERB_FLAGS.hook,
311
+ run: async (c) => { (await import('./cli/setup.js')).handleHook(c); },
452
312
  },
453
313
  setup: {
454
- run: async ({ flags }) => { (await import('./cli/setup.js')).cmdSetup(flags); },
455
- usage: VERB_USAGE.setup,
456
- flags: VERB_FLAGS.setup,
314
+ run: async (c) => { (await import('./cli/setup.js')).handleSetup(c); },
457
315
  },
458
316
  'daily-runner': {
459
- run: async () => { (await import('./cli/setup.js')).cmdDailyRunner(); },
460
- usage: VERB_USAGE['daily-runner'],
461
- flags: VERB_FLAGS['daily-runner'],
317
+ run: async (c) => { (await import('./cli/setup.js')).handleDailyRunner(c); },
462
318
  },
463
319
  embed: {
464
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/maintenance.js')).cmdEmbed(hippoRoot, flags); },
465
- usage: VERB_USAGE.embed,
466
- flags: VERB_FLAGS.embed,
320
+ run: async (c) => { await (await import('./cli/maintenance.js')).handleEmbed(c); },
467
321
  },
468
322
  watch: {
469
323
  run: async (c) => { await (await import('./cli/transfer.js')).handleWatch(c); },
470
- usage: VERB_USAGE.watch,
471
- flags: VERB_FLAGS.watch,
472
324
  },
473
325
  learn: {
474
- run: async ({ hippoRoot, flags }) => { (await import('./cli/transfer.js')).cmdLearn(hippoRoot, flags); },
326
+ run: async (c) => { (await import('./cli/transfer.js')).handleLearn(c); },
475
327
  scoped: true,
476
- usage: VERB_USAGE.learn,
477
- flags: VERB_FLAGS.learn,
478
328
  },
479
329
  promote: {
480
330
  run: async (c) => { await (await import('./cli/transfer.js')).handlePromote(c); },
481
331
  scoped: true,
482
- usage: VERB_USAGE.promote,
483
- flags: VERB_FLAGS.promote,
484
332
  },
485
333
  sync: {
486
- run: async ({ hippoRoot, flags }) => { (await import('./cli/transfer.js')).cmdSync(hippoRoot, flags); },
487
- usage: VERB_USAGE.sync,
488
- flags: VERB_FLAGS.sync,
334
+ run: async (c) => { (await import('./cli/transfer.js')).handleSync(c); },
489
335
  },
490
336
  share: {
491
337
  run: async (c) => { await (await import('./cli/transfer.js')).handleShare(c); },
492
- usage: VERB_USAGE.share,
493
- flags: VERB_FLAGS.share,
494
338
  },
495
339
  peers: {
496
340
  run: async (c) => { await (await import('./cli/transfer.js')).handlePeers(c); },
497
- usage: VERB_USAGE.peers,
498
- flags: VERB_FLAGS.peers,
499
341
  },
500
342
  import: {
501
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/transfer.js')).cmdImport(hippoRoot, args, flags); },
502
- usage: VERB_USAGE.import,
503
- flags: VERB_FLAGS.import,
343
+ run: async (c) => { (await import('./cli/transfer.js')).handleImport(c); },
504
344
  },
505
345
  export: {
506
346
  run: async (c) => { await (await import('./cli/transfer.js')).handleExport(c); },
507
- usage: VERB_USAGE.export,
508
- flags: VERB_FLAGS.export,
509
347
  },
510
348
  capture: {
511
349
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCapture(c); },
512
- usage: VERB_USAGE.capture,
513
- flags: VERB_FLAGS.capture,
514
350
  },
515
351
  dashboard: {
516
352
  run: async (c) => { await (await import('./cli/serve.js')).handleDashboard(c); },
517
- usage: VERB_USAGE.dashboard,
518
- flags: VERB_FLAGS.dashboard,
519
353
  },
520
354
  wm: {
521
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdWm(hippoRoot, args, flags); },
522
- usage: VERB_USAGE.wm,
523
- flags: VERB_FLAGS.wm,
355
+ run: async (c) => { (await import('./cli/continuity.js')).handleWm(c); },
524
356
  },
525
357
  mcp: {
526
358
  run: async () => { await (await import('./cli/serve.js')).handleMcp(); },
527
- usage: VERB_USAGE.mcp,
528
- flags: VERB_FLAGS.mcp,
529
359
  },
530
360
  serve: {
531
361
  run: async (c) => { await (await import('./cli/serve.js')).handleServe(c); },
532
- usage: VERB_USAGE.serve,
533
- flags: VERB_FLAGS.serve,
534
362
  },
535
363
  invalidate: {
536
364
  run: async (c) => { await (await import('./cli/curate.js')).handleInvalidate(c); },
537
- usage: VERB_USAGE.invalidate,
538
- flags: VERB_FLAGS.invalidate,
539
365
  },
540
366
  decide: {
541
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdDecide(hippoRoot, args, flags); },
542
- usage: VERB_USAGE.decide,
543
- flags: VERB_FLAGS.decide,
367
+ run: async (c) => { await (await import('./cli/decisions.js')).handleDecide(c); },
544
368
  },
545
369
  incident: {
546
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdIncident(hippoRoot, args, flags); },
547
- usage: VERB_USAGE.incident,
548
- flags: VERB_FLAGS.incident,
370
+ run: async (c) => { (await import('./cli/decisions.js')).handleIncident(c); },
549
371
  },
550
372
  process: {
551
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdProcess(hippoRoot, args, flags); },
552
- usage: VERB_USAGE.process,
553
- flags: VERB_FLAGS.process,
373
+ run: async (c) => { (await import('./cli/playbooks.js')).handleProcess(c); },
554
374
  },
555
375
  policy: {
556
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdPolicy(hippoRoot, args, flags); },
557
- usage: VERB_USAGE.policy,
558
- flags: VERB_FLAGS.policy,
376
+ run: async (c) => { (await import('./cli/playbooks.js')).handlePolicy(c); },
559
377
  },
560
378
  skill: {
561
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdSkill(hippoRoot, args, flags); },
562
- usage: VERB_USAGE.skill,
563
- flags: VERB_FLAGS.skill,
379
+ run: async (c) => { (await import('./cli/playbooks.js')).handleSkill(c); },
564
380
  },
565
381
  brief: {
566
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdProjectBrief(hippoRoot, args, flags); },
382
+ run: async (c) => { (await import('./cli/briefs.js')).handleProjectBrief(c); },
567
383
  aliases: ['project-brief'],
568
- usage: VERB_USAGE.brief,
569
- flags: VERB_FLAGS.brief,
570
384
  },
571
385
  note: {
572
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdCustomerNote(hippoRoot, args, flags); },
386
+ run: async (c) => { (await import('./cli/briefs.js')).handleCustomerNote(c); },
573
387
  aliases: ['customer-note'],
574
- usage: VERB_USAGE.note,
575
- flags: VERB_FLAGS.note,
576
388
  },
577
389
  graph: {
578
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdGraph(hippoRoot, args, flags); },
579
- usage: VERB_USAGE.graph,
580
- flags: VERB_FLAGS.graph,
390
+ run: async (c) => { (await import('./cli/briefs.js')).handleGraph(c); },
581
391
  },
582
392
  };
393
+ const USAGE_BLOCKS = VERB_USAGE;
394
+ const FLAGS_BY_VERB = VERB_FLAGS;
395
+ function buildCommands() {
396
+ const specs = Object.entries(VERB_HANDLERS).map(([verb, handler]) => {
397
+ const spec = { ...handler, usage: USAGE_BLOCKS[verb] ?? [], flags: FLAGS_BY_VERB[verb] };
398
+ return [verb, spec];
399
+ });
400
+ // SAFETY: VERB_HANDLERS is checked above to have exactly the VerbName keys, so every key is present.
401
+ return Object.fromEntries(specs);
402
+ }
403
+ /** Every verb's handler, aliases, help blocks and flags, keyed by name. */
404
+ export const COMMANDS = buildCommands();
583
405
  const COMMAND_INDEX = new Map(Object.entries(COMMANDS).flatMap(([verb, spec]) => [verb, ...(spec.aliases ?? [])].map((name) => [name, spec])));
584
406
  // The full listing order; a verb listed twice prints its next help block.
585
407
  const USAGE_ORDER = [
@@ -615,7 +437,7 @@ const SUBCOMMAND_USAGE = new Map([
615
437
  ['audit prune', printAuditPruneUsage],
616
438
  ['slack backfill', printSlackBackfillUsage],
617
439
  ['slack workspaces', printSlackWorkspacesUsage],
618
- ['github backfill', printGithubBackfillUsage],
440
+ ['github backfill', printGitHubBackfillUsage],
619
441
  ]);
620
442
  function printHelp(command, args) {
621
443
  const printSubcommandUsage = SUBCOMMAND_USAGE.get(`${command} ${args[0] ?? ''}`);
@@ -624,23 +446,22 @@ function printHelp(command, args) {
624
446
  else
625
447
  console.log(verbUsage(command) ?? usageText());
626
448
  }
627
- // ---------------------------------------------------------------------------
628
449
  // Entry point
629
- // ---------------------------------------------------------------------------
630
450
  function printVersion() {
631
451
  const __filename_local = fileURLToPath(import.meta.url);
632
452
  const __dirname_local = path.dirname(__filename_local);
633
453
  const pkgJson = fs.readFileSync(path.join(__dirname_local, '..', 'package.json'), 'utf-8');
454
+ // SAFETY: package.json ships with the build, and npm refuses to pack a package without a string version.
634
455
  const { version } = JSON.parse(pkgJson);
635
456
  console.log(version);
636
- process.exit(0);
457
+ throw new CliExit(0);
637
458
  }
638
459
  /** A value-less --scope parses as boolean true, which consumers coerced to the scope 'true' or dropped;
639
460
  * reject it once here so every command, thin-client relays included, sees only a non-empty string. */
640
461
  function rejectEmptyScope(flags) {
641
- if ('scope' in flags && (typeof flags['scope'] !== 'string' || !flags['scope'].trim())) {
462
+ if ('scope' in flags && (!isStringFlag(flags['scope']) || !flags['scope'].trim())) {
642
463
  printError('--scope requires a non-empty value (e.g. --scope slack:private:C1).');
643
- process.exit(1);
464
+ throw new CliExit(1);
644
465
  }
645
466
  }
646
467
  // parseArgs stores a value-less flag as boolean true, and NaN then survives every
@@ -649,9 +470,9 @@ function rejectNonNumericFlags(flags, declared) {
649
470
  for (const [key, raw] of Object.entries(flags)) {
650
471
  if (flagKind(declared, key) !== 'number')
651
472
  continue;
652
- if (typeof raw !== 'string' || !raw.trim() || !Number.isFinite(Number(raw))) {
473
+ if (!isStringFlag(raw) || !raw.trim() || !Number.isFinite(Number(raw))) {
653
474
  printError(`--${key} requires a numeric value.`);
654
- process.exit(1);
475
+ throw new CliExit(1);
655
476
  }
656
477
  }
657
478
  }
@@ -659,9 +480,9 @@ function rejectNonNumericFlags(flags, declared) {
659
480
  // so no single coercion of an inline value would be correct for every one of them.
660
481
  function rejectValuedSwitches(flags, declared) {
661
482
  for (const [key, raw] of Object.entries(flags)) {
662
- if (flagKind(declared, key) === 'switch' && typeof raw !== 'boolean') {
483
+ if (flagKind(declared, key) === 'switch' && !isBooleanFlag(raw)) {
663
484
  printError(`--${key} takes no value`);
664
- process.exit(1);
485
+ throw new CliExit(1);
665
486
  }
666
487
  }
667
488
  }
@@ -673,7 +494,7 @@ function checkUnknownFlags(command, flags, declared) {
673
494
  const unknown = Object.keys(flags).filter((key) => !isKnownFlag(key));
674
495
  if (unknown.length > 0 && DESTRUCTIVE_COMMANDS.has(command)) {
675
496
  printError(`Unknown flag ${flagNames(unknown)} for hippo ${command}. Nothing was changed.`);
676
- process.exit(2);
497
+ throw new CliExit(2);
677
498
  }
678
499
  // main() refuses --dry-run by name on a verb without one, so that flag is not also called ignored.
679
500
  const ignored = declared ? undeclaredFlags(declared, Object.keys(flags)).filter((key) => key !== 'dry-run') : unknown;
@@ -701,14 +522,14 @@ async function main(command, args, flags, hippoRoot) {
701
522
  const refusal = Object.hasOwn(flags, 'dry-run') ? dryRunRefusal(command, args, flags) : null;
702
523
  if (refusal) {
703
524
  printError(refusal);
704
- process.exit(2);
525
+ throw new CliExit(2);
705
526
  }
706
527
  if (!spec) {
707
528
  printError(`Unknown command: ${command}`);
708
529
  printUsage();
709
- process.exit(1);
530
+ throw new CliExit(1);
710
531
  }
711
- const run = () => spec.run({ hippoRoot, args, flags });
532
+ const run = () => spec.run({ hippoRoot, tenantId: resolveTenantId({}), args, flags });
712
533
  await (spec.scoped ? (await import('./db/request-stores.js')).runWithRequestStores(run) : run());
713
534
  }
714
535
  export async function runCli(argv = process.argv) {
@@ -717,6 +538,9 @@ export async function runCli(argv = process.argv) {
717
538
  await main(command, args, flags, getHippoRoot(process.cwd()));
718
539
  }
719
540
  catch (err) {
541
+ // The verb printed its own message before it threw, so this branch adds no line.
542
+ if (err instanceof CliExit)
543
+ process.exit(err.code);
720
544
  printError('Error:', isStoreBusy(err) ? STORE_BUSY_MESSAGE : err instanceof Error ? err.message : err);
721
545
  // The message alone rarely says where it came from; debug is the level that asks for the rest.
722
546
  if (isLevelEnabled('debug')) {