hippo-memory 1.72.0 → 2.1.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 (995) hide show
  1. package/README.md +6 -4
  2. package/dist/agent-memories/apply.d.ts +7 -5
  3. package/dist/agent-memories/apply.js +66 -39
  4. package/dist/agent-memories/claude-code.d.ts +8 -2
  5. package/dist/agent-memories/claude-code.js +26 -7
  6. package/dist/agent-memories/copilot.js +2 -1
  7. package/dist/agent-memories/files.js +2 -1
  8. package/dist/agent-memories/legacy.d.ts +6 -3
  9. package/dist/agent-memories/legacy.js +35 -14
  10. package/dist/agent-memories/markdown.d.ts +3 -1
  11. package/dist/agent-memories/markdown.js +3 -1
  12. package/dist/agent-memories/openclaw.js +5 -2
  13. package/dist/agent-memories/plan.js +11 -1
  14. package/dist/agent-memories/project-folds.js +2 -1
  15. package/dist/agent-memories/report.d.ts +4 -1
  16. package/dist/agent-memories/report.js +43 -9
  17. package/dist/agent-memories/source.d.ts +8 -2
  18. package/dist/agent-memories/source.js +11 -3
  19. package/dist/agent-memories/sync.d.ts +7 -2
  20. package/dist/agent-memories/sync.js +141 -101
  21. package/dist/api/assemble.d.ts +6 -4
  22. package/dist/api/assemble.js +11 -5
  23. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  24. package/dist/api/auth/audit.js +58 -0
  25. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
  26. package/dist/api/{auth.js → auth/auth.js} +66 -54
  27. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  28. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
  29. package/dist/api/auth/session-owners.d.ts +10 -0
  30. package/dist/api/auth/session-owners.js +35 -0
  31. package/dist/api/availability.d.ts +3 -1
  32. package/dist/api/availability.js +3 -1
  33. package/dist/api/busy.d.ts +2 -0
  34. package/dist/api/busy.js +2 -0
  35. package/dist/api/cli-surface.d.ts +6 -0
  36. package/dist/api/cli-surface.js +6 -0
  37. package/dist/api/config-of.d.ts +5 -0
  38. package/dist/api/config-of.js +6 -0
  39. package/dist/api/context-auto.d.ts +4 -1
  40. package/dist/api/context-auto.js +14 -4
  41. package/dist/api/context-render.js +14 -7
  42. package/dist/api/context-select.d.ts +4 -1
  43. package/dist/api/context-select.js +31 -34
  44. package/dist/api/context-types.d.ts +38 -12
  45. package/dist/api/context.d.ts +8 -5
  46. package/dist/api/context.js +120 -63
  47. package/dist/api/continuity.d.ts +24 -21
  48. package/dist/api/continuity.js +18 -20
  49. package/dist/api/correction-latency.d.ts +3 -1
  50. package/dist/api/correction-latency.js +3 -1
  51. package/dist/api/error-reply.d.ts +4 -1
  52. package/dist/api/error-reply.js +12 -3
  53. package/dist/api/index.d.ts +39 -23
  54. package/dist/api/index.js +21 -23
  55. package/dist/api/instruction-detect.d.ts +4 -1
  56. package/dist/api/instruction-detect.js +75 -20
  57. package/dist/api/ledger-db.d.ts +15 -11
  58. package/dist/api/ledger-db.js +21 -23
  59. package/dist/api/memories/conflicts.d.ts +33 -0
  60. package/dist/api/memories/conflicts.js +67 -0
  61. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  62. package/dist/api/{forget.js → memories/forget.js} +23 -17
  63. package/dist/api/memories/memories.d.ts +27 -0
  64. package/dist/api/memories/memories.js +52 -0
  65. package/dist/api/memories/outcome.d.ts +22 -0
  66. package/dist/api/memories/outcome.js +28 -0
  67. package/dist/api/memories/promote.d.ts +40 -0
  68. package/dist/api/memories/promote.js +76 -0
  69. package/dist/api/memories/refine.d.ts +10 -0
  70. package/dist/api/memories/refine.js +12 -0
  71. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
  72. package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
  73. package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
  74. package/dist/api/{remember.js → memories/remember.js} +50 -32
  75. package/dist/api/objects/cards.d.ts +39 -0
  76. package/dist/api/{cards.js → objects/cards.js} +12 -14
  77. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  78. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
  79. package/dist/api/objects/goals.d.ts +18 -0
  80. package/dist/api/{goals.js → objects/goals.js} +12 -12
  81. package/dist/api/objects/graph.d.ts +11 -0
  82. package/dist/api/objects/graph.js +16 -0
  83. package/dist/api/objects/objects.d.ts +9 -0
  84. package/dist/api/{objects.js → objects/objects.js} +2 -3
  85. package/dist/api/objects/predictions.d.ts +11 -0
  86. package/dist/api/{predictions.js → objects/predictions.js} +7 -5
  87. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  88. package/dist/api/{projects.js → objects/projects.js} +8 -4
  89. package/dist/api/pilot-arm.d.ts +8 -4
  90. package/dist/api/pilot-arm.js +5 -4
  91. package/dist/api/prompt-hook.d.ts +35 -20
  92. package/dist/api/prompt-hook.js +66 -44
  93. package/dist/api/provenance-coverage.d.ts +3 -1
  94. package/dist/api/provenance-coverage.js +3 -1
  95. package/dist/api/recall/finish.d.ts +185 -0
  96. package/dist/api/recall/finish.js +301 -0
  97. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  98. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
  99. package/dist/api/recall/recall.d.ts +6 -0
  100. package/dist/api/{recall.js → recall/recall.js} +116 -72
  101. package/dist/api/recall/render.d.ts +39 -0
  102. package/dist/api/recall/render.js +60 -0
  103. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  104. package/dist/api/recall/request.js +261 -0
  105. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  106. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  107. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
  108. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  109. package/dist/api/session-end.d.ts +36 -8
  110. package/dist/api/session-end.js +71 -25
  111. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  112. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  113. package/dist/api/sleep/dormant.d.ts +25 -0
  114. package/dist/api/sleep/dormant.js +64 -0
  115. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  116. package/dist/api/sleep/learn.js +138 -0
  117. package/dist/api/sleep/sleep-run.d.ts +38 -0
  118. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
  119. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  120. package/dist/api/sleep/sleep.js +9 -0
  121. package/dist/api/status.d.ts +3 -1
  122. package/dist/api/status.js +3 -1
  123. package/dist/api/store-init.d.ts +4 -1
  124. package/dist/api/store-init.js +4 -1
  125. package/dist/api/tokens.d.ts +10 -9
  126. package/dist/api/tokens.js +9 -10
  127. package/dist/api/types.d.ts +27 -12
  128. package/dist/api/types.js +13 -4
  129. package/dist/capture/caller-session.d.ts +8 -2
  130. package/dist/capture/caller-session.js +16 -6
  131. package/dist/capture/capture-error.d.ts +3 -1
  132. package/dist/capture/capture-error.js +3 -1
  133. package/dist/capture/codex-patch.js +7 -2
  134. package/dist/capture/command.d.ts +4 -2
  135. package/dist/capture/command.js +34 -15
  136. package/dist/capture/compact-resume-caller.js +15 -8
  137. package/dist/capture/compact.d.ts +8 -5
  138. package/dist/capture/compact.js +34 -23
  139. package/dist/capture/compaction-items-caller.js +9 -3
  140. package/dist/capture/compaction-record.d.ts +4 -3
  141. package/dist/capture/compaction-record.js +20 -12
  142. package/dist/capture/compaction-spool.d.ts +18 -9
  143. package/dist/capture/compaction-spool.js +105 -63
  144. package/dist/capture/copilot-transcript.d.ts +11 -3
  145. package/dist/capture/copilot-transcript.js +16 -6
  146. package/dist/capture/extract.js +20 -8
  147. package/dist/capture/failure-caller.js +23 -12
  148. package/dist/capture/failure-reading.d.ts +10 -3
  149. package/dist/capture/failure-reading.js +24 -7
  150. package/dist/capture/pre-compact-caller.js +11 -4
  151. package/dist/capture/session-digest.d.ts +15 -4
  152. package/dist/capture/session-digest.js +39 -13
  153. package/dist/capture/session-end-caller.d.ts +4 -1
  154. package/dist/capture/session-end-caller.js +20 -8
  155. package/dist/capture/session-texts.d.ts +6 -2
  156. package/dist/capture/session-texts.js +22 -7
  157. package/dist/capture/session-worker.d.ts +4 -2
  158. package/dist/capture/session-worker.js +58 -17
  159. package/dist/capture/transcript.d.ts +13 -4
  160. package/dist/capture/transcript.js +32 -10
  161. package/dist/capture/working-state.d.ts +13 -4
  162. package/dist/capture/working-state.js +50 -56
  163. package/dist/cli/api-context.d.ts +14 -2
  164. package/dist/cli/api-context.js +45 -2
  165. package/dist/cli/audit.js +33 -33
  166. package/dist/cli/auth.js +23 -31
  167. package/dist/cli/briefs.d.ts +1 -1
  168. package/dist/cli/briefs.js +20 -15
  169. package/dist/cli/card.d.ts +1 -1
  170. package/dist/cli/card.js +56 -73
  171. package/dist/cli/client.d.ts +12 -5
  172. package/dist/cli/client.js +53 -23
  173. package/dist/cli/compact-resume-payload.d.ts +4 -1
  174. package/dist/cli/compact-resume-payload.js +12 -5
  175. package/dist/cli/context.js +43 -18
  176. package/dist/cli/continuity.d.ts +5 -5
  177. package/dist/cli/continuity.js +90 -107
  178. package/dist/cli/curate.d.ts +5 -4
  179. package/dist/cli/curate.js +55 -77
  180. package/dist/cli/dag.d.ts +1 -1
  181. package/dist/cli/dag.js +14 -17
  182. package/dist/cli/decisions.js +30 -30
  183. package/dist/cli/eval.js +16 -21
  184. package/dist/cli/exit.d.ts +4 -1
  185. package/dist/cli/exit.js +10 -2
  186. package/dist/cli/explain.js +12 -11
  187. package/dist/cli/flag-values.d.ts +1 -1
  188. package/dist/cli/flag-values.js +9 -18
  189. package/dist/cli/github.d.ts +6 -0
  190. package/dist/cli/github.js +25 -13
  191. package/dist/cli/goals.d.ts +1 -1
  192. package/dist/cli/goals.js +39 -56
  193. package/dist/cli/graph.d.ts +1 -1
  194. package/dist/cli/graph.js +15 -11
  195. package/dist/cli/hook-runtime.d.ts +34 -10
  196. package/dist/cli/hook-runtime.js +41 -16
  197. package/dist/cli/incidents.d.ts +1 -1
  198. package/dist/cli/incidents.js +25 -25
  199. package/dist/cli/init.d.ts +1 -1
  200. package/dist/cli/init.js +35 -20
  201. package/dist/cli/install-steps.d.ts +12 -3
  202. package/dist/cli/install-steps.js +42 -18
  203. package/dist/cli/last-sleep.d.ts +4 -1
  204. package/dist/cli/last-sleep.js +9 -4
  205. package/dist/cli/maintenance.d.ts +1 -1
  206. package/dist/cli/maintenance.js +11 -12
  207. package/dist/cli/notes.d.ts +1 -1
  208. package/dist/cli/notes.js +8 -5
  209. package/dist/cli/object-verbs.d.ts +5 -5
  210. package/dist/cli/object-verbs.js +13 -16
  211. package/dist/cli/open-browser.js +11 -2
  212. package/dist/cli/playbooks.d.ts +3 -3
  213. package/dist/cli/playbooks.js +40 -32
  214. package/dist/cli/predictions.js +17 -22
  215. package/dist/cli/print.js +4 -2
  216. package/dist/cli/projects.js +21 -11
  217. package/dist/cli/quality-repair-once.d.ts +1 -1
  218. package/dist/cli/quality-repair-once.js +7 -6
  219. package/dist/cli/recall.js +129 -93
  220. package/dist/cli/refine-llm.d.ts +15 -4
  221. package/dist/cli/refine-llm.js +17 -7
  222. package/dist/cli/remember.js +51 -55
  223. package/dist/cli/scheduler.d.ts +4 -1
  224. package/dist/cli/scheduler.js +9 -5
  225. package/dist/cli/serve.js +28 -18
  226. package/dist/cli/session-hooks.d.ts +2 -6
  227. package/dist/cli/session-hooks.js +140 -112
  228. package/dist/cli/setup.d.ts +1 -1
  229. package/dist/cli/setup.js +56 -34
  230. package/dist/cli/shared.d.ts +4 -2
  231. package/dist/cli/shared.js +26 -11
  232. package/dist/cli/slack.js +15 -24
  233. package/dist/cli/sleep-render.d.ts +3 -1
  234. package/dist/cli/sleep-render.js +8 -5
  235. package/dist/cli/sleep.js +16 -8
  236. package/dist/cli/status.d.ts +4 -4
  237. package/dist/cli/status.js +32 -27
  238. package/dist/cli/stdin.d.ts +10 -3
  239. package/dist/cli/stdin.js +10 -3
  240. package/dist/cli/transfer.d.ts +4 -4
  241. package/dist/cli/transfer.js +97 -82
  242. package/dist/cli/usage.d.ts +1 -1
  243. package/dist/cli/usage.js +1 -1
  244. package/dist/cli/verb-row.d.ts +2 -0
  245. package/dist/cli/verbs/health.js +2 -0
  246. package/dist/cli/verbs/memory.js +47 -53
  247. package/dist/cli/verbs/objects.js +16 -7
  248. package/dist/cli/verbs/sessions.js +4 -2
  249. package/dist/cli/versioned-verbs.d.ts +8 -7
  250. package/dist/cli/versioned-verbs.js +31 -21
  251. package/dist/cli.js +14 -18
  252. package/dist/connectors/dlq.d.ts +6 -6
  253. package/dist/connectors/dlq.js +12 -7
  254. package/dist/connectors/github/backfill.d.ts +4 -4
  255. package/dist/connectors/github/backfill.js +6 -4
  256. package/dist/connectors/github/deletion.d.ts +6 -4
  257. package/dist/connectors/github/deletion.js +5 -4
  258. package/dist/connectors/github/dlq.d.ts +8 -6
  259. package/dist/connectors/github/dlq.js +11 -5
  260. package/dist/connectors/github/ingest.d.ts +2 -2
  261. package/dist/connectors/github/ingest.js +9 -5
  262. package/dist/connectors/github/octokit-client.d.ts +3 -1
  263. package/dist/connectors/github/octokit-client.js +7 -2
  264. package/dist/connectors/github/ratelimit.d.ts +6 -2
  265. package/dist/connectors/github/ratelimit.js +6 -2
  266. package/dist/connectors/github/signature.d.ts +14 -3
  267. package/dist/connectors/github/signature.js +17 -3
  268. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  269. package/dist/connectors/github/tenant-routing.js +6 -5
  270. package/dist/connectors/github/transform.js +50 -67
  271. package/dist/connectors/github/types.d.ts +10 -3
  272. package/dist/connectors/github/types.js +6 -2
  273. package/dist/connectors/github/webhook.d.ts +5 -5
  274. package/dist/connectors/github/webhook.js +36 -23
  275. package/dist/connectors/ingest.d.ts +5 -3
  276. package/dist/connectors/ingest.js +3 -3
  277. package/dist/connectors/slack/backfill.d.ts +5 -5
  278. package/dist/connectors/slack/backfill.js +3 -3
  279. package/dist/connectors/slack/deletion.d.ts +4 -4
  280. package/dist/connectors/slack/deletion.js +6 -5
  281. package/dist/connectors/slack/dlq.d.ts +4 -4
  282. package/dist/connectors/slack/dlq.js +6 -6
  283. package/dist/connectors/slack/ingest.d.ts +6 -4
  284. package/dist/connectors/slack/ingest.js +5 -4
  285. package/dist/connectors/slack/signature.d.ts +4 -1
  286. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  287. package/dist/connectors/slack/tenant-routing.js +6 -5
  288. package/dist/connectors/slack/transform.d.ts +6 -2
  289. package/dist/connectors/slack/transform.js +6 -2
  290. package/dist/connectors/slack/types.d.ts +3 -1
  291. package/dist/connectors/slack/web-client.js +8 -3
  292. package/dist/connectors/slack/webhook.d.ts +5 -5
  293. package/dist/connectors/slack/webhook.js +19 -11
  294. package/dist/connectors/slack/workspaces.d.ts +7 -3
  295. package/dist/connectors/slack/workspaces.js +7 -3
  296. package/dist/connectors/store.d.ts +8 -0
  297. package/dist/connectors/store.js +2 -0
  298. package/dist/consolidate/conflicts.js +24 -10
  299. package/dist/consolidate/dag-summary.js +2 -1
  300. package/dist/consolidate/dag.d.ts +10 -5
  301. package/dist/consolidate/dag.js +45 -39
  302. package/dist/consolidate/decay.js +19 -6
  303. package/dist/consolidate/dedupe.d.ts +14 -5
  304. package/dist/consolidate/dedupe.js +28 -17
  305. package/dist/consolidate/flush-units.d.ts +4 -1
  306. package/dist/consolidate/flush-units.js +4 -1
  307. package/dist/consolidate/half-life-migration.d.ts +18 -8
  308. package/dist/consolidate/half-life-migration.js +48 -18
  309. package/dist/consolidate/llm-passes.js +27 -11
  310. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  311. package/dist/consolidate/memory-value-weights.js +6 -2
  312. package/dist/consolidate/memory-value.d.ts +30 -10
  313. package/dist/consolidate/memory-value.js +37 -14
  314. package/dist/consolidate/merge.d.ts +4 -1
  315. package/dist/consolidate/merge.js +47 -37
  316. package/dist/consolidate/overlap-index.d.ts +8 -2
  317. package/dist/consolidate/overlap-index.js +11 -4
  318. package/dist/consolidate/physics-pass.d.ts +3 -1
  319. package/dist/consolidate/physics-pass.js +10 -7
  320. package/dist/consolidate/replay.d.ts +11 -4
  321. package/dist/consolidate/replay.js +19 -7
  322. package/dist/consolidate/run.d.ts +13 -5
  323. package/dist/consolidate/run.js +4 -4
  324. package/dist/consolidate/sleep.d.ts +14 -6
  325. package/dist/consolidate/sleep.js +42 -39
  326. package/dist/consolidate/trace.d.ts +7 -2
  327. package/dist/consolidate/trace.js +7 -2
  328. package/dist/consolidate/traces.js +27 -30
  329. package/dist/core/ablation.d.ts +9 -3
  330. package/dist/core/ablation.js +14 -4
  331. package/dist/core/active-scope.d.ts +3 -1
  332. package/dist/core/active-scope.js +3 -1
  333. package/dist/core/agent-memory-tools.d.ts +2 -0
  334. package/dist/core/agent-memory-tools.js +2 -0
  335. package/dist/core/ambient.d.ts +4 -3
  336. package/dist/core/ambient.js +8 -6
  337. package/dist/core/api-errors.d.ts +9 -3
  338. package/dist/core/api-errors.js +9 -3
  339. package/dist/core/capture-contract.d.ts +4 -1
  340. package/dist/core/capture-contract.js +27 -8
  341. package/dist/core/compare.d.ts +24 -8
  342. package/dist/core/compare.js +24 -8
  343. package/dist/core/config.d.ts +18 -9
  344. package/dist/core/config.js +38 -29
  345. package/dist/core/cosine.d.ts +4 -1
  346. package/dist/core/cosine.js +4 -1
  347. package/dist/core/handoff.d.ts +7 -2
  348. package/dist/core/handoff.js +4 -1
  349. package/dist/core/markdown.js +22 -17
  350. package/dist/core/memory-audit.js +14 -3
  351. package/dist/core/memory-quality.d.ts +12 -3
  352. package/dist/core/memory-quality.js +57 -21
  353. package/dist/core/memory.d.ts +87 -30
  354. package/dist/core/memory.js +82 -33
  355. package/dist/core/merged-row.d.ts +8 -2
  356. package/dist/core/merged-row.js +10 -3
  357. package/dist/core/package-root.d.ts +3 -1
  358. package/dist/core/package-root.js +3 -1
  359. package/dist/core/particle-refresh.d.ts +8 -0
  360. package/dist/core/particle-refresh.js +22 -0
  361. package/dist/core/physics-config.d.ts +4 -1
  362. package/dist/core/physics-config.js +6 -2
  363. package/dist/core/physics.d.ts +39 -11
  364. package/dist/core/physics.js +71 -21
  365. package/dist/core/project-identity.d.ts +34 -17
  366. package/dist/core/project-identity.js +35 -18
  367. package/dist/core/project-remote.d.ts +8 -4
  368. package/dist/core/project-remote.js +31 -14
  369. package/dist/core/recall-scope.d.ts +33 -11
  370. package/dist/core/recall-scope.js +42 -15
  371. package/dist/core/rejection-digest.d.ts +7 -0
  372. package/dist/core/rejection-digest.js +13 -0
  373. package/dist/core/salience.d.ts +3 -1
  374. package/dist/core/salience.js +10 -4
  375. package/dist/core/search-types.d.ts +15 -2
  376. package/dist/core/search-types.js +11 -0
  377. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  378. package/dist/dashboard/dashboard-actions.js +18 -7
  379. package/dist/dashboard/dashboard-queries.js +2 -7
  380. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  381. package/dist/dashboard/dashboard-snapshot.js +5 -7
  382. package/dist/dashboard/dashboard.js +22 -8
  383. package/dist/db/backup.js +2 -2
  384. package/dist/db/busy.d.ts +10 -3
  385. package/dist/db/busy.js +27 -5
  386. package/dist/db/connect.d.ts +10 -2
  387. package/dist/db/connect.js +8 -2
  388. package/dist/db/continuity.d.ts +1 -1
  389. package/dist/db/continuity.js +27 -11
  390. package/dist/db/meta.d.ts +4 -1
  391. package/dist/db/meta.js +4 -1
  392. package/dist/db/migrate.d.ts +10 -5
  393. package/dist/db/migrate.js +40 -20
  394. package/dist/db/migrations/index.d.ts +1 -1
  395. package/dist/db/migrations/index.js +3 -1
  396. package/dist/db/migrations/types.d.ts +2 -1
  397. package/dist/db/migrations/v11.js +1 -0
  398. package/dist/db/migrations/v12.js +2 -1
  399. package/dist/db/migrations/v14.js +2 -0
  400. package/dist/db/migrations/v15.js +4 -2
  401. package/dist/db/migrations/v16.js +6 -3
  402. package/dist/db/migrations/v17.js +2 -1
  403. package/dist/db/migrations/v19.js +4 -2
  404. package/dist/db/migrations/v20.js +2 -1
  405. package/dist/db/migrations/v22.js +12 -6
  406. package/dist/db/migrations/v23.js +6 -3
  407. package/dist/db/migrations/v24.js +6 -3
  408. package/dist/db/migrations/v25.js +4 -2
  409. package/dist/db/migrations/v26.js +4 -2
  410. package/dist/db/migrations/v27.js +6 -3
  411. package/dist/db/migrations/v28.js +4 -2
  412. package/dist/db/migrations/v29.js +4 -2
  413. package/dist/db/migrations/v30.js +6 -3
  414. package/dist/db/migrations/v31.js +4 -2
  415. package/dist/db/migrations/v32.js +6 -3
  416. package/dist/db/migrations/v33.js +4 -2
  417. package/dist/db/migrations/v34.js +2 -1
  418. package/dist/db/migrations/v35.js +2 -1
  419. package/dist/db/migrations/v36.js +2 -1
  420. package/dist/db/migrations/v37.js +10 -5
  421. package/dist/db/migrations/v38.js +10 -5
  422. package/dist/db/migrations/v39.js +14 -6
  423. package/dist/db/migrations/v40.js +4 -2
  424. package/dist/db/migrations/v41.js +4 -2
  425. package/dist/db/migrations/v42.js +2 -1
  426. package/dist/db/migrations/v44.js +4 -2
  427. package/dist/db/migrations/v45.js +4 -2
  428. package/dist/db/migrations/v49.js +2 -1
  429. package/dist/db/migrations/v50.js +4 -2
  430. package/dist/db/migrations/v51.js +4 -2
  431. package/dist/db/migrations/v52.js +2 -1
  432. package/dist/db/migrations/v53.js +8 -4
  433. package/dist/db/migrations/v54.js +2 -1
  434. package/dist/db/migrations/v55.js +4 -2
  435. package/dist/db/migrations/v56.d.ts +3 -0
  436. package/dist/db/migrations/v56.js +28 -0
  437. package/dist/db/open.d.ts +24 -12
  438. package/dist/db/open.js +25 -13
  439. package/dist/db/physics-state.d.ts +8 -8
  440. package/dist/db/physics-state.js +17 -50
  441. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  442. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  443. package/dist/db/request-stores.d.ts +20 -5
  444. package/dist/db/request-stores.js +15 -5
  445. package/dist/db/tables.d.ts +2 -1
  446. package/dist/db/tables.js +12 -4
  447. package/dist/db/vector-store.d.ts +13 -4
  448. package/dist/db/vector-store.js +35 -14
  449. package/dist/db/wal-checkpointer.d.ts +2 -1
  450. package/dist/db/wal-checkpointer.js +19 -7
  451. package/dist/doctor.d.ts +7 -1
  452. package/dist/doctor.js +128 -46
  453. package/dist/embeddings/local.d.ts +8 -4
  454. package/dist/embeddings/local.js +11 -7
  455. package/dist/embeddings/provider.d.ts +19 -10
  456. package/dist/embeddings/provider.js +32 -27
  457. package/dist/embeddings/transformers.d.ts +16 -4
  458. package/dist/embeddings/transformers.js +32 -15
  459. package/dist/entry/json-hooks.d.ts +1 -1
  460. package/dist/entry/json-hooks.js +1 -1
  461. package/dist/entry/project-identity.js +2 -1
  462. package/dist/entry/session-text.d.ts +1 -1
  463. package/dist/entry/session-text.js +1 -1
  464. package/dist/entry/sqlite-handles.d.ts +10 -0
  465. package/dist/entry/sqlite-handles.js +9 -0
  466. package/dist/entry/store-kit.d.ts +50 -0
  467. package/dist/entry/store-kit.js +27 -0
  468. package/dist/entry/testing.d.ts +6 -0
  469. package/dist/entry/testing.js +7 -0
  470. package/dist/eval/eval-stats.d.ts +27 -8
  471. package/dist/eval/eval-stats.js +17 -5
  472. package/dist/eval/eval-suite.d.ts +3 -1
  473. package/dist/eval/eval-suite.js +409 -187
  474. package/dist/eval/eval.d.ts +8 -2
  475. package/dist/eval/eval.js +8 -2
  476. package/dist/eval/judgment.js +17 -7
  477. package/dist/graph/delta.d.ts +9 -42
  478. package/dist/graph/delta.js +17 -11
  479. package/dist/graph/extract.d.ts +10 -7
  480. package/dist/graph/extract.js +57 -25
  481. package/dist/graph/recall.d.ts +12 -4
  482. package/dist/graph/recall.js +30 -13
  483. package/dist/graph/stream.d.ts +18 -6
  484. package/dist/graph/stream.js +32 -10
  485. package/dist/graph/view.d.ts +19 -6
  486. package/dist/graph/view.js +42 -17
  487. package/dist/hooks/codex-session.js +2 -2
  488. package/dist/hooks/codex-wrapper.d.ts +3 -1
  489. package/dist/hooks/codex-wrapper.js +9 -4
  490. package/dist/hooks/copilot.d.ts +19 -5
  491. package/dist/hooks/copilot.js +54 -15
  492. package/dist/hooks/hook-blocks.d.ts +4 -1
  493. package/dist/hooks/hook-blocks.js +8 -3
  494. package/dist/hooks/json-hooks.d.ts +9 -5
  495. package/dist/hooks/json-hooks.js +72 -33
  496. package/dist/hooks/opencode.js +15 -5
  497. package/dist/hooks/shared.d.ts +27 -8
  498. package/dist/hooks/shared.js +57 -16
  499. package/dist/importers/core.d.ts +12 -4
  500. package/dist/importers/core.js +11 -10
  501. package/dist/importers/markdown-parse.d.ts +15 -5
  502. package/dist/importers/markdown-parse.js +16 -7
  503. package/dist/importers/markdown.js +6 -9
  504. package/dist/importers/sources.js +10 -23
  505. package/dist/importers/vault.d.ts +3 -3
  506. package/dist/importers/vault.js +61 -45
  507. package/dist/index.d.ts +33 -7
  508. package/dist/index.js +26 -8
  509. package/dist/learn/autolearn.d.ts +21 -6
  510. package/dist/learn/autolearn.js +57 -26
  511. package/dist/learn/churn-git.d.ts +4 -1
  512. package/dist/learn/churn-git.js +29 -5
  513. package/dist/learn/extract.d.ts +4 -1
  514. package/dist/learn/extract.js +17 -10
  515. package/dist/learn/forward-claim-detector.d.ts +17 -5
  516. package/dist/learn/forward-claim-detector.js +34 -15
  517. package/dist/learn/invalidation.d.ts +12 -6
  518. package/dist/learn/invalidation.js +62 -28
  519. package/dist/learn/roots.d.ts +3 -0
  520. package/dist/learn/roots.js +5 -0
  521. package/dist/mcp/admin-tools.d.ts +5 -5
  522. package/dist/mcp/admin-tools.js +28 -23
  523. package/dist/mcp/format.d.ts +1 -1
  524. package/dist/mcp/format.js +4 -2
  525. package/dist/mcp/framing.d.ts +3 -1
  526. package/dist/mcp/framing.js +20 -8
  527. package/dist/mcp/memory-tools.d.ts +3 -3
  528. package/dist/mcp/memory-tools.js +21 -20
  529. package/dist/mcp/protocol.d.ts +32 -16
  530. package/dist/mcp/protocol.js +12 -9
  531. package/dist/mcp/recall-tools.d.ts +3 -3
  532. package/dist/mcp/recall-tools.js +62 -74
  533. package/dist/mcp/request.d.ts +7 -5
  534. package/dist/mcp/request.js +61 -77
  535. package/dist/mcp/server.d.ts +3 -1
  536. package/dist/mcp/server.js +8 -3
  537. package/dist/mcp/session-state.d.ts +1 -1
  538. package/dist/mcp/session-state.js +4 -3
  539. package/dist/mcp/shared-gate.d.ts +3 -2
  540. package/dist/mcp/shared-gate.js +3 -2
  541. package/dist/mcp/stdio.d.ts +6 -3
  542. package/dist/mcp/stdio.js +59 -23
  543. package/dist/mcp/tool-args.d.ts +4 -1
  544. package/dist/mcp/tool-args.js +8 -3
  545. package/dist/mcp/tools.js +76 -32
  546. package/dist/objects/customer-notes.d.ts +12 -10
  547. package/dist/objects/customer-notes.js +21 -15
  548. package/dist/objects/decisions.d.ts +18 -10
  549. package/dist/objects/decisions.js +23 -17
  550. package/dist/objects/descriptor.js +2 -1
  551. package/dist/objects/fields.d.ts +4 -1
  552. package/dist/objects/fields.js +6 -2
  553. package/dist/objects/incidents.d.ts +14 -16
  554. package/dist/objects/incidents.js +29 -30
  555. package/dist/objects/lifecycle.d.ts +0 -4
  556. package/dist/objects/lifecycle.js +21 -24
  557. package/dist/objects/policies.d.ts +12 -16
  558. package/dist/objects/policies.js +17 -21
  559. package/dist/objects/processes.d.ts +16 -10
  560. package/dist/objects/processes.js +20 -15
  561. package/dist/objects/project-briefs.d.ts +13 -14
  562. package/dist/objects/project-briefs.js +33 -39
  563. package/dist/objects/skills.d.ts +10 -12
  564. package/dist/objects/skills.js +17 -22
  565. package/dist/postinstall.js +15 -7
  566. package/dist/predictions/planning-fallacy.d.ts +19 -6
  567. package/dist/predictions/planning-fallacy.js +4 -2
  568. package/dist/rerankers/clef.d.ts +8 -2
  569. package/dist/rerankers/clef.js +14 -9
  570. package/dist/rerankers/cross-encoder.d.ts +2 -1
  571. package/dist/rerankers/cross-encoder.js +19 -9
  572. package/dist/rerankers/index.js +2 -1
  573. package/dist/rerankers/jev.js +2 -1
  574. package/dist/rerankers/llm.d.ts +6 -2
  575. package/dist/rerankers/llm.js +8 -3
  576. package/dist/rerankers/remote.d.ts +3 -1
  577. package/dist/rerankers/remote.js +5 -2
  578. package/dist/rerankers/types.d.ts +6 -2
  579. package/dist/search/bm25-search.d.ts +3 -1
  580. package/dist/search/bm25-search.js +15 -2
  581. package/dist/search/boosts.js +4 -3
  582. package/dist/search/embed-memories.d.ts +12 -4
  583. package/dist/search/embed-memories.js +96 -58
  584. package/dist/search/engine.d.ts +11 -0
  585. package/dist/search/engine.js +14 -0
  586. package/dist/search/goal-boost.d.ts +10 -3
  587. package/dist/search/goal-boost.js +13 -6
  588. package/dist/search/hybrid-score.d.ts +4 -1
  589. package/dist/search/hybrid-score.js +4 -1
  590. package/dist/search/hybrid.d.ts +23 -8
  591. package/dist/search/hybrid.js +12 -7
  592. package/dist/search/multihop.js +14 -13
  593. package/dist/search/path-context.d.ts +10 -3
  594. package/dist/search/path-context.js +10 -3
  595. package/dist/search/physics-search.d.ts +9 -4
  596. package/dist/search/physics-search.js +38 -14
  597. package/dist/search/rerank.d.ts +2 -1
  598. package/dist/search/rerank.js +2 -1
  599. package/dist/search/rrf.d.ts +14 -5
  600. package/dist/search/rrf.js +11 -4
  601. package/dist/search/vector.d.ts +8 -2
  602. package/dist/search/vector.js +14 -8
  603. package/dist/server/auth.d.ts +19 -15
  604. package/dist/server/auth.js +68 -38
  605. package/dist/server/boot.d.ts +4 -1
  606. package/dist/server/boot.js +115 -67
  607. package/dist/server/client-ip.d.ts +17 -5
  608. package/dist/server/client-ip.js +56 -21
  609. package/dist/server/cursor.d.ts +10 -3
  610. package/dist/server/cursor.js +10 -3
  611. package/dist/server/deadline.d.ts +5 -2
  612. package/dist/server/deadline.js +10 -3
  613. package/dist/server/key-check-bounds.js +12 -4
  614. package/dist/server/lifecycle.d.ts +4 -1
  615. package/dist/server/lifecycle.js +10 -4
  616. package/dist/server/mcp-http.d.ts +2 -1
  617. package/dist/server/mcp-http.js +37 -22
  618. package/dist/server/rate-limit.d.ts +17 -5
  619. package/dist/server/rate-limit.js +55 -26
  620. package/dist/server/ready.js +7 -4
  621. package/dist/server/request.d.ts +15 -4
  622. package/dist/server/request.js +42 -15
  623. package/dist/server/route-checks.d.ts +4 -1
  624. package/dist/server/route-checks.js +8 -3
  625. package/dist/server/route-table.d.ts +8 -6
  626. package/dist/server/route-table.js +550 -97
  627. package/dist/server/routes/admin.d.ts +7 -7
  628. package/dist/server/routes/admin.js +36 -15
  629. package/dist/server/routes/customer-notes.d.ts +5 -5
  630. package/dist/server/routes/customer-notes.js +5 -4
  631. package/dist/server/routes/decisions.d.ts +5 -5
  632. package/dist/server/routes/decisions.js +12 -6
  633. package/dist/server/routes/incidents.d.ts +5 -5
  634. package/dist/server/routes/incidents.js +10 -4
  635. package/dist/server/routes/memories.d.ts +8 -8
  636. package/dist/server/routes/memories.js +12 -17
  637. package/dist/server/routes/object-routes.d.ts +8 -5
  638. package/dist/server/routes/object-routes.js +4 -2
  639. package/dist/server/routes/policies.d.ts +6 -6
  640. package/dist/server/routes/policies.js +11 -4
  641. package/dist/server/routes/predictions.d.ts +5 -5
  642. package/dist/server/routes/predictions.js +9 -4
  643. package/dist/server/routes/processes.d.ts +5 -5
  644. package/dist/server/routes/processes.js +15 -6
  645. package/dist/server/routes/project-briefs.d.ts +6 -6
  646. package/dist/server/routes/project-briefs.js +3 -2
  647. package/dist/server/routes/recall.d.ts +3 -3
  648. package/dist/server/routes/recall.js +21 -10
  649. package/dist/server/routes/skills.d.ts +6 -6
  650. package/dist/server/routes/skills.js +12 -4
  651. package/dist/server/server-detect.d.ts +24 -8
  652. package/dist/server/server-detect.js +57 -22
  653. package/dist/server/sleep-child.js +16 -10
  654. package/dist/server/sleep-offload.d.ts +8 -5
  655. package/dist/server/sleep-offload.js +40 -18
  656. package/dist/server/tls.d.ts +10 -2
  657. package/dist/server/tls.js +25 -5
  658. package/dist/server/types.d.ts +41 -24
  659. package/dist/server/validation.d.ts +4 -1
  660. package/dist/server/validation.js +22 -9
  661. package/dist/server.d.ts +17 -49
  662. package/dist/server.js +33 -40
  663. package/dist/sharing/global-store.d.ts +6 -12
  664. package/dist/sharing/global-store.js +8 -48
  665. package/dist/sharing/global-sync.d.ts +3 -1
  666. package/dist/sharing/global-sync.js +17 -7
  667. package/dist/sharing/project-merge.d.ts +25 -7
  668. package/dist/sharing/project-merge.js +49 -17
  669. package/dist/sharing/search-both.d.ts +8 -4
  670. package/dist/sharing/search-both.js +28 -14
  671. package/dist/sharing/share.d.ts +8 -4
  672. package/dist/sharing/share.js +40 -18
  673. package/dist/store/ambient.js +10 -5
  674. package/dist/store/audit-event.d.ts +2 -2
  675. package/dist/store/audit-event.js +8 -3
  676. package/dist/store/audit.d.ts +6 -3
  677. package/dist/store/audit.js +16 -6
  678. package/dist/store/auth.d.ts +4 -2
  679. package/dist/store/auth.js +63 -20
  680. package/dist/store/busy.d.ts +9 -0
  681. package/dist/store/busy.js +16 -0
  682. package/dist/store/candidates.d.ts +12 -5
  683. package/dist/store/candidates.js +90 -41
  684. package/dist/store/capture-write.d.ts +2 -1
  685. package/dist/store/capture-write.js +2 -1
  686. package/dist/store/card-detail.d.ts +4 -4
  687. package/dist/store/card-detail.js +15 -8
  688. package/dist/store/cards.d.ts +24 -10
  689. package/dist/store/cards.js +97 -63
  690. package/dist/store/compaction-caller.d.ts +2 -1
  691. package/dist/store/compaction-caller.js +2 -1
  692. package/dist/store/compactions-record.d.ts +14 -8
  693. package/dist/store/compactions-record.js +101 -37
  694. package/dist/store/compactions.js +35 -15
  695. package/dist/store/conflicts.d.ts +16 -5
  696. package/dist/store/conflicts.js +104 -48
  697. package/dist/store/connectors/dlq.d.ts +17 -5
  698. package/dist/store/connectors/dlq.js +58 -6
  699. package/dist/store/connectors/event-log.d.ts +122 -0
  700. package/dist/store/connectors/event-log.js +25 -0
  701. package/dist/store/connectors/github.d.ts +6 -3
  702. package/dist/store/connectors/github.js +30 -48
  703. package/dist/store/connectors/slack.d.ts +2 -1
  704. package/dist/store/connectors/slack.js +31 -47
  705. package/dist/store/dashboard-reads.d.ts +7 -3
  706. package/dist/store/dashboard-reads.js +32 -10
  707. package/dist/store/delete-and-batch.d.ts +17 -11
  708. package/dist/store/delete-and-batch.js +70 -28
  709. package/dist/store/delivery-recorder.d.ts +10 -7
  710. package/dist/store/delivery-recorder.js +70 -37
  711. package/dist/store/descendant-page.d.ts +2 -1
  712. package/dist/store/descendant-page.js +26 -10
  713. package/dist/store/diagnostics.d.ts +2 -1
  714. package/dist/store/diagnostics.js +2 -1
  715. package/dist/store/doctor-reads.d.ts +2 -1
  716. package/dist/store/doctor-reads.js +13 -5
  717. package/dist/store/dormant.d.ts +19 -11
  718. package/dist/store/dormant.js +45 -19
  719. package/dist/store/embeddings/index.d.ts +13 -9
  720. package/dist/store/embeddings/index.js +19 -12
  721. package/dist/store/entry-reads.d.ts +72 -21
  722. package/dist/store/entry-reads.js +215 -69
  723. package/dist/store/entry-row.d.ts +10 -6
  724. package/dist/store/entry-row.js +26 -14
  725. package/dist/store/entry-writes.d.ts +28 -13
  726. package/dist/store/entry-writes.js +61 -22
  727. package/dist/store/failure-log-at.js +1 -1
  728. package/dist/store/failure-log.d.ts +4 -2
  729. package/dist/store/failure-log.js +13 -6
  730. package/dist/store/gated-write.d.ts +3 -3
  731. package/dist/store/gated-write.js +3 -3
  732. package/dist/store/goals.d.ts +5 -4
  733. package/dist/store/goals.js +11 -12
  734. package/dist/store/graph-apply.d.ts +21 -0
  735. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  736. package/dist/store/graph-queue.d.ts +9 -6
  737. package/dist/store/graph-queue.js +15 -10
  738. package/dist/store/graph-reads.d.ts +16 -11
  739. package/dist/store/graph-reads.js +29 -19
  740. package/dist/store/graph-rows.d.ts +41 -3
  741. package/dist/store/graph-rows.js +10 -7
  742. package/dist/store/graph-view-rows.js +15 -7
  743. package/dist/store/graph-writes.d.ts +16 -10
  744. package/dist/store/graph-writes.js +59 -36
  745. package/dist/store/half-life.js +2 -2
  746. package/dist/store/handoffs.d.ts +13 -7
  747. package/dist/store/handoffs.js +44 -22
  748. package/dist/store/index-and-stats.d.ts +2 -2
  749. package/dist/store/index-and-stats.js +6 -5
  750. package/dist/store/index.d.ts +4 -2
  751. package/dist/store/index.js +2 -1
  752. package/dist/store/key-audit.d.ts +2 -1
  753. package/dist/store/key-audit.js +2 -1
  754. package/dist/store/key-writes.d.ts +2 -1
  755. package/dist/store/key-writes.js +9 -2
  756. package/dist/store/ledger-turn.d.ts +4 -1
  757. package/dist/store/ledger-turn.js +7 -2
  758. package/dist/store/mirrors.d.ts +11 -4
  759. package/dist/store/mirrors.js +96 -19
  760. package/dist/store/narrow.d.ts +6 -0
  761. package/dist/store/narrow.js +11 -0
  762. package/dist/store/open.d.ts +6 -3
  763. package/dist/store/open.js +20 -10
  764. package/dist/store/pilot-arm.d.ts +2 -1
  765. package/dist/store/pilot-arm.js +18 -6
  766. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  767. package/dist/store/planning-fallacy-evidence.js +8 -5
  768. package/dist/store/port/agent-import.d.ts +62 -0
  769. package/dist/store/port/agent-import.js +2 -0
  770. package/dist/store/port/consolidation.d.ts +129 -0
  771. package/dist/store/port/consolidation.js +2 -0
  772. package/dist/store/port/learning.d.ts +19 -0
  773. package/dist/store/port/learning.js +2 -0
  774. package/dist/store/port/local-files.d.ts +18 -0
  775. package/dist/store/port/local-files.js +2 -0
  776. package/dist/store/port/promotion.d.ts +20 -0
  777. package/dist/store/port/promotion.js +3 -0
  778. package/dist/store/port-groups.d.ts +160 -0
  779. package/dist/store/port-groups.js +2 -0
  780. package/dist/store/port.d.ts +261 -219
  781. package/dist/store/port.js +3 -9
  782. package/dist/store/predictions.d.ts +14 -10
  783. package/dist/store/predictions.js +37 -17
  784. package/dist/store/project-tags.d.ts +4 -1
  785. package/dist/store/project-tags.js +16 -5
  786. package/dist/store/quality-repair.d.ts +8 -4
  787. package/dist/store/quality-repair.js +53 -20
  788. package/dist/store/quarantine.d.ts +1 -0
  789. package/dist/store/quarantine.js +23 -9
  790. package/dist/store/raw-archive.d.ts +5 -4
  791. package/dist/store/raw-archive.js +11 -10
  792. package/dist/store/recall-trace.d.ts +22 -17
  793. package/dist/store/recall-trace.js +128 -64
  794. package/dist/store/rejected-values.d.ts +15 -10
  795. package/dist/store/rejected-values.js +46 -20
  796. package/dist/store/rejection.d.ts +12 -11
  797. package/dist/store/rejection.js +18 -19
  798. package/dist/store/report-reads.d.ts +2 -1
  799. package/dist/store/report-reads.js +2 -1
  800. package/dist/store/rows.d.ts +7 -5
  801. package/dist/store/rows.js +20 -13
  802. package/dist/store/rule-sql.d.ts +7 -3
  803. package/dist/store/rule-sql.js +26 -13
  804. package/dist/store/search-rows.d.ts +16 -11
  805. package/dist/store/search-rows.js +54 -32
  806. package/dist/store/sessions.d.ts +12 -10
  807. package/dist/store/sessions.js +40 -21
  808. package/dist/store/set-aside.d.ts +2 -2
  809. package/dist/store/set-aside.js +18 -5
  810. package/dist/store/sqlite/agent-import.d.ts +3 -0
  811. package/dist/store/sqlite/agent-import.js +77 -0
  812. package/dist/store/sqlite/cards-group.d.ts +6 -0
  813. package/dist/store/sqlite/cards-group.js +37 -0
  814. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  815. package/dist/store/sqlite/conflicts-group.js +18 -0
  816. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  817. package/dist/store/sqlite/connector-events-group.js +17 -6
  818. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  819. package/dist/store/sqlite/connector-writes-group.js +12 -5
  820. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  821. package/dist/store/sqlite/consolidation-group.js +64 -0
  822. package/dist/store/sqlite/dag-reads-group.js +1 -1
  823. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  824. package/dist/store/sqlite/dormant-group.js +29 -0
  825. package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
  826. package/dist/store/sqlite/entry-writes-group.js +37 -14
  827. package/dist/store/sqlite/error-codec.d.ts +4 -2
  828. package/dist/store/sqlite/error-codec.js +32 -10
  829. package/dist/store/sqlite/executor-counts.js +2 -1
  830. package/dist/store/sqlite/executor.d.ts +8 -3
  831. package/dist/store/sqlite/executor.js +56 -18
  832. package/dist/store/sqlite/global-promote.d.ts +5 -0
  833. package/dist/store/sqlite/global-promote.js +48 -0
  834. package/dist/store/sqlite/goals-group.d.ts +6 -0
  835. package/dist/store/sqlite/goals-group.js +23 -0
  836. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  837. package/dist/store/sqlite/graph-reads-group.js +2 -1
  838. package/dist/store/sqlite/held-connection.d.ts +8 -0
  839. package/dist/store/sqlite/held-connection.js +34 -7
  840. package/dist/store/sqlite/last-recall-group.d.ts +15 -0
  841. package/dist/store/sqlite/last-recall-group.js +62 -0
  842. package/dist/store/sqlite/learning-group.d.ts +4 -0
  843. package/dist/store/sqlite/learning-group.js +17 -0
  844. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  845. package/dist/store/sqlite/maintenance-groups.js +61 -0
  846. package/dist/store/sqlite/object-rows.d.ts +6 -3
  847. package/dist/store/sqlite/object-rows.js +34 -5
  848. package/dist/store/sqlite/objects-group.d.ts +5 -4
  849. package/dist/store/sqlite/objects-group.js +97 -38
  850. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  851. package/dist/store/sqlite/predictions-group.js +4 -2
  852. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  853. package/dist/store/sqlite/promotion-group.js +10 -0
  854. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  855. package/dist/store/sqlite/quarantine-group.js +4 -2
  856. package/dist/store/sqlite/reports-group.d.ts +6 -0
  857. package/dist/store/sqlite/reports-group.js +33 -0
  858. package/dist/store/sqlite/request-scope.d.ts +6 -0
  859. package/dist/store/sqlite/request-scope.js +18 -0
  860. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  861. package/dist/store/sqlite/sessions-group.js +46 -0
  862. package/dist/store/sqlite/store.d.ts +22 -18
  863. package/dist/store/sqlite/store.js +95 -33
  864. package/dist/store/sqlite/vector-pack.js +2 -1
  865. package/dist/store/sqlite/vector-reads-group.js +2 -1
  866. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  867. package/dist/store/sqlite/worker-jobs.js +19 -7
  868. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  869. package/dist/store/sqlite/worker-ops.js +6 -3
  870. package/dist/store/sqlite/worker-store.d.ts +4 -3
  871. package/dist/store/sqlite/worker-store.js +24 -14
  872. package/dist/store/summaries.d.ts +25 -11
  873. package/dist/store/summaries.js +84 -27
  874. package/dist/store/summary-dirty.d.ts +2 -1
  875. package/dist/store/summary-dirty.js +2 -1
  876. package/dist/store/tenant.d.ts +3 -2
  877. package/dist/store/tenant.js +5 -4
  878. package/dist/store/token-ledger-rows.js +8 -4
  879. package/dist/store/token-ledger.d.ts +19 -13
  880. package/dist/store/token-ledger.js +27 -14
  881. package/dist/store/tombstone-checks.d.ts +4 -1
  882. package/dist/store/tombstone-checks.js +10 -1
  883. package/dist/store/usage-reports.js +2 -1
  884. package/dist/store/vector-index.d.ts +8 -5
  885. package/dist/store/vector-index.js +28 -11
  886. package/dist/store/working-memory.d.ts +6 -4
  887. package/dist/store/working-memory.js +14 -9
  888. package/dist/support-bundle.js +10 -5
  889. package/dist/trust/quarantine.d.ts +1 -2
  890. package/dist/trust/quarantine.js +1 -5
  891. package/dist/trust/reject-flow.d.ts +12 -3
  892. package/dist/trust/reject-flow.js +12 -4
  893. package/dist/util/anthropic-messages.d.ts +7 -2
  894. package/dist/util/anthropic-messages.js +18 -7
  895. package/dist/util/atomic-write.d.ts +8 -3
  896. package/dist/util/atomic-write.js +36 -21
  897. package/dist/util/compaction-items.d.ts +4 -1
  898. package/dist/util/compaction-items.js +8 -2
  899. package/dist/util/crash-handlers.d.ts +7 -2
  900. package/dist/util/crash-handlers.js +13 -4
  901. package/dist/util/env.d.ts +26 -5
  902. package/dist/util/env.js +87 -25
  903. package/dist/util/format.d.ts +2 -0
  904. package/dist/util/format.js +4 -0
  905. package/dist/util/home-path.js +12 -6
  906. package/dist/util/hook-payload.d.ts +3 -1
  907. package/dist/util/hook-payload.js +3 -1
  908. package/dist/util/http-retry.d.ts +12 -6
  909. package/dist/util/http-retry.js +16 -6
  910. package/dist/util/http-util.d.ts +20 -5
  911. package/dist/util/http-util.js +28 -9
  912. package/dist/util/json.d.ts +4 -1
  913. package/dist/util/json.js +4 -1
  914. package/dist/util/keyset.js +2 -1
  915. package/dist/util/limits.js +4 -2
  916. package/dist/util/log.d.ts +13 -5
  917. package/dist/util/log.js +29 -6
  918. package/dist/util/net.d.ts +5 -0
  919. package/dist/util/net.js +19 -0
  920. package/dist/util/real-path.d.ts +2 -1
  921. package/dist/util/real-path.js +4 -3
  922. package/dist/util/request-scope.d.ts +16 -4
  923. package/dist/util/request-scope.js +19 -6
  924. package/dist/util/same-text.d.ts +10 -3
  925. package/dist/util/same-text.js +10 -3
  926. package/dist/util/secret-detect.d.ts +24 -7
  927. package/dist/util/secret-detect.js +49 -14
  928. package/dist/util/spawn-argv.d.ts +11 -0
  929. package/dist/util/spawn-argv.js +66 -0
  930. package/dist/util/sql.d.ts +3 -0
  931. package/dist/util/sql.js +6 -0
  932. package/dist/util/sqlite-blocked.d.ts +15 -4
  933. package/dist/util/sqlite-blocked.js +19 -6
  934. package/dist/util/stored-json.d.ts +4 -1
  935. package/dist/util/stored-json.js +6 -2
  936. package/dist/util/stream-tee.d.ts +2 -1
  937. package/dist/util/stream-tee.js +8 -5
  938. package/dist/util/transcript-tail.d.ts +4 -1
  939. package/dist/util/transcript-tail.js +4 -1
  940. package/dist/util/vector-codec.d.ts +4 -0
  941. package/dist/util/vector-codec.js +15 -0
  942. package/dist/util/version.d.ts +8 -3
  943. package/dist/util/version.js +8 -3
  944. package/dist/util/write-budget.d.ts +7 -2
  945. package/dist/util/write-budget.js +5 -2
  946. package/dist/util/yaml.d.ts +4 -1
  947. package/dist/util/yaml.js +4 -1
  948. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  949. package/extensions/openclaw-plugin/package.json +1 -1
  950. package/openclaw.plugin.json +1 -1
  951. package/package.json +4 -1
  952. package/scripts/postinstall.cjs +3 -1
  953. package/dist/api/audit.js +0 -56
  954. package/dist/api/cards.d.ts +0 -42
  955. package/dist/api/conflicts.d.ts +0 -28
  956. package/dist/api/conflicts.js +0 -61
  957. package/dist/api/dormant.d.ts +0 -14
  958. package/dist/api/dormant.js +0 -58
  959. package/dist/api/goals.d.ts +0 -18
  960. package/dist/api/graph.d.ts +0 -8
  961. package/dist/api/graph.js +0 -7
  962. package/dist/api/learn.js +0 -124
  963. package/dist/api/memories.d.ts +0 -23
  964. package/dist/api/memories.js +0 -46
  965. package/dist/api/objects.d.ts +0 -9
  966. package/dist/api/on-store.d.ts +0 -16
  967. package/dist/api/on-store.js +0 -38
  968. package/dist/api/outcome.d.ts +0 -19
  969. package/dist/api/outcome.js +0 -21
  970. package/dist/api/predictions.d.ts +0 -11
  971. package/dist/api/promote.d.ts +0 -36
  972. package/dist/api/promote.js +0 -65
  973. package/dist/api/recall-core.d.ts +0 -4
  974. package/dist/api/recall-core.js +0 -120
  975. package/dist/api/recall-finish.d.ts +0 -53
  976. package/dist/api/recall-finish.js +0 -30
  977. package/dist/api/recall-history.d.ts +0 -64
  978. package/dist/api/recall-history.js +0 -159
  979. package/dist/api/recall-record.d.ts +0 -43
  980. package/dist/api/recall-record.js +0 -78
  981. package/dist/api/recall-request.js +0 -121
  982. package/dist/api/recall.d.ts +0 -6
  983. package/dist/api/refine.d.ts +0 -7
  984. package/dist/api/refine.js +0 -10
  985. package/dist/api/session-owners.d.ts +0 -4
  986. package/dist/api/session-owners.js +0 -17
  987. package/dist/api/sleep-run.d.ts +0 -26
  988. package/dist/api/sleep.js +0 -10
  989. package/dist/cli/lenient-id.d.ts +0 -2
  990. package/dist/cli/lenient-id.js +0 -13
  991. package/dist/graph/write.d.ts +0 -14
  992. package/dist/store/sqlite/busy.d.ts +0 -3
  993. package/dist/store/sqlite/busy.js +0 -8
  994. package/dist/store/sqlite/local.d.ts +0 -21
  995. package/dist/store/sqlite/local.js +0 -39
@@ -4,27 +4,28 @@ import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessi
4
4
  import { estimateTokens } from '../util/token-text.js';
5
5
  import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
6
6
  import { isWorthSurfacing } from '../core/memory-quality.js';
7
- import { getGlobalRoot } from '../sharing/global-store.js';
8
7
  import { evalNow, strengthAblation } from '../core/ablation.js';
9
8
  import { dropHeldCopies } from '../util/same-text.js';
10
9
  import { BadRequestError } from '../core/api-errors.js';
11
- import { isSharedStore, loadConfig } from '../core/config.js';
10
+ import { isSharedStore } from '../core/config.js';
11
+ import { configOf } from './config-of.js';
12
12
  import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
13
- import { errorMessage, log } from '../util/log.js';
14
- import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, isInitialized, projectId, projectNames, } from '../core/project-identity.js';
13
+ import { errorMessage, log, errorFields } from '../util/log.js';
14
+ import { resolveProjectIdentity, classifyOriginProject, projectId, projectNames, } from '../core/project-identity.js';
15
15
  import { promptTokens } from '../core/prompt-recall.js';
16
16
  import { detectSecret } from '../util/secret-detect.js';
17
17
  import { isSessionDigestRow } from '../core/session-digest-row.js';
18
18
  import { addAmbientTallies, ambientStateFromTallies } from '../core/ambient.js';
19
- import { requireGroup, sqliteStore, storeFor } from '../store/index.js';
19
+ import { hasGroup } from '../store/index.js';
20
20
  import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../core/recall-scope.js';
21
21
  import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
22
- import { andThen, onStore } from './on-store.js';
23
- import { strengthenOf } from './recall-record.js';
22
+ import { strengthenOf } from './recall/finish.js';
23
+ import { tokenPurse } from './recall/render.js';
24
24
  import { ownerOrSubject } from './types.js';
25
25
  export { oneCopyPerMemory } from './context-select.js';
26
- /** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot drift.
27
- * Secret veto is unconditional (flagged rows inject only in their own project); private scopes need `exactScope`, other projects `includeCrossProject`. */
26
+ /** The single ambient-injection admission policy, shared by getContext and the CLI ambient-state summary so they cannot
27
+ * drift. Secret veto is unconditional (flagged rows inject only in their own project); private scopes need
28
+ * `exactScope`, other projects `includeCrossProject`. */
28
29
  function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, own) {
29
30
  if (!ambientSecretAdmit(e, currentProject))
30
31
  return false;
@@ -34,7 +35,8 @@ function ambientAdmitEntry(e, currentProject, includeCrossProject, exactScope, o
34
35
  return true;
35
36
  return classifyOriginProject(e.origin_project, currentProject) !== 'cross-project';
36
37
  }
37
- /** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only inside its owning project. */
38
+ /** The secret half of the ambient policy alone, for callers with their own scope rule: a flagged row is admitted only
39
+ * inside its owning project. */
38
40
  export function ambientSecretAdmit(e, currentProject) {
39
41
  if (!detectSecret(e).flagged)
40
42
  return true;
@@ -45,16 +47,18 @@ export function ambientSecretAdmit(e, currentProject) {
45
47
  }
46
48
  /** Tokens a context block may use when the caller sets no budget; the hook command and the CLI default match it. */
47
49
  export const DEFAULT_CONTEXT_BUDGET = 1500;
50
+ // The plan's query when the caller gave none: context then ranks by strength instead of searching.
51
+ export const NO_QUERY = '*';
48
52
  /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
49
53
  const CONTEXT_CANDIDATE_CAP = 2000;
50
54
  /** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
51
55
  function sourceOf(store) {
52
- return { store, reads: requireGroup(store, 'contextReads') };
56
+ return { store, reads: store.contextReads };
53
57
  }
54
58
  // The pinned-only branch needs pins and recent-N candidates, not the corpus.
55
59
  async function loadAmbientEntries(source, tenantId, options) {
56
60
  const { pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop } = options;
57
- const ownTenant = (e) => e.tenantId === tenantId;
61
+ const ownTenant = (e) => e.tenant_id === tenantId;
58
62
  if (!pinnedOnly) {
59
63
  const rows = 'query' in window
60
64
  ? await source.store.searchRecallEntries(window.query, {
@@ -79,30 +83,37 @@ async function loadAmbientEntries(source, tenantId, options) {
79
83
  onQualityDrop?.(e);
80
84
  return false;
81
85
  };
82
- const loaded = await source.reads.ambientCandidates(tenantId, { recentNeeded: recent.needed, admit: admitAmbient, recall, origins: recent.origins });
83
- // Pins and recent rows reach core only through the store's own call to admit, so core applies it again with the tenant.
86
+ const loaded = await source.reads.ambientCandidates(tenantId, {
87
+ recentNeeded: recent.needed,
88
+ admit: admitAmbient,
89
+ recall,
90
+ origins: recent.origins,
91
+ });
92
+ // Pins and recent rows reach core only through the store's own
93
+ // call to admit, so core applies it again with the tenant.
84
94
  const entries = loaded.entries.filter((e) => ownTenant(e) && recheck(e));
85
95
  return loaded.recall ? { entries, recall: loaded.recall.filter(ownTenant) } : { entries };
86
96
  }
87
- /** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit row for non-pinned, non-'*' queries.
88
- * Returns an empty result when there are no memories, snapshot, handoff or recent events. CLI rendering stays in `cli.ts`. */
97
+ /** Assembles a budget-bounded, tenant-scoped context bundle; mutates `last_retrieval_ids` and emits a 'recall' audit
98
+ * row for non-pinned, non-'*' queries. Returns an empty result when there are no memories, snapshot, handoff or recent
99
+ * events. CLI rendering stays in `cli.ts`. */
89
100
  export async function getContext(ctx, opts = {}) {
90
101
  const budget = opts.budget ?? DEFAULT_CONTEXT_BUDGET;
91
102
  assertScopeRequestAllowed(ctx.actor, opts.exactScope);
92
103
  if (budget <= 0) {
93
104
  return { entries: [], tokens: 0 };
94
105
  }
95
- const plan = planContext(ctx, opts, sourceOf(storeFor(ctx)));
106
+ const plan = planContext(ctx, opts, sourceOf(ctx.store));
96
107
  const sections = await loadTaskSections(ctx, opts, plan, openBlockBudget(plan, opts, budget));
97
108
  const admission = ambientAdmission(opts, plan, sections.shownHandoff);
98
109
  const pools = await loadPools(ctx, plan, admission, promptRecallRequest(opts, plan));
99
110
  const noSections = !sections.shownSnapshot && !sections.shownHandoff && sections.shownEvents.length === 0;
100
- if (!plan.promptRecallPending && pools.local.entries.length === 0 && pools.global.entries.length === 0 && noSections) {
111
+ if (nothingToInject(plan, pools, noSections)) {
101
112
  return { entries: [], tokens: 0 };
102
113
  }
103
114
  const picked = plan.pinnedOnly
104
115
  ? selectPinned(opts, plan, sections.left, pools, admission)
105
- : plan.query === '*'
116
+ : plan.query === NO_QUERY
106
117
  ? selectStrongest(plan, sections.left, pools)
107
118
  : await selectBySearch(ctx, plan, sections.left, pools, admission);
108
119
  if (picked === null) {
@@ -129,8 +140,12 @@ export async function getContext(ctx, opts = {}) {
129
140
  ambientState: recorded.ambientState,
130
141
  };
131
142
  }
143
+ function nothingToInject(plan, pools, noSections) {
144
+ return (!plan.promptRecallPending && pools.local.entries.length === 0 && pools.global.entries.length === 0 && noSections);
145
+ }
132
146
  const isolationWarned = new Set();
133
- /** A laptop config copied onto a team store must not open every member's rows to every prompt, so the flag loses there. */
147
+ /** A laptop config copied onto a team store must not open every
148
+ * member's rows to every prompt, so the flag loses there. */
134
149
  function warnIsolationIgnored(hippoRoot) {
135
150
  if (isolationWarned.has(hippoRoot))
136
151
  return;
@@ -139,35 +154,55 @@ function warnIsolationIgnored(hippoRoot) {
139
154
  }
140
155
  /** Which stores this read can draw on, and what kind the primary one is. */
141
156
  function storesInReach(ctx, opts, local) {
142
- const other = local.store.kind !== 'sqlite' ? local.store : undefined;
143
- // Global memories do not establish a project boundary for task state.
144
- const hasLocal = other !== undefined || isInitialized(ctx.hippoRoot);
145
- const globalRoot = getGlobalRoot();
157
+ const other = hasGroup(local.store, 'localFiles') ? undefined : local.store;
158
+ // No reach means an integrator's own store: one project, no global store beside it.
159
+ const reach = ctx.reach ?? { hasLocal: true, isGlobal: false, shared: isSharedStore(ctx.hippoRoot) };
146
160
  // The store's own flag counts too, so no surface can read a shared store as its owner.
147
- const sharedStore = opts.sharedStore === true || isSharedStore(ctx.hippoRoot);
161
+ const sharedStore = opts.sharedStore === true || reach.shared;
148
162
  // A store serving many people is not its operator's, so the operator's own global store stays out.
149
- const hasGlobal = !sharedStore && other === undefined && isInitialized(globalRoot);
150
- const primaryIsGlobal = isGlobalStoreRoot(ctx.hippoRoot);
151
- return { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal };
163
+ const hasGlobal = !sharedStore && other === undefined && reach.global !== undefined;
164
+ // Global memories do not establish a project boundary for task state.
165
+ return {
166
+ other,
167
+ hasLocal: other !== undefined || reach.hasLocal,
168
+ globalRoot: reach.global?.root ?? '',
169
+ sharedStore,
170
+ hasGlobal,
171
+ primaryIsGlobal: reach.isGlobal,
172
+ };
173
+ }
174
+ /** The operator's global store, which planContext proved present before it set hasGlobal. */
175
+ function globalSource(ctx) {
176
+ const global = ctx.reach?.global;
177
+ if (global === undefined)
178
+ throw new Error('hasGlobal without a global store in reach');
179
+ return sourceOf(global.store);
152
180
  }
153
181
  /** Prices one entry against the budget: the caller's cost model when it gave one, else a token estimate. */
154
182
  function entryPricer(cost, currentProject) {
155
183
  return (entry, isGlobal, promptRecall) => cost
156
- ? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
184
+ ? cost.entry({
185
+ entry,
186
+ isGlobal,
187
+ promptRecall,
188
+ origin: entry.origin_project ?? null,
189
+ category: classifyOriginProject(entry.origin_project, currentProject),
190
+ })
157
191
  : estimateTokens(entry.content);
158
192
  }
159
193
  function planContext(ctx, opts, local) {
160
194
  const pinnedOnly = opts.pinnedOnly === true;
161
195
  const { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal } = storesInReach(ctx, opts, local);
162
- const query = (opts.q ?? '').trim() || '*';
196
+ const query = (opts.q ?? '').trim() || NO_QUERY;
163
197
  // opts.scope is only the tag boost, opts.exactScope the envelope request; other-project memories are
164
198
  // excluded unless the caller asks for them (crossProject) or isolation is disabled.
165
- const config = loadConfig(ctx.hippoRoot);
199
+ const config = configOf(ctx);
166
200
  const isolationEnabled = config.contextProjectIsolation !== false;
167
201
  const currentProject = opts.currentProject ?? resolveProjectIdentity(process.cwd());
168
202
  // A caller with no project reads every row as its own; on a shared store those rows are other people's.
169
- if (sharedStore && projectId(currentProject).trim() === '')
170
- throw new BadRequestError('a shared store needs the caller\'s project');
203
+ if (sharedStore && projectId(currentProject).trim() === '') {
204
+ throw new BadRequestError("a shared store needs the caller's project");
205
+ }
171
206
  if (sharedStore && !isolationEnabled)
172
207
  warnIsolationIgnored(ctx.hippoRoot);
173
208
  const includeCrossProject = opts.crossProject === true || (!isolationEnabled && !sharedStore);
@@ -208,14 +243,22 @@ function promptRecallRequest(opts, plan) {
208
243
  ? Array.from(promptTokens(opts.prompt ?? ''))
209
244
  : [];
210
245
  return promptRecallTerms.length > 0
211
- ? { terms: promptRecallTerms, limit: Math.floor(finiteOr(pinnedInject.promptRecallCandidates, 100, 1)), ownScope: plan.ownScope }
246
+ ? {
247
+ terms: promptRecallTerms,
248
+ limit: Math.floor(finiteOr(pinnedInject.promptRecallCandidates, 100, 1)),
249
+ ownScope: plan.ownScope,
250
+ }
212
251
  : undefined;
213
252
  }
214
253
  /** Reports the block's facts to the observer and returns the budget left after the fixed headers. */
215
254
  function openBlockBudget(plan, opts, budget) {
216
255
  const { config, cost, obs, pinnedOnly, promptRecallPending } = plan;
217
256
  const blockBudget = pinnedOnly && opts.budget === undefined ? config.pinnedInject.budget : budget;
218
- obs?.facts({ projectName: projectId(plan.currentProject), budgetTokens: blockBudget, promptRecall: promptRecallPending });
257
+ obs?.facts({
258
+ projectName: projectId(plan.currentProject),
259
+ budgetTokens: blockBudget,
260
+ promptRecall: promptRecallPending,
261
+ });
219
262
  if (pinnedOnly && !config.pinnedInject.enabled)
220
263
  obs?.disabled();
221
264
  if (!pinnedOnly)
@@ -234,7 +277,8 @@ async function loadRawTaskState(ctx, opts, plan) {
234
277
  if (!plan.hasLocalTaskState)
235
278
  return NO_TASK_STATE;
236
279
  const { store, reads } = plan.local;
237
- // On a shared store task state is one person's, keyed by owner and project so it follows them into their next session.
280
+ // On a shared store task state is one person's, keyed by owner
281
+ // and project so it follows them into their next session.
238
282
  const key = plan.sharedStore
239
283
  ? { owner: ownerOrSubject(ctx.actor), project: projectNames(plan.currentProject) }
240
284
  : null;
@@ -245,18 +289,17 @@ async function loadRawTaskState(ctx, opts, plan) {
245
289
  if (snapshot?.session_id)
246
290
  return { snapshot, handoff: block.sessionHandoff, events: block.recentSessionEvents };
247
291
  // An unfinished handoff's scope is admitted in the read, so a newer denied row can't hide an older eligible one.
248
- return { snapshot, handoff: await reads.unfinishedHandoff(ctx.tenantId, SNAPSHOT_AMBIENT_MAX_AGE_MS, key), events: [] };
292
+ return {
293
+ snapshot,
294
+ handoff: await reads.unfinishedHandoff(ctx.tenantId, SNAPSHOT_AMBIENT_MAX_AGE_MS, key),
295
+ events: [],
296
+ };
249
297
  }
250
- // Sections print ahead of the memories, so they are paid first; one that does not fit is dropped, as an oversize entry is.
298
+ // Sections print ahead of the memories, so they are paid first;
299
+ // one that does not fit is dropped, as an oversize entry is.
251
300
  async function loadTaskSections(ctx, opts, plan, startLeft) {
252
301
  const { exactScope, ownScope, cost } = plan;
253
- let left = startLeft;
254
- const pays = (tokens) => {
255
- if (tokens > left)
256
- return false;
257
- left -= tokens;
258
- return true;
259
- };
302
+ const { pays, left } = tokenPurse(startLeft);
260
303
  const rowScope = (r) => r?.scope ?? null;
261
304
  const raw = await loadRawTaskState(ctx, opts, plan);
262
305
  // The same envelope rule ambientAdmitEntry applies to memory rows.
@@ -266,15 +309,20 @@ async function loadTaskSections(ctx, opts, plan, startLeft) {
266
309
  const shownSnapshot = activeSnapshot && (!cost || pays(cost.snapshot(activeSnapshot))) ? activeSnapshot : null;
267
310
  const shownHandoff = sessionHandoff && (!cost || pays(cost.handoff(sessionHandoff))) ? sessionHandoff : null;
268
311
  const shownEvents = recentSessionEvents.length > 0 && (!cost || pays(cost.trail(recentSessionEvents))) ? recentSessionEvents : [];
269
- plan.obs?.sections(Number(shownSnapshot !== null) + Number(shownHandoff !== null) + Number(shownEvents.length > 0), Number(activeSnapshot !== shownSnapshot) + Number(sessionHandoff !== shownHandoff) + Number(recentSessionEvents.length !== shownEvents.length));
270
- return { activeSnapshot, shownSnapshot, shownHandoff, shownEvents, left };
312
+ plan.obs?.sections(Number(shownSnapshot !== null) + Number(shownHandoff !== null) + Number(shownEvents.length > 0), Number(activeSnapshot !== shownSnapshot) +
313
+ Number(sessionHandoff !== shownHandoff) +
314
+ Number(recentSessionEvents.length !== shownEvents.length));
315
+ return { activeSnapshot, shownSnapshot, shownHandoff, shownEvents, left: left() };
271
316
  }
272
317
  function ambientAdmission(opts, plan, shownHandoff) {
273
318
  const transcriptHandoffSession = shownHandoff?.evidence?.derivedFrom === 'transcript' ? shownHandoff.sessionId : null;
274
319
  const ambientAdmit = (e) => {
275
320
  // A printed handoff already carries the session's closing message, which its digest would print a second time.
276
- if (transcriptHandoffSession !== null && e.source_session_id === transcriptHandoffSession && isSessionDigestRow(e))
321
+ if (transcriptHandoffSession !== null &&
322
+ e.source_session_id === transcriptHandoffSession &&
323
+ isSessionDigestRow(e)) {
277
324
  return false;
325
+ }
278
326
  return ambientAdmitEntry(e, plan.currentProject, plan.includeCrossProject, plan.exactScope, plan.ownScope);
279
327
  };
280
328
  const ownSessionId = opts.currentSessionId || '';
@@ -282,13 +330,15 @@ function ambientAdmission(opts, plan, shownHandoff) {
282
330
  const isOwnCompactionItem = (e) => ownSessionId !== '' &&
283
331
  e.source_session_id === ownSessionId &&
284
332
  e.tags.includes(COMPACTION_MEMORY_TAG);
285
- // Superseded rows never inject; which rows reach ambientAdmitEntry matters because it regex-scans content for secrets.
333
+ // Superseded rows never inject; which rows reach ambientAdmitEntry
334
+ // matters because it regex-scans content for secrets.
286
335
  const admit = (e) => !e.superseded_by && !isOwnCompactionItem(e) && ambientAdmit(e);
287
336
  // The two-store search has always ranked a session's own compaction items; only the local search drops them.
288
337
  const bothStoresAdmit = (e) => !e.superseded_by && ambientAdmit(e);
289
338
  return { ambientAdmit, admit, bothStoresAdmit };
290
339
  }
291
- /** Origins the recent backfill may read past its first window; on a shared store, only the caller's own project rows. */
340
+ /** Origins the recent backfill may read past its first window;
341
+ * on a shared store, only the caller's own project rows. */
292
342
  function recentOrigins(plan) {
293
343
  if (plan.sharedStore)
294
344
  return { names: projectNames(plan.currentProject).filter((n) => n !== ''), userGlobal: false };
@@ -297,7 +347,7 @@ function recentOrigins(plan) {
297
347
  async function loadPools(ctx, plan, admission, recallRequest) {
298
348
  const { obs, pinnedOnly, primaryIsGlobal, hasGlobal, exactScope, ownScope } = plan;
299
349
  const recent = { needed: plan.includeRecent, origins: recentOrigins(plan) };
300
- const searches = plan.query !== '*' && !pinnedOnly;
350
+ const searches = plan.query !== NO_QUERY && !pinnedOnly;
301
351
  const searchesBoth = searches && hasGlobal && !primaryIsGlobal;
302
352
  const poolAdmit = searchesBoth ? admission.bothStoresAdmit : admission.admit;
303
353
  const loadAdmit = obs ? obs.watchAdmit(poolAdmit) : poolAdmit;
@@ -318,7 +368,10 @@ async function loadPools(ctx, plan, admission, recallRequest) {
318
368
  ? await loadAmbientEntries(plan.local, ctx.tenantId, { ...read, onQualityDrop: qualityDrop(primaryIsGlobal) })
319
369
  : { entries: [] };
320
370
  const global = hasGlobal && !primaryIsGlobal
321
- ? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId, { ...read, onQualityDrop: qualityDrop(true) })
371
+ ? await loadAmbientEntries(globalSource(ctx), ctx.tenantId, {
372
+ ...read,
373
+ onQualityDrop: qualityDrop(true),
374
+ })
322
375
  : { entries: [] };
323
376
  return { local, global };
324
377
  }
@@ -327,7 +380,7 @@ function finalizeSelection(picked, plan) {
327
380
  const { obs } = plan;
328
381
  // Ranking reports nothing itself, so its results are offered here and the cuts below can name what they drop.
329
382
  if (!plan.pinnedOnly && obs) {
330
- const pool = plan.query === '*' ? 'strength' : 'search';
383
+ const pool = plan.query === NO_QUERY ? 'strength' : 'search';
331
384
  obs.offer(picked.filter((r) => r.isGlobal !== true).map((r) => r.entry), false, pool);
332
385
  obs.offer(picked.filter((r) => r.isGlobal === true).map((r) => r.entry), true, pool);
333
386
  }
@@ -337,11 +390,13 @@ function finalizeSelection(picked, plan) {
337
390
  obs?.dropMissing(selected.map((r) => r.entry), cut.map((r) => r.entry), 'limit', 'limit');
338
391
  selected = cut;
339
392
  }
340
- const heldDropped = dropHeldCopies(selected, (r) => r.entry); // after the last cut, so a merged row that was cut hides nothing
393
+ // After the last cut, so a merged row that was cut hides nothing.
394
+ const heldDropped = dropHeldCopies(selected, (r) => r.entry);
341
395
  obs?.dropMissing(selected.map((r) => r.entry), heldDropped.map((r) => r.entry), 'limit', 'duplicate');
342
396
  selected = heldDropped;
343
397
  const tokens = selected.reduce((sum, r) => sum + r.tokens, 0);
344
- // Every returned entry carries its origin and how it relates to the active project, so renderers can mark cross-project rows.
398
+ // Every returned entry carries its origin and how it relates to
399
+ // the active project, so renderers can mark cross-project rows.
345
400
  selected = selected.map((r) => ({
346
401
  ...r,
347
402
  origin: r.entry.origin_project ?? null,
@@ -363,11 +418,11 @@ async function traceEmptyContext(ctx, opts, plan) {
363
418
  };
364
419
  // The empty reply is already decided, so a lost trace is logged and the call still answers.
365
420
  try {
366
- await onStore(ctx, (port) => port.finishRecall({ goalLog: [], audit: [], trace }));
421
+ await ctx.store.finishRecall({ goalLog: [], audit: [], trace });
367
422
  }
368
423
  catch (error) {
369
424
  rethrowIfSqliteBlocked(error);
370
- log.error(`recall trace write failed: ${errorMessage(error)}`);
425
+ log.error(`recall trace write failed: ${errorMessage(error)}`, errorFields(error));
371
426
  }
372
427
  }
373
428
  /** Strengthens and marks the returned rows, then writes the trace and index together. */
@@ -387,11 +442,13 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
387
442
  })),
388
443
  };
389
444
  const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
390
- // hippo.db keeps the ids as its last recall, which feeds only outcomeForLastRecall, and it alone reads a second root.
391
- await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), (traceId) => {
392
- plan.obs?.traced(traceId);
393
- return port.bumpRecallStats(selected.length);
394
- }));
445
+ // The last recall feeds only outcomeForLastRecall, so a store that keeps none still finishes the recall without one.
446
+ const store = ctx.store;
447
+ const traceId = store.lastRecall
448
+ ? await store.lastRecall.finishRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined)
449
+ : await store.finishRecall(writes).then(() => null);
450
+ plan.obs?.traced(traceId);
451
+ await store.bumpRecallStats(selected.length);
395
452
  // Replace selectedItems entries with markRetrieved-updated copies so
396
453
  // the returned ContextResult reflects post-recall state.
397
454
  const items = selected.map((s) => ({
@@ -411,7 +468,7 @@ async function readAmbientState(ctx, plan) {
411
468
  };
412
469
  const sources = [
413
470
  ...(plan.hasLocal ? [plan.local.reads] : []),
414
- ...(plan.hasGlobal && !plan.primaryIsGlobal ? [sourceOf(sqliteStore(plan.globalRoot)).reads] : []),
471
+ ...(plan.hasGlobal && !plan.primaryIsGlobal ? [globalSource(ctx).reads] : []),
415
472
  ];
416
473
  const tallies = [];
417
474
  for (const reads of sources)
@@ -1,47 +1,50 @@
1
1
  import type { HandoffOutcome, SessionHandoff } from '../core/handoff.js';
2
2
  import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
3
- import { appendSessionEvent, listSessionEvents, saveActiveTaskSnapshot } from '../store/sessions.js';
4
- import { wmClear, wmFlush, wmPush, wmRead, type WorkingMemoryItem } from '../store/working-memory.js';
5
- import type { Context } from './types.js';
3
+ import type { SessionEventInput, SnapshotInput } from '../store/sessions.js';
4
+ import type { Sessions } from '../store/index.js';
5
+ import type { WorkingMemoryItem } from '../store/working-memory.js';
6
+ import type { ContextWith } from './types.js';
7
+ type Ctx = ContextWith<'sessions'>;
6
8
  /** What a snapshot save carries. */
7
- export type SnapshotSaveInput = Parameters<typeof saveActiveTaskSnapshot>[2];
9
+ export type SnapshotSaveInput = SnapshotInput;
8
10
  /** What a session event append carries. */
9
- export type SessionEventAppendInput = Parameters<typeof appendSessionEvent>[2];
11
+ export type SessionEventAppendInput = SessionEventInput;
10
12
  /** What a session event listing filters on. */
11
- export type SessionEventListOpts = NonNullable<Parameters<typeof listSessionEvents>[2]>;
13
+ export type SessionEventListOpts = Parameters<Sessions['listEvents']>[1];
12
14
  /** Save the caller's active task snapshot. */
13
- export declare function snapshotSave(ctx: Context, input: SnapshotSaveInput): TaskSnapshot;
15
+ export declare function snapshotSave(ctx: Ctx, input: SnapshotSaveInput): Promise<TaskSnapshot>;
14
16
  /** Clear the caller's active task snapshot; false when there was none. */
15
- export declare function snapshotClear(ctx: Context, status: string): boolean;
17
+ export declare function snapshotClear(ctx: Ctx, status: string): Promise<boolean>;
16
18
  /** The caller's active task snapshot, or null. */
17
- export declare function snapshotLoad(ctx: Context): TaskSnapshot | null;
19
+ export declare function snapshotLoad(ctx: Ctx): Promise<TaskSnapshot | null>;
18
20
  /** Append a session event in the caller's tenant. */
19
- export declare function sessionEventAppend(ctx: Context, event: SessionEventAppendInput): SessionEvent;
21
+ export declare function sessionEventAppend(ctx: Ctx, event: SessionEventAppendInput): Promise<SessionEvent>;
20
22
  /** List the caller's session events. */
21
- export declare function sessionEventList(ctx: Context, opts: SessionEventListOpts): SessionEvent[];
23
+ export declare function sessionEventList(ctx: Ctx, opts: SessionEventListOpts): Promise<SessionEvent[]>;
22
24
  export interface LatestContinuity {
23
25
  snapshot: TaskSnapshot | null;
24
26
  events: SessionEvent[];
25
27
  }
26
28
  /** The active snapshot plus recent events for `sessionId`, falling back to the snapshot's own session. */
27
- export declare function continuityLatest(ctx: Context, opts: {
29
+ export declare function continuityLatest(ctx: Ctx, opts: {
28
30
  sessionId?: string;
29
31
  limit: number;
30
- }): LatestContinuity;
32
+ }): Promise<LatestContinuity>;
31
33
  /** Stamp the outcome on the caller's handoff for `sessionId`; returns the rows stamped. */
32
- export declare function handoffStampOutcome(ctx: Context, sessionId: string, outcome: HandoffOutcome): number;
34
+ export declare function handoffStampOutcome(ctx: Ctx, sessionId: string, outcome: HandoffOutcome): Promise<number>;
33
35
  /** Save a session handoff in the caller's tenant. */
34
- export declare function handoffSave(ctx: Context, handoff: Omit<SessionHandoff, 'updatedAt'>): SessionHandoff;
36
+ export declare function handoffSave(ctx: Ctx, handoff: Omit<SessionHandoff, 'updatedAt'>): Promise<SessionHandoff>;
35
37
  /** The caller's latest handoff, optionally for one session. */
36
- export declare function handoffLatest(ctx: Context, sessionId?: string): SessionHandoff | null;
38
+ export declare function handoffLatest(ctx: Ctx, sessionId?: string): Promise<SessionHandoff | null>;
37
39
  /** The caller's handoff by id, or null. */
38
- export declare function handoffById(ctx: Context, id: number): SessionHandoff | null;
40
+ export declare function handoffById(ctx: Ctx, id: number): Promise<SessionHandoff | null>;
39
41
  /** Push a working memory entry in the caller's tenant; returns its row id. */
40
- export declare function workingMemoryPush(ctx: Context, opts: Omit<Parameters<typeof wmPush>[1], 'tenantId'>): number;
42
+ export declare function workingMemoryPush(ctx: Ctx, opts: Parameters<Sessions['pushWorkingMemory']>[1]): Promise<number>;
41
43
  /** The caller's working memory entries, most important first. */
42
- export declare function workingMemoryRead(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmRead>[1]>, 'tenantId'>): WorkingMemoryItem[];
44
+ export declare function workingMemoryRead(ctx: Ctx, opts: Parameters<Sessions['readWorkingMemory']>[1]): Promise<WorkingMemoryItem[]>;
43
45
  /** Delete the caller's working memory entries; returns the count. */
44
- export declare function workingMemoryClear(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmClear>[1]>, 'tenantId'>): number;
46
+ export declare function workingMemoryClear(ctx: Ctx, opts: Parameters<Sessions['clearWorkingMemory']>[1]): Promise<number>;
45
47
  /** Flush the caller's working memory at session end; returns the count. */
46
- export declare function workingMemoryFlush(ctx: Context, opts: Omit<NonNullable<Parameters<typeof wmFlush>[1]>, 'tenantId'>): number;
48
+ export declare function workingMemoryFlush(ctx: Ctx, opts: Parameters<Sessions['clearWorkingMemory']>[1]): Promise<number>;
49
+ export {};
47
50
  //# sourceMappingURL=continuity.d.ts.map
@@ -1,66 +1,64 @@
1
1
  // Where-you-left-off ops: task snapshot, session events, handoffs and working memory.
2
- import { appendSessionEvent, clearActiveTaskSnapshot, listSessionEvents, loadActiveTaskSnapshot, saveActiveTaskSnapshot, } from '../store/sessions.js';
3
- import { loadHandoffById, loadLatestHandoff, saveSessionHandoff, stampHandoffOutcome } from '../store/handoffs.js';
4
- import { wmClear, wmFlush, wmPush, wmRead } from '../store/working-memory.js';
5
2
  /** Save the caller's active task snapshot. */
6
3
  export function snapshotSave(ctx, input) {
7
- return saveActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, input);
4
+ return ctx.store.sessions.saveSnapshot(ctx.tenantId, input, null);
8
5
  }
9
6
  /** Clear the caller's active task snapshot; false when there was none. */
10
7
  export function snapshotClear(ctx, status) {
11
- return clearActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, status);
8
+ return ctx.store.sessions.clearSnapshot(ctx.tenantId, status);
12
9
  }
13
10
  /** The caller's active task snapshot, or null. */
14
11
  export function snapshotLoad(ctx) {
15
- return loadActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId);
12
+ return ctx.store.sessions.loadSnapshot(ctx.tenantId, null);
16
13
  }
17
14
  /** Append a session event in the caller's tenant. */
18
15
  export function sessionEventAppend(ctx, event) {
19
- return appendSessionEvent(ctx.hippoRoot, ctx.tenantId, event);
16
+ return ctx.store.sessions.appendEvent(ctx.tenantId, event);
20
17
  }
21
18
  /** List the caller's session events. */
22
19
  export function sessionEventList(ctx, opts) {
23
- return listSessionEvents(ctx.hippoRoot, ctx.tenantId, opts);
20
+ return ctx.store.sessions.listEvents(ctx.tenantId, opts);
24
21
  }
25
22
  /** The active snapshot plus recent events for `sessionId`, falling back to the snapshot's own session. */
26
- export function continuityLatest(ctx, opts) {
27
- const snapshot = loadActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId);
28
- const events = listSessionEvents(ctx.hippoRoot, ctx.tenantId, {
29
- session_id: opts.sessionId || snapshot?.session_id || undefined,
23
+ export async function continuityLatest(ctx, opts) {
24
+ const { sessions } = ctx.store;
25
+ const snapshot = await sessions.loadSnapshot(ctx.tenantId, null);
26
+ const events = await sessions.listEvents(ctx.tenantId, {
27
+ sessionId: opts.sessionId || snapshot?.session_id || undefined,
30
28
  limit: opts.limit,
31
29
  });
32
30
  return { snapshot, events };
33
31
  }
34
32
  /** Stamp the outcome on the caller's handoff for `sessionId`; returns the rows stamped. */
35
33
  export function handoffStampOutcome(ctx, sessionId, outcome) {
36
- return stampHandoffOutcome(ctx.hippoRoot, ctx.tenantId, sessionId, outcome);
34
+ return ctx.store.sessions.stampHandoffOutcome(ctx.tenantId, sessionId, outcome);
37
35
  }
38
36
  /** Save a session handoff in the caller's tenant. */
39
37
  export function handoffSave(ctx, handoff) {
40
- return saveSessionHandoff(ctx.hippoRoot, ctx.tenantId, handoff);
38
+ return ctx.store.sessions.saveHandoff(ctx.tenantId, handoff, null);
41
39
  }
42
40
  /** The caller's latest handoff, optionally for one session. */
43
41
  export function handoffLatest(ctx, sessionId) {
44
- return loadLatestHandoff(ctx.hippoRoot, ctx.tenantId, sessionId);
42
+ return ctx.store.sessions.latestHandoff(ctx.tenantId, sessionId ?? null, {}, null);
45
43
  }
46
44
  /** The caller's handoff by id, or null. */
47
45
  export function handoffById(ctx, id) {
48
- return loadHandoffById(ctx.hippoRoot, ctx.tenantId, id);
46
+ return ctx.store.sessions.handoffById(ctx.tenantId, id);
49
47
  }
50
48
  /** Push a working memory entry in the caller's tenant; returns its row id. */
51
49
  export function workingMemoryPush(ctx, opts) {
52
- return wmPush(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
50
+ return ctx.store.sessions.pushWorkingMemory(ctx.tenantId, opts);
53
51
  }
54
52
  /** The caller's working memory entries, most important first. */
55
53
  export function workingMemoryRead(ctx, opts) {
56
- return wmRead(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
54
+ return ctx.store.sessions.readWorkingMemory(ctx.tenantId, opts);
57
55
  }
58
56
  /** Delete the caller's working memory entries; returns the count. */
59
57
  export function workingMemoryClear(ctx, opts) {
60
- return wmClear(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
58
+ return ctx.store.sessions.clearWorkingMemory(ctx.tenantId, opts);
61
59
  }
62
60
  /** Flush the caller's working memory at session end; returns the count. */
63
61
  export function workingMemoryFlush(ctx, opts) {
64
- return wmFlush(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
62
+ return ctx.store.sessions.clearWorkingMemory(ctx.tenantId, opts);
65
63
  }
66
64
  //# sourceMappingURL=continuity.js.map
@@ -18,7 +18,9 @@ export interface CorrectionLatencyReport {
18
18
  maxMs: number | null;
19
19
  pairs: CorrectionPair[];
20
20
  }
21
- /** Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else `new.created`).
21
+ /**
22
+ * Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else
23
+ * `new.created`).
22
24
  * Manual supersedes have latency 0 and are excluded from percentiles so they do not mask real lag. */
23
25
  export declare function buildCorrectionLatency(entries: MemoryEntry[]): CorrectionLatencyReport;
24
26
  //# sourceMappingURL=correction-latency.d.ts.map
@@ -10,7 +10,9 @@ function percentile(sorted, q) {
10
10
  return sorted[lo];
11
11
  return sorted[lo] + (sorted[hi] - sorted[lo]) * (idx - lo);
12
12
  }
13
- /** Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else `new.created`).
13
+ /**
14
+ * Correction latency = `new.created` minus the observation time (the extracted-from row's `created`, else
15
+ * `new.created`).
14
16
  * Manual supersedes have latency 0 and are excluded from percentiles so they do not mask real lag. */
15
17
  export function buildCorrectionLatency(entries) {
16
18
  const byId = new Map();
@@ -3,6 +3,9 @@ export interface ApiErrorReply {
3
3
  status: number;
4
4
  message: string;
5
5
  }
6
- /** Maps by class so rewording a message never moves a status; an untyped error is a 500 whose text stays in the server log. */
6
+ /**
7
+ * Maps by class so rewording a message never moves a status; an untyped error is a 500 whose text stays in the server
8
+ * log.
9
+ */
7
10
  export declare function mapApiError<E>(err: E): ApiErrorReply;
8
11
  //# sourceMappingURL=error-reply.d.ts.map
@@ -1,9 +1,18 @@
1
- // The one error-to-reply map the HTTP server and the MCP transports share, so a status never depends on which front end caught the error.
1
+ // The one error-to-reply map the HTTP server and the MCP transports share, so a status never depends on which front end
2
+ // caught the error.
2
3
  import { ApiError } from '../core/api-errors.js';
3
- import { BodyTimeoutError, BodyTooLargeError, HttpError, INTERNAL_ERROR_MESSAGE, STORE_NOT_PORTED_MESSAGE } from '../util/http-util.js';
4
+ import { BodyTimeoutError, BodyTooLargeError, HttpError, INTERNAL_ERROR_MESSAGE, STORE_NOT_PORTED_MESSAGE, } from '../util/http-util.js';
4
5
  import { SqliteBlockedError } from '../util/sqlite-blocked.js';
5
- /** Maps by class so rewording a message never moves a status; an untyped error is a 500 whose text stays in the server log. */
6
+ import { STORE_BUSY_MESSAGE } from '../store/port.js';
7
+ import { isStoreBusy } from './busy.js';
8
+ /**
9
+ * Maps by class so rewording a message never moves a status; an untyped error is a 500 whose text stays in the server
10
+ * log.
11
+ */
6
12
  export function mapApiError(err) {
13
+ // A held lock is a retryable 503 in every store, so the surfaces need not know SQLite's busy codes.
14
+ if (isStoreBusy(err))
15
+ return { status: 503, message: STORE_BUSY_MESSAGE };
7
16
  // An add-on can build an HttpError from any number, and writeHead throws on one outside 100-999.
8
17
  if (err instanceof HttpError && !(Number.isInteger(err.status) && err.status >= 100 && err.status <= 999)) {
9
18
  return { status: 500, message: INTERNAL_ERROR_MESSAGE };