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
@@ -0,0 +1,17 @@
1
+ import { StoreNotPortedError } from '../util/sqlite-blocked.js';
2
+ /** Tells a refusal from the row a write answered; no row carries a `refused` key. */
3
+ export function isObjectRefusal(written) {
4
+ return 'refused' in written;
5
+ }
6
+ export function hasGroup(store, group) {
7
+ return group === 'base' || store[group] !== undefined;
8
+ }
9
+ /** The group's methods; a store without them throws StoreNotPortedError, which answers 501 as any unported path does. */
10
+ export function requireGroup(store, group) {
11
+ const groups = store;
12
+ const methods = groups[group];
13
+ if (methods === undefined)
14
+ throw new StoreNotPortedError(store.kind, group);
15
+ return methods;
16
+ }
17
+ //# sourceMappingURL=port.js.map
@@ -22,7 +22,9 @@
22
22
  * The planning-fallacy detector reads `loadPredictionsByClass` and computes
23
23
  * per-class base rates from (estimate_value, actual_value) at query time.
24
24
  */
25
- import { type KeysetPosition } from '../keyset.js';
25
+ import { type MemoryEntry } from '../core/memory.js';
26
+ import { type KeysetPosition } from '../util/keyset.js';
27
+ import type { PredictionSave } from './port.js';
26
28
  export type ClosureState = 'open' | 'closed' | 'closed-unknown';
27
29
  export declare const VALID_CLOSURE_STATES: ReadonlySet<ClosureState>;
28
30
  export interface Prediction {
@@ -72,6 +74,10 @@ export interface ListPredictionsOpts {
72
74
  * structured store used by the planning-fallacy detector.
73
75
  */
74
76
  export declare function savePrediction(hippoRoot: string, tenantId: string, opts: SavePredictionOpts, actor?: string): Prediction;
77
+ /** The memory row that mirrors a claim into recall, built here alone so every store keeps the same row for it. */
78
+ export declare function predictionMirror(tenantId: string, claim: SavePredictionOpts, baseHalfLifeDays: number): MemoryEntry;
79
+ /** The store port's save on hippo.db: the mirror goes in as the port's writeEntry has it, tenant check included, and its predictions row shares that write scope, so neither lands alone. */
80
+ export declare function writePrediction(hippoRoot: string, tenantId: string, save: PredictionSave, actor: string): Prediction;
75
81
  /**
76
82
  * Close an existing open prediction. Updates the predictions row only;
77
83
  * the memory mirror is NOT mutated in v1 (predictions table is canonical).
@@ -106,6 +112,11 @@ export interface PredictionBaserate {
106
112
  * Empty when nClosed = 0. */
107
113
  summary: string;
108
114
  }
115
+ /** One closed prediction as the baserate reads it: both values set. */
116
+ export interface BaserateRow {
117
+ estimate_value: number;
118
+ actual_value: number;
119
+ }
109
120
  /**
110
121
  * Compute base-rate stats for closed predictions in a class for the
111
122
  * planning-fallacy detector: Lovallo-Kahneman (2003) inside-vs-outside view.
@@ -120,9 +131,11 @@ export declare function computePredictionBaserate(hippoRoot: string, tenantId: s
120
131
  /** False skips the predict_baserate audit so that channel only records deliberate
121
132
  * baserate calls, not every recall the planning-fallacy orchestrator inspects. */
122
133
  emitAudit?: boolean): PredictionBaserate;
134
+ /** A class's stats over its closed rows, summed in the order given. Every store computes them here, so no two can disagree on the arithmetic. */
135
+ export declare function predictionBaserateOf(classTag: string, rows: readonly BaserateRow[]): PredictionBaserate;
123
136
  export declare function loadOpenPredictions(hippoRoot: string, tenantId: string, opts?: {
124
137
  classTag?: string;
125
138
  limit?: number;
126
139
  after?: KeysetPosition;
127
140
  }): Prediction[];
128
- //# sourceMappingURL=store.d.ts.map
141
+ //# sourceMappingURL=predictions.d.ts.map
@@ -22,14 +22,15 @@
22
22
  * The planning-fallacy detector reads `loadPredictionsByClass` and computes
23
23
  * per-class base rates from (estimate_value, actual_value) at query time.
24
24
  */
25
- import { BadRequestError, NotFoundError } from '../api-errors.js';
26
- import { openHippoDb, closeHippoDb } from '../db.js';
27
- import { writeEntry } from '../store/entry-writes.js';
28
- import { assertTenantId } from '../tenant.js';
29
- import { createMemory, Layer } from '../memory.js';
30
- import { appendAuditEvent } from '../audit.js';
31
- import { loadConfig } from '../config.js';
32
- import { keysetAfter } from '../keyset.js';
25
+ import { BadRequestError, NotFoundError } from '../core/api-errors.js';
26
+ import { openHippoDb, closeHippoDb, withWriteScope } from '../db/index.js';
27
+ import { writeEntryAt } from './sqlite/entry-writes-group.js';
28
+ import { assertTenantId } from './tenant.js';
29
+ import { createMemory, Layer } from '../core/memory.js';
30
+ import { appendAuditEvent } from './audit.js';
31
+ import { loadConfig } from '../core/config.js';
32
+ import { keysetAfter } from '../util/keyset.js';
33
+ const DEFAULT_PREDICTION_PAGE_SIZE = 100;
33
34
  export const VALID_CLOSURE_STATES = new Set([
34
35
  'open',
35
36
  'closed',
@@ -74,25 +75,31 @@ export function savePrediction(hippoRoot, tenantId, opts, actor = 'cli') {
74
75
  throw new BadRequestError('savePrediction: classTag is required');
75
76
  if (!opts.claimText)
76
77
  throw new BadRequestError('savePrediction: claimText is required');
77
- const now = new Date().toISOString();
78
- const mem = createMemory(opts.claimText, {
79
- tags: ['prediction', opts.classTag],
78
+ const mirror = predictionMirror(tenantId, opts, loadConfig(hippoRoot).defaultHalfLifeDays);
79
+ return writePrediction(hippoRoot, tenantId, { ...opts, mirror }, actor);
80
+ }
81
+ /** The memory row that mirrors a claim into recall, built here alone so every store keeps the same row for it. */
82
+ export function predictionMirror(tenantId, claim, baseHalfLifeDays) {
83
+ return createMemory(claim.claimText, {
84
+ tags: ['prediction', claim.classTag],
80
85
  layer: Layer.Semantic,
81
86
  confidence: 'observed',
82
87
  source: 'prediction',
83
88
  // SAFETY: 'distilled' is a valid MemoryKind literal (see memory.ts).
84
89
  kind: 'distilled',
85
- baseHalfLifeDays: loadConfig(hippoRoot).defaultHalfLifeDays,
90
+ baseHalfLifeDays,
86
91
  tenantId,
87
92
  });
93
+ }
94
+ /** The store port's save on hippo.db: the mirror goes in as the port's writeEntry has it, tenant check included, and its predictions row shares that write scope, so neither lands alone. */
95
+ export function writePrediction(hippoRoot, tenantId, save, actor) {
96
+ assertTenantId('savePrediction', tenantId);
97
+ const now = new Date().toISOString();
88
98
  // Captured for the return value; populated inside afterWrite hook so the
89
99
  // INSERT and the memory write share a SAVEPOINT.
90
100
  let savedRow;
91
- writeEntry(hippoRoot, mem, {
92
- actor,
93
- afterWrite: (db, memoryId) => {
94
- savedRow = insertPredictionRow(db, memoryId, tenantId, opts, now, actor);
95
- },
101
+ writeEntryAt(hippoRoot, { entry: save.mirror, actor }, (db, memoryId) => {
102
+ savedRow = insertPredictionRow(db, memoryId, tenantId, save, { now, actor });
96
103
  });
97
104
  if (!savedRow) {
98
105
  // Cannot reach here without the afterWrite throwing first; defensive.
@@ -100,8 +107,8 @@ export function savePrediction(hippoRoot, tenantId, opts, actor = 'cli') {
100
107
  }
101
108
  return rowToPrediction(savedRow);
102
109
  }
103
- /** Inserts, reloads and audits the predictions row inside writeEntry's SAVEPOINT. */
104
- function insertPredictionRow(db, memoryId, tenantId, opts, now, actor) {
110
+ function insertPredictionRow(db, memoryId, tenantId, opts, stamp) {
111
+ const { now, actor } = stamp;
105
112
  const result = db.prepare(`
106
113
  INSERT INTO predictions(
107
114
  memory_id, tenant_id, class_tag, claim_text,
@@ -121,21 +128,24 @@ function insertPredictionRow(db, memoryId, tenantId, opts, now, actor) {
121
128
  if (!row) {
122
129
  throw new Error('Failed to reload saved prediction row');
123
130
  }
131
+ auditPredictionCreate(db, { tenantId, actor, predictionId }, opts);
132
+ return row;
133
+ }
134
+ function auditPredictionCreate(db, who, opts) {
124
135
  // GDPR-light audit metadata: prediction_id + class_tag + flags only.
125
136
  // No claim_text in metadata; the predictions table holds it canonically.
126
137
  appendAuditEvent(db, {
127
- tenantId,
128
- actor,
138
+ tenantId: who.tenantId,
139
+ actor: who.actor,
129
140
  op: 'predict_create',
130
- targetId: String(predictionId),
141
+ targetId: String(who.predictionId),
131
142
  metadata: {
132
- prediction_id: predictionId,
143
+ prediction_id: who.predictionId,
133
144
  class_tag: opts.classTag,
134
145
  has_estimate: opts.estimateValue !== undefined && opts.estimateValue !== null,
135
146
  target_date: opts.targetDate ?? null,
136
147
  },
137
148
  });
138
- return row;
139
149
  }
140
150
  /**
141
151
  * Close an existing open prediction. Updates the predictions row only;
@@ -150,28 +160,16 @@ export function closePrediction(hippoRoot, tenantId, id, opts, actor = 'cli') {
150
160
  const now = new Date().toISOString();
151
161
  const db = openHippoDb(hippoRoot);
152
162
  try {
153
- db.exec('BEGIN IMMEDIATE');
154
- try {
155
- const row = closeOpenPredictionRow(db, tenantId, id, opts, now, actor);
156
- db.exec('COMMIT');
157
- return rowToPrediction(row);
158
- }
159
- catch (e) {
160
- try {
161
- db.exec('ROLLBACK');
162
- }
163
- catch {
164
- // Ignore rollback failures — the throw below is what matters.
165
- }
166
- throw e;
167
- }
163
+ const row = withWriteScope(db, 'close_prediction', () => closeOpenPredictionRow(db, tenantId, id, opts, { now, actor }));
164
+ return rowToPrediction(row);
168
165
  }
169
166
  finally {
170
167
  closeHippoDb(db);
171
168
  }
172
169
  }
173
170
  /** Closes the row, reloads it and audits the close; the caller owns the transaction. */
174
- function closeOpenPredictionRow(db, tenantId, id, opts, now, actor) {
171
+ function closeOpenPredictionRow(db, tenantId, id, opts, stamp) {
172
+ const { now, actor } = stamp;
175
173
  // closure_state='open' in the WHERE stops a retried close from overwriting
176
174
  // actual_value and auditing twice; zero changed rows means not found or already closed.
177
175
  const updateResult = db.prepare(`
@@ -237,7 +235,7 @@ export function loadPredictionById(hippoRoot, tenantId, id) {
237
235
  }
238
236
  export function loadPredictionsByClass(hippoRoot, tenantId, classTag, opts = {}) {
239
237
  assertTenantId('loadPredictionsByClass', tenantId);
240
- const limit = opts.limit ?? 100;
238
+ const limit = opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE;
241
239
  const after = keysetAfter('created_at', 'id', opts.after);
242
240
  const db = openHippoDb(hippoRoot);
243
241
  try {
@@ -290,7 +288,7 @@ export function loadAllPredictions(hippoRoot, tenantId, opts = {}) {
290
288
  WHERE tenant_id = ?${after.sql}
291
289
  ORDER BY created_at DESC, id DESC
292
290
  LIMIT ?
293
- `).all(tenantId, ...after.params, opts.limit ?? 100);
291
+ `).all(tenantId, ...after.params, opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE);
294
292
  return rows.map(rowToPrediction);
295
293
  }
296
294
  finally {
@@ -316,6 +314,7 @@ emitAudit = true) {
316
314
  throw new BadRequestError('computePredictionBaserate: classTag is required');
317
315
  const db = openHippoDb(hippoRoot);
318
316
  try {
317
+ // Ordered by id because the float sums differ with row order, and another store must reach the same figures.
319
318
  // SAFETY: rows' shape matches the two columns named in the SELECT above.
320
319
  const rows = db.prepare(`
321
320
  SELECT estimate_value, actual_value
@@ -325,29 +324,12 @@ emitAudit = true) {
325
324
  AND closure_state = 'closed'
326
325
  AND estimate_value IS NOT NULL
327
326
  AND actual_value IS NOT NULL
327
+ ORDER BY id
328
328
  `).all(tenantId, classTag);
329
- const nClosed = rows.length;
330
- if (nClosed === 0) {
331
- // Audit zero-result reads too — agents probing empty classes is
332
- // a signal worth recording. Skipped when emitAudit=false: the orchestrator's own
333
- // recall_autodebias_hint audit fires only when nClosed > 0, so no signal is lost.
334
- if (emitAudit)
335
- auditBaserateRead(db, tenantId, actor, classTag, 0);
336
- return {
337
- classTag,
338
- nClosed: 0,
339
- nRatioEligible: 0,
340
- meanEstimate: null,
341
- meanActual: null,
342
- meanRatio: null,
343
- p50Ratio: null,
344
- mae: null,
345
- summary: '',
346
- };
347
- }
348
- const baserate = baserateFromRows(classTag, rows);
329
+ const baserate = predictionBaserateOf(classTag, rows);
330
+ // An empty class is audited too, since an agent probing one is a signal; the recall path passes false and audits its own hint.
349
331
  if (emitAudit)
350
- auditBaserateRead(db, tenantId, actor, classTag, nClosed);
332
+ auditBaserateRead(db, tenantId, actor, classTag, baserate.nClosed);
351
333
  return baserate;
352
334
  }
353
335
  finally {
@@ -363,9 +345,12 @@ function auditBaserateRead(db, tenantId, actor, classTag, nClosed) {
363
345
  metadata: { class_tag: classTag, n_closed: nClosed },
364
346
  });
365
347
  }
366
- /** Stats over a non-empty set of closed rows. */
367
- function baserateFromRows(classTag, rows) {
348
+ /** A class's stats over its closed rows, summed in the order given. Every store computes them here, so no two can disagree on the arithmetic. */
349
+ export function predictionBaserateOf(classTag, rows) {
368
350
  const nClosed = rows.length;
351
+ if (nClosed === 0) {
352
+ return { classTag, nClosed: 0, nRatioEligible: 0, meanEstimate: null, meanActual: null, meanRatio: null, p50Ratio: null, mae: null, summary: '' };
353
+ }
369
354
  const ratioEligible = rows.filter((r) => r.estimate_value > 0);
370
355
  const nRatioEligible = ratioEligible.length;
371
356
  const meanEstimate = rows.reduce((s, r) => s + r.estimate_value, 0) / nClosed;
@@ -399,7 +384,7 @@ function baserateFromRows(classTag, rows) {
399
384
  }
400
385
  export function loadOpenPredictions(hippoRoot, tenantId, opts = {}) {
401
386
  assertTenantId('loadOpenPredictions', tenantId);
402
- const limit = opts.limit ?? 100;
387
+ const limit = opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE;
403
388
  const after = keysetAfter('created_at', 'id', opts.after);
404
389
  const db = openHippoDb(hippoRoot);
405
390
  try {
@@ -434,4 +419,4 @@ export function loadOpenPredictions(hippoRoot, tenantId, opts = {}) {
434
419
  closeHippoDb(db);
435
420
  }
436
421
  }
437
- //# sourceMappingURL=store.js.map
422
+ //# sourceMappingURL=predictions.js.map
@@ -1,10 +1,8 @@
1
- /** Quarantine tier (CD5, AT3): pending/approved/rejected record for a memory `remember` flagged as untrusted. */
2
- import type { DatabaseSyncLike } from './db.js';
3
- import { type KeysetPosition } from './keyset.js';
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import type { QuarantineApproval, QuarantineListQuery, QuarantineRejection, QuarantinedMemory } from './port.js';
4
3
  export declare const QUARANTINE_SCOPE_PREFIX = "quarantine:private:";
5
4
  /** Scope a quarantined memory is stored under; matches PRIVATE_SCOPE_RE so every default-deny site hides it. */
6
5
  export declare function quarantineScopeFor(original: string | null): string;
7
- export declare function isQuarantineScope(scope: string | null | undefined): boolean;
8
6
  export type QuarantineStatus = 'pending' | 'approved' | 'rejected';
9
7
  export interface QuarantineRow {
10
8
  tenantId: string;
@@ -25,8 +23,10 @@ export interface RecordQuarantineOpts {
25
23
  }
26
24
  /** Insert the quarantine row + its audit event; caller runs this inside the memory's own write transaction. */
27
25
  export declare function recordQuarantine(db: DatabaseSyncLike, opts: RecordQuarantineOpts): void;
28
- export declare function getQuarantineRow(db: DatabaseSyncLike, tenantId: string, memoryId: string): QuarantineRow | null;
29
- export declare function listQuarantineRows(db: DatabaseSyncLike, tenantId: string, status?: QuarantineStatus | 'all', limit?: number, afterRow?: KeysetPosition): QuarantineRow[];
30
- export declare function approveQuarantineRow(db: DatabaseSyncLike, tenantId: string, memoryId: string, decidedBy: string): void;
31
- export declare function rejectQuarantineRow(db: DatabaseSyncLike, tenantId: string, memoryId: string, decidedBy: string): void;
26
+ /** A page of the tenant's records, each with its memory's content read in the same query batch. */
27
+ export declare function listQuarantinedAt(db: DatabaseSyncLike, tenantId: string, { status, limit, after }: QuarantineListQuery): QuarantinedMemory[];
28
+ /** Puts the memory back under its original scope; the scope guard refuses a row moved since it was quarantined. */
29
+ export declare function approveQuarantinedAt(db: DatabaseSyncLike, tenantId: string, id: string, actor: string): QuarantineApproval;
30
+ /** Marks the record rejected; the memory row is left as stored. */
31
+ export declare function rejectQuarantinedAt(db: DatabaseSyncLike, tenantId: string, id: string, actor: string): QuarantineRejection;
32
32
  //# sourceMappingURL=quarantine.d.ts.map
@@ -1,14 +1,13 @@
1
- /** Quarantine tier (CD5, AT3): pending/approved/rejected record for a memory `remember` flagged as untrusted. */
1
+ // The memory_quarantine table: the review queue's rows, and the approve and reject writes with their audit rows.
2
2
  import { appendAuditEvent } from './audit.js';
3
- import { keysetAfter } from './keyset.js';
3
+ import { withWriteScopeOr } from '../db/index.js';
4
+ import { keysetAfter } from '../util/keyset.js';
5
+ import { selectEntriesByIds } from './entry-reads.js';
4
6
  export const QUARANTINE_SCOPE_PREFIX = 'quarantine:private:';
5
7
  /** Scope a quarantined memory is stored under; matches PRIVATE_SCOPE_RE so every default-deny site hides it. */
6
8
  export function quarantineScopeFor(original) {
7
9
  return `${QUARANTINE_SCOPE_PREFIX}${original ?? 'unscoped'}`;
8
10
  }
9
- export function isQuarantineScope(scope) {
10
- return scope != null && scope.startsWith(QUARANTINE_SCOPE_PREFIX);
11
- }
12
11
  const SELECT_COLUMNS = 'tenant_id, memory_id, original_scope, reason, status, quarantined_at, decided_at, decided_by';
13
12
  function fromDbRow(row) {
14
13
  return {
@@ -16,31 +15,19 @@ function fromDbRow(row) {
16
15
  memoryId: row.memory_id,
17
16
  originalScope: row.original_scope,
18
17
  reason: row.reason,
19
- // SAFETY: this module's own INSERT/UPDATE statements are the only writers of status.
18
+ // SAFETY: the quarantine INSERT and this module's UPDATE statements are the only writers of status.
20
19
  status: row.status,
21
20
  quarantinedAt: row.quarantined_at,
22
21
  decidedAt: row.decided_at,
23
22
  decidedBy: row.decided_by,
24
23
  };
25
24
  }
26
- /** Insert the quarantine row + its audit event; caller runs this inside the memory's own write transaction. */
27
- export function recordQuarantine(db, opts) {
28
- db.prepare(`INSERT INTO memory_quarantine (tenant_id, memory_id, original_scope, reason, status, quarantined_at)
29
- VALUES (?, ?, ?, ?, 'pending', ?)`).run(opts.tenantId, opts.memoryId, opts.originalScope, opts.reason, new Date().toISOString());
30
- appendAuditEvent(db, {
31
- tenantId: opts.tenantId,
32
- actor: opts.actor,
33
- op: 'quarantine',
34
- targetId: opts.memoryId,
35
- metadata: { reason: opts.reason, originalScope: opts.originalScope },
36
- });
37
- }
38
- export function getQuarantineRow(db, tenantId, memoryId) {
25
+ function getQuarantineRow(db, tenantId, memoryId) {
39
26
  const row = db.prepare(`SELECT ${SELECT_COLUMNS} FROM memory_quarantine WHERE tenant_id = ? AND memory_id = ?`)
40
27
  .get(tenantId, memoryId);
41
28
  return row ? fromDbRow(row) : null;
42
29
  }
43
- export function listQuarantineRows(db, tenantId, status = 'pending', limit = 100, afterRow) {
30
+ function listQuarantineRows(db, tenantId, status = 'pending', limit = 100, afterRow) {
44
31
  // A pending row whose memory was deleted (e.g. Slack message_deleted) is dead; keep its history, drop it from the queue.
45
32
  const live = status === 'pending'
46
33
  ? ' AND EXISTS (SELECT 1 FROM memories m WHERE m.id = memory_quarantine.memory_id AND m.tenant_id = memory_quarantine.tenant_id)'
@@ -55,12 +42,67 @@ export function listQuarantineRows(db, tenantId, status = 'pending', limit = 100
55
42
  // SAFETY: both branches select SELECT_COLUMNS, matching QuarantineDbRow's field set.
56
43
  return rows.map(fromDbRow);
57
44
  }
58
- export function approveQuarantineRow(db, tenantId, memoryId, decidedBy) {
45
+ /** Insert the quarantine row + its audit event; caller runs this inside the memory's own write transaction. */
46
+ export function recordQuarantine(db, opts) {
47
+ db.prepare(`INSERT INTO memory_quarantine (tenant_id, memory_id, original_scope, reason, status, quarantined_at)
48
+ VALUES (?, ?, ?, ?, 'pending', ?)`).run(opts.tenantId, opts.memoryId, opts.originalScope, opts.reason, new Date().toISOString());
49
+ appendAuditEvent(db, {
50
+ tenantId: opts.tenantId,
51
+ actor: opts.actor,
52
+ op: 'quarantine',
53
+ targetId: opts.memoryId,
54
+ metadata: { reason: opts.reason, originalScope: opts.originalScope },
55
+ });
56
+ }
57
+ function approveQuarantineRow(db, tenantId, memoryId, decidedBy) {
59
58
  db.prepare(`UPDATE memory_quarantine SET status = 'approved', decided_at = ?, decided_by = ? WHERE tenant_id = ? AND memory_id = ?`)
60
59
  .run(new Date().toISOString(), decidedBy, tenantId, memoryId);
61
60
  }
62
- export function rejectQuarantineRow(db, tenantId, memoryId, decidedBy) {
61
+ function rejectQuarantineRow(db, tenantId, memoryId, decidedBy) {
63
62
  db.prepare(`UPDATE memory_quarantine SET status = 'rejected', decided_at = ?, decided_by = ? WHERE tenant_id = ? AND memory_id = ?`)
64
63
  .run(new Date().toISOString(), decidedBy, tenantId, memoryId);
65
64
  }
65
+ /** A page of the tenant's records, each with its memory's content read in the same query batch. */
66
+ export function listQuarantinedAt(db, tenantId, { status, limit, after }) {
67
+ const rows = listQuarantineRows(db, tenantId, status, limit, after);
68
+ const entries = selectEntriesByIds(db, rows.map((row) => row.memoryId), tenantId);
69
+ return rows.map((row) => ({ ...row, content: entries.get(row.memoryId)?.content ?? null }));
70
+ }
71
+ /** The pending record, or why a decision on `id` is refused. */
72
+ function pendingOrRefusal(db, tenantId, id) {
73
+ const row = getQuarantineRow(db, tenantId, id);
74
+ if (!row)
75
+ return { outcome: 'not_quarantined' };
76
+ if (row.status !== 'pending')
77
+ return { outcome: 'already_decided', status: row.status };
78
+ return row;
79
+ }
80
+ /** Puts the memory back under its original scope; the scope guard refuses a row moved since it was quarantined. */
81
+ export function approveQuarantinedAt(db, tenantId, id, actor) {
82
+ return withWriteScopeOr(db, 'quarantine_approve', (rollback) => {
83
+ const row = pendingOrRefusal(db, tenantId, id);
84
+ if ('outcome' in row)
85
+ return rollback(row);
86
+ const quarantineScope = quarantineScopeFor(row.originalScope);
87
+ const updated = db
88
+ .prepare(`UPDATE memories SET scope = ? WHERE id = ? AND tenant_id = ? AND scope = ?`)
89
+ .run(row.originalScope, id, tenantId, quarantineScope);
90
+ if (Number(updated.changes ?? 0) !== 1)
91
+ return rollback({ outcome: 'scope_moved' });
92
+ approveQuarantineRow(db, tenantId, id, actor);
93
+ appendAuditEvent(db, { tenantId, actor, op: 'quarantine_approve', targetId: id, metadata: { originalScope: row.originalScope } });
94
+ return { outcome: 'approved' };
95
+ });
96
+ }
97
+ /** Marks the record rejected; the memory row is left as stored. */
98
+ export function rejectQuarantinedAt(db, tenantId, id, actor) {
99
+ return withWriteScopeOr(db, 'quarantine_reject', (rollback) => {
100
+ const row = pendingOrRefusal(db, tenantId, id);
101
+ if ('outcome' in row)
102
+ return rollback(row);
103
+ rejectQuarantineRow(db, tenantId, id, actor);
104
+ appendAuditEvent(db, { tenantId, actor, op: 'quarantine_reject', targetId: id, metadata: {} });
105
+ return { outcome: 'rejected' };
106
+ });
107
+ }
66
108
  //# sourceMappingURL=quarantine.js.map
@@ -1,4 +1,4 @@
1
- import type { DatabaseSyncLike } from './db.js';
1
+ import type { DatabaseSyncLike } from '../db/index.js';
2
2
  export interface ArchiveOpts {
3
3
  reason: string;
4
4
  who: string;
@@ -11,6 +11,8 @@ export interface ArchiveOpts {
11
11
  */
12
12
  afterArchive?: (db: DatabaseSyncLike, archivedMemoryId: string) => void;
13
13
  }
14
+ /** Stamps the archived copy of `memoryId` as having its markdown mirror cleaned at `at`. */
15
+ export declare function markMirrorCleaned(db: DatabaseSyncLike, memoryId: string, at: string): void;
14
16
  /**
15
17
  * The only legitimate path to remove a `kind='raw'` row from `memories`.
16
18
  *
@@ -1,7 +1,11 @@
1
- import { BadRequestError, NotFoundError } from './api-errors.js';
2
- import { isFtsAvailable, withWriteScope } from './db.js';
1
+ import { BadRequestError, NotFoundError } from '../core/api-errors.js';
2
+ import { isFtsAvailable, withWriteScope } from '../db/index.js';
3
3
  import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
4
4
  import { markSummaryDirtyInTx } from './summary-dirty.js';
5
+ /** Stamps the archived copy of `memoryId` as having its markdown mirror cleaned at `at`. */
6
+ export function markMirrorCleaned(db, memoryId, at) {
7
+ db.prepare(`UPDATE raw_archive SET mirror_cleaned_at = ? WHERE memory_id = ?`).run(at, memoryId);
8
+ }
5
9
  function loadRawRow(db, id) {
6
10
  // SAFETY: SELECT * FROM memories returns every column of the memories table; only
7
11
  // kind, tenant_id, and dag_parent_id are read below, all guaranteed present (possibly
@@ -5,11 +5,11 @@
5
5
  * these for its own call sites AND re-exports them for back-compat
6
6
  * (`api.isPrivateScope`, test imports of `passesScopeFilterForRecall`).
7
7
  */
8
- import { ForbiddenError } from './api-errors.js';
8
+ import { ForbiddenError } from '../core/api-errors.js';
9
9
  /**
10
10
  * Literal scopes excluded from recall by default-deny when the
11
11
  * caller passes no `scope`. The SQL clause in `loadSearchRows` and the JS
12
- * helper `passesScopeFilterForRecall` (src/api.ts) both read from this
12
+ * helper `passesScopeFilterForRecall` (src/api/index.ts) both read from this
13
13
  * constant. Adding a deny scope is a one-place change.
14
14
  *
15
15
  * Regex-based denies (e.g. `<source>:private:*`) stay in
@@ -5,12 +5,12 @@
5
5
  * these for its own call sites AND re-exports them for back-compat
6
6
  * (`api.isPrivateScope`, test imports of `passesScopeFilterForRecall`).
7
7
  */
8
- import { BadRequestError, ForbiddenError } from './api-errors.js';
9
- import { MAX_ID_LEN } from './http-util.js';
8
+ import { BadRequestError, ForbiddenError } from '../core/api-errors.js';
9
+ import { MAX_ID_LEN } from '../util/http-util.js';
10
10
  /**
11
11
  * Literal scopes excluded from recall by default-deny when the
12
12
  * caller passes no `scope`. The SQL clause in `loadSearchRows` and the JS
13
- * helper `passesScopeFilterForRecall` (src/api.ts) both read from this
13
+ * helper `passesScopeFilterForRecall` (src/api/index.ts) both read from this
14
14
  * constant. Adding a deny scope is a one-place change.
15
15
  *
16
16
  * Regex-based denies (e.g. `<source>:private:*`) stay in
@@ -14,8 +14,8 @@
14
14
  * swallowed (matches the api.ts ~2843 "audit emit failed" precedent — no
15
15
  * new debug env var).
16
16
  */
17
- import { type DatabaseSyncLike } from './db.js';
18
- import type { RerankStep } from './search/types.js';
17
+ import { type DatabaseSyncLike } from '../db/index.js';
18
+ import type { RerankStep } from '../core/search-types.js';
19
19
  import { type DeliveryEventInput } from './delivery-recorder.js';
20
20
  /** One ranked result to persist alongside its trace row. */
21
21
  export interface RecallTraceResultInput {
@@ -44,10 +44,10 @@ export interface RecallTraceInput {
44
44
  * transaction, on the connection handed in. Fail-soft: never throws —
45
45
  * logs to stderr and returns null on any failure.
46
46
  *
47
- * Connection policy (per the plan): api.recall calls this directly on its
48
- * own already-open handle. api.getContext and CLI cmdRecall go through
49
- * `writeRecallTraceAtRoot` instead, since their audit handles are already
50
- * closed by the time tracing runs.
47
+ * Connection policy: api.recall and api.getContext reach this through
48
+ * `finishRecallAt`, on the handle that recall's other writes use. CLI
49
+ * cmdRecall goes through `writeRecallTraceAtRoot` instead, since its audit
50
+ * handle is already closed by the time tracing runs.
51
51
  */
52
52
  export declare function writeRecallTrace(db: DatabaseSyncLike, input: RecallTraceInput): number | null;
53
53
  /**
@@ -55,11 +55,10 @@ export declare function writeRecallTrace(db: DatabaseSyncLike, input: RecallTrac
55
55
  * writes the trace, and closes. Returns the new trace id, or null on any
56
56
  * failure (fail-soft).
57
57
  *
58
- * Used at api.getContext and CLI cmdRecall — sites where the block's own
59
- * convention is per-call handles (writeEntry, saveIndex) and the earlier
60
- * audit handles are already closed. NOT used by api.recall, which must
61
- * reuse the caller's open handle (no-side-effects contract,
62
- * tests/api-recall-no-side-effects.test.ts).
58
+ * Used at CLI cmdRecall, where the block's own convention is per-call
59
+ * handles (writeEntry, saveIndex) and the earlier audit handle is already
60
+ * closed. NOT used by api.recall, which must reuse the caller's open handle
61
+ * (no-side-effects contract, tests/api-recall-no-side-effects.test.ts).
63
62
  *
64
63
  * This function does NOT touch the `last_trace_id` meta key: its own connection
65
64
  * would commit apart from `saveIndex`, so a crash could advance one key alone. LOCKSTEP
@@ -68,8 +67,8 @@ export declare function writeRecallTrace(db: DatabaseSyncLike, input: RecallTrac
68
67
  * `localIndex.last_trace_id` from the returned id, THEN call `saveIndex`
69
68
  * once — `saveIndex` persists both meta keys in one transaction
70
69
  * (store.ts). Call sites that trace WITHOUT advancing `last_retrieval_ids`
71
- * (CLI cmdRecall's zero-result path, getContext's empty-result path) simply
72
- * never touch `localIndex` at all — they can't desync by construction.
70
+ * (CLI cmdRecall's zero-result path) simply never touch `localIndex` at
71
+ * all, so they can't desync by construction.
73
72
  *
74
73
  * Fail-soft: never throws, including on connection failure.
75
74
  */
@@ -115,7 +114,7 @@ export declare function recordTraceOutcome(db: DatabaseSyncLike, input: RecordTr
115
114
  export declare const DELIVERY_LEDGER_RETENTION_DAYS = 90;
116
115
  /** Lock wait for the ledger's own connection: a busy store drops the row rather than slow the hook. */
117
116
  export declare const DELIVERY_LEDGER_WAIT_MS = 50;
118
- /** Two prompt-identical events without a host turn id this close together are one turn fired twice. */
117
+ /** Two prompt-identical events without a host turn id, or two boundary events of one type, this close are one fire twice. */
119
118
  export declare const DELIVERY_DUPLICATE_WINDOW_MS = 2000;
120
119
  /** One stored `delivery_candidates` row. */
121
120
  export interface DeliveryCandidateRow {