hippo-memory 1.69.0 → 1.71.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 (1014) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,36 +1,35 @@
1
+ import { DEFAULT_TENANT_ID } from '../util/env.js';
1
2
  import * as fs from 'fs';
2
3
  import * as path from 'path';
3
- import { Layer } from '../memory.js';
4
- import { dumpFrontmatter } from '../yaml.js';
5
- import { getMeta } from '../db.js';
6
- import { log } from '../log.js';
4
+ import { Layer } from '../core/memory.js';
5
+ import { dumpFrontmatter } from './yaml.js';
6
+ import { getMeta } from '../db/index.js';
7
+ import { oncePerStore } from '../db/connect.js';
8
+ import { errorFields, errorMessage, log } from '../util/log.js';
7
9
  import { parseJsonArray, INDEX_VERSION, parseLastTraceId, MEMORY_SELECT_COLUMNS, rowToEntry, rowToMemoryConflict, } from './rows.js';
8
10
  import { serializeEntry } from './markdown.js';
11
+ const SCORE_DECIMALS = 3;
9
12
  export function layerDir(root, layer) {
10
13
  return path.join(root, layer);
11
14
  }
15
+ // Owner-only wherever a mirror folder is made, at open or by a writer that finds it gone.
16
+ const MIRROR_FOLDER = { recursive: true, mode: 0o700 };
17
+ /** Makes the mirror folders on a store's first open in this process; a writer makes its own folder if one goes missing later. */
12
18
  export function ensureMirrorDirectories(hippoRoot) {
13
- const dirs = [
14
- hippoRoot,
15
- path.join(hippoRoot, 'buffer'),
16
- path.join(hippoRoot, 'episodic'),
17
- path.join(hippoRoot, 'semantic'),
18
- path.join(hippoRoot, 'conflicts'),
19
- ];
20
- for (const dir of dirs) {
21
- fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
22
- }
19
+ oncePerStore(hippoRoot, 'mirror-folders', () => {
20
+ for (const sub of ['buffer', 'episodic', 'semantic', 'conflicts']) {
21
+ fs.mkdirSync(path.join(hippoRoot, sub), MIRROR_FOLDER);
22
+ }
23
+ });
23
24
  }
24
- // Tenant-scoped mirror file paths. The single-tenant 'default' deployment
25
- // keeps the original `active-task.md` / `recent-session.md` filenames for
26
- // on-disk back-compat; multi-tenant deployments get a `.<tenantId>` suffix
27
- // so tenant B saving cannot overwrite tenant A's mirror file.
25
+ // Tenant-scoped mirror paths: the 'default' tenant keeps the original `active-task.md` / `recent-session.md` names;
26
+ // other tenants get a `.<tenantId>` suffix so one cannot overwrite another's mirror.
28
27
  function activeTaskMirrorPath(hippoRoot, tenantId) {
29
- const file = tenantId === 'default' ? 'active-task.md' : `active-task.${tenantId}.md`;
28
+ const file = tenantId === DEFAULT_TENANT_ID ? 'active-task.md' : `active-task.${tenantId}.md`;
30
29
  return path.join(hippoRoot, 'buffer', file);
31
30
  }
32
31
  function recentSessionMirrorPath(hippoRoot, tenantId) {
33
- const file = tenantId === 'default' ? 'recent-session.md' : `recent-session.${tenantId}.md`;
32
+ const file = tenantId === DEFAULT_TENANT_ID ? 'recent-session.md' : `recent-session.${tenantId}.md`;
34
33
  return path.join(hippoRoot, 'buffer', file);
35
34
  }
36
35
  export function writeActiveTaskMirror(hippoRoot, tenantId, snapshot) {
@@ -61,7 +60,7 @@ export function writeActiveTaskMirror(hippoRoot, tenantId, snapshot) {
61
60
  if (snapshot.session_id) {
62
61
  body.push(`## Session`, snapshot.session_id, '');
63
62
  }
64
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
63
+ fs.mkdirSync(path.dirname(filePath), MIRROR_FOLDER);
65
64
  fs.writeFileSync(filePath, `${fm}\n\n${body.join('\n')}`, 'utf8');
66
65
  }
67
66
  export function removeActiveTaskMirror(hippoRoot, tenantId) {
@@ -99,12 +98,12 @@ export function writeRecentSessionMirror(hippoRoot, tenantId, events) {
99
98
  lines.push(`- [${event.created_at}] (${event.event_type}) ${event.content}`);
100
99
  }
101
100
  lines.push('');
102
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
101
+ fs.mkdirSync(path.dirname(filePath), MIRROR_FOLDER);
103
102
  fs.writeFileSync(filePath, `${fm}\n\n${lines.join('\n')}`, 'utf8');
104
103
  }
105
104
  function writeConflictMirrors(hippoRoot, conflicts) {
106
105
  const conflictDir = path.join(hippoRoot, 'conflicts');
107
- fs.mkdirSync(conflictDir, { recursive: true });
106
+ fs.mkdirSync(conflictDir, MIRROR_FOLDER);
108
107
  const keep = new Set();
109
108
  for (const conflict of conflicts) {
110
109
  const filename = `conflict_${conflict.id}.md`;
@@ -125,7 +124,7 @@ function writeConflictMirrors(hippoRoot, conflicts) {
125
124
  `- Memory A: ${conflict.memory_a_id}`,
126
125
  `- Memory B: ${conflict.memory_b_id}`,
127
126
  `- Reason: ${conflict.reason}`,
128
- `- Score: ${conflict.score.toFixed(3)}`,
127
+ `- Score: ${conflict.score.toFixed(SCORE_DECIMALS)}`,
129
128
  `- Status: ${conflict.status}`,
130
129
  '',
131
130
  ].join('\n');
@@ -142,7 +141,7 @@ function writeConflictMirrors(hippoRoot, conflicts) {
142
141
  export function writeMarkdownMirror(hippoRoot, entry) {
143
142
  removeEntryMirrors(hippoRoot, entry.id);
144
143
  const dir = layerDir(hippoRoot, entry.layer);
145
- fs.mkdirSync(dir, { recursive: true });
144
+ fs.mkdirSync(dir, MIRROR_FOLDER);
146
145
  fs.writeFileSync(path.join(dir, `${entry.id}.md`), serializeEntry(entry), 'utf8');
147
146
  }
148
147
  // Every layer, Trace included: `writeMarkdownMirror` writes any layer, and a stale trace mirror
@@ -155,22 +154,15 @@ export function removeEntryMirrors(hippoRoot, id) {
155
154
  }
156
155
  }
157
156
  }
158
- /**
159
- * Mirror paths for `id` still on disk, walked like `removeEntryMirrors`, so a failed purge
160
- * with no reaper to retry it can name the stuck file.
161
- */
162
- export function getExistingEntryMirrorPaths(hippoRoot, id) {
157
+ /** Mirror paths for `id` still on disk, walked like `removeEntryMirrors`, so a failed purge with no reaper to retry it can name the stuck file. */
158
+ function getExistingEntryMirrorPaths(hippoRoot, id) {
163
159
  // Layer list kept in lockstep with removeEntryMirrors.
164
160
  return [Layer.Buffer, Layer.Episodic, Layer.Semantic, Layer.Trace]
165
161
  .map((layer) => path.join(layerDir(hippoRoot, layer), `${id}.md`))
166
162
  .filter((file) => fs.existsSync(file));
167
163
  }
168
- /**
169
- * Best-effort mirror purge. Retries the unlink once (most failures are transient locks); the reaper only
170
- * scans `raw_archive`, so a non-raw id's second failure logs the leftover path(s) to delete by hand.
171
- *
172
- * Returns true if the mirror ended up purged (first or second attempt).
173
- */
164
+ /** Best-effort mirror purge: retries the unlink once (most failures are transient locks); the reaper only scans `raw_archive`,
165
+ * so a non-raw id's second failure logs the leftover path(s) to delete by hand. Returns true if the mirror ended up purged. */
174
166
  export function purgeMirrorBestEffort(hippoRoot, id, isRaw, logPrefix) {
175
167
  try {
176
168
  removeEntryMirrors(hippoRoot, id);
@@ -182,15 +174,15 @@ export function purgeMirrorBestEffort(hippoRoot, id, isRaw, logPrefix) {
182
174
  return true;
183
175
  }
184
176
  catch (secondErr) {
185
- const msg = secondErr instanceof Error ? secondErr.message : String(secondErr);
177
+ const msg = errorMessage(secondErr);
186
178
  if (isRaw) {
187
- log.error(`${logPrefix}: mirror cleanup failed for ${id} (will retry via reaper on next open): ${msg}`);
179
+ log.error(`${logPrefix}: mirror cleanup failed for ${id} (will retry via reaper on next open): ${msg}`, errorFields(secondErr));
188
180
  }
189
181
  else {
190
182
  const leftover = getExistingEntryMirrorPaths(hippoRoot, id);
191
183
  const pathsNote = leftover.length > 0 ? leftover.join(', ') : `${id}.md (path unresolved)`;
192
184
  log.error(`${logPrefix}: mirror cleanup failed for ${id} - no automatic retry exists for this file, ` +
193
- `delete it manually: ${pathsNote} (${msg})`);
185
+ `delete it manually: ${pathsNote} (${msg})`, errorFields(secondErr));
194
186
  }
195
187
  return false;
196
188
  }
@@ -211,21 +203,22 @@ export function buildIndexFromDb(db) {
211
203
  file: path.join(layer, `${row.id}.md`),
212
204
  layer,
213
205
  strength: Number(row.strength ?? 0),
214
- tags: parseJsonArray(row.tags_json),
206
+ tags: parseJsonArray(row.tags_json, { table: 'memories', id: row.id, column: 'tags_json' }),
215
207
  created: row.created,
216
208
  last_retrieved: row.last_retrieved,
217
209
  pinned: Boolean(row.pinned),
218
210
  };
219
211
  }
220
- // Read both lockstep keys in ONE statement: two autocommit SELECTs could straddle a concurrent
221
- // saveIndex and hand back a mismatched last_retrieval_ids / last_trace_id pair.
212
+ return { version: INDEX_VERSION, entries, ...readLastRecall(db) };
213
+ }
214
+ /** The last recall's ids and its trace, the two meta keys saveIndex writes together. */
215
+ export function readLastRecall(db) {
216
+ // Read both lockstep keys in ONE statement: two autocommit SELECTs could straddle a concurrent saveIndex and return a mismatched pair.
222
217
  // SAFETY: lockstepRows' shape matches the key/value columns named above.
223
218
  const lockstepRows = db.prepare(`SELECT key, value FROM meta WHERE key IN ('last_retrieval_ids', 'last_trace_id')`).all();
224
219
  const lockstep = new Map(lockstepRows.map((r) => [r.key, r.value]));
225
220
  return {
226
- version: INDEX_VERSION,
227
- entries,
228
- last_retrieval_ids: parseJsonArray(lockstep.get('last_retrieval_ids') ?? '[]'),
221
+ last_retrieval_ids: parseJsonArray(lockstep.get('last_retrieval_ids') ?? '[]', { table: 'meta', id: 'last_retrieval_ids', column: 'value' }),
229
222
  last_trace_id: parseLastTraceId(lockstep.get('last_trace_id') ?? ''),
230
223
  };
231
224
  }
@@ -250,7 +243,19 @@ export function writeIndexMirror(hippoRoot, index) {
250
243
  mirrorBestEffort('index.json', () => fs.writeFileSync(path.join(hippoRoot, 'index.json'), JSON.stringify(index, null, 2), 'utf8'));
251
244
  }
252
245
  export function writeStatsMirror(hippoRoot, stats) {
253
- mirrorBestEffort('stats.json', () => fs.writeFileSync(path.join(hippoRoot, 'stats.json'), JSON.stringify(stats, null, 2), 'utf8'));
246
+ mirrorBestEffort('stats.json', () => overwriteInPlace(path.join(hippoRoot, 'stats.json'), JSON.stringify(stats, null, 2)));
247
+ }
248
+ // A truncate waits for the file's last write to reach the disk, so a file rewritten on every recall keeps its blocks.
249
+ function overwriteInPlace(file, text) {
250
+ const bytes = Buffer.from(text, 'utf8');
251
+ const fd = fs.openSync(file, fs.constants.O_WRONLY | fs.constants.O_CREAT, 0o666);
252
+ try {
253
+ fs.writeSync(fd, bytes, 0, bytes.length, 0);
254
+ fs.ftruncateSync(fd, bytes.length);
255
+ }
256
+ finally {
257
+ fs.closeSync(fd);
258
+ }
254
259
  }
255
260
  /** Mirrors are derived from SQLite and written after COMMIT, so a failed write warns instead of failing a committed change. */
256
261
  export function mirrorBestEffort(what, write) {
@@ -258,7 +263,7 @@ export function mirrorBestEffort(what, write) {
258
263
  write();
259
264
  }
260
265
  catch (err) {
261
- log.warn(`${what} not refreshed (${err instanceof Error ? err.message : String(err)}); the database write succeeded`);
266
+ log.warn(`${what} not refreshed (${errorMessage(err)}); the database write succeeded`);
262
267
  }
263
268
  }
264
269
  export function syncMirrorFiles(hippoRoot, db) {
@@ -0,0 +1,189 @@
1
+ export type DecisionStatus = 'active' | 'superseded' | 'closed';
2
+ export interface Decision {
3
+ id: number;
4
+ memoryId: string | null;
5
+ tenantId: string;
6
+ decisionText: string;
7
+ context: string | null;
8
+ status: DecisionStatus;
9
+ /** Successor decision id; set only when status === 'superseded'. */
10
+ supersededBy: number | null;
11
+ supersededAt: string | null;
12
+ closedAt: string | null;
13
+ createdAt: string;
14
+ }
15
+ export type IncidentStatus = 'open' | 'resolved' | 'closed';
16
+ export interface Incident {
17
+ id: number;
18
+ memoryId: string | null;
19
+ tenantId: string;
20
+ incidentText: string;
21
+ context: string | null;
22
+ status: IncidentStatus;
23
+ /** Set only when status === 'resolved'. */
24
+ resolutionText: string | null;
25
+ resolvedAt: string | null;
26
+ closedAt: string | null;
27
+ /** Linked receipts: memory ids that are this incident's evidence. */
28
+ linkedMemoryIds: string[];
29
+ createdAt: string;
30
+ }
31
+ export type ProcessStatus = 'active' | 'superseded' | 'closed';
32
+ export interface Process {
33
+ id: number;
34
+ memoryId: string | null;
35
+ tenantId: string;
36
+ processName: string;
37
+ description: string | null;
38
+ /** Ordered step list (the process body). Stored as a JSON array of strings. */
39
+ steps: string[];
40
+ /** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
41
+ version: number;
42
+ status: ProcessStatus;
43
+ /** Successor process id; set only when status === 'superseded'. */
44
+ supersededBy: number | null;
45
+ supersededAt: string | null;
46
+ /** The per-version delta note; set on a successor row only (NULL on a v1). */
47
+ changeSummary: string | null;
48
+ closedAt: string | null;
49
+ createdAt: string;
50
+ }
51
+ export type PolicyStatus = 'active' | 'superseded' | 'closed';
52
+ export interface Policy {
53
+ id: number;
54
+ memoryId: string | null;
55
+ tenantId: string;
56
+ policyName: string;
57
+ policyText: string;
58
+ /** ISO-8601 datetime as `toISOString` gives it; when the policy takes effect. Always set. */
59
+ validFrom: string;
60
+ /** ISO-8601 datetime as `toISOString` gives it; when it expires. null = open-ended. */
61
+ validTo: string | null;
62
+ /** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
63
+ version: number;
64
+ status: PolicyStatus;
65
+ supersededBy: number | null;
66
+ supersededAt: string | null;
67
+ /** The per-version delta note; set on a successor row only (NULL on a v1). */
68
+ changeSummary: string | null;
69
+ closedAt: string | null;
70
+ createdAt: string;
71
+ }
72
+ export type SkillStatus = 'active' | 'superseded' | 'closed';
73
+ export interface Skill {
74
+ id: number;
75
+ memoryId: string | null;
76
+ tenantId: string;
77
+ skillName: string;
78
+ instructions: string;
79
+ /** Optional "when to apply"; stored in the trigger_text column. */
80
+ trigger: string | null;
81
+ /** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
82
+ version: number;
83
+ status: SkillStatus;
84
+ supersededBy: number | null;
85
+ supersededAt: string | null;
86
+ /** The per-version delta note; set on a successor row only (NULL on a v1). */
87
+ changeSummary: string | null;
88
+ closedAt: string | null;
89
+ createdAt: string;
90
+ }
91
+ export type BriefStatus = 'active' | 'superseded' | 'closed';
92
+ export interface ProjectBrief {
93
+ id: number;
94
+ memoryId: string | null;
95
+ tenantId: string;
96
+ /** The repo identifier this brief is scoped to (e.g. `hippo`). */
97
+ repo: string;
98
+ /** The brief body. */
99
+ summary: string;
100
+ /** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
101
+ version: number;
102
+ status: BriefStatus;
103
+ supersededBy: number | null;
104
+ supersededAt: string | null;
105
+ /** The per-version delta note; set on a successor row only (NULL on a v1). */
106
+ changeSummary: string | null;
107
+ closedAt: string | null;
108
+ createdAt: string;
109
+ }
110
+ export type NoteStatus = 'active' | 'superseded' | 'closed';
111
+ export interface CustomerNote {
112
+ id: number;
113
+ memoryId: string | null;
114
+ tenantId: string;
115
+ /** The account/customer entity this note is scoped to (free-form identifier). */
116
+ customer: string;
117
+ /** The note body. */
118
+ note: string;
119
+ /** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
120
+ version: number;
121
+ status: NoteStatus;
122
+ supersededBy: number | null;
123
+ supersededAt: string | null;
124
+ /** The per-version delta note; set on a successor row only (NULL on a v1). */
125
+ changeSummary: string | null;
126
+ closedAt: string | null;
127
+ createdAt: string;
128
+ }
129
+ /** Each kind is named by the `source` its mirror memory carries. */
130
+ export interface ObjectByKind {
131
+ decision: Decision;
132
+ incident: Incident;
133
+ process: Process;
134
+ policy: Policy;
135
+ skill: Skill;
136
+ project_brief: ProjectBrief;
137
+ customer_note: CustomerNote;
138
+ }
139
+ export type ObjectKind = keyof ObjectByKind;
140
+ /** What one save stores, per kind the shared save writes; core has checked and resolved every value. */
141
+ export interface ObjectFields {
142
+ decision: {
143
+ readonly decisionText: string;
144
+ readonly context: string | undefined;
145
+ };
146
+ process: {
147
+ readonly processName: string;
148
+ readonly description: string | undefined;
149
+ readonly steps: readonly string[];
150
+ };
151
+ policy: {
152
+ readonly policyName: string;
153
+ readonly policyText: string;
154
+ readonly validFrom: string;
155
+ readonly validTo: string | null;
156
+ };
157
+ skill: {
158
+ readonly name: string;
159
+ readonly instructions: string;
160
+ readonly trigger: string | null;
161
+ };
162
+ /** `receiptCount` is set only when a refresh wrote this version. */
163
+ project_brief: {
164
+ readonly repo: string;
165
+ readonly summary: string;
166
+ readonly receiptCount: number | undefined;
167
+ };
168
+ customer_note: {
169
+ readonly customer: string;
170
+ readonly note: string;
171
+ };
172
+ }
173
+ /** The kinds whose rows are active until a successor supersedes them; an incident is opened and resolved instead. */
174
+ export type SavableKind = keyof ObjectFields;
175
+ /** What opening an incident stores; core has checked the text, and the store checks each linked id. */
176
+ export interface IncidentFields {
177
+ readonly incidentText: string;
178
+ readonly context: string | undefined;
179
+ /** The memories that are the incident's evidence, in the order the caller gave them. */
180
+ readonly linkedMemoryIds: readonly string[];
181
+ }
182
+ /** One memory a brief refresh cites. */
183
+ export interface BriefReceipt {
184
+ id: string;
185
+ created: string;
186
+ source: string;
187
+ content: string;
188
+ }
189
+ //# sourceMappingURL=object-types.d.ts.map
@@ -0,0 +1,4 @@
1
+ // The typed objects as every store hands them over, and what a save carries for each kind.
2
+ // `memoryId` is null once the mirror memory is forgotten or archived; the object row outlives it.
3
+ export {};
4
+ //# sourceMappingURL=object-types.js.map
@@ -1,6 +1,6 @@
1
- import { type MemoryEntry } from '../memory.js';
2
- import { type DatabaseSyncLike } from '../db.js';
3
- import { type ResolveProjectIdentityOpts } from '../project-identity.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
+ import { type DatabaseSyncLike } from '../db/index.js';
3
+ import { type ResolveProjectIdentityOpts } from '../core/project-identity.js';
4
4
  /** Nearest ancestor store like git; the strict join is the fallback so `hippo init` still creates `<cwd>/.hippo`. */
5
5
  export declare function getHippoRoot(cwd?: string, opts?: ResolveProjectIdentityOpts): string;
6
6
  export declare function isInitialized(hippoRoot: string): boolean;
@@ -11,9 +11,11 @@ export declare function openStore(hippoRoot: string, opts?: {
11
11
  }): DatabaseSyncLike;
12
12
  /** One call on a handle of its own, closed after; pass openStore where the call also sets up mirror folders and legacy rows. */
13
13
  export declare function onHandle<T>(hippoRoot: string, fn: (db: DatabaseSyncLike) => T, open?: (hippoRoot: string) => DatabaseSyncLike): T;
14
- /** `meta` key holding the default half-life base a store's memories are on (src/half-life-migration.ts). */
14
+ /** `meta` key holding the default half-life base a store's memories are on (src/consolidate/half-life-migration.ts). */
15
15
  export declare const HALF_LIFE_BASE_META_KEY = "default_half_life_base";
16
16
  /** `meta` key set once no memory of a decision, incident or other object sits on the old flat 90 days. */
17
17
  export declare const TYPED_HALF_LIFE_META_KEY = "typed_half_life_on_default";
18
+ /** The flat half-life the decision, incident and other object writers gave their memories before they took the default. */
19
+ export declare const LEGACY_TYPED_HALF_LIFE = 90;
18
20
  export declare function loadLegacyEntriesFromMarkdown(hippoRoot: string): MemoryEntry[];
19
21
  //# sourceMappingURL=open.d.ts.map
@@ -1,16 +1,18 @@
1
1
  // Opens the SQLite store, the source of truth; Markdown and JSON files are human-readable mirrors of it.
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
- import { DEFAULT_HALF_LIFE_DAYS, Layer } from '../memory.js';
5
- import { closeHippoDb, openHippoDb, getMeta, setMeta } from '../db.js';
6
- import { findHippoStoreDir, realpathOrResolve } from '../project-identity.js';
7
- import { RejectedValueError } from '../rejection.js';
8
- import { log } from '../log.js';
9
- import { isPlainJsonObject } from './rows.js';
4
+ import { DEFAULT_HALF_LIFE_DAYS, Layer } from '../core/memory.js';
5
+ import { closeHippoDb, currentRequestStores, openHippoDb, getMeta, setMeta, withWriteScope } from '../db/index.js';
6
+ import { openHippoDbWithFacts } from '../db/open.js';
7
+ import { findHippoStoreDir } from '../core/project-identity.js';
8
+ import { realpathOrResolve } from '../util/real-path.js';
9
+ import { RejectedValueError } from './rejection.js';
10
+ import { errorMessage, log } from '../util/log.js';
10
11
  import { audit } from './audit-event.js';
11
12
  import { deserializeEntry } from './markdown.js';
12
13
  import { stampOriginProjectForImport, upsertEntryRow } from './entry-row.js';
13
14
  import { ensureMirrorDirectories, syncMirrorFiles, layerDir } from './mirrors.js';
15
+ import { isJsonObject } from '../util/json.js';
14
16
  /** Nearest ancestor store like git; the strict join is the fallback so `hippo init` still creates `<cwd>/.hippo`. */
15
17
  export function getHippoRoot(cwd = process.cwd(), opts) {
16
18
  return findHippoStoreDir(cwd, opts) ?? path.join(realpathOrResolve(cwd), '.hippo');
@@ -26,9 +28,15 @@ export function initStore(hippoRoot) {
26
28
  /** One open connection with init done on it, for callers who used to pay for `initStore` + a second `openHippoDb`. */
27
29
  export function openStore(hippoRoot, opts) {
28
30
  // Open first: a folder marked for another store must refuse before any mirror folder appears.
29
- const db = openHippoDb(hippoRoot, opts);
31
+ const { db, facts } = openHippoDbWithFacts(hippoRoot, opts);
32
+ // A store worker's reader: its writer ran the steps below before this thread was sent a job, and this connection cannot write them.
33
+ if (currentRequestStores()?.setupDoneFor === hippoRoot)
34
+ return db;
30
35
  try {
31
36
  ensureMirrorDirectories(hippoRoot);
37
+ // Both steps act only on a store with no memory row, which the open's own probe has just ruled out.
38
+ if (facts?.hasMemories)
39
+ return db;
32
40
  const bootstrapped = bootstrapLegacyStore(db, hippoRoot);
33
41
  if (bootstrapped) {
34
42
  syncMirrorFiles(hippoRoot, db);
@@ -56,16 +64,14 @@ export function onHandle(hippoRoot, fn, open = openHippoDb) {
56
64
  closeHippoDb(db);
57
65
  }
58
66
  }
59
- /** `meta` key holding the default half-life base a store's memories are on (src/half-life-migration.ts). */
67
+ /** `meta` key holding the default half-life base a store's memories are on (src/consolidate/half-life-migration.ts). */
60
68
  export const HALF_LIFE_BASE_META_KEY = 'default_half_life_base';
61
69
  /** `meta` key set once no memory of a decision, incident or other object sits on the old flat 90 days. */
62
70
  export const TYPED_HALF_LIFE_META_KEY = 'typed_half_life_on_default';
63
- /**
64
- * A store with no memories starts on the current default half-life base, so
65
- * `hippo sleep` never migrates it. A store that already holds memories and
66
- * no recorded base predates the record, and keeps reading as the legacy
67
- * 7-day base until sleep migrates it.
68
- */
71
+ /** The flat half-life the decision, incident and other object writers gave their memories before they took the default. */
72
+ export const LEGACY_TYPED_HALF_LIFE = 90;
73
+ /** A store with no memories starts on the current default half-life base so `hippo sleep` never migrates it; one that holds memories but no recorded base
74
+ * predates the record and keeps the legacy 7-day base until sleep migrates it. */
69
75
  function recordHalfLifeBaseForNewStore(db) {
70
76
  if (getMeta(db, HALF_LIFE_BASE_META_KEY, '') !== '')
71
77
  return;
@@ -85,21 +91,12 @@ function bootstrapLegacyStore(db, hippoRoot) {
85
91
  const legacyEntries = loadLegacyEntriesFromMarkdown(hippoRoot);
86
92
  if (legacyEntries.length === 0)
87
93
  return false;
88
- db.exec('BEGIN IMMEDIATE');
89
- try {
94
+ withWriteScope(db, 'bootstrap_legacy_store', () => {
90
95
  importLegacyEntries(db, hippoRoot, legacyEntries);
91
96
  importLegacyIndexAndStats(db, hippoRoot);
92
97
  // Stamp completion even when every row was rejected; see the gate above.
93
98
  setMeta(db, 'legacy_bootstrap_completed', '1');
94
- db.exec('COMMIT');
95
- }
96
- catch (error) {
97
- try {
98
- db.exec('ROLLBACK');
99
- }
100
- catch { /* already rolled back; keep the original error */ }
101
- throw error;
102
- }
99
+ });
103
100
  return true;
104
101
  }
105
102
  function importLegacyEntries(db, hippoRoot, legacyEntries) {
@@ -116,7 +113,7 @@ function importLegacyEntries(db, hippoRoot, legacyEntries) {
116
113
  catch (err) {
117
114
  if (err instanceof RejectedValueError) {
118
115
  rejectedCount++;
119
- audit(db, 'reject_refusal', err.entryId, { digest: err.digest, reason: err.reason }, 'cli', err.tenantId);
116
+ audit(db, 'reject_refusal', { targetId: err.entryId, metadata: { digest: err.digest, reason: err.reason }, actor: 'cli', tenantId: err.tenantId });
120
117
  continue;
121
118
  }
122
119
  throw err;
@@ -140,7 +137,7 @@ function importLegacyIndexAndStats(db, hippoRoot) {
140
137
  const runs = Array.isArray(legacyStats.consolidation_runs) ? legacyStats.consolidation_runs : [];
141
138
  const insertRun = db.prepare(`INSERT INTO consolidation_runs(timestamp, decayed, merged, removed) VALUES (?, ?, ?, ?)`);
142
139
  for (const run of runs) {
143
- if (!isPlainJsonObject(run))
140
+ if (!isJsonObject(run))
144
141
  continue;
145
142
  const row = run;
146
143
  insertRun.run(String(row.timestamp ?? new Date().toISOString()), Number(row.decayed ?? 0), Number(row.merged ?? 0), Number(row.removed ?? 0));
@@ -169,13 +166,12 @@ function loadLegacyIndexFile(hippoRoot) {
169
166
  return { version: 1, entries: {}, last_retrieval_ids: [], last_trace_id: null };
170
167
  }
171
168
  try {
172
- // SAFETY: index.json is only ever written by writeIndexMirror below,
173
- // which always serializes a HippoIndex; a hand-edited or corrupted file
174
- // that violates the shape falls through to the catch block's fallback.
169
+ // SAFETY: index.json is only written by writeIndexMirror below, which serializes a HippoIndex;
170
+ // a hand-edited file that violates the shape falls through to the catch block's fallback.
175
171
  return JSON.parse(fs.readFileSync(indexPath, 'utf8'));
176
172
  }
177
173
  catch (err) {
178
- log.debug(`store: unreadable index.json read as empty: ${err instanceof Error ? err.message : String(err)}`);
174
+ log.debug(`store: unreadable index.json read as empty: ${errorMessage(err)}`);
179
175
  return { version: 1, entries: {}, last_retrieval_ids: [], last_trace_id: null };
180
176
  }
181
177
  }
@@ -190,14 +186,12 @@ function loadLegacyStatsFile(hippoRoot) {
190
186
  };
191
187
  }
192
188
  try {
193
- // SAFETY: stats.json is only ever written by writeStatsMirror below,
194
- // which always emits exactly these four fields; callers additionally
195
- // guard every read with `?? 0` / `Array.isArray`, tolerating a
196
- // hand-edited or corrupted file even if this optimistic cast is wrong.
189
+ // SAFETY: stats.json is only written by writeStatsMirror below with exactly these four fields; callers also guard every read with `?? 0` / `Array.isArray`,
190
+ // so a hand-edited file is tolerated even if this cast is wrong.
197
191
  return JSON.parse(fs.readFileSync(statsPath, 'utf8'));
198
192
  }
199
193
  catch (err) {
200
- log.debug(`store: unreadable stats.json read as zero: ${err instanceof Error ? err.message : String(err)}`);
194
+ log.debug(`store: unreadable stats.json read as zero: ${errorMessage(err)}`);
201
195
  return {
202
196
  total_remembered: 0,
203
197
  total_recalled: 0,
@@ -0,0 +1,14 @@
1
+ import { type PredictionBaserate } from './predictions.js';
2
+ export interface ClassResolution {
3
+ classTag: string | null;
4
+ /** True when >=2 classes tied at the best overlap score AND best >= 1. Caller emits `recall_autodebias_hint_tiebreak` and returns a null hint
5
+ * (silent: an alphabetical tiebreak would show the wrong class half the time). */
6
+ tiebreak: boolean;
7
+ }
8
+ /** The prediction class a forward claim resolves to, and that class's closed-prediction stats when one resolved. */
9
+ export interface PlanningFallacyEvidence extends ClassResolution {
10
+ readonly baserate: PredictionBaserate | null;
11
+ }
12
+ /** Resolves a claim's tokens to one class and reads its baserate, writing no audit row. */
13
+ export declare function planningFallacyEvidenceAt(hippoRoot: string, tenantId: string, classQueryTokens: readonly string[]): PlanningFallacyEvidence;
14
+ //# sourceMappingURL=planning-fallacy-evidence.d.ts.map
@@ -0,0 +1,52 @@
1
+ import { onHandle } from './open.js';
2
+ import { computePredictionBaserate } from './predictions.js';
3
+ /** Resolve a query-token set to a unique best-matching class_tag for the tenant: lower-cased token overlap, best score >= 1 AND above the 2nd-best.
4
+ * TENANT-GLOBAL by design, not scope-filtered (base rates need the full sample): class_tag NAMES can cross scopes; use opaque names or HIPPO_AUTODEBIAS=off. */
5
+ function resolveClassFromTokens(hippoRoot, tenantId, queryTokens) {
6
+ if (queryTokens.length === 0)
7
+ return { classTag: null, tiebreak: false };
8
+ return onHandle(hippoRoot, (db) => {
9
+ // SAFETY: rows' shape matches the single `class_tag` column named in the SELECT above.
10
+ const rows = db.prepare(`SELECT DISTINCT class_tag FROM predictions WHERE tenant_id = ?`).all(tenantId);
11
+ const querySet = new Set(queryTokens);
12
+ let bestScore = 0;
13
+ let bestClass = null;
14
+ let secondBest = 0;
15
+ for (const { class_tag } of rows) {
16
+ const classTokens = class_tag
17
+ .toLowerCase()
18
+ .split(/[-_\s]+/)
19
+ .filter((t) => t.length >= 3);
20
+ let score = 0;
21
+ for (const t of classTokens)
22
+ if (querySet.has(t))
23
+ score++;
24
+ if (score > bestScore) {
25
+ secondBest = bestScore;
26
+ bestScore = score;
27
+ bestClass = class_tag;
28
+ }
29
+ else if (score === bestScore && score > 0) {
30
+ // Tie at current best: bump secondBest, do NOT update bestClass (an alphabetical tiebreak would pick the wrong class on ambiguous queries; stay silent
31
+ // on tie).
32
+ secondBest = score;
33
+ }
34
+ else if (score > secondBest) {
35
+ secondBest = score;
36
+ }
37
+ }
38
+ if (bestScore < 1)
39
+ return { classTag: null, tiebreak: false };
40
+ if (bestScore === secondBest)
41
+ return { classTag: null, tiebreak: true };
42
+ return { classTag: bestClass, tiebreak: false };
43
+ });
44
+ }
45
+ /** Resolves a claim's tokens to one class and reads its baserate, writing no audit row. */
46
+ export function planningFallacyEvidenceAt(hippoRoot, tenantId, classQueryTokens) {
47
+ const resolution = resolveClassFromTokens(hippoRoot, tenantId, classQueryTokens);
48
+ // emitAudit=false: the recall_autodebias_hint row carries n_closed and mean_ratio, so predict_baserate stays off.
49
+ const baserate = resolution.classTag ? computePredictionBaserate(hippoRoot, tenantId, resolution.classTag, 'recall', false) : null;
50
+ return { ...resolution, baserate };
51
+ }
52
+ //# sourceMappingURL=planning-fallacy-evidence.js.map