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,11 +1,11 @@
1
- import { addTagToEntries, writeEntriesTogether } from '../store/entry-writes.js';
2
- import { confirmedOutcomeTimes } from '../store/audit.js';
3
- import { loadAllEntries, loadEntriesMentioning, readEntry } from '../store/entry-reads.js';
4
- import { requireGroup } from '../store/port.js';
1
+ import { localFilesAt } from './roots.js';
5
2
  import { chunked } from '../util/chunked.js';
6
3
  import { CHURN_STALE_TAG } from '../core/memory.js';
7
4
  import { GitReadError, gitLsFilesAtHead, fetchChurnWindowLog, gitGrepPresence, resolveCommitBefore, packageScriptsAt, } from './churn-git.js';
8
5
  const HEADLINE_CHARS = 60;
6
+ const TRIVIAL_REMOVAL_WORDS = new Set([
7
+ 'extra', 'unused', 'empty', 'old', 'whitespace', 'spaces', 'blank', 'dead', 'commented',
8
+ ]);
9
9
  /** Extract what was replaced/removed from a commit message.
10
10
  * Returns null if the commit isn't a breaking/migration change. */
11
11
  export function extractInvalidationTarget(message) {
@@ -36,39 +36,47 @@ export function extractInvalidationTarget(message) {
36
36
  if (removeMatch) {
37
37
  const target = removeMatch[1].trim();
38
38
  const words = target.split(/\s+/);
39
- const trivialWords = new Set(['extra', 'unused', 'empty', 'old', 'whitespace', 'spaces', 'blank', 'dead', 'commented']);
40
- const isTrivial = words.length <= 2 && words.some(w => trivialWords.has(w.toLowerCase()));
39
+ const isTrivial = words.length <= 2 && words.some(w => TRIVIAL_REMOVAL_WORDS.has(w.toLowerCase()));
41
40
  if (isTrivial)
42
41
  return null;
43
42
  return { from: target, to: null, type: 'removal' };
44
43
  }
45
44
  return null;
46
45
  }
47
- /** Find memories that reference the invalidated pattern and weaken them (halve half_life_days, confidence 'stale', add 'invalidated' tag; pinned are skipped).
48
- * Tag matching is EXACT: the FULL pattern must equal a tag, so a pattern merely containing a common tag word cannot mass-weaken every memory with that tag. */
46
+ /** Find memories that reference the invalidated pattern and weaken them (halve half_life_days, confidence 'stale', add
47
+ * 'invalidated' tag; pinned are skipped).
48
+ * Tag matching is EXACT: the FULL pattern must equal a tag, so a pattern merely containing a common tag word cannot
49
+ * mass-weaken every memory with that tag. */
49
50
  export function invalidateMatching(hippoRoot, target, tenantId, options) {
51
+ return invalidateIn(localFilesAt(hippoRoot).learning, target, tenantId, options);
52
+ }
53
+ /** invalidateMatching on the memories `learning` holds. */
54
+ function invalidateIn(learning, target, tenantId, options) {
50
55
  // tenantId opt-in: when set, only that tenant's memories are weakened; undefined is host-wide.
51
56
  // The onlyId read is tenant-scoped too, so another tenant's id is invisible here.
52
57
  const entries = options?.onlyId === undefined
53
- ? loadEntriesMentioning(hippoRoot, invalidationTokenize(target.from), target.from.toLowerCase().trim(), tenantId)
54
- : [readEntry(hippoRoot, options.onlyId, tenantId)].filter((entry) => entry !== null);
58
+ ? learning.entriesMentioning(invalidationTokenize(target.from), target.from.toLowerCase().trim(), tenantId)
59
+ : [learning.readEntry(options.onlyId, tenantId)].filter((entry) => entry !== null);
55
60
  const { result, weakened } = weakenMatches(entries, target, options);
56
- writeEntriesTogether(hippoRoot, weakened);
61
+ learning.writeEntriesTogether(weakened);
57
62
  return result;
58
63
  }
59
- /** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
60
- * Each match is read again before it is weakened, so a row another writer changed since the list was read is never written back stale. */
64
+ /** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it
65
+ * current.
66
+ * Each match is read again before it is weakened, so a row another writer changed since the list was read is never
67
+ * written back stale. */
61
68
  export async function invalidateMatchingAmong(store, live, target, tenantId) {
62
69
  const seen = weakenMatches(live, target, { dryRun: true }).result;
63
70
  const ids = [...seen.targets, ...seen.skippedPinned];
64
71
  const fresh = new Map();
65
72
  // The port reads at most 500 ids a call.
66
- for (const chunk of chunked(ids, 500))
73
+ for (const chunk of chunked(ids, 500)) {
67
74
  for (const entry of await store.entriesByIds(chunk, tenantId))
68
75
  fresh.set(entry.id, entry);
76
+ }
69
77
  const { result, weakened } = weakenMatches(ids.flatMap((id) => fresh.get(id) ?? []), target);
70
78
  if (weakened.length > 0)
71
- await requireGroup(store, 'lessonWrites').writeTogether(weakened);
79
+ await store.lessonWrites.writeTogether(weakened);
72
80
  const byId = new Map(weakened.map((entry) => [entry.id, entry]));
73
81
  for (let i = 0; i < live.length; i++)
74
82
  live[i] = byId.get(live[i].id) ?? live[i];
@@ -154,7 +162,8 @@ const CHURN_PATH_RE = new RegExp(
154
162
  `[A-Za-z0-9_./\\\\:-]+\\.(?:${CHURN_PATH_EXTENSIONS.join('|')})(?![A-Za-z0-9_])(?::\\d+(?:-\\d+)?)?`, 'g');
155
163
  const CHURN_SYMBOL_RE = /`([A-Za-z_$][A-Za-z0-9_$]*)(?:\(\))?`/g;
156
164
  const CHURN_SCRIPT_RE = /npm run(?:-script)?\s+([A-Za-z0-9:_-]+)/g;
157
- /** Pure syntactic extraction; repo-aware resolution (trackedness, path relativization) happens only in detectChurnStale. */
165
+ /** Pure syntactic extraction; repo-aware resolution (trackedness, path relativization) happens only in
166
+ * detectChurnStale. */
158
167
  export function extractChurnRefs(content) {
159
168
  const paths = new Set();
160
169
  for (const m of content.matchAll(CHURN_PATH_RE)) {
@@ -227,8 +236,10 @@ function collectChurnCandidates(entries, opts) {
227
236
  const skippedPinned = [];
228
237
  const candidates = [];
229
238
  for (const entry of entries) {
230
- if (!entry.origin_project || (entry.origin_project !== opts.projectName && entry.origin_project !== opts.legacyName))
239
+ if (!entry.origin_project ||
240
+ (entry.origin_project !== opts.projectName && entry.origin_project !== opts.legacyName)) {
231
241
  continue;
242
+ }
232
243
  if (entry.superseded_by)
233
244
  continue;
234
245
  if (entry.kind === 'raw' || entry.kind === 'archived')
@@ -293,7 +304,16 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
293
304
  ? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
294
305
  : new Set();
295
306
  const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
296
- return { repoRoot, projectName, windowLog, trackedIndex, headIndex, presentAtHeadSymbols, headScripts, ...churnCommitLookups(repoRoot) };
307
+ return {
308
+ repoRoot,
309
+ projectName,
310
+ windowLog,
311
+ trackedIndex,
312
+ headIndex,
313
+ presentAtHeadSymbols,
314
+ headScripts,
315
+ ...churnCommitLookups(repoRoot),
316
+ };
297
317
  }
298
318
  function pathEvidence(git, paths, anchorTime) {
299
319
  for (const rawPath of paths) {
@@ -336,7 +356,8 @@ function scriptEvidence(git, scripts, anchor, headScripts) {
336
356
  : undefined;
337
357
  return hit ? `script-gone: ${hit}` : null;
338
358
  }
339
- /** The first churn evidence against one candidate: a changed or deleted file, then a gone symbol, then a gone script. */
359
+ /** The first churn evidence against one candidate: a changed or deleted file, then a gone symbol, then a gone
360
+ * script. */
340
361
  function churnEvidence(git, refs, anchor) {
341
362
  let evidence = pathEvidence(git, refs.paths, new Date(anchor).getTime());
342
363
  if (!evidence && refs.symbols.length > 0)
@@ -346,13 +367,13 @@ function churnEvidence(git, refs, anchor) {
346
367
  }
347
368
  return evidence;
348
369
  }
349
- function tagChurnStale(hippoRoot, tenantId, toTag, confirmedAt) {
370
+ function tagChurnStale(learning, tenantId, toTag, confirmedAt) {
350
371
  // The git calls above can take seconds; a good outcome landing meanwhile moves the anchor past the evidence.
351
- const confirmedNow = confirmedOutcomeTimes(hippoRoot, tenantId);
372
+ const confirmedNow = learning.confirmedOutcomeTimes(tenantId);
352
373
  const unconfirmed = toTag.filter((stale) => confirmedNow.get(stale.id) === confirmedAt.get(stale.id));
353
374
  if (unconfirmed.length === 0)
354
375
  return;
355
- addTagToEntries(hippoRoot, tenantId, unconfirmed.map((stale) => stale.id), CHURN_STALE_TAG);
376
+ learning.addTagToEntries(tenantId, unconfirmed.map((stale) => stale.id), CHURN_STALE_TAG);
356
377
  }
357
378
  /** Counts every candidate's evidence into `result` and returns the rows still to tag, writing nothing. */
358
379
  function recordChurnEvidence(git, candidates, anchorOf, result) {
@@ -377,19 +398,26 @@ function recordChurnEvidence(git, candidates, anchorOf, result) {
377
398
  /** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
378
399
  * confirmation); only adds/removes CHURN_STALE_TAG, never confidence/half-life/strength. */
379
400
  export function detectChurnStale(hippoRoot, repoRoot, opts) {
401
+ return detectChurnIn(localFilesAt(hippoRoot).learning, repoRoot, opts);
402
+ }
403
+ /** detectChurnStale on the memories `learning` holds. */
404
+ function detectChurnIn(learning, repoRoot, opts) {
380
405
  const dryRun = opts.dryRun === true;
381
406
  if (!opts.projectName)
382
407
  return emptyChurnResult(dryRun);
383
- const entries = loadAllEntries(hippoRoot, opts.tenantId);
408
+ const origins = [opts.projectName, opts.legacyName].filter((name) => !!name);
409
+ const entries = learning.currentEntriesFromOrigins(opts.tenantId, origins);
384
410
  const { candidates, skippedPinned } = collectChurnCandidates(entries, opts);
385
411
  if (candidates.length === 0)
386
412
  return emptyChurnResult(dryRun, skippedPinned);
387
- const confirmedAt = confirmedOutcomeTimes(hippoRoot, opts.tenantId);
413
+ const confirmedAt = learning.confirmedOutcomeTimes(opts.tenantId);
388
414
  // Compared as epoch ms, not strings: imported rows may carry offsets or other ISO forms.
389
415
  const anchorOf = (entry) => {
390
416
  const confirmed = confirmedAt.get(entry.id);
391
417
  const confirmedMs = confirmed ? Date.parse(confirmed) : NaN;
392
- return confirmedMs > Date.parse(entry.created) ? new Date(confirmedMs).toISOString() : new Date(entry.created).toISOString();
418
+ return confirmedMs > Date.parse(entry.created)
419
+ ? new Date(confirmedMs).toISOString()
420
+ : new Date(entry.created).toISOString();
393
421
  };
394
422
  const needs = {
395
423
  paths: candidates.some((c) => c.refs.paths.length > 0),
@@ -402,10 +430,11 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
402
430
  const result = { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned, dryRun, preview: [] };
403
431
  try {
404
432
  const git = loadChurnGitView(repoRoot, opts.legacyName ?? opts.projectName, candidates, anchorOf, needs);
405
- // Collected here and written only after every candidate's evidence is computed, so a GitReadError mid-loop cannot leave an earlier candidate tagged.
433
+ // Collected here and written only after every candidate's evidence is computed, so a GitReadError mid-loop cannot
434
+ // leave an earlier candidate tagged.
406
435
  const toTag = recordChurnEvidence(git, candidates, anchorOf, result);
407
436
  if (!dryRun && toTag.length > 0)
408
- tagChurnStale(hippoRoot, opts.tenantId, toTag, confirmedAt);
437
+ tagChurnStale(learning, opts.tenantId, toTag, confirmedAt);
409
438
  }
410
439
  catch (err) {
411
440
  if (err instanceof GitReadError)
@@ -0,0 +1,3 @@
1
+ import type { LocalFiles } from '../store/port/local-files.js';
2
+ export declare function localFilesAt(hippoRoot: string): LocalFiles;
3
+ //# sourceMappingURL=roots.d.ts.map
@@ -0,0 +1,5 @@
1
+ import { sqliteSyncStore } from '../store/sqlite/store.js';
2
+ export function localFilesAt(hippoRoot) {
3
+ return sqliteSyncStore(hippoRoot).localFiles;
4
+ }
5
+ //# sourceMappingURL=roots.js.map
@@ -1,8 +1,8 @@
1
1
  import { type ToolCall } from './protocol.js';
2
- export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
3
- export declare function runStatusTool({ ctx, hippoRoot, config, tenantId }: ToolCall): string;
4
- export declare function runConflictsTool(call: ToolCall): string;
5
- export declare function runResolveTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
6
- export declare function runShareTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
2
+ export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'predictions'>): Promise<string>;
3
+ export declare function runStatusTool({ ctx, hippoRoot, config, tenantId, store }: ToolCall<'reports'>): Promise<string>;
4
+ export declare function runConflictsTool(call: ToolCall<'conflicts'>): Promise<string>;
5
+ export declare function runResolveTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'conflicts'>): Promise<string>;
6
+ export declare function runShareTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall): Promise<string>;
7
7
  export declare function runPeersTool({ tenantId }: ToolCall): string;
8
8
  //# sourceMappingURL=admin-tools.d.ts.map
@@ -2,30 +2,32 @@
2
2
  import { evalNow } from '../core/ablation.js';
3
3
  import { shareMemory, listPeers } from '../sharing/share.js';
4
4
  import { ConflictError, NotFoundError } from '../core/api-errors.js';
5
- import { predictionBaserate } from '../api/predictions.js';
6
- import { listOpenConflicts, resolveMemoryConflict } from '../api/conflicts.js';
7
- import { getMemoryStatus, getTouchableMemory } from '../api/memories.js';
5
+ import { predictionBaserate } from '../api/objects/predictions.js';
6
+ import { listOpenConflicts, resolveMemoryConflict } from '../api/memories/conflicts.js';
7
+ import { getMemoryStatus, getTouchableMemory } from '../api/memories/memories.js';
8
8
  import { mcpActor } from './protocol.js';
9
9
  import { isJsonString } from '../util/json.js';
10
10
  import { DATE_PREFIX_CHARS } from '../util/token-text.js';
11
11
  const BASERATE_DECIMALS = 3;
12
12
  const NOT_RESOLVED = 'Could not resolve. Check the conflict ID and --keep value.';
13
- export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
13
+ export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId, store }) {
14
14
  // Text-only reply, matching the other MCP tools; the group's read writes the audit row, so no surface can skip it.
15
15
  const classTag = String(args.class_tag || '').trim();
16
- if (!classTag)
16
+ if (!classTag) {
17
17
  return 'No class_tag provided. Usage: pass class_tag matching a class used in past predictions (e.g. "migration-effort").';
18
- const baserate = await predictionBaserate({ hippoRoot, tenantId, actor: mcpActor(ctx), store: ctx?.store }, classTag);
18
+ }
19
+ const baserate = await predictionBaserate({ hippoRoot, tenantId, actor: mcpActor(ctx), store }, classTag);
19
20
  if (baserate.nClosed === 0) {
20
- return `No closed predictions in class "${classTag}" yet. Create one via hippo_predict (or 'hippo predict ...' CLI) ` +
21
+ return (`No closed predictions in class "${classTag}" yet. Create one via hippo_predict (or 'hippo predict ...' CLI) ` +
21
22
  `and close it with hippo_predict_close once the actual outcome is known. ` +
22
- `Base rates need closed predictions with numeric actual_value to compute.`;
23
+ `Base rates need closed predictions with numeric actual_value to compute.`);
23
24
  }
24
25
  const lines = [baserate.summary, ''];
25
26
  lines.push(`n_closed: ${baserate.nClosed}`);
26
27
  lines.push(`n_ratio_eligible: ${baserate.nRatioEligible}`);
27
- if (baserate.meanEstimate !== null)
28
+ if (baserate.meanEstimate !== null) {
28
29
  lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(BASERATE_DECIMALS)}`);
30
+ }
29
31
  if (baserate.meanActual !== null)
30
32
  lines.push(`mean_actual: ${baserate.meanActual.toFixed(BASERATE_DECIMALS)}`);
31
33
  if (baserate.meanRatio !== null)
@@ -36,9 +38,9 @@ export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId })
36
38
  lines.push(`mae: ${baserate.mae.toFixed(BASERATE_DECIMALS)}`);
37
39
  return lines.join('\n');
38
40
  }
39
- export function runStatusTool({ ctx, hippoRoot, config, tenantId }) {
41
+ export async function runStatusTool({ ctx, hippoRoot, config, tenantId, store }) {
40
42
  // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
41
- const tallies = getMemoryStatus({ hippoRoot, tenantId, actor: mcpActor(ctx), store: ctx?.store }, evalNow(), 0.1);
43
+ const tallies = await getMemoryStatus({ hippoRoot, tenantId, actor: mcpActor(ctx), store }, evalNow(), 0.1);
42
44
  const avgStrength = tallies.total > 0 ? (tallies.strengthSum / tallies.total).toFixed(2) : '0';
43
45
  return [
44
46
  `Memories: ${tallies.total} (${tallies.pinned} pinned, ${tallies.errors} errors)`,
@@ -48,14 +50,14 @@ export function runStatusTool({ ctx, hippoRoot, config, tenantId }) {
48
50
  `Half-life default: ${config.defaultHalfLifeDays}d`,
49
51
  ].join('\n');
50
52
  }
51
- export function runConflictsTool(call) {
52
- const { ctx, hippoRoot, tenantId } = call;
53
- const conflicts = listOpenConflicts({ hippoRoot, tenantId, actor: mcpActor(ctx), store: ctx?.store }, ctx?.project);
53
+ export async function runConflictsTool(call) {
54
+ const { ctx, hippoRoot, tenantId, store } = call;
55
+ const conflicts = await listOpenConflicts({ hippoRoot, tenantId, actor: mcpActor(ctx), store }, ctx?.project);
54
56
  if (conflicts.length === 0)
55
57
  return 'No open conflicts.';
56
58
  return conflicts.map((c) => `conflict_${c.id}: ${c.memory_a_id} <-> ${c.memory_b_id} (score=${c.score.toFixed(2)}) — ${c.reason}`).join('\n');
57
59
  }
58
- export function runResolveTool({ args, ctx, hippoRoot, tenantId }) {
60
+ export async function runResolveTool({ args, ctx, hippoRoot, tenantId, store }) {
59
61
  const conflictId = Number(args.conflict_id);
60
62
  const keepId = String(args.keep || '');
61
63
  const forget = Boolean(args.forget);
@@ -65,11 +67,12 @@ export function runResolveTool({ args, ctx, hippoRoot, tenantId }) {
65
67
  return 'Required: conflict_id and keep.';
66
68
  let loserId;
67
69
  try {
68
- const apiCtx = { hippoRoot, tenantId, actor: mcpActor(ctx), store: ctx?.store };
69
- ({ loserId } = resolveMemoryConflict(apiCtx, conflictId, { keepId, forget, rejectLoser, reason }));
70
+ const apiCtx = { hippoRoot, tenantId, actor: mcpActor(ctx), store };
71
+ ({ loserId } = await resolveMemoryConflict(apiCtx, conflictId, { keepId, forget, rejectLoser, reason }));
70
72
  }
71
73
  catch (err) {
72
- // A missing, unreachable or settled conflict answers alike, so the reply says nothing of a pair the caller cannot touch.
74
+ // A missing, unreachable or settled conflict answers alike, so
75
+ // the reply says nothing of a pair the caller cannot touch.
73
76
  if (err instanceof NotFoundError || err instanceof ConflictError)
74
77
  return NOT_RESOLVED;
75
78
  throw err;
@@ -77,16 +80,16 @@ export function runResolveTool({ args, ctx, hippoRoot, tenantId }) {
77
80
  const action = rejectLoser ? 'rejected (tombstoned) and removed' : forget ? 'deleted' : 'weakened';
78
81
  return `Resolved conflict ${conflictId}: kept ${keepId}, ${action} ${loserId}`;
79
82
  }
80
- export async function runShareTool({ args, ctx, hippoRoot, tenantId }) {
83
+ export async function runShareTool({ args, ctx, hippoRoot, tenantId, store }) {
81
84
  const shareId = String(args.id || '');
82
85
  if (!shareId)
83
86
  return 'Required: id (memory ID to share).';
84
87
  const force = Boolean(args.force);
85
88
  const actor = mcpActor(ctx);
86
89
  // Checked before shareMemory, whose personal-row refusal would tell another person the id exists.
87
- await getTouchableMemory({ hippoRoot, tenantId, actor, store: ctx?.store }, shareId);
88
- // Pass tenantId so shareMemory's readEntry filters by tenant; otherwise a Bearer for tenant A could share tenant B's id to the global store.
89
- // The 'Memory not found' error matches the cross-tenant deny shape elsewhere.
90
+ await getTouchableMemory({ hippoRoot, tenantId, actor, store }, shareId);
91
+ // Pass tenantId so shareMemory's readEntry filters by tenant; otherwise a Bearer for tenant A could share tenant B's
92
+ // id to the global store. The 'Memory not found' error matches the cross-tenant deny shape elsewhere.
90
93
  const shared = shareMemory(hippoRoot, shareId, { force, tenantId });
91
94
  if (!shared)
92
95
  return 'Transfer score too low. Use force=true to override.';
@@ -97,6 +100,8 @@ export function runPeersTool({ tenantId }) {
97
100
  const peers = listPeers(undefined, tenantId);
98
101
  if (peers.length === 0)
99
102
  return 'No peers found.';
100
- return peers.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0, DATE_PREFIX_CHARS)})`).join('\n');
103
+ return peers
104
+ .map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0, DATE_PREFIX_CHARS)})`)
105
+ .join('\n');
101
106
  }
102
107
  //# sourceMappingURL=admin-tools.js.map
@@ -2,7 +2,7 @@ import type { SearchResult } from '../core/search-types.js';
2
2
  import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
3
3
  import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api/index.js';
4
4
  import { type SessionHandoff } from '../core/handoff.js';
5
- import { detectAnchoring } from '../api/recall-history.js';
5
+ import { detectAnchoring } from '../api/recall/finish.js';
6
6
  import { detectAvailabilityBias } from '../api/availability.js';
7
7
  export declare function formatContinuityBlock(block: ContinuityBlock): string;
8
8
  export declare function formatMemories(results: ReadonlyArray<Pick<SearchResult, 'entry'>>): string;
@@ -126,11 +126,13 @@ export function tailSection(rows) {
126
126
  export function planningSection(r) {
127
127
  if (r.planningFallacyHint) {
128
128
  const h = r.planningFallacyHint;
129
- return `## Planning fallacy hint\nClass: ${h.classTag}\n${h.baserateSummary}\n(detected: ${JSON.stringify(h.detectedPhrase)})\n\n---\n\n`;
129
+ return `## Planning fallacy hint\nClass: ${h.classTag}\n${h.baserateSummary}\n(detected: ` +
130
+ `${JSON.stringify(h.detectedPhrase)})\n\n---\n\n`;
130
131
  }
131
132
  if (r.planningFallacyWatching) {
132
133
  const w = r.planningFallacyWatching;
133
- return `## Planning fallacy watch\nReason: ${w.reason}\n${w.suggestion}\n(detected: ${JSON.stringify(w.detectedPhrase)})\n\n---\n\n`;
134
+ return `## Planning fallacy watch\nReason: ${w.reason}\n${w.suggestion}\n(detected: ` +
135
+ `${JSON.stringify(w.detectedPhrase)})\n\n---\n\n`;
134
136
  }
135
137
  return '';
136
138
  }
@@ -1,4 +1,6 @@
1
- /** What of a refused frame has not arrived yet: a byte count when its header declared one, else the rest of its line. */
1
+ /**
2
+ * What of a refused frame has not arrived yet: a byte count when its header declared one, else the rest of its line.
3
+ */
2
4
  export type FrameRemainder = number | 'line';
3
5
  export type FrameResult = {
4
6
  kind: 'message';
@@ -4,14 +4,21 @@
4
4
  import { MAX_BODY_BYTES } from '../util/http-util.js';
5
5
  const HEADER_DELIM = Buffer.from('\r\n\r\n');
6
6
  const EMPTY = Buffer.alloc(0);
7
- export function parseFrame(buffer) {
8
- // Strip leading whitespace/newlines between messages.
7
+ function skipWhitespace(buffer) {
9
8
  let start = 0;
10
9
  while (start < buffer.length &&
11
- (buffer[start] === 0x0a || buffer[start] === 0x0d ||
12
- buffer[start] === 0x20 || buffer[start] === 0x09)) {
10
+ (buffer[start] === 0x0a || buffer[start] === 0x0d || buffer[start] === 0x20 || buffer[start] === 0x09)) {
13
11
  start++;
14
12
  }
13
+ return start;
14
+ }
15
+ function incompleteOrOversize(trimmed) {
16
+ return trimmed.length > MAX_BODY_BYTES
17
+ ? { kind: 'oversize', rest: EMPTY, remainder: 'line' }
18
+ : { kind: 'incomplete' };
19
+ }
20
+ export function parseFrame(buffer) {
21
+ const start = skipWhitespace(buffer);
15
22
  if (start === buffer.length)
16
23
  return { kind: 'incomplete' };
17
24
  const trimmed = buffer.subarray(start);
@@ -19,7 +26,7 @@ export function parseFrame(buffer) {
19
26
  if (trimmed[0] === 0x43 /* 'C' */ || trimmed[0] === 0x63 /* 'c' */) {
20
27
  const headerEnd = trimmed.indexOf(HEADER_DELIM);
21
28
  if (headerEnd === -1)
22
- return trimmed.length > MAX_BODY_BYTES ? { kind: 'oversize', rest: EMPTY, remainder: 'line' } : { kind: 'incomplete' };
29
+ return incompleteOrOversize(trimmed);
23
30
  const header = trimmed.subarray(0, headerEnd).toString('utf-8');
24
31
  const match = header.match(/Content-Length:\s*(\d+)/i);
25
32
  if (!match)
@@ -28,17 +35,22 @@ export function parseFrame(buffer) {
28
35
  const bodyStart = headerEnd + 4;
29
36
  if (contentLength > MAX_BODY_BYTES) {
30
37
  const end = bodyStart + contentLength;
31
- return { kind: 'oversize', rest: Buffer.from(trimmed.subarray(Math.min(end, trimmed.length))), remainder: Math.max(0, end - trimmed.length) };
38
+ return {
39
+ kind: 'oversize',
40
+ rest: Buffer.from(trimmed.subarray(Math.min(end, trimmed.length))),
41
+ remainder: Math.max(0, end - trimmed.length),
42
+ };
32
43
  }
33
- if (trimmed.length < bodyStart + contentLength)
44
+ if (trimmed.length < bodyStart + contentLength) {
34
45
  return { kind: 'incomplete', needs: start + bodyStart + contentLength };
46
+ }
35
47
  const body = trimmed.subarray(bodyStart, bodyStart + contentLength).toString('utf-8');
36
48
  return { kind: 'message', body, rest: Buffer.from(trimmed.subarray(bodyStart + contentLength)) };
37
49
  }
38
50
  // Newline-delimited JSON (MCP spec).
39
51
  const newlineIdx = trimmed.indexOf(0x0a);
40
52
  if (newlineIdx === -1)
41
- return trimmed.length > MAX_BODY_BYTES ? { kind: 'oversize', rest: EMPTY, remainder: 'line' } : { kind: 'incomplete' };
53
+ return incompleteOrOversize(trimmed);
42
54
  const rest = Buffer.from(trimmed.subarray(newlineIdx + 1));
43
55
  if (newlineIdx > MAX_BODY_BYTES)
44
56
  return { kind: 'oversize', rest, remainder: 0 };
@@ -1,5 +1,5 @@
1
1
  import { type ToolCall } from './protocol.js';
2
- export declare function runRememberTool({ args, ctx, hippoRoot, config, tenantId }: ToolCall): Promise<string>;
3
- export declare function runOutcomeTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
4
- export declare function runLearnTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
2
+ export declare function runRememberTool({ args, ctx, hippoRoot, config, tenantId, store }: ToolCall<'entryWrites'>): Promise<string>;
3
+ export declare function runOutcomeTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'entryWrites'>): Promise<string>;
4
+ export declare function runLearnTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'lessonWrites'>): Promise<string>;
5
5
  //# sourceMappingURL=memory-tools.d.ts.map
@@ -1,10 +1,10 @@
1
1
  // Write-side tool handlers: hippo_remember, hippo_outcome and hippo_learn.
2
2
  import { hasGroup } from '../store/index.js';
3
- import { startAutoSleepIfDue } from '../api/auto-sleep.js';
4
- import { remember as apiRemember, outcome as apiOutcome, learn as apiLearn, MCP_LEARN } from '../api/index.js';
3
+ import { startAutoSleepIfDue } from '../api/sleep/auto-sleep.js';
4
+ import { remember as apiRemember, outcome as apiOutcome, learn as apiLearn, MCP_LEARN, } from '../api/index.js';
5
5
  import { mcpActor } from './protocol.js';
6
6
  import { lastRecalledIds, resolveClientKey } from './session-state.js';
7
- export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId }) {
7
+ export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId, store }) {
8
8
  const text = String(args.text || '');
9
9
  if (!text)
10
10
  return 'No text provided.';
@@ -13,12 +13,13 @@ export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId }
13
13
  tags.push('error');
14
14
  if (args.tag)
15
15
  tags.push(String(args.tag));
16
- // Route through api/index.ts so audit_log captures the caller identity like CLI/REST: the auth-resolved ctx.actor under HTTP-MCP, 'mcp' for stdio.
16
+ // Route through api/index.ts so audit_log captures the caller identity like CLI/REST: the auth-resolved ctx.actor
17
+ // under HTTP-MCP, 'mcp' for stdio.
17
18
  const apiCtx = {
18
19
  hippoRoot,
19
20
  tenantId,
20
21
  actor: mcpActor(ctx),
21
- store: ctx?.store,
22
+ store,
22
23
  };
23
24
  const result = await apiRemember(apiCtx, {
24
25
  content: text,
@@ -27,33 +28,36 @@ export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId }
27
28
  project: ctx?.project,
28
29
  });
29
30
  // Auto-sleep runs on hippo.db, so another store skips it.
30
- const allowed = (ctx?.store === undefined || hasGroup(ctx.store, 'localFiles')) && ctx?.autoSleep !== false;
31
- startAutoSleepIfDue(hippoRoot, tenantId, config.autoSleep, allowed, ctx?.autoSleepRunner);
31
+ const allowed = hasGroup(store, 'localFiles') && ctx.autoSleep !== false;
32
+ const run = ctx.autoSleepRunner;
33
+ if (run !== undefined)
34
+ startAutoSleepIfDue(hippoRoot, tenantId, config.autoSleep, allowed, run);
32
35
  const tagStr = result.tags.join(', ') || 'none';
33
36
  const warnings = (result.warnings ?? []).map((w) => `\nWarning: ${w}`).join('');
34
37
  return `Remembered [${result.id}] (half-life: ${result.halfLifeDays}d, tags: ${tagStr})${warnings}`;
35
38
  }
36
- export async function runOutcomeTool({ args, ctx, hippoRoot, tenantId }) {
39
+ export async function runOutcomeTool({ args, ctx, hippoRoot, tenantId, store }) {
37
40
  const good = Boolean(args.good);
38
41
  const clientKey = resolveClientKey(ctx);
39
42
  const ids = lastRecalledIds.get(clientKey) ?? [];
40
43
  if (ids.length === 0)
41
44
  return 'No recent recalls to apply outcome to.';
42
- // Route through src/api/index.ts so audit_log captures the caller identity (auth-resolved ctx.actor under HTTP-MCP, 'mcp' for stdio) and tenant scoping is
43
- // uniform; outcome() also skips cross-tenant ids silently.
45
+ // Route through src/api/index.ts so audit_log captures the caller identity (auth-resolved ctx.actor under HTTP-MCP,
46
+ // 'mcp' for stdio) and tenant scoping is uniform; outcome() also skips cross-tenant ids silently.
44
47
  const apiCtx = {
45
48
  hippoRoot,
46
49
  tenantId,
47
50
  actor: mcpActor(ctx),
48
- store: ctx?.store,
51
+ store,
49
52
  };
50
53
  const { applied } = await apiOutcome(apiCtx, ids, good);
51
54
  return `Applied ${good ? 'positive' : 'negative'} outcome to ${applied} memories`;
52
55
  }
53
- export async function runLearnTool({ args, ctx, hippoRoot, tenantId }) {
56
+ export async function runLearnTool({ args, ctx, hippoRoot, tenantId, store }) {
54
57
  const days = Number(args.days) || 7;
55
- // process.cwd() is the server's repo, not a remote caller's, so api learn refuses all but stdio and a host admin (mcpActor fails closed).
56
- const result = await apiLearn({ hippoRoot, tenantId, actor: mcpActor(ctx), store: ctx?.store }, { repoPath: process.cwd(), days, profile: MCP_LEARN });
58
+ // process.cwd() is the server's repo, not a remote caller's, so api learn refuses all but stdio and a host admin
59
+ // (mcpActor fails closed).
60
+ const result = await apiLearn({ hippoRoot, tenantId, actor: mcpActor(ctx), store }, { repoPath: process.cwd(), days, profile: MCP_LEARN });
57
61
  if (result.status === 'not-a-repo')
58
62
  return 'No git history found.';
59
63
  if (result.status === 'no-commits')
@@ -3,8 +3,9 @@ import type { Actor as ApiActor } from '../api/index.js';
3
3
  import { type ResolveProjectIdentityOpts } from '../core/project-identity.js';
4
4
  import { type JsonValue } from '../util/json.js';
5
5
  import type { CallerProject } from '../api/prompt-hook.js';
6
- import type { HippoStore } from '../store/index.js';
7
- import type { AutoSleepRunner } from '../api/auto-sleep.js';
6
+ import type { HippoStore, StoreGroup, StoreWith } from '../store/index.js';
7
+ import type { StoreReach } from '../store/port.js';
8
+ import type { AutoSleepRunner } from '../api/sleep/auto-sleep.js';
8
9
  /** Same bounded walk as the CLI (ends at home, so HIPPO_HOME wins over ~/.hippo); cwd/opts are the test seam. */
9
10
  export declare function findHippoRoot(cwd?: string, opts?: ResolveProjectIdentityOpts): string | null;
10
11
  interface McpRequest {
@@ -25,16 +26,18 @@ interface McpResponse {
25
26
  };
26
27
  };
27
28
  }
28
- /** JSON-RPC reply for a request that threw: typed API errors keep their text; anything else is logged and answered generically. */
29
+ /** JSON-RPC reply for a request that threw: typed API errors keep
30
+ * their text; anything else is logged and answered generically. */
29
31
  export declare function mcpErrorResponse<E>(id: McpResponse['id'], err: E, requestId?: string, call?: string): McpResponse;
30
32
  export type { McpRequest, McpResponse };
31
- /** Optional context from a non-stdio transport (the HTTP server's bound hippoRoot and auth-resolved tenantId/actor), so executeTool skips the
32
- * findHippoRoot() walk and the env-based resolveTenantId({}) fallback, which would pick the wrong store and tenant for HTTP callers. Stdio passes nothing. */
33
+ /** Optional context from a non-stdio transport (the HTTP server's bound hippoRoot and auth-resolved tenantId/actor), so
34
+ * executeTool skips the findHippoRoot() walk and the env-based tenant fallback, which would pick the wrong store. */
33
35
  export interface McpContext {
34
36
  hippoRoot: string;
35
37
  tenantId: string;
36
38
  actor: string;
37
- /** The caller's authenticated role. Required so no transport can forget it; only stdio, which passes no context, is admin without one. */
39
+ /** The caller's authenticated role. Required so no transport can forget it; only stdio, which passes no context,
40
+ * is admin without one. */
38
41
  role: 'admin' | 'member';
39
42
  /** Scope grants for the HTTP-MCP caller's key. Absent for stdio (admin, needs none). */
40
43
  scopes?: readonly string[];
@@ -43,26 +46,39 @@ export interface McpContext {
43
46
  hostAdmin?: true;
44
47
  owner?: string;
45
48
  project?: CallerProject;
46
- store?: HippoStore;
49
+ /** The store this transport's calls run on. */
50
+ store: HippoStore;
51
+ /** Set by the stdio host: the operator's own process, so no shared-store gate applies. */
52
+ stdio?: true;
53
+ reach?: StoreReach;
47
54
  autoSleep?: false;
48
- /** Set by the HTTP transport so auto-sleep runs off the server's event loop; stdio consolidates in its own process. */
55
+ /** How an auto-sleep runs: the HTTP transport runs it off the server's event loop, stdio in its own process.
56
+ * Without one, no auto-sleep starts. */
49
57
  autoSleepRunner?: AutoSleepRunner;
50
- /** Per-client key for state isolation under HTTP-MCP: 'stdio-${pid}' for stdio, hash(bearer + remoteAddr) for HTTP (built in src/server/mcp-http.ts);
51
- * defaults to `${tenantId}:default`. */
58
+ /** Per-client key for state isolation under HTTP-MCP: 'stdio-${pid}' for stdio, hash(bearer + remoteAddr) for HTTP
59
+ * (built in src/server/mcp-http.ts); defaults to `${tenantId}:default`. */
52
60
  clientKey?: string;
53
61
  }
54
- /** The api-layer actor for a tool call. Only stdio passes no context: it is the local operator, host admin. Any context runs as its own role, and an
55
- * untyped caller that sends none runs as a member, so a missing role fails closed. */
62
+ /** The api-layer actor for a tool call. Only stdio passes no context: it is the local operator, host admin. Any context
63
+ * runs as its own role, and an untyped caller that sends none runs as a member, so a missing role fails closed. */
56
64
  export declare function mcpActor(ctx: McpContext | undefined): ApiActor;
57
65
  /** Stdio or a host admin: the only callers whose server cwd and git history are their own to read. */
58
66
  export declare function ownsServerCwd(ctx: McpContext | undefined): boolean;
59
- /** One tool call after the store, config and tenant are resolved; every handler reads the same four. */
60
- export interface ToolCall {
67
+ /** What the stdio transport takes from its composition root: the context for a folder, and the scope each frame runs
68
+ * in. The root names the store adapter and the scope plumbing, so src/mcp names neither. */
69
+ export interface McpHost {
70
+ contextFor(hippoRoot: string, tenantId: string): McpContext;
71
+ runRequest<T>(run: () => Promise<T>): Promise<T>;
72
+ }
73
+ /** One tool call after the store, config and tenant are resolved; every handler reads the same five. `G` is the group
74
+ * the dispatch gate proved on the store. */
75
+ export interface ToolCall<G extends StoreGroup = 'base'> {
61
76
  args: Record<string, JsonValue>;
62
- ctx?: McpContext;
77
+ ctx: McpContext;
63
78
  hippoRoot: string;
79
+ store: StoreWith<G>;
64
80
  config: ReturnType<typeof loadConfig>;
65
81
  tenantId: string;
66
82
  }
67
- export type ToolHandler = (call: ToolCall) => string | Promise<string>;
83
+ export type ToolHandler<G extends StoreGroup = 'base'> = (call: ToolCall<G>) => string | Promise<string>;
68
84
  //# sourceMappingURL=protocol.d.ts.map