hippo-memory 1.69.0 → 1.70.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 (860) 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 +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  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/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -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) => {
@@ -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,7 +37,7 @@ 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;
@@ -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();
@@ -35,6 +37,6 @@ export function multihopSearch(query, entries, options = {}) {
35
37
  // PLAIN stable score sort on purpose -- pass1/pass2 inputs are
36
38
  // deterministically ordered (search() carries the content tail), stability
37
39
  // 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));
40
+ return fit([...merged.values()].sort((a, b) => compareScoresDesc(a.score, b.score)));
39
41
  }
40
42
  //# sourceMappingURL=multihop.js.map
@@ -1,3 +1,5 @@
1
+ // Keeps the last meaningful segments, the most specific ones.
2
+ const PATH_SEGMENTS_KEPT = 4;
1
3
  /**
2
4
  * Extract meaningful path segments from a directory path.
3
5
  * Returns tags like ['path:src', 'path:api', 'path:my-project'].
@@ -14,7 +16,7 @@ export function extractPathTags(dirPath) {
14
16
  ]);
15
17
  return segments
16
18
  .filter(s => s.length >= 2 && !noise.has(s.toLowerCase()))
17
- .slice(-4) // keep last 4 meaningful segments (most specific)
19
+ .slice(-PATH_SEGMENTS_KEPT)
18
20
  .map(s => `path:${s.toLowerCase()}`);
19
21
  }
20
22
  /**
@@ -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,21 @@
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 { indexedModel, indexNeedsRebuild } from '../store/embeddings/index.js';
5
+ import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
6
+ import { physicsScore as computePhysicsScores, computeMass } from '../core/physics.js';
7
+ import { DEFAULT_PHYSICS_CONFIG } from '../core/physics-config.js';
8
+ import { rethrowIfSqliteBlocked } from '../db/index.js';
9
+ import { compareScoredResults } from '../core/compare.js';
10
+ import { errorMessage, log } from '../util/log.js';
11
+ import { sqliteStore } from '../store/index.js';
12
12
  import { churnStaleFactor, summaryMultipliers, summaryScoring } from './boosts.js';
13
13
  import { addDagFields, ageInDays } from './breakdown.js';
14
14
  import { fitBudget } from './finalize.js';
15
15
  import { hybridSearch } from './hybrid.js';
16
16
  import { currentEntries } from './as-of.js';
17
17
  import { requireVectorReads, vectorCandidatesOutside } from './vector.js';
18
- import { DEFAULT_RECALL_BUDGET } from './types.js';
18
+ import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
19
19
  /** Scores memories by gravity, momentum and cluster amplification; rows without physics state rank through hybridSearch. */
20
20
  export async function physicsSearch(query, entries, options = {}) {
21
21
  const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
@@ -63,7 +63,7 @@ async function physicsQueryVector(query, root, store, given) {
63
63
  }
64
64
  catch (err) {
65
65
  rethrowIfSqliteBlocked(err);
66
- log.debug(`physics search: query embed failed, using hybrid: ${err instanceof Error ? err.message : String(err)}`);
66
+ log.debug(`physics search: query embed failed, using hybrid: ${errorMessage(err)}`);
67
67
  return null;
68
68
  }
69
69
  }
@@ -75,7 +75,7 @@ async function withVectorCandidates(reads, entries, queryVector, spec) {
75
75
  }
76
76
  catch (err) {
77
77
  rethrowIfSqliteBlocked(err);
78
- log.warn(`physics search ranked the lexical pool only; the vector lookup failed: ${err instanceof Error ? err.message : String(err)}`);
78
+ log.warn(`physics search ranked the lexical pool only; the vector lookup failed: ${errorMessage(err)}`);
79
79
  return entries;
80
80
  }
81
81
  }
@@ -86,7 +86,7 @@ async function loadCandidateParticles(reads, pool) {
86
86
  }
87
87
  catch (err) {
88
88
  rethrowIfSqliteBlocked(err);
89
- log.debug(`physics search: state load failed, using hybrid: ${err instanceof Error ? err.message : String(err)}`);
89
+ log.debug(`physics search: state load failed, using hybrid: ${errorMessage(err)}`);
90
90
  return null;
91
91
  }
92
92
  }
@@ -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
@@ -1,4 +1,5 @@
1
- import { cosineSimilarity } from '../embeddings.js';
1
+ import { cosineOf } from '../store/embeddings/index.js';
2
+ const DEFAULT_RERANK_TOP_K = 50;
2
3
  // MMR is O(K^2) cosine ops; candidates below this window never survive budget filtering anyway.
3
4
  const MMR_CANDIDATE_CAP = 100;
4
5
  /** MMR: repeatedly picks the candidate maximising lambda * relevance - (1 - lambda) * max(cos(cand, picked)).
@@ -39,7 +40,7 @@ function maxSimilarityToPicked(vi, picked, embeddingIndex) {
39
40
  const vp = embeddingIndex[p.entry.id];
40
41
  if (!vp || vp.length !== vi.length)
41
42
  continue;
42
- const sim = Math.max(0, cosineSimilarity(vi, vp));
43
+ const sim = Math.max(0, cosineOf(vi, vp));
43
44
  if (sim > maxSim)
44
45
  maxSim = sim;
45
46
  }
@@ -63,7 +64,7 @@ export function applyMmrWindow(scored, embeddingIndex, lambda, explain) {
63
64
  }
64
65
  /** Runs the reranker over the top `topK` (default 50) and stamps pre and post ranks; see src/rerankers/types.ts. */
65
66
  export async function applyReranker(query, ordered, reranker, rerankerOptions) {
66
- const topK = rerankerOptions?.topK ?? 50;
67
+ const topK = rerankerOptions?.topK ?? DEFAULT_RERANK_TOP_K;
67
68
  const head = ordered.slice(0, topK).map((r, i) => ({ ...r, preRerankRank: i + 1 }));
68
69
  const tail = ordered.slice(topK);
69
70
  const reranked = await reranker(query, head, { ...rerankerOptions, topK });
@@ -1,4 +1,4 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
2
  export type TemporalDirection = 'recent' | 'oldest' | null;
3
3
  export declare function detectTemporalDirection(query: string): TemporalDirection;
4
4
  export interface TemporalRange {
@@ -22,6 +22,9 @@ export function computeTemporalRange(entries) {
22
22
  }
23
23
  return { minTime, maxTime };
24
24
  }
25
+ // A temporal cue scales rank linearly across the pool time range, from the floor to floor + span.
26
+ const TEMPORAL_BOOST_FLOOR = 0.8;
27
+ const TEMPORAL_BOOST_SPAN = 0.4;
25
28
  export function temporalBoost(entry, direction, range) {
26
29
  if (!direction)
27
30
  return 1.0;
@@ -31,10 +34,10 @@ export function temporalBoost(entry, direction, range) {
31
34
  const entryTime = new Date(entry.created).getTime();
32
35
  const normalized = (entryTime - range.minTime) / span;
33
36
  if (direction === 'recent') {
34
- return 0.8 + 0.4 * normalized;
37
+ return TEMPORAL_BOOST_FLOOR + TEMPORAL_BOOST_SPAN * normalized;
35
38
  }
36
39
  else {
37
- return 0.8 + 0.4 * (1 - normalized);
40
+ return TEMPORAL_BOOST_FLOOR + TEMPORAL_BOOST_SPAN * (1 - normalized);
38
41
  }
39
42
  }
40
43
  /** The query's temporal cue and, only when there is one, the pool's time range. */
@@ -1,6 +1,6 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
2
  import type { VectorCandidateSpec } from '../store/search-rows.js';
3
- import { type HippoStore, type VectorReads } from '../store-port.js';
3
+ import { type HippoStore, type VectorReads } from '../store/index.js';
4
4
  import { type CurrentnessOptions } from './as-of.js';
5
5
  /** hybridSearch's vector arm: which rows it may add, plus the caller's JS admission rules (exact private regex, entry filters). */
6
6
  export type HybridVectorCandidates = VectorCandidateSpec & {
@@ -11,7 +11,7 @@ export interface VectorArm {
11
11
  entries: MemoryEntry[];
12
12
  addedRows: boolean;
13
13
  useEmbeddings: boolean;
14
- embeddingIndex: Record<string, number[]>;
14
+ embeddingIndex: Record<string, ArrayLike<number>>;
15
15
  queryVector: number[];
16
16
  }
17
17
  export interface VectorArmOptions extends CurrentnessOptions {
@@ -1,9 +1,9 @@
1
- import { cosineSimilarity, indexedModel, indexNeedsRebuild } from '../embeddings.js';
2
- import { resolveEmbeddingProvider } from '../embedding-provider.js';
3
- import { rethrowIfSqliteBlocked } from '../db.js';
4
- import { log } from '../log.js';
5
- import { requireGroup, sqliteStore } from '../store-port.js';
6
- import { redactSecretsStrict } from '../secret-detect.js';
1
+ import { cosineOf, indexedModel, indexNeedsRebuild } from '../store/embeddings/index.js';
2
+ import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
3
+ import { rethrowIfSqliteBlocked } from '../db/index.js';
4
+ import { errorMessage, log } from '../util/log.js';
5
+ import { requireGroup, sqliteStore } from '../store/index.js';
6
+ import { redactSecretsStrict } from '../util/secret-detect.js';
7
7
  import { currentEntries } from './as-of.js';
8
8
  // Search runs on every hook prompt, so one line per reason per process says why vectors went unused without flooding stderr.
9
9
  function warnBm25Fallback(reason, detail) {
@@ -23,7 +23,9 @@ export function requireVectorReads(store) {
23
23
  /** The nearest admitted rows not already in `entries`. */
24
24
  export async function vectorCandidatesOutside(reads, entries, queryVector, spec) {
25
25
  const inPool = new Set(entries.map((e) => e.id));
26
- return (await reads.nearestEntries(queryVector, spec)).filter((e) => !inPool.has(e.id) && (spec.admit?.(e) ?? true));
26
+ // The port takes data alone: `admit` is this side's rule, and a function cannot be sent to a store on another thread.
27
+ const { admit, ...stored } = spec;
28
+ return (await reads.nearestEntries(queryVector, stored)).filter((e) => !inPool.has(e.id) && (admit?.(e) ?? true));
27
29
  }
28
30
  /** Embeds the query and loads stored vectors; any failure leaves BM25 to rank alone. */
29
31
  export async function resolveVectorArm(query, entries, options) {
@@ -35,10 +37,14 @@ export async function resolveVectorArm(query, entries, options) {
35
37
  }
36
38
  catch (err) {
37
39
  rethrowIfSqliteBlocked(err);
38
- warnBm25Fallback('error', err instanceof Error ? err.message : String(err));
40
+ warnBm25Fallback('error', errorMessage(err));
39
41
  }
40
42
  return arm;
41
43
  }
44
+ // Views when the store has them, so a search copies no vector; the number[] copies score the same.
45
+ async function storedVectorsOf(store, reads, ids) {
46
+ return store.vectorViews ? store.vectorViews.storedVectorViews(ids) : reads.storedVectors(ids);
47
+ }
42
48
  async function fillVectorArm(arm, query, root, options) {
43
49
  const provider = resolveEmbeddingProvider(root);
44
50
  if (!provider.isAvailable())
@@ -51,7 +57,7 @@ async function fillVectorArm(arm, query, root, options) {
51
57
  return;
52
58
  }
53
59
  const spec = options.vectorCandidates;
54
- const vectors = await reads.storedVectors(arm.entries.map((e) => e.id));
60
+ const vectors = await storedVectorsOf(store, reads, arm.entries.map((e) => e.id));
55
61
  // Only spend a (possibly paid, off-box) query embedding when there is a stored vector this search can use.
56
62
  if (vectors.size === 0 && !(spec !== undefined && index.hasVectors))
57
63
  return;
@@ -65,7 +71,7 @@ async function fillVectorArm(arm, query, root, options) {
65
71
  if (added.length > 0) {
66
72
  arm.addedRows = true;
67
73
  arm.entries = currentEntries([...arm.entries, ...added], options);
68
- for (const [id, v] of await reads.storedVectors(added.map((e) => e.id)))
74
+ for (const [id, v] of await storedVectorsOf(store, reads, added.map((e) => e.id)))
69
75
  vectors.set(id, v);
70
76
  }
71
77
  arm.embeddingIndex = Object.fromEntries(vectors);
@@ -80,7 +86,7 @@ export function denseScores(arm) {
80
86
  for (let i = 0; i < n; i++) {
81
87
  const cached = arm.embeddingIndex[arm.entries[i].id];
82
88
  hadVec[i] = Boolean(cached && arm.queryVector.length > 0);
83
- cosine[i] = hadVec[i] ? Math.max(0, cosineSimilarity(arm.queryVector, cached)) : 0;
89
+ cosine[i] = hadVec[i] ? Math.max(0, cosineOf(arm.queryVector, cached)) : 0;
84
90
  }
85
91
  return { cosine, hadVec };
86
92
  }
@@ -1,5 +1,5 @@
1
1
  import type { IncomingMessage } from 'node:http';
2
- import { type Context } from '../api.js';
2
+ import { type Context } from '../api/index.js';
3
3
  import type { ResolvedServeOpts } from './types.js';
4
4
  /**
5
5
  * Recognise loopback remote addresses. Node reports IPv6-mapped IPv4 as
@@ -1,13 +1,13 @@
1
1
  // Bearer and loopback auth for the HTTP server.
2
- import { envRequireAuth } from '../env.js';
3
- import { resolveTenantId } from '../tenant.js';
4
- import { log } from '../log.js';
5
- import { API_KEY_PREFIX, verifyApiKeyCached } from '../auth.js';
6
- import { ownerOrSubject } from '../api.js';
7
- import { HttpError, isCrossSite, isHeaderString, LOOPBACK_HOST_HEADER, MAX_ID_LEN } from '../http-util.js';
8
- import { clientIpForRateLimit, subscriberKey } from './client-ip.js';
9
- import { requestIds } from './request.js';
10
- import { isJsonString } from '../json.js';
2
+ import { envRequireAuth } from '../util/env.js';
3
+ import { resolveTenantId } from '../store/tenant.js';
4
+ import { log } from '../util/log.js';
5
+ import { API_KEY_PREFIX, verifyApiKeyCached } from '../store/auth.js';
6
+ import { ownerOrSubject } from '../api/index.js';
7
+ import { HttpError, isCrossSite, isHeaderString, LOOPBACK_HOST_HEADER, MAX_ID_LEN } from '../util/http-util.js';
8
+ import { clientLimitKey } from './client-ip.js';
9
+ import { keyCheckBounds } from './key-check-bounds.js';
10
+ import { isJsonString } from '../util/json.js';
11
11
  /**
12
12
  * Recognise loopback remote addresses. Node reports IPv6-mapped IPv4 as
13
13
  * '::ffff:127.0.0.1' on dual-stack sockets, so we accept that alongside
@@ -27,6 +27,7 @@ export function isLoopback(remoteAddress) {
27
27
  // A proxy on this host (nginx, Caddy, cloudflared) connects from loopback, so these headers mean the caller is not local.
28
28
  const PROXY_HEADERS = [
29
29
  'forwarded', 'x-forwarded-for', 'x-forwarded-host', 'x-forwarded-proto', 'x-real-ip', 'cf-connecting-ip', 'true-client-ip',
30
+ 'fly-client-ip',
30
31
  ];
31
32
  // A browser on this machine is loopback too, so the no-key fallback also needs a local Host and a same-site caller.
32
33
  function assertLocalCaller(req) {
@@ -35,7 +36,7 @@ function assertLocalCaller(req) {
35
36
  const proxyHeader = PROXY_HEADERS.find((name) => req.headers[name] !== undefined);
36
37
  if (proxyHeader !== undefined) {
37
38
  log.warn(`proxied loopback request refused: it carries ${proxyHeader}, so the no-key local fallback does not apply. ` +
38
- 'Send an API key (hippo auth create, then Authorization: Bearer hk_...).', { requestId: requestIds.get(req) });
39
+ 'Send an API key (hippo auth create, then Authorization: Bearer hk_...).');
39
40
  throw new HttpError(401, 'auth required');
40
41
  }
41
42
  const host = req.headers.host;
@@ -140,7 +141,7 @@ const DEFAULT_RESOLVER_DEADLINE_MS = 5000;
140
141
  function chargeScryptRun(req, opts) {
141
142
  const limiter = opts.failedAuthLimiter;
142
143
  // Reserving rather than peeking bounds scrypt runs exactly, even when concurrent misses await a slow store.
143
- if (limiter && !limiter.check(subscriberKey(clientIpForRateLimit(req)))) {
144
+ if (limiter && !limiter.check(clientLimitKey(req))) {
144
145
  throw new HttpError(429, 'too many key checks from this address', limiter.retryAfterSec);
145
146
  }
146
147
  }
@@ -153,7 +154,12 @@ async function resolveBearer(req, token, opts) {
153
154
  const clean = await askResolver(opts.authResolver, token, deadlineMs);
154
155
  return { ...clean, viaAuthResolver: true, owner: clean.subject }; // a resolver vouches for a person, never names one
155
156
  }
156
- const key = await verifyApiKeyCached(opts.hippoRoot, token, opts.store, () => chargeScryptRun(req, opts));
157
+ const key = await verifyApiKeyCached(token, opts.store, (keyId, derive) => {
158
+ // The key's own bucket first, so a flood on one key id ends at its five tries and leaves the address's budget to the callers who share it.
159
+ keyChecks.admit(keyId, clientLimitKey(req));
160
+ chargeScryptRun(req, opts);
161
+ return keyChecks.run(derive);
162
+ });
157
163
  if (!key)
158
164
  throw new HttpError(401, 'invalid api key');
159
165
  const id = { tenantId: key.tenantId, subject: `api_key:${key.keyId}`, role: key.role, scopes: key.scopes };
@@ -189,9 +195,11 @@ function bearerActor(id) {
189
195
  }
190
196
  /** Key cap for every serve() bucket, shared by the warn map so it never tracks more callers than the buckets do. */
191
197
  export const LIMITER_MAX_KEYS = 10_000;
198
+ // One for the process, as the thread pool its derivations run on is.
199
+ const keyChecks = keyCheckBounds(LIMITER_MAX_KEYS);
192
200
  const CALLER_WARN_EVERY_MS = 60_000;
193
201
  const callerWarnedAt = new Map();
194
- function warnCallerLimited(req, key, tenantId, person) {
202
+ function warnCallerLimited(key, tenantId, person) {
195
203
  const now = Date.now();
196
204
  const last = callerWarnedAt.get(key);
197
205
  if (last !== undefined && now - last < CALLER_WARN_EVERY_MS)
@@ -203,9 +211,9 @@ function warnCallerLimited(req, key, tenantId, person) {
203
211
  callerWarnedAt.delete(oldest.value);
204
212
  }
205
213
  callerWarnedAt.set(key, now);
206
- log.warn('caller over its rate limit; its further 429s this minute are not logged', { tenant: tenantId, person, requestId: requestIds.get(req) });
214
+ log.warn('caller over its rate limit; its further 429s this minute are not logged', { tenant: tenantId, person });
207
215
  }
208
- function chargeCaller(req, tenantId, actor, opts) {
216
+ function chargeCaller(tenantId, actor, opts) {
209
217
  const limiter = opts.callerLimiter;
210
218
  if (!limiter)
211
219
  return;
@@ -213,7 +221,7 @@ function chargeCaller(req, tenantId, actor, opts) {
213
221
  const key = `${tenantId}\u0000${person}`;
214
222
  if (limiter.check(key))
215
223
  return;
216
- warnCallerLimited(req, key, tenantId, person);
224
+ warnCallerLimited(key, tenantId, person);
217
225
  throw new HttpError(429, 'rate limit exceeded for this caller', limiter.retryAfterSec);
218
226
  }
219
227
  /**
@@ -226,7 +234,7 @@ export async function buildContextWithAuth(req, opts) {
226
234
  const id = await checkAuth(req, opts);
227
235
  if (id !== null) {
228
236
  const actor = bearerActor(id);
229
- chargeCaller(req, id.tenantId, actor, opts);
237
+ chargeCaller(id.tenantId, actor, opts);
230
238
  return { hippoRoot: opts.hippoRoot, tenantId: id.tenantId, actor, store: opts.store };
231
239
  }
232
240
  // Loopback fallback is process-local, treat as admin.
@@ -246,7 +254,7 @@ export async function buildContextWithAuth(req, opts) {
246
254
  export async function requireAuth(req, opts) {
247
255
  const id = await checkAuth(req, opts);
248
256
  if (id !== null)
249
- chargeCaller(req, id.tenantId, bearerActor(id), opts);
257
+ chargeCaller(id.tenantId, bearerActor(id), opts);
250
258
  }
251
259
  /** Never rejects or charges a caller bucket: an outage (5xx) or a throttle (429) skips one tick; only a definite 4xx denial closes the stream. */
252
260
  export async function heartbeatVerdict(req, opts) {
@@ -0,0 +1,24 @@
1
+ import type { ServeOpts, ServerHandle } from './types.js';
2
+ /**
3
+ * Boot the HTTP daemon on host:port and write the pidfile under hippoRoot.
4
+ *
5
+ * Refuses non-loopback hosts at boot unless
6
+ * HIPPO_REQUIRE_AUTH=1 is set. The auth middleware (buildContextWithAuth /
7
+ * requireAuth) has shipped and every route checks it except GET /health
8
+ * (public by design for platform health checks) and the two connector
9
+ * webhooks in PUBLIC_ROUTES, which are HMAC-gated by their own signing
10
+ * secrets and 404 when those secrets are unset, and any publicJson GET path. But the loopback
11
+ * no-auth fallback inside buildContextWithAuth still admits unauthenticated
12
+ * requests from a loopback remote address (unless they carry Forwarded,
13
+ * X-Forwarded-For/-Host/-Proto, X-Real-IP, Cf-Connecting-Ip, True-Client-Ip or Fly-Client-Ip, which mark a same-host proxy and get
14
+ * a 401 like any keyless remote request), so binding to a non-loopback host
15
+ * is only safe once that fallback is disabled with HIPPO_REQUIRE_AUTH=1,
16
+ * which forces every request (loopback or not) through Bearer-token
17
+ * validation. Without that env var set, a non-loopback bind would expose the
18
+ * DB to the network with no auth, so we fail fast instead.
19
+ *
20
+ * Use port: 0 in tests to bind to an ephemeral port and read the actual
21
+ * port back via server.address() after listen.
22
+ */
23
+ export declare function serve(opts: ServeOpts): Promise<ServerHandle>;
24
+ //# sourceMappingURL=boot.d.ts.map