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
@@ -8,34 +8,37 @@ import { resolveJsonHookPaths } from '../hooks/json-hooks.js';
8
8
  import { isInitialized } from '../store/open.js';
9
9
  import { loadActiveTaskSnapshot, loadFreshActiveTaskSnapshot, closeTaskSnapshotsForSession, listSessionEvents, } from '../store/sessions.js';
10
10
  import { writeSessionEndHandoff } from '../store/handoffs.js';
11
- import { readSessionScan, recordSessionDigest } from '../session-digest.js';
12
- import { openHippoDb, closeHippoDb } from '../db.js';
13
- import { captureToolFailure } from '../capture-error.js';
14
- import { estimateTokens, isSubagentPayload, readApiCalls, recordRereads, recordTokenUse, } from '../token-ledger.js';
11
+ import { readSessionScan, recordSessionDigest } from '../capture/session-digest.js';
12
+ import { openHippoDb, closeHippoDb } from '../db/index.js';
13
+ import { captureToolFailure } from '../capture/capture-error.js';
14
+ import { readApiCalls, recordRereads, } from '../store/token-ledger.js';
15
+ import { estimateTokens } from '../util/token-text.js';
15
16
  import { currentMachine, importSessionFolder } from '../agent-memories/sync.js';
16
17
  import { summaryLine } from '../agent-memories/report.js';
17
- import { resolveProjectIdentity } from '../project-identity.js';
18
- import { getGlobalRoot } from '../shared.js';
18
+ import { resolveProjectIdentity } from '../core/project-identity.js';
19
+ import { getGlobalRoot } from '../sharing/shared.js';
19
20
  import { cmdCapture } from '../capture/command.js';
20
21
  import { cmdPreCompact, cmdPostCompact } from '../capture/compact.js';
21
22
  import { transcriptWorkingState } from '../capture/working-state.js';
22
- import { collectHandoffEvidence } from '../handoff-evidence.js';
23
- import { resolveLastSessionTranscript } from '../capture/transcript.js';
23
+ import { collectHandoffEvidence } from '../capture/handoff-evidence.js';
24
24
  import { copilotTranscriptFor, SESSION_ID_RE } from '../capture/copilot-transcript.js';
25
25
  import { loadTurnPosition, runSessionWorker, saveTurnPosition, turnsAfter } from '../capture/session-worker.js';
26
- import { isStringValue, readVscodeStop } from '../capture-contract.js';
27
- import { loadConfig } from '../config.js';
28
- import { countCreatedSinceLastSleep } from '../store/index-and-stats.js';
29
- import { truncateCodePointSafe } from '../transcript-tail.js';
30
- import { COMPACTION_DB_WAIT_MS } from '../compaction-record.js';
31
- import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText } from '../context-render.js';
32
- import { normaliseHookPayload, readHookStdin, readStdinBounded } from '../stdin.js';
33
- import { resolveTenantId } from '../tenant.js';
34
- import { errorMessage, log } from '../log.js';
35
- import { withLedgerDb } from '../ledger-db.js';
26
+ import { isStringValue, readSessionEnd, readVscodeStop } from '../core/capture-contract.js';
27
+ import { loadConfig } from '../core/config.js';
28
+ import { autoSleepDue } from '../api/auto-sleep.js';
29
+ import { truncateCodePointSafe } from '../util/transcript-tail.js';
30
+ import { COMPACTION_DB_WAIT_MS } from '../capture/compaction-record.js';
31
+ import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText } from '../api/context-render.js';
32
+ import { normaliseHookPayload, readHookStdin, readStdinBounded } from './stdin.js';
33
+ import { resolveTenantId } from '../store/tenant.js';
34
+ import { errorMessage, log } from '../util/log.js';
35
+ import { bookLedgerTurn } from '../api/ledger-db.js';
36
+ import { flushDeliveryRecorder } from '../api/prompt-hook.js';
36
37
  import { printError } from './output.js';
37
38
  import { cmdLastSleep } from './last-sleep.js';
38
- import { logSessionEndImport, appendSessionEndCloseLog, resetHookInjection, hookStoreRoot, hookRuntime, payloadCwdRoot, runHookWithStores, inPilotHoldout, } from './shared.js';
39
+ import { readCompactResumePayload } from './compact-resume-payload.js';
40
+ import { boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
41
+ import { logSessionEndImport, appendSessionEndCloseLog, resetHookInjection, hookStoreRoot, hookRuntime, payloadCwdRoot, runHookWithStores, inPilotHoldout, startDeliveryRecorder } from './hook-runtime.js';
39
42
  /**
40
43
  * SessionStart(compact) injector. Prints the active task snapshot + recent
41
44
  * session trail so working state that would otherwise be lost to
@@ -49,61 +52,35 @@ import { logSessionEndImport, appendSessionEndCloseLog, resetHookInjection, hook
49
52
  * hook must not pollute session startup.
50
53
  */
51
54
  function cmdCompactResume(hippoRoot, stdinText, stdinTimedOut) {
55
+ let rec = null;
52
56
  try {
53
57
  // Gate on the non-exiting isInitialized check first: the store reads below call initStore, which would
54
58
  // silently create a store in a project that never ran `hippo init`, and this hook fires globally.
55
59
  if (!isInitialized(hippoRoot)) {
56
60
  process.exit(0);
57
61
  }
58
- // The matcher is an optimization, not a dependency: older Claude Code
59
- // that ignores `matcher: 'compact'` would run this on every SessionStart,
60
- // so we also gate on payload.source here. A payload that parses but
61
- // carries a different source (e.g. 'startup') means the matcher-based
62
- // gate failed to apply — stay silent rather than print stale state.
63
- const nonEmptyStdin = !!stdinText && stdinText.trim() !== '';
64
- // Without a payload session_id the cross-restore guard below can
65
- // never fire, so a timed-out empty read must not reach the print path.
66
- let suppressOutput = stdinTimedOut && !nonEmptyStdin;
67
- let payloadSessionId = null;
68
- if (nonEmptyStdin) {
69
- let payload = null;
70
- try {
71
- payload = JSON.parse(stdinText.trim());
72
- }
73
- catch {
74
- // Malformed JSON is handled as a null payload by the fail-closed check below.
75
- payload = null;
76
- }
77
- if (!payload || typeof payload !== 'object') {
78
- // Fail closed on malformed non-empty stdin; only a TTY/no-stdin manual run, which never reaches here, prints.
79
- suppressOutput = true;
80
- }
81
- else {
82
- // Fail closed on structurally incomplete payloads too ({}, [], source missing/non-string): real
83
- // SessionStart payloads always carry source, so a parsed one must say 'compact' to print.
84
- // A sub-agent's payload carries its parent's session id, so the mismatch guard would pass and restore the parent's snapshot into it.
85
- if (payload.source !== 'compact' || isSubagentPayload(stdinText)) {
86
- suppressOutput = true;
87
- }
88
- if (typeof payload.session_id === 'string') {
89
- payloadSessionId = payload.session_id;
90
- }
91
- }
92
- }
62
+ const payloadState = readCompactResumePayload(stdinText, stdinTimedOut);
63
+ let suppressOutput = payloadState.suppressOutput;
64
+ const payloadSessionId = payloadState.payloadSessionId;
65
+ if (payloadState.boundary)
66
+ rec = startDeliveryRecorder(hippoRoot, stdinText, 'claude-code', 'compact-resume');
93
67
  // A compaction follows a prompt or SessionStart that booked the arm, so this only reads it.
94
68
  if (!suppressOutput && payloadSessionId !== null && inPilotHoldout(hippoRoot, resolveTenantId({}), payloadSessionId, false)) {
95
69
  suppressOutput = true;
70
+ rec?.disabled();
96
71
  }
97
72
  if (!suppressOutput)
98
- restoreCompactSnapshot(hippoRoot, payloadSessionId);
73
+ restoreCompactSnapshot(hippoRoot, payloadSessionId, rec);
99
74
  }
100
75
  catch (err) {
101
76
  // Empty stdout on any store error, never a crashed SessionStart; the reason goes to stderr, which the model never sees.
102
- log.warn(`hippo compact-resume: skipped: ${err instanceof Error ? err.message : String(err)}`);
77
+ log.warn(`hippo compact-resume: skipped: ${errorMessage(err)}`);
103
78
  }
79
+ // A no-op when the token ledger's handle already wrote the row; exit would drop it otherwise.
80
+ flushDeliveryRecorder(rec);
104
81
  process.exit(0);
105
82
  }
106
- function restoreCompactSnapshot(hippoRoot, payloadSessionId) {
83
+ function restoreCompactSnapshot(hippoRoot, payloadSessionId, rec) {
107
84
  const tenantId = resolveTenantId({});
108
85
  const snapshot = loadFreshActiveTaskSnapshot(hippoRoot, tenantId, { maxAgeMs: COMPACT_RESUME_MAX_AGE_MS });
109
86
  // Concurrent sessions must not cross-restore. Only suppress when BOTH ids are present and differ;
@@ -125,14 +102,18 @@ function restoreCompactSnapshot(hippoRoot, payloadSessionId) {
125
102
  }
126
103
  }
127
104
  catch (err) {
128
- log.warn(`hippo compact-resume: trail skipped: ${err instanceof Error ? err.message : String(err)}`);
105
+ log.warn(`hippo compact-resume: trail skipped: ${errorMessage(err)}`);
129
106
  }
130
107
  // Printed in one write so the ledger books exactly the text the model is handed.
131
108
  const text = compactResumeText(snapshot, events);
132
109
  console.log(text);
133
- withLedgerDb(hippoRoot, (db) => recordTokenUse(db, {
134
- tenantId, sessionId: payloadSessionId, surface: 'compact_resume', event: 'inject', items: 1, tokens: estimateTokens(text),
135
- }));
110
+ rec?.delivered({ state: 'sent', emittedText: `${text}\n` });
111
+ bookLedgerTurn(hippoRoot, {
112
+ uses: [{
113
+ tenantId, sessionId: payloadSessionId, surface: 'compact_resume', event: 'inject', items: 1, tokens: estimateTokens(text),
114
+ }],
115
+ delivery: (write) => flushDeliveryRecorder(rec, write),
116
+ });
136
117
  }
137
118
  /**
138
119
  * SessionEnd entry point. Claude Code / OpenCode fire this on /exit while
@@ -147,54 +128,31 @@ function restoreCompactSnapshot(hippoRoot, payloadSessionId) {
147
128
  */
148
129
  export async function cmdSessionEnd(hippoRoot, flags) {
149
130
  const runtime = hookRuntime(flags);
150
- const turn = flags['turn'] === true;
131
+ const turn = flagIsTrue(flags, 'turn');
151
132
  // Copilot's hook command carries no path, since one quoted into it would need escaping for each shell; the log goes where the hook table used to point.
152
- const logFile = typeof flags['log-file'] === 'string' ? flags['log-file'] : runtime === 'copilot' ? resolveJsonHookPaths('copilot').logFile : null;
133
+ const logFile = stringFlag(flags, 'log-file') ?? (runtime === 'copilot' ? resolveJsonHookPaths('copilot').logFile : null);
153
134
  // Bounded read: extracts transcript_path + session_id for the detached worker's argv.
154
- let sessionId = null;
155
135
  const raw = await readStdinBounded();
156
136
  // Read before normalising: the Copilot CLI's agentStop shares this hook line, and camelCase keys would pass as VS Code's.
157
- if (turn && !isVscodeStopPayload(raw))
137
+ const stop = turn ? vscodeStopInput(raw) : null;
138
+ if (turn && !stop)
158
139
  return;
159
140
  const stdinText = normaliseHookPayload(raw.text);
160
141
  // Before the spawn, since the worker finds its store from the folder it inherits.
161
142
  const root = payloadCwdRoot(hippoRoot, stdinText, runtime);
162
- try {
163
- if (stdinText && stdinText.trim().startsWith('{')) {
164
- const payload = JSON.parse(stdinText);
165
- if (typeof payload.session_id === 'string') {
166
- sessionId = payload.session_id;
167
- }
168
- }
169
- }
170
- catch {
171
- // No stdin, not JSON, or read failure: the snapshot close below will no-op.
172
- }
143
+ const input = stop ?? sessionEndInput(stdinText, raw.timedOut, runtime);
144
+ const sessionId = input?.sessionId ?? null;
173
145
  // Resolved here because only this process saw the payload; the worker captures just the path it is handed.
174
146
  // Always a hook, so never scan: an empty stdin here is not a manual run. The Copilot CLI's sessionEnd names no transcript, so its log is found by id.
175
- const transcriptPath = resolveLastSessionTranscript(undefined, stdinText, { mayScan: false })
147
+ const named = input?.transcriptPath ?? null;
148
+ const transcriptPath = (named !== null && fs.existsSync(named) ? named : null)
176
149
  ?? (runtime === 'copilot' && sessionId ? copilotTranscriptFor(sessionId) : null);
177
- const workerArgs = [process.argv[1], '__session-end-worker'];
178
- if (logFile)
179
- workerArgs.push('--log-file', logFile);
180
- if (transcriptPath)
181
- workerArgs.push('--transcript', transcriptPath);
182
- if (sessionId)
183
- workerArgs.push('--session-id', sessionId);
184
- if (turn)
185
- workerArgs.push('--turn');
186
150
  try {
187
- const child = spawn(process.execPath, workerArgs, {
188
- detached: true,
189
- stdio: 'ignore',
190
- windowsHide: true,
191
- });
192
- // An async spawn failure arrives as an 'error' event, which with no listener is an uncaught exception.
193
- child.on('error', (err) => log.warn(`hippo session-end: the worker did not start: ${errorMessage(err)}`));
194
- child.unref();
151
+ spawnSessionEndWorker(sessionEndWorkerArgs(logFile, transcriptPath, sessionId, turn));
195
152
  }
196
- catch {
197
- // If spawn fails, run inline as a last resort, handed what the child's argv would have carried.
153
+ catch (err) {
154
+ log.debug(`session-end: the worker did not spawn, running inline: ${errorMessage(err)}`);
155
+ // Inline is the last resort, handed what the child's argv would have carried.
198
156
  if (logFile)
199
157
  flags['log-file'] = logFile;
200
158
  if (transcriptPath)
@@ -205,21 +163,51 @@ export async function cmdSessionEnd(hippoRoot, flags) {
205
163
  return;
206
164
  }
207
165
  }
208
- /** A VS Code Stop payload with a session id that can name the lock file; anything else makes turn mode a silent no-op. */
209
- function isVscodeStopPayload(raw) {
166
+ /** What the session-end payload named; null for one hippo refuses or one that never arrived, and the worker then runs with neither value. */
167
+ function sessionEndInput(stdinText, timedOut, runtime) {
168
+ const receipt = readSessionEnd(stdinText, timedOut, runtime);
169
+ if (receipt.status === 'received')
170
+ return receipt.input;
171
+ log.debug(`session-end: ${receipt.reason}`);
172
+ return null;
173
+ }
174
+ function sessionEndWorkerArgs(logFile, transcriptPath, sessionId, turn) {
175
+ const workerArgs = [process.argv[1], '__session-end-worker'];
176
+ if (logFile)
177
+ workerArgs.push('--log-file', logFile);
178
+ if (transcriptPath)
179
+ workerArgs.push('--transcript', transcriptPath);
180
+ if (sessionId)
181
+ workerArgs.push('--session-id', sessionId);
182
+ if (turn)
183
+ workerArgs.push('--turn');
184
+ return workerArgs;
185
+ }
186
+ function spawnSessionEndWorker(workerArgs) {
187
+ const child = spawn(process.execPath, workerArgs, {
188
+ detached: true,
189
+ stdio: 'ignore',
190
+ windowsHide: true,
191
+ });
192
+ // An async spawn failure arrives as an 'error' event, which with no listener is an uncaught exception.
193
+ child.on('error', (err) => log.warn(`hippo session-end: the worker did not start: ${errorMessage(err)}`));
194
+ child.unref();
195
+ }
196
+ /** The input of a VS Code Stop payload with a session id that can name the lock file; null makes turn mode a silent no-op. */
197
+ function vscodeStopInput(raw) {
210
198
  const receipt = readVscodeStop(raw.text, raw.timedOut);
211
- return receipt.status === 'received' && receipt.input.sessionId !== null && SESSION_ID_RE.test(receipt.input.sessionId);
199
+ return receipt.status === 'received' && receipt.input.sessionId !== null && SESSION_ID_RE.test(receipt.input.sessionId) ? receipt.input : null;
212
200
  }
213
201
  export async function cmdSessionEndWorker(hippoRoot, flags) {
214
202
  const sessionId = flags['session-id'];
215
- await runSessionWorker(isStringValue(sessionId) ? sessionId : null, flags['turn'] === true ? 'turn' : 'full', (mode) => sessionEndWork(hippoRoot, flags, mode));
203
+ await runSessionWorker(isStringValue(sessionId) ? sessionId : null, flagIsTrue(flags, 'turn') ? 'turn' : 'full', (mode) => sessionEndWork(hippoRoot, flags, mode));
216
204
  }
217
205
  async function sessionEndWork(hippoRoot, flags, mode) {
218
- const transcriptPath = typeof flags['transcript'] === 'string' ? flags['transcript'] : undefined;
219
- const closeLogFile = typeof flags['log-file'] === 'string' ? flags['log-file'] : null;
220
- const closeSessionId = typeof flags['session-id'] === 'string' ? flags['session-id'] : null;
206
+ const transcriptPath = stringFlag(flags, 'transcript');
207
+ const closeLogFile = stringFlag(flags, 'log-file') ?? null;
208
+ const closeSessionId = stringFlag(flags, 'session-id') ?? null;
221
209
  const rereadLog = await bookSessionRereads(hippoRoot, transcriptPath, closeSessionId)
222
- .catch((err) => [`re-read count failed: ${err instanceof Error ? err.message : String(err)}`]);
210
+ .catch((err) => [`re-read count failed: ${errorMessage(err)}`]);
223
211
  // Sleep starts the log file afresh, so the lines go in after it; on exit too, in case sleep exits the process.
224
212
  const flushRereadLog = () => { for (const line of rereadLog.splice(0))
225
213
  appendSessionEndCloseLog(closeLogFile, line); };
@@ -258,6 +246,9 @@ async function sessionEndWork(hippoRoot, flags, mode) {
258
246
  appendSessionEndCloseLog(closeLogFile, 'skip snapshot close: turn mode');
259
247
  return;
260
248
  }
249
+ closeEndedSessionSnapshot(store, closeSessionId, closeLogFile);
250
+ }
251
+ function closeEndedSessionSnapshot(store, closeSessionId, closeLogFile) {
261
252
  try {
262
253
  if (closeSessionId) {
263
254
  const closed = closeTaskSnapshotsForSession(store, resolveTenantId({}), closeSessionId);
@@ -268,7 +259,7 @@ async function sessionEndWork(hippoRoot, flags, mode) {
268
259
  }
269
260
  }
270
261
  catch (err) {
271
- appendSessionEndCloseLog(closeLogFile, `snapshot close failed: ${err.message}`);
262
+ appendSessionEndCloseLog(closeLogFile, `snapshot close failed: ${errorMessage(err)}`);
272
263
  }
273
264
  }
274
265
  async function sleepProjectStore(hippoRoot, flags, closeLogFile, transcriptPath) {
@@ -277,9 +268,9 @@ async function sleepProjectStore(hippoRoot, flags, closeLogFile, transcriptPath)
277
268
  try {
278
269
  await (await import('./sleep.js')).cmdSleep(hippoRoot, flags);
279
270
  }
280
- catch {
281
- // sleep errors are already tee'd to the log file via cmdSleep's
282
- // `[hippo] sleep failed: ...` line. Continue to capture regardless.
271
+ catch (err) {
272
+ // cmdSleep writes its failure line only when it has a log file, and capture runs regardless.
273
+ log.debug(`session-end: sleep failed: ${errorMessage(err)}`);
283
274
  }
284
275
  }
285
276
  else {
@@ -293,9 +284,8 @@ async function sleepIfDue(hippoRoot, flags, closeLogFile, transcriptPath, sessio
293
284
  return sleepProjectStore(hippoRoot, flags, closeLogFile, transcriptPath);
294
285
  const prefix = `turn close, session ${sessionId}`;
295
286
  try {
296
- const { enabled, threshold } = loadConfig(hippoRoot).autoSleep;
297
- const count = enabled ? countCreatedSinceLastSleep(hippoRoot, resolveTenantId({})) : 0;
298
- if (!enabled || count < threshold) {
287
+ const { enabled, count, threshold, due } = autoSleepDue(hippoRoot, resolveTenantId({}), loadConfig(hippoRoot).autoSleep);
288
+ if (!due) {
299
289
  const why = enabled ? `${count} new memories, threshold ${threshold}` : 'auto-sleep is off';
300
290
  appendSessionEndCloseLog(closeLogFile, `${prefix}: skip sleep, ${why}`, { startFresh: true });
301
291
  return;
@@ -324,7 +314,7 @@ function captureNewTurns(transcriptPath, sessionId, scan, capture, log) {
324
314
  /** True when capture ran to the end, so a turn close may move its cursor past these turns. */
325
315
  function captureEndedSession(hippoRoot, store, flags, transcriptPath, turns) {
326
316
  try {
327
- const logFile = typeof flags['log-file'] === 'string' ? flags['log-file'] : undefined;
317
+ const logFile = stringFlag(flags, 'log-file');
328
318
  // With no stdin of its own, capture would read this as a manual run and scan every project.
329
319
  if (!transcriptPath) {
330
320
  appendSessionEndCloseLog(logFile ?? null, 'skip capture: no transcript for this session');
@@ -343,8 +333,8 @@ function captureEndedSession(hippoRoot, store, flags, transcriptPath, turns) {
343
333
  });
344
334
  return true;
345
335
  }
346
- catch {
347
- // Same treatment — the failure line is already in the log.
336
+ catch (err) {
337
+ log.debug(`session-end: capture failed: ${errorMessage(err)}`);
348
338
  return false;
349
339
  }
350
340
  }
@@ -367,7 +357,7 @@ function writeEndHandoff(store, closeSessionId, transcriptPath, closeLogFile, in
367
357
  }
368
358
  catch (err) {
369
359
  // SAFETY: catch clauses bind unknown, but Node/V8 always throws an Error here.
370
- appendSessionEndCloseLog(closeLogFile, `handoff write failed: ${err.message}`);
360
+ appendSessionEndCloseLog(closeLogFile, `handoff write failed: ${errorMessage(err)}`);
371
361
  }
372
362
  }
373
363
  /** Books the ending session's re-reads in each store its ledger rows can land in (project and global); returns the log lines. */
@@ -379,7 +369,7 @@ async function bookSessionRereads(hippoRoot, transcriptPath, sessionId) {
379
369
  read = await readApiCalls(transcriptPath);
380
370
  }
381
371
  catch (err) {
382
- return [`skip re-read count: cannot read the transcript: ${err instanceof Error ? err.message : String(err)}`];
372
+ return [`skip re-read count: cannot read the transcript: ${errorMessage(err)}`];
383
373
  }
384
374
  const roots = new Set([hippoRoot, getGlobalRoot()].filter((root) => isInitialized(root)).map((root) => path.resolve(root)));
385
375
  const lines = [];
@@ -395,7 +385,7 @@ async function bookSessionRereads(hippoRoot, transcriptPath, sessionId) {
395
385
  }
396
386
  }
397
387
  catch (err) {
398
- lines.push(`re-read count failed: ${err instanceof Error ? err.message : String(err)}`);
388
+ lines.push(`re-read count failed: ${errorMessage(err)}`);
399
389
  }
400
390
  }
401
391
  const skipped = read.malformed > 0 ? `, ${read.malformed} unparsable transcript lines skipped` : '';
@@ -442,8 +432,8 @@ export function cmdCodexRun(hippoRoot, args) {
442
432
  try {
443
433
  cmdLastSleep(hippoRoot, { path: metadata.logFile }, 'terminal');
444
434
  }
445
- catch {
446
- // best-effort only
435
+ catch (err) {
436
+ log.debug(`codex run: the last sleep summary was not shown: ${errorMessage(err)}`);
447
437
  }
448
438
  const child = spawnRealCodex(metadata.realCodexPath, args, process.cwd());
449
439
  child.on('error', (err) => {
@@ -451,85 +441,93 @@ export function cmdCodexRun(hippoRoot, args) {
451
441
  process.exit(1);
452
442
  });
453
443
  child.on('exit', async (code, signal) => {
454
- const workerArgs = [
455
- process.argv[1],
456
- '__codex-session-end-worker',
457
- '--codex-home',
458
- path.dirname(historyPath),
459
- '--history-path',
460
- historyPath,
461
- '--start-offset',
462
- String(startOffsetBytes),
463
- '--started-at',
464
- String(startedAtMs),
465
- '--log-file',
466
- metadata.logFile,
467
- ];
444
+ await launchCodexSessionEndWorker(hippoRoot, historyPath, startOffsetBytes, startedAtMs, metadata.logFile);
445
+ exitLikeChild(code, signal);
446
+ });
447
+ }
448
+ async function launchCodexSessionEndWorker(hippoRoot, historyPath, startOffsetBytes, startedAtMs, logFile) {
449
+ const workerArgs = [
450
+ process.argv[1],
451
+ '__codex-session-end-worker',
452
+ '--codex-home',
453
+ path.dirname(historyPath),
454
+ '--history-path',
455
+ historyPath,
456
+ '--start-offset',
457
+ String(startOffsetBytes),
458
+ '--started-at',
459
+ String(startedAtMs),
460
+ '--log-file',
461
+ logFile,
462
+ ];
463
+ try {
464
+ const worker = spawn(process.execPath, workerArgs, {
465
+ detached: true,
466
+ stdio: 'ignore',
467
+ windowsHide: true,
468
+ });
469
+ worker.unref();
470
+ }
471
+ catch (err) {
472
+ log.debug(`codex run: the session-end worker did not spawn, running inline: ${errorMessage(err)}`);
473
+ // Awaited so the sleep write can't be killed by the exit calls below.
468
474
  try {
469
- const worker = spawn(process.execPath, workerArgs, {
470
- detached: true,
471
- stdio: 'ignore',
472
- windowsHide: true,
475
+ await cmdCodexSessionEndWorker(hippoRoot, {
476
+ 'codex-home': path.dirname(historyPath),
477
+ 'history-path': historyPath,
478
+ 'start-offset': String(startOffsetBytes),
479
+ 'started-at': String(startedAtMs),
480
+ 'log-file': logFile,
473
481
  });
474
- worker.unref();
475
482
  }
476
- catch {
477
- // Fall back to the inline path if the detached worker cannot be created.
478
- // Awaited so the sleep write can't be killed by the exit calls below.
479
- try {
480
- await cmdCodexSessionEndWorker(hippoRoot, {
481
- 'codex-home': path.dirname(historyPath),
482
- 'history-path': historyPath,
483
- 'start-offset': String(startOffsetBytes),
484
- 'started-at': String(startedAtMs),
485
- 'log-file': metadata.logFile,
486
- });
487
- }
488
- catch {
489
- // cmdCodexSessionEndWorker already fail-softs internally; this is belt-and-braces.
490
- }
483
+ catch (inlineErr) {
484
+ log.debug(`codex run: the inline session-end failed: ${errorMessage(inlineErr)}`);
491
485
  }
492
- if (signal) {
493
- try {
494
- process.kill(process.pid, signal);
495
- }
496
- catch {
497
- // Cannot re-raise the child's signal on this platform; a non-zero exit still reports the failure.
498
- process.exit(1);
499
- }
500
- return;
486
+ }
487
+ }
488
+ function exitLikeChild(code, signal) {
489
+ if (signal) {
490
+ try {
491
+ process.kill(process.pid, signal);
501
492
  }
502
- process.exit(code ?? 0);
503
- });
493
+ catch {
494
+ // Cannot re-raise the child's signal on this platform; a non-zero exit still reports the failure.
495
+ process.exit(1);
496
+ }
497
+ return;
498
+ }
499
+ process.exit(code ?? 0);
504
500
  }
505
501
  export async function cmdCodexSessionEndWorker(hippoRoot, flags) {
506
- const logFile = typeof flags['log-file'] === 'string' ? flags['log-file'] : undefined;
502
+ const logFile = stringFlag(flags, 'log-file');
507
503
  // Like the other hooks: project store, else global; a folder with neither must not get one made.
508
504
  const store = hookStoreRoot(hippoRoot);
509
505
  if (!isInitialized(store)) {
510
506
  appendSessionEndCloseLog(logFile ?? null, 'skip: no hippo store for this folder or globally', { startFresh: true });
511
507
  return;
512
508
  }
509
+ await sleepCodexProjectStore(hippoRoot, logFile);
510
+ captureCodexTranscript(hippoRoot, store, flags, logFile);
511
+ }
512
+ async function sleepCodexProjectStore(hippoRoot, logFile) {
513
513
  // Sleeping the global store from here would learn this folder's git commits into it; it has its own daily sleep.
514
514
  if (isInitialized(hippoRoot)) {
515
515
  try {
516
516
  await (await import('./sleep.js')).cmdSleep(hippoRoot, logFile ? { 'log-file': logFile } : {});
517
517
  }
518
- catch {
519
- // sleep errors are already written via cmdSleep
518
+ catch (err) {
519
+ log.debug(`codex session-end: sleep failed: ${errorMessage(err)}`);
520
520
  }
521
521
  }
522
522
  else {
523
523
  appendSessionEndCloseLog(logFile ?? null, 'skip sleep: this folder has no store of its own', { startFresh: true });
524
524
  logSessionEndImport(logFile ?? null, undefined);
525
525
  }
526
+ }
527
+ function captureCodexTranscript(hippoRoot, store, flags, logFile) {
526
528
  try {
527
- const codexHome = typeof flags['codex-home'] === 'string'
528
- ? flags['codex-home']
529
- : resolveCodexWrapperPaths().codexHome;
530
- const historyPath = typeof flags['history-path'] === 'string'
531
- ? flags['history-path']
532
- : path.join(codexHome, 'history.jsonl');
529
+ const codexHome = stringFlag(flags, 'codex-home') ?? resolveCodexWrapperPaths().codexHome;
530
+ const historyPath = stringFlag(flags, 'history-path') ?? path.join(codexHome, 'history.jsonl');
533
531
  const startOffsetBytes = parseInt(String(flags['start-offset'] ?? '0'), 10) || 0;
534
532
  const startedAtMs = parseInt(String(flags['started-at'] ?? Date.now()), 10) || Date.now();
535
533
  const transcriptPath = resolveCodexSessionTranscript({
@@ -558,14 +556,14 @@ export async function cmdCodexSessionEndWorker(hippoRoot, flags) {
558
556
  try {
559
557
  cmdCapture(store, captureOpts);
560
558
  }
561
- catch {
562
- // capture path logs its own failures
559
+ catch (err) {
560
+ log.debug(`codex session-end: capture failed: ${errorMessage(err)}`);
563
561
  }
564
562
  // The Codex wrapper passes no session id, so the rollout file names the session.
565
563
  recordSessionDigest(hippoRoot, scan, { key: path.basename(transcriptPath, '.jsonl'), tenantId: resolveTenantId({}), log: digestLog });
566
564
  }
567
- catch {
568
- // capture path logs its own failures
565
+ catch (err) {
566
+ log.debug(`codex session-end: transcript scan or digest failed: ${errorMessage(err)}`);
569
567
  }
570
568
  }
571
569
  export async function handlePreCompact({ hippoRoot, flags }) {
@@ -574,22 +572,29 @@ export async function handlePreCompact({ hippoRoot, flags }) {
574
572
  const runtime = hookRuntime(flags);
575
573
  const root = payloadCwdRoot(hippoRoot, stdinText, runtime);
576
574
  await runHookWithStores(async () => {
575
+ // Started before any store wait, so two fires of one hook carry timestamps close enough to match as duplicates.
576
+ const rec = startDeliveryRecorder(hookStoreRoot(root), stdinText, runtime, 'pre-compact');
577
577
  resetHookInjection(root, stdinText, null);
578
578
  await cmdPreCompact(hookStoreRoot(root), {
579
579
  stdinText,
580
580
  stdinTimedOut,
581
- logFile: typeof flags['log-file'] === 'string' ? flags['log-file'] : undefined,
581
+ logFile: stringFlag(flags, 'log-file'),
582
582
  runtime,
583
+ onBoundary: (printed) => {
584
+ rec?.delivered(printed === null ? { state: 'empty' } : { state: 'sent', emittedText: printed });
585
+ flushDeliveryRecorder(rec);
586
+ },
583
587
  });
584
588
  });
585
589
  }
586
590
  export async function handlePostCompact({ hippoRoot, flags }) {
587
591
  // PostCompact hook: saves the compaction summary and its memories, then prints one plain line, because Claude Code shows this hook's stdout as-is. Always exits 0.
588
- const { text } = await readHookStdin();
592
+ const { text, timedOut } = await readHookStdin();
589
593
  const logFlag = flags['log-file'];
590
594
  const store = hookStoreRoot(hippoRoot);
591
595
  const line = await runHookWithStores(() => cmdPostCompact(store, {
592
596
  stdinText: text,
597
+ stdinTimedOut: timedOut,
593
598
  logFile: logFlag === true || logFlag === false || Array.isArray(logFlag) ? undefined : logFlag,
594
599
  // Passed in, since capture.ts importing the sync would close an import cycle.
595
600
  afterSave: (transcriptPath, cwd, log) => {
@@ -617,8 +622,9 @@ export async function handleCaptureError({ hippoRoot, flags }) {
617
622
  await runHookWithStores(() => captureToolFailure(root, resolveTenantId({}), failure));
618
623
  }
619
624
  }
620
- catch {
621
- // A malformed payload or store error must never fail the agent's tool call.
625
+ catch (err) {
626
+ // A malformed payload or store error must never fail the agent's tool call, so it is reported and dropped.
627
+ log.warn(`failure capture skipped: ${errorMessage(err)}`);
622
628
  }
623
629
  }
624
630
  export async function handleCompactResume({ hippoRoot }) {
@@ -662,9 +668,9 @@ export async function handleCapture({ hippoRoot, flags }) {
662
668
  transcriptPath,
663
669
  stdinText: bounded.text,
664
670
  stdinTimedOut: bounded.timedOut,
665
- logFile: typeof flags['log-file'] === 'string' ? flags['log-file'] : undefined,
666
- dryRun: Boolean(flags['dry-run']),
667
- global: Boolean(flags['global']),
671
+ logFile: stringFlag(flags, 'log-file'),
672
+ dryRun: boolFlag(flags, 'dry-run'),
673
+ global: boolFlag(flags, 'global'),
668
674
  tenantId: resolveTenantId({}),
669
675
  });
670
676
  }
@@ -1,4 +1,5 @@
1
+ import { type CliFlags } from './flag-values.js';
1
2
  export declare function cmdHook(args: string[]): void;
2
- export declare function cmdSetup(flags: Record<string, string | boolean | string[]>): void;
3
+ export declare function cmdSetup(flags: CliFlags): void;
3
4
  export declare function cmdDailyRunner(): void;
4
5
  //# sourceMappingURL=setup.d.ts.map