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,26 +1,28 @@
1
1
  // Read path: recall (sync) and retrieve (async, adds the vector arm).
2
- import { envRequireSessionScopedFreshTail } from '../env.js';
2
+ import { envRequireSessionScopedFreshTail } from '../util/env.js';
3
3
  import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
4
- import { isRecallBoostAblated } from '../ablation.js';
5
4
  import { loadEntriesByIds, loadFreshRawMemories } from '../store/entry-reads.js';
6
5
  import { loadRecallSearchEntries, recallScopeFilter } from '../store/search-rows.js';
7
- import { estimateTokens } from '../token-ledger.js';
8
- import { formatHandoffEvidenceLine } from '../handoff.js';
9
- import { activeGoalsWithPolicies, boostByGoals } from '../goals.js';
10
- import { continuityAt, finishRecallAt, storeFor } from '../store-port.js';
6
+ import { estimateTokens } from '../util/token-text.js';
7
+ import { formatHandoffEvidenceLine } from '../core/handoff.js';
8
+ import { activeGoalsWithPolicies, boostByGoals } from '../store/goals.js';
9
+ import { continuityAt, finishRecallAt, storeFor } from '../store/index.js';
11
10
  import { hybridSearch } from '../search/hybrid.js';
12
11
  import { physicsSearch } from '../search/physics-search.js';
13
12
  import { churnStaleFactor } from '../search/boosts.js';
14
- import { compareEntryIdentity } from '../compare.js';
15
- import { dropHeldCopies, duplicateKey, storedTextKeys } from '../same-text.js';
16
- import { isSharedStore, loadConfig } from '../config.js';
17
- import { classifyOriginProject, projectNames } from '../project-identity.js';
18
- import { decidePlanningFallacy, detectPlanningClaim, planningFallacyEvidenceAt } from '../predictions/planning-fallacy.js';
19
- import { detectAnchoring, hashQueryText, biasHintEnabled } from '../recall-history.js';
20
- import { detectAvailabilityBias } from '../availability.js';
21
- import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../recall-scope.js';
13
+ import { compareEntryIdentity } from '../core/compare.js';
14
+ import { dropHeldCopies, duplicateKey, storedTextKeys } from '../util/same-text.js';
15
+ import { isSharedStore, loadConfig } from '../core/config.js';
16
+ import { classifyOriginProject, projectNames } from '../core/project-identity.js';
17
+ import { decidePlanningFallacy, detectPlanningClaim } from '../predictions/planning-fallacy.js';
18
+ import { planningFallacyEvidenceAt } from '../store/planning-fallacy-evidence.js';
19
+ import { detectAnchoring, hashQueryText, biasHintEnabled } from './recall-history.js';
20
+ import { detectAvailabilityBias } from './availability.js';
21
+ import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
22
22
  import { ownerOrSubject, RecallContractError } from './types.js';
23
- import { anchoringRows, availabilityRows, recallAuditMetadata, recallAuditRow } from './recall-record.js';
23
+ import { anchoringRows, availabilityRows, callerOf, recallAuditMetadata, recallAuditRow, strengthenOf } from './recall-record.js';
24
+ import { retrieveWithCliCore } from './recall-core.js';
25
+ const DEFAULT_RECALL_LIMIT = 10;
24
26
  /**
25
27
  * Shared construction helper for `RecallSuppressionSummary`. Used by
26
28
  * `api.recall`, `cmdRecall`, and the MCP `hippo_recall` handler so all three
@@ -61,7 +63,7 @@ export function recall(ctx, opts) {
61
63
  const own = personalScopeOf(ctx.actor) ?? undefined;
62
64
  const all = loadRecallSearchEntries(ctx.hippoRoot, opts.query, windowSize, ctx.tenantId, opts.scope, 'exact', false, recallOrigin(opts), own);
63
65
  const plan = planRecall(ctx, opts, all, own);
64
- const { result, writes } = composeRecall(ctx, opts, windowSize, all, plan, readRecallSync(ctx, opts, plan));
66
+ const { result, writes } = composeRecall(ctx, opts, { windowSize, all, plan, reads: readRecallSync(ctx, opts, plan) });
65
67
  finishRecallAt(ctx.hippoRoot, { ...writes, audit: [...(opts.leadingAudit ?? []), ...writes.audit] });
66
68
  return result;
67
69
  }
@@ -71,9 +73,11 @@ function recallOrigin(opts) {
71
73
  function inCallerProject(entry, opts) {
72
74
  return !opts.project || classifyOriginProject(entry.origin_project, opts.project) !== 'cross-project';
73
75
  }
74
- /** Mode-aware recall through the served store that strengthens each returned row; never writes last_retrieval_ids (contract lock). */
76
+ /** The one recall entry: ranks with the ranker `opts` names, then writes the recall. Only the CLI core ranker writes last_retrieval_ids (contract lock). */
75
77
  export async function retrieve(ctx, opts) {
76
78
  assertScopeRequestAllowed(ctx.actor, opts.scope);
79
+ if (opts.cliCore)
80
+ return retrieveWithCliCore(ctx, opts, opts.cliCore);
77
81
  const windowSize = recallWindowSize(opts);
78
82
  // From the authenticated actor, never from RecallOpts, which a caller fills in.
79
83
  const own = personalScopeOf(ctx.actor) ?? undefined;
@@ -90,7 +94,7 @@ export async function retrieve(ctx, opts) {
90
94
  candidates = [...ranked.map((r) => r.entry), ...candidates.filter((e) => !rankedIds.has(e.id))];
91
95
  }
92
96
  const plan = planRecall(ctx, opts, candidates, own);
93
- const { result, writes } = composeRecall(ctx, opts, windowSize, candidates, plan, await readRecall(store, ctx, opts, plan));
97
+ const { result, writes } = composeRecall(ctx, opts, { windowSize, all: candidates, plan, reads: await readRecall(store, ctx, opts, plan) });
94
98
  await store.finishRecall({ ...writes, audit: [...(opts.leadingAudit ?? []), ...writes.audit], strengthen: strengthenOf(ctx, result.results.map((r) => r.id)) });
95
99
  return result;
96
100
  }
@@ -106,9 +110,6 @@ function recallSearchArgs(ctx, opts, limit, own) {
106
110
  ownScope: own,
107
111
  };
108
112
  }
109
- function strengthenOf(ctx, ids) {
110
- return { ids, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
111
- }
112
113
  /** api.retrieve's vector arm: the recall load's exact-scope rule, current rows only. */
113
114
  function recallVectorSpec(ctx, opts, own) {
114
115
  return {
@@ -142,7 +143,7 @@ async function retrieveFromStore(ctx, opts, windowSize, show, own) {
142
143
  const window = ranked.slice(0, windowSize).map((r) => r.entry);
143
144
  const bandOpts = { ...opts, suppressRecallTrace: true };
144
145
  const plan = planRecall(ctx, bandOpts, window, own);
145
- const { result, writes } = composeRecall(ctx, bandOpts, windowSize, window, plan, await readRecall(store, ctx, bandOpts, plan, goals), false);
146
+ const { result, writes } = composeRecall(ctx, bandOpts, { windowSize, all: window, plan, reads: await readRecall(store, ctx, bandOpts, plan, goals), auditBand: false });
146
147
  // Rows the vector arm added count as candidates too.
147
148
  const inPool = new Set(pool.map((e) => e.id));
148
149
  const candidates = [...pool, ...ranked.map((r) => r.entry).filter((e) => !inPool.has(e.id))];
@@ -187,7 +188,7 @@ function recallWindowSize(opts) {
187
188
  }
188
189
  const CONTINUITY_EVENT_LIMIT = 5;
189
190
  function planRecall(ctx, opts, all, own) {
190
- const limit = opts.limit ?? 10;
191
+ const limit = opts.limit ?? DEFAULT_RECALL_LIMIT;
191
192
  const window = admitCandidates(opts, all, limit, own);
192
193
  return {
193
194
  limit,
@@ -228,9 +229,8 @@ function continuityKey(ctx, opts) {
228
229
  return null;
229
230
  return { owner: ownerOrSubject(ctx.actor), project: opts.project ? projectNames(opts.project) : [] };
230
231
  }
231
- /** The reply and the rows it writes, from the candidates and the plan's reads; touches no store.
232
- * `auditBand` false: the caller shows a cut of the band and audits the rows it shows. */
233
- function composeRecall(ctx, opts, windowSize, all, plan, reads, auditBand = true) {
232
+ function composeRecall(ctx, opts, options) {
233
+ const { windowSize, all, plan, reads, auditBand = true } = options;
234
234
  const { window } = plan;
235
235
  const bands = rankBands(opts, plan, reads);
236
236
  const rankedOut = bands.rankedOut;
@@ -319,7 +319,9 @@ function rankBands(opts, plan, reads) {
319
319
  const baseRanked = baseScored.map((r) => baseItem(r, opts, explainTrace));
320
320
  const summaryRanked = substituted.map((s) => summaryItem(s, opts));
321
321
  const freshRanked = (opts.freshTailCount ?? 0) > 0
322
- ? freshTailBand(opts, reads.freshRaws, baseRanked, summaryRanked, opts.keepHeldCopies ? [] : [...baseSlice, ...substituted.map((s) => s.entry)], own)
322
+ ? freshTailBand(opts, {
323
+ recent: reads.freshRaws, baseRanked, summaryRanked, shownEntries: opts.keepHeldCopies ? [] : [...baseSlice, ...substituted.map((s) => s.entry)], own,
324
+ })
323
325
  : [];
324
326
  return {
325
327
  rankedOut: [...freshRanked, ...baseRanked, ...summaryRanked],
@@ -334,7 +336,7 @@ function rankBands(opts, plan, reads) {
334
336
  // `limit`. Each one is tenant-scoped and re-checked against the scope filter; drillDown recovers the children.
335
337
  function substituteOverflow(opts, overflowByParent, parents, limit, own) {
336
338
  const eligibleParents = parents.filter((p) => (p.dag_level ?? 0) === 2 && !p.superseded_by && passesScopeFilterForRecall(p.scope ?? null, opts.scope, own) && inCallerProject(p, opts));
337
- const maxSub = Math.max(1, Math.ceil(limit * 0.3));
339
+ const maxSub = Math.max(1, Math.ceil(limit * SUMMARY_SUB_FRACTION));
338
340
  // Most overflowed children first; compareEntryIdentity only breaks a tie, which used to fall to scan order.
339
341
  eligibleParents.sort((a, b) => {
340
342
  const ac = overflowByParent.get(a.id)?.length ?? 0;
@@ -380,12 +382,16 @@ function baseItem(r, opts, explainTrace) {
380
382
  }
381
383
  return item;
382
384
  }
383
- // Score 0.5 keeps a summary below the strong top-N matches but above the weakest leaves.
385
+ // A summary scores below the strong top-N matches but above the weakest leaves.
386
+ const SUMMARY_ITEM_SCORE = 0.5;
387
+ const FRESH_TAIL_ITEM_SCORE = 1.0;
388
+ // Summaries may take this share of the limit.
389
+ const SUMMARY_SUB_FRACTION = 0.3;
384
390
  function summaryItem(s, opts) {
385
391
  const item = {
386
392
  id: s.entry.id,
387
393
  content: s.entry.content,
388
- score: 0.5,
394
+ score: SUMMARY_ITEM_SCORE,
389
395
  layer: s.entry.layer,
390
396
  strength: s.entry.strength,
391
397
  isSummary: true,
@@ -396,9 +402,8 @@ function summaryItem(s, opts) {
396
402
  item.rerankPipeline = 'api';
397
403
  return item;
398
404
  }
399
- // The last N raw rows, so "what did I just see" always covers the recent window. A recent row already in the BM25
400
- // band is only tagged isFreshTail; new ones are prepended, so every recent row appears exactly once.
401
- function freshTailBand(opts, recent, baseRanked, summaryRanked, shownEntries, own) {
405
+ function freshTailBand(opts, options) {
406
+ const { recent, baseRanked, summaryRanked, shownEntries, own } = options;
402
407
  const recentScoped = recent.filter((m) => passesScopeFilterForRecall(m.scope ?? null, opts.scope, own) && inCallerProject(m, opts));
403
408
  const recentIdSet = new Set(recentScoped.map((m) => m.id));
404
409
  for (const r of baseRanked) {
@@ -415,7 +420,7 @@ function freshTailBand(opts, recent, baseRanked, summaryRanked, shownEntries, ow
415
420
  const item = {
416
421
  id: m.id,
417
422
  content: m.content,
418
- score: 1.0,
423
+ score: FRESH_TAIL_ITEM_SCORE,
419
424
  layer: m.layer,
420
425
  strength: m.strength,
421
426
  isFreshTail: true,
@@ -471,9 +476,6 @@ function continuityTokensOf(c) {
471
476
  tokenize(filteredHandoff?.cardId) +
472
477
  c.recentSessionEvents.reduce((acc, e) => acc + tokenize(e.content), 0);
473
478
  }
474
- function callerOf(ctx) {
475
- return { tenantId: ctx.tenantId, actor: ctx.actor.subject };
476
- }
477
479
  // A pure read of the caller's recallHistory snapshot against this top-1. HIPPO_ANCHORING=off skips even the detect
478
480
  // call; CLI paths pass no history (cmdRecall computes its own hint), so the hint stays absent there.
479
481
  function detectRecallAnchoring(opts, topMemoryId) {
@@ -1,5 +1,5 @@
1
- import type { DatabaseSyncLike } from '../db.js';
2
- import { type MemoryKind } from '../memory.js';
1
+ import type { ConnectorEvent } from '../store/port.js';
2
+ import { type MemoryKind } from '../core/memory.js';
3
3
  import type { Context, StoreReply } from './types.js';
4
4
  export interface RememberOpts {
5
5
  content: string;
@@ -8,15 +8,8 @@ export interface RememberOpts {
8
8
  owner?: string;
9
9
  artifactRef?: string;
10
10
  tags?: string[];
11
- /**
12
- * Optional hook invoked inside the same transaction as the underlying
13
- * memories INSERT. Used by ingestion connectors to stamp
14
- * idempotency / cursor rows atomically with the memory row, so a crash
15
- * mid-write cannot produce a memory without its corresponding side-effect
16
- * log row (or vice versa). If the callback throws, the INSERT is rolled
17
- * back and the error is rethrown.
18
- */
19
- afterWrite?: (db: DatabaseSyncLike, memoryId: string) => void;
11
+ /** The connector event this write answers. The store logs it in the memory's own transaction; an event logged before stores nothing and answers `duplicate`. */
12
+ event?: ConnectorEvent;
20
13
  /** Connector-ingested content an agent doesn't control; gates detectInstruction. CLI/HTTP/MCP never set this. */
21
14
  untrusted?: boolean;
22
15
  /** The caller's project: its name becomes the row's origin. Without it the store's fallback applies (NULL on a shared store). */
@@ -37,7 +30,12 @@ export interface RememberResult {
37
30
  };
38
31
  /** Set only when the content held secret material: untrusted text had it redacted, typed text was stored as sent. */
39
32
  warnings?: string[];
33
+ /** Set only when the write's event was logged before: nothing was stored, so `id` names no row; `memoryId` is the id the first write logged. */
34
+ duplicate?: {
35
+ memoryId: string | null;
36
+ };
40
37
  }
41
- /** Store one memory. With `ctx.store`, its entryWrites group writes the row and its remember row; hippo.db is opened only when there is no store. */
38
+ /** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's subject.
39
+ * A write that carries a connector event or untrusted content goes through connectorWrites, which commits its companion rows with it. */
42
40
  export declare function remember<C extends Context>(ctx: C, opts: RememberOpts): StoreReply<C, RememberResult>;
43
41
  //# sourceMappingURL=remember.d.ts.map
@@ -1,15 +1,14 @@
1
1
  // Write path: remember stores one memory after secret vetting and, for untrusted content, the instruction check.
2
- import { writeEntry } from '../store/entry-writes.js';
3
2
  import { stampOriginProject } from '../store/entry-row.js';
4
- import { requireGroup } from '../store-port.js';
5
- import { detectInstruction } from '../instruction-detect.js';
6
- import { quarantineScopeFor, recordQuarantine } from '../quarantine.js';
7
- import { createMemory } from '../memory.js';
8
- import { loadConfig } from '../config.js';
9
- import { vetSecrets } from '../secret-detect.js';
10
- import { assertCallerProject } from '../project-identity.js';
11
- import { BadRequestError } from '../api-errors.js';
12
- import { assertClientScope, personalScopeOf } from '../recall-scope.js';
3
+ import { detectInstruction } from './instruction-detect.js';
4
+ import { quarantineScopeFor } from '../trust/quarantine.js';
5
+ import { createMemory } from '../core/memory.js';
6
+ import { loadConfig } from '../core/config.js';
7
+ import { vetSecrets } from '../util/secret-detect.js';
8
+ import { assertCallerProject } from '../core/project-identity.js';
9
+ import { BadRequestError } from '../core/api-errors.js';
10
+ import { assertClientScope, personalScopeOf } from '../store/recall-scope.js';
11
+ import { andThen, notPorted, onStore } from './on-store.js';
13
12
  /** The scope a write lands in: the caller's own personal scope when asked for, else the client's, which may not be a personal one. */
14
13
  function rememberScope(ctx, opts) {
15
14
  if (!opts.personal) {
@@ -46,49 +45,34 @@ function prepareRemember(ctx, opts) {
46
45
  const stamped = origin !== undefined ? { ...entry, origin_project: origin } : entry;
47
46
  return { entry: stamped, requestedScope, detection, warnings: vetted.warnings };
48
47
  }
49
- function rememberResult(ctx, prepared) {
48
+ function rememberResult(ctx, prepared, written) {
50
49
  const { entry, detection, warnings } = prepared;
51
50
  const result = { id: entry.id, kind: entry.kind, tenantId: ctx.tenantId };
52
51
  if (detection.flagged)
53
52
  result.quarantined = { reason: detection.reason ?? 'unknown' };
54
53
  if (warnings.length > 0)
55
54
  result.warnings = [...warnings];
55
+ if (written?.outcome === 'duplicate')
56
+ result.duplicate = { memoryId: written.memoryId };
56
57
  return result;
57
58
  }
58
- /** Store one memory. With `ctx.store`, its entryWrites group writes the row and its remember row; hippo.db is opened only when there is no store. */
59
- export function remember(ctx, opts) {
60
- const reply = ctx.store ? rememberThroughStore(ctx, ctx.store, opts) : rememberOnHippoDb(ctx, opts);
61
- // SAFETY: a C typed with a store gets the promise its path returns; a wide C is typed as the union, which a caller has to await anyway.
62
- return reply;
63
- }
64
- /** afterWrite and the quarantine row write on hippo.db's own handle, and only connectors send them, so a store refuses both. */
65
- async function rememberThroughStore(ctx, store, opts) {
66
- const entryWrites = requireGroup(store, 'entryWrites');
67
- if (opts.afterWrite || opts.untrusted)
68
- throw new Error('afterWrite and untrusted content are written to hippo.db only, never through a store');
69
- const prepared = prepareRemember(ctx, opts);
70
- // The store writes origin_project as given, so the served folder's fallback is stamped here.
71
- await entryWrites.writeEntry({ entry: stampOriginProject(ctx.hippoRoot, prepared.entry), actor: ctx.actor.subject });
72
- return rememberResult(ctx, prepared);
59
+ /** A flagged row's review record, which the store writes in the row's own transaction. */
60
+ function quarantineOf({ requestedScope, detection }) {
61
+ return detection.flagged ? { originalScope: requestedScope, reason: detection.reason ?? 'unknown' } : undefined;
73
62
  }
74
- function rememberOnHippoDb(ctx, opts) {
75
- const prepared = prepareRemember(ctx, opts);
76
- const { requestedScope, detection } = prepared;
77
- // writeEntry threads ctx.actor.subject into its internal audit hook, so exactly
78
- // one 'remember' event lands in the log with the supplied actor.
79
- const afterWrite = detection.flagged
80
- ? (db, memoryId) => {
81
- recordQuarantine(db, {
82
- tenantId: ctx.tenantId,
83
- memoryId,
84
- originalScope: requestedScope,
85
- reason: detection.reason ?? 'unknown',
86
- actor: ctx.actor.subject,
87
- });
88
- opts.afterWrite?.(db, memoryId);
89
- }
90
- : opts.afterWrite;
91
- writeEntry(ctx.hippoRoot, prepared.entry, { actor: ctx.actor.subject, afterWrite });
92
- return rememberResult(ctx, prepared);
63
+ /** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's subject.
64
+ * A write that carries a connector event or untrusted content goes through connectorWrites, which commits its companion rows with it. */
65
+ export function remember(ctx, opts) {
66
+ return onStore(ctx, (port) => {
67
+ const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
68
+ const prepared = prepareRemember(ctx, opts);
69
+ // A store writes origin_project as given, so the served folder's fallback is stamped here.
70
+ const write = { entry: stampOriginProject(ctx.hippoRoot, prepared.entry), actor: ctx.actor.subject };
71
+ if (opts.untrusted !== true && opts.event === undefined)
72
+ return andThen(entryWrites.writeEntry(write), () => rememberResult(ctx, prepared));
73
+ const connectorWrites = port.connectorWrites ?? notPorted(port, 'connectorWrites');
74
+ const written = connectorWrites.writeConnectorEntry({ ...write, event: opts.event, quarantine: quarantineOf(prepared) });
75
+ return andThen(written, (outcome) => rememberResult(ctx, prepared, outcome));
76
+ });
93
77
  }
94
78
  //# sourceMappingURL=remember.js.map
@@ -0,0 +1,4 @@
1
+ import { type Context } from './types.js';
2
+ /** Binds `sessionId` to the caller's owner on first use; a session another owner holds is a 409, so the client can set it aside. */
3
+ export declare function bindSessionOwner(ctx: Context, sessionId: string): void;
4
+ //# sourceMappingURL=session-owners.d.ts.map
@@ -0,0 +1,17 @@
1
+ // A session id belongs to the first owner that binds it, so one developer's client cannot write into another's session.
2
+ import { ConflictError } from '../core/api-errors.js';
3
+ import { ownerOrSubject } from './types.js';
4
+ import { sessionOwnerOrBind } from '../store/sessions.js';
5
+ import { assertTenantId } from '../store/tenant.js';
6
+ import { DAY_MS } from '../util/time.js';
7
+ /** Bindings older than this are pruned when a new session binds. */
8
+ const BINDING_RETENTION_DAYS = 90;
9
+ /** Binds `sessionId` to the caller's owner on first use; a session another owner holds is a 409, so the client can set it aside. */
10
+ export function bindSessionOwner(ctx, sessionId) {
11
+ assertTenantId('bindSessionOwner', ctx.tenantId);
12
+ const owner = ownerOrSubject(ctx.actor);
13
+ const bound = sessionOwnerOrBind(ctx.hippoRoot, { tenantId: ctx.tenantId, sessionId, owner, retentionMs: BINDING_RETENTION_DAYS * DAY_MS });
14
+ if (bound !== owner)
15
+ throw new ConflictError('session id belongs to another caller');
16
+ }
17
+ //# sourceMappingURL=session-owners.js.map
@@ -1,13 +1,13 @@
1
1
  import { loadAllEntries } from '../store/entry-reads.js';
2
2
  import { deleteEntry } from '../store/delete-and-batch.js';
3
- import { auditMemories } from '../audit.js';
4
- import { autoShare } from '../shared.js';
3
+ import { auditMemories } from '../store/audit.js';
4
+ import { autoShare } from '../sharing/shared.js';
5
5
  import { consolidate } from '../consolidate/sleep.js';
6
- import { loadConfig } from '../config.js';
7
- import { deduplicateStore } from '../dedupe.js';
8
- import { computeAmbientState } from '../ambient.js';
9
- import { loadPendingExtractionTenants } from '../graph/read.js';
10
- import { type ExtractResult } from '../graph-extract.js';
6
+ import { loadConfig } from '../core/config.js';
7
+ import { deduplicateStore } from '../consolidate/dedupe.js';
8
+ import { computeAmbientState } from '../core/ambient.js';
9
+ import { loadPendingExtractionTenants } from '../store/graph-queue.js';
10
+ import { type ExtractResult } from '../graph/extract.js';
11
11
  import type { Context } from './types.js';
12
12
  import type { SleepOpts, SleepResult } from './sleep.js';
13
13
  /** Test-only seam: `runSleep` overrides force a phase to throw into emitSleepAudit's `partial: true` row; production never sets them. */
@@ -1,17 +1,17 @@
1
1
  // The sleep pipeline behind `sleep`, with its phase dependencies injectable; kept out of the package root.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
2
  import { loadAllEntries } from '../store/entry-reads.js';
4
3
  import { deleteEntry, memoriesBackingObjects } from '../store/delete-and-batch.js';
5
- import { appendAuditEvent, reportAuditWriteFailure, auditMemories } from '../audit.js';
6
- import { autoShare } from '../shared.js';
4
+ import { reportAuditWriteFailure, auditMemories } from '../store/audit.js';
5
+ import { sqliteSyncStore } from '../store/sqlite/store.js';
6
+ import { autoShare } from '../sharing/shared.js';
7
7
  import { consolidate } from '../consolidate/sleep.js';
8
8
  import { failedUnitOf } from '../store/delete-and-batch.js';
9
- import { loadConfig } from '../config.js';
10
- import { deduplicateStore } from '../dedupe.js';
11
- import { computeAmbientState } from '../ambient.js';
12
- import { loadPendingExtractionTenants } from '../graph/read.js';
13
- import { markPendingProcessedUpTo } from '../graph/write.js';
14
- import { extractGraphChunked } from '../graph-extract.js';
9
+ import { loadConfig } from '../core/config.js';
10
+ import { deduplicateStore } from '../consolidate/dedupe.js';
11
+ import { computeAmbientState } from '../core/ambient.js';
12
+ import { loadPendingExtractionTenants, markPendingProcessedUpTo } from '../store/graph-queue.js';
13
+ import { extractGraphChunked } from '../graph/extract.js';
14
+ import { errorMessage } from '../util/log.js';
15
15
  const DEFAULT_SLEEP_PHASES = {
16
16
  consolidate,
17
17
  deduplicateStore,
@@ -60,7 +60,7 @@ async function runSleepPhases(ctx, opts, phases, counts) {
60
60
  if (dedupResult.removed > 0)
61
61
  result.deduped = dedupSummary(dedupResult);
62
62
  // Phase 3: Quality audit (remove junk, report warnings; a dry run skips rows earlier phases would remove).
63
- counts.auditDeleted = runQualityAudit(ctx, phases, dryRun, consolidateResult, dedupResult, result);
63
+ counts.auditDeleted = runQualityAudit(ctx, phases, { dryRun, consolidateResult, dedupResult, result });
64
64
  if (dryRun)
65
65
  return result;
66
66
  // Phase 4: Auto-share high-transfer-score memories to global.
@@ -80,10 +80,7 @@ function snapshotDirtyTenants(ctx, phases, dryRun) {
80
80
  snapshot.dirtyTenants = phases.loadPendingExtractionTenants(ctx.hippoRoot);
81
81
  }
82
82
  catch (snapErr) {
83
- // SAFETY: this is a best-effort log message only; property access on
84
- // any JS value is safe (undefined if absent), preserving the existing
85
- // lenient formatting even when something non-Error was thrown.
86
- snapshot.error = snapErr.message;
83
+ snapshot.error = errorMessage(snapErr);
87
84
  }
88
85
  }
89
86
  return snapshot;
@@ -118,8 +115,8 @@ function dedupSummary(dedupResult) {
118
115
  crossDups,
119
116
  };
120
117
  }
121
- /** Returns how many audit errors were deleted, or would be under dryRun. */
122
- function runQualityAudit(ctx, phases, dryRun, consolidateResult, dedupResult, result) {
118
+ function runQualityAudit(ctx, phases, options) {
119
+ const { dryRun, consolidateResult, dedupResult, result } = options;
123
120
  const planned = new Set(dryRun ? [...(consolidateResult.removedIds ?? []), ...dedupResult.pairs.map((p) => p.removed)] : []);
124
121
  const allEntries = phases.loadAllEntries(ctx.hippoRoot).filter((e) => !planned.has(e.id));
125
122
  const auditOut = phases.auditMemories(allEntries, memoriesBackingObjects(ctx.hippoRoot));
@@ -180,49 +177,45 @@ async function drainGraphQueue(ctx, phases, snapshot, result) {
180
177
  `graph: dirty-tenant snapshot failed (skipped graph refresh): ${snapshot.error}`,
181
178
  ];
182
179
  }
183
- let gTenants = 0;
184
- let gEntities = 0;
185
- let gRelations = 0;
180
+ const rebuilt = { tenants: 0, entities: 0, relations: 0 };
186
181
  // dirtyTenants was snapshotted before the memory-deleting phases above.
187
182
  for (const { tenantId, maxPendingId } of snapshot.dirtyTenants) {
188
- try {
189
- const ext = await phases.extractGraph(ctx.hippoRoot, tenantId);
190
- // Count the rebuild as soon as it succeeds — it happened regardless of
191
- // the drain-mark below.
192
- gTenants += 1;
193
- gEntities += ext.entities;
194
- gRelations += ext.relations;
195
- if (ext.skipped) {
196
- result.details = [
197
- ...(result.details ?? []),
198
- `graph: ${ext.skipped} stale op(s) skipped for a tenant; the next sleep redoes them`,
199
- ];
200
- }
201
- // Watermark drain: only items enqueued before this rebuild started are marked; later arrivals stay pending.
202
- // Marked only after the last chunk, so a run stopped between chunks leaves the tenant for the next one.
203
- markPendingProcessedUpTo(ctx.hippoRoot, tenantId, maxPendingId);
204
- }
205
- catch (tenantErr) {
206
- // SAFETY: this is a best-effort log message only; property access
207
- // on any JS value is safe (undefined if absent), preserving the
208
- // existing lenient formatting even when something non-Error was thrown.
209
- result.details = [
210
- ...(result.details ?? []),
211
- `graph: extract failed for a dirty tenant (left pending): ${tenantErr.message}`,
212
- ];
213
- }
183
+ await rebuildDirtyTenant(ctx, phases, { tenantId, maxPendingId }, rebuilt, result);
214
184
  }
215
- if (gTenants > 0) {
216
- result.graph = { tenants: gTenants, entities: gEntities, relations: gRelations };
185
+ if (rebuilt.tenants > 0) {
186
+ result.graph = rebuilt;
217
187
  }
218
188
  }
219
189
  catch (graphErr) {
220
- // SAFETY: this is a best-effort log message only; property access on
221
- // any JS value is safe (undefined if absent), preserving the existing
222
- // lenient formatting even when something non-Error was thrown.
223
190
  result.details = [
224
191
  ...(result.details ?? []),
225
- `graph: drain phase failed (skipped): ${graphErr.message}`,
192
+ `graph: drain phase failed (skipped): ${errorMessage(graphErr)}`,
193
+ ];
194
+ }
195
+ }
196
+ /** Rebuilds one dirty tenant's graph into `rebuilt` and drains its queue; a failure is a detail line and the tenant stays pending. */
197
+ async function rebuildDirtyTenant(ctx, phases, dirty, rebuilt, result) {
198
+ try {
199
+ const ext = await phases.extractGraph(ctx.hippoRoot, dirty.tenantId);
200
+ // Count the rebuild as soon as it succeeds — it happened regardless of
201
+ // the drain-mark below.
202
+ rebuilt.tenants += 1;
203
+ rebuilt.entities += ext.entities;
204
+ rebuilt.relations += ext.relations;
205
+ if (ext.skipped) {
206
+ result.details = [
207
+ ...(result.details ?? []),
208
+ `graph: ${ext.skipped} stale op(s) skipped for a tenant; the next sleep redoes them`,
209
+ ];
210
+ }
211
+ // Watermark drain: only items enqueued before this rebuild started are marked; later arrivals stay pending.
212
+ // Marked only after the last chunk, so a run stopped between chunks leaves the tenant for the next one.
213
+ markPendingProcessedUpTo(ctx.hippoRoot, dirty.tenantId, dirty.maxPendingId);
214
+ }
215
+ catch (tenantErr) {
216
+ result.details = [
217
+ ...(result.details ?? []),
218
+ `graph: extract failed for a dirty tenant (left pending): ${errorMessage(tenantErr)}`,
226
219
  ];
227
220
  }
228
221
  }
@@ -230,34 +223,29 @@ async function drainGraphQueue(ctx, phases, snapshot, result) {
230
223
  // Its own handle; an audit failure is logged and never replaces the original phase error.
231
224
  function emitSleepAudit(ctx, opts, dryRun, counts, phaseError) {
232
225
  try {
233
- const db = openHippoDb(ctx.hippoRoot);
234
- try {
235
- const sleepAuditMetadata = {
236
- consolidationCount: counts.consolidation,
237
- dedupCount: counts.dedup,
238
- auditDeletedCount: counts.auditDeleted,
239
- ambientTotal: counts.ambient,
240
- dryRun,
241
- noShare: opts.noShare ?? false,
242
- partial: phaseError !== null,
243
- triggeredByTenant: ctx.tenantId, // preserve for audit forensics
244
- };
245
- if (phaseError)
246
- sleepAuditMetadata.errorMessage = phaseError.message;
247
- // A flush stopped between chunks names the unit it would have committed next, so a unit that fails every night can be found.
248
- const nextUnitIds = failedUnitOf(phaseError);
249
- if (nextUnitIds)
250
- sleepAuditMetadata.nextUnitIds = nextUnitIds;
251
- appendAuditEvent(db, {
226
+ // Tagged '__host__' because sleep is host-wide; the actor still names the operator who ran it.
227
+ const sleepAuditMetadata = {
228
+ consolidationCount: counts.consolidation,
229
+ dedupCount: counts.dedup,
230
+ auditDeletedCount: counts.auditDeleted,
231
+ ambientTotal: counts.ambient,
232
+ dryRun,
233
+ noShare: opts.noShare ?? false,
234
+ partial: phaseError !== null,
235
+ triggeredByTenant: ctx.tenantId, // preserve for audit forensics
236
+ };
237
+ if (phaseError)
238
+ sleepAuditMetadata.errorMessage = phaseError.message;
239
+ // A flush stopped between chunks names the unit it would have committed next, so a unit that fails every night can be found.
240
+ const nextUnitIds = failedUnitOf(phaseError);
241
+ if (nextUnitIds)
242
+ sleepAuditMetadata.nextUnitIds = nextUnitIds;
243
+ sqliteSyncStore(ctx.hippoRoot).appendAuditEvents([{
252
244
  tenantId: '__host__',
253
245
  actor: ctx.actor.subject,
254
246
  op: 'consolidate',
255
247
  metadata: { ...sleepAuditMetadata },
256
- });
257
- }
258
- finally {
259
- closeHippoDb(db);
260
- }
248
+ }]);
261
249
  }
262
250
  catch (auditErr) {
263
251
  // Logged, never thrown: a second failure must not mask the original phaseError.
@@ -1,4 +1,4 @@
1
- import type { AmbientState } from '../ambient.js';
1
+ import type { AmbientState } from '../core/ambient.js';
2
2
  import type { Context } from './types.js';
3
3
  /** Options for `sleep`, one consolidation cycle on a SQLite store that returns counts; unlike `hippo sleep` it skips the auto-learn step. */
4
4
  export interface SleepOpts {
@@ -1,5 +1,5 @@
1
- import { type TokenSummary, type TokenSurface } from '../token-ledger.js';
2
- import { type FailureSummary } from '../failure-log.js';
1
+ import type { TokenSummary, TokenSurface } from '../store/token-ledger.js';
2
+ import type { FailureSummary } from '../store/failure-log.js';
3
3
  import type { Context } from './types.js';
4
4
  /**
5
5
  * Record memory text handed to an agent in the token ledger.
@@ -1,9 +1,9 @@
1
1
  // Token-use and failure reports.
2
- import { openHippoDb, closeHippoDb, rethrowIfSqliteBlocked } from '../db.js';
3
- import { summarizeTokenUse } from '../token-ledger.js';
4
- import { storeFor } from '../store-port.js';
5
- import { summarizeFailures } from '../failure-log.js';
6
- import { log } from '../log.js';
2
+ import { rethrowIfSqliteBlocked } from '../db/index.js';
3
+ import { storeFor } from '../store/index.js';
4
+ import { failureLogSummary, tokenUseSummary } from '../store/usage-reports.js';
5
+ import { errorMessage, log } from '../util/log.js';
6
+ import { DAY_MS } from '../util/time.js';
7
7
  /**
8
8
  * Record memory text handed to an agent in the token ledger.
9
9
  * Best-effort: never throws, because a ledger failure must not fail the
@@ -22,7 +22,7 @@ export async function recordTokens(ctx, surface, use) {
22
22
  }
23
23
  catch (err) {
24
24
  rethrowIfSqliteBlocked(err);
25
- log.warnThenDebug('api-token-ledger', `token ledger write failed; the reply is unaffected: ${err instanceof Error ? err.message : String(err)}`);
25
+ log.warnThenDebug('api-token-ledger', `token ledger write failed; the reply is unaffected: ${errorMessage(err)}`);
26
26
  }
27
27
  }
28
28
  /**
@@ -31,26 +31,14 @@ export async function recordTokens(ctx, surface, use) {
31
31
  * surface, with session counts and mean tokens per session.
32
32
  */
33
33
  export function tokenSummary(ctx, opts = {}) {
34
- const db = openHippoDb(ctx.hippoRoot);
35
- try {
36
- return summarizeTokenUse(db, ctx.tenantId, reportWindowStart(opts.days));
37
- }
38
- finally {
39
- closeHippoDb(db);
40
- }
34
+ return tokenUseSummary(ctx.hippoRoot, ctx.tenantId, reportWindowStart(opts.days));
41
35
  }
42
36
  /** Failed tool calls by outcome, and repeats across sessions, over the last `days` days (default 30). */
43
37
  export function failureSummary(ctx, opts = {}) {
44
- const db = openHippoDb(ctx.hippoRoot);
45
- try {
46
- return summarizeFailures(db, ctx.tenantId, reportWindowStart(opts.days));
47
- }
48
- finally {
49
- closeHippoDb(db);
50
- }
38
+ return failureLogSummary(ctx.hippoRoot, ctx.tenantId, reportWindowStart(opts.days));
51
39
  }
52
40
  function reportWindowStart(days) {
53
41
  const span = days !== undefined && Number.isFinite(days) && days > 0 ? days : 30;
54
- return new Date(Date.now() - span * 86_400_000).toISOString();
42
+ return new Date(Date.now() - span * DAY_MS).toISOString();
55
43
  }
56
44
  //# sourceMappingURL=tokens.js.map