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,8 +1,11 @@
1
1
  import type { AmbientTallies } from '../core/ambient.js';
2
2
  import type { AmbientStoreFilter } from './ambient.js';
3
3
  import type { ApiKeyListRow, ApiKeyRecord, ListApiKeysOpts, NewApiKey } from './auth.js';
4
+ import type { ScopeGrantChange } from './key-writes.js';
4
5
  import type { AppendAuditOpts, AuditEvent, AuditPrune, ListAuditAfterOpts, QueryAuditOpts } from './audit.js';
5
6
  import type { QualityRepairResult } from './quality-repair.js';
7
+ import type { StoreWith } from './narrow.js';
8
+ import type { LocalFiles } from './port/local-files.js';
6
9
  import type { EmbeddingIndexState } from './vector-index.js';
7
10
  import type { Entity, Relation } from './graph-rows.js';
8
11
  import type { ActiveGoals, GetActiveGoalsOpts, GoalRecallLogRow } from './goals.js';
@@ -19,13 +22,13 @@ import type { QuarantineRow, QuarantineStatus } from './quarantine.js';
19
22
  import type { ScopeActor } from '../core/recall-scope.js';
20
23
  import type { RecallTraceInput } from './recall-trace.js';
21
24
  import type { AmbientLoadResult, AmbientRecallRequest, ContextCandidateFilter, HeldText, RecentOrigins } from './candidates.js';
22
- import type { GitHubDlqInsert, GitHubRouting } from './connectors/github.js';
23
- import type { SlackDlqInsert, SlackTeamRoute } from './connectors/slack.js';
24
25
  import type { StrengthenOptions } from './entry-writes.js';
26
+ import type { ConnectorEvents, ConnectorWrites } from './connectors/event-log.js';
25
27
  import type { SessionEvent, TaskSnapshot } from './rows.js';
26
28
  import type { OriginFilter, VectorCandidateSpec } from './search-rows.js';
27
29
  import type { ContinuityKey } from './sessions.js';
28
30
  import type { TokenUse } from './token-ledger.js';
31
+ import type { SessionAndAdminGroups } from './port-groups.js';
29
32
  /** The arguments of `loadRecallSearchEntries` after the query, by name. */
30
33
  export interface RecallSearchArgs {
31
34
  readonly limit: number;
@@ -39,14 +42,16 @@ export interface RecallSearchArgs {
39
42
  }
40
43
  /** Everything one recall writes once its reply is decided, so a store writes it on one connection. */
41
44
  export interface RecallWrites {
42
- /** Insert or ignore on (memory_id, goal_id), so the first row wins, a duplicate inside this batch included. First drop a row
43
- * whose memory_id is in no memories row of this store, whatever that row's tenant, as `localGoalRecallRows` does. */
45
+ /** Insert or ignore on (memory_id, goal_id), so the first row wins, a duplicate
46
+ * inside this batch included. First drop a row whose memory_id is in no memories
47
+ * row of this store, whatever that row's tenant, as `localGoalRecallRows` does. */
44
48
  readonly goalLog: readonly GoalRecallLogRow[];
45
49
  /** In the order they happened. */
46
50
  readonly audit: readonly AppendAuditOpts[];
47
51
  readonly trace?: RecallTraceInput;
48
- /** Nothing when `recallBoostAblated`. Each id found, in `tenantId` when set, gets the retrieval_count, last_retrieved,
49
- * half_life_days and strength `markRetrieved` computes from the row read before any update, so a repeated id moves once. */
52
+ /** Nothing when `recallBoostAblated`. Each id found, in `tenantId` when set, gets the retrieval_count,
53
+ * last_retrieved, half_life_days and strength `markRetrieved` computes from the row read before any update, so a
54
+ * repeated id moves once. */
50
55
  readonly strengthen?: {
51
56
  readonly ids: readonly string[];
52
57
  readonly opts: StrengthenOptions;
@@ -57,8 +62,9 @@ export interface VectorReads {
57
62
  /** The stored model and whether any vector exists, in one snapshot. */
58
63
  embeddingIndexState(): Promise<EmbeddingIndexState>;
59
64
  storedVectors(ids: readonly string[]): Promise<Map<string, number[]>>;
60
- /** The `spec.limit ?? 50` rows nearest `queryVector` by `rankVectorRows`, filtered by tenant (when set), kind != 'archived', superseded only with
61
- * `includeSuperseded`, scope per `RecallScopeFilter`, and origin '' or listed (when `spec.origin` is set). */
65
+ /** The `spec.limit ?? 50` rows nearest `queryVector` by `rankVectorRows`, filtered by tenant (when set), kind !=
66
+ * 'archived', superseded only with `includeSuperseded`, scope per `RecallScopeFilter`, and origin '' or listed (when
67
+ * `spec.origin` is set). */
62
68
  nearestEntries(queryVector: readonly number[], spec: VectorCandidateSpec): Promise<MemoryEntry[]>;
63
69
  /** The particles of `ids` only; an empty list reads nothing. */
64
70
  physicsParticles(ids: readonly string[]): Promise<Map<string, PhysicsParticle>>;
@@ -74,13 +80,15 @@ export interface VectorWrite {
74
80
  readonly tenantId: string;
75
81
  /** The index identity the vectors were built by, `embeddingIndexIdentity(provider.id)`. */
76
82
  readonly model: string;
77
- /** Set only by embedAll's rebuild, so a write that read the index state before another process rebuilt it cannot drop that rebuild. */
83
+ /** Set only by embedAll's rebuild, so a write that read the index
84
+ * state before another process rebuilt it cannot drop that rebuild. */
78
85
  readonly replaceIndex: boolean;
79
86
  readonly rows: readonly VectorRowWrite[];
80
87
  }
81
88
  export interface VectorWriteResult {
82
89
  readonly written: number;
83
- /** True when another model built the index and `replaceIndex` is false; the store then keeps nothing and `written` is 0. */
90
+ /** True when another model built the index and `replaceIndex` is false; the store then keeps nothing and `written` is
91
+ * 0. */
84
92
  readonly modelMismatch: boolean;
85
93
  }
86
94
  export interface VectorBackfillQuery {
@@ -92,13 +100,15 @@ export interface VectorBackfillQuery {
92
100
  /** Every tenant when unset, since the backfill covers the whole store. */
93
101
  readonly tenantId?: string;
94
102
  }
95
- /** The writes behind embed on write and the backfill: core computes each vector, the store only keeps it.
96
- * A store deletes a memory's vector and particle when the memory is deleted (hippo.db does it by trigger and foreign-key cascade). */
103
+ /** The writes behind embed on write and the backfill: core computes each vector,
104
+ * the store only keeps it. A store deletes a memory's vector and particle when
105
+ * the memory is deleted (hippo.db does it by trigger and foreign-key cascade). */
97
106
  export interface VectorWrites {
98
107
  /** Memories of any kind with no vector stored under `query.model`, by id ascending in byte order. */
99
108
  entriesWithoutVector(query: VectorBackfillQuery): Promise<MemoryEntry[]>;
100
- /** In one transaction: refuses with `modelMismatch` if `replacesIndex` and not `replaceIndex`; else drops every vector and particle if `replacesIndex`,
101
- * keeps each writable row (memory in `tenantId`, finite non-empty vector) under `model` with its particle, sets `model`. No audit row. */
109
+ /** In one transaction: refuses with `modelMismatch` if `replacesIndex` and not `replaceIndex`; else drops every
110
+ * vector and particle if `replacesIndex`, keeps each writable row (memory in `tenantId`, finite non-empty vector)
111
+ * under `model` with its particle, sets `model`. No audit row. */
102
112
  writeVectors(write: VectorWrite): Promise<VectorWriteResult>;
103
113
  }
104
114
  export interface KeyRevoke {
@@ -108,12 +118,15 @@ export interface KeyRevoke {
108
118
  readonly at: string;
109
119
  }
110
120
  export interface KeyAudit {
111
- /** Sets revoked_at to `at` and appends one auth_revoke row (the key's tenant, `actor`, the key id) in one transaction, then resolves to `at`. A revoked
112
- * key resolves to its own revoked_at and writes nothing; a key missing from `tenantId` rejects with NotFoundError `Unknown key_id: <keyId>`. */
121
+ /** Sets revoked_at to `at` and appends one auth_revoke row (the key's tenant, `actor`, the key id) in one
122
+ * transaction, then resolves to `at`. A revoked key resolves to its own revoked_at and writes nothing; a key missing
123
+ * from `tenantId` rejects with NotFoundError `Unknown key_id: <keyId>`. */
113
124
  revokeApiKey(revoke: KeyRevoke): Promise<string>;
114
- /** As `listAuditEventsAfter`: rows above `afterId` in ascending id order, with its RangeErrors, limit clamp and tenant filter. */
125
+ /** As `listAuditEventsAfter`: rows above `afterId` in ascending
126
+ * id order, with its RangeErrors, limit clamp and tenant filter. */
115
127
  auditEventsAfter(opts: ListAuditAfterOpts): Promise<AuditEvent[]>;
116
- /** The highest audit id ever assigned, pruned rows included, 0 before the first; a tail that sees it drop knows the log was restored. */
128
+ /** The highest audit id ever assigned, pruned rows included, 0 before the first; a tail that sees it drop knows the
129
+ * log was restored. */
117
130
  auditHighId(): Promise<number>;
118
131
  }
119
132
  /** One ambient load: the pins, the `recentNeeded` newest rows `admit` keeps, and the prompt-recall candidates. */
@@ -127,22 +140,27 @@ export interface AmbientCandidateRequest {
127
140
  /** The reads behind getContext beyond the base `continuity`: its fallback handoff, candidate rows and ambient tallies.
128
141
  * getContext with a query under an embedding provider needs `vectors` too, and answers 501 without it. */
129
142
  export interface ContextReads {
130
- /** The newest handoff of the last `maxAgeMs` that is its session's highest id, has no outcome or a partial or failed one, and
131
- * passes recall's default scope deny, as `loadLatestHandoff` with `unfinishedOnly` and `scopeFilter: 'default-deny'`. Rejects an empty tenant id. */
143
+ /** The newest handoff of the last `maxAgeMs` that is its session's highest id, has no outcome or a partial or failed
144
+ * one, and passes recall's default scope deny, as `loadLatestHandoff` with `unfinishedOnly` and `scopeFilter:
145
+ * 'default-deny'`. Rejects an empty tenant id. */
132
146
  unfinishedHandoff(tenantId: string, maxAgeMs: number, key: ContinuityKey | null): Promise<SessionHandoff | null>;
133
- /** As `loadAmbientCandidates`; `recall` searches with the query `rarestFtsQuery` builds from FTS document counts over every tenant's rows,
134
- * and finds nothing when no term is indexed. Core keeps only `tenantId`'s rows that its own admit passes, whatever the store returns. */
147
+ /** As `loadAmbientCandidates`; `recall` searches with the query `rarestFtsQuery` builds from FTS document counts over
148
+ * every tenant's rows, and finds nothing when no term is indexed. Core keeps only `tenantId`'s rows that its own
149
+ * admit passes, whatever the store returns. */
135
150
  ambientCandidates(tenantId: string, request: AmbientCandidateRequest): Promise<AmbientLoadResult>;
136
- /** As `loadContextCandidates`: at most `filter.cap` live rows, pins and then the least decayed first, returned by created, then id. */
151
+ /** As `loadContextCandidates`: at most `filter.cap` live rows, pins and then the least decayed first, returned by
152
+ * created, then id. */
137
153
  contextCandidates(tenantId: string, filter: ContextCandidateFilter): Promise<MemoryEntry[]>;
138
- /** As `loadAmbientTallies`: one aggregate over the live, unarchived rows `filter` admits, less other projects' secret-tagged rows. */
154
+ /** As `loadAmbientTallies`: one aggregate over the live, unarchived
155
+ * rows `filter` admits, less other projects' secret-tagged rows. */
139
156
  ambientTallies(tenantId: string, filter: AmbientStoreFilter): Promise<AmbientTallies>;
140
157
  }
141
158
  export interface EntryWrite {
142
159
  readonly entry: MemoryEntry;
143
160
  readonly actor: string;
144
161
  }
145
- /** Who acts on which of a tenant's rows; `ownScope` is the caller's personal scope, so every other personal row is out of reach. */
162
+ /** Who acts on which of a tenant's rows; `ownScope` is the caller's
163
+ * personal scope, so every other personal row is out of reach. */
146
164
  export interface EntryTarget {
147
165
  readonly tenantId: string;
148
166
  readonly actor: string;
@@ -162,26 +180,33 @@ export interface EntryRemoval extends EntryTarget {
162
180
  export interface RawArchive extends EntryRemoval {
163
181
  readonly reason: string;
164
182
  }
165
- /** The memory-row writes behind remember, outcome, supersede, archive and forget. Each writes its audit rows in the write's own transaction,
166
- * a child row's change marks its level 2 or 3 summary parent dirty (one summary_marked_dirty row on the flip), and the schema's rules hold. */
183
+ /** The memory-row writes behind remember, outcome, supersede, archive and forget. Each writes its audit rows in the
184
+ * write's own transaction, a child row's change marks its level 2 or 3 summary parent dirty (one summary_marked_dirty
185
+ * row on the flip), and the schema's rules hold. */
167
186
  export interface EntryWrites {
168
- /** Upserts the row, its full-text row and one remember row ({kind, scope}) in the entry's tenant; an id held by another tenant rejects with ConflictError.
169
- * Content from a tenant that tombstoned it rejects with RejectedValueError and writes one reject_refusal row after the rollback, best effort. */
187
+ /** Upserts the row, its full-text row and one remember row ({kind, scope}) in the entry's tenant; an id held by
188
+ * another tenant rejects with ConflictError. Content from a tenant that tombstoned it rejects with RejectedValueError
189
+ * and writes one reject_refusal row after the rollback, best effort. */
170
190
  writeEntry(write: EntryWrite): Promise<void>;
171
- /** Per id in order, a row of the tenant within reach gets `entryAfterOutcome` (rewrite as writeEntry does) and one outcome row ({good}); other ids skipped.
172
- * Each read holds the row lock to commit (SELECT ... FOR UPDATE), so a concurrent supersede is not undone. Resolves to the ids applied, repeats kept. */
191
+ /** Per id in order, a row of the tenant within reach gets `entryAfterOutcome` (rewrite as writeEntry does) and one
192
+ * outcome row ({good}); other ids skipped. Each read holds the row lock to commit (SELECT ... FOR UPDATE), so a
193
+ * concurrent supersede is not undone. Resolves to the ids applied, repeats kept. */
173
194
  applyOutcome(outcome: OutcomeWrite): Promise<string[]>;
174
- /** Sets the old row's superseded_by if it is within reach and not yet superseded (both checked in the transaction), else rejects NotFoundError or
175
- * ConflictError. Then writes the successor as writeEntry does and one supersede row ({newId}), all or nothing. */
195
+ /** Sets the old row's superseded_by if it is within reach and not yet superseded (both checked in the transaction),
196
+ * else rejects NotFoundError or ConflictError. Then writes the successor as writeEntry does and one supersede row
197
+ * ({newId}), all or nothing. */
176
198
  supersede(write: SupersedeWrite): Promise<void>;
177
- /** Moves a raw row to raw_archive (metadata only, no content), deletes it and its full-text row and writes one archive_raw row ({reason});
178
- * resolves to the archived_at written. A row out of reach rejects with NotFoundError `memory not found: <id>`, any other kind with BadRequestError. */
199
+ /** Moves a raw row to raw_archive (metadata only, no content), deletes it and its full-text row and writes one
200
+ * archive_raw row ({reason}); resolves to the archived_at written. A row out of reach rejects with NotFoundError
201
+ * `memory not found: <id>`, any other kind with BadRequestError. */
179
202
  archiveRaw(archive: RawArchive): Promise<string>;
180
- /** Deletes the row and its full-text row and writes one forget row; a raw row rejects, being append-only. A row out of reach rejects with
181
- * NotFoundError `memory not found: <id>`. Archive and forget then add one to the store-wide forgotten counter, best effort. */
203
+ /** Deletes the row and its full-text row and writes one forget row; a raw row rejects, being append-only. A row out
204
+ * of reach rejects with NotFoundError `memory not found: <id>`. Archive and forget then add one to the store-wide
205
+ * forgotten counter, best effort. */
182
206
  forget(removal: EntryRemoval): Promise<void>;
183
207
  }
184
- /** A key to insert and the actor and metadata of its auth_create row, whose tenant and target are the key's. Neither holds the plaintext. */
208
+ /** A key to insert and the actor and metadata of its auth_create row, whose tenant and target are the key's. Neither
209
+ * holds the plaintext. */
185
210
  export interface KeyMint {
186
211
  readonly key: NewApiKey;
187
212
  readonly actor: string;
@@ -200,15 +225,21 @@ export interface KeyListQuery extends Omit<ListApiKeysOpts, 'tenantId'> {
200
225
  readonly tenantId: string;
201
226
  }
202
227
  export interface KeyWrites {
203
- /** Inserts the key and appends its auth_create row in one transaction; with either one failing, neither is written. A key id taken in any tenant
204
- * rejects, since keys are looked up by id alone. */
228
+ /** Inserts the key and appends its auth_create row in one transaction; with either one failing, neither is written. A
229
+ * key id taken in any tenant rejects, since keys are looked up by id alone. */
205
230
  createApiKey(mint: KeyMint): Promise<void>;
206
- /** Serialized per (tenant, owner) before the count (BEGIN IMMEDIATE / pg_advisory_xact_lock): revoke the owner's oldest live keys to `perSubject - 1`,
207
- * then insert the key; append auth_revoke `{ replacedBy }` per revoked key, then auth_create. Live: unrevoked and not expired (NaN counts as expired). */
231
+ /** Serialized per (tenant, owner) before the count (BEGIN IMMEDIATE / pg_advisory_xact_lock): revoke the owner's
232
+ * oldest live keys to `perSubject - 1`, then insert the key; append auth_revoke `{ replacedBy }` per revoked key,
233
+ * then auth_create. Live: unrevoked and not expired (NaN counts as expired). */
208
234
  createSelfApiKey(mint: SelfKeyMint): Promise<string[]>;
209
- /** As `listApiKeyRows`: newest inserted first, each with its scope grants; `active` drops revoked rows and an expires_at not above now's toISOString. */
235
+ /** As `listApiKeyRows`: newest inserted first, each with its scope grants; `active` drops revoked rows and an
236
+ * expires_at not above now's toISOString. */
210
237
  listApiKeys(query: KeyListQuery): Promise<ApiKeyListRow[]>;
211
238
  }
239
+ export interface KeyGrants {
240
+ /** Checks the key under the write lock; the change and its auth_grant or auth_ungrant row commit together. */
241
+ changeScopeGrant(change: ScopeGrantChange): Promise<void>;
242
+ }
212
243
  /** A claim to save and the memory row that mirrors it into recall: core builds it with
213
244
  * `predictionMirror` in the tenant the save names, so every store keeps the same row. */
214
245
  export interface PredictionSave extends SavePredictionOpts {
@@ -235,23 +266,27 @@ export type PredictionListQuery = PredictionFilter & {
235
266
  /** The reads and writes behind the predictions routes. createdAt and closedAt are the store's
236
267
  * own clock at the write, as `toISOString` gives it, since the list orders createdAt as text. */
237
268
  export interface Predictions {
238
- /** In one transaction: writes `mirror` as `EntryWrites.writeEntry` does, inserts the open row under the next id, and appends one predict_create row
239
- * ({prediction_id, class_tag, has_estimate, target_date}) ahead of the mirror's remember row. Resolves to the row saved. */
269
+ /** In one transaction: writes `mirror` as `EntryWrites.writeEntry` does, inserts the open row under the next id, and
270
+ * appends one predict_create row ({prediction_id, class_tag, has_estimate, target_date}) ahead of the mirror's
271
+ * remember row. Resolves to the row saved. */
240
272
  savePrediction(tenantId: string, input: PredictionSave, actor: string): Promise<Prediction>;
241
- /** Closes the tenant's open row and appends one predict_close row ({prediction_id, closure_state, has_actual}) in one transaction; the mirror stays as saved.
242
- * A missing or other-tenant id rejects with NotFoundError, an already-closed row with BadRequestError; neither writes anything. */
273
+ /** Closes the tenant's open row and appends one predict_close row ({prediction_id, closure_state, has_actual}) in one
274
+ * transaction; the mirror stays as saved. A missing or other-tenant id rejects with NotFoundError, an already-closed
275
+ * row with BadRequestError; neither writes anything. */
243
276
  closePrediction(tenantId: string, id: number, close: PredictionClose, actor: string): Promise<Prediction>;
244
277
  /** The tenant's row; null for a missing id or another tenant's. No audit row. */
245
278
  predictionById(tenantId: string, id: number): Promise<Prediction | null>;
246
- /** At most `limit` rows, newest first: by createdAt compared as text in byte order, then by id, both descending, so the order is total.
247
- * `after` keeps only the rows below its (createdAt, id) pair in that order. No audit row. */
279
+ /** At most `limit` rows, newest first: by createdAt compared as text in byte order, then by id, both descending, so
280
+ * the order is total. `after` keeps only the rows below its (createdAt, id) pair in that order. No audit row. */
248
281
  listPredictions(tenantId: string, query: PredictionListQuery): Promise<Prediction[]>;
249
- /** `predictionBaserateOf` over the tenant's closed (not closed-unknown) rows of the class with an estimate and an actual, in ascending id order (its
250
- * float sums depend on it). Then appends one predict_baserate row ({class_tag, n_closed}), also for a class with no such row. */
282
+ /** `predictionBaserateOf` over the tenant's closed (not closed-unknown) rows of the class with an estimate and an
283
+ * actual, in ascending id order (its float sums depend on it). Then appends one predict_baserate row ({class_tag,
284
+ * n_closed}), also for a class with no such row. */
251
285
  predictionBaserate(tenantId: string, classTag: string, actor: string): Promise<PredictionBaserate>;
252
286
  }
253
- /** Which of a tenant's rows of one kind a list reads: every status when `status` is unset, every value of the kind's one filter column (customer, repo)
254
- * when `filter` is. Neither is ever empty; a kind with no filter column ignores `filter`. */
287
+ /** Which of a tenant's rows of one kind a list reads: every status when `status` is
288
+ * unset, every value of the kind's one filter column (customer, repo) when `filter`
289
+ * is. Neither is ever empty; a kind with no filter column ignores `filter`. */
255
290
  export interface ObjectListQuery<K extends ObjectKind = ObjectKind> {
256
291
  readonly status?: ObjectByKind[K]['status'];
257
292
  readonly filter?: string;
@@ -275,11 +310,13 @@ export interface ObjectSave<K extends SavableKind = SavableKind> {
275
310
  /** Stored on a successor of a versioned kind only; a first version and a decision keep none. */
276
311
  readonly changeSummary?: string;
277
312
  readonly actor: string;
278
- /** The new row's createdAt and the replaced row's supersededAt: core's clock, as `toISOString` gives it, since the list orders createdAt as text. */
313
+ /** The new row's createdAt and the replaced row's supersededAt: core's clock, as `toISOString` gives it, since the
314
+ * list orders createdAt as text. */
279
315
  readonly at: string;
280
316
  }
281
- /** Why a save or close wrote nothing: the tenant holds no such row (`missing`), the row's `status` is not one the write may start from, another writer moved it
282
- * between the check and the write (`raced`), or the written row could not be read back (`vanished`). Core turns each into its own error text. */
317
+ /** Why a save or close wrote nothing: the tenant holds no such row (`missing`), the row's `status` is not one the write
318
+ * may start from, another writer moved it between the check and the write (`raced`), or the written row could not be
319
+ * read back (`vanished`). Core turns each into its own error text. */
283
320
  export type ObjectRefusal = {
284
321
  readonly refused: 'missing';
285
322
  } | {
@@ -315,42 +352,54 @@ export interface IncidentResolve {
315
352
  /** The row's resolvedAt: core's clock, as `toISOString` gives it. */
316
353
  readonly at: string;
317
354
  }
318
- /** `asOf` is an instant as `toISOString` gives it, so it compares as text against validFrom and validTo; `name` keeps one policyName, and may be empty. */
355
+ /** `asOf` is an instant as `toISOString` gives it, so it compares as text against validFrom and validTo; `name` keeps
356
+ * one policyName, and may be empty. */
319
357
  export interface PoliciesInForceQuery {
320
358
  readonly asOf: string;
321
359
  readonly name?: string;
322
360
  readonly limit: number;
323
361
  }
324
- /** The reads and writes behind the typed-object routes. An audit row names the object under the kind's id key (decision_id, incident_id, ...).
325
- * A row belongs to one tenant: another tenant's id reads as missing in every method. */
362
+ /** The reads and writes behind the typed-object routes. An audit row names the
363
+ * object under the kind's id key (decision_id, incident_id, ...). A row
364
+ * belongs to one tenant: another tenant's id reads as missing in every method. */
326
365
  export interface Objects {
327
- /** At most `limit` rows of the kind, newest first: by createdAt compared as text in byte order, then by id, both descending, so the order is total.
328
- * `after` keeps only the rows below its (createdAt, id) pair in that order. No audit row. */
366
+ /** At most `limit` rows of the kind, newest first: by createdAt compared as text
367
+ * in byte order, then by id, both descending, so the order is total. `after`
368
+ * keeps only the rows below its (createdAt, id) pair in that order. No audit row. */
329
369
  listObjects<K extends ObjectKind>(tenantId: string, kind: K, query: ObjectListQuery<K>): Promise<ObjectByKind[K][]>;
330
370
  /** The tenant's row; null for a missing id or another tenant's. No audit row. */
331
371
  objectById<K extends ObjectKind>(tenantId: string, kind: K, id: number): Promise<ObjectByKind[K] | null>;
332
- /** In one transaction: moves the tenant's row from a `close.from` status to closed at `close.at` and appends one <kind>_close row; a refusal writes nothing.
333
- * After the commit a kind the graph reads has its graph rows dropped and its mirror queued for a rebuild; a failure there is logged, never thrown. */
372
+ /** In one transaction: moves the tenant's row from a `close.from` status to closed at `close.at` and appends one
373
+ * <kind>_close row; a refusal writes nothing. After the commit a kind the graph reads has its graph rows dropped and
374
+ * its mirror queued for a rebuild; a failure there is logged, never thrown. */
334
375
  closeObject<K extends ObjectKind>(tenantId: string, kind: K, id: number, close: ObjectClose<K>): Promise<ObjectByKind[K] | ObjectRefusal>;
335
- /** In one transaction, in order: writes `mirror` as `EntryWrites.writeEntry` does; inserts the row active (version 1, or the replaced row's plus one);
336
- * with `supersedesId`, supersedes that row; appends the supersede and create rows. A refusal (`missing`, `status`, `raced`, `vanished`) writes nothing. */
376
+ /** In one transaction, in order: writes `mirror` as `EntryWrites.writeEntry` does; inserts the row active (version 1,
377
+ * or the replaced row's plus one); with `supersedesId`, supersedes that row; appends the supersede and create rows. A
378
+ * refusal (`missing`, `status`, `raced`, `vanished`) writes nothing. */
337
379
  saveObject<K extends SavableKind>(tenantId: string, kind: K, save: ObjectSave<K>): Promise<ObjectByKind[K] | ObjectRefusal>;
338
- /** In one transaction, in order: writes `mirror` as `EntryWrites.writeEntry` does; checks each linked id is a memory of the tenant; inserts the row open
339
- * under the next id; appends the incident_open row, then the mirror's remember row. A refusal leaves no mirror, row or audit row. */
380
+ /** In one transaction, in order: writes `mirror` as `EntryWrites.writeEntry` does; checks each linked id is a memory
381
+ * of the tenant; inserts the row open under the next id; appends the incident_open row, then the mirror's remember
382
+ * row. A refusal leaves no mirror, row or audit row. */
340
383
  openIncident(tenantId: string, open: IncidentOpen): Promise<Incident | IncidentOpenRefusal>;
341
- /** In one transaction: moves the tenant's incident from open to resolved with `resolve.text` and `resolve.at`, then appends one incident_resolve row.
342
- * A refusal (`missing`, `status`, or `vanished`) writes nothing. */
384
+ /** In one transaction: moves the tenant's incident from open to resolved with `resolve.text` and `resolve.at`, then
385
+ * appends one incident_resolve row. A refusal (`missing`, `status`, or `vanished`) writes nothing. */
343
386
  resolveIncident(tenantId: string, id: number, resolve: IncidentResolve): Promise<Incident | ObjectRefusal>;
344
- /** Policies in force at `asOf` (max `limit`): not closed, validFrom <= asOf < validTo (or unset), and active or superseded by a row whose validFrom is
345
- * after asOf. Newest validFrom first, compared as text in byte order, then larger id. No audit row. */
387
+ /** Policies in force at `asOf` (max `limit`): not closed, validFrom <= asOf < validTo (or unset), and active or
388
+ * superseded by a row whose validFrom is after asOf. Newest validFrom first, compared as text in byte order, then
389
+ * larger id. No audit row. */
346
390
  policiesInForce(tenantId: string, query: PoliciesInForceQuery): Promise<Policy[]>;
347
- /** At most `limit` of the tenant's active skills, by skillName ascending compared as text in byte order, then by id ascending. No audit row. */
391
+ /** At most `limit` of the tenant's active skills, by skillName ascending compared as text in byte order, then by id
392
+ * ascending. No audit row. */
348
393
  activeSkillsByName(tenantId: string, limit: number): Promise<Skill[]>;
349
- /** At most `limit` of the tenant's memories carrying `tag` (tag list as JSON, matched between double quotes, unescaped, ASCII case-folded) whose source
350
- * is not project_brief and whose scope recall admits with no scope asked, newest first by created (text, byte order) then id. No audit row. */
394
+ /** At most `limit` of the tenant's memories carrying `tag` (tag list as JSON, matched between double quotes,
395
+ * unescaped, ASCII case-folded) whose source is not project_brief and whose scope recall admits with no scope asked,
396
+ * newest first by created (text, byte order) then id. No audit row. */
351
397
  briefReceipts(tenantId: string, tag: string, limit: number): Promise<BriefReceipt[]>;
398
+ /** The id of the tenant's newest `kind` row in `status` that `memoryId` mirrors, or null. No audit row. */
399
+ objectIdByMemory<K extends ObjectKind>(tenantId: string, kind: K, status: ObjectByKind[K]['status'], memoryId: string): Promise<number | null>;
352
400
  }
353
- /** One session's unsuperseded raw rows inside a tenant; `origins` keeps those projects' rows and rows of no project, unset keeps every origin. */
401
+ /** One session's unsuperseded raw rows inside a tenant; `origins` keeps those projects' rows and rows of no project,
402
+ * unset keeps every origin. */
354
403
  export interface SessionRawQuery {
355
404
  readonly tenantId: string;
356
405
  readonly sessionId: string;
@@ -371,22 +420,26 @@ export type DescendantOrigin = Pick<MemoryEntry, 'scope' | 'origin_project'>;
371
420
  export interface DescendantPage {
372
421
  /** How many rows the caller reads whole, counted from the first row of the first level. */
373
422
  readonly rows: number;
374
- /** `DescendantWalk.admit` for a row under the summary, judged on these two fields alone; the two must agree on every such row. */
423
+ /** `DescendantWalk.admit` for a row under the summary, judged on
424
+ * these two fields alone; the two must agree on every such row. */
375
425
  readonly admit: (row: DescendantOrigin) => boolean;
376
426
  }
377
427
  export interface DescendantWalk {
378
428
  /** Levels to read under the summary. */
379
429
  readonly depth: number;
380
- /** Asked of the summary, then of each child read: a refused row is left out of the answer and nothing under it is read. */
430
+ /** Asked of the summary, then of each child read: a refused
431
+ * row is left out of the answer and nothing under it is read. */
381
432
  readonly admit: (row: MemoryEntry) => boolean;
382
- /** Set by a caller that shows only the first rows. A store may ignore it; one that honours it returns just those rows and counts every level in `sizes`. */
433
+ /** Set by a caller that shows only the first rows. A store may ignore it; one that honours it returns just those rows
434
+ * and counts every level in `sizes`. */
383
435
  readonly page?: DescendantPage;
384
436
  }
385
437
  export interface SummaryDescendants {
386
438
  readonly summary: MemoryEntry;
387
439
  /** The admitted rows of each level, the summary's own children first; a level with none ends the list. */
388
440
  readonly levels: MemoryEntry[][];
389
- /** Set only by a store that honoured `walk.page`: how many rows each level admits, while `levels` holds just the page, in the same order. */
441
+ /** Set only by a store that honoured `walk.page`: how many rows each level admits, while `levels` holds just the
442
+ * page, in the same order. */
390
443
  readonly sizes?: readonly number[];
391
444
  }
392
445
  /** The reads behind session assembly and summary drill-down. None writes an audit row. */
@@ -397,14 +450,16 @@ export interface DagReads {
397
450
  /** How many rows the session holds with no cap, under the scope rule `passesScopeFilterForRecall`
398
451
  * applies, so the count never tells of a row the caller could not read. */
399
452
  sessionRawCount(query: SessionRawCount): Promise<number>;
400
- /** The tenant's row `id` and up to `walk.depth` levels under it, read in one call so no write of this process lands between levels; null if no such row.
401
- * Each level lists the children of the one above, parent by parent, children by created then id ascending; a row is listed once, at its first level. */
453
+ /** The tenant's row `id` and up to `walk.depth` levels under it, read in one call so no write of this process lands
454
+ * between levels; null if no such row. Each level lists the children of the one above, parent by parent, children by
455
+ * created then id ascending; a row is listed once, at its first level. */
402
456
  summaryWithDescendants(tenantId: string, id: string, walk: DescendantWalk): Promise<SummaryDescendants | null>;
403
457
  }
404
458
  /** The read behind the audit list. It writes no audit row. */
405
459
  export interface AuditLog {
406
- /** One tenant's rows newest first, by ts then id descending, narrowed by `op` and by `since` (ts at or after it); `limit` is clamped to 1..10001 and
407
- * defaults to 100, and `after` resumes below the (ts, id) position a page ended on. */
460
+ /** One tenant's rows newest first, by ts then id descending, narrowed by `op` and
461
+ * by `since` (ts at or after it); `limit` is clamped to 1..10001 and defaults to
462
+ * 100, and `after` resumes below the (ts, id) position a page ended on. */
408
463
  listAuditEvents(query: QueryAuditOpts): Promise<AuditEvent[]>;
409
464
  }
410
465
  /** What GET /ready asks of a store. */
@@ -418,10 +473,11 @@ export type LastRecallWrites = RecallWrites & Required<Pick<RecallWrites, 'stren
418
473
  export interface LastRecall {
419
474
  /** entryWrites.applyOutcome, then a link from recall trace `traceId` to the ids applied; resolves to those ids. */
420
475
  applyTracedOutcome(outcome: OutcomeWrite, traceId: number): Promise<string[]>;
421
- /** applyTracedOutcome on the ids and trace of the last recall, read together so an outcome never pairs them with an older trace. */
476
+ /** applyTracedOutcome on the ids and trace of the last recall, read
477
+ * together so an outcome never pairs them with an older trace. */
422
478
  applyOutcomeToLast(target: EntryTarget, good: boolean): Promise<string[]>;
423
- /** finishRecall, then the ids this store lacks strengthened under `globalRoot`, then the ids and their trace saved as the last
424
- * recall in one write; resolves to the trace id, null when none was asked or its write failed. */
479
+ /** finishRecall, then the ids this store lacks strengthened under `globalRoot`, then the ids and their trace saved as
480
+ * the last recall in one write; resolves to the trace id, null when none was asked or its write failed. */
425
481
  finishRecall(writes: LastRecallWrites, globalRoot: string | undefined): Promise<number | null>;
426
482
  }
427
483
  /** Which of a tenant's quarantine records a list reads; `limit` is 100 when unset. */
@@ -434,7 +490,8 @@ export interface QuarantineListQuery {
434
490
  export interface QuarantinedMemory extends QuarantineRow {
435
491
  readonly content: string | null;
436
492
  }
437
- /** Why a decision wrote nothing: the tenant holds no record for the id (another tenant's id reads the same), or the record was decided before. */
493
+ /** Why a decision wrote nothing: the tenant holds no record for the id (another tenant's id reads the same), or the
494
+ * record was decided before. */
438
495
  export type QuarantineRefusal = {
439
496
  readonly outcome: 'not_quarantined';
440
497
  } | {
@@ -450,23 +507,29 @@ export type QuarantineApproval = {
450
507
  export type QuarantineRejection = {
451
508
  readonly outcome: 'rejected';
452
509
  } | QuarantineRefusal;
453
- /** The review queue behind the quarantine routes. A refusal is a resolved value, never a rejection, and writes nothing. */
510
+ /** The review queue behind the quarantine routes. A refusal is
511
+ * a resolved value, never a rejection, and writes nothing. */
454
512
  export interface Quarantine {
455
- /** At most `limit` of the tenant's records, newest first (quarantinedAt as text in byte order, then memoryId, both descending); `after` keeps only
456
- * records below its pair. 'pending' leaves out a record whose memory row is gone; every other status keeps it, with null content. No audit row. */
513
+ /** At most `limit` of the tenant's records, newest first (quarantinedAt as text in byte order, then memoryId, both
514
+ * descending); `after` keeps only records below its pair. 'pending' leaves out a record whose memory row is gone;
515
+ * every other status keeps it, with null content. No audit row. */
457
516
  listQuarantined(tenantId: string, query: QuarantineListQuery): Promise<QuarantinedMemory[]>;
458
- /** In one transaction, all or none: restores the memory's originalScope if it is in the tenant and still under `quarantine:private:...`;
459
- * marks the record approved (decidedAt from the store's clock, decidedBy `actor`); appends one quarantine_approve row ({originalScope}). */
517
+ /** In one transaction, all or none: restores the memory's originalScope if it is in the tenant and still under
518
+ * `quarantine:private:...`; marks the record approved (decidedAt from the store's clock, decidedBy `actor`); appends
519
+ * one quarantine_approve row ({originalScope}). */
460
520
  approveQuarantined(tenantId: string, id: string, actor: string): Promise<QuarantineApproval>;
461
- /** In one transaction, both or neither: marks the record rejected (decidedAt/decidedBy as approve) and appends one quarantine_reject row.
462
- * The memory row is not touched, so it stays under its quarantine scope and a record with no memory row can still be rejected. */
521
+ /** In one transaction, both or neither: marks the record rejected (decidedAt/decidedBy as approve) and appends one
522
+ * quarantine_reject row. The memory row is not touched, so it stays under its quarantine scope and a record with no
523
+ * memory row can still be rejected. */
463
524
  rejectQuarantined(tenantId: string, id: string, actor: string): Promise<QuarantineRejection>;
464
525
  }
465
- /** What one graph view reads. `limit` is a positive integer capping each read on its own; newest means createdAt, then id, both descending. A row shows
466
- * when it cites no memory, or its memory is in the tenant with a null scope or one `canReadScope(reader, scope)` admits; no `reader` shows every row. */
526
+ /** What one graph view reads. `limit` is a positive integer capping each read on its own; newest means createdAt, then
527
+ * id, both descending. A row shows when it cites no memory, or its memory is in the tenant with a null scope or one
528
+ * `canReadScope(reader, scope)` admits; no `reader` shows every row. */
467
529
  export interface GraphViewQuery {
468
- /** Unset reads the whole graph. Set, the start entities are the first `limit` of exactly this name (lowest id first) that show; none left answers empty.
469
- * Per 400 start ids, the newest `limit` relations with an end among them join in, each adding its other end to the ids held, until `limit` ids are held. */
530
+ /** Unset reads the whole graph. Set, the start entities are the first `limit` of exactly this name (lowest id first)
531
+ * that show; none left answers empty. Per 400 start ids, the newest `limit` relations with an end among them join in,
532
+ * each adding its other end to the ids held, until `limit` ids are held. */
470
533
  readonly entity?: string;
471
534
  readonly limit: number;
472
535
  readonly reader?: ScopeActor;
@@ -475,135 +538,38 @@ export interface GraphRows {
475
538
  readonly entities: Entity[];
476
539
  /** May name an entity `entities` lacks; the caller drops such a relation. */
477
540
  readonly relations: Relation[];
478
- /** Judged before a row is hidden: true when start entities, joined relations, returned relations or (whole graph) returned entities came back `limit` long,
479
- * or the walk held `limit` ids with a relation still to join. */
541
+ /** Judged before a row is hidden: true when start entities, joined relations, returned relations or (whole graph)
542
+ * returned entities came back `limit` long, or the walk held `limit` ids with a relation still to join. */
480
543
  readonly truncated: boolean;
481
544
  }
482
545
  /** The rows behind GET /v1/graph. */
483
546
  export interface GraphReads {
484
- /** Every read from one snapshot, then rows that do not show are dropped. Whole graph: the tenant's newest `limit` entities and relations.
485
- * From a name: the entities of the ids held (id ascending, 400 at a time) and the newest `limit` relations with both ends among those ids. */
547
+ /** Every read from one snapshot, then rows that do not show are dropped. Whole graph: the tenant's newest `limit`
548
+ * entities and relations. From a name: the entities of the ids held (id ascending, 400 at a time) and the newest
549
+ * `limit` relations with both ends among those ids. */
486
550
  graphRows(tenantId: string, query: GraphViewQuery): Promise<GraphRows>;
487
551
  }
488
- /** The source event a connector's write answers, by the source's own key. The store logs each key once per connector, across every tenant. */
489
- export type ConnectorEvent = {
490
- readonly connector: 'slack';
491
- readonly eventId: string;
492
- } | {
493
- readonly connector: 'github';
494
- readonly idempotencyKey: string;
495
- readonly deliveryId: string;
496
- readonly eventName: string;
497
- };
498
- /** An entry a connector brings in. `quarantine` is the review record of flagged content, whose entry already carries its quarantine scope. */
499
- export interface ConnectorWrite extends EntryWrite {
500
- readonly event?: ConnectorEvent;
501
- readonly quarantine?: {
502
- readonly originalScope: string | null;
503
- readonly reason: string;
504
- };
505
- }
506
- /** 'duplicate': the event's key was logged before; `memoryId` is the id its log row holds, null for an event logged with no memory. */
507
- export type ConnectorWriteOutcome = {
508
- readonly outcome: 'written';
509
- } | {
510
- readonly outcome: 'duplicate';
511
- readonly memoryId: string | null;
512
- };
513
- export interface ConnectorArchive extends RawArchive {
514
- readonly event: ConnectorEvent;
515
- }
516
- /** A connector's writes with the rows that must commit with them: the event log row
517
- * that turns a redelivery into a no-op, and the quarantine record of flagged content. */
518
- export interface ConnectorWrites {
519
- /** entryWrites.writeEntry plus, in its transaction: with `quarantine`, one pending record and quarantine row; with `event`, one log row. All commit or none.
520
- * A key logged before resolves 'duplicate' and stores nothing (never a rejection); every other refusal is writeEntry's own, decided first. */
521
- writeConnectorEntry(write: ConnectorWrite): Promise<ConnectorWriteOutcome>;
522
- /** entryWrites.archiveRaw plus, in its transaction, one log row for `event` naming the archived id, so a redelivery finds it logged; a failed log write
523
- * undoes the archive. A key logged before keeps its row and does not stop the archive. Reach and every rejection are archiveRaw's own. */
524
- archiveConnectorEntry(archive: ConnectorArchive): Promise<string>;
525
- }
526
- /** What the event log holds for one event's key; `memoryId` is null for an event logged with no memory. */
527
- export type ConnectorEventRecord = {
528
- readonly seen: false;
529
- } | {
530
- readonly seen: true;
531
- readonly memoryId: string | null;
532
- };
533
- export interface DeletionLookup {
534
- readonly event: ConnectorEvent;
535
- readonly artifactRef: string;
536
- readonly tenantId: string;
537
- }
538
- /** `memoryId` is null when the tenant holds no raw row for the artifact. */
539
- export type DeletionTarget = {
540
- readonly seen: true;
541
- } | {
542
- readonly seen: false;
543
- readonly memoryId: string | null;
544
- };
545
- export interface ArtifactArchive {
546
- readonly tenantId: string;
547
- readonly actor: string;
548
- readonly artifactRef: string;
549
- readonly reason: string;
550
- readonly event: Extract<ConnectorEvent, {
551
- readonly connector: 'github';
552
- }>;
553
- }
554
- /** One payload a webhook could not use, already redacted, for the dead-letter queue of its connector. */
555
- export type ConnectorDeadLetter = ({
556
- readonly connector: 'slack';
557
- } & SlackDlqInsert) | ({
558
- readonly connector: 'github';
559
- } & GitHubDlqInsert);
560
- /** What a connector delivery reads and writes beside connectorWrites: the event log,
561
- * tenant routing, the dead-letter queue and the archive of a deleted artifact. */
562
- export interface ConnectorEvents {
563
- /** The log row of the event's key, in its connector's own key space. */
564
- eventRecord(event: ConnectorEvent): Promise<ConnectorEventRecord>;
565
- /** Logs an event that stored no memory, so its redelivery finds it. A key logged before keeps its row, the memory id it names included. */
566
- markEventSeen(event: ConnectorEvent): Promise<void>;
567
- /** Both reads on one snapshot: an event logged before answers `seen`, else the raw row the
568
- * tenant holds for the artifact. Another tenant's row under the same ref is never returned. */
569
- deletionTarget(lookup: DeletionLookup): Promise<DeletionTarget>;
570
- /** A logged event answers `duplicate` and changes nothing. Else one transaction archives every raw row of the artifact (archive_raw row each, under `actor`)
571
- * and logs the event naming the first, or no memory if none; one failed archive undoes all and the log row. No reach check. */
572
- archiveDeletedArtifact(archive: ArtifactArchive): Promise<{
573
- readonly duplicate: boolean;
574
- readonly archived: number;
575
- }>;
576
- /** The tenant a Slack team is registered to, or how many workspaces are registered when it is not. */
577
- slackTeamRoute(teamId: string): Promise<SlackTeamRoute>;
578
- /** The tenant of the installation, or of the repository when no installation is named, with the size of both routing tables. */
579
- githubRouting(query: {
580
- readonly installationId?: string | null;
581
- readonly repoFullName?: string | null;
582
- }): Promise<GitHubRouting>;
583
- /** Appends the row and answers its id. */
584
- parkDeadLetter(letter: ConnectorDeadLetter): Promise<number>;
585
- }
552
+ export type { ConnectorEvent, ConnectorWrite, ConnectorWriteOutcome, ConnectorArchive, ConnectorWrites, ConnectorEventRecord, DeletionLookup, DeletionTarget, ArtifactArchive, ConnectorDeadLetter, ConnectorEvents, } from './connectors/event-log.js';
586
553
  /** `storedVectors` with no number[] copy, for a store that holds vectors as Float32 bytes. */
587
554
  export interface VectorViews {
588
555
  /** The same ids and values as `VectorReads.storedVectors`, each value a Float32 view. */
589
556
  storedVectorViews(ids: readonly string[]): Promise<Map<string, Float32Array>>;
590
557
  }
591
- /** The store is hippo.db and its files under `hippoRoot`, so a path that reopens them by folder (sleep, its child process, the global store) may run. */
592
- export interface LocalFiles {
593
- readonly hippoRoot: string;
594
- }
558
+ export type { AgentImport, Consolidation, ContainerTx, ImportTarget, LocalFiles } from './port/local-files.js';
595
559
  /** The reads and writes behind the memory-quality audit, its repair and audit-log retention. */
596
560
  export interface AuditMaintenance {
597
561
  /** Every memory of the tenant, in `loadAllEntries` order. */
598
562
  tenantEntries(tenantId: string): Promise<MemoryEntry[]>;
599
563
  /** The ids of every memory a typed object row names, in any tenant; an automatic pass never deletes one. */
600
564
  objectBackedIds(): Promise<Set<string>>;
601
- /** Deletes each removal's row with its own forget row, leaving a pinned, raw, kept or object-backing row; resolves to the ids deleted. */
565
+ /** Deletes each removal's row with its own forget row, leaving a pinned, raw, kept or object-backing row; resolves to
566
+ * the ids deleted. */
602
567
  deleteAutomatically(removals: readonly {
603
568
  readonly id: string;
604
569
  readonly reason: string;
605
570
  }[], actor: string): Promise<string[]>;
606
- /** Counts (dryRun) or deletes the tenant's audit rows before `cutoff`, then appends one audit_prune row; resolves to the count. */
571
+ /** Counts (dryRun) or deletes the tenant's audit rows before
572
+ * `cutoff`, then appends one audit_prune row; resolves to the count. */
607
573
  pruneAuditRows(prune: AuditPrune): Promise<number>;
608
574
  /** A preview, or with `apply` the moves of certain defects to dormant storage behind a backup. */
609
575
  repairQuality(tenantId: string, apply: boolean): Promise<QualityRepairResult>;
@@ -614,18 +580,22 @@ export interface AuditMaintenance {
614
580
  export interface LessonWrites {
615
581
  /** Every memory of the tenant, in `loadAllEntries` order. */
616
582
  tenantEntries(tenantId: string): Promise<MemoryEntry[]>;
617
- /** Content, source and origin of the tenant's rows holding any of `words`, among the rows a team member or `ownScope`'s owner may touch. */
583
+ /** Content, source and origin of the tenant's rows holding any of `words`, among the rows a team member or
584
+ * `ownScope`'s owner may touch. */
618
585
  textsHoldingWords(tenantId: string, words: readonly string[], ownScope: string | null): Promise<HeldText[]>;
619
- /** Writes each entry in one transaction; a rejected value writes its refusal row and is skipped. Resolves to the ids written. */
586
+ /** Writes each entry in one transaction; a rejected value writes
587
+ * its refusal row and is skipped. Resolves to the ids written. */
620
588
  writeSkippingRejected(entries: readonly MemoryEntry[], actor: string): Promise<string[]>;
621
589
  /** Rewrites each entry in one transaction, all or none. */
622
590
  writeTogether(entries: readonly MemoryEntry[]): Promise<void>;
623
591
  /** Adds `count` to the store-wide remembered counter. */
624
592
  bumpRemembered(count: number): Promise<void>;
625
593
  }
626
- /** The optional groups: a store sets each one whole or leaves it unset, and a route or MCP tool names the one it needs. */
627
- export interface StoreGroups {
628
- /** Unset on any store but hippo.db; a request then runs fenced from hippo.db, and a route or tool that names no group answers 501. */
594
+ /** The optional groups: a store sets each one whole or leaves
595
+ * it unset, and a route or MCP tool names the one it needs. */
596
+ export interface StoreGroups extends SessionAndAdminGroups {
597
+ /** Unset on any store but hippo.db; a request then runs fenced from
598
+ * hippo.db, and a route or tool that names no group answers 501. */
629
599
  readonly localFiles: LocalFiles;
630
600
  /** Unset on a store without it, where the quality audit, its repair and audit prune answer 501. */
631
601
  readonly auditMaintenance: AuditMaintenance;
@@ -637,6 +607,8 @@ export interface StoreGroups {
637
607
  readonly vectorViews: VectorViews;
638
608
  readonly keyAudit: KeyAudit;
639
609
  readonly keyWrites: KeyWrites;
610
+ /** Unset on a store without it, where the CLI's auth grant and ungrant answer 501. */
611
+ readonly keyGrants: KeyGrants;
640
612
  /** embedMemory and embedAll with a store need it and `vectors`. */
641
613
  readonly vectorWrites: VectorWrites;
642
614
  readonly entryWrites: EntryWrites;
@@ -646,25 +618,34 @@ export interface StoreGroups {
646
618
  readonly auditLog: AuditLog;
647
619
  readonly quarantine: Quarantine;
648
620
  readonly graphReads: GraphReads;
649
- /** Unset on a store built before it, where a write that carries a connector event or untrusted content answers 501. */
621
+ /** Unset on a store built before it, where a write that carries a connector event or untrusted content answers
622
+ * 501. */
650
623
  readonly connectorWrites: ConnectorWrites;
651
624
  /** Unset on a store built before it, where both connector webhooks answer 501. */
652
625
  readonly connectorEvents: ConnectorEvents;
653
626
  readonly objects: Objects;
654
627
  /** Unset on a store built before it, where GET /ready answers 200 with `store: "unchecked"`. */
655
628
  readonly readiness: Readiness;
656
- /** Unset on a store that keeps no last recall, where outcomeForLastRecall and a traced outcome answer 501 and context writes no last recall. */
629
+ /** Unset on a store that keeps no last recall, where outcomeForLastRecall and a traced outcome answer 501 and context
630
+ * writes no last recall. */
657
631
  readonly lastRecall: LastRecall;
658
632
  }
659
633
  export type StoreGroup = 'base' | keyof StoreGroups;
660
634
  export declare function hasGroup(store: HippoStore, group: StoreGroup): boolean;
661
- /** The group's methods; a store without them throws StoreNotPortedError, which answers 501 as any unported path does. */
635
+ /** The group's methods; a store without them throws
636
+ * StoreNotPortedError, which answers 501 as any unported path does. */
662
637
  export declare function requireGroup<G extends keyof StoreGroups>(store: HippoStore, group: G): StoreGroups[G];
663
- export declare const STORE_BUSY_MESSAGE = "store busy (another hippo process holds the write lock); retry shortly";
664
- /** A store behind the port throws this when its lock wait runs out, so the server answers 503 as it does for a busy hippo.db. */
665
- export declare class StoreBusyError extends Error {
666
- constructor(message?: string, options?: ErrorOptions);
638
+ /** Which stores a call reaches, probed once by a composition root so the api reads this instead of the disk. */
639
+ export interface StoreReach {
640
+ readonly hasLocal: boolean;
641
+ readonly isGlobal: boolean;
642
+ readonly shared: boolean;
643
+ readonly global?: {
644
+ readonly root: string;
645
+ readonly store: StoreWith<'contextReads'>;
646
+ };
667
647
  }
648
+ export { isStoreBusy, STORE_BUSY_MESSAGE, StoreBusyError } from './busy.js';
668
649
  /** What `serve()` reads and writes through. Each method is atomic and no transaction spans an
669
650
  * await, since SQLite's lock wait blocks the event loop; a lock timeout throws `StoreBusyError`. */
670
651
  export interface HippoStore extends Partial<StoreGroups> {
@@ -674,33 +655,38 @@ export interface HippoStore extends Partial<StoreGroups> {
674
655
  findApiKey(keyId: string): Promise<ApiKeyRecord | null>;
675
656
  /** Recall candidates in `loadRecallSearchEntries` order: FTS, then LIKE, then every row in scope. */
676
657
  searchRecallEntries(query: string, args: RecallSearchArgs): Promise<MemoryEntry[]>;
677
- /** The rows among the first 500 ids, a tenant narrowing them, ordered by created, then content, then id, all ascending,
678
- * as `loadEntriesByIds` does; the input order is ignored. */
658
+ /** The rows among the first 500 ids, a tenant narrowing them, ordered by created, then content, then id, all
659
+ * ascending, as `loadEntriesByIds` does; the input order is ignored. */
679
660
  entriesByIds(ids: readonly string[], tenantId?: string): Promise<MemoryEntry[]>;
680
661
  /** The session's active goals and their policies, read together so a goal and its policy never disagree. */
681
662
  activeGoals(opts: GetActiveGoalsOpts): Promise<ActiveGoals>;
682
- /** The first `count` (at most 200) unsuperseded raw rows a tenant, a non-empty session id and non-null `origins` (those projects and
683
- * user-global rows) must narrow, by created descending, then content and id ascending, as `loadFreshRawMemories` does. */
663
+ /** The first `count` (at most 200) unsuperseded raw rows a tenant, a non-empty session
664
+ * id and non-null `origins` (those projects and user-global rows) must narrow, by
665
+ * created descending, then content and id ascending, as `loadFreshRawMemories` does. */
684
666
  freshRawEntries(count: number, tenantId: string | undefined, sessionId: string | undefined, origins: readonly string[] | null): Promise<MemoryEntry[]>;
685
- /** The newest active snapshot a non-null `key` must narrow to one owner and project (null only on an unshared hippo.db), then for its session
686
- * the newest handoff (same key) and `eventLimit` newest events returned oldest first, each tie broken by the larger id; the caller applies scope. */
667
+ /** The newest active snapshot a non-null `key` must narrow to one owner and project (null only on an unshared
668
+ * hippo.db), then for its session the newest handoff (same key) and `eventLimit` newest events returned oldest first,
669
+ * each tie broken by the larger id; the caller applies scope. */
687
670
  continuity(tenantId: string, eventLimit: number, key: ContinuityKey | null): Promise<ContinuityBlock>;
688
671
  /** Resolves a forward claim's tokens to one class and reads its baserate, writing no audit row. */
689
672
  planningFallacyEvidence(tenantId: string, classQueryTokens: readonly string[]): Promise<PlanningFallacyEvidence>;
690
673
  /** Appends the rows in order, all or none. */
691
674
  appendAuditEvents(events: readonly AppendAuditOpts[]): Promise<void>;
692
- /** Writes the goal log and audit rows in one transaction and rejects with none written if it fails. Then the trace and
693
- * the strengthen, each on its own: a failure there logs and still resolves, since the reply is already decided. */
675
+ /** Writes the goal log and audit rows in one transaction and rejects with none
676
+ * written if it fails. Then the trace and the strengthen, each on its own: a
677
+ * failure there logs and still resolves, since the reply is already decided. */
694
678
  finishRecall(writes: RecallWrites): Promise<void>;
695
- /** Adds `recalled` to the one store-wide total_recalled counter, no tenant; the SQLite store also rewrites stats.json. */
679
+ /** Adds `recalled` to the one store-wide total_recalled counter,
680
+ * no tenant; the SQLite store also rewrites stats.json. */
696
681
  bumpRecallStats(recalled: number): Promise<void>;
697
682
  /** One token-ledger row. Throws, so the caller decides whether a ledger failure matters. */
698
683
  recordTokens(use: TokenUse): Promise<void>;
699
684
  /** Releases the store's connections; `serve()` closes only a store it made itself. */
700
685
  close(): Promise<void>;
701
686
  }
702
- /** `T` with each method answering its value instead of a Promise of it, groups included: the port as a synchronous store has it. */
703
- export type Sync<T> = T extends (...args: infer A) => Promise<infer R> ? (...args: A) => R : T extends object ? {
687
+ /** `T` with each method answering its value instead of a Promise of it, groups included: the port as a synchronous
688
+ * store has it. */
689
+ export type Sync<T> = T extends (...args: infer A) => Promise<infer R> ? (...args: A) => R : T extends (...args: never) => void ? T : T extends object ? {
704
690
  [K in keyof T]: Sync<T[K]>;
705
691
  } : T;
706
692
  export interface ContinuityBlock {