hippo-memory 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
@@ -9,13 +9,31 @@ import { errorMessage, log } from '../../util/log.js';
9
9
  import { ScopeForbiddenError } from '../../core/recall-scope.js';
10
10
  import { RejectedValueError } from '../../core/api-errors.js';
11
11
  import { OtherStoreFolderError, SqliteBlockedError, StoreNotPortedError } from '../../util/sqlite-blocked.js';
12
- // Every class the server maps by, at or below the store layer. Abstract ApiError is absent: only its four subclasses are thrown.
12
+ // Every class the server maps by, at or below the store layer. Abstract ApiError is absent: only its four subclasses
13
+ // are thrown.
13
14
  const CLASSES = [
14
- Error, TypeError, RangeError, SyntaxError, ReferenceError, EvalError, URIError,
15
- HttpError, BodyTooLargeError, BodyTimeoutError,
16
- BadRequestError, ForbiddenError, NotFoundError, ConflictError, RejectedValueError, ScopeForbiddenError, RawAppendOnlyError,
17
- SqliteBlockedError, StoreNotPortedError, OtherStoreFolderError,
18
- StoreBusyError, IncompatibleBinaryError,
15
+ Error,
16
+ TypeError,
17
+ RangeError,
18
+ SyntaxError,
19
+ ReferenceError,
20
+ EvalError,
21
+ URIError,
22
+ HttpError,
23
+ BodyTooLargeError,
24
+ BodyTimeoutError,
25
+ BadRequestError,
26
+ ForbiddenError,
27
+ NotFoundError,
28
+ ConflictError,
29
+ RejectedValueError,
30
+ ScopeForbiddenError,
31
+ RawAppendOnlyError,
32
+ SqliteBlockedError,
33
+ StoreNotPortedError,
34
+ OtherStoreFolderError,
35
+ StoreBusyError,
36
+ IncompatibleBinaryError,
19
37
  ];
20
38
  const PROTOTYPES = new Map(CLASSES.map((known) => [known.name, known.prototype]));
21
39
  // A chain of causes deeper than this is cut, so a cycle cannot recurse for ever.
@@ -37,19 +55,23 @@ function ownFields(err) {
37
55
  }
38
56
  /** Worker side. A thrown value that is not an Error carries its text and no class. */
39
57
  export function encodeError(err, depth = 0) {
40
- if (!(err instanceof Error))
58
+ if (!(err instanceof Error)) {
41
59
  return { classes: [], message: errorMessage(err), stack: undefined, fields: {}, cause: undefined };
60
+ }
42
61
  const cause = err.cause === undefined || depth >= MAX_CAUSES ? undefined : encodeError(err.cause, depth + 1);
43
62
  return { classes: classNames(err), message: err.message, stack: err.stack, fields: ownFields(err), cause };
44
63
  }
45
- /** Server side: an instance of the thrown class, or of its nearest ancestor in the table, with the worker's stack, cause and fields. */
64
+ /** Server side: an instance of the thrown class, or of its nearest ancestor in the table, with the worker's stack,
65
+ * cause and fields. */
46
66
  export function decodeError(wire) {
47
67
  const thrown = wire.classes[0];
48
68
  const known = wire.classes.find((name) => PROTOTYPES.has(name)) ?? 'Error';
49
69
  const unlisted = thrown !== undefined && thrown !== known;
50
- if (unlisted)
70
+ if (unlisted) {
51
71
  log.once(`store-worker-error:${thrown}`, 'warn', `a store worker threw ${thrown}, which the error codec does not list; it arrives as ${known}`);
52
- // A listed ancestor still maps to its status, so its text stays as thrown; under plain Error the class survives only in the message.
72
+ }
73
+ // A listed ancestor still maps to its status, so its text stays as thrown; under plain Error the class survives only
74
+ // in the message.
53
75
  const message = unlisted && known === 'Error' ? `${thrown}: ${wire.message}` : wire.message;
54
76
  const rebuilt = wire.cause === undefined ? new Error(message) : new Error(message, { cause: decodeError(wire.cause) });
55
77
  // The constructor is not run again: its arguments did not cross, and the fields below are what it set.
@@ -1,4 +1,5 @@
1
- // What the store workers refused, timed out and replaced since the process started; /health reports them beside the audit failure count.
1
+ // What the store workers refused, timed out and replaced since the process started; /health reports them beside the
2
+ // audit failure count.
2
3
  /** Counted on the server thread, across every executor of the process. */
3
4
  export const workerCounts = {
4
5
  /** Calls refused because a thread's queue was full. */
@@ -2,8 +2,11 @@ import { type OpMode } from './worker-ops.js';
2
2
  export interface CallOptions {
3
3
  readonly mode: OpMode;
4
4
  readonly requestId: string | undefined;
5
- /** Epoch milliseconds by which the call's request must be answered; absent means the call waits as long as it takes. */
5
+ /** Epoch milliseconds by which the call's request must be answered; absent means the call waits as long as it
6
+ * takes. */
6
7
  readonly deadlineAt?: number | undefined;
8
+ /** Aborts when the request is abandoned; a call still queued then is dropped and never runs. */
9
+ readonly signal?: AbortSignal | undefined;
7
10
  }
8
11
  export interface ExecutorOptions {
9
12
  /** Lock wait of each thread's connection; defaults to the server's. */
@@ -14,13 +17,15 @@ export interface ExecutorOptions {
14
17
  readonly writeGraceMs?: number;
15
18
  }
16
19
  export interface SqliteExecutor {
17
- /** Runs `op` of the synchronous store on a worker thread. A throw there rejects here as an instance of its own class. */
20
+ /** Runs `op` of the synchronous store on a worker thread. A throw there rejects here as an instance of its own
21
+ * class. */
18
22
  call<T>(op: string, args: readonly unknown[], opts: CallOptions): Promise<T>;
19
23
  /** Resolves once every thread has exited: Windows cannot delete a store folder while a thread holds its files. */
20
24
  close(): Promise<void>;
21
25
  /** Threads started and not yet exited. */
22
26
  liveThreads(): number;
23
- /** Stops the writer thread as a crash would: its running and queued calls reject, and the next write starts a fresh thread. */
27
+ /** Stops the writer thread as a crash would: its running and queued calls reject, and the next write starts a fresh
28
+ * thread. */
24
29
  terminateWriter(): void;
25
30
  }
26
31
  /** Threads for the hippo.db under `hippoRoot`: one writer and two readers. The first
@@ -1,4 +1,5 @@
1
- // The server thread's side of the store workers: SQLite's synchronous statements and lock waits run on their threads, so the event loop keeps answering.
1
+ // The server thread's side of the store workers: SQLite's synchronous statements and lock waits run on their threads,
2
+ // so the event loop keeps answering.
2
3
  import { fileURLToPath } from 'node:url';
3
4
  import { SHARE_ENV, Worker } from 'node:worker_threads';
4
5
  import { addAuditWriteFailures } from '../audit.js';
@@ -66,7 +67,7 @@ class WorkerPool {
66
67
  this.#queueMax = opts.queueMax ?? envStoreQueueMax() ?? DEFAULT_QUEUE_MAX;
67
68
  this.#writeGraceMs = opts.writeGraceMs ?? DEFAULT_WRITE_GRACE_MS;
68
69
  }
69
- call(op, args, { mode, requestId, deadlineAt }) {
70
+ call(op, args, { mode, requestId, deadlineAt, signal }) {
70
71
  return new Promise((resolve, reject) => {
71
72
  if (this.#closed) {
72
73
  reject(new StoreBusyError(EXECUTOR_CLOSED));
@@ -77,16 +78,27 @@ class WorkerPool {
77
78
  reject(decodeError(reply.error));
78
79
  return;
79
80
  }
80
- // SAFETY: the worker ran `op` of the synchronous store, whose result is the T the caller's port method declares.
81
+ // SAFETY: the worker ran `op` of the synchronous store, whose result is the T the caller's port method
82
+ // declares.
81
83
  resolve(reply.value);
82
84
  };
83
- const lane = mode === 'write' ? this.#writer : this.#readers.reduce((least, next) => (load(next) < load(least) ? next : least));
85
+ const lane = mode === 'write'
86
+ ? this.#writer
87
+ : this.#readers.reduce((least, next) => (load(next) < load(least) ? next : least));
84
88
  const refusal = this.#refusal(lane, deadlineAt);
85
89
  if (refusal !== undefined) {
86
90
  reject(refusal);
87
91
  return;
88
92
  }
89
- const pending = { job: { id: this.#nextId++, op, args, requestId }, settle, fail: reject, deadlineAt, timer: undefined, answered: false };
93
+ const pending = {
94
+ job: { id: this.#nextId++, op, args, requestId },
95
+ settle,
96
+ fail: reject,
97
+ deadlineAt,
98
+ signal,
99
+ timer: undefined,
100
+ answered: false,
101
+ };
90
102
  this.#watchDeadline(lane, pending);
91
103
  lane.queue.push(pending);
92
104
  this.#ensureSetup();
@@ -109,13 +121,15 @@ class WorkerPool {
109
121
  this.#writer.queue.unshift(pending);
110
122
  this.#pump(this.#writer);
111
123
  }
112
- // A failed setup fails the reads that waited for it with its own error, as each read's own open would have, and the next call tries it again.
124
+ // A failed setup fails the reads that waited for it with its own error, as each read's own open would have, and the
125
+ // next call tries it again.
113
126
  #setupEnded(failure) {
114
127
  this.#setup = failure === undefined ? 'done' : 'none';
115
128
  for (const lane of this.#readers) {
116
- if (failure !== undefined)
129
+ if (failure !== undefined) {
117
130
  for (const waiting of lane.queue.splice(0))
118
131
  finish(waiting, () => waiting.fail(failure));
132
+ }
119
133
  this.#pump(lane);
120
134
  }
121
135
  }
@@ -148,7 +162,9 @@ class WorkerPool {
148
162
  }
149
163
  if (lane.running !== pending || lane.worker === undefined)
150
164
  return;
151
- log.warn(`the store's ${lane.mode} worker ran '${pending.job.op}' past its request's deadline`, { requestId: pending.job.requestId });
165
+ log.warn(`the store's ${lane.mode} worker ran '${pending.job.op}' past its request's deadline`, {
166
+ requestId: pending.job.requestId,
167
+ });
152
168
  if (lane.mode === 'read')
153
169
  this.#stopReader(lane, lane.worker, pending);
154
170
  else
@@ -160,13 +176,15 @@ class WorkerPool {
160
176
  lane.stopping = worker;
161
177
  terminateLogged(worker);
162
178
  }
163
- // Before its commit flag a stopped write is a known rollback; after it the thread is left to finish, since stopping it could not undo the write.
179
+ // Before its commit flag a stopped write is a known rollback; after it the thread is left to finish, since stopping
180
+ // it could not undo the write.
164
181
  #stopWriter(lane, worker, pending) {
165
182
  if (!mayHaveCommitted(lane, pending)) {
166
183
  lane.stopping = worker;
167
184
  this.terminateWriter();
168
185
  }
169
- // A statement in flight runs to its end even after the stop, so the caller waits for the thread's own word only this long.
186
+ // A statement in flight runs to its end even after the stop, so the caller waits for the thread's own word only
187
+ // this long.
170
188
  pending.timer = setTimeout(() => finish(pending, () => pending.fail(new DeadlineExceededError(WRITE_UNKNOWN))), this.#writeGraceMs);
171
189
  pending.timer.unref();
172
190
  }
@@ -187,8 +205,9 @@ class WorkerPool {
187
205
  async close() {
188
206
  this.#closed = true;
189
207
  for (const lane of [this.#writer, ...this.#readers]) {
190
- for (const pending of lane.queue.splice(0))
208
+ for (const pending of lane.queue.splice(0)) {
191
209
  finish(pending, () => pending.fail(new StoreBusyError(EXECUTOR_CLOSED)));
210
+ }
192
211
  // An idle thread is unreferenced, and the process must not end before the thread has closed its connection.
193
212
  lane.worker?.ref();
194
213
  // Read after the reply of a job still running; the thread then closes its connection and ends.
@@ -209,7 +228,14 @@ class WorkerPool {
209
228
  // Setup comes first: a reader sent a job before it would open a store whose setup it cannot write.
210
229
  if (lane.mode === 'read' && this.#setup !== 'done')
211
230
  return;
212
- const next = lane.queue.shift();
231
+ let next = lane.queue.shift();
232
+ // Its request was abandoned while it waited, so no one is left to read what it would do.
233
+ while (next?.signal?.aborted) {
234
+ workerCounts.jobsExpired += 1;
235
+ const dropped = next;
236
+ finish(dropped, () => dropped.fail(new StoreBusyError(EXPIRED_WAITING)));
237
+ next = lane.queue.shift();
238
+ }
213
239
  if (next === undefined)
214
240
  return;
215
241
  // Started by the first call and never at boot, so a server that only answers /health opens no thread.
@@ -219,7 +245,10 @@ class WorkerPool {
219
245
  // An idle thread never keeps the process alive; one with a call in flight does.
220
246
  lane.worker.ref();
221
247
  try {
222
- lane.worker.postMessage({ ...next.job, walPages: autoCheckpointPages(getHippoDbPath(this.#hippoRoot)) });
248
+ lane.worker.postMessage({
249
+ ...next.job,
250
+ walPages: autoCheckpointPages(getHippoDbPath(this.#hippoRoot)),
251
+ });
223
252
  }
224
253
  catch (err) {
225
254
  // Arguments that cannot be copied to the thread fail this call alone.
@@ -233,11 +262,18 @@ class WorkerPool {
233
262
  worker.unref();
234
263
  }
235
264
  #start(lane) {
236
- // A fresh flag per thread: a job id left by the thread before it could match no later job, but a shared buffer would outlive its writer.
265
+ // A fresh flag per thread: a job id left by the thread before it could match no later job, but a shared buffer
266
+ // would outlive its writer.
237
267
  const shared = lane.mode === 'write' ? new SharedArrayBuffer(4) : undefined;
238
268
  lane.commitFlag = shared && new Int32Array(shared);
239
- const init = { hippoRoot: this.#hippoRoot, mode: lane.mode, busyWaitMs: this.#busyWaitMs, ...(shared && { commitFlag: shared }) };
240
- // An explicit execArgv keeps the parent's loaders out of the thread and silences its repeat of the node:sqlite warning.
269
+ const init = {
270
+ hippoRoot: this.#hippoRoot,
271
+ mode: lane.mode,
272
+ busyWaitMs: this.#busyWaitMs,
273
+ ...(shared && { commitFlag: shared }),
274
+ };
275
+ // An explicit execArgv keeps the parent's loaders out of the thread and silences its repeat of the node:sqlite
276
+ // warning.
241
277
  const worker = new Worker(WORKER_ENTRY, { env: SHARE_ENV, execArgv: ['--no-warnings'], workerData: init });
242
278
  worker.unref();
243
279
  worker.on('message', (reply) => this.#settle(lane, worker, reply));
@@ -265,7 +301,8 @@ class WorkerPool {
265
301
  this.#idle(lane, worker);
266
302
  this.#pump(lane);
267
303
  }
268
- // The lane keeps a stopped thread until it has exited, so a new thread never starts while the old one may still hold the write lock.
304
+ // The lane keeps a stopped thread until it has exited, so a new thread never starts while the old one may still hold
305
+ // the write lock.
269
306
  #retire(lane, worker, cause) {
270
307
  if (lane.worker !== worker)
271
308
  return;
@@ -278,7 +315,8 @@ class WorkerPool {
278
315
  const lost = lane.running === undefined ? lane.queue.splice(0) : [lane.running, ...lane.queue.splice(0)];
279
316
  lane.running = undefined;
280
317
  if (lost.length > 0 || cause !== undefined) {
281
- log.warn(`the store's ${lane.mode} worker stopped with ${lost.length} call(s) unanswered${cause === undefined ? '' : `: ${cause.message}`}`);
318
+ log.warn(`the store's ${lane.mode} worker stopped with ${lost.length} call(s) ` +
319
+ `unanswered${cause === undefined ? '' : `: ${cause.message}`}`);
282
320
  }
283
321
  // The server answers this class as its retryable 503.
284
322
  for (const pending of lost)
@@ -0,0 +1,5 @@
1
+ import { MemoryEntry } from '../../core/memory.js';
2
+ import type { PromoteOptions } from '../port/promotion.js';
3
+ /** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
4
+ export declare function copyToGlobal(localRoot: string, id: string, opts?: PromoteOptions): MemoryEntry;
5
+ //# sourceMappingURL=global-promote.d.ts.map
@@ -0,0 +1,48 @@
1
+ // Copies a local memory into the global store; the caller embeds the copy.
2
+ import { BadRequestError, NotFoundError } from '../../core/api-errors.js';
3
+ import { generateId } from '../../core/memory.js';
4
+ import { isPersonalScope } from '../../core/recall-scope.js';
5
+ import { fallbackOrigin, resolveGlobalRootDir } from '../../core/project-identity.js';
6
+ import { isSharedStore } from '../../core/config.js';
7
+ import { detectSecret } from '../../util/secret-detect.js';
8
+ import { initStore } from '../open.js';
9
+ import { writePromotedEntry } from '../entry-writes.js';
10
+ import { readEntry } from '../entry-reads.js';
11
+ import { isQuarantineScope } from '../quarantine.js';
12
+ function assertPromotable(id, entry) {
13
+ // Same quarantine veto as shareMemory; a promoted copy would have no quarantine record to review.
14
+ if (isQuarantineScope(entry.scope)) {
15
+ throw new BadRequestError(`Refusing to promote ${id}: it is quarantined pending review. Approve it first via 'hippo quarantine approve ` +
16
+ `${id}'.`);
17
+ }
18
+ if (isPersonalScope(entry.scope ?? null)) {
19
+ throw new BadRequestError(`Refusing to promote ${id}: it is a personal memory and stays with its owner on this server.`);
20
+ }
21
+ // Secret producer veto: promote is a producer path to the global store
22
+ // exactly like shareMemory - same hard rule.
23
+ const promoteSecret = detectSecret(entry);
24
+ if (promoteSecret.flagged) {
25
+ throw new BadRequestError(`Refusing to promote ${id} to the global store: content matches secret material (${promoteSecret.reason}). ` +
26
+ `Secrets stay in their owning project's store.`);
27
+ }
28
+ }
29
+ /** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
30
+ export function copyToGlobal(localRoot, id, opts) {
31
+ const entry = readEntry(localRoot, id, opts?.tenantId);
32
+ if (!entry)
33
+ throw new NotFoundError(`Memory not found: ${id}`);
34
+ assertPromotable(id, entry);
35
+ const globalRoot = resolveGlobalRootDir();
36
+ initStore(globalRoot);
37
+ // A project store's NULL row gets its folder back; a shared store's folder is no caller's project, so NULL stays and
38
+ // the label names no path.
39
+ const globalEntry = {
40
+ ...entry,
41
+ id: generateId('g'),
42
+ source: isSharedStore(localRoot) ? `shared::${new Date().toISOString()}` : `promoted:${localRoot}`,
43
+ origin_project: entry.origin_project ?? fallbackOrigin(localRoot),
44
+ };
45
+ writePromotedEntry(globalRoot, globalEntry, { actor: opts?.actor, sourceId: id, auditAs: opts?.auditAs });
46
+ return globalEntry;
47
+ }
48
+ //# sourceMappingURL=global-promote.js.map
@@ -0,0 +1,6 @@
1
+ import type { Goals } from '../port-groups.js';
2
+ import type { Sync } from '../port.js';
3
+ export declare function sqliteGoals(hippoRoot: string): Sync<Goals>;
4
+ /** The group as a served store answers it: a throw rejects as another store's would. */
5
+ export declare function servedGoals(sync: Sync<Goals>): Goals;
6
+ //# sourceMappingURL=goals-group.d.ts.map
@@ -0,0 +1,23 @@
1
+ // hippo.db's Goals group: the goal stack's writes and the every-status listing.
2
+ import { completeGoal, getSessionGoals, pushGoal, resumeGoal, suspendGoal } from '../goals.js';
3
+ export function sqliteGoals(hippoRoot) {
4
+ return {
5
+ push: (tenantId, goal) => pushGoal(hippoRoot, { ...goal, tenantId }),
6
+ sessionGoals: (tenantId, sessionId) => getSessionGoals(hippoRoot, { sessionId, tenantId }),
7
+ // Goal ids are not tenant-scoped in hippo.db, so these ignore the tenant; the api checks the host admin.
8
+ complete: (_tenantId, goalId, opts) => completeGoal(hippoRoot, goalId, opts),
9
+ suspend: (_tenantId, goalId) => suspendGoal(hippoRoot, goalId),
10
+ resume: (_tenantId, goalId) => resumeGoal(hippoRoot, goalId),
11
+ };
12
+ }
13
+ /** The group as a served store answers it: a throw rejects as another store's would. */
14
+ export function servedGoals(sync) {
15
+ return {
16
+ push: async (tenantId, goal) => sync.push(tenantId, goal),
17
+ sessionGoals: async (tenantId, sessionId) => sync.sessionGoals(tenantId, sessionId),
18
+ complete: async (tenantId, goalId, opts) => sync.complete(tenantId, goalId, opts),
19
+ suspend: async (tenantId, goalId) => sync.suspend(tenantId, goalId),
20
+ resume: async (tenantId, goalId) => sync.resume(tenantId, goalId),
21
+ };
22
+ }
23
+ //# sourceMappingURL=goals-group.js.map
@@ -1,5 +1,6 @@
1
1
  import type { GraphReads, Sync } from '../port.js';
2
2
  export declare function sqliteGraphReads(hippoRoot: string): Sync<GraphReads>;
3
- /** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
3
+ /** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
4
+ * another store's would. */
4
5
  export declare function servedGraphReads(sync: Sync<GraphReads>): GraphReads;
5
6
  //# sourceMappingURL=graph-reads-group.d.ts.map
@@ -11,7 +11,8 @@ export function sqliteGraphReads(hippoRoot) {
11
11
  })),
12
12
  };
13
13
  }
14
- /** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
14
+ /** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
15
+ * another store's would. */
15
16
  export function servedGraphReads(sync) {
16
17
  return { graphRows: async (tenantId, query) => sync.graphRows(tenantId, query) };
17
18
  }
@@ -1,11 +1,17 @@
1
+ import { type HippoStore } from '../port.js';
1
2
  /** What the server calls around its responses to keep its store connection. */
2
3
  export interface StoreHolder {
3
4
  hold: () => void;
4
5
  afterResponse: () => void;
5
6
  release: () => Promise<void>;
6
- /** Runs one request, inside the fence that keeps hippo.db shut when the store is not it. */
7
+ /** Runs one request in the server's scope, inside the fence that keeps hippo.db shut when the store is not it. */
7
8
  runRequest: (run: () => Promise<void>) => Promise<void>;
8
9
  }
9
10
  /** Holds a connection to the hippo.db under `hippoRoot` once it exists, so serving never creates one. */
10
11
  export declare function holdSqliteConnection(hippoRoot: string): StoreHolder;
12
+ /** The holder for the store a server serves: hippo.db's held connection, else a fence that keeps hippo.db shut. */
13
+ export declare function createStoreHolder(hippoRoot: string, store: HippoStore): StoreHolder;
14
+ /** Runs a route's store work off the event loop when the store has a worker, else in place. */
15
+ export declare function offLoopFor(store: HippoStore): <T>(run: () => T) => T;
16
+ export declare function outsideRouteBlock<A extends readonly unknown[], R>(resolver: ((...args: A) => R) | undefined): ((...args: A) => R) | undefined;
11
17
  //# sourceMappingURL=held-connection.d.ts.map
@@ -1,8 +1,11 @@
1
1
  // A served hippo.db keeps one connection open for the life of the server, beside the worker that checkpoints its WAL.
2
2
  import { existsSync } from 'node:fs';
3
- import { closeHippoDb, getHippoDbPath, openHippoDb, outsideRequestStores, outsideSqliteOffLoop, SERVER_DB_WAIT_MS, } from '../../db/index.js';
3
+ import { closeHippoDb, getHippoDbPath, openHippoDb, outsideRequestStores, outsideSqliteOffLoop, SERVER_DB_WAIT_MS, withSqliteBlocked, withSqliteOffLoop, } from '../../db/index.js';
4
+ import { hasGroup } from '../port.js';
5
+ import { runSqliteRequest } from './request-scope.js';
6
+ import { runsOffLoop } from './worker-store.js';
4
7
  import { startWalCheckpointer } from '../../db/wal-checkpointer.js';
5
- import { errorMessage, log } from '../../util/log.js';
8
+ import { errorMessage, log, errorFields } from '../../util/log.js';
6
9
  /** Holds a connection to the hippo.db under `hippoRoot` once it exists, so serving never creates one. */
7
10
  export function holdSqliteConnection(hippoRoot) {
8
11
  // Handlers open and close their own connections; while this one is held, none of those closes is SQLite's last,
@@ -14,14 +17,15 @@ export function holdSqliteConnection(hippoRoot) {
14
17
  if (heldDb || stopHolding || !existsSync(getHippoDbPath(hippoRoot)))
15
18
  return;
16
19
  try {
17
- // The 'finish' listener can fire inside a request scope (closing this connection with the request) and inside a `loop: 'off'` block (refusing the open).
18
- // The server's lock wait: this open runs on the event loop, where SQLite's 5 s default and the 30 s journal-mode retry would stall every request.
20
+ // The 'finish' listener can fire inside a request scope (closing this connection with the request) and inside a
21
+ // `loop: 'off'` block (refusing the open). The server's lock wait: this open runs on the event loop, where
22
+ // SQLite's 5 s default and the 30 s journal-mode retry would stall every request.
19
23
  heldDb = outsideSqliteOffLoop(() => outsideRequestStores(() => openHippoDb(hippoRoot, { busyWaitMs: SERVER_DB_WAIT_MS })));
20
24
  checkpointer = startWalCheckpointer(getHippoDbPath(hippoRoot));
21
25
  }
22
26
  catch (err) {
23
27
  stopHolding = true;
24
- log.warn(`serve: could not hold a store connection; requests still work, only slower: ${errorMessage(err)}`);
28
+ log.warn(`serve: could not hold a store connection; requests still work, only slower: ${errorMessage(err)}`, errorFields(err));
25
29
  }
26
30
  };
27
31
  const afterResponse = () => {
@@ -30,12 +34,35 @@ export function holdSqliteConnection(hippoRoot) {
30
34
  };
31
35
  const release = async () => {
32
36
  stopHolding = true;
33
- // The worker's connection closes first, so the held one is SQLite's last and its close checkpoints and deletes the WAL.
37
+ // The worker's connection closes first, so the held one is SQLite's last and its close checkpoints and deletes the
38
+ // WAL.
34
39
  await checkpointer?.stop();
35
40
  if (heldDb)
36
41
  closeHippoDb(heldDb);
37
42
  heldDb = undefined;
38
43
  };
39
- return { hold, afterResponse, release, runRequest: (run) => run() };
44
+ return { hold, afterResponse, release, runRequest: (run) => runSqliteRequest(run, 'server') };
45
+ }
46
+ /** The holder for the store a server serves: hippo.db's held connection, else a fence that keeps hippo.db shut. */
47
+ export function createStoreHolder(hippoRoot, store) {
48
+ if (hasGroup(store, 'localFiles'))
49
+ return holdSqliteConnection(hippoRoot);
50
+ log.info(`serve: the '${store.kind}' store serves ${hippoRoot}, so no hippo.db connection is held`);
51
+ // A missed port under another store would otherwise create and write a hippo.db that store never reads.
52
+ return {
53
+ hold: () => { },
54
+ afterResponse: () => { },
55
+ release: async () => { },
56
+ runRequest: (run) => runSqliteRequest(() => withSqliteBlocked(store.kind, run), 'server'),
57
+ };
58
+ }
59
+ /** Runs a route's store work off the event loop when the store has a worker, else in place. */
60
+ export function offLoopFor(store) {
61
+ return runsOffLoop(store) ? withSqliteOffLoop : (run) => run();
62
+ }
63
+ // A plugin's resolver may read hippo.db through this package's synchronous functions, so it runs outside the block of a
64
+ // `loop: 'off'` route.
65
+ export function outsideRouteBlock(resolver) {
66
+ return resolver && ((...args) => outsideSqliteOffLoop(() => resolver(...args)));
40
67
  }
41
68
  //# sourceMappingURL=held-connection.js.map
@@ -1,5 +1,6 @@
1
1
  import type { LastRecall, RecallWrites, Sync } from '../port.js';
2
- /** What a finished recall wrote after its audit rows: the trace's id, null when none was asked or its write failed, and the ids strengthened. */
2
+ /** What a finished recall wrote after its audit rows: the trace's id, null when none was asked or its write failed, and
3
+ * the ids strengthened. */
3
4
  interface RecallFinish {
4
5
  readonly traceId: number | null;
5
6
  readonly strengthened: ReadonlySet<string>;
@@ -7,7 +8,8 @@ interface RecallFinish {
7
8
  /** sqliteStore's finishRecall, for the synchronous recall that cannot await the port. */
8
9
  export declare function finishRecallAt(hippoRoot: string, writes: RecallWrites): RecallFinish;
9
10
  export declare function sqliteLastRecall(hippoRoot: string): Sync<LastRecall>;
10
- /** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
11
+ /** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
12
+ * another store's would. */
11
13
  export declare function servedLastRecall(sync: Sync<LastRecall>): LastRecall;
12
14
  export {};
13
15
  //# sourceMappingURL=last-recall-group.d.ts.map
@@ -1,4 +1,5 @@
1
- // hippo.db's LastRecall group: the last recall sits in its meta table, and a traced outcome links on the outcome's own handle.
1
+ // hippo.db's LastRecall group: the last recall sits in its meta table, and a traced outcome links on the outcome's own
2
+ // handle.
2
3
  import { withWriteScope } from '../../db/index.js';
3
4
  import { appendAuditEvent } from '../audit.js';
4
5
  import { strengthenRetrieved, strengthenRetrievedInOwnTx } from '../entry-writes.js';
@@ -12,12 +13,15 @@ export function finishRecallAt(hippoRoot, writes) {
12
13
  return onHandle(hippoRoot, (db) => {
13
14
  const traceAndStrengthen = () => ({
14
15
  traceId: writes.trace ? writeRecallTrace(db, writes.trace) : null,
15
- strengthened: writes.strengthen ? strengthenRetrievedInOwnTx(db, writes.strengthen.ids, writes.strengthen.opts) : new Set(),
16
+ strengthened: writes.strengthen
17
+ ? strengthenRetrievedInOwnTx(db, writes.strengthen.ids, writes.strengthen.opts)
18
+ : new Set(),
16
19
  });
17
20
  // Alone, the fail-soft trace and strengthen keep their own scopes so a busy lock loses them, never the read.
18
21
  if (writes.goalLog.length === 0 && writes.audit.length === 0)
19
22
  return traceAndStrengthen();
20
- // Inside this scope both run as savepoints, so one recall commits once and a failed trace or strengthen still unwinds alone.
23
+ // Inside this scope both run as savepoints, so one recall commits once and a failed trace or strengthen still
24
+ // unwinds alone.
21
25
  return withWriteScope(db, 'finish_recall', () => {
22
26
  writeGoalRecallLog(db, localGoalRecallRows(db, writes.goalLog));
23
27
  for (const event of writes.audit)
@@ -46,7 +50,8 @@ export function sqliteLastRecall(hippoRoot) {
46
50
  },
47
51
  };
48
52
  }
49
- /** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as another store's would. */
53
+ /** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
54
+ * another store's would. */
50
55
  export function servedLastRecall(sync) {
51
56
  return {
52
57
  applyTracedOutcome: async (outcome, traceId) => sync.applyTracedOutcome(outcome, traceId),
@@ -0,0 +1,4 @@
1
+ import type { Learning } from '../port/learning.js';
2
+ /** The learn passes' store work on the hippo.db under `hippoRoot`, each call on its own short-lived handle. */
3
+ export declare function sqliteLearning(hippoRoot: string): Learning;
4
+ //# sourceMappingURL=learning-group.d.ts.map
@@ -0,0 +1,17 @@
1
+ import { confirmedOutcomeTimes } from '../audit.js';
2
+ import { loadAllEntries, loadCurrentEntriesFromOrigins, loadEntriesMentioning, readEntry } from '../entry-reads.js';
3
+ import { addTagToEntries, writeEntriesTogether, writeEntry } from '../entry-writes.js';
4
+ /** The learn passes' store work on the hippo.db under `hippoRoot`, each call on its own short-lived handle. */
5
+ export function sqliteLearning(hippoRoot) {
6
+ return {
7
+ allEntries: (tenantId) => loadAllEntries(hippoRoot, tenantId),
8
+ entriesMentioning: (tokens, tag, tenantId) => loadEntriesMentioning(hippoRoot, tokens, tag, tenantId),
9
+ readEntry: (id, tenantId) => readEntry(hippoRoot, id, tenantId),
10
+ currentEntriesFromOrigins: (tenantId, origins) => loadCurrentEntriesFromOrigins(hippoRoot, tenantId, origins),
11
+ writeEntry: (entry) => writeEntry(hippoRoot, entry),
12
+ writeEntriesTogether: (entries) => writeEntriesTogether(hippoRoot, entries),
13
+ addTagToEntries: (tenantId, ids, tag) => addTagToEntries(hippoRoot, tenantId, ids, tag),
14
+ confirmedOutcomeTimes: (tenantId) => confirmedOutcomeTimes(hippoRoot, tenantId),
15
+ };
16
+ }
17
+ //# sourceMappingURL=learning-group.js.map
@@ -1,4 +1,5 @@
1
- // hippo.db's half of the AuditMaintenance and LessonWrites store groups: the quality audit, audit prune and git learn's batch.
1
+ // hippo.db's half of the AuditMaintenance and LessonWrites store groups: the quality audit, audit prune and git learn's
2
+ // batch.
2
3
  import { pruneAuditRows } from '../audit.js';
3
4
  import { loadTextsHoldingWords } from '../candidates.js';
4
5
  import { deleteEntriesAutomatically, memoriesBackingObjects } from '../delete-and-batch.js';
@@ -78,7 +78,8 @@ interface RowSpec<K extends ObjectKind> {
78
78
  readonly closeOp: AuditOp;
79
79
  /** The one column a list may filter by equality. */
80
80
  readonly filterColumn?: string;
81
- /** Set for the kinds the graph extracts, so a save marks the graph stale and a close drops the object's graph rows. */
81
+ /** Set for the kinds the graph extracts, so a save marks the graph stale and a close drops the object's graph
82
+ * rows. */
82
83
  readonly graphType?: SourceObjectType;
83
84
  }
84
85
  /** What one column of a new row can hold. */
@@ -86,12 +87,14 @@ export type ColumnValue = string | number | null;
86
87
  interface InsertSpec<K extends SavableKind> {
87
88
  readonly createOp: AuditOp;
88
89
  readonly supersedeOp: AuditOp;
89
- /** A versioned table has `version` and `change_summary`: a successor takes its predecessor's version plus one and the caller's change note. */
90
+ /** A versioned table has `version` and `change_summary`: a successor takes its predecessor's version plus one and the
91
+ * caller's change note. */
90
92
  readonly versioned: boolean;
91
93
  /** The kind's own columns, in the order `values` fills them. */
92
94
  readonly columns: readonly string[];
93
95
  readonly values: (w: ObjectFields[K]) => readonly ColumnValue[];
94
- /** The create audit's keys after the id, in the order they are stored: ids, counts and flags, never the object's text. */
96
+ /** The create audit's keys after the id, in the order they are stored: ids, counts and flags, never the object's
97
+ * text. */
95
98
  readonly createMeta: (w: ObjectFields[K], version: number) => JsonObject;
96
99
  /** Keys the supersede audit stores after its own. */
97
100
  readonly supersedeMeta?: (w: ObjectFields[K]) => JsonObject;
@@ -69,11 +69,40 @@ function parseSteps(raw, id) {
69
69
  return [];
70
70
  }
71
71
  }
72
- const rowToProcess = (row) => ({ ...head(row), processName: row.process_name, description: row.description, steps: parseSteps(row.steps, row.id), ...versionedTail(row) });
73
- const rowToPolicy = (row) => ({ ...head(row), policyName: row.policy_name, policyText: row.policy_text, validFrom: row.valid_from, validTo: row.valid_to, ...versionedTail(row) });
74
- const rowToSkill = (row) => ({ ...head(row), skillName: row.skill_name, instructions: row.instructions, trigger: row.trigger_text, ...versionedTail(row) });
75
- const rowToProjectBrief = (row) => ({ ...head(row), repo: row.repo, summary: row.summary, ...versionedTail(row) });
76
- const rowToCustomerNote = (row) => ({ ...head(row), customer: row.customer, note: row.note, ...versionedTail(row) });
72
+ const rowToProcess = (row) => ({
73
+ ...head(row),
74
+ processName: row.process_name,
75
+ description: row.description,
76
+ steps: parseSteps(row.steps, row.id),
77
+ ...versionedTail(row),
78
+ });
79
+ const rowToPolicy = (row) => ({
80
+ ...head(row),
81
+ policyName: row.policy_name,
82
+ policyText: row.policy_text,
83
+ validFrom: row.valid_from,
84
+ validTo: row.valid_to,
85
+ ...versionedTail(row),
86
+ });
87
+ const rowToSkill = (row) => ({
88
+ ...head(row),
89
+ skillName: row.skill_name,
90
+ instructions: row.instructions,
91
+ trigger: row.trigger_text,
92
+ ...versionedTail(row),
93
+ });
94
+ const rowToProjectBrief = (row) => ({
95
+ ...head(row),
96
+ repo: row.repo,
97
+ summary: row.summary,
98
+ ...versionedTail(row),
99
+ });
100
+ const rowToCustomerNote = (row) => ({
101
+ ...head(row),
102
+ customer: row.customer,
103
+ note: row.note,
104
+ ...versionedTail(row),
105
+ });
77
106
  /** Tells an auto-refresh from a manual write in the audit log without a fourth audit op. */
78
107
  function refreshMeta(w) {
79
108
  return w.receiptCount === undefined ? { refreshed: false } : { refreshed: true, receipt_count: w.receiptCount };