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
package/dist/api/auth.js CHANGED
@@ -1,40 +1,47 @@
1
1
  // API key management: create, list, revoke, and grant or ungrant restricted scopes.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { BadRequestError, ConflictError, ForbiddenError, NotFoundError } from '../api-errors.js';
4
- import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
5
- import { forgetVerifiedKey, insertApiKey, listApiKeyRows, mintApiKey, revokeApiKey, grantScope, ungrantScope, } from '../auth.js';
6
- import { DAY_MS } from '../dashboard-snapshot.js';
7
- import { isRestrictedScope } from '../recall-scope.js';
8
- import { requireGroup } from '../store-port.js';
9
- import { createAuditOf, createKeyAt, createSelfKeyAt } from '../store/key-writes.js';
10
- import { selectApiKeyOwner } from '../store/tenant-lookup.js';
2
+ import { BadRequestError, ForbiddenError, NotFoundError } from '../core/api-errors.js';
3
+ import { mintApiKey, } from '../store/auth.js';
4
+ import { changeScopeGrant } from '../store/sqlite/local.js';
5
+ import { sqliteSyncStore } from '../store/sqlite/store.js';
6
+ import { DAY_MS } from '../util/time.js';
7
+ import { andThen, notPorted, onStore } from './on-store.js';
11
8
  const API_KEY_SUBJECT = 'api_key:';
12
9
  /** The key id an API-key actor's subject names, or null for any other actor. */
13
10
  function keyIdOfSubject(subject) {
14
11
  return subject.startsWith(API_KEY_SUBJECT) ? subject.slice(API_KEY_SUBJECT.length) : null;
15
12
  }
16
- /**
17
- * Mint a new API key. The new key is ALWAYS bound to `ctx.tenantId`. Callers
18
- * cannot override the tenant via the opts bag — a previous `tenantId` field
19
- * was removed because the HTTP layer would happily forward `body.tenantId`,
20
- * letting tenant A mint a key for tenant B. The HTTP route handler at
21
- * `src/server.ts` POST /v1/auth/keys mirrors this: it ignores any body
22
- * `tenantId` and uses the resolved Bearer's tenant exclusively.
23
- *
24
- * Only an admin actor can mint (ForbiddenError otherwise), and a key never
25
- * outranks its minter: a resolver admin is tenant-only, so it mints members.
26
- */
13
+ /** Mints a key always bound to `ctx.tenantId`; opts cannot override the tenant, or tenant A could mint a key for tenant B.
14
+ * Admin only (ForbiddenError otherwise), and a key never outranks its minter: a resolver admin is tenant-only, so it mints members. */
27
15
  export function authCreate(ctx, opts) {
28
- // With a store, its keyWrites group stores the key and its auth_create row together, and hippo.db is never opened.
29
- const reply = ctx.store ? createThroughStore(ctx, ctx.store, opts) : createOnHippoDb(ctx, opts);
30
- // SAFETY: as in authRevoke, a C typed with a store gets the promise its path returns and a C that hides one gets the union.
31
- return reply;
16
+ // The key and its auth_create row commit together on either store, so a failed audit write leaves no key.
17
+ return onStore(ctx, (port) => {
18
+ const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
19
+ const { plaintext, mint } = adminKeyMint(ctx, opts);
20
+ return andThen(keyWrites.createApiKey(mint), () => createResult(mint, plaintext));
21
+ });
32
22
  }
33
23
  /** A key row in the caller's tenant, made here so only its hash ever reaches a store. */
34
24
  function newKey(ctx, fields) {
35
25
  const { keyId, plaintext, keyHash } = mintApiKey();
36
26
  return { plaintext, key: { ...fields, keyId, keyHash, tenantId: ctx.tenantId, createdAt: new Date().toISOString() } };
37
27
  }
28
+ /** Days a key lives when its mint names no expiry, so a key nobody remembers stops working by itself. */
29
+ const DEFAULT_KEY_TTL_DAYS = 90;
30
+ // The ceiling keeps toISOString in range.
31
+ const MAX_TTL_DAYS = 3650;
32
+ /** A 400, not a RangeError, since the caller of the mint chose these. */
33
+ function mintExpiry({ ttlDays, noExpiry }) {
34
+ if (noExpiry && ttlDays !== undefined) {
35
+ throw new BadRequestError('send ttlDays or noExpiry, not both');
36
+ }
37
+ if (noExpiry)
38
+ return null;
39
+ const days = ttlDays ?? DEFAULT_KEY_TTL_DAYS;
40
+ if (!Number.isFinite(days) || days <= 0 || days > MAX_TTL_DAYS) {
41
+ throw new BadRequestError(`ttlDays must be above 0 and at most ${MAX_TTL_DAYS}`);
42
+ }
43
+ return new Date(Date.now() + days * DAY_MS).toISOString();
44
+ }
38
45
  function adminKeyMint(ctx, opts) {
39
46
  if (ctx.actor.role !== 'admin') {
40
47
  throw new ForbiddenError('Only an admin key can create API keys');
@@ -42,45 +49,16 @@ function adminKeyMint(ctx, opts) {
42
49
  if (ctx.actor.viaAuthResolver && opts.role === 'admin') {
43
50
  throw new ForbiddenError('A key minted through the auth resolver can only be a member key');
44
51
  }
45
- const role = opts.role ?? (ctx.actor.viaAuthResolver ? 'member' : 'admin');
52
+ const role = opts.role ?? 'member';
46
53
  const label = opts.label ?? null;
47
- const { plaintext, key } = newKey(ctx, { label, role, ownerSubject: null, expiresAt: null });
48
- // The plaintext is NEVER logged; metadata carries label + role, keyId is non-secret.
49
- return { plaintext, mint: { key, actor: ctx.actor.subject, metadata: { label, role } } };
54
+ const expiresAt = mintExpiry(opts);
55
+ const { plaintext, key } = newKey(ctx, { label, role, ownerSubject: null, expiresAt });
56
+ // The plaintext is NEVER logged; the audit row carries what the key can do and for how long, keyId is non-secret.
57
+ return { plaintext, mint: { key, actor: ctx.actor.subject, metadata: { label, role, expiresAt } } };
50
58
  }
51
59
  function createResult({ key }, plaintext) {
52
- return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: key.role };
53
- }
54
- async function createThroughStore(ctx, store, opts) {
55
- const keyWrites = requireGroup(store, 'keyWrites');
56
- const { plaintext, mint } = adminKeyMint(ctx, opts);
57
- await keyWrites.createApiKey(mint);
58
- return createResult(mint, plaintext);
59
- }
60
- function createOnHippoDb(ctx, opts) {
61
- const { plaintext, mint } = adminKeyMint(ctx, opts);
62
- const db = openHippoDb(ctx.hippoRoot);
63
- try {
64
- // A resolver admin's keys are found again only through their audit rows, so the key and its row commit together.
65
- if (ctx.actor.viaAuthResolver) {
66
- createKeyAt(db, mint);
67
- return createResult(mint, plaintext);
68
- }
69
- insertApiKey(db, mint.key);
70
- try {
71
- appendAuditEvent(db, createAuditOf(mint));
72
- }
73
- catch (error) {
74
- // Audit must not crash a successful mint.
75
- reportAuditWriteFailure('auth_create', String(error), mint.key.keyId);
76
- }
77
- return createResult(mint, plaintext);
78
- }
79
- finally {
80
- closeHippoDb(db);
81
- }
60
+ return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: key.role, expiresAt: key.expiresAt };
82
61
  }
83
- const MAX_TTL_DAYS = 3650;
84
62
  /** A RangeError, not a 4xx, since the operator's config sets these; the ttl ceiling keeps toISOString in range and a departed user's key short-lived. */
85
63
  function assertSelfMintOpts({ ttlDays, perSubject }) {
86
64
  if (!Number.isFinite(ttlDays) || ttlDays <= 0 || ttlDays > MAX_TTL_DAYS) {
@@ -90,12 +68,14 @@ function assertSelfMintOpts({ ttlDays, perSubject }) {
90
68
  throw new RangeError(`authCreateSelf: perSubject must be a whole number of at least 1, got ${String(perSubject)}`);
91
69
  }
92
70
  }
93
- /** Mint a member key for the caller an auth resolver vouched for, whatever its role; the binary floor, the cap's revokes, the mint and its audit rows commit or fail together.
94
- * With `ctx.store`, its keyWrites group runs that transaction; hippo.db is opened only when there is no store. */
71
+ /** Mint a member key for the caller an auth resolver vouched for, whatever its role; the
72
+ * binary floor, the cap's revokes, the mint and its audit rows commit or fail together. */
95
73
  export function authCreateSelf(ctx, opts) {
96
- const reply = ctx.store ? createSelfThroughStore(ctx, ctx.store, opts) : createSelfOnHippoDb(ctx, opts);
97
- // SAFETY: as in authRevoke, a C typed with a store gets the promise its path returns and a C that hides one gets the union.
98
- return reply;
74
+ return onStore(ctx, (port) => {
75
+ const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
76
+ const { plaintext, mint } = selfKeyMint(ctx, opts);
77
+ return andThen(keyWrites.createSelfApiKey(mint), () => selfResult(mint, plaintext));
78
+ });
99
79
  }
100
80
  function selfKeyMint(ctx, opts) {
101
81
  if (!ctx.actor.viaAuthResolver) {
@@ -108,69 +88,25 @@ function selfKeyMint(ctx, opts) {
108
88
  // Not destructured: a binding pattern makes TypeScript infer F as KeyFields and lose ownerSubject's string type.
109
89
  const made = newKey(ctx, { label, role: 'member', ownerSubject: subject, expiresAt });
110
90
  // Same op and actor as an admin mint, so a lookup by audit row finds this key too.
111
- return { plaintext: made.plaintext, mint: { key: made.key, actor: subject, metadata: { label, role: 'member', self: true, expiresAt }, perSubject: opts.perSubject } };
91
+ return {
92
+ plaintext: made.plaintext,
93
+ mint: { key: made.key, actor: subject, metadata: { label, role: 'member', self: true, expiresAt }, perSubject: opts.perSubject }
94
+ };
112
95
  }
113
96
  function selfResult({ key }, plaintext) {
114
97
  return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: 'member', expiresAt: key.expiresAt };
115
98
  }
116
- /** The store revokes the replaced keys without this process's verified-key cache, so they leave it here once the mint commits. */
117
- async function createSelfThroughStore(ctx, store, opts) {
118
- const keyWrites = requireGroup(store, 'keyWrites');
119
- const { plaintext, mint } = selfKeyMint(ctx, opts);
120
- for (const keyId of await keyWrites.createSelfApiKey(mint))
121
- forgetVerifiedKey(keyId);
122
- return selfResult(mint, plaintext);
123
- }
124
- function createSelfOnHippoDb(ctx, opts) {
125
- const { plaintext, mint } = selfKeyMint(ctx, opts);
126
- const db = openHippoDb(ctx.hippoRoot);
127
- try {
128
- createSelfKeyAt(db, mint);
129
- return selfResult(mint, plaintext);
130
- }
131
- finally {
132
- closeHippoDb(db);
133
- }
134
- }
135
- /**
136
- * List API keys visible to the calling tenant.
137
- *
138
- * Divergence from `cmdAuthList` in src/cli.ts: the CLI today returns ALL keys
139
- * regardless of tenant (single-tenant deployments). The API surface is tenant-
140
- * scoped because future multi-tenant deployments will share a hippoRoot, and
141
- * tenant A must not see tenant B's keys. Read-only, so no audit emit.
142
- */
143
- export function authList(ctx, opts) {
144
- const keysOf = (rows) => rows.map((r) => r.key);
145
- const rows = listRows(ctx, opts);
146
- // SAFETY: the promise comes back exactly when ctx has a store, as StoreReply says.
147
- return (rows instanceof Promise ? rows.then(keysOf) : keysOf(rows));
148
- }
149
- /** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from.
150
- * With `ctx.store`, its keyWrites group reads them; hippo.db is opened only when there is no store. */
99
+ /** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from. */
151
100
  export function authListRows(ctx, opts) {
152
- // SAFETY: the promise comes back exactly when ctx has a store, as StoreReply says.
153
- return listRows(ctx, opts);
154
- }
155
- function listRows(ctx, opts) {
156
- return ctx.store ? listThroughStore(ctx, ctx.store, opts) : listOnHippoDb(ctx, opts);
101
+ return onStore(ctx, (port) => listRows(ctx, port, opts));
157
102
  }
158
- async function listThroughStore(ctx, store, opts) {
159
- const keyWrites = requireGroup(store, 'keyWrites');
103
+ function listRows(ctx, port, opts) {
104
+ const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
160
105
  const keyId = memberKeyIdOf(ctx.actor);
161
- const filter = memberListFilter(ctx.actor, keyId === null ? undefined : (await store.findApiKey(keyId))?.ownerSubject);
162
- return filter === null ? [] : keyWrites.listApiKeys({ ...opts, tenantId: ctx.tenantId, ...filter });
163
- }
164
- function listOnHippoDb(ctx, opts) {
165
- const db = openHippoDb(ctx.hippoRoot);
166
- try {
167
- const keyId = memberKeyIdOf(ctx.actor);
168
- const filter = memberListFilter(ctx.actor, keyId === null ? undefined : selectApiKeyOwner(db, keyId)?.ownerSubject);
169
- return filter === null ? [] : listApiKeyRows(db, { ...opts, tenantId: ctx.tenantId, ...filter });
170
- }
171
- finally {
172
- closeHippoDb(db);
173
- }
106
+ return andThen(keyId === null ? undefined : port.findApiKey(keyId), (record) => {
107
+ const filter = memberListFilter(ctx.actor, record?.ownerSubject);
108
+ return filter === null ? [] : keyWrites.listApiKeys({ ...opts, tenantId: ctx.tenantId, ...filter });
109
+ });
174
110
  }
175
111
  /** The key id of a member API key caller, whose owner decides what it lists; null for any other caller. */
176
112
  function memberKeyIdOf(actor) {
@@ -202,12 +138,17 @@ function assertMayRevoke(ctx, keyId, row) {
202
138
  }
203
139
  }
204
140
  /** Revoke a key in the caller's tenant: a member API key may revoke only itself, a resolver member only the keys it minted.
205
- * With `ctx.store`, its keyAudit group revokes and writes the auth_revoke row; hippo.db is opened only when there is no store. */
141
+ * The revoke and its auth_revoke row commit together on either store, so a failed audit write leaves the key live. */
206
142
  export function authRevoke(ctx, keyId) {
207
- const reply = ctx.store ? revokeThroughStore(ctx, ctx.store, keyId) : revokeOnHippoDb(ctx, keyId);
208
- // SAFETY: a C typed with a store gets the promise its path returns; a C whose type hides a runtime store (a Pick of
209
- // Context) is typed as the union, which a caller has to await anyway.
210
- return reply;
143
+ return onStore(ctx, (port) => {
144
+ const keyAudit = port.keyAudit ?? notPorted(port, 'keyAudit');
145
+ assertMemberKeyRevokesSelf(ctx, keyId);
146
+ return andThen(port.findApiKey(keyId), (record) => {
147
+ assertMayRevoke(ctx, keyId, keyOwnerOf(record));
148
+ const revoke = { tenantId: ctx.tenantId, keyId, actor: ctx.actor.subject, at: new Date().toISOString() };
149
+ return andThen(keyAudit.revokeApiKey(revoke), (revokedAt) => ({ ok: true, revokedAt }));
150
+ });
151
+ });
211
152
  }
212
153
  function assertMemberKeyRevokesSelf(ctx, keyId) {
213
154
  if (ctx.actor.role !== 'admin' && !ctx.actor.viaAuthResolver && keyIdOfSubject(ctx.actor.subject) !== keyId) {
@@ -217,110 +158,29 @@ function assertMemberKeyRevokesSelf(ctx, keyId) {
217
158
  function keyOwnerOf(record) {
218
159
  return record ? { tenantId: record.tenantId, revokedAt: record.revokedAt, role: record.role, ownerSubject: record.ownerSubject ?? null } : undefined;
219
160
  }
220
- /** The store keeps no handle on this process's verified-key cache, so the key leaves it here once the revoke commits. */
221
- async function revokeThroughStore(ctx, store, keyId) {
222
- const keyAudit = requireGroup(store, 'keyAudit');
223
- assertMemberKeyRevokesSelf(ctx, keyId);
224
- assertMayRevoke(ctx, keyId, keyOwnerOf(await store.findApiKey(keyId)));
225
- const revokedAt = await keyAudit.revokeApiKey({ tenantId: ctx.tenantId, keyId, actor: ctx.actor.subject, at: new Date().toISOString() });
226
- forgetVerifiedKey(keyId);
227
- return { ok: true, revokedAt };
228
- }
229
- /** The auth_revoke row carries the KEY ROW's tenant, as cmdAuthRevoke does, and is skipped for an already-revoked key. */
230
- function revokeOnHippoDb(ctx, keyId) {
231
- assertMemberKeyRevokesSelf(ctx, keyId);
232
- const db = openHippoDb(ctx.hippoRoot);
233
- try {
234
- const row = selectApiKeyOwner(db, keyId);
235
- assertMayRevoke(ctx, keyId, row);
236
- let revokedAt;
237
- let alreadyRevoked = false;
238
- if (row.revokedAt) {
239
- alreadyRevoked = true;
240
- revokedAt = row.revokedAt;
241
- }
242
- else {
243
- revokeApiKey(db, keyId);
244
- revokedAt = selectApiKeyOwner(db, keyId)?.revokedAt ?? new Date().toISOString();
245
- }
246
- if (!alreadyRevoked) {
247
- try {
248
- appendAuditEvent(db, {
249
- tenantId: row.tenantId, // KEY's tenant, not ctx.tenantId.
250
- actor: ctx.actor.subject,
251
- op: 'auth_revoke',
252
- targetId: keyId,
253
- });
254
- }
255
- catch (error) {
256
- // Audit must not crash a successful revoke.
257
- reportAuditWriteFailure('auth_revoke', String(error), keyId);
258
- }
259
- }
260
- return { ok: true, revokedAt };
261
- }
262
- finally {
263
- closeHippoDb(db);
264
- }
265
- }
266
- /**
267
- * The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
268
- * so the local CLI can run revoke and grant in the key's own tenant.
269
- */
161
+ /** The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
162
+ * so the local CLI can run revoke and grant in the key's own tenant. */
270
163
  export function authKeyTenant(ctx, keyId) {
271
164
  if (!ctx.actor.hostAdmin) {
272
165
  throw new ForbiddenError('Only the host admin can look up a key across tenants');
273
166
  }
274
- const db = openHippoDb(ctx.hippoRoot);
275
- try {
276
- return selectApiKeyOwner(db, keyId)?.tenantId;
277
- }
278
- finally {
279
- closeHippoDb(db);
280
- }
167
+ // Synchronous for the CLI, so it reads hippo.db whatever store ctx names.
168
+ return sqliteSyncStore(ctx.hippoRoot).findApiKey(keyId)?.tenantId;
281
169
  }
282
170
  /** Grant `keyId` read access to one restricted `scope`. Admin only. */
283
171
  export function authGrant(ctx, keyId, scope) {
284
- return changeScopeGrant(ctx, keyId, scope, 'auth_grant');
172
+ return changeGrant(ctx, keyId, scope, 'auth_grant');
285
173
  }
286
174
  /** Revoke `keyId`'s grant on `scope`. Same authorization and lookup rules as authGrant. */
287
175
  export function authUngrant(ctx, keyId, scope) {
288
- return changeScopeGrant(ctx, keyId, scope, 'auth_ungrant');
176
+ return changeGrant(ctx, keyId, scope, 'auth_ungrant');
289
177
  }
290
- function changeScopeGrant(ctx, keyId, scope, op) {
178
+ /** hippo.db only: both callers are synchronous published functions, so no store's Promise can answer them. */
179
+ function changeGrant(ctx, keyId, scope, op) {
291
180
  if (ctx.actor.role !== 'admin') {
292
181
  throw new ForbiddenError('Only an admin key can change scope grants');
293
182
  }
294
- const db = openHippoDb(ctx.hippoRoot);
295
- try {
296
- const row = selectApiKeyOwner(db, keyId);
297
- if (!row || row.tenantId !== ctx.tenantId) {
298
- throw new NotFoundError(`Unknown key_id: ${keyId}`);
299
- }
300
- if (op === 'auth_grant' && row.revokedAt) {
301
- throw new ConflictError(`${keyId} is revoked; a grant on it would never apply`);
302
- }
303
- if (op === 'auth_grant' && /^personal:/i.test(scope)) {
304
- throw new BadRequestError(`${scope} is a personal scope: only its owner reads it, and no grant can change that`);
305
- }
306
- if (!isRestrictedScope(scope)) {
307
- throw new BadRequestError(`${scope} is not a restricted scope; it is already readable by default`);
308
- }
309
- if (op === 'auth_grant')
310
- grantScope(db, keyId, scope);
311
- else
312
- ungrantScope(db, keyId, scope);
313
- try {
314
- appendAuditEvent(db, { tenantId: ctx.tenantId, actor: ctx.actor.subject, op, targetId: keyId, metadata: { scope } });
315
- }
316
- catch (err) {
317
- // Audit must not undo a grant change that already committed; surface it instead.
318
- reportAuditWriteFailure(op, String(err), keyId);
319
- }
320
- return { ok: true };
321
- }
322
- finally {
323
- closeHippoDb(db);
324
- }
183
+ changeScopeGrant(ctx.hippoRoot, { tenantId: ctx.tenantId, keyId, scope, op, actor: ctx.actor.subject });
184
+ return { ok: true };
325
185
  }
326
186
  //# sourceMappingURL=auth.js.map
@@ -0,0 +1,13 @@
1
+ import type { HippoConfig } from '../core/config.js';
2
+ export declare const autoSleepInFlight: Set<string>;
3
+ export interface AutoSleepDue {
4
+ enabled: boolean;
5
+ count: number;
6
+ threshold: number;
7
+ due: boolean;
8
+ }
9
+ /** Counts only when enabled: the count opens the store. */
10
+ export declare function autoSleepDue(hippoRoot: string, tenantId: string, config: HippoConfig['autoSleep']): AutoSleepDue;
11
+ /** One run per store at a time; `allowed` is the caller's own gate. Consolidation is host-wide, so only the host tenant may start it. */
12
+ export declare function startAutoSleepIfDue(hippoRoot: string, tenantId: string, config: HippoConfig['autoSleep'], allowed: boolean): void;
13
+ //# sourceMappingURL=auto-sleep.d.ts.map
@@ -0,0 +1,32 @@
1
+ // When a write starts a background sleep; the MCP remember tool and the session-close hook share it.
2
+ import { errorFields, errorMessage, log } from '../util/log.js';
3
+ import { countCreatedSinceLastSleep } from '../store/index-and-stats.js';
4
+ import { consolidate } from '../consolidate/sleep.js';
5
+ import { outsideRequestStores, runWithRequestStores, scopedBusyWait } from '../db/index.js';
6
+ import { resolveTenantId } from '../store/tenant.js';
7
+ export const autoSleepInFlight = new Set();
8
+ /** Counts only when enabled: the count opens the store. */
9
+ export function autoSleepDue(hippoRoot, tenantId, config) {
10
+ const { enabled, threshold } = config;
11
+ const count = enabled ? countCreatedSinceLastSleep(hippoRoot, tenantId) : 0;
12
+ return { enabled, count, threshold, due: enabled && count >= threshold };
13
+ }
14
+ /** One run per store at a time; `allowed` is the caller's own gate. Consolidation is host-wide, so only the host tenant may start it. */
15
+ export function startAutoSleepIfDue(hippoRoot, tenantId, config, allowed) {
16
+ if (!allowed ||
17
+ !config.enabled ||
18
+ tenantId !== resolveTenantId({}) ||
19
+ autoSleepInFlight.has(hippoRoot) ||
20
+ !autoSleepDue(hippoRoot, tenantId, config).due)
21
+ return;
22
+ autoSleepInFlight.add(hippoRoot);
23
+ // Fire-and-forget (never block the response); an unhandled rejection would kill the server, so log it.
24
+ // Its own scope: the call's closes a handle the sleep still holds across its pauses, but the caller's lock wait carries over.
25
+ const busyWaitMs = scopedBusyWait();
26
+ outsideRequestStores(() => runWithRequestStores(() => consolidate(hippoRoot), { busyWaitMs }))
27
+ .catch((err) => {
28
+ log.error(`auto-sleep consolidate failed (tenant ${tenantId}): ${errorMessage(err)}`, errorFields(err));
29
+ })
30
+ .finally(() => autoSleepInFlight.delete(hippoRoot));
31
+ }
32
+ //# sourceMappingURL=auto-sleep.js.map
@@ -1,5 +1,5 @@
1
1
  /** A minimal age reference: a memory id plus its ISO-8601 creation timestamp
2
- * (MemoryEntry.created, canonical ISO per the src/memory.ts invariant). */
2
+ * (MemoryEntry.created, canonical ISO per the src/core/memory.ts invariant). */
3
3
  export interface AgeRef {
4
4
  id: string;
5
5
  created: string;
@@ -41,25 +41,12 @@ export interface DetectAvailabilityBiasOpts {
41
41
  /** Minimum older-passed-over count required to fire. Default 3. */
42
42
  minOlderPassedOver?: number;
43
43
  }
44
- export declare const DEFAULT_RECENCY_WINDOW_MS: number;
44
+ export declare const DEFAULT_RECENCY_WINDOW_MS = 86400000;
45
45
  export declare const DEFAULT_RECENT_FRACTION_THRESHOLD = 0.7;
46
46
  export declare const DEFAULT_MIN_RETURNED = 3;
47
47
  export declare const DEFAULT_MIN_POOL = 10;
48
48
  export declare const DEFAULT_MIN_OLDER_PASSED_OVER = 3;
49
- /**
50
- * Detect availability/recency bias in a recall result.
51
- *
52
- * Returns an AvailabilityHint when ALL of the following hold:
53
- * 1. topK.length >= minReturned AND pool.length >= minPool (enough signal);
54
- * 2. recentFraction > recentFractionThreshold (returned slice is recency-dominated);
55
- * 3. poolMedianAgeDays > topKMedianAgeDays (the pool genuinely skews older,
56
- * so recency is not just the corpus being young);
57
- * 4. olderCandidatesPassedOver >= minOlderPassedOver (older matched memories
58
- * actually existed and were not returned).
59
- * Otherwise returns null.
60
- *
61
- * Entries with an unparseable `created` are dropped defensively so a malformed
62
- * row cannot poison the medians with NaN.
63
- */
49
+ /** Returns an AvailabilityHint when the returned slice is recency-dominated, the pool skews older and older matches were passed over; else null.
50
+ * Entries with an unparseable `created` are dropped so a malformed row cannot poison the medians with NaN. */
64
51
  export declare function detectAvailabilityBias(opts: DetectAvailabilityBiasOpts): AvailabilityHint | null;
65
52
  //# sourceMappingURL=availability.d.ts.map
@@ -1,27 +1,9 @@
1
- // ---------------------------------------------------------------------------
2
- // Availability-bias detector (biases over memory state)
3
- // ---------------------------------------------------------------------------
4
- //
5
- // Flags when a recall's returned top-K is dominated by recent entries while
6
- // substantially older relevant candidates in the same MATCHED pool were passed
7
- // over. This is the availability / recency heuristic (Tversky-Kahneman): what
8
- // is most mentally available (recent) gets over-weighted relative to what is
9
- // most relevant. Hippo's substrate makes this measurable: every entry carries a
10
- // creation timestamp, so we can compare the age distribution of what was
11
- // RETURNED against the age distribution of the pool it was drawn from.
12
- //
13
- // Soft warning ONLY: this never filters, reorders, or suppresses a result. It surfaces
14
- // a hint the calling agent may act on, like anchoringHint / planningFallacyHint / suppressionSummary.
15
- //
16
- // PURE: no I/O, no env reads. The env gate (HIPPO_AVAILABILITY=off) and the
17
- // audit emission live in the callers (api.recall, cmdRecall, MCP), mirroring
18
- // detectAnchoring in recall-history.ts.
19
- export const DEFAULT_RECENCY_WINDOW_MS = 24 * 60 * 60 * 1000;
1
+ import { DAY_MS } from '../util/time.js';
2
+ export const DEFAULT_RECENCY_WINDOW_MS = DAY_MS;
20
3
  export const DEFAULT_RECENT_FRACTION_THRESHOLD = 0.7;
21
4
  export const DEFAULT_MIN_RETURNED = 3;
22
5
  export const DEFAULT_MIN_POOL = 10;
23
6
  export const DEFAULT_MIN_OLDER_PASSED_OVER = 3;
24
- const MS_PER_DAY = 24 * 60 * 60 * 1000;
25
7
  const MS_PER_HOUR = 60 * 60 * 1000;
26
8
  function median(nums) {
27
9
  if (nums.length === 0)
@@ -30,21 +12,13 @@ function median(nums) {
30
12
  const mid = Math.floor(sorted.length / 2);
31
13
  return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
32
14
  }
33
- /**
34
- * Detect availability/recency bias in a recall result.
35
- *
36
- * Returns an AvailabilityHint when ALL of the following hold:
37
- * 1. topK.length >= minReturned AND pool.length >= minPool (enough signal);
38
- * 2. recentFraction > recentFractionThreshold (returned slice is recency-dominated);
39
- * 3. poolMedianAgeDays > topKMedianAgeDays (the pool genuinely skews older,
40
- * so recency is not just the corpus being young);
41
- * 4. olderCandidatesPassedOver >= minOlderPassedOver (older matched memories
42
- * actually existed and were not returned).
43
- * Otherwise returns null.
44
- *
45
- * Entries with an unparseable `created` are dropped defensively so a malformed
46
- * row cannot poison the medians with NaN.
47
- */
15
+ function parseTimestamps(refs) {
16
+ return refs
17
+ .map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
18
+ .filter((e) => Number.isFinite(e.ts));
19
+ }
20
+ /** Returns an AvailabilityHint when the returned slice is recency-dominated, the pool skews older and older matches were passed over; else null.
21
+ * Entries with an unparseable `created` are dropped so a malformed row cannot poison the medians with NaN. */
48
22
  export function detectAvailabilityBias(opts) {
49
23
  const now = opts.now ?? Date.now();
50
24
  const recencyWindowMs = opts.recencyWindowMs ?? DEFAULT_RECENCY_WINDOW_MS;
@@ -52,24 +26,20 @@ export function detectAvailabilityBias(opts) {
52
26
  const minReturned = opts.minReturned ?? DEFAULT_MIN_RETURNED;
53
27
  const minPool = opts.minPool ?? DEFAULT_MIN_POOL;
54
28
  const minOlderPassedOver = opts.minOlderPassedOver ?? DEFAULT_MIN_OLDER_PASSED_OVER;
55
- const topK = opts.topK
56
- .map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
57
- .filter((e) => Number.isFinite(e.ts));
58
- const pool = opts.pool
59
- .map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
60
- .filter((e) => Number.isFinite(e.ts));
29
+ const topK = parseTimestamps(opts.topK);
30
+ const pool = parseTimestamps(opts.pool);
61
31
  if (topK.length < minReturned || pool.length < minPool)
62
32
  return null;
63
33
  const recentCount = topK.filter((e) => now - e.ts <= recencyWindowMs).length;
64
34
  const recentFraction = recentCount / topK.length;
65
35
  if (recentFraction <= recentFractionThreshold)
66
36
  return null;
67
- const topKMedianAgeDays = median(topK.map((e) => (now - e.ts) / MS_PER_DAY));
68
- const poolMedianAgeDays = median(pool.map((e) => (now - e.ts) / MS_PER_DAY));
37
+ const topKMedianAgeDays = median(topK.map((e) => (now - e.ts) / DAY_MS));
38
+ const poolMedianAgeDays = median(pool.map((e) => (now - e.ts) / DAY_MS));
69
39
  if (poolMedianAgeDays <= topKMedianAgeDays)
70
40
  return null;
71
41
  const topKIds = new Set(topK.map((e) => e.id));
72
- const olderCandidatesPassedOver = pool.filter((e) => !topKIds.has(e.id) && (now - e.ts) / MS_PER_DAY > topKMedianAgeDays).length;
42
+ const olderCandidatesPassedOver = pool.filter((e) => !topKIds.has(e.id) && (now - e.ts) / DAY_MS > topKMedianAgeDays).length;
73
43
  if (olderCandidatesPassedOver < minOlderPassedOver)
74
44
  return null;
75
45
  const pct = Math.round(recentFraction * 100);
@@ -1,4 +1,5 @@
1
1
  import { execFileSync } from 'child_process';
2
+ const MAX_DIFF_TERMS = 10;
2
3
  const SKIPPED_PATH_TERMS = ['src', 'dist', 'test', 'tests', 'node_modules', 'index'];
3
4
  // stderr is dropped because git's warnings (line-ending notices, for one) would otherwise become query terms.
4
5
  function readGit(args) {
@@ -13,7 +14,7 @@ export function autoDetectContext() {
13
14
  .split('\n')
14
15
  .flatMap((f) => f.replace(/[/\\.]/g, ' ').split(/\s+/))
15
16
  .filter((t) => t.length > 2 && !SKIPPED_PATH_TERMS.includes(t))
16
- .slice(0, 10);
17
+ .slice(0, MAX_DIFF_TERMS);
17
18
  if (terms.length > 0)
18
19
  return terms.join(' ');
19
20
  }
@@ -1,7 +1,7 @@
1
- import { type MemoryEntry } from './memory.js';
2
- import { type SessionHandoff } from './handoff.js';
3
- import type { SessionEvent, TaskSnapshot } from './store/rows.js';
4
- import type { AssembleCost, AssembleResult, AssembledContextItem, ContextCost, ContextResultEntry, DrillDownChild, DrillDownCost, DrillDownResult } from './api.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
+ import { type SessionHandoff } from '../core/handoff.js';
3
+ import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
4
+ import type { AssembleCost, AssembleResult, AssembledContextItem, ContextCost, ContextResultEntry, DrillDownChild, DrillDownCost, DrillDownResult } from './index.js';
5
5
  export declare function snapshotText(s: TaskSnapshot): string;
6
6
  export declare function handoffText(h: SessionHandoff): string;
7
7
  /** Needs at least one event; the header reads the latest. */
@@ -1,9 +1,10 @@
1
1
  // The strings a context block prints. The budget prices these same strings, so selection and print cannot drift.
2
- import { calculateStrength, confidenceFacets, confidenceLabel } from './memory.js';
3
- import { evalNow } from './ablation.js';
4
- import { estimateTokens } from './token-ledger.js';
5
- import { renderAmbientSummary } from './ambient.js';
6
- import { formatHandoffEvidenceLine } from './handoff.js';
2
+ import { calculateStrength, confidenceFacets, confidenceLabel } from '../core/memory.js';
3
+ import { evalNow } from '../core/ablation.js';
4
+ import { estimateTokens } from '../util/token-text.js';
5
+ import { renderAmbientSummary } from '../core/ambient.js';
6
+ import { formatHandoffEvidenceLine } from '../core/handoff.js';
7
+ import { DATE_PREFIX_CHARS } from '../util/token-text.js';
7
8
  export function snapshotText(s) {
8
9
  return [
9
10
  '## Active Task Snapshot\n',
@@ -78,7 +79,7 @@ export function contextLine(item, framing, showStrength, now, strengthPct = Math
78
79
  const label = confidenceLabel(e, now);
79
80
  const confTag = `[${label.text}]${label.warn ? ' ⚠️' : ''}`;
80
81
  if (framing === 'observe') {
81
- const dateStr = new Date(e.created).toISOString().slice(0, 10);
82
+ const dateStr = new Date(e.created).toISOString().slice(0, DATE_PREFIX_CHARS);
82
83
  // Verified rules print without the date prefix.
83
84
  if (confidenceFacets(e, now).tier === 'verified')
84
85
  return `- **${confTag} ${globalPrefix}${e.content}**${tagStr}${strengthStr}`;
@@ -1,9 +1,9 @@
1
1
  import type { AmbientLoadResult } from '../store/candidates.js';
2
- import { type MemoryEntry } from '../memory.js';
3
- import type { ContextReads, HippoStore } from '../store-port.js';
4
- import { type HippoConfig } from '../config.js';
5
- import type { ProjectRef } from '../project-identity.js';
6
- import type { DeliveryObserver } from '../delivery-recorder.js';
2
+ import { type MemoryEntry } from '../core/memory.js';
3
+ import type { ContextReads, HippoStore } from '../store/index.js';
4
+ import { type HippoConfig } from '../core/config.js';
5
+ import type { ProjectRef } from '../core/project-identity.js';
6
+ import type { DeliveryObserver } from '../store/delivery-recorder.js';
7
7
  import type { ContextCost, ContextOpts, ContextResultEntry } from './context-types.js';
8
8
  import type { Context } from './types.js';
9
9
  /** One store getContext reads rows from: its base search and its context reads. */