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
- import { BadRequestError } from '../api-errors.js';
2
- import type { HippoStore } from '../store-port.js';
1
+ import { BadRequestError } from '../core/api-errors.js';
2
+ import type { HippoStore } from '../store/index.js';
3
3
  /**
4
4
  * Actor identity + authorization role for a Context.
5
5
  *
package/dist/api/types.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Request context (caller identity and tenant) shared by every API module, plus the recall contract error.
2
- import { BadRequestError } from '../api-errors.js';
2
+ import { BadRequestError } from '../core/api-errors.js';
3
3
  /**
4
4
  * Helper for building process-local Actor values (admin and host admin),
5
5
  * used by CLI and CLI-run connector Context constructors so the role
@@ -1,6 +1,6 @@
1
1
  import { type Context } from '../api/types.js';
2
- import { type DatabaseSyncLike } from '../db.js';
3
- import { type CallerProject } from '../prompt-hook.js';
2
+ import { type DatabaseSyncLike } from '../db/index.js';
3
+ import { type CallerProject } from '../api/prompt-hook.js';
4
4
  import type { ContinuityKey } from '../store/sessions.js';
5
5
  import { type WorkingState } from './working-state.js';
6
6
  /** Checks the ids, then binds the session to the caller's owner (a ConflictError when another owner holds it). Returns the key the call's rows go under. */
@@ -1,13 +1,13 @@
1
1
  // The checks every caller call shares: ids, project, the session's owner and the pilot arm, all from the request, never the server's env or folder.
2
- import { BadRequestError } from '../api-errors.js';
2
+ import { BadRequestError } from '../core/api-errors.js';
3
3
  import { ownerOrSubject } from '../api/types.js';
4
- import { closeHippoDb, openHippoDb } from '../db.js';
5
- import { MAX_ID_LEN } from '../http-util.js';
6
- import { sessionPilotArm } from '../pilot-arm.js';
7
- import { assertCallerIds } from '../prompt-hook.js';
8
- import { assertCallerProject, projectNames } from '../project-identity.js';
9
- import { maskEmails, redactSecretsStrict } from '../secret-detect.js';
10
- import { bindSessionOwner } from '../session-owners.js';
4
+ import { closeHippoDb, openHippoDb } from '../db/index.js';
5
+ import { MAX_ID_LEN } from '../util/http-util.js';
6
+ import { sessionPilotArm } from '../api/pilot-arm.js';
7
+ import { assertCallerIds } from '../api/prompt-hook.js';
8
+ import { assertCallerProject, projectNames } from '../core/project-identity.js';
9
+ import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
10
+ import { bindSessionOwner } from '../api/session-owners.js';
11
11
  import { fitWorkingState, WORKING_STATE_CAPS } from './working-state.js';
12
12
  /** Checks the ids, then binds the session to the caller's owner (a ConflictError when another owner holds it). Returns the key the call's rows go under. */
13
13
  export function bindCaller(ctx, sessionId, project) {
@@ -1,5 +1,5 @@
1
- import { type CaptureErrorOutcome } from './capture/failure-reading.js';
2
- import type { JsonValue } from './json.js';
1
+ import { type CaptureErrorOutcome } from '../store/failure-log.js';
2
+ import type { JsonValue } from '../util/json.js';
3
3
  /** Store a failure as an error memory unless it is routine or a repeat, and log it either way, even when storing throws. */
4
4
  export declare function captureToolFailure(hippoRoot: string, tenantId: string, payload: JsonValue): CaptureErrorOutcome;
5
5
  /** Who sent a failure from another machine: the audit actor and the project its lesson and repeat check belong to. */
@@ -1,13 +1,13 @@
1
1
  // `hippo capture-error`, run by the Claude Code PostToolUseFailure hook: routine failures and repeats are not
2
2
  // stored, because error memories decay slowly and would crowd out real lessons; what is stored stays `observed`
3
3
  // until outcome feedback confirms it. Every failure, stored or not, goes to the failure log.
4
- import { createMemory } from './memory.js';
5
- import { writeEntry } from './store/entry-writes.js';
6
- import { loadContentsWithTag } from './store/entry-reads.js';
7
- import { loadConfig } from './config.js';
8
- import { closeHippoDb, openHippoDb } from './db.js';
9
- import { recordFailure } from './failure-log.js';
10
- import { failureHash, failureSignature, lessonFromFailure, payloadString, } from './capture/failure-reading.js';
4
+ import { createMemory } from '../core/memory.js';
5
+ import { writeEntry } from '../store/entry-writes.js';
6
+ import { loadContentsWithTag } from '../store/entry-reads.js';
7
+ import { loadConfig } from '../core/config.js';
8
+ import { closeHippoDb, openHippoDb } from '../db/index.js';
9
+ import { recordFailure } from '../store/failure-log.js';
10
+ import { failureHash, failureSignature, lessonFromFailure, payloadString, } from './failure-reading.js';
11
11
  /** Store a failure as an error memory unless it is routine or a repeat, and log it either way, even when storing throws. */
12
12
  export function captureToolFailure(hippoRoot, tenantId, payload) {
13
13
  const lesson = lessonFromFailure(payload);
@@ -1,7 +1,7 @@
1
1
  // Files named by a Codex apply_patch call, read the way openai/codex codex-rs/apply-patch reads them
2
2
  // (parser.rs for the body, invocation.rs for the shell forms it runs as apply_patch).
3
3
  import * as path from 'path';
4
- import { isStringValue } from './capture-contract.js';
4
+ import { isStringValue } from '../core/capture-contract.js';
5
5
  /** Codex prints this line only when a patch applied (apply-patch lib.rs). */
6
6
  export const PATCH_SUCCESS_LINE = 'Success. Updated the following files:';
7
7
  const BEGIN_PATCH = '*** Begin Patch';
@@ -1,4 +1,4 @@
1
- import { type ProjectRef } from '../project-identity.js';
1
+ import { type ProjectRef } from '../core/project-identity.js';
2
2
  import { type ExtractedItem } from './extract.js';
3
3
  import { type SessionTurn } from './transcript.js';
4
4
  export interface CaptureOptions {
@@ -1,22 +1,22 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { createMemory, Layer } from '../memory.js';
4
- import { duplicateKey, storedTextKeys } from '../same-text.js';
3
+ import { createMemory, Layer } from '../core/memory.js';
4
+ import { duplicateKey, longestWord, storedTextKeys } from '../util/same-text.js';
5
5
  import { stampOriginProject } from '../store/entry-row.js';
6
6
  import { isInitialized, openStore } from '../store/open.js';
7
7
  import { writeEntryMirrors } from '../store/entry-writes.js';
8
- import { loadAllEntries } from '../store/entry-reads.js';
9
- import { updateStats } from '../store/index-and-stats.js';
10
- import { gatedWrite } from '../gated-write.js';
11
- import { getGlobalRoot, initGlobal } from '../shared.js';
12
- import { embedMemory } from '../embeddings.js';
13
- import { maskEmails, redactSecretsStrict } from '../secret-detect.js';
14
- import { RejectedValueError, checkRejectionGuard } from '../rejection.js';
15
- import { openHippoDb, closeHippoDb } from '../db.js';
16
- import { loadConfig } from '../config.js';
17
- import { classifyOriginProject, projectId } from '../project-identity.js';
18
- import { isStringValue } from '../capture-contract.js';
19
- import { errorMessage, log } from '../log.js';
8
+ import { EVERY_SCOPE, loadTextsHoldingWords } from '../store/candidates.js';
9
+ import { updateStatsOn } from '../store/index-and-stats.js';
10
+ import { gatedWrite } from '../trust/gated-write.js';
11
+ import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
12
+ import { embedMemory } from '../store/embeddings/index.js';
13
+ import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
14
+ import { RejectedValueError, checkRejectionGuard } from '../store/rejection.js';
15
+ import { openHippoDb, closeHippoDb } from '../db/index.js';
16
+ import { loadConfig } from '../core/config.js';
17
+ import { classifyOriginProject, projectId } from '../core/project-identity.js';
18
+ import { isStringValue } from '../core/capture-contract.js';
19
+ import { errorMessage, log } from '../util/log.js';
20
20
  import { extractFromTexts } from './extract.js';
21
21
  import { collectSessionTurns, sessionTail, resolveLastSessionTranscript } from './transcript.js';
22
22
  export function cmdCapture(hippoRoot, options) {
@@ -48,25 +48,11 @@ export function cmdCapture(hippoRoot, options) {
48
48
  * the data.
49
49
  */
50
50
  function beginLogTee(logFile) {
51
- try {
52
- fs.mkdirSync(path.dirname(logFile), { recursive: true });
53
- fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} capturing session...\n`, 'utf8');
54
- }
55
- catch (err) {
56
- log.warn(`could not open log file ${logFile}: ${errorMessage(err)}`);
51
+ if (!writeLogBanner(logFile))
57
52
  return () => { };
58
- }
59
53
  const origStdoutWrite = process.stdout.write.bind(process.stdout);
60
54
  const origStderrWrite = process.stderr.write.bind(process.stderr);
61
- const tee = (chunk) => {
62
- try {
63
- const buf = isStringValue(chunk) ? chunk : Buffer.from(chunk).toString('utf8');
64
- fs.appendFileSync(logFile, buf, 'utf8');
65
- }
66
- catch {
67
- // log failures are non-fatal
68
- }
69
- };
55
+ const tee = (chunk) => appendToLog(logFile, chunk);
70
56
  const wrapWrite = (origWrite) => {
71
57
  const wrapped = (...args) => {
72
58
  tee(args[0]);
@@ -89,6 +75,27 @@ function beginLogTee(logFile) {
89
75
  process.stderr.write = origStderrWrite;
90
76
  };
91
77
  }
78
+ /** Creates the log's folder and appends the banner line; false, after a warning, when the log cannot be written. */
79
+ function writeLogBanner(logFile) {
80
+ try {
81
+ fs.mkdirSync(path.dirname(logFile), { recursive: true });
82
+ fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} capturing session...\n`, 'utf8');
83
+ }
84
+ catch (err) {
85
+ log.warn(`could not open log file ${logFile}: ${errorMessage(err)}`);
86
+ return false;
87
+ }
88
+ return true;
89
+ }
90
+ function appendToLog(logFile, chunk) {
91
+ try {
92
+ const buf = isStringValue(chunk) ? chunk : Buffer.from(chunk).toString('utf8');
93
+ fs.appendFileSync(logFile, buf, 'utf8');
94
+ }
95
+ catch {
96
+ // log failures are non-fatal
97
+ }
98
+ }
92
99
  // Console lines here are the `hippo capture` command's printed result, so they stay off the logger.
93
100
  function cmdCaptureCore(hippoRoot, options) {
94
101
  const useGlobal = options.global;
@@ -115,22 +122,28 @@ function cmdCaptureCore(hippoRoot, options) {
115
122
  console.log('No actionable items found in the input.');
116
123
  return;
117
124
  }
118
- // Dedup only against rows this capture's reader sees: another tenant's rows, or another
119
- // project's, are hidden from it, so they must not stop its own copy.
120
- const stored = loadAllEntries(targetRoot, useGlobal ? undefined : options.tenantId);
121
- const origin = options.originProject;
122
- const keys = storedTextKeys(origin === undefined
123
- ? stored
124
- : stored.filter((e) => classifyOriginProject(e.origin_project, origin) !== 'cross-project'));
125
+ const keys = storedKeysInView(targetRoot, options, extracted);
125
126
  const writeOpts = {
126
127
  dryRun: options.dryRun,
127
128
  tenantId: useGlobal ? undefined : options.tenantId,
128
- originProject: origin,
129
+ originProject: options.originProject,
129
130
  lean: false,
130
131
  };
131
- const { captured, skipped, rejected } = captureExtractedItems(targetRoot, writeOpts, extracted, keys);
132
+ printCaptureTally(options, captureExtractedItems(targetRoot, writeOpts, extracted, keys));
133
+ }
134
+ // Dedup only against rows this capture's reader sees: another tenant's rows, or another
135
+ // project's, are hidden from it, so they must not stop its own copy.
136
+ // Only a row holding an item's longest word can hold that item, so the store returns those rows and no others.
137
+ function storedKeysInView(targetRoot, options, extracted) {
138
+ const stored = loadTextsHoldingWords(targetRoot, options.global ? undefined : options.tenantId, extracted.map((item) => longestWord(item.content)), undefined, EVERY_SCOPE);
139
+ const origin = options.originProject;
140
+ return storedTextKeys(origin === undefined
141
+ ? stored
142
+ : stored.filter((e) => classifyOriginProject(e.origin_project, origin) !== 'cross-project'));
143
+ }
144
+ function printCaptureTally(options, { captured, skipped, rejected }) {
132
145
  const prefix = options.dryRun ? '[dry-run] ' : '';
133
- const globalPrefix = useGlobal ? '[global] ' : '';
146
+ const globalPrefix = options.global ? '[global] ' : '';
134
147
  console.log(`\n${prefix}${globalPrefix}Captured ${captured} items (${skipped} skipped as duplicates` +
135
148
  (rejected > 0 ? `, ${rejected} rejected` : '') +
136
149
  ')');
@@ -247,7 +260,7 @@ function captureOne(ctx, item, entry) {
247
260
  return 'skipped';
248
261
  writeEntryMirrors(targetRoot, stamped);
249
262
  if (!options.lean)
250
- updateStats(targetRoot, { remembered: 1 });
263
+ updateStatsOn(writeDb, targetRoot, { remembered: 1 });
251
264
  keys.add(duplicateKey(item.content)); // within-batch dedup
252
265
  if (!options.lean)
253
266
  void embedMemory(targetRoot, entry);
@@ -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 { CallerHookOutput } from './pre-compact-caller.js';
4
4
  export interface CallerCompactResumeRequest {
5
5
  readonly sessionId: string;
@@ -1,9 +1,9 @@
1
- import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText } from '../context-render.js';
2
- import { withLedgerDb } from '../ledger-db.js';
3
- import { errorMessage, log } from '../log.js';
1
+ import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText } from '../api/context-render.js';
2
+ import { bookTokenUse } from '../api/ledger-db.js';
3
+ import { errorMessage, log } from '../util/log.js';
4
4
  import { listSessionEvents, loadFreshActiveTaskSnapshot } from '../store/sessions.js';
5
- import { estimateTokens, recordTokenUse } from '../token-ledger.js';
6
- import { truncateCodePointSafe } from '../transcript-tail.js';
5
+ import { estimateTokens } from '../util/token-text.js';
6
+ import { truncateCodePointSafe } from '../util/transcript-tail.js';
7
7
  import { bindCaller, callerInHoldout } from './caller-session.js';
8
8
  export function compactResumeForCaller(ctx, req) {
9
9
  const key = bindCaller(ctx, req.sessionId, req.project);
@@ -14,9 +14,9 @@ export function compactResumeForCaller(ctx, req) {
14
14
  if (snapshot === null || (snapshot.session_id !== null && snapshot.session_id !== req.sessionId))
15
15
  return { stdout: '' };
16
16
  const text = compactResumeText(snapshot, sessionTrail(ctx, snapshot.session_id));
17
- withLedgerDb(ctx.hippoRoot, (db) => recordTokenUse(db, {
17
+ bookTokenUse(ctx.hippoRoot, {
18
18
  tenantId: ctx.tenantId, sessionId: req.sessionId, surface: 'compact_resume', event: 'inject', items: 1, tokens: estimateTokens(text),
19
- }), { sharedStore: true });
19
+ }, { sharedStore: true });
20
20
  return { stdout: text };
21
21
  }
22
22
  /** A bad trail row costs the trail, not the snapshot. */
@@ -1,4 +1,4 @@
1
- import { type HookRuntime } from '../capture-contract.js';
1
+ import { type HookRuntime } from '../core/capture-contract.js';
2
2
  /**
3
3
  * Log-forgery guard: messages here interpolate payload-controlled values
4
4
  * (transcript paths, session ids). Strip C0 control chars — newlines above
@@ -13,6 +13,8 @@ export interface PreCompactOptions {
13
13
  stdinTimedOut?: boolean;
14
14
  logFile?: string;
15
15
  runtime?: HookRuntime;
16
+ /** Called once when the hook accepts a compaction, with the text it printed or null when it printed none. */
17
+ onBoundary?: (printed: string | null) => void;
16
18
  }
17
19
  /**
18
20
  * PreCompact hook entry point. Exit code 2 on PreCompact BLOCKS compaction,
@@ -24,6 +26,7 @@ export interface PreCompactOptions {
24
26
  export declare function cmdPreCompact(hippoRoot: string, options: PreCompactOptions): Promise<void>;
25
27
  export interface PostCompactOptions {
26
28
  stdinText?: string;
29
+ stdinTimedOut?: boolean;
27
30
  logFile?: string;
28
31
  afterSave?: (transcriptPath: string, cwd: string | null, log: (message: string) => void) => void;
29
32
  }
@@ -2,11 +2,11 @@ import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
  import { isInitialized } from '../store/open.js';
4
4
  import { saveActiveTaskSnapshot, loadActiveTaskSnapshot } from '../store/sessions.js';
5
- import { PRE_COMPACT_INSTRUCTION, parsePostCompactPayload, postCompactLine, recordCompactionStart, recordSnapshotSaved, saveCompaction, replayCompactionsAt, COMPACTION_DB_WAIT_MS, } from '../compaction-record.js';
6
- import { resolveTenantId } from '../tenant.js';
5
+ import { PRE_COMPACT_INSTRUCTION, postCompactLine, recordCompactionStart, recordSnapshotSaved, saveCompaction, replayCompactionsAt, COMPACTION_DB_WAIT_MS, } from './compaction-record.js';
6
+ import { resolveTenantId } from '../store/tenant.js';
7
7
  import { defaultPreCompactLogPath, vscodeUserHooksFile } from '../hooks/shared.js';
8
- import { readClaudeCodePreCompact } from '../capture-contract.js';
9
- import { errorMessage } from '../log.js';
8
+ import { readClaudeCodePostCompact, readClaudeCodePreCompact } from '../core/capture-contract.js';
9
+ import { errorMessage, log as logger } from '../util/log.js';
10
10
  import { resolveLastSessionTranscript } from './transcript.js';
11
11
  import { isVscodeTranscript } from './copilot-transcript.js';
12
12
  import { mergeWorkingState, transcriptWorkingState } from './working-state.js';
@@ -36,8 +36,9 @@ function appendPreCompactLog(logFile, message) {
36
36
  }
37
37
  fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} ${sanitizeLogMessage(message)}\n`, 'utf8');
38
38
  }
39
- catch {
39
+ catch (err) {
40
40
  // Diagnostic-only; a log write failure must never affect the exit-0 contract.
41
+ logger.debug(`pre-compact log not written: ${errorMessage(err)}`);
41
42
  }
42
43
  }
43
44
  /** True iff `filePath` exists and is readable — checks both in one call. */
@@ -52,11 +53,14 @@ function isReadableFile(filePath) {
52
53
  }
53
54
  /** PreCompact stdout is the summariser's instructions; sent before the snapshot work because a locked store can run the hook past its 30 s limit, and via writeSync because process.exit drops buffered pipe output. */
54
55
  function printPreCompactInstruction(logFile) {
56
+ const text = `${PRE_COMPACT_INSTRUCTION}\n`;
55
57
  try {
56
- fs.writeSync(1, `${PRE_COMPACT_INSTRUCTION}\n`);
58
+ fs.writeSync(1, text);
59
+ return text;
57
60
  }
58
61
  catch (err) {
59
62
  appendPreCompactLog(logFile, `instruction not printed: ${errorMessage(err)}`);
63
+ return null;
60
64
  }
61
65
  }
62
66
  /** The Copilot CLI accepts both preCompact and PreCompact, so hippo.json's pair can run twice for one compaction. */
@@ -82,7 +86,7 @@ function runPreCompact(hippoRoot, options, logFile) {
82
86
  appendPreCompactLog(logFile, `skip: ${receipt.reason}`);
83
87
  return;
84
88
  }
85
- const { sessionId, transcriptPath: payloadTranscriptPath, cwd: payloadCwd, trigger: payloadTrigger } = receipt.input;
89
+ const { sessionId, transcriptPath: payloadTranscriptPath } = receipt.input;
86
90
  // With chat.useClaudeHooks on, VS Code runs Claude Code's hooks too; it never sends PostCompact to close a record, nor reads the summariser text.
87
91
  const vscode = runtime === 'claude-code' && isVscodeTranscript(payloadTranscriptPath);
88
92
  if (vscode && fs.existsSync(vscodeUserHooksFile())) {
@@ -93,13 +97,7 @@ function runPreCompact(hippoRoot, options, logFile) {
93
97
  appendPreCompactLog(logFile, `skip: snapshot for session ${sessionId} saved under ${TWIN_FIRE_MS / 1000} s ago, by the other preCompact entry`);
94
98
  return;
95
99
  }
96
- // The record is the "something saved before every compaction", so it lands even when no snapshot is derivable below.
97
- // Copilot has no PostCompact hook to close a record, so its compactions get the snapshot alone.
98
- let recordId = null;
99
- if (runtime === 'claude-code' && !vscode && sessionId !== null && sessionId !== '') {
100
- recordId = recordCompactionStart(hippoRoot, { sessionId, trigger: payloadTrigger, cwd: payloadCwd, transcriptPath: payloadTranscriptPath }, (message) => appendPreCompactLog(logFile, message));
101
- printPreCompactInstruction(logFile);
102
- }
100
+ const recordId = markCompactionBoundary(hippoRoot, options, logFile, receipt.input, runtime === 'claude-code' && !vscode);
103
101
  const transcriptPath = resolvePreCompactTranscript(payloadTranscriptPath, stdinText, logFile, runtime);
104
102
  if (!transcriptPath)
105
103
  return;
@@ -109,6 +107,26 @@ function runPreCompact(hippoRoot, options, logFile) {
109
107
  return;
110
108
  saveDerivedSnapshot(hippoRoot, logFile, sessionId, recordId, derived);
111
109
  }
110
+ /** Starts the compaction record when the host will close one (`closable`), then tells `onBoundary` what was printed; the record id, or null without a record. */
111
+ function markCompactionBoundary(hippoRoot, options, logFile, input, closable) {
112
+ const { sessionId } = input;
113
+ // The record is the "something saved before every compaction", so it lands even when no snapshot is derivable later.
114
+ // Copilot has no PostCompact hook to close a record, so its compactions get the snapshot alone.
115
+ let recordId = null;
116
+ let printed = null;
117
+ if (closable && sessionId !== null && sessionId !== '') {
118
+ recordId = recordCompactionStart(hippoRoot, { sessionId, trigger: input.trigger, cwd: input.cwd, transcriptPath: input.transcriptPath }, (message) => appendPreCompactLog(logFile, message));
119
+ printed = printPreCompactInstruction(logFile);
120
+ }
121
+ // Its own guard, so a throwing callback can never skip the snapshot work that follows.
122
+ try {
123
+ options.onBoundary?.(printed);
124
+ }
125
+ catch (err) {
126
+ appendPreCompactLog(logFile, `boundary callback failed: ${errorMessage(err)}`);
127
+ }
128
+ return recordId;
129
+ }
112
130
  /** The transcript to snapshot, or null after logging why there is none. */
113
131
  function resolvePreCompactTranscript(payloadTranscriptPath, stdinText, logFile, runtime) {
114
132
  // A payload transcript_path is EXCLUSIVE: auto-discovery would snapshot a DIFFERENT session's
@@ -142,8 +160,8 @@ function saveDerivedSnapshot(hippoRoot, logFile, sessionId, recordId, derived) {
142
160
  try {
143
161
  existing = loadActiveTaskSnapshot(hippoRoot, tenantId);
144
162
  }
145
- catch {
146
- // No existing snapshot to merge against — proceed with derived-only.
163
+ catch (err) {
164
+ logger.debug(`pre-compact: stored snapshot unreadable, saving the derived one alone: ${errorMessage(err)}`);
147
165
  }
148
166
  // Carried-over fields are not re-capped, as `hippo snapshot save` stays uncapped; saveActiveTaskSnapshot scrubs every field.
149
167
  const merged = mergeWorkingState(derived, existing, sessionId);
@@ -191,19 +209,19 @@ export function cmdPostCompact(hippoRoot, options) {
191
209
  log('skip: no hippo store');
192
210
  return null;
193
211
  }
194
- const payload = parsePostCompactPayload(options.stdinText);
212
+ const receipt = readClaudeCodePostCompact(options.stdinText, options.stdinTimedOut ?? false);
195
213
  let line = null;
196
214
  let storeBusy = false;
197
- if (payload === null) {
198
- log('skip: no PostCompact payload naming a session');
215
+ if (receipt.status !== 'received') {
216
+ log(`skip: ${receipt.reason}`);
199
217
  }
200
218
  else {
201
- const saved = saveCompaction(hippoRoot, payload, log);
219
+ const saved = saveCompaction(hippoRoot, receipt.input, log);
202
220
  line = postCompactLine(saved);
203
221
  storeBusy = saved.deferred;
204
- if (!storeBusy && payload.transcriptPath !== null && options.afterSave) {
222
+ if (!storeBusy && receipt.input.transcriptPath !== null && options.afterSave) {
205
223
  try {
206
- options.afterSave(payload.transcriptPath, payload.cwd, log);
224
+ options.afterSave(receipt.input.transcriptPath, receipt.input.cwd, log);
207
225
  }
208
226
  catch (err) {
209
227
  log(`agent memory import failed: ${errorMessage(err)}`);
@@ -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
  export interface CallerItemsRequest {
4
4
  readonly sessionId: string;
5
5
  readonly project: CallerProject;
@@ -1,8 +1,8 @@
1
1
  // PostCompact for a caller on another machine: the items it parsed become rows under its owner and project, and a retried request id writes nothing twice.
2
- import { BadRequestError } from '../api-errors.js';
3
- import { COMPACTION_ITEM_MAX_CHARS } from '../compaction-items.js';
4
- import { compactionByRequest, recordSummary, saveItems, scrubCompactionItems } from '../compaction-record.js';
5
- import { log } from '../log.js';
2
+ import { BadRequestError } from '../core/api-errors.js';
3
+ import { COMPACTION_ITEM_MAX_CHARS } from './compaction-items.js';
4
+ import { compactionByRequest, recordSummary, saveItems, scrubCompactionItems } from './compaction-record.js';
5
+ import { log } from '../util/log.js';
6
6
  import { assertRequestId, assertTrigger, bindCaller, callerInHoldout, withCallerDb } from './caller-session.js';
7
7
  /** Busy throws, for the server's 503: the retry carries the same request id, so nothing is spooled or deferred here. */
8
8
  export function saveCompactionItemsForCaller(ctx, req) {
@@ -21,7 +21,9 @@ export function saveCompactionItemsForCaller(ctx, req) {
21
21
  return { written: earlier.itemsWritten };
22
22
  const meta = { sessionId: req.sessionId, trigger: req.trigger, cwd: null, transcriptPath: null };
23
23
  const text = { summary: '', items: scrubCompactionItems(req.items) };
24
- const record = earlier ?? recordSummary(db, ctx.hippoRoot, ctx.tenantId, meta, text, new Date(), { originProject: req.project.name, requestId: req.requestId });
24
+ const record = earlier ?? recordSummary(db, ctx.hippoRoot, ctx.tenantId, {
25
+ meta, text, at: new Date(), caller: { originProject: req.project.name, requestId: req.requestId },
26
+ });
25
27
  const written = saveItems(db, ctx.hippoRoot, {
26
28
  tenantId: ctx.tenantId, recordId: record.id, sessionId: req.sessionId, originProject: record.originProject, cwd: null,
27
29
  items: record.items, caller: { actor: key.owner, origins: key.project },
@@ -2,10 +2,34 @@
2
2
  export const COMPACTION_ITEM_MAX_CHARS = 500;
3
3
  export const COMPACTION_ITEM_ROW_CAP = 10;
4
4
  const HEADING = 'memories for hippo';
5
- const ITEM_LINE = /^\s*(?:[-*]|\d+[.)])(?:\s+(.*))?$/;
5
+ // `\S` parts the gap from the text, so a line that fails to match is scanned once, not once per space.
6
+ const ITEM_LINE = /^\s*(?:[-*]|\d+[.)])(?:\s+(\S.*)?)?$/;
7
+ const ANALYSIS_OPEN = '<analysis>';
8
+ const ANALYSIS_CLOSE = '</analysis>';
9
+ const HEADING_TRAILER = /[*:\s]/;
10
+ /** `text` minus each closed <analysis> block; a search, as a lazy pattern rescans the rest from every unclosed tag. */
11
+ function withoutAnalysis(text) {
12
+ let kept = '';
13
+ let from = 0;
14
+ for (;;) {
15
+ const open = text.indexOf(ANALYSIS_OPEN, from);
16
+ const close = open < 0 ? -1 : text.indexOf(ANALYSIS_CLOSE, open + ANALYSIS_OPEN.length);
17
+ if (close < 0)
18
+ return kept + text.slice(from);
19
+ kept += text.slice(from, open);
20
+ from = close + ANALYSIS_CLOSE.length;
21
+ }
22
+ }
23
+ /** `text` minus its trailing run of `*`, `:` and spaces; read from the end, as a `+$` pattern retries the run from each character. */
24
+ function withoutHeadingTrailer(text) {
25
+ let end = text.length;
26
+ while (end > 0 && HEADING_TRAILER.test(text[end - 1]))
27
+ end--;
28
+ return text.slice(0, end);
29
+ }
6
30
  /** The <summary> body of a PostCompact compact_summary with any <analysis> block removed; the whole text trimmed when there is no <summary> tag. */
7
31
  export function compactSummaryBody(compactSummary) {
8
- const text = compactSummary.replace(/<analysis>[\s\S]*?<\/analysis>/g, '');
32
+ const text = withoutAnalysis(compactSummary);
9
33
  const open = text.lastIndexOf('<summary>');
10
34
  if (open < 0)
11
35
  return text.trim();
@@ -14,7 +38,7 @@ export function compactSummaryBody(compactSummary) {
14
38
  return text.slice(from, close < 0 ? undefined : close).trim();
15
39
  }
16
40
  function isHeading(line) {
17
- const bare = line.replace(/^(?:[#*\s]|\d+\.)+/, '').replace(/[*:\s]+$/, '');
41
+ const bare = withoutHeadingTrailer(line.replace(/^(?:[#*\s]|\d+\.)+/, ''));
18
42
  return bare.toLowerCase() === HEADING;
19
43
  }
20
44
  /** found=false when no "Memories for hippo" heading; items in order, "none" dropped, never cut. */
@@ -1,4 +1,5 @@
1
- import { type DatabaseSyncLike } from './db.js';
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import { type CompactionStatus } from '../store/compactions.js';
2
3
  /** PostCompact has 10 s in all (PreCompact 30 s), so a locked store must be given up on early. */
3
4
  export declare const COMPACTION_DB_WAIT_MS = 2000;
4
5
  /** Tested verbatim: Claude Code hands PreCompact stdout to the summariser as instructions. */
@@ -7,7 +8,7 @@ export declare const PRE_COMPACT_INSTRUCTION = "In your summary, add a last sect
7
8
  export declare const REPLAY_AFTER_MS: number;
8
9
  /** Claude Code deletes transcripts after 30 days, so an older gap can never be filled. */
9
10
  export declare const TRANSCRIPT_FILL_WINDOW_MS: number;
10
- export type CompactionStatus = 'started' | 'summarised' | 'done' | 'no-summary';
11
+ export type { CompactionStatus };
11
12
  export interface CompactionRecord {
12
13
  id: string;
13
14
  tenantId: string;
@@ -61,8 +62,14 @@ export interface SummaryCaller {
61
62
  originProject?: string;
62
63
  requestId?: string;
63
64
  }
65
+ export interface RecordSummaryOptions {
66
+ readonly meta: Omit<CompactionStart, 'originProject'>;
67
+ readonly text: CompactionText;
68
+ readonly at: Date;
69
+ readonly caller?: SummaryCaller;
70
+ }
64
71
  /** Puts the summary on the session's `started` record, or inserts a `summarised` one when pre-compact wrote none. One statement each. */
65
- export declare function recordSummary(db: DatabaseSyncLike, hippoRoot: string, tenantId: string, meta: Omit<CompactionStart, 'originProject'>, text: CompactionText, at: Date, caller?: SummaryCaller): CompactionRecord;
72
+ export declare function recordSummary(db: DatabaseSyncLike, hippoRoot: string, tenantId: string, options: RecordSummaryOptions): CompactionRecord;
66
73
  export interface ItemContext {
67
74
  tenantId: string;
68
75
  /** null when the record step failed: the items still go in, with no record to close. */
@@ -88,8 +95,6 @@ export interface PostCompactPayload {
88
95
  /** null when Claude Code sent none; the transcript fills the record later. */
89
96
  compactSummary: string | null;
90
97
  }
91
- /** null when the text is not a PostCompact payload naming a session. */
92
- export declare function parsePostCompactPayload(stdinText: string | undefined): PostCompactPayload | null;
93
98
  export interface CompactionSaveResult {
94
99
  /** Memories written; null when neither the record nor the items could be saved. */
95
100
  written: number | null;
@@ -108,5 +113,4 @@ export declare function replayCompactionsAt(hippoRoot: string, log: Log, opts?:
108
113
  busyWaitMs?: number;
109
114
  deadline?: number;
110
115
  }): number;
111
- export {};
112
116
  //# sourceMappingURL=compaction-record.d.ts.map