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,23 +1,38 @@
1
- import { envSummaryDeboost } from '../env.js';
2
- import { calculateStrength, CHURN_STALE_TAG } from '../memory.js';
3
- import { isOutcomeFastAblated, isRecencyAblated, evalRecencyScaleDays } from '../ablation.js';
4
- import { pathBoostMultiplier } from '../path-context.js';
5
- import { scopeMatch } from '../scope.js';
1
+ import { envSummaryDeboost } from '../util/env.js';
2
+ import { calculateStrength, CHURN_STALE_TAG } from '../core/memory.js';
3
+ import { isOutcomeFastAblated, isRecencyAblated, evalRecencyScaleDays } from '../core/ablation.js';
4
+ import { pathBoostMultiplier } from './path-context.js';
5
+ import { scopeMatch } from '../sharing/scope.js';
6
6
  import { temporalBoost } from './temporal.js';
7
- export const CHURN_STALE_RANK_MULTIPLIER = 0.5; // SHORTCUT: untuned; measure on real recall before any default.
7
+ import { DAY_MS } from '../util/time.js';
8
+ const CHURN_STALE_RANK_MULTIPLIER = 0.5; // SHORTCUT: untuned; measure on real recall before any default.
8
9
  const DECISION_TAG_BOOST = 1.2;
10
+ // A memory tagged for the active scope outranks a neutral one; one tagged for another scope is demoted.
11
+ const SCOPE_MATCH_BOOST = 1.5;
12
+ const SCOPE_MISMATCH_BOOST = 0.5;
13
+ const EXTRACTION_TAG_BOOST = 1.3;
14
+ // The outcome nudge is 1 + slope * tanh(net / 2), clamped so one outcome streak cannot swamp lexical rank.
15
+ const OUTCOME_NUDGE_SLOPE = 0.15;
16
+ const OUTCOME_NUDGE_MIN = 0.85;
17
+ const OUTCOME_NUDGE_MAX = 1.15;
18
+ // Strength and recency enter the rank as floor + span * signal, so a weak or old memory keeps most of its lexical score.
19
+ export const STRENGTH_RANK_FLOOR = 0.5;
20
+ export const STRENGTH_RANK_SPAN = 0.5;
21
+ const RECENCY_RANK_FLOOR = 0.8;
22
+ const RECENCY_RANK_SPAN = 0.2;
23
+ const RECENCY_SCALE_DAYS = 30;
9
24
  const DEFAULT_SUMMARY_DEBOOST = 0.85;
10
25
  const DEFAULT_FRESHNESS_BOOST = 1.05;
11
- const FRESHNESS_WINDOW_MS = 7 * 24 * 60 * 60 * 1000;
26
+ const FRESHNESS_WINDOW_MS = 7 * DAY_MS;
12
27
  export function churnStaleFactor(entry) {
13
28
  return entry.tags.includes(CHURN_STALE_TAG) ? CHURN_STALE_RANK_MULTIPLIER : 1.0;
14
29
  }
15
- export function recencyBoost(entry, now) {
30
+ function recencyBoost(entry, now) {
16
31
  if (isRecencyAblated())
17
32
  return 1; // EVAL-ONLY ablation (see ablation.ts)
18
33
  const created = new Date(entry.created);
19
- const ageDays = (now.getTime() - created.getTime()) / (1000 * 60 * 60 * 24);
20
- return Math.exp(-ageDays / (evalRecencyScaleDays() ?? 30));
34
+ const ageDays = (now.getTime() - created.getTime()) / DAY_MS;
35
+ return Math.exp(-ageDays / (evalRecencyScaleDays() ?? RECENCY_SCALE_DAYS));
21
36
  }
22
37
  /** Retrieval-time outcome nudge in [0.85, 1.15]; the bm25-outcome eval baseline ranks with it too. */
23
38
  export function outcomeMultiplier(entry) {
@@ -25,7 +40,7 @@ export function outcomeMultiplier(entry) {
25
40
  const neg = entry.outcome_negative ?? 0;
26
41
  if (isOutcomeFastAblated() || (pos === 0 && neg === 0))
27
42
  return 1.0; // EVAL-ONLY ablation (see ablation.ts)
28
- return Math.max(0.85, Math.min(1.15, 1 + 0.15 * Math.tanh((pos - neg) / 2)));
43
+ return Math.max(OUTCOME_NUDGE_MIN, Math.min(OUTCOME_NUDGE_MAX, 1 + OUTCOME_NUDGE_SLOPE * Math.tanh((pos - neg) / 2)));
29
44
  }
30
45
  /** A DAG summary is a topic summary (level 2) or an entity profile (level 3); both take the same deboost. */
31
46
  export function isDagSummary(entry) {
@@ -66,7 +81,14 @@ export function summaryMultipliers(entry, now, s) {
66
81
  return { deboost: s.deboost, freshness: s.freshness ? summaryFreshnessMultiplier(entry, now) : 1.0 };
67
82
  }
68
83
  export function strengthRecencyMultipliers(entry, now) {
69
- return { strength: 0.5 + 0.5 * calculateStrength(entry, now), recency: 0.8 + 0.2 * recencyBoost(entry, now) };
84
+ return {
85
+ strength: STRENGTH_RANK_FLOOR + STRENGTH_RANK_SPAN * calculateStrength(entry, now),
86
+ recency: RECENCY_RANK_FLOOR + RECENCY_RANK_SPAN * recencyBoost(entry, now),
87
+ };
88
+ }
89
+ /** The rank multiplier for a scopeMatch signal: match, mismatch or neutral. */
90
+ export function scopeBoostFor(signal) {
91
+ return signal === 1 ? SCOPE_MATCH_BOOST : signal === -1 ? SCOPE_MISMATCH_BOOST : 1.0;
70
92
  }
71
93
  /** Applies every rank multiplier one at a time, in a fixed order, so float rounding matches across paths. */
72
94
  export function applyRankBoosts(score, entry, ctx) {
@@ -74,9 +96,8 @@ export function applyRankBoosts(score, entry, ctx) {
74
96
  const churnStaleMultiplier = churnStaleFactor(entry);
75
97
  const pathBoost = pathBoostMultiplier(entry.tags, ctx.pathTags);
76
98
  const outcomeBoost = ctx.outcome ? outcomeMultiplier(entry) : 1.0;
77
- const scopeSignal = scopeMatch(entry.tags, ctx.scope);
78
- const scopeBoost = scopeSignal === 1 ? 1.5 : scopeSignal === -1 ? 0.5 : 1.0;
79
- const extractionBoost = entry.tags.includes('extracted') ? 1.3 : 1.0;
99
+ const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, ctx.scope));
100
+ const extractionBoost = entry.tags.includes('extracted') ? EXTRACTION_TAG_BOOST : 1.0;
80
101
  const summary = summaryMultipliers(entry, ctx.now, ctx.summary);
81
102
  let s = score;
82
103
  s *= decisionBoost;
@@ -1,5 +1,5 @@
1
- import type { MemoryEntry } from '../memory.js';
2
- import type { ScoreBreakdown } from './types.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import type { ScoreBreakdown } from '../core/search-types.js';
3
3
  /** Whole days since the entry was created, never negative. */
4
4
  export declare function ageInDays(entry: MemoryEntry, now: Date): number;
5
5
  /** Copies the entry's DAG metadata, and for summaries the multipliers applied, onto an explain breakdown. */
@@ -1,7 +1,8 @@
1
1
  import { isDagSummary } from './boosts.js';
2
+ import { DAY_MS } from '../util/time.js';
2
3
  /** Whole days since the entry was created, never negative. */
3
4
  export function ageInDays(entry, now) {
4
- return Math.max(0, Math.floor((now.getTime() - new Date(entry.created).getTime()) / 86_400_000));
5
+ return Math.max(0, Math.floor((now.getTime() - new Date(entry.created).getTime()) / DAY_MS));
5
6
  }
6
7
  /** Copies the entry's DAG metadata, and for summaries the multipliers applied, onto an explain breakdown. */
7
8
  export function addDagFields(breakdown, entry, deboost, freshness) {
@@ -1,4 +1,4 @@
1
- import type { SearchResult } from './types.js';
1
+ import type { SearchResult } from '../core/search-types.js';
2
2
  export interface MatchExplanation {
3
3
  /** Human-readable reason string */
4
4
  reason: string;
@@ -1,5 +1,6 @@
1
- import { tokenize } from '../tokenize.js';
1
+ import { tokenize } from '../util/tokenize.js';
2
2
  import { matchedQueryTerms } from './bm25.js';
3
+ const COSINE_DECIMALS = 3;
3
4
  /** Why a result matched: the overlapping query terms and whether BM25 and/or embedding similarity contributed. */
4
5
  export function explainMatch(query, result) {
5
6
  const matchedTerms = matchedQueryTerms(new Set(tokenize(query)), result.entry);
@@ -9,7 +10,7 @@ export function explainMatch(query, result) {
9
10
  if (hasBm25)
10
11
  parts.push(`BM25: matched terms [${matchedTerms.join(', ')}]`);
11
12
  if (hasEmbedding)
12
- parts.push(`embedding similarity: ${result.cosine.toFixed(3)}`);
13
+ parts.push(`embedding similarity: ${result.cosine.toFixed(COSINE_DECIMALS)}`);
13
14
  if (parts.length === 0)
14
15
  parts.push('no direct term or embedding match');
15
16
  return {
@@ -1,5 +1,5 @@
1
- import type { MemoryEntry } from '../memory.js';
2
- import type { ResultCost, SearchResult } from './types.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import type { ResultCost, SearchResult } from '../core/search-types.js';
3
3
  /** When an extracted fact and its source both match, keep only the higher-scoring one (usually the fact). */
4
4
  export declare function dedupeExtracted(scored: SearchResult[]): SearchResult[];
5
5
  /** DAG drill-down: a matched summary pulls its children from `pool` in at 0.9x its score; sorts `results` in place. */
@@ -1,5 +1,5 @@
1
- import { estimateTokens } from '../token-ledger.js';
2
- import { compareScoredResults } from '../compare.js';
1
+ import { estimateTokens } from '../util/token-text.js';
2
+ import { compareScoredResults } from '../core/compare.js';
3
3
  import { churnStaleFactor } from './boosts.js';
4
4
  /** When an extracted fact and its source both match, keep only the higher-scoring one (usually the fact). */
5
5
  export function dedupeExtracted(scored) {
@@ -20,6 +20,7 @@ export function dedupeExtracted(scored) {
20
20
  }
21
21
  return deduped;
22
22
  }
23
+ const DAG_CHILD_SCORE_FACTOR = 0.9;
23
24
  /** DAG drill-down: a matched summary pulls its children from `pool` in at 0.9x its score; sorts `results` in place. */
24
25
  export function withDagChildren(results, pool) {
25
26
  const summaryIds = results.filter((r) => r.entry.tags.includes('dag-summary')).map((r) => r.entry.id);
@@ -30,7 +31,7 @@ export function withDagChildren(results, pool) {
30
31
  if (results.some((r) => r.entry.id === child.id))
31
32
  continue;
32
33
  const parentResult = results.find((r) => r.entry.id === child.dag_parent_id);
33
- const childScore = parentResult ? parentResult.score * 0.9 * churnStaleFactor(child) : 0;
34
+ const childScore = parentResult ? parentResult.score * DAG_CHILD_SCORE_FACTOR * churnStaleFactor(child) : 0;
34
35
  results.push({ entry: child, score: childScore, bm25: 0, cosine: 0, tokens: estimateTokens(child.content) });
35
36
  }
36
37
  results.sort(compareScoredResults);
@@ -1,4 +1,4 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
2
  import type { DenseScores } from './vector.js';
3
3
  /** Opt-in third RRF list ranking in-pool candidates by graph proximity to the strong lexical seeds. */
4
4
  export interface GraphStreamOptions {
@@ -1,6 +1,6 @@
1
- import { rrfFuse } from '../rrf.js';
2
- import { graphRankStream, selectGraphSeeds, DEFAULT_GRAPH_SEED_COUNT } from '../graph-stream.js';
3
- import { compareEntryIdentity } from '../compare.js';
1
+ import { rrfFuse } from './rrf.js';
2
+ import { graphRankStream, selectGraphSeeds, DEFAULT_GRAPH_SEED_COUNT } from '../graph/stream.js';
3
+ import { compareEntryIdentity } from '../core/compare.js';
4
4
  // Score desc, then entry identity, so ties cannot leak fresh-ingest order into graph seeds or RRF ranks.
5
5
  function rankBy(eligible, scores, entries) {
6
6
  return [...eligible].sort((a, b) => {
@@ -0,0 +1,23 @@
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import type { RerankStep } from '../core/search-types.js';
3
+ import type { ActiveGoals, GoalRecallLogRow } from '../store/goals.js';
4
+ /** Options of {@link boostByGoals}. */
5
+ export interface GoalStackBoostOpts {
6
+ sessionId: string;
7
+ tenantId: string;
8
+ limit: number;
9
+ /** Side-channel: one goal-boost `RerankStep` per boosted row, keyed by `entry.id` (a map because the helper re-spreads rows); only populated when passed. */
10
+ trace?: Map<string, RerankStep>;
11
+ }
12
+ /** The boosted, re-sorted rows and the `goal_recall_log` rows they earn. */
13
+ export interface GoalStackBoost<R> {
14
+ results: R[];
15
+ log: GoalRecallLogRow[];
16
+ }
17
+ /** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
18
+ * `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
19
+ export declare function boostByGoals<R extends {
20
+ entry: MemoryEntry;
21
+ score: number;
22
+ }>(results: R[], active: ActiveGoals, opts: GoalStackBoostOpts): GoalStackBoost<R>;
23
+ //# sourceMappingURL=goal-boost.d.ts.map
@@ -0,0 +1,90 @@
1
+ // src/search/goal-boost.ts: the goal-stack boost over goals already read; it ranks rows and touches no store.
2
+ import { compareScoresDesc } from '../core/compare.js';
3
+ const MAX_FINAL_MULTIPLIER = 3.0;
4
+ /** The capped boost for one row whose tags match `matches` active goals. */
5
+ function goalBoostMultiplier(entry, tags, matches, goalsByTag, policiesByGoalId) {
6
+ // Base 2.0x for first match, +0.5x per additional, capped at 3.0x.
7
+ let multiplier = Math.min(2.0 + 0.5 * (matches.length - 1), MAX_FINAL_MULTIPLIER);
8
+ // Compose per-policy multipliers per matched tag.
9
+ for (const tag of matches) {
10
+ const goal = goalsByTag.get(tag);
11
+ const policy = policiesByGoalId.get(goal.id);
12
+ if (!policy)
13
+ continue;
14
+ if (policy.policyType === 'error-prioritized' && tags.includes('error')) {
15
+ multiplier *= policy.errorPriority;
16
+ }
17
+ else if (policy.policyType === 'schema-fit-biased') {
18
+ // Linearly weight schema_fit in [0,1] up to (weightSchemaFit)x.
19
+ // Default 1.0 is a no-op.
20
+ multiplier *=
21
+ 1.0 +
22
+ Math.max(0, policy.weightSchemaFit - 1.0) *
23
+ (entry.schema_fit ?? 0.5);
24
+ }
25
+ else if (policy.policyType === 'recency-first') {
26
+ multiplier *= policy.weightRecency;
27
+ }
28
+ else if (policy.policyType === 'hybrid') {
29
+ multiplier *= policy.weightOutcome;
30
+ }
31
+ }
32
+ // Hard cap AFTER all composition.
33
+ return Math.min(multiplier, MAX_FINAL_MULTIPLIER);
34
+ }
35
+ /** Log rows for the top `limit` boosted rows, one per matched goal. */
36
+ function buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) {
37
+ const { sessionId, tenantId, limit } = opts;
38
+ const recalledAt = new Date().toISOString();
39
+ const log = [];
40
+ for (const r of boosted.slice(0, limit)) {
41
+ const matches = matchesByEntryId.get(r.entry.id);
42
+ if (!matches || matches.length === 0)
43
+ continue;
44
+ for (const tag of matches) {
45
+ const goal = goalsByTag.get(tag);
46
+ if (!goal)
47
+ continue;
48
+ log.push({ goalId: goal.id, memoryId: r.entry.id, tenantId, sessionId, recalledAt, score: r.score });
49
+ }
50
+ }
51
+ return log;
52
+ }
53
+ /** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
54
+ * `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
55
+ export function boostByGoals(results, active, opts) {
56
+ const { trace } = opts;
57
+ if (active.goals.length === 0)
58
+ return { results, log: [] };
59
+ const goalsByTag = new Map(active.goals.map((g) => [g.goalName, g]));
60
+ const policiesByGoalId = active.policies;
61
+ // Goal-tag matches per boosted row, keyed by entry id; a side table (not a spread-on marker property) so `boosted` stays exactly R[] with no cast-then-strip.
62
+ const matchesByEntryId = new Map();
63
+ const boosted = results
64
+ .map((r) => {
65
+ const tags = r.entry.tags ?? [];
66
+ const matches = tags.filter((t) => goalsByTag.has(t));
67
+ if (matches.length === 0)
68
+ return r;
69
+ const multiplier = goalBoostMultiplier(r.entry, tags, matches, goalsByTag, policiesByGoalId);
70
+ // Recall-trace side-channel: record the goal-boost step BEFORE the
71
+ // score is mutated, keyed by entry id; a pure read of r.score.
72
+ if (trace) {
73
+ trace.set(r.entry.id, {
74
+ stage: 'goal-boost',
75
+ multiplier,
76
+ scoreBefore: r.score,
77
+ scoreAfter: r.score * multiplier,
78
+ note: matches.join(', '),
79
+ });
80
+ }
81
+ matchesByEntryId.set(r.entry.id, matches);
82
+ // SAFETY: spreading a generic-constrained `r: R` widens to the spread's plain object type; only `score` changes, so the value still satisfies R.
83
+ return { ...r, score: r.score * multiplier };
84
+ })
85
+ // Deliberately a PLAIN stable score sort with no compareEntryIdentity tail: re-sorting an already deterministic ranking inherits its determinism via
86
+ // stability, and ties keep the prior (meaningful) rank instead of reordering by content.
87
+ .sort((a, b) => compareScoresDesc(a.score, b.score));
88
+ return { results: boosted, log: buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) };
89
+ }
90
+ //# sourceMappingURL=goal-boost.js.map
@@ -1,7 +1,7 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
2
  import { type BoostContext } from './boosts.js';
3
3
  import type { DenseScores } from './vector.js';
4
- import type { SearchResult } from './types.js';
4
+ import type { SearchResult } from '../core/search-types.js';
5
5
  export interface HybridScoreInput {
6
6
  entries: MemoryEntry[];
7
7
  queryTerms: string[];
@@ -1,4 +1,4 @@
1
- import { estimateTokens } from '../token-ledger.js';
1
+ import { estimateTokens } from '../util/token-text.js';
2
2
  import { matchedQueryTerms } from './bm25.js';
3
3
  import { applyRankBoosts, strengthRecencyMultipliers } from './boosts.js';
4
4
  import { addDagFields, ageInDays } from './breakdown.js';
@@ -1,10 +1,10 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
2
  import type { RerankerFn, RerankerOptions } from '../rerankers/types.js';
3
3
  import { type BM25Corpus } from './bm25.js';
4
4
  import { type HybridVectorCandidates } from './vector.js';
5
5
  import { type GraphStreamOptions } from './fusion.js';
6
- import { type ResultCost, type SearchResult } from './types.js';
7
- import type { HippoStore } from '../store-port.js';
6
+ import { type ResultCost, type SearchResult } from '../core/search-types.js';
7
+ import type { HippoStore } from '../store/index.js';
8
8
  export interface HybridSearchOptions {
9
9
  budget?: number;
10
10
  now?: Date;
@@ -37,12 +37,14 @@ export interface HybridSearchOptions {
37
37
  summaryDeboost?: number;
38
38
  /** 1.05 micro-boost for summaries rebuilt within 7 days. Default true. */
39
39
  summaryFreshness?: boolean;
40
- /** Graph-proximity third RRF list; active only with `scoring: 'rrf'`, embeddings and a `hippoRoot`. See src/graph-stream.ts. */
40
+ /** Graph-proximity third RRF list; active only with `scoring: 'rrf'`, embeddings and a `hippoRoot`. See src/graph/stream.ts. */
41
41
  graphStream?: GraphStreamOptions;
42
42
  /** Add the rows nearest the query vector, not only rescore `entries`; without it a row no query word matches cannot surface. */
43
43
  vectorCandidates?: HybridVectorCandidates;
44
44
  /** Where vectors are read; hippo.db under `hippoRoot` when unset. */
45
45
  store?: HippoStore;
46
+ /** The deadline a caller already started for this recall's query embedding; a fresh budget when unset. */
47
+ queryEmbedDeadline?: AbortSignal;
46
48
  }
47
49
  /** BM25 blended with cosine similarity when stored vectors and a provider are available, BM25 * strength * recency otherwise. */
48
50
  export declare function hybridSearch(query: string, entries: MemoryEntry[], options?: HybridSearchOptions): Promise<SearchResult[]>;
@@ -1,8 +1,8 @@
1
- import { tokenize } from '../tokenize.js';
2
- import { evalNow } from '../ablation.js';
3
- import { extractPathTags } from '../path-context.js';
4
- import { detectScope } from '../scope.js';
5
- import { compareScoredResults } from '../compare.js';
1
+ import { tokenize } from '../util/tokenize.js';
2
+ import { evalNow } from '../core/ablation.js';
3
+ import { extractPathTags } from './path-context.js';
4
+ import { detectScope } from '../sharing/scope.js';
5
+ import { compareScoredResults } from '../core/compare.js';
6
6
  import { bm25Score, buildCorpus, entryText } from './bm25.js';
7
7
  import { currentEntries } from './as-of.js';
8
8
  import { summaryScoring } from './boosts.js';
@@ -12,11 +12,14 @@ import { fuseRanks } from './fusion.js';
12
12
  import { scoreHybridPool } from './hybrid-score.js';
13
13
  import { applyMmrWindow, applyReranker } from './rerank.js';
14
14
  import { dedupeExtracted, fitBudget, withDagChildren } from './finalize.js';
15
- import { DEFAULT_RECALL_BUDGET } from './types.js';
15
+ import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
16
+ // Share of the blended score that cosine takes, and the relevance side of the MMR relevance-versus-diversity trade.
17
+ const DEFAULT_EMBEDDING_WEIGHT = 0.6;
18
+ const DEFAULT_MMR_LAMBDA = 0.7;
16
19
  /** BM25 blended with cosine similarity when stored vectors and a provider are available, BM25 * strength * recency otherwise. */
17
20
  export async function hybridSearch(query, entries, options = {}) {
18
21
  const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
19
- const embeddingWeight = options.embeddingWeight ?? 0.6;
22
+ const embeddingWeight = options.embeddingWeight ?? DEFAULT_EMBEDDING_WEIGHT;
20
23
  const pool = currentEntries(entries, options);
21
24
  if (pool.length === 0)
22
25
  return [];
@@ -57,7 +60,7 @@ function hybridBoostContext(query, pool, now, options) {
57
60
  }
58
61
  /** MMR when vectors are loaded, then the optional reranker. */
59
62
  async function orderHybrid(query, scored, arm, options) {
60
- const mmrLambda = options.mmrLambda ?? 0.7;
63
+ const mmrLambda = options.mmrLambda ?? DEFAULT_MMR_LAMBDA;
61
64
  const applyMmr = (options.mmr ?? true) && arm.useEmbeddings && scored.length > 1 && mmrLambda < 1;
62
65
  const ordered = applyMmr ? applyMmrWindow(scored, arm.embeddingIndex, mmrLambda, options.explain ?? false) : scored;
63
66
  return options.reranker ? applyReranker(query, ordered, options.reranker, options.rerankerOptions) : ordered;
@@ -1,5 +1,5 @@
1
- import type { MemoryEntry } from './memory.js';
2
- import { type ResultCost, type SearchResult } from './search/types.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import { type ResultCost, type SearchResult } from '../core/search-types.js';
3
3
  export declare function multihopSearch(query: string, entries: MemoryEntry[], options?: {
4
4
  budget?: number;
5
5
  now?: Date;
@@ -1,12 +1,14 @@
1
- import { fitBudget } from './search/finalize.js';
2
- import { search } from './search/bm25-search.js';
3
- import { DEFAULT_RECALL_BUDGET } from './search/types.js';
1
+ import { compareScoresDesc } from '../core/compare.js';
2
+ import { fitBudget } from './finalize.js';
3
+ import { search } from './bm25-search.js';
4
+ import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
5
+ const PASS1_TOP_K = 10;
4
6
  export function multihopSearch(query, entries, options = {}) {
5
7
  const budget = options.budget ?? DEFAULT_RECALL_BUDGET;
6
8
  // Pass 1 searches wide to find entities, so each return fits the caller's budget, as search() does.
7
9
  const fit = (ordered) => fitBudget(ordered, budget, options.minResults ?? 1, options.cost);
8
10
  const pass1 = search(query, entries, { ...options, budget: budget * 2 });
9
- const topK = pass1.slice(0, 10);
11
+ const topK = pass1.slice(0, PASS1_TOP_K);
10
12
  if (topK.length === 0)
11
13
  return [];
12
14
  const entityTags = new Set();
@@ -32,9 +34,8 @@ export function multihopSearch(query, entries, options = {}) {
32
34
  merged.set(r.entry.id, r);
33
35
  }
34
36
  }
35
- // PLAIN stable score sort on purpose -- pass1/pass2 inputs are
36
- // deterministically ordered (search() carries the content tail), stability
37
- // inherits that, and ties keep pass-1 results ahead of pass-2 follow-ups.
38
- return fit([...merged.values()].sort((a, b) => b.score - a.score));
37
+ // PLAIN stable score sort on purpose: pass1/pass2 inputs are already deterministically ordered (search() carries the content tail),
38
+ // stability inherits that, and ties keep pass-1 results ahead of pass-2 follow-ups.
39
+ return fit([...merged.values()].sort((a, b) => compareScoresDesc(a.score, b.score)));
39
40
  }
40
41
  //# sourceMappingURL=multihop.js.map
@@ -0,0 +1,11 @@
1
+ /** Extracts meaningful path segments from a directory as tags like ['path:src', 'path:my-project']; filters noise (node_modules, .git, Users, home dirs,
2
+ * drive letters). */
3
+ export declare function extractPathTags(dirPath: string): string[];
4
+ /** Path overlap score in 0..1 (1 = perfect match), normalized by the MORE SPECIFIC side (the larger tag set),
5
+ * so a bare/generic path tag cannot score 1.0 against a deeply nested cwd just because its tiny tag set is contained in the query's. */
6
+ export declare function pathOverlapScore(memoryPathTags: string[], currentPathTags: string[]): number;
7
+ /** Weight applied to path overlap score when computing the recall boost multiplier. */
8
+ export declare const PATH_BOOST_WEIGHT = 0.3;
9
+ /** Multiplier (1.0..1.3) applied to a composite recall score for path locality; filters the memory's tags to path:* itself so call sites cannot drift. */
10
+ export declare function pathBoostMultiplier(memoryTags: string[], currentPathTags: string[]): number;
11
+ //# sourceMappingURL=path-context.d.ts.map
@@ -1,8 +1,7 @@
1
- /**
2
- * Extract meaningful path segments from a directory path.
3
- * Returns tags like ['path:src', 'path:api', 'path:my-project'].
4
- * Filters out noise (node_modules, .git, Users, home dirs, drive letters).
5
- */
1
+ // Keeps the last meaningful segments, the most specific ones.
2
+ const PATH_SEGMENTS_KEPT = 4;
3
+ /** Extracts meaningful path segments from a directory as tags like ['path:src', 'path:my-project']; filters noise (node_modules, .git, Users, home dirs,
4
+ * drive letters). */
6
5
  export function extractPathTags(dirPath) {
7
6
  const normalized = dirPath.replace(/\\/g, '/');
8
7
  const segments = normalized.split('/').filter(Boolean);
@@ -14,17 +13,11 @@ export function extractPathTags(dirPath) {
14
13
  ]);
15
14
  return segments
16
15
  .filter(s => s.length >= 2 && !noise.has(s.toLowerCase()))
17
- .slice(-4) // keep last 4 meaningful segments (most specific)
16
+ .slice(-PATH_SEGMENTS_KEPT)
18
17
  .map(s => `path:${s.toLowerCase()}`);
19
18
  }
20
- /**
21
- * Compute path overlap score between two sets of path tags.
22
- * Returns 0..1 where 1 = perfect match.
23
- * Normalizes by the MORE SPECIFIC side (the larger of the two tag sets),
24
- * so a memory carrying only a bare/generic path tag can no longer score a
25
- * full 1.0 against a deeply-nested cwd just because its own tiny tag set
26
- * is fully contained in the query's — genericity is no longer rewarded.
27
- */
19
+ /** Path overlap score in 0..1 (1 = perfect match), normalized by the MORE SPECIFIC side (the larger tag set),
20
+ * so a bare/generic path tag cannot score 1.0 against a deeply nested cwd just because its tiny tag set is contained in the query's. */
28
21
  export function pathOverlapScore(memoryPathTags, currentPathTags) {
29
22
  if (memoryPathTags.length === 0 || currentPathTags.length === 0)
30
23
  return 0;
@@ -36,11 +29,7 @@ export function pathOverlapScore(memoryPathTags, currentPathTags) {
36
29
  }
37
30
  /** Weight applied to path overlap score when computing the recall boost multiplier. */
38
31
  export const PATH_BOOST_WEIGHT = 0.3;
39
- /**
40
- * Multiplier applied to a composite recall score for path locality.
41
- * Filters the memory's tags to path:* itself so call sites cannot drift.
42
- * Returns 1.0..1.3.
43
- */
32
+ /** Multiplier (1.0..1.3) applied to a composite recall score for path locality; filters the memory's tags to path:* itself so call sites cannot drift. */
44
33
  export function pathBoostMultiplier(memoryTags, currentPathTags) {
45
34
  const memPathTags = memoryTags.filter(t => t.startsWith('path:'));
46
35
  return 1.0 + pathOverlapScore(memPathTags, currentPathTags) * PATH_BOOST_WEIGHT;
@@ -1,8 +1,8 @@
1
- import { type MemoryEntry } from '../memory.js';
2
- import { type PhysicsConfig } from '../physics-config.js';
3
- import { type HippoStore } from '../store-port.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
+ import { type PhysicsConfig } from '../core/physics-config.js';
3
+ import { type HippoStore } from '../store/index.js';
4
4
  import { type HybridVectorCandidates } from './vector.js';
5
- import { type ResultCost, type SearchResult } from './types.js';
5
+ import { type ResultCost, type SearchResult } from '../core/search-types.js';
6
6
  export interface PhysicsSearchOptions {
7
7
  budget?: number;
8
8
  now?: Date;
@@ -1,21 +1,22 @@
1
- import { calculateStrength } from '../memory.js';
2
- import { estimateTokens } from '../token-ledger.js';
3
- import { evalNow, isRecallBoostAblated } from '../ablation.js';
4
- import { indexedModel, indexNeedsRebuild } from '../embeddings.js';
5
- import { resolveEmbeddingProvider } from '../embedding-provider.js';
6
- import { physicsScore as computePhysicsScores, computeMass } from '../physics.js';
7
- import { DEFAULT_PHYSICS_CONFIG } from '../physics-config.js';
8
- import { rethrowIfSqliteBlocked } from '../db.js';
9
- import { compareScoredResults } from '../compare.js';
10
- import { log } from '../log.js';
11
- import { sqliteStore } from '../store-port.js';
1
+ import { calculateStrength } from '../core/memory.js';
2
+ import { estimateTokens } from '../util/token-text.js';
3
+ import { evalNow, isRecallBoostAblated } from '../core/ablation.js';
4
+ import { indexNeedsRebuild } from '../store/embeddings/index.js';
5
+ import { indexedModel } from '../store/vector-index.js';
6
+ import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
7
+ import { physicsScore as computePhysicsScores, computeMass } from '../core/physics.js';
8
+ import { DEFAULT_PHYSICS_CONFIG } from '../core/physics-config.js';
9
+ import { rethrowIfSqliteBlocked } from '../db/index.js';
10
+ import { compareScoredResults } from '../core/compare.js';
11
+ import { errorMessage, log } from '../util/log.js';
12
+ import { sqliteStore } from '../store/index.js';
12
13
  import { churnStaleFactor, summaryMultipliers, summaryScoring } from './boosts.js';
13
14
  import { addDagFields, ageInDays } from './breakdown.js';
14
15
  import { fitBudget } from './finalize.js';
15
16
  import { hybridSearch } from './hybrid.js';
16
17
  import { currentEntries } from './as-of.js';
17
- import { requireVectorReads, vectorCandidatesOutside } from './vector.js';
18
- import { DEFAULT_RECALL_BUDGET } from './types.js';
18
+ import { embedQueryBy, requireVectorReads, startQueryEmbedDeadline, vectorCandidatesOutside } from './vector.js';
19
+ import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
19
20
  /** Scores memories by gravity, momentum and cluster amplification; rows without physics state rank through hybridSearch. */
20
21
  export async function physicsSearch(query, entries, options = {}) {
21
22
  const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
@@ -28,27 +29,29 @@ export async function physicsSearch(query, entries, options = {}) {
28
29
  return hybridSearch(query, entries, options);
29
30
  const root = options.hippoRoot;
30
31
  const store = options.store ?? sqliteStore(root);
31
- const queryVector = await physicsQueryVector(query, root, store, options.queryEmbedding);
32
+ // Shared with every hybrid ranking below, so a provider that stalls here is not waited on a second time.
33
+ const queryEmbedDeadline = startQueryEmbedDeadline();
34
+ const queryVector = await physicsQueryVector(query, root, store, queryEmbedDeadline, options.queryEmbedding);
32
35
  if (!queryVector)
33
- return hybridSearch(query, entries, options);
36
+ return hybridSearch(query, entries, { ...options, queryEmbedDeadline });
34
37
  // Checked here too, since a caller's own query vector skips the check inside physicsQueryVector.
35
38
  const reads = requireVectorReads(store);
36
39
  const pool = currentEntries(await withVectorCandidates(reads, entries, queryVector, options.vectorCandidates), options);
37
40
  const physicsMap = await loadCandidateParticles(reads, pool);
38
41
  if (!physicsMap)
39
- return hybridSearch(query, pool, options);
42
+ return hybridSearch(query, pool, { ...options, queryEmbedDeadline });
40
43
  const pools = splitByParticle(pool, physicsMap, queryVector, now);
41
44
  const config = options.physicsConfig ?? DEFAULT_PHYSICS_CONFIG;
42
45
  const physicsResults = scorePhysicsPool(pools, queryVector, config, scoring);
43
46
  const classicResults = pools.classic.length > 0
44
- ? await hybridSearch(query, pools.classic, { ...options, vectorCandidates: undefined, budget: Infinity, explain })
47
+ ? await hybridSearch(query, pools.classic, { ...options, queryEmbedDeadline, vectorCandidates: undefined, budget: Infinity, explain })
45
48
  : [];
46
49
  const merged = mergeScorePools(physicsResults, classicResults);
47
50
  merged.sort(compareScoredResults);
48
51
  return fitBudget(merged, options.budget ?? DEFAULT_RECALL_BUDGET, options.minResults ?? 1, options.cost);
49
52
  }
50
53
  /** The caller's vector, else the provider's; null sends the caller to hybridSearch. */
51
- async function physicsQueryVector(query, root, store, given) {
54
+ async function physicsQueryVector(query, root, store, deadline, given) {
52
55
  if (given && given.length > 0)
53
56
  return given;
54
57
  // Physics scores against particle positions, not the stored vector index, so a pruned index must not block it.
@@ -58,12 +61,12 @@ async function physicsQueryVector(query, root, store, given) {
58
61
  return null;
59
62
  if (indexNeedsRebuild(indexedModel(await requireVectorReads(store).embeddingIndexState()), provider.id))
60
63
  return null;
61
- const [vec] = await provider.embed([query], 'query');
64
+ const vec = await embedQueryBy(deadline, provider, query);
62
65
  return vec && vec.length > 0 ? vec : null;
63
66
  }
64
67
  catch (err) {
65
68
  rethrowIfSqliteBlocked(err);
66
- log.debug(`physics search: query embed failed, using hybrid: ${err instanceof Error ? err.message : String(err)}`);
69
+ log.debug(`physics search: query embed failed, using hybrid: ${errorMessage(err)}`);
67
70
  return null;
68
71
  }
69
72
  }
@@ -75,7 +78,7 @@ async function withVectorCandidates(reads, entries, queryVector, spec) {
75
78
  }
76
79
  catch (err) {
77
80
  rethrowIfSqliteBlocked(err);
78
- log.warn(`physics search ranked the lexical pool only; the vector lookup failed: ${err instanceof Error ? err.message : String(err)}`);
81
+ log.warn(`physics search ranked the lexical pool only; the vector lookup failed: ${errorMessage(err)}`);
79
82
  return entries;
80
83
  }
81
84
  }
@@ -86,7 +89,7 @@ async function loadCandidateParticles(reads, pool) {
86
89
  }
87
90
  catch (err) {
88
91
  rethrowIfSqliteBlocked(err);
89
- log.debug(`physics search: state load failed, using hybrid: ${err instanceof Error ? err.message : String(err)}`);
92
+ log.debug(`physics search: state load failed, using hybrid: ${errorMessage(err)}`);
90
93
  return null;
91
94
  }
92
95
  }
@@ -1,10 +1,10 @@
1
1
  import type { RerankerFn, RerankerOptions } from '../rerankers/types.js';
2
- import type { SearchResult } from './types.js';
2
+ import type { SearchResult } from '../core/search-types.js';
3
3
  /** MMR: repeatedly picks the candidate maximising lambda * relevance - (1 - lambda) * max(cos(cand, picked)).
4
4
  * Input must be sorted by relevance; strict `>` keeps ties first-wins, so a deterministic input stays deterministic. */
5
- export declare function mmrRerank(scored: SearchResult[], embeddingIndex: Record<string, number[]>, lambda: number, explain: boolean): SearchResult[];
5
+ export declare function mmrRerank(scored: SearchResult[], embeddingIndex: Record<string, ArrayLike<number>>, lambda: number, explain: boolean): SearchResult[];
6
6
  /** MMR over the top window only; the tail keeps its relevance order. */
7
- export declare function applyMmrWindow(scored: SearchResult[], embeddingIndex: Record<string, number[]>, lambda: number, explain: boolean): SearchResult[];
7
+ export declare function applyMmrWindow(scored: SearchResult[], embeddingIndex: Record<string, ArrayLike<number>>, lambda: number, explain: boolean): SearchResult[];
8
8
  /** Runs the reranker over the top `topK` (default 50) and stamps pre and post ranks; see src/rerankers/types.ts. */
9
9
  export declare function applyReranker(query: string, ordered: SearchResult[], reranker: RerankerFn, rerankerOptions?: RerankerOptions): Promise<SearchResult[]>;
10
10
  //# sourceMappingURL=rerank.d.ts.map