hippo-memory 2.0.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 (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -1,13 +1,14 @@
1
1
  import { generateId } from '../core/memory.js';
2
2
  import { withWriteScope, withWriteScopeOr } from '../db/index.js';
3
- import { rowToSessionHandoff, isHandoffOutcome } from '../core/handoff.js';
3
+ import { rowToSessionHandoff, isHandoffOutcome, } from '../core/handoff.js';
4
4
  import { CARD_LEASE_MS, assertCardTransition } from '../core/card.js';
5
5
  import { assertTenantId } from './tenant.js';
6
6
  import { onHandle, openStore } from './open.js';
7
7
  import { chunked } from '../util/chunked.js';
8
8
  import { HANDOFF_COLUMNS } from './handoffs.js';
9
9
  import { placeholders } from '../util/sql.js';
10
- const CARD_COLUMNS = 'id, title, status, assignee_runtime, repo, contract, budget, lease_until, heartbeat_at, created_at, updated_at, tenant_id, scope';
10
+ const CARD_COLUMNS = 'id, title, status, assignee_runtime, repo, contract, budget, lease_until, heartbeat_at, created_at, updated_at, ' +
11
+ 'tenant_id, scope';
11
12
  function rowToCard(row) {
12
13
  return {
13
14
  id: row.id,
@@ -25,7 +26,7 @@ function rowToCard(row) {
25
26
  scope: row.scope,
26
27
  };
27
28
  }
28
- function loadCardRow(db, tenantId, id) {
29
+ export function loadCardRow(db, tenantId, id) {
29
30
  // SAFETY: row's shape matches CARD_COLUMNS; status only ever holds a CardStatus value.
30
31
  const row = db.prepare(`SELECT ${CARD_COLUMNS} FROM cards WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
31
32
  return row ? rowToCard(row) : null;
@@ -46,10 +47,12 @@ function rowToCardComment(row) {
46
47
  }
47
48
  function insertCardComment(db, tenantId, cardId, author, body) {
48
49
  const now = new Date().toISOString();
49
- const result = db.prepare(`
50
+ const result = db
51
+ .prepare(`
50
52
  INSERT INTO card_comments (card_id, author, body, created_at, tenant_id)
51
53
  SELECT ?, ?, ?, ?, ? WHERE EXISTS (SELECT 1 FROM cards WHERE id = ? AND tenant_id = ?)
52
- `).run(cardId, author, body, now, tenantId, cardId, tenantId);
54
+ `)
55
+ .run(cardId, author, body, now, tenantId, cardId, tenantId);
53
56
  if (Number(result.changes ?? 0) === 0) {
54
57
  throw new Error(`unknown card id: ${cardId}`);
55
58
  }
@@ -67,7 +70,9 @@ function assertRunId(runId) {
67
70
  // A second run that has not ended means a corrupt store; throw rather than guess which run the caller means.
68
71
  function isLiveRun(db, tenantId, cardId, runId) {
69
72
  // SAFETY: rows' shape matches the single `id` column named in the SELECT below.
70
- const rows = db.prepare(`SELECT id FROM card_runs WHERE tenant_id = ? AND card = ? AND ended IS NULL`).all(tenantId, cardId);
73
+ const rows = db
74
+ .prepare(`SELECT id FROM card_runs WHERE tenant_id = ? AND card = ? AND ended IS NULL`)
75
+ .all(tenantId, cardId);
71
76
  if (rows.length > 1) {
72
77
  throw new Error(`card ${cardId} has ${rows.length} runs that have not ended`);
73
78
  }
@@ -91,8 +96,10 @@ function transitionCards(db, tenantId, cardIds, options) {
91
96
  const lease = to === 'running' ? [leaseUntilFrom(now), now] : [null, null];
92
97
  const fromPlaceholders = placeholders(from.length);
93
98
  const sql = `
94
- UPDATE cards SET status = ?, updated_at = ?, lease_until = ?, heartbeat_at = ?${extra?.setSql ? `, ${extra.setSql}` : ''}
95
- WHERE id IN (${placeholders(cardIds.length)}) AND tenant_id = ? AND status IN (${fromPlaceholders})${extra?.whereSql ? ` AND ${extra.whereSql}` : ''}
99
+ UPDATE cards SET status = ?, updated_at = ?, lease_until = ?, heartbeat_at =
100
+ ?${extra?.setSql ? `, ${extra.setSql}` : ''}
101
+ WHERE id IN (${placeholders(cardIds.length)}) AND tenant_id = ? AND status IN
102
+ (${fromPlaceholders})${extra?.whereSql ? ` AND ${extra.whereSql}` : ''}
96
103
  `;
97
104
  const params = [to, now, ...lease, ...(extra?.params ?? []), ...cardIds, tenantId, ...from];
98
105
  const result = db.prepare(sql).run(...params);
@@ -131,7 +138,8 @@ export function createCard(hippoRoot, tenantId, input) {
131
138
  return loadCardRow(db, tenantId, id);
132
139
  }, openStore);
133
140
  }
134
- /** Whether every dependsOn card is done, true for none; throws on an id that is no card of the tenant. Call inside the write scope. */
141
+ /** Whether every dependsOn card is done, true for none; throws on an id that is no card of the tenant. Call inside the
142
+ * write scope. */
135
143
  function everyParentDone(db, tenantId, dependsOn) {
136
144
  if (dependsOn.length === 0)
137
145
  return true;
@@ -174,52 +182,57 @@ export function listCards(hippoRoot, tenantId, opts = {}) {
174
182
  /** Returns this card's parent and child ids from card_deps. */
175
183
  export function loadCardDeps(hippoRoot, tenantId, id) {
176
184
  assertTenantId('loadCardDeps', tenantId);
177
- return onHandle(hippoRoot, (db) => {
178
- // SAFETY: rows' shape matches the single `parent` column named in the SELECT below.
179
- const parents = db.prepare(`SELECT parent FROM card_deps WHERE tenant_id = ? AND child = ?`).all(tenantId, id).map((r) => r.parent);
180
- // SAFETY: rows' shape matches the single `child` column named in the SELECT below.
181
- const children = db.prepare(`SELECT child FROM card_deps WHERE tenant_id = ? AND parent = ?`).all(tenantId, id).map((r) => r.child);
182
- return { parents, children };
183
- }, openStore);
185
+ return onHandle(hippoRoot, (db) => loadCardDepsAt(db, tenantId, id), openStore);
186
+ }
187
+ export function loadCardDepsAt(db, tenantId, id) {
188
+ // SAFETY: rows' shape matches the single `parent` column named in the SELECT below.
189
+ const parents = db.prepare(`SELECT parent FROM card_deps WHERE tenant_id = ? AND child = ?`).all(tenantId, id).map((r) => r.parent);
190
+ // SAFETY: rows' shape matches the single `child` column named in the SELECT below.
191
+ const children = db.prepare(`SELECT child FROM card_deps WHERE tenant_id = ? AND parent = ?`).all(tenantId, id).map((r) => r.child);
192
+ return { parents, children };
184
193
  }
185
194
  /** Returns this card's run history, most recent first. */
186
195
  export function loadCardRuns(hippoRoot, tenantId, id) {
187
196
  assertTenantId('loadCardRuns', tenantId);
188
- return onHandle(hippoRoot, (db) => {
189
- // SAFETY: rows' shape matches CardRunRow.
190
- const rows = db.prepare(`
191
- SELECT id, card, runtime, session_id, started, ended, outcome
192
- FROM card_runs WHERE tenant_id = ? AND card = ? ORDER BY started DESC, id DESC
193
- `).all(tenantId, id);
194
- return rows.map(rowToCardRun);
195
- }, openStore);
197
+ return onHandle(hippoRoot, (db) => loadCardRunsAt(db, tenantId, id), openStore);
198
+ }
199
+ export function loadCardRunsAt(db, tenantId, id) {
200
+ // SAFETY: rows' shape matches CardRunRow.
201
+ const rows = db.prepare(`
202
+ SELECT id, card, runtime, session_id, started, ended, outcome
203
+ FROM card_runs WHERE tenant_id = ? AND card = ? ORDER BY started DESC, id DESC
204
+ `).all(tenantId, id);
205
+ return rows.map(rowToCardRun);
196
206
  }
197
207
  /** Returns this card's comments, most recent first. */
198
208
  export function loadCardComments(hippoRoot, tenantId, id) {
199
209
  assertTenantId('loadCardComments', tenantId);
200
- return onHandle(hippoRoot, (db) => {
201
- // SAFETY: rows' shape matches CardCommentRow.
202
- const rows = db.prepare(`
203
- SELECT id, card_id, author, body, created_at
204
- FROM card_comments WHERE tenant_id = ? AND card_id = ? ORDER BY created_at DESC, id DESC
205
- `).all(tenantId, id);
206
- return rows.map(rowToCardComment);
207
- }, openStore);
210
+ return onHandle(hippoRoot, (db) => loadCardCommentsAt(db, tenantId, id), openStore);
211
+ }
212
+ export function loadCardCommentsAt(db, tenantId, id) {
213
+ // SAFETY: rows' shape matches CardCommentRow.
214
+ const rows = db.prepare(`
215
+ SELECT id, card_id, author, body, created_at
216
+ FROM card_comments WHERE tenant_id = ? AND card_id = ? ORDER BY created_at DESC, id DESC
217
+ `).all(tenantId, id);
218
+ return rows.map(rowToCardComment);
208
219
  }
209
220
  /** Read side of the card <-> handoff round trip: the newest handoff filed against this card. */
210
221
  export function loadLatestHandoffForCard(hippoRoot, tenantId, cardId) {
211
222
  assertTenantId('loadLatestHandoffForCard', tenantId);
212
- return onHandle(hippoRoot, (db) => {
213
- // SAFETY: row's shape matches HANDOFF_COLUMNS.
214
- const row = db.prepare(`
215
- SELECT ${HANDOFF_COLUMNS} FROM session_handoffs
216
- WHERE tenant_id = ? AND card_id = ? ORDER BY created_at DESC, id DESC LIMIT 1
217
- `).get(tenantId, cardId);
218
- return row ? rowToSessionHandoff(row) : null;
219
- }, openStore);
223
+ return onHandle(hippoRoot, (db) => loadLatestHandoffForCardAt(db, tenantId, cardId), openStore);
224
+ }
225
+ export function loadLatestHandoffForCardAt(db, tenantId, cardId) {
226
+ // SAFETY: row's shape matches HANDOFF_COLUMNS.
227
+ const row = db.prepare(`
228
+ SELECT ${HANDOFF_COLUMNS} FROM session_handoffs
229
+ WHERE tenant_id = ? AND card_id = ? ORDER BY created_at DESC, id DESC LIMIT 1
230
+ `).get(tenantId, cardId);
231
+ return row ? rowToSessionHandoff(row) : null;
220
232
  }
221
- /** Atomic claim: WHERE status IN (ready, blocked) AND assignee_runtime IS NULL decides the race. Throws on an unknown card id;
222
- * returns null for a card not ready/blocked or already claimed. Sets a CARD_LEASE_MS lease and returns the new run's id as runId. */
233
+ /** Atomic claim: WHERE status IN (ready, blocked) AND assignee_runtime IS NULL decides the race. Throws on an unknown
234
+ * card id; returns null for a card not ready/blocked or already claimed. Sets a CARD_LEASE_MS lease and returns the new
235
+ * run's id as runId. */
223
236
  export function claimCard(hippoRoot, tenantId, id, runtime, sessionId) {
224
237
  assertTenantId('claimCard', tenantId);
225
238
  if (runtime.trim() === '') {
@@ -239,17 +252,20 @@ export function claimCard(hippoRoot, tenantId, id, runtime, sessionId) {
239
252
  return rollback(null);
240
253
  }
241
254
  const now = new Date().toISOString();
242
- const insert = db.prepare(`
255
+ const insert = db
256
+ .prepare(`
243
257
  INSERT INTO card_runs (card, runtime, session_id, started, created_at, updated_at, tenant_id)
244
258
  VALUES (?, ?, ?, ?, ?, ?, ?)
245
- `).run(id, runtime, sessionId ?? null, now, now, now, tenantId);
259
+ `)
260
+ .run(id, runtime, sessionId ?? null, now, now, now, tenantId);
246
261
  return Number(insert.lastInsertRowid ?? 0);
247
262
  });
248
263
  return runId === null ? null : { ...loadCardRow(db, tenantId, id), runId };
249
264
  }, openStore);
250
265
  }
251
- /** Moves a running card's lease to CARD_LEASE_MS from now and records the heartbeat; updated_at is left alone. Throws on an
252
- * unknown card id or a run id that is not a positive integer; returns null unless the card is running and runId is its live run. */
266
+ /** Moves a running card's lease to CARD_LEASE_MS from now and records the heartbeat; updated_at is left alone. Throws
267
+ * on an unknown card id or a run id that is not a positive integer; returns null unless the card is running and runId
268
+ * is its live run. */
253
269
  export function heartbeatCard(hippoRoot, tenantId, id, runId) {
254
270
  assertTenantId('heartbeatCard', tenantId);
255
271
  assertRunId(runId);
@@ -282,7 +298,13 @@ export function blockCard(hippoRoot, tenantId, id, reason, runId) {
282
298
  return onHandle(hippoRoot, (db) => {
283
299
  const blocked = withWriteScopeOr(db, 'block_card', (rollback) => {
284
300
  const allowed = runId === undefined || isLiveRun(db, tenantId, id, runId);
285
- const changes = allowed ? transitionCard(db, tenantId, id, { from: ['running'], to: 'blocked', extra: { setSql: 'assignee_runtime = NULL' } }) : 0;
301
+ const changes = allowed
302
+ ? transitionCard(db, tenantId, id, {
303
+ from: ['running'],
304
+ to: 'blocked',
305
+ extra: { setSql: 'assignee_runtime = NULL' },
306
+ })
307
+ : 0;
286
308
  if (changes === 0) {
287
309
  if (!loadCardRow(db, tenantId, id)) {
288
310
  throw new Error(`unknown card id: ${id}`);
@@ -298,8 +320,9 @@ export function blockCard(hippoRoot, tenantId, id, reason, runId) {
298
320
  return blocked ? loadCardRow(db, tenantId, id) : null;
299
321
  }, openStore);
300
322
  }
301
- /** Requires the card be running; moves it to review, clearing its lease and heartbeat and keeping its live run. When runId is
302
- * given, returns null unless it is the card's live run. Throws on an unknown card id; returns null for a card not running. */
323
+ /** Requires the card be running; moves it to review, clearing its lease and heartbeat and keeping its live run. When
324
+ * runId is given, returns null unless it is the card's live run. Throws on an unknown card id; returns null for a card
325
+ * not running. */
303
326
  export function reviewCard(hippoRoot, tenantId, id, runId) {
304
327
  assertTenantId('reviewCard', tenantId);
305
328
  if (runId !== undefined)
@@ -319,8 +342,9 @@ export function reviewCard(hippoRoot, tenantId, id, runId) {
319
342
  return moved ? loadCardRow(db, tenantId, id) : null;
320
343
  }, openStore);
321
344
  }
322
- /** Closes the live run of a card in review: 'success' moves it to done and promotes children whose parents are all done; 'failure'/'partial' shelves it.
323
- * Throws on an unknown card id; returns null for a card not in review, or when `runId` is given and is not the card's live run. */
345
+ /** Closes the live run of a card in review: 'success' moves it to done and promotes children whose parents are all
346
+ * done; 'failure'/'partial' shelves it. Throws on an unknown card id; returns null for a card not in review, or when
347
+ * `runId` is given and is not the card's live run. */
324
348
  export function completeCard(hippoRoot, tenantId, id, outcome, runId) {
325
349
  assertTenantId('completeCard', tenantId);
326
350
  if (!isHandoffOutcome(outcome)) {
@@ -348,24 +372,29 @@ export function completeCard(hippoRoot, tenantId, id, outcome, runId) {
348
372
  return promoted === null ? null : { card: loadCardRow(db, tenantId, id), promotedChildren: promoted };
349
373
  }, openStore);
350
374
  }
351
- /** Moves to ready each backlog child of `parentId` whose parents are all done, and returns their ids. Call inside the write scope. */
375
+ /** Moves to ready each backlog child of `parentId` whose parents are all done, and returns their ids. Call inside the
376
+ * write scope. */
352
377
  function promoteUnblockedChildren(db, tenantId, parentId) {
353
- // The child's status and its open parents are result columns, not joins, so the rows keep the order of a plain read of the parent's children.
354
- // SAFETY: rows' shape matches the three columns named in the SELECT below.
355
- const children = db.prepare(`
378
+ // The child's status and its open parents are result columns, not joins, so the rows keep the order of a plain read
379
+ // of the parent's children. SAFETY: rows' shape matches the three columns named in the SELECT below.
380
+ const children = db
381
+ .prepare(`
356
382
  SELECT d.child AS child,
357
383
  (SELECT c.status FROM cards c WHERE c.tenant_id = ? AND c.id = d.child) AS status,
358
384
  (SELECT COUNT(*) FROM card_deps p WHERE p.tenant_id = ? AND p.child = d.child
359
- AND NOT EXISTS (SELECT 1 FROM cards pc WHERE pc.tenant_id = ? AND pc.id = p.parent AND pc.status = 'done')) AS open_parents
385
+ AND NOT EXISTS (SELECT 1 FROM cards pc WHERE pc.tenant_id = ? AND pc.id = p.parent AND pc.status = 'done')) AS
386
+ open_parents
360
387
  FROM card_deps d WHERE d.tenant_id = ? AND d.parent = ?
361
- `).all(tenantId, tenantId, tenantId, tenantId, parentId);
388
+ `)
389
+ .all(tenantId, tenantId, tenantId, tenantId, parentId);
362
390
  const unblocked = children.filter((r) => r.status === 'backlog' && r.open_parents === 0).map((r) => r.child);
363
391
  for (const ids of chunked(unblocked))
364
392
  transitionCards(db, tenantId, ids, { from: ['backlog'], to: 'ready' });
365
393
  return unblocked;
366
394
  }
367
- /** Returns to ready every running card of the tenant whose lease has expired or is missing: clears its assignee, closes its live
368
- * run as 'reclaimed' and leaves its handoffs alone, all in one write transaction. Returns the reclaimed card ids in id order. */
395
+ /** Returns to ready every running card of the tenant whose lease has expired or is missing: clears its assignee, closes
396
+ * its live run as 'reclaimed' and leaves its handoffs alone, all in one write transaction. Returns the reclaimed card
397
+ * ids in id order. */
369
398
  export function reclaimExpiredCards(hippoRoot, tenantId) {
370
399
  assertTenantId('reclaimExpiredCards', tenantId);
371
400
  return onHandle(hippoRoot, (db) => {
@@ -379,7 +408,11 @@ export function reclaimExpiredCards(hippoRoot, tenantId) {
379
408
  ORDER BY id
380
409
  `).all(tenantId, now).map((r) => r.id);
381
410
  for (const id of ids) {
382
- transitionCard(db, tenantId, id, { from: ['running'], to: 'ready', extra: { setSql: 'assignee_runtime = NULL' } });
411
+ transitionCard(db, tenantId, id, {
412
+ from: ['running'],
413
+ to: 'ready',
414
+ extra: { setSql: 'assignee_runtime = NULL' },
415
+ });
383
416
  closeLiveRun(db, tenantId, id, 'reclaimed', now);
384
417
  }
385
418
  return ids;
@@ -13,6 +13,7 @@ export interface CallerItems {
13
13
  readonly owner: string;
14
14
  readonly origins: readonly string[];
15
15
  }
16
- /** A caller's items, already scrubbed, under its record: a retry of a finished request answers with the first count, and a `summarised` one is reused. */
16
+ /** A caller's items, already scrubbed, under its record: a retry of a finished request answers with the first count,
17
+ * and a `summarised` one is reused. */
17
18
  export declare function saveCallerItems(hippoRoot: string, tenantId: string, req: CallerItems, log: Log): number;
18
19
  //# sourceMappingURL=compaction-caller.d.ts.map
@@ -9,7 +9,8 @@ export function startCompactionAt(hippoRoot, tenantId, start) {
9
9
  export function markSnapshotSavedAt(hippoRoot, tenantId, recordId) {
10
10
  onHandle(hippoRoot, (db) => markSnapshotSaved(db, tenantId, recordId));
11
11
  }
12
- /** A caller's items, already scrubbed, under its record: a retry of a finished request answers with the first count, and a `summarised` one is reused. */
12
+ /** A caller's items, already scrubbed, under its record: a retry of a finished request answers with the first count,
13
+ * and a `summarised` one is reused. */
13
14
  export function saveCallerItems(hippoRoot, tenantId, req, log) {
14
15
  return onHandle(hippoRoot, (db) => {
15
16
  const earlier = compactionByRequest(db, tenantId, req.requestId, req.sessionId);
@@ -28,8 +28,8 @@ export interface CompactionStart {
28
28
  export declare function startCompaction(db: DatabaseSyncLike, tenantId: string, start: CompactionStart, at?: Date): string;
29
29
  /** A session's newest record, or null. */
30
30
  export declare function latestCompaction(db: DatabaseSyncLike, tenantId: string, sessionId: string): CompactionRecord | null;
31
- /** The record a caller's request made, whatever state it reached, so a retry neither writes its items twice nor starts a second record.
32
- * Another session's id is a ConflictError. */
31
+ /** The record a caller's request made, whatever state it reached, so a retry neither writes its items twice nor starts
32
+ * a second record. Another session's id is a ConflictError. */
33
33
  export declare function compactionByRequest(db: DatabaseSyncLike, tenantId: string, requestId: string, sessionId: string): CompactionRecord | null;
34
34
  /** Best effort, never throws: a compaction must not fail because its record could not be written. */
35
35
  export declare function recordCompactionStart(hippoRoot: string, start: Omit<CompactionStart, 'originProject'>, log: Log): string | null;
@@ -51,7 +51,8 @@ export interface RecordSummaryOptions {
51
51
  readonly at: Date;
52
52
  readonly caller?: SummaryCaller;
53
53
  }
54
- /** Puts the summary on the session's `started` record, or inserts a `summarised` one when pre-compact wrote none. One statement each. */
54
+ /** Puts the summary on the session's `started` record, or inserts a `summarised` one when pre-compact wrote none. One
55
+ * statement each. */
55
56
  export declare function recordSummary(db: DatabaseSyncLike, hippoRoot: string, tenantId: string, options: RecordSummaryOptions): CompactionRecord;
56
57
  export interface ItemContext {
57
58
  tenantId: string;
@@ -62,13 +63,15 @@ export interface ItemContext {
62
63
  /** Where the session ran, so rows held under the project's older folder name count too. */
63
64
  cwd: string | null;
64
65
  items: string[];
65
- /** Set when another machine sent the items: its audit actor and its project's names, since the server's folder is neither. */
66
+ /** Set when another machine sent the items: its audit actor and its project's names, since the server's folder is
67
+ * neither. */
66
68
  caller?: {
67
69
  actor: string;
68
70
  origins: readonly string[];
69
71
  };
70
72
  }
71
- /** Items that become rows, then the record `done`, in one transaction so two sessions cannot both insert one text. Mirrors after commit. */
73
+ /** Items that become rows, then the record `done`, in one transaction so two sessions cannot both insert one text.
74
+ * Mirrors after commit. */
72
75
  export declare function saveItems(db: DatabaseSyncLike, hippoRoot: string, ctx: ItemContext, log: Log): number;
73
76
  export interface CompactionSaveResult {
74
77
  /** Memories written; null when neither the record nor the items could be saved. */
@@ -77,12 +80,14 @@ export interface CompactionSaveResult {
77
80
  deferred: boolean;
78
81
  snapshotSaved: boolean;
79
82
  }
80
- /** What one PostCompact save did; `spoolReason` is set when the store was busy or would not open, so the caller keeps the summary on disk. */
83
+ /** What one PostCompact save did; `spoolReason` is set when the store was busy or would not open, so the caller keeps
84
+ * the summary on disk. */
81
85
  export interface CompactionSaveOutcome {
82
86
  result: CompactionSaveResult;
83
87
  spoolReason: string | null;
84
88
  }
85
- /** The PostCompact store work, on a handle of its own: record the summary, then write its items. Each step is independent. Never throws. */
89
+ /** The PostCompact store work, on a handle of its own: record the summary, then write its items. Each step is
90
+ * independent. Never throws. */
86
91
  export declare function saveCompactionAt(hippoRoot: string, meta: Omit<CompactionStart, 'originProject'>, text: CompactionText, at: Date, log: Log): CompactionSaveOutcome;
87
92
  /** One spooled summary, as plain data. */
88
93
  export interface SpooledSummary {
@@ -91,7 +96,8 @@ export interface SpooledSummary {
91
96
  text: CompactionText;
92
97
  at: Date;
93
98
  }
94
- /** Records one spooled summary; it calls `recorded` once the store holds it, so the file is done even if a later step throws. */
99
+ /** Records one spooled summary; it calls `recorded` once the store holds it, so the file is done even if a later step
100
+ * throws. */
95
101
  export type SpoolRecorder = (spooled: SpooledSummary, recorded: () => void) => void;
96
102
  /** A summary read out of a transcript, scrubbed; `listed` is false when it had no memories section. */
97
103
  export interface TranscriptText {
@@ -7,8 +7,8 @@ import { selectItemRows } from '../util/compaction-items.js';
7
7
  import { isSharedStore, loadConfig } from '../core/config.js';
8
8
  import { closeHippoDb, isSqliteBusy, openHippoDb, withWriteScopeOr } from '../db/index.js';
9
9
  import { gatedWrite } from './gated-write.js';
10
- import { COMPACTION_MEMORY_TAG, COMPACTION_SOURCE_PREFIX, Layer, createMemory, generateId } from '../core/memory.js';
11
- import { fallbackOrigin, isGlobalStoreRoot, projectId, projectNames, resolveProjectIdentity } from '../core/project-identity.js';
10
+ import { COMPACTION_MEMORY_TAG, COMPACTION_SOURCE_PREFIX, Layer, createMemory, generateId, } from '../core/memory.js';
11
+ import { fallbackOrigin, isGlobalStoreRoot, projectId, projectNames, resolveProjectIdentity, } from '../core/project-identity.js';
12
12
  import { closeStartedWithoutSummary, compactionProgress, compactionRowsByRequest, heldMemoryRows, insertStartedCompaction, insertSummarisedCompaction, latestCompactionRows, latestStartedRows, markCompactionDone, markCompactionSummarised, markSnapshotSavedRow, nextCompactionStart, openTranscriptRows, stalledSummarisedRows, } from './compactions.js';
13
13
  import { strengthenRetrievedOn, writeEntryMirrors } from './entry-writes.js';
14
14
  import { isRecallBoostAblated } from '../core/ablation.js';
@@ -17,14 +17,18 @@ import { resolveTenantId } from './tenant.js';
17
17
  import { errorMessage, reportCompactionFailure } from '../util/log.js';
18
18
  /** The marker redactSecretsStrict writes; an item holding it was a secret before it was stored. */
19
19
  const REDACTED = '[REDACTED]';
20
- /** Where the session ran: rows written through the global store or a shared store keep the project the session was in. */
20
+ /** Where the session ran: rows written through the global store or a shared store keep the project the session was
21
+ * in. */
21
22
  function compactionProject(hippoRoot, cwd) {
22
- if (!isGlobalStoreRoot(hippoRoot) && !isSharedStore(hippoRoot))
23
+ if (!isGlobalStoreRoot(hippoRoot) && !isSharedStore(hippoRoot)) {
23
24
  return resolveProjectIdentity(path.dirname(hippoRoot));
24
- // No cwd means user-global, as stampOriginProject gives the global store; undefined would fall back to the hook's own cwd.
25
+ }
26
+ // No cwd means user-global, as stampOriginProject gives the global store; undefined would fall back to the hook's own
27
+ // cwd.
25
28
  return cwd === null ? '' : resolveProjectIdentity(cwd);
26
29
  }
27
- /** The record column cannot hold NULL, but an item from an unknown folder on a shared store must not read as user-global. */
30
+ /** The record column cannot hold NULL, but an item from an unknown folder on a shared store must not read as
31
+ * user-global. */
28
32
  function itemOrigin(hippoRoot, ctx) {
29
33
  return ctx.cwd === null && isSharedStore(hippoRoot) ? fallbackOrigin(hippoRoot) : ctx.originProject;
30
34
  }
@@ -64,30 +68,39 @@ export function startCompaction(db, tenantId, start, at = new Date()) {
64
68
  export function latestCompaction(db, tenantId, sessionId) {
65
69
  return latestCompactionRows(db, tenantId, sessionId).map(toRecord)[0] ?? null;
66
70
  }
67
- /** The record a caller's request made, whatever state it reached, so a retry neither writes its items twice nor starts a second record.
68
- * Another session's id is a ConflictError. */
71
+ /** The record a caller's request made, whatever state it reached, so a retry neither writes its items twice nor starts
72
+ * a second record. Another session's id is a ConflictError. */
69
73
  export function compactionByRequest(db, tenantId, requestId, sessionId) {
70
74
  const record = compactionRowsByRequest(db, tenantId, requestId).map(toRecord)[0] ?? null;
71
75
  // Sessions are owner-bound, so this also keeps one owner from reading or finishing another's record.
72
- if (record !== null && record.sessionId !== sessionId)
76
+ if (record !== null && record.sessionId !== sessionId) {
73
77
  throw new ConflictError('request id belongs to another session');
78
+ }
74
79
  return record;
75
80
  }
76
- /** Pre-compact's record for the compaction that is ending: the session's newest `started` one within REPLAY_AFTER_MS before `at`.
77
- * An older one is left for the transcript fill. */
81
+ /** Pre-compact's record for the compaction that is ending: the session's newest `started` one within REPLAY_AFTER_MS
82
+ * before `at`. An older one is left for the transcript fill. */
78
83
  function latestStarted(db, tenantId, sessionId, at) {
79
- return latestStartedRows(db, tenantId, sessionId, at.toISOString(), new Date(at.getTime() - REPLAY_AFTER_MS).toISOString()).map(toRecord)[0] ?? null;
84
+ return (latestStartedRows(db, tenantId, sessionId, at.toISOString(), new Date(at.getTime() - REPLAY_AFTER_MS).toISOString()).map(toRecord)[0] ?? null);
80
85
  }
81
86
  function markSummarised(db, tenantId, id, options) {
82
87
  const { text, summarisedAt, requestId } = options;
83
- return markCompactionSummarised(db, tenantId, id, { summary: text.summary, itemsJson: JSON.stringify(text.items), summarisedAt, requestId });
88
+ return markCompactionSummarised(db, tenantId, id, {
89
+ summary: text.summary,
90
+ itemsJson: JSON.stringify(text.items),
91
+ summarisedAt,
92
+ requestId,
93
+ });
84
94
  }
85
95
  /** Best effort, never throws: a compaction must not fail because its record could not be written. */
86
96
  export function recordCompactionStart(hippoRoot, start, log) {
87
97
  let db;
88
98
  try {
89
99
  db = openHippoDb(hippoRoot, { busyWaitMs: COMPACTION_DB_WAIT_MS });
90
- return startCompaction(db, resolveTenantId({}), { ...start, originProject: compactionOrigin(hippoRoot, start.cwd) });
100
+ return startCompaction(db, resolveTenantId({}), {
101
+ ...start,
102
+ originProject: compactionOrigin(hippoRoot, start.cwd),
103
+ });
91
104
  }
92
105
  catch (err) {
93
106
  log(`compaction record not started: ${errorMessage(err)}`);
@@ -116,7 +129,8 @@ export function recordSnapshotSaved(hippoRoot, tenantId, recordId, log) {
116
129
  closeHippoDb(db);
117
130
  }
118
131
  }
119
- /** Puts the summary on the session's `started` record, or inserts a `summarised` one when pre-compact wrote none. One statement each. */
132
+ /** Puts the summary on the session's `started` record, or inserts a `summarised` one when pre-compact wrote none. One
133
+ * statement each. */
120
134
  export function recordSummary(db, hippoRoot, tenantId, options) {
121
135
  const { meta, text, at, caller = {} } = options;
122
136
  const now = new Date().toISOString();
@@ -130,18 +144,44 @@ export function recordSummary(db, hippoRoot, tenantId, options) {
130
144
  const id = generateId('cmp');
131
145
  insertSummarisedCompaction(db, tenantId, { ...meta, originProject, startedAt: at.toISOString() }, { id, summary: text.summary, itemsJson, summarisedAt: now, requestId });
132
146
  return {
133
- id, tenantId, sessionId: meta.sessionId, originProject, trigger: meta.trigger, cwd: meta.cwd, transcriptPath: meta.transcriptPath,
134
- snapshotSaved: false, startedAt: at.toISOString(), summarisedAt: now, summary: text.summary, items: text.items, itemsWritten: 0, status: 'summarised',
147
+ id,
148
+ tenantId,
149
+ sessionId: meta.sessionId,
150
+ originProject,
151
+ trigger: meta.trigger,
152
+ cwd: meta.cwd,
153
+ transcriptPath: meta.transcriptPath,
154
+ snapshotSaved: false,
155
+ startedAt: at.toISOString(),
156
+ summarisedAt: now,
157
+ summary: text.summary,
158
+ items: text.items,
159
+ itemsWritten: 0,
160
+ status: 'summarised',
135
161
  };
136
162
  }
137
163
  /** Words whose loss reverses or narrows a statement: "do not", "can't", "only", "unless". */
138
- const PROTECTED_WORDS = new Set(['not', 'no', 'never', 'none', 'nor', 'without', 'cannot', 't', 'only', 'except', 'unless', 'until']);
164
+ const PROTECTED_WORDS = new Set([
165
+ 'not',
166
+ 'no',
167
+ 'never',
168
+ 'none',
169
+ 'nor',
170
+ 'without',
171
+ 'cannot',
172
+ 't',
173
+ 'only',
174
+ 'except',
175
+ 'unless',
176
+ 'until',
177
+ ]);
139
178
  /** Below this share of the held text's words, an item is a fragment of something longer, not a restatement. */
140
179
  const RESTATE_MIN_SHARE = 0.5;
141
180
  function words(text) {
142
181
  return text.normalize('NFC').toLowerCase().split(/[^\p{L}\p{M}\p{N}_]+/u).filter(Boolean);
143
182
  }
144
- /** True when `item` is `held` with words left out, in the same order, keeping every number and protected word. Spacing, case and punctuation may differ. */
183
+ /** True when `item` is `held` with words left out, in the same order, keeping every number and protected word. Spacing,
184
+ * case and punctuation may differ. */
145
185
  function restates(item, held) {
146
186
  if (item.length === 0 || item.length < RESTATE_MIN_SHARE * held.length)
147
187
  return false;
@@ -155,9 +195,14 @@ function restates(item, held) {
155
195
  }
156
196
  return next === item.length;
157
197
  }
158
- /** Live rows of one tenant and origin that default recall shows: a compaction often restates what an earlier one, or the user, already saved. */
198
+ /** Live rows of one tenant and origin that default recall shows: a compaction often restates what an earlier one, or
199
+ * the user, already saved. */
159
200
  function heldRows(db, tenantId, origins) {
160
- return heldMemoryRows(db, tenantId, origins).map((r) => ({ id: r.id, sessionId: r.source_session_id, words: words(r.content) }));
201
+ return heldMemoryRows(db, tenantId, origins).map((r) => ({
202
+ id: r.id,
203
+ sessionId: r.source_session_id,
204
+ words: words(r.content),
205
+ }));
161
206
  }
162
207
  function compactionEntry(text, ctx, origin, baseHalfLifeDays) {
163
208
  return {
@@ -167,7 +212,7 @@ function compactionEntry(text, ctx, origin, baseHalfLifeDays) {
167
212
  source: `${COMPACTION_SOURCE_PREFIX}${ctx.sessionId}`,
168
213
  confidence: 'observed',
169
214
  kind: 'distilled',
170
- source_session_id: ctx.sessionId,
215
+ sourceSessionId: ctx.sessionId,
171
216
  tenantId: ctx.tenantId,
172
217
  baseHalfLifeDays,
173
218
  }),
@@ -224,7 +269,8 @@ function finishItemWrites(hippoRoot, writes, log) {
224
269
  }
225
270
  }
226
271
  }
227
- /** Items that become rows, then the record `done`, in one transaction so two sessions cannot both insert one text. Mirrors after commit. */
272
+ /** Items that become rows, then the record `done`, in one transaction so two sessions cannot both insert one text.
273
+ * Mirrors after commit. */
228
274
  export function saveItems(db, hippoRoot, ctx, log) {
229
275
  const usable = ctx.items.filter((item) => !item.includes(REDACTED));
230
276
  if (usable.length < ctx.items.length)
@@ -262,7 +308,11 @@ export function saveItems(db, hippoRoot, ctx, log) {
262
308
  }
263
309
  function recordStep(step) {
264
310
  try {
265
- const record = recordSummary(step.db, step.hippoRoot, step.tenantId, { meta: step.meta, text: step.text, at: step.at });
311
+ const record = recordSummary(step.db, step.hippoRoot, step.tenantId, {
312
+ meta: step.meta,
313
+ text: step.text,
314
+ at: step.at,
315
+ });
266
316
  step.result.snapshotSaved = record.snapshotSaved;
267
317
  return record;
268
318
  }
@@ -294,7 +344,8 @@ function itemsStep(step, record) {
294
344
  log(`store busy, items left for the next sleep: ${errorMessage(err)}`);
295
345
  }
296
346
  }
297
- /** The PostCompact store work, on a handle of its own: record the summary, then write its items. Each step is independent. Never throws. */
347
+ /** The PostCompact store work, on a handle of its own: record the summary, then write its items. Each step is
348
+ * independent. Never throws. */
298
349
  export function saveCompactionAt(hippoRoot, meta, text, at, log) {
299
350
  const result = { written: null, deferred: false, snapshotSaved: false };
300
351
  let db;
@@ -315,27 +366,39 @@ export function saveCompactionAt(hippoRoot, meta, text, at, log) {
315
366
  return { result, spoolReason: null };
316
367
  }
317
368
  function closeWithoutSummary(db, tenantId, id, log) {
318
- if (closeStartedWithoutSummary(db, tenantId, id) > 0)
369
+ if (closeStartedWithoutSummary(db, tenantId, id) > 0) {
319
370
  log(`${id} closed as no-summary: its transcript holds no summary for it`);
371
+ }
320
372
  }
321
373
  function nextStartedAt(db, record) {
322
374
  return nextCompactionStart(db, record.tenantId, record.sessionId, record.startedAt);
323
375
  }
324
376
  /** The one place a record becomes the argument saveItems takes. */
325
377
  function itemContext(tenantId, record, items = record.items) {
326
- return { tenantId, recordId: record.id, sessionId: record.sessionId, originProject: record.originProject, cwd: record.cwd, items };
378
+ return {
379
+ tenantId,
380
+ recordId: record.id,
381
+ sessionId: record.sessionId,
382
+ originProject: record.originProject,
383
+ cwd: record.cwd,
384
+ items,
385
+ };
327
386
  }
328
387
  /** Records a spooled summary, then writes its items. */
329
388
  function spoolRecorder(db, hippoRoot, log) {
330
389
  return (spooled, recorded) => {
331
- const record = recordSummary(db, hippoRoot, spooled.tenantId, { meta: spooled.payload, text: spooled.text, at: spooled.at });
390
+ const record = recordSummary(db, hippoRoot, spooled.tenantId, {
391
+ meta: spooled.payload,
392
+ text: spooled.text,
393
+ at: spooled.at,
394
+ });
332
395
  // The record holds the items now, so the file is done even if the write below fails.
333
396
  recorded();
334
397
  saveItems(db, hippoRoot, itemContext(spooled.tenantId, record), log);
335
398
  };
336
399
  }
337
- /** Runs `step` over each row until the deadline; a row that will not map or a step that throws is logged and the rest still run.
338
- * Returns how many `step` finished. */
400
+ /** Runs `step` over each row until the deadline; a row that will not map or a step that throws is logged and the rest
401
+ * still run. Returns how many `step` finished. */
339
402
  function replayEach(run, rows, what, step) {
340
403
  let finished = 0;
341
404
  for (const row of rows) {
@@ -393,8 +456,8 @@ function replayOpen(run) {
393
456
  const open = openTranscriptRows(run.db, run.tenantId, new Date(run.now - REPLAY_AFTER_MS).toISOString(), new Date(run.now - TRANSCRIPT_FILL_WINDOW_MS).toISOString());
394
457
  return replayEach(run, open, 'transcript fill', (record) => fillFromTranscript(run, record));
395
458
  }
396
- /** Finishes what a killed hook or a busy store left: `summarised` records, spool files, and `started` records the transcript can fill.
397
- * Returns how many compactions it saved. */
459
+ /** Finishes what a killed hook or a busy store left: `summarised` records, spool files, and `started` records the
460
+ * transcript can fill. Returns how many compactions it saved. */
398
461
  function replayCompactions(db, hippoRoot, sources, log, deadline) {
399
462
  const run = { db, hippoRoot, tenantId: resolveTenantId({}), now: Date.now(), sources, log, deadline };
400
463
  return replayStalled(run) + replaySpool(run) + replayOpen(run);