hippo-memory 1.68.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 (864) hide show
  1. package/README.md +6 -3
  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.d.ts +3 -1
  7. package/dist/agent-memories/copilot.js +5 -4
  8. package/dist/agent-memories/files.js +3 -2
  9. package/dist/agent-memories/gemini.js +6 -5
  10. package/dist/agent-memories/keys.js +3 -2
  11. package/dist/agent-memories/legacy.d.ts +2 -2
  12. package/dist/agent-memories/legacy.js +2 -2
  13. package/dist/agent-memories/report.d.ts +1 -1
  14. package/dist/agent-memories/report.js +1 -1
  15. package/dist/agent-memories/source.d.ts +1 -1
  16. package/dist/agent-memories/source.js +6 -5
  17. package/dist/agent-memories/sync.d.ts +1 -1
  18. package/dist/agent-memories/sync.js +24 -33
  19. package/dist/agent-memories/types.d.ts +1 -1
  20. package/dist/api/assemble.d.ts +2 -2
  21. package/dist/api/assemble.js +42 -32
  22. package/dist/api/audit.d.ts +4 -7
  23. package/dist/api/audit.js +6 -20
  24. package/dist/api/auth.d.ts +5 -18
  25. package/dist/api/auth.js +44 -194
  26. package/dist/api/auto-sleep.d.ts +13 -0
  27. package/dist/api/auto-sleep.js +32 -0
  28. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  29. package/dist/{availability.js → api/availability.js} +12 -29
  30. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  31. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  32. package/dist/{context-render.js → api/context-render.js} +7 -6
  33. package/dist/api/context-select.d.ts +14 -4
  34. package/dist/api/context-select.js +50 -60
  35. package/dist/api/context-types.d.ts +5 -5
  36. package/dist/api/context.d.ts +2 -4
  37. package/dist/api/context.js +113 -85
  38. package/dist/api/dormant.d.ts +3 -3
  39. package/dist/api/dormant.js +38 -107
  40. package/dist/api/drill-down.d.ts +2 -2
  41. package/dist/api/drill-down.js +37 -65
  42. package/dist/api/forget.d.ts +4 -13
  43. package/dist/api/forget.js +13 -35
  44. package/dist/api/goals.d.ts +1 -1
  45. package/dist/api/goals.js +2 -2
  46. package/dist/api/index.d.ts +26 -0
  47. package/dist/api/index.js +29 -0
  48. package/dist/api/instruction-detect.js +74 -0
  49. package/dist/api/learn.js +63 -55
  50. package/dist/api/ledger-db.d.ts +20 -0
  51. package/dist/api/ledger-db.js +79 -0
  52. package/dist/api/on-store.d.ts +16 -0
  53. package/dist/api/on-store.js +36 -0
  54. package/dist/api/outcome.d.ts +9 -46
  55. package/dist/api/outcome.js +15 -57
  56. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  57. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  58. package/dist/api/promote.d.ts +7 -18
  59. package/dist/api/promote.js +30 -152
  60. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  61. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  62. package/dist/api/quarantine.d.ts +5 -5
  63. package/dist/api/quarantine.js +30 -106
  64. package/dist/api/recall-core.d.ts +4 -0
  65. package/dist/api/recall-core.js +112 -0
  66. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  67. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  68. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  69. package/dist/api/recall-record.d.ts +10 -13
  70. package/dist/api/recall-record.js +10 -30
  71. package/dist/api/recall-request.d.ts +2 -2
  72. package/dist/api/recall-request.js +3 -3
  73. package/dist/api/recall-types.d.ts +41 -16
  74. package/dist/api/recall.d.ts +1 -1
  75. package/dist/api/recall.js +39 -37
  76. package/dist/api/remember.d.ts +12 -13
  77. package/dist/api/remember.js +38 -27
  78. package/dist/api/session-owners.d.ts +4 -0
  79. package/dist/api/session-owners.js +17 -0
  80. package/dist/api/sleep-run.d.ts +7 -7
  81. package/dist/api/sleep-run.js +63 -75
  82. package/dist/api/sleep.d.ts +1 -1
  83. package/dist/api/tokens.d.ts +2 -2
  84. package/dist/api/tokens.js +9 -21
  85. package/dist/api/types.d.ts +2 -2
  86. package/dist/api/types.js +1 -1
  87. package/dist/capture/caller-session.d.ts +2 -2
  88. package/dist/capture/caller-session.js +8 -8
  89. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  90. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  91. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  92. package/dist/capture/command.d.ts +1 -1
  93. package/dist/capture/command.js +54 -41
  94. package/dist/capture/compact-resume-caller.d.ts +1 -1
  95. package/dist/capture/compact-resume-caller.js +7 -7
  96. package/dist/capture/compact.d.ts +4 -1
  97. package/dist/capture/compact.js +59 -22
  98. package/dist/capture/compaction-items-caller.d.ts +1 -1
  99. package/dist/capture/compaction-items-caller.js +7 -5
  100. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  101. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  102. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  103. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  104. package/dist/capture/copilot-transcript.d.ts +3 -0
  105. package/dist/capture/copilot-transcript.js +9 -2
  106. package/dist/capture/extract.js +2 -2
  107. package/dist/capture/failure-caller.d.ts +2 -2
  108. package/dist/capture/failure-caller.js +6 -6
  109. package/dist/capture/failure-reading.d.ts +2 -5
  110. package/dist/capture/failure-reading.js +11 -12
  111. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  112. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  113. package/dist/capture/pre-compact-caller.d.ts +1 -1
  114. package/dist/capture/pre-compact-caller.js +2 -2
  115. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  116. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  117. package/dist/capture/session-end-caller.d.ts +2 -2
  118. package/dist/capture/session-end-caller.js +1 -1
  119. package/dist/capture/session-texts.d.ts +1 -1
  120. package/dist/capture/session-texts.js +5 -5
  121. package/dist/capture/session-worker.d.ts +13 -0
  122. package/dist/capture/session-worker.js +196 -0
  123. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  124. package/dist/capture/transcript.js +68 -74
  125. package/dist/capture/working-state.d.ts +0 -3
  126. package/dist/capture/working-state.js +7 -7
  127. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  128. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  129. package/dist/cli/audit.d.ts +2 -2
  130. package/dist/cli/audit.js +77 -72
  131. package/dist/cli/auth.d.ts +2 -1
  132. package/dist/cli/auth.js +18 -20
  133. package/dist/cli/briefs.d.ts +4 -3
  134. package/dist/cli/briefs.js +59 -181
  135. package/dist/cli/card.d.ts +2 -1
  136. package/dist/cli/card.js +25 -23
  137. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  138. package/dist/{client.js → cli/client.js} +1 -1
  139. package/dist/cli/compact-resume-payload.d.ts +8 -0
  140. package/dist/cli/compact-resume-payload.js +39 -0
  141. package/dist/cli/context.d.ts +2 -13
  142. package/dist/cli/context.js +41 -71
  143. package/dist/cli/continuity.d.ts +6 -5
  144. package/dist/cli/continuity.js +109 -99
  145. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  146. package/dist/cli/curate.d.ts +9 -9
  147. package/dist/cli/curate.js +177 -149
  148. package/dist/cli/dag.d.ts +4 -4
  149. package/dist/cli/dag.js +46 -34
  150. package/dist/cli/decisions.d.ts +4 -3
  151. package/dist/cli/decisions.js +108 -218
  152. package/dist/cli/eval.d.ts +1 -3
  153. package/dist/cli/eval.js +43 -31
  154. package/dist/cli/explain.d.ts +1 -1
  155. package/dist/cli/explain.js +35 -19
  156. package/dist/cli/flag-values.d.ts +25 -0
  157. package/dist/cli/flag-values.js +103 -0
  158. package/dist/cli/flags.d.ts +303 -0
  159. package/dist/cli/flags.js +169 -0
  160. package/dist/cli/goals.d.ts +2 -1
  161. package/dist/cli/goals.js +39 -34
  162. package/dist/cli/hook-runtime.d.ts +49 -0
  163. package/dist/cli/hook-runtime.js +155 -0
  164. package/dist/cli/init.d.ts +2 -1
  165. package/dist/cli/init.js +151 -118
  166. package/dist/cli/install-steps.d.ts +7 -0
  167. package/dist/cli/install-steps.js +110 -0
  168. package/dist/cli/last-sleep.d.ts +2 -1
  169. package/dist/cli/last-sleep.js +9 -7
  170. package/dist/cli/maintenance.d.ts +5 -4
  171. package/dist/cli/maintenance.js +31 -27
  172. package/dist/cli/object-verbs.d.ts +40 -0
  173. package/dist/cli/object-verbs.js +65 -0
  174. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  175. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  176. package/dist/cli/playbooks.d.ts +4 -3
  177. package/dist/cli/playbooks.js +77 -280
  178. package/dist/cli/print.d.ts +18 -0
  179. package/dist/cli/print.js +85 -0
  180. package/dist/cli/projects.d.ts +2 -3
  181. package/dist/cli/projects.js +56 -49
  182. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  183. package/dist/cli/quality-repair-once.js +4 -4
  184. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  185. package/dist/cli/recall.d.ts +2 -4
  186. package/dist/cli/recall.js +101 -150
  187. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  188. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  189. package/dist/cli/remember.d.ts +1 -3
  190. package/dist/cli/remember.js +124 -103
  191. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  192. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  193. package/dist/cli/serve.d.ts +1 -1
  194. package/dist/cli/serve.js +34 -4
  195. package/dist/cli/session-hooks.d.ts +4 -4
  196. package/dist/cli/session-hooks.js +265 -191
  197. package/dist/cli/setup.d.ts +2 -1
  198. package/dist/cli/setup.js +111 -45
  199. package/dist/cli/shared.d.ts +5 -95
  200. package/dist/cli/shared.js +18 -369
  201. package/dist/cli/slack.d.ts +2 -1
  202. package/dist/cli/slack.js +31 -55
  203. package/dist/cli/sleep-render.d.ts +4 -0
  204. package/dist/cli/sleep-render.js +61 -0
  205. package/dist/cli/sleep.d.ts +2 -8
  206. package/dist/cli/sleep.js +20 -76
  207. package/dist/cli/status.d.ts +3 -3
  208. package/dist/cli/status.js +39 -41
  209. package/dist/{stdin.js → cli/stdin.js} +6 -6
  210. package/dist/cli/transfer.d.ts +4 -4
  211. package/dist/cli/transfer.js +68 -42
  212. package/dist/cli/usage.js +8 -3
  213. package/dist/cli.d.ts +289 -5
  214. package/dist/cli.js +184 -117
  215. package/dist/connectors/dlq.d.ts +44 -0
  216. package/dist/connectors/dlq.js +30 -0
  217. package/dist/connectors/github/backfill.d.ts +1 -1
  218. package/dist/connectors/github/backfill.js +29 -66
  219. package/dist/connectors/github/cli-impl.js +59 -74
  220. package/dist/connectors/github/deletion.d.ts +5 -6
  221. package/dist/connectors/github/deletion.js +18 -52
  222. package/dist/connectors/github/dlq.d.ts +7 -61
  223. package/dist/connectors/github/dlq.js +19 -119
  224. package/dist/connectors/github/ingest.d.ts +2 -31
  225. package/dist/connectors/github/ingest.js +20 -82
  226. package/dist/connectors/github/octokit-client.d.ts +1 -1
  227. package/dist/connectors/github/octokit-client.js +2 -1
  228. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  229. package/dist/connectors/github/tenant-routing.js +10 -36
  230. package/dist/connectors/github/transform.d.ts +1 -1
  231. package/dist/connectors/github/types.d.ts +1 -1
  232. package/dist/connectors/github/types.js +15 -18
  233. package/dist/connectors/github/webhook.d.ts +3 -2
  234. package/dist/connectors/github/webhook.js +84 -87
  235. package/dist/connectors/slack/backfill.d.ts +1 -1
  236. package/dist/connectors/slack/backfill.js +5 -29
  237. package/dist/connectors/slack/deletion.d.ts +4 -7
  238. package/dist/connectors/slack/deletion.js +20 -48
  239. package/dist/connectors/slack/dlq.d.ts +7 -49
  240. package/dist/connectors/slack/dlq.js +25 -118
  241. package/dist/connectors/slack/ingest.d.ts +5 -18
  242. package/dist/connectors/slack/ingest.js +27 -90
  243. package/dist/connectors/slack/signature.js +2 -1
  244. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  245. package/dist/connectors/slack/tenant-routing.js +13 -14
  246. package/dist/connectors/slack/transform.d.ts +1 -1
  247. package/dist/connectors/slack/types.d.ts +1 -1
  248. package/dist/connectors/slack/types.js +3 -12
  249. package/dist/connectors/slack/web-client.js +2 -2
  250. package/dist/connectors/slack/webhook.d.ts +3 -2
  251. package/dist/connectors/slack/webhook.js +75 -82
  252. package/dist/connectors/slack/workspaces.d.ts +4 -17
  253. package/dist/connectors/slack/workspaces.js +4 -34
  254. package/dist/consolidate/conflicts.d.ts +1 -1
  255. package/dist/consolidate/conflicts.js +4 -4
  256. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  257. package/dist/{dag.js → consolidate/dag.js} +60 -81
  258. package/dist/consolidate/decay.d.ts +2 -2
  259. package/dist/consolidate/decay.js +28 -22
  260. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  261. package/dist/consolidate/flush-units.d.ts +2 -2
  262. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  263. package/dist/consolidate/half-life-migration.js +106 -0
  264. package/dist/consolidate/llm-passes.js +8 -8
  265. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  266. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  267. package/dist/consolidate/merge.js +57 -54
  268. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  269. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  270. package/dist/consolidate/physics-pass.js +46 -46
  271. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  272. package/dist/{replay.js → consolidate/replay.js} +2 -2
  273. package/dist/consolidate/run.d.ts +7 -13
  274. package/dist/consolidate/run.js +6 -37
  275. package/dist/consolidate/sleep.d.ts +1 -1
  276. package/dist/consolidate/sleep.js +64 -134
  277. package/dist/{trace.js → consolidate/trace.js} +4 -6
  278. package/dist/consolidate/traces.js +34 -29
  279. package/dist/{ablation.js → core/ablation.js} +1 -1
  280. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  281. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  282. package/dist/{ambient.js → core/ambient.js} +12 -10
  283. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  284. package/dist/core/capture-contract.js +149 -0
  285. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  286. package/dist/{compare.js → core/compare.js} +10 -3
  287. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  288. package/dist/{config.js → core/config.js} +99 -72
  289. package/dist/core/handoff.js +87 -0
  290. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  291. package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
  292. package/dist/{memory.js → core/memory.js} +117 -82
  293. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  294. package/dist/{physics.js → core/physics.js} +2 -1
  295. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  296. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  297. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  298. package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
  299. package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
  300. package/dist/{salience.js → core/salience.js} +35 -20
  301. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  302. package/dist/{search/types.js → core/search-types.js} +1 -1
  303. package/dist/core/session-digest-row.d.ts +5 -0
  304. package/dist/core/session-digest-row.js +6 -0
  305. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  306. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  307. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  308. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  309. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  310. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  311. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  312. package/dist/db/backup.js +1 -1
  313. package/dist/db/busy.d.ts +18 -1
  314. package/dist/db/busy.js +74 -9
  315. package/dist/db/connect.d.ts +10 -2
  316. package/dist/db/connect.js +43 -10
  317. package/dist/db/index.d.ts +9 -0
  318. package/dist/db/index.js +8 -0
  319. package/dist/db/meta.d.ts +4 -0
  320. package/dist/db/meta.js +11 -1
  321. package/dist/db/migrate.d.ts +8 -1
  322. package/dist/db/migrate.js +25 -30
  323. package/dist/db/migrations/v08.js +1 -1
  324. package/dist/db/migrations/v14.js +39 -35
  325. package/dist/db/migrations/v16.js +29 -26
  326. package/dist/db/migrations/v18.js +6 -5
  327. package/dist/db/migrations/v20.js +4 -2
  328. package/dist/db/migrations/v22.js +39 -36
  329. package/dist/db/migrations/v24.js +27 -22
  330. package/dist/db/migrations/v29.js +37 -32
  331. package/dist/db/migrations/v31.js +36 -31
  332. package/dist/db/migrations/v35.js +1 -1
  333. package/dist/db/migrations/v39.js +1 -1
  334. package/dist/db/migrations/v40.js +15 -14
  335. package/dist/db/migrations/v43.js +7 -6
  336. package/dist/db/migrations/v44.js +1 -1
  337. package/dist/db/migrations/v45.js +1 -1
  338. package/dist/db/migrations/v46.js +1 -1
  339. package/dist/db/migrations/v47.js +1 -1
  340. package/dist/db/migrations/v48.js +1 -1
  341. package/dist/db/migrations/v49.js +1 -1
  342. package/dist/db/migrations/v50.js +8 -7
  343. package/dist/db/migrations/v52.js +1 -1
  344. package/dist/db/open.d.ts +9 -1
  345. package/dist/db/open.js +21 -4
  346. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  347. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  348. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  349. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  350. package/dist/db/request-stores.d.ts +15 -2
  351. package/dist/db/request-stores.js +37 -15
  352. package/dist/db/tables.d.ts +2 -0
  353. package/dist/db/tables.js +6 -0
  354. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  355. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  356. package/dist/db/wal-checkpointer.d.ts +11 -0
  357. package/dist/db/wal-checkpointer.js +92 -0
  358. package/dist/doctor.js +105 -136
  359. package/dist/entry/json-hooks.d.ts +1 -1
  360. package/dist/entry/json-hooks.js +1 -1
  361. package/dist/entry/project-identity.d.ts +1 -1
  362. package/dist/entry/project-identity.js +1 -1
  363. package/dist/entry/session-text.d.ts +3 -3
  364. package/dist/entry/session-text.js +3 -3
  365. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  366. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  367. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  368. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  369. package/dist/{eval.js → eval/eval.js} +29 -22
  370. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  371. package/dist/{judgment.js → eval/judgment.js} +4 -9
  372. package/dist/extensions/openclaw-plugin/index.js +1 -2
  373. package/dist/graph/delta.d.ts +3 -2
  374. package/dist/graph/delta.js +9 -23
  375. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  376. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  377. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  378. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  379. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  380. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  381. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  382. package/dist/{graph-view.js → graph/view.js} +127 -167
  383. package/dist/graph/write.d.ts +4 -76
  384. package/dist/graph/write.js +13 -397
  385. package/dist/hooks/codex-session.js +1 -1
  386. package/dist/hooks/codex-wrapper.js +14 -15
  387. package/dist/hooks/copilot.d.ts +48 -13
  388. package/dist/hooks/copilot.js +124 -39
  389. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  390. package/dist/hooks/json-hooks.d.ts +3 -1
  391. package/dist/hooks/json-hooks.js +40 -122
  392. package/dist/hooks/opencode.js +35 -27
  393. package/dist/hooks/shared.d.ts +7 -5
  394. package/dist/hooks/shared.js +19 -8
  395. package/dist/importers/core.d.ts +2 -6
  396. package/dist/importers/core.js +41 -39
  397. package/dist/importers/markdown-parse.d.ts +1 -10
  398. package/dist/importers/markdown-parse.js +2 -19
  399. package/dist/importers/markdown.js +2 -1
  400. package/dist/importers/sources.js +50 -46
  401. package/dist/importers/vault.js +71 -92
  402. package/dist/index.d.ts +22 -22
  403. package/dist/index.js +21 -21
  404. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  405. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  406. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  407. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  408. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  409. package/dist/learn/extract.js +125 -0
  410. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  411. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  412. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  413. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  414. package/dist/mcp/admin-tools.d.ts +1 -1
  415. package/dist/mcp/admin-tools.js +37 -60
  416. package/dist/mcp/format.d.ts +5 -5
  417. package/dist/mcp/format.js +7 -6
  418. package/dist/mcp/framing.d.ts +6 -0
  419. package/dist/mcp/framing.js +11 -3
  420. package/dist/mcp/memory-tools.d.ts +2 -2
  421. package/dist/mcp/memory-tools.js +12 -31
  422. package/dist/mcp/protocol.d.ts +6 -10
  423. package/dist/mcp/protocol.js +8 -14
  424. package/dist/mcp/recall-tools.d.ts +2 -2
  425. package/dist/mcp/recall-tools.js +68 -50
  426. package/dist/mcp/request.js +65 -63
  427. package/dist/mcp/server.js +1 -1
  428. package/dist/mcp/session-state.d.ts +1 -2
  429. package/dist/mcp/session-state.js +2 -2
  430. package/dist/mcp/shared-gate.js +1 -1
  431. package/dist/mcp/stdio.js +69 -31
  432. package/dist/mcp/tool-args.js +2 -1
  433. package/dist/mcp/tools.js +2 -2
  434. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  435. package/dist/objects/customer-notes.js +112 -0
  436. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  437. package/dist/objects/decisions.js +101 -0
  438. package/dist/objects/descriptor.d.ts +52 -0
  439. package/dist/objects/descriptor.js +4 -0
  440. package/dist/objects/fields.d.ts +15 -0
  441. package/dist/objects/fields.js +21 -0
  442. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  443. package/dist/objects/incidents.js +130 -0
  444. package/dist/objects/lifecycle.d.ts +27 -0
  445. package/dist/objects/lifecycle.js +96 -0
  446. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  447. package/dist/objects/policies.js +189 -0
  448. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  449. package/dist/objects/processes.js +146 -0
  450. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  451. package/dist/objects/project-briefs.js +255 -0
  452. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  453. package/dist/objects/skills.js +156 -0
  454. package/dist/postinstall.js +4 -2
  455. package/dist/predictions/planning-fallacy.d.ts +4 -76
  456. package/dist/predictions/planning-fallacy.js +4 -129
  457. package/dist/rerankers/clef.d.ts +2 -6
  458. package/dist/rerankers/clef.js +27 -47
  459. package/dist/rerankers/cross-encoder.d.ts +0 -7
  460. package/dist/rerankers/cross-encoder.js +15 -23
  461. package/dist/rerankers/index.js +8 -7
  462. package/dist/rerankers/jev.d.ts +1 -4
  463. package/dist/rerankers/jev.js +30 -49
  464. package/dist/rerankers/llm.d.ts +2 -4
  465. package/dist/rerankers/llm.js +33 -50
  466. package/dist/rerankers/outage-warning.d.ts +7 -0
  467. package/dist/rerankers/outage-warning.js +31 -0
  468. package/dist/rerankers/remote.d.ts +3 -0
  469. package/dist/rerankers/remote.js +23 -0
  470. package/dist/rerankers/types.d.ts +1 -1
  471. package/dist/search/as-of.d.ts +1 -1
  472. package/dist/search/bm25-search.d.ts +2 -2
  473. package/dist/search/bm25-search.js +7 -7
  474. package/dist/search/bm25.d.ts +1 -1
  475. package/dist/search/bm25.js +1 -1
  476. package/dist/search/boosts.d.ts +5 -1
  477. package/dist/search/boosts.js +34 -13
  478. package/dist/search/breakdown.d.ts +2 -2
  479. package/dist/search/breakdown.js +2 -1
  480. package/dist/search/explain.d.ts +1 -1
  481. package/dist/search/explain.js +3 -2
  482. package/dist/search/finalize.d.ts +2 -2
  483. package/dist/search/finalize.js +4 -3
  484. package/dist/search/fusion.d.ts +1 -1
  485. package/dist/search/fusion.js +3 -3
  486. package/dist/search/hybrid-score.d.ts +2 -2
  487. package/dist/search/hybrid-score.js +1 -1
  488. package/dist/search/hybrid.d.ts +4 -4
  489. package/dist/search/hybrid.js +11 -8
  490. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  491. package/dist/{multihop.js → search/multihop.js} +7 -5
  492. package/dist/{path-context.js → search/path-context.js} +3 -1
  493. package/dist/search/physics-search.d.ts +4 -4
  494. package/dist/search/physics-search.js +15 -15
  495. package/dist/search/rerank.d.ts +3 -3
  496. package/dist/search/rerank.js +4 -3
  497. package/dist/search/temporal.d.ts +1 -1
  498. package/dist/search/temporal.js +5 -2
  499. package/dist/search/vector.d.ts +3 -3
  500. package/dist/search/vector.js +17 -11
  501. package/dist/server/auth.d.ts +1 -1
  502. package/dist/server/auth.js +26 -18
  503. package/dist/server/boot.d.ts +24 -0
  504. package/dist/server/boot.js +465 -0
  505. package/dist/server/client-ip.d.ts +5 -1
  506. package/dist/server/client-ip.js +18 -6
  507. package/dist/server/cursor.d.ts +1 -1
  508. package/dist/server/cursor.js +2 -3
  509. package/dist/server/deadline.d.ts +13 -0
  510. package/dist/server/deadline.js +45 -0
  511. package/dist/server/key-check-bounds.d.ts +8 -0
  512. package/dist/server/key-check-bounds.js +46 -0
  513. package/dist/server/lifecycle.js +1 -1
  514. package/dist/server/mcp-http.d.ts +1 -4
  515. package/dist/server/mcp-http.js +34 -24
  516. package/dist/server/ready.d.ts +7 -0
  517. package/dist/server/ready.js +38 -0
  518. package/dist/server/request.d.ts +10 -4
  519. package/dist/server/request.js +63 -12
  520. package/dist/server/route-table.d.ts +15 -0
  521. package/dist/server/route-table.js +209 -0
  522. package/dist/server/routes/admin.js +13 -8
  523. package/dist/server/routes/customer-notes.d.ts +5 -5
  524. package/dist/server/routes/customer-notes.js +32 -97
  525. package/dist/server/routes/decisions.d.ts +5 -5
  526. package/dist/server/routes/decisions.js +42 -105
  527. package/dist/server/routes/incidents.d.ts +5 -5
  528. package/dist/server/routes/incidents.js +42 -95
  529. package/dist/server/routes/memories.js +21 -20
  530. package/dist/server/routes/object-routes.d.ts +40 -0
  531. package/dist/server/routes/object-routes.js +80 -0
  532. package/dist/server/routes/policies.d.ts +6 -6
  533. package/dist/server/routes/policies.js +40 -124
  534. package/dist/server/routes/predictions.js +29 -45
  535. package/dist/server/routes/processes.d.ts +5 -5
  536. package/dist/server/routes/processes.js +38 -118
  537. package/dist/server/routes/project-briefs.d.ts +6 -6
  538. package/dist/server/routes/project-briefs.js +38 -110
  539. package/dist/server/routes/recall.js +14 -12
  540. package/dist/server/routes/skills.d.ts +6 -6
  541. package/dist/server/routes/skills.js +37 -125
  542. package/dist/{server-detect.js → server/server-detect.js} +3 -2
  543. package/dist/server/sleep-child.d.ts +2 -0
  544. package/dist/server/sleep-child.js +19 -0
  545. package/dist/server/sleep-offload.d.ts +20 -0
  546. package/dist/server/sleep-offload.js +70 -0
  547. package/dist/server/tls.d.ts +6 -0
  548. package/dist/server/tls.js +24 -0
  549. package/dist/server/types.d.ts +27 -8
  550. package/dist/server/validation.d.ts +3 -4
  551. package/dist/server/validation.js +6 -11
  552. package/dist/server.d.ts +41 -50
  553. package/dist/server.js +26 -560
  554. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  555. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  556. package/dist/{scope.js → sharing/scope.js} +1 -1
  557. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  558. package/dist/{shared.js → sharing/shared.js} +100 -77
  559. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  560. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  561. package/dist/store/audit-event.d.ts +12 -6
  562. package/dist/store/audit-event.js +6 -5
  563. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  564. package/dist/{audit.js → store/audit.js} +91 -6
  565. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  566. package/dist/{auth.js → store/auth.js} +100 -92
  567. package/dist/store/candidates.d.ts +23 -12
  568. package/dist/store/candidates.js +87 -35
  569. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  570. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  571. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  572. package/dist/{store-cards.js → store/cards.js} +85 -146
  573. package/dist/store/compactions.d.ts +78 -0
  574. package/dist/store/compactions.js +93 -0
  575. package/dist/store/conflicts.d.ts +22 -5
  576. package/dist/store/conflicts.js +160 -109
  577. package/dist/store/connectors/github.d.ts +84 -0
  578. package/dist/store/connectors/github.js +180 -0
  579. package/dist/store/connectors/slack.d.ts +69 -0
  580. package/dist/store/connectors/slack.js +177 -0
  581. package/dist/store/dashboard-reads.d.ts +27 -0
  582. package/dist/store/dashboard-reads.js +92 -0
  583. package/dist/store/delete-and-batch.d.ts +20 -24
  584. package/dist/store/delete-and-batch.js +64 -40
  585. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  586. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  587. package/dist/store/descendant-page.d.ts +12 -0
  588. package/dist/store/descendant-page.js +99 -0
  589. package/dist/store/diagnostics.d.ts +47 -0
  590. package/dist/store/diagnostics.js +51 -0
  591. package/dist/store/doctor-reads.d.ts +16 -0
  592. package/dist/store/doctor-reads.js +19 -0
  593. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  594. package/dist/{dormant.js → store/dormant.js} +151 -6
  595. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  596. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  597. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  598. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  599. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  600. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  601. package/dist/store/entry-reads.d.ts +46 -7
  602. package/dist/store/entry-reads.js +120 -21
  603. package/dist/store/entry-row.d.ts +8 -2
  604. package/dist/store/entry-row.js +28 -8
  605. package/dist/store/entry-writes.d.ts +33 -4
  606. package/dist/store/entry-writes.js +108 -26
  607. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  608. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  609. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  610. package/dist/{goals.js → store/goals.js} +45 -94
  611. package/dist/store/graph-queue.d.ts +29 -0
  612. package/dist/store/graph-queue.js +101 -0
  613. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  614. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  615. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  616. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  617. package/dist/store/graph-view-rows.d.ts +12 -0
  618. package/dist/store/graph-view-rows.js +67 -0
  619. package/dist/store/graph-writes.d.ts +58 -0
  620. package/dist/store/graph-writes.js +256 -0
  621. package/dist/store/half-life.d.ts +34 -0
  622. package/dist/store/half-life.js +77 -0
  623. package/dist/store/handoffs.d.ts +6 -3
  624. package/dist/store/handoffs.js +70 -31
  625. package/dist/store/index-and-stats.d.ts +8 -1
  626. package/dist/store/index-and-stats.js +51 -48
  627. package/dist/store/index.d.ts +4 -0
  628. package/dist/store/index.js +3 -0
  629. package/dist/store/key-audit.d.ts +2 -2
  630. package/dist/store/key-audit.js +4 -4
  631. package/dist/store/key-writes.d.ts +12 -5
  632. package/dist/store/key-writes.js +30 -4
  633. package/dist/store/ledger-turn.d.ts +17 -0
  634. package/dist/store/ledger-turn.js +27 -0
  635. package/dist/store/markdown.d.ts +1 -1
  636. package/dist/store/markdown.js +4 -3
  637. package/dist/store/mirrors.d.ts +5 -7
  638. package/dist/store/mirrors.js +39 -25
  639. package/dist/store/object-types.d.ts +189 -0
  640. package/dist/store/object-types.js +4 -0
  641. package/dist/store/open.d.ts +8 -4
  642. package/dist/store/open.js +34 -23
  643. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  644. package/dist/store/planning-fallacy-evidence.js +81 -0
  645. package/dist/store/port.d.ts +646 -0
  646. package/dist/store/port.js +17 -0
  647. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  648. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  649. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  650. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  651. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
  652. package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
  653. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
  654. package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
  655. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  656. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  657. package/dist/store/rejected-values.d.ts +55 -0
  658. package/dist/store/rejected-values.js +162 -0
  659. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  660. package/dist/{rejection.js → store/rejection.js} +3 -2
  661. package/dist/store/rows.d.ts +2 -3
  662. package/dist/store/rows.js +18 -11
  663. package/dist/store/search-rows.d.ts +15 -4
  664. package/dist/store/search-rows.js +43 -36
  665. package/dist/store/sessions.d.ts +18 -2
  666. package/dist/store/sessions.js +83 -46
  667. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  668. package/dist/store/sqlite/commit-watch.js +29 -0
  669. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  670. package/dist/store/sqlite/connector-events-group.js +50 -0
  671. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  672. package/dist/store/sqlite/connector-writes-group.js +65 -0
  673. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  674. package/dist/store/sqlite/dag-reads-group.js +45 -0
  675. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  676. package/dist/store/sqlite/entry-writes-group.js +170 -0
  677. package/dist/store/sqlite/error-codec.d.ts +17 -0
  678. package/dist/store/sqlite/error-codec.js +59 -0
  679. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  680. package/dist/store/sqlite/executor-counts.js +11 -0
  681. package/dist/store/sqlite/executor.d.ts +28 -0
  682. package/dist/store/sqlite/executor.js +286 -0
  683. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  684. package/dist/store/sqlite/graph-reads-group.js +18 -0
  685. package/dist/store/sqlite/local.d.ts +21 -0
  686. package/dist/store/sqlite/local.js +38 -0
  687. package/dist/store/sqlite/object-rows.d.ts +102 -0
  688. package/dist/store/sqlite/object-rows.js +218 -0
  689. package/dist/store/sqlite/objects-group.d.ts +20 -0
  690. package/dist/store/sqlite/objects-group.js +314 -0
  691. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  692. package/dist/store/sqlite/predictions-group.js +28 -0
  693. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  694. package/dist/store/sqlite/quarantine-group.js +38 -0
  695. package/dist/store/sqlite/store.d.ts +26 -0
  696. package/dist/store/sqlite/store.js +295 -0
  697. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  698. package/dist/store/sqlite/vector-pack.js +46 -0
  699. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  700. package/dist/store/sqlite/vector-reads-group.js +23 -0
  701. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  702. package/dist/store/sqlite/worker-entry.js +8 -0
  703. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  704. package/dist/store/sqlite/worker-jobs.js +116 -0
  705. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  706. package/dist/store/sqlite/worker-ops.js +82 -0
  707. package/dist/store/sqlite/worker-store.d.ts +8 -0
  708. package/dist/store/sqlite/worker-store.js +76 -0
  709. package/dist/store/summaries.d.ts +2 -11
  710. package/dist/store/summaries.js +17 -44
  711. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  712. package/dist/store/tenant-lookup.d.ts +1 -1
  713. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  714. package/dist/{tenant.js → store/tenant.js} +1 -1
  715. package/dist/store/token-ledger-rows.d.ts +61 -0
  716. package/dist/store/token-ledger-rows.js +68 -0
  717. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  718. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  719. package/dist/store/tombstone-checks.d.ts +12 -0
  720. package/dist/store/tombstone-checks.js +31 -0
  721. package/dist/store/usage-reports.d.ts +7 -0
  722. package/dist/store/usage-reports.js +26 -0
  723. package/dist/store/vector-writes.d.ts +10 -3
  724. package/dist/store/vector-writes.js +35 -5
  725. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  726. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  727. package/dist/support-bundle.d.ts +1 -1
  728. package/dist/support-bundle.js +13 -33
  729. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  730. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  731. package/dist/trust/quarantine.d.ts +4 -0
  732. package/dist/trust/quarantine.js +8 -0
  733. package/dist/trust/reject-flow.d.ts +23 -0
  734. package/dist/trust/reject-flow.js +67 -0
  735. package/dist/util/anthropic-messages.d.ts +31 -0
  736. package/dist/util/anthropic-messages.js +46 -0
  737. package/dist/util/atomic-write.d.ts +3 -0
  738. package/dist/util/atomic-write.js +107 -0
  739. package/dist/util/crash-handlers.d.ts +5 -0
  740. package/dist/util/crash-handlers.js +30 -0
  741. package/dist/{env.d.ts → util/env.d.ts} +17 -2
  742. package/dist/{env.js → util/env.js} +22 -2
  743. package/dist/util/home-path.js +67 -0
  744. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  745. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  746. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  747. package/dist/{http-util.js → util/http-util.js} +31 -11
  748. package/dist/util/json.d.ts +17 -0
  749. package/dist/util/json.js +25 -0
  750. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  751. package/dist/{log.js → util/log.js} +12 -3
  752. package/dist/util/real-path.d.ts +3 -0
  753. package/dist/util/real-path.js +15 -0
  754. package/dist/util/request-scope.d.ts +27 -0
  755. package/dist/util/request-scope.js +47 -0
  756. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  757. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  758. package/dist/util/stored-json.d.ts +9 -0
  759. package/dist/util/stored-json.js +8 -0
  760. package/dist/util/time.d.ts +2 -0
  761. package/dist/util/time.js +3 -0
  762. package/dist/util/token-text.d.ts +18 -0
  763. package/dist/util/token-text.js +23 -0
  764. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  765. package/dist/{version.js → util/version.js} +1 -1
  766. package/extensions/openclaw-plugin/index.ts +1 -5
  767. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  768. package/extensions/openclaw-plugin/package.json +1 -1
  769. package/openclaw.plugin.json +1 -1
  770. package/package.json +2 -2
  771. package/dist/api.d.ts +0 -26
  772. package/dist/api.js +0 -29
  773. package/dist/capture-contract.js +0 -49
  774. package/dist/connectors/github/idempotency.d.ts +0 -19
  775. package/dist/connectors/github/idempotency.js +0 -27
  776. package/dist/connectors/slack/idempotency.d.ts +0 -17
  777. package/dist/connectors/slack/idempotency.js +0 -31
  778. package/dist/customer-notes.js +0 -336
  779. package/dist/db.d.ts +0 -9
  780. package/dist/db.js +0 -8
  781. package/dist/decisions.js +0 -326
  782. package/dist/extract.js +0 -133
  783. package/dist/graph/rows.d.ts +0 -45
  784. package/dist/graph/types.js +0 -11
  785. package/dist/half-life-migration.js +0 -182
  786. package/dist/handoff.js +0 -68
  787. package/dist/home-path.js +0 -24
  788. package/dist/incidents.js +0 -349
  789. package/dist/instruction-detect.js +0 -27
  790. package/dist/json.d.ts +0 -7
  791. package/dist/json.js +0 -11
  792. package/dist/ledger-db.d.ts +0 -10
  793. package/dist/ledger-db.js +0 -42
  794. package/dist/policies.js +0 -434
  795. package/dist/processes.js +0 -371
  796. package/dist/project-briefs.js +0 -523
  797. package/dist/reject-flow.d.ts +0 -69
  798. package/dist/reject-flow.js +0 -260
  799. package/dist/session-owners.d.ts +0 -7
  800. package/dist/session-owners.js +0 -54
  801. package/dist/skills.js +0 -367
  802. package/dist/store-port.d.ts +0 -191
  803. package/dist/store-port.js +0 -166
  804. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  805. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  806. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  807. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  808. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  809. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  810. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  811. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  812. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  813. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  814. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  815. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  816. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  817. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  818. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  819. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  820. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  821. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  822. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  823. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  824. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  825. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  826. /package/dist/{card.js → core/card.js} +0 -0
  827. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  828. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  829. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  830. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  831. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  832. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  833. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  834. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  835. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  836. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  837. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  838. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  839. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  840. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  841. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  842. /package/dist/{rrf.js → search/rrf.js} +0 -0
  843. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  844. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  845. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  846. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  847. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  848. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  849. /package/dist/{yaml.js → store/yaml.js} +0 -0
  850. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  851. /package/dist/{escape.js → util/escape.js} +0 -0
  852. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  853. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  854. /package/dist/{keyset.js → util/keyset.js} +0 -0
  855. /package/dist/{same-text.js → util/same-text.js} +0 -0
  856. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  857. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  858. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  859. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  860. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  861. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  862. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  863. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  864. /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
  *
@@ -18,7 +20,7 @@ export interface ArchiveOpts {
18
20
  * append-only trigger lets the delete through, then deletes the row. All in one
19
21
  * write scope, which nests inside an outer transaction (e.g. batchWriteAndDelete).
20
22
  *
21
- * Throws if the row does not exist or is not `kind='raw'`.
23
+ * Throws if the row does not exist or is not `kind='raw'`. Returns the archived_at it wrote.
22
24
  */
23
- export declare function archiveRawMemory(db: DatabaseSyncLike, id: string, opts: ArchiveOpts): void;
25
+ export declare function archiveRawMemory(db: DatabaseSyncLike, id: string, opts: ArchiveOpts): string;
24
26
  //# sourceMappingURL=raw-archive.d.ts.map
@@ -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
@@ -34,6 +38,7 @@ function moveRowToArchive(db, id, row, opts) {
34
38
  // Archived text must be unsearchable at commit, so a failed purge fails (and rolls back) the whole archive.
35
39
  if (isFtsAvailable(db))
36
40
  db.prepare(`DELETE FROM memories_fts WHERE id = ?`).run(id);
41
+ return archivedAt;
37
42
  }
38
43
  // Emit the archive_raw audit event inside the SAVEPOINT so the audit row is
39
44
  // committed atomically with the row deletion. Use the row's own tenant_id
@@ -62,14 +67,14 @@ function auditArchive(db, id, row, opts) {
62
67
  * append-only trigger lets the delete through, then deletes the row. All in one
63
68
  * write scope, which nests inside an outer transaction (e.g. batchWriteAndDelete).
64
69
  *
65
- * Throws if the row does not exist or is not `kind='raw'`.
70
+ * Throws if the row does not exist or is not `kind='raw'`. Returns the archived_at it wrote.
66
71
  */
67
72
  export function archiveRawMemory(db, id, opts) {
68
73
  const row = loadRawRow(db, id);
69
74
  // A SAVEPOINT when already inside a transaction (e.g. batchWriteAndDelete), so a throw here
70
75
  // rolls back only this archive.
71
- withWriteScope(db, 'archive_raw', () => {
72
- moveRowToArchive(db, id, row, opts);
76
+ return withWriteScope(db, 'archive_raw', () => {
77
+ const archivedAt = moveRowToArchive(db, id, row, opts);
73
78
  auditArchive(db, id, row, opts);
74
79
  // Archiving a child under a level-2 summary marks the parent dirty, inside the
75
80
  // SAVEPOINT so the dirty-mark commits atomically with the archive.
@@ -84,6 +89,7 @@ export function archiveRawMemory(db, id, opts) {
84
89
  if (opts.afterArchive) {
85
90
  opts.afterArchive(db, id);
86
91
  }
92
+ return archivedAt;
87
93
  });
88
94
  }
89
95
  //# sourceMappingURL=raw-archive.js.map
@@ -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
@@ -60,6 +60,8 @@ export declare function assertClientScope(scope: string | null | undefined): voi
60
60
  export declare function canTouchScope(actor: {
61
61
  owner?: string;
62
62
  }, scope: string | null): boolean;
63
+ /** canTouchScope for a caller known by its own personal scope, as a store method receives it. */
64
+ export declare function ownScopeTouches(ownScope: string | null, scope: string | null): boolean;
63
65
  /**
64
66
  * Recall-side scope filter — the canonical JS half of the recall default-deny
65
67
  * rule (the SQL half lives in `loadSearchRows` via `loadRecallSearchEntries`).
@@ -68,11 +70,6 @@ export declare function canTouchScope(actor: {
68
70
  * - When `requested` is undefined/empty: default-deny on any
69
71
  * `<source>:private:*` scope and on the `RECALL_DEFAULT_DENY_SCOPES`
70
72
  * quarantine buckets. `null` and public scopes pass, and so does `ownScope`, the caller's own personal scope.
71
- *
72
- * @internal Exported for test parity with
73
- * `RECALL_DEFAULT_DENY_SCOPES` (single-source-of-truth verification). NOT part
74
- * of the public API surface; not re-exported from `src/index.ts`. Subject to
75
- * change without semver bump.
76
73
  */
77
74
  export declare function passesScopeFilterForRecall(scope: string | null, requested: string | undefined, ownScope?: string | null): boolean;
78
75
  export interface SqlFragment {
@@ -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
@@ -83,7 +83,11 @@ export function assertClientScope(scope) {
83
83
  }
84
84
  /** True when `actor` may change or delete a row in `scope`: any non-personal scope, or its own personal one. */
85
85
  export function canTouchScope(actor, scope) {
86
- return !isPersonalScope(scope) || scope === personalScopeOf(actor);
86
+ return ownScopeTouches(personalScopeOf(actor), scope);
87
+ }
88
+ /** canTouchScope for a caller known by its own personal scope, as a store method receives it. */
89
+ export function ownScopeTouches(ownScope, scope) {
90
+ return !isPersonalScope(scope) || scope === ownScope;
87
91
  }
88
92
  /**
89
93
  * Recall-side scope filter — the canonical JS half of the recall default-deny
@@ -93,11 +97,6 @@ export function canTouchScope(actor, scope) {
93
97
  * - When `requested` is undefined/empty: default-deny on any
94
98
  * `<source>:private:*` scope and on the `RECALL_DEFAULT_DENY_SCOPES`
95
99
  * quarantine buckets. `null` and public scopes pass, and so does `ownScope`, the caller's own personal scope.
96
- *
97
- * @internal Exported for test parity with
98
- * `RECALL_DEFAULT_DENY_SCOPES` (single-source-of-truth verification). NOT part
99
- * of the public API surface; not re-exported from `src/index.ts`. Subject to
100
- * change without semver bump.
101
100
  */
102
101
  export function passesScopeFilterForRecall(scope, requested, ownScope) {
103
102
  if (requested !== undefined && requested !== '') {