hippo-memory 1.69.0 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1014) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/cli.js CHANGED
@@ -1,81 +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
- */
36
- import { envSkipAutoIntegrations } from './env.js';
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.
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';
13
+ import { errorFields, errorMessage, isLevelEnabled, log } from './util/log.js';
44
14
  import { isStoreBusy, STORE_BUSY_MESSAGE } from './db/busy.js';
15
+ import { boolFlag, flagIsTrue, isBooleanFlag, isStringFlag } from './cli/flag-values.js';
45
16
  import { VERB_USAGE, USAGE_HEADER, USAGE_EXAMPLES, printAuditPruneUsage, printSlackBackfillUsage, printSlackWorkspacesUsage } from './cli/usage.js';
46
- // ---------------------------------------------------------------------------
17
+ import { VERB_FLAGS, flagKind, isKnownFlag, undeclaredFlags } from './cli/flags.js';
18
+ import { CliExit } from './cli/exit.js';
47
19
  // Helpers
48
- // ---------------------------------------------------------------------------
49
- // Every switch the CLI reads. A value on one reads as on under Boolean() (`--fix=false` would fix)
50
- // and as off under === true (`--pin=true` would not pin), so parseArgs and main() refuse one.
51
- // tests/cli-parse-flag-equals.test.ts fails when a switch read is missing from this set.
52
- export const BOOLEAN_FLAGS = new Set([
53
- 'agents', 'all', 'all-tenants', 'apply', 'archive', 'auto', 'bad', 'bootstrap', 'classic', 'churn', 'continuity',
54
- 'cross-project', 'dry-run', 'equal-sources', 'error', 'evc-adaptive', 'extract',
55
- 'filter-conflicts', 'fix', 'force', 'forget', 'git', 'global', 'good', 'graph-stream',
56
- 'help', 'include-logs', 'include-superseded', 'inferred', 'json', 'last-session', 'multihop', 'no-hooks',
57
- 'no-learn', 'no-mmr', 'no-propagate', 'no-schedule', 'no-share', 'no-summarize-older',
58
- 'observed', 'open', 'physics', 'pin', 'pinned-only', 'reject-loser', 'rerank-utility',
59
- 'reset-physics', 'save-baseline', 'show-cases', 'stats', 'stdin',
60
- 'strict', 'suite', 'turn', 'value-aware', 'verified', 'version', 'why',
61
- ]);
62
- // Every flag some command reads. Anything else is a typo that no command would act on.
63
- export const KNOWN_FLAGS = new Set([
64
- ...BOOLEAN_FLAGS,
65
- 'actual', 'artifact', 'artifact-ref', 'as-of', 'author', 'baseline', 'body', 'budget', 'card-id',
66
- 'change', 'channel', 'chatgpt', 'class', 'claude', 'codex-home', 'compare', 'constraint', 'content',
67
- 'context', 'contract', 'cursor', 'customer', 'days', 'depends-on', 'depth', 'description',
68
- 'embedding-weight', 'entity', 'estimate', 'file', 'format', 'framing', 'fresh-tail', 'from', 'goal',
69
- 'graph-hops', 'graph-seeds', 'history-path', 'hops', 'host', 'id', 'importance', 'include-recent',
70
- 'instructions', 'keep', 'kind', 'label', 'layer', 'level', 'limit', 'link', 'local-bump', 'log-file',
71
- 'markdown', 'max', 'max-cases', 'max-neighbors', 'min-mrr', 'min-results', 'min-score', 'mmr-lambda',
72
- 'model', 'name', 'next', 'next-step', 'note', 'older-than', 'op', 'out', 'outcome', 'owner', 'parent',
73
- 'path', 'policy', 'port', 'reason', 'repo', 'repos', 'reranker', 'reranker-top-k', 'resolution',
74
- 'role', 'run', 'runtime', 'salience-threshold', 'scan', 'scope', 'session', 'session-id', 'since',
75
- 'source', 'start-offset', 'started-at', 'state', 'status', 'step', 'steps', 'success', 'summary',
76
- 'supersedes', 'tag', 'target', 'target-runtime', 'task', 'team', 'tenant', 'tenant-id', 'tests',
77
- 'text', 'threshold', 'title', 'to', 'transcript', 'trigger', 'type', 'unit', 'value', 'vault',
78
- ]);
79
20
  // Commands that delete or hide memories: an unknown flag here stops the run instead of being ignored.
80
21
  const DESTRUCTIVE_COMMANDS = new Set([
81
22
  'audit', 'dedup', 'forget', 'invalidate', 'projects', 'reject', 'resolve', 'sleep', 'supersede',
@@ -88,17 +29,13 @@ const DRY_RUN_COMMANDS = new Set([
88
29
  function dryRunRefusal(command, args, flags) {
89
30
  const isBrief = command === 'brief' || command === 'project-brief';
90
31
  const onlyForm = command === 'share' ? 'share --auto' : isBrief ? `${command} refresh` : null;
91
- const honoured = command === 'share' ? args[0] === '--auto' || Boolean(flags['auto'])
32
+ const honoured = command === 'share' ? args[0] === '--auto' || boolFlag(flags, 'auto')
92
33
  : isBrief ? args[0] === 'refresh' : DRY_RUN_COMMANDS.has(command);
93
34
  if (honoured)
94
35
  return null;
95
36
  const where = onlyForm ? ` outside \`hippo ${onlyForm}\`` : '';
96
37
  return `hippo ${command} has no --dry-run${where}, so it would run for real. Nothing was changed.`;
97
38
  }
98
- // Shared by both the separated and glued (`=`) forms so the list can't drift.
99
- function isRepeatableFlag(key) {
100
- return key === 'tag' || key === 'artifact' || key === 'link' || key === 'step' || key === 'constraint' || key === 'depends-on';
101
- }
102
39
  function pushRepeatableFlag(flags, key, value) {
103
40
  if (Array.isArray(flags[key])) {
104
41
  // SAFETY: Array.isArray just confirmed flags[key] is an array; the union has no other array member.
@@ -108,10 +45,43 @@ function pushRepeatableFlag(flags, key, value) {
108
45
  flags[key] = [value];
109
46
  }
110
47
  }
48
+ function setGluedFlag(flags, key, value, kind) {
49
+ // Glued form has no following token to swallow, so a switch gets its
50
+ // own branch here instead of the swallow-avoidance short-circuit in setSeparatedFlag.
51
+ if (kind === 'switch') {
52
+ flags[key] = value;
53
+ }
54
+ else if (kind === 'list') {
55
+ if (value !== '')
56
+ pushRepeatableFlag(flags, key, value);
57
+ }
58
+ else {
59
+ flags[key] = value === '' ? true : value;
60
+ }
61
+ }
62
+ /** Returns how many tokens the flag consumed: its own, plus `next` when that is its value. */
63
+ function setSeparatedFlag(flags, key, next, kind) {
64
+ if (kind === 'switch' && (next === 'true' || next === 'false')) {
65
+ // Kept as a value so main() rejects it, instead of `--pin true` pinning the text "... true".
66
+ flags[key] = next;
67
+ return 2;
68
+ }
69
+ if (!next || next.startsWith('--') || kind === 'switch') {
70
+ // Boolean flag
71
+ flags[key] = true;
72
+ return 1;
73
+ }
74
+ if (kind === 'list')
75
+ pushRepeatableFlag(flags, key, next);
76
+ else
77
+ flags[key] = next;
78
+ return 2;
79
+ }
111
80
  export function parseArgs(argv) {
112
81
  const [, , command = '', ...rest] = argv;
113
82
  const args = [];
114
83
  const flags = {};
84
+ const declared = COMMAND_INDEX.get(command)?.flags;
115
85
  let i = 0;
116
86
  while (i < rest.length) {
117
87
  const part = rest[i];
@@ -121,43 +91,13 @@ export function parseArgs(argv) {
121
91
  }
122
92
  if (part.startsWith('--')) {
123
93
  const eqIdx = part.indexOf('=');
94
+ const key = part.slice(2, eqIdx > 2 ? eqIdx : undefined);
124
95
  if (eqIdx > 2) {
125
- // Glued form has no following token to swallow, so BOOLEAN_FLAGS gets its
126
- // own branch here instead of the swallow-avoidance short-circuit below.
127
- const key = part.slice(2, eqIdx);
128
- const value = part.slice(eqIdx + 1);
129
- if (BOOLEAN_FLAGS.has(key)) {
130
- flags[key] = value;
131
- }
132
- else if (isRepeatableFlag(key)) {
133
- if (value !== '')
134
- pushRepeatableFlag(flags, key, value);
135
- }
136
- else {
137
- flags[key] = value === '' ? true : value;
138
- }
96
+ setGluedFlag(flags, key, part.slice(eqIdx + 1), flagKind(declared, key));
139
97
  i++;
140
- continue;
141
- }
142
- const key = part.slice(2);
143
- const next = rest[i + 1];
144
- if (BOOLEAN_FLAGS.has(key) && (next === 'true' || next === 'false')) {
145
- // Kept as a value so main() rejects it, instead of `--pin true` pinning the text "... true".
146
- flags[key] = next;
147
- i += 2;
148
- }
149
- else if (!next || next.startsWith('--') || BOOLEAN_FLAGS.has(key)) {
150
- // Boolean flag
151
- flags[key] = true;
152
- i++;
153
- }
154
- else if (isRepeatableFlag(key)) {
155
- pushRepeatableFlag(flags, key, next);
156
- i += 2;
157
98
  }
158
99
  else {
159
- flags[key] = next;
160
- i += 2;
100
+ i += setSeparatedFlag(flags, key, rest[i + 1], flagKind(declared, key));
161
101
  }
162
102
  }
163
103
  else if (part === '-h') {
@@ -178,358 +118,290 @@ export function shouldAutoRepairCodexWrapper(currentCommand, flags) {
178
118
  if (!['context', 'remember', 'recall', 'sleep', 'capture', 'outcome', 'status', 'init'].includes(currentCommand)) {
179
119
  return false;
180
120
  }
181
- if (currentCommand === 'init' && flags['no-hooks'] === true)
121
+ if (currentCommand === 'init' && flagIsTrue(flags, 'no-hooks'))
182
122
  return false;
183
123
  return true;
184
124
  }
185
- // Repair-only: keeps the wrapper healthy for users who opted in via `hippo
186
- // hook install codex` (a Codex update can restore the real binary over our
187
- // shim). Never first-installs — silently swapping the codex binary on routine
188
- // commands is a consent violation and reads as binary hijacking to
189
- // 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.
190
127
  function maybeRepairCodexWrapper(currentCommand, flags) {
191
128
  if (!shouldAutoRepairCodexWrapper(currentCommand, flags))
192
129
  return;
193
130
  try {
194
131
  repairCodexWrapperIfInstalled();
195
132
  }
196
- catch {
197
- // best-effort only
133
+ catch (err) {
134
+ log.debug(`codex wrapper not repaired: ${errorMessage(err)}`);
198
135
  }
199
136
  }
200
- /** Every verb main() dispatches, keyed by name, with its handler, aliases and help blocks. */
201
- 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 = {
202
140
  init: {
203
- run: async ({ hippoRoot, flags }) => { (await import('./cli/init.js')).cmdInit(hippoRoot, flags); },
204
- usage: VERB_USAGE.init,
141
+ run: async (c) => { (await import('./cli/init.js')).handleInit(c); },
205
142
  },
206
143
  remember: {
207
144
  run: async (c) => { await (await import('./cli/remember.js')).handleRemember(c); },
208
- usage: VERB_USAGE.remember,
209
145
  },
210
146
  recall: {
211
147
  run: async (c) => { await (await import('./cli/recall.js')).handleRecall(c); },
212
148
  scoped: true,
213
- usage: VERB_USAGE.recall,
214
149
  },
215
150
  drill: {
216
151
  run: async (c) => { await (await import('./cli/dag.js')).handleDrill(c); },
217
152
  scoped: true,
218
- usage: VERB_USAGE.drill,
219
153
  },
220
154
  assemble: {
221
155
  run: async (c) => { await (await import('./cli/dag.js')).handleAssemble(c); },
222
156
  scoped: true,
223
- usage: VERB_USAGE.assemble,
224
157
  },
225
158
  supersede: {
226
159
  run: async (c) => { await (await import('./cli/remember.js')).handleSupersede(c); },
227
- usage: VERB_USAGE.supersede,
228
160
  },
229
161
  explain: {
230
162
  run: async (c) => { await (await import('./cli/explain.js')).handleExplain(c); },
231
163
  scoped: true,
232
- usage: VERB_USAGE.explain,
233
164
  },
234
165
  eval: {
235
166
  run: async (c) => { await (await import('./cli/eval.js')).handleEval(c); },
236
- usage: VERB_USAGE.eval,
237
167
  },
238
168
  trace: {
239
169
  run: async (c) => { await (await import('./cli/remember.js')).handleTrace(c); },
240
- usage: VERB_USAGE.trace,
241
170
  },
242
171
  refine: {
243
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/maintenance.js')).cmdRefine(hippoRoot, flags); },
244
- usage: VERB_USAGE.refine,
172
+ run: async (c) => { await (await import('./cli/maintenance.js')).handleRefine(c); },
245
173
  },
246
174
  sleep: {
247
- 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); },
248
176
  scoped: true,
249
- usage: VERB_USAGE.sleep,
250
177
  },
251
178
  'last-sleep': {
252
- run: async ({ hippoRoot, flags }) => { (await import('./cli/last-sleep.js')).cmdLastSleep(hippoRoot, flags); },
253
- usage: VERB_USAGE['last-sleep'],
179
+ run: async (c) => { (await import('./cli/last-sleep.js')).handleLastSleep(c); },
254
180
  },
255
181
  'session-end': {
256
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdSessionEnd(hippoRoot, flags); },
257
- usage: VERB_USAGE['session-end'],
182
+ run: async (c) => { await (await import('./cli/session-hooks.js')).handleSessionEnd(c); },
258
183
  },
259
184
  '__session-end-worker': {
260
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdSessionEndWorker(hippoRoot, flags); },
261
- usage: [],
185
+ run: async (c) => { await (await import('./cli/session-hooks.js')).handleSessionEndWorker(c); },
262
186
  },
263
187
  'pre-compact': {
264
188
  run: async (c) => { await (await import('./cli/session-hooks.js')).handlePreCompact(c); },
265
- usage: VERB_USAGE['pre-compact'],
266
189
  },
267
190
  'post-compact': {
268
191
  run: async (c) => { await (await import('./cli/session-hooks.js')).handlePostCompact(c); },
269
- usage: VERB_USAGE['post-compact'],
270
192
  },
271
193
  'capture-error': {
272
194
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCaptureError(c); },
273
- usage: VERB_USAGE['capture-error'],
274
195
  },
275
196
  'compact-resume': {
276
197
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCompactResume(c); },
277
- usage: VERB_USAGE['compact-resume'],
278
198
  },
279
199
  'codex-run': {
280
- run: async ({ hippoRoot, args }) => { (await import('./cli/session-hooks.js')).cmdCodexRun(hippoRoot, args); },
281
- usage: VERB_USAGE['codex-run'],
200
+ run: async (c) => { (await import('./cli/session-hooks.js')).handleCodexRun(c); },
282
201
  },
283
202
  '__codex-session-end-worker': {
284
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdCodexSessionEndWorker(hippoRoot, flags); },
285
- usage: [],
203
+ run: async (c) => { await (await import('./cli/session-hooks.js')).handleCodexSessionEndWorker(c); },
286
204
  },
287
205
  dedup: {
288
- run: async ({ hippoRoot, flags }) => { (await import('./cli/maintenance.js')).cmdDedup(hippoRoot, flags); },
289
- usage: VERB_USAGE.dedup,
206
+ run: async (c) => { (await import('./cli/maintenance.js')).handleDedup(c); },
290
207
  },
291
208
  dag: {
292
- run: async ({ hippoRoot, flags }) => { (await import('./cli/dag.js')).cmdDag(hippoRoot, flags); },
293
- usage: VERB_USAGE.dag,
209
+ run: async (c) => { (await import('./cli/dag.js')).handleDag(c); },
294
210
  },
295
211
  auth: {
296
- 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); },
297
213
  scoped: true,
298
- usage: VERB_USAGE.auth,
299
214
  },
300
215
  goal: {
301
- 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); },
302
217
  scoped: true,
303
- usage: VERB_USAGE.goal,
304
218
  },
305
219
  slack: {
306
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/slack.js')).cmdSlack(hippoRoot, args, flags); },
307
- usage: VERB_USAGE.slack,
220
+ run: async (c) => { await (await import('./cli/slack.js')).handleSlack(c); },
308
221
  },
309
222
  github: {
310
- run: async ({ hippoRoot, args, flags }) => { await cmdGithub(hippoRoot, args, flags); },
311
- usage: VERB_USAGE.github,
223
+ run: async (c) => { await handleGitHub(c); },
312
224
  },
313
225
  audit: {
314
226
  run: async (c) => { await (await import('./cli/audit.js')).handleAudit(c); },
315
227
  scoped: true,
316
- usage: VERB_USAGE.audit,
317
228
  },
318
229
  'correction-latency': {
319
230
  run: async (c) => { await (await import('./cli/status.js')).handleCorrectionLatency(c); },
320
- usage: VERB_USAGE['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
234
  },
326
235
  status: {
327
- run: async ({ hippoRoot }) => { (await import('./cli/status.js')).cmdStatus(hippoRoot); },
328
- usage: VERB_USAGE.status,
236
+ run: async (c) => { (await import('./cli/status.js')).handleStatus(c); },
329
237
  },
330
238
  outcome: {
331
- run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdOutcome(hippoRoot, flags); },
239
+ run: async (c) => { (await import('./cli/curate.js')).handleOutcome(c); },
332
240
  scoped: true,
333
- usage: VERB_USAGE.outcome,
334
241
  },
335
242
  conflicts: {
336
- run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdConflicts(hippoRoot, flags); },
337
- usage: VERB_USAGE.conflicts,
243
+ run: async (c) => { (await import('./cli/curate.js')).handleConflicts(c); },
338
244
  },
339
245
  resolve: {
340
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdResolve(hippoRoot, args, flags); },
341
- usage: VERB_USAGE.resolve,
246
+ run: async (c) => { await (await import('./cli/curate.js')).handleResolve(c); },
342
247
  },
343
248
  reject: {
344
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdReject(hippoRoot, args, flags); },
345
- usage: VERB_USAGE.reject,
249
+ run: async (c) => { (await import('./cli/curate.js')).handleReject(c); },
346
250
  },
347
251
  rejections: {
348
- run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdRejections(hippoRoot, flags); },
349
- usage: VERB_USAGE.rejections,
252
+ run: async (c) => { (await import('./cli/curate.js')).handleRejections(c); },
350
253
  },
351
254
  unreject: {
352
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdUnreject(hippoRoot, args, flags); },
353
- usage: VERB_USAGE.unreject,
255
+ run: async (c) => { (await import('./cli/curate.js')).handleUnreject(c); },
354
256
  },
355
257
  dormant: {
356
- 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); },
357
259
  scoped: true,
358
- usage: VERB_USAGE.dormant,
359
260
  },
360
261
  projects: {
361
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/projects.js')).cmdProjects(hippoRoot, args, flags); },
362
- usage: VERB_USAGE.projects,
262
+ run: async (c) => { (await import('./cli/projects.js')).handleProjects(c); },
363
263
  },
364
264
  quarantine: {
365
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdQuarantine(hippoRoot, args, flags); },
265
+ run: async (c) => { await (await import('./cli/curate.js')).handleQuarantine(c); },
366
266
  scoped: true,
367
- usage: VERB_USAGE.quarantine,
368
267
  },
369
268
  tokens: {
370
- run: async ({ hippoRoot, flags }) => { (await import('./cli/status.js')).cmdTokens(hippoRoot, flags); },
269
+ run: async (c) => { (await import('./cli/status.js')).handleTokens(c); },
371
270
  scoped: true,
372
- usage: VERB_USAGE.tokens,
373
271
  },
374
272
  failures: {
375
- run: async ({ hippoRoot, flags }) => { (await import('./cli/status.js')).cmdFailures(hippoRoot, flags); },
273
+ run: async (c) => { (await import('./cli/status.js')).handleFailures(c); },
376
274
  scoped: true,
377
- usage: VERB_USAGE.failures,
378
275
  },
379
276
  doctor: {
380
277
  run: async (c) => { await (await import('./cli/status.js')).handleDoctor(c); },
381
- usage: VERB_USAGE.doctor,
382
278
  },
383
279
  'support-bundle': {
384
280
  run: async (c) => { await (await import('./cli/status.js')).handleSupportBundle(c); },
385
- usage: VERB_USAGE['support-bundle'],
386
281
  },
387
282
  snapshot: {
388
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdSnapshot(hippoRoot, args, flags); },
389
- usage: VERB_USAGE.snapshot,
283
+ run: async (c) => { (await import('./cli/continuity.js')).handleSnapshot(c); },
390
284
  },
391
285
  session: {
392
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdSession(hippoRoot, args, flags); },
393
- usage: VERB_USAGE.session,
286
+ run: async (c) => { (await import('./cli/continuity.js')).handleSession(c); },
394
287
  },
395
288
  handoff: {
396
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdHandoff(hippoRoot, args, flags); },
397
- usage: VERB_USAGE.handoff,
289
+ run: async (c) => { (await import('./cli/continuity.js')).handleHandoff(c); },
398
290
  },
399
291
  card: {
400
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/card.js')).cmdCard(hippoRoot, args, flags); },
401
- usage: VERB_USAGE.card,
292
+ run: async (c) => { (await import('./cli/card.js')).handleCard(c); },
402
293
  },
403
294
  predict: {
404
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdPredict(hippoRoot, args, flags); },
405
- usage: VERB_USAGE.predict,
295
+ run: async (c) => { (await import('./cli/decisions.js')).handlePredict(c); },
406
296
  },
407
297
  current: {
408
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdCurrent(hippoRoot, args, flags); },
409
- usage: VERB_USAGE.current,
298
+ run: async (c) => { (await import('./cli/continuity.js')).handleCurrent(c); },
410
299
  },
411
300
  forget: {
412
301
  run: async (c) => { await (await import('./cli/curate.js')).handleForget(c); },
413
302
  scoped: true,
414
- usage: VERB_USAGE.forget,
415
303
  },
416
304
  inspect: {
417
305
  run: async (c) => { await (await import('./cli/status.js')).handleInspect(c); },
418
- usage: VERB_USAGE.inspect,
419
306
  },
420
307
  context: {
421
308
  run: async (c) => { await (await import('./cli/context.js')).handleContext(c); },
422
- usage: VERB_USAGE.context,
423
309
  },
424
310
  hook: {
425
- run: async ({ args }) => { (await import('./cli/setup.js')).cmdHook(args); },
426
- usage: VERB_USAGE.hook,
311
+ run: async (c) => { (await import('./cli/setup.js')).handleHook(c); },
427
312
  },
428
313
  setup: {
429
- run: async ({ flags }) => { (await import('./cli/setup.js')).cmdSetup(flags); },
430
- usage: VERB_USAGE.setup,
314
+ run: async (c) => { (await import('./cli/setup.js')).handleSetup(c); },
431
315
  },
432
316
  'daily-runner': {
433
- run: async () => { (await import('./cli/setup.js')).cmdDailyRunner(); },
434
- usage: VERB_USAGE['daily-runner'],
317
+ run: async (c) => { (await import('./cli/setup.js')).handleDailyRunner(c); },
435
318
  },
436
319
  embed: {
437
- run: async ({ hippoRoot, flags }) => { await (await import('./cli/maintenance.js')).cmdEmbed(hippoRoot, flags); },
438
- usage: VERB_USAGE.embed,
320
+ run: async (c) => { await (await import('./cli/maintenance.js')).handleEmbed(c); },
439
321
  },
440
322
  watch: {
441
323
  run: async (c) => { await (await import('./cli/transfer.js')).handleWatch(c); },
442
- usage: VERB_USAGE.watch,
443
324
  },
444
325
  learn: {
445
- run: async ({ hippoRoot, flags }) => { (await import('./cli/transfer.js')).cmdLearn(hippoRoot, flags); },
326
+ run: async (c) => { (await import('./cli/transfer.js')).handleLearn(c); },
446
327
  scoped: true,
447
- usage: VERB_USAGE.learn,
448
328
  },
449
329
  promote: {
450
330
  run: async (c) => { await (await import('./cli/transfer.js')).handlePromote(c); },
451
331
  scoped: true,
452
- usage: VERB_USAGE.promote,
453
332
  },
454
333
  sync: {
455
- run: async ({ hippoRoot, flags }) => { (await import('./cli/transfer.js')).cmdSync(hippoRoot, flags); },
456
- usage: VERB_USAGE.sync,
334
+ run: async (c) => { (await import('./cli/transfer.js')).handleSync(c); },
457
335
  },
458
336
  share: {
459
337
  run: async (c) => { await (await import('./cli/transfer.js')).handleShare(c); },
460
- usage: VERB_USAGE.share,
461
338
  },
462
339
  peers: {
463
340
  run: async (c) => { await (await import('./cli/transfer.js')).handlePeers(c); },
464
- usage: VERB_USAGE.peers,
465
341
  },
466
342
  import: {
467
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/transfer.js')).cmdImport(hippoRoot, args, flags); },
468
- usage: VERB_USAGE.import,
343
+ run: async (c) => { (await import('./cli/transfer.js')).handleImport(c); },
469
344
  },
470
345
  export: {
471
346
  run: async (c) => { await (await import('./cli/transfer.js')).handleExport(c); },
472
- usage: VERB_USAGE.export,
473
347
  },
474
348
  capture: {
475
349
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCapture(c); },
476
- usage: VERB_USAGE.capture,
477
350
  },
478
351
  dashboard: {
479
352
  run: async (c) => { await (await import('./cli/serve.js')).handleDashboard(c); },
480
- usage: VERB_USAGE.dashboard,
481
353
  },
482
354
  wm: {
483
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdWm(hippoRoot, args, flags); },
484
- usage: VERB_USAGE.wm,
355
+ run: async (c) => { (await import('./cli/continuity.js')).handleWm(c); },
485
356
  },
486
357
  mcp: {
487
358
  run: async () => { await (await import('./cli/serve.js')).handleMcp(); },
488
- usage: VERB_USAGE.mcp,
489
359
  },
490
360
  serve: {
491
361
  run: async (c) => { await (await import('./cli/serve.js')).handleServe(c); },
492
- usage: VERB_USAGE.serve,
493
362
  },
494
363
  invalidate: {
495
364
  run: async (c) => { await (await import('./cli/curate.js')).handleInvalidate(c); },
496
- usage: VERB_USAGE.invalidate,
497
365
  },
498
366
  decide: {
499
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdDecide(hippoRoot, args, flags); },
500
- usage: VERB_USAGE.decide,
367
+ run: async (c) => { await (await import('./cli/decisions.js')).handleDecide(c); },
501
368
  },
502
369
  incident: {
503
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdIncident(hippoRoot, args, flags); },
504
- usage: VERB_USAGE.incident,
370
+ run: async (c) => { (await import('./cli/decisions.js')).handleIncident(c); },
505
371
  },
506
372
  process: {
507
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdProcess(hippoRoot, args, flags); },
508
- usage: VERB_USAGE.process,
373
+ run: async (c) => { (await import('./cli/playbooks.js')).handleProcess(c); },
509
374
  },
510
375
  policy: {
511
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdPolicy(hippoRoot, args, flags); },
512
- usage: VERB_USAGE.policy,
376
+ run: async (c) => { (await import('./cli/playbooks.js')).handlePolicy(c); },
513
377
  },
514
378
  skill: {
515
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdSkill(hippoRoot, args, flags); },
516
- usage: VERB_USAGE.skill,
379
+ run: async (c) => { (await import('./cli/playbooks.js')).handleSkill(c); },
517
380
  },
518
381
  brief: {
519
- 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); },
520
383
  aliases: ['project-brief'],
521
- usage: VERB_USAGE.brief,
522
384
  },
523
385
  note: {
524
- 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); },
525
387
  aliases: ['customer-note'],
526
- usage: VERB_USAGE.note,
527
388
  },
528
389
  graph: {
529
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdGraph(hippoRoot, args, flags); },
530
- usage: VERB_USAGE.graph,
390
+ run: async (c) => { (await import('./cli/briefs.js')).handleGraph(c); },
531
391
  },
532
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();
533
405
  const COMMAND_INDEX = new Map(Object.entries(COMMANDS).flatMap(([verb, spec]) => [verb, ...(spec.aliases ?? [])].map((name) => [name, spec])));
534
406
  // The full listing order; a verb listed twice prints its next help block.
535
407
  const USAGE_ORDER = [
@@ -565,7 +437,7 @@ const SUBCOMMAND_USAGE = new Map([
565
437
  ['audit prune', printAuditPruneUsage],
566
438
  ['slack backfill', printSlackBackfillUsage],
567
439
  ['slack workspaces', printSlackWorkspacesUsage],
568
- ['github backfill', printGithubBackfillUsage],
440
+ ['github backfill', printGitHubBackfillUsage],
569
441
  ]);
570
442
  function printHelp(command, args) {
571
443
  const printSubcommandUsage = SUBCOMMAND_USAGE.get(`${command} ${args[0] ?? ''}`);
@@ -574,79 +446,90 @@ function printHelp(command, args) {
574
446
  else
575
447
  console.log(verbUsage(command) ?? usageText());
576
448
  }
577
- // ---------------------------------------------------------------------------
578
449
  // Entry point
579
- // ---------------------------------------------------------------------------
580
- async function main(command, args, flags, hippoRoot) {
581
- if (command === '--version' || command === '-v' || flags['version']) {
582
- const __filename_local = fileURLToPath(import.meta.url);
583
- const __dirname_local = path.dirname(__filename_local);
584
- const pkgJson = fs.readFileSync(path.join(__dirname_local, '..', 'package.json'), 'utf-8');
585
- const { version } = JSON.parse(pkgJson);
586
- console.log(version);
587
- process.exit(0);
588
- }
589
- if (command === '' || command === 'help' || command === '--help' || command === '-h') {
590
- printUsage();
591
- return;
592
- }
593
- // Before every other step, so help never opens a store, installs a hook or starts a server.
594
- if (Object.hasOwn(flags, 'help')) {
595
- printHelp(command, args);
596
- return;
597
- }
598
- maybeRepairCodexWrapper(command, flags);
599
- /** A value-less --scope parses as boolean true, which consumers coerced to the scope 'true' or dropped;
600
- * reject it once here so every command, thin-client relays included, sees only a non-empty string. */
601
- if ('scope' in flags && (typeof flags['scope'] !== 'string' || !flags['scope'].trim())) {
450
+ function printVersion() {
451
+ const __filename_local = fileURLToPath(import.meta.url);
452
+ const __dirname_local = path.dirname(__filename_local);
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.
455
+ const { version } = JSON.parse(pkgJson);
456
+ console.log(version);
457
+ throw new CliExit(0);
458
+ }
459
+ /** A value-less --scope parses as boolean true, which consumers coerced to the scope 'true' or dropped;
460
+ * reject it once here so every command, thin-client relays included, sees only a non-empty string. */
461
+ function rejectEmptyScope(flags) {
462
+ if ('scope' in flags && (!isStringFlag(flags['scope']) || !flags['scope'].trim())) {
602
463
  printError('--scope requires a non-empty value (e.g. --scope slack:private:C1).');
603
- process.exit(1);
464
+ throw new CliExit(1);
604
465
  }
605
- // parseArgs stores a value-less flag as boolean true, and NaN then survives every
606
- // downstream guard because each comparison against it is false.
607
- const NUMERIC_FLAGS = [
608
- 'days', 'threshold', 'min-score', 'port', 'limit', 'mmr-lambda', 'local-bump',
609
- 'min-results', 'reranker-top-k', 'min-mrr', 'embedding-weight', 'max-cases',
610
- ];
611
- for (const key of NUMERIC_FLAGS) {
612
- const raw = flags[key];
613
- if (raw === undefined)
466
+ }
467
+ // parseArgs stores a value-less flag as boolean true, and NaN then survives every
468
+ // downstream guard because each comparison against it is false.
469
+ function rejectNonNumericFlags(flags, declared) {
470
+ for (const [key, raw] of Object.entries(flags)) {
471
+ if (flagKind(declared, key) !== 'number')
614
472
  continue;
615
- if (typeof raw !== 'string' || !raw.trim() || !Number.isFinite(Number(raw))) {
473
+ if (!isStringFlag(raw) || !raw.trim() || !Number.isFinite(Number(raw))) {
616
474
  printError(`--${key} requires a numeric value.`);
617
- process.exit(1);
475
+ throw new CliExit(1);
618
476
  }
619
477
  }
620
- // Reject rather than coerce: consumers read --dry-run both as Boolean() and === true,
621
- // so no single coercion of an inline value would be correct for every one of them.
622
- for (const key of BOOLEAN_FLAGS) {
623
- if (Object.hasOwn(flags, key) && typeof flags[key] !== 'boolean') {
478
+ }
479
+ // Reject rather than coerce: consumers read --dry-run both as Boolean() and === true,
480
+ // so no single coercion of an inline value would be correct for every one of them.
481
+ function rejectValuedSwitches(flags, declared) {
482
+ for (const [key, raw] of Object.entries(flags)) {
483
+ if (flagKind(declared, key) === 'switch' && !isBooleanFlag(raw)) {
624
484
  printError(`--${key} takes no value`);
625
- process.exit(1);
485
+ throw new CliExit(1);
626
486
  }
627
487
  }
488
+ }
489
+ function checkUnknownFlags(command, flags, declared) {
628
490
  // card checks its flags per subcommand, with a stricter message.
629
- const unknownFlags = command === 'card' ? [] : Object.keys(flags).filter((key) => !KNOWN_FLAGS.has(key));
630
- if (unknownFlags.length > 0) {
631
- const names = unknownFlags.map((key) => `--${key}`).join(', ');
632
- if (DESTRUCTIVE_COMMANDS.has(command)) {
633
- printError(`Unknown flag ${names} for hippo ${command}. Nothing was changed.`);
634
- process.exit(2);
635
- }
636
- printError(`hippo: ignoring unknown flag ${names}. A later release will reject it.`);
491
+ if (command === 'card')
492
+ return;
493
+ const flagNames = (keys) => keys.map((key) => `--${key}`).join(', ');
494
+ const unknown = Object.keys(flags).filter((key) => !isKnownFlag(key));
495
+ if (unknown.length > 0 && DESTRUCTIVE_COMMANDS.has(command)) {
496
+ printError(`Unknown flag ${flagNames(unknown)} for hippo ${command}. Nothing was changed.`);
497
+ throw new CliExit(2);
637
498
  }
499
+ // main() refuses --dry-run by name on a verb without one, so that flag is not also called ignored.
500
+ const ignored = declared ? undeclaredFlags(declared, Object.keys(flags)).filter((key) => key !== 'dry-run') : unknown;
501
+ if (ignored.length > 0)
502
+ printError(`hippo: ignoring unknown flag ${flagNames(ignored)}. A later release will reject it.`);
503
+ }
504
+ async function main(command, args, flags, hippoRoot) {
505
+ if (command === '--version' || command === '-v' || flags['version'])
506
+ printVersion();
507
+ if (command === '' || command === 'help' || command === '--help' || command === '-h') {
508
+ printUsage();
509
+ return;
510
+ }
511
+ // Before every other step, so help never opens a store, installs a hook or starts a server.
512
+ if (Object.hasOwn(flags, 'help')) {
513
+ printHelp(command, args);
514
+ return;
515
+ }
516
+ const spec = COMMAND_INDEX.get(command);
517
+ maybeRepairCodexWrapper(command, flags);
518
+ rejectEmptyScope(flags);
519
+ rejectNonNumericFlags(flags, spec?.flags);
520
+ rejectValuedSwitches(flags, spec?.flags);
521
+ checkUnknownFlags(command, flags, spec?.flags);
638
522
  const refusal = Object.hasOwn(flags, 'dry-run') ? dryRunRefusal(command, args, flags) : null;
639
523
  if (refusal) {
640
524
  printError(refusal);
641
- process.exit(2);
525
+ throw new CliExit(2);
642
526
  }
643
- const spec = COMMAND_INDEX.get(command);
644
527
  if (!spec) {
645
528
  printError(`Unknown command: ${command}`);
646
529
  printUsage();
647
- process.exit(1);
530
+ throw new CliExit(1);
648
531
  }
649
- const run = () => spec.run({ hippoRoot, args, flags });
532
+ const run = () => spec.run({ hippoRoot, tenantId: resolveTenantId({}), args, flags });
650
533
  await (spec.scoped ? (await import('./db/request-stores.js')).runWithRequestStores(run) : run());
651
534
  }
652
535
  export async function runCli(argv = process.argv) {
@@ -655,7 +538,15 @@ export async function runCli(argv = process.argv) {
655
538
  await main(command, args, flags, getHippoRoot(process.cwd()));
656
539
  }
657
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);
658
544
  printError('Error:', isStoreBusy(err) ? STORE_BUSY_MESSAGE : err instanceof Error ? err.message : err);
545
+ // The message alone rarely says where it came from; debug is the level that asks for the rest.
546
+ if (isLevelEnabled('debug')) {
547
+ const { errorClass, stack } = errorFields(err);
548
+ printError(` thrown as ${errorClass}${stack ? `\n${stack}` : ''}`);
549
+ }
659
550
  process.exit(1);
660
551
  }
661
552
  }