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,10 +1,11 @@
1
- import { closeHippoDb, setMeta, isSqliteBusy, pruneConsolidationRuns, getMeta } from '../db.js';
2
- import { RejectedValueError } from '../rejection.js';
3
- import { log } from '../log.js';
1
+ import { closeHippoDb, withWriteScope, setMeta, isSqliteBusy, pruneConsolidationRuns, getMeta } from '../db/index.js';
2
+ import { RejectedValueError } from './rejection.js';
3
+ import { log } from '../util/log.js';
4
4
  import { audit } from './audit-event.js';
5
5
  import { stampOriginProjectForImport, upsertEntryRow } from './entry-row.js';
6
- import { buildIndexFromDb, syncMirrorFiles, writeIndexMirror, writeStatsMirror, buildStatsFromDb } from './mirrors.js';
6
+ import { buildIndexFromDb, readLastRecall, syncMirrorFiles, writeIndexMirror, writeStatsMirror, buildStatsFromDb } from './mirrors.js';
7
7
  import { openStore, loadLegacyEntriesFromMarkdown } from './open.js';
8
+ import { DAY_MS } from '../util/time.js';
8
9
  /** Load the derived index from SQLite. Read-only: index.json is only ever written by `rebuildIndex`. */
9
10
  export function loadIndex(hippoRoot) {
10
11
  const db = openStore(hippoRoot);
@@ -15,6 +16,16 @@ export function loadIndex(hippoRoot) {
15
16
  closeHippoDb(db);
16
17
  }
17
18
  }
19
+ /** The last recall's ids and its trace alone, for a caller that needs no index entry. */
20
+ export function loadLastRecall(hippoRoot) {
21
+ const db = openStore(hippoRoot);
22
+ try {
23
+ return readLastRecall(db);
24
+ }
25
+ finally {
26
+ closeHippoDb(db);
27
+ }
28
+ }
18
29
  /**
19
30
  * Persist mutable index metadata. Entry rows themselves are derived from SQLite.
20
31
  *
@@ -24,19 +35,10 @@ export function loadIndex(hippoRoot) {
24
35
  export function saveIndex(hippoRoot, index) {
25
36
  const db = openStore(hippoRoot);
26
37
  try {
27
- db.exec('BEGIN IMMEDIATE');
28
- try {
38
+ withWriteScope(db, 'save_index', () => {
29
39
  setMeta(db, 'last_retrieval_ids', JSON.stringify(index.last_retrieval_ids ?? []));
30
40
  setMeta(db, 'last_trace_id', index.last_trace_id ?? '');
31
- db.exec('COMMIT');
32
- }
33
- catch (error) {
34
- try {
35
- db.exec('ROLLBACK');
36
- }
37
- catch { /* already rolled back; keep the original error */ }
38
- throw error;
39
- }
41
+ });
40
42
  }
41
43
  finally {
42
44
  closeHippoDb(db);
@@ -52,8 +54,7 @@ export function rebuildIndex(hippoRoot) {
52
54
  const existingIds = new Set(db.prepare(`SELECT id FROM memories`).all().map((row) => row.id));
53
55
  const legacyEntries = loadLegacyEntriesFromMarkdown(hippoRoot).filter((entry) => !existingIds.has(entry.id));
54
56
  if (legacyEntries.length > 0) {
55
- db.exec('BEGIN IMMEDIATE');
56
- try {
57
+ withWriteScope(db, 'rebuild_index', () => {
57
58
  // Guard with per-row skip, like bootstrapLegacyStore: a stale markdown mirror could resurrect a
58
59
  // rejected value here. Refusal audit is written inline because nothing rolls back on a skip.
59
60
  let rejectedCount = 0;
@@ -66,7 +67,7 @@ export function rebuildIndex(hippoRoot) {
66
67
  catch (err) {
67
68
  if (err instanceof RejectedValueError) {
68
69
  rejectedCount++;
69
- audit(db, 'reject_refusal', err.entryId, { digest: err.digest, reason: err.reason }, 'cli', err.tenantId);
70
+ audit(db, 'reject_refusal', { targetId: err.entryId, metadata: { digest: err.digest, reason: err.reason }, actor: 'cli', tenantId: err.tenantId });
70
71
  continue;
71
72
  }
72
73
  throw err;
@@ -75,15 +76,7 @@ export function rebuildIndex(hippoRoot) {
75
76
  if (rejectedCount > 0) {
76
77
  log.warn(`rebuildIndex: skipped ${rejectedCount} rejected value(s) found in legacy mirrors`);
77
78
  }
78
- db.exec('COMMIT');
79
- }
80
- catch (err) {
81
- try {
82
- db.exec('ROLLBACK');
83
- }
84
- catch { /* ignore if no active txn */ }
85
- throw err;
86
- }
79
+ });
87
80
  }
88
81
  syncMirrorFiles(hippoRoot, db);
89
82
  const index = buildIndexFromDb(db);
@@ -97,30 +90,34 @@ export function rebuildIndex(hippoRoot) {
97
90
  export function updateStats(hippoRoot, delta) {
98
91
  const db = openStore(hippoRoot);
99
92
  try {
100
- // One atomic statement per counter, and only for counters the caller
101
- // named: the read-modify-write this replaces both lost increments to a
102
- // concurrent writer and stamped stale values over the untouched two.
103
- const increments = [
104
- ['total_remembered', delta.remembered ?? 0],
105
- ['total_recalled', delta.recalled ?? 0],
106
- ['total_forgotten', delta.forgotten ?? 0],
107
- ];
108
- for (const [key, amount] of increments) {
109
- if (amount === 0)
110
- continue;
111
- // Both binds are the same string: node:sqlite binds a JS number as REAL,
112
- // which would store "1.0" into this TEXT column instead of "1".
113
- db.prepare(`
114
- INSERT INTO meta(key, value) VALUES(?, ?)
115
- ON CONFLICT(key) DO UPDATE SET value = CAST(meta.value AS INTEGER) + CAST(? AS INTEGER)
116
- `).run(key, String(amount), String(amount));
117
- }
118
- writeStatsMirror(hippoRoot, buildStatsFromDb(db));
93
+ updateStatsOn(db, hippoRoot, delta);
119
94
  }
120
95
  finally {
121
96
  closeHippoDb(db);
122
97
  }
123
98
  }
99
+ /** updateStats on the caller's open store, so a loop of writes opens the store once. */
100
+ export function updateStatsOn(db, hippoRoot, delta) {
101
+ // One atomic statement per counter, and only for counters the caller
102
+ // named: the read-modify-write this replaces both lost increments to a
103
+ // concurrent writer and stamped stale values over the untouched two.
104
+ const increments = [
105
+ ['total_remembered', delta.remembered ?? 0],
106
+ ['total_recalled', delta.recalled ?? 0],
107
+ ['total_forgotten', delta.forgotten ?? 0],
108
+ ];
109
+ for (const [key, amount] of increments) {
110
+ if (amount === 0)
111
+ continue;
112
+ // Both binds are the same string: node:sqlite binds a JS number as REAL,
113
+ // which would store "1.0" into this TEXT column instead of "1".
114
+ db.prepare(`
115
+ INSERT INTO meta(key, value) VALUES(?, ?)
116
+ ON CONFLICT(key) DO UPDATE SET value = CAST(meta.value AS INTEGER) + CAST(? AS INTEGER)
117
+ `).run(key, String(amount), String(amount));
118
+ }
119
+ writeStatsMirror(hippoRoot, buildStatsFromDb(db));
120
+ }
124
121
  export function updateStatsUnlessBusy(hippoRoot, delta, committed) {
125
122
  try {
126
123
  updateStats(hippoRoot, delta);
@@ -155,7 +152,7 @@ export function appendConsolidationRun(hippoRoot, run) {
155
152
  export function countCreatedSinceLastSleep(hippoRoot, tenantId, now = new Date()) {
156
153
  const db = openStore(hippoRoot);
157
154
  try {
158
- const dayAgo = new Date(now.getTime() - 86_400_000).toISOString();
155
+ const dayAgo = new Date(now.getTime() - DAY_MS).toISOString();
159
156
  const row = db.prepare(`SELECT COUNT(*) AS n FROM memories WHERE tenant_id = ?
160
157
  AND created > MAX(?, COALESCE((SELECT MAX(timestamp) FROM consolidation_runs), ''))`).get(tenantId, dayAgo);
161
158
  return row.n;
@@ -164,6 +161,12 @@ export function countCreatedSinceLastSleep(hippoRoot, tenantId, now = new Date()
164
161
  closeHippoDb(db);
165
162
  }
166
163
  }
164
+ /** Timestamp of the latest consolidation run, or undefined when there is none. */
165
+ export function lastConsolidationAt(db) {
166
+ // SAFETY: row's shape matches the single `timestamp` column named in the SELECT.
167
+ const row = db.prepare(`SELECT timestamp FROM consolidation_runs ORDER BY timestamp DESC, id DESC LIMIT 1`).get();
168
+ return row?.timestamp;
169
+ }
167
170
  /**
168
171
  * Load the session decay context from the store.
169
172
  * Uses consolidation_runs timestamps to compute session intervals.
@@ -185,7 +188,7 @@ export function loadSessionDecayContext(hippoRoot) {
185
188
  totalInterval += timestamps[i] - timestamps[i - 1];
186
189
  }
187
190
  const avgMs = totalInterval / (timestamps.length - 1);
188
- const avgDays = avgMs / (1000 * 60 * 60 * 24);
191
+ const avgDays = avgMs / DAY_MS;
189
192
  return { sleepCount, avgSessionIntervalDays: Math.max(0, avgDays) };
190
193
  }
191
194
  finally {
@@ -0,0 +1,4 @@
1
+ export type { AmbientCandidateRequest, ContextReads, EntryRemoval, EntryTarget, EntryWrite, EntryWrites, HippoStore, KeyAudit, KeyListQuery, KeyMint, KeyRevoke, KeyWrites, OutcomeWrite, RawArchive, RecallSearchArgs, RecallWrites, SelfKeyMint, StoreGroup, StoreGroups, SupersedeWrite, VectorBackfillQuery, VectorReads, VectorRowWrite, VectorWrite, VectorWriteResult, VectorWrites, } from './port.js';
2
+ export { hasGroup, requireGroup } from './port.js';
3
+ export * from './sqlite/store.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { hasGroup, requireGroup } from './port.js';
2
+ export * from './sqlite/store.js';
3
+ //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- import { type DatabaseSyncLike } from '../db.js';
2
- import type { KeyRevoke } from '../store-port.js';
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import type { KeyRevoke } from './port.js';
3
3
  /** The revoke and its audit row commit together, so a failed audit write leaves the key live and the caller sees the error. */
4
4
  export declare function revokeKeyAt(db: DatabaseSyncLike, revoke: KeyRevoke): string;
5
5
  export declare function auditHighIdAt(db: DatabaseSyncLike): number;
@@ -1,8 +1,8 @@
1
1
  // hippo.db's half of the KeyAudit store group.
2
- import { NotFoundError } from '../api-errors.js';
3
- import { appendAuditEvent } from '../audit.js';
4
- import { revokeApiKey } from '../auth.js';
5
- import { withWriteScope } from '../db.js';
2
+ import { NotFoundError } from '../core/api-errors.js';
3
+ import { appendAuditEvent } from './audit.js';
4
+ import { revokeApiKey } from './auth.js';
5
+ import { withWriteScope } from '../db/index.js';
6
6
  import { selectApiKeyOwner } from './tenant-lookup.js';
7
7
  /** The revoke and its audit row commit together, so a failed audit write leaves the key live and the caller sees the error. */
8
8
  export function revokeKeyAt(db, revoke) {
@@ -1,9 +1,16 @@
1
- import { type AppendAuditOpts } from '../audit.js';
2
- import { type DatabaseSyncLike } from '../db.js';
3
- import type { KeyMint, SelfKeyMint } from '../store-port.js';
4
- /** The auth_create row a mint writes; the plaintext never reaches it. */
5
- export declare function createAuditOf({ key, actor, metadata }: KeyMint): AppendAuditOpts;
1
+ import { type DatabaseSyncLike } from '../db/index.js';
2
+ import type { KeyMint, SelfKeyMint } from './port.js';
6
3
  export declare function createKeyAt(db: DatabaseSyncLike, mint: KeyMint): void;
7
4
  /** IMMEDIATE takes the write lock before the count, so two mints for one owner cannot both see room under the cap. */
8
5
  export declare function createSelfKeyAt(db: DatabaseSyncLike, mint: SelfKeyMint): string[];
6
+ /** One grant or ungrant of a restricted scope on a key of `tenantId`, and the actor of its audit row. */
7
+ export interface ScopeGrantChange {
8
+ readonly tenantId: string;
9
+ readonly keyId: string;
10
+ readonly scope: string;
11
+ readonly op: 'auth_grant' | 'auth_ungrant';
12
+ readonly actor: string;
13
+ }
14
+ /** The key is checked under the write lock, and the change and its audit row commit together, so a failed audit write leaves the grants as they were. */
15
+ export declare function changeScopeGrantAt(db: DatabaseSyncLike, { tenantId, keyId, scope, op, actor }: ScopeGrantChange): void;
9
16
  //# sourceMappingURL=key-writes.d.ts.map
@@ -1,9 +1,12 @@
1
1
  // hippo.db's half of the KeyWrites store group.
2
- import { appendAuditEvent } from '../audit.js';
3
- import { insertApiKey, listLiveOwnedKeyIds, revokeApiKey } from '../auth.js';
4
- import { withWriteScope } from '../db.js';
2
+ import { BadRequestError, ConflictError, NotFoundError } from '../core/api-errors.js';
3
+ import { appendAuditEvent } from './audit.js';
4
+ import { grantScope, insertApiKey, listLiveOwnedKeyIds, revokeApiKey, ungrantScope } from './auth.js';
5
+ import { withWriteScope } from '../db/index.js';
6
+ import { isRestrictedScope } from './recall-scope.js';
7
+ import { selectApiKeyOwner } from './tenant-lookup.js';
5
8
  /** The auth_create row a mint writes; the plaintext never reaches it. */
6
- export function createAuditOf({ key, actor, metadata }) {
9
+ function createAuditOf({ key, actor, metadata }) {
7
10
  return { tenantId: key.tenantId, actor, op: 'auth_create', targetId: key.keyId, metadata };
8
11
  }
9
12
  export function createKeyAt(db, mint) {
@@ -27,4 +30,27 @@ export function createSelfKeyAt(db, mint) {
27
30
  return replaced;
28
31
  });
29
32
  }
33
+ /** The key is checked under the write lock, and the change and its audit row commit together, so a failed audit write leaves the grants as they were. */
34
+ export function changeScopeGrantAt(db, { tenantId, keyId, scope, op, actor }) {
35
+ withWriteScope(db, 'change_scope_grant', () => {
36
+ const row = selectApiKeyOwner(db, keyId);
37
+ if (!row || row.tenantId !== tenantId) {
38
+ throw new NotFoundError(`Unknown key_id: ${keyId}`);
39
+ }
40
+ if (op === 'auth_grant' && row.revokedAt) {
41
+ throw new ConflictError(`${keyId} is revoked; a grant on it would never apply`);
42
+ }
43
+ if (op === 'auth_grant' && /^personal:/i.test(scope)) {
44
+ throw new BadRequestError(`${scope} is a personal scope: only its owner reads it, and no grant can change that`);
45
+ }
46
+ if (!isRestrictedScope(scope)) {
47
+ throw new BadRequestError(`${scope} is not a restricted scope; it is already readable by default`);
48
+ }
49
+ if (op === 'auth_grant')
50
+ grantScope(db, keyId, scope);
51
+ else
52
+ ungrantScope(db, keyId, scope);
53
+ appendAuditEvent(db, { tenantId, actor, op, targetId: keyId, metadata: { scope } });
54
+ });
55
+ }
30
56
  //# sourceMappingURL=key-writes.js.map
@@ -0,0 +1,17 @@
1
+ import type { DeliveryEventInput } from './delivery-recorder.js';
2
+ import { type LastSent, type TokenSurface, type TokenUse } from './token-ledger.js';
3
+ /** Stores one delivery event and returns its id, or null when the write failed. */
4
+ export type DeliveryWrite = (input: DeliveryEventInput) => number | null;
5
+ /** The token rows of one turn and the delivery event that follows them. */
6
+ export interface LedgerTurn {
7
+ readonly uses: readonly TokenUse[];
8
+ /** Makes each row its own attempt: a failed one is reported here and the rest still run. Without it the first failure throws. */
9
+ readonly onRowError?: <E>(error: E) => void;
10
+ /** Runs after the rows with a writer on their connection, so the delivery event costs no second open. */
11
+ readonly delivery?: (write: DeliveryWrite) => void;
12
+ }
13
+ /** Books a turn's token rows, then its delivery event, on one connection. */
14
+ export declare function recordLedgerTurn(hippoRoot: string, turn: LedgerTurn): void;
15
+ /** What the session last sent on `surface`, or null, as lastSentState reads it. */
16
+ export declare function lastSentOnSurface(hippoRoot: string, tenantId: string, sessionId: string | null | undefined, surface: TokenSurface): LastSent | null;
17
+ //# sourceMappingURL=ledger-turn.d.ts.map
@@ -0,0 +1,27 @@
1
+ import { lastSentState, recordTokenUse } from './token-ledger.js';
2
+ import { onHandle } from './open.js';
3
+ import { writeDeliveryEventOnHandle } from './recall-trace.js';
4
+ /** Books a turn's token rows, then its delivery event, on one connection. */
5
+ export function recordLedgerTurn(hippoRoot, turn) {
6
+ const { onRowError } = turn;
7
+ onHandle(hippoRoot, (db) => {
8
+ for (const use of turn.uses) {
9
+ if (onRowError === undefined) {
10
+ recordTokenUse(db, use);
11
+ continue;
12
+ }
13
+ try {
14
+ recordTokenUse(db, use);
15
+ }
16
+ catch (error) {
17
+ onRowError(error);
18
+ }
19
+ }
20
+ turn.delivery?.((input) => writeDeliveryEventOnHandle(db, input));
21
+ });
22
+ }
23
+ /** What the session last sent on `surface`, or null, as lastSentState reads it. */
24
+ export function lastSentOnSurface(hippoRoot, tenantId, sessionId, surface) {
25
+ return onHandle(hippoRoot, (db) => lastSentState(db, tenantId, sessionId, surface));
26
+ }
27
+ //# sourceMappingURL=ledger-turn.js.map
@@ -1,4 +1,4 @@
1
- import { type MemoryEntry } from '../memory.js';
1
+ import { type MemoryEntry } from '../core/memory.js';
2
2
  /**
3
3
  * Serialize a MemoryEntry to markdown with YAML frontmatter.
4
4
  */
@@ -1,4 +1,5 @@
1
- import { dumpFrontmatter, parseFrontmatter } from '../yaml.js';
1
+ import { FALLBACK_HALF_LIFE_DAYS, DEFAULT_SCHEMA_FIT } from '../core/memory.js';
2
+ import { dumpFrontmatter, parseFrontmatter } from './yaml.js';
2
3
  /**
3
4
  * Serialize a MemoryEntry to markdown with YAML frontmatter.
4
5
  */
@@ -66,11 +67,11 @@ export function deserializeEntry(raw) {
66
67
  last_retrieved: String(data['last_retrieved'] ?? new Date().toISOString()),
67
68
  retrieval_count: Number(data['retrieval_count'] ?? 0),
68
69
  strength: Number(data['strength'] ?? 1.0),
69
- half_life_days: Number(data['half_life_days'] ?? 7),
70
+ half_life_days: Number(data['half_life_days'] ?? FALLBACK_HALF_LIFE_DAYS),
70
71
  layer: data['layer'],
71
72
  tags: normalizeStringArray(data['tags']),
72
73
  emotional_valence: data['emotional_valence'] ?? 'neutral',
73
- schema_fit: Number(data['schema_fit'] ?? 0.5),
74
+ schema_fit: Number(data['schema_fit'] ?? DEFAULT_SCHEMA_FIT),
74
75
  source: String(data['source'] ?? 'cli'),
75
76
  outcome_score: data['outcome_score'] === null || data['outcome_score'] === undefined ? null : Number(data['outcome_score']),
76
77
  outcome_positive: Number(data['outcome_positive'] ?? 0),
@@ -1,18 +1,14 @@
1
- import { Layer, type MemoryEntry } from '../memory.js';
2
- import { openHippoDb } from '../db.js';
1
+ import { Layer, type MemoryEntry } from '../core/memory.js';
2
+ import { openHippoDb } from '../db/index.js';
3
3
  import { type TaskSnapshot, type SessionEvent, type HippoIndex, type LegacyStats } from './rows.js';
4
4
  export declare function layerDir(root: string, layer: Layer): string;
5
+ /** Makes the mirror folders on a store's first open in this process; a writer makes its own folder if one goes missing later. */
5
6
  export declare function ensureMirrorDirectories(hippoRoot: string): void;
6
7
  export declare function writeActiveTaskMirror(hippoRoot: string, tenantId: string, snapshot: TaskSnapshot): void;
7
8
  export declare function removeActiveTaskMirror(hippoRoot: string, tenantId: string): void;
8
9
  export declare function writeRecentSessionMirror(hippoRoot: string, tenantId: string, events: SessionEvent[]): void;
9
10
  export declare function writeMarkdownMirror(hippoRoot: string, entry: MemoryEntry): void;
10
11
  export declare function removeEntryMirrors(hippoRoot: string, id: string): void;
11
- /**
12
- * Mirror paths for `id` still on disk, walked like `removeEntryMirrors`, so a failed purge
13
- * with no reaper to retry it can name the stuck file.
14
- */
15
- export declare function getExistingEntryMirrorPaths(hippoRoot: string, id: string): string[];
16
12
  /**
17
13
  * Best-effort mirror purge. Retries the unlink once (most failures are transient locks); the reaper only
18
14
  * scans `raw_archive`, so a non-raw id's second failure logs the leftover path(s) to delete by hand.
@@ -23,6 +19,8 @@ export declare function purgeMirrorBestEffort(hippoRoot: string, id: string, isR
23
19
  /** Derive the current `HippoIndex` from SQLite. Exported for `rebuildIndex`
24
20
  * (the only index.json writer) and the longmemeval benchmark. */
25
21
  export declare function buildIndexFromDb(db: ReturnType<typeof openHippoDb>): HippoIndex;
22
+ /** The last recall's ids and its trace, the two meta keys saveIndex writes together. */
23
+ export declare function readLastRecall(db: ReturnType<typeof openHippoDb>): Pick<HippoIndex, 'last_retrieval_ids' | 'last_trace_id'>;
26
24
  export declare function buildStatsFromDb(db: ReturnType<typeof openHippoDb>): LegacyStats;
27
25
  /** Write the `index.json` mirror file for an already-derived index. Exported for
28
26
  * `rebuildIndex` (the only index.json writer) and the longmemeval benchmark. */
@@ -1,25 +1,25 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { Layer } from '../memory.js';
4
- import { dumpFrontmatter } from '../yaml.js';
5
- import { getMeta } from '../db.js';
6
- import { log } from '../log.js';
3
+ import { Layer } from '../core/memory.js';
4
+ import { dumpFrontmatter } from './yaml.js';
5
+ import { getMeta } from '../db/index.js';
6
+ import { oncePerStore } from '../db/connect.js';
7
+ import { errorMessage, log } from '../util/log.js';
7
8
  import { parseJsonArray, INDEX_VERSION, parseLastTraceId, MEMORY_SELECT_COLUMNS, rowToEntry, rowToMemoryConflict, } from './rows.js';
8
9
  import { serializeEntry } from './markdown.js';
10
+ const SCORE_DECIMALS = 3;
9
11
  export function layerDir(root, layer) {
10
12
  return path.join(root, layer);
11
13
  }
14
+ // Owner-only wherever a mirror folder is made, at open or by a writer that finds it gone.
15
+ const MIRROR_FOLDER = { recursive: true, mode: 0o700 };
16
+ /** Makes the mirror folders on a store's first open in this process; a writer makes its own folder if one goes missing later. */
12
17
  export function ensureMirrorDirectories(hippoRoot) {
13
- const dirs = [
14
- hippoRoot,
15
- path.join(hippoRoot, 'buffer'),
16
- path.join(hippoRoot, 'episodic'),
17
- path.join(hippoRoot, 'semantic'),
18
- path.join(hippoRoot, 'conflicts'),
19
- ];
20
- for (const dir of dirs) {
21
- fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
22
- }
18
+ oncePerStore(hippoRoot, 'mirror-folders', () => {
19
+ for (const sub of ['buffer', 'episodic', 'semantic', 'conflicts']) {
20
+ fs.mkdirSync(path.join(hippoRoot, sub), MIRROR_FOLDER);
21
+ }
22
+ });
23
23
  }
24
24
  // Tenant-scoped mirror file paths. The single-tenant 'default' deployment
25
25
  // keeps the original `active-task.md` / `recent-session.md` filenames for
@@ -61,7 +61,7 @@ export function writeActiveTaskMirror(hippoRoot, tenantId, snapshot) {
61
61
  if (snapshot.session_id) {
62
62
  body.push(`## Session`, snapshot.session_id, '');
63
63
  }
64
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
64
+ fs.mkdirSync(path.dirname(filePath), MIRROR_FOLDER);
65
65
  fs.writeFileSync(filePath, `${fm}\n\n${body.join('\n')}`, 'utf8');
66
66
  }
67
67
  export function removeActiveTaskMirror(hippoRoot, tenantId) {
@@ -99,12 +99,12 @@ export function writeRecentSessionMirror(hippoRoot, tenantId, events) {
99
99
  lines.push(`- [${event.created_at}] (${event.event_type}) ${event.content}`);
100
100
  }
101
101
  lines.push('');
102
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
102
+ fs.mkdirSync(path.dirname(filePath), MIRROR_FOLDER);
103
103
  fs.writeFileSync(filePath, `${fm}\n\n${lines.join('\n')}`, 'utf8');
104
104
  }
105
105
  function writeConflictMirrors(hippoRoot, conflicts) {
106
106
  const conflictDir = path.join(hippoRoot, 'conflicts');
107
- fs.mkdirSync(conflictDir, { recursive: true });
107
+ fs.mkdirSync(conflictDir, MIRROR_FOLDER);
108
108
  const keep = new Set();
109
109
  for (const conflict of conflicts) {
110
110
  const filename = `conflict_${conflict.id}.md`;
@@ -125,7 +125,7 @@ function writeConflictMirrors(hippoRoot, conflicts) {
125
125
  `- Memory A: ${conflict.memory_a_id}`,
126
126
  `- Memory B: ${conflict.memory_b_id}`,
127
127
  `- Reason: ${conflict.reason}`,
128
- `- Score: ${conflict.score.toFixed(3)}`,
128
+ `- Score: ${conflict.score.toFixed(SCORE_DECIMALS)}`,
129
129
  `- Status: ${conflict.status}`,
130
130
  '',
131
131
  ].join('\n');
@@ -142,7 +142,7 @@ function writeConflictMirrors(hippoRoot, conflicts) {
142
142
  export function writeMarkdownMirror(hippoRoot, entry) {
143
143
  removeEntryMirrors(hippoRoot, entry.id);
144
144
  const dir = layerDir(hippoRoot, entry.layer);
145
- fs.mkdirSync(dir, { recursive: true });
145
+ fs.mkdirSync(dir, MIRROR_FOLDER);
146
146
  fs.writeFileSync(path.join(dir, `${entry.id}.md`), serializeEntry(entry), 'utf8');
147
147
  }
148
148
  // Every layer, Trace included: `writeMarkdownMirror` writes any layer, and a stale trace mirror
@@ -159,7 +159,7 @@ export function removeEntryMirrors(hippoRoot, id) {
159
159
  * Mirror paths for `id` still on disk, walked like `removeEntryMirrors`, so a failed purge
160
160
  * with no reaper to retry it can name the stuck file.
161
161
  */
162
- export function getExistingEntryMirrorPaths(hippoRoot, id) {
162
+ function getExistingEntryMirrorPaths(hippoRoot, id) {
163
163
  // Layer list kept in lockstep with removeEntryMirrors.
164
164
  return [Layer.Buffer, Layer.Episodic, Layer.Semantic, Layer.Trace]
165
165
  .map((layer) => path.join(layerDir(hippoRoot, layer), `${id}.md`))
@@ -182,7 +182,7 @@ export function purgeMirrorBestEffort(hippoRoot, id, isRaw, logPrefix) {
182
182
  return true;
183
183
  }
184
184
  catch (secondErr) {
185
- const msg = secondErr instanceof Error ? secondErr.message : String(secondErr);
185
+ const msg = errorMessage(secondErr);
186
186
  if (isRaw) {
187
187
  log.error(`${logPrefix}: mirror cleanup failed for ${id} (will retry via reaper on next open): ${msg}`);
188
188
  }
@@ -217,14 +217,16 @@ export function buildIndexFromDb(db) {
217
217
  pinned: Boolean(row.pinned),
218
218
  };
219
219
  }
220
+ return { version: INDEX_VERSION, entries, ...readLastRecall(db) };
221
+ }
222
+ /** The last recall's ids and its trace, the two meta keys saveIndex writes together. */
223
+ export function readLastRecall(db) {
220
224
  // Read both lockstep keys in ONE statement: two autocommit SELECTs could straddle a concurrent
221
225
  // saveIndex and hand back a mismatched last_retrieval_ids / last_trace_id pair.
222
226
  // SAFETY: lockstepRows' shape matches the key/value columns named above.
223
227
  const lockstepRows = db.prepare(`SELECT key, value FROM meta WHERE key IN ('last_retrieval_ids', 'last_trace_id')`).all();
224
228
  const lockstep = new Map(lockstepRows.map((r) => [r.key, r.value]));
225
229
  return {
226
- version: INDEX_VERSION,
227
- entries,
228
230
  last_retrieval_ids: parseJsonArray(lockstep.get('last_retrieval_ids') ?? '[]'),
229
231
  last_trace_id: parseLastTraceId(lockstep.get('last_trace_id') ?? ''),
230
232
  };
@@ -250,7 +252,19 @@ export function writeIndexMirror(hippoRoot, index) {
250
252
  mirrorBestEffort('index.json', () => fs.writeFileSync(path.join(hippoRoot, 'index.json'), JSON.stringify(index, null, 2), 'utf8'));
251
253
  }
252
254
  export function writeStatsMirror(hippoRoot, stats) {
253
- mirrorBestEffort('stats.json', () => fs.writeFileSync(path.join(hippoRoot, 'stats.json'), JSON.stringify(stats, null, 2), 'utf8'));
255
+ mirrorBestEffort('stats.json', () => overwriteInPlace(path.join(hippoRoot, 'stats.json'), JSON.stringify(stats, null, 2)));
256
+ }
257
+ // A truncate waits for the file's last write to reach the disk, so a file rewritten on every recall keeps its blocks.
258
+ function overwriteInPlace(file, text) {
259
+ const bytes = Buffer.from(text, 'utf8');
260
+ const fd = fs.openSync(file, fs.constants.O_WRONLY | fs.constants.O_CREAT, 0o666);
261
+ try {
262
+ fs.writeSync(fd, bytes, 0, bytes.length, 0);
263
+ fs.ftruncateSync(fd, bytes.length);
264
+ }
265
+ finally {
266
+ fs.closeSync(fd);
267
+ }
254
268
  }
255
269
  /** Mirrors are derived from SQLite and written after COMMIT, so a failed write warns instead of failing a committed change. */
256
270
  export function mirrorBestEffort(what, write) {
@@ -258,7 +272,7 @@ export function mirrorBestEffort(what, write) {
258
272
  write();
259
273
  }
260
274
  catch (err) {
261
- log.warn(`${what} not refreshed (${err instanceof Error ? err.message : String(err)}); the database write succeeded`);
275
+ log.warn(`${what} not refreshed (${errorMessage(err)}); the database write succeeded`);
262
276
  }
263
277
  }
264
278
  export function syncMirrorFiles(hippoRoot, db) {