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,10 @@
1
1
  // The local Transformers.js embedder, a leaf so embedding-provider.ts can wrap it without importing embeddings.ts.
2
- import { envModelCache } from './env.js';
2
+ import { envModelCache } from '../../util/env.js';
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
5
  import { createRequire } from 'module';
6
- import { loadConfig } from './config.js';
7
- import { log } from './log.js';
6
+ import { loadConfig } from '../../core/config.js';
7
+ import { errorMessage, log } from '../../util/log.js';
8
8
  const _require = createRequire(import.meta.url);
9
9
  let _embeddingAvailable = null;
10
10
  // A pipeline is expensive to load, so one instance per model is kept for the process.
@@ -77,61 +77,72 @@ async function loadPipeline(model) {
77
77
  return _pipelineInstances.get(model);
78
78
  if (_pipelineLoading.has(model))
79
79
  return _pipelineLoading.get(model);
80
- const loading = (async () => {
80
+ const loading = createPipeline(model);
81
+ _pipelineLoading.set(model, loading);
82
+ return loading;
83
+ }
84
+ /** The model's pipeline, or null with the reason recorded in `_pipelineErrors`. */
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ async function createPipeline(model) {
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+ const pkg = resolveTransformersPackage();
89
+ if (!pkg) {
90
+ _pipelineErrors.set(model, 'no transformers package is installed');
91
+ return null;
92
+ }
93
+ const pipelineFn = await importPipelineFactory(pkg, model);
94
+ if (!pipelineFn)
95
+ return null;
96
+ // The offline bundle used in egress-blocked sandboxes ships only the FP32 model, so use whichever file is on disk.
97
+ const cacheRoot = envModelCache();
98
+ const quantized = !cacheRoot
99
+ || fs.existsSync(path.join(cacheRoot, model, 'onnx', 'model_quantized.onnx'));
100
+ try {
101
+ const instance = await pipelineFn('feature-extraction', model, { quantized });
102
+ _pipelineInstances.set(model, instance);
103
+ return instance;
104
+ }
105
+ catch (err) {
106
+ const reason = `embedding pipeline load failed (${model}): ${String(err)}`;
107
+ log.debug(reason);
108
+ _pipelineErrors.set(model, reason);
109
+ return null;
110
+ }
111
+ finally {
112
+ _pipelineLoading.delete(model);
113
+ }
114
+ }
115
+ /** The package's `pipeline` function, or null with the reason recorded in `_pipelineErrors`. */
116
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
117
+ async function importPipelineFactory(pkg, model) {
118
+ let pipelineFn = null;
119
+ try {
120
+ // SAFETY: the resolved module's shape is untyped by design (optional peer
121
+ // dependency); pipelineFn/mod.env are read defensively below and any
122
+ // failure to find a usable pipeline falls through to `return null`.
81
123
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
- const pkg = resolveTransformersPackage();
83
- if (!pkg) {
84
- _pipelineErrors.set(model, 'no transformers package is installed');
85
- return null;
86
- }
87
- let pipelineFn = null;
88
- try {
89
- // SAFETY: the resolved module's shape is untyped by design (optional peer
90
- // dependency); pipelineFn/mod.env are read defensively below and any
91
- // failure to find a usable pipeline falls through to `return null`.
92
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
93
- const mod = await _dynImport(pkg);
94
- if (envModelCache()) {
95
- if (mod.env) {
96
- mod.env.cacheDir = envModelCache();
97
- mod.env.localModelPath = envModelCache();
98
- mod.env.allowRemoteModels = false;
99
- }
124
+ const mod = await _dynImport(pkg);
125
+ if (envModelCache()) {
126
+ if (mod.env) {
127
+ mod.env.cacheDir = envModelCache();
128
+ mod.env.localModelPath = envModelCache();
129
+ mod.env.allowRemoteModels = false;
100
130
  }
101
- pipelineFn = mod.pipeline ?? mod.default?.pipeline;
102
- }
103
- catch (err) {
104
- // String(err) keeps a Node error's [ERR_...] code, which callers match on.
105
- const reason = `transformers import failed (${pkg}): ${String(err)}`;
106
- log.debug(reason);
107
- _pipelineErrors.set(model, reason);
108
- return null;
109
- }
110
- if (!pipelineFn) {
111
- _pipelineErrors.set(model, `${pkg} exports no pipeline function`);
112
- return null;
113
- }
114
- // The offline bundle used in egress-blocked sandboxes ships only the FP32 model, so use whichever file is on disk.
115
- const cacheRoot = envModelCache();
116
- const quantized = !cacheRoot
117
- || fs.existsSync(path.join(cacheRoot, model, 'onnx', 'model_quantized.onnx'));
118
- try {
119
- const instance = await pipelineFn('feature-extraction', model, { quantized });
120
- _pipelineInstances.set(model, instance);
121
- return instance;
122
- }
123
- catch (err) {
124
- const reason = `embedding pipeline load failed (${model}): ${String(err)}`;
125
- log.debug(reason);
126
- _pipelineErrors.set(model, reason);
127
- return null;
128
- }
129
- finally {
130
- _pipelineLoading.delete(model);
131
131
  }
132
- })();
133
- _pipelineLoading.set(model, loading);
134
- return loading;
132
+ pipelineFn = mod.pipeline ?? mod.default?.pipeline;
133
+ }
134
+ catch (err) {
135
+ // String(err) keeps a Node error's [ERR_...] code, which callers match on.
136
+ const reason = `transformers import failed (${pkg}): ${String(err)}`;
137
+ log.debug(reason);
138
+ _pipelineErrors.set(model, reason);
139
+ return null;
140
+ }
141
+ if (!pipelineFn) {
142
+ _pipelineErrors.set(model, `${pkg} exports no pipeline function`);
143
+ return null;
144
+ }
145
+ return pipelineFn;
135
146
  }
136
147
  /** Throws, with the reason, when the model's pipeline cannot load: a provider-level failure, not a per-item skip. */
137
148
  export async function requireLocalPipeline(model) {
@@ -174,8 +185,8 @@ export async function getEmbedding(text, model = DEFAULT_EMBEDDING_MODEL, role)
174
185
  }
175
186
  catch (err) {
176
187
  // The caller sees `[]` and names the memory; the reason only shows at debug.
177
- log.debug(`local embedding failed: ${err instanceof Error ? err.message : String(err)}`);
188
+ log.debug(`local embedding failed: ${errorMessage(err)}`);
178
189
  return [];
179
190
  }
180
191
  }
181
- //# sourceMappingURL=local-embedding.js.map
192
+ //# sourceMappingURL=local.js.map
@@ -26,7 +26,7 @@
26
26
  * `fetch` and are integration-verified in Workstream C (real API calls are
27
27
  * egress-blocked in the build sandbox).
28
28
  */
29
- import { type EmbeddingRole } from './local-embedding.js';
29
+ import { type EmbeddingRole } from './local.js';
30
30
  export type EmbeddingProviderKind = 'local' | 'openai' | 'voyage' | 'cohere';
31
31
  export declare const API_PROVIDER_KINDS: readonly EmbeddingProviderKind[];
32
32
  export interface EmbeddingProvider {
@@ -74,4 +74,4 @@ export declare function resolveEmbeddingIdentity(hippoRoot: string, opts?: Resol
74
74
  * api -> key present. Use at the call sites that decide whether to embed.
75
75
  */
76
76
  export declare function isEmbeddingConfigured(hippoRoot: string): boolean;
77
- //# sourceMappingURL=embedding-provider.d.ts.map
77
+ //# sourceMappingURL=provider.d.ts.map
@@ -26,11 +26,13 @@
26
26
  * `fetch` and are integration-verified in Workstream C (real API calls are
27
27
  * egress-blocked in the build sandbox).
28
28
  */
29
- import { envByName } from './env.js';
30
- import { getEmbedding, isEmbeddingAvailable, requireLocalPipeline, resolveEmbeddingModel, DEFAULT_EMBEDDING_MODEL, } from './local-embedding.js';
31
- import { loadConfig } from './config.js';
32
- import { redactSecretsStrict } from './secret-detect.js';
33
- import { fetchWithRetry } from './http-retry.js';
29
+ import { envByName } from '../../util/env.js';
30
+ import { getEmbedding, isEmbeddingAvailable, requireLocalPipeline, resolveEmbeddingModel, DEFAULT_EMBEDDING_MODEL, } from './local.js';
31
+ import { loadConfig } from '../../core/config.js';
32
+ import { errorMessage, log } from '../../util/log.js';
33
+ import { redactSecretsStrict } from '../../util/secret-detect.js';
34
+ import { fetchWithRetry } from '../../util/http-retry.js';
35
+ const ERROR_DETAIL_CHARS = 300;
34
36
  export const API_PROVIDER_KINDS = ['openai', 'voyage', 'cohere'];
35
37
  function isApiProviderKind(x) {
36
38
  return x === 'openai' || x === 'voyage' || x === 'cohere';
@@ -129,6 +131,13 @@ function redact(text, secret) {
129
131
  return text;
130
132
  return text.split(secret).join('***');
131
133
  }
134
+ /** A cause with the key cut out: the caught error's own text or cause chain can echo the Authorization header. */
135
+ function redactedCause(err, key) {
136
+ const copy = new Error(redact(errorMessage(err), key));
137
+ if (err instanceof Error)
138
+ copy.name = err.name;
139
+ return copy;
140
+ }
132
141
  function l2normalize(v) {
133
142
  let norm = 0;
134
143
  for (const x of v)
@@ -179,11 +188,29 @@ class ApiEmbeddingProvider {
179
188
  return out;
180
189
  }
181
190
  async embedChunk(chunk, key, role) {
191
+ const spec = API_PROVIDER_SPECS[this.kind];
192
+ const resp = await this.postChunk(chunk, key, role);
193
+ const json = await this.responseJson(resp, key);
194
+ const vectors = spec.extractVectors(json);
195
+ // A 200 response with the wrong number of vectors (or any empty/malformed
196
+ // vector) is a provider/proxy contract violation, NOT a per-item miss. Throw
197
+ // so a reindex aborts atomically (preserving the prior usable index) and the
198
+ // explicit backfill surfaces it, instead of silently saving []-padded rows.
199
+ if (vectors.length !== chunk.length) {
200
+ throw new Error(redact(`${this.kind} embeddings returned ${vectors.length} vectors for ${chunk.length} inputs`, key));
201
+ }
202
+ for (let i = 0; i < vectors.length; i++) {
203
+ if (!vectors[i] || vectors[i].length === 0) {
204
+ throw new Error(redact(`${this.kind} embeddings returned an empty vector at index ${i}`, key));
205
+ }
206
+ }
207
+ return vectors;
208
+ }
209
+ async postChunk(chunk, key, role) {
182
210
  const spec = API_PROVIDER_SPECS[this.kind];
183
211
  const url = `${this.baseUrl.replace(/\/$/, '')}/${spec.path}`;
184
- let resp;
185
212
  try {
186
- resp = await fetchWithRetry(url, {
213
+ return await fetchWithRetry(url, {
187
214
  method: 'POST',
188
215
  headers: {
189
216
  'content-type': 'application/json',
@@ -193,9 +220,12 @@ class ApiEmbeddingProvider {
193
220
  }, { timeoutMs: REQUEST_TIMEOUT_MS });
194
221
  }
195
222
  catch (err) {
196
- const msg = err instanceof Error ? err.message : String(err);
197
- throw new Error(redact(`embedding request to ${this.kind} failed: ${msg}`, key));
223
+ const msg = errorMessage(err);
224
+ throw new Error(redact(`embedding request to ${this.kind} failed: ${msg}`, key), { cause: redactedCause(err, key) });
198
225
  }
226
+ }
227
+ /** The body of an OK reply; any other status, or a body that is not JSON, throws with the key cut out. */
228
+ async responseJson(resp, key) {
199
229
  if (!resp.ok) {
200
230
  let detail = '';
201
231
  try {
@@ -204,30 +234,15 @@ class ApiEmbeddingProvider {
204
234
  catch {
205
235
  /* ignore body read error */
206
236
  }
207
- throw new Error(redact(`${this.kind} embeddings HTTP ${resp.status}: ${detail.slice(0, 300)}`, key));
237
+ throw new Error(redact(`${this.kind} embeddings HTTP ${resp.status}: ${detail.slice(0, ERROR_DETAIL_CHARS)}`, key));
208
238
  }
209
- let json;
210
239
  try {
211
- json = await resp.json();
240
+ return await resp.json();
212
241
  }
213
242
  catch (err) {
214
- const msg = err instanceof Error ? err.message : String(err);
215
- throw new Error(redact(`${this.kind} embeddings returned invalid JSON: ${msg}`, key));
216
- }
217
- const vectors = spec.extractVectors(json);
218
- // A 200 response with the wrong number of vectors (or any empty/malformed
219
- // vector) is a provider/proxy contract violation, NOT a per-item miss. Throw
220
- // so a reindex aborts atomically (preserving the prior usable index) and the
221
- // explicit backfill surfaces it, instead of silently saving []-padded rows.
222
- if (vectors.length !== chunk.length) {
223
- throw new Error(redact(`${this.kind} embeddings returned ${vectors.length} vectors for ${chunk.length} inputs`, key));
224
- }
225
- for (let i = 0; i < vectors.length; i++) {
226
- if (!vectors[i] || vectors[i].length === 0) {
227
- throw new Error(redact(`${this.kind} embeddings returned an empty vector at index ${i}`, key));
228
- }
243
+ const msg = errorMessage(err);
244
+ throw new Error(redact(`${this.kind} embeddings returned invalid JSON: ${msg}`, key), { cause: redactedCause(err, key) });
229
245
  }
230
- return vectors;
231
246
  }
232
247
  }
233
248
  function readEmbeddingsConfig(hippoRoot) {
@@ -306,10 +321,10 @@ export function isEmbeddingConfigured(hippoRoot) {
306
321
  try {
307
322
  return resolveEmbeddingProvider(hippoRoot).isAvailable();
308
323
  }
309
- catch {
310
- // Invalid embedding config (e.g. an insecure apiBaseUrl) must not crash the
311
- // best-effort ingestion guard — treat it as "not configured" and skip.
324
+ catch (err) {
325
+ // An invalid embedding config must not crash the best-effort ingestion guard, so it reads as not configured.
326
+ log.debug(`embedding config unusable: ${errorMessage(err)}`);
312
327
  return false;
313
328
  }
314
329
  }
315
- //# sourceMappingURL=embedding-provider.js.map
330
+ //# sourceMappingURL=provider.js.map
@@ -1,5 +1,6 @@
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
+ export declare const TENANT_IS = "+tenant_id = ?";
3
4
  /**
4
5
  * Read a memory entry by ID.
5
6
  *
@@ -12,6 +13,8 @@ export declare function readEntry(hippoRoot: string, id: string, tenantId?: stri
12
13
  export declare const ID_CHUNK = 500;
13
14
  /** `items` in consecutive slices of at most `size`. */
14
15
  export declare function chunked<T>(items: readonly T[], size?: number): T[][];
16
+ /** Answers whether a tenant's rows in this store hold an id: `ids` are looked up now, one query per chunk, and any other id on its first ask. */
17
+ export declare function heldIdLookup(hippoRoot: string, tenantId: string, ids: readonly string[]): (id: string) => boolean;
15
18
  /** Rows by id on the caller's handle, one query per chunk; an id missing or in another tenant is absent from the map. */
16
19
  export declare function selectEntriesByIds(db: DatabaseSyncLike, ids: readonly string[], tenantId?: string): Map<string, MemoryEntry>;
17
20
  /** Direct children of each parent, one query per chunk; each list is in `created ASC, id ASC` order. */
@@ -62,11 +65,6 @@ export declare function countSessionRawMemories(hippoRoot: string, sessionId: st
62
65
  * `RecallContractError` for it when `HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1` is set.
63
66
  */
64
67
  export declare function loadFreshRawMemories(hippoRoot: string, count: number, tenantId?: string, sessionId?: string, origins?: readonly string[]): MemoryEntry[];
65
- /**
66
- * Direct DAG children of a parent summary. Tenant scoped. Returns only rows
67
- * whose `dag_parent_id` matches `parentId`; does NOT walk recursively.
68
- */
69
- export declare function loadChildrenOf(hippoRoot: string, parentId: string, tenantId?: string): MemoryEntry[];
70
68
  /**
71
69
  * Load all entries from SQLite.
72
70
  *
@@ -80,4 +78,45 @@ export declare function selectAllEntries(db: DatabaseSyncLike, tenantId?: string
80
78
  /** Live rows whose source starts with `prefix`, on the caller's handle; LIKE folds case, so the prefix is checked again exactly. */
81
79
  export declare function selectLiveEntriesBySourcePrefix(db: DatabaseSyncLike, tenantId: string, prefix: string): MemoryEntry[];
82
80
  export declare function loadContentsWithTag(hippoRoot: string, tenantId: string, tag: string, origins?: readonly string[]): string[];
81
+ export interface VaultRawRow {
82
+ id: string;
83
+ artifact_ref: string;
84
+ tags_json: string;
85
+ scope: string | null;
86
+ }
87
+ /** Live raw rows whose artifact_ref matches a LIKE pattern, for one tenant; the store is set up first when it is new. */
88
+ export declare function loadVaultRawRows(hippoRoot: string, likeParam: string, tenantId: string): VaultRawRow[];
89
+ export interface PreviewRow {
90
+ id: string;
91
+ content: string;
92
+ source: string | null;
93
+ confidence: MemoryEntry['confidence'] | null;
94
+ extracted_from: string | null;
95
+ dag_level: number | null;
96
+ tags_json: string | null;
97
+ }
98
+ /** Reads memories from a store whose schema may predate some columns; `columns` is the table's real column set. */
99
+ export declare function selectPreviewRows(db: DatabaseSyncLike, columns: ReadonlySet<string>, tenantId: string): PreviewRow[];
100
+ /** True when a memory row, of any tenant, already holds `id`. */
101
+ export declare function entryIdTakenAt(db: DatabaseSyncLike, id: string): boolean;
102
+ /** The text, tenant and scope of memory `id`, or undefined when no row holds it. */
103
+ export declare function entryRejectRowAt(db: DatabaseSyncLike, id: string): {
104
+ content: string;
105
+ tenant_id: string;
106
+ scope: string | null;
107
+ } | undefined;
108
+ export declare function objectMemoryRowsAt(db: DatabaseSyncLike): Array<{
109
+ memory_id: string;
110
+ status: string;
111
+ }>;
112
+ /** Live rows of a tenant whose source does not start with `sourcePrefix`; `origins` (global store only) limits them to user-global rows and those projects. */
113
+ export declare function selectRowsOutsideSourcePrefixAt(db: DatabaseSyncLike, tenantId: string, sourcePrefix: string, origins: readonly string[] | null): Array<{
114
+ id: string;
115
+ content: string;
116
+ source: string;
117
+ }>;
118
+ /** Content of a tenant's live rows written by `source` and tagged `tag` that no extraction produced, in loadAllEntries' order and in every scope; `exceptSessionId` drops one session's own rows. */
119
+ export declare function loadLiveContentsBySourceAndTag(hippoRoot: string, tenantId: string, source: string, tag: string, exceptSessionId: string): string[];
120
+ /** Every tenant's distilled rows nothing has superseded, in loadAllEntries' order: the rows that can be each other's duplicate. */
121
+ export declare function loadCurrentDistilledEntries(hippoRoot: string): MemoryEntry[];
83
122
  //# sourceMappingURL=entry-reads.d.ts.map
@@ -1,9 +1,12 @@
1
- import { closeHippoDb } from '../db.js';
1
+ import { closeHippoDb } from '../db/index.js';
2
2
  import { MEMORY_SELECT_COLUMNS, rowToEntry, parseJsonArray } from './rows.js';
3
3
  import { openStore } from './open.js';
4
- import { escapeLike } from '../escape.js';
5
- import { originInSql } from '../project-identity.js';
6
- import { scopeAdmitSql } from '../recall-scope.js';
4
+ import { escapeLike } from '../util/escape.js';
5
+ import { originInSql } from '../core/project-identity.js';
6
+ import { scopeAdmitSql } from './recall-scope.js';
7
+ const MAX_IDS_PER_READ = 500;
8
+ // The plus keeps SQLite on the primary key for an id list: with a bare tenant_id it walks every row of the tenant instead.
9
+ export const TENANT_IS = '+tenant_id = ?';
7
10
  /**
8
11
  * Read a memory entry by ID.
9
12
  *
@@ -34,10 +37,37 @@ export function chunked(items, size = ID_CHUNK) {
34
37
  out.push(items.slice(i, i + size));
35
38
  return out;
36
39
  }
40
+ /** Answers whether a tenant's rows in this store hold an id: `ids` are looked up now, one query per chunk, and any other id on its first ask. */
41
+ export function heldIdLookup(hippoRoot, tenantId, ids) {
42
+ const held = new Map();
43
+ const lookUp = (asked) => {
44
+ const db = openStore(hippoRoot);
45
+ try {
46
+ for (const chunk of chunked([...new Set(asked)])) {
47
+ for (const id of chunk)
48
+ held.set(id, false);
49
+ // SAFETY: rows' shape matches the single `id` column selected.
50
+ const rows = db.prepare(`SELECT id FROM memories WHERE id IN (${chunk.map(() => '?').join(',')}) AND ${TENANT_IS}`).all(...chunk, tenantId);
51
+ for (const row of rows)
52
+ held.set(row.id, true);
53
+ }
54
+ }
55
+ finally {
56
+ closeHippoDb(db);
57
+ }
58
+ };
59
+ if (ids.length > 0)
60
+ lookUp(ids);
61
+ return (id) => {
62
+ if (!held.has(id))
63
+ lookUp([id]);
64
+ return held.get(id) === true;
65
+ };
66
+ }
37
67
  /** Rows by id on the caller's handle, one query per chunk; an id missing or in another tenant is absent from the map. */
38
68
  export function selectEntriesByIds(db, ids, tenantId) {
39
69
  const byId = new Map();
40
- const tenantClause = tenantId !== undefined ? ' AND tenant_id = ?' : '';
70
+ const tenantClause = tenantId !== undefined ? ` AND ${TENANT_IS}` : '';
41
71
  const tenantArgs = tenantId !== undefined ? [tenantId] : [];
42
72
  for (const chunk of chunked([...new Set(ids)])) {
43
73
  const placeholders = chunk.map(() => '?').join(',');
@@ -51,7 +81,7 @@ export function selectEntriesByIds(db, ids, tenantId) {
51
81
  /** Direct children of each parent, one query per chunk; each list is in `created ASC, id ASC` order. */
52
82
  export function selectChildrenByParent(db, parentIds, tenantId) {
53
83
  const byParent = new Map();
54
- const tenantClause = tenantId !== undefined ? ' AND tenant_id = ?' : '';
84
+ const tenantClause = tenantId !== undefined ? ` AND ${TENANT_IS}` : '';
55
85
  const tenantArgs = tenantId !== undefined ? [tenantId] : [];
56
86
  for (const chunk of chunked([...new Set(parentIds)])) {
57
87
  const placeholders = chunk.map(() => '?').join(',');
@@ -77,7 +107,7 @@ export function selectChildrenByParent(db, parentIds, tenantId) {
77
107
  export function loadEntriesByIds(hippoRoot, ids, tenantId) {
78
108
  if (ids.length === 0)
79
109
  return [];
80
- const capped = ids.slice(0, 500);
110
+ const capped = ids.slice(0, MAX_IDS_PER_READ);
81
111
  const db = openStore(hippoRoot);
82
112
  try {
83
113
  const placeholders = capped.map(() => '?').join(',');
@@ -85,7 +115,7 @@ export function loadEntriesByIds(hippoRoot, ids, tenantId) {
85
115
  // SAFETY: both branches select exactly MEMORY_SELECT_COLUMNS, matching
86
116
  // MemoryRow's field set.
87
117
  const rows = tenantId !== undefined
88
- ? db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id IN (${placeholders}) AND tenant_id = ? ORDER BY created ASC, content ASC, id ASC`).all(...capped, tenantId)
118
+ ? db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id IN (${placeholders}) AND ${TENANT_IS} ORDER BY created ASC, content ASC, id ASC`).all(...capped, tenantId)
89
119
  : db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE id IN (${placeholders}) ORDER BY created ASC, content ASC, id ASC`).all(...capped);
90
120
  return rows.map(rowToEntry);
91
121
  }
@@ -224,19 +254,6 @@ export function loadFreshRawMemories(hippoRoot, count, tenantId, sessionId, orig
224
254
  closeHippoDb(db);
225
255
  }
226
256
  }
227
- /**
228
- * Direct DAG children of a parent summary. Tenant scoped. Returns only rows
229
- * whose `dag_parent_id` matches `parentId`; does NOT walk recursively.
230
- */
231
- export function loadChildrenOf(hippoRoot, parentId, tenantId) {
232
- const db = openStore(hippoRoot);
233
- try {
234
- return selectChildrenByParent(db, [parentId], tenantId).get(parentId) ?? [];
235
- }
236
- finally {
237
- closeHippoDb(db);
238
- }
239
- }
240
257
  /**
241
258
  * Load all entries from SQLite.
242
259
  *
@@ -283,4 +300,86 @@ export function loadContentsWithTag(hippoRoot, tenantId, tag, origins) {
283
300
  closeHippoDb(db);
284
301
  }
285
302
  }
303
+ /** Live raw rows whose artifact_ref matches a LIKE pattern, for one tenant; the store is set up first when it is new. */
304
+ export function loadVaultRawRows(hippoRoot, likeParam, tenantId) {
305
+ const db = openStore(hippoRoot);
306
+ try {
307
+ // SAFETY: query selects exactly the columns of VaultRawRow, in the same
308
+ // names, from the memories table this module owns.
309
+ return db
310
+ .prepare(`SELECT id, artifact_ref, tags_json, scope FROM memories
311
+ WHERE artifact_ref LIKE ? ESCAPE '\\' AND tenant_id = ? AND kind = 'raw'`)
312
+ .all(likeParam, tenantId);
313
+ }
314
+ finally {
315
+ closeHippoDb(db);
316
+ }
317
+ }
318
+ /** Reads memories from a store whose schema may predate some columns; `columns` is the table's real column set. */
319
+ export function selectPreviewRows(db, columns, tenantId) {
320
+ const tenant = columns.has('tenant_id') ? ' WHERE tenant_id = ?' : '';
321
+ const column = (name, fallback) => (columns.has(name) ? name : `${fallback} AS ${name}`);
322
+ const statement = db.prepare(`SELECT id, content, ${column('source', "''")}, ${column('confidence', 'NULL')}, ${column('extracted_from', 'NULL')}, ${column('dag_level', '0')}, ${column('tags_json', "'[]'")} FROM memories${tenant}`);
323
+ // SAFETY: the SELECT names every PreviewRow field, each a literal fallback when its column is missing.
324
+ return (tenant ? statement.all(tenantId) : statement.all());
325
+ }
326
+ /** True when a memory row, of any tenant, already holds `id`. */
327
+ export function entryIdTakenAt(db, id) {
328
+ return db.prepare(`SELECT 1 FROM memories WHERE id = ?`).get(id) !== undefined;
329
+ }
330
+ /** The text, tenant and scope of memory `id`, or undefined when no row holds it. */
331
+ export function entryRejectRowAt(db, id) {
332
+ // SAFETY: row's shape matches the three columns named in the SELECT.
333
+ return db
334
+ .prepare(`SELECT content, tenant_id, scope FROM memories WHERE id = ?`)
335
+ .get(id);
336
+ }
337
+ /** Memory ids held by each typed-object table, with the status of the object that holds them. */
338
+ const OBJECT_TABLES = ['decisions', 'incidents', 'processes', 'policies', 'skills', 'project_briefs', 'customer_notes'];
339
+ export function objectMemoryRowsAt(db) {
340
+ const out = [];
341
+ for (const table of OBJECT_TABLES) {
342
+ // SAFETY: SELECT of two TEXT columns, filtered to a non-null memory_id.
343
+ out.push(...db.prepare(`SELECT memory_id, status FROM ${table} WHERE memory_id IS NOT NULL`).all());
344
+ }
345
+ return out;
346
+ }
347
+ /** Live rows of a tenant whose source does not start with `sourcePrefix`; `origins` (global store only) limits them to user-global rows and those projects. */
348
+ export function selectRowsOutsideSourcePrefixAt(db, tenantId, sourcePrefix, origins) {
349
+ const visible = origins !== null ? ` AND (origin_project = '' OR ${originInSql(origins)})` : '';
350
+ const params = origins !== null ? [tenantId, sourcePrefix, ...origins] : [tenantId, sourcePrefix];
351
+ // SAFETY: the SELECT names the three columns of the row type.
352
+ return db.prepare(`SELECT id, content, source FROM memories
353
+ WHERE tenant_id = ? AND superseded_by IS NULL AND substr(source, 1, ${sourcePrefix.length}) != ?${visible}`).all(...params);
354
+ }
355
+ /** Content of a tenant's live rows written by `source` and tagged `tag` that no extraction produced, in loadAllEntries' order and in every scope; `exceptSessionId` drops one session's own rows. */
356
+ export function loadLiveContentsBySourceAndTag(hippoRoot, tenantId, source, tag, exceptSessionId) {
357
+ const db = openStore(hippoRoot);
358
+ try {
359
+ /** SAFETY: rows' shape matches the two columns named in the SELECT below. */
360
+ const rows = db.prepare(`SELECT content, tags_json FROM memories
361
+ WHERE tenant_id = ? AND source = ? AND instr(tags_json, ?) > 0
362
+ AND COALESCE(extracted_from, '') = '' AND COALESCE(superseded_by, '') = ''
363
+ AND (source_session_id IS NULL OR source_session_id != ?)
364
+ ORDER BY created ASC, id ASC`).all(tenantId, source, JSON.stringify(tag), exceptSessionId);
365
+ return rows.filter((r) => parseJsonArray(r.tags_json).includes(tag)).map((r) => r.content);
366
+ }
367
+ finally {
368
+ closeHippoDb(db);
369
+ }
370
+ }
371
+ /** Every tenant's distilled rows nothing has superseded, in loadAllEntries' order: the rows that can be each other's duplicate. */
372
+ export function loadCurrentDistilledEntries(hippoRoot) {
373
+ const db = openStore(hippoRoot);
374
+ try {
375
+ // SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
376
+ const rows = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories
377
+ WHERE COALESCE(kind, 'distilled') = 'distilled' AND COALESCE(superseded_by, '') = ''
378
+ ORDER BY created ASC, id ASC`).all();
379
+ return rows.map(rowToEntry);
380
+ }
381
+ finally {
382
+ closeHippoDb(db);
383
+ }
384
+ }
286
385
  //# sourceMappingURL=entry-reads.js.map
@@ -1,12 +1,18 @@
1
- import type { MemoryEntry } from '../memory.js';
2
- import { openHippoDb } from '../db.js';
1
+ import type { MemoryEntry } from '../core/memory.js';
2
+ import { openHippoDb } from '../db/index.js';
3
3
  export declare function upsertEntryRow(db: ReturnType<typeof openHippoDb>, entry: MemoryEntry): void;
4
4
  /** The row alone, with no rejection guard or full-text row, for `upsertEntryRow` and for `batchWriteAndDelete`, which probes tombstones and indexes per batch. Returns whether the row is new. */
5
5
  export declare function upsertMemoryRow(db: ReturnType<typeof openHippoDb>, entry: MemoryEntry): boolean;
6
6
  export declare function syncFtsRow(db: ReturnType<typeof openHippoDb>, entry: MemoryEntry, isNewRow?: boolean): void;
7
+ export declare function ftsRowExists(db: ReturnType<typeof openHippoDb>, id: string): boolean;
7
8
  export declare function deleteFtsRow(db: ReturnType<typeof openHippoDb>, id: string): void;
8
9
  /** One set delete for `staleIds`, because `id` is UNINDEXED and each delete by id scans the whole index; then one insert per row. */
9
10
  export declare function replaceFtsRows(db: ReturnType<typeof openHippoDb>, rows: readonly MemoryEntry[], staleIds: readonly string[]): void;
11
+ /** Row counts of a full-text index that has drifted from `memories`, re-synced after the count when `repair`; null when the two agree or there is no index. */
12
+ export declare function ftsDrift(hippoRoot: string, repair: boolean): {
13
+ memories: number;
14
+ fts: number;
15
+ } | null;
10
16
  /**
11
17
  * Write a memory entry to SQLite and refresh compatibility mirrors.
12
18
  *
@@ -1,7 +1,7 @@
1
- import { isFtsAvailable } from '../db.js';
2
- import { fallbackOrigin, originFromSource } from '../project-identity.js';
3
- import { checkRejectionGuard } from '../rejection.js';
4
- import { log } from '../log.js';
1
+ import { closeHippoDb, ftsRowCounts, openHippoDb, isFtsAvailable, repairFtsDrift } from '../db/index.js';
2
+ import { fallbackOrigin, originFromSource } from '../core/project-identity.js';
3
+ import { checkRejectionGuard } from './rejection.js';
4
+ import { errorMessage, log } from '../util/log.js';
5
5
  export function upsertEntryRow(db, entry) {
6
6
  checkRejectionGuard(db, entry.tenantId ?? 'default', entry.id, entry.content);
7
7
  syncFtsRow(db, entry, upsertMemoryRow(db, entry));
@@ -120,9 +120,12 @@ export function syncFtsRow(db, entry, isNewRow = false) {
120
120
  }
121
121
  catch (err) {
122
122
  // The memories table stays authoritative; a stale FTS row only costs recall quality, so the write goes on.
123
- log.warnThenDebug('fts-sync', `FTS index update failed for ${entry.id}; keyword recall may miss it: ${err instanceof Error ? err.message : String(err)}`);
123
+ log.warnThenDebug('fts-sync', `FTS index update failed for ${entry.id}; keyword recall may miss it: ${errorMessage(err)}`);
124
124
  }
125
125
  }
126
+ export function ftsRowExists(db, id) {
127
+ return db.prepare('SELECT id FROM memories_fts WHERE id = ?').get(id) !== undefined;
128
+ }
126
129
  export function deleteFtsRow(db, id) {
127
130
  if (!isFtsAvailable(db))
128
131
  return;
@@ -130,7 +133,7 @@ export function deleteFtsRow(db, id) {
130
133
  db.prepare(`DELETE FROM memories_fts WHERE id = ?`).run(id);
131
134
  }
132
135
  catch (err) {
133
- log.warnThenDebug('fts-delete', `FTS index delete failed for ${id}; recall may return a stale hit: ${err instanceof Error ? err.message : String(err)}`);
136
+ log.warnThenDebug('fts-delete', `FTS index delete failed for ${id}; recall may return a stale hit: ${errorMessage(err)}`);
134
137
  }
135
138
  }
136
139
  /** One set delete for `staleIds`, because `id` is UNINDEXED and each delete by id scans the whole index; then one insert per row. */
@@ -145,7 +148,7 @@ export function replaceFtsRows(db, rows, staleIds) {
145
148
  catch (err) {
146
149
  // Their old rows are still indexed, so inserting them again would index an id twice; only new ids go in.
147
150
  kept = new Set(staleIds);
148
- log.warnThenDebug('fts-delete', `FTS index delete failed for ${staleIds.length} row(s); recall may return a stale hit: ${err instanceof Error ? err.message : String(err)}`);
151
+ log.warnThenDebug('fts-delete', `FTS index delete failed for ${staleIds.length} row(s); recall may return a stale hit: ${errorMessage(err)}`);
149
152
  }
150
153
  }
151
154
  const toInsert = rows.filter((row) => !kept.has(row.id));
@@ -157,10 +160,27 @@ export function replaceFtsRows(db, rows, staleIds) {
157
160
  insert.run(row.id, row.content, row.tags.join(' '));
158
161
  }
159
162
  catch (err) {
160
- log.warnThenDebug('fts-sync', `FTS index update failed for ${row.id}; keyword recall may miss it: ${err instanceof Error ? err.message : String(err)}`);
163
+ log.warnThenDebug('fts-sync', `FTS index update failed for ${row.id}; keyword recall may miss it: ${errorMessage(err)}`);
161
164
  }
162
165
  }
163
166
  }
167
+ /** Row counts of a full-text index that has drifted from `memories`, re-synced after the count when `repair`; null when the two agree or there is no index. */
168
+ export function ftsDrift(hippoRoot, repair) {
169
+ const db = openHippoDb(hippoRoot);
170
+ try {
171
+ if (!isFtsAvailable(db))
172
+ return null;
173
+ const counts = ftsRowCounts(db);
174
+ if (counts === null || counts.memories === counts.fts)
175
+ return null;
176
+ if (repair)
177
+ repairFtsDrift(db);
178
+ return counts;
179
+ }
180
+ finally {
181
+ closeHippoDb(db);
182
+ }
183
+ }
164
184
  /**
165
185
  * Write a memory entry to SQLite and refresh compatibility mirrors.
166
186
  *