hippo-memory 1.69.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. package/README.md +5 -2
  2. package/dist/agent-memories/apply.d.ts +3 -3
  3. package/dist/agent-memories/apply.js +16 -31
  4. package/dist/agent-memories/claude-code.d.ts +1 -3
  5. package/dist/agent-memories/claude-code.js +11 -7
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +3 -2
  8. package/dist/agent-memories/gemini.js +6 -5
  9. package/dist/agent-memories/keys.js +3 -2
  10. package/dist/agent-memories/legacy.d.ts +2 -2
  11. package/dist/agent-memories/legacy.js +2 -2
  12. package/dist/agent-memories/report.d.ts +1 -1
  13. package/dist/agent-memories/report.js +1 -1
  14. package/dist/agent-memories/source.d.ts +1 -1
  15. package/dist/agent-memories/source.js +6 -5
  16. package/dist/agent-memories/sync.d.ts +1 -1
  17. package/dist/agent-memories/sync.js +24 -33
  18. package/dist/agent-memories/types.d.ts +1 -1
  19. package/dist/api/assemble.d.ts +2 -2
  20. package/dist/api/assemble.js +42 -32
  21. package/dist/api/audit.d.ts +4 -7
  22. package/dist/api/audit.js +6 -20
  23. package/dist/api/auth.d.ts +5 -18
  24. package/dist/api/auth.js +44 -194
  25. package/dist/api/auto-sleep.d.ts +13 -0
  26. package/dist/api/auto-sleep.js +32 -0
  27. package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
  28. package/dist/{availability.js → api/availability.js} +12 -29
  29. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  30. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  31. package/dist/{context-render.js → api/context-render.js} +7 -6
  32. package/dist/api/context-select.d.ts +5 -5
  33. package/dist/api/context-select.js +37 -45
  34. package/dist/api/context-types.d.ts +5 -5
  35. package/dist/api/context.d.ts +2 -4
  36. package/dist/api/context.js +48 -61
  37. package/dist/api/dormant.d.ts +3 -3
  38. package/dist/api/dormant.js +38 -107
  39. package/dist/api/drill-down.d.ts +2 -2
  40. package/dist/api/drill-down.js +37 -65
  41. package/dist/api/forget.d.ts +2 -11
  42. package/dist/api/forget.js +13 -46
  43. package/dist/api/goals.d.ts +1 -1
  44. package/dist/api/goals.js +2 -2
  45. package/dist/api/index.d.ts +26 -0
  46. package/dist/api/index.js +29 -0
  47. package/dist/api/instruction-detect.js +74 -0
  48. package/dist/api/learn.js +63 -55
  49. package/dist/api/ledger-db.d.ts +20 -0
  50. package/dist/api/ledger-db.js +79 -0
  51. package/dist/api/on-store.d.ts +16 -0
  52. package/dist/api/on-store.js +36 -0
  53. package/dist/api/outcome.d.ts +5 -42
  54. package/dist/api/outcome.js +15 -80
  55. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  56. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  57. package/dist/api/promote.d.ts +4 -15
  58. package/dist/api/promote.js +29 -106
  59. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
  60. package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
  61. package/dist/api/quarantine.d.ts +5 -5
  62. package/dist/api/quarantine.js +30 -106
  63. package/dist/api/recall-core.d.ts +4 -0
  64. package/dist/api/recall-core.js +112 -0
  65. package/dist/{recall-history.js → api/recall-history.js} +30 -25
  66. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
  67. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
  68. package/dist/api/recall-record.d.ts +10 -13
  69. package/dist/api/recall-record.js +10 -30
  70. package/dist/api/recall-request.d.ts +2 -2
  71. package/dist/api/recall-request.js +3 -3
  72. package/dist/api/recall-types.d.ts +41 -16
  73. package/dist/api/recall.d.ts +1 -1
  74. package/dist/api/recall.js +39 -37
  75. package/dist/api/remember.d.ts +10 -12
  76. package/dist/api/remember.js +29 -45
  77. package/dist/api/session-owners.d.ts +4 -0
  78. package/dist/api/session-owners.js +17 -0
  79. package/dist/api/sleep-run.d.ts +7 -7
  80. package/dist/api/sleep-run.js +63 -75
  81. package/dist/api/sleep.d.ts +1 -1
  82. package/dist/api/tokens.d.ts +2 -2
  83. package/dist/api/tokens.js +9 -21
  84. package/dist/api/types.d.ts +2 -2
  85. package/dist/api/types.js +1 -1
  86. package/dist/capture/caller-session.d.ts +2 -2
  87. package/dist/capture/caller-session.js +8 -8
  88. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  89. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  90. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  91. package/dist/capture/command.d.ts +1 -1
  92. package/dist/capture/command.js +54 -41
  93. package/dist/capture/compact-resume-caller.d.ts +1 -1
  94. package/dist/capture/compact-resume-caller.js +7 -7
  95. package/dist/capture/compact.d.ts +4 -1
  96. package/dist/capture/compact.js +40 -22
  97. package/dist/capture/compaction-items-caller.d.ts +1 -1
  98. package/dist/capture/compaction-items-caller.js +7 -5
  99. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  100. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  101. package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
  102. package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
  103. package/dist/capture/copilot-transcript.js +1 -1
  104. package/dist/capture/extract.js +2 -2
  105. package/dist/capture/failure-caller.d.ts +2 -2
  106. package/dist/capture/failure-caller.js +6 -6
  107. package/dist/capture/failure-reading.d.ts +2 -5
  108. package/dist/capture/failure-reading.js +11 -12
  109. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  110. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  111. package/dist/capture/pre-compact-caller.d.ts +1 -1
  112. package/dist/capture/pre-compact-caller.js +2 -2
  113. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
  114. package/dist/{session-digest.js → capture/session-digest.js} +17 -23
  115. package/dist/capture/session-end-caller.d.ts +2 -2
  116. package/dist/capture/session-end-caller.js +1 -1
  117. package/dist/capture/session-texts.d.ts +1 -1
  118. package/dist/capture/session-texts.js +5 -5
  119. package/dist/capture/session-worker.js +6 -4
  120. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  121. package/dist/capture/transcript.js +68 -74
  122. package/dist/capture/working-state.d.ts +0 -3
  123. package/dist/capture/working-state.js +7 -7
  124. package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
  125. package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
  126. package/dist/cli/audit.d.ts +2 -2
  127. package/dist/cli/audit.js +77 -72
  128. package/dist/cli/auth.d.ts +2 -1
  129. package/dist/cli/auth.js +18 -20
  130. package/dist/cli/briefs.d.ts +4 -3
  131. package/dist/cli/briefs.js +59 -181
  132. package/dist/cli/card.d.ts +2 -1
  133. package/dist/cli/card.js +25 -23
  134. package/dist/{client.d.ts → cli/client.d.ts} +1 -1
  135. package/dist/{client.js → cli/client.js} +1 -1
  136. package/dist/cli/compact-resume-payload.d.ts +8 -0
  137. package/dist/cli/compact-resume-payload.js +39 -0
  138. package/dist/cli/context.d.ts +2 -13
  139. package/dist/cli/context.js +41 -71
  140. package/dist/cli/continuity.d.ts +6 -5
  141. package/dist/cli/continuity.js +109 -99
  142. package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
  143. package/dist/cli/curate.d.ts +9 -9
  144. package/dist/cli/curate.js +177 -149
  145. package/dist/cli/dag.d.ts +4 -4
  146. package/dist/cli/dag.js +46 -34
  147. package/dist/cli/decisions.d.ts +4 -3
  148. package/dist/cli/decisions.js +108 -218
  149. package/dist/cli/eval.d.ts +1 -3
  150. package/dist/cli/eval.js +43 -31
  151. package/dist/cli/explain.d.ts +1 -1
  152. package/dist/cli/explain.js +35 -19
  153. package/dist/cli/flag-values.d.ts +25 -0
  154. package/dist/cli/flag-values.js +103 -0
  155. package/dist/cli/flags.d.ts +303 -0
  156. package/dist/cli/flags.js +169 -0
  157. package/dist/cli/goals.d.ts +2 -1
  158. package/dist/cli/goals.js +39 -34
  159. package/dist/cli/hook-runtime.d.ts +49 -0
  160. package/dist/cli/hook-runtime.js +155 -0
  161. package/dist/cli/init.d.ts +2 -1
  162. package/dist/cli/init.js +151 -118
  163. package/dist/cli/install-steps.d.ts +7 -0
  164. package/dist/cli/install-steps.js +110 -0
  165. package/dist/cli/last-sleep.d.ts +2 -1
  166. package/dist/cli/last-sleep.js +9 -7
  167. package/dist/cli/maintenance.d.ts +5 -4
  168. package/dist/cli/maintenance.js +31 -27
  169. package/dist/cli/object-verbs.d.ts +40 -0
  170. package/dist/cli/object-verbs.js +65 -0
  171. package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
  172. package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
  173. package/dist/cli/playbooks.d.ts +4 -3
  174. package/dist/cli/playbooks.js +77 -280
  175. package/dist/cli/print.d.ts +18 -0
  176. package/dist/cli/print.js +85 -0
  177. package/dist/cli/projects.d.ts +2 -3
  178. package/dist/cli/projects.js +56 -49
  179. package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
  180. package/dist/cli/quality-repair-once.js +4 -4
  181. package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
  182. package/dist/cli/recall.d.ts +2 -4
  183. package/dist/cli/recall.js +101 -150
  184. package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
  185. package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
  186. package/dist/cli/remember.d.ts +1 -3
  187. package/dist/cli/remember.js +124 -103
  188. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
  189. package/dist/{scheduler.js → cli/scheduler.js} +13 -7
  190. package/dist/cli/serve.d.ts +1 -1
  191. package/dist/cli/serve.js +34 -4
  192. package/dist/cli/session-hooks.d.ts +4 -4
  193. package/dist/cli/session-hooks.js +190 -184
  194. package/dist/cli/setup.d.ts +2 -1
  195. package/dist/cli/setup.js +41 -21
  196. package/dist/cli/shared.d.ts +5 -95
  197. package/dist/cli/shared.js +18 -369
  198. package/dist/cli/slack.d.ts +2 -1
  199. package/dist/cli/slack.js +31 -55
  200. package/dist/cli/sleep-render.d.ts +4 -0
  201. package/dist/cli/sleep-render.js +61 -0
  202. package/dist/cli/sleep.d.ts +2 -8
  203. package/dist/cli/sleep.js +20 -76
  204. package/dist/cli/status.d.ts +3 -3
  205. package/dist/cli/status.js +39 -41
  206. package/dist/{stdin.js → cli/stdin.js} +6 -6
  207. package/dist/cli/transfer.d.ts +4 -4
  208. package/dist/cli/transfer.js +68 -42
  209. package/dist/cli/usage.js +4 -2
  210. package/dist/cli.d.ts +289 -5
  211. package/dist/cli.js +184 -117
  212. package/dist/connectors/dlq.d.ts +44 -0
  213. package/dist/connectors/dlq.js +30 -0
  214. package/dist/connectors/github/backfill.d.ts +1 -1
  215. package/dist/connectors/github/backfill.js +29 -66
  216. package/dist/connectors/github/cli-impl.js +59 -74
  217. package/dist/connectors/github/deletion.d.ts +5 -6
  218. package/dist/connectors/github/deletion.js +18 -52
  219. package/dist/connectors/github/dlq.d.ts +7 -61
  220. package/dist/connectors/github/dlq.js +19 -119
  221. package/dist/connectors/github/ingest.d.ts +2 -31
  222. package/dist/connectors/github/ingest.js +20 -83
  223. package/dist/connectors/github/octokit-client.d.ts +1 -1
  224. package/dist/connectors/github/octokit-client.js +2 -1
  225. package/dist/connectors/github/tenant-routing.d.ts +2 -2
  226. package/dist/connectors/github/tenant-routing.js +10 -36
  227. package/dist/connectors/github/transform.d.ts +1 -1
  228. package/dist/connectors/github/types.d.ts +1 -1
  229. package/dist/connectors/github/types.js +15 -18
  230. package/dist/connectors/github/webhook.d.ts +3 -2
  231. package/dist/connectors/github/webhook.js +84 -87
  232. package/dist/connectors/slack/backfill.d.ts +1 -1
  233. package/dist/connectors/slack/backfill.js +5 -29
  234. package/dist/connectors/slack/deletion.d.ts +4 -7
  235. package/dist/connectors/slack/deletion.js +20 -49
  236. package/dist/connectors/slack/dlq.d.ts +7 -49
  237. package/dist/connectors/slack/dlq.js +25 -118
  238. package/dist/connectors/slack/ingest.d.ts +5 -18
  239. package/dist/connectors/slack/ingest.js +27 -91
  240. package/dist/connectors/slack/signature.js +2 -1
  241. package/dist/connectors/slack/tenant-routing.d.ts +4 -1
  242. package/dist/connectors/slack/tenant-routing.js +13 -14
  243. package/dist/connectors/slack/transform.d.ts +1 -1
  244. package/dist/connectors/slack/types.d.ts +1 -1
  245. package/dist/connectors/slack/types.js +3 -12
  246. package/dist/connectors/slack/web-client.js +2 -2
  247. package/dist/connectors/slack/webhook.d.ts +3 -2
  248. package/dist/connectors/slack/webhook.js +75 -82
  249. package/dist/connectors/slack/workspaces.d.ts +4 -17
  250. package/dist/connectors/slack/workspaces.js +4 -34
  251. package/dist/consolidate/conflicts.d.ts +1 -1
  252. package/dist/consolidate/conflicts.js +4 -4
  253. package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
  254. package/dist/{dag.js → consolidate/dag.js} +60 -81
  255. package/dist/consolidate/decay.d.ts +2 -2
  256. package/dist/consolidate/decay.js +28 -22
  257. package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
  258. package/dist/consolidate/flush-units.d.ts +2 -2
  259. package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
  260. package/dist/consolidate/half-life-migration.js +106 -0
  261. package/dist/consolidate/llm-passes.js +8 -8
  262. package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
  263. package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
  264. package/dist/consolidate/merge.js +57 -54
  265. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  266. package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
  267. package/dist/consolidate/physics-pass.js +46 -46
  268. package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
  269. package/dist/{replay.js → consolidate/replay.js} +2 -2
  270. package/dist/consolidate/run.d.ts +7 -13
  271. package/dist/consolidate/run.js +6 -37
  272. package/dist/consolidate/sleep.d.ts +1 -1
  273. package/dist/consolidate/sleep.js +64 -134
  274. package/dist/{trace.js → consolidate/trace.js} +4 -6
  275. package/dist/consolidate/traces.js +34 -29
  276. package/dist/{ablation.js → core/ablation.js} +1 -1
  277. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  278. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  279. package/dist/{ambient.js → core/ambient.js} +12 -10
  280. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
  281. package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
  282. package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
  283. package/dist/{compare.js → core/compare.js} +10 -3
  284. package/dist/{config.d.ts → core/config.d.ts} +6 -6
  285. package/dist/{config.js → core/config.js} +99 -72
  286. package/dist/core/handoff.js +87 -0
  287. package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
  288. package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
  289. package/dist/{memory.js → core/memory.js} +110 -82
  290. package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
  291. package/dist/{physics.js → core/physics.js} +2 -1
  292. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
  293. package/dist/{project-identity.js → core/project-identity.js} +5 -17
  294. package/dist/{project-remote.js → core/project-remote.js} +4 -4
  295. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  296. package/dist/{salience.js → core/salience.js} +35 -20
  297. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  298. package/dist/{search/types.js → core/search-types.js} +1 -1
  299. package/dist/core/session-digest-row.d.ts +5 -0
  300. package/dist/core/session-digest-row.js +6 -0
  301. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  302. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
  303. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  304. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  305. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
  306. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
  307. package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
  308. package/dist/db/backup.js +1 -1
  309. package/dist/db/busy.d.ts +18 -1
  310. package/dist/db/busy.js +74 -9
  311. package/dist/db/connect.d.ts +10 -2
  312. package/dist/db/connect.js +43 -10
  313. package/dist/db/index.d.ts +9 -0
  314. package/dist/db/index.js +8 -0
  315. package/dist/db/meta.d.ts +4 -0
  316. package/dist/db/meta.js +11 -1
  317. package/dist/db/migrate.d.ts +8 -1
  318. package/dist/db/migrate.js +25 -30
  319. package/dist/db/migrations/v08.js +1 -1
  320. package/dist/db/migrations/v14.js +39 -35
  321. package/dist/db/migrations/v16.js +29 -26
  322. package/dist/db/migrations/v18.js +6 -5
  323. package/dist/db/migrations/v20.js +4 -2
  324. package/dist/db/migrations/v22.js +39 -36
  325. package/dist/db/migrations/v24.js +27 -22
  326. package/dist/db/migrations/v29.js +37 -32
  327. package/dist/db/migrations/v31.js +36 -31
  328. package/dist/db/migrations/v35.js +1 -1
  329. package/dist/db/migrations/v39.js +1 -1
  330. package/dist/db/migrations/v40.js +15 -14
  331. package/dist/db/migrations/v43.js +7 -6
  332. package/dist/db/migrations/v44.js +1 -1
  333. package/dist/db/migrations/v45.js +1 -1
  334. package/dist/db/migrations/v46.js +1 -1
  335. package/dist/db/migrations/v47.js +1 -1
  336. package/dist/db/migrations/v48.js +1 -1
  337. package/dist/db/migrations/v49.js +1 -1
  338. package/dist/db/migrations/v50.js +8 -7
  339. package/dist/db/migrations/v52.js +1 -1
  340. package/dist/db/open.d.ts +9 -1
  341. package/dist/db/open.js +21 -4
  342. package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
  343. package/dist/{physics-state.js → db/physics-state.js} +9 -16
  344. package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
  345. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
  346. package/dist/db/request-stores.d.ts +15 -2
  347. package/dist/db/request-stores.js +37 -15
  348. package/dist/db/tables.d.ts +2 -0
  349. package/dist/db/tables.js +6 -0
  350. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
  351. package/dist/{vector-store.js → db/vector-store.js} +76 -51
  352. package/dist/db/wal-checkpointer.d.ts +11 -0
  353. package/dist/db/wal-checkpointer.js +92 -0
  354. package/dist/doctor.js +105 -136
  355. package/dist/entry/json-hooks.d.ts +1 -1
  356. package/dist/entry/json-hooks.js +1 -1
  357. package/dist/entry/project-identity.d.ts +1 -1
  358. package/dist/entry/project-identity.js +1 -1
  359. package/dist/entry/session-text.d.ts +3 -3
  360. package/dist/entry/session-text.js +3 -3
  361. package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
  362. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
  363. package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
  364. package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
  365. package/dist/{eval.js → eval/eval.js} +29 -22
  366. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
  367. package/dist/{judgment.js → eval/judgment.js} +4 -9
  368. package/dist/extensions/openclaw-plugin/index.js +1 -2
  369. package/dist/graph/delta.d.ts +3 -2
  370. package/dist/graph/delta.js +9 -23
  371. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
  372. package/dist/{graph-extract.js → graph/extract.js} +37 -52
  373. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
  374. package/dist/{graph-recall.js → graph/recall.js} +55 -36
  375. package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
  376. package/dist/{graph-stream.js → graph/stream.js} +9 -7
  377. package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
  378. package/dist/{graph-view.js → graph/view.js} +127 -167
  379. package/dist/graph/write.d.ts +4 -76
  380. package/dist/graph/write.js +13 -397
  381. package/dist/hooks/codex-session.js +1 -1
  382. package/dist/hooks/codex-wrapper.js +14 -15
  383. package/dist/hooks/copilot.d.ts +1 -8
  384. package/dist/hooks/copilot.js +14 -15
  385. package/dist/{cli → hooks}/hook-blocks.js +1 -1
  386. package/dist/hooks/json-hooks.d.ts +1 -1
  387. package/dist/hooks/json-hooks.js +31 -122
  388. package/dist/hooks/opencode.js +35 -27
  389. package/dist/hooks/shared.d.ts +0 -4
  390. package/dist/hooks/shared.js +1 -5
  391. package/dist/importers/core.d.ts +2 -6
  392. package/dist/importers/core.js +41 -39
  393. package/dist/importers/markdown-parse.d.ts +1 -10
  394. package/dist/importers/markdown-parse.js +2 -19
  395. package/dist/importers/markdown.js +2 -1
  396. package/dist/importers/sources.js +50 -46
  397. package/dist/importers/vault.js +71 -92
  398. package/dist/index.d.ts +22 -22
  399. package/dist/index.js +21 -21
  400. package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
  401. package/dist/{autolearn.js → learn/autolearn.js} +13 -11
  402. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  403. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  404. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  405. package/dist/learn/extract.js +125 -0
  406. package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
  407. package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
  408. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
  409. package/dist/{invalidation.js → learn/invalidation.js} +83 -99
  410. package/dist/mcp/admin-tools.d.ts +1 -1
  411. package/dist/mcp/admin-tools.js +37 -60
  412. package/dist/mcp/format.d.ts +5 -5
  413. package/dist/mcp/format.js +7 -6
  414. package/dist/mcp/framing.d.ts +6 -0
  415. package/dist/mcp/framing.js +11 -3
  416. package/dist/mcp/memory-tools.js +7 -27
  417. package/dist/mcp/protocol.d.ts +6 -10
  418. package/dist/mcp/protocol.js +8 -14
  419. package/dist/mcp/recall-tools.d.ts +2 -2
  420. package/dist/mcp/recall-tools.js +68 -50
  421. package/dist/mcp/request.js +62 -60
  422. package/dist/mcp/server.js +1 -1
  423. package/dist/mcp/session-state.d.ts +1 -2
  424. package/dist/mcp/session-state.js +2 -2
  425. package/dist/mcp/shared-gate.js +1 -1
  426. package/dist/mcp/stdio.js +69 -31
  427. package/dist/mcp/tool-args.js +2 -1
  428. package/dist/mcp/tools.js +2 -2
  429. package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
  430. package/dist/objects/customer-notes.js +112 -0
  431. package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
  432. package/dist/objects/decisions.js +101 -0
  433. package/dist/objects/descriptor.d.ts +52 -0
  434. package/dist/objects/descriptor.js +4 -0
  435. package/dist/objects/fields.d.ts +15 -0
  436. package/dist/objects/fields.js +21 -0
  437. package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
  438. package/dist/objects/incidents.js +130 -0
  439. package/dist/objects/lifecycle.d.ts +27 -0
  440. package/dist/objects/lifecycle.js +96 -0
  441. package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
  442. package/dist/objects/policies.js +189 -0
  443. package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
  444. package/dist/objects/processes.js +146 -0
  445. package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
  446. package/dist/objects/project-briefs.js +255 -0
  447. package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
  448. package/dist/objects/skills.js +156 -0
  449. package/dist/postinstall.js +4 -2
  450. package/dist/predictions/planning-fallacy.d.ts +4 -76
  451. package/dist/predictions/planning-fallacy.js +4 -129
  452. package/dist/rerankers/clef.d.ts +2 -6
  453. package/dist/rerankers/clef.js +27 -47
  454. package/dist/rerankers/cross-encoder.d.ts +0 -7
  455. package/dist/rerankers/cross-encoder.js +15 -23
  456. package/dist/rerankers/index.js +8 -7
  457. package/dist/rerankers/jev.d.ts +1 -4
  458. package/dist/rerankers/jev.js +30 -49
  459. package/dist/rerankers/llm.d.ts +2 -4
  460. package/dist/rerankers/llm.js +33 -50
  461. package/dist/rerankers/outage-warning.d.ts +7 -0
  462. package/dist/rerankers/outage-warning.js +31 -0
  463. package/dist/rerankers/remote.d.ts +3 -0
  464. package/dist/rerankers/remote.js +23 -0
  465. package/dist/rerankers/types.d.ts +1 -1
  466. package/dist/search/as-of.d.ts +1 -1
  467. package/dist/search/bm25-search.d.ts +2 -2
  468. package/dist/search/bm25-search.js +7 -7
  469. package/dist/search/bm25.d.ts +1 -1
  470. package/dist/search/bm25.js +1 -1
  471. package/dist/search/boosts.d.ts +5 -1
  472. package/dist/search/boosts.js +34 -13
  473. package/dist/search/breakdown.d.ts +2 -2
  474. package/dist/search/breakdown.js +2 -1
  475. package/dist/search/explain.d.ts +1 -1
  476. package/dist/search/explain.js +3 -2
  477. package/dist/search/finalize.d.ts +2 -2
  478. package/dist/search/finalize.js +4 -3
  479. package/dist/search/fusion.d.ts +1 -1
  480. package/dist/search/fusion.js +3 -3
  481. package/dist/search/hybrid-score.d.ts +2 -2
  482. package/dist/search/hybrid-score.js +1 -1
  483. package/dist/search/hybrid.d.ts +4 -4
  484. package/dist/search/hybrid.js +11 -8
  485. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  486. package/dist/{multihop.js → search/multihop.js} +7 -5
  487. package/dist/{path-context.js → search/path-context.js} +3 -1
  488. package/dist/search/physics-search.d.ts +4 -4
  489. package/dist/search/physics-search.js +15 -15
  490. package/dist/search/rerank.d.ts +3 -3
  491. package/dist/search/rerank.js +4 -3
  492. package/dist/search/temporal.d.ts +1 -1
  493. package/dist/search/temporal.js +5 -2
  494. package/dist/search/vector.d.ts +3 -3
  495. package/dist/search/vector.js +17 -11
  496. package/dist/server/auth.d.ts +1 -1
  497. package/dist/server/auth.js +26 -18
  498. package/dist/server/boot.d.ts +24 -0
  499. package/dist/server/boot.js +465 -0
  500. package/dist/server/client-ip.d.ts +5 -1
  501. package/dist/server/client-ip.js +18 -6
  502. package/dist/server/cursor.d.ts +1 -1
  503. package/dist/server/cursor.js +2 -3
  504. package/dist/server/deadline.d.ts +13 -0
  505. package/dist/server/deadline.js +45 -0
  506. package/dist/server/key-check-bounds.d.ts +8 -0
  507. package/dist/server/key-check-bounds.js +46 -0
  508. package/dist/server/lifecycle.js +1 -1
  509. package/dist/server/mcp-http.d.ts +1 -4
  510. package/dist/server/mcp-http.js +34 -24
  511. package/dist/server/ready.d.ts +7 -0
  512. package/dist/server/ready.js +38 -0
  513. package/dist/server/request.d.ts +10 -4
  514. package/dist/server/request.js +63 -12
  515. package/dist/server/route-table.d.ts +15 -0
  516. package/dist/server/route-table.js +209 -0
  517. package/dist/server/routes/admin.js +13 -8
  518. package/dist/server/routes/customer-notes.d.ts +5 -5
  519. package/dist/server/routes/customer-notes.js +32 -97
  520. package/dist/server/routes/decisions.d.ts +5 -5
  521. package/dist/server/routes/decisions.js +42 -105
  522. package/dist/server/routes/incidents.d.ts +5 -5
  523. package/dist/server/routes/incidents.js +42 -95
  524. package/dist/server/routes/memories.js +12 -14
  525. package/dist/server/routes/object-routes.d.ts +40 -0
  526. package/dist/server/routes/object-routes.js +80 -0
  527. package/dist/server/routes/policies.d.ts +6 -6
  528. package/dist/server/routes/policies.js +40 -124
  529. package/dist/server/routes/predictions.js +29 -45
  530. package/dist/server/routes/processes.d.ts +5 -5
  531. package/dist/server/routes/processes.js +38 -118
  532. package/dist/server/routes/project-briefs.d.ts +6 -6
  533. package/dist/server/routes/project-briefs.js +38 -110
  534. package/dist/server/routes/recall.js +14 -12
  535. package/dist/server/routes/skills.d.ts +6 -6
  536. package/dist/server/routes/skills.js +37 -125
  537. package/dist/{server-detect.js → server/server-detect.js} +1 -1
  538. package/dist/server/sleep-child.d.ts +2 -0
  539. package/dist/server/sleep-child.js +19 -0
  540. package/dist/server/sleep-offload.d.ts +20 -0
  541. package/dist/server/sleep-offload.js +70 -0
  542. package/dist/server/tls.d.ts +6 -0
  543. package/dist/server/tls.js +24 -0
  544. package/dist/server/types.d.ts +27 -8
  545. package/dist/server/validation.d.ts +3 -4
  546. package/dist/server/validation.js +6 -11
  547. package/dist/server.d.ts +39 -61
  548. package/dist/server.js +24 -568
  549. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
  550. package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
  551. package/dist/{scope.js → sharing/scope.js} +1 -1
  552. package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
  553. package/dist/{shared.js → sharing/shared.js} +100 -77
  554. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  555. package/dist/{ambient-store.js → store/ambient.js} +10 -10
  556. package/dist/store/audit-event.d.ts +11 -5
  557. package/dist/store/audit-event.js +5 -4
  558. package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
  559. package/dist/{audit.js → store/audit.js} +91 -6
  560. package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
  561. package/dist/{auth.js → store/auth.js} +100 -92
  562. package/dist/store/candidates.d.ts +23 -12
  563. package/dist/store/candidates.js +87 -35
  564. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
  565. package/dist/{card-detail.js → store/card-detail.js} +1 -1
  566. package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
  567. package/dist/{store-cards.js → store/cards.js} +85 -146
  568. package/dist/store/compactions.d.ts +78 -0
  569. package/dist/store/compactions.js +93 -0
  570. package/dist/store/conflicts.d.ts +22 -5
  571. package/dist/store/conflicts.js +160 -109
  572. package/dist/store/connectors/github.d.ts +84 -0
  573. package/dist/store/connectors/github.js +180 -0
  574. package/dist/store/connectors/slack.d.ts +69 -0
  575. package/dist/store/connectors/slack.js +177 -0
  576. package/dist/store/dashboard-reads.d.ts +27 -0
  577. package/dist/store/dashboard-reads.js +92 -0
  578. package/dist/store/delete-and-batch.d.ts +20 -24
  579. package/dist/store/delete-and-batch.js +64 -40
  580. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
  581. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
  582. package/dist/store/descendant-page.d.ts +12 -0
  583. package/dist/store/descendant-page.js +99 -0
  584. package/dist/store/diagnostics.d.ts +47 -0
  585. package/dist/store/diagnostics.js +51 -0
  586. package/dist/store/doctor-reads.d.ts +16 -0
  587. package/dist/store/doctor-reads.js +19 -0
  588. package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
  589. package/dist/{dormant.js → store/dormant.js} +151 -6
  590. package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
  591. package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
  592. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  593. package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
  594. package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
  595. package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
  596. package/dist/store/entry-reads.d.ts +46 -7
  597. package/dist/store/entry-reads.js +120 -21
  598. package/dist/store/entry-row.d.ts +8 -2
  599. package/dist/store/entry-row.js +28 -8
  600. package/dist/store/entry-writes.d.ts +33 -4
  601. package/dist/store/entry-writes.js +108 -26
  602. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  603. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  604. package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
  605. package/dist/{goals.js → store/goals.js} +45 -94
  606. package/dist/store/graph-queue.d.ts +29 -0
  607. package/dist/store/graph-queue.js +101 -0
  608. package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
  609. package/dist/{graph/read.js → store/graph-reads.js} +63 -115
  610. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
  611. package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
  612. package/dist/store/graph-view-rows.d.ts +12 -0
  613. package/dist/store/graph-view-rows.js +67 -0
  614. package/dist/store/graph-writes.d.ts +58 -0
  615. package/dist/store/graph-writes.js +256 -0
  616. package/dist/store/half-life.d.ts +34 -0
  617. package/dist/store/half-life.js +77 -0
  618. package/dist/store/handoffs.d.ts +1 -1
  619. package/dist/store/handoffs.js +39 -30
  620. package/dist/store/index-and-stats.d.ts +8 -1
  621. package/dist/store/index-and-stats.js +51 -48
  622. package/dist/store/index.d.ts +4 -0
  623. package/dist/store/index.js +3 -0
  624. package/dist/store/key-audit.d.ts +2 -2
  625. package/dist/store/key-audit.js +4 -4
  626. package/dist/store/key-writes.d.ts +12 -5
  627. package/dist/store/key-writes.js +30 -4
  628. package/dist/store/ledger-turn.d.ts +17 -0
  629. package/dist/store/ledger-turn.js +27 -0
  630. package/dist/store/markdown.d.ts +1 -1
  631. package/dist/store/markdown.js +4 -3
  632. package/dist/store/mirrors.d.ts +5 -7
  633. package/dist/store/mirrors.js +39 -25
  634. package/dist/store/object-types.d.ts +189 -0
  635. package/dist/store/object-types.js +4 -0
  636. package/dist/store/open.d.ts +6 -4
  637. package/dist/store/open.js +24 -23
  638. package/dist/store/planning-fallacy-evidence.d.ts +42 -0
  639. package/dist/store/planning-fallacy-evidence.js +81 -0
  640. package/dist/store/port.d.ts +646 -0
  641. package/dist/store/port.js +17 -0
  642. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
  643. package/dist/{predictions/store.js → store/predictions.js} +52 -67
  644. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  645. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  646. package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
  647. package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
  648. package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
  649. package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
  650. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
  651. package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
  652. package/dist/store/rejected-values.d.ts +55 -0
  653. package/dist/store/rejected-values.js +162 -0
  654. package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
  655. package/dist/{rejection.js → store/rejection.js} +3 -2
  656. package/dist/store/rows.d.ts +2 -3
  657. package/dist/store/rows.js +18 -11
  658. package/dist/store/search-rows.d.ts +15 -4
  659. package/dist/store/search-rows.js +41 -28
  660. package/dist/store/sessions.d.ts +13 -2
  661. package/dist/store/sessions.js +79 -45
  662. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  663. package/dist/store/sqlite/commit-watch.js +29 -0
  664. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  665. package/dist/store/sqlite/connector-events-group.js +50 -0
  666. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  667. package/dist/store/sqlite/connector-writes-group.js +65 -0
  668. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  669. package/dist/store/sqlite/dag-reads-group.js +45 -0
  670. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  671. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  672. package/dist/store/sqlite/error-codec.d.ts +17 -0
  673. package/dist/store/sqlite/error-codec.js +59 -0
  674. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  675. package/dist/store/sqlite/executor-counts.js +11 -0
  676. package/dist/store/sqlite/executor.d.ts +28 -0
  677. package/dist/store/sqlite/executor.js +286 -0
  678. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  679. package/dist/store/sqlite/graph-reads-group.js +18 -0
  680. package/dist/store/sqlite/local.d.ts +21 -0
  681. package/dist/store/sqlite/local.js +38 -0
  682. package/dist/store/sqlite/object-rows.d.ts +102 -0
  683. package/dist/store/sqlite/object-rows.js +218 -0
  684. package/dist/store/sqlite/objects-group.d.ts +20 -0
  685. package/dist/store/sqlite/objects-group.js +314 -0
  686. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  687. package/dist/store/sqlite/predictions-group.js +28 -0
  688. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  689. package/dist/store/sqlite/quarantine-group.js +38 -0
  690. package/dist/store/sqlite/store.d.ts +26 -0
  691. package/dist/store/sqlite/store.js +295 -0
  692. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  693. package/dist/store/sqlite/vector-pack.js +46 -0
  694. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  695. package/dist/store/sqlite/vector-reads-group.js +23 -0
  696. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  697. package/dist/store/sqlite/worker-entry.js +8 -0
  698. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  699. package/dist/store/sqlite/worker-jobs.js +116 -0
  700. package/dist/store/sqlite/worker-ops.d.ts +124 -0
  701. package/dist/store/sqlite/worker-ops.js +82 -0
  702. package/dist/store/sqlite/worker-store.d.ts +8 -0
  703. package/dist/store/sqlite/worker-store.js +76 -0
  704. package/dist/store/summaries.d.ts +2 -11
  705. package/dist/store/summaries.js +17 -44
  706. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  707. package/dist/store/tenant-lookup.d.ts +1 -1
  708. package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
  709. package/dist/{tenant.js → store/tenant.js} +1 -1
  710. package/dist/store/token-ledger-rows.d.ts +61 -0
  711. package/dist/store/token-ledger-rows.js +68 -0
  712. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
  713. package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
  714. package/dist/store/tombstone-checks.d.ts +12 -0
  715. package/dist/store/tombstone-checks.js +31 -0
  716. package/dist/store/usage-reports.d.ts +7 -0
  717. package/dist/store/usage-reports.js +26 -0
  718. package/dist/store/vector-writes.d.ts +10 -3
  719. package/dist/store/vector-writes.js +35 -5
  720. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
  721. package/dist/{working-memory.js → store/working-memory.js} +39 -41
  722. package/dist/support-bundle.d.ts +1 -1
  723. package/dist/support-bundle.js +13 -33
  724. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  725. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  726. package/dist/trust/quarantine.d.ts +4 -0
  727. package/dist/trust/quarantine.js +8 -0
  728. package/dist/trust/reject-flow.d.ts +23 -0
  729. package/dist/trust/reject-flow.js +67 -0
  730. package/dist/util/anthropic-messages.d.ts +31 -0
  731. package/dist/util/anthropic-messages.js +46 -0
  732. package/dist/util/atomic-write.d.ts +3 -0
  733. package/dist/util/atomic-write.js +107 -0
  734. package/dist/util/crash-handlers.d.ts +5 -0
  735. package/dist/util/crash-handlers.js +30 -0
  736. package/dist/{env.d.ts → util/env.d.ts} +15 -2
  737. package/dist/{env.js → util/env.js} +20 -2
  738. package/dist/util/home-path.js +67 -0
  739. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
  740. package/dist/{http-retry.js → util/http-retry.js} +38 -7
  741. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  742. package/dist/{http-util.js → util/http-util.js} +31 -11
  743. package/dist/util/json.d.ts +17 -0
  744. package/dist/util/json.js +25 -0
  745. package/dist/{log.d.ts → util/log.d.ts} +5 -2
  746. package/dist/{log.js → util/log.js} +12 -3
  747. package/dist/util/real-path.d.ts +3 -0
  748. package/dist/util/real-path.js +15 -0
  749. package/dist/util/request-scope.d.ts +27 -0
  750. package/dist/util/request-scope.js +47 -0
  751. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  752. package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
  753. package/dist/util/stored-json.d.ts +9 -0
  754. package/dist/util/stored-json.js +8 -0
  755. package/dist/util/time.d.ts +2 -0
  756. package/dist/util/time.js +3 -0
  757. package/dist/util/token-text.d.ts +18 -0
  758. package/dist/util/token-text.js +23 -0
  759. package/dist/{version.d.ts → util/version.d.ts} +1 -1
  760. package/dist/{version.js → util/version.js} +1 -1
  761. package/extensions/openclaw-plugin/index.ts +1 -5
  762. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  763. package/extensions/openclaw-plugin/package.json +1 -1
  764. package/openclaw.plugin.json +1 -1
  765. package/package.json +2 -2
  766. package/dist/api.d.ts +0 -26
  767. package/dist/api.js +0 -29
  768. package/dist/connectors/github/idempotency.d.ts +0 -19
  769. package/dist/connectors/github/idempotency.js +0 -27
  770. package/dist/connectors/slack/idempotency.d.ts +0 -17
  771. package/dist/connectors/slack/idempotency.js +0 -31
  772. package/dist/customer-notes.js +0 -336
  773. package/dist/db.d.ts +0 -9
  774. package/dist/db.js +0 -8
  775. package/dist/decisions.js +0 -326
  776. package/dist/extract.js +0 -133
  777. package/dist/graph/rows.d.ts +0 -45
  778. package/dist/graph/types.js +0 -11
  779. package/dist/half-life-migration.js +0 -182
  780. package/dist/handoff.js +0 -68
  781. package/dist/home-path.js +0 -24
  782. package/dist/incidents.js +0 -349
  783. package/dist/instruction-detect.js +0 -27
  784. package/dist/json.d.ts +0 -7
  785. package/dist/json.js +0 -11
  786. package/dist/ledger-db.d.ts +0 -10
  787. package/dist/ledger-db.js +0 -42
  788. package/dist/policies.js +0 -434
  789. package/dist/processes.js +0 -371
  790. package/dist/project-briefs.js +0 -523
  791. package/dist/reject-flow.d.ts +0 -69
  792. package/dist/reject-flow.js +0 -260
  793. package/dist/session-owners.d.ts +0 -7
  794. package/dist/session-owners.js +0 -54
  795. package/dist/skills.js +0 -367
  796. package/dist/store/entry-writes-group.d.ts +0 -9
  797. package/dist/store-port.d.ts +0 -262
  798. package/dist/store-port.js +0 -178
  799. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  800. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  801. /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
  802. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  803. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  804. /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
  805. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  806. /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
  807. /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
  808. /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
  809. /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
  810. /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
  811. /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
  812. /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
  813. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  814. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  815. /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
  816. /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
  817. /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
  818. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  819. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  820. /package/dist/{card.d.ts → core/card.d.ts} +0 -0
  821. /package/dist/{card.js → core/card.js} +0 -0
  822. /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
  823. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  824. /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
  825. /package/dist/{physics-config.js → core/physics-config.js} +0 -0
  826. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  827. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  828. /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
  829. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  830. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  831. /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
  832. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  833. /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
  834. /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
  835. /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
  836. /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
  837. /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
  838. /package/dist/{rrf.js → search/rrf.js} +0 -0
  839. /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
  840. /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
  841. /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
  842. /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
  843. /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
  844. /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
  845. /package/dist/{yaml.js → store/yaml.js} +0 -0
  846. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  847. /package/dist/{escape.js → util/escape.js} +0 -0
  848. /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
  849. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  850. /package/dist/{keyset.js → util/keyset.js} +0 -0
  851. /package/dist/{same-text.js → util/same-text.js} +0 -0
  852. /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
  853. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  854. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  855. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  856. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  857. /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
  858. /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
  859. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  860. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,5 +1,5 @@
1
- import { type MemoryEntry } from '../memory.js';
2
- import { type DatabaseSyncLike } from '../db.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
+ import { type DatabaseSyncLike } from '../db/index.js';
3
3
  export interface WriteEntryOptions {
4
4
  actor?: string;
5
5
  afterWrite?: (db: DatabaseSyncLike, memoryId: string) => void;
@@ -7,8 +7,12 @@ export interface WriteEntryOptions {
7
7
  afterCommit?: () => void;
8
8
  }
9
9
  export declare function writeEntry(hippoRoot: string, entry: MemoryEntry, opts?: WriteEntryOptions): void;
10
- /** writeEntry on the caller's open store, so a loop of writes opens the store once; each row still commits alone. */
11
- export declare function writeEntryOn(db: DatabaseSyncLike, hippoRoot: string, entry: MemoryEntry, opts?: WriteEntryOptions): void;
10
+ /** writeEntry for each of `entries` in one transaction, so all land or none; each keeps its audit row, and mirrors follow the commit. Returns how many were written. */
11
+ export declare function writeEntriesTogether(hippoRoot: string, entries: readonly MemoryEntry[]): number;
12
+ /** writeEntry for each of `entries` on one open store, so the open and its lock wait are paid once; each row commits alone, and none opens the store when the list is empty. */
13
+ export declare function writeEntriesSeparately(hippoRoot: string, entries: readonly MemoryEntry[]): void;
14
+ /** Adds `tag` to each of a tenant's rows that lacks it, in `ids` order, each read fresh on one open store and committed alone; an id the tenant does not hold is skipped. */
15
+ export declare function addTagToEntries(hippoRoot: string, tenantId: string, ids: readonly string[], tag: string): void;
12
16
  /**
13
17
  * DB-only write path. Caller owns the open `db` handle. Runs upsert +
14
18
  * afterWrite hook + audit row inside one withWriteScope. Caller
@@ -26,6 +30,8 @@ export declare function writeEntryDbOnly(db: DatabaseSyncLike, entry: MemoryEntr
26
30
  actor?: string;
27
31
  afterWrite?: (db: DatabaseSyncLike, memoryId: string) => void;
28
32
  }): void;
33
+ /** What follows a row's upsert inside its write scope: the remember row, last of the write's audit rows, then the summary parent's dirty mark. */
34
+ export declare function auditEntryWrite(db: DatabaseSyncLike, entry: MemoryEntry, actor: string): void;
29
35
  /** Markdown mirror path, invoked AFTER commit (a rolled-back tx must leave no orphan markdown). */
30
36
  export declare function writeEntryMirrors(hippoRoot: string, entry: MemoryEntry): void;
31
37
  /** The caller passes the eval-only recall-boost ablation switch, so the store never reads experiment config itself. */
@@ -44,4 +50,27 @@ export declare function strengthenRetrievedOn(db: DatabaseSyncLike, ids: readonl
44
50
  export declare function setEntryTagsInTx(db: DatabaseSyncLike, entry: MemoryEntry): void;
45
51
  /** Removes a row from `memories` and full-text search on the caller's transaction, as sleep's dormant move does, and marks its summary parent dirty. */
46
52
  export declare function deleteEntryRowInTx(db: DatabaseSyncLike, entry: MemoryEntry, actor: string): void;
53
+ /** One half-life per memory id, on the caller's transaction. */
54
+ export declare function setHalfLivesAt(db: DatabaseSyncLike, rows: readonly {
55
+ id: string;
56
+ halfLifeDays: number;
57
+ }[]): void;
58
+ /** Moves every row of `from` in a tenant to project `into`. */
59
+ export declare function restampOriginProjectAt(db: DatabaseSyncLike, tenantId: string, from: string, into: string): void;
60
+ /** Stamps each id with its project. */
61
+ export declare function stampOriginProjectsAt(db: DatabaseSyncLike, tenantId: string, rows: readonly {
62
+ id: string;
63
+ origin: string;
64
+ }[]): void;
65
+ /** Renames a live row's source from `from` to `to`; the count is 0 when another writer moved or superseded it first. */
66
+ export declare function renameEntrySourceAt(db: DatabaseSyncLike, tenantId: string, id: string, from: string, to: string): number;
67
+ export interface RenameSourceOptions {
68
+ readonly from: string;
69
+ readonly to: string;
70
+ readonly origin: string | null;
71
+ }
72
+ /** Renames a row's source and, when `origin` is not null, its project; the count is 0 when the row is gone or moved. */
73
+ export declare function renameEntrySourceAndOriginAt(db: DatabaseSyncLike, tenantId: string, id: string, options: RenameSourceOptions): number;
74
+ /** Marks `id` superseded by `newId`; false when another writer superseded it first. */
75
+ export declare function supersedeEntryAt(db: DatabaseSyncLike, tenantId: string, id: string, newId: string): boolean;
47
76
  //# sourceMappingURL=entry-writes.d.ts.map
@@ -1,10 +1,10 @@
1
- import { markRetrieved } from '../memory.js';
2
- import { closeHippoDb, openHippoDb, rethrowIfSqliteBlocked, withWriteScope } from '../db.js';
3
- import { RejectedValueError } from '../rejection.js';
4
- import { markSummaryDirtyInTx } from '../summary-dirty.js';
5
- import { log } from '../log.js';
6
- import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
1
+ import { markRetrieved } from '../core/memory.js';
2
+ import { closeHippoDb, openHippoDb, rethrowIfSqliteBlocked, withWriteScope } from '../db/index.js';
3
+ import { RejectedValueError } from './rejection.js';
4
+ import { markSummaryDirtyInTx } from './summary-dirty.js';
5
+ import { errorMessage, log } from '../util/log.js';
7
6
  import { auditRejectionRefusal, audit } from './audit-event.js';
7
+ import { selectEntriesByIds } from './entry-reads.js';
8
8
  import { stampOriginProject, upsertEntryRow, syncFtsRow, deleteFtsRow } from './entry-row.js';
9
9
  import { mirrorBestEffort, writeMarkdownMirror } from './mirrors.js';
10
10
  import { openStore } from './open.js';
@@ -17,8 +17,60 @@ export function writeEntry(hippoRoot, entry, opts) {
17
17
  closeHippoDb(db);
18
18
  }
19
19
  }
20
+ /** writeEntry for each of `entries` in one transaction, so all land or none; each keeps its audit row, and mirrors follow the commit. Returns how many were written. */
21
+ export function writeEntriesTogether(hippoRoot, entries) {
22
+ const stamped = entries.map((entry) => stampOriginProject(hippoRoot, entry));
23
+ const db = openStore(hippoRoot);
24
+ try {
25
+ withWriteScope(db, 'write_entries_together', () => {
26
+ for (const entry of stamped)
27
+ writeEntryDbOnly(db, entry);
28
+ });
29
+ for (const entry of stamped)
30
+ writeEntryMirrors(hippoRoot, entry);
31
+ }
32
+ catch (error) {
33
+ // The scope has unwound, so the refusal row outlives the rollback, as writeEntryOn's does.
34
+ if (error instanceof RejectedValueError)
35
+ auditRejectionRefusal(db, error, 'cli');
36
+ throw error;
37
+ }
38
+ finally {
39
+ closeHippoDb(db);
40
+ }
41
+ return stamped.length;
42
+ }
43
+ /** writeEntry for each of `entries` on one open store, so the open and its lock wait are paid once; each row commits alone, and none opens the store when the list is empty. */
44
+ export function writeEntriesSeparately(hippoRoot, entries) {
45
+ if (entries.length === 0)
46
+ return;
47
+ const db = openStore(hippoRoot);
48
+ try {
49
+ for (const entry of entries)
50
+ writeEntryOn(db, hippoRoot, entry);
51
+ }
52
+ finally {
53
+ closeHippoDb(db);
54
+ }
55
+ }
56
+ /** Adds `tag` to each of a tenant's rows that lacks it, in `ids` order, each read fresh on one open store and committed alone; an id the tenant does not hold is skipped. */
57
+ export function addTagToEntries(hippoRoot, tenantId, ids, tag) {
58
+ const db = openStore(hippoRoot);
59
+ try {
60
+ const live = selectEntriesByIds(db, ids, tenantId);
61
+ for (const id of new Set(ids)) {
62
+ const entry = live.get(id);
63
+ if (!entry || entry.tags.includes(tag))
64
+ continue;
65
+ writeEntryOn(db, hippoRoot, { ...entry, tags: [...entry.tags, tag] });
66
+ }
67
+ }
68
+ finally {
69
+ closeHippoDb(db);
70
+ }
71
+ }
20
72
  /** writeEntry on the caller's open store, so a loop of writes opens the store once; each row still commits alone. */
21
- export function writeEntryOn(db, hippoRoot, entry, opts) {
73
+ function writeEntryOn(db, hippoRoot, entry, opts) {
22
74
  try {
23
75
  const stamped = stampOriginProject(hippoRoot, entry);
24
76
  writeEntryDbOnly(db, stamped, opts);
@@ -55,16 +107,20 @@ export function writeEntryDbOnly(db, entry, opts) {
55
107
  if (opts?.afterWrite) {
56
108
  opts.afterWrite(db, entry.id);
57
109
  }
58
- audit(db, 'remember', entry.id, {
110
+ auditEntryWrite(db, entry, opts?.actor ?? 'cli');
111
+ });
112
+ }
113
+ /** What follows a row's upsert inside its write scope: the remember row, last of the write's audit rows, then the summary parent's dirty mark. */
114
+ export function auditEntryWrite(db, entry, actor) {
115
+ audit(db, 'remember', { targetId: entry.id, metadata: {
59
116
  kind: entry.kind ?? 'distilled',
60
117
  scope: entry.scope ?? null,
61
- }, opts?.actor ?? 'cli', entry.tenantId);
62
- // A child write marks its summary parent dirty for the sleep-cycle rebuild; most writes
63
- // have no parent, so the hot path pays one null check.
64
- if (entry.dag_parent_id) {
65
- markSummaryDirtyInTx(db, entry.dag_parent_id, entry.tenantId, opts?.actor ?? 'cli');
66
- }
67
- });
118
+ }, actor, tenantId: entry.tenantId });
119
+ // A child write marks its summary parent dirty for the sleep-cycle rebuild; most writes
120
+ // have no parent, so the hot path pays one null check.
121
+ if (entry.dag_parent_id) {
122
+ markSummaryDirtyInTx(db, entry.dag_parent_id, entry.tenantId, actor);
123
+ }
68
124
  }
69
125
  /** Markdown mirror path, invoked AFTER commit (a rolled-back tx must leave no orphan markdown). */
70
126
  export function writeEntryMirrors(hippoRoot, entry) {
@@ -104,23 +160,15 @@ export function strengthenRetrievedInOwnTx(db, ids, opts) {
104
160
  }
105
161
  }
106
162
  function warnStrengthenFailed(error) {
107
- log.warn(`retrieval stats not saved (${error instanceof Error ? error.message : String(error)})`);
163
+ log.warn(`retrieval stats not saved (${errorMessage(error)})`);
108
164
  }
109
165
  /** strengthenRetrieved on the caller's handle, inside the caller's transaction. Throws; the caller decides. */
110
166
  export function strengthenRetrievedOn(db, ids, opts) {
111
167
  const found = new Set();
112
168
  if (ids.length === 0 || opts.recallBoostAblated)
113
169
  return found;
114
- const { tenantId } = opts;
115
- const tenantClause = tenantId !== undefined ? ' AND tenant_id = ?' : '';
116
- const select = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id = ?${tenantClause}`);
117
- const live = [];
118
- for (const id of ids) {
119
- // SAFETY: the SELECT names exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
120
- const row = (tenantId !== undefined ? select.get(id, tenantId) : select.get(id));
121
- if (row)
122
- live.push(rowToEntry(row));
123
- }
170
+ const byId = selectEntriesByIds(db, ids, opts.tenantId);
171
+ const live = [...new Set(ids)].flatMap((id) => byId.get(id) ?? []);
124
172
  const update = db.prepare('UPDATE memories SET retrieval_count = ?, last_retrieved = ?, half_life_days = ?, strength = ? WHERE id = ?');
125
173
  for (const e of markRetrieved(live)) {
126
174
  update.run(e.retrieval_count, e.last_retrieved, e.half_life_days, e.strength, e.id);
@@ -141,4 +189,38 @@ export function deleteEntryRowInTx(db, entry, actor) {
141
189
  if (entry.dag_parent_id)
142
190
  markSummaryDirtyInTx(db, entry.dag_parent_id, entry.tenantId, actor);
143
191
  }
192
+ /** One half-life per memory id, on the caller's transaction. */
193
+ export function setHalfLivesAt(db, rows) {
194
+ const update = db.prepare('UPDATE memories SET half_life_days = ? WHERE id = ?');
195
+ for (const r of rows)
196
+ update.run(r.halfLifeDays, r.id);
197
+ }
198
+ /** Moves every row of `from` in a tenant to project `into`. */
199
+ export function restampOriginProjectAt(db, tenantId, from, into) {
200
+ db.prepare(`UPDATE memories SET origin_project = ?, updated_at = datetime('now') WHERE tenant_id = ? AND origin_project = ?`)
201
+ .run(into, tenantId, from);
202
+ }
203
+ /** Stamps each id with its project. */
204
+ export function stampOriginProjectsAt(db, tenantId, rows) {
205
+ const stamp = db.prepare(`UPDATE memories SET origin_project = ?, updated_at = datetime('now') WHERE tenant_id = ? AND id = ?`);
206
+ for (const { id, origin } of rows)
207
+ stamp.run(origin, tenantId, id);
208
+ }
209
+ /** Renames a live row's source from `from` to `to`; the count is 0 when another writer moved or superseded it first. */
210
+ export function renameEntrySourceAt(db, tenantId, id, from, to) {
211
+ const moved = db.prepare(`UPDATE memories SET source = ? WHERE id = ? AND tenant_id = ? AND source = ? AND superseded_by IS NULL`).run(to, id, tenantId, from);
212
+ return Number(moved.changes ?? 0);
213
+ }
214
+ /** Renames a row's source and, when `origin` is not null, its project; the count is 0 when the row is gone or moved. */
215
+ export function renameEntrySourceAndOriginAt(db, tenantId, id, options) {
216
+ const { from, to, origin } = options;
217
+ const done = db.prepare(`UPDATE memories SET source = ?, origin_project = COALESCE(?, origin_project) WHERE id = ? AND tenant_id = ? AND source = ?`).run(to, origin, id, tenantId, from);
218
+ return Number(done.changes ?? 0);
219
+ }
220
+ /** Marks `id` superseded by `newId`; false when another writer superseded it first. */
221
+ export function supersedeEntryAt(db, tenantId, id, newId) {
222
+ const result = db.prepare(`UPDATE memories SET superseded_by = ? WHERE id = ? AND tenant_id = ? AND superseded_by IS NULL`)
223
+ .run(newId, id, tenantId);
224
+ return Number(result.changes ?? 0) !== 0;
225
+ }
144
226
  //# sourceMappingURL=entry-writes.js.map
@@ -1,5 +1,8 @@
1
- import type { CaptureErrorOutcome, RoutineRule } from './capture/failure-reading.js';
2
- import type { DatabaseSyncLike } from './db.js';
1
+ import type { DatabaseSyncLike } from '../db/index.js';
2
+ /** Why a failure was not stored, or `stored`. */
3
+ export type CaptureErrorOutcome = 'stored' | 'duplicate' | 'skipped-interrupt' | 'skipped-routine' | 'skipped-invalid';
4
+ /** Which routine check skipped a failure; the log keeps it so declines can be told apart from empty searches. */
5
+ export type RoutineRule = 'declined' | 'os-permission' | 'no-match' | 'search-tool' | 'quiet-exit';
3
6
  /** Rows older than this are pruned on write, which also bounds how far back a repeat can be found. */
4
7
  export declare const FAILURE_LOG_RETENTION_DAYS = 90;
5
8
  /** A capture-error outcome, or `store-failed` when storing the lesson threw. */
@@ -52,6 +55,8 @@ export interface FailureSummary {
52
55
  repeats: number;
53
56
  sessions: number;
54
57
  }
58
+ /** Failed tool calls logged since `sinceIso`, in every tenant; throws when the table is missing. */
59
+ export declare function countFailuresSince(db: DatabaseSyncLike, sinceIso: string): number;
55
60
  /** Sum the failure log for one tenant since `sinceIso`. */
56
61
  export declare function summarizeFailures(db: DatabaseSyncLike, tenantId: string, sinceIso: string): FailureSummary;
57
62
  //# sourceMappingURL=failure-log.d.ts.map
@@ -1,5 +1,6 @@
1
1
  /** Failure log: every failed tool call the capture-error hook sees, stored or not. */
2
- import { ConflictError } from './api-errors.js';
2
+ import { ConflictError } from '../core/api-errors.js';
3
+ import { DAY_MS } from '../util/time.js';
3
4
  /** Rows older than this are pruned on write, which also bounds how far back a repeat can be found. */
4
5
  export const FAILURE_LOG_RETENTION_DAYS = 90;
5
6
  /** Longest session id or tool name kept; the hook payload is not trusted to be short. */
@@ -10,7 +11,7 @@ export function recordFailure(db, event) {
10
11
  const now = new Date(event.now ?? Date.now()).toISOString();
11
12
  db.prepare(`INSERT INTO failure_log (ts, tenant_id, session_id, tool, outcome, skip_rule, sig_hash, detail_hash, owner_subject, origin_project, request_id)
12
13
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(now, event.tenantId, event.sessionId?.slice(0, MAX_FIELD) ?? null, event.tool?.slice(0, MAX_FIELD) ?? null, event.outcome, event.rule ?? null, event.sigHash ?? null, event.detailHash ?? null, event.ownerSubject ?? null, event.originProject ?? null, event.requestId ?? null);
13
- const cutoff = new Date(Date.parse(now) - FAILURE_LOG_RETENTION_DAYS * 86_400_000).toISOString();
14
+ const cutoff = new Date(Date.parse(now) - FAILURE_LOG_RETENTION_DAYS * DAY_MS).toISOString();
14
15
  db.prepare(`DELETE FROM failure_log WHERE ts < ?`).run(cutoff);
15
16
  }
16
17
  /** The outcome logged for a caller's request id, or null, so a retried send finds the first one; another session's id is a ConflictError. */
@@ -49,6 +50,12 @@ export function failuresBySession(db, tenantId, sinceIso) {
49
50
  }
50
51
  return [...bySession.values()];
51
52
  }
53
+ /** Failed tool calls logged since `sinceIso`, in every tenant; throws when the table is missing. */
54
+ export function countFailuresSince(db, sinceIso) {
55
+ // SAFETY: COUNT aggregate row.
56
+ const row = db.prepare(`SELECT COUNT(*) AS n FROM failure_log WHERE ts >= ?`).get(sinceIso);
57
+ return Number(row?.n ?? 0);
58
+ }
52
59
  /** Sum the failure log for one tenant since `sinceIso`. */
53
60
  export function summarizeFailures(db, tenantId, sinceIso) {
54
61
  // SAFETY: the SELECT names exactly these two columns, TEXT and an aggregate.
@@ -1,6 +1,6 @@
1
- import { type DatabaseSyncLike } from './db.js';
2
- import type { MemoryEntry } from './memory.js';
3
- import type { RerankStep } from './search/types.js';
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import type { MemoryEntry } from '../core/memory.js';
3
+ import type { RerankStep } from '../core/search-types.js';
4
4
  export type GoalStatus = 'active' | 'suspended' | 'completed';
5
5
  export type PolicyType = 'schema-fit-biased' | 'error-prioritized' | 'recency-first' | 'hybrid';
6
6
  export interface GoalRow {
@@ -40,8 +40,6 @@ export interface RetrievalPolicy {
40
40
  weightOutcome: number;
41
41
  errorPriority: number;
42
42
  }
43
- export declare const MAX_ACTIVE_GOAL_DEPTH = 3;
44
- export declare const MAX_FINAL_MULTIPLIER = 3;
45
43
  export declare function rowToGoal(row: GoalRow): Goal;
46
44
  export interface PushGoalOpts {
47
45
  sessionId: string;
@@ -59,19 +57,6 @@ export interface PushGoalOpts {
59
57
  };
60
58
  }
61
59
  export declare function pushGoal(hippoRoot: string, opts: PushGoalOpts): Goal;
62
- /**
63
- * Depth-cap enforcer shared by pushGoalWithDb and resumeGoal.
64
- * If the (tenant, session) has >= MAX_ACTIVE_GOAL_DEPTH active goals,
65
- * suspend the oldest `overflow` ones.
66
- *
67
- * **Precondition: caller MUST already be inside a `BEGIN IMMEDIATE`
68
- * transaction.** Helper does not open or commit -- name reflects this so it
69
- * is impossible to misread the contract at a call site. Both existing call
70
- * sites (pushGoalWithDb, resumeGoal) wrap in `BEGIN IMMEDIATE` already.
71
- *
72
- * @internal Internal goal-stack invariant. Subject to change.
73
- */
74
- export declare function enforceDepthCapWithinTx(db: DatabaseSyncLike, tenantId: string, sessionId: string): void;
75
60
  export declare function pushGoalWithDb(db: DatabaseSyncLike, opts: PushGoalOpts): Goal;
76
61
  export interface GetActiveGoalsOpts {
77
62
  sessionId: string;
@@ -87,7 +72,6 @@ export interface ActiveGoals {
87
72
  export declare function activeGoalsWithPolicies(hippoRoot: string, opts: GetActiveGoalsOpts): ActiveGoals;
88
73
  /** Every goal of a (tenant, session), whatever its status, oldest first. */
89
74
  export declare function getSessionGoals(hippoRoot: string, opts: GetActiveGoalsOpts): Goal[];
90
- export declare function getActiveGoalsWithDb(db: DatabaseSyncLike, opts: GetActiveGoalsOpts): Goal[];
91
75
  /** One `goal_recall_log` row: a boosted local memory recalled while its goal was active. */
92
76
  export interface GoalRecallLogRow {
93
77
  goalId: string;
@@ -97,7 +81,7 @@ export interface GoalRecallLogRow {
97
81
  recalledAt: string;
98
82
  score: number;
99
83
  }
100
- /** Options shared by {@link computeGoalStackBoost} and {@link boostByGoals}. */
84
+ /** Options of {@link boostByGoals}. */
101
85
  export interface GoalStackBoostOpts {
102
86
  sessionId: string;
103
87
  tenantId: string;
@@ -114,35 +98,11 @@ export interface GoalStackBoost<R> {
114
98
  results: R[];
115
99
  log: GoalRecallLogRow[];
116
100
  }
117
- export declare function loadGoalPolicies(db: DatabaseSyncLike, active: readonly Goal[]): Map<string, RetrievalPolicy>;
118
101
  /** The rows whose memory lives in this store: goal_recall_log.memory_id references memories, so a global row would fail
119
102
  * the insert. A global result keeps its boost; it only earns no log row, so no outcome propagation. */
120
103
  export declare function localGoalRecallRows(db: DatabaseSyncLike, rows: readonly GoalRecallLogRow[]): GoalRecallLogRow[];
121
- /**
122
- * dlPFC goal-stack boost. Applies the multi-goal boost to entry-backed scored
123
- * rows when (tenant, session) has active goals and returns the log rows to
124
- * write, without writing them; {@link writeGoalRecallLog} persists them.
125
- *
126
- * Caller responsibilities:
127
- * - Do NOT call when an explicit `goalTag` is set (caller's gate)
128
- * - Pass entry-backed rows (with `entry.tags`, `entry.id`, optional
129
- * `entry.schema_fit`)
130
- * - Manage the db handle lifecycle (helper neither opens nor closes)
131
- * - Recompute `tokens` after if returned rows are projected to a budgeted
132
- * shape
133
- *
134
- * Log rows cover the top `limit` boosted rows that live in this store's
135
- * `memories` table (global-only ids are skipped to keep the FK on
136
- * goal_recall_log.memory_id valid).
137
- *
138
- * @internal Recall ranking helper. Subject to change.
139
- */
140
- export declare function computeGoalStackBoost<R extends {
141
- entry: MemoryEntry;
142
- score: number;
143
- }>(db: DatabaseSyncLike, results: R[], opts: GoalStackBoostOpts): GoalStackBoost<R>;
144
- /** {@link computeGoalStackBoost} over goals already read, touching no store. Its log keeps rows whose memory is global,
145
- * since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
104
+ /** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
105
+ * `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
146
106
  export declare function boostByGoals<R extends {
147
107
  entry: MemoryEntry;
148
108
  score: number;
@@ -1,8 +1,9 @@
1
- // src/goals.ts
1
+ // src/store/goals.ts
2
2
  import { randomUUID } from 'node:crypto';
3
- import { openHippoDb, closeHippoDb } from './db.js';
4
- export const MAX_ACTIVE_GOAL_DEPTH = 3;
5
- export const MAX_FINAL_MULTIPLIER = 3.0;
3
+ import { openHippoDb, closeHippoDb, withWriteScope } from '../db/index.js';
4
+ import { compareScoresDesc } from '../core/compare.js';
5
+ const MAX_ACTIVE_GOAL_DEPTH = 3;
6
+ const MAX_FINAL_MULTIPLIER = 3.0;
6
7
  export function rowToGoal(row) {
7
8
  return {
8
9
  id: row.id,
@@ -40,7 +41,7 @@ export function pushGoal(hippoRoot, opts) {
40
41
  *
41
42
  * @internal Internal goal-stack invariant. Subject to change.
42
43
  */
43
- export function enforceDepthCapWithinTx(db, tenantId, sessionId) {
44
+ function enforceDepthCapWithinTx(db, tenantId, sessionId) {
44
45
  // SAFETY: the row comes from the SELECT above, which projects exactly one
45
46
  // column, `c`, as a COUNT(*).
46
47
  const activeCount = db.prepare(`
@@ -66,21 +67,10 @@ export function pushGoalWithDb(db, opts) {
66
67
  const id = `g_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
67
68
  const createdAt = new Date().toISOString();
68
69
  let policyId = null;
69
- db.exec('BEGIN IMMEDIATE');
70
- try {
70
+ withWriteScope(db, 'push_goal', () => {
71
71
  // Depth cap: count active for (tenant, session); suspend oldest if at cap.
72
72
  enforceDepthCapWithinTx(db, opts.tenantId, opts.sessionId);
73
- if (opts.parentGoalId) {
74
- // SAFETY: the row comes from the SELECT above, which projects exactly
75
- // the tenant_id and session_id columns of goal_stack.
76
- const parent = db.prepare(`SELECT tenant_id, session_id FROM goal_stack WHERE id = ?`).get(opts.parentGoalId);
77
- if (!parent) {
78
- throw new Error(`parent goal not found: ${opts.parentGoalId}`);
79
- }
80
- if (parent.tenant_id !== opts.tenantId || parent.session_id !== opts.sessionId) {
81
- throw new Error(`parent goal ${opts.parentGoalId} belongs to a different (tenant, session)`);
82
- }
83
- }
73
+ assertParentInSession(db, opts);
84
74
  // Parent goal_stack row first (FK target).
85
75
  db.prepare(`
86
76
  INSERT INTO goal_stack
@@ -90,23 +80,9 @@ export function pushGoalWithDb(db, opts) {
90
80
  `).run(id, opts.sessionId, opts.tenantId, opts.goalName, opts.level ?? 0, opts.parentGoalId ?? null, opts.successCondition ?? null, createdAt);
91
81
  // Optional policy row, then point goal_stack.retrieval_policy_id at it.
92
82
  if (opts.policy) {
93
- policyId = `rp_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
94
- db.prepare(`
95
- INSERT INTO retrieval_policy
96
- (id, goal_id, policy_type, weight_schema_fit, weight_recency, weight_outcome, error_priority)
97
- VALUES (?, ?, ?, ?, ?, ?, ?)
98
- `).run(policyId, id, opts.policy.policyType, opts.policy.weightSchemaFit ?? 1.0, opts.policy.weightRecency ?? 1.0, opts.policy.weightOutcome ?? 1.0, opts.policy.errorPriority ?? 1.0);
99
- db.prepare(`UPDATE goal_stack SET retrieval_policy_id = ? WHERE id = ?`).run(policyId, id);
100
- }
101
- db.exec('COMMIT');
102
- }
103
- catch (err) {
104
- try {
105
- db.exec('ROLLBACK');
83
+ policyId = insertRetrievalPolicy(db, id, opts.policy);
106
84
  }
107
- catch { /* already rolled back; keep the original error */ }
108
- throw err;
109
- }
85
+ });
110
86
  return {
111
87
  id,
112
88
  sessionId: opts.sessionId,
@@ -120,6 +96,30 @@ export function pushGoalWithDb(db, opts) {
120
96
  createdAt,
121
97
  };
122
98
  }
99
+ function assertParentInSession(db, opts) {
100
+ if (!opts.parentGoalId)
101
+ return;
102
+ // SAFETY: the row comes from the SELECT above, which projects exactly
103
+ // the tenant_id and session_id columns of goal_stack.
104
+ const parent = db.prepare(`SELECT tenant_id, session_id FROM goal_stack WHERE id = ?`).get(opts.parentGoalId);
105
+ if (!parent) {
106
+ throw new Error(`parent goal not found: ${opts.parentGoalId}`);
107
+ }
108
+ if (parent.tenant_id !== opts.tenantId || parent.session_id !== opts.sessionId) {
109
+ throw new Error(`parent goal ${opts.parentGoalId} belongs to a different (tenant, session)`);
110
+ }
111
+ }
112
+ /** Insert the policy row, then point goal_stack.retrieval_policy_id at it; returns the new policy id. */
113
+ function insertRetrievalPolicy(db, goalId, policy) {
114
+ const policyId = `rp_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
115
+ db.prepare(`
116
+ INSERT INTO retrieval_policy
117
+ (id, goal_id, policy_type, weight_schema_fit, weight_recency, weight_outcome, error_priority)
118
+ VALUES (?, ?, ?, ?, ?, ?, ?)
119
+ `).run(policyId, goalId, policy.policyType, policy.weightSchemaFit ?? 1.0, policy.weightRecency ?? 1.0, policy.weightOutcome ?? 1.0, policy.errorPriority ?? 1.0);
120
+ db.prepare(`UPDATE goal_stack SET retrieval_policy_id = ? WHERE id = ?`).run(policyId, goalId);
121
+ return policyId;
122
+ }
123
123
  export function getActiveGoals(hippoRoot, opts) {
124
124
  const db = openHippoDb(hippoRoot);
125
125
  try {
@@ -158,7 +158,7 @@ export function getSessionGoals(hippoRoot, opts) {
158
158
  closeHippoDb(db);
159
159
  }
160
160
  }
161
- export function getActiveGoalsWithDb(db, opts) {
161
+ function getActiveGoalsWithDb(db, opts) {
162
162
  // SAFETY: rows come from the SELECT above, which projects exactly
163
163
  // GoalRow's columns (in the same order goal_stack defines them).
164
164
  const rows = db.prepare(`
@@ -174,7 +174,7 @@ export function getActiveGoalsWithDb(db, opts) {
174
174
  // can compose onto the base goal-tag boost. Composed result is hard-capped
175
175
  // at MAX_FINAL_MULTIPLIER (3.0x) BEFORE applying to score -- even an
176
176
  // `errorPriority: 9.0` policy cannot exceed 3.0x.
177
- export function loadGoalPolicies(db, active) {
177
+ function loadGoalPolicies(db, active) {
178
178
  const policiesByGoalId = new Map();
179
179
  for (const g of active) {
180
180
  if (!g.retrievalPolicyId)
@@ -259,34 +259,8 @@ export function localGoalRecallRows(db, rows) {
259
259
  const localIds = new Set(local.map((r) => r.id));
260
260
  return rows.filter((r) => localIds.has(r.memoryId));
261
261
  }
262
- /**
263
- * dlPFC goal-stack boost. Applies the multi-goal boost to entry-backed scored
264
- * rows when (tenant, session) has active goals and returns the log rows to
265
- * write, without writing them; {@link writeGoalRecallLog} persists them.
266
- *
267
- * Caller responsibilities:
268
- * - Do NOT call when an explicit `goalTag` is set (caller's gate)
269
- * - Pass entry-backed rows (with `entry.tags`, `entry.id`, optional
270
- * `entry.schema_fit`)
271
- * - Manage the db handle lifecycle (helper neither opens nor closes)
272
- * - Recompute `tokens` after if returned rows are projected to a budgeted
273
- * shape
274
- *
275
- * Log rows cover the top `limit` boosted rows that live in this store's
276
- * `memories` table (global-only ids are skipped to keep the FK on
277
- * goal_recall_log.memory_id valid).
278
- *
279
- * @internal Recall ranking helper. Subject to change.
280
- */
281
- export function computeGoalStackBoost(db, results, opts) {
282
- const goals = getActiveGoalsWithDb(db, { sessionId: opts.sessionId, tenantId: opts.tenantId });
283
- if (goals.length === 0)
284
- return { results, log: [] };
285
- const boost = boostByGoals(results, { goals, policies: loadGoalPolicies(db, goals) }, opts);
286
- return { results: boost.results, log: localGoalRecallRows(db, boost.log) };
287
- }
288
- /** {@link computeGoalStackBoost} over goals already read, touching no store. Its log keeps rows whose memory is global,
289
- * since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
262
+ /** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
263
+ * `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
290
264
  export function boostByGoals(results, active, opts) {
291
265
  const { trace } = opts;
292
266
  if (active.goals.length === 0)
@@ -325,7 +299,7 @@ export function boostByGoals(results, active, opts) {
325
299
  // tail -- a re-sort of an already deterministically-ordered ranking
326
300
  // inherits its determinism via sort stability, and ties preserve the
327
301
  // prior (meaningful) rank instead of reordering by content.
328
- .sort((a, b) => b.score - a.score);
302
+ .sort((a, b) => compareScoresDesc(a.score, b.score));
329
303
  return { results: boosted, log: buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) };
330
304
  }
331
305
  /**
@@ -353,18 +327,14 @@ export function completeGoal(hippoRoot, goalId, opts) {
353
327
  try {
354
328
  const completedAt = new Date().toISOString();
355
329
  const score = opts.outcomeScore ?? null;
356
- db.exec('BEGIN IMMEDIATE');
357
- try {
330
+ withWriteScope(db, 'complete_goal', () => {
358
331
  // SAFETY: the row comes from the SELECT above, which projects exactly
359
332
  // the created_at and status columns of goal_stack.
360
333
  const goalRow = db.prepare(`SELECT created_at, status FROM goal_stack WHERE id = ?`).get(goalId);
361
- if (!goalRow) {
362
- db.exec('COMMIT');
334
+ if (!goalRow)
363
335
  return;
364
- }
365
336
  if (goalRow.status === 'completed') {
366
337
  // Already completed -- second call is a no-op for idempotency.
367
- db.exec('COMMIT');
368
338
  return;
369
339
  }
370
340
  db.prepare(`
@@ -394,15 +364,7 @@ export function completeGoal(hippoRoot, goalId, opts) {
394
364
  `).run(multiplier, goalId, goalRow.created_at, completedAt);
395
365
  }
396
366
  }
397
- db.exec('COMMIT');
398
- }
399
- catch (err) {
400
- try {
401
- db.exec('ROLLBACK');
402
- }
403
- catch { /* already rolled back; keep the original error */ }
404
- throw err;
405
- }
367
+ });
406
368
  }
407
369
  finally {
408
370
  closeHippoDb(db);
@@ -420,26 +382,15 @@ export function suspendGoal(hippoRoot, goalId) {
420
382
  export function resumeGoal(hippoRoot, goalId) {
421
383
  const db = openHippoDb(hippoRoot);
422
384
  try {
423
- db.exec('BEGIN IMMEDIATE');
424
- try {
385
+ withWriteScope(db, 'resume_goal', () => {
425
386
  // SAFETY: the row comes from the SELECT above, which projects exactly
426
387
  // the session_id, tenant_id, and status columns of goal_stack.
427
388
  const row = db.prepare(`SELECT session_id, tenant_id, status FROM goal_stack WHERE id = ?`).get(goalId);
428
- if (!row || row.status !== 'suspended') {
429
- db.exec('COMMIT');
389
+ if (!row || row.status !== 'suspended')
430
390
  return;
431
- }
432
391
  enforceDepthCapWithinTx(db, row.tenant_id, row.session_id);
433
392
  db.prepare(`UPDATE goal_stack SET status = 'active' WHERE id = ?`).run(goalId);
434
- db.exec('COMMIT');
435
- }
436
- catch (err) {
437
- try {
438
- db.exec('ROLLBACK');
439
- }
440
- catch { /* already rolled back; keep the original error */ }
441
- throw err;
442
- }
393
+ });
443
394
  }
444
395
  finally {
445
396
  closeHippoDb(db);
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Fail-soft producer hook: mark a tenant dirty for graph re-extraction by
3
+ * enqueuing its consolidated mirror memory. NEVER throws into the caller — a
4
+ * graph-dirty signal failing must not abort a core object write. Graph staleness is
5
+ * recoverable (next sleep / manual `graph extract`); a broken `hippo decide` is
6
+ * not. Called POST-COMMIT from the graph-source save/close mutations of
7
+ * decision, policy, customer_note and project_brief. A null memoryId (a
8
+ * forgotten mirror) is a no-op.
9
+ */
10
+ export declare function markGraphDirty(hippoRoot: string, tenantId: string, memoryId: string | null): void;
11
+ /**
12
+ * Mark every pending queue item for a tenant with `id <= maxId` processed, in
13
+ * one UPDATE. Status/processed_at only, so the consolidated-source guard trigger
14
+ * is not involved. Returns the count marked.
15
+ * The `<= maxId` watermark excludes items enqueued after the drain snapshot.
16
+ */
17
+ export declare function markPendingProcessedUpTo(hippoRoot: string, tenantId: string, maxId: number): number;
18
+ /**
19
+ * The dirty tenants awaiting graph re-extraction, each with the MAX pending
20
+ * queue id at read time (a watermark). The sleep drain rebuilds each tenant's
21
+ * graph, then marks only items at or below the watermark processed, so items
22
+ * enqueued DURING the rebuild stay pending for the next sleep (no lost-update
23
+ * race). Host-wide read (the queue is per-tenant but sleep is cross-tenant).
24
+ */
25
+ export declare function loadPendingExtractionTenants(hippoRoot: string): {
26
+ tenantId: string;
27
+ maxPendingId: number;
28
+ }[];
29
+ //# sourceMappingURL=graph-queue.d.ts.map