hippo-memory 1.68.0 → 1.70.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 (864) hide show
  1. package/README.md +6 -3
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,8 +1,10 @@
1
1
  // Session context assembly under a token budget.
2
- import { loadEntriesByIds, loadSessionRawMemories, countSessionRawMemories } from '../store/entry-reads.js';
3
- import { estimateTokens } from '../token-ledger.js';
4
- import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../recall-scope.js';
5
- import { classifyOriginProject, projectNames } from '../project-identity.js';
2
+ import { requireGroup, storeFor } from '../store/index.js';
3
+ import { estimateTokens } from '../util/token-text.js';
4
+ import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
5
+ import { classifyOriginProject, projectNames } from '../core/project-identity.js';
6
+ const DEFAULT_FRESH_TAIL_COUNT = 10;
7
+ const DEFAULT_ROW_CAP = 5000;
6
8
  export const DEFAULT_ASSEMBLE_BUDGET = 4000;
7
9
  /**
8
10
  * Build a chronologically-ordered context window for a session. Adapts the
@@ -26,30 +28,16 @@ export const DEFAULT_ASSEMBLE_BUDGET = 4000;
26
28
  * - no raws exist for the session
27
29
  * - all rows fail the scope/tenant filter
28
30
  */
29
- export function assemble(ctx, sessionId, opts = {}) {
31
+ export async function assemble(ctx, sessionId, opts = {}) {
30
32
  assertScopeRequestAllowed(ctx.actor, opts.scope);
31
33
  const budget = opts.budget ?? DEFAULT_ASSEMBLE_BUDGET;
32
- const freshTailCount = opts.freshTailCount ?? 10;
34
+ const freshTailCount = opts.freshTailCount ?? DEFAULT_FRESH_TAIL_COUNT;
33
35
  const summarizeOlder = opts.summarizeOlder ?? true;
34
- const rowCap = opts.rowCap ?? 5000;
35
36
  const own = personalScopeOf(ctx.actor) ?? undefined;
36
37
  if (!sessionId) {
37
38
  return { sessionId, items: [], tokens: 0, totalRaw: 0, summarized: 0, evicted: 0, truncated: false };
38
39
  }
39
- const origins = opts.project ? projectNames(opts.project) : undefined;
40
- const rows = loadSessionRawMemories(ctx.hippoRoot, sessionId, ctx.tenantId, rowCap, origins);
41
- const truncated = rows.length === rowCap;
42
- // `scoped.length` under-counts a capped session, so totalRaw falls back to a COUNT below.
43
- const scoped = rows.filter((r) => passesScopeFilterForRecall(r.scope ?? null, opts.scope, own));
44
- let totalRaw;
45
- if (truncated) {
46
- // The COUNT applies the same default-deny scope rule in SQL, so a no-scope
47
- // caller cannot infer private rows by comparing totalRaw to items.length.
48
- totalRaw = countSessionRawMemories(ctx.hippoRoot, sessionId, ctx.tenantId, opts.scope, own, origins);
49
- }
50
- else {
51
- totalRaw = scoped.length;
52
- }
40
+ const { scoped, totalRaw, truncated } = await loadScopedRaws(ctx, sessionId, opts, own);
53
41
  if (scoped.length === 0) {
54
42
  return { sessionId, items: [], tokens: 0, totalRaw, summarized: 0, evicted: 0, truncated };
55
43
  }
@@ -59,17 +47,11 @@ export function assemble(ctx, sessionId, opts = {}) {
59
47
  const tailRows = scoped.slice(tailStartIdx);
60
48
  // Substitute parent summaries for older rows that share one.
61
49
  const { olderItems, summarized } = summarizeOlder && olderRows.length > 0
62
- ? substituteSummaries(ctx, olderRows, opts.scope, own, opts.project)
50
+ ? await substituteSummaries(ctx, olderRows, opts.scope, own, opts.project)
63
51
  : { olderItems: olderRows.map(rawItem), summarized: 0 };
64
- const tailItems = tailRows.map((r) => ({
65
- id: r.id,
66
- content: r.content,
67
- createdAt: r.created,
68
- isFreshTail: true,
69
- strength: r.strength,
70
- }));
52
+ const tailItems = tailRows.map(freshTailItem);
71
53
  // Byte compare is chronological for the fixed-form UTC ISO timestamps
72
- // (invariant documented in src/memory.ts above MemoryEntry).
54
+ // (invariant documented in src/core/memory.ts above MemoryEntry).
73
55
  const cmpIso = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
74
56
  olderItems.sort((a, b) => cmpIso(a.createdAt, b.createdAt));
75
57
  tailItems.sort((a, b) => cmpIso(a.createdAt, b.createdAt));
@@ -78,6 +60,25 @@ export function assemble(ctx, sessionId, opts = {}) {
78
60
  const { items, tokens, evicted } = evictToBudget([...olderItems, ...tailItems], itemCost, room);
79
61
  return { sessionId, items, tokens, totalRaw, summarized, evicted, truncated };
80
62
  }
63
+ async function loadScopedRaws(ctx, sessionId, opts, own) {
64
+ const rowCap = opts.rowCap ?? DEFAULT_ROW_CAP;
65
+ const origins = opts.project ? projectNames(opts.project) : undefined;
66
+ const dag = requireGroup(storeFor(ctx), 'dagReads');
67
+ const rows = await dag.sessionRawEntries({ tenantId: ctx.tenantId, sessionId, cap: rowCap, origins });
68
+ const truncated = rows.length === rowCap;
69
+ // `scoped.length` under-counts a capped session, so totalRaw falls back to a COUNT below.
70
+ const scoped = rows.filter((r) => passesScopeFilterForRecall(r.scope ?? null, opts.scope, own));
71
+ let totalRaw;
72
+ if (truncated) {
73
+ // The COUNT applies the same default-deny scope rule in SQL, so a no-scope
74
+ // caller cannot infer private rows by comparing totalRaw to items.length.
75
+ totalRaw = await dag.sessionRawCount({ tenantId: ctx.tenantId, sessionId, scope: opts.scope, ownScope: own, origins });
76
+ }
77
+ else {
78
+ totalRaw = scoped.length;
79
+ }
80
+ return { scoped, totalRaw, truncated };
81
+ }
81
82
  function rawItem(r) {
82
83
  return {
83
84
  id: r.id,
@@ -86,7 +87,16 @@ function rawItem(r) {
86
87
  strength: r.strength,
87
88
  };
88
89
  }
89
- function substituteSummaries(ctx, olderRows, scope, own, project) {
90
+ function freshTailItem(r) {
91
+ return {
92
+ id: r.id,
93
+ content: r.content,
94
+ createdAt: r.created,
95
+ isFreshTail: true,
96
+ strength: r.strength,
97
+ };
98
+ }
99
+ async function substituteSummaries(ctx, olderRows, scope, own, project) {
90
100
  const olderItems = [];
91
101
  let summarized = 0;
92
102
  const olderByParent = new Map();
@@ -99,7 +109,7 @@ function substituteSummaries(ctx, olderRows, scope, own, project) {
99
109
  }
100
110
  const eligibleParentIds = Array.from(olderByParent.keys()).filter((pid) => (olderByParent.get(pid)?.length ?? 0) >= 2);
101
111
  const parents = eligibleParentIds.length > 0
102
- ? loadEntriesByIds(ctx.hippoRoot, eligibleParentIds, ctx.tenantId)
112
+ ? (await storeFor(ctx).entriesByIds(eligibleParentIds, ctx.tenantId))
103
113
  .filter((p) => (p.dag_level ?? 0) === 2 && !p.superseded_by)
104
114
  .filter((p) => passesScopeFilterForRecall(p.scope ?? null, scope, own))
105
115
  .filter((p) => !project || classifyOriginProject(p.origin_project, project) !== 'cross-project')
@@ -1,5 +1,5 @@
1
- import { type AuditEvent, type AuditOp } from '../audit.js';
2
- import type { KeysetPosition } from '../keyset.js';
1
+ import type { AuditEvent, AuditOp } from '../store/audit.js';
2
+ import type { KeysetPosition } from '../util/keyset.js';
3
3
  import type { Context } from './types.js';
4
4
  export interface AuditListOpts {
5
5
  op?: AuditOp;
@@ -9,9 +9,6 @@ export interface AuditListOpts {
9
9
  /** Resume after this row: the (ts, id) position the previous page ended on. */
10
10
  after?: KeysetPosition;
11
11
  }
12
- /**
13
- * Read audit events scoped to `ctx.tenantId`. Read-only, no audit emit (matches
14
- * cmdAuditList, which does not record a 'recall'-style read event).
15
- */
16
- export declare function auditList(ctx: Context, opts: AuditListOpts): AuditEvent[];
12
+ /** Read audit events scoped to `ctx.tenantId` on the store the request runs on. Read-only, no audit emit. */
13
+ export declare function auditList(ctx: Context, opts: AuditListOpts): Promise<AuditEvent[]>;
17
14
  //# sourceMappingURL=audit.d.ts.map
package/dist/api/audit.js CHANGED
@@ -1,23 +1,9 @@
1
1
  // Audit log queries.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { queryAuditEvents } from '../audit.js';
4
- /**
5
- * Read audit events scoped to `ctx.tenantId`. Read-only, no audit emit (matches
6
- * cmdAuditList, which does not record a 'recall'-style read event).
7
- */
8
- export function auditList(ctx, opts) {
9
- const db = openHippoDb(ctx.hippoRoot);
10
- try {
11
- return queryAuditEvents(db, {
12
- tenantId: ctx.tenantId,
13
- op: opts.op,
14
- since: opts.since,
15
- limit: opts.limit,
16
- after: opts.after,
17
- });
18
- }
19
- finally {
20
- closeHippoDb(db);
21
- }
2
+ import { requireGroup, storeFor } from '../store/index.js';
3
+ /** Read audit events scoped to `ctx.tenantId` on the store the request runs on. Read-only, no audit emit. */
4
+ export async function auditList(ctx, opts) {
5
+ return requireGroup(storeFor(ctx), 'auditLog').listAuditEvents({
6
+ tenantId: ctx.tenantId, op: opts.op, since: opts.since, limit: opts.limit, after: opts.after,
7
+ });
22
8
  }
23
9
  //# sourceMappingURL=audit.js.map
@@ -1,5 +1,5 @@
1
- import { type ApiKeyListItem, type ApiKeyListRow } from '../auth.js';
2
- import type { KeysetPosition } from '../keyset.js';
1
+ import { type ApiKeyListRow } from '../store/auth.js';
2
+ import type { KeysetPosition } from '../util/keyset.js';
3
3
  import type { Context, StoreReply } from './types.js';
4
4
  export interface AuthCreateOpts {
5
5
  label?: string;
@@ -41,27 +41,14 @@ export interface AuthCreateSelfResult extends AuthCreateResult {
41
41
  /** ISO time the key stops working. */
42
42
  expiresAt: string;
43
43
  }
44
- /** Mint a member key for the caller an auth resolver vouched for, whatever its role; the binary floor, the cap's revokes, the mint and its audit rows commit or fail together.
45
- * With `ctx.store`, its keyWrites group runs that transaction; hippo.db is opened only when there is no store. */
44
+ /** Mint a member key for the caller an auth resolver vouched for, whatever its role; the binary floor, the cap's revokes, the mint and its audit rows commit or fail together. */
46
45
  export declare function authCreateSelf<C extends Context>(ctx: C, opts: AuthCreateSelfOpts): StoreReply<C, AuthCreateSelfResult>;
47
- /**
48
- * List API keys visible to the calling tenant.
49
- *
50
- * Divergence from `cmdAuthList` in src/cli.ts: the CLI today returns ALL keys
51
- * regardless of tenant (single-tenant deployments). The API surface is tenant-
52
- * scoped because future multi-tenant deployments will share a hippoRoot, and
53
- * tenant A must not see tenant B's keys. Read-only, so no audit emit.
54
- */
55
- export declare function authList<C extends Context>(ctx: C, opts: {
56
- active: boolean;
57
- }): StoreReply<C, ApiKeyListItem[]>;
58
46
  type KeyListOpts = {
59
47
  active: boolean;
60
48
  limit?: number;
61
49
  after?: KeysetPosition;
62
50
  };
63
- /** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from.
64
- * With `ctx.store`, its keyWrites group reads them; hippo.db is opened only when there is no store. */
51
+ /** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from. */
65
52
  export declare function authListRows<C extends Context>(ctx: C, opts: KeyListOpts): StoreReply<C, ApiKeyListRow[]>;
66
53
  export interface AuthRevokeResult {
67
54
  ok: true;
@@ -69,7 +56,7 @@ export interface AuthRevokeResult {
69
56
  }
70
57
  export type AuthRevokeReply<C extends Context> = StoreReply<C, AuthRevokeResult>;
71
58
  /** Revoke a key in the caller's tenant: a member API key may revoke only itself, a resolver member only the keys it minted.
72
- * With `ctx.store`, its keyAudit group revokes and writes the auth_revoke row; hippo.db is opened only when there is no store. */
59
+ * The revoke and its auth_revoke row commit together on either store, so a failed audit write leaves the key live. */
73
60
  export declare function authRevoke<C extends Context>(ctx: C, keyId: string): AuthRevokeReply<C>;
74
61
  /**
75
62
  * The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
package/dist/api/auth.js CHANGED
@@ -1,13 +1,10 @@
1
1
  // API key management: create, list, revoke, and grant or ungrant restricted scopes.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { BadRequestError, ConflictError, ForbiddenError, NotFoundError } from '../api-errors.js';
4
- import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
5
- import { forgetVerifiedKey, insertApiKey, listApiKeyRows, mintApiKey, revokeApiKey, grantScope, ungrantScope, } from '../auth.js';
6
- import { DAY_MS } from '../dashboard-snapshot.js';
7
- import { isRestrictedScope } from '../recall-scope.js';
8
- import { requireGroup } from '../store-port.js';
9
- import { createAuditOf, createKeyAt, createSelfKeyAt } from '../store/key-writes.js';
10
- import { selectApiKeyOwner } from '../store/tenant-lookup.js';
2
+ import { ForbiddenError, NotFoundError } from '../core/api-errors.js';
3
+ import { mintApiKey, } from '../store/auth.js';
4
+ import { changeScopeGrant } from '../store/sqlite/local.js';
5
+ import { sqliteSyncStore } from '../store/sqlite/store.js';
6
+ import { DAY_MS } from '../util/time.js';
7
+ import { andThen, notPorted, onStore } from './on-store.js';
11
8
  const API_KEY_SUBJECT = 'api_key:';
12
9
  /** The key id an API-key actor's subject names, or null for any other actor. */
13
10
  function keyIdOfSubject(subject) {
@@ -25,10 +22,12 @@ function keyIdOfSubject(subject) {
25
22
  * outranks its minter: a resolver admin is tenant-only, so it mints members.
26
23
  */
27
24
  export function authCreate(ctx, opts) {
28
- // With a store, its keyWrites group stores the key and its auth_create row together, and hippo.db is never opened.
29
- const reply = ctx.store ? createThroughStore(ctx, ctx.store, opts) : createOnHippoDb(ctx, opts);
30
- // SAFETY: as in authRevoke, a C typed with a store gets the promise its path returns and a C that hides one gets the union.
31
- return reply;
25
+ // The key and its auth_create row commit together on either store, so a failed audit write leaves no key.
26
+ return onStore(ctx, (port) => {
27
+ const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
28
+ const { plaintext, mint } = adminKeyMint(ctx, opts);
29
+ return andThen(keyWrites.createApiKey(mint), () => createResult(mint, plaintext));
30
+ });
32
31
  }
33
32
  /** A key row in the caller's tenant, made here so only its hash ever reaches a store. */
34
33
  function newKey(ctx, fields) {
@@ -51,35 +50,6 @@ function adminKeyMint(ctx, opts) {
51
50
  function createResult({ key }, plaintext) {
52
51
  return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: key.role };
53
52
  }
54
- async function createThroughStore(ctx, store, opts) {
55
- const keyWrites = requireGroup(store, 'keyWrites');
56
- const { plaintext, mint } = adminKeyMint(ctx, opts);
57
- await keyWrites.createApiKey(mint);
58
- return createResult(mint, plaintext);
59
- }
60
- function createOnHippoDb(ctx, opts) {
61
- const { plaintext, mint } = adminKeyMint(ctx, opts);
62
- const db = openHippoDb(ctx.hippoRoot);
63
- try {
64
- // A resolver admin's keys are found again only through their audit rows, so the key and its row commit together.
65
- if (ctx.actor.viaAuthResolver) {
66
- createKeyAt(db, mint);
67
- return createResult(mint, plaintext);
68
- }
69
- insertApiKey(db, mint.key);
70
- try {
71
- appendAuditEvent(db, createAuditOf(mint));
72
- }
73
- catch (error) {
74
- // Audit must not crash a successful mint.
75
- reportAuditWriteFailure('auth_create', String(error), mint.key.keyId);
76
- }
77
- return createResult(mint, plaintext);
78
- }
79
- finally {
80
- closeHippoDb(db);
81
- }
82
- }
83
53
  const MAX_TTL_DAYS = 3650;
84
54
  /** A RangeError, not a 4xx, since the operator's config sets these; the ttl ceiling keeps toISOString in range and a departed user's key short-lived. */
85
55
  function assertSelfMintOpts({ ttlDays, perSubject }) {
@@ -90,12 +60,13 @@ function assertSelfMintOpts({ ttlDays, perSubject }) {
90
60
  throw new RangeError(`authCreateSelf: perSubject must be a whole number of at least 1, got ${String(perSubject)}`);
91
61
  }
92
62
  }
93
- /** Mint a member key for the caller an auth resolver vouched for, whatever its role; the binary floor, the cap's revokes, the mint and its audit rows commit or fail together.
94
- * With `ctx.store`, its keyWrites group runs that transaction; hippo.db is opened only when there is no store. */
63
+ /** Mint a member key for the caller an auth resolver vouched for, whatever its role; the binary floor, the cap's revokes, the mint and its audit rows commit or fail together. */
95
64
  export function authCreateSelf(ctx, opts) {
96
- const reply = ctx.store ? createSelfThroughStore(ctx, ctx.store, opts) : createSelfOnHippoDb(ctx, opts);
97
- // SAFETY: as in authRevoke, a C typed with a store gets the promise its path returns and a C that hides one gets the union.
98
- return reply;
65
+ return onStore(ctx, (port) => {
66
+ const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
67
+ const { plaintext, mint } = selfKeyMint(ctx, opts);
68
+ return andThen(keyWrites.createSelfApiKey(mint), () => selfResult(mint, plaintext));
69
+ });
99
70
  }
100
71
  function selfKeyMint(ctx, opts) {
101
72
  if (!ctx.actor.viaAuthResolver) {
@@ -113,64 +84,17 @@ function selfKeyMint(ctx, opts) {
113
84
  function selfResult({ key }, plaintext) {
114
85
  return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: 'member', expiresAt: key.expiresAt };
115
86
  }
116
- /** The store revokes the replaced keys without this process's verified-key cache, so they leave it here once the mint commits. */
117
- async function createSelfThroughStore(ctx, store, opts) {
118
- const keyWrites = requireGroup(store, 'keyWrites');
119
- const { plaintext, mint } = selfKeyMint(ctx, opts);
120
- for (const keyId of await keyWrites.createSelfApiKey(mint))
121
- forgetVerifiedKey(keyId);
122
- return selfResult(mint, plaintext);
123
- }
124
- function createSelfOnHippoDb(ctx, opts) {
125
- const { plaintext, mint } = selfKeyMint(ctx, opts);
126
- const db = openHippoDb(ctx.hippoRoot);
127
- try {
128
- createSelfKeyAt(db, mint);
129
- return selfResult(mint, plaintext);
130
- }
131
- finally {
132
- closeHippoDb(db);
133
- }
134
- }
135
- /**
136
- * List API keys visible to the calling tenant.
137
- *
138
- * Divergence from `cmdAuthList` in src/cli.ts: the CLI today returns ALL keys
139
- * regardless of tenant (single-tenant deployments). The API surface is tenant-
140
- * scoped because future multi-tenant deployments will share a hippoRoot, and
141
- * tenant A must not see tenant B's keys. Read-only, so no audit emit.
142
- */
143
- export function authList(ctx, opts) {
144
- const keysOf = (rows) => rows.map((r) => r.key);
145
- const rows = listRows(ctx, opts);
146
- // SAFETY: the promise comes back exactly when ctx has a store, as StoreReply says.
147
- return (rows instanceof Promise ? rows.then(keysOf) : keysOf(rows));
148
- }
149
- /** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from.
150
- * With `ctx.store`, its keyWrites group reads them; hippo.db is opened only when there is no store. */
87
+ /** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from. */
151
88
  export function authListRows(ctx, opts) {
152
- // SAFETY: the promise comes back exactly when ctx has a store, as StoreReply says.
153
- return listRows(ctx, opts);
89
+ return onStore(ctx, (port) => listRows(ctx, port, opts));
154
90
  }
155
- function listRows(ctx, opts) {
156
- return ctx.store ? listThroughStore(ctx, ctx.store, opts) : listOnHippoDb(ctx, opts);
157
- }
158
- async function listThroughStore(ctx, store, opts) {
159
- const keyWrites = requireGroup(store, 'keyWrites');
91
+ function listRows(ctx, port, opts) {
92
+ const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
160
93
  const keyId = memberKeyIdOf(ctx.actor);
161
- const filter = memberListFilter(ctx.actor, keyId === null ? undefined : (await store.findApiKey(keyId))?.ownerSubject);
162
- return filter === null ? [] : keyWrites.listApiKeys({ ...opts, tenantId: ctx.tenantId, ...filter });
163
- }
164
- function listOnHippoDb(ctx, opts) {
165
- const db = openHippoDb(ctx.hippoRoot);
166
- try {
167
- const keyId = memberKeyIdOf(ctx.actor);
168
- const filter = memberListFilter(ctx.actor, keyId === null ? undefined : selectApiKeyOwner(db, keyId)?.ownerSubject);
169
- return filter === null ? [] : listApiKeyRows(db, { ...opts, tenantId: ctx.tenantId, ...filter });
170
- }
171
- finally {
172
- closeHippoDb(db);
173
- }
94
+ return andThen(keyId === null ? undefined : port.findApiKey(keyId), (record) => {
95
+ const filter = memberListFilter(ctx.actor, record?.ownerSubject);
96
+ return filter === null ? [] : keyWrites.listApiKeys({ ...opts, tenantId: ctx.tenantId, ...filter });
97
+ });
174
98
  }
175
99
  /** The key id of a member API key caller, whose owner decides what it lists; null for any other caller. */
176
100
  function memberKeyIdOf(actor) {
@@ -202,12 +126,17 @@ function assertMayRevoke(ctx, keyId, row) {
202
126
  }
203
127
  }
204
128
  /** Revoke a key in the caller's tenant: a member API key may revoke only itself, a resolver member only the keys it minted.
205
- * With `ctx.store`, its keyAudit group revokes and writes the auth_revoke row; hippo.db is opened only when there is no store. */
129
+ * The revoke and its auth_revoke row commit together on either store, so a failed audit write leaves the key live. */
206
130
  export function authRevoke(ctx, keyId) {
207
- const reply = ctx.store ? revokeThroughStore(ctx, ctx.store, keyId) : revokeOnHippoDb(ctx, keyId);
208
- // SAFETY: a C typed with a store gets the promise its path returns; a C whose type hides a runtime store (a Pick of
209
- // Context) is typed as the union, which a caller has to await anyway.
210
- return reply;
131
+ return onStore(ctx, (port) => {
132
+ const keyAudit = port.keyAudit ?? notPorted(port, 'keyAudit');
133
+ assertMemberKeyRevokesSelf(ctx, keyId);
134
+ return andThen(port.findApiKey(keyId), (record) => {
135
+ assertMayRevoke(ctx, keyId, keyOwnerOf(record));
136
+ const revoke = { tenantId: ctx.tenantId, keyId, actor: ctx.actor.subject, at: new Date().toISOString() };
137
+ return andThen(keyAudit.revokeApiKey(revoke), (revokedAt) => ({ ok: true, revokedAt }));
138
+ });
139
+ });
211
140
  }
212
141
  function assertMemberKeyRevokesSelf(ctx, keyId) {
213
142
  if (ctx.actor.role !== 'admin' && !ctx.actor.viaAuthResolver && keyIdOfSubject(ctx.actor.subject) !== keyId) {
@@ -217,52 +146,6 @@ function assertMemberKeyRevokesSelf(ctx, keyId) {
217
146
  function keyOwnerOf(record) {
218
147
  return record ? { tenantId: record.tenantId, revokedAt: record.revokedAt, role: record.role, ownerSubject: record.ownerSubject ?? null } : undefined;
219
148
  }
220
- /** The store keeps no handle on this process's verified-key cache, so the key leaves it here once the revoke commits. */
221
- async function revokeThroughStore(ctx, store, keyId) {
222
- const keyAudit = requireGroup(store, 'keyAudit');
223
- assertMemberKeyRevokesSelf(ctx, keyId);
224
- assertMayRevoke(ctx, keyId, keyOwnerOf(await store.findApiKey(keyId)));
225
- const revokedAt = await keyAudit.revokeApiKey({ tenantId: ctx.tenantId, keyId, actor: ctx.actor.subject, at: new Date().toISOString() });
226
- forgetVerifiedKey(keyId);
227
- return { ok: true, revokedAt };
228
- }
229
- /** The auth_revoke row carries the KEY ROW's tenant, as cmdAuthRevoke does, and is skipped for an already-revoked key. */
230
- function revokeOnHippoDb(ctx, keyId) {
231
- assertMemberKeyRevokesSelf(ctx, keyId);
232
- const db = openHippoDb(ctx.hippoRoot);
233
- try {
234
- const row = selectApiKeyOwner(db, keyId);
235
- assertMayRevoke(ctx, keyId, row);
236
- let revokedAt;
237
- let alreadyRevoked = false;
238
- if (row.revokedAt) {
239
- alreadyRevoked = true;
240
- revokedAt = row.revokedAt;
241
- }
242
- else {
243
- revokeApiKey(db, keyId);
244
- revokedAt = selectApiKeyOwner(db, keyId)?.revokedAt ?? new Date().toISOString();
245
- }
246
- if (!alreadyRevoked) {
247
- try {
248
- appendAuditEvent(db, {
249
- tenantId: row.tenantId, // KEY's tenant, not ctx.tenantId.
250
- actor: ctx.actor.subject,
251
- op: 'auth_revoke',
252
- targetId: keyId,
253
- });
254
- }
255
- catch (error) {
256
- // Audit must not crash a successful revoke.
257
- reportAuditWriteFailure('auth_revoke', String(error), keyId);
258
- }
259
- }
260
- return { ok: true, revokedAt };
261
- }
262
- finally {
263
- closeHippoDb(db);
264
- }
265
- }
266
149
  /**
267
150
  * The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
268
151
  * so the local CLI can run revoke and grant in the key's own tenant.
@@ -271,56 +154,23 @@ export function authKeyTenant(ctx, keyId) {
271
154
  if (!ctx.actor.hostAdmin) {
272
155
  throw new ForbiddenError('Only the host admin can look up a key across tenants');
273
156
  }
274
- const db = openHippoDb(ctx.hippoRoot);
275
- try {
276
- return selectApiKeyOwner(db, keyId)?.tenantId;
277
- }
278
- finally {
279
- closeHippoDb(db);
280
- }
157
+ // Synchronous for the CLI, so it reads hippo.db whatever store ctx names.
158
+ return sqliteSyncStore(ctx.hippoRoot).findApiKey(keyId)?.tenantId;
281
159
  }
282
160
  /** Grant `keyId` read access to one restricted `scope`. Admin only. */
283
161
  export function authGrant(ctx, keyId, scope) {
284
- return changeScopeGrant(ctx, keyId, scope, 'auth_grant');
162
+ return changeGrant(ctx, keyId, scope, 'auth_grant');
285
163
  }
286
164
  /** Revoke `keyId`'s grant on `scope`. Same authorization and lookup rules as authGrant. */
287
165
  export function authUngrant(ctx, keyId, scope) {
288
- return changeScopeGrant(ctx, keyId, scope, 'auth_ungrant');
166
+ return changeGrant(ctx, keyId, scope, 'auth_ungrant');
289
167
  }
290
- function changeScopeGrant(ctx, keyId, scope, op) {
168
+ /** hippo.db only: both callers are synchronous published functions, so no store's Promise can answer them. */
169
+ function changeGrant(ctx, keyId, scope, op) {
291
170
  if (ctx.actor.role !== 'admin') {
292
171
  throw new ForbiddenError('Only an admin key can change scope grants');
293
172
  }
294
- const db = openHippoDb(ctx.hippoRoot);
295
- try {
296
- const row = selectApiKeyOwner(db, keyId);
297
- if (!row || row.tenantId !== ctx.tenantId) {
298
- throw new NotFoundError(`Unknown key_id: ${keyId}`);
299
- }
300
- if (op === 'auth_grant' && row.revokedAt) {
301
- throw new ConflictError(`${keyId} is revoked; a grant on it would never apply`);
302
- }
303
- if (op === 'auth_grant' && /^personal:/i.test(scope)) {
304
- throw new BadRequestError(`${scope} is a personal scope: only its owner reads it, and no grant can change that`);
305
- }
306
- if (!isRestrictedScope(scope)) {
307
- throw new BadRequestError(`${scope} is not a restricted scope; it is already readable by default`);
308
- }
309
- if (op === 'auth_grant')
310
- grantScope(db, keyId, scope);
311
- else
312
- ungrantScope(db, keyId, scope);
313
- try {
314
- appendAuditEvent(db, { tenantId: ctx.tenantId, actor: ctx.actor.subject, op, targetId: keyId, metadata: { scope } });
315
- }
316
- catch (err) {
317
- // Audit must not undo a grant change that already committed; surface it instead.
318
- reportAuditWriteFailure(op, String(err), keyId);
319
- }
320
- return { ok: true };
321
- }
322
- finally {
323
- closeHippoDb(db);
324
- }
173
+ changeScopeGrant(ctx.hippoRoot, { tenantId: ctx.tenantId, keyId, scope, op, actor: ctx.actor.subject });
174
+ return { ok: true };
325
175
  }
326
176
  //# sourceMappingURL=auth.js.map
@@ -0,0 +1,13 @@
1
+ import type { HippoConfig } from '../core/config.js';
2
+ export declare const autoSleepInFlight: Set<string>;
3
+ export interface AutoSleepDue {
4
+ enabled: boolean;
5
+ count: number;
6
+ threshold: number;
7
+ due: boolean;
8
+ }
9
+ /** Counts only when enabled: the count opens the store. */
10
+ export declare function autoSleepDue(hippoRoot: string, tenantId: string, config: HippoConfig['autoSleep']): AutoSleepDue;
11
+ /** One run per store at a time; `allowed` is the caller's own gate. Consolidation is host-wide, so only the host tenant may start it. */
12
+ export declare function startAutoSleepIfDue(hippoRoot: string, tenantId: string, config: HippoConfig['autoSleep'], allowed: boolean): void;
13
+ //# sourceMappingURL=auto-sleep.d.ts.map
@@ -0,0 +1,32 @@
1
+ // When a write starts a background sleep; the MCP remember tool and the session-close hook share it.
2
+ import { errorMessage, log } from '../util/log.js';
3
+ import { countCreatedSinceLastSleep } from '../store/index-and-stats.js';
4
+ import { consolidate } from '../consolidate/sleep.js';
5
+ import { outsideRequestStores, runWithRequestStores, scopedBusyWait } from '../db/index.js';
6
+ import { resolveTenantId } from '../store/tenant.js';
7
+ export const autoSleepInFlight = new Set();
8
+ /** Counts only when enabled: the count opens the store. */
9
+ export function autoSleepDue(hippoRoot, tenantId, config) {
10
+ const { enabled, threshold } = config;
11
+ const count = enabled ? countCreatedSinceLastSleep(hippoRoot, tenantId) : 0;
12
+ return { enabled, count, threshold, due: enabled && count >= threshold };
13
+ }
14
+ /** One run per store at a time; `allowed` is the caller's own gate. Consolidation is host-wide, so only the host tenant may start it. */
15
+ export function startAutoSleepIfDue(hippoRoot, tenantId, config, allowed) {
16
+ if (!allowed ||
17
+ !config.enabled ||
18
+ tenantId !== resolveTenantId({}) ||
19
+ autoSleepInFlight.has(hippoRoot) ||
20
+ !autoSleepDue(hippoRoot, tenantId, config).due)
21
+ return;
22
+ autoSleepInFlight.add(hippoRoot);
23
+ // Fire-and-forget (never block the response); an unhandled rejection would kill the server, so log it.
24
+ // Its own scope: the call's closes a handle the sleep still holds across its pauses, but the caller's lock wait carries over.
25
+ const busyWaitMs = scopedBusyWait();
26
+ outsideRequestStores(() => runWithRequestStores(() => consolidate(hippoRoot), { busyWaitMs }))
27
+ .catch((err) => {
28
+ log.error(`auto-sleep consolidate failed (tenant ${tenantId}): ${errorMessage(err)}`);
29
+ })
30
+ .finally(() => autoSleepInFlight.delete(hippoRoot));
31
+ }
32
+ //# sourceMappingURL=auto-sleep.js.map
@@ -1,5 +1,5 @@
1
1
  /** A minimal age reference: a memory id plus its ISO-8601 creation timestamp
2
- * (MemoryEntry.created, canonical ISO per the src/memory.ts invariant). */
2
+ * (MemoryEntry.created, canonical ISO per the src/core/memory.ts invariant). */
3
3
  export interface AgeRef {
4
4
  id: string;
5
5
  created: string;
@@ -41,7 +41,7 @@ export interface DetectAvailabilityBiasOpts {
41
41
  /** Minimum older-passed-over count required to fire. Default 3. */
42
42
  minOlderPassedOver?: number;
43
43
  }
44
- export declare const DEFAULT_RECENCY_WINDOW_MS: number;
44
+ export declare const DEFAULT_RECENCY_WINDOW_MS = 86400000;
45
45
  export declare const DEFAULT_RECENT_FRACTION_THRESHOLD = 0.7;
46
46
  export declare const DEFAULT_MIN_RETURNED = 3;
47
47
  export declare const DEFAULT_MIN_POOL = 10;