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,27 +1,9 @@
1
- // ---------------------------------------------------------------------------
2
- // Availability-bias detector (biases over memory state)
3
- // ---------------------------------------------------------------------------
4
- //
5
- // Flags when a recall's returned top-K is dominated by recent entries while
6
- // substantially older relevant candidates in the same MATCHED pool were passed
7
- // over. This is the availability / recency heuristic (Tversky-Kahneman): what
8
- // is most mentally available (recent) gets over-weighted relative to what is
9
- // most relevant. Hippo's substrate makes this measurable: every entry carries a
10
- // creation timestamp, so we can compare the age distribution of what was
11
- // RETURNED against the age distribution of the pool it was drawn from.
12
- //
13
- // Soft warning ONLY: this never filters, reorders, or suppresses a result. It surfaces
14
- // a hint the calling agent may act on, like anchoringHint / planningFallacyHint / suppressionSummary.
15
- //
16
- // PURE: no I/O, no env reads. The env gate (HIPPO_AVAILABILITY=off) and the
17
- // audit emission live in the callers (api.recall, cmdRecall, MCP), mirroring
18
- // detectAnchoring in recall-history.ts.
19
- export const DEFAULT_RECENCY_WINDOW_MS = 24 * 60 * 60 * 1000;
1
+ import { DAY_MS } from '../util/time.js';
2
+ export const DEFAULT_RECENCY_WINDOW_MS = DAY_MS;
20
3
  export const DEFAULT_RECENT_FRACTION_THRESHOLD = 0.7;
21
4
  export const DEFAULT_MIN_RETURNED = 3;
22
5
  export const DEFAULT_MIN_POOL = 10;
23
6
  export const DEFAULT_MIN_OLDER_PASSED_OVER = 3;
24
- const MS_PER_DAY = 24 * 60 * 60 * 1000;
25
7
  const MS_PER_HOUR = 60 * 60 * 1000;
26
8
  function median(nums) {
27
9
  if (nums.length === 0)
@@ -30,6 +12,11 @@ function median(nums) {
30
12
  const mid = Math.floor(sorted.length / 2);
31
13
  return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
32
14
  }
15
+ function parseTimestamps(refs) {
16
+ return refs
17
+ .map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
18
+ .filter((e) => Number.isFinite(e.ts));
19
+ }
33
20
  /**
34
21
  * Detect availability/recency bias in a recall result.
35
22
  *
@@ -52,24 +39,20 @@ export function detectAvailabilityBias(opts) {
52
39
  const minReturned = opts.minReturned ?? DEFAULT_MIN_RETURNED;
53
40
  const minPool = opts.minPool ?? DEFAULT_MIN_POOL;
54
41
  const minOlderPassedOver = opts.minOlderPassedOver ?? DEFAULT_MIN_OLDER_PASSED_OVER;
55
- const topK = opts.topK
56
- .map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
57
- .filter((e) => Number.isFinite(e.ts));
58
- const pool = opts.pool
59
- .map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
60
- .filter((e) => Number.isFinite(e.ts));
42
+ const topK = parseTimestamps(opts.topK);
43
+ const pool = parseTimestamps(opts.pool);
61
44
  if (topK.length < minReturned || pool.length < minPool)
62
45
  return null;
63
46
  const recentCount = topK.filter((e) => now - e.ts <= recencyWindowMs).length;
64
47
  const recentFraction = recentCount / topK.length;
65
48
  if (recentFraction <= recentFractionThreshold)
66
49
  return null;
67
- const topKMedianAgeDays = median(topK.map((e) => (now - e.ts) / MS_PER_DAY));
68
- const poolMedianAgeDays = median(pool.map((e) => (now - e.ts) / MS_PER_DAY));
50
+ const topKMedianAgeDays = median(topK.map((e) => (now - e.ts) / DAY_MS));
51
+ const poolMedianAgeDays = median(pool.map((e) => (now - e.ts) / DAY_MS));
69
52
  if (poolMedianAgeDays <= topKMedianAgeDays)
70
53
  return null;
71
54
  const topKIds = new Set(topK.map((e) => e.id));
72
- const olderCandidatesPassedOver = pool.filter((e) => !topKIds.has(e.id) && (now - e.ts) / MS_PER_DAY > topKMedianAgeDays).length;
55
+ const olderCandidatesPassedOver = pool.filter((e) => !topKIds.has(e.id) && (now - e.ts) / DAY_MS > topKMedianAgeDays).length;
73
56
  if (olderCandidatesPassedOver < minOlderPassedOver)
74
57
  return null;
75
58
  const pct = Math.round(recentFraction * 100);
@@ -1,4 +1,5 @@
1
1
  import { execFileSync } from 'child_process';
2
+ const MAX_DIFF_TERMS = 10;
2
3
  const SKIPPED_PATH_TERMS = ['src', 'dist', 'test', 'tests', 'node_modules', 'index'];
3
4
  // stderr is dropped because git's warnings (line-ending notices, for one) would otherwise become query terms.
4
5
  function readGit(args) {
@@ -13,7 +14,7 @@ export function autoDetectContext() {
13
14
  .split('\n')
14
15
  .flatMap((f) => f.replace(/[/\\.]/g, ' ').split(/\s+/))
15
16
  .filter((t) => t.length > 2 && !SKIPPED_PATH_TERMS.includes(t))
16
- .slice(0, 10);
17
+ .slice(0, MAX_DIFF_TERMS);
17
18
  if (terms.length > 0)
18
19
  return terms.join(' ');
19
20
  }
@@ -1,7 +1,7 @@
1
- import { type MemoryEntry } from './memory.js';
2
- import { type SessionHandoff } from './handoff.js';
3
- import type { SessionEvent, TaskSnapshot } from './store/rows.js';
4
- import type { AssembleCost, AssembleResult, AssembledContextItem, ContextCost, ContextResultEntry, DrillDownChild, DrillDownCost, DrillDownResult } from './api.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
+ import { type SessionHandoff } from '../core/handoff.js';
3
+ import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
4
+ import type { AssembleCost, AssembleResult, AssembledContextItem, ContextCost, ContextResultEntry, DrillDownChild, DrillDownCost, DrillDownResult } from './index.js';
5
5
  export declare function snapshotText(s: TaskSnapshot): string;
6
6
  export declare function handoffText(h: SessionHandoff): string;
7
7
  /** Needs at least one event; the header reads the latest. */
@@ -1,9 +1,10 @@
1
1
  // The strings a context block prints. The budget prices these same strings, so selection and print cannot drift.
2
- import { calculateStrength, confidenceFacets, confidenceLabel } from './memory.js';
3
- import { evalNow } from './ablation.js';
4
- import { estimateTokens } from './token-ledger.js';
5
- import { renderAmbientSummary } from './ambient.js';
6
- import { formatHandoffEvidenceLine } from './handoff.js';
2
+ import { calculateStrength, confidenceFacets, confidenceLabel } from '../core/memory.js';
3
+ import { evalNow } from '../core/ablation.js';
4
+ import { estimateTokens } from '../util/token-text.js';
5
+ import { renderAmbientSummary } from '../core/ambient.js';
6
+ import { formatHandoffEvidenceLine } from '../core/handoff.js';
7
+ import { DATE_PREFIX_CHARS } from '../util/token-text.js';
7
8
  export function snapshotText(s) {
8
9
  return [
9
10
  '## Active Task Snapshot\n',
@@ -78,7 +79,7 @@ export function contextLine(item, framing, showStrength, now, strengthPct = Math
78
79
  const label = confidenceLabel(e, now);
79
80
  const confTag = `[${label.text}]${label.warn ? ' ⚠️' : ''}`;
80
81
  if (framing === 'observe') {
81
- const dateStr = new Date(e.created).toISOString().slice(0, 10);
82
+ const dateStr = new Date(e.created).toISOString().slice(0, DATE_PREFIX_CHARS);
82
83
  // Verified rules print without the date prefix.
83
84
  if (confidenceFacets(e, now).tier === 'verified')
84
85
  return `- **${confTag} ${globalPrefix}${e.content}**${tagStr}${strengthStr}`;
@@ -1,9 +1,9 @@
1
1
  import type { AmbientLoadResult } from '../store/candidates.js';
2
- import { type MemoryEntry } from '../memory.js';
3
- import type { ContextReads, HippoStore } from '../store-port.js';
4
- import { type HippoConfig } from '../config.js';
5
- import type { ProjectRef } from '../project-identity.js';
6
- import type { DeliveryObserver } from '../delivery-recorder.js';
2
+ import { type MemoryEntry } from '../core/memory.js';
3
+ import type { ContextReads, HippoStore } from '../store/index.js';
4
+ import { type HippoConfig } from '../core/config.js';
5
+ import type { ProjectRef } from '../core/project-identity.js';
6
+ import type { DeliveryObserver } from '../store/delivery-recorder.js';
7
7
  import type { ContextCost, ContextOpts, ContextResultEntry } from './context-types.js';
8
8
  import type { Context } from './types.js';
9
9
  /** One store getContext reads rows from: its base search and its context reads. */
@@ -1,18 +1,18 @@
1
1
  // getContext's selection stages: the pinned-only branch, the strongest-first branch and the search branch.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
2
  import { recallScopeFilter } from '../store/search-rows.js';
4
- import { loadIndex } from '../store/index-and-stats.js';
5
- import { calculateStrength } from '../memory.js';
6
- import { appendAuditEvent, auditQueryFields } from '../audit.js';
7
- import { isWorthSurfacing } from '../memory-quality.js';
8
- import { rankBothStores } from '../shared.js';
9
- import { evalNow } from '../ablation.js';
3
+ import { heldIdLookup } from '../store/entry-reads.js';
4
+ import { calculateStrength } from '../core/memory.js';
5
+ import { auditQueryFields, recordAuditEvent } from '../store/audit.js';
6
+ import { isWorthSurfacing } from '../core/memory-quality.js';
7
+ import { rankBothStores } from '../sharing/shared.js';
8
+ import { evalNow } from '../core/ablation.js';
10
9
  import { hybridSearch } from '../search/hybrid.js';
11
10
  import { physicsSearch } from '../search/physics-search.js';
12
- import { DEFAULT_LOCAL_BUMP } from '../search/types.js';
13
- import { compareScoredResults } from '../compare.js';
14
- import { scopeMatch } from '../scope.js';
15
- import { promptTokens, contentTokens, gatePromptRecall, } from '../prompt-recall.js';
11
+ import { DEFAULT_LOCAL_BUMP } from '../core/search-types.js';
12
+ import { compareScoredResults } from '../core/compare.js';
13
+ import { scopeMatch } from '../sharing/scope.js';
14
+ import { scopeBoostFor } from '../search/boosts.js';
15
+ import { promptTokens, contentTokens, gatePromptRecall, } from '../core/prompt-recall.js';
16
16
  const GLOBAL_DISCOUNT = 1 / DEFAULT_LOCAL_BUMP;
17
17
  // Share and promote copy a memory to the global store under a new id, so equal content is the only link.
18
18
  // A pinned copy wins, then the stronger one after the ranking's own global discount; a tie keeps the local copy.
@@ -61,10 +61,10 @@ export function selectPinned(opts, plan, left, pools, admission) {
61
61
  // Prompt recall gates the backfill on the prompt instead of recency.
62
62
  if (plan.promptRecallPending) {
63
63
  const candidates = () => promptRecallCandidates(plan, pools, admission.admit, rankedPinned, nowP);
64
- backfillFromPrompt(opts, plan, pinnedCfg, candidates, picked, recentBudget);
64
+ backfillFromPrompt(opts, plan, { pinnedCfg, candidates, picked, recentBudget });
65
65
  }
66
66
  else if (plan.includeRecent > 0) {
67
- backfillRecent(plan, localPool, globalPool, picked, recentBudget, nowP);
67
+ backfillRecent(plan, { localPool, globalPool, picked, recentBudget, nowP });
68
68
  }
69
69
  admitWithinBudget(rankedPinned, picked, effBudget, obs);
70
70
  return picked.items;
@@ -75,11 +75,10 @@ function rankPinned(plan, pinnedLocal, pinnedGlobal, nowP) {
75
75
  ...pinnedGlobal.map((e) => ({ entry: e, isGlobal: true })),
76
76
  ]
77
77
  .map(({ entry, isGlobal }) => {
78
- const scopeSig = scopeMatch(entry.tags, plan.activeScope);
79
- const sBst = scopeSig === 1 ? 1.5 : scopeSig === -1 ? 0.5 : 1.0;
78
+ const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, plan.activeScope));
80
79
  return {
81
80
  entry,
82
- score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) * sBst,
81
+ score: calculateStrength(entry, nowP) * (isGlobal ? GLOBAL_DISCOUNT : 1) * scopeBoost,
83
82
  tokens: plan.price(entry, isGlobal),
84
83
  isGlobal,
85
84
  };
@@ -115,12 +114,15 @@ function admitWithinBudget(rows, picked, budget, obs) {
115
114
  picked.used += r.tokens;
116
115
  }
117
116
  }
118
- function backfillFromPrompt(opts, plan, pinnedCfg, candidates, picked, recentBudget) {
117
+ // Overlap a candidate needs with the prompt when the config sets none.
118
+ const DEFAULT_PROMPT_RECALL_THRESHOLD = 0.04;
119
+ function backfillFromPrompt(opts, plan, options) {
120
+ const { pinnedCfg, candidates, picked, recentBudget } = options;
119
121
  const rawMetric = pinnedCfg.pinnedInject.promptRecallMetric;
120
122
  const metric = rawMetric === 'cosine' ? 'cosine' : 'jaccard';
121
123
  const gate = {
122
124
  metric,
123
- threshold: finiteOr(pinnedCfg.pinnedInject.promptRecallThreshold, 0.04, 0),
125
+ threshold: finiteOr(pinnedCfg.pinnedInject.promptRecallThreshold, DEFAULT_PROMPT_RECALL_THRESHOLD, 0),
124
126
  minShared: finiteOr(pinnedCfg.pinnedInject.promptRecallMinShared, 2, 0),
125
127
  maxItems: finiteOr(pinnedCfg.pinnedInject.promptRecallMaxItems, 5, 1),
126
128
  };
@@ -182,7 +184,8 @@ function promptRecallCandidates(plan, pools, admit, rankedPinned, nowP) {
182
184
  }
183
185
  return candidateItems;
184
186
  }
185
- function backfillRecent(plan, localPool, globalPool, picked, recentBudget, nowP) {
187
+ function backfillRecent(plan, options) {
188
+ const { localPool, globalPool, picked, recentBudget, nowP } = options;
186
189
  const recent = [
187
190
  ...localPool.map((entry) => ({ entry, isGlobal: plan.primaryIsGlobal })),
188
191
  ...globalPool.map((entry) => ({ entry, isGlobal: true })),
@@ -239,17 +242,19 @@ export function selectStrongest(plan, left, pools) {
239
242
  export async function selectBySearch(ctx, plan, left, pools, admission) {
240
243
  const minResults = plan.cost ? 0 : undefined; // a priced block skips an oversize top hit too, so the budget bounds it
241
244
  const results = plan.hasGlobal && !plan.primaryIsGlobal
242
- ? await searchBothStores(ctx, plan, left, minResults, pools, admission.bothStoresAdmit)
243
- : await searchLocalRows(ctx, plan, left, minResults, pools.local.entries, admission.admit);
245
+ ? await searchBothStores(ctx, plan, { left, minResults, pools, admit: admission.bothStoresAdmit })
246
+ : await searchLocalRows(ctx, plan, { left, minResults, localEntries: pools.local.entries, admit: admission.admit });
244
247
  await auditContextRecall(ctx, plan, results.length);
245
248
  return results;
246
249
  }
247
- // The pools were admitted at load, before ranking, dedupe and budget: a post-filter would let an excluded row fill the
248
- // budget or shadow its admitted duplicate.
249
- async function searchBothStores(ctx, plan, left, minResults, pools, admit) {
250
+ async function searchBothStores(ctx, plan, options) {
251
+ const { left, minResults, pools, admit } = options;
250
252
  const { cost, price } = plan;
251
- const localIndex = loadIndex(ctx.hippoRoot);
252
- const isGlobalHit = (e) => !localIndex.entries[e.id];
253
+ // A local pool row is local by construction; sync keeps a global row's id on its local copy, so the global pool is looked up.
254
+ const poolIds = (pool) => [...pool.entries, ...(pool.recall ?? [])].map((e) => e.id);
255
+ const localIds = new Set(poolIds(pools.local));
256
+ const alsoLocal = heldIdLookup(ctx.hippoRoot, ctx.tenantId, poolIds(pools.global).filter((id) => !localIds.has(id)));
257
+ const isGlobalHit = (e) => !localIds.has(e.id) && !alsoLocal(e.id);
253
258
  const roots = { local: ctx.hippoRoot, global: plan.globalRoot };
254
259
  const merged = await rankBothStores(plan.query, roots, { local: pools.local.entries, global: pools.global.entries }, contextVectorSpec(ctx, plan, admit), {
255
260
  budget: left,
@@ -268,7 +273,8 @@ async function searchBothStores(ctx, plan, left, minResults, pools, admit) {
268
273
  function contextVectorSpec(ctx, plan, admit) {
269
274
  return { tenantId: ctx.tenantId, scope: recallScopeFilter(plan.exactScope, 'exact', plan.ownScope), includeSuperseded: false, admit };
270
275
  }
271
- async function searchLocalRows(ctx, plan, left, minResults, localEntries, admit) {
276
+ async function searchLocalRows(ctx, plan, options) {
277
+ const { left, minResults, localEntries, admit } = options;
272
278
  const { cost, price, primaryIsGlobal, query, config: ctxConfig } = plan;
273
279
  const usePhysicsCtx = ctxConfig.physics?.enabled !== false;
274
280
  const localCost = cost && ((r) => price(r.entry, primaryIsGlobal));
@@ -313,23 +319,9 @@ async function auditContextRecall(ctx, plan, resultCount) {
313
319
  await plan.other.appendAuditEvents([row]);
314
320
  return;
315
321
  }
316
- if (plan.hasLocal) {
317
- const localDb = openHippoDb(ctx.hippoRoot);
318
- try {
319
- appendAuditEvent(localDb, row);
320
- }
321
- finally {
322
- closeHippoDb(localDb);
323
- }
324
- }
325
- if (plan.hasGlobal && !plan.primaryIsGlobal) {
326
- const globalDb = openHippoDb(plan.globalRoot);
327
- try {
328
- appendAuditEvent(globalDb, row);
329
- }
330
- finally {
331
- closeHippoDb(globalDb);
332
- }
333
- }
322
+ if (plan.hasLocal)
323
+ recordAuditEvent(ctx.hippoRoot, row);
324
+ if (plan.hasGlobal && !plan.primaryIsGlobal)
325
+ recordAuditEvent(plan.globalRoot, row);
334
326
  }
335
327
  //# sourceMappingURL=context-select.js.map
@@ -1,9 +1,9 @@
1
1
  import type { TaskSnapshot, SessionEvent } from '../store/rows.js';
2
- import type { SessionHandoff } from '../handoff.js';
3
- import type { MemoryEntry } from '../memory.js';
4
- import type { DeliveryObserver } from '../delivery-recorder.js';
5
- import type { AmbientState } from '../ambient.js';
6
- import type { ProjectRef } from '../project-identity.js';
2
+ import type { SessionHandoff } from '../core/handoff.js';
3
+ import type { MemoryEntry } from '../core/memory.js';
4
+ import type { DeliveryObserver } from '../store/delivery-recorder.js';
5
+ import type { AmbientState } from '../core/ambient.js';
6
+ import type { ProjectRef } from '../core/project-identity.js';
7
7
  /**
8
8
  * Options for `getContext` — assemble a budget-bounded context bundle
9
9
  * (recalled memories + active task snapshot + handoff + recent events).
@@ -1,5 +1,5 @@
1
- import { type MemoryEntry } from '../memory.js';
2
- import { type ProjectRef } from '../project-identity.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
+ import { type ProjectRef } from '../core/project-identity.js';
3
3
  import type { ContextOpts, ContextResult } from './context-types.js';
4
4
  import { type Context } from './types.js';
5
5
  export { oneCopyPerMemory } from './context-select.js';
@@ -9,8 +9,6 @@ export { oneCopyPerMemory } from './context-select.js';
9
9
  * flagged rows with no project origin never ambient-inject.
10
10
  */
11
11
  export declare function ambientSecretAdmit(e: MemoryEntry, currentProject: ProjectRef): boolean;
12
- /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
13
- export declare const CONTEXT_CANDIDATE_CAP = 2000;
14
12
  /**
15
13
  * Assemble a context bundle: recalled memories (pinned-only / strength-sorted
16
14
  * fallback / hybrid search) + active task snapshot + session handoff + recent
@@ -1,27 +1,27 @@
1
1
  // Ambient context injection: the admission policy and getContext.
2
2
  import { isInitialized } from '../store/open.js';
3
- import { strengthenRetrieved } from '../store/entry-writes.js';
4
3
  import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
5
- import { loadIndex, saveIndex, updateStats } from '../store/index-and-stats.js';
6
4
  import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessions.js';
7
- import { estimateTokens } from '../token-ledger.js';
8
- import { markRetrieved, COMPACTION_MEMORY_TAG } from '../memory.js';
9
- import { isWorthSurfacing } from '../memory-quality.js';
10
- import { getGlobalRoot } from '../shared.js';
11
- import { writeRecallTraceAtRoot } from '../recall-trace.js';
12
- import { evalNow, isRecallBoostAblated } from '../ablation.js';
13
- import { dropHeldCopies } from '../same-text.js';
14
- import { BadRequestError } from '../api-errors.js';
15
- import { isSharedStore, loadConfig } from '../config.js';
16
- import { log } from '../log.js';
17
- import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../project-identity.js';
18
- import { promptTokens } from '../prompt-recall.js';
19
- import { detectSecret } from '../secret-detect.js';
20
- import { isSessionDigestRow } from '../session-digest.js';
21
- import { addAmbientTallies, ambientStateFromTallies } from '../ambient.js';
22
- import { requireGroup, sqliteStore, storeFor } from '../store-port.js';
23
- import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../recall-scope.js';
5
+ import { estimateTokens } from '../util/token-text.js';
6
+ import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
7
+ import { isWorthSurfacing } from '../core/memory-quality.js';
8
+ import { getGlobalRoot } from '../sharing/shared.js';
9
+ import { evalNow } from '../core/ablation.js';
10
+ import { dropHeldCopies } from '../util/same-text.js';
11
+ import { BadRequestError } from '../core/api-errors.js';
12
+ import { isSharedStore, loadConfig } from '../core/config.js';
13
+ import { rethrowIfSqliteBlocked } from '../db/index.js';
14
+ import { errorMessage, log } from '../util/log.js';
15
+ import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../core/project-identity.js';
16
+ import { promptTokens } from '../core/prompt-recall.js';
17
+ import { detectSecret } from '../util/secret-detect.js';
18
+ import { isSessionDigestRow } from '../core/session-digest-row.js';
19
+ import { addAmbientTallies, ambientStateFromTallies } from '../core/ambient.js';
20
+ import { requireGroup, sqliteStore, storeFor } from '../store/index.js';
21
+ import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
24
22
  import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
23
+ import { andThen, onStore } from './on-store.js';
24
+ import { strengthenOf } from './recall-record.js';
25
25
  import { ownerOrSubject } from './types.js';
26
26
  export { oneCopyPerMemory } from './context-select.js';
27
27
  /**
@@ -60,14 +60,14 @@ export function ambientSecretAdmit(e, currentProject) {
60
60
  return projectNames(currentProject).includes(origin);
61
61
  }
62
62
  /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
63
- export const CONTEXT_CANDIDATE_CAP = 2000;
63
+ const CONTEXT_CANDIDATE_CAP = 2000;
64
64
  /** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
65
65
  function sourceOf(store) {
66
66
  return { store, reads: requireGroup(store, 'contextReads') };
67
67
  }
68
- // The pinned-only branch needs pins and recent-N candidates, not the corpus; `recent` and `recall` apply there only.
69
- // `recheck` is `admit` without the delivery observer, so a row checked twice is not refused twice in the ledger.
70
- async function loadAmbientEntries(source, tenantId, pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop) {
68
+ // The pinned-only branch needs pins and recent-N candidates, not the corpus.
69
+ async function loadAmbientEntries(source, tenantId, options) {
70
+ const { pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop } = options;
71
71
  const ownTenant = (e) => e.tenantId === tenantId;
72
72
  if (!pinnedOnly) {
73
73
  const rows = 'query' in window
@@ -166,18 +166,29 @@ function warnIsolationIgnored(hippoRoot) {
166
166
  isolationWarned.add(hippoRoot);
167
167
  log.warn(`${hippoRoot}: "contextProjectIsolation": false is ignored on a shared store; a read opts in with cross_project.`);
168
168
  }
169
- function planContext(ctx, opts, local) {
170
- const pinnedOnly = opts.pinnedOnly === true;
169
+ /** Which stores this read can draw on, and what kind the primary one is. */
170
+ function storesInReach(ctx, opts, local) {
171
171
  const other = local.store.kind !== 'sqlite' ? local.store : undefined;
172
172
  // Global memories do not establish a project boundary for task state.
173
173
  const hasLocal = other !== undefined || isInitialized(ctx.hippoRoot);
174
- const query = (opts.q ?? '').trim() || '*';
175
174
  const globalRoot = getGlobalRoot();
176
175
  // The store's own flag counts too, so no surface can read a shared store as its owner.
177
176
  const sharedStore = opts.sharedStore === true || isSharedStore(ctx.hippoRoot);
178
177
  // A store serving many people is not its operator's, so the operator's own global store stays out.
179
178
  const hasGlobal = !sharedStore && other === undefined && isInitialized(globalRoot);
180
179
  const primaryIsGlobal = isGlobalStoreRoot(ctx.hippoRoot);
180
+ return { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal };
181
+ }
182
+ /** Prices one entry against the budget: the caller's cost model when it gave one, else a token estimate. */
183
+ function entryPricer(cost, currentProject) {
184
+ return (entry, isGlobal, promptRecall) => cost
185
+ ? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
186
+ : estimateTokens(entry.content);
187
+ }
188
+ function planContext(ctx, opts, local) {
189
+ const pinnedOnly = opts.pinnedOnly === true;
190
+ const { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal } = storesInReach(ctx, opts, local);
191
+ const query = (opts.q ?? '').trim() || '*';
181
192
  // opts.scope is only the tag boost, opts.exactScope the envelope request; other-project memories are
182
193
  // excluded unless the caller asks for them (crossProject) or isolation is disabled.
183
194
  const config = loadConfig(ctx.hippoRoot);
@@ -192,9 +203,7 @@ function planContext(ctx, opts, local) {
192
203
  // Decided before the ambient loads so the pinned-only FTS candidate query can share their connection.
193
204
  const promptRecallPending = pinnedOnly && Boolean(opts.prompt?.trim()) && config.pinnedInject.promptRecall === true;
194
205
  const cost = opts.cost;
195
- const price = (entry, isGlobal, promptRecall) => cost
196
- ? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
197
- : estimateTokens(entry.content);
206
+ const price = entryPricer(cost, currentProject);
198
207
  return {
199
208
  local,
200
209
  other,
@@ -327,11 +336,12 @@ async function loadPools(ctx, plan, admission, recallRequest) {
327
336
  now: evalNow(),
328
337
  };
329
338
  // Tenant-scoped loads: never resolveTenantId({}) here.
339
+ const read = { pinnedOnly, recent, admit: loadAdmit, recheck: poolAdmit, window, recall: recallRequest };
330
340
  const local = plan.hasLocal
331
- ? await loadAmbientEntries(plan.local, ctx.tenantId, pinnedOnly, recent, loadAdmit, poolAdmit, window, recallRequest, qualityDrop(primaryIsGlobal))
341
+ ? await loadAmbientEntries(plan.local, ctx.tenantId, { ...read, onQualityDrop: qualityDrop(primaryIsGlobal) })
332
342
  : { entries: [] };
333
343
  const global = hasGlobal && !primaryIsGlobal
334
- ? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId, pinnedOnly, recent, loadAdmit, poolAdmit, window, recallRequest, qualityDrop(true))
344
+ ? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId, { ...read, onQualityDrop: qualityDrop(true) })
335
345
  : { entries: [] };
336
346
  return { local, global };
337
347
  }
@@ -368,16 +378,13 @@ async function traceEmptyContext(ctx, opts, plan) {
368
378
  explainMode: false,
369
379
  results: [],
370
380
  };
371
- if (!plan.other) {
372
- writeRecallTraceAtRoot(ctx.hippoRoot, trace);
373
- return;
374
- }
375
- // The empty reply is already decided, so a lost trace logs as the hippo.db write does rather than failing the call.
381
+ // The empty reply is already decided, so a lost trace is logged and the call still answers.
376
382
  try {
377
- await plan.other.finishRecall({ goalLog: [], audit: [], trace });
383
+ await onStore(ctx, (port) => port.finishRecall({ goalLog: [], audit: [], trace }));
378
384
  }
379
385
  catch (error) {
380
- log.error(`recall trace write failed: ${error instanceof Error ? error.message : String(error)}`);
386
+ rethrowIfSqliteBlocked(error);
387
+ log.error(`recall trace write failed: ${errorMessage(error)}`);
381
388
  }
382
389
  }
383
390
  /** Strengthens and marks the returned rows, then writes the trace and index together. */
@@ -396,10 +403,9 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
396
403
  score: s.score,
397
404
  })),
398
405
  };
399
- if (plan.other)
400
- await recordOnStore(ctx, plan.other, retrievedIds, trace, selected.length);
401
- else
402
- recordOnHippoDb(ctx, plan, retrievedIds, trace, selected.length);
406
+ const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
407
+ // hippo.db keeps the ids as its last recall, which feeds only outcomeForLastRecall, and it alone reads a second root.
408
+ await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), () => port.bumpRecallStats(selected.length)));
403
409
  // Replace selectedItems entries with markRetrieved-updated copies so
404
410
  // the returned ContextResult reflects post-recall state.
405
411
  const items = selected.map((s) => ({
@@ -409,25 +415,6 @@ async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
409
415
  // Read after strengthenRetrieved commits, so the rows just retrieved count at their new strength.
410
416
  return { items, ambientState: plan.config.ambient.enabled ? await readAmbientState(ctx, plan) : undefined };
411
417
  }
412
- function recordOnHippoDb(ctx, plan, retrievedIds, trace, recalled) {
413
- const localIndex = loadIndex(ctx.hippoRoot);
414
- const strengthenedHere = strengthenRetrieved(ctx.hippoRoot, retrievedIds, { recallBoostAblated: isRecallBoostAblated() });
415
- if (plan.hasGlobal)
416
- strengthenRetrieved(plan.globalRoot, retrievedIds.filter((id) => !strengthenedHere.has(id)), { recallBoostAblated: isRecallBoostAblated() });
417
- localIndex.last_retrieval_ids = retrievedIds;
418
- // Trace first on its own short-lived connection, then fold its id into localIndex so one saveIndex moves
419
- // last_retrieval_ids and last_trace_id in lockstep; a failed trace write stores null, never a stale id.
420
- const traceId = writeRecallTraceAtRoot(ctx.hippoRoot, trace);
421
- localIndex.last_trace_id = traceId !== null ? String(traceId) : null;
422
- saveIndex(ctx.hippoRoot, localIndex);
423
- updateStats(ctx.hippoRoot, { recalled });
424
- }
425
- // The index's last-recall ids feed only outcomeForLastRecall, which no other store serves, so they are not written here.
426
- async function recordOnStore(ctx, store, retrievedIds, trace, recalled) {
427
- const strengthen = { ids: retrievedIds, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
428
- await store.finishRecall({ goalLog: [], audit: [], trace, strengthen });
429
- await store.bumpRecallStats(recalled);
430
- }
431
418
  async function readAmbientState(ctx, plan) {
432
419
  const filter = { exactScope: plan.exactScope, ownScope: plan.ownScope, project: plan.originProject, currentProject: projectNames(plan.currentProject), now: evalNow() };
433
420
  const sources = [
@@ -1,8 +1,8 @@
1
- import { type DormantMemory, type ListDormantOpts } from '../dormant.js';
2
- import { type MemoryEntry } from '../memory.js';
1
+ import { type DormantMemory, type ListDormantOpts } from '../store/dormant.js';
2
+ import { type MemoryEntry } from '../core/memory.js';
3
3
  import type { Context } from './types.js';
4
4
  /**
5
- * A tenant's dormant memories (src/dormant.ts): what sleep moved out of
5
+ * A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
6
6
  * active memory instead of deleting, when `dormant.enabled` is on. Newest
7
7
  * first; `opts.query` keeps rows containing every term (case-insensitive).
8
8
  */