hippo-memory 1.68.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 (864) hide show
  1. package/README.md +6 -3
  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.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /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