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,5 +1,5 @@
1
1
  import type { Context } from '../api/types.js';
2
- import { type CallerProject } from '../prompt-hook.js';
2
+ import { type CallerProject } from '../api/prompt-hook.js';
3
3
  import { type CaptureTally } from './command.js';
4
4
  export interface SessionCaptureRequest {
5
5
  readonly sessionId: string;
@@ -1,9 +1,9 @@
1
1
  // `hippo capture --last-session` for a caller whose transcript was read on another machine: its project names the rows, never the store's folder.
2
- import { BadRequestError } from '../api-errors.js';
3
- import { assertCallerIds } from '../prompt-hook.js';
4
- import { assertCallerProject, projectNames } from '../project-identity.js';
5
- import { longestWord, storedTextKeys } from '../same-text.js';
6
- import { scrubForSharing } from '../share-scrub.js';
2
+ import { BadRequestError } from '../core/api-errors.js';
3
+ import { assertCallerIds } from '../api/prompt-hook.js';
4
+ import { assertCallerProject, projectNames } from '../core/project-identity.js';
5
+ import { longestWord, storedTextKeys } from '../util/same-text.js';
6
+ import { scrubForSharing } from './share-scrub.js';
7
7
  import { loadTextsHoldingWords } from '../store/candidates.js';
8
8
  import { captureExtractedItems } from './command.js';
9
9
  import { extractFromTexts } from './extract.js';
@@ -4,9 +4,10 @@ import * as fs from 'fs';
4
4
  import * as path from 'path';
5
5
  import { createHash } from 'node:crypto';
6
6
  import { homeDir } from '../hooks/shared.js';
7
- import { errorMessage } from '../log.js';
8
- import { isObjectLike, isStringValue } from '../capture-contract.js';
7
+ import { errorMessage, log as logger } from '../util/log.js';
8
+ import { isObjectLike, isStringValue } from '../core/capture-contract.js';
9
9
  import { SESSION_ID_RE } from './copilot-transcript.js';
10
+ import { FINGERPRINT_HEX_CHARS } from '../util/token-text.js';
10
11
  /** Null for a missing id or one that could climb out of the sessions folder. */
11
12
  function sessionStateFiles(sessionId) {
12
13
  if (sessionId === null || !SESSION_ID_RE.test(sessionId))
@@ -73,8 +74,9 @@ function releaseSessionLock(lock) {
73
74
  try {
74
75
  fs.rmSync(lock, { force: true });
75
76
  }
76
- catch {
77
+ catch (err) {
77
78
  // A lock left behind names this pid, which is dead once the worker exits, so the next taker clears it.
79
+ logger.debug(`session lock not removed: ${errorMessage(err)}`);
78
80
  }
79
81
  }
80
82
  /** False when the sessions folder cannot be written, so the caller runs unlocked as before. */
@@ -133,7 +135,7 @@ export async function runSessionWorker(sessionId, mode, work) {
133
135
  }
134
136
  }
135
137
  function turnKey(turn) {
136
- return createHash('sha256').update(`${turn.role}\n${turn.text}`).digest('hex').slice(0, 16);
138
+ return createHash('sha256').update(`${turn.role}\n${turn.text}`).digest('hex').slice(0, FINGERPRINT_HEX_CHARS);
137
139
  }
138
140
  /** The cursor position after `turns`: how many there were and a hash of the last. */
139
141
  export function turnPosition(turns) {
@@ -1,6 +1,6 @@
1
1
  // The scrub for transcript text that leaves the machine it was typed on.
2
- import { maskHomePaths } from './home-path.js';
3
- import { maskEmails, redactSecretsStrict } from './secret-detect.js';
2
+ import { maskHomePaths } from '../util/home-path.js';
3
+ import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
4
4
  /** Secrets first, then emails, then home paths: a home-path mask could split a secret so that no pattern matches it. */
5
5
  export function scrubForSharing(text) {
6
6
  return maskHomePaths(maskEmails(redactSecretsStrict(text)));
@@ -1,9 +1,11 @@
1
- import { envHomeDir, processEnv } from '../env.js';
1
+ import { envHomeDir, processEnv } from '../util/env.js';
2
2
  import { claudeConfigDir } from '../hooks/shared.js';
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
- import { isObjectLike, isStringValue } from '../capture-contract.js';
5
+ import { isObjectLike, isStringValue, readSessionEnd } from '../core/capture-contract.js';
6
6
  import { copilotTurn } from './copilot-transcript.js';
7
+ const RECENT_USER_TURNS = 20;
8
+ const RECENT_ASSISTANT_TURNS = 10;
7
9
  /**
8
10
  * Build a compact text summary from a Claude Code / OpenCode / Copilot JSONL transcript.
9
11
  * Keeps plain user messages and the final chunk of assistant text, drops
@@ -54,69 +56,69 @@ export function collectSessionTurns(jsonl, visit) {
54
56
  if (!isObjectLike(entry) || !('type' in entry))
55
57
  continue;
56
58
  visit?.(entry);
57
- const copilot = copilotTurn(entry);
58
- if (copilot !== null) {
59
- turns.push(copilot);
60
- continue;
61
- }
62
- if (entry.type === 'user' || entry.type === 'assistant') {
63
- const message = 'message' in entry && isObjectLike(entry.message) ? entry.message : undefined;
64
- if (!message)
65
- continue;
66
- const content = 'content' in message ? message.content : undefined;
67
- if (entry.type === 'user') {
68
- const text = humanUserText(entry, message);
69
- if (text)
70
- turns.push({ role: 'user', text });
71
- }
72
- else if (Array.isArray(content)) {
73
- // Keep assistant text blocks; drop thinking + tool_use
74
- const chunks = [];
75
- for (const block of content) {
76
- if (isObjectLike(block)) {
77
- const blockText = 'type' in block && block.type === 'text' && 'text' in block ? block.text : undefined;
78
- if (isStringValue(blockText) && blockText.trim()) {
79
- chunks.push(blockText.trim());
80
- }
81
- }
82
- }
83
- if (chunks.length > 0) {
84
- turns.push({ role: 'assistant', text: chunks.join('\n') });
85
- }
59
+ const turn = copilotTurn(entry) ?? claudeCodeTurn(entry) ?? codexTurn(entry);
60
+ if (turn !== null)
61
+ turns.push(turn);
62
+ }
63
+ return turns;
64
+ }
65
+ /** The turn a Claude Code `user` or `assistant` line carries; null for any other line or one with no human or reply text. */
66
+ function claudeCodeTurn(entry) {
67
+ if (entry.type !== 'user' && entry.type !== 'assistant')
68
+ return null;
69
+ const message = 'message' in entry && isObjectLike(entry.message) ? entry.message : undefined;
70
+ if (!message)
71
+ return null;
72
+ const content = 'content' in message ? message.content : undefined;
73
+ if (entry.type === 'user') {
74
+ const text = humanUserText(entry, message);
75
+ return text ? { role: 'user', text } : null;
76
+ }
77
+ if (!Array.isArray(content))
78
+ return null;
79
+ // Keep assistant text blocks; drop thinking + tool_use
80
+ const chunks = [];
81
+ for (const block of content) {
82
+ if (isObjectLike(block)) {
83
+ const blockText = 'type' in block && block.type === 'text' && 'text' in block ? block.text : undefined;
84
+ if (isStringValue(blockText) && blockText.trim()) {
85
+ chunks.push(blockText.trim());
86
86
  }
87
+ }
88
+ }
89
+ return chunks.length > 0 ? { role: 'assistant', text: chunks.join('\n') } : null;
90
+ }
91
+ // Codex rollout transcript shape: response_item -> payload.message
92
+ function codexTurn(entry) {
93
+ if (entry.type !== 'response_item')
94
+ return null;
95
+ const payload = 'payload' in entry && isObjectLike(entry.payload) ? entry.payload : undefined;
96
+ if (!payload || !('type' in payload) || payload.type !== 'message')
97
+ return null;
98
+ const role = 'role' in payload ? payload.role : undefined;
99
+ const content = 'content' in payload ? payload.content : undefined;
100
+ if (!Array.isArray(content))
101
+ return null;
102
+ const chunks = [];
103
+ for (const block of content) {
104
+ if (!isObjectLike(block))
87
105
  continue;
106
+ const blockType = 'type' in block ? block.type : undefined;
107
+ const blockText = 'text' in block ? block.text : undefined;
108
+ if (role === 'user' && blockType === 'input_text' && isStringValue(blockText) && blockText.trim()) {
109
+ chunks.push(blockText.trim());
88
110
  }
89
- // Codex rollout transcript shape: response_item -> payload.message
90
- if (entry.type === 'response_item') {
91
- const payload = 'payload' in entry && isObjectLike(entry.payload) ? entry.payload : undefined;
92
- if (!payload || !('type' in payload) || payload.type !== 'message')
93
- continue;
94
- const role = 'role' in payload ? payload.role : undefined;
95
- const content = 'content' in payload ? payload.content : undefined;
96
- if (!Array.isArray(content))
97
- continue;
98
- const chunks = [];
99
- for (const block of content) {
100
- if (!isObjectLike(block))
101
- continue;
102
- const blockType = 'type' in block ? block.type : undefined;
103
- const blockText = 'text' in block ? block.text : undefined;
104
- if (role === 'user' && blockType === 'input_text' && isStringValue(blockText) && blockText.trim()) {
105
- chunks.push(blockText.trim());
106
- }
107
- if (role === 'assistant' && blockType === 'output_text' && isStringValue(blockText) && blockText.trim()) {
108
- chunks.push(blockText.trim());
109
- }
110
- }
111
- if (chunks.length === 0)
112
- continue;
113
- if (role === 'user')
114
- turns.push({ role: 'user', text: chunks.join('\n') });
115
- if (role === 'assistant')
116
- turns.push({ role: 'assistant', text: chunks.join('\n') });
111
+ if (role === 'assistant' && blockType === 'output_text' && isStringValue(blockText) && blockText.trim()) {
112
+ chunks.push(blockText.trim());
117
113
  }
118
114
  }
119
- return turns;
115
+ if (chunks.length === 0)
116
+ return null;
117
+ if (role === 'user')
118
+ return { role: 'user', text: chunks.join('\n') };
119
+ if (role === 'assistant')
120
+ return { role: 'assistant', text: chunks.join('\n') };
121
+ return null;
120
122
  }
121
123
  export function summariseTranscript(jsonl) {
122
124
  return summariseSessionTurns(collectSessionTurns(jsonl));
@@ -124,8 +126,8 @@ export function summariseTranscript(jsonl) {
124
126
  /** The last 20 user turns and last 10 replies: session-end is about what was decided near the end, not at the start. */
125
127
  export function sessionTail(turns) {
126
128
  return {
127
- users: turns.filter((t) => t.role === 'user').map((t) => t.text).slice(-20),
128
- assistants: turns.filter((t) => t.role === 'assistant').map((t) => t.text).slice(-10),
129
+ users: turns.filter((t) => t.role === 'user').map((t) => t.text).slice(-RECENT_USER_TURNS),
130
+ assistants: turns.filter((t) => t.role === 'assistant').map((t) => t.text).slice(-RECENT_ASSISTANT_TURNS),
129
131
  };
130
132
  }
131
133
  export function summariseSessionTurns(turns) {
@@ -157,18 +159,10 @@ export function resolveLastSessionTranscript(explicit, stdinText, opts) {
157
159
  if (explicit)
158
160
  return fs.existsSync(explicit) ? explicit : null;
159
161
  if (stdinText && stdinText.trim() !== '') {
160
- try {
161
- const payload = JSON.parse(stdinText);
162
- if (isObjectLike(payload) && 'transcript_path' in payload) {
163
- const tp = payload.transcript_path;
164
- if (isStringValue(tp) && fs.existsSync(tp))
165
- return tp;
166
- }
167
- }
168
- catch {
169
- // not JSON, but still a payload, so no scan
170
- }
171
- return null;
162
+ const receipt = readSessionEnd(stdinText, false);
163
+ // A refused payload is still a payload, so no scan.
164
+ const tp = receipt.status === 'received' ? receipt.input.transcriptPath : null;
165
+ return tp !== null && fs.existsSync(tp) ? tp : null;
172
166
  }
173
167
  if (!opts.mayScan)
174
168
  return null;
@@ -1,7 +1,4 @@
1
1
  import type { TaskSnapshot } from '../store/rows.js';
2
- export declare const PRE_COMPACT_TASK_CAP = 200;
3
- export declare const PRE_COMPACT_SUMMARY_CAP = 2000;
4
- export declare const PRE_COMPACT_NEXT_STEP_CAP = 500;
5
2
  /** The longest each field of {@link transcriptWorkingState} can be, so a check of a sent working state imports these instead of copying them. */
6
3
  export declare const WORKING_STATE_CAPS: {
7
4
  readonly task: 200;
@@ -1,14 +1,14 @@
1
1
  // A session's working state read from its transcript tail, with no store in the imports, so a hook with no store can derive it.
2
2
  import * as fs from 'fs';
3
- import { maskEmails, redactSecretsStrict } from '../secret-detect.js';
4
- import { isObjectLike, isStringValue } from '../capture-contract.js';
5
- import { errorMessage } from '../log.js';
6
- import { PRE_COMPACT_TAIL_BYTES, readTranscriptTail, truncateCodePointSafe } from '../transcript-tail.js';
3
+ import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
4
+ import { isObjectLike, isStringValue } from '../core/capture-contract.js';
5
+ import { errorMessage } from '../util/log.js';
6
+ import { PRE_COMPACT_TAIL_BYTES, readTranscriptTail, truncateCodePointSafe } from '../util/transcript-tail.js';
7
7
  import { humanUserText, summariseTranscript } from './transcript.js';
8
8
  import { copilotTurn } from './copilot-transcript.js';
9
- export const PRE_COMPACT_TASK_CAP = 200;
10
- export const PRE_COMPACT_SUMMARY_CAP = 2000;
11
- export const PRE_COMPACT_NEXT_STEP_CAP = 500;
9
+ const PRE_COMPACT_TASK_CAP = 200;
10
+ const PRE_COMPACT_SUMMARY_CAP = 2000;
11
+ const PRE_COMPACT_NEXT_STEP_CAP = 500;
12
12
  const TRIM_MARKER = '[...earlier turns trimmed]\n';
13
13
  /** The longest each field of {@link transcriptWorkingState} can be, so a check of a sent working state imports these instead of copying them. */
14
14
  export const WORKING_STATE_CAPS = {
@@ -23,7 +23,6 @@
23
23
  * - The audit_prune row itself is NEVER pruned by the same call (it's
24
24
  * written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
25
25
  */
26
- import type { DatabaseSyncLike } from './db.js';
27
26
  export interface PruneAuditOpts {
28
27
  /** Cutoff in days. Rows with `ts < (now - N days)` are deleted. */
29
28
  olderThanDays: number;
@@ -53,7 +52,7 @@ export declare function computeCutoff(days: number, now?: Date): string;
53
52
  *
54
53
  * Throws on invalid inputs (non-positive days, missing tenantId).
55
54
  */
56
- export declare function pruneAuditLog(db: DatabaseSyncLike, opts: PruneAuditOpts): PruneAuditResult;
55
+ export declare function pruneAuditLog(hippoRoot: string, opts: PruneAuditOpts): PruneAuditResult;
57
56
  /**
58
57
  * Parse the `--older-than <value>` flag. Accepts either bare integer days
59
58
  * (`30`) or integer with `d` suffix (`30d`). Throws on invalid format.
@@ -23,13 +23,14 @@
23
23
  * - The audit_prune row itself is NEVER pruned by the same call (it's
24
24
  * written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
25
25
  */
26
- import { appendAuditEvent } from './audit.js';
26
+ import { pruneAuditRows } from '../store/audit.js';
27
+ import { DAY_MS } from '../util/time.js';
27
28
  /**
28
29
  * Compute the cutoff ISO timestamp for an N-days-ago cutoff. Exported for
29
30
  * testability so tests can pin "now" without mocking Date.
30
31
  */
31
32
  export function computeCutoff(days, now = new Date()) {
32
- const cutoff = new Date(now.getTime() - days * 24 * 60 * 60 * 1000);
33
+ const cutoff = new Date(now.getTime() - days * DAY_MS);
33
34
  return cutoff.toISOString();
34
35
  }
35
36
  function isTenantIdString(value) {
@@ -41,7 +42,7 @@ function isTenantIdString(value) {
41
42
  *
42
43
  * Throws on invalid inputs (non-positive days, missing tenantId).
43
44
  */
44
- export function pruneAuditLog(db, opts) {
45
+ export function pruneAuditLog(hippoRoot, opts) {
45
46
  if (!Number.isFinite(opts.olderThanDays) || opts.olderThanDays <= 0) {
46
47
  throw new Error(`pruneAuditLog: olderThanDays must be a positive number, got ${opts.olderThanDays}`);
47
48
  }
@@ -51,42 +52,7 @@ export function pruneAuditLog(db, opts) {
51
52
  const dryRun = opts.dryRun === true;
52
53
  const actor = opts.actor ?? 'cli';
53
54
  const cutoff = computeCutoff(opts.olderThanDays);
54
- let count = 0;
55
- if (dryRun) {
56
- // Dry-run: just count, no DELETE.
57
- // SAFETY: row comes from `SELECT COUNT(*) AS c` above; COUNT(*) always
58
- // yields exactly one row with a numeric `c` column (number or bigint
59
- // depending on the node:sqlite driver's integer handling).
60
- const row = db
61
- .prepare(`SELECT COUNT(*) AS c FROM audit_log WHERE tenant_id = ? AND ts < ?`)
62
- .get(opts.tenantId, cutoff);
63
- count = Number(row.c);
64
- }
65
- else {
66
- db.exec('BEGIN IMMEDIATE');
67
- try {
68
- const result = db
69
- .prepare(`DELETE FROM audit_log WHERE tenant_id = ? AND ts < ?`)
70
- .run(opts.tenantId, cutoff);
71
- count = Number(result.changes ?? 0);
72
- // Record the prune itself in the audit trail. This row has ts = now,
73
- // so it's not eligible for the cutoff that was just applied.
74
- appendAuditEvent(db, {
75
- tenantId: opts.tenantId,
76
- actor,
77
- op: 'audit_prune',
78
- metadata: { cutoff, count, dryRun: false, olderThanDays: opts.olderThanDays },
79
- });
80
- db.exec('COMMIT');
81
- }
82
- catch (e) {
83
- try {
84
- db.exec('ROLLBACK');
85
- }
86
- catch { /* already rolled back; keep the original error */ }
87
- throw e;
88
- }
89
- }
55
+ const count = pruneAuditRows(hippoRoot, { tenantId: opts.tenantId, cutoff, actor, olderThanDays: opts.olderThanDays, dryRun });
90
56
  return { cutoff, count, dryRun };
91
57
  }
92
58
  /**
@@ -1,3 +1,3 @@
1
- import { type CommandContext } from './shared.js';
2
- export declare function handleAudit({ hippoRoot, args, flags }: CommandContext): void;
1
+ import { type CommandContext } from './flag-values.js';
2
+ export declare function handleAudit({ hippoRoot, args, flags }: CommandContext): Promise<void>;
3
3
  //# sourceMappingURL=audit.d.ts.map
package/dist/cli/audit.js CHANGED
@@ -1,15 +1,16 @@
1
1
  // `hippo audit`: list and prune the audit log.
2
2
  import { loadAllEntries } from '../store/entry-reads.js';
3
3
  import { deleteEntry, memoriesBackingObjects } from '../store/delete-and-batch.js';
4
- import { openHippoDb, closeHippoDb } from '../db.js';
5
- import { auditMemories, AUDIT_OPS } from '../audit.js';
6
- import * as api from '../api.js';
7
- import { resolveTenantId } from '../tenant.js';
8
- import { pruneAuditLog, parseOlderThanFlag } from '../audit-prune.js';
4
+ import { auditMemories, AUDIT_OPS } from '../store/audit.js';
5
+ import * as api from '../api/index.js';
6
+ import { resolveTenantId } from '../store/tenant.js';
7
+ import { pruneAuditLog, parseOlderThanFlag } from './audit-prune.js';
9
8
  import { printError } from './output.js';
9
+ import { boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
10
10
  import { requireInit, resolveAuthRoot } from './shared.js';
11
- import { repairAutomaticMemories } from '../quality-repair.js';
12
- import { getGlobalRoot } from '../shared.js';
11
+ import { repairAutomaticMemories } from './quality-repair.js';
12
+ import { getGlobalRoot } from '../sharing/shared.js';
13
+ import { errorMessage } from '../util/log.js';
13
14
  // ---------------------------------------------------------------------------
14
15
  // Audit log subcommands (`hippo audit list`)
15
16
  // ---------------------------------------------------------------------------
@@ -19,23 +20,17 @@ function formatAuditRow(ev) {
19
20
  const meta = JSON.stringify(ev.metadata ?? {});
20
21
  return `${ev.ts} ${ev.actor} ${ev.op} ${target} ${meta}`;
21
22
  }
22
- function cmdAuditList(hippoRoot, flags) {
23
- const root = resolveAuthRoot(hippoRoot, flags);
24
- const asJson = Boolean(flags['json']);
25
- const tenantId = resolveTenantId({});
26
- const opFlag = typeof flags['op'] === 'string' ? flags['op'] : undefined;
23
+ function readAuditOp(flags) {
24
+ const opFlag = stringFlag(flags, 'op');
27
25
  if (opFlag && !VALID_AUDIT_OPS.has(opFlag)) {
28
26
  // Built from the Set so the message cannot drift from the valid ops.
29
27
  const expected = Array.from(VALID_AUDIT_OPS).join(' | ');
30
28
  printError(`Unknown --op value: ${opFlag}. Expected one of: ${expected}.`);
31
29
  process.exit(1);
32
30
  }
33
- const op = opFlag;
34
- const since = typeof flags['since'] === 'string' ? flags['since'] : undefined;
35
- if (since !== undefined && !Number.isFinite(new Date(since).getTime())) {
36
- printError(`Invalid --since: ${since} (expected an ISO timestamp like 2026-04-22 or 2026-04-22T12:00:00Z).`);
37
- process.exit(1);
38
- }
31
+ return opFlag;
32
+ }
33
+ function readAuditLimit(flags) {
39
34
  const limitRaw = flags['limit'];
40
35
  let limit = 100;
41
36
  if (limitRaw !== undefined && typeof limitRaw !== 'boolean') {
@@ -50,8 +45,21 @@ function cmdAuditList(hippoRoot, flags) {
50
45
  printError(`--limit must be between 1 and 10000 (got ${limit}).`);
51
46
  process.exit(1);
52
47
  }
48
+ return limit;
49
+ }
50
+ async function cmdAuditList(hippoRoot, flags) {
51
+ const root = resolveAuthRoot(hippoRoot, flags);
52
+ const asJson = boolFlag(flags, 'json');
53
+ const tenantId = resolveTenantId({});
54
+ const op = readAuditOp(flags);
55
+ const since = stringFlag(flags, 'since');
56
+ if (since !== undefined && !Number.isFinite(new Date(since).getTime())) {
57
+ printError(`Invalid --since: ${since} (expected an ISO timestamp like 2026-04-22 or 2026-04-22T12:00:00Z).`);
58
+ process.exit(1);
59
+ }
60
+ const limit = readAuditLimit(flags);
53
61
  const ctx = { hippoRoot: root, tenantId, actor: { subject: 'cli', role: 'admin' } };
54
- const events = api.auditList(ctx, { op, since, limit });
62
+ const events = await api.auditList(ctx, { op, since, limit });
55
63
  if (asJson) {
56
64
  console.log(JSON.stringify(events));
57
65
  return;
@@ -66,7 +74,7 @@ function cmdAuditList(hippoRoot, flags) {
66
74
  }
67
75
  }
68
76
  function cmdAuditPrune(hippoRoot, flags) {
69
- const olderThanRaw = typeof flags['older-than'] === 'string' ? flags['older-than'] : '';
77
+ const olderThanRaw = stringFlag(flags, 'older-than') ?? '';
70
78
  if (!olderThanRaw) {
71
79
  printError('Usage: hippo audit prune --older-than <Nd> [--dry-run] [--tenant <t>]');
72
80
  process.exit(1);
@@ -76,22 +84,13 @@ function cmdAuditPrune(hippoRoot, flags) {
76
84
  olderThanDays = parseOlderThanFlag(olderThanRaw);
77
85
  }
78
86
  catch (e) {
79
- printError(e.message);
87
+ printError(errorMessage(e));
80
88
  process.exit(1);
81
89
  }
82
- const tenantId = typeof flags['tenant'] === 'string'
83
- ? flags['tenant'].trim() || resolveTenantId({})
84
- : resolveTenantId({});
85
- const dryRun = flags['dry-run'] === true;
86
- const asJson = Boolean(flags['json']);
87
- const db = openHippoDb(hippoRoot);
88
- let result;
89
- try {
90
- result = pruneAuditLog(db, { olderThanDays, tenantId, dryRun, actor: 'cli' });
91
- }
92
- finally {
93
- closeHippoDb(db);
94
- }
90
+ const tenantId = stringFlag(flags, 'tenant')?.trim() || resolveTenantId({});
91
+ const dryRun = flagIsTrue(flags, 'dry-run');
92
+ const asJson = boolFlag(flags, 'json');
93
+ const result = pruneAuditLog(hippoRoot, { olderThanDays, tenantId, dryRun, actor: 'cli' });
95
94
  if (asJson) {
96
95
  console.log(JSON.stringify(result));
97
96
  return;
@@ -102,10 +101,10 @@ function cmdAuditPrune(hippoRoot, flags) {
102
101
  console.log('(dry-run; re-run without --dry-run to actually delete)');
103
102
  }
104
103
  }
105
- function cmdAuditLog(hippoRoot, args, flags) {
104
+ async function cmdAuditLog(hippoRoot, args, flags) {
106
105
  const sub = args[0];
107
106
  if (sub === 'list') {
108
- cmdAuditList(hippoRoot, flags);
107
+ await cmdAuditList(hippoRoot, flags);
109
108
  return;
110
109
  }
111
110
  if (sub === 'prune') {
@@ -115,41 +114,59 @@ function cmdAuditLog(hippoRoot, args, flags) {
115
114
  printError(`Unknown audit subcommand: ${sub}. Expected: list | prune.`);
116
115
  process.exit(1);
117
116
  }
118
- export function handleAudit({ hippoRoot, args, flags }) {
117
+ function auditRepair(hippoRoot, flags) {
118
+ const apply = flagIsTrue(flags, 'apply') && flags['dry-run'] !== true;
119
+ const result = repairAutomaticMemories(flags['global'] ? getGlobalRoot() : hippoRoot, { tenantId: resolveTenantId({}), apply });
120
+ if (flags['json']) {
121
+ console.log(JSON.stringify(result));
122
+ return;
123
+ }
124
+ console.log(`Quality repair ${apply ? 'apply' : 'preview'}: ${result.issues.length} issue(s) across ${result.total} memories.`);
125
+ for (const issue of result.issues)
126
+ console.log(` [${issue.disposition}] ${issue.id}: ${issue.reason}${issue.protection ? ` (${issue.protection})` : ''}`);
127
+ for (const blocker of result.blockers)
128
+ console.log(` Blocked: ${blocker}. Repair never upgrades a store; any other hippo command does, then run repair again.`);
129
+ const restore = `hippo dormant restore <id>${flags['global'] ? ' --global' : ''}`;
130
+ if (result.backup)
131
+ console.log(`Backup: ${result.backup}\nMoved ${result.appliedIds.length} memories to dormant storage. Recovery: ${restore}.`);
132
+ else if (apply && result.supported)
133
+ console.log('Nothing moved: no unprotected memory has a certain defect.');
134
+ for (const warning of result.warnings)
135
+ console.log(`Warning: ${warning}`);
136
+ if (!apply)
137
+ console.log('Preview only. Add --apply to move set-aside memories to dormant storage. Pin a review memory to keep it.');
138
+ }
139
+ function fixAuditErrors(hippoRoot, result, flags) {
140
+ const errors = result.issues.filter(i => i.severity === 'error');
141
+ if (errors.length > 0 && flagIsTrue(flags, 'dry-run')) {
142
+ console.log(`\nWould remove ${errors.length} error-severity memories (dry run, nothing deleted).`);
143
+ console.log(`${result.issues.length - errors.length} warnings would remain (review manually).`);
144
+ }
145
+ else if (errors.length > 0) {
146
+ const removedCount = errors.filter((issue) => deleteEntry(hippoRoot, issue.memoryId, { reason: `audit --fix: ${issue.reason}`, automatic: true })).length;
147
+ console.log(`\nRemoved ${removedCount} error-severity memories.`);
148
+ console.log(`${result.issues.length - errors.length} warnings remain (review manually).`);
149
+ }
150
+ else {
151
+ console.log(`\nNo error-severity issues. Warnings require manual review.`);
152
+ }
153
+ }
154
+ export async function handleAudit({ hippoRoot, args, flags }) {
119
155
  if (args[0] === 'repair') {
120
- const apply = flags['apply'] === true && flags['dry-run'] !== true;
121
- const result = repairAutomaticMemories(flags['global'] ? getGlobalRoot() : hippoRoot, { tenantId: resolveTenantId({}), apply });
122
- if (flags['json']) {
123
- console.log(JSON.stringify(result));
124
- return;
125
- }
126
- console.log(`Quality repair ${apply ? 'apply' : 'preview'}: ${result.issues.length} issue(s) across ${result.total} memories.`);
127
- for (const issue of result.issues)
128
- console.log(` [${issue.disposition}] ${issue.id}: ${issue.reason}${issue.protection ? ` (${issue.protection})` : ''}`);
129
- for (const blocker of result.blockers)
130
- console.log(` Blocked: ${blocker}. Repair never upgrades a store; any other hippo command does, then run repair again.`);
131
- const restore = `hippo dormant restore <id>${flags['global'] ? ' --global' : ''}`;
132
- if (result.backup)
133
- console.log(`Backup: ${result.backup}\nMoved ${result.appliedIds.length} memories to dormant storage. Recovery: ${restore}.`);
134
- else if (apply && result.supported)
135
- console.log('Nothing moved: no unprotected memory has a certain defect.');
136
- for (const warning of result.warnings)
137
- console.log(`Warning: ${warning}`);
138
- if (!apply)
139
- console.log('Preview only. Add --apply to move set-aside memories to dormant storage. Pin a review memory to keep it.');
156
+ auditRepair(hippoRoot, flags);
140
157
  return;
141
158
  }
142
159
  // `audit list` and `audit prune` -> audit-log subcommands.
143
160
  // Other forms (no sub, --fix) keep the existing memory-quality auditor
144
161
  // for backwards compatibility.
145
162
  if (args[0] === 'list' || args[0] === 'prune') {
146
- cmdAuditLog(hippoRoot, args, flags);
163
+ await cmdAuditLog(hippoRoot, args, flags);
147
164
  return;
148
165
  }
149
166
  requireInit(hippoRoot);
150
167
  const entries = loadAllEntries(hippoRoot, resolveTenantId({}));
151
168
  const result = auditMemories(entries, memoriesBackingObjects(hippoRoot));
152
- const shouldFix = Boolean(flags['fix']);
169
+ const shouldFix = boolFlag(flags, 'fix');
153
170
  if (result.issues.length === 0) {
154
171
  console.log(`All ${result.total} memories passed quality checks.`);
155
172
  }
@@ -161,19 +178,7 @@ export function handleAudit({ hippoRoot, args, flags }) {
161
178
  console.log(` "${issue.content.slice(0, 80)}${issue.content.length > 80 ? '...' : ''}"`);
162
179
  }
163
180
  if (shouldFix) {
164
- const errors = result.issues.filter(i => i.severity === 'error');
165
- if (errors.length > 0 && flags['dry-run'] === true) {
166
- console.log(`\nWould remove ${errors.length} error-severity memories (dry run, nothing deleted).`);
167
- console.log(`${result.issues.length - errors.length} warnings would remain (review manually).`);
168
- }
169
- else if (errors.length > 0) {
170
- const removedCount = errors.filter((issue) => deleteEntry(hippoRoot, issue.memoryId, { reason: `audit --fix: ${issue.reason}`, automatic: true })).length;
171
- console.log(`\nRemoved ${removedCount} error-severity memories.`);
172
- console.log(`${result.issues.length - errors.length} warnings remain (review manually).`);
173
- }
174
- else {
175
- console.log(`\nNo error-severity issues. Warnings require manual review.`);
176
- }
181
+ fixAuditErrors(hippoRoot, result, flags);
177
182
  }
178
183
  else {
179
184
  console.log(`\nRun with --fix to auto-remove error-severity issues.`);
@@ -1,2 +1,3 @@
1
- export declare function cmdAuth(hippoRoot: string, args: string[], flags: Record<string, string | boolean | string[]>): void;
1
+ import { type CliFlags } from './flag-values.js';
2
+ export declare function cmdAuth(hippoRoot: string, args: string[], flags: CliFlags): void;
2
3
  //# sourceMappingURL=auth.d.ts.map