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
@@ -1,23 +1,21 @@
1
1
  // First-class object verbs for predictions, decisions and incidents.
2
2
  import { writeEntry } from '../store/entry-writes.js';
3
3
  import { readEntry } from '../store/entry-reads.js';
4
- import { extractPathTags } from '../path-context.js';
5
- import * as predictionsModule from '../predictions/store.js';
6
- import * as decisionsModule from '../decisions.js';
7
- import * as incidentsModule from '../incidents.js';
8
- import { resolveTenantId } from '../tenant.js';
4
+ import { extractPathTags } from '../search/path-context.js';
5
+ import * as predictionsModule from '../store/predictions.js';
6
+ import * as decisionsModule from '../objects/decisions.js';
7
+ import * as incidentsModule from '../objects/incidents.js';
8
+ import { resolveTenantId } from '../store/tenant.js';
9
9
  import { printError } from './output.js';
10
+ import { nonEmptyStringFlag, parseListLimit, flagIsTrue, stringFlag } from './flag-values.js';
10
11
  import { requireInit } from './shared.js';
11
- function parseListLimit(flags) {
12
- const limitRaw = flags['limit'];
13
- const limit = limitRaw !== undefined ? parseInt(String(limitRaw), 10) : 100;
14
- if (!Number.isFinite(limit) || limit <= 0) {
15
- printError(`Invalid --limit: "${limitRaw}". Must be a positive integer.`);
16
- process.exit(1);
17
- }
18
- return limit;
19
- }
20
- /** parseInt-based id parse for predictions and decisions; incidents use the strict parse below. */
12
+ import { closeObject, foundOrExit, idArgOrExit, listObjects, printLifecycleTail, requireStatus } from './object-verbs.js';
13
+ import { errorMessage } from '../util/log.js';
14
+ const BASERATE_DECIMALS = 3;
15
+ const DECISION = { cmd: 'decide', noun: 'Decision', idLabel: 'decision' };
16
+ const INCIDENT = { cmd: 'incident', noun: 'Incident', idLabel: 'incident' };
17
+ const PREDICTION_NOUN = 'Prediction';
18
+ // Lenient on purpose (parseInt reads "1abc" as 1) until the next major version; incidents use the strict parser.
21
19
  function parseObjectId(idRaw, noun) {
22
20
  const id = parseInt(String(idRaw), 10);
23
21
  if (!Number.isFinite(id) || id <= 0) {
@@ -30,13 +28,8 @@ function parseObjectId(idRaw, noun) {
30
28
  // Prediction first-class object
31
29
  // ---------------------------------------------------------------------------
32
30
  function predictClose(hippoRoot, tenantId, args, flags) {
33
- const idRaw = args[1];
34
- if (!idRaw) {
35
- printError('Usage: hippo predict close <id> --state <closed|closed-unknown> [--actual <v>] [--note "..."]');
36
- process.exit(1);
37
- }
38
- const id = parseObjectId(idRaw, 'prediction');
39
- const stateRaw = typeof flags['state'] === 'string' ? flags['state'].trim() : '';
31
+ const id = idArgOrExit(args, 'Usage: hippo predict close <id> --state <closed|closed-unknown> [--actual <v>] [--note "..."]', 'prediction', parseObjectId);
32
+ const stateRaw = (stringFlag(flags, 'state') ?? '').trim();
40
33
  if (!predictionsModule.VALID_CLOSURE_STATES.has(stateRaw) || stateRaw === 'open') {
41
34
  printError(`Invalid --state: "${stateRaw}". Must be one of: closed | closed-unknown.`);
42
35
  process.exit(1);
@@ -47,8 +40,7 @@ function predictClose(hippoRoot, tenantId, args, flags) {
47
40
  printError(`Invalid --actual: "${actualRaw}". Must be a number.`);
48
41
  process.exit(1);
49
42
  }
50
- const noteRaw = flags['note'];
51
- const closureNote = typeof noteRaw === 'string' ? noteRaw : undefined;
43
+ const closureNote = stringFlag(flags, 'note');
52
44
  const closed = predictionsModule.closePrediction(hippoRoot, tenantId, id, {
53
45
  closureState: stateRaw,
54
46
  actualValue,
@@ -68,25 +60,20 @@ function loadPredictionList(hippoRoot, tenantId, status, classTag, limit) {
68
60
  ? predictionsModule.loadPredictionsByClass(hippoRoot, tenantId, classTag, { limit })
69
61
  : predictionsModule.loadAllPredictions(hippoRoot, tenantId, { limit });
70
62
  }
71
- if (!predictionsModule.VALID_CLOSURE_STATES.has(status)) {
72
- printError(`Invalid --status: "${status}". Must be one of: open | closed | closed-unknown | all.`);
73
- process.exit(1);
74
- }
63
+ const closureState = requireStatus(status, predictionsModule.VALID_CLOSURE_STATES);
75
64
  if (!classTag) {
76
65
  // status filter without class — scan all classes is more complex; v1 requires --class for non-default status
77
66
  printError('--status filter (non-open) requires --class to be set.');
78
67
  process.exit(1);
79
68
  }
80
69
  return predictionsModule.loadPredictionsByClass(hippoRoot, tenantId, classTag, {
81
- closureState: status,
70
+ closureState,
82
71
  limit,
83
72
  });
84
73
  }
85
74
  function predictList(hippoRoot, tenantId, flags) {
86
- const classTagRaw = flags['class'];
87
- const classTag = typeof classTagRaw === 'string' ? classTagRaw.trim() : '';
88
- const statusRaw = flags['status'];
89
- const status = typeof statusRaw === 'string' ? statusRaw.trim() : 'all';
75
+ const classTag = stringFlag(flags, 'class')?.trim() ?? '';
76
+ const status = stringFlag(flags, 'status')?.trim() ?? 'all';
90
77
  const limit = parseListLimit(flags);
91
78
  const results = loadPredictionList(hippoRoot, tenantId, status, classTag, limit);
92
79
  if (results.length === 0) {
@@ -105,17 +92,8 @@ function predictList(hippoRoot, tenantId, flags) {
105
92
  }
106
93
  }
107
94
  function predictShow(hippoRoot, tenantId, args) {
108
- const idRaw = args[1];
109
- if (!idRaw) {
110
- printError('Usage: hippo predict show <id>');
111
- process.exit(1);
112
- }
113
- const id = parseObjectId(idRaw, 'prediction');
114
- const pred = predictionsModule.loadPredictionById(hippoRoot, tenantId, id);
115
- if (!pred) {
116
- printError(`Prediction ${id} not found.`);
117
- process.exit(1);
118
- }
95
+ const id = idArgOrExit(args, 'Usage: hippo predict show <id>', 'prediction', parseObjectId);
96
+ const pred = foundOrExit(predictionsModule.loadPredictionById(hippoRoot, tenantId, id), PREDICTION_NOUN, id);
119
97
  console.log(`Prediction #${pred.id}`);
120
98
  console.log(` class: ${pred.classTag}`);
121
99
  console.log(` claim: ${pred.claimText}`);
@@ -136,12 +114,12 @@ function predictShow(hippoRoot, tenantId, args) {
136
114
  }
137
115
  function predictBaserate(hippoRoot, tenantId, flags) {
138
116
  // Reference-class / planning-fallacy detector
139
- const classTagRaw = flags['class'];
140
- if (typeof classTagRaw !== 'string' || !classTagRaw.trim()) {
117
+ const classTag = stringFlag(flags, 'class')?.trim();
118
+ if (!classTag) {
141
119
  printError('Usage: hippo predict baserate --class <c>');
142
120
  process.exit(1);
143
121
  }
144
- const baserate = predictionsModule.computePredictionBaserate(hippoRoot, tenantId, classTagRaw.trim());
122
+ const baserate = predictionsModule.computePredictionBaserate(hippoRoot, tenantId, classTag);
145
123
  if (baserate.nClosed === 0) {
146
124
  console.log(`No closed predictions in class "${baserate.classTag}" yet.`);
147
125
  console.log(` Create one with: hippo predict "<claim>" --class ${baserate.classTag} --estimate N`);
@@ -152,15 +130,15 @@ function predictBaserate(hippoRoot, tenantId, flags) {
152
130
  console.log(` n_closed: ${baserate.nClosed}`);
153
131
  console.log(` n_ratio_eligible: ${baserate.nRatioEligible}`);
154
132
  if (baserate.meanEstimate !== null)
155
- console.log(` mean_estimate: ${baserate.meanEstimate.toFixed(3)}`);
133
+ console.log(` mean_estimate: ${baserate.meanEstimate.toFixed(BASERATE_DECIMALS)}`);
156
134
  if (baserate.meanActual !== null)
157
- console.log(` mean_actual: ${baserate.meanActual.toFixed(3)}`);
135
+ console.log(` mean_actual: ${baserate.meanActual.toFixed(BASERATE_DECIMALS)}`);
158
136
  if (baserate.meanRatio !== null)
159
- console.log(` mean_ratio: ${baserate.meanRatio.toFixed(3)}x`);
137
+ console.log(` mean_ratio: ${baserate.meanRatio.toFixed(BASERATE_DECIMALS)}x`);
160
138
  if (baserate.p50Ratio !== null)
161
- console.log(` p50_ratio: ${baserate.p50Ratio.toFixed(3)}x`);
139
+ console.log(` p50_ratio: ${baserate.p50Ratio.toFixed(BASERATE_DECIMALS)}x`);
162
140
  if (baserate.mae !== null)
163
- console.log(` mae: ${baserate.mae.toFixed(3)}`);
141
+ console.log(` mae: ${baserate.mae.toFixed(BASERATE_DECIMALS)}`);
164
142
  }
165
143
  export function cmdPredict(hippoRoot, args, flags) {
166
144
  requireInit(hippoRoot);
@@ -185,22 +163,19 @@ function predictCreate(hippoRoot, tenantId, claimText, flags) {
185
163
  printError(' hippo predict show <id>');
186
164
  process.exit(1);
187
165
  }
188
- const classTagRaw = flags['class'];
189
- if (typeof classTagRaw !== 'string' || !classTagRaw.trim()) {
166
+ const classTag = stringFlag(flags, 'class')?.trim();
167
+ if (!classTag) {
190
168
  printError('--class is required for prediction creation.');
191
169
  process.exit(1);
192
170
  }
193
- const classTag = classTagRaw.trim();
194
171
  const estimateRaw = flags['estimate'];
195
172
  const estimateValue = estimateRaw !== undefined ? Number(estimateRaw) : undefined;
196
173
  if (estimateRaw !== undefined && !Number.isFinite(estimateValue)) {
197
174
  printError(`Invalid --estimate: "${estimateRaw}". Must be a number.`);
198
175
  process.exit(1);
199
176
  }
200
- const unitRaw = flags['unit'];
201
- const estimateUnit = typeof unitRaw === 'string' ? unitRaw : undefined;
202
- const targetRaw = flags['target'];
203
- const targetDate = typeof targetRaw === 'string' ? targetRaw : undefined;
177
+ const estimateUnit = stringFlag(flags, 'unit');
178
+ const targetDate = stringFlag(flags, 'target');
204
179
  const created = predictionsModule.savePrediction(hippoRoot, tenantId, {
205
180
  classTag,
206
181
  claimText,
@@ -212,73 +187,33 @@ function predictCreate(hippoRoot, tenantId, claimText, flags) {
212
187
  if (created.memoryId)
213
188
  console.log(` memory: ${created.memoryId}`);
214
189
  }
190
+ function printDecisionRow(d) {
191
+ const supPart = d.supersededBy !== null ? ` superseded_by=#${d.supersededBy}` : '';
192
+ console.log(`#${d.id} [${d.status}]${supPart} memory=${d.memoryId ?? '-'}`);
193
+ console.log(` ${d.decisionText}`);
194
+ if (d.context)
195
+ console.log(` context: ${d.context}`);
196
+ }
215
197
  function decideList(hippoRoot, tenantId, flags) {
216
- const statusRaw = flags['status'];
217
- const status = typeof statusRaw === 'string' ? statusRaw.trim() : 'all';
218
- const limit = parseListLimit(flags);
219
- let results;
220
- if (status === 'all') {
221
- results = decisionsModule.loadDecisions(hippoRoot, tenantId, { limit });
222
- }
223
- else {
224
- if (!decisionsModule.VALID_DECISION_STATES.has(status)) {
225
- printError(`Invalid --status: "${status}". Must be one of: active | superseded | closed | all.`);
226
- process.exit(1);
227
- }
228
- results = decisionsModule.loadDecisions(hippoRoot, tenantId, {
229
- status: status,
230
- limit,
231
- });
232
- }
233
- if (results.length === 0) {
234
- console.log('No decisions.');
235
- return;
236
- }
237
- console.log(`Found ${results.length} decisions:\n`);
238
- for (const d of results) {
239
- const supPart = d.supersededBy !== null ? ` superseded_by=#${d.supersededBy}` : '';
240
- console.log(`#${d.id} [${d.status}]${supPart} memory=${d.memoryId ?? '-'}`);
241
- console.log(` ${d.decisionText}`);
242
- if (d.context)
243
- console.log(` context: ${d.context}`);
244
- }
198
+ listObjects(flags, {
199
+ plural: 'decisions',
200
+ states: decisionsModule.VALID_DECISION_STATES,
201
+ load: (opts) => decisionsModule.loadDecisions(hippoRoot, tenantId, opts),
202
+ printRow: printDecisionRow,
203
+ });
245
204
  }
246
205
  function decideGet(hippoRoot, tenantId, args) {
247
- const idRaw = args[1];
248
- if (!idRaw) {
249
- printError('Usage: hippo decide get <id>');
250
- process.exit(1);
251
- }
252
- const id = parseObjectId(idRaw, 'decision');
253
- const decision = decisionsModule.loadDecisionById(hippoRoot, tenantId, id);
254
- if (!decision) {
255
- printError(`Decision ${id} not found.`);
256
- process.exit(1);
257
- }
206
+ const id = idArgOrExit(args, 'Usage: hippo decide get <id>', DECISION.idLabel, parseObjectId);
207
+ const decision = foundOrExit(decisionsModule.loadDecisionById(hippoRoot, tenantId, id), DECISION.noun, id);
258
208
  console.log(`Decision #${decision.id}`);
259
209
  console.log(` status: ${decision.status}`);
260
210
  console.log(` text: ${decision.decisionText}`);
261
211
  if (decision.context)
262
212
  console.log(` context: ${decision.context}`);
263
- if (decision.supersededBy !== null)
264
- console.log(` superseded_by: #${decision.supersededBy}`);
265
- if (decision.supersededAt)
266
- console.log(` superseded_at: ${decision.supersededAt}`);
267
- if (decision.closedAt)
268
- console.log(` closed_at: ${decision.closedAt}`);
269
- if (decision.memoryId)
270
- console.log(` memory: ${decision.memoryId}`);
271
- console.log(` created: ${decision.createdAt}`);
213
+ printLifecycleTail(decision);
272
214
  }
273
215
  function decideClose(hippoRoot, tenantId, args) {
274
- const idRaw = args[1];
275
- if (!idRaw) {
276
- printError('Usage: hippo decide close <id>');
277
- process.exit(1);
278
- }
279
- const id = parseObjectId(idRaw, 'decision');
280
- const closed = decisionsModule.closeDecision(hippoRoot, tenantId, id);
281
- console.log(`Decision #${closed.id} closed.`);
216
+ closeObject(args, DECISION, (id) => decisionsModule.closeDecision(hippoRoot, tenantId, id), parseObjectId);
282
217
  }
283
218
  export function cmdDecide(hippoRoot, args, flags) {
284
219
  requireInit(hippoRoot);
@@ -294,22 +229,16 @@ export function cmdDecide(hippoRoot, args, flags) {
294
229
  decideCreate(hippoRoot, tenantId, subcommand, flags);
295
230
  }
296
231
  function decideCreate(hippoRoot, tenantId, decisionText, flags) {
297
- if (!decisionText) {
298
- printError('Usage: hippo decide "<decision>" [--context "<why>"] [--supersedes <memory-id>]');
299
- printError(' hippo decide list [--status active|superseded|closed|all] [--limit N]');
300
- printError(' hippo decide get <id>');
301
- printError(' hippo decide close <id>');
302
- process.exit(1);
303
- }
304
- const contextRaw = flags['context'];
305
- const context = typeof contextRaw === 'string' && contextRaw ? contextRaw : undefined;
232
+ if (!decisionText)
233
+ exitWithDecideUsage();
234
+ const context = nonEmptyStringFlag(flags, 'context');
306
235
  // A value-less `--supersedes` asks to supersede but gives no memory id: reject it rather
307
236
  // than silently creating a non-superseding decision.
308
- if (flags['supersedes'] === true) {
237
+ if (flagIsTrue(flags, 'supersedes')) {
309
238
  printError('--supersedes requires a memory id, e.g. hippo decide "<text>" --supersedes mem_abc123.');
310
239
  process.exit(1);
311
240
  }
312
- const supersedesMemId = typeof flags['supersedes'] === 'string' ? flags['supersedes'] : null;
241
+ const supersedesMemId = stringFlag(flags, 'supersedes') ?? null;
313
242
  // Backward-compat: --supersedes takes a MEMORY id. Validate it exists and
314
243
  // resolve it to the active decision row (if any). Commit the
315
244
  // canonical table create+supersede FIRST (inside saveDecision's SAVEPOINT),
@@ -333,88 +262,62 @@ function decideCreate(hippoRoot, tenantId, decisionText, flags) {
333
262
  supersedesDecisionId,
334
263
  extraTags: decisionPathTags,
335
264
  });
336
- // Legacy memory-weaken (best-effort, LAST): half-life halved, marked stale +
337
- // 'superseded' tag. Preserves the exact pre-promotion behavior for the memory
338
- // mirror; the canonical table supersession already committed above.
339
- if (oldEntry) {
340
- // Best-effort: saveDecision already committed. Failing here would make a retry find no active
341
- // decision for the old memory and create a duplicate active successor, so warn instead.
342
- try {
343
- oldEntry.half_life_days = Math.max(1, Math.floor(oldEntry.half_life_days / 2));
344
- oldEntry.confidence = 'stale';
345
- if (!oldEntry.tags.includes('superseded'))
346
- oldEntry.tags.push('superseded');
347
- writeEntry(hippoRoot, oldEntry);
348
- }
349
- catch (e) {
350
- printError(` warning: decision recorded and superseded, but failed to weaken the prior memory ${supersedesMemId}: ${e.message}`);
351
- }
352
- }
265
+ if (oldEntry)
266
+ weakenSupersededMemory(hippoRoot, oldEntry, supersedesMemId);
353
267
  console.log(`Decision recorded: #${created.id}`);
354
268
  if (created.memoryId)
355
269
  console.log(` memory: ${created.memoryId}`);
356
- if (supersedesMemId) {
357
- const tail = supersedesDecisionId !== undefined
358
- ? ` (decision #${supersedesDecisionId} superseded)`
359
- : ' (no active decision row; memory weakened only)';
360
- console.log(` supersedes memory: ${supersedesMemId}${tail}`);
361
- }
270
+ if (supersedesMemId)
271
+ printSupersedes(supersedesMemId, supersedesDecisionId);
362
272
  }
363
- // Strict positive-integer parse for incident id args. parseInt() alone accepts
364
- // trailing junk ("1abc" -> 1), which would let a mutating subcommand (close/
365
- // resolve) silently hit the wrong row; require the whole arg to be digits.
366
- function parsePositiveIncidentId(idRaw) {
367
- const s = String(idRaw ?? '').trim();
368
- const id = parseInt(s, 10);
369
- if (!/^\d+$/.test(s) || id <= 0) {
370
- printError(`Invalid incident id: "${idRaw}" (expected a positive integer).`);
371
- process.exit(1);
273
+ function exitWithDecideUsage() {
274
+ printError('Usage: hippo decide "<decision>" [--context "<why>"] [--supersedes <memory-id>]');
275
+ printError(' hippo decide list [--status active|superseded|closed|all] [--limit N]');
276
+ printError(' hippo decide get <id>');
277
+ printError(' hippo decide close <id>');
278
+ process.exit(1);
279
+ }
280
+ function weakenSupersededMemory(hippoRoot, oldEntry, supersedesMemId) {
281
+ // Legacy memory-weaken (best-effort, LAST): half-life halved, marked stale +
282
+ // 'superseded' tag. Preserves the exact pre-promotion behavior for the memory
283
+ // mirror; the canonical table supersession already committed above.
284
+ // Best-effort: saveDecision already committed. Failing here would make a retry find no active
285
+ // decision for the old memory and create a duplicate active successor, so warn instead.
286
+ try {
287
+ oldEntry.half_life_days = Math.max(1, Math.floor(oldEntry.half_life_days / 2));
288
+ oldEntry.confidence = 'stale';
289
+ if (!oldEntry.tags.includes('superseded'))
290
+ oldEntry.tags.push('superseded');
291
+ writeEntry(hippoRoot, oldEntry);
292
+ }
293
+ catch (e) {
294
+ printError(` warning: decision recorded and superseded, but failed to weaken the prior memory ${supersedesMemId}: ${errorMessage(e)}`);
372
295
  }
373
- return id;
296
+ }
297
+ function printSupersedes(supersedesMemId, supersedesDecisionId) {
298
+ const tail = supersedesDecisionId !== undefined
299
+ ? ` (decision #${supersedesDecisionId} superseded)`
300
+ : ' (no active decision row; memory weakened only)';
301
+ console.log(` supersedes memory: ${supersedesMemId}${tail}`);
302
+ }
303
+ function printIncidentRow(inc) {
304
+ const linkPart = inc.linkedMemoryIds.length > 0 ? ` links=${inc.linkedMemoryIds.length}` : '';
305
+ console.log(`#${inc.id} [${inc.status}]${linkPart} memory=${inc.memoryId ?? '-'}`);
306
+ console.log(` ${inc.incidentText}`);
307
+ if (inc.context)
308
+ console.log(` context: ${inc.context}`);
374
309
  }
375
310
  function incidentList(hippoRoot, tenantId, flags) {
376
- const statusRaw = flags['status'];
377
- const status = typeof statusRaw === 'string' ? statusRaw.trim() : 'all';
378
- const limit = parseListLimit(flags);
379
- let results;
380
- if (status === 'all') {
381
- results = incidentsModule.loadIncidents(hippoRoot, tenantId, { limit });
382
- }
383
- else {
384
- if (!incidentsModule.VALID_INCIDENT_STATES.has(status)) {
385
- printError(`Invalid --status: "${status}". Must be one of: open | resolved | closed | all.`);
386
- process.exit(1);
387
- }
388
- results = incidentsModule.loadIncidents(hippoRoot, tenantId, {
389
- status: status,
390
- limit,
391
- });
392
- }
393
- if (results.length === 0) {
394
- console.log('No incidents.');
395
- return;
396
- }
397
- console.log(`Found ${results.length} incidents:\n`);
398
- for (const inc of results) {
399
- const linkPart = inc.linkedMemoryIds.length > 0 ? ` links=${inc.linkedMemoryIds.length}` : '';
400
- console.log(`#${inc.id} [${inc.status}]${linkPart} memory=${inc.memoryId ?? '-'}`);
401
- console.log(` ${inc.incidentText}`);
402
- if (inc.context)
403
- console.log(` context: ${inc.context}`);
404
- }
311
+ listObjects(flags, {
312
+ plural: 'incidents',
313
+ states: incidentsModule.VALID_INCIDENT_STATES,
314
+ load: (opts) => incidentsModule.loadIncidents(hippoRoot, tenantId, opts),
315
+ printRow: printIncidentRow,
316
+ });
405
317
  }
406
318
  function incidentGet(hippoRoot, tenantId, args) {
407
- const idRaw = args[1];
408
- if (!idRaw) {
409
- printError('Usage: hippo incident get <id>');
410
- process.exit(1);
411
- }
412
- const id = parsePositiveIncidentId(idRaw);
413
- const incident = incidentsModule.loadIncidentById(hippoRoot, tenantId, id);
414
- if (!incident) {
415
- printError(`Incident ${id} not found.`);
416
- process.exit(1);
417
- }
319
+ const id = idArgOrExit(args, 'Usage: hippo incident get <id>', INCIDENT.idLabel);
320
+ const incident = foundOrExit(incidentsModule.loadIncidentById(hippoRoot, tenantId, id), INCIDENT.noun, id);
418
321
  console.log(`Incident #${incident.id}`);
419
322
  console.log(` status: ${incident.status}`);
420
323
  console.log(` text: ${incident.incidentText}`);
@@ -434,14 +337,9 @@ function incidentGet(hippoRoot, tenantId, args) {
434
337
  console.log(` created: ${incident.createdAt}`);
435
338
  }
436
339
  function incidentResolve(hippoRoot, tenantId, args, flags) {
437
- const idRaw = args[1];
438
- if (!idRaw) {
439
- printError('Usage: hippo incident resolve <id> --resolution "<text>"');
440
- process.exit(1);
441
- }
442
- const id = parsePositiveIncidentId(idRaw);
443
- const resolutionRaw = flags['resolution'];
444
- if (typeof resolutionRaw !== 'string' || !resolutionRaw.trim()) {
340
+ const id = idArgOrExit(args, 'Usage: hippo incident resolve <id> --resolution "<text>"', INCIDENT.idLabel);
341
+ const resolutionRaw = stringFlag(flags, 'resolution');
342
+ if (!resolutionRaw?.trim()) {
445
343
  printError('--resolution requires a non-empty value, e.g. hippo incident resolve <id> --resolution "root cause fixed".');
446
344
  process.exit(1);
447
345
  }
@@ -449,14 +347,7 @@ function incidentResolve(hippoRoot, tenantId, args, flags) {
449
347
  console.log(`Incident #${resolved.id} resolved.`);
450
348
  }
451
349
  function incidentClose(hippoRoot, tenantId, args) {
452
- const idRaw = args[1];
453
- if (!idRaw) {
454
- printError('Usage: hippo incident close <id>');
455
- process.exit(1);
456
- }
457
- const id = parsePositiveIncidentId(idRaw);
458
- const closed = incidentsModule.closeIncident(hippoRoot, tenantId, id);
459
- console.log(`Incident #${closed.id} closed.`);
350
+ closeObject(args, INCIDENT, (id) => incidentsModule.closeIncident(hippoRoot, tenantId, id));
460
351
  }
461
352
  export function cmdIncident(hippoRoot, args, flags) {
462
353
  requireInit(hippoRoot);
@@ -484,8 +375,7 @@ function incidentCreate(hippoRoot, tenantId, incidentText, flags) {
484
375
  printError(' hippo incident close <id>');
485
376
  process.exit(1);
486
377
  }
487
- const contextRaw = flags['context'];
488
- const context = typeof contextRaw === 'string' && contextRaw ? contextRaw : undefined;
378
+ const context = nonEmptyStringFlag(flags, 'context');
489
379
  // --link is a repeatable flag (collected into an array by parseArgs). A
490
380
  // single --link <id> yields a string; normalize both to string[].
491
381
  const linkRaw = flags['link'];
@@ -1,5 +1,3 @@
1
- import { type CommandContext } from './shared.js';
2
- /** Runs `hippo eval`: --bootstrap writes a corpus, --suite runs the built-in feature eval, else it scores a corpus file. */
3
- export declare function cmdEval(hippoRoot: string, corpusPath: string | null, flags: Record<string, string | boolean | string[]>): Promise<void>;
1
+ import { type CommandContext } from './flag-values.js';
4
2
  export declare function handleEval({ hippoRoot, args, flags }: CommandContext): Promise<void>;
5
3
  //# sourceMappingURL=eval.d.ts.map
package/dist/cli/eval.js CHANGED
@@ -2,16 +2,25 @@
2
2
  import * as path from 'path';
3
3
  import * as fs from 'fs';
4
4
  import { loadAllEntries } from '../store/entry-reads.js';
5
- import { loadConfig } from '../config.js';
6
- import { getGlobalRoot } from '../shared.js';
7
- import { runEval, bootstrapCorpus, compareSummaries } from '../eval.js';
8
- import { runFeatureEval, formatResult, resultToBaseline, detectRegressions } from '../eval-suite.js';
9
- import { PACKAGE_VERSION } from '../version.js';
5
+ import { loadConfig } from '../core/config.js';
6
+ import { getGlobalRoot } from '../sharing/shared.js';
7
+ import { runEval, bootstrapCorpus, compareSummaries } from '../eval/eval.js';
8
+ import { runFeatureEval, formatResult, resultToBaseline, detectRegressions } from '../eval/eval-suite.js';
9
+ import { PACKAGE_VERSION } from '../util/version.js';
10
10
  import { printError } from './output.js';
11
- import { requireInit, fmt } from './shared.js';
11
+ import { requireInit } from './shared.js';
12
+ import { fmt } from './print.js';
13
+ import { boolFlag } from './flag-values.js';
14
+ import { errorMessage } from '../util/log.js';
15
+ const HIT_TOP_K = 10;
16
+ const MAX_FAILING_SHOWN = 10;
17
+ const TOP_IDS_SHOWN = 3;
18
+ const MAX_MISSED_SHOWN = 4;
19
+ const QUERY_PREVIEW_CHARS = 60;
20
+ const MAX_DELTAS_SHOWN = 5;
12
21
  /** Runs `hippo eval`: --bootstrap writes a corpus, --suite runs the built-in feature eval, else it scores a corpus file. */
13
- export async function cmdEval(hippoRoot, corpusPath, flags) {
14
- const asJson = Boolean(flags['json']);
22
+ async function cmdEval(hippoRoot, corpusPath, flags) {
23
+ const asJson = boolFlag(flags, 'json');
15
24
  const minMrr = flags['min-mrr'] !== undefined ? parseFloat(String(flags['min-mrr'])) : null;
16
25
  const comparePath = flags['compare'] ? String(flags['compare']) : null;
17
26
  // Suite mode doesn't need an initialized store
@@ -26,6 +35,21 @@ export async function cmdEval(hippoRoot, corpusPath, flags) {
26
35
  await runEvalSuite(hippoRoot, flags, asJson, minMrr);
27
36
  return;
28
37
  }
38
+ const summary = await runCorpusEval(hippoRoot, corpusPath, entries, flags);
39
+ if (asJson) {
40
+ console.log(JSON.stringify(summary, null, 2));
41
+ }
42
+ else {
43
+ printEvalSummary(summary, boolFlag(flags, 'show-cases'));
44
+ }
45
+ if (minMrr !== null && summary.meanMrr < minMrr) {
46
+ printError(`MRR ${fmt(summary.meanMrr, 4)} below threshold ${minMrr}`);
47
+ process.exit(1);
48
+ }
49
+ if (comparePath)
50
+ printEvalCompare(summary, comparePath, asJson);
51
+ }
52
+ async function runCorpusEval(hippoRoot, corpusPath, entries, flags) {
29
53
  const cases = readCorpus(corpusPath);
30
54
  const globalRoot = getGlobalRoot();
31
55
  const localBump = flags['equal-sources']
@@ -33,7 +57,7 @@ export async function cmdEval(hippoRoot, corpusPath, flags) {
33
57
  : flags['local-bump'] !== undefined
34
58
  ? parseFloat(String(flags['local-bump']))
35
59
  : loadConfig(hippoRoot).search.localBump;
36
- const summary = await runEval(cases, entries, {
60
+ return runEval(cases, entries, {
37
61
  hippoRoot,
38
62
  globalRoot,
39
63
  mmr: !flags['no-mmr'],
@@ -41,18 +65,6 @@ export async function cmdEval(hippoRoot, corpusPath, flags) {
41
65
  embeddingWeight: flags['embedding-weight'] !== undefined ? parseFloat(String(flags['embedding-weight'])) : undefined,
42
66
  localBump,
43
67
  });
44
- if (asJson) {
45
- console.log(JSON.stringify(summary, null, 2));
46
- }
47
- else {
48
- printEvalSummary(summary, Boolean(flags['show-cases']));
49
- }
50
- if (minMrr !== null && summary.meanMrr < minMrr) {
51
- printError(`MRR ${fmt(summary.meanMrr, 4)} below threshold ${minMrr}`);
52
- process.exit(1);
53
- }
54
- if (comparePath)
55
- printEvalCompare(summary, comparePath, asJson);
56
68
  }
57
69
  /** Bootstrap mode: emit a synthetic corpus built from the store's own memories. */
58
70
  function writeBootstrapCorpus(entries, flags) {
@@ -119,7 +131,7 @@ function readCorpus(corpusPath) {
119
131
  throw new Error('Corpus JSON must be an array or { cases: [...] }');
120
132
  }
121
133
  catch (err) {
122
- printError(`Failed to read corpus: ${err instanceof Error ? err.message : err}`);
134
+ printError(`Failed to read corpus: ${errorMessage(err)}`);
123
135
  process.exit(1);
124
136
  }
125
137
  return cases;
@@ -137,14 +149,14 @@ function printEvalSummary(summary, showCases) {
137
149
  for (const c of summary.cases) {
138
150
  const exp = c.case.expectedIds.length;
139
151
  const expectedSet = new Set(c.case.expectedIds);
140
- const hitTop10 = c.returnedIds.slice(0, 10).filter((id) => expectedSet.has(id));
141
- const missed = c.case.expectedIds.filter((id) => !c.returnedIds.slice(0, 10).includes(id));
152
+ const hitTop10 = c.returnedIds.slice(0, HIT_TOP_K).filter((id) => expectedSet.has(id));
153
+ const missed = c.case.expectedIds.filter((id) => !c.returnedIds.slice(0, HIT_TOP_K).includes(id));
142
154
  console.log();
143
155
  console.log(`[${c.case.id}] R@10=${fmt(c.recallAt10, 2)} MRR=${fmt(c.mrr, 2)} expected=${exp} hit=${hitTop10.length}`);
144
156
  console.log(` query: ${c.case.query}`);
145
- console.log(` top 3: ${c.returnedIds.slice(0, 3).join(', ') || '(none)'}`);
157
+ console.log(` top 3: ${c.returnedIds.slice(0, TOP_IDS_SHOWN).join(', ') || '(none)'}`);
146
158
  if (missed.length > 0) {
147
- const shown = missed.slice(0, 4);
159
+ const shown = missed.slice(0, MAX_MISSED_SHOWN);
148
160
  const more = missed.length > shown.length ? ` +${missed.length - shown.length} more` : '';
149
161
  console.log(` missed: ${shown.join(', ')}${more}`);
150
162
  }
@@ -154,8 +166,8 @@ function printEvalSummary(summary, showCases) {
154
166
  const failing = summary.cases.filter((c) => c.mrr === 0);
155
167
  if (failing.length > 0) {
156
168
  console.log(`${failing.length} case(s) returned zero relevant results:`);
157
- for (const f of failing.slice(0, 10)) {
158
- console.log(` [${f.case.id}] "${f.case.query.slice(0, 60)}"`);
169
+ for (const f of failing.slice(0, MAX_FAILING_SHOWN)) {
170
+ console.log(` [${f.case.id}] "${f.case.query.slice(0, QUERY_PREVIEW_CHARS)}"`);
159
171
  }
160
172
  if (failing.length > 10)
161
173
  console.log(` ...and ${failing.length - 10} more`);
@@ -171,7 +183,7 @@ function printEvalCompare(summary, comparePath, asJson) {
171
183
  baseline = JSON.parse(fs.readFileSync(comparePath, 'utf8'));
172
184
  }
173
185
  catch (err) {
174
- printError(`Failed to parse baseline: ${err instanceof Error ? err.message : err}`);
186
+ printError(`Failed to parse baseline: ${errorMessage(err)}`);
175
187
  process.exit(1);
176
188
  }
177
189
  const cmp = compareSummaries(baseline, summary);
@@ -196,11 +208,11 @@ function printEvalCompare(summary, comparePath, asJson) {
196
208
  console.log(` only in current: ${cmp.onlyInCurrent.length}`);
197
209
  const showPerCase = cmp.improved.length + cmp.regressed.length > 0;
198
210
  if (showPerCase) {
199
- for (const d of cmp.improved.slice(0, 5)) {
211
+ for (const d of cmp.improved.slice(0, MAX_DELTAS_SHOWN)) {
200
212
  const delta = d.ndcgAfter - d.ndcgBefore;
201
213
  console.log(` + [${d.id}] NDCG ${fmt(d.ndcgBefore, 2)} -> ${fmt(d.ndcgAfter, 2)} (+${fmt(delta, 3)})`);
202
214
  }
203
- for (const d of cmp.regressed.slice(0, 5)) {
215
+ for (const d of cmp.regressed.slice(0, MAX_DELTAS_SHOWN)) {
204
216
  const delta = d.ndcgAfter - d.ndcgBefore;
205
217
  console.log(` - [${d.id}] NDCG ${fmt(d.ndcgBefore, 2)} -> ${fmt(d.ndcgAfter, 2)} (${fmt(delta, 3)})`);
206
218
  }
@@ -1,4 +1,4 @@
1
- import { type CliFlags, type CommandContext } from './shared.js';
1
+ import { type CliFlags, type CommandContext } from './flag-values.js';
2
2
  export declare function cmdExplain(hippoRoot: string, query: string, flags: CliFlags): Promise<void>;
3
3
  export declare function handleExplain({ hippoRoot, args, flags }: CommandContext): Promise<void>;
4
4
  //# sourceMappingURL=explain.d.ts.map