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
@@ -1,10 +1,11 @@
1
- import { addTagToEntries, writeEntriesTogether } from '../store/entry-writes.js';
2
- import { confirmedOutcomeTimes } from '../store/audit.js';
3
- import { loadAllEntries, loadEntriesByIds, loadEntriesMentioning, readEntry } from '../store/entry-reads.js';
1
+ import { localFilesAt } from './roots.js';
4
2
  import { chunked } from '../util/chunked.js';
5
3
  import { CHURN_STALE_TAG } from '../core/memory.js';
6
4
  import { GitReadError, gitLsFilesAtHead, fetchChurnWindowLog, gitGrepPresence, resolveCommitBefore, packageScriptsAt, } from './churn-git.js';
7
5
  const HEADLINE_CHARS = 60;
6
+ const TRIVIAL_REMOVAL_WORDS = new Set([
7
+ 'extra', 'unused', 'empty', 'old', 'whitespace', 'spaces', 'blank', 'dead', 'commented',
8
+ ]);
8
9
  /** Extract what was replaced/removed from a commit message.
9
10
  * Returns null if the commit isn't a breaking/migration change. */
10
11
  export function extractInvalidationTarget(message) {
@@ -35,35 +36,47 @@ export function extractInvalidationTarget(message) {
35
36
  if (removeMatch) {
36
37
  const target = removeMatch[1].trim();
37
38
  const words = target.split(/\s+/);
38
- const trivialWords = new Set(['extra', 'unused', 'empty', 'old', 'whitespace', 'spaces', 'blank', 'dead', 'commented']);
39
- 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()));
40
40
  if (isTrivial)
41
41
  return null;
42
42
  return { from: target, to: null, type: 'removal' };
43
43
  }
44
44
  return null;
45
45
  }
46
- /** Find memories that reference the invalidated pattern and weaken them (halve half_life_days, confidence 'stale', add 'invalidated' tag; pinned are skipped).
47
- * 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. */
48
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) {
49
55
  // tenantId opt-in: when set, only that tenant's memories are weakened; undefined is host-wide.
50
56
  // The onlyId read is tenant-scoped too, so another tenant's id is invisible here.
51
57
  const entries = options?.onlyId === undefined
52
- ? loadEntriesMentioning(hippoRoot, invalidationTokenize(target.from), target.from.toLowerCase().trim(), tenantId)
53
- : [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);
54
60
  const { result, weakened } = weakenMatches(entries, target, options);
55
- writeEntriesTogether(hippoRoot, weakened);
61
+ learning.writeEntriesTogether(weakened);
56
62
  return result;
57
63
  }
58
- /** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
59
- * 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. */
60
- export function invalidateMatchingAmong(hippoRoot, live, target, tenantId) {
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. */
68
+ export async function invalidateMatchingAmong(store, live, target, tenantId) {
61
69
  const seen = weakenMatches(live, target, { dryRun: true }).result;
62
70
  const ids = [...seen.targets, ...seen.skippedPinned];
63
- // loadEntriesByIds reads at most 500 ids a call.
64
- const fresh = new Map(chunked(ids, 500).flatMap((chunk) => loadEntriesByIds(hippoRoot, chunk, tenantId)).map((entry) => [entry.id, entry]));
71
+ const fresh = new Map();
72
+ // The port reads at most 500 ids a call.
73
+ for (const chunk of chunked(ids, 500)) {
74
+ for (const entry of await store.entriesByIds(chunk, tenantId))
75
+ fresh.set(entry.id, entry);
76
+ }
65
77
  const { result, weakened } = weakenMatches(ids.flatMap((id) => fresh.get(id) ?? []), target);
66
- writeEntriesTogether(hippoRoot, weakened);
78
+ if (weakened.length > 0)
79
+ await store.lessonWrites.writeTogether(weakened);
67
80
  const byId = new Map(weakened.map((entry) => [entry.id, entry]));
68
81
  for (let i = 0; i < live.length; i++)
69
82
  live[i] = byId.get(live[i].id) ?? live[i];
@@ -149,7 +162,8 @@ const CHURN_PATH_RE = new RegExp(
149
162
  `[A-Za-z0-9_./\\\\:-]+\\.(?:${CHURN_PATH_EXTENSIONS.join('|')})(?![A-Za-z0-9_])(?::\\d+(?:-\\d+)?)?`, 'g');
150
163
  const CHURN_SYMBOL_RE = /`([A-Za-z_$][A-Za-z0-9_$]*)(?:\(\))?`/g;
151
164
  const CHURN_SCRIPT_RE = /npm run(?:-script)?\s+([A-Za-z0-9:_-]+)/g;
152
- /** 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. */
153
167
  export function extractChurnRefs(content) {
154
168
  const paths = new Set();
155
169
  for (const m of content.matchAll(CHURN_PATH_RE)) {
@@ -222,8 +236,10 @@ function collectChurnCandidates(entries, opts) {
222
236
  const skippedPinned = [];
223
237
  const candidates = [];
224
238
  for (const entry of entries) {
225
- 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)) {
226
241
  continue;
242
+ }
227
243
  if (entry.superseded_by)
228
244
  continue;
229
245
  if (entry.kind === 'raw' || entry.kind === 'archived')
@@ -288,7 +304,16 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
288
304
  ? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
289
305
  : new Set();
290
306
  const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
291
- 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
+ };
292
317
  }
293
318
  function pathEvidence(git, paths, anchorTime) {
294
319
  for (const rawPath of paths) {
@@ -331,7 +356,8 @@ function scriptEvidence(git, scripts, anchor, headScripts) {
331
356
  : undefined;
332
357
  return hit ? `script-gone: ${hit}` : null;
333
358
  }
334
- /** 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. */
335
361
  function churnEvidence(git, refs, anchor) {
336
362
  let evidence = pathEvidence(git, refs.paths, new Date(anchor).getTime());
337
363
  if (!evidence && refs.symbols.length > 0)
@@ -341,13 +367,13 @@ function churnEvidence(git, refs, anchor) {
341
367
  }
342
368
  return evidence;
343
369
  }
344
- function tagChurnStale(hippoRoot, tenantId, toTag, confirmedAt) {
370
+ function tagChurnStale(learning, tenantId, toTag, confirmedAt) {
345
371
  // The git calls above can take seconds; a good outcome landing meanwhile moves the anchor past the evidence.
346
- const confirmedNow = confirmedOutcomeTimes(hippoRoot, tenantId);
372
+ const confirmedNow = learning.confirmedOutcomeTimes(tenantId);
347
373
  const unconfirmed = toTag.filter((stale) => confirmedNow.get(stale.id) === confirmedAt.get(stale.id));
348
374
  if (unconfirmed.length === 0)
349
375
  return;
350
- addTagToEntries(hippoRoot, tenantId, unconfirmed.map((stale) => stale.id), CHURN_STALE_TAG);
376
+ learning.addTagToEntries(tenantId, unconfirmed.map((stale) => stale.id), CHURN_STALE_TAG);
351
377
  }
352
378
  /** Counts every candidate's evidence into `result` and returns the rows still to tag, writing nothing. */
353
379
  function recordChurnEvidence(git, candidates, anchorOf, result) {
@@ -372,19 +398,26 @@ function recordChurnEvidence(git, candidates, anchorOf, result) {
372
398
  /** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
373
399
  * confirmation); only adds/removes CHURN_STALE_TAG, never confidence/half-life/strength. */
374
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) {
375
405
  const dryRun = opts.dryRun === true;
376
406
  if (!opts.projectName)
377
407
  return emptyChurnResult(dryRun);
378
- const entries = loadAllEntries(hippoRoot, opts.tenantId);
408
+ const origins = [opts.projectName, opts.legacyName].filter((name) => !!name);
409
+ const entries = learning.currentEntriesFromOrigins(opts.tenantId, origins);
379
410
  const { candidates, skippedPinned } = collectChurnCandidates(entries, opts);
380
411
  if (candidates.length === 0)
381
412
  return emptyChurnResult(dryRun, skippedPinned);
382
- const confirmedAt = confirmedOutcomeTimes(hippoRoot, opts.tenantId);
413
+ const confirmedAt = learning.confirmedOutcomeTimes(opts.tenantId);
383
414
  // Compared as epoch ms, not strings: imported rows may carry offsets or other ISO forms.
384
415
  const anchorOf = (entry) => {
385
416
  const confirmed = confirmedAt.get(entry.id);
386
417
  const confirmedMs = confirmed ? Date.parse(confirmed) : NaN;
387
- 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();
388
421
  };
389
422
  const needs = {
390
423
  paths: candidates.some((c) => c.refs.paths.length > 0),
@@ -397,10 +430,11 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
397
430
  const result = { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned, dryRun, preview: [] };
398
431
  try {
399
432
  const git = loadChurnGitView(repoRoot, opts.legacyName ?? opts.projectName, candidates, anchorOf, needs);
400
- // 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.
401
435
  const toTag = recordChurnEvidence(git, candidates, anchorOf, result);
402
436
  if (!dryRun && toTag.length > 0)
403
- tagChurnStale(hippoRoot, opts.tenantId, toTag, confirmedAt);
437
+ tagChurnStale(learning, opts.tenantId, toTag, confirmedAt);
404
438
  }
405
439
  catch (err) {
406
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): 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
- import { storeFor } 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';
2
+ import { hasGroup } from '../store/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,13 +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.
17
- // The entry is re-read to surface the half-life used in the MCP response.
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.
18
18
  const apiCtx = {
19
19
  hippoRoot,
20
20
  tenantId,
21
21
  actor: mcpActor(ctx),
22
- store: ctx?.store,
22
+ store,
23
23
  };
24
24
  const result = await apiRemember(apiCtx, {
25
25
  content: text,
@@ -27,36 +27,37 @@ export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId }
27
27
  personal: args.personal === true,
28
28
  project: ctx?.project,
29
29
  });
30
- const [entry] = await storeFor(apiCtx).entriesByIds([result.id], tenantId);
31
30
  // Auto-sleep runs on hippo.db, so another store skips it.
32
- const allowed = (ctx?.store === undefined || ctx.store.kind === 'sqlite') && ctx?.autoSleep !== false;
33
- startAutoSleepIfDue(hippoRoot, tenantId, config.autoSleep, allowed, ctx?.autoSleepRunner);
34
- const halfLife = entry?.half_life_days ?? config.defaultHalfLifeDays;
35
- const tagStr = entry?.tags.join(', ') || tags.join(', ') || 'none';
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);
35
+ const tagStr = result.tags.join(', ') || 'none';
36
36
  const warnings = (result.warnings ?? []).map((w) => `\nWarning: ${w}`).join('');
37
- return `Remembered [${result.id}] (half-life: ${halfLife}d, tags: ${tagStr})${warnings}`;
37
+ return `Remembered [${result.id}] (half-life: ${result.halfLifeDays}d, tags: ${tagStr})${warnings}`;
38
38
  }
39
- export async function runOutcomeTool({ args, ctx, hippoRoot, tenantId }) {
39
+ export async function runOutcomeTool({ args, ctx, hippoRoot, tenantId, store }) {
40
40
  const good = Boolean(args.good);
41
41
  const clientKey = resolveClientKey(ctx);
42
42
  const ids = lastRecalledIds.get(clientKey) ?? [];
43
43
  if (ids.length === 0)
44
44
  return 'No recent recalls to apply outcome to.';
45
- // 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
46
- // 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.
47
47
  const apiCtx = {
48
48
  hippoRoot,
49
49
  tenantId,
50
50
  actor: mcpActor(ctx),
51
- store: ctx?.store,
51
+ store,
52
52
  };
53
53
  const { applied } = await apiOutcome(apiCtx, ids, good);
54
54
  return `Applied ${good ? 'positive' : 'negative'} outcome to ${applied} memories`;
55
55
  }
56
- export function runLearnTool({ args, ctx, hippoRoot, tenantId }) {
56
+ export async function runLearnTool({ args, ctx, hippoRoot, tenantId, store }) {
57
57
  const days = Number(args.days) || 7;
58
- // 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).
59
- const result = 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 });
60
61
  if (result.status === 'not-a-repo')
61
62
  return 'No git history found.';
62
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