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,10 +1,13 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { pathToFileURL } from 'node:url';
3
- import { log } from '../log.js';
3
+ import { createOutageWarning } from './outage-warning.js';
4
+ import { compareScoresDesc } from '../core/compare.js';
5
+ import { errorMessage, log } from '../util/log.js';
6
+ const DEFAULT_CROSS_ENCODER_TOP_K = 50;
4
7
  const MODEL_NAME = 'Xenova/ms-marco-MiniLM-L-6-v2';
5
8
  const _require = createRequire(import.meta.url);
6
9
  const TRANSFORMERS_PACKAGES = ['@huggingface/transformers', '@xenova/transformers'];
7
- // Returns the ESM entry URL, the same build src/embeddings.ts imports. A
10
+ // Returns the ESM entry URL, the same build src/store/embeddings/index.ts imports. A
8
11
  // require-style resolve picks the CommonJS build and puts a second copy of
9
12
  // the library, with its own ONNX sessions, in the process.
10
13
  function resolveTransformersPackage() {
@@ -38,21 +41,12 @@ async function loadTransformersModule() {
38
41
  return tok && seq ? { AutoTokenizer: tok, AutoModelForSequenceClassification: seq } : null;
39
42
  }
40
43
  catch (err) {
41
- log.debug(`cross-encoder: transformers import failed: ${err instanceof Error ? err.message : String(err)}`);
44
+ log.debug(`cross-encoder: transformers import failed: ${errorMessage(err)}`);
42
45
  return null;
43
46
  }
44
47
  }
45
48
  let pipelineLoading = null;
46
- let warnedOnFallback = false;
47
- /**
48
- * True if a Transformers.js backend is importable. Note: this does NOT confirm
49
- * that the model is downloadable from Hugging Face CDN — in sandboxed
50
- * environments the package may import but the model fetch may be blocked.
51
- * The reranker silently falls back to identity ordering in that case.
52
- */
53
- export async function isCrossEncoderAvailable() {
54
- return (await loadTransformersModule()) !== null;
55
- }
49
+ const outage = createOutageWarning('cross-encoder', 'falling back to identity ordering');
56
50
  // NOT the text-classification pipeline: this model is a num_labels=1
57
51
  // regression head, and that pipeline softmaxes a length-1 logit vector, which
58
52
  // is identically 1.0 for every input. Read the logit, then squash it.
@@ -81,7 +75,7 @@ async function buildPipeline() {
81
75
  };
82
76
  }
83
77
  catch (err) {
84
- log.debug(`cross-encoder: model load failed: ${err instanceof Error ? err.message : String(err)}`);
78
+ log.debug(`cross-encoder: model load failed: ${errorMessage(err)}`);
85
79
  return null;
86
80
  }
87
81
  }
@@ -97,16 +91,12 @@ function loadPipeline() {
97
91
  }
98
92
  /** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. */
99
93
  export const crossEncoderReranker = async (query, results, options) => {
100
- const topK = options?.topK ?? 50;
94
+ const topK = options?.topK ?? DEFAULT_CROSS_ENCODER_TOP_K;
101
95
  const head = results.slice(0, topK);
102
96
  const pipe = await loadPipeline();
103
97
  if (!pipe) {
104
- // Warn once per process: a silent identity fallback otherwise reads as a
105
- // working reranker.
106
- if (!warnedOnFallback) {
107
- warnedOnFallback = true;
108
- log.warn('cross-encoder reranker unavailable (no Transformers.js backend, or model fetch blocked); falling back to identity ordering. Subsequent calls will not repeat this warning.');
109
- }
98
+ // A silent identity fallback otherwise reads as a working reranker.
99
+ outage.failed('no Transformers.js backend, or model fetch blocked');
110
100
  return head.map((r, i) => ({
111
101
  ...r,
112
102
  rerankScore: r.score,
@@ -114,13 +104,15 @@ export const crossEncoderReranker = async (query, results, options) => {
114
104
  postRerankRank: i + 1,
115
105
  }));
116
106
  }
107
+ outage.answered();
117
108
  const scored = await Promise.all(head.map(async (r, i) => {
118
109
  let ceScore;
119
110
  try {
120
111
  ceScore = await pipe(query, r.entry.content);
121
112
  }
122
- catch {
113
+ catch (err) {
123
114
  // One bad inference must not sink the whole pass.
115
+ log.debug(`cross-encoder inference failed, keeping the base score: ${errorMessage(err)}`);
124
116
  ceScore = r.score;
125
117
  }
126
118
  return {
@@ -132,7 +124,7 @@ export const crossEncoderReranker = async (query, results, options) => {
132
124
  }));
133
125
  // Plain stable sort on purpose: tied scores MUST fall back to the prior
134
126
  // relevance order, never an arbitrary content order.
135
- scored.sort((a, b) => b.rerankScore - a.rerankScore);
127
+ scored.sort((a, b) => compareScoresDesc(a.rerankScore, b.rerankScore));
136
128
  scored.forEach((r, i) => (r.postRerankRank = i + 1));
137
129
  return scored;
138
130
  };
@@ -1,13 +1,14 @@
1
- import { clefFlashReranker, clefReranker } from './clef.js';
1
+ import { createClefReranker } from './clef.js';
2
2
  import { crossEncoderReranker } from './cross-encoder.js';
3
- import { jevReranker } from './jev.js';
4
- import { llmReranker } from './llm.js';
3
+ import { createJevReranker } from './jev.js';
4
+ import { createLlmReranker } from './llm.js';
5
+ // Each hosted reranker is built once here, so its outage warning lasts the process.
5
6
  const REGISTRY = {
6
- clef: clefReranker,
7
- 'clef-flash': clefFlashReranker,
7
+ clef: createClefReranker('clef'),
8
+ 'clef-flash': createClefReranker('clef-flash'),
8
9
  'cross-encoder': crossEncoderReranker,
9
- jev: jevReranker,
10
- llm: llmReranker,
10
+ jev: createJevReranker(crossEncoderReranker),
11
+ llm: createLlmReranker(),
11
12
  };
12
13
  function isRegisteredRerankerName(name) {
13
14
  return Object.hasOwn(REGISTRY, name);
@@ -1,5 +1,5 @@
1
1
  import type { RerankerFn, RerankResult } from './types.js';
2
- import type { SearchResult } from '../search/types.js';
2
+ import type { SearchResult } from '../core/search-types.js';
3
3
  export declare const JEV_DEFAULT_TOP_K = 40;
4
4
  /** The System One `state` and one `noul` question per candidate (`c1`..`cN`). */
5
5
  export interface RelevanceRequest {
@@ -15,7 +15,4 @@ export declare function buildRelevanceRequest(query: string, head: readonly Sear
15
15
  export declare function createJevReranker(localFallback: RerankerFn): RerankerFn;
16
16
  /** Orders `head` by `scores[i]`, keeping any upstream pre-rerank rank. Shared with CLEF. */
17
17
  export declare function rankByScores(head: readonly SearchResult[], scores: readonly number[]): RerankResult[];
18
- /** Track 4 reranker: hosted TypeSafe Jev, opt-in and paid (TYPESAFE_API_KEY), one batched call per recall.
19
- * Any failure warns once and delegates to the local cross-encoder. Scores are not bit-stable run to run. */
20
- export declare const jevReranker: RerankerFn;
21
18
  //# sourceMappingURL=jev.d.ts.map
@@ -1,7 +1,10 @@
1
- import { envJevModel, envJevTimeoutMs, envTypesafeApiKey } from '../env.js';
2
- import { crossEncoderReranker } from './cross-encoder.js';
3
- import { redactSecretsStrict } from '../secret-detect.js';
4
- import { log } from '../log.js';
1
+ import { envJevModel, envJevTimeoutMs, envTypesafeApiKey } from '../util/env.js';
2
+ import { redactSecretsStrict } from '../util/secret-detect.js';
3
+ import { createOutageWarning } from './outage-warning.js';
4
+ import { rerankerPost } from './remote.js';
5
+ import { compareScoresDesc } from '../core/compare.js';
6
+ import { errorMessage } from '../util/log.js';
7
+ const REQUEST_ID_MAX_CHARS = 64;
5
8
  const ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
6
9
  const DEFAULT_TIMEOUT_MS = 5_000;
7
10
  const TRUNCATE_CHARS = 1200;
@@ -50,45 +53,29 @@ async function requestScores(query, head) {
50
53
  if (!key)
51
54
  throw new Error('TYPESAFE_API_KEY not set');
52
55
  const { state, questions } = buildRelevanceRequest(query, head);
53
- const timeoutMs = envJevTimeoutMs() ?? DEFAULT_TIMEOUT_MS;
54
- const controller = new AbortController();
55
- const timer = setTimeout(() => controller.abort(), timeoutMs);
56
- try {
57
- const resp = await fetch(ENDPOINT, {
58
- method: 'POST',
59
- headers: { 'content-type': 'application/json', authorization: `Bearer ${key}` },
60
- body: JSON.stringify({
61
- state,
62
- model: envJevModel() ?? DEFAULT_MODEL,
63
- questions,
64
- }),
65
- signal: controller.signal,
66
- });
67
- if (!resp.ok) {
68
- // A third-party header ends up on stderr, so keep printable ASCII only.
69
- const requestId = resp.headers.get('x-request-id')?.replace(/[^\x20-\x7e]/g, '').slice(0, 64);
70
- await resp.body?.cancel();
71
- throw new Error(`HTTP ${resp.status}${requestId ? `, request ${requestId}` : ''}`);
72
- }
73
- const body = await resp.json();
74
- const scores = parseScores(body.answers, head.length);
75
- if (!scores)
76
- throw new Error('incomplete or out-of-range answers');
77
- return scores;
78
- }
79
- catch (err) {
80
- if (err instanceof Error && err.name === 'AbortError') {
81
- throw new Error(`no answer within ${timeoutMs} ms`);
82
- }
83
- throw err;
84
- }
85
- finally {
86
- clearTimeout(timer);
56
+ const resp = await rerankerPost(ENDPOINT, {
57
+ headers: { 'content-type': 'application/json', authorization: `Bearer ${key}` },
58
+ body: JSON.stringify({
59
+ state,
60
+ model: envJevModel() ?? DEFAULT_MODEL,
61
+ questions,
62
+ }),
63
+ }, envJevTimeoutMs() ?? DEFAULT_TIMEOUT_MS);
64
+ if (!resp.ok) {
65
+ // A third-party header ends up on stderr, so keep printable ASCII only.
66
+ const requestId = resp.headers.get('x-request-id')?.replace(/[^\x20-\x7e]/g, '').slice(0, REQUEST_ID_MAX_CHARS);
67
+ await resp.body?.cancel();
68
+ throw new Error(`HTTP ${resp.status}${requestId ? `, request ${requestId}` : ''}`);
87
69
  }
70
+ const body = await resp.json();
71
+ const scores = parseScores(body.answers, head.length);
72
+ if (!scores)
73
+ throw new Error('incomplete or out-of-range answers');
74
+ return scores;
88
75
  }
89
76
  /** Builds a Jev reranker around the reranker it degrades to. Exported so a test can pass a stand-in. */
90
77
  export function createJevReranker(localFallback) {
91
- let warned = false;
78
+ const outage = createOutageWarning('jev', 'falling back to the local cross-encoder');
92
79
  return async (query, results, options) => {
93
80
  const head = results.slice(0, options?.topK ?? JEV_DEFAULT_TOP_K);
94
81
  if (head.length === 0)
@@ -96,15 +83,12 @@ export function createJevReranker(localFallback) {
96
83
  let scores;
97
84
  try {
98
85
  scores = await requestScores(query, head);
86
+ outage.answered();
99
87
  }
100
88
  catch (err) {
101
89
  // A read path never throws, and never hands back the unranked order
102
- // without saying so: warn once, then use the free local reranker.
103
- if (!warned) {
104
- warned = true;
105
- const reason = err instanceof Error ? err.message : 'unknown error';
106
- log.warn(`jev reranker unavailable (${reason}); falling back to the local cross-encoder. Subsequent calls will not repeat this warning.`);
107
- }
90
+ // without saying so: warn, then use the free local reranker.
91
+ outage.failed(errorMessage(err));
108
92
  return localFallback(query, head, options);
109
93
  }
110
94
  return rankByScores(head, scores);
@@ -119,11 +103,8 @@ export function rankByScores(head, scores) {
119
103
  postRerankRank: 0,
120
104
  }));
121
105
  // Stable sort: ties fall back to the prior relevance order.
122
- scored.sort((a, b) => b.rerankScore - a.rerankScore);
106
+ scored.sort((a, b) => compareScoresDesc(a.rerankScore, b.rerankScore));
123
107
  scored.forEach((r, i) => (r.postRerankRank = i + 1));
124
108
  return scored;
125
109
  }
126
- /** Track 4 reranker: hosted TypeSafe Jev, opt-in and paid (TYPESAFE_API_KEY), one batched call per recall.
127
- * Any failure warns once and delegates to the local cross-encoder. Scores are not bit-stable run to run. */
128
- export const jevReranker = createJevReranker(crossEncoderReranker);
129
110
  //# sourceMappingURL=jev.js.map
@@ -6,11 +6,9 @@ import type { RerankerFn } from './types.js';
6
6
  *
7
7
  * Skeleton only; full characterisation is deferred.
8
8
  *
9
- * Timeout: defaults to 30s; overridable via HIPPO_LLM_RERANKER_TIMEOUT_MS.
10
- * On timeout or any fetch failure, the reranker warns once per process and
9
+ * Timeout: defaults to 30s for the whole call, retries included; overridable
10
+ * via HIPPO_LLM_RERANKER_TIMEOUT_MS. On timeout or any failure the reranker
11
11
  * falls back to identity ordering; recall must not hang on a wedged endpoint.
12
12
  */
13
13
  export declare function createLlmReranker(): RerankerFn;
14
- /** The instance the reranker registry serves; its warn-once flag lasts the process. */
15
- export declare const llmReranker: RerankerFn;
16
14
  //# sourceMappingURL=llm.d.ts.map
@@ -1,6 +1,9 @@
1
- import { envLlmRerankerKey, envLlmRerankerModel, envLlmRerankerTimeoutMs, envLlmRerankerUrl } from '../env.js';
2
- import { redactSecretsStrict } from '../secret-detect.js';
3
- import { log } from '../log.js';
1
+ import { envLlmRerankerKey, envLlmRerankerModel, envLlmRerankerTimeoutMs, envLlmRerankerUrl } from '../util/env.js';
2
+ import { redactSecretsStrict } from '../util/secret-detect.js';
3
+ import { createOutageWarning } from './outage-warning.js';
4
+ import { rerankerPost } from './remote.js';
5
+ import { errorMessage } from '../util/log.js';
6
+ const DEFAULT_LLM_RERANK_TOP_K = 20;
4
7
  const DEFAULT_TIMEOUT_MS = 30_000;
5
8
  /**
6
9
  * Track 3 reranker: listwise LLM rerank. Uses a customer-supplied
@@ -9,29 +12,26 @@ const DEFAULT_TIMEOUT_MS = 30_000;
9
12
  *
10
13
  * Skeleton only; full characterisation is deferred.
11
14
  *
12
- * Timeout: defaults to 30s; overridable via HIPPO_LLM_RERANKER_TIMEOUT_MS.
13
- * On timeout or any fetch failure, the reranker warns once per process and
15
+ * Timeout: defaults to 30s for the whole call, retries included; overridable
16
+ * via HIPPO_LLM_RERANKER_TIMEOUT_MS. On timeout or any failure the reranker
14
17
  * falls back to identity ordering; recall must not hang on a wedged endpoint.
15
18
  */
16
19
  export function createLlmReranker() {
17
- let warned = false;
20
+ const outage = createOutageWarning('llm', 'keeping the input order');
18
21
  return async (query, results, options) => {
19
22
  const url = envLlmRerankerUrl();
20
23
  if (!url) {
21
24
  throw new Error('HIPPO_LLM_RERANKER_URL not set; refusing to run LLM reranker.');
22
25
  }
23
- const head = results.slice(0, options?.topK ?? 20);
26
+ const head = results.slice(0, options?.topK ?? DEFAULT_LLM_RERANK_TOP_K);
24
27
  let permutation = null;
25
28
  try {
26
29
  permutation = await requestPermutation(url, query, head);
30
+ outage.answered();
27
31
  }
28
32
  catch (err) {
29
33
  // A read path never throws, and never hands back the unranked order without saying so.
30
- if (!warned) {
31
- warned = true;
32
- const reason = err instanceof Error ? err.message : 'unknown error';
33
- log.warn(`llm reranker unavailable (${reason}); keeping the input order. Subsequent calls will not repeat this warning.`);
34
- }
34
+ outage.failed(errorMessage(err));
35
35
  }
36
36
  const ordered = permutation ? permutation.map((idx) => head[idx]) : head;
37
37
  return ordered.map((r, i) => ({
@@ -42,8 +42,6 @@ export function createLlmReranker() {
42
42
  }));
43
43
  };
44
44
  }
45
- /** The instance the reranker registry serves; its warn-once flag lasts the process. */
46
- export const llmReranker = createLlmReranker();
47
45
  /** One chat-completions call; rejects with the reason when the reply holds no usable permutation. */
48
46
  async function requestPermutation(url, query, head) {
49
47
  const key = envLlmRerankerKey();
@@ -53,48 +51,33 @@ async function requestPermutation(url, query, head) {
53
51
  ...head.map((r, i) => `[${i}] ${redactSecretsStrict(r.entry.content)}`),
54
52
  `Output format: [<int>, <int>, ...] with all ${head.length} indices.`,
55
53
  ].join('\n');
56
- const timeoutMs = envLlmRerankerTimeoutMs() ?? DEFAULT_TIMEOUT_MS;
57
- const controller = new AbortController();
58
- const timer = setTimeout(() => controller.abort(), timeoutMs);
59
54
  const headers = {
60
55
  'content-type': 'application/json',
61
56
  };
62
57
  if (key) {
63
58
  headers.authorization = `Bearer ${key}`;
64
59
  }
65
- try {
66
- const resp = await fetch(`${url.replace(/\/$/, '')}/chat/completions`, {
67
- method: 'POST',
68
- headers: { ...headers },
69
- body: JSON.stringify({
70
- model: envLlmRerankerModel() ?? 'gpt-4o-mini',
71
- messages: [{ role: 'user', content: prompt }],
72
- temperature: 0,
73
- }),
74
- signal: controller.signal,
75
- });
76
- if (!resp.ok) {
77
- await resp.body?.cancel();
78
- throw new Error(`HTTP ${resp.status}`);
79
- }
80
- const j = await resp.json();
81
- const txt = j.choices?.[0]?.message?.content ?? '';
82
- const m = txt.match(/\[\s*(\d+(?:\s*,\s*\d+)*)\s*\]/);
83
- const parsed = m ? m[1].split(',').map((s) => parseInt(s.trim(), 10)) : [];
84
- const isPermutation = parsed.length === head.length &&
85
- parsed.every((n) => Number.isInteger(n) && n >= 0 && n < head.length) &&
86
- new Set(parsed).size === head.length;
87
- if (!isPermutation)
88
- throw new Error('reply is not a permutation of the candidates');
89
- return parsed;
90
- }
91
- catch (err) {
92
- if (err instanceof Error && err.name === 'AbortError')
93
- throw new Error(`no answer within ${timeoutMs} ms`);
94
- throw err;
95
- }
96
- finally {
97
- clearTimeout(timer);
60
+ const resp = await rerankerPost(`${url.replace(/\/$/, '')}/chat/completions`, {
61
+ headers: { ...headers },
62
+ body: JSON.stringify({
63
+ model: envLlmRerankerModel() ?? 'gpt-4o-mini',
64
+ messages: [{ role: 'user', content: prompt }],
65
+ temperature: 0,
66
+ }),
67
+ }, envLlmRerankerTimeoutMs() ?? DEFAULT_TIMEOUT_MS);
68
+ if (!resp.ok) {
69
+ await resp.body?.cancel();
70
+ throw new Error(`HTTP ${resp.status}`);
98
71
  }
72
+ const j = await resp.json();
73
+ const txt = j.choices?.[0]?.message?.content ?? '';
74
+ const m = txt.match(/\[\s*(\d+(?:\s*,\s*\d+)*)\s*\]/);
75
+ const parsed = m ? m[1].split(',').map((s) => parseInt(s.trim(), 10)) : [];
76
+ const isPermutation = parsed.length === head.length &&
77
+ parsed.every((n) => Number.isInteger(n) && n >= 0 && n < head.length) &&
78
+ new Set(parsed).size === head.length;
79
+ if (!isPermutation)
80
+ throw new Error('reply is not a permutation of the candidates');
81
+ return parsed;
99
82
  }
100
83
  //# sourceMappingURL=llm.js.map
@@ -0,0 +1,7 @@
1
+ export interface OutageWarning {
2
+ failed(reason: string): void;
3
+ answered(): void;
4
+ }
5
+ /** Warns when `name` starts failing, at most every five minutes while it keeps failing, and once when it answers again. `fallback` says what recall does meanwhile. */
6
+ export declare function createOutageWarning(name: string, fallback: string): OutageWarning;
7
+ //# sourceMappingURL=outage-warning.d.ts.map
@@ -0,0 +1,31 @@
1
+ // One way for a reranker to report that it stopped working, without a line per recall.
2
+ import { log } from '../util/log.js';
3
+ const REPEAT_MS = 5 * 60_000;
4
+ /** Warns when `name` starts failing, at most every five minutes while it keeps failing, and once when it answers again. `fallback` says what recall does meanwhile. */
5
+ export function createOutageWarning(name, fallback) {
6
+ let failures = 0;
7
+ let unreported = 0;
8
+ let warnedAt = 0;
9
+ return {
10
+ failed(reason) {
11
+ failures++;
12
+ if (failures > 1 && Date.now() - warnedAt < REPEAT_MS) {
13
+ unreported++;
14
+ return;
15
+ }
16
+ const skipped = unreported > 0 ? ` ${unreported} more calls failed since the last warning.` : '';
17
+ log.warn(`${name} reranker unavailable (${reason}); ${fallback}.${skipped} While it fails this repeats at most every ${REPEAT_MS / 60_000} minutes.`);
18
+ warnedAt = Date.now();
19
+ unreported = 0;
20
+ },
21
+ answered() {
22
+ if (failures === 0)
23
+ return;
24
+ // At warn so it shows at the default level, next to the outage line it closes.
25
+ log.warn(`${name} reranker is answering again after ${failures} failed ${failures === 1 ? 'call' : 'calls'}.`);
26
+ failures = 0;
27
+ unreported = 0;
28
+ },
29
+ };
30
+ }
31
+ //# sourceMappingURL=outage-warning.js.map
@@ -0,0 +1,3 @@
1
+ /** POST a scoring request. A dropped connection, 429 or 5xx is retried, since scoring changes nothing on the far side. */
2
+ export declare function rerankerPost(url: string, init: RequestInit, budgetMs: number): Promise<Response>;
3
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1,23 @@
1
+ // The one bounded, retried POST every remote reranker sends.
2
+ import { fetchWithRetry } from '../util/http-retry.js';
3
+ // A Retry-After longer than this would outlast most budgets, so the answer is handed back and the reranker falls back.
4
+ const RETRY_WAIT_CAP_MS = 2_000;
5
+ /** POST a scoring request. A dropped connection, 429 or 5xx is retried, since scoring changes nothing on the far side. */
6
+ export async function rerankerPost(url, init, budgetMs) {
7
+ // The budget bounds the whole call, retries included, so recall never waits past the configured timeout.
8
+ const budget = AbortSignal.timeout(budgetMs);
9
+ try {
10
+ return await fetchWithRetry(url, { ...init, method: 'POST', signal: budget }, {
11
+ timeoutMs: budgetMs,
12
+ retryTransport: true,
13
+ maxDelayMs: RETRY_WAIT_CAP_MS,
14
+ });
15
+ }
16
+ catch (err) {
17
+ if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {
18
+ throw new Error(`no answer within ${budgetMs} ms`, { cause: err });
19
+ }
20
+ throw err;
21
+ }
22
+ }
23
+ //# sourceMappingURL=remote.js.map
@@ -1,4 +1,4 @@
1
- import type { SearchResult } from '../search/types.js';
1
+ import type { SearchResult } from '../core/search-types.js';
2
2
  /**
3
3
  * A reranker reorders (and optionally rescales) the candidate set produced
4
4
  * by hybridSearch's BM25 + cosine + MMR pipeline. Rerankers run AFTER MMR
@@ -1,4 +1,4 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
2
  export interface CurrentnessOptions {
3
3
  /** Keep only rows current at this ISO date string. */
4
4
  asOf?: string;
@@ -1,5 +1,5 @@
1
- import type { MemoryEntry } from '../memory.js';
2
- import { type ResultCost, type SearchResult } from './types.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import { type ResultCost, type SearchResult } from '../core/search-types.js';
3
3
  export interface SearchOptions {
4
4
  budget?: number;
5
5
  now?: Date;
@@ -1,15 +1,15 @@
1
- import { estimateTokens } from '../token-ledger.js';
2
- import { tokenize } from '../tokenize.js';
3
- import { evalNow } from '../ablation.js';
4
- import { extractPathTags } from '../path-context.js';
5
- import { detectScope } from '../scope.js';
6
- import { compareScoredResults } from '../compare.js';
1
+ import { estimateTokens } from '../util/token-text.js';
2
+ import { tokenize } from '../util/tokenize.js';
3
+ import { evalNow } from '../core/ablation.js';
4
+ import { extractPathTags } from './path-context.js';
5
+ import { detectScope } from '../sharing/scope.js';
6
+ import { compareScoredResults } from '../core/compare.js';
7
7
  import { bm25Score, buildCorpus, entryText } from './bm25.js';
8
8
  import { currentEntries } from './as-of.js';
9
9
  import { applyRankBoosts, strengthRecencyMultipliers, NO_SUMMARY_SCORING } from './boosts.js';
10
10
  import { temporalContext } from './temporal.js';
11
11
  import { dedupeExtracted, fitBudget, withDagChildren } from './finalize.js';
12
- import { DEFAULT_RECALL_BUDGET } from './types.js';
12
+ import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
13
13
  /** Synchronous BM25 search: relevance * strength * recency and the rank boosts, without embeddings or the outcome nudge. */
14
14
  export function search(query, entries, options = {}) {
15
15
  const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
@@ -1,4 +1,4 @@
1
- import type { MemoryEntry } from '../memory.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
2
  /** Tokenized BM25 corpus; build it once with `buildCorpus` and reuse it across queries on the same entry set. */
3
3
  export interface BM25Corpus {
4
4
  docs: string[][];
@@ -1,4 +1,4 @@
1
- import { tokenize } from '../tokenize.js';
1
+ import { tokenize } from '../util/tokenize.js';
2
2
  const BM25_K1 = 1.5;
3
3
  const BM25_B = 0.75;
4
4
  /** The text BM25 indexes for an entry: its content followed by its tags. */
@@ -1,6 +1,8 @@
1
- import { type MemoryEntry } from '../memory.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
2
  import { type TemporalDirection, type TemporalRange } from './temporal.js';
3
3
  export declare const CHURN_STALE_RANK_MULTIPLIER = 0.5;
4
+ export declare const STRENGTH_RANK_FLOOR = 0.5;
5
+ export declare const STRENGTH_RANK_SPAN = 0.5;
4
6
  export declare function churnStaleFactor(entry: MemoryEntry): number;
5
7
  export declare function recencyBoost(entry: MemoryEntry, now: Date): number;
6
8
  /** Retrieval-time outcome nudge in [0.85, 1.15]; the bm25-outcome eval baseline ranks with it too. */
@@ -27,6 +29,8 @@ export declare function strengthRecencyMultipliers(entry: MemoryEntry, now: Date
27
29
  strength: number;
28
30
  recency: number;
29
31
  };
32
+ /** The rank multiplier for a scopeMatch signal: match, mismatch or neutral. */
33
+ export declare function scopeBoostFor(signal: -1 | 0 | 1): number;
30
34
  export interface BoostContext {
31
35
  now: Date;
32
36
  pathTags: string[];
@@ -1,14 +1,29 @@
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
+ import { DAY_MS } from '../util/time.js';
7
8
  export 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
  }
@@ -16,8 +31,8 @@ export 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) {