hippo-memory 1.68.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (864) hide show
  1. package/README.md +6 -3
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -23,9 +23,12 @@
23
23
  * transcript file. Writes are best-effort at the call sites; a ledger failure
24
24
  * must never break recall.
25
25
  */
26
- import { createHash } from 'node:crypto';
27
26
  import { open } from 'node:fs/promises';
28
- import { isJsonString } from './json.js';
27
+ import { withWriteScope } from '../db/index.js';
28
+ import { isJsonString, isJsonObjectLiteral } from '../util/json.js';
29
+ import { DAY_MS } from '../util/time.js';
30
+ import { countSkipsAfter, deleteRereadRows, injectedBlocks, insertTokenRow, latestInjectOrReset, pruneTokenRowsBefore, sessionTokenRows, sessionTotals, surfaceTotals, } from './token-ledger-rows.js';
31
+ import { DATE_PREFIX_CHARS } from '../util/token-text.js';
29
32
  /** All surfaces, in report order. */
30
33
  export const TOKEN_SURFACES = [
31
34
  'hook', 'hook_recall', 'compact_resume', 'context', 'recall', 'mcp_recall', 'mcp_context',
@@ -35,26 +38,23 @@ export const TOKEN_SURFACES = [
35
38
  export const REREAD_SURFACES = ['hook', 'hook_recall', 'compact_resume'];
36
39
  /** Rows older than this are pruned on write. */
37
40
  export const TOKEN_LEDGER_RETENTION_DAYS = 90;
38
- /**
39
- * Rough token estimate: characters / 4. The single estimate behind every
40
- * token budget and ledger count in hippo.
41
- */
42
- export function estimateTokens(text) {
43
- return Math.ceil(text.length / 4);
44
- }
45
- /** Stable 16-hex-char hash of a rendered block, for change detection. */
46
- export function blockHash(text) {
47
- return createHash('sha256').update(text).digest('hex').slice(0, 16);
48
- }
49
41
  /**
50
42
  * Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}.
51
43
  */
52
44
  export function recordTokenUse(db, use) {
53
45
  const now = use.now ?? new Date().toISOString();
54
- db.prepare(`INSERT INTO token_ledger (ts, tenant_id, session_id, surface, event, items, tokens, block_hash)
55
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(now, use.tenantId, use.sessionId ?? null, use.surface, use.event, Math.max(0, Math.round(use.items)), Math.max(0, Math.round(use.tokens)), use.hash ?? null);
56
- const cutoff = new Date(Date.parse(now) - TOKEN_LEDGER_RETENTION_DAYS * 86_400_000).toISOString();
57
- db.prepare(`DELETE FROM token_ledger WHERE ts < ?`).run(cutoff);
46
+ insertTokenRow(db, {
47
+ ts: now,
48
+ tenantId: use.tenantId,
49
+ sessionId: use.sessionId ?? null,
50
+ surface: use.surface,
51
+ event: use.event,
52
+ items: Math.max(0, Math.round(use.items)),
53
+ tokens: Math.max(0, Math.round(use.tokens)),
54
+ blockHash: use.hash ?? null,
55
+ });
56
+ const cutoff = new Date(Date.parse(now) - TOKEN_LEDGER_RETENTION_DAYS * DAY_MS).toISOString();
57
+ pruneTokenRowsBefore(db, cutoff);
58
58
  }
59
59
  /**
60
60
  * The last block this session injected on `surface`, or null when the
@@ -64,15 +64,10 @@ export function recordTokenUse(db, use) {
64
64
  export function lastSentState(db, tenantId, sessionId, surface) {
65
65
  if (!sessionId)
66
66
  return null;
67
- // SAFETY: the SELECT names exactly these three columns.
68
- const anchor = db.prepare(`SELECT id, event, block_hash FROM token_ledger
69
- WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event IN ('inject', 'reset')
70
- ORDER BY id DESC LIMIT 1`).get(tenantId, sessionId, surface);
67
+ const anchor = latestInjectOrReset(db, tenantId, sessionId, surface);
71
68
  if (!anchor || anchor.event === 'reset' || !anchor.block_hash)
72
69
  return null;
73
- // SAFETY: the SELECT names exactly this one aggregate column.
74
- const skips = db.prepare(`SELECT COUNT(*) AS n FROM token_ledger
75
- WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event = 'skip' AND id > ?`).get(tenantId, sessionId, surface, anchor.id);
70
+ const skips = countSkipsAfter(db, tenantId, sessionId, surface, anchor.id);
76
71
  return { hash: anchor.block_hash, skipsSince: Number(skips?.n ?? 0) };
77
72
  }
78
73
  /**
@@ -93,17 +88,7 @@ export function shouldSkipUnchanged(last, hash, refreshTurns) {
93
88
  * omitted.
94
89
  */
95
90
  export function summarizeTokenUse(db, tenantId, sinceIso) {
96
- // SAFETY: the SELECT names exactly these columns, all aggregates or TEXT.
97
- const rows = db.prepare(`SELECT surface,
98
- SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injected,
99
- SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens,
100
- SUM(CASE WHEN event = 'skip' THEN 1 ELSE 0 END) AS skipped,
101
- SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS avoided,
102
- SUM(CASE WHEN event = 'reread' THEN tokens ELSE 0 END) AS reread,
103
- COUNT(DISTINCT session_id) AS sessions
104
- FROM token_ledger
105
- WHERE tenant_id = ? AND ts >= ?
106
- GROUP BY surface`).all(tenantId, sinceIso);
91
+ const rows = surfaceTotals(db, tenantId, sinceIso);
107
92
  const bySurface = new Map(rows.map((r) => [r.surface, r]));
108
93
  const surfaces = [];
109
94
  for (const surface of TOKEN_SURFACES) {
@@ -120,13 +105,7 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
120
105
  sessions: Number(r.sessions),
121
106
  });
122
107
  }
123
- // SAFETY: the SELECT names exactly these four aggregate columns.
124
- const perSession = db.prepare(`SELECT COUNT(DISTINCT session_id) AS sessions,
125
- COUNT(DISTINCT CASE WHEN event <> 'reset' AND surface IN (${REREAD_SURFACES.map(() => '?').join(', ')}) THEN session_id END) AS hook_sessions,
126
- COUNT(DISTINCT CASE WHEN event = 'reread' THEN session_id END) AS reread_sessions,
127
- SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens
128
- FROM token_ledger
129
- WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`).get(...REREAD_SURFACES, tenantId, sinceIso);
108
+ const perSession = sessionTotals(db, tenantId, sinceIso, REREAD_SURFACES);
130
109
  const sessionCount = Number(perSession?.sessions ?? 0);
131
110
  const sessionTokens = Number(perSession?.tokens ?? 0);
132
111
  return {
@@ -145,10 +124,6 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
145
124
  export function isSyntheticMessage(message) {
146
125
  return message.model === '<synthetic>';
147
126
  }
148
- /** JSON-value plain-object check (excludes arrays and null). */
149
- function isJsonObject(value) {
150
- return value !== undefined && value !== null && !Array.isArray(value) && value.constructor === Object;
151
- }
152
127
  /** A Claude Code hook payload on stdin as a JSON object; null when empty, malformed or not an object. */
153
128
  function parseHookPayload(stdinText) {
154
129
  if (!stdinText || stdinText.trim() === '')
@@ -156,7 +131,7 @@ function parseHookPayload(stdinText) {
156
131
  try {
157
132
  // SAFETY: JSON.parse returns a JSON value by definition.
158
133
  const payload = JSON.parse(stdinText.trim());
159
- return isJsonObject(payload) ? payload : null;
134
+ return isJsonObjectLiteral(payload) ? payload : null;
160
135
  }
161
136
  catch {
162
137
  // Malformed is one of the null cases the docblock names.
@@ -190,15 +165,7 @@ export function isSubagentPayload(stdinText) {
190
165
  * transcript file name, so these join to the host's own usage records.
191
166
  */
192
167
  export function tokensBySession(db, tenantId, sinceIso) {
193
- // SAFETY: the SELECT names exactly these columns, all aggregates or TEXT.
194
- const rows = db.prepare(`SELECT session_id,
195
- SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS sent,
196
- SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS skipped,
197
- SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injections
198
- FROM token_ledger
199
- WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'
200
- GROUP BY session_id`).all(tenantId, sinceIso);
201
- return rows.map((r) => ({
168
+ return sessionTokenRows(db, tenantId, sinceIso).map((r) => ({
202
169
  sessionId: r.session_id,
203
170
  sent: Number(r.sent),
204
171
  skipped: Number(r.skipped),
@@ -227,7 +194,7 @@ export async function readApiCalls(transcriptPath) {
227
194
  continue;
228
195
  }
229
196
  // Sidechain calls, sidechain compactions and `<synthetic>` messages never touch the main context.
230
- if (!isJsonObject(entry) || entry.isSidechain === true)
197
+ if (!isJsonObjectLiteral(entry) || entry.isSidechain === true)
231
198
  continue;
232
199
  if (entry.subtype === 'compact_boundary') {
233
200
  compactions += 1;
@@ -235,9 +202,9 @@ export async function readApiCalls(transcriptPath) {
235
202
  }
236
203
  // One call spans lines sharing a message id.
237
204
  const message = entry.message;
238
- if (entry.type !== 'assistant' || !isJsonObject(message))
205
+ if (entry.type !== 'assistant' || !isJsonObjectLiteral(message))
239
206
  continue;
240
- if (!isJsonObject(message.usage) || isSyntheticMessage(message) || !isJsonString(message.id))
207
+ if (!isJsonObjectLiteral(message.usage) || isSyntheticMessage(message) || !isJsonString(message.id))
241
208
  continue;
242
209
  if (seen.has(message.id))
243
210
  continue;
@@ -262,15 +229,11 @@ export function carryingCalls(calls, at) {
262
229
  }
263
230
  /** Replace a session's `reread` rows in one transaction, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
264
231
  export function recordRereads(db, tenantId, sessionId, calls) {
265
- db.exec('BEGIN IMMEDIATE');
266
- let committed = false;
267
- try {
268
- // SAFETY: the SELECT names exactly these three columns.
269
- const rows = db.prepare(`SELECT ts, surface, tokens FROM token_ledger
270
- WHERE tenant_id = ? AND session_id = ? AND event = 'inject' AND surface IN (${REREAD_SURFACES.map(() => '?').join(', ')})`).all(tenantId, sessionId, ...REREAD_SURFACES);
232
+ return withWriteScope(db, 'record_rereads', () => {
233
+ const rows = injectedBlocks(db, tenantId, sessionId, REREAD_SURFACES);
271
234
  const days = new Map();
272
235
  const add = (surface, at, rereads, tokens) => {
273
- const key = `${surface} ${new Date(at).toISOString().slice(0, 10)}`;
236
+ const key = `${surface} ${new Date(at).toISOString().slice(0, DATE_PREFIX_CHARS)}`;
274
237
  const day = days.get(key) ?? { surface, at, rereads: 0, tokens: 0 };
275
238
  days.set(key, { surface, at: Math.max(day.at, at), rereads: day.rereads + rereads, tokens: day.tokens + tokens });
276
239
  };
@@ -282,23 +245,13 @@ export function recordRereads(db, tenantId, sessionId, calls) {
282
245
  for (const call of carryingCalls(calls, sentAt).slice(1))
283
246
  add(row.surface, call.at, 1, Number(row.tokens));
284
247
  }
285
- db.prepare(`DELETE FROM token_ledger WHERE tenant_id = ? AND session_id = ? AND event = 'reread'`).run(tenantId, sessionId);
248
+ deleteRereadRows(db, tenantId, sessionId);
286
249
  for (const day of days.values()) {
287
250
  recordTokenUse(db, {
288
251
  tenantId, sessionId, surface: day.surface, event: 'reread', items: day.rereads, tokens: day.tokens, now: new Date(day.at).toISOString(),
289
252
  });
290
253
  }
291
- db.exec('COMMIT');
292
- committed = true;
293
254
  return [...days.values()].reduce((sum, day) => sum + day.tokens, 0);
294
- }
295
- finally {
296
- if (!committed) {
297
- try {
298
- db.exec('ROLLBACK');
299
- }
300
- catch { /* preserve the original throw */ }
301
- }
302
- }
255
+ });
303
256
  }
304
257
  //# sourceMappingURL=token-ledger.js.map
@@ -0,0 +1,12 @@
1
+ import { type AppendAuditOpts } from './audit.js';
2
+ import { type RejectedValueRow } from './rejection.js';
3
+ /** Tombstone lookups and their refusal audit rows on one handle: opened on first use, never under dryRun, closed once. */
4
+ export interface TombstoneChecks {
5
+ /** The tenant's tombstone for `digest`; null when there is none, and always under dryRun. */
6
+ find(tenantId: string, digest: string): RejectedValueRow | null;
7
+ /** One audit row on the same handle; nothing under dryRun. */
8
+ audit(event: AppendAuditOpts): void;
9
+ close(): void;
10
+ }
11
+ export declare function lazyTombstoneChecks(hippoRoot: string, dryRun: boolean): TombstoneChecks;
12
+ //# sourceMappingURL=tombstone-checks.d.ts.map
@@ -0,0 +1,31 @@
1
+ // Sleep's tombstone checks run on one handle for the whole pass, owned here so no stage holds a raw one.
2
+ import { closeHippoDb, openHippoDb } from '../db/index.js';
3
+ import { appendAuditEvent } from './audit.js';
4
+ import { findRejectedValue } from './rejection.js';
5
+ // Lazy so a sleep that checks nothing never opens the store; make it IMMEDIATELY before the try whose
6
+ // finally closes it, so a throw in any phase cannot leak the handle.
7
+ export function lazyTombstoneChecks(hippoRoot, dryRun) {
8
+ let handle = null;
9
+ const opened = () => {
10
+ if (dryRun)
11
+ return null;
12
+ handle ??= openHippoDb(hippoRoot);
13
+ return handle;
14
+ };
15
+ return {
16
+ find(tenantId, digest) {
17
+ const db = opened();
18
+ return db ? findRejectedValue(db, tenantId, digest) : null;
19
+ },
20
+ audit(event) {
21
+ const db = opened();
22
+ if (db)
23
+ appendAuditEvent(db, event);
24
+ },
25
+ close() {
26
+ if (handle)
27
+ closeHippoDb(handle);
28
+ },
29
+ };
30
+ }
31
+ //# sourceMappingURL=tombstone-checks.js.map
@@ -0,0 +1,7 @@
1
+ import { type TokenSummary } from './token-ledger.js';
2
+ import { type FailureSummary } from './failure-log.js';
3
+ /** One tenant's token ledger totals since `sinceIso`. */
4
+ export declare function tokenUseSummary(hippoRoot: string, tenantId: string, sinceIso: string): TokenSummary;
5
+ /** One tenant's failure log totals since `sinceIso`. */
6
+ export declare function failureLogSummary(hippoRoot: string, tenantId: string, sinceIso: string): FailureSummary;
7
+ //# sourceMappingURL=usage-reports.d.ts.map
@@ -0,0 +1,26 @@
1
+ // The token-use and failure reports, each read on one handle of its own.
2
+ // A file apart from token-ledger-rows.ts: src/store/token-ledger.ts imports that one, so a summary there would be an import cycle.
3
+ import { closeHippoDb, openHippoDb } from '../db/index.js';
4
+ import { summarizeTokenUse } from './token-ledger.js';
5
+ import { summarizeFailures } from './failure-log.js';
6
+ /** One tenant's token ledger totals since `sinceIso`. */
7
+ export function tokenUseSummary(hippoRoot, tenantId, sinceIso) {
8
+ const db = openHippoDb(hippoRoot);
9
+ try {
10
+ return summarizeTokenUse(db, tenantId, sinceIso);
11
+ }
12
+ finally {
13
+ closeHippoDb(db);
14
+ }
15
+ }
16
+ /** One tenant's failure log totals since `sinceIso`. */
17
+ export function failureLogSummary(hippoRoot, tenantId, sinceIso) {
18
+ const db = openHippoDb(hippoRoot);
19
+ try {
20
+ return summarizeFailures(db, tenantId, sinceIso);
21
+ }
22
+ finally {
23
+ closeHippoDb(db);
24
+ }
25
+ }
26
+ //# sourceMappingURL=usage-reports.js.map
@@ -1,6 +1,13 @@
1
- import { type DatabaseSyncLike } from '../db.js';
2
- import type { MemoryEntry } from '../memory.js';
3
- import type { VectorBackfillQuery, VectorWrite, VectorWriteResult } from '../store-port.js';
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import type { MemoryEntry } from '../core/memory.js';
3
+ import type { PhysicsParticle } from '../core/physics.js';
4
+ import type { VectorBackfillQuery, VectorWrite, VectorWriteResult } from './port.js';
4
5
  export declare function entriesWithoutVectorAt(db: DatabaseSyncLike, query: VectorBackfillQuery): MemoryEntry[];
5
6
  export declare function writeVectorsAt(db: DatabaseSyncLike, write: VectorWrite): VectorWriteResult;
7
+ /** Every particle stored under `hippoRoot`. */
8
+ export declare function loadStoredParticles(hippoRoot: string): PhysicsParticle[];
9
+ /** Writes `particles` over their stored state under `hippoRoot`, as one batch. */
10
+ export declare function saveStoredParticles(hippoRoot: string, particles: PhysicsParticle[]): void;
11
+ /** Replaces every particle under `hippoRoot` with a fresh one per entry that has an embedding; returns how many. */
12
+ export declare function resetStoredParticles(hippoRoot: string, entries: MemoryEntry[], embeddingIndex: Record<string, number[]>): number;
6
13
  //# sourceMappingURL=vector-writes.d.ts.map
@@ -1,8 +1,8 @@
1
1
  // hippo.db's half of the VectorWrites store group.
2
- import { setMeta, withWriteScope } from '../db.js';
3
- import { embeddingIndexStateOn, replacesIndex } from '../embeddings.js';
4
- import { float32ToBuffer } from '../physics-state.js';
5
- import { EMBEDDING_MODEL_META_KEY, upsertVectors } from '../vector-store.js';
2
+ import { closeHippoDb, openHippoDb, setMeta, withWriteScope } from '../db/index.js';
3
+ import { embeddingIndexStateOn, replacesIndex } from './embeddings/index.js';
4
+ import { float32ToBuffer, loadPhysicsState, resetAllPhysicsState, savePhysicsState } from '../db/physics-state.js';
5
+ import { EMBEDDING_MODEL_META_KEY, upsertVectors } from '../db/vector-store.js';
6
6
  import { chunked } from './entry-reads.js';
7
7
  import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
8
8
  const MAX_BACKFILL_PAGE = 500;
@@ -22,7 +22,7 @@ function ownedIds(db, ids, tenantId) {
22
22
  const owned = new Set();
23
23
  for (const chunk of chunked([...new Set(ids)])) {
24
24
  // SAFETY: the SELECT names one column, id.
25
- const rows = db.prepare(`SELECT id FROM memories WHERE tenant_id = ? AND id IN (${chunk.map(() => '?').join(', ')})`).all(tenantId, ...chunk);
25
+ const rows = db.prepare(`SELECT id FROM memories WHERE +tenant_id = ? AND id IN (${chunk.map(() => '?').join(', ')})`).all(tenantId, ...chunk);
26
26
  for (const row of rows)
27
27
  owned.add(row.id);
28
28
  }
@@ -56,4 +56,34 @@ export function writeVectorsAt(db, write) {
56
56
  return { written, modelMismatch: false };
57
57
  });
58
58
  }
59
+ /** Every particle stored under `hippoRoot`. */
60
+ export function loadStoredParticles(hippoRoot) {
61
+ const db = openHippoDb(hippoRoot);
62
+ try {
63
+ return Array.from(loadPhysicsState(db).values());
64
+ }
65
+ finally {
66
+ closeHippoDb(db);
67
+ }
68
+ }
69
+ /** Writes `particles` over their stored state under `hippoRoot`, as one batch. */
70
+ export function saveStoredParticles(hippoRoot, particles) {
71
+ const db = openHippoDb(hippoRoot);
72
+ try {
73
+ savePhysicsState(db, particles);
74
+ }
75
+ finally {
76
+ closeHippoDb(db);
77
+ }
78
+ }
79
+ /** Replaces every particle under `hippoRoot` with a fresh one per entry that has an embedding; returns how many. */
80
+ export function resetStoredParticles(hippoRoot, entries, embeddingIndex) {
81
+ const db = openHippoDb(hippoRoot);
82
+ try {
83
+ return resetAllPhysicsState(db, entries, embeddingIndex);
84
+ }
85
+ finally {
86
+ closeHippoDb(db);
87
+ }
88
+ }
59
89
  //# sourceMappingURL=vector-writes.js.map
@@ -5,7 +5,7 @@
5
5
  * importance-ranked, and automatically evicted when the buffer
6
6
  * exceeds WM_MAX_ENTRIES per scope.
7
7
  */
8
- import type { JsonValue } from './json.js';
8
+ import type { JsonValue } from '../util/json.js';
9
9
  export declare const WM_MAX_ENTRIES = 20;
10
10
  export type JsonObject = {
11
11
  [key: string]: JsonValue;
@@ -34,6 +34,7 @@ export declare function wmPush(hippoRoot: string, opts: {
34
34
  sessionId?: string;
35
35
  taskId?: string;
36
36
  metadata?: JsonObject;
37
+ tenantId?: string;
37
38
  }): number;
38
39
  /**
39
40
  * Read working memory entries, sorted by importance DESC.
@@ -42,6 +43,7 @@ export declare function wmRead(hippoRoot: string, opts?: {
42
43
  scope?: string;
43
44
  sessionId?: string;
44
45
  limit?: number;
46
+ tenantId?: string;
45
47
  }): WorkingMemoryItem[];
46
48
  /**
47
49
  * Clear (delete) working memory entries. Returns the count deleted.
@@ -49,6 +51,7 @@ export declare function wmRead(hippoRoot: string, opts?: {
49
51
  export declare function wmClear(hippoRoot: string, opts?: {
50
52
  scope?: string;
51
53
  sessionId?: string;
54
+ tenantId?: string;
52
55
  }): number;
53
56
  /**
54
57
  * Flush working memory — delete entries after session end.
@@ -59,5 +62,6 @@ export declare function wmClear(hippoRoot: string, opts?: {
59
62
  export declare function wmFlush(hippoRoot: string, opts?: {
60
63
  scope?: string;
61
64
  sessionId?: string;
65
+ tenantId?: string;
62
66
  }): number;
63
67
  //# sourceMappingURL=working-memory.d.ts.map
@@ -5,8 +5,10 @@
5
5
  * importance-ranked, and automatically evicted when the buffer
6
6
  * exceeds WM_MAX_ENTRIES per scope.
7
7
  */
8
- import { closeHippoDb } from './db.js';
9
- import { openStore } from './store/open.js';
8
+ import { closeHippoDb, withWriteScope } from '../db/index.js';
9
+ import { openStore } from './open.js';
10
+ import { warnDamagedColumn } from '../util/stored-json.js';
11
+ import { resolveTenantId } from './tenant.js';
10
12
  export const WM_MAX_ENTRIES = 20;
11
13
  function rowToItem(row) {
12
14
  let metadata = {};
@@ -17,7 +19,8 @@ function rowToItem(row) {
17
19
  metadata = JSON.parse(row.metadata_json);
18
20
  }
19
21
  catch {
20
- // malformed JSON — default to empty
22
+ // The item still lists with its content; only its metadata reads as empty.
23
+ warnDamagedColumn({ table: 'working_memory', id: row.id, column: 'metadata_json' }, 'not valid JSON');
21
24
  }
22
25
  return {
23
26
  id: row.id,
@@ -42,56 +45,51 @@ export function wmPush(hippoRoot, opts) {
42
45
  try {
43
46
  const now = new Date().toISOString();
44
47
  const importance = opts.importance ?? 0;
45
- db.exec('BEGIN IMMEDIATE');
46
- try {
48
+ const tenantId = opts.tenantId ?? resolveTenantId({});
49
+ return withWriteScope(db, 'wm_push', () => {
47
50
  const result = db.prepare(`
48
- INSERT INTO working_memory(scope, session_id, task_id, importance, content, metadata_json, created_at, updated_at)
49
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
50
- `).run(opts.scope, opts.sessionId ?? null, opts.taskId ?? null, importance, opts.content, JSON.stringify(opts.metadata ?? {}), now, now);
51
+ INSERT INTO working_memory(scope, session_id, task_id, importance, content, metadata_json, created_at, updated_at, tenant_id)
52
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
53
+ `).run(opts.scope, opts.sessionId ?? null, opts.taskId ?? null, importance, opts.content, JSON.stringify(opts.metadata ?? {}), now, now, tenantId);
51
54
  const id = Number(result.lastInsertRowid ?? 0);
52
- // Evict if over capacity for this scope
53
- // SAFETY: `COUNT(*) AS cnt` on a scoped query always returns exactly
54
- // one row shaped { cnt }; .get() returns undefined only if the driver
55
- // yields no row, which COUNT(*) never does.
56
- const countRow = db.prepare(`
57
- SELECT COUNT(*) AS cnt FROM working_memory WHERE scope = ?
58
- `).get(opts.scope);
59
- const count = Number(countRow?.cnt ?? 0);
60
- if (count > WM_MAX_ENTRIES) {
61
- const excess = count - WM_MAX_ENTRIES;
62
- db.prepare(`
63
- DELETE FROM working_memory
64
- WHERE id IN (
65
- SELECT id FROM working_memory
66
- WHERE scope = ?
67
- ORDER BY importance ASC, created_at ASC
68
- LIMIT ?
69
- )
70
- `).run(opts.scope, excess);
71
- }
72
- db.exec('COMMIT');
55
+ evictOverCapacity(db, opts.scope, tenantId);
73
56
  return id;
74
- }
75
- catch (error) {
76
- try {
77
- db.exec('ROLLBACK');
78
- }
79
- catch { /* ignore */ }
80
- throw error;
81
- }
57
+ });
82
58
  }
83
59
  finally {
84
60
  closeHippoDb(db);
85
61
  }
86
62
  }
63
+ function evictOverCapacity(db, scope, tenantId) {
64
+ // Evict if over capacity for this scope
65
+ // SAFETY: `COUNT(*) AS cnt` on a scoped query always returns exactly
66
+ // one row shaped { cnt }; .get() returns undefined only if the driver
67
+ // yields no row, which COUNT(*) never does.
68
+ const countRow = db.prepare(`
69
+ SELECT COUNT(*) AS cnt FROM working_memory WHERE scope = ? AND tenant_id = ?
70
+ `).get(scope, tenantId);
71
+ const count = Number(countRow?.cnt ?? 0);
72
+ if (count > WM_MAX_ENTRIES) {
73
+ const excess = count - WM_MAX_ENTRIES;
74
+ db.prepare(`
75
+ DELETE FROM working_memory
76
+ WHERE id IN (
77
+ SELECT id FROM working_memory
78
+ WHERE scope = ? AND tenant_id = ?
79
+ ORDER BY importance ASC, created_at ASC
80
+ LIMIT ?
81
+ )
82
+ `).run(scope, tenantId, excess);
83
+ }
84
+ }
87
85
  /**
88
86
  * Read working memory entries, sorted by importance DESC.
89
87
  */
90
88
  export function wmRead(hippoRoot, opts) {
91
89
  const db = openStore(hippoRoot);
92
90
  try {
93
- const clauses = [];
94
- const params = [];
91
+ const clauses = ['tenant_id = ?'];
92
+ const params = [opts?.tenantId ?? resolveTenantId({})];
95
93
  if (opts?.scope) {
96
94
  clauses.push('scope = ?');
97
95
  params.push(opts.scope);
@@ -124,8 +122,8 @@ export function wmRead(hippoRoot, opts) {
124
122
  export function wmClear(hippoRoot, opts) {
125
123
  const db = openStore(hippoRoot);
126
124
  try {
127
- const clauses = [];
128
- const params = [];
125
+ const clauses = ['tenant_id = ?'];
126
+ const params = [opts?.tenantId ?? resolveTenantId({})];
129
127
  if (opts?.scope) {
130
128
  clauses.push('scope = ?');
131
129
  params.push(opts.scope);
@@ -1,5 +1,5 @@
1
1
  import { type DoctorOpts } from './doctor.js';
2
- import type { JsonObject } from './working-memory.js';
2
+ import type { JsonObject } from './store/working-memory.js';
3
3
  export interface SupportBundleOpts extends DoctorOpts {
4
4
  readonly cwd: string;
5
5
  readonly home: string;
@@ -1,24 +1,26 @@
1
1
  /** `hippo support-bundle`: one redacted JSON snapshot for a support ticket. Read-only (SQLite may leave empty -wal and -shm files); never touches memory content. */
2
- import { envByName, processEnv } from './env.js';
2
+ import { envByName, processEnv } from './util/env.js';
3
3
  import * as fs from 'fs';
4
4
  import * as os from 'os';
5
5
  import * as path from 'path';
6
6
  import { pathToFileURL } from 'url';
7
- import { findHippoStoreDir, isGlobalStoreRoot, realpathOrResolve } from './project-identity.js';
8
- import { getGlobalRoot } from './shared.js';
7
+ import { findHippoStoreDir, isGlobalStoreRoot } from './core/project-identity.js';
8
+ import { realpathOrResolve } from './util/real-path.js';
9
+ import { getGlobalRoot } from './sharing/shared.js';
9
10
  import { isInitialized } from './store/open.js';
10
- import { openHippoDbReadOnly, closeHippoDb, getSchemaVersion, getMeta, countTableRows } from './db.js';
11
+ import { readStoreInventory } from './store/diagnostics.js';
11
12
  import { runDoctor } from './doctor.js';
12
- import { loadConfig } from './config.js';
13
- import { redactSecretsStrict } from './secret-detect.js';
14
- import { isJsonString } from './json.js';
15
- import { escapeRegex } from './escape.js';
13
+ import { loadConfig } from './core/config.js';
14
+ import { redactSecretsStrict } from './util/secret-detect.js';
15
+ import { isJsonString, isJsonObject } from './util/json.js';
16
+ import { escapeRegex } from './util/escape.js';
17
+ import { errorMessage } from './util/log.js';
16
18
  const TAIL_MAX_BYTES = 256 * 1024;
17
19
  export const TAIL_MAX_LINES = 200;
18
20
  const TAIL_MAX_LINE_CHARS = 2000;
19
21
  // Greedy on purpose: complete key blocks are redacted first, so any END left is an orphan and what precedes it may be key body.
20
22
  const ORPHAN_KEY_END_RE = /^[\s\S]*-----END [A-Z ]*PRIVATE KEY-----/;
21
- // The other env vars hippo reads outside the HIPPO_ prefix (src/embedding-provider.ts, connectors/*).
23
+ // The other env vars hippo reads outside the HIPPO_ prefix (src/store/embeddings/provider.ts, connectors/*).
22
24
  const OTHER_ENV_NAMES = [
23
25
  'ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'VOYAGE_API_KEY', 'COHERE_API_KEY', 'TYPESAFE_API_KEY',
24
26
  'GITHUB_TOKEN', 'GITHUB_WEBHOOK_SECRET', 'GITHUB_WEBHOOK_SECRET_PREVIOUS',
@@ -27,9 +29,6 @@ const OTHER_ENV_NAMES = [
27
29
  'XDG_DATA_HOME', 'MCP_SSE_HEARTBEAT_MS', 'MCP_SSE_MAX_AGE_SEC',
28
30
  ];
29
31
  const CONFIG_SECRET_KEY_RE = /key|token|secret|passw|credential|auth|cookie|bearer|signature|private/i;
30
- function isJsonObject(v) {
31
- return typeof v === 'object' && v !== null && !Array.isArray(v);
32
- }
33
32
  function buildRuntime() {
34
33
  return {
35
34
  node: process.versions.node,
@@ -39,17 +38,6 @@ function buildRuntime() {
39
38
  osRelease: os.release(),
40
39
  };
41
40
  }
42
- function listTableNames(db) {
43
- // SAFETY: each row's shape matches the single `name` column named in the SELECT above.
44
- const rows = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' AND sql NOT LIKE 'CREATE VIRTUAL TABLE%' ORDER BY name`).all();
45
- return rows.map((r) => r.name);
46
- }
47
- function countTables(db) {
48
- const tables = {};
49
- for (const name of listTableNames(db))
50
- tables[name] = countTableRows(db, name);
51
- return tables;
52
- }
53
41
  function redactConfigValue(value) {
54
42
  if (Array.isArray(value))
55
43
  return value.map(redactConfigValue);
@@ -88,21 +76,13 @@ function buildStoreEntry(kind, storeDir) {
88
76
  const walPath = `${dbPath}-wal`;
89
77
  if (fs.existsSync(walPath))
90
78
  files['hippo.db-wal'] = fs.statSync(walPath).size;
91
- let db = null;
92
79
  try {
93
- db = openHippoDbReadOnly(storeDir);
94
- const schemaVersion = getSchemaVersion(db);
95
- const minCompatibleBinary = getMeta(db, 'min_compatible_binary', '') || null;
96
- const tables = countTables(db);
80
+ const { schemaVersion, minCompatibleBinary, tables } = readStoreInventory(storeDir);
97
81
  const { configFile, config } = readStoreConfig(storeDir);
98
82
  return { kind, path: storeDir, schemaVersion, minCompatibleBinary, files, tables, configFile, config };
99
83
  }
100
84
  catch (err) {
101
- return { kind, path: storeDir, error: err instanceof Error ? err.message : String(err) };
102
- }
103
- finally {
104
- if (db !== null)
105
- closeHippoDb(db);
85
+ return { kind, path: storeDir, error: errorMessage(err) };
106
86
  }
107
87
  }
108
88
  function buildStores(opts) {
@@ -1,5 +1,5 @@
1
- import type { DatabaseSyncLike } from './db.js';
2
- import type { MemoryEntry } from './memory.js';
1
+ import type { DatabaseSyncLike } from '../db/index.js';
2
+ import type { MemoryEntry } from '../core/memory.js';
3
3
  export type GatedWriteResult = 'written' | 'skipped:not-worth-storing' | 'skipped:secret' | 'skipped:rejected';
4
4
  /** Runs on the caller's handle so it nests in the caller's transaction (writeEntry would open a second handle and wait on that lock); the caller mirrors after commit with an entry it stamped itself. The rejection audit lands inside that transaction, which is safe because a batch that rolls back stays `summarised` and replay writes the audit again. */
5
5
  export declare function gatedWrite(db: DatabaseSyncLike, hippoRoot: string, entry: MemoryEntry, opts?: {
@@ -1,10 +1,10 @@
1
1
  // The one write path for text no person typed into hippo: capture, compaction items and imported agent memories.
2
- import { isContentWorthStoring } from './memory-quality.js';
3
- import { RejectedValueError } from './rejection.js';
4
- import { detectSecret } from './secret-detect.js';
5
- import { auditRejectionRefusal } from './store/audit-event.js';
6
- import { stampOriginProject } from './store/entry-row.js';
7
- import { writeEntryDbOnly } from './store/entry-writes.js';
2
+ import { isContentWorthStoring } from '../core/memory-quality.js';
3
+ import { RejectedValueError } from '../store/rejection.js';
4
+ import { detectSecret } from '../util/secret-detect.js';
5
+ import { auditRejectionRefusal } from '../store/audit-event.js';
6
+ import { stampOriginProject } from '../store/entry-row.js';
7
+ import { writeEntryDbOnly } from '../store/entry-writes.js';
8
8
  /** Runs on the caller's handle so it nests in the caller's transaction (writeEntry would open a second handle and wait on that lock); the caller mirrors after commit with an entry it stamped itself. The rejection audit lands inside that transaction, which is safe because a batch that rolls back stays `summarised` and replay writes the audit again. */
9
9
  export function gatedWrite(db, hippoRoot, entry, opts) {
10
10
  // Off for imported agent memories: a person wrote those notes, and a one-line preference fails the check.
@@ -0,0 +1,4 @@
1
+ /** Quarantine tier (CD5, AT3): pending/approved/rejected record for a memory `remember` flagged as untrusted. */
2
+ export { quarantineScopeFor } from '../store/quarantine.js';
3
+ export declare function isQuarantineScope(scope: string | null | undefined): boolean;
4
+ //# sourceMappingURL=quarantine.d.ts.map