hippo-memory 1.69.0 → 1.71.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 (1014) 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 +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  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/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -0,0 +1,28 @@
1
+ import { envTenant } from '../util/env.js';
2
+ import { validateApiKey } from './auth.js';
3
+ export function resolveTenantId(opts) {
4
+ if (opts.apiKey) {
5
+ if (!opts.db)
6
+ throw new Error('resolveTenantId: db required when apiKey is set');
7
+ const ctx = validateApiKey(opts.db, opts.apiKey);
8
+ if (!ctx.valid || !ctx.tenantId)
9
+ throw new Error('invalid api key');
10
+ return ctx.tenantId;
11
+ }
12
+ // Empty/whitespace-only HIPPO_TENANT must fall through to 'default': `??` only catches undefined, so '' leaked through and broke every downstream tenant
13
+ // filter.
14
+ return envTenant();
15
+ }
16
+ /** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root, 'sess-abc')`) and silently get null.
17
+ * Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...` is refused, an accepted tradeoff. */
18
+ export function assertTenantId(fnName, value) {
19
+ if (typeof value !== 'string' || value.length === 0) {
20
+ throw new Error(`${fnName}: tenantId is required (got ${typeof value})`);
21
+ }
22
+ if (/^sess[-_]/i.test(value)) {
23
+ throw new Error(`${fnName}: tenantId looks like a session id ('${value}'). ` +
24
+ `In v0.41+ these helpers take (hippoRoot, tenantId, ...). ` +
25
+ `Pass the tenant id (e.g. 'default') and the session id separately.`);
26
+ }
27
+ }
28
+ //# sourceMappingURL=tenant.js.map
@@ -0,0 +1,61 @@
1
+ import type { DatabaseSyncLike } from '../db/index.js';
2
+ import type { TokenSurface } from './token-ledger.js';
3
+ export interface TokenRowInput {
4
+ ts: string;
5
+ tenantId: string;
6
+ sessionId: string | null;
7
+ surface: string;
8
+ event: string;
9
+ items: number;
10
+ tokens: number;
11
+ blockHash: string | null;
12
+ }
13
+ export declare function insertTokenRow(db: DatabaseSyncLike, row: TokenRowInput): void;
14
+ export declare function pruneTokenRowsBefore(db: DatabaseSyncLike, cutoffIso: string): void;
15
+ export interface LedgerAnchor {
16
+ id: number;
17
+ event: string;
18
+ block_hash: string | null;
19
+ }
20
+ /** The session's newest inject or reset row on a surface. */
21
+ export declare function latestInjectOrReset(db: DatabaseSyncLike, tenantId: string, sessionId: string, surface: string): LedgerAnchor | undefined;
22
+ export declare function countSkipsAfter(db: DatabaseSyncLike, tenantId: string, sessionId: string, surface: string, afterId: number): {
23
+ n: number;
24
+ } | undefined;
25
+ export interface SurfaceTotalsRow {
26
+ surface: string;
27
+ injected: number;
28
+ tokens: number;
29
+ skipped: number;
30
+ avoided: number;
31
+ reread: number;
32
+ sessions: number;
33
+ }
34
+ export declare function surfaceTotals(db: DatabaseSyncLike, tenantId: string, sinceIso: string): SurfaceTotalsRow[];
35
+ export interface SessionTotalsRow {
36
+ sessions: number;
37
+ hook_sessions: number;
38
+ reread_sessions: number;
39
+ tokens: number | null;
40
+ }
41
+ /** Window-wide session counts; `rereadSurfaces` are the hook surfaces whose sessions count as hook sessions. */
42
+ export declare function sessionTotals(db: DatabaseSyncLike, tenantId: string, sinceIso: string, rereadSurfaces: readonly TokenSurface[]): SessionTotalsRow | undefined;
43
+ export interface SessionTokenRow {
44
+ session_id: string;
45
+ sent: number;
46
+ skipped: number;
47
+ injections: number;
48
+ }
49
+ export declare function sessionTokenRows(db: DatabaseSyncLike, tenantId: string, sinceIso: string): SessionTokenRow[];
50
+ export interface InjectedBlockRow {
51
+ ts: string;
52
+ surface: TokenSurface;
53
+ tokens: number;
54
+ }
55
+ export declare function injectedBlocks(db: DatabaseSyncLike, tenantId: string, sessionId: string, surfaces: readonly TokenSurface[]): InjectedBlockRow[];
56
+ export declare function deleteRereadRows(db: DatabaseSyncLike, tenantId: string, sessionId: string): void;
57
+ /** The first stored pilot arm hash for a session, optionally of one tenant. */
58
+ export declare function firstPilotArmHash(db: DatabaseSyncLike, sessionId: string, tenantId?: string): {
59
+ block_hash: string | null;
60
+ } | undefined;
61
+ //# sourceMappingURL=token-ledger-rows.d.ts.map
@@ -0,0 +1,68 @@
1
+ export function insertTokenRow(db, row) {
2
+ db.prepare(`INSERT INTO token_ledger (ts, tenant_id, session_id, surface, event, items, tokens, block_hash)
3
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(row.ts, row.tenantId, row.sessionId, row.surface, row.event, row.items, row.tokens, row.blockHash);
4
+ }
5
+ export function pruneTokenRowsBefore(db, cutoffIso) {
6
+ db.prepare(`DELETE FROM token_ledger WHERE ts < ?`).run(cutoffIso);
7
+ }
8
+ /** The session's newest inject or reset row on a surface. */
9
+ export function latestInjectOrReset(db, tenantId, sessionId, surface) {
10
+ // SAFETY: the SELECT names exactly these three columns.
11
+ return db.prepare(`SELECT id, event, block_hash FROM token_ledger
12
+ WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event IN ('inject', 'reset')
13
+ ORDER BY id DESC LIMIT 1`).get(tenantId, sessionId, surface);
14
+ }
15
+ export function countSkipsAfter(db, tenantId, sessionId, surface, afterId) {
16
+ // SAFETY: the SELECT names exactly this one aggregate column.
17
+ return db.prepare(`SELECT COUNT(*) AS n FROM token_ledger
18
+ WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event = 'skip' AND id > ?`).get(tenantId, sessionId, surface, afterId);
19
+ }
20
+ export function surfaceTotals(db, tenantId, sinceIso) {
21
+ // SAFETY: the SELECT names exactly these columns, all aggregates or TEXT.
22
+ return db.prepare(`SELECT surface,
23
+ SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injected,
24
+ SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens,
25
+ SUM(CASE WHEN event = 'skip' THEN 1 ELSE 0 END) AS skipped,
26
+ SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS avoided,
27
+ SUM(CASE WHEN event = 'reread' THEN tokens ELSE 0 END) AS reread,
28
+ COUNT(DISTINCT session_id) AS sessions
29
+ FROM token_ledger
30
+ WHERE tenant_id = ? AND ts >= ?
31
+ GROUP BY surface`).all(tenantId, sinceIso);
32
+ }
33
+ /** Window-wide session counts; `rereadSurfaces` are the hook surfaces whose sessions count as hook sessions. */
34
+ export function sessionTotals(db, tenantId, sinceIso, rereadSurfaces) {
35
+ // SAFETY: the SELECT names exactly these four aggregate columns.
36
+ return db.prepare(`SELECT COUNT(DISTINCT session_id) AS sessions,
37
+ COUNT(DISTINCT CASE WHEN event <> 'reset' AND surface IN (${rereadSurfaces.map(() => '?').join(', ')}) THEN session_id END) AS hook_sessions,
38
+ COUNT(DISTINCT CASE WHEN event = 'reread' THEN session_id END) AS reread_sessions,
39
+ SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens
40
+ FROM token_ledger
41
+ WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`).get(...rereadSurfaces, tenantId, sinceIso);
42
+ }
43
+ export function sessionTokenRows(db, tenantId, sinceIso) {
44
+ // SAFETY: the SELECT names exactly these columns, all aggregates or TEXT.
45
+ return db.prepare(`SELECT session_id,
46
+ SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS sent,
47
+ SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS skipped,
48
+ SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injections
49
+ FROM token_ledger
50
+ WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'
51
+ GROUP BY session_id`).all(tenantId, sinceIso);
52
+ }
53
+ export function injectedBlocks(db, tenantId, sessionId, surfaces) {
54
+ // SAFETY: the SELECT names exactly these three columns.
55
+ return db.prepare(`SELECT ts, surface, tokens FROM token_ledger
56
+ WHERE tenant_id = ? AND session_id = ? AND event = 'inject' AND surface IN (${surfaces.map(() => '?').join(', ')})`).all(tenantId, sessionId, ...surfaces);
57
+ }
58
+ export function deleteRereadRows(db, tenantId, sessionId) {
59
+ db.prepare(`DELETE FROM token_ledger WHERE tenant_id = ? AND session_id = ? AND event = 'reread'`).run(tenantId, sessionId);
60
+ }
61
+ /** The first stored pilot arm hash for a session, optionally of one tenant. */
62
+ export function firstPilotArmHash(db, sessionId, tenantId) {
63
+ const params = tenantId === undefined ? [sessionId] : [sessionId, tenantId];
64
+ // SAFETY: the SELECT names exactly this one column.
65
+ return db.prepare(`SELECT block_hash FROM token_ledger WHERE session_id = ?${tenantId === undefined ? '' : ' AND tenant_id = ?'}
66
+ AND surface = 'pilot' AND event = 'arm' ORDER BY id LIMIT 1`).get(...params);
67
+ }
68
+ //# sourceMappingURL=token-ledger-rows.js.map
@@ -1,37 +1,16 @@
1
- import type { DatabaseSyncLike } from './db.js';
2
- /**
3
- * Where a block of memory text was sent.
4
- * - `hook`: the per-prompt `UserPromptSubmit` hook (`hippo context --pinned-only`).
5
- * - `hook_recall`: the same hook's prompt-recall section.
6
- * - `compact_resume`: the snapshot the SessionStart(compact) hook prints (`hippo compact-resume`).
7
- * - `context`, `recall`: the CLI commands.
8
- * - `mcp_recall`, `mcp_context`: the MCP tools.
9
- * - `http_recall`, `http_context`, `http_assemble`: the HTTP API.
10
- * - `pilot`: the session's pilot arm row (src/pilot-arm.ts); not a send, so it is in no surface list.
11
- */
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ /** Where a block was sent: `hook`/`hook_recall` (per-prompt hook), `compact_resume`, `context`/`recall` (CLI), `mcp_*`, `http_*`,
3
+ * and `pilot` (session pilot arm row, src/api/pilot-arm.ts; not a send, so in no surface list). */
12
4
  export type TokenSurface = 'hook' | 'hook_recall' | 'compact_resume' | 'context' | 'recall' | 'mcp_recall' | 'mcp_context' | 'http_recall' | 'http_context' | 'http_assemble' | 'pilot';
13
5
  /** All surfaces, in report order. */
14
6
  export declare const TOKEN_SURFACES: readonly TokenSurface[];
15
7
  /** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry one session id. */
16
8
  export declare const REREAD_SURFACES: readonly TokenSurface[];
17
- /**
18
- * What happened to a block.
19
- * - `inject`: sent to the agent.
20
- * - `skip`: identical to the session's last injected block, so not sent again.
21
- * - `reset`: the host compacted its context, so the next block must be sent.
22
- * - `reread`: tokens later calls read again, booked at session end as one row per session, hook surface and UTC day of the calls.
23
- * - `arm`: the pilot assignment; `block_hash` is `hippo` or `holdout`, `items` the holdout rate in basis points.
24
- */
9
+ /** What happened to a block: `inject` (sent), `skip` (identical to the last injected block), `reset` (host compacted, next must send), `reread` (tokens
10
+ * later calls read again, booked at session end), `arm` (pilot assignment; `block_hash` is `hippo` or `holdout`, `items` the holdout rate in bp). */
25
11
  export type TokenEvent = 'inject' | 'skip' | 'reset' | 'reread' | 'arm';
26
12
  /** Rows older than this are pruned on write. */
27
13
  export declare const TOKEN_LEDGER_RETENTION_DAYS = 90;
28
- /**
29
- * Rough token estimate: characters / 4. The single estimate behind every
30
- * token budget and ledger count in hippo.
31
- */
32
- export declare function estimateTokens(text: string): number;
33
- /** Stable 16-hex-char hash of a rendered block, for change detection. */
34
- export declare function blockHash(text: string): string;
35
14
  /** One ledger write. */
36
15
  export interface TokenUse {
37
16
  tenantId: string;
@@ -48,9 +27,7 @@ export interface TokenUse {
48
27
  /** Override the timestamp (tests). ISO string. */
49
28
  now?: string;
50
29
  }
51
- /**
52
- * Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}.
53
- */
30
+ /** Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}. */
54
31
  export declare function recordTokenUse(db: DatabaseSyncLike, use: TokenUse): void;
55
32
  /** What a session last sent on a surface, for {@link lastSentState}. */
56
33
  export interface LastSent {
@@ -59,18 +36,10 @@ export interface LastSent {
59
36
  /** Consecutive `skip` rows since that injection. */
60
37
  skipsSince: number;
61
38
  }
62
- /**
63
- * The last block this session injected on `surface`, or null when the
64
- * session has injected nothing, a `reset` came after it, or there is no
65
- * session id (without one, the caller always injects).
66
- */
39
+ /** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session id (the caller then always injects). */
67
40
  export declare function lastSentState(db: DatabaseSyncLike, tenantId: string, sessionId: string | null | undefined, surface: TokenSurface): LastSent | null;
68
- /**
69
- * Whether a block identical to the session's last injection should be
70
- * skipped. `refreshTurns` resends an unchanged block after that many
71
- * consecutive skips, so a long session still sees its pinned rules near the
72
- * latest turn; 0 never resends an unchanged block.
73
- */
41
+ /** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that many consecutive skips so a long
42
+ * session still sees its pinned rules, 0 never resends. */
74
43
  export declare function shouldSkipUnchanged(last: LastSent | null, hash: string, refreshTurns: number): boolean;
75
44
  /** Per-surface totals for {@link summarizeTokenUse}. */
76
45
  export interface TokenSurfaceSummary {
@@ -105,10 +74,7 @@ export interface TokenSummary {
105
74
  /** Sessions whose re-reads were counted at session end; open or crashed sessions are not. */
106
75
  rereadSessions: number;
107
76
  }
108
- /**
109
- * Sum the ledger for one tenant since `sinceIso`. Surfaces with no rows are
110
- * omitted.
111
- */
77
+ /** Sum the ledger for one tenant since `sinceIso`; surfaces with no rows are omitted. */
112
78
  export declare function summarizeTokenUse(db: DatabaseSyncLike, tenantId: string, sinceIso: string): TokenSummary;
113
79
  /** JSON-value string check without a runtime `typeof` (anti-slop rule). */
114
80
  interface ModelTagged {
@@ -133,11 +99,8 @@ export interface SessionTokens {
133
99
  /** Blocks sent. */
134
100
  injections: number;
135
101
  }
136
- /**
137
- * Ledger totals per session id since `sinceIso`, across every surface.
138
- * Claude Code hook rows carry the host's session id, which is also the
139
- * transcript file name, so these join to the host's own usage records.
140
- */
102
+ /** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the transcript file name), so they join to its
103
+ * usage records. */
141
104
  export declare function tokensBySession(db: DatabaseSyncLike, tenantId: string, sinceIso: string): SessionTokens[];
142
105
  /** One model API call in a host transcript, for {@link recordRereads}. */
143
106
  export interface ApiCall {
@@ -156,7 +119,7 @@ export interface TranscriptCalls {
156
119
  export declare function readApiCalls(transcriptPath: string): Promise<TranscriptCalls>;
157
120
  /** Calls that carried a block sent at `at` (epoch ms): every later call in the first later call's context window. */
158
121
  export declare function carryingCalls(calls: readonly ApiCall[], at: number): ApiCall[];
159
- /** Replace a session's `reread` rows in one transaction, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
160
- export declare function recordRereads(db: DatabaseSyncLike, tenantId: string, sessionId: string, calls: readonly ApiCall[]): number;
122
+ /** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
123
+ export declare function recordRereads(hippoRoot: string, tenantId: string, sessionId: string, calls: readonly ApiCall[]): number;
161
124
  export {};
162
125
  //# sourceMappingURL=token-ledger.d.ts.map
@@ -1,31 +1,13 @@
1
- /**
2
- * Token ledger: what memory text hippo hands agents,
3
- * and how many tokens it costs.
4
- *
5
- * One row per block of memory text sent to an agent, on every surface: the
6
- * per-prompt hook, the block `hippo compact-resume` restores after compaction,
7
- * `hippo context`, `hippo recall`, the MCP tools and the HTTP API. The ledger
8
- * answers the question a buyer asks first ("what does this cost me per
9
- * session?") and is the input for the token-savings evals.
10
- *
11
- * Every later model call re-reads a sent block until the host compacts; at session end the worker counts
12
- * those calls from the transcript as `reread` rows for the {@link REREAD_SURFACES} blocks, dated by call day.
13
- *
14
- * It also backs inject-only-on-change: the per-prompt hook compares the
15
- * hash of the block it is about to send with the last block it sent in the
16
- * same session and records a `skip` instead of sending it again.
17
- *
18
- * Token counts use {@link estimateTokens} (characters / 4), the same estimate
19
- * every budget in hippo uses. Rows hold counts, surfaces, session ids and
20
- * hashes, never memory content or query text.
21
- *
22
- * DB helpers take the caller's handle; {@link readApiCalls} streams one
23
- * transcript file. Writes are best-effort at the call sites; a ledger failure
24
- * must never break recall.
25
- */
26
- import { createHash } from 'node:crypto';
1
+ /** Token ledger: one row per block of memory text sent to an agent on any surface, with its token cost; the input for the token-savings evals.
2
+ * Backs inject-only-on-change: the hook records a `skip` when the block hash matches the session's last; `reread` rows cover {@link REREAD_SURFACES} blocks.
3
+ * Counts use {@link estimateTokens} (chars / 4); rows never hold content or query text. Writes are best-effort: a ledger failure must not break recall. */
27
4
  import { open } from 'node:fs/promises';
28
- import { isJsonString } from './json.js';
5
+ import { withWriteScope } from '../db/index.js';
6
+ import { onHandle } from './open.js';
7
+ import { isJsonString, isJsonObjectLiteral } from '../util/json.js';
8
+ import { DAY_MS } from '../util/time.js';
9
+ import { countSkipsAfter, deleteRereadRows, injectedBlocks, insertTokenRow, latestInjectOrReset, pruneTokenRowsBefore, sessionTokenRows, sessionTotals, surfaceTotals, } from './token-ledger-rows.js';
10
+ import { DATE_PREFIX_CHARS } from '../util/token-text.js';
29
11
  /** All surfaces, in report order. */
30
12
  export const TOKEN_SURFACES = [
31
13
  'hook', 'hook_recall', 'compact_resume', 'context', 'recall', 'mcp_recall', 'mcp_context',
@@ -35,52 +17,34 @@ export const TOKEN_SURFACES = [
35
17
  export const REREAD_SURFACES = ['hook', 'hook_recall', 'compact_resume'];
36
18
  /** Rows older than this are pruned on write. */
37
19
  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
- /**
50
- * Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}.
51
- */
20
+ /** Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}. */
52
21
  export function recordTokenUse(db, use) {
53
22
  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);
58
- }
59
- /**
60
- * The last block this session injected on `surface`, or null when the
61
- * session has injected nothing, a `reset` came after it, or there is no
62
- * session id (without one, the caller always injects).
63
- */
23
+ insertTokenRow(db, {
24
+ ts: now,
25
+ tenantId: use.tenantId,
26
+ sessionId: use.sessionId ?? null,
27
+ surface: use.surface,
28
+ event: use.event,
29
+ items: Math.max(0, Math.round(use.items)),
30
+ tokens: Math.max(0, Math.round(use.tokens)),
31
+ blockHash: use.hash ?? null,
32
+ });
33
+ const cutoff = new Date(Date.parse(now) - TOKEN_LEDGER_RETENTION_DAYS * DAY_MS).toISOString();
34
+ pruneTokenRowsBefore(db, cutoff);
35
+ }
36
+ /** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session id (the caller then always injects). */
64
37
  export function lastSentState(db, tenantId, sessionId, surface) {
65
38
  if (!sessionId)
66
39
  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);
40
+ const anchor = latestInjectOrReset(db, tenantId, sessionId, surface);
71
41
  if (!anchor || anchor.event === 'reset' || !anchor.block_hash)
72
42
  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);
43
+ const skips = countSkipsAfter(db, tenantId, sessionId, surface, anchor.id);
76
44
  return { hash: anchor.block_hash, skipsSince: Number(skips?.n ?? 0) };
77
45
  }
78
- /**
79
- * Whether a block identical to the session's last injection should be
80
- * skipped. `refreshTurns` resends an unchanged block after that many
81
- * consecutive skips, so a long session still sees its pinned rules near the
82
- * latest turn; 0 never resends an unchanged block.
83
- */
46
+ /** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that many consecutive skips so a long
47
+ * session still sees its pinned rules, 0 never resends. */
84
48
  export function shouldSkipUnchanged(last, hash, refreshTurns) {
85
49
  if (!last || last.hash !== hash)
86
50
  return false;
@@ -88,22 +52,9 @@ export function shouldSkipUnchanged(last, hash, refreshTurns) {
88
52
  return false;
89
53
  return true;
90
54
  }
91
- /**
92
- * Sum the ledger for one tenant since `sinceIso`. Surfaces with no rows are
93
- * omitted.
94
- */
55
+ /** Sum the ledger for one tenant since `sinceIso`; surfaces with no rows are omitted. */
95
56
  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);
57
+ const rows = surfaceTotals(db, tenantId, sinceIso);
107
58
  const bySurface = new Map(rows.map((r) => [r.surface, r]));
108
59
  const surfaces = [];
109
60
  for (const surface of TOKEN_SURFACES) {
@@ -120,13 +71,7 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
120
71
  sessions: Number(r.sessions),
121
72
  });
122
73
  }
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);
74
+ const perSession = sessionTotals(db, tenantId, sinceIso, REREAD_SURFACES);
130
75
  const sessionCount = Number(perSession?.sessions ?? 0);
131
76
  const sessionTokens = Number(perSession?.tokens ?? 0);
132
77
  return {
@@ -145,10 +90,6 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
145
90
  export function isSyntheticMessage(message) {
146
91
  return message.model === '<synthetic>';
147
92
  }
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
93
  /** A Claude Code hook payload on stdin as a JSON object; null when empty, malformed or not an object. */
153
94
  function parseHookPayload(stdinText) {
154
95
  if (!stdinText || stdinText.trim() === '')
@@ -156,7 +97,7 @@ function parseHookPayload(stdinText) {
156
97
  try {
157
98
  // SAFETY: JSON.parse returns a JSON value by definition.
158
99
  const payload = JSON.parse(stdinText.trim());
159
- return isJsonObject(payload) ? payload : null;
100
+ return isJsonObjectLiteral(payload) ? payload : null;
160
101
  }
161
102
  catch {
162
103
  // Malformed is one of the null cases the docblock names.
@@ -184,21 +125,10 @@ export function isSubagentPayload(stdinText) {
184
125
  const agentId = parseHookPayload(stdinText)?.agent_id;
185
126
  return isJsonString(agentId) && agentId.trim() !== '';
186
127
  }
187
- /**
188
- * Ledger totals per session id since `sinceIso`, across every surface.
189
- * Claude Code hook rows carry the host's session id, which is also the
190
- * transcript file name, so these join to the host's own usage records.
191
- */
128
+ /** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the transcript file name), so they join to its
129
+ * usage records. */
192
130
  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) => ({
131
+ return sessionTokenRows(db, tenantId, sinceIso).map((r) => ({
202
132
  sessionId: r.session_id,
203
133
  sent: Number(r.sent),
204
134
  skipped: Number(r.skipped),
@@ -227,7 +157,7 @@ export async function readApiCalls(transcriptPath) {
227
157
  continue;
228
158
  }
229
159
  // Sidechain calls, sidechain compactions and `<synthetic>` messages never touch the main context.
230
- if (!isJsonObject(entry) || entry.isSidechain === true)
160
+ if (!isJsonObjectLiteral(entry) || entry.isSidechain === true)
231
161
  continue;
232
162
  if (entry.subtype === 'compact_boundary') {
233
163
  compactions += 1;
@@ -235,9 +165,9 @@ export async function readApiCalls(transcriptPath) {
235
165
  }
236
166
  // One call spans lines sharing a message id.
237
167
  const message = entry.message;
238
- if (entry.type !== 'assistant' || !isJsonObject(message))
168
+ if (entry.type !== 'assistant' || !isJsonObjectLiteral(message))
239
169
  continue;
240
- if (!isJsonObject(message.usage) || isSyntheticMessage(message) || !isJsonString(message.id))
170
+ if (!isJsonObjectLiteral(message.usage) || isSyntheticMessage(message) || !isJsonString(message.id))
241
171
  continue;
242
172
  if (seen.has(message.id))
243
173
  continue;
@@ -260,17 +190,19 @@ export function carryingCalls(calls, at) {
260
190
  return [];
261
191
  return calls.filter((call) => call.at > at && call.compactions === first.compactions);
262
192
  }
263
- /** Replace a session's `reread` rows in one transaction, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
264
- 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);
193
+ /** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
194
+ export function recordRereads(hippoRoot, tenantId, sessionId, calls) {
195
+ return onHandle(hippoRoot, (db) => {
196
+ return replaceRereadRows(db, tenantId, sessionId, calls);
197
+ });
198
+ }
199
+ /** One transaction, so a refused row leaves the session's earlier re-read rows in place. */
200
+ function replaceRereadRows(db, tenantId, sessionId, calls) {
201
+ return withWriteScope(db, 'record_rereads', () => {
202
+ const rows = injectedBlocks(db, tenantId, sessionId, REREAD_SURFACES);
271
203
  const days = new Map();
272
204
  const add = (surface, at, rereads, tokens) => {
273
- const key = `${surface} ${new Date(at).toISOString().slice(0, 10)}`;
205
+ const key = `${surface} ${new Date(at).toISOString().slice(0, DATE_PREFIX_CHARS)}`;
274
206
  const day = days.get(key) ?? { surface, at, rereads: 0, tokens: 0 };
275
207
  days.set(key, { surface, at: Math.max(day.at, at), rereads: day.rereads + rereads, tokens: day.tokens + tokens });
276
208
  };
@@ -282,23 +214,13 @@ export function recordRereads(db, tenantId, sessionId, calls) {
282
214
  for (const call of carryingCalls(calls, sentAt).slice(1))
283
215
  add(row.surface, call.at, 1, Number(row.tokens));
284
216
  }
285
- db.prepare(`DELETE FROM token_ledger WHERE tenant_id = ? AND session_id = ? AND event = 'reread'`).run(tenantId, sessionId);
217
+ deleteRereadRows(db, tenantId, sessionId);
286
218
  for (const day of days.values()) {
287
219
  recordTokenUse(db, {
288
220
  tenantId, sessionId, surface: day.surface, event: 'reread', items: day.rereads, tokens: day.tokens, now: new Date(day.at).toISOString(),
289
221
  });
290
222
  }
291
- db.exec('COMMIT');
292
- committed = true;
293
223
  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
- }
224
+ });
303
225
  }
304
226
  //# 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,18 @@
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 { onHandle } from './open.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
+ return onHandle(hippoRoot, (db) => {
9
+ return summarizeTokenUse(db, tenantId, sinceIso);
10
+ });
11
+ }
12
+ /** One tenant's failure log totals since `sinceIso`. */
13
+ export function failureLogSummary(hippoRoot, tenantId, sinceIso) {
14
+ return onHandle(hippoRoot, (db) => {
15
+ return summarizeFailures(db, tenantId, sinceIso);
16
+ });
17
+ }
18
+ //# sourceMappingURL=usage-reports.js.map