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,6 +1,7 @@
1
- import { type MemoryEntry } from '../memory.js';
2
- import { openHippoDb, type DatabaseSyncLike } from '../db.js';
3
- import { type DormantMove } from '../dormant.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
+ import { openHippoDb, type DatabaseSyncLike } from '../db/index.js';
3
+ import { type DormantMove } from './dormant.js';
4
+ import { type WriteBudget } from '../util/write-budget.js';
4
5
  /** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL); tests/dormant-memories.test.ts pins it to the schema. */
5
6
  export declare const MEMORY_BACKED_TABLES: readonly ["predictions", "decisions", "incidents", "processes", "policies", "skills", "project_briefs", "customer_notes"];
6
7
  /** Ids of memories that back a first-class object, for passes that plan deletes before making them. A table missing from an older schema is skipped. */
@@ -42,16 +43,10 @@ export declare function deleteEntry(hippoRoot: string, id: string, opts?: {
42
43
  reason?: string;
43
44
  automatic?: boolean;
44
45
  }): boolean;
45
- /** deleteEntry on the caller's open store, so a loop of deletes opens the store once; each delete still commits alone. */
46
- export declare function deleteEntryOn(db: DatabaseSyncLike, hippoRoot: string, id: string, opts?: {
47
- actor?: string;
48
- reason?: string;
49
- automatic?: boolean;
50
- }): boolean;
51
46
  /** Writes, deletes and dormant moves in one transaction. With `snapshot` (rows as the caller loaded them), a write keeps only
52
47
  * the fields the caller changed, takes the rest from the live row, and never resurrects a row that is gone.
53
48
  *
54
- * `dormant` (src/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
49
+ * `dormant` (src/store/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
55
50
  * leaves exactly like a delete (FTS row, DAG parent dirty-mark, mirrors), in the same transaction, so a memory
56
51
  * is never in both places or in neither. Deletes and moves both skip rows that are no longer auto-deletable
57
52
  * (pinned, raw, kept for good or backing an object since the caller decided). Returns the ids that left `memories`, deleted or moved. */
@@ -65,20 +60,21 @@ export interface FlushComponent {
65
60
  deletes: readonly string[];
66
61
  dormant: readonly DormantMove[];
67
62
  }
68
- /** Tags a flush error with the ids of the component it stopped at, for the partial sleep audit row; the first tag wins. */
69
- export declare function noteFailedUnit(err: Error, component: FlushComponent | undefined): void;
70
63
  /** The ids noteFailedUnit tagged `err` with, if a flush threw it. */
71
64
  export declare function failedUnitOf(err: Error | null): string[] | undefined;
72
- /** batchWriteAndDelete on the caller's open store from component `from`, each component whole, closing the transaction at the
73
- * first component boundary after `holdMs`. Returns the next component's index and the ids that left `memories`. */
74
- export declare function batchWriteAndDeleteOn(db: DatabaseSyncLike, hippoRoot: string, components: readonly FlushComponent[], from: number, opts: {
75
- snapshot?: ReadonlyMap<string, MemoryEntry>;
76
- holdMs: number;
77
- clock?: () => number;
78
- }): FlushChunk;
79
- /** Where the next transaction starts, and the ids this one removed from `memories`. */
80
- export interface FlushChunk {
81
- next: number;
82
- removedIds: string[];
83
- }
65
+ /** Deletes each target in its own transaction on one store handle; `true` where the row went. */
66
+ export declare function deleteEntriesOneByOne(hippoRoot: string, targets: readonly {
67
+ id: string;
68
+ reason: string;
69
+ }[], opts: {
70
+ actor?: string;
71
+ automatic?: boolean;
72
+ }): boolean[];
73
+ /** Commits whole components in transactions of about `budget.holdMs` on one store handle, letting other writers in between; returns the ids that left `memories`.
74
+ * The snapshot keeps what other writers changed after the caller loaded its rows. */
75
+ export declare function commitInChunks(hippoRoot: string, components: readonly FlushComponent[], opts: {
76
+ snapshot: ReadonlyMap<string, MemoryEntry>;
77
+ budget: WriteBudget;
78
+ busyWaitMs: number;
79
+ }): Promise<string[]>;
84
80
  //# sourceMappingURL=delete-and-batch.d.ts.map
@@ -1,15 +1,15 @@
1
- import { AUTO_DELETABLE_SQL } from '../memory.js';
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { checkRejectionGuard, RejectedValueError } from '../rejection.js';
4
- import { markSummaryDirtyInTx } from '../summary-dirty.js';
5
- import { insertDormantRow } from '../dormant.js';
6
- import { log } from '../log.js';
1
+ import { AUTO_DELETABLE_SQL } from '../core/memory.js';
2
+ import { openHippoDb, closeHippoDb, withWriteScope } from '../db/index.js';
3
+ import { checkRejectionGuard, RejectedValueError } from './rejection.js';
4
+ import { markSummaryDirtyInTx } from './summary-dirty.js';
5
+ import { insertDormantRow } from './dormant.js';
6
+ import { log } from '../util/log.js';
7
7
  import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
8
8
  import { audit } from './audit-event.js';
9
9
  import { deleteFtsRow, replaceFtsRows, stampOriginProject, upsertMemoryRow } from './entry-row.js';
10
10
  import { purgeMirrorBestEffort, mirrorBestEffort, writeMarkdownMirror } from './mirrors.js';
11
11
  import { openStore } from './open.js';
12
- import { clock } from '../write-budget.js';
12
+ import { clock } from '../util/write-budget.js';
13
13
  /** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL); tests/dormant-memories.test.ts pins it to the schema. */
14
14
  export const MEMORY_BACKED_TABLES = ['predictions', 'decisions', 'incidents', 'processes', 'policies', 'skills', 'project_briefs', 'customer_notes'];
15
15
  /** Deleting a memory that backs an object nulls the object's link, and no restore can repair it, so no automatic pass may. */
@@ -64,7 +64,7 @@ export function deleteEntryCore(db, id, opts) {
64
64
  return null;
65
65
  deleteFtsRow(db, id);
66
66
  if (!opts?.suppressForgetAudit) {
67
- audit(db, 'forget', id, opts?.reason ? { reason: opts.reason } : undefined, opts?.actor ?? 'cli', row.tenant_id);
67
+ audit(db, 'forget', { targetId: id, metadata: opts?.reason ? { reason: opts.reason } : undefined, actor: opts?.actor ?? 'cli', tenantId: row.tenant_id });
68
68
  }
69
69
  // Forgetting a child of a summary marks the parent dirty. Not atomic with the DELETE, but
70
70
  // markSummaryDirtyInTx is idempotent, so the next child mutation re-marks the parent if this fails.
@@ -94,18 +94,8 @@ export function deleteEntry(hippoRoot, id, opts) {
94
94
  }
95
95
  }
96
96
  /** deleteEntry on the caller's open store, so a loop of deletes opens the store once; each delete still commits alone. */
97
- export function deleteEntryOn(db, hippoRoot, id, opts) {
98
- db.exec('BEGIN IMMEDIATE');
99
- let result;
100
- try {
101
- result = deleteEntryCore(db, id, opts);
102
- db.exec('COMMIT');
103
- }
104
- catch (err) {
105
- if (db.isTransaction !== false)
106
- db.exec('ROLLBACK');
107
- throw err;
108
- }
97
+ function deleteEntryOn(db, hippoRoot, id, opts) {
98
+ const result = withWriteScope(db, 'delete_entry', () => deleteEntryCore(db, id, opts));
109
99
  if (!result)
110
100
  return false;
111
101
  purgeMirrorBestEffort(hippoRoot, id, false, 'deleteEntry');
@@ -125,7 +115,7 @@ function mergeOwnChanges(base, ours, live) {
125
115
  /** Writes, deletes and dormant moves in one transaction. With `snapshot` (rows as the caller loaded them), a write keeps only
126
116
  * the fields the caller changed, takes the rest from the live row, and never resurrects a row that is gone.
127
117
  *
128
- * `dormant` (src/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
118
+ * `dormant` (src/store/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
129
119
  * leaves exactly like a delete (FTS row, DAG parent dirty-mark, mirrors), in the same transaction, so a memory
130
120
  * is never in both places or in neither. Deletes and moves both skip rows that are no longer auto-deletable
131
121
  * (pinned, raw, kept for good or backing an object since the caller decided). Returns the ids that left `memories`, deleted or moved. */
@@ -145,7 +135,7 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds, opts) {
145
135
  }
146
136
  const failedUnits = new WeakMap();
147
137
  /** Tags a flush error with the ids of the component it stopped at, for the partial sleep audit row; the first tag wins. */
148
- export function noteFailedUnit(err, component) {
138
+ function noteFailedUnit(err, component) {
149
139
  if (!component || failedUnits.has(err))
150
140
  return;
151
141
  const ids = [...component.writes.map((e) => e.id), ...component.deletes, ...component.dormant.map((m) => m.entry.id)];
@@ -157,15 +147,14 @@ export function failedUnitOf(err) {
157
147
  }
158
148
  /** batchWriteAndDelete on the caller's open store from component `from`, each component whole, closing the transaction at the
159
149
  * first component boundary after `holdMs`. Returns the next component's index and the ids that left `memories`. */
160
- export function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
150
+ function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
161
151
  const now = opts.clock ?? clock;
162
- // IMMEDIATE: the tombstone probes below read before the first write, and under a deferred BEGIN a
163
- // concurrent `hippo reject` would make the lock upgrade fail with SQLITE_BUSY and roll back the batch.
164
- db.exec('BEGIN IMMEDIATE');
165
- const begunAt = now();
166
152
  const out = { written: [], removedIds: [], rejectedSkips: 0, fts: { rows: [], staleIds: [] }, dirty: { parents: new Set(), tenantById: new Map() } };
167
153
  let next = from;
168
- try {
154
+ // IMMEDIATE: the tombstone probes below read before the first write, and under a deferred BEGIN a
155
+ // concurrent `hippo reject` would make the lock upgrade fail with SQLITE_BUSY and roll back the batch.
156
+ withWriteScope(db, 'flush_chunk', () => {
157
+ const begunAt = now();
169
158
  do {
170
159
  const at = next++;
171
160
  try {
@@ -184,17 +173,7 @@ export function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
184
173
  for (const parentId of out.dirty.parents) {
185
174
  markSummaryDirtyInTx(db, parentId, out.dirty.tenantById.get(parentId) ?? 'default', 'batch');
186
175
  }
187
- db.exec('COMMIT');
188
- }
189
- catch (error) {
190
- if (db.isTransaction !== false) {
191
- try {
192
- db.exec('ROLLBACK');
193
- }
194
- catch { /* preserve the original throw and its unit tag */ }
195
- }
196
- throw error;
197
- }
176
+ });
198
177
  reportChunk(hippoRoot, out);
199
178
  return { next, removedIds: out.removedIds };
200
179
  }
@@ -301,11 +280,56 @@ function isRejectedBatchWrite(db, row) {
301
280
  }
302
281
  catch (err) {
303
282
  if (err instanceof RejectedValueError) {
304
- audit(db, 'reject_refusal', row.id, { digest: err.digest, reason: err.reason }, 'sleep-batch', entryTenantId);
283
+ audit(db, 'reject_refusal', { targetId: row.id, metadata: { digest: err.digest, reason: err.reason }, actor: 'sleep-batch', tenantId: entryTenantId });
305
284
  return true;
306
285
  }
307
286
  throw err;
308
287
  }
309
288
  return false;
310
289
  }
290
+ /** Deletes each target in its own transaction on one store handle; `true` where the row went. */
291
+ export function deleteEntriesOneByOne(hippoRoot, targets, opts) {
292
+ if (targets.length === 0)
293
+ return [];
294
+ const db = openStore(hippoRoot);
295
+ try {
296
+ return targets.map((target) => deleteEntryOn(db, hippoRoot, target.id, { ...opts, reason: target.reason }));
297
+ }
298
+ finally {
299
+ closeHippoDb(db);
300
+ }
301
+ }
302
+ /** Commits whole components in transactions of about `budget.holdMs` on one store handle, letting other writers in between; returns the ids that left `memories`.
303
+ * The snapshot keeps what other writers changed after the caller loaded its rows. */
304
+ export async function commitInChunks(hippoRoot, components, opts) {
305
+ if (components.length === 0)
306
+ return [];
307
+ const { snapshot, budget } = opts;
308
+ const removed = [];
309
+ // The wait is an option rather than a PRAGMA, so a shared hook handle keeps its own.
310
+ const db = openStore(hippoRoot, { busyWaitMs: opts.busyWaitMs });
311
+ let next = 0;
312
+ try {
313
+ let committedAt = 0;
314
+ while (next < components.length) {
315
+ if (next > 0)
316
+ await budget.pause(committedAt);
317
+ const chunk = batchWriteAndDeleteOn(db, hippoRoot, components, next, { snapshot, holdMs: budget.holdMs, clock: budget.clock });
318
+ committedAt = budget.clock();
319
+ next = chunk.next;
320
+ for (const id of chunk.removedIds)
321
+ removed.push(id);
322
+ }
323
+ }
324
+ catch (err) {
325
+ // A unit that threw is already tagged; a throw outside one (a pause, BEGIN or COMMIT) names the chunk's first unit.
326
+ if (err instanceof Error)
327
+ noteFailedUnit(err, components[next]);
328
+ throw err;
329
+ }
330
+ finally {
331
+ closeHippoDb(db);
332
+ }
333
+ return removed;
334
+ }
311
335
  //# sourceMappingURL=delete-and-batch.js.map
@@ -1,7 +1,9 @@
1
- import type { MemoryEntry } from './memory.js';
2
- import { type PromptRecallGate } from './prompt-recall.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import { type PromptRecallGate } from '../core/prompt-recall.js';
3
3
  export type DeliveryRuntime = 'claude-code' | 'codex' | 'copilot' | 'unknown';
4
- export type DeliveryEventType = 'prompt-submit' | 'pinned-manual';
4
+ export type DeliveryEventType = 'prompt-submit' | 'pinned-manual' | 'pre-compact' | 'compact-resume';
5
+ /** True for the two compaction boundary types. */
6
+ export declare const isBoundaryEvent: (type: DeliveryEventType) => boolean;
5
7
  export type DeliverySurface = 'hook' | 'context';
6
8
  export type DeliveryWriteStore = 'local' | 'global';
7
9
  export type DeliverySessionState = 'payload' | 'env' | 'missing' | 'subagent';
@@ -10,8 +12,8 @@ export type DeliveryPool = 'pin' | 'recent' | 'prompt-recall' | 'strength' | 'se
10
12
  export type DeliveryStage = 'load' | 'eligible' | 'gate' | 'budget' | 'limit' | 'final';
11
13
  export type DeliveryOutcome = 'emitted' | 'reused' | 'rejected';
12
14
  export type DeliveryRejectReason = 'budget' | 'gate-below-threshold' | 'gate-max-items' | 'duplicate' | 'scope' | 'quality' | 'limit';
13
- /** Row format version written to `delivery_events.ledger_version`. */
14
- export declare const DELIVERY_LEDGER_VERSION = 1;
15
+ /** Row format version in `delivery_events.ledger_version`: 2 = written by a binary that can write boundary rows, so `event_type` has four values. */
16
+ export declare const DELIVERY_LEDGER_VERSION = 2;
15
17
  /** Rejected candidate rows kept per event; the rest only add to `rejected_unlisted`. */
16
18
  export declare const DELIVERY_REJECTED_ROW_CAP = 16;
17
19
  export interface DeliveryCandidateInput {
@@ -123,7 +125,12 @@ export interface DeliveryRecorderInit {
123
125
  envSessionId?: string;
124
126
  /** Set by the caller's runtime flag; Copilot payloads carry hook_event_name too, so inference would say claude-code. */
125
127
  runtime?: DeliveryRuntime;
128
+ /** Set by hooks that are not prompt or context calls; without it the payload's hook event decides. */
129
+ eventType?: DeliveryEventType;
126
130
  }
131
+ export type DeliveryFault = 'observe' | 'build' | 'flush';
132
+ /** Makes every recorder created afterwards throw at one stage. Only tests call it; the shipped CLI and server have no route here. */
133
+ export declare function _setDeliveryFaultForTests(fault: DeliveryFault | null): void;
127
134
  /** A recorder for one call; every observer method is guarded, and a throw marks it broken instead of escaping. */
128
135
  export declare function createDeliveryRecorder(init: DeliveryRecorderInit): DeliveryRecorder;
129
136
  //# sourceMappingURL=delivery-recorder.d.ts.map
@@ -1,11 +1,12 @@
1
- // In-memory observer for one pinned-only context call: what was considered, why each was rejected, what reached stdout.
2
- // No DB access (the caller hands build()'s output to src/recall-trace.ts); hashes, ids, counts and enums only, never text.
3
- import { envTestDeliveryFault } from './env.js';
4
- import { evalNow } from './ablation.js';
5
- import { scoreOverlap } from './prompt-recall.js';
6
- import { blockHash, estimateTokens, hookPayloadSessionId, hookPayloadString, isSubagentPayload } from './token-ledger.js';
7
- /** Row format version written to `delivery_events.ledger_version`. */
8
- export const DELIVERY_LEDGER_VERSION = 1;
1
+ import { evalNow } from '../core/ablation.js';
2
+ import { scoreOverlap } from '../core/prompt-recall.js';
3
+ import { hookPayloadSessionId, hookPayloadString, isSubagentPayload } from './token-ledger.js';
4
+ import { blockHash, estimateTokens } from '../util/token-text.js';
5
+ import { errorMessage } from '../util/log.js';
6
+ /** True for the two compaction boundary types. */
7
+ export const isBoundaryEvent = (type) => type === 'pre-compact' || type === 'compact-resume';
8
+ /** Row format version in `delivery_events.ledger_version`: 2 = written by a binary that can write boundary rows, so `event_type` has four values. */
9
+ export const DELIVERY_LEDGER_VERSION = 2;
9
10
  /** Rejected candidate rows kept per event; the rest only add to `rejected_unlisted`. */
10
11
  export const DELIVERY_REJECTED_ROW_CAP = 16;
11
12
  // Deeper stages were closer to being sent, so the row cap keeps them first.
@@ -37,7 +38,8 @@ function readPayload(init) {
37
38
  : payloadSession !== null ? 'payload' : envSession !== null ? 'env' : 'missing';
38
39
  return { payloadSession, envSession, prompt, hostTurnId, hookEvent, sessionState };
39
40
  }
40
- function rejectId(state, id, stage, reason, score, tokens) {
41
+ function rejectId(state, id, rejection) {
42
+ const { stage, reason, score, tokens } = rejection;
41
43
  const held = state.candidates.get(id);
42
44
  // First rejection wins; an id never offered is not a candidate of this call.
43
45
  if (!held || held.reason !== null)
@@ -89,11 +91,14 @@ function buildEvent(init, payload, state, ts, startedMs) {
89
91
  const rejected = rejectedRows(state);
90
92
  const rows = [...picked, ...rejected.rows];
91
93
  const emitted = outcome.emittedText ?? null;
94
+ const eventType = init.eventType ?? (payload.hookEvent === 'UserPromptSubmit' ? 'prompt-submit' : 'pinned-manual');
95
+ // A boundary row carries no prompt facts, whatever the payload holds.
96
+ const prompt = isBoundaryEvent(eventType) ? null : payload.prompt;
92
97
  return {
93
98
  ts,
94
99
  tenantId: init.tenantId,
95
100
  runtime: init.runtime ?? (payload.hostTurnId !== null ? 'codex' : payload.hookEvent !== null ? 'claude-code' : 'unknown'),
96
- eventType: payload.hookEvent === 'UserPromptSubmit' ? 'prompt-submit' : 'pinned-manual',
101
+ eventType,
97
102
  surface: 'hook',
98
103
  storeHash: init.storeHash,
99
104
  writeStore: init.writeStore,
@@ -101,8 +106,8 @@ function buildEvent(init, payload, state, ts, startedMs) {
101
106
  sessionId: payload.payloadSession ?? payload.envSession,
102
107
  sessionState: payload.sessionState,
103
108
  hostTurnId: payload.hostTurnId,
104
- promptHash: payload.prompt !== null ? blockHash(payload.prompt) : null,
105
- promptLength: payload.prompt?.length ?? 0,
109
+ promptHash: prompt !== null ? blockHash(prompt) : null,
110
+ promptLength: prompt?.length ?? 0,
106
111
  queryHash: null,
107
112
  recallTraceId: null,
108
113
  blockState: state.disabledSeen ? 'disabled' : outcome.state,
@@ -135,7 +140,7 @@ function candidateMethods(state, guard) {
135
140
  id: e.id, sourceStore: storeOf(isGlobal), pool: 'recent', stage: null, reason: null, score: null, tokens: null,
136
141
  });
137
142
  }
138
- rejectId(state, e.id, 'load', 'quality', null, null);
143
+ rejectId(state, e.id, { stage: 'load', reason: 'quality', score: null, tokens: null });
139
144
  }),
140
145
  offer: (entries, isGlobal, pool) => guard(() => {
141
146
  for (const e of entries) {
@@ -150,12 +155,12 @@ function candidateMethods(state, guard) {
150
155
  });
151
156
  }
152
157
  }),
153
- reject: (e, stage, reason, score, tokens) => guard(() => rejectId(state, e.id, stage, reason, score ?? null, tokens ?? null)),
158
+ reject: (e, stage, reason, score, tokens) => guard(() => rejectId(state, e.id, { stage, reason, score: score ?? null, tokens: tokens ?? null })),
154
159
  dropMissing: (before, after, stage, reason) => guard(() => {
155
160
  const kept = new Set(after.map((e) => e.id));
156
161
  for (const e of before)
157
162
  if (!kept.has(e.id))
158
- rejectId(state, e.id, stage, reason, null, null);
163
+ rejectId(state, e.id, { stage, reason, score: null, tokens: null });
159
164
  }),
160
165
  gated: (prompt, items, gate, kept) => guard(() => {
161
166
  const keptIds = new Set(kept.map((g) => g.item.id));
@@ -164,7 +169,7 @@ function candidateMethods(state, guard) {
164
169
  continue;
165
170
  const { score, shared } = scoreOverlap(prompt, c.tokens, gate.metric);
166
171
  const cleared = score >= gate.threshold && shared >= gate.minShared;
167
- rejectId(state, c.id, 'gate', cleared ? 'gate-max-items' : 'gate-below-threshold', score, null);
172
+ rejectId(state, c.id, { stage: 'gate', reason: cleared ? 'gate-max-items' : 'gate-below-threshold', score, tokens: null });
168
173
  }
169
174
  }),
170
175
  selected: (items) => guard(() => {
@@ -178,29 +183,22 @@ function candidateMethods(state, guard) {
178
183
  }),
179
184
  };
180
185
  }
186
+ let injectedFault = null;
187
+ /** Makes every recorder created afterwards throw at one stage. Only tests call it; the shipped CLI and server have no route here. */
188
+ export function _setDeliveryFaultForTests(fault) {
189
+ injectedFault = fault;
190
+ }
181
191
  /** A recorder for one call; every observer method is guarded, and a throw marks it broken instead of escaping. */
182
192
  export function createDeliveryRecorder(init) {
183
193
  const startedMs = Date.now();
184
194
  const ts = evalNow().toISOString();
185
- // Test-only fault injection, as HIPPO_FAKE_NOW is for time.
186
- const fault = envTestDeliveryFault();
195
+ const fault = injectedFault;
187
196
  const payload = readPayload(init);
188
197
  const state = {
189
198
  candidates: new Map(), picked: new Map(), filtered: new Set(), facts: null, shown: 0, dropped: 0,
190
199
  disabledSeen: false, outcome: { state: 'empty' }, broken: null, flushed: false,
191
200
  };
192
- const guard = (fn) => {
193
- if (state.broken !== null)
194
- return;
195
- try {
196
- if (fault === 'observe')
197
- throw new Error('injected observe fault');
198
- fn();
199
- }
200
- catch (error) {
201
- state.broken = error instanceof Error ? error.message : String(error);
202
- }
203
- };
201
+ const guard = guardFor(state, fault);
204
202
  const { qualityDropped, offer, reject, dropMissing, gated, selected } = candidateMethods(state, guard);
205
203
  return {
206
204
  root: init.root,
@@ -238,4 +236,18 @@ export function createDeliveryRecorder(init) {
238
236
  },
239
237
  };
240
238
  }
239
+ function guardFor(state, fault) {
240
+ return (fn) => {
241
+ if (state.broken !== null)
242
+ return;
243
+ try {
244
+ if (fault === 'observe')
245
+ throw new Error('injected observe fault');
246
+ fn();
247
+ }
248
+ catch (error) {
249
+ state.broken = errorMessage(error);
250
+ }
251
+ };
252
+ }
241
253
  //# sourceMappingURL=delivery-recorder.js.map
@@ -0,0 +1,12 @@
1
+ import type { DatabaseSyncLike } from '../db/index.js';
2
+ import type { MemoryEntry } from '../core/memory.js';
3
+ import type { DescendantPage, SummaryDescendants } from './port.js';
4
+ export interface PagedWalk {
5
+ readonly tenantId: string;
6
+ readonly summary: MemoryEntry;
7
+ readonly depth: number;
8
+ readonly page: DescendantPage;
9
+ }
10
+ /** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full count in `sizes`. */
11
+ export declare function pagedDescendants(db: DatabaseSyncLike, walk: PagedWalk, summaryAdmitted: boolean): SummaryDescendants;
12
+ //# sourceMappingURL=descendant-page.d.ts.map
@@ -0,0 +1,99 @@
1
+ import { chunked, selectEntriesByIds, TENANT_IS } from './entry-reads.js';
2
+ import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
3
+ const marks = (ids) => ids.map(() => '?').join(',');
4
+ /** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full count in `sizes`. */
5
+ export function pagedDescendants(db, walk, summaryAdmitted) {
6
+ const sizes = [];
7
+ const levels = [];
8
+ const seen = new Set([walk.summary.id]);
9
+ let room = Math.max(0, walk.page.rows);
10
+ let parents = summaryAdmitted ? [walk.summary.id] : [];
11
+ for (let level = 0; level < walk.depth && parents.length > 0; level++) {
12
+ const counted = level === walk.depth - 1 ? countedLevel(db, walk, parents, room) : null;
13
+ const read = counted ?? keyedLevel(db, walk, parents, { seen, room });
14
+ if (read.size === 0)
15
+ break;
16
+ sizes.push(read.size);
17
+ levels.push(read.rows);
18
+ room -= read.rows.length;
19
+ parents = read.ids;
20
+ }
21
+ return { summary: walk.summary, levels, sizes };
22
+ }
23
+ // Reads four short columns of every child, since the level below needs each admitted id as a parent.
24
+ function keyedLevel(db, walk, parents, at) {
25
+ const byParent = new Map();
26
+ for (const chunk of chunked([...parents])) {
27
+ // SAFETY: the SELECT names exactly ChildKey's four columns, and the WHERE keeps dag_parent_id a string.
28
+ const keys = db.prepare(`SELECT id, dag_parent_id, scope, origin_project FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} ORDER BY created ASC, id ASC`).all(...chunk, walk.tenantId);
29
+ for (const key of keys) {
30
+ const bucket = byParent.get(key.dag_parent_id);
31
+ if (bucket)
32
+ bucket.push(key);
33
+ else
34
+ byParent.set(key.dag_parent_id, [key]);
35
+ }
36
+ }
37
+ const ids = [];
38
+ for (const parentId of parents) {
39
+ for (const key of byParent.get(parentId) ?? []) {
40
+ if (at.seen.has(key.id) || !walk.page.admit(key))
41
+ continue;
42
+ at.seen.add(key.id);
43
+ ids.push(key.id);
44
+ }
45
+ }
46
+ const shown = ids.slice(0, Math.max(0, at.room));
47
+ const whole = selectEntriesByIds(db, shown, walk.tenantId);
48
+ return { ids, size: ids.length, rows: shown.flatMap((id) => whole.get(id) ?? []) };
49
+ }
50
+ /** The last level counted in SQL and read up to `room` rows; null when a row there is refused, which only the keyed read can leave out.
51
+ * A row has one parent and a parent is read at one level, so the summary is the only row an earlier level can already hold. */
52
+ function countedLevel(db, walk, parents, room) {
53
+ const perParent = new Map();
54
+ for (const chunk of chunked([...parents])) {
55
+ // SAFETY: the SELECT names exactly ChildGroup's four fields, and the WHERE keeps dag_parent_id a string.
56
+ const groups = db.prepare(`SELECT dag_parent_id, scope, origin_project, COUNT(*) AS n FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND id <> ? GROUP BY dag_parent_id, scope, origin_project`).all(...chunk, walk.tenantId, walk.summary.id);
57
+ for (const group of groups) {
58
+ if (!walk.page.admit(group))
59
+ return null;
60
+ perParent.set(group.dag_parent_id, (perParent.get(group.dag_parent_id) ?? 0) + Number(group.n));
61
+ }
62
+ }
63
+ let size = 0;
64
+ for (const n of perParent.values())
65
+ size += n;
66
+ return { ids: [], size, rows: firstRows(db, walk, parents.filter((id) => perParent.has(id)), { perParent, room }) };
67
+ }
68
+ // Every parent before the one the page ends in is read whole in one statement; that last one is read under a LIMIT.
69
+ function firstRows(db, walk, parents, at) {
70
+ const whole = [];
71
+ let left = at.room;
72
+ for (const parentId of parents) {
73
+ if (left <= 0)
74
+ break;
75
+ const n = at.perParent.get(parentId) ?? 0;
76
+ if (n >= left)
77
+ return [...childrenInOrder(db, walk, whole, -1), ...childrenInOrder(db, walk, [parentId], left)];
78
+ whole.push(parentId);
79
+ left -= n;
80
+ }
81
+ return childrenInOrder(db, walk, whole, -1);
82
+ }
83
+ /** Children parent by parent, each parent's by created then id; a negative `limit` reads them all. */
84
+ function childrenInOrder(db, walk, parents, limit) {
85
+ const byParent = new Map();
86
+ for (const chunk of chunked([...parents])) {
87
+ // SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
88
+ const rows = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND id <> ? ORDER BY created ASC, id ASC LIMIT ?`).all(...chunk, walk.tenantId, walk.summary.id, limit);
89
+ for (const row of rows) {
90
+ const bucket = byParent.get(row.dag_parent_id ?? '');
91
+ if (bucket)
92
+ bucket.push(rowToEntry(row));
93
+ else
94
+ byParent.set(row.dag_parent_id ?? '', [rowToEntry(row)]);
95
+ }
96
+ }
97
+ return parents.flatMap((id) => byParent.get(id) ?? []);
98
+ }
99
+ //# sourceMappingURL=descendant-page.js.map
@@ -0,0 +1,47 @@
1
+ import { type CompactionCounts, type TokenTally } from './doctor-reads.js';
2
+ import type { JsonObject } from './working-memory.js';
3
+ /** One read's value, or the message of the error that stopped it, so a broken table never hides the reads beside it. */
4
+ export type Attempt<T> = {
5
+ readonly ok: true;
6
+ readonly value: T;
7
+ } | {
8
+ readonly ok: false;
9
+ readonly message: string;
10
+ };
11
+ /** ISO times the health reads count from. */
12
+ export interface HealthCutoffs {
13
+ /** Token and failure rows at or after this count. */
14
+ readonly since: string;
15
+ /** A compaction unfinished since before this is stuck. */
16
+ readonly stuckBefore: string;
17
+ /** A started compaction older than this is past replaying. */
18
+ readonly transcriptFloor: string;
19
+ }
20
+ export interface StoreHealth {
21
+ readonly schemaVersion: number;
22
+ /** Null when the table is missing or unreadable. */
23
+ readonly memories: number | null;
24
+ readonly dormant: number | null;
25
+ /** Null inside a read that worked means the store has no full-text index. */
26
+ readonly fts: Attempt<{
27
+ memories: number;
28
+ fts: number;
29
+ } | null>;
30
+ readonly tokens: Attempt<TokenTally>;
31
+ readonly failures: Attempt<number>;
32
+ /** Undefined inside a read that worked means the store never slept. */
33
+ readonly lastSleep: Attempt<string | undefined>;
34
+ readonly compactions: Attempt<CompactionCounts>;
35
+ }
36
+ /** Everything `hippo doctor` reads from one store; throws when it cannot be opened or its schema version read. */
37
+ export declare function readStoreHealth(hippoRoot: string, cutoffs: HealthCutoffs): StoreHealth;
38
+ export interface StoreInventory {
39
+ readonly schemaVersion: number;
40
+ /** Oldest hippo binary the store allows, or null when it names none. */
41
+ readonly minCompatibleBinary: string | null;
42
+ /** Row count by table name; null for a table that cannot be counted. */
43
+ readonly tables: JsonObject;
44
+ }
45
+ /** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory column. */
46
+ export declare function readStoreInventory(hippoRoot: string): StoreInventory;
47
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1,51 @@
1
+ // What `hippo doctor` and `hippo support-bundle` read from a store: one read-only open each, plain data out.
2
+ import { closeHippoDb, countTableRows, ftsRowCounts, getMeta, getSchemaVersion, openHippoDbReadOnly } from '../db/index.js';
3
+ import { listTableNames } from '../db/tables.js';
4
+ import { errorMessage } from '../util/log.js';
5
+ import { compactionCountsAt, tokenTallySince } from './doctor-reads.js';
6
+ import { countFailuresSince } from './failure-log.js';
7
+ import { lastConsolidationAt } from './index-and-stats.js';
8
+ function attempt(read) {
9
+ try {
10
+ return { ok: true, value: read() };
11
+ }
12
+ catch (err) {
13
+ // The caller turns the message into its own check, so the error stops here.
14
+ return { ok: false, message: errorMessage(err) };
15
+ }
16
+ }
17
+ /** Everything `hippo doctor` reads from one store; throws when it cannot be opened or its schema version read. */
18
+ export function readStoreHealth(hippoRoot, cutoffs) {
19
+ const db = openHippoDbReadOnly(hippoRoot);
20
+ try {
21
+ return {
22
+ schemaVersion: getSchemaVersion(db),
23
+ memories: countTableRows(db, 'memories'),
24
+ dormant: countTableRows(db, 'dormant_memories'),
25
+ fts: attempt(() => ftsRowCounts(db)),
26
+ tokens: attempt(() => tokenTallySince(db, cutoffs.since)),
27
+ failures: attempt(() => countFailuresSince(db, cutoffs.since)),
28
+ lastSleep: attempt(() => lastConsolidationAt(db)),
29
+ compactions: attempt(() => compactionCountsAt(db, cutoffs.stuckBefore, cutoffs.transcriptFloor)),
30
+ };
31
+ }
32
+ finally {
33
+ closeHippoDb(db);
34
+ }
35
+ }
36
+ /** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory column. */
37
+ export function readStoreInventory(hippoRoot) {
38
+ const db = openHippoDbReadOnly(hippoRoot);
39
+ try {
40
+ const schemaVersion = getSchemaVersion(db);
41
+ const minCompatibleBinary = getMeta(db, 'min_compatible_binary', '') || null;
42
+ const tables = {};
43
+ for (const name of listTableNames(db))
44
+ tables[name] = countTableRows(db, name);
45
+ return { schemaVersion, minCompatibleBinary, tables };
46
+ }
47
+ finally {
48
+ closeHippoDb(db);
49
+ }
50
+ }
51
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1,16 @@
1
+ import type { DatabaseSyncLike } from '../db/index.js';
2
+ export interface CompactionCounts {
3
+ total: number;
4
+ summarised: number;
5
+ started: number;
6
+ }
7
+ /** Compaction records in all, those with a summary whose memories never got saved, and those still without a summary; each cutoff is an ISO time. */
8
+ export declare function compactionCountsAt(db: DatabaseSyncLike, stuckBefore: string, transcriptFloor: string): CompactionCounts;
9
+ export interface TokenTally {
10
+ injected: number;
11
+ tokensSent: number;
12
+ tokensReread: number;
13
+ }
14
+ /** Memory blocks injected since `sinceIso`, the tokens they sent and the tokens later model calls re-read. */
15
+ export declare function tokenTallySince(db: DatabaseSyncLike, sinceIso: string): TokenTally;
16
+ //# sourceMappingURL=doctor-reads.d.ts.map