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,20 +1,13 @@
1
1
  // Promote to the global store, supersede with a successor, and archive raw memories.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { ConflictError, NotFoundError } from '../api-errors.js';
2
+ import { openHippoDb, closeHippoDb } from '../db/index.js';
3
+ import { ConflictError, NotFoundError } from '../core/api-errors.js';
4
4
  import { stampOriginProject } from '../store/entry-row.js';
5
- import { writeEntryMirrors } from '../store/entry-writes.js';
6
- import { cleanArchivedMirrors, commitSupersede } from '../store/entry-writes-group.js';
7
- import { readEntry } from '../store/entry-reads.js';
8
- import { updateStatsUnlessBusy } from '../store/index-and-stats.js';
9
- import { requireGroup } from '../store-port.js';
10
- import { log } from '../log.js';
11
- import { createSuccessor } from '../memory.js';
12
- import { appendAuditEvent } from '../audit.js';
13
- import { promoteToGlobal } from '../shared.js';
14
- import { archiveRawMemory } from '../raw-archive.js';
15
- import { loadConfig } from '../config.js';
5
+ import { createSuccessor } from '../core/memory.js';
6
+ import { promoteToGlobal } from '../sharing/shared.js';
7
+ import { loadConfig } from '../core/config.js';
8
+ import { andThen, notPorted, onStore } from './on-store.js';
16
9
  import { selectMemoryReach } from '../store/tenant-lookup.js';
17
- import { canTouchScope, personalScopeOf } from '../recall-scope.js';
10
+ import { canTouchScope, personalScopeOf } from '../store/recall-scope.js';
18
11
  export function promote(ctx, id) {
19
12
  // Tenant scope: promoteToGlobal reads the entry from the local root via
20
13
  // readEntry without a tenant filter, so a Bearer for tenant A could
@@ -36,64 +29,24 @@ export function promote(ctx, id) {
36
29
  const globalEntry = promoteToGlobal(ctx.hippoRoot, id, {
37
30
  actor: ctx.actor.subject,
38
31
  tenantId: ctx.tenantId,
39
- afterWrite: (db, globalId) => appendAuditEvent(db, {
40
- tenantId: ctx.tenantId,
41
- actor: ctx.actor.subject,
42
- op: 'promote',
43
- targetId: globalId,
44
- metadata: { sourceId: id },
45
- }),
32
+ auditAs: { tenantId: ctx.tenantId, actor: ctx.actor.subject },
46
33
  });
47
34
  return { ok: true, sourceId: id, globalId: globalEntry.id };
48
35
  }
49
36
  export function supersede(ctx, oldId, newContent) {
50
- const reply = ctx.store ? supersedeThroughStore(ctx, ctx.store, oldId, newContent) : supersedeOnHippoDb(ctx, oldId, newContent);
51
- // 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.
52
- return reply;
53
- }
54
- async function supersedeThroughStore(ctx, store, oldId, newContent) {
55
- const entryWrites = requireGroup(store, 'entryWrites');
56
- const [old] = await store.entriesByIds([oldId], ctx.tenantId);
57
- const newEntry = createSuccessor(assertSupersedable(ctx, oldId, old ?? null), newContent, {
58
- tenantId: ctx.tenantId,
59
- baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays,
37
+ return onStore(ctx, (port) => {
38
+ const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
39
+ return andThen(port.entriesByIds([oldId], ctx.tenantId), ([old]) => {
40
+ const newEntry = createSuccessor(assertSupersedable(ctx, oldId, old ?? null), newContent, {
41
+ tenantId: ctx.tenantId,
42
+ baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays,
43
+ });
44
+ // A store writes origin_project as given, so the served folder's fallback is stamped here.
45
+ const successor = stampOriginProject(ctx.hippoRoot, newEntry);
46
+ const write = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), oldId, successor };
47
+ return andThen(entryWrites.supersede(write), () => ({ ok: true, oldId, newId: successor.id }));
48
+ });
60
49
  });
61
- // The store writes origin_project as given, so the served folder's fallback is stamped here.
62
- const successor = stampOriginProject(ctx.hippoRoot, newEntry);
63
- await entryWrites.supersede({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), oldId, successor });
64
- return { ok: true, oldId, newId: successor.id };
65
- }
66
- function supersedeOnHippoDb(ctx, oldId, newContent) {
67
- const old = assertSupersedable(ctx, oldId, readEntry(ctx.hippoRoot, oldId, ctx.tenantId));
68
- const successor = stampOriginProject(ctx.hippoRoot, createSuccessor(old, newContent, {
69
- tenantId: ctx.tenantId,
70
- baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays,
71
- }));
72
- // Race-safe transition: open a fresh db handle, BEGIN IMMEDIATE, run all
73
- // three steps (CAS on old + writeEntryDbOnly(new) + supersede audit row)
74
- // inside the same transaction. Two concurrent supersedes: exactly one CAS
75
- // wins (changes=1), the other gets changes=0 and throws CONFLICT. No
76
- // dangling-pointer window: the new memory's row commits atomically with
77
- // the old.superseded_by pointer.
78
- const db = openHippoDb(ctx.hippoRoot);
79
- try {
80
- commitSupersede(db, { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), oldId, successor });
81
- // Mirrors after COMMIT, while the db handle is still open. Same
82
- // invariant as the original writeEntry: a mirror failure leaves disk
83
- // MISSING the markdown for the new memory (rebuildIndex rewrites every
84
- // markdown mirror from the DB) but DOES NOT desync the DB or
85
- // roll back the supersede. Logged + swallowed, non-fatal.
86
- try {
87
- writeEntryMirrors(ctx.hippoRoot, successor);
88
- }
89
- catch (mirrorErr) {
90
- log.error(`supersede: mirror write failed (non-fatal, will self-heal): ${mirrorErr instanceof Error ? mirrorErr.message : String(mirrorErr)}`);
91
- }
92
- }
93
- finally {
94
- closeHippoDb(db);
95
- }
96
- return { ok: true, oldId, newId: successor.id };
97
50
  }
98
51
  /** The tenant-scoped row to supersede; another tenant's id, or someone else's personal row, reads as not found. */
99
52
  function assertSupersedable(ctx, oldId, old) {
@@ -107,44 +60,14 @@ function assertSupersedable(ctx, oldId, old) {
107
60
  return old;
108
61
  }
109
62
  export function archiveRaw(ctx, id, reason, opts = {}) {
110
- const reply = ctx.store ? archiveRawThroughStore(ctx, ctx.store, id, reason, opts) : archiveRawOnHippoDb(ctx, id, reason, opts);
111
- // 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.
112
- return reply;
113
- }
114
- /** afterArchive writes on hippo.db's own handle, and only connectors send it, so a store refuses it. */
115
- async function archiveRawThroughStore(ctx, store, id, reason, opts) {
116
- const entryWrites = requireGroup(store, 'entryWrites');
117
- if (opts.afterArchive)
118
- throw new Error('afterArchive runs on hippo.db only, never through a store');
119
- const archivedAt = await entryWrites.archiveRaw({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id, reason });
120
- return { ok: true, archivedAt };
121
- }
122
- function archiveRawOnHippoDb(ctx, id, reason, opts) {
123
- const db = openHippoDb(ctx.hippoRoot);
124
- let archivedAt;
125
- try {
126
- // Tenant scope: archiveRawMemory looks up the row by id alone, so a
127
- // Bearer for tenant A could archive tenant B's raw row without this
128
- // pre-check. Deny cross-tenant access with the same not-found message
129
- // archiveRawMemory itself would throw on a missing row, so we don't
130
- // leak whether the id exists in another tenant.
131
- const reach = selectMemoryReach(db, id);
132
- if (reach?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, reach.scope)) {
133
- throw new NotFoundError(`memory not found: ${id}`);
134
- }
135
- archivedAt = archiveRawMemory(db, id, {
136
- reason,
137
- who: ctx.actor.subject,
138
- afterArchive: opts.afterArchive,
139
- });
140
- cleanArchivedMirrors(db, ctx.hippoRoot, id);
141
- }
142
- finally {
143
- closeHippoDb(db);
144
- }
145
- // Counted here rather than in the CLI: the HTTP archive route calls this too,
146
- // so a routed archive would otherwise never reach the forgotten counter.
147
- updateStatsUnlessBusy(ctx.hippoRoot, { forgotten: 1 }, `removed ${id}`);
148
- return { ok: true, archivedAt };
63
+ return onStore(ctx, (port) => {
64
+ const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
65
+ const archive = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id, reason };
66
+ const { event } = opts;
67
+ const archived = event
68
+ ? (port.connectorWrites ?? notPorted(port, 'connectorWrites')).archiveConnectorEntry({ ...archive, event })
69
+ : entryWrites.archiveRaw(archive);
70
+ return andThen(archived, (archivedAt) => ({ ok: true, archivedAt }));
71
+ });
149
72
  }
150
73
  //# sourceMappingURL=promote.js.map
@@ -1,11 +1,11 @@
1
- import { type Context, type ContextResult, type ContextResultEntry } from './api.js';
2
- import { type openHippoDb } from './db.js';
3
- import type { DeliveryRecorder } from './delivery-recorder.js';
4
- import { type JsonValue } from './json.js';
5
- import type { MemoryEntry } from './memory.js';
1
+ import { type Context, type ContextResult, type ContextResultEntry } from './index.js';
2
+ import type { DeliveryRecorder } from '../store/delivery-recorder.js';
3
+ import { type JsonValue } from '../util/json.js';
4
+ import type { MemoryEntry } from '../core/memory.js';
6
5
  import { type PilotArm } from './pilot-arm.js';
7
- /** With `db`, writes on the token ledger's handle (same store); without it, opens its own. A second flush is a no-op. */
8
- export declare function flushDeliveryRecorder(rec: DeliveryRecorder | null, db?: ReturnType<typeof openHippoDb>): void;
6
+ import type { DeliveryWrite } from '../store/ledger-turn.js';
7
+ /** With `write`, stores on the token ledger's connection (same store); without it, opens its own. A second flush is a no-op. */
8
+ export declare function flushDeliveryRecorder(rec: DeliveryRecorder | null, write?: DeliveryWrite): void;
9
9
  /** What one render needs once api.getContext has answered. */
10
10
  export interface ContextView {
11
11
  readonly hippoRoot: string;
@@ -1,27 +1,28 @@
1
1
  // The per-prompt hook's block and ledger rows, rendered here for `hippo context` and for promptHookContext (a remote hook route's call).
2
2
  // promptHookContext keeps the server-side copy of the CLI's getContext flags (cli/context.ts); the CLI parity case in tests/prompt-hook-context.test.ts is all that ties the two.
3
- import { getContext } from './api.js';
4
- import { BadRequestError } from './api-errors.js';
5
- import { isSharedStore, loadConfig } from './config.js';
3
+ import { getContext } from './index.js';
4
+ import { BadRequestError } from '../core/api-errors.js';
5
+ import { isSharedStore, loadConfig } from '../core/config.js';
6
6
  import { contextBlockLines, contextCost, crossProjectLines, handoffText, sessionTrailText, settleTokens, snapshotText } from './context-render.js';
7
- import { isSqliteBusy, noteStoreBusy } from './db.js';
8
- import { MAX_ID_LEN } from './http-util.js';
9
- import { isJsonString } from './json.js';
10
- import { withLedgerDb } from './ledger-db.js';
7
+ import { MAX_ID_LEN } from '../util/http-util.js';
8
+ import { isJsonString } from '../util/json.js';
9
+ import { bookLedgerTurn, ledgerLastSent, noteLedgerRowSkipped } from './ledger-db.js';
11
10
  import { sessionPilotArm } from './pilot-arm.js';
12
- import { assertCallerProject, MAX_PROJECT_ALIASES } from './project-identity.js';
13
- import { writeDeliveryEventAtRoot, writeDeliveryEventOnHandle } from './recall-trace.js';
14
- import { blockHash, estimateTokens, hookPayloadString, isSubagentPayload, lastSentState, recordTokenUse, shouldSkipUnchanged, } from './token-ledger.js';
15
- /** With `db`, writes on the token ledger's handle (same store); without it, opens its own. A second flush is a no-op. */
16
- export function flushDeliveryRecorder(rec, db) {
11
+ import { assertCallerProject, MAX_PROJECT_ALIASES } from '../core/project-identity.js';
12
+ import { writeDeliveryEventAtRoot } from '../store/recall-trace.js';
13
+ import { hookPayloadString, isSubagentPayload, shouldSkipUnchanged, } from '../store/token-ledger.js';
14
+ import { blockHash, estimateTokens } from '../util/token-text.js';
15
+ import { errorMessage } from '../util/log.js';
16
+ /** With `write`, stores on the token ledger's connection (same store); without it, opens its own. A second flush is a no-op. */
17
+ export function flushDeliveryRecorder(rec, write) {
17
18
  if (rec === null)
18
19
  return;
19
20
  try {
20
- rec.flush((input) => (db ? writeDeliveryEventOnHandle(db, input) : writeDeliveryEventAtRoot(rec.root, input)));
21
+ rec.flush(write ?? ((input) => writeDeliveryEventAtRoot(rec.root, input)));
21
22
  }
22
23
  catch (error) {
23
24
  // The hook's one-line stderr contract pins this exact text, so it bypasses the leveled logger.
24
- console.error(`[hippo] delivery ledger write failed:${error instanceof Error ? error.message : String(error)}`);
25
+ console.error(`[hippo] delivery ledger write failed:${errorMessage(error)}`);
25
26
  }
26
27
  }
27
28
  /** A Copilot sessionStart reply's wrapper, picked by the sender's casing: stdin.ts keeps a camelCase `sessionId`, which only the Copilot harness sends. */
@@ -113,51 +114,31 @@ function skipUnchangedStatic(view, surface, staticBlock, recallBlock, staticCoun
113
114
  // Before the ledger read, so a caller that did not print this block books no skip row.
114
115
  if (view.printedHash !== undefined && view.printedHash !== staticHash)
115
116
  return false;
116
- const last = withLedgerDb(hippoRoot, (db) => lastSentState(db, view.tenantId, payloadSessionId, surface), ledgerOpts);
117
+ const last = ledgerLastSent(hippoRoot, view.tenantId, payloadSessionId, surface, ledgerOpts);
117
118
  if (!shouldSkipUnchanged(last ?? null, staticHash, refreshTurns))
118
119
  return false;
119
- withLedgerDb(hippoRoot, (db) => {
120
- recordTokenUse(db, {
121
- tenantId: view.tenantId, sessionId: payloadSessionId, surface, event: 'skip',
122
- items: staticCount, tokens: estimateTokens(staticBlock), hash: staticHash,
123
- });
124
- if (recallBlock.trim())
125
- return;
126
- rec?.delivered({ state: 'reused', staticHash, staticReused: true });
127
- flushDeliveryRecorder(rec, db);
120
+ bookLedgerTurn(hippoRoot, {
121
+ uses: [{
122
+ tenantId: view.tenantId, sessionId: payloadSessionId, surface, event: 'skip',
123
+ items: staticCount, tokens: estimateTokens(staticBlock), hash: staticHash,
124
+ }],
125
+ delivery: recallBlock.trim() ? undefined : (write) => {
126
+ rec?.delivered({ state: 'reused', staticHash, staticReused: true });
127
+ flushDeliveryRecorder(rec, write);
128
+ },
128
129
  }, ledgerOpts);
129
130
  return true;
130
131
  }
131
- /** One connection for both rows; each insert in its own try so one failing doesn't skip the other. */
132
+ /** One connection for both rows; a failed row is logged and the other still lands, because a ledger failure must not break the hook. */
132
133
  function recordAdditionalContextRows(view, surface, staticPart, recallPart) {
133
- withLedgerDb(view.hippoRoot, (db) => {
134
- if (staticPart.text) {
135
- try {
136
- recordTokenUse(db, {
137
- tenantId: view.tenantId, sessionId: view.ledgerSessionId, surface, event: 'inject',
138
- items: staticPart.items, tokens: estimateTokens(staticPart.text), hash: blockHash(staticPart.text),
139
- });
140
- // Best-effort row: only a busy store is actionable, and a ledger failure must not break the hook.
141
- }
142
- catch (error) {
143
- if (isSqliteBusy(error))
144
- noteStoreBusy('token ledger row skipped');
145
- }
146
- }
147
- if (recallPart.text) {
148
- try {
149
- recordTokenUse(db, {
150
- tenantId: view.tenantId, sessionId: view.ledgerSessionId, surface: 'hook_recall', event: 'inject',
151
- items: recallPart.items, tokens: estimateTokens(recallPart.text), hash: blockHash(recallPart.text),
152
- });
153
- // Same best-effort rule as the inject row above.
154
- }
155
- catch (error) {
156
- if (isSqliteBusy(error))
157
- noteStoreBusy('token ledger row skipped');
158
- }
159
- }
160
- flushDeliveryRecorder(view.rec, db);
134
+ const row = (part, on) => ({
135
+ tenantId: view.tenantId, sessionId: view.ledgerSessionId, surface: on, event: 'inject',
136
+ items: part.items, tokens: estimateTokens(part.text), hash: blockHash(part.text),
137
+ });
138
+ bookLedgerTurn(view.hippoRoot, {
139
+ uses: [...(staticPart.text ? [row(staticPart, surface)] : []), ...(recallPart.text ? [row(recallPart, 'hook_recall')] : [])],
140
+ onRowError: noteLedgerRowSkipped,
141
+ delivery: (write) => flushDeliveryRecorder(view.rec, write),
161
142
  }, { sharedStore: view.sharedStore });
162
143
  }
163
144
  // The flags HIPPO_PINNED_INJECT_COMMAND gives the local hook; the CLI parity test fails if the two drift.
@@ -1,5 +1,5 @@
1
- import { type QuarantineStatus } from '../quarantine.js';
2
- import type { KeysetPosition } from '../keyset.js';
1
+ import type { QuarantineStatus } from '../store/quarantine.js';
2
+ import type { KeysetPosition } from '../util/keyset.js';
3
3
  import type { Context } from './types.js';
4
4
  export interface QuarantineListItem {
5
5
  id: string;
@@ -16,9 +16,9 @@ export declare function quarantineList(ctx: Context, opts?: {
16
16
  status?: QuarantineStatus | 'all';
17
17
  limit?: number;
18
18
  after?: KeysetPosition;
19
- }): QuarantineListItem[];
19
+ }): Promise<QuarantineListItem[]>;
20
20
  /** Release a quarantined memory to its original scope. Admin only; the scope guard refuses a row moved since (mirrors restoreDormant). */
21
- export declare function quarantineApprove(ctx: Context, id: string): void;
21
+ export declare function quarantineApprove(ctx: Context, id: string): Promise<void>;
22
22
  /** Keep a quarantined memory hidden for good. Admin only; the raw row is untouched (append-only). */
23
- export declare function quarantineReject(ctx: Context, id: string): void;
23
+ export declare function quarantineReject(ctx: Context, id: string): Promise<void>;
24
24
  //# sourceMappingURL=quarantine.d.ts.map
@@ -1,122 +1,46 @@
1
1
  // Quarantine review: list, approve and reject held memories.
2
- import { openHippoDb, closeHippoDb } from '../db.js';
3
- import { ConflictError, ForbiddenError, NotFoundError } from '../api-errors.js';
4
- import { writeEntryMirrors } from '../store/entry-writes.js';
5
- import { readEntry, selectEntriesByIds } from '../store/entry-reads.js';
6
- import { quarantineScopeFor, getQuarantineRow, listQuarantineRows, approveQuarantineRow, rejectQuarantineRow, } from '../quarantine.js';
7
- import { log } from '../log.js';
8
- import { appendAuditEvent } from '../audit.js';
2
+ import { ConflictError, ForbiddenError, NotFoundError } from '../core/api-errors.js';
3
+ import { requireGroup, storeFor } from '../store/index.js';
9
4
  const QUARANTINE_PREVIEW_CHARS = 200;
10
5
  /** A tenant's quarantined memories, newest first. Default `status` is 'pending' (the review queue). */
11
- export function quarantineList(ctx, opts = {}) {
12
- const db = openHippoDb(ctx.hippoRoot);
13
- try {
14
- const rows = listQuarantineRows(db, ctx.tenantId, opts.status ?? 'pending', opts.limit, opts.after);
15
- const entries = selectEntriesByIds(db, rows.map((row) => row.memoryId), ctx.tenantId);
16
- return rows.map((row) => {
17
- const entry = entries.get(row.memoryId);
18
- return {
19
- id: row.memoryId,
20
- originalScope: row.originalScope,
21
- reason: row.reason,
22
- status: row.status,
23
- quarantinedAt: row.quarantinedAt,
24
- decidedAt: row.decidedAt,
25
- decidedBy: row.decidedBy,
26
- contentPreview: entry ? entry.content.slice(0, QUARANTINE_PREVIEW_CHARS) : '',
27
- };
28
- });
29
- }
30
- finally {
31
- closeHippoDb(db);
32
- }
6
+ export async function quarantineList(ctx, opts = {}) {
7
+ const rows = await requireGroup(storeFor(ctx), 'quarantine')
8
+ .listQuarantined(ctx.tenantId, { status: opts.status ?? 'pending', limit: opts.limit, after: opts.after });
9
+ return rows.map((row) => ({
10
+ id: row.memoryId,
11
+ originalScope: row.originalScope,
12
+ reason: row.reason,
13
+ status: row.status,
14
+ quarantinedAt: row.quarantinedAt,
15
+ decidedAt: row.decidedAt,
16
+ decidedBy: row.decidedBy,
17
+ contentPreview: (row.content ?? '').slice(0, QUARANTINE_PREVIEW_CHARS),
18
+ }));
33
19
  }
34
- function loadPendingQuarantineRow(db, tenantId, id) {
35
- const row = getQuarantineRow(db, tenantId, id);
36
- if (!row)
37
- throw new NotFoundError(`not quarantined: ${id}`);
38
- if (row.status !== 'pending')
39
- throw new ConflictError(`${id} is already ${row.status}`);
40
- return row;
20
+ function refusalError(id, refusal) {
21
+ if (refusal.outcome === 'not_quarantined')
22
+ return new NotFoundError(`not quarantined: ${id}`);
23
+ return new ConflictError(`${id} is already ${refusal.status}`);
41
24
  }
42
25
  /** Release a quarantined memory to its original scope. Admin only; the scope guard refuses a row moved since (mirrors restoreDormant). */
43
- export function quarantineApprove(ctx, id) {
26
+ export async function quarantineApprove(ctx, id) {
44
27
  if (ctx.actor.role !== 'admin') {
45
28
  throw new ForbiddenError('Only an admin key can approve a quarantined memory');
46
29
  }
47
- const db = openHippoDb(ctx.hippoRoot);
48
- try {
49
- db.exec('BEGIN IMMEDIATE');
50
- try {
51
- const row = loadPendingQuarantineRow(db, ctx.tenantId, id);
52
- const quarantineScope = quarantineScopeFor(row.originalScope);
53
- const updated = db
54
- .prepare(`UPDATE memories SET scope = ? WHERE id = ? AND tenant_id = ? AND scope = ?`)
55
- .run(row.originalScope, id, ctx.tenantId, quarantineScope);
56
- if (Number(updated.changes ?? 0) !== 1) {
57
- throw new ConflictError(`memory ${id} scope changed since quarantine; refusing to approve`);
58
- }
59
- approveQuarantineRow(db, ctx.tenantId, id, ctx.actor.subject);
60
- appendAuditEvent(db, {
61
- tenantId: ctx.tenantId,
62
- actor: ctx.actor.subject,
63
- op: 'quarantine_approve',
64
- targetId: id,
65
- metadata: { originalScope: row.originalScope },
66
- });
67
- db.exec('COMMIT');
68
- }
69
- catch (err) {
70
- try {
71
- db.exec('ROLLBACK');
72
- }
73
- catch { /* already rolled back */ }
74
- throw err;
75
- }
76
- }
77
- finally {
78
- closeHippoDb(db);
79
- }
80
- // Post-commit, best-effort: a failed rewrite leaves the mirror showing the quarantine scope (fail-closed).
81
- try {
82
- const restored = readEntry(ctx.hippoRoot, id, ctx.tenantId);
83
- if (restored)
84
- writeEntryMirrors(ctx.hippoRoot, restored);
85
- }
86
- catch (err) {
87
- log.error(`quarantine: mirror rewrite failed for ${id}: ${err instanceof Error ? err.message : String(err)}`);
88
- }
30
+ const result = await requireGroup(storeFor(ctx), 'quarantine').approveQuarantined(ctx.tenantId, id, ctx.actor.subject);
31
+ if (result.outcome === 'approved')
32
+ return;
33
+ if (result.outcome === 'scope_moved')
34
+ throw new ConflictError(`memory ${id} scope changed since quarantine; refusing to approve`);
35
+ throw refusalError(id, result);
89
36
  }
90
37
  /** Keep a quarantined memory hidden for good. Admin only; the raw row is untouched (append-only). */
91
- export function quarantineReject(ctx, id) {
38
+ export async function quarantineReject(ctx, id) {
92
39
  if (ctx.actor.role !== 'admin') {
93
40
  throw new ForbiddenError('Only an admin key can reject a quarantined memory');
94
41
  }
95
- const db = openHippoDb(ctx.hippoRoot);
96
- try {
97
- db.exec('BEGIN IMMEDIATE');
98
- try {
99
- loadPendingQuarantineRow(db, ctx.tenantId, id);
100
- rejectQuarantineRow(db, ctx.tenantId, id, ctx.actor.subject);
101
- appendAuditEvent(db, {
102
- tenantId: ctx.tenantId,
103
- actor: ctx.actor.subject,
104
- op: 'quarantine_reject',
105
- targetId: id,
106
- metadata: {},
107
- });
108
- db.exec('COMMIT');
109
- }
110
- catch (err) {
111
- try {
112
- db.exec('ROLLBACK');
113
- }
114
- catch { /* already rolled back */ }
115
- throw err;
116
- }
117
- }
118
- finally {
119
- closeHippoDb(db);
120
- }
42
+ const result = await requireGroup(storeFor(ctx), 'quarantine').rejectQuarantined(ctx.tenantId, id, ctx.actor.subject);
43
+ if (result.outcome !== 'rejected')
44
+ throw refusalError(id, result);
121
45
  }
122
46
  //# sourceMappingURL=quarantine.js.map
@@ -0,0 +1,4 @@
1
+ import type { CliCoreRanker, RecallOpts, RecallResult } from './recall-types.js';
2
+ import type { Context } from './types.js';
3
+ export declare function retrieveWithCliCore(ctx: Context, opts: RecallOpts, core: CliCoreRanker): Promise<RecallResult>;
4
+ //# sourceMappingURL=recall-core.d.ts.map
@@ -0,0 +1,112 @@
1
+ // The CLI ranking core as a ranker of retrieve(): rank, let the caller pick the list it shows, then record that list once.
2
+ import { ForbiddenError } from '../core/api-errors.js';
3
+ import { reportAuditWriteFailure } from '../store/audit.js';
4
+ import { decidePlanningFallacy, detectPlanningClaim } from '../predictions/planning-fallacy.js';
5
+ import { rankRecall } from './recall-pipeline.js';
6
+ import { writeRecallTraceAtRoot } from '../store/recall-trace.js';
7
+ import { saveIndex } from '../store/index-and-stats.js';
8
+ import { sqliteStore } from '../store/index.js';
9
+ import { estimateTokens } from '../util/token-text.js';
10
+ import { callerOf, recallAuditMetadata, recallAuditRow, strengthenOf } from './recall-record.js';
11
+ import { recordTokens } from './tokens.js';
12
+ // entriesByIds reads at most this many ids a call.
13
+ const ID_READ_CHUNK = 500;
14
+ export async function retrieveWithCliCore(ctx, opts, core) {
15
+ // This ranker applies the operator's scope rule and may search a second store, so no bearer client may reach it.
16
+ if (!ctx.actor.hostAdmin)
17
+ throw new ForbiddenError('The CLI ranking core serves the host admin only');
18
+ const globalRoot = core.sources?.globalRoot;
19
+ // The ranking core reads hippo.db itself, so its writes go to the same file whatever store the context names.
20
+ const store = sqliteStore(ctx.hippoRoot);
21
+ const ranking = await rankRecall({ hippoRoot: ctx.hippoRoot, globalRoot, tenantId: ctx.tenantId, note: core.note }, { ...core.rank, query: opts.query, sessionId: opts.sessionId, goalTag: opts.goalTag });
22
+ if (ranking.halted) {
23
+ // The stages that ran earned these rows, so the caller's flag error does not drop them.
24
+ if (ranking.goalRecallLog.length > 0)
25
+ await store.finishRecall({ goalLog: ranking.goalRecallLog, audit: [] });
26
+ return resultOf(ranking, []);
27
+ }
28
+ if ('inspect' in core) {
29
+ core.inspect(ranking);
30
+ return resultOf(ranking, ranking.results);
31
+ }
32
+ const planning = await planningFor(ctx, store, opts.query);
33
+ const shown = core.show(ranking, planning?.output ?? {});
34
+ await recordShown(ctx, store, opts, core, { ranking, shown, planningAudit: planning?.audit });
35
+ const result = resultOf(ranking, shown.results);
36
+ if (planning?.output.hint)
37
+ result.planningFallacyHint = planning.output.hint;
38
+ if (planning?.output.watching)
39
+ result.planningFallacyWatching = planning.output.watching;
40
+ return result;
41
+ }
42
+ async function planningFor(ctx, store, query) {
43
+ const claim = detectPlanningClaim(query);
44
+ if (!claim)
45
+ return null;
46
+ return decidePlanningFallacy(claim, await store.planningFallacyEvidence(ctx.tenantId, claim.classQueryTokens), ctx.tenantId, ctx.actor.subject);
47
+ }
48
+ function resultOf(ranking, shown) {
49
+ const results = shown.map((r) => ({ id: r.entry.id, content: r.entry.content, score: r.score, layer: r.entry.layer, strength: r.entry.strength }));
50
+ return {
51
+ results,
52
+ total: ranking.totalCandidates + ranking.graphAdded,
53
+ tokens: results.reduce((sum, r) => sum + estimateTokens(r.content), 0),
54
+ };
55
+ }
56
+ /** Audit rows first: a recall they cannot be written for leaves no strengthen, trace, marker or count, as under the other rankers. */
57
+ async function recordShown(ctx, store, opts, core, done) {
58
+ const { ranking, shown, planningAudit } = done;
59
+ const ids = shown.results.map((r) => r.entry.id);
60
+ const recallRow = recallAuditRow(callerOf(ctx), 'recall', undefined, recallAuditMetadata(opts.query, ids.length));
61
+ const second = core.sources?.globalRoot !== undefined && core.sources.globalRoot !== ctx.hippoRoot ? core.sources.globalRoot : undefined;
62
+ const heldElsewhere = second !== undefined ? await idsNotHeld(store, ids, ctx.tenantId) : [];
63
+ const audited = await finishOrReport(store, {
64
+ goalLog: ranking.goalRecallLog,
65
+ audit: [...(planningAudit ? [planningAudit] : []), ...shown.audit, recallRow],
66
+ strengthen: strengthenOf(ctx, ids),
67
+ });
68
+ if (audited) {
69
+ // The second store logs that it was searched, and strengthens only the rows the first does not hold.
70
+ if (second !== undefined)
71
+ await finishOrReport(sqliteStore(second), { goalLog: [], audit: [recallRow], strengthen: strengthenOf(ctx, heldElsewhere) });
72
+ await traceAndMark(ctx, store, opts, core, shown.results);
73
+ }
74
+ // The ledger books the text the caller prints, and it prints whether or not the record was written.
75
+ await recordTokens(ctx, 'recall', { items: ids.length, tokens: shown.tokens, sessionId: core.hostSessionId ?? null });
76
+ }
77
+ // The caller has ranked and is about to print, so a failed audit write is logged and counted, never thrown.
78
+ async function finishOrReport(store, writes) {
79
+ try {
80
+ await store.finishRecall(writes);
81
+ return true;
82
+ }
83
+ catch (err) {
84
+ reportAuditWriteFailure('recall', String(err));
85
+ return false;
86
+ }
87
+ }
88
+ async function idsNotHeld(store, ids, tenantId) {
89
+ const held = new Set();
90
+ for (let i = 0; i < ids.length; i += ID_READ_CHUNK) {
91
+ for (const entry of await store.entriesByIds(ids.slice(i, i + ID_READ_CHUNK), tenantId))
92
+ held.add(entry.id);
93
+ }
94
+ return ids.filter((id) => !held.has(id));
95
+ }
96
+ async function traceAndMark(ctx, store, opts, core, shown) {
97
+ // An empty list is traced too, so a coverage gap still reaches the training corpus.
98
+ const traceId = writeRecallTraceAtRoot(ctx.hippoRoot, {
99
+ tenantId: ctx.tenantId,
100
+ sessionId: opts.sessionId || core.hostSessionId || null,
101
+ pipeline: 'cli',
102
+ query: opts.query,
103
+ explainMode: core.rank.why === true,
104
+ results: shown.map((r) => ({ memoryId: r.entry.id, score: r.score, rerankSteps: r.rerankTrace })),
105
+ });
106
+ if (shown.length === 0)
107
+ return;
108
+ // One write for both markers, so `hippo outcome` never pairs these ids with an older trace.
109
+ saveIndex(ctx.hippoRoot, { last_retrieval_ids: shown.map((r) => r.entry.id), last_trace_id: traceId !== null ? String(traceId) : null });
110
+ await store.bumpRecallStats(shown.length);
111
+ }
112
+ //# sourceMappingURL=recall-core.js.map