hippo-memory 1.72.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (995) hide show
  1. package/README.md +6 -4
  2. package/dist/agent-memories/apply.d.ts +7 -5
  3. package/dist/agent-memories/apply.js +66 -39
  4. package/dist/agent-memories/claude-code.d.ts +8 -2
  5. package/dist/agent-memories/claude-code.js +26 -7
  6. package/dist/agent-memories/copilot.js +2 -1
  7. package/dist/agent-memories/files.js +2 -1
  8. package/dist/agent-memories/legacy.d.ts +6 -3
  9. package/dist/agent-memories/legacy.js +35 -14
  10. package/dist/agent-memories/markdown.d.ts +3 -1
  11. package/dist/agent-memories/markdown.js +3 -1
  12. package/dist/agent-memories/openclaw.js +5 -2
  13. package/dist/agent-memories/plan.js +11 -1
  14. package/dist/agent-memories/project-folds.js +2 -1
  15. package/dist/agent-memories/report.d.ts +4 -1
  16. package/dist/agent-memories/report.js +43 -9
  17. package/dist/agent-memories/source.d.ts +8 -2
  18. package/dist/agent-memories/source.js +11 -3
  19. package/dist/agent-memories/sync.d.ts +7 -2
  20. package/dist/agent-memories/sync.js +141 -101
  21. package/dist/api/assemble.d.ts +6 -4
  22. package/dist/api/assemble.js +11 -5
  23. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  24. package/dist/api/auth/audit.js +58 -0
  25. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
  26. package/dist/api/{auth.js → auth/auth.js} +66 -54
  27. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  28. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
  29. package/dist/api/auth/session-owners.d.ts +10 -0
  30. package/dist/api/auth/session-owners.js +35 -0
  31. package/dist/api/availability.d.ts +3 -1
  32. package/dist/api/availability.js +3 -1
  33. package/dist/api/busy.d.ts +2 -0
  34. package/dist/api/busy.js +2 -0
  35. package/dist/api/cli-surface.d.ts +6 -0
  36. package/dist/api/cli-surface.js +6 -0
  37. package/dist/api/config-of.d.ts +5 -0
  38. package/dist/api/config-of.js +6 -0
  39. package/dist/api/context-auto.d.ts +4 -1
  40. package/dist/api/context-auto.js +14 -4
  41. package/dist/api/context-render.js +14 -7
  42. package/dist/api/context-select.d.ts +4 -1
  43. package/dist/api/context-select.js +31 -34
  44. package/dist/api/context-types.d.ts +38 -12
  45. package/dist/api/context.d.ts +8 -5
  46. package/dist/api/context.js +120 -63
  47. package/dist/api/continuity.d.ts +24 -21
  48. package/dist/api/continuity.js +18 -20
  49. package/dist/api/correction-latency.d.ts +3 -1
  50. package/dist/api/correction-latency.js +3 -1
  51. package/dist/api/error-reply.d.ts +4 -1
  52. package/dist/api/error-reply.js +12 -3
  53. package/dist/api/index.d.ts +39 -23
  54. package/dist/api/index.js +21 -23
  55. package/dist/api/instruction-detect.d.ts +4 -1
  56. package/dist/api/instruction-detect.js +75 -20
  57. package/dist/api/ledger-db.d.ts +15 -11
  58. package/dist/api/ledger-db.js +21 -23
  59. package/dist/api/memories/conflicts.d.ts +33 -0
  60. package/dist/api/memories/conflicts.js +67 -0
  61. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  62. package/dist/api/{forget.js → memories/forget.js} +23 -17
  63. package/dist/api/memories/memories.d.ts +27 -0
  64. package/dist/api/memories/memories.js +52 -0
  65. package/dist/api/memories/outcome.d.ts +22 -0
  66. package/dist/api/memories/outcome.js +28 -0
  67. package/dist/api/memories/promote.d.ts +40 -0
  68. package/dist/api/memories/promote.js +76 -0
  69. package/dist/api/memories/refine.d.ts +10 -0
  70. package/dist/api/memories/refine.js +12 -0
  71. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
  72. package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
  73. package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
  74. package/dist/api/{remember.js → memories/remember.js} +50 -32
  75. package/dist/api/objects/cards.d.ts +39 -0
  76. package/dist/api/{cards.js → objects/cards.js} +12 -14
  77. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  78. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
  79. package/dist/api/objects/goals.d.ts +18 -0
  80. package/dist/api/{goals.js → objects/goals.js} +12 -12
  81. package/dist/api/objects/graph.d.ts +11 -0
  82. package/dist/api/objects/graph.js +16 -0
  83. package/dist/api/objects/objects.d.ts +9 -0
  84. package/dist/api/{objects.js → objects/objects.js} +2 -3
  85. package/dist/api/objects/predictions.d.ts +11 -0
  86. package/dist/api/{predictions.js → objects/predictions.js} +7 -5
  87. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  88. package/dist/api/{projects.js → objects/projects.js} +8 -4
  89. package/dist/api/pilot-arm.d.ts +8 -4
  90. package/dist/api/pilot-arm.js +5 -4
  91. package/dist/api/prompt-hook.d.ts +35 -20
  92. package/dist/api/prompt-hook.js +66 -44
  93. package/dist/api/provenance-coverage.d.ts +3 -1
  94. package/dist/api/provenance-coverage.js +3 -1
  95. package/dist/api/recall/finish.d.ts +185 -0
  96. package/dist/api/recall/finish.js +301 -0
  97. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  98. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
  99. package/dist/api/recall/recall.d.ts +6 -0
  100. package/dist/api/{recall.js → recall/recall.js} +116 -72
  101. package/dist/api/recall/render.d.ts +39 -0
  102. package/dist/api/recall/render.js +60 -0
  103. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  104. package/dist/api/recall/request.js +261 -0
  105. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  106. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  107. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
  108. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  109. package/dist/api/session-end.d.ts +36 -8
  110. package/dist/api/session-end.js +71 -25
  111. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  112. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  113. package/dist/api/sleep/dormant.d.ts +25 -0
  114. package/dist/api/sleep/dormant.js +64 -0
  115. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  116. package/dist/api/sleep/learn.js +138 -0
  117. package/dist/api/sleep/sleep-run.d.ts +38 -0
  118. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
  119. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  120. package/dist/api/sleep/sleep.js +9 -0
  121. package/dist/api/status.d.ts +3 -1
  122. package/dist/api/status.js +3 -1
  123. package/dist/api/store-init.d.ts +4 -1
  124. package/dist/api/store-init.js +4 -1
  125. package/dist/api/tokens.d.ts +10 -9
  126. package/dist/api/tokens.js +9 -10
  127. package/dist/api/types.d.ts +27 -12
  128. package/dist/api/types.js +13 -4
  129. package/dist/capture/caller-session.d.ts +8 -2
  130. package/dist/capture/caller-session.js +16 -6
  131. package/dist/capture/capture-error.d.ts +3 -1
  132. package/dist/capture/capture-error.js +3 -1
  133. package/dist/capture/codex-patch.js +7 -2
  134. package/dist/capture/command.d.ts +4 -2
  135. package/dist/capture/command.js +34 -15
  136. package/dist/capture/compact-resume-caller.js +15 -8
  137. package/dist/capture/compact.d.ts +8 -5
  138. package/dist/capture/compact.js +34 -23
  139. package/dist/capture/compaction-items-caller.js +9 -3
  140. package/dist/capture/compaction-record.d.ts +4 -3
  141. package/dist/capture/compaction-record.js +20 -12
  142. package/dist/capture/compaction-spool.d.ts +18 -9
  143. package/dist/capture/compaction-spool.js +105 -63
  144. package/dist/capture/copilot-transcript.d.ts +11 -3
  145. package/dist/capture/copilot-transcript.js +16 -6
  146. package/dist/capture/extract.js +20 -8
  147. package/dist/capture/failure-caller.js +23 -12
  148. package/dist/capture/failure-reading.d.ts +10 -3
  149. package/dist/capture/failure-reading.js +24 -7
  150. package/dist/capture/pre-compact-caller.js +11 -4
  151. package/dist/capture/session-digest.d.ts +15 -4
  152. package/dist/capture/session-digest.js +39 -13
  153. package/dist/capture/session-end-caller.d.ts +4 -1
  154. package/dist/capture/session-end-caller.js +20 -8
  155. package/dist/capture/session-texts.d.ts +6 -2
  156. package/dist/capture/session-texts.js +22 -7
  157. package/dist/capture/session-worker.d.ts +4 -2
  158. package/dist/capture/session-worker.js +58 -17
  159. package/dist/capture/transcript.d.ts +13 -4
  160. package/dist/capture/transcript.js +32 -10
  161. package/dist/capture/working-state.d.ts +13 -4
  162. package/dist/capture/working-state.js +50 -56
  163. package/dist/cli/api-context.d.ts +14 -2
  164. package/dist/cli/api-context.js +45 -2
  165. package/dist/cli/audit.js +33 -33
  166. package/dist/cli/auth.js +23 -31
  167. package/dist/cli/briefs.d.ts +1 -1
  168. package/dist/cli/briefs.js +20 -15
  169. package/dist/cli/card.d.ts +1 -1
  170. package/dist/cli/card.js +56 -73
  171. package/dist/cli/client.d.ts +12 -5
  172. package/dist/cli/client.js +53 -23
  173. package/dist/cli/compact-resume-payload.d.ts +4 -1
  174. package/dist/cli/compact-resume-payload.js +12 -5
  175. package/dist/cli/context.js +43 -18
  176. package/dist/cli/continuity.d.ts +5 -5
  177. package/dist/cli/continuity.js +90 -107
  178. package/dist/cli/curate.d.ts +5 -4
  179. package/dist/cli/curate.js +55 -77
  180. package/dist/cli/dag.d.ts +1 -1
  181. package/dist/cli/dag.js +14 -17
  182. package/dist/cli/decisions.js +30 -30
  183. package/dist/cli/eval.js +16 -21
  184. package/dist/cli/exit.d.ts +4 -1
  185. package/dist/cli/exit.js +10 -2
  186. package/dist/cli/explain.js +12 -11
  187. package/dist/cli/flag-values.d.ts +1 -1
  188. package/dist/cli/flag-values.js +9 -18
  189. package/dist/cli/github.d.ts +6 -0
  190. package/dist/cli/github.js +25 -13
  191. package/dist/cli/goals.d.ts +1 -1
  192. package/dist/cli/goals.js +39 -56
  193. package/dist/cli/graph.d.ts +1 -1
  194. package/dist/cli/graph.js +15 -11
  195. package/dist/cli/hook-runtime.d.ts +34 -10
  196. package/dist/cli/hook-runtime.js +41 -16
  197. package/dist/cli/incidents.d.ts +1 -1
  198. package/dist/cli/incidents.js +25 -25
  199. package/dist/cli/init.d.ts +1 -1
  200. package/dist/cli/init.js +35 -20
  201. package/dist/cli/install-steps.d.ts +12 -3
  202. package/dist/cli/install-steps.js +42 -18
  203. package/dist/cli/last-sleep.d.ts +4 -1
  204. package/dist/cli/last-sleep.js +9 -4
  205. package/dist/cli/maintenance.d.ts +1 -1
  206. package/dist/cli/maintenance.js +11 -12
  207. package/dist/cli/notes.d.ts +1 -1
  208. package/dist/cli/notes.js +8 -5
  209. package/dist/cli/object-verbs.d.ts +5 -5
  210. package/dist/cli/object-verbs.js +13 -16
  211. package/dist/cli/open-browser.js +11 -2
  212. package/dist/cli/playbooks.d.ts +3 -3
  213. package/dist/cli/playbooks.js +40 -32
  214. package/dist/cli/predictions.js +17 -22
  215. package/dist/cli/print.js +4 -2
  216. package/dist/cli/projects.js +21 -11
  217. package/dist/cli/quality-repair-once.d.ts +1 -1
  218. package/dist/cli/quality-repair-once.js +7 -6
  219. package/dist/cli/recall.js +129 -93
  220. package/dist/cli/refine-llm.d.ts +15 -4
  221. package/dist/cli/refine-llm.js +17 -7
  222. package/dist/cli/remember.js +51 -55
  223. package/dist/cli/scheduler.d.ts +4 -1
  224. package/dist/cli/scheduler.js +9 -5
  225. package/dist/cli/serve.js +28 -18
  226. package/dist/cli/session-hooks.d.ts +2 -6
  227. package/dist/cli/session-hooks.js +140 -112
  228. package/dist/cli/setup.d.ts +1 -1
  229. package/dist/cli/setup.js +56 -34
  230. package/dist/cli/shared.d.ts +4 -2
  231. package/dist/cli/shared.js +26 -11
  232. package/dist/cli/slack.js +15 -24
  233. package/dist/cli/sleep-render.d.ts +3 -1
  234. package/dist/cli/sleep-render.js +8 -5
  235. package/dist/cli/sleep.js +16 -8
  236. package/dist/cli/status.d.ts +4 -4
  237. package/dist/cli/status.js +32 -27
  238. package/dist/cli/stdin.d.ts +10 -3
  239. package/dist/cli/stdin.js +10 -3
  240. package/dist/cli/transfer.d.ts +4 -4
  241. package/dist/cli/transfer.js +97 -82
  242. package/dist/cli/usage.d.ts +1 -1
  243. package/dist/cli/usage.js +1 -1
  244. package/dist/cli/verb-row.d.ts +2 -0
  245. package/dist/cli/verbs/health.js +2 -0
  246. package/dist/cli/verbs/memory.js +47 -53
  247. package/dist/cli/verbs/objects.js +16 -7
  248. package/dist/cli/verbs/sessions.js +4 -2
  249. package/dist/cli/versioned-verbs.d.ts +8 -7
  250. package/dist/cli/versioned-verbs.js +31 -21
  251. package/dist/cli.js +14 -18
  252. package/dist/connectors/dlq.d.ts +6 -6
  253. package/dist/connectors/dlq.js +12 -7
  254. package/dist/connectors/github/backfill.d.ts +4 -4
  255. package/dist/connectors/github/backfill.js +6 -4
  256. package/dist/connectors/github/deletion.d.ts +6 -4
  257. package/dist/connectors/github/deletion.js +5 -4
  258. package/dist/connectors/github/dlq.d.ts +8 -6
  259. package/dist/connectors/github/dlq.js +11 -5
  260. package/dist/connectors/github/ingest.d.ts +2 -2
  261. package/dist/connectors/github/ingest.js +9 -5
  262. package/dist/connectors/github/octokit-client.d.ts +3 -1
  263. package/dist/connectors/github/octokit-client.js +7 -2
  264. package/dist/connectors/github/ratelimit.d.ts +6 -2
  265. package/dist/connectors/github/ratelimit.js +6 -2
  266. package/dist/connectors/github/signature.d.ts +14 -3
  267. package/dist/connectors/github/signature.js +17 -3
  268. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  269. package/dist/connectors/github/tenant-routing.js +6 -5
  270. package/dist/connectors/github/transform.js +50 -67
  271. package/dist/connectors/github/types.d.ts +10 -3
  272. package/dist/connectors/github/types.js +6 -2
  273. package/dist/connectors/github/webhook.d.ts +5 -5
  274. package/dist/connectors/github/webhook.js +36 -23
  275. package/dist/connectors/ingest.d.ts +5 -3
  276. package/dist/connectors/ingest.js +3 -3
  277. package/dist/connectors/slack/backfill.d.ts +5 -5
  278. package/dist/connectors/slack/backfill.js +3 -3
  279. package/dist/connectors/slack/deletion.d.ts +4 -4
  280. package/dist/connectors/slack/deletion.js +6 -5
  281. package/dist/connectors/slack/dlq.d.ts +4 -4
  282. package/dist/connectors/slack/dlq.js +6 -6
  283. package/dist/connectors/slack/ingest.d.ts +6 -4
  284. package/dist/connectors/slack/ingest.js +5 -4
  285. package/dist/connectors/slack/signature.d.ts +4 -1
  286. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  287. package/dist/connectors/slack/tenant-routing.js +6 -5
  288. package/dist/connectors/slack/transform.d.ts +6 -2
  289. package/dist/connectors/slack/transform.js +6 -2
  290. package/dist/connectors/slack/types.d.ts +3 -1
  291. package/dist/connectors/slack/web-client.js +8 -3
  292. package/dist/connectors/slack/webhook.d.ts +5 -5
  293. package/dist/connectors/slack/webhook.js +19 -11
  294. package/dist/connectors/slack/workspaces.d.ts +7 -3
  295. package/dist/connectors/slack/workspaces.js +7 -3
  296. package/dist/connectors/store.d.ts +8 -0
  297. package/dist/connectors/store.js +2 -0
  298. package/dist/consolidate/conflicts.js +24 -10
  299. package/dist/consolidate/dag-summary.js +2 -1
  300. package/dist/consolidate/dag.d.ts +10 -5
  301. package/dist/consolidate/dag.js +45 -39
  302. package/dist/consolidate/decay.js +19 -6
  303. package/dist/consolidate/dedupe.d.ts +14 -5
  304. package/dist/consolidate/dedupe.js +28 -17
  305. package/dist/consolidate/flush-units.d.ts +4 -1
  306. package/dist/consolidate/flush-units.js +4 -1
  307. package/dist/consolidate/half-life-migration.d.ts +18 -8
  308. package/dist/consolidate/half-life-migration.js +48 -18
  309. package/dist/consolidate/llm-passes.js +27 -11
  310. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  311. package/dist/consolidate/memory-value-weights.js +6 -2
  312. package/dist/consolidate/memory-value.d.ts +30 -10
  313. package/dist/consolidate/memory-value.js +37 -14
  314. package/dist/consolidate/merge.d.ts +4 -1
  315. package/dist/consolidate/merge.js +47 -37
  316. package/dist/consolidate/overlap-index.d.ts +8 -2
  317. package/dist/consolidate/overlap-index.js +11 -4
  318. package/dist/consolidate/physics-pass.d.ts +3 -1
  319. package/dist/consolidate/physics-pass.js +10 -7
  320. package/dist/consolidate/replay.d.ts +11 -4
  321. package/dist/consolidate/replay.js +19 -7
  322. package/dist/consolidate/run.d.ts +13 -5
  323. package/dist/consolidate/run.js +4 -4
  324. package/dist/consolidate/sleep.d.ts +14 -6
  325. package/dist/consolidate/sleep.js +42 -39
  326. package/dist/consolidate/trace.d.ts +7 -2
  327. package/dist/consolidate/trace.js +7 -2
  328. package/dist/consolidate/traces.js +27 -30
  329. package/dist/core/ablation.d.ts +9 -3
  330. package/dist/core/ablation.js +14 -4
  331. package/dist/core/active-scope.d.ts +3 -1
  332. package/dist/core/active-scope.js +3 -1
  333. package/dist/core/agent-memory-tools.d.ts +2 -0
  334. package/dist/core/agent-memory-tools.js +2 -0
  335. package/dist/core/ambient.d.ts +4 -3
  336. package/dist/core/ambient.js +8 -6
  337. package/dist/core/api-errors.d.ts +9 -3
  338. package/dist/core/api-errors.js +9 -3
  339. package/dist/core/capture-contract.d.ts +4 -1
  340. package/dist/core/capture-contract.js +27 -8
  341. package/dist/core/compare.d.ts +24 -8
  342. package/dist/core/compare.js +24 -8
  343. package/dist/core/config.d.ts +18 -9
  344. package/dist/core/config.js +38 -29
  345. package/dist/core/cosine.d.ts +4 -1
  346. package/dist/core/cosine.js +4 -1
  347. package/dist/core/handoff.d.ts +7 -2
  348. package/dist/core/handoff.js +4 -1
  349. package/dist/core/markdown.js +22 -17
  350. package/dist/core/memory-audit.js +14 -3
  351. package/dist/core/memory-quality.d.ts +12 -3
  352. package/dist/core/memory-quality.js +57 -21
  353. package/dist/core/memory.d.ts +87 -30
  354. package/dist/core/memory.js +82 -33
  355. package/dist/core/merged-row.d.ts +8 -2
  356. package/dist/core/merged-row.js +10 -3
  357. package/dist/core/package-root.d.ts +3 -1
  358. package/dist/core/package-root.js +3 -1
  359. package/dist/core/particle-refresh.d.ts +8 -0
  360. package/dist/core/particle-refresh.js +22 -0
  361. package/dist/core/physics-config.d.ts +4 -1
  362. package/dist/core/physics-config.js +6 -2
  363. package/dist/core/physics.d.ts +39 -11
  364. package/dist/core/physics.js +71 -21
  365. package/dist/core/project-identity.d.ts +34 -17
  366. package/dist/core/project-identity.js +35 -18
  367. package/dist/core/project-remote.d.ts +8 -4
  368. package/dist/core/project-remote.js +31 -14
  369. package/dist/core/recall-scope.d.ts +33 -11
  370. package/dist/core/recall-scope.js +42 -15
  371. package/dist/core/rejection-digest.d.ts +7 -0
  372. package/dist/core/rejection-digest.js +13 -0
  373. package/dist/core/salience.d.ts +3 -1
  374. package/dist/core/salience.js +10 -4
  375. package/dist/core/search-types.d.ts +15 -2
  376. package/dist/core/search-types.js +11 -0
  377. package/dist/dashboard/dashboard-actions.d.ts +2 -2
  378. package/dist/dashboard/dashboard-actions.js +18 -7
  379. package/dist/dashboard/dashboard-queries.js +2 -7
  380. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  381. package/dist/dashboard/dashboard-snapshot.js +5 -7
  382. package/dist/dashboard/dashboard.js +22 -8
  383. package/dist/db/backup.js +2 -2
  384. package/dist/db/busy.d.ts +10 -3
  385. package/dist/db/busy.js +27 -5
  386. package/dist/db/connect.d.ts +10 -2
  387. package/dist/db/connect.js +8 -2
  388. package/dist/db/continuity.d.ts +1 -1
  389. package/dist/db/continuity.js +27 -11
  390. package/dist/db/meta.d.ts +4 -1
  391. package/dist/db/meta.js +4 -1
  392. package/dist/db/migrate.d.ts +10 -5
  393. package/dist/db/migrate.js +40 -20
  394. package/dist/db/migrations/index.d.ts +1 -1
  395. package/dist/db/migrations/index.js +3 -1
  396. package/dist/db/migrations/types.d.ts +2 -1
  397. package/dist/db/migrations/v11.js +1 -0
  398. package/dist/db/migrations/v12.js +2 -1
  399. package/dist/db/migrations/v14.js +2 -0
  400. package/dist/db/migrations/v15.js +4 -2
  401. package/dist/db/migrations/v16.js +6 -3
  402. package/dist/db/migrations/v17.js +2 -1
  403. package/dist/db/migrations/v19.js +4 -2
  404. package/dist/db/migrations/v20.js +2 -1
  405. package/dist/db/migrations/v22.js +12 -6
  406. package/dist/db/migrations/v23.js +6 -3
  407. package/dist/db/migrations/v24.js +6 -3
  408. package/dist/db/migrations/v25.js +4 -2
  409. package/dist/db/migrations/v26.js +4 -2
  410. package/dist/db/migrations/v27.js +6 -3
  411. package/dist/db/migrations/v28.js +4 -2
  412. package/dist/db/migrations/v29.js +4 -2
  413. package/dist/db/migrations/v30.js +6 -3
  414. package/dist/db/migrations/v31.js +4 -2
  415. package/dist/db/migrations/v32.js +6 -3
  416. package/dist/db/migrations/v33.js +4 -2
  417. package/dist/db/migrations/v34.js +2 -1
  418. package/dist/db/migrations/v35.js +2 -1
  419. package/dist/db/migrations/v36.js +2 -1
  420. package/dist/db/migrations/v37.js +10 -5
  421. package/dist/db/migrations/v38.js +10 -5
  422. package/dist/db/migrations/v39.js +14 -6
  423. package/dist/db/migrations/v40.js +4 -2
  424. package/dist/db/migrations/v41.js +4 -2
  425. package/dist/db/migrations/v42.js +2 -1
  426. package/dist/db/migrations/v44.js +4 -2
  427. package/dist/db/migrations/v45.js +4 -2
  428. package/dist/db/migrations/v49.js +2 -1
  429. package/dist/db/migrations/v50.js +4 -2
  430. package/dist/db/migrations/v51.js +4 -2
  431. package/dist/db/migrations/v52.js +2 -1
  432. package/dist/db/migrations/v53.js +8 -4
  433. package/dist/db/migrations/v54.js +2 -1
  434. package/dist/db/migrations/v55.js +4 -2
  435. package/dist/db/migrations/v56.d.ts +3 -0
  436. package/dist/db/migrations/v56.js +28 -0
  437. package/dist/db/open.d.ts +24 -12
  438. package/dist/db/open.js +25 -13
  439. package/dist/db/physics-state.d.ts +8 -8
  440. package/dist/db/physics-state.js +17 -50
  441. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  442. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  443. package/dist/db/request-stores.d.ts +20 -5
  444. package/dist/db/request-stores.js +15 -5
  445. package/dist/db/tables.d.ts +2 -1
  446. package/dist/db/tables.js +12 -4
  447. package/dist/db/vector-store.d.ts +13 -4
  448. package/dist/db/vector-store.js +35 -14
  449. package/dist/db/wal-checkpointer.d.ts +2 -1
  450. package/dist/db/wal-checkpointer.js +19 -7
  451. package/dist/doctor.d.ts +7 -1
  452. package/dist/doctor.js +128 -46
  453. package/dist/embeddings/local.d.ts +8 -4
  454. package/dist/embeddings/local.js +11 -7
  455. package/dist/embeddings/provider.d.ts +19 -10
  456. package/dist/embeddings/provider.js +32 -27
  457. package/dist/embeddings/transformers.d.ts +16 -4
  458. package/dist/embeddings/transformers.js +32 -15
  459. package/dist/entry/json-hooks.d.ts +1 -1
  460. package/dist/entry/json-hooks.js +1 -1
  461. package/dist/entry/project-identity.js +2 -1
  462. package/dist/entry/session-text.d.ts +1 -1
  463. package/dist/entry/session-text.js +1 -1
  464. package/dist/entry/sqlite-handles.d.ts +10 -0
  465. package/dist/entry/sqlite-handles.js +9 -0
  466. package/dist/entry/store-kit.d.ts +50 -0
  467. package/dist/entry/store-kit.js +27 -0
  468. package/dist/entry/testing.d.ts +6 -0
  469. package/dist/entry/testing.js +7 -0
  470. package/dist/eval/eval-stats.d.ts +27 -8
  471. package/dist/eval/eval-stats.js +17 -5
  472. package/dist/eval/eval-suite.d.ts +3 -1
  473. package/dist/eval/eval-suite.js +409 -187
  474. package/dist/eval/eval.d.ts +8 -2
  475. package/dist/eval/eval.js +8 -2
  476. package/dist/eval/judgment.js +17 -7
  477. package/dist/graph/delta.d.ts +9 -42
  478. package/dist/graph/delta.js +17 -11
  479. package/dist/graph/extract.d.ts +10 -7
  480. package/dist/graph/extract.js +57 -25
  481. package/dist/graph/recall.d.ts +12 -4
  482. package/dist/graph/recall.js +30 -13
  483. package/dist/graph/stream.d.ts +18 -6
  484. package/dist/graph/stream.js +32 -10
  485. package/dist/graph/view.d.ts +19 -6
  486. package/dist/graph/view.js +42 -17
  487. package/dist/hooks/codex-session.js +2 -2
  488. package/dist/hooks/codex-wrapper.d.ts +3 -1
  489. package/dist/hooks/codex-wrapper.js +9 -4
  490. package/dist/hooks/copilot.d.ts +19 -5
  491. package/dist/hooks/copilot.js +54 -15
  492. package/dist/hooks/hook-blocks.d.ts +4 -1
  493. package/dist/hooks/hook-blocks.js +8 -3
  494. package/dist/hooks/json-hooks.d.ts +9 -5
  495. package/dist/hooks/json-hooks.js +72 -33
  496. package/dist/hooks/opencode.js +15 -5
  497. package/dist/hooks/shared.d.ts +27 -8
  498. package/dist/hooks/shared.js +57 -16
  499. package/dist/importers/core.d.ts +12 -4
  500. package/dist/importers/core.js +11 -10
  501. package/dist/importers/markdown-parse.d.ts +15 -5
  502. package/dist/importers/markdown-parse.js +16 -7
  503. package/dist/importers/markdown.js +6 -9
  504. package/dist/importers/sources.js +10 -23
  505. package/dist/importers/vault.d.ts +3 -3
  506. package/dist/importers/vault.js +61 -45
  507. package/dist/index.d.ts +33 -7
  508. package/dist/index.js +26 -8
  509. package/dist/learn/autolearn.d.ts +21 -6
  510. package/dist/learn/autolearn.js +57 -26
  511. package/dist/learn/churn-git.d.ts +4 -1
  512. package/dist/learn/churn-git.js +29 -5
  513. package/dist/learn/extract.d.ts +4 -1
  514. package/dist/learn/extract.js +17 -10
  515. package/dist/learn/forward-claim-detector.d.ts +17 -5
  516. package/dist/learn/forward-claim-detector.js +34 -15
  517. package/dist/learn/invalidation.d.ts +12 -6
  518. package/dist/learn/invalidation.js +62 -28
  519. package/dist/learn/roots.d.ts +3 -0
  520. package/dist/learn/roots.js +5 -0
  521. package/dist/mcp/admin-tools.d.ts +5 -5
  522. package/dist/mcp/admin-tools.js +28 -23
  523. package/dist/mcp/format.d.ts +1 -1
  524. package/dist/mcp/format.js +4 -2
  525. package/dist/mcp/framing.d.ts +3 -1
  526. package/dist/mcp/framing.js +20 -8
  527. package/dist/mcp/memory-tools.d.ts +3 -3
  528. package/dist/mcp/memory-tools.js +21 -20
  529. package/dist/mcp/protocol.d.ts +32 -16
  530. package/dist/mcp/protocol.js +12 -9
  531. package/dist/mcp/recall-tools.d.ts +3 -3
  532. package/dist/mcp/recall-tools.js +62 -74
  533. package/dist/mcp/request.d.ts +7 -5
  534. package/dist/mcp/request.js +61 -77
  535. package/dist/mcp/server.d.ts +3 -1
  536. package/dist/mcp/server.js +8 -3
  537. package/dist/mcp/session-state.d.ts +1 -1
  538. package/dist/mcp/session-state.js +4 -3
  539. package/dist/mcp/shared-gate.d.ts +3 -2
  540. package/dist/mcp/shared-gate.js +3 -2
  541. package/dist/mcp/stdio.d.ts +6 -3
  542. package/dist/mcp/stdio.js +59 -23
  543. package/dist/mcp/tool-args.d.ts +4 -1
  544. package/dist/mcp/tool-args.js +8 -3
  545. package/dist/mcp/tools.js +76 -32
  546. package/dist/objects/customer-notes.d.ts +12 -10
  547. package/dist/objects/customer-notes.js +21 -15
  548. package/dist/objects/decisions.d.ts +18 -10
  549. package/dist/objects/decisions.js +23 -17
  550. package/dist/objects/descriptor.js +2 -1
  551. package/dist/objects/fields.d.ts +4 -1
  552. package/dist/objects/fields.js +6 -2
  553. package/dist/objects/incidents.d.ts +14 -16
  554. package/dist/objects/incidents.js +29 -30
  555. package/dist/objects/lifecycle.d.ts +0 -4
  556. package/dist/objects/lifecycle.js +21 -24
  557. package/dist/objects/policies.d.ts +12 -16
  558. package/dist/objects/policies.js +17 -21
  559. package/dist/objects/processes.d.ts +16 -10
  560. package/dist/objects/processes.js +20 -15
  561. package/dist/objects/project-briefs.d.ts +13 -14
  562. package/dist/objects/project-briefs.js +33 -39
  563. package/dist/objects/skills.d.ts +10 -12
  564. package/dist/objects/skills.js +17 -22
  565. package/dist/postinstall.js +15 -7
  566. package/dist/predictions/planning-fallacy.d.ts +19 -6
  567. package/dist/predictions/planning-fallacy.js +4 -2
  568. package/dist/rerankers/clef.d.ts +8 -2
  569. package/dist/rerankers/clef.js +14 -9
  570. package/dist/rerankers/cross-encoder.d.ts +2 -1
  571. package/dist/rerankers/cross-encoder.js +19 -9
  572. package/dist/rerankers/index.js +2 -1
  573. package/dist/rerankers/jev.js +2 -1
  574. package/dist/rerankers/llm.d.ts +6 -2
  575. package/dist/rerankers/llm.js +8 -3
  576. package/dist/rerankers/remote.d.ts +3 -1
  577. package/dist/rerankers/remote.js +5 -2
  578. package/dist/rerankers/types.d.ts +6 -2
  579. package/dist/search/bm25-search.d.ts +3 -1
  580. package/dist/search/bm25-search.js +15 -2
  581. package/dist/search/boosts.js +4 -3
  582. package/dist/search/embed-memories.d.ts +12 -4
  583. package/dist/search/embed-memories.js +96 -58
  584. package/dist/search/engine.d.ts +11 -0
  585. package/dist/search/engine.js +14 -0
  586. package/dist/search/goal-boost.d.ts +10 -3
  587. package/dist/search/goal-boost.js +13 -6
  588. package/dist/search/hybrid-score.d.ts +4 -1
  589. package/dist/search/hybrid-score.js +4 -1
  590. package/dist/search/hybrid.d.ts +23 -8
  591. package/dist/search/hybrid.js +12 -7
  592. package/dist/search/multihop.js +14 -13
  593. package/dist/search/path-context.d.ts +10 -3
  594. package/dist/search/path-context.js +10 -3
  595. package/dist/search/physics-search.d.ts +9 -4
  596. package/dist/search/physics-search.js +38 -14
  597. package/dist/search/rerank.d.ts +2 -1
  598. package/dist/search/rerank.js +2 -1
  599. package/dist/search/rrf.d.ts +14 -5
  600. package/dist/search/rrf.js +11 -4
  601. package/dist/search/vector.d.ts +8 -2
  602. package/dist/search/vector.js +14 -8
  603. package/dist/server/auth.d.ts +19 -15
  604. package/dist/server/auth.js +68 -38
  605. package/dist/server/boot.d.ts +4 -1
  606. package/dist/server/boot.js +115 -67
  607. package/dist/server/client-ip.d.ts +17 -5
  608. package/dist/server/client-ip.js +56 -21
  609. package/dist/server/cursor.d.ts +10 -3
  610. package/dist/server/cursor.js +10 -3
  611. package/dist/server/deadline.d.ts +5 -2
  612. package/dist/server/deadline.js +10 -3
  613. package/dist/server/key-check-bounds.js +12 -4
  614. package/dist/server/lifecycle.d.ts +4 -1
  615. package/dist/server/lifecycle.js +10 -4
  616. package/dist/server/mcp-http.d.ts +2 -1
  617. package/dist/server/mcp-http.js +37 -22
  618. package/dist/server/rate-limit.d.ts +17 -5
  619. package/dist/server/rate-limit.js +55 -26
  620. package/dist/server/ready.js +7 -4
  621. package/dist/server/request.d.ts +15 -4
  622. package/dist/server/request.js +42 -15
  623. package/dist/server/route-checks.d.ts +4 -1
  624. package/dist/server/route-checks.js +8 -3
  625. package/dist/server/route-table.d.ts +8 -6
  626. package/dist/server/route-table.js +550 -97
  627. package/dist/server/routes/admin.d.ts +7 -7
  628. package/dist/server/routes/admin.js +36 -15
  629. package/dist/server/routes/customer-notes.d.ts +5 -5
  630. package/dist/server/routes/customer-notes.js +5 -4
  631. package/dist/server/routes/decisions.d.ts +5 -5
  632. package/dist/server/routes/decisions.js +12 -6
  633. package/dist/server/routes/incidents.d.ts +5 -5
  634. package/dist/server/routes/incidents.js +10 -4
  635. package/dist/server/routes/memories.d.ts +8 -8
  636. package/dist/server/routes/memories.js +12 -17
  637. package/dist/server/routes/object-routes.d.ts +8 -5
  638. package/dist/server/routes/object-routes.js +4 -2
  639. package/dist/server/routes/policies.d.ts +6 -6
  640. package/dist/server/routes/policies.js +11 -4
  641. package/dist/server/routes/predictions.d.ts +5 -5
  642. package/dist/server/routes/predictions.js +9 -4
  643. package/dist/server/routes/processes.d.ts +5 -5
  644. package/dist/server/routes/processes.js +15 -6
  645. package/dist/server/routes/project-briefs.d.ts +6 -6
  646. package/dist/server/routes/project-briefs.js +3 -2
  647. package/dist/server/routes/recall.d.ts +3 -3
  648. package/dist/server/routes/recall.js +21 -10
  649. package/dist/server/routes/skills.d.ts +6 -6
  650. package/dist/server/routes/skills.js +12 -4
  651. package/dist/server/server-detect.d.ts +24 -8
  652. package/dist/server/server-detect.js +57 -22
  653. package/dist/server/sleep-child.js +16 -10
  654. package/dist/server/sleep-offload.d.ts +8 -5
  655. package/dist/server/sleep-offload.js +40 -18
  656. package/dist/server/tls.d.ts +10 -2
  657. package/dist/server/tls.js +25 -5
  658. package/dist/server/types.d.ts +41 -24
  659. package/dist/server/validation.d.ts +4 -1
  660. package/dist/server/validation.js +22 -9
  661. package/dist/server.d.ts +17 -49
  662. package/dist/server.js +33 -40
  663. package/dist/sharing/global-store.d.ts +6 -12
  664. package/dist/sharing/global-store.js +8 -48
  665. package/dist/sharing/global-sync.d.ts +3 -1
  666. package/dist/sharing/global-sync.js +17 -7
  667. package/dist/sharing/project-merge.d.ts +25 -7
  668. package/dist/sharing/project-merge.js +49 -17
  669. package/dist/sharing/search-both.d.ts +8 -4
  670. package/dist/sharing/search-both.js +28 -14
  671. package/dist/sharing/share.d.ts +8 -4
  672. package/dist/sharing/share.js +40 -18
  673. package/dist/store/ambient.js +10 -5
  674. package/dist/store/audit-event.d.ts +2 -2
  675. package/dist/store/audit-event.js +8 -3
  676. package/dist/store/audit.d.ts +6 -3
  677. package/dist/store/audit.js +16 -6
  678. package/dist/store/auth.d.ts +4 -2
  679. package/dist/store/auth.js +63 -20
  680. package/dist/store/busy.d.ts +9 -0
  681. package/dist/store/busy.js +16 -0
  682. package/dist/store/candidates.d.ts +12 -5
  683. package/dist/store/candidates.js +90 -41
  684. package/dist/store/capture-write.d.ts +2 -1
  685. package/dist/store/capture-write.js +2 -1
  686. package/dist/store/card-detail.d.ts +4 -4
  687. package/dist/store/card-detail.js +15 -8
  688. package/dist/store/cards.d.ts +24 -10
  689. package/dist/store/cards.js +97 -63
  690. package/dist/store/compaction-caller.d.ts +2 -1
  691. package/dist/store/compaction-caller.js +2 -1
  692. package/dist/store/compactions-record.d.ts +14 -8
  693. package/dist/store/compactions-record.js +101 -37
  694. package/dist/store/compactions.js +35 -15
  695. package/dist/store/conflicts.d.ts +16 -5
  696. package/dist/store/conflicts.js +104 -48
  697. package/dist/store/connectors/dlq.d.ts +17 -5
  698. package/dist/store/connectors/dlq.js +58 -6
  699. package/dist/store/connectors/event-log.d.ts +122 -0
  700. package/dist/store/connectors/event-log.js +25 -0
  701. package/dist/store/connectors/github.d.ts +6 -3
  702. package/dist/store/connectors/github.js +30 -48
  703. package/dist/store/connectors/slack.d.ts +2 -1
  704. package/dist/store/connectors/slack.js +31 -47
  705. package/dist/store/dashboard-reads.d.ts +7 -3
  706. package/dist/store/dashboard-reads.js +32 -10
  707. package/dist/store/delete-and-batch.d.ts +17 -11
  708. package/dist/store/delete-and-batch.js +70 -28
  709. package/dist/store/delivery-recorder.d.ts +10 -7
  710. package/dist/store/delivery-recorder.js +70 -37
  711. package/dist/store/descendant-page.d.ts +2 -1
  712. package/dist/store/descendant-page.js +26 -10
  713. package/dist/store/diagnostics.d.ts +2 -1
  714. package/dist/store/diagnostics.js +2 -1
  715. package/dist/store/doctor-reads.d.ts +2 -1
  716. package/dist/store/doctor-reads.js +13 -5
  717. package/dist/store/dormant.d.ts +19 -11
  718. package/dist/store/dormant.js +45 -19
  719. package/dist/store/embeddings/index.d.ts +13 -9
  720. package/dist/store/embeddings/index.js +19 -12
  721. package/dist/store/entry-reads.d.ts +72 -21
  722. package/dist/store/entry-reads.js +215 -69
  723. package/dist/store/entry-row.d.ts +10 -6
  724. package/dist/store/entry-row.js +26 -14
  725. package/dist/store/entry-writes.d.ts +28 -13
  726. package/dist/store/entry-writes.js +61 -22
  727. package/dist/store/failure-log-at.js +1 -1
  728. package/dist/store/failure-log.d.ts +4 -2
  729. package/dist/store/failure-log.js +13 -6
  730. package/dist/store/gated-write.d.ts +3 -3
  731. package/dist/store/gated-write.js +3 -3
  732. package/dist/store/goals.d.ts +5 -4
  733. package/dist/store/goals.js +11 -12
  734. package/dist/store/graph-apply.d.ts +21 -0
  735. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  736. package/dist/store/graph-queue.d.ts +9 -6
  737. package/dist/store/graph-queue.js +15 -10
  738. package/dist/store/graph-reads.d.ts +16 -11
  739. package/dist/store/graph-reads.js +29 -19
  740. package/dist/store/graph-rows.d.ts +41 -3
  741. package/dist/store/graph-rows.js +10 -7
  742. package/dist/store/graph-view-rows.js +15 -7
  743. package/dist/store/graph-writes.d.ts +16 -10
  744. package/dist/store/graph-writes.js +59 -36
  745. package/dist/store/half-life.js +2 -2
  746. package/dist/store/handoffs.d.ts +13 -7
  747. package/dist/store/handoffs.js +44 -22
  748. package/dist/store/index-and-stats.d.ts +2 -2
  749. package/dist/store/index-and-stats.js +6 -5
  750. package/dist/store/index.d.ts +4 -2
  751. package/dist/store/index.js +2 -1
  752. package/dist/store/key-audit.d.ts +2 -1
  753. package/dist/store/key-audit.js +2 -1
  754. package/dist/store/key-writes.d.ts +2 -1
  755. package/dist/store/key-writes.js +9 -2
  756. package/dist/store/ledger-turn.d.ts +4 -1
  757. package/dist/store/ledger-turn.js +7 -2
  758. package/dist/store/mirrors.d.ts +11 -4
  759. package/dist/store/mirrors.js +96 -19
  760. package/dist/store/narrow.d.ts +6 -0
  761. package/dist/store/narrow.js +11 -0
  762. package/dist/store/open.d.ts +6 -3
  763. package/dist/store/open.js +20 -10
  764. package/dist/store/pilot-arm.d.ts +2 -1
  765. package/dist/store/pilot-arm.js +18 -6
  766. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  767. package/dist/store/planning-fallacy-evidence.js +8 -5
  768. package/dist/store/port/agent-import.d.ts +62 -0
  769. package/dist/store/port/agent-import.js +2 -0
  770. package/dist/store/port/consolidation.d.ts +129 -0
  771. package/dist/store/port/consolidation.js +2 -0
  772. package/dist/store/port/learning.d.ts +19 -0
  773. package/dist/store/port/learning.js +2 -0
  774. package/dist/store/port/local-files.d.ts +18 -0
  775. package/dist/store/port/local-files.js +2 -0
  776. package/dist/store/port/promotion.d.ts +20 -0
  777. package/dist/store/port/promotion.js +3 -0
  778. package/dist/store/port-groups.d.ts +160 -0
  779. package/dist/store/port-groups.js +2 -0
  780. package/dist/store/port.d.ts +261 -219
  781. package/dist/store/port.js +3 -9
  782. package/dist/store/predictions.d.ts +14 -10
  783. package/dist/store/predictions.js +37 -17
  784. package/dist/store/project-tags.d.ts +4 -1
  785. package/dist/store/project-tags.js +16 -5
  786. package/dist/store/quality-repair.d.ts +8 -4
  787. package/dist/store/quality-repair.js +53 -20
  788. package/dist/store/quarantine.d.ts +1 -0
  789. package/dist/store/quarantine.js +23 -9
  790. package/dist/store/raw-archive.d.ts +5 -4
  791. package/dist/store/raw-archive.js +11 -10
  792. package/dist/store/recall-trace.d.ts +22 -17
  793. package/dist/store/recall-trace.js +128 -64
  794. package/dist/store/rejected-values.d.ts +15 -10
  795. package/dist/store/rejected-values.js +46 -20
  796. package/dist/store/rejection.d.ts +12 -11
  797. package/dist/store/rejection.js +18 -19
  798. package/dist/store/report-reads.d.ts +2 -1
  799. package/dist/store/report-reads.js +2 -1
  800. package/dist/store/rows.d.ts +7 -5
  801. package/dist/store/rows.js +20 -13
  802. package/dist/store/rule-sql.d.ts +7 -3
  803. package/dist/store/rule-sql.js +26 -13
  804. package/dist/store/search-rows.d.ts +16 -11
  805. package/dist/store/search-rows.js +54 -32
  806. package/dist/store/sessions.d.ts +12 -10
  807. package/dist/store/sessions.js +40 -21
  808. package/dist/store/set-aside.d.ts +2 -2
  809. package/dist/store/set-aside.js +18 -5
  810. package/dist/store/sqlite/agent-import.d.ts +3 -0
  811. package/dist/store/sqlite/agent-import.js +77 -0
  812. package/dist/store/sqlite/cards-group.d.ts +6 -0
  813. package/dist/store/sqlite/cards-group.js +37 -0
  814. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  815. package/dist/store/sqlite/conflicts-group.js +18 -0
  816. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  817. package/dist/store/sqlite/connector-events-group.js +17 -6
  818. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  819. package/dist/store/sqlite/connector-writes-group.js +12 -5
  820. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  821. package/dist/store/sqlite/consolidation-group.js +64 -0
  822. package/dist/store/sqlite/dag-reads-group.js +1 -1
  823. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  824. package/dist/store/sqlite/dormant-group.js +29 -0
  825. package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
  826. package/dist/store/sqlite/entry-writes-group.js +37 -14
  827. package/dist/store/sqlite/error-codec.d.ts +4 -2
  828. package/dist/store/sqlite/error-codec.js +32 -10
  829. package/dist/store/sqlite/executor-counts.js +2 -1
  830. package/dist/store/sqlite/executor.d.ts +8 -3
  831. package/dist/store/sqlite/executor.js +56 -18
  832. package/dist/store/sqlite/global-promote.d.ts +5 -0
  833. package/dist/store/sqlite/global-promote.js +48 -0
  834. package/dist/store/sqlite/goals-group.d.ts +6 -0
  835. package/dist/store/sqlite/goals-group.js +23 -0
  836. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  837. package/dist/store/sqlite/graph-reads-group.js +2 -1
  838. package/dist/store/sqlite/held-connection.d.ts +8 -0
  839. package/dist/store/sqlite/held-connection.js +34 -7
  840. package/dist/store/sqlite/last-recall-group.d.ts +15 -0
  841. package/dist/store/sqlite/last-recall-group.js +62 -0
  842. package/dist/store/sqlite/learning-group.d.ts +4 -0
  843. package/dist/store/sqlite/learning-group.js +17 -0
  844. package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
  845. package/dist/store/sqlite/maintenance-groups.js +61 -0
  846. package/dist/store/sqlite/object-rows.d.ts +6 -3
  847. package/dist/store/sqlite/object-rows.js +34 -5
  848. package/dist/store/sqlite/objects-group.d.ts +5 -4
  849. package/dist/store/sqlite/objects-group.js +97 -38
  850. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  851. package/dist/store/sqlite/predictions-group.js +4 -2
  852. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  853. package/dist/store/sqlite/promotion-group.js +10 -0
  854. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  855. package/dist/store/sqlite/quarantine-group.js +4 -2
  856. package/dist/store/sqlite/reports-group.d.ts +6 -0
  857. package/dist/store/sqlite/reports-group.js +33 -0
  858. package/dist/store/sqlite/request-scope.d.ts +6 -0
  859. package/dist/store/sqlite/request-scope.js +18 -0
  860. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  861. package/dist/store/sqlite/sessions-group.js +46 -0
  862. package/dist/store/sqlite/store.d.ts +22 -18
  863. package/dist/store/sqlite/store.js +95 -33
  864. package/dist/store/sqlite/vector-pack.js +2 -1
  865. package/dist/store/sqlite/vector-reads-group.js +2 -1
  866. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  867. package/dist/store/sqlite/worker-jobs.js +19 -7
  868. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  869. package/dist/store/sqlite/worker-ops.js +6 -3
  870. package/dist/store/sqlite/worker-store.d.ts +4 -3
  871. package/dist/store/sqlite/worker-store.js +24 -14
  872. package/dist/store/summaries.d.ts +25 -11
  873. package/dist/store/summaries.js +84 -27
  874. package/dist/store/summary-dirty.d.ts +2 -1
  875. package/dist/store/summary-dirty.js +2 -1
  876. package/dist/store/tenant.d.ts +3 -2
  877. package/dist/store/tenant.js +5 -4
  878. package/dist/store/token-ledger-rows.js +8 -4
  879. package/dist/store/token-ledger.d.ts +19 -13
  880. package/dist/store/token-ledger.js +27 -14
  881. package/dist/store/tombstone-checks.d.ts +4 -1
  882. package/dist/store/tombstone-checks.js +10 -1
  883. package/dist/store/usage-reports.js +2 -1
  884. package/dist/store/vector-index.d.ts +8 -5
  885. package/dist/store/vector-index.js +28 -11
  886. package/dist/store/working-memory.d.ts +6 -4
  887. package/dist/store/working-memory.js +14 -9
  888. package/dist/support-bundle.js +10 -5
  889. package/dist/trust/quarantine.d.ts +1 -2
  890. package/dist/trust/quarantine.js +1 -5
  891. package/dist/trust/reject-flow.d.ts +12 -3
  892. package/dist/trust/reject-flow.js +12 -4
  893. package/dist/util/anthropic-messages.d.ts +7 -2
  894. package/dist/util/anthropic-messages.js +18 -7
  895. package/dist/util/atomic-write.d.ts +8 -3
  896. package/dist/util/atomic-write.js +36 -21
  897. package/dist/util/compaction-items.d.ts +4 -1
  898. package/dist/util/compaction-items.js +8 -2
  899. package/dist/util/crash-handlers.d.ts +7 -2
  900. package/dist/util/crash-handlers.js +13 -4
  901. package/dist/util/env.d.ts +26 -5
  902. package/dist/util/env.js +87 -25
  903. package/dist/util/format.d.ts +2 -0
  904. package/dist/util/format.js +4 -0
  905. package/dist/util/home-path.js +12 -6
  906. package/dist/util/hook-payload.d.ts +3 -1
  907. package/dist/util/hook-payload.js +3 -1
  908. package/dist/util/http-retry.d.ts +12 -6
  909. package/dist/util/http-retry.js +16 -6
  910. package/dist/util/http-util.d.ts +20 -5
  911. package/dist/util/http-util.js +28 -9
  912. package/dist/util/json.d.ts +4 -1
  913. package/dist/util/json.js +4 -1
  914. package/dist/util/keyset.js +2 -1
  915. package/dist/util/limits.js +4 -2
  916. package/dist/util/log.d.ts +13 -5
  917. package/dist/util/log.js +29 -6
  918. package/dist/util/net.d.ts +5 -0
  919. package/dist/util/net.js +19 -0
  920. package/dist/util/real-path.d.ts +2 -1
  921. package/dist/util/real-path.js +4 -3
  922. package/dist/util/request-scope.d.ts +16 -4
  923. package/dist/util/request-scope.js +19 -6
  924. package/dist/util/same-text.d.ts +10 -3
  925. package/dist/util/same-text.js +10 -3
  926. package/dist/util/secret-detect.d.ts +24 -7
  927. package/dist/util/secret-detect.js +49 -14
  928. package/dist/util/spawn-argv.d.ts +11 -0
  929. package/dist/util/spawn-argv.js +66 -0
  930. package/dist/util/sql.d.ts +3 -0
  931. package/dist/util/sql.js +6 -0
  932. package/dist/util/sqlite-blocked.d.ts +15 -4
  933. package/dist/util/sqlite-blocked.js +19 -6
  934. package/dist/util/stored-json.d.ts +4 -1
  935. package/dist/util/stored-json.js +6 -2
  936. package/dist/util/stream-tee.d.ts +2 -1
  937. package/dist/util/stream-tee.js +8 -5
  938. package/dist/util/transcript-tail.d.ts +4 -1
  939. package/dist/util/transcript-tail.js +4 -1
  940. package/dist/util/vector-codec.d.ts +4 -0
  941. package/dist/util/vector-codec.js +15 -0
  942. package/dist/util/version.d.ts +8 -3
  943. package/dist/util/version.js +8 -3
  944. package/dist/util/write-budget.d.ts +7 -2
  945. package/dist/util/write-budget.js +5 -2
  946. package/dist/util/yaml.d.ts +4 -1
  947. package/dist/util/yaml.js +4 -1
  948. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  949. package/extensions/openclaw-plugin/package.json +1 -1
  950. package/openclaw.plugin.json +1 -1
  951. package/package.json +4 -1
  952. package/scripts/postinstall.cjs +3 -1
  953. package/dist/api/audit.js +0 -56
  954. package/dist/api/cards.d.ts +0 -42
  955. package/dist/api/conflicts.d.ts +0 -28
  956. package/dist/api/conflicts.js +0 -61
  957. package/dist/api/dormant.d.ts +0 -14
  958. package/dist/api/dormant.js +0 -58
  959. package/dist/api/goals.d.ts +0 -18
  960. package/dist/api/graph.d.ts +0 -8
  961. package/dist/api/graph.js +0 -7
  962. package/dist/api/learn.js +0 -124
  963. package/dist/api/memories.d.ts +0 -23
  964. package/dist/api/memories.js +0 -46
  965. package/dist/api/objects.d.ts +0 -9
  966. package/dist/api/on-store.d.ts +0 -16
  967. package/dist/api/on-store.js +0 -38
  968. package/dist/api/outcome.d.ts +0 -19
  969. package/dist/api/outcome.js +0 -21
  970. package/dist/api/predictions.d.ts +0 -11
  971. package/dist/api/promote.d.ts +0 -36
  972. package/dist/api/promote.js +0 -65
  973. package/dist/api/recall-core.d.ts +0 -4
  974. package/dist/api/recall-core.js +0 -120
  975. package/dist/api/recall-finish.d.ts +0 -53
  976. package/dist/api/recall-finish.js +0 -30
  977. package/dist/api/recall-history.d.ts +0 -64
  978. package/dist/api/recall-history.js +0 -159
  979. package/dist/api/recall-record.d.ts +0 -43
  980. package/dist/api/recall-record.js +0 -78
  981. package/dist/api/recall-request.js +0 -121
  982. package/dist/api/recall.d.ts +0 -6
  983. package/dist/api/refine.d.ts +0 -7
  984. package/dist/api/refine.js +0 -10
  985. package/dist/api/session-owners.d.ts +0 -4
  986. package/dist/api/session-owners.js +0 -17
  987. package/dist/api/sleep-run.d.ts +0 -26
  988. package/dist/api/sleep.js +0 -10
  989. package/dist/cli/lenient-id.d.ts +0 -2
  990. package/dist/cli/lenient-id.js +0 -13
  991. package/dist/graph/write.d.ts +0 -14
  992. package/dist/store/sqlite/busy.d.ts +0 -3
  993. package/dist/store/sqlite/busy.js +0 -8
  994. package/dist/store/sqlite/local.d.ts +0 -21
  995. package/dist/store/sqlite/local.js +0 -39
@@ -7,8 +7,6 @@ import { errorFields, errorMessage, log } from '../util/log.js';
7
7
  import { currentRequestId } from '../util/request-scope.js';
8
8
  import { getGlobalRoot } from '../sharing/global-store.js';
9
9
  import { findHippoStoreDir } from '../core/project-identity.js';
10
- import { STORE_BUSY_MESSAGE } from '../store/port.js';
11
- import { isStoreBusy } from '../store/sqlite/busy.js';
12
10
  // ── Find hippo root ──
13
11
  /** Same bounded walk as the CLI (ends at home, so HIPPO_HOME wins over ~/.hippo); cwd/opts are the test seam. */
14
12
  export function findHippoRoot(cwd = process.cwd(), opts) {
@@ -19,14 +17,15 @@ export function findHippoRoot(cwd = process.cwd(), opts) {
19
17
  const global = getGlobalRoot();
20
18
  return fs.existsSync(global) ? global : null;
21
19
  }
22
- /** JSON-RPC reply for a request that threw: typed API errors keep their text; anything else is logged and answered generically. */
20
+ /** JSON-RPC reply for a request that threw: typed API errors keep
21
+ * their text; anything else is logged and answered generically. */
23
22
  export function mcpErrorResponse(id, err, requestId = currentRequestId() ?? randomUUID(), call) {
24
23
  const where = call === undefined ? '' : ` (${call})`;
25
- if (isStoreBusy(err)) {
24
+ const { status, message } = mapApiError(err);
25
+ if (status === 503) {
26
26
  log.warn(`mcp request${where} failed: ${errorMessage(err)}`, { requestId });
27
- return { jsonrpc: '2.0', id, error: { code: -32603, message: STORE_BUSY_MESSAGE } };
27
+ return { jsonrpc: '2.0', id, error: { code: -32603, message } };
28
28
  }
29
- const { status, message } = mapApiError(err);
30
29
  if (status !== 500) {
31
30
  log.info(`mcp request${where} failed: ${errorMessage(err)}`, { requestId, status });
32
31
  return { jsonrpc: '2.0', id, error: { code: -32603, message } };
@@ -38,12 +37,16 @@ export function mcpErrorResponse(id, err, requestId = currentRequestId() ?? rand
38
37
  error: { code: -32603, message: `${INTERNAL_ERROR_MESSAGE} (request id ${requestId})`, data: { requestId } },
39
38
  };
40
39
  }
41
- /** 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
42
- * untyped caller that sends none runs as a member, so a missing role fails closed. */
40
+ /** The api-layer actor for a tool call. Only stdio passes no context: it is the local operator, host admin. Any context
41
+ * runs as its own role, and an untyped caller that sends none runs as a member, so a missing role fails closed. */
43
42
  export function mcpActor(ctx) {
44
43
  if (ctx === undefined)
45
44
  return { subject: 'mcp', role: 'admin', hostAdmin: true };
46
- const actor = { subject: ctx.actor ?? 'mcp', role: ctx.role === 'admin' ? 'admin' : 'member', scopes: ctx.scopes };
45
+ const actor = {
46
+ subject: ctx.actor ?? 'mcp',
47
+ role: ctx.role === 'admin' ? 'admin' : 'member',
48
+ scopes: ctx.scopes,
49
+ };
47
50
  if (ctx.viaAuthResolver)
48
51
  actor.viaAuthResolver = true;
49
52
  if (ctx.hostAdmin)
@@ -1,6 +1,6 @@
1
1
  import { type ToolCall } from './protocol.js';
2
2
  export declare function runRecallTool(call: ToolCall): Promise<string>;
3
- export declare function runAssembleTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
4
- export declare function runDrillTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
5
- export declare function runContextTool({ args, ctx, hippoRoot, config, tenantId }: ToolCall): Promise<string>;
3
+ export declare function runAssembleTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'dagReads'>): Promise<string>;
4
+ export declare function runDrillTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'dagReads'>): Promise<string>;
5
+ export declare function runContextTool({ args, ctx, hippoRoot, config, tenantId, store }: ToolCall<'contextReads'>): Promise<string>;
6
6
  //# sourceMappingURL=recall-tools.d.ts.map
@@ -6,72 +6,58 @@ import { retrieve as apiRetrieve, drillDown as apiDrillDown, assemble as apiAsse
6
6
  import { autoDetectContext } from '../api/context-auto.js';
7
7
  import { resolveProjectIdentity } from '../core/project-identity.js';
8
8
  import { isSharedStore } from '../core/config.js';
9
- import { detectAnchoring, hashQueryText, biasHintEnabled, snapshotRing } from '../api/recall-history.js';
10
- import { detectAvailabilityBias } from '../api/availability.js';
9
+ import { hashQueryText } from '../api/recall/finish.js';
10
+ import { availabilityPool, cutoffClauses, detectRecallHints, shrinkToFit, suppressionSummary, tokenPurse, } from '../api/recall/render.js';
11
11
  import { estimateTokens } from '../util/token-text.js';
12
12
  import { assembleCost, assembleText, drillCost, drillText } from '../api/context-render.js';
13
13
  import { mcpActor, ownsServerCwd } from './protocol.js';
14
14
  import { lastRecalledIds, resolveClientKey } from './session-state.js';
15
15
  import { formatContinuityBlock, formatMemories, memoryCost, memoriesReserve, snapshotPiece, handoffPiece, trailPiece, contextCost, tailSection, planningSection, } from './format.js';
16
16
  import { isJsonString } from '../util/json.js';
17
- import { parseContextRequest, parseRecallRequest, toolParams } from '../api/recall-request.js';
18
- import { noteRecall, sessionRing, shownRecallRows } from '../api/recall-record.js';
17
+ import { parseContextRequest, parseRecallRequest, toolParams } from '../api/recall/request.js';
18
+ import { noteRecall, sessionRing, shownRecallRows } from '../api/recall/finish.js';
19
19
  // Candidate pool the MCP recall ranks before the token budget trims what is shown.
20
20
  const MCP_RECALL_LIMIT = 50;
21
- function detectBiasHints(list, pool, anchorRing, queryHash) {
22
- const anchoring = anchorRing ? detectAnchoring(snapshotRing(anchorRing), queryHash, list[0]?.entry.id ?? null) : null;
23
- const availability = biasHintEnabled('availability')
24
- ? detectAvailabilityBias({
25
- topK: list.map((r) => ({ id: r.entry.id, created: r.entry.created })),
26
- pool: pool.map((e) => ({ id: e.id, created: e.created })),
27
- })
28
- : null;
29
- return { anchoring, availability };
30
- }
31
21
  function biasHintSections(anchoring, availability) {
32
- let text = anchoring ? `## Anchoring hint\n${anchoring.summary}\n[anchored_on: ${anchoring.memoryId}]\n\n---\n\n` : '';
22
+ let text = anchoring
23
+ ? `## Anchoring hint\n${anchoring.summary}\n[anchored_on: ${anchoring.memoryId}]\n\n---\n\n`
24
+ : '';
33
25
  if (availability)
34
26
  text += `## Availability bias\n${availability.summary}\n\n---\n\n`;
35
27
  return text;
36
28
  }
37
29
  function cutoffSection(s, shown) {
38
- const cutoffClauses = [];
39
- if (s.droppedByBudget > 0)
40
- cutoffClauses.push(`${s.droppedByBudget} dropped to fit limit`);
41
- if (s.droppedPreRank > 0)
42
- cutoffClauses.push(`${s.droppedPreRank} filtered pre-rank`);
43
- if (s.summarySubstitutionsAdded > 0)
44
- cutoffClauses.push(`${s.summarySubstitutionsAdded} summary substitutions added`);
45
- if (s.freshTailAdded > 0)
46
- cutoffClauses.push(`${s.freshTailAdded} fresh-tail added`);
47
- if (s.suppressedByInterference > 0)
48
- cutoffClauses.push(`${s.suppressedByInterference} suppressed by interference`);
49
- if (cutoffClauses.length === 0)
30
+ const clauses = cutoffClauses(s);
31
+ if (clauses.length === 0)
50
32
  return '';
51
- return `## Cutoff\nShowing ${shown} of ${s.totalCandidates} candidates; ${cutoffClauses.join('; ')}.\n\n---\n\n`;
33
+ return `## Cutoff
34
+ Showing ${shown} of ${s.totalCandidates} candidates; ${clauses.join('; ')}.
35
+
36
+ ---
37
+
38
+ `;
52
39
  }
53
- function renderWithinBudget(ranked, limits, render) {
54
- let results = fitBudget(ranked, Math.max(0, limits.room), 1, memoryCost);
55
- let rendered = render(results);
56
- // The hints, Cutoff block and heading vary with the list, so the lowest-ranked entry goes until the whole response fits.
57
- while (results.length > 1 && estimateTokens(rendered.text) > limits.budget) {
58
- results = results.slice(0, -1);
59
- rendered = render(results);
60
- }
61
- return rendered;
40
+ function suppressionCounts(i) {
41
+ return {
42
+ totalCandidates: i.poolSize + i.droppedByScope,
43
+ droppedPreRank: i.droppedByScope + i.cut.length - i.list.length, // the bucket CLI and API recall use for copies
44
+ droppedByBudget: Math.max(0, i.poolSize - i.cut.length), // an upper bound: rows that never matched count too
45
+ summarySubstitutionsAdded: i.tail.filter((r) => r.isSummary).length,
46
+ freshTailAdded: i.tail.filter((r) => r.isFreshTail && !r.isSummary).length,
47
+ };
48
+ }
49
+ function fitMcpRecall(ranked, limits, render) {
50
+ const fitted = fitBudget(ranked, Math.max(0, limits.room), 1, memoryCost);
51
+ return shrinkToFit(fitted.length, 1, limits.budget, (n) => render(fitted.slice(0, n)), (r) => r.text);
62
52
  }
63
53
  function recallPresenter(budget, options) {
64
54
  const { includeContinuity, anchorRing, queryHash, out, hintRows } = options;
65
55
  return ({ ranked, pool, droppedByScope }, apiResult) => {
66
- // Sections are paid in print order, ahead of the memories and after the heading; one that does not fit is dropped whole.
67
- let left = budget - memoriesReserve(budget);
68
- const pays = (piece) => {
69
- const tokens = estimateTokens(piece);
70
- if (tokens > left)
71
- return false;
72
- left -= tokens;
73
- return true;
74
- };
56
+ // Sections are paid in print order, ahead of the memories and
57
+ // after the heading; one that does not fit is dropped whole.
58
+ const purse = tokenPurse(budget - memoriesReserve(budget));
59
+ const pays = (piece) => purse.pays(estimateTokens(piece));
60
+ const hintPool = availabilityPool(() => pool);
75
61
  const planPiece = planningSection(apiResult);
76
62
  const showPlan = planPiece !== '' && pays(planPiece);
77
63
  const tailRows = apiResult.results.filter((r) => r.isFreshTail || r.isSummary);
@@ -80,22 +66,18 @@ function recallPresenter(budget, options) {
80
66
  const showContinuity = continuityPiece !== '' && pays(continuityPiece);
81
67
  // The hints and Cutoff block describe the list MCP shows, not the window band in apiResult.
82
68
  const render = (cut) => {
83
- const list = dropHeldCopies(cut, (r) => r.entry); // after every cut, so a merged row cut here never hides its sources
84
- const { anchoring, availability } = detectBiasHints(list, pool, anchorRing, queryHash);
69
+ // After every cut, so a merged row cut here never hides its sources.
70
+ const list = dropHeldCopies(cut, (r) => r.entry);
71
+ const { anchoring, availability } = detectRecallHints({ list, pool: hintPool, anchorRing, queryHash });
85
72
  const shownIds = new Set(list.map((r) => r.entry.id));
86
73
  const shownKeys = storedTextKeys(list.map((r) => r.entry));
87
74
  const tail = showTail
88
75
  ? dropHeldCopies(tailRows.filter((r) => !shownIds.has(r.id) && !shownKeys.has(duplicateKey(r.content))), (r) => r)
89
76
  : [];
90
- const s = {
91
- totalCandidates: pool.length + droppedByScope,
92
- droppedPreRank: droppedByScope + cut.length - list.length, // the bucket CLI and API recall put hidden copies in
93
- droppedByBudget: Math.max(0, pool.length - cut.length), // an upper bound: rows that never matched count too
94
- summarySubstitutionsAdded: tail.filter((r) => r.isSummary).length,
95
- freshTailAdded: tail.filter((r) => r.isFreshTail && !r.isSummary).length,
96
- suppressedByInterference: anchoring?.reason === 'memory_dominance' ? 1 : 0,
97
- };
98
- // Anchoring is the stronger pull, so it prints first; the Cutoff block sits above the list, where the agent reads it.
77
+ const counts = suppressionCounts({ poolSize: pool.length, droppedByScope, cut, list, tail });
78
+ const s = suppressionSummary(counts, anchoring);
79
+ // Anchoring is the stronger pull, so it prints first; the
80
+ // Cutoff block sits above the list, where the agent reads it.
99
81
  let text = biasHintSections(anchoring, availability);
100
82
  if (showPlan)
101
83
  text += planPiece;
@@ -104,13 +86,13 @@ function recallPresenter(budget, options) {
104
86
  text += formatMemories(list) + tailSection(tail) + (showContinuity ? continuityPiece : '');
105
87
  return { anchoring, availability, text, list };
106
88
  };
107
- const rendered = renderWithinBudget(ranked, { room: left, budget }, render);
89
+ const rendered = fitMcpRecall(ranked, { room: purse.left(), budget }, render);
108
90
  out.rendered = rendered;
109
91
  return { ids: rendered.list.map((r) => r.entry.id), audit: hintRows(rendered) };
110
92
  };
111
93
  }
112
94
  export async function runRecallTool(call) {
113
- const { ctx, hippoRoot, config, tenantId, args } = call;
95
+ const { ctx, hippoRoot, config, tenantId, args, store } = call;
114
96
  // MCP keeps its own band size and search mode, so limit, mode and explain are checked but not passed on.
115
97
  const { opts: recallOpts } = parseRecallRequest(toolParams(args));
116
98
  const { query, includeContinuity, sessionId } = recallOpts;
@@ -119,7 +101,8 @@ export async function runRecallTool(call) {
119
101
  hippoRoot,
120
102
  tenantId,
121
103
  actor: mcpActor(ctx),
122
- store: ctx?.store,
104
+ store,
105
+ reach: ctx?.reach,
123
106
  };
124
107
  const anchorRing = sessionRing('mcp', tenantId, sessionId);
125
108
  const who = { tenantId, actor: ctx?.actor ?? 'mcp' };
@@ -135,22 +118,24 @@ export async function runRecallTool(call) {
135
118
  keepHeldCopies: true,
136
119
  project: ctx?.project,
137
120
  showRanked: recallPresenter(budget, {
138
- includeContinuity, anchorRing, queryHash, out,
139
- hintRows: ({ list, anchoring, availability }) => shownRecallRows(who, {
140
- query, ring: anchorRing, topId: list[0]?.entry.id ?? null, anchoring, availability,
141
- }),
121
+ includeContinuity,
122
+ anchorRing,
123
+ queryHash,
124
+ out,
125
+ hintRows: ({ list, anchoring, availability }) => shownRecallRows(who, { query, ring: anchorRing, topId: list[0]?.entry.id ?? null, anchoring, availability }),
142
126
  }),
143
127
  });
144
128
  const { rendered } = out;
145
129
  if (!rendered)
146
130
  throw new Error('hippo_recall: api.retrieve returned without calling showRanked');
147
131
  lastRecalledIds.set(resolveClientKey(ctx), rendered.list.map((r) => r.entry.id));
148
- // Fed once the recall's rows are written, after the final detect: anchoredOn feeds the cooldown for the next recall on this session.
132
+ // Fed once the recall's rows are written, after the final detect: anchoredOn feeds the cooldown for the next recall
133
+ // on this session.
149
134
  if (anchorRing)
150
135
  noteRecall(anchorRing, query, rendered.list[0]?.entry.id ?? null, rendered.anchoring?.memoryId);
151
136
  return rendered.text;
152
137
  }
153
- export async function runAssembleTool({ args, ctx, hippoRoot, tenantId }) {
138
+ export async function runAssembleTool({ args, ctx, hippoRoot, tenantId, store }) {
154
139
  const sessionId = String(args.session_id || '');
155
140
  if (!sessionId)
156
141
  return 'No session_id provided.';
@@ -161,7 +146,7 @@ export async function runAssembleTool({ args, ctx, hippoRoot, tenantId }) {
161
146
  hippoRoot,
162
147
  tenantId,
163
148
  actor: mcpActor(ctx),
164
- store: ctx?.store,
149
+ store,
165
150
  };
166
151
  const explicitScope = isJsonString(args.scope) && args.scope.length > 0
167
152
  ? args.scope
@@ -181,7 +166,7 @@ export async function runAssembleTool({ args, ctx, hippoRoot, tenantId }) {
181
166
  });
182
167
  return assembleText(r);
183
168
  }
184
- export async function runDrillTool({ args, ctx, hippoRoot, tenantId }) {
169
+ export async function runDrillTool({ args, ctx, hippoRoot, tenantId, store }) {
185
170
  const summaryId = String(args.summary_id || '');
186
171
  if (!summaryId)
187
172
  return 'No summary_id provided.';
@@ -193,7 +178,7 @@ export async function runDrillTool({ args, ctx, hippoRoot, tenantId }) {
193
178
  hippoRoot,
194
179
  tenantId,
195
180
  actor: mcpActor(ctx),
196
- store: ctx?.store,
181
+ store,
197
182
  };
198
183
  const drillExtra = {};
199
184
  if (Number.isFinite(limit) && limit > 0)
@@ -213,15 +198,17 @@ export async function runDrillTool({ args, ctx, hippoRoot, tenantId }) {
213
198
  }
214
199
  return drillText(r);
215
200
  }
216
- // The served store names the project (an HTTP daemon runs from anywhere); the global root names none, so only an owner of the server cwd falls back to it.
201
+ // The served store names the project (an HTTP daemon runs from anywhere); the global root names none, so only an owner
202
+ // of the server cwd falls back to it.
217
203
  function localProject(hippoRoot, ownsCwd) {
218
204
  const storeProject = resolveProjectIdentity(path.dirname(path.resolve(hippoRoot)));
219
205
  return storeProject.name !== '' || !ownsCwd ? storeProject : resolveProjectIdentity(process.cwd());
220
206
  }
221
- export async function runContextTool({ args, ctx, hippoRoot, config, tenantId }) {
207
+ export async function runContextTool({ args, ctx, hippoRoot, config, tenantId, store }) {
222
208
  // Stdio names no project, and the store's folder or the launch cwd is no caller's; HTTP sends X-Hippo-Project.
223
- if (isSharedStore(hippoRoot) && ctx?.project === undefined)
209
+ if ((ctx?.reach ? ctx.reach.shared : isSharedStore(hippoRoot)) && ctx?.project === undefined) {
224
210
  return 'hippo_context needs a project on a shared store; use hippo_recall';
211
+ }
225
212
  const { budget: budgetArg, scope: exactScope } = parseContextRequest(toolParams(args));
226
213
  const budget = budgetArg ?? config.defaultContextBudget;
227
214
  if (budget === 0)
@@ -229,8 +216,9 @@ export async function runContextTool({ args, ctx, hippoRoot, config, tenantId })
229
216
  if (budget < memoriesReserve(budget))
230
217
  return ''; // not even the heading fits, so nothing prints, as at budget 0
231
218
  const ownsCwd = ownsServerCwd(ctx);
232
- const result = await apiGetContext({ hippoRoot, tenantId, actor: mcpActor(ctx), store: ctx?.store }, {
233
- // The server's git state is no remote caller's, so a project or remote caller gets rows by strength without a query.
219
+ const result = await apiGetContext({ hippoRoot, tenantId, actor: mcpActor(ctx), store, reach: ctx?.reach }, {
220
+ // The server's git state is no remote caller's, so a project
221
+ // or remote caller gets rows by strength without a query.
234
222
  q: ctx?.project || !ownsCwd ? undefined : autoDetectContext(),
235
223
  budget,
236
224
  exactScope,
@@ -1,7 +1,9 @@
1
1
  import { type McpContext, type McpRequest, type McpResponse } from './protocol.js';
2
- /** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call), other tools are not recorded. */
3
- export declare function recordMcpTokens(toolName: string, output: string, ctx?: McpContext): Promise<void>;
4
- /** Transport-agnostic MCP dispatcher: the stdio loop and the HTTP/SSE transport route every JSON-RPC message through it. Returns null for notifications.
5
- * Errors thrown by `executeTool` are the caller's problem: wrap with try/catch on the transport side. */
6
- export declare function handleMcpRequest(req: McpRequest, ctx?: McpContext): Promise<McpResponse | null>;
2
+ /** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call),
3
+ * other tools are not recorded. */
4
+ export declare function recordMcpTokens(toolName: string, output: string, ctx: McpContext): Promise<void>;
5
+ /** Transport-agnostic MCP dispatcher: the stdio loop and the HTTP/SSE transport route every JSON-RPC message through
6
+ * it. Returns null for notifications. `executeTool` errors are the caller's problem: wrap with try/catch in the
7
+ * transport. Only `tools/call` needs the context, so stdio builds one for that method alone. */
8
+ export declare function handleMcpRequest(req: McpRequest, ctx: McpContext | undefined): Promise<McpResponse | null>;
7
9
  //# sourceMappingURL=request.d.ts.map
@@ -1,95 +1,70 @@
1
1
  // Transport-agnostic request handling: tool dispatch table, tool execution and the JSON-RPC method switch.
2
- import { errorMessage, log } from '../util/log.js';
2
+ import { currentSignal } from '../util/request-scope.js';
3
3
  import { STORE_NOT_PORTED_MESSAGE } from '../util/http-util.js';
4
- import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
5
4
  import { loadConfig } from '../core/config.js';
6
- import { resolveTenantId } from '../store/tenant.js';
7
- import { runWithRequestStores } from '../db/index.js';
8
- import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
9
- import { hasGroup, storeFor } from '../store/index.js';
5
+ import { hasGroup, narrowStore } from '../store/index.js';
10
6
  import { estimateTokens } from '../util/token-text.js';
11
7
  import { PACKAGE_VERSION } from '../util/version.js';
12
8
  import { validateToolArgs } from './tool-args.js';
13
- import { RecallRequestError } from '../api/recall-request.js';
14
- import { findHippoRoot } from './protocol.js';
9
+ import { RecallRequestError } from '../api/recall/request.js';
10
+ import { recordTokens } from '../api/tokens.js';
11
+ import { mcpActor, } from './protocol.js';
15
12
  import { TOOLS, TOOLS_BY_NAME, ARGS_CHECKED_BY_API } from './tools.js';
16
13
  import { runRecallTool, runAssembleTool, runDrillTool, runContextTool } from './recall-tools.js';
17
14
  import { runRememberTool, runOutcomeTool, runLearnTool } from './memory-tools.js';
18
- import { runPredictBaserateTool, runStatusTool, runConflictsTool, runResolveTool, runShareTool, runPeersTool } from './admin-tools.js';
15
+ import { runPredictBaserateTool, runStatusTool, runConflictsTool, runResolveTool, runShareTool, runPeersTool, } from './admin-tools.js';
19
16
  import { sharedStoreRefusal } from './shared-gate.js';
20
17
  import { isJsonString, isJsonObject } from '../util/json.js';
21
- /** Zero-install first run (`npx -y hippo-memory mcp`, no store anywhere): create the global store instead of failing every tool call, and say so on stderr
22
- * (stdout carries the protocol). A later `hippo init` project store takes precedence. */
23
- function createGlobalStoreOnFirstRun() {
24
- initGlobal();
25
- const root = getGlobalRoot();
26
- log.warn(`no memory store found; created the global store at ${root}. Run \`hippo init\` in a project for a project store.`);
27
- return root;
28
- }
29
18
  // ── Token ledger ──
30
19
  const MCP_TOKEN_SURFACES = new Map([
31
20
  ['hippo_recall', 'mcp_recall'],
32
21
  ['hippo_context', 'mcp_context'],
33
22
  ]);
34
- /** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call), other tools are not recorded. */
23
+ /** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call),
24
+ * other tools are not recorded. */
35
25
  export async function recordMcpTokens(toolName, output, ctx) {
36
26
  const surface = MCP_TOKEN_SURFACES.get(toolName);
37
27
  if (!surface || !output)
38
28
  return;
39
- try {
40
- const hippoRoot = ctx?.hippoRoot ?? findHippoRoot();
41
- if (!hippoRoot)
42
- return;
43
- await storeFor({ hippoRoot, store: ctx?.store }).recordTokens({
44
- tenantId: ctx?.tenantId ?? resolveTenantId({}),
45
- surface,
46
- event: 'inject',
47
- items: 0,
48
- tokens: estimateTokens(output),
49
- });
50
- }
51
- catch (err) {
52
- rethrowIfSqliteBlocked(err);
53
- log.warnThenDebug('mcp-token-ledger', `token ledger write failed; the tool reply is unaffected: ${errorMessage(err)}`);
54
- }
29
+ const apiCtx = { hippoRoot: ctx.hippoRoot, tenantId: ctx.tenantId, actor: mcpActor(ctx), store: ctx.store };
30
+ await recordTokens(apiCtx, surface, { items: 0, tokens: estimateTokens(output) });
31
+ }
32
+ /** A tool that reaches its store through `group`: the call it gets carries the store narrowed to it. */
33
+ function toolOn(group, handler) {
34
+ return {
35
+ storeReady: group,
36
+ run: (call) => handler({ ...call, store: narrowStore(call.store, group) }),
37
+ };
55
38
  }
56
39
  const TOOL_HANDLERS = new Map([
57
- ['hippo_recall', { handler: runRecallTool, storeReady: 'base' }],
58
- ['hippo_assemble', { handler: runAssembleTool, storeReady: 'dagReads' }],
59
- ['hippo_drill', { handler: runDrillTool, storeReady: 'dagReads' }],
60
- ['hippo_predict_baserate', { handler: runPredictBaserateTool, storeReady: 'predictions' }],
61
- ['hippo_remember', { handler: runRememberTool, storeReady: 'entryWrites' }],
62
- ['hippo_outcome', { handler: runOutcomeTool, storeReady: 'entryWrites' }],
63
- ['hippo_context', { handler: runContextTool, storeReady: 'contextReads' }],
64
- ['hippo_status', { handler: runStatusTool }],
65
- ['hippo_learn', { handler: runLearnTool }],
66
- ['hippo_conflicts', { handler: runConflictsTool }],
67
- ['hippo_resolve', { handler: runResolveTool }],
68
- ['hippo_share', { handler: runShareTool }],
69
- ['hippo_peers', { handler: runPeersTool }],
40
+ ['hippo_recall', toolOn('base', runRecallTool)],
41
+ ['hippo_assemble', toolOn('dagReads', runAssembleTool)],
42
+ ['hippo_drill', toolOn('dagReads', runDrillTool)],
43
+ ['hippo_predict_baserate', toolOn('predictions', runPredictBaserateTool)],
44
+ ['hippo_remember', toolOn('entryWrites', runRememberTool)],
45
+ ['hippo_outcome', toolOn('entryWrites', runOutcomeTool)],
46
+ ['hippo_context', toolOn('contextReads', runContextTool)],
47
+ ['hippo_status', toolOn('reports', runStatusTool)],
48
+ ['hippo_learn', toolOn('lessonWrites', runLearnTool)],
49
+ ['hippo_conflicts', toolOn('conflicts', runConflictsTool)],
50
+ ['hippo_resolve', toolOn('conflicts', runResolveTool)],
51
+ ['hippo_share', { run: runShareTool }],
52
+ ['hippo_peers', { run: runPeersTool }],
70
53
  ]);
71
- /** The served store when it is not hippo.db, else null. */
72
- function otherStore(ctx) {
73
- const store = ctx?.store;
74
- return store !== undefined && store.kind !== 'sqlite' ? store : null;
75
- }
54
+ /** A call with no context yet (tools/list on stdio) lists every tool. */
76
55
  function runsOn(store, toolName) {
77
- const group = TOOL_HANDLERS.get(toolName)?.storeReady;
78
- return group !== undefined && hasGroup(store, group);
56
+ return store === undefined || hasGroup(store, TOOL_HANDLERS.get(toolName)?.storeReady ?? 'localFiles');
79
57
  }
80
58
  async function executeTool(name, args, ctx) {
81
- // With a transport context (HTTP), trust it: hippoRoot comes from the server's bound opts and tenantId from the Bearer (or loopback fallback).
82
- // Stdio walks from cwd / the global root and resolves tenant from HIPPO_TENANT.
83
- const hippoRoot = ctx?.hippoRoot ?? findHippoRoot() ?? createGlobalStoreOnFirstRun();
59
+ // The transport's context is trusted: its hippoRoot, store and tenantId were bound by the host (the HTTP server's
60
+ // Bearer, or the stdio host's folder walk and HIPPO_TENANT).
61
+ const { hippoRoot, tenantId } = ctx;
84
62
  const config = loadConfig(hippoRoot);
85
- // Every store read here is tenant-isolated, resolved once per tool call; prefer the transport's ctx.tenantId so an HTTP Bearer for tenant B
86
- // does not drop to HIPPO_TENANT.
87
- const tenantId = ctx?.tenantId ?? resolveTenantId({});
88
- const handler = TOOL_HANDLERS.get(name)?.handler;
63
+ const run = TOOL_HANDLERS.get(name)?.run;
89
64
  // handleMcpRequest rejects names missing from TOOLS, so reaching here means TOOLS and this table drifted apart.
90
- if (!handler)
65
+ if (!run)
91
66
  throw new Error(`hippo-mcp: tool ${name} is declared but has no handler`);
92
- return handler({ args, ctx, hippoRoot, config, tenantId });
67
+ return run({ args, ctx, hippoRoot, store: ctx.store, config, tenantId });
93
68
  }
94
69
  // ── Request handling ──
95
70
  // The MCP spec reports input validation as a tool result with isError, so the model can read it and retry.
@@ -97,9 +72,21 @@ function invalidArgs(id, toolName, problems) {
97
72
  return {
98
73
  jsonrpc: '2.0',
99
74
  id,
100
- result: { content: [{ type: 'text', text: `Invalid arguments for ${toolName}: ${problems.join('; ')}` }], isError: true },
75
+ result: {
76
+ content: [{ type: 'text', text: `Invalid arguments for ${toolName}: ${problems.join('; ')}` }],
77
+ isError: true,
78
+ },
101
79
  };
102
80
  }
81
+ /** The tool and its ledger row run in the caller's request scope, which the host (server or stdio) opens.
82
+ * SHORTCUT: the deadline stops a call only between these steps, not a running store read or fetch; thread the signal */
83
+ async function runTool(toolName, args, ctx) {
84
+ currentSignal()?.throwIfAborted();
85
+ const text = await executeTool(toolName, args, ctx);
86
+ currentSignal()?.throwIfAborted();
87
+ await recordMcpTokens(toolName, text, ctx);
88
+ return text;
89
+ }
103
90
  async function callTool(id, params, ctx) {
104
91
  const nameValue = params?.name;
105
92
  const toolName = isJsonString(nameValue) ? nameValue : '';
@@ -108,13 +95,13 @@ async function callTool(id, params, ctx) {
108
95
  return { jsonrpc: '2.0', id, error: { code: -32602, message: `Unknown tool: ${toolName.slice(0, 128)}` } };
109
96
  }
110
97
  // The same refusal a ported tool gives when it reaches hippo.db, so a client handles one shape.
111
- const other = otherStore(ctx);
112
- if (other && !runsOn(other, toolName)) {
98
+ if (!runsOn(ctx.store, toolName)) {
113
99
  return { jsonrpc: '2.0', id, error: { code: -32603, message: STORE_NOT_PORTED_MESSAGE } };
114
100
  }
115
101
  const refusal = sharedStoreRefusal(toolName, ctx);
116
- if (refusal !== undefined)
102
+ if (refusal !== undefined) {
117
103
  return { jsonrpc: '2.0', id, result: { content: [{ type: 'text', text: refusal }], isError: true } };
104
+ }
118
105
  const argumentsValue = params?.arguments;
119
106
  if (argumentsValue !== undefined && argumentsValue !== null && !isJsonObject(argumentsValue)) {
120
107
  return { jsonrpc: '2.0', id, error: { code: -32602, message: `${toolName}: arguments must be an object` } };
@@ -125,12 +112,7 @@ async function callTool(id, params, ctx) {
125
112
  return invalidArgs(id, toolName, problems);
126
113
  let output;
127
114
  try {
128
- // One handle per store for the tool and its ledger row; stdio interleaves calls, so each gets its own scope.
129
- output = await runWithRequestStores(async () => {
130
- const text = await executeTool(toolName, toolArgs, ctx);
131
- await recordMcpTokens(toolName, text, ctx);
132
- return text;
133
- });
115
+ output = await runTool(toolName, toolArgs, ctx);
134
116
  }
135
117
  catch (err) {
136
118
  if (!(err instanceof RecallRequestError))
@@ -145,8 +127,9 @@ async function callTool(id, params, ctx) {
145
127
  },
146
128
  };
147
129
  }
148
- /** Transport-agnostic MCP dispatcher: the stdio loop and the HTTP/SSE transport route every JSON-RPC message through it. Returns null for notifications.
149
- * Errors thrown by `executeTool` are the caller's problem: wrap with try/catch on the transport side. */
130
+ /** Transport-agnostic MCP dispatcher: the stdio loop and the HTTP/SSE transport route every JSON-RPC message through
131
+ * it. Returns null for notifications. `executeTool` errors are the caller's problem: wrap with try/catch in the
132
+ * transport. Only `tools/call` needs the context, so stdio builds one for that method alone. */
150
133
  export async function handleMcpRequest(req, ctx) {
151
134
  const { id, method, params } = req;
152
135
  switch (method) {
@@ -163,10 +146,11 @@ export async function handleMcpRequest(req, ctx) {
163
146
  case 'notifications/initialized':
164
147
  return null;
165
148
  case 'tools/list': {
166
- const other = otherStore(ctx);
167
- return { jsonrpc: '2.0', id, result: { tools: other ? TOOLS.filter((t) => runsOn(other, t.name)) : TOOLS } };
149
+ return { jsonrpc: '2.0', id, result: { tools: TOOLS.filter((t) => runsOn(ctx?.store, t.name)) } };
168
150
  }
169
151
  case 'tools/call':
152
+ if (ctx === undefined)
153
+ throw new Error('hippo-mcp: tools/call needs a context');
170
154
  return callTool(id, params, ctx);
171
155
  default:
172
156
  // Notifications (no id) must not receive a response
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
- /** Hippo Memory MCP server: exposes hippo memory as MCP tools over stdio via the programmatic API (no child process). Usage: hippo mcp (or npx hippo-memory
2
+ /**
3
+ * Hippo Memory MCP server: exposes hippo memory as MCP tools over stdio via the programmatic API (no child process).
4
+ * Usage: hippo mcp (or npx hippo-memory
3
5
  * mcp). */
4
6
  export { _resetSessionRecallHistoryMcpForTests } from './session-state.js';
5
7
  export { findHippoRoot, mcpErrorResponse, type McpRequest, type McpResponse, type McpContext } from './protocol.js';
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env node
2
- /** Hippo Memory MCP server: exposes hippo memory as MCP tools over stdio via the programmatic API (no child process). Usage: hippo mcp (or npx hippo-memory
2
+ /**
3
+ * Hippo Memory MCP server: exposes hippo memory as MCP tools over stdio via the programmatic API (no child process).
4
+ * Usage: hippo mcp (or npx hippo-memory
3
5
  * mcp). */
4
6
  export { _resetSessionRecallHistoryMcpForTests } from './session-state.js';
5
7
  export { findHippoRoot, mcpErrorResponse } from './protocol.js';
@@ -7,7 +9,8 @@ export { handleMcpRequest } from './request.js';
7
9
  export { startStdioLoop } from './stdio.js';
8
10
  import { envMcpStdio } from '../util/env.js';
9
11
  import { startStdioLoop } from './stdio.js';
10
- // Auto-start only as the main module (node dist/mcp/server.js or the cli's import('./mcp/server.js')); importing it elsewhere (the HTTP/SSE wiring) must not
12
+ // Auto-start only as the main module (node dist/mcp/server.js or the cli's import('./mcp/server.js')); importing it
13
+ // elsewhere (the HTTP/SSE wiring) must not
11
14
  // start stdio. Fallback: HIPPO_MCP_STDIO=1 or argv1 ending in /mcp/server.js also starts it.
12
15
  const isMainModule = (() => {
13
16
  try {
@@ -25,6 +28,8 @@ const isMainModule = (() => {
25
28
  }
26
29
  })();
27
30
  if (isMainModule) {
28
- startStdioLoop();
31
+ // The CLI owns the store build, so running this file directly opens the same store `hippo mcp` does.
32
+ const { cliStdioHost } = await import('../cli/api-context.js');
33
+ startStdioLoop(cliStdioHost);
29
34
  }
30
35
  //# sourceMappingURL=server.js.map
@@ -1,7 +1,7 @@
1
1
  /** Test-only: reset the MCP recall rings. Call from beforeEach. */
2
2
  export declare function _resetSessionRecallHistoryMcpForTests(): void;
3
3
  export declare const lastRecalledIds: Map<string, string[]>;
4
- export { autoSleepInFlight } from '../api/auto-sleep.js';
4
+ export { autoSleepInFlight } from '../api/sleep/auto-sleep.js';
5
5
  export declare function resolveClientKey(ctx: {
6
6
  clientKey?: string;
7
7
  tenantId: string;
@@ -1,11 +1,12 @@
1
1
  // Per-process state the MCP tools share across calls: recall rings, last recalled ids, auto-sleep runs.
2
2
  import { DEFAULT_TENANT_ID } from '../util/env.js';
3
- import { resetSessionRings } from '../api/recall-record.js';
3
+ import { resetSessionRings } from '../api/recall/finish.js';
4
4
  /** Test-only: reset the MCP recall rings. Call from beforeEach. */
5
5
  export function _resetSessionRecallHistoryMcpForTests() {
6
6
  resetSessionRings('mcp');
7
7
  }
8
- // Last recalled IDs per client for outcome feedback, so two HTTP-MCP clients on one tenant cannot poison each other: key is `ctx.clientKey` (hash of
8
+ // Last recalled IDs per client for outcome feedback, so two HTTP-MCP clients on one tenant cannot poison each other:
9
+ // key is `ctx.clientKey` (hash of
9
10
  // bearer+remoteAddr over HTTP), else 'stdio-${pid}', else `${tenantId}:default` for a McpContext built in tests.
10
11
  const MAX_RECALL_CLIENTS = 4096;
11
12
  // The caller names the project half of each key, so a set past the cap drops the client that recalled longest ago.
@@ -20,7 +21,7 @@ class RecentRecalls extends Map {
20
21
  }
21
22
  }
22
23
  export const lastRecalledIds = new RecentRecalls();
23
- export { autoSleepInFlight } from '../api/auto-sleep.js';
24
+ export { autoSleepInFlight } from '../api/sleep/auto-sleep.js';
24
25
  export function resolveClientKey(ctx) {
25
26
  const base = ctx?.clientKey ? ctx.clientKey : `stdio-${process.pid}:${ctx?.tenantId || DEFAULT_TENANT_ID}`;
26
27
  return ctx?.project ? `${base}:${ctx.project.name}` : base;
@@ -1,4 +1,5 @@
1
1
  import type { McpContext } from './protocol.js';
2
- /** The refusal text for this call, or undefined when it may run; stdio passes no context and is never gated. */
3
- export declare function sharedStoreRefusal(name: string, ctx: McpContext | undefined): string | undefined;
2
+ /** The refusal text for this call, or undefined when it may run; the stdio host is the operator's own process and is
3
+ * never gated. */
4
+ export declare function sharedStoreRefusal(name: string, ctx: McpContext): string | undefined;
4
5
  //# sourceMappingURL=shared-gate.d.ts.map