hippo-memory 1.69.0 → 1.70.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 (860) 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 +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  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/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/cli.js CHANGED
@@ -33,7 +33,7 @@
33
33
  * hippo decide "<decision>" [--context "<why>"] [--supersedes <id>]
34
34
  * hippo wm <push|read|clear|flush>
35
35
  */
36
- import { envSkipAutoIntegrations } from './env.js';
36
+ import { envSkipAutoIntegrations } from './util/env.js';
37
37
  import * as path from 'path';
38
38
  import * as fs from 'fs';
39
39
  import { fileURLToPath } from 'node:url';
@@ -41,41 +41,14 @@ import { repairCodexWrapperIfInstalled } from './hooks/codex-wrapper.js';
41
41
  import { getHippoRoot } from './store/open.js';
42
42
  import { cmdGithub, printGithubBackfillUsage } from './connectors/github/cli-impl.js';
43
43
  import { printError } from './cli/output.js';
44
+ import { errorFields, errorMessage, isLevelEnabled, log } from './util/log.js';
44
45
  import { isStoreBusy, STORE_BUSY_MESSAGE } from './db/busy.js';
46
+ import { boolFlag, flagIsTrue } from './cli/flag-values.js';
45
47
  import { VERB_USAGE, USAGE_HEADER, USAGE_EXAMPLES, printAuditPruneUsage, printSlackBackfillUsage, printSlackWorkspacesUsage } from './cli/usage.js';
48
+ import { VERB_FLAGS, flagKind, isKnownFlag, undeclaredFlags } from './cli/flags.js';
46
49
  // ---------------------------------------------------------------------------
47
50
  // Helpers
48
51
  // ---------------------------------------------------------------------------
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
52
  // Commands that delete or hide memories: an unknown flag here stops the run instead of being ignored.
80
53
  const DESTRUCTIVE_COMMANDS = new Set([
81
54
  'audit', 'dedup', 'forget', 'invalidate', 'projects', 'reject', 'resolve', 'sleep', 'supersede',
@@ -88,17 +61,13 @@ const DRY_RUN_COMMANDS = new Set([
88
61
  function dryRunRefusal(command, args, flags) {
89
62
  const isBrief = command === 'brief' || command === 'project-brief';
90
63
  const onlyForm = command === 'share' ? 'share --auto' : isBrief ? `${command} refresh` : null;
91
- const honoured = command === 'share' ? args[0] === '--auto' || Boolean(flags['auto'])
64
+ const honoured = command === 'share' ? args[0] === '--auto' || boolFlag(flags, 'auto')
92
65
  : isBrief ? args[0] === 'refresh' : DRY_RUN_COMMANDS.has(command);
93
66
  if (honoured)
94
67
  return null;
95
68
  const where = onlyForm ? ` outside \`hippo ${onlyForm}\`` : '';
96
69
  return `hippo ${command} has no --dry-run${where}, so it would run for real. Nothing was changed.`;
97
70
  }
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
71
  function pushRepeatableFlag(flags, key, value) {
103
72
  if (Array.isArray(flags[key])) {
104
73
  // SAFETY: Array.isArray just confirmed flags[key] is an array; the union has no other array member.
@@ -108,10 +77,43 @@ function pushRepeatableFlag(flags, key, value) {
108
77
  flags[key] = [value];
109
78
  }
110
79
  }
80
+ function setGluedFlag(flags, key, value, kind) {
81
+ // Glued form has no following token to swallow, so a switch gets its
82
+ // own branch here instead of the swallow-avoidance short-circuit in setSeparatedFlag.
83
+ if (kind === 'switch') {
84
+ flags[key] = value;
85
+ }
86
+ else if (kind === 'list') {
87
+ if (value !== '')
88
+ pushRepeatableFlag(flags, key, value);
89
+ }
90
+ else {
91
+ flags[key] = value === '' ? true : value;
92
+ }
93
+ }
94
+ /** Returns how many tokens the flag consumed: its own, plus `next` when that is its value. */
95
+ function setSeparatedFlag(flags, key, next, kind) {
96
+ if (kind === 'switch' && (next === 'true' || next === 'false')) {
97
+ // Kept as a value so main() rejects it, instead of `--pin true` pinning the text "... true".
98
+ flags[key] = next;
99
+ return 2;
100
+ }
101
+ if (!next || next.startsWith('--') || kind === 'switch') {
102
+ // Boolean flag
103
+ flags[key] = true;
104
+ return 1;
105
+ }
106
+ if (kind === 'list')
107
+ pushRepeatableFlag(flags, key, next);
108
+ else
109
+ flags[key] = next;
110
+ return 2;
111
+ }
111
112
  export function parseArgs(argv) {
112
113
  const [, , command = '', ...rest] = argv;
113
114
  const args = [];
114
115
  const flags = {};
116
+ const declared = COMMAND_INDEX.get(command)?.flags;
115
117
  let i = 0;
116
118
  while (i < rest.length) {
117
119
  const part = rest[i];
@@ -121,43 +123,13 @@ export function parseArgs(argv) {
121
123
  }
122
124
  if (part.startsWith('--')) {
123
125
  const eqIdx = part.indexOf('=');
126
+ const key = part.slice(2, eqIdx > 2 ? eqIdx : undefined);
124
127
  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
- }
139
- 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;
128
+ setGluedFlag(flags, key, part.slice(eqIdx + 1), flagKind(declared, key));
152
129
  i++;
153
130
  }
154
- else if (isRepeatableFlag(key)) {
155
- pushRepeatableFlag(flags, key, next);
156
- i += 2;
157
- }
158
131
  else {
159
- flags[key] = next;
160
- i += 2;
132
+ i += setSeparatedFlag(flags, key, rest[i + 1], flagKind(declared, key));
161
133
  }
162
134
  }
163
135
  else if (part === '-h') {
@@ -178,7 +150,7 @@ export function shouldAutoRepairCodexWrapper(currentCommand, flags) {
178
150
  if (!['context', 'remember', 'recall', 'sleep', 'capture', 'outcome', 'status', 'init'].includes(currentCommand)) {
179
151
  return false;
180
152
  }
181
- if (currentCommand === 'init' && flags['no-hooks'] === true)
153
+ if (currentCommand === 'init' && flagIsTrue(flags, 'no-hooks'))
182
154
  return false;
183
155
  return true;
184
156
  }
@@ -193,8 +165,8 @@ function maybeRepairCodexWrapper(currentCommand, flags) {
193
165
  try {
194
166
  repairCodexWrapperIfInstalled();
195
167
  }
196
- catch {
197
- // best-effort only
168
+ catch (err) {
169
+ log.debug(`codex wrapper not repaired: ${errorMessage(err)}`);
198
170
  }
199
171
  }
200
172
  /** Every verb main() dispatches, keyed by name, with its handler, aliases and help blocks. */
@@ -202,332 +174,410 @@ export const COMMANDS = {
202
174
  init: {
203
175
  run: async ({ hippoRoot, flags }) => { (await import('./cli/init.js')).cmdInit(hippoRoot, flags); },
204
176
  usage: VERB_USAGE.init,
177
+ flags: VERB_FLAGS.init,
205
178
  },
206
179
  remember: {
207
180
  run: async (c) => { await (await import('./cli/remember.js')).handleRemember(c); },
208
181
  usage: VERB_USAGE.remember,
182
+ flags: VERB_FLAGS.remember,
209
183
  },
210
184
  recall: {
211
185
  run: async (c) => { await (await import('./cli/recall.js')).handleRecall(c); },
212
186
  scoped: true,
213
187
  usage: VERB_USAGE.recall,
188
+ flags: VERB_FLAGS.recall,
214
189
  },
215
190
  drill: {
216
191
  run: async (c) => { await (await import('./cli/dag.js')).handleDrill(c); },
217
192
  scoped: true,
218
193
  usage: VERB_USAGE.drill,
194
+ flags: VERB_FLAGS.drill,
219
195
  },
220
196
  assemble: {
221
197
  run: async (c) => { await (await import('./cli/dag.js')).handleAssemble(c); },
222
198
  scoped: true,
223
199
  usage: VERB_USAGE.assemble,
200
+ flags: VERB_FLAGS.assemble,
224
201
  },
225
202
  supersede: {
226
203
  run: async (c) => { await (await import('./cli/remember.js')).handleSupersede(c); },
227
204
  usage: VERB_USAGE.supersede,
205
+ flags: VERB_FLAGS.supersede,
228
206
  },
229
207
  explain: {
230
208
  run: async (c) => { await (await import('./cli/explain.js')).handleExplain(c); },
231
209
  scoped: true,
232
210
  usage: VERB_USAGE.explain,
211
+ flags: VERB_FLAGS.explain,
233
212
  },
234
213
  eval: {
235
214
  run: async (c) => { await (await import('./cli/eval.js')).handleEval(c); },
236
215
  usage: VERB_USAGE.eval,
216
+ flags: VERB_FLAGS.eval,
237
217
  },
238
218
  trace: {
239
219
  run: async (c) => { await (await import('./cli/remember.js')).handleTrace(c); },
240
220
  usage: VERB_USAGE.trace,
221
+ flags: VERB_FLAGS.trace,
241
222
  },
242
223
  refine: {
243
224
  run: async ({ hippoRoot, flags }) => { await (await import('./cli/maintenance.js')).cmdRefine(hippoRoot, flags); },
244
225
  usage: VERB_USAGE.refine,
226
+ flags: VERB_FLAGS.refine,
245
227
  },
246
228
  sleep: {
247
229
  run: async ({ hippoRoot, flags }) => { await (await import('./cli/sleep.js')).cmdSleep(hippoRoot, flags); },
248
230
  scoped: true,
249
231
  usage: VERB_USAGE.sleep,
232
+ flags: VERB_FLAGS.sleep,
250
233
  },
251
234
  'last-sleep': {
252
235
  run: async ({ hippoRoot, flags }) => { (await import('./cli/last-sleep.js')).cmdLastSleep(hippoRoot, flags); },
253
236
  usage: VERB_USAGE['last-sleep'],
237
+ flags: VERB_FLAGS['last-sleep'],
254
238
  },
255
239
  'session-end': {
256
240
  run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdSessionEnd(hippoRoot, flags); },
257
241
  usage: VERB_USAGE['session-end'],
242
+ flags: VERB_FLAGS['session-end'],
258
243
  },
259
244
  '__session-end-worker': {
260
245
  run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdSessionEndWorker(hippoRoot, flags); },
261
246
  usage: [],
247
+ flags: VERB_FLAGS['__session-end-worker'],
262
248
  },
263
249
  'pre-compact': {
264
250
  run: async (c) => { await (await import('./cli/session-hooks.js')).handlePreCompact(c); },
265
251
  usage: VERB_USAGE['pre-compact'],
252
+ flags: VERB_FLAGS['pre-compact'],
266
253
  },
267
254
  'post-compact': {
268
255
  run: async (c) => { await (await import('./cli/session-hooks.js')).handlePostCompact(c); },
269
256
  usage: VERB_USAGE['post-compact'],
257
+ flags: VERB_FLAGS['post-compact'],
270
258
  },
271
259
  'capture-error': {
272
260
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCaptureError(c); },
273
261
  usage: VERB_USAGE['capture-error'],
262
+ flags: VERB_FLAGS['capture-error'],
274
263
  },
275
264
  'compact-resume': {
276
265
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCompactResume(c); },
277
266
  usage: VERB_USAGE['compact-resume'],
267
+ flags: VERB_FLAGS['compact-resume'],
278
268
  },
279
269
  'codex-run': {
280
270
  run: async ({ hippoRoot, args }) => { (await import('./cli/session-hooks.js')).cmdCodexRun(hippoRoot, args); },
281
271
  usage: VERB_USAGE['codex-run'],
272
+ flags: VERB_FLAGS['codex-run'],
282
273
  },
283
274
  '__codex-session-end-worker': {
284
275
  run: async ({ hippoRoot, flags }) => { await (await import('./cli/session-hooks.js')).cmdCodexSessionEndWorker(hippoRoot, flags); },
285
276
  usage: [],
277
+ flags: VERB_FLAGS['__codex-session-end-worker'],
286
278
  },
287
279
  dedup: {
288
280
  run: async ({ hippoRoot, flags }) => { (await import('./cli/maintenance.js')).cmdDedup(hippoRoot, flags); },
289
281
  usage: VERB_USAGE.dedup,
282
+ flags: VERB_FLAGS.dedup,
290
283
  },
291
284
  dag: {
292
285
  run: async ({ hippoRoot, flags }) => { (await import('./cli/dag.js')).cmdDag(hippoRoot, flags); },
293
286
  usage: VERB_USAGE.dag,
287
+ flags: VERB_FLAGS.dag,
294
288
  },
295
289
  auth: {
296
290
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/auth.js')).cmdAuth(hippoRoot, args, flags); },
297
291
  scoped: true,
298
292
  usage: VERB_USAGE.auth,
293
+ flags: VERB_FLAGS.auth,
299
294
  },
300
295
  goal: {
301
296
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/goals.js')).cmdGoal(hippoRoot, args, flags); },
302
297
  scoped: true,
303
298
  usage: VERB_USAGE.goal,
299
+ flags: VERB_FLAGS.goal,
304
300
  },
305
301
  slack: {
306
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/slack.js')).cmdSlack(hippoRoot, args, flags); },
302
+ run: async ({ hippoRoot, args, flags }) => { await (await import('./cli/slack.js')).cmdSlack(hippoRoot, args, flags); },
307
303
  usage: VERB_USAGE.slack,
304
+ flags: VERB_FLAGS.slack,
308
305
  },
309
306
  github: {
310
307
  run: async ({ hippoRoot, args, flags }) => { await cmdGithub(hippoRoot, args, flags); },
311
308
  usage: VERB_USAGE.github,
309
+ flags: VERB_FLAGS.github,
312
310
  },
313
311
  audit: {
314
312
  run: async (c) => { await (await import('./cli/audit.js')).handleAudit(c); },
315
313
  scoped: true,
316
314
  usage: VERB_USAGE.audit,
315
+ flags: VERB_FLAGS.audit,
317
316
  },
318
317
  'correction-latency': {
319
318
  run: async (c) => { await (await import('./cli/status.js')).handleCorrectionLatency(c); },
320
319
  usage: VERB_USAGE['correction-latency'],
320
+ flags: VERB_FLAGS['correction-latency'],
321
321
  },
322
322
  provenance: {
323
323
  run: async (c) => { await (await import('./cli/status.js')).handleProvenance(c); },
324
324
  usage: VERB_USAGE.provenance,
325
+ flags: VERB_FLAGS.provenance,
325
326
  },
326
327
  status: {
327
328
  run: async ({ hippoRoot }) => { (await import('./cli/status.js')).cmdStatus(hippoRoot); },
328
329
  usage: VERB_USAGE.status,
330
+ flags: VERB_FLAGS.status,
329
331
  },
330
332
  outcome: {
331
333
  run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdOutcome(hippoRoot, flags); },
332
334
  scoped: true,
333
335
  usage: VERB_USAGE.outcome,
336
+ flags: VERB_FLAGS.outcome,
334
337
  },
335
338
  conflicts: {
336
339
  run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdConflicts(hippoRoot, flags); },
337
340
  usage: VERB_USAGE.conflicts,
341
+ flags: VERB_FLAGS.conflicts,
338
342
  },
339
343
  resolve: {
340
344
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdResolve(hippoRoot, args, flags); },
341
345
  usage: VERB_USAGE.resolve,
346
+ flags: VERB_FLAGS.resolve,
342
347
  },
343
348
  reject: {
344
349
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdReject(hippoRoot, args, flags); },
345
350
  usage: VERB_USAGE.reject,
351
+ flags: VERB_FLAGS.reject,
346
352
  },
347
353
  rejections: {
348
354
  run: async ({ hippoRoot, flags }) => { (await import('./cli/curate.js')).cmdRejections(hippoRoot, flags); },
349
355
  usage: VERB_USAGE.rejections,
356
+ flags: VERB_FLAGS.rejections,
350
357
  },
351
358
  unreject: {
352
359
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdUnreject(hippoRoot, args, flags); },
353
360
  usage: VERB_USAGE.unreject,
361
+ flags: VERB_FLAGS.unreject,
354
362
  },
355
363
  dormant: {
356
364
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdDormant(hippoRoot, args, flags); },
357
365
  scoped: true,
358
366
  usage: VERB_USAGE.dormant,
367
+ flags: VERB_FLAGS.dormant,
359
368
  },
360
369
  projects: {
361
370
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/projects.js')).cmdProjects(hippoRoot, args, flags); },
362
371
  usage: VERB_USAGE.projects,
372
+ flags: VERB_FLAGS.projects,
363
373
  },
364
374
  quarantine: {
365
- run: async ({ hippoRoot, args, flags }) => { (await import('./cli/curate.js')).cmdQuarantine(hippoRoot, args, flags); },
375
+ run: async ({ hippoRoot, args, flags }) => { await (await import('./cli/curate.js')).cmdQuarantine(hippoRoot, args, flags); },
366
376
  scoped: true,
367
377
  usage: VERB_USAGE.quarantine,
378
+ flags: VERB_FLAGS.quarantine,
368
379
  },
369
380
  tokens: {
370
381
  run: async ({ hippoRoot, flags }) => { (await import('./cli/status.js')).cmdTokens(hippoRoot, flags); },
371
382
  scoped: true,
372
383
  usage: VERB_USAGE.tokens,
384
+ flags: VERB_FLAGS.tokens,
373
385
  },
374
386
  failures: {
375
387
  run: async ({ hippoRoot, flags }) => { (await import('./cli/status.js')).cmdFailures(hippoRoot, flags); },
376
388
  scoped: true,
377
389
  usage: VERB_USAGE.failures,
390
+ flags: VERB_FLAGS.failures,
378
391
  },
379
392
  doctor: {
380
393
  run: async (c) => { await (await import('./cli/status.js')).handleDoctor(c); },
381
394
  usage: VERB_USAGE.doctor,
395
+ flags: VERB_FLAGS.doctor,
382
396
  },
383
397
  'support-bundle': {
384
398
  run: async (c) => { await (await import('./cli/status.js')).handleSupportBundle(c); },
385
399
  usage: VERB_USAGE['support-bundle'],
400
+ flags: VERB_FLAGS['support-bundle'],
386
401
  },
387
402
  snapshot: {
388
403
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdSnapshot(hippoRoot, args, flags); },
389
404
  usage: VERB_USAGE.snapshot,
405
+ flags: VERB_FLAGS.snapshot,
390
406
  },
391
407
  session: {
392
408
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdSession(hippoRoot, args, flags); },
393
409
  usage: VERB_USAGE.session,
410
+ flags: VERB_FLAGS.session,
394
411
  },
395
412
  handoff: {
396
413
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdHandoff(hippoRoot, args, flags); },
397
414
  usage: VERB_USAGE.handoff,
415
+ flags: VERB_FLAGS.handoff,
398
416
  },
399
417
  card: {
400
418
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/card.js')).cmdCard(hippoRoot, args, flags); },
401
419
  usage: VERB_USAGE.card,
420
+ flags: VERB_FLAGS.card,
402
421
  },
403
422
  predict: {
404
423
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdPredict(hippoRoot, args, flags); },
405
424
  usage: VERB_USAGE.predict,
425
+ flags: VERB_FLAGS.predict,
406
426
  },
407
427
  current: {
408
428
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdCurrent(hippoRoot, args, flags); },
409
429
  usage: VERB_USAGE.current,
430
+ flags: VERB_FLAGS.current,
410
431
  },
411
432
  forget: {
412
433
  run: async (c) => { await (await import('./cli/curate.js')).handleForget(c); },
413
434
  scoped: true,
414
435
  usage: VERB_USAGE.forget,
436
+ flags: VERB_FLAGS.forget,
415
437
  },
416
438
  inspect: {
417
439
  run: async (c) => { await (await import('./cli/status.js')).handleInspect(c); },
418
440
  usage: VERB_USAGE.inspect,
441
+ flags: VERB_FLAGS.inspect,
419
442
  },
420
443
  context: {
421
444
  run: async (c) => { await (await import('./cli/context.js')).handleContext(c); },
422
445
  usage: VERB_USAGE.context,
446
+ flags: VERB_FLAGS.context,
423
447
  },
424
448
  hook: {
425
449
  run: async ({ args }) => { (await import('./cli/setup.js')).cmdHook(args); },
426
450
  usage: VERB_USAGE.hook,
451
+ flags: VERB_FLAGS.hook,
427
452
  },
428
453
  setup: {
429
454
  run: async ({ flags }) => { (await import('./cli/setup.js')).cmdSetup(flags); },
430
455
  usage: VERB_USAGE.setup,
456
+ flags: VERB_FLAGS.setup,
431
457
  },
432
458
  'daily-runner': {
433
459
  run: async () => { (await import('./cli/setup.js')).cmdDailyRunner(); },
434
460
  usage: VERB_USAGE['daily-runner'],
461
+ flags: VERB_FLAGS['daily-runner'],
435
462
  },
436
463
  embed: {
437
464
  run: async ({ hippoRoot, flags }) => { await (await import('./cli/maintenance.js')).cmdEmbed(hippoRoot, flags); },
438
465
  usage: VERB_USAGE.embed,
466
+ flags: VERB_FLAGS.embed,
439
467
  },
440
468
  watch: {
441
469
  run: async (c) => { await (await import('./cli/transfer.js')).handleWatch(c); },
442
470
  usage: VERB_USAGE.watch,
471
+ flags: VERB_FLAGS.watch,
443
472
  },
444
473
  learn: {
445
474
  run: async ({ hippoRoot, flags }) => { (await import('./cli/transfer.js')).cmdLearn(hippoRoot, flags); },
446
475
  scoped: true,
447
476
  usage: VERB_USAGE.learn,
477
+ flags: VERB_FLAGS.learn,
448
478
  },
449
479
  promote: {
450
480
  run: async (c) => { await (await import('./cli/transfer.js')).handlePromote(c); },
451
481
  scoped: true,
452
482
  usage: VERB_USAGE.promote,
483
+ flags: VERB_FLAGS.promote,
453
484
  },
454
485
  sync: {
455
486
  run: async ({ hippoRoot, flags }) => { (await import('./cli/transfer.js')).cmdSync(hippoRoot, flags); },
456
487
  usage: VERB_USAGE.sync,
488
+ flags: VERB_FLAGS.sync,
457
489
  },
458
490
  share: {
459
491
  run: async (c) => { await (await import('./cli/transfer.js')).handleShare(c); },
460
492
  usage: VERB_USAGE.share,
493
+ flags: VERB_FLAGS.share,
461
494
  },
462
495
  peers: {
463
496
  run: async (c) => { await (await import('./cli/transfer.js')).handlePeers(c); },
464
497
  usage: VERB_USAGE.peers,
498
+ flags: VERB_FLAGS.peers,
465
499
  },
466
500
  import: {
467
501
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/transfer.js')).cmdImport(hippoRoot, args, flags); },
468
502
  usage: VERB_USAGE.import,
503
+ flags: VERB_FLAGS.import,
469
504
  },
470
505
  export: {
471
506
  run: async (c) => { await (await import('./cli/transfer.js')).handleExport(c); },
472
507
  usage: VERB_USAGE.export,
508
+ flags: VERB_FLAGS.export,
473
509
  },
474
510
  capture: {
475
511
  run: async (c) => { await (await import('./cli/session-hooks.js')).handleCapture(c); },
476
512
  usage: VERB_USAGE.capture,
513
+ flags: VERB_FLAGS.capture,
477
514
  },
478
515
  dashboard: {
479
516
  run: async (c) => { await (await import('./cli/serve.js')).handleDashboard(c); },
480
517
  usage: VERB_USAGE.dashboard,
518
+ flags: VERB_FLAGS.dashboard,
481
519
  },
482
520
  wm: {
483
521
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/continuity.js')).cmdWm(hippoRoot, args, flags); },
484
522
  usage: VERB_USAGE.wm,
523
+ flags: VERB_FLAGS.wm,
485
524
  },
486
525
  mcp: {
487
526
  run: async () => { await (await import('./cli/serve.js')).handleMcp(); },
488
527
  usage: VERB_USAGE.mcp,
528
+ flags: VERB_FLAGS.mcp,
489
529
  },
490
530
  serve: {
491
531
  run: async (c) => { await (await import('./cli/serve.js')).handleServe(c); },
492
532
  usage: VERB_USAGE.serve,
533
+ flags: VERB_FLAGS.serve,
493
534
  },
494
535
  invalidate: {
495
536
  run: async (c) => { await (await import('./cli/curate.js')).handleInvalidate(c); },
496
537
  usage: VERB_USAGE.invalidate,
538
+ flags: VERB_FLAGS.invalidate,
497
539
  },
498
540
  decide: {
499
541
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdDecide(hippoRoot, args, flags); },
500
542
  usage: VERB_USAGE.decide,
543
+ flags: VERB_FLAGS.decide,
501
544
  },
502
545
  incident: {
503
546
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/decisions.js')).cmdIncident(hippoRoot, args, flags); },
504
547
  usage: VERB_USAGE.incident,
548
+ flags: VERB_FLAGS.incident,
505
549
  },
506
550
  process: {
507
551
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdProcess(hippoRoot, args, flags); },
508
552
  usage: VERB_USAGE.process,
553
+ flags: VERB_FLAGS.process,
509
554
  },
510
555
  policy: {
511
556
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdPolicy(hippoRoot, args, flags); },
512
557
  usage: VERB_USAGE.policy,
558
+ flags: VERB_FLAGS.policy,
513
559
  },
514
560
  skill: {
515
561
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/playbooks.js')).cmdSkill(hippoRoot, args, flags); },
516
562
  usage: VERB_USAGE.skill,
563
+ flags: VERB_FLAGS.skill,
517
564
  },
518
565
  brief: {
519
566
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdProjectBrief(hippoRoot, args, flags); },
520
567
  aliases: ['project-brief'],
521
568
  usage: VERB_USAGE.brief,
569
+ flags: VERB_FLAGS.brief,
522
570
  },
523
571
  note: {
524
572
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdCustomerNote(hippoRoot, args, flags); },
525
573
  aliases: ['customer-note'],
526
574
  usage: VERB_USAGE.note,
575
+ flags: VERB_FLAGS.note,
527
576
  },
528
577
  graph: {
529
578
  run: async ({ hippoRoot, args, flags }) => { (await import('./cli/briefs.js')).cmdGraph(hippoRoot, args, flags); },
530
579
  usage: VERB_USAGE.graph,
580
+ flags: VERB_FLAGS.graph,
531
581
  },
532
582
  };
533
583
  const COMMAND_INDEX = new Map(Object.entries(COMMANDS).flatMap(([verb, spec]) => [verb, ...(spec.aliases ?? [])].map((name) => [name, spec])));
@@ -577,70 +627,82 @@ function printHelp(command, args) {
577
627
  // ---------------------------------------------------------------------------
578
628
  // Entry point
579
629
  // ---------------------------------------------------------------------------
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. */
630
+ function printVersion() {
631
+ const __filename_local = fileURLToPath(import.meta.url);
632
+ const __dirname_local = path.dirname(__filename_local);
633
+ const pkgJson = fs.readFileSync(path.join(__dirname_local, '..', 'package.json'), 'utf-8');
634
+ const { version } = JSON.parse(pkgJson);
635
+ console.log(version);
636
+ process.exit(0);
637
+ }
638
+ /** A value-less --scope parses as boolean true, which consumers coerced to the scope 'true' or dropped;
639
+ * reject it once here so every command, thin-client relays included, sees only a non-empty string. */
640
+ function rejectEmptyScope(flags) {
601
641
  if ('scope' in flags && (typeof flags['scope'] !== 'string' || !flags['scope'].trim())) {
602
642
  printError('--scope requires a non-empty value (e.g. --scope slack:private:C1).');
603
643
  process.exit(1);
604
644
  }
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)
645
+ }
646
+ // parseArgs stores a value-less flag as boolean true, and NaN then survives every
647
+ // downstream guard because each comparison against it is false.
648
+ function rejectNonNumericFlags(flags, declared) {
649
+ for (const [key, raw] of Object.entries(flags)) {
650
+ if (flagKind(declared, key) !== 'number')
614
651
  continue;
615
652
  if (typeof raw !== 'string' || !raw.trim() || !Number.isFinite(Number(raw))) {
616
653
  printError(`--${key} requires a numeric value.`);
617
654
  process.exit(1);
618
655
  }
619
656
  }
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') {
657
+ }
658
+ // Reject rather than coerce: consumers read --dry-run both as Boolean() and === true,
659
+ // so no single coercion of an inline value would be correct for every one of them.
660
+ function rejectValuedSwitches(flags, declared) {
661
+ for (const [key, raw] of Object.entries(flags)) {
662
+ if (flagKind(declared, key) === 'switch' && typeof raw !== 'boolean') {
624
663
  printError(`--${key} takes no value`);
625
664
  process.exit(1);
626
665
  }
627
666
  }
667
+ }
668
+ function checkUnknownFlags(command, flags, declared) {
628
669
  // 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.`);
670
+ if (command === 'card')
671
+ return;
672
+ const flagNames = (keys) => keys.map((key) => `--${key}`).join(', ');
673
+ const unknown = Object.keys(flags).filter((key) => !isKnownFlag(key));
674
+ if (unknown.length > 0 && DESTRUCTIVE_COMMANDS.has(command)) {
675
+ printError(`Unknown flag ${flagNames(unknown)} for hippo ${command}. Nothing was changed.`);
676
+ process.exit(2);
637
677
  }
678
+ // main() refuses --dry-run by name on a verb without one, so that flag is not also called ignored.
679
+ const ignored = declared ? undeclaredFlags(declared, Object.keys(flags)).filter((key) => key !== 'dry-run') : unknown;
680
+ if (ignored.length > 0)
681
+ printError(`hippo: ignoring unknown flag ${flagNames(ignored)}. A later release will reject it.`);
682
+ }
683
+ async function main(command, args, flags, hippoRoot) {
684
+ if (command === '--version' || command === '-v' || flags['version'])
685
+ printVersion();
686
+ if (command === '' || command === 'help' || command === '--help' || command === '-h') {
687
+ printUsage();
688
+ return;
689
+ }
690
+ // Before every other step, so help never opens a store, installs a hook or starts a server.
691
+ if (Object.hasOwn(flags, 'help')) {
692
+ printHelp(command, args);
693
+ return;
694
+ }
695
+ const spec = COMMAND_INDEX.get(command);
696
+ maybeRepairCodexWrapper(command, flags);
697
+ rejectEmptyScope(flags);
698
+ rejectNonNumericFlags(flags, spec?.flags);
699
+ rejectValuedSwitches(flags, spec?.flags);
700
+ checkUnknownFlags(command, flags, spec?.flags);
638
701
  const refusal = Object.hasOwn(flags, 'dry-run') ? dryRunRefusal(command, args, flags) : null;
639
702
  if (refusal) {
640
703
  printError(refusal);
641
704
  process.exit(2);
642
705
  }
643
- const spec = COMMAND_INDEX.get(command);
644
706
  if (!spec) {
645
707
  printError(`Unknown command: ${command}`);
646
708
  printUsage();
@@ -656,6 +718,11 @@ export async function runCli(argv = process.argv) {
656
718
  }
657
719
  catch (err) {
658
720
  printError('Error:', isStoreBusy(err) ? STORE_BUSY_MESSAGE : err instanceof Error ? err.message : err);
721
+ // The message alone rarely says where it came from; debug is the level that asks for the rest.
722
+ if (isLevelEnabled('debug')) {
723
+ const { errorClass, stack } = errorFields(err);
724
+ printError(` thrown as ${errorClass}${stack ? `\n${stack}` : ''}`);
725
+ }
659
726
  process.exit(1);
660
727
  }
661
728
  }