hippo-memory 1.69.0 → 1.71.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 (1014) 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 +5 -5
  5. package/dist/agent-memories/claude-code.js +25 -12
  6. package/dist/agent-memories/copilot.js +3 -2
  7. package/dist/agent-memories/files.js +26 -14
  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/markdown.d.ts +1 -3
  13. package/dist/agent-memories/markdown.js +1 -3
  14. package/dist/agent-memories/report.d.ts +1 -1
  15. package/dist/agent-memories/report.js +3 -2
  16. package/dist/agent-memories/source.d.ts +1 -1
  17. package/dist/agent-memories/source.js +6 -5
  18. package/dist/agent-memories/sync.d.ts +5 -3
  19. package/dist/agent-memories/sync.js +34 -38
  20. package/dist/agent-memories/types.d.ts +1 -1
  21. package/dist/api/assemble.d.ts +9 -46
  22. package/dist/api/assemble.js +44 -54
  23. package/dist/api/audit.d.ts +8 -7
  24. package/dist/api/audit.js +15 -21
  25. package/dist/api/auth.d.ts +17 -39
  26. package/dist/api/auth.js +76 -216
  27. package/dist/api/auto-sleep.d.ts +13 -0
  28. package/dist/api/auto-sleep.js +32 -0
  29. package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
  30. package/dist/{availability.js → api/availability.js} +14 -44
  31. package/dist/{context-auto.js → api/context-auto.js} +2 -1
  32. package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
  33. package/dist/{context-render.js → api/context-render.js} +7 -6
  34. package/dist/api/context-select.d.ts +5 -5
  35. package/dist/api/context-select.js +39 -48
  36. package/dist/api/context-types.d.ts +15 -40
  37. package/dist/api/context.d.ts +7 -26
  38. package/dist/api/context.js +67 -97
  39. package/dist/api/dormant.d.ts +7 -23
  40. package/dist/api/dormant.js +40 -128
  41. package/dist/api/drill-down.d.ts +9 -48
  42. package/dist/api/drill-down.js +41 -90
  43. package/dist/api/forget.d.ts +5 -33
  44. package/dist/api/forget.js +17 -73
  45. package/dist/api/goals.d.ts +1 -1
  46. package/dist/api/goals.js +2 -2
  47. package/dist/api/graph.d.ts +8 -0
  48. package/dist/api/graph.js +7 -0
  49. package/dist/api/index.d.ts +28 -0
  50. package/dist/api/index.js +31 -0
  51. package/dist/api/instruction-detect.js +85 -0
  52. package/dist/api/learn.js +63 -55
  53. package/dist/api/ledger-db.d.ts +21 -0
  54. package/dist/api/ledger-db.js +81 -0
  55. package/dist/api/memories.d.ts +5 -0
  56. package/dist/api/memories.js +7 -0
  57. package/dist/api/objects.d.ts +9 -0
  58. package/dist/api/objects.js +11 -0
  59. package/dist/api/on-store.d.ts +16 -0
  60. package/dist/api/on-store.js +38 -0
  61. package/dist/api/outcome.d.ts +5 -42
  62. package/dist/api/outcome.js +15 -80
  63. package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
  64. package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
  65. package/dist/api/predictions.d.ts +9 -0
  66. package/dist/api/predictions.js +18 -0
  67. package/dist/api/promote.d.ts +16 -31
  68. package/dist/api/promote.js +38 -123
  69. package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
  70. package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
  71. package/dist/api/quarantine.d.ts +5 -5
  72. package/dist/api/quarantine.js +30 -106
  73. package/dist/api/recall-cli.d.ts +55 -0
  74. package/dist/api/recall-cli.js +94 -0
  75. package/dist/api/recall-core.d.ts +4 -0
  76. package/dist/api/recall-core.js +120 -0
  77. package/dist/api/recall-finish.d.ts +53 -0
  78. package/dist/api/recall-finish.js +30 -0
  79. package/dist/api/recall-history.d.ts +64 -0
  80. package/dist/api/recall-history.js +159 -0
  81. package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
  82. package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
  83. package/dist/api/recall-record.d.ts +10 -13
  84. package/dist/api/recall-record.js +10 -30
  85. package/dist/api/recall-request.d.ts +2 -2
  86. package/dist/api/recall-request.js +3 -3
  87. package/dist/api/recall-types.d.ts +101 -316
  88. package/dist/api/recall.d.ts +5 -33
  89. package/dist/api/recall.js +92 -91
  90. package/dist/api/refine.d.ts +7 -0
  91. package/dist/api/refine.js +10 -0
  92. package/dist/api/remember-local.d.ts +57 -0
  93. package/dist/api/remember-local.js +90 -0
  94. package/dist/api/remember.d.ts +27 -12
  95. package/dist/api/remember.js +42 -46
  96. package/dist/api/session-owners.d.ts +4 -0
  97. package/dist/api/session-owners.js +17 -0
  98. package/dist/api/sleep-run.d.ts +7 -9
  99. package/dist/api/sleep-run.js +78 -94
  100. package/dist/api/sleep.d.ts +10 -29
  101. package/dist/api/tokens.d.ts +5 -12
  102. package/dist/api/tokens.js +12 -31
  103. package/dist/api/types.d.ts +8 -31
  104. package/dist/api/types.js +5 -23
  105. package/dist/capture/caller-session.d.ts +2 -2
  106. package/dist/capture/caller-session.js +8 -8
  107. package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
  108. package/dist/{capture-error.js → capture/capture-error.js} +7 -7
  109. package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
  110. package/dist/capture/command.d.ts +5 -13
  111. package/dist/capture/command.js +57 -60
  112. package/dist/capture/compact-resume-caller.d.ts +1 -1
  113. package/dist/capture/compact-resume-caller.js +7 -7
  114. package/dist/capture/compact.d.ts +8 -16
  115. package/dist/capture/compact.js +56 -47
  116. package/dist/capture/compaction-items-caller.d.ts +1 -1
  117. package/dist/capture/compaction-items-caller.js +7 -5
  118. package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
  119. package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
  120. package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
  121. package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
  122. package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
  123. package/dist/capture/copilot-transcript.js +1 -1
  124. package/dist/capture/extract.js +2 -2
  125. package/dist/capture/failure-caller.d.ts +2 -2
  126. package/dist/capture/failure-caller.js +6 -6
  127. package/dist/capture/failure-reading.d.ts +2 -5
  128. package/dist/capture/failure-reading.js +11 -12
  129. package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
  130. package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
  131. package/dist/capture/pre-compact-caller.d.ts +1 -1
  132. package/dist/capture/pre-compact-caller.js +2 -2
  133. package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
  134. package/dist/{session-digest.js → capture/session-digest.js} +29 -29
  135. package/dist/capture/session-end-caller.d.ts +2 -2
  136. package/dist/capture/session-end-caller.js +1 -1
  137. package/dist/capture/session-texts.d.ts +1 -1
  138. package/dist/capture/session-texts.js +5 -5
  139. package/dist/capture/session-worker.js +6 -4
  140. package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
  141. package/dist/capture/transcript.d.ts +2 -10
  142. package/dist/capture/transcript.js +72 -92
  143. package/dist/capture/working-state.d.ts +0 -3
  144. package/dist/capture/working-state.js +7 -7
  145. package/dist/cli/api-context.d.ts +3 -0
  146. package/dist/cli/api-context.js +6 -0
  147. package/dist/cli/audit-prune.d.ts +28 -0
  148. package/dist/cli/audit-prune.js +40 -0
  149. package/dist/cli/audit.d.ts +2 -2
  150. package/dist/cli/audit.js +92 -88
  151. package/dist/cli/auth.d.ts +2 -1
  152. package/dist/cli/auth.js +69 -53
  153. package/dist/cli/briefs.d.ts +4 -3
  154. package/dist/cli/briefs.js +76 -202
  155. package/dist/cli/card.d.ts +2 -1
  156. package/dist/cli/card.js +55 -54
  157. package/dist/cli/client.d.ts +28 -0
  158. package/dist/{client.js → cli/client.js} +25 -44
  159. package/dist/cli/compact-resume-payload.d.ts +8 -0
  160. package/dist/cli/compact-resume-payload.js +40 -0
  161. package/dist/cli/context.d.ts +1 -13
  162. package/dist/cli/context.js +51 -77
  163. package/dist/cli/continuity.d.ts +6 -5
  164. package/dist/cli/continuity.js +153 -145
  165. package/dist/cli/correction-latency.d.ts +24 -0
  166. package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
  167. package/dist/cli/curate.d.ts +13 -17
  168. package/dist/cli/curate.js +226 -222
  169. package/dist/cli/dag.d.ts +4 -4
  170. package/dist/cli/dag.js +70 -52
  171. package/dist/cli/decisions.d.ts +4 -3
  172. package/dist/cli/decisions.js +129 -253
  173. package/dist/cli/eval.d.ts +1 -3
  174. package/dist/cli/eval.js +56 -42
  175. package/dist/cli/exit.d.ts +6 -0
  176. package/dist/cli/exit.js +11 -0
  177. package/dist/cli/explain.d.ts +1 -2
  178. package/dist/cli/explain.js +39 -21
  179. package/dist/cli/flag-values.d.ts +30 -0
  180. package/dist/cli/flag-values.js +120 -0
  181. package/dist/cli/flags.d.ts +304 -0
  182. package/dist/cli/flags.js +169 -0
  183. package/dist/cli/github.d.ts +14 -0
  184. package/dist/cli/github.js +184 -0
  185. package/dist/cli/goals.d.ts +2 -1
  186. package/dist/cli/goals.js +76 -75
  187. package/dist/cli/hook-runtime.d.ts +31 -0
  188. package/dist/cli/hook-runtime.js +139 -0
  189. package/dist/cli/init.d.ts +2 -1
  190. package/dist/cli/init.js +153 -126
  191. package/dist/cli/install-steps.d.ts +7 -0
  192. package/dist/cli/install-steps.js +101 -0
  193. package/dist/cli/last-sleep.d.ts +3 -1
  194. package/dist/cli/last-sleep.js +12 -7
  195. package/dist/cli/maintenance.d.ts +5 -4
  196. package/dist/cli/maintenance.js +41 -42
  197. package/dist/cli/object-verbs.d.ts +40 -0
  198. package/dist/cli/object-verbs.js +66 -0
  199. package/dist/cli/owner-validation.d.ts +18 -0
  200. package/dist/cli/owner-validation.js +33 -0
  201. package/dist/cli/playbooks.d.ts +4 -3
  202. package/dist/cli/playbooks.js +98 -306
  203. package/dist/cli/print.d.ts +15 -0
  204. package/dist/cli/print.js +82 -0
  205. package/dist/cli/projects.d.ts +2 -3
  206. package/dist/cli/projects.js +56 -51
  207. package/dist/cli/provenance-coverage.d.ts +14 -0
  208. package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
  209. package/dist/cli/quality-repair-once.js +4 -4
  210. package/dist/cli/recall.d.ts +2 -6
  211. package/dist/cli/recall.js +128 -253
  212. package/dist/cli/refine-llm.d.ts +35 -0
  213. package/dist/cli/refine-llm.js +128 -0
  214. package/dist/cli/remember.d.ts +4 -6
  215. package/dist/cli/remember.js +193 -230
  216. package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
  217. package/dist/{scheduler.js → cli/scheduler.js} +22 -22
  218. package/dist/cli/serve.d.ts +1 -1
  219. package/dist/cli/serve.js +46 -7
  220. package/dist/cli/session-hooks.d.ts +11 -19
  221. package/dist/cli/session-hooks.js +263 -258
  222. package/dist/cli/setup.d.ts +4 -3
  223. package/dist/cli/setup.js +55 -37
  224. package/dist/cli/shared.d.ts +14 -118
  225. package/dist/cli/shared.js +26 -400
  226. package/dist/cli/slack.d.ts +2 -1
  227. package/dist/cli/slack.js +46 -74
  228. package/dist/cli/sleep-render.d.ts +4 -0
  229. package/dist/cli/sleep-render.js +61 -0
  230. package/dist/cli/sleep.d.ts +3 -8
  231. package/dist/cli/sleep.js +34 -91
  232. package/dist/cli/status.d.ts +9 -12
  233. package/dist/cli/status.js +86 -131
  234. package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
  235. package/dist/{stdin.js → cli/stdin.js} +8 -9
  236. package/dist/cli/transfer.d.ts +9 -9
  237. package/dist/cli/transfer.js +125 -122
  238. package/dist/cli/usage.js +13 -5
  239. package/dist/cli.d.ts +69 -167
  240. package/dist/cli.js +187 -296
  241. package/dist/connectors/dlq.d.ts +44 -0
  242. package/dist/connectors/dlq.js +30 -0
  243. package/dist/connectors/github/backfill.d.ts +6 -26
  244. package/dist/connectors/github/backfill.js +42 -114
  245. package/dist/connectors/github/deletion.d.ts +6 -21
  246. package/dist/connectors/github/deletion.js +17 -64
  247. package/dist/connectors/github/dlq.d.ts +12 -91
  248. package/dist/connectors/github/dlq.js +23 -140
  249. package/dist/connectors/github/ingest.d.ts +4 -37
  250. package/dist/connectors/github/ingest.js +24 -93
  251. package/dist/connectors/github/octokit-client.d.ts +5 -17
  252. package/dist/connectors/github/octokit-client.js +29 -25
  253. package/dist/connectors/github/ratelimit.d.ts +3 -14
  254. package/dist/connectors/github/ratelimit.js +3 -14
  255. package/dist/connectors/github/scope.d.ts +3 -5
  256. package/dist/connectors/github/scope.js +3 -5
  257. package/dist/connectors/github/signature.d.ts +4 -26
  258. package/dist/connectors/github/signature.js +4 -26
  259. package/dist/connectors/github/tenant-routing.d.ts +4 -26
  260. package/dist/connectors/github/tenant-routing.js +13 -61
  261. package/dist/connectors/github/transform.d.ts +1 -1
  262. package/dist/connectors/github/transform.js +2 -16
  263. package/dist/connectors/github/types.d.ts +4 -16
  264. package/dist/connectors/github/types.js +17 -27
  265. package/dist/connectors/github/webhook.d.ts +5 -18
  266. package/dist/connectors/github/webhook.js +86 -105
  267. package/dist/connectors/slack/backfill.d.ts +5 -18
  268. package/dist/connectors/slack/backfill.js +9 -42
  269. package/dist/connectors/slack/deletion.d.ts +4 -7
  270. package/dist/connectors/slack/deletion.js +20 -49
  271. package/dist/connectors/slack/dlq.d.ts +9 -68
  272. package/dist/connectors/slack/dlq.js +26 -136
  273. package/dist/connectors/slack/ingest.d.ts +4 -18
  274. package/dist/connectors/slack/ingest.js +26 -91
  275. package/dist/connectors/slack/scope.d.ts +2 -8
  276. package/dist/connectors/slack/scope.js +2 -8
  277. package/dist/connectors/slack/signature.d.ts +1 -6
  278. package/dist/connectors/slack/signature.js +2 -1
  279. package/dist/connectors/slack/tenant-routing.d.ts +4 -18
  280. package/dist/connectors/slack/tenant-routing.js +11 -31
  281. package/dist/connectors/slack/transform.d.ts +3 -19
  282. package/dist/connectors/slack/transform.js +2 -18
  283. package/dist/connectors/slack/types.d.ts +4 -10
  284. package/dist/connectors/slack/types.js +5 -16
  285. package/dist/connectors/slack/web-client.js +34 -28
  286. package/dist/connectors/slack/webhook.d.ts +5 -21
  287. package/dist/connectors/slack/webhook.js +80 -108
  288. package/dist/connectors/slack/workspaces.d.ts +8 -41
  289. package/dist/connectors/slack/workspaces.js +8 -58
  290. package/dist/consolidate/conflicts.d.ts +1 -1
  291. package/dist/consolidate/conflicts.js +10 -18
  292. package/dist/consolidate/dag-summary.d.ts +8 -0
  293. package/dist/consolidate/dag-summary.js +41 -0
  294. package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
  295. package/dist/{dag.js → consolidate/dag.js} +49 -131
  296. package/dist/consolidate/decay.d.ts +2 -2
  297. package/dist/consolidate/decay.js +35 -41
  298. package/dist/consolidate/dedupe.d.ts +29 -0
  299. package/dist/consolidate/dedupe.js +103 -0
  300. package/dist/consolidate/flush-units.d.ts +5 -6
  301. package/dist/consolidate/flush-units.js +3 -3
  302. package/dist/consolidate/half-life-migration.d.ts +34 -0
  303. package/dist/consolidate/half-life-migration.js +89 -0
  304. package/dist/consolidate/llm-passes.js +12 -29
  305. package/dist/consolidate/memory-value-weights.d.ts +8 -0
  306. package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
  307. package/dist/consolidate/memory-value.d.ts +45 -0
  308. package/dist/consolidate/memory-value.js +164 -0
  309. package/dist/consolidate/merge.js +65 -83
  310. package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
  311. package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
  312. package/dist/consolidate/physics-pass.js +46 -48
  313. package/dist/consolidate/replay.d.ts +9 -0
  314. package/dist/consolidate/replay.js +84 -0
  315. package/dist/consolidate/run.d.ts +7 -13
  316. package/dist/consolidate/run.js +6 -37
  317. package/dist/consolidate/sleep.d.ts +2 -9
  318. package/dist/consolidate/sleep.js +69 -151
  319. package/dist/consolidate/trace.d.ts +19 -0
  320. package/dist/{trace.js → consolidate/trace.js} +7 -24
  321. package/dist/consolidate/traces.js +40 -51
  322. package/dist/core/ablation.d.ts +15 -0
  323. package/dist/core/ablation.js +49 -0
  324. package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
  325. package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
  326. package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
  327. package/dist/{ambient.js → core/ambient.js} +13 -18
  328. package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
  329. package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
  330. package/dist/{card.d.ts → core/card.d.ts} +4 -1
  331. package/dist/{card.js → core/card.js} +8 -0
  332. package/dist/core/compare.d.ts +32 -0
  333. package/dist/core/compare.js +70 -0
  334. package/dist/{config.d.ts → core/config.d.ts} +14 -28
  335. package/dist/{config.js → core/config.js} +101 -75
  336. package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
  337. package/dist/core/handoff.js +81 -0
  338. package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
  339. package/dist/core/memory.d.ts +183 -0
  340. package/dist/core/memory.js +380 -0
  341. package/dist/core/package-root.d.ts +3 -0
  342. package/dist/core/package-root.js +5 -0
  343. package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
  344. package/dist/{physics-config.js → core/physics-config.js} +3 -8
  345. package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
  346. package/dist/{physics.js → core/physics.js} +60 -122
  347. package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
  348. package/dist/{project-identity.js → core/project-identity.js} +22 -55
  349. package/dist/{project-remote.js → core/project-remote.js} +17 -6
  350. package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
  351. package/dist/core/raw-append-only.d.ts +5 -0
  352. package/dist/core/raw-append-only.js +7 -0
  353. package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
  354. package/dist/{salience.js → core/salience.js} +36 -27
  355. package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
  356. package/dist/{search/types.js → core/search-types.js} +1 -1
  357. package/dist/core/session-digest-row.d.ts +5 -0
  358. package/dist/core/session-digest-row.js +6 -0
  359. package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
  360. package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
  361. package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
  362. package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
  363. package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
  364. package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
  365. package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
  366. package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
  367. package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
  368. package/dist/db/backup.js +1 -1
  369. package/dist/db/busy.d.ts +19 -2
  370. package/dist/db/busy.js +88 -14
  371. package/dist/db/connect.d.ts +11 -2
  372. package/dist/db/connect.js +43 -10
  373. package/dist/db/index.d.ts +9 -0
  374. package/dist/db/index.js +8 -0
  375. package/dist/db/meta.d.ts +4 -0
  376. package/dist/db/meta.js +11 -1
  377. package/dist/db/migrate.d.ts +8 -1
  378. package/dist/db/migrate.js +28 -33
  379. package/dist/db/migrations/types.d.ts +2 -5
  380. package/dist/db/migrations/v08.js +1 -1
  381. package/dist/db/migrations/v14.js +39 -36
  382. package/dist/db/migrations/v15.js +2 -8
  383. package/dist/db/migrations/v16.js +31 -29
  384. package/dist/db/migrations/v17.js +2 -3
  385. package/dist/db/migrations/v18.js +6 -5
  386. package/dist/db/migrations/v19.js +2 -5
  387. package/dist/db/migrations/v20.js +5 -8
  388. package/dist/db/migrations/v22.js +28 -38
  389. package/dist/db/migrations/v23.js +3 -14
  390. package/dist/db/migrations/v24.js +25 -22
  391. package/dist/db/migrations/v25.js +3 -8
  392. package/dist/db/migrations/v26.js +2 -13
  393. package/dist/db/migrations/v27.js +3 -11
  394. package/dist/db/migrations/v28.js +2 -14
  395. package/dist/db/migrations/v29.js +23 -32
  396. package/dist/db/migrations/v30.js +4 -16
  397. package/dist/db/migrations/v31.js +23 -31
  398. package/dist/db/migrations/v32.js +4 -22
  399. package/dist/db/migrations/v33.js +2 -15
  400. package/dist/db/migrations/v34.js +2 -11
  401. package/dist/db/migrations/v35.js +2 -11
  402. package/dist/db/migrations/v36.js +2 -11
  403. package/dist/db/migrations/v37.js +8 -33
  404. package/dist/db/migrations/v38.js +5 -38
  405. package/dist/db/migrations/v39.js +10 -21
  406. package/dist/db/migrations/v40.js +8 -14
  407. package/dist/db/migrations/v41.js +2 -24
  408. package/dist/db/migrations/v43.js +7 -6
  409. package/dist/db/migrations/v44.js +2 -8
  410. package/dist/db/migrations/v45.js +2 -7
  411. package/dist/db/migrations/v46.js +1 -1
  412. package/dist/db/migrations/v47.js +2 -3
  413. package/dist/db/migrations/v48.js +1 -1
  414. package/dist/db/migrations/v49.js +1 -1
  415. package/dist/db/migrations/v50.js +8 -7
  416. package/dist/db/migrations/v51.js +1 -1
  417. package/dist/db/migrations/v52.js +1 -1
  418. package/dist/db/open.d.ts +11 -1
  419. package/dist/db/open.js +37 -4
  420. package/dist/db/physics-state.d.ts +23 -0
  421. package/dist/{physics-state.js → db/physics-state.js} +34 -52
  422. package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
  423. package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
  424. package/dist/db/request-stores.d.ts +15 -2
  425. package/dist/db/request-stores.js +37 -15
  426. package/dist/db/tables.d.ts +2 -0
  427. package/dist/db/tables.js +6 -0
  428. package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
  429. package/dist/{vector-store.js → db/vector-store.js} +83 -51
  430. package/dist/db/wal-checkpointer.d.ts +11 -0
  431. package/dist/db/wal-checkpointer.js +92 -0
  432. package/dist/doctor.js +176 -152
  433. package/dist/entry/json-hooks.d.ts +1 -1
  434. package/dist/entry/json-hooks.js +1 -1
  435. package/dist/entry/project-identity.d.ts +1 -1
  436. package/dist/entry/project-identity.js +1 -1
  437. package/dist/entry/session-text.d.ts +3 -3
  438. package/dist/entry/session-text.js +5 -4
  439. package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
  440. package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
  441. package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
  442. package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
  443. package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
  444. package/dist/{eval.js → eval/eval.js} +35 -55
  445. package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
  446. package/dist/{judgment.js → eval/judgment.js} +23 -20
  447. package/dist/extensions/openclaw-plugin/index.js +2 -3
  448. package/dist/graph/delta.d.ts +3 -2
  449. package/dist/graph/delta.js +9 -23
  450. package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
  451. package/dist/{graph-extract.js → graph/extract.js} +40 -81
  452. package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
  453. package/dist/{graph-recall.js → graph/recall.js} +65 -108
  454. package/dist/graph/stream.d.ts +38 -0
  455. package/dist/{graph-stream.js → graph/stream.js} +20 -41
  456. package/dist/graph/view.d.ts +50 -0
  457. package/dist/graph/view.js +265 -0
  458. package/dist/graph/write.d.ts +4 -76
  459. package/dist/graph/write.js +13 -397
  460. package/dist/hooks/codex-session.js +1 -1
  461. package/dist/hooks/codex-wrapper.js +16 -17
  462. package/dist/hooks/copilot.d.ts +1 -8
  463. package/dist/hooks/copilot.js +16 -16
  464. package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
  465. package/dist/{cli → hooks}/hook-blocks.js +38 -125
  466. package/dist/hooks/json-hooks.d.ts +5 -37
  467. package/dist/hooks/json-hooks.js +49 -179
  468. package/dist/hooks/opencode.d.ts +0 -38
  469. package/dist/hooks/opencode.js +44 -103
  470. package/dist/hooks/shared.d.ts +8 -21
  471. package/dist/hooks/shared.js +30 -25
  472. package/dist/importers/core.d.ts +13 -42
  473. package/dist/importers/core.js +48 -64
  474. package/dist/importers/markdown-parse.d.ts +9 -32
  475. package/dist/importers/markdown-parse.js +10 -44
  476. package/dist/importers/markdown.js +5 -13
  477. package/dist/importers/sources.js +57 -81
  478. package/dist/importers/vault.d.ts +2 -8
  479. package/dist/importers/vault.js +95 -172
  480. package/dist/index.d.ts +26 -22
  481. package/dist/index.js +25 -21
  482. package/dist/learn/autolearn.d.ts +29 -0
  483. package/dist/{autolearn.js → learn/autolearn.js} +26 -51
  484. package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
  485. package/dist/{churn-git.js → learn/churn-git.js} +6 -4
  486. package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
  487. package/dist/learn/extract.js +123 -0
  488. package/dist/learn/forward-claim-detector.d.ts +12 -0
  489. package/dist/learn/forward-claim-detector.js +60 -0
  490. package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
  491. package/dist/{invalidation.js → learn/invalidation.js} +92 -125
  492. package/dist/mcp/admin-tools.d.ts +1 -1
  493. package/dist/mcp/admin-tools.js +39 -64
  494. package/dist/mcp/format.d.ts +5 -5
  495. package/dist/mcp/format.js +7 -6
  496. package/dist/mcp/framing.d.ts +6 -0
  497. package/dist/mcp/framing.js +11 -3
  498. package/dist/mcp/memory-tools.js +10 -35
  499. package/dist/mcp/protocol.d.ts +14 -36
  500. package/dist/mcp/protocol.js +10 -19
  501. package/dist/mcp/recall-tools.d.ts +2 -2
  502. package/dist/mcp/recall-tools.js +70 -52
  503. package/dist/mcp/request.d.ts +3 -11
  504. package/dist/mcp/request.js +71 -85
  505. package/dist/mcp/server.d.ts +3 -9
  506. package/dist/mcp/server.js +6 -17
  507. package/dist/mcp/session-state.d.ts +2 -3
  508. package/dist/mcp/session-state.js +7 -13
  509. package/dist/mcp/shared-gate.js +1 -1
  510. package/dist/mcp/stdio.d.ts +2 -6
  511. package/dist/mcp/stdio.js +112 -38
  512. package/dist/mcp/tool-args.js +2 -1
  513. package/dist/mcp/tools.js +7 -5
  514. package/dist/objects/customer-notes.d.ts +44 -0
  515. package/dist/objects/customer-notes.js +71 -0
  516. package/dist/objects/decisions.d.ts +41 -0
  517. package/dist/objects/decisions.js +63 -0
  518. package/dist/objects/descriptor.d.ts +52 -0
  519. package/dist/objects/descriptor.js +4 -0
  520. package/dist/objects/fields.d.ts +15 -0
  521. package/dist/objects/fields.js +21 -0
  522. package/dist/objects/incidents.d.ts +45 -0
  523. package/dist/objects/incidents.js +96 -0
  524. package/dist/objects/lifecycle.d.ts +27 -0
  525. package/dist/objects/lifecycle.js +96 -0
  526. package/dist/objects/policies.d.ts +60 -0
  527. package/dist/objects/policies.js +102 -0
  528. package/dist/objects/processes.d.ts +43 -0
  529. package/dist/objects/processes.js +92 -0
  530. package/dist/objects/project-briefs.d.ts +63 -0
  531. package/dist/objects/project-briefs.js +194 -0
  532. package/dist/objects/skills.d.ts +51 -0
  533. package/dist/objects/skills.js +110 -0
  534. package/dist/postinstall.js +10 -21
  535. package/dist/predictions/planning-fallacy.d.ts +14 -109
  536. package/dist/predictions/planning-fallacy.js +4 -129
  537. package/dist/rerankers/clef.d.ts +2 -6
  538. package/dist/rerankers/clef.js +28 -76
  539. package/dist/rerankers/cross-encoder.d.ts +0 -7
  540. package/dist/rerankers/cross-encoder.js +18 -28
  541. package/dist/rerankers/index.js +8 -7
  542. package/dist/rerankers/jev.d.ts +1 -4
  543. package/dist/rerankers/jev.js +36 -52
  544. package/dist/rerankers/llm.d.ts +2 -13
  545. package/dist/rerankers/llm.js +42 -59
  546. package/dist/rerankers/outage-warning.d.ts +8 -0
  547. package/dist/rerankers/outage-warning.js +32 -0
  548. package/dist/rerankers/remote.d.ts +4 -0
  549. package/dist/rerankers/remote.js +25 -0
  550. package/dist/rerankers/types.d.ts +3 -15
  551. package/dist/search/as-of.d.ts +1 -1
  552. package/dist/search/bm25-search.d.ts +2 -2
  553. package/dist/search/bm25-search.js +7 -7
  554. package/dist/search/bm25.d.ts +1 -1
  555. package/dist/search/bm25.js +1 -1
  556. package/dist/search/boosts.d.ts +5 -3
  557. package/dist/search/boosts.js +36 -15
  558. package/dist/search/breakdown.d.ts +2 -2
  559. package/dist/search/breakdown.js +2 -1
  560. package/dist/search/explain.d.ts +1 -1
  561. package/dist/search/explain.js +3 -2
  562. package/dist/search/finalize.d.ts +2 -2
  563. package/dist/search/finalize.js +4 -3
  564. package/dist/search/fusion.d.ts +1 -1
  565. package/dist/search/fusion.js +3 -3
  566. package/dist/search/goal-boost.d.ts +23 -0
  567. package/dist/search/goal-boost.js +90 -0
  568. package/dist/search/hybrid-score.d.ts +2 -2
  569. package/dist/search/hybrid-score.js +1 -1
  570. package/dist/search/hybrid.d.ts +6 -4
  571. package/dist/search/hybrid.js +11 -8
  572. package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
  573. package/dist/{multihop.js → search/multihop.js} +9 -8
  574. package/dist/search/path-context.d.ts +11 -0
  575. package/dist/{path-context.js → search/path-context.js} +8 -19
  576. package/dist/search/physics-search.d.ts +4 -4
  577. package/dist/search/physics-search.js +25 -22
  578. package/dist/search/rerank.d.ts +3 -3
  579. package/dist/search/rerank.js +4 -3
  580. package/dist/search/rrf.d.ts +15 -0
  581. package/dist/search/rrf.js +36 -0
  582. package/dist/search/temporal.d.ts +1 -1
  583. package/dist/search/temporal.js +5 -2
  584. package/dist/search/vector.d.ts +10 -3
  585. package/dist/search/vector.js +51 -15
  586. package/dist/server/auth.d.ts +10 -29
  587. package/dist/server/auth.js +57 -42
  588. package/dist/server/boot.d.ts +5 -0
  589. package/dist/server/boot.js +432 -0
  590. package/dist/server/client-ip.d.ts +8 -20
  591. package/dist/server/client-ip.js +23 -34
  592. package/dist/server/cursor.d.ts +1 -1
  593. package/dist/server/cursor.js +2 -3
  594. package/dist/server/deadline.d.ts +13 -0
  595. package/dist/server/deadline.js +45 -0
  596. package/dist/server/defaults.d.ts +3 -0
  597. package/dist/server/defaults.js +4 -0
  598. package/dist/server/key-check-bounds.d.ts +9 -0
  599. package/dist/server/key-check-bounds.js +46 -0
  600. package/dist/server/lifecycle.d.ts +5 -4
  601. package/dist/server/lifecycle.js +20 -5
  602. package/dist/server/mcp-http.d.ts +1 -4
  603. package/dist/server/mcp-http.js +44 -68
  604. package/dist/server/rate-limit.d.ts +21 -0
  605. package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
  606. package/dist/server/ready.d.ts +7 -0
  607. package/dist/server/ready.js +38 -0
  608. package/dist/server/request.d.ts +14 -12
  609. package/dist/server/request.js +71 -28
  610. package/dist/server/route-table.d.ts +15 -0
  611. package/dist/server/route-table.js +202 -0
  612. package/dist/server/routes/admin.js +29 -30
  613. package/dist/server/routes/customer-notes.d.ts +5 -5
  614. package/dist/server/routes/customer-notes.js +35 -105
  615. package/dist/server/routes/decisions.d.ts +5 -5
  616. package/dist/server/routes/decisions.js +45 -115
  617. package/dist/server/routes/incidents.d.ts +5 -5
  618. package/dist/server/routes/incidents.js +44 -105
  619. package/dist/server/routes/memories.js +21 -43
  620. package/dist/server/routes/object-routes.d.ts +35 -0
  621. package/dist/server/routes/object-routes.js +72 -0
  622. package/dist/server/routes/policies.d.ts +6 -6
  623. package/dist/server/routes/policies.js +42 -134
  624. package/dist/server/routes/predictions.js +35 -63
  625. package/dist/server/routes/processes.d.ts +5 -5
  626. package/dist/server/routes/processes.js +44 -134
  627. package/dist/server/routes/project-briefs.d.ts +6 -6
  628. package/dist/server/routes/project-briefs.js +41 -120
  629. package/dist/server/routes/recall.js +21 -44
  630. package/dist/server/routes/skills.d.ts +6 -6
  631. package/dist/server/routes/skills.js +40 -138
  632. package/dist/server/server-detect.d.ts +28 -0
  633. package/dist/server/server-detect.js +156 -0
  634. package/dist/server/sleep-child.d.ts +2 -0
  635. package/dist/server/sleep-child.js +19 -0
  636. package/dist/server/sleep-offload.d.ts +20 -0
  637. package/dist/server/sleep-offload.js +73 -0
  638. package/dist/server/tls.d.ts +6 -0
  639. package/dist/server/tls.js +24 -0
  640. package/dist/server/types.d.ts +35 -14
  641. package/dist/server/validation.d.ts +6 -5
  642. package/dist/server/validation.js +16 -34
  643. package/dist/server.d.ts +39 -61
  644. package/dist/server.js +26 -569
  645. package/dist/sharing/global-store.d.ts +19 -0
  646. package/dist/sharing/global-store.js +75 -0
  647. package/dist/sharing/global-sync.d.ts +6 -0
  648. package/dist/sharing/global-sync.js +80 -0
  649. package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
  650. package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
  651. package/dist/sharing/scope.d.ts +7 -0
  652. package/dist/{scope.js → sharing/scope.js} +5 -12
  653. package/dist/sharing/search-both.d.ts +60 -0
  654. package/dist/sharing/search-both.js +138 -0
  655. package/dist/sharing/share.d.ts +38 -0
  656. package/dist/sharing/share.js +226 -0
  657. package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
  658. package/dist/{ambient-store.js → store/ambient.js} +11 -16
  659. package/dist/store/audit-event.d.ts +15 -17
  660. package/dist/store/audit-event.js +9 -16
  661. package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
  662. package/dist/{audit.js → store/audit.js} +95 -18
  663. package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
  664. package/dist/{auth.js → store/auth.js} +108 -99
  665. package/dist/store/candidates.d.ts +41 -13
  666. package/dist/store/candidates.js +141 -60
  667. package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
  668. package/dist/{card-detail.js → store/card-detail.js} +3 -2
  669. package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
  670. package/dist/{store-cards.js → store/cards.js} +133 -248
  671. package/dist/store/compactions.d.ts +78 -0
  672. package/dist/store/compactions.js +93 -0
  673. package/dist/store/conflicts.d.ts +26 -26
  674. package/dist/store/conflicts.js +194 -222
  675. package/dist/store/connectors/github.d.ts +84 -0
  676. package/dist/store/connectors/github.js +180 -0
  677. package/dist/store/connectors/slack.d.ts +69 -0
  678. package/dist/store/connectors/slack.js +177 -0
  679. package/dist/store/dashboard-reads.d.ts +27 -0
  680. package/dist/store/dashboard-reads.js +88 -0
  681. package/dist/store/delete-and-batch.d.ts +27 -51
  682. package/dist/store/delete-and-batch.js +100 -92
  683. package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
  684. package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
  685. package/dist/store/descendant-page.d.ts +12 -0
  686. package/dist/store/descendant-page.js +99 -0
  687. package/dist/store/diagnostics.d.ts +47 -0
  688. package/dist/store/diagnostics.js +44 -0
  689. package/dist/store/doctor-reads.d.ts +16 -0
  690. package/dist/store/doctor-reads.js +19 -0
  691. package/dist/store/dormant.d.ts +105 -0
  692. package/dist/store/dormant.js +241 -0
  693. package/dist/store/embeddings/index.d.ts +36 -0
  694. package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
  695. package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
  696. package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
  697. package/dist/store/embeddings/provider.d.ts +40 -0
  698. package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
  699. package/dist/store/entry-reads.d.ts +66 -63
  700. package/dist/store/entry-reads.js +159 -121
  701. package/dist/store/entry-row.d.ts +14 -37
  702. package/dist/store/entry-row.js +37 -45
  703. package/dist/store/entry-writes.d.ts +40 -17
  704. package/dist/store/entry-writes.js +105 -41
  705. package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
  706. package/dist/{failure-log.js → store/failure-log.js} +9 -2
  707. package/dist/store/goals.d.ts +96 -0
  708. package/dist/store/goals.js +260 -0
  709. package/dist/store/graph-queue.d.ts +13 -0
  710. package/dist/store/graph-queue.js +70 -0
  711. package/dist/store/graph-reads.d.ts +41 -0
  712. package/dist/{graph/read.js → store/graph-reads.js} +72 -162
  713. package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
  714. package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
  715. package/dist/store/graph-view-rows.d.ts +13 -0
  716. package/dist/store/graph-view-rows.js +68 -0
  717. package/dist/store/graph-writes.d.ts +33 -0
  718. package/dist/store/graph-writes.js +232 -0
  719. package/dist/store/half-life.d.ts +35 -0
  720. package/dist/store/half-life.js +75 -0
  721. package/dist/store/handoffs.d.ts +6 -12
  722. package/dist/store/handoffs.js +54 -63
  723. package/dist/store/index-and-stats.d.ts +14 -20
  724. package/dist/store/index-and-stats.js +74 -119
  725. package/dist/store/index.d.ts +4 -0
  726. package/dist/store/index.js +3 -0
  727. package/dist/store/key-audit.d.ts +2 -2
  728. package/dist/store/key-audit.js +4 -4
  729. package/dist/store/key-writes.d.ts +12 -5
  730. package/dist/store/key-writes.js +30 -4
  731. package/dist/store/ledger-turn.d.ts +17 -0
  732. package/dist/store/ledger-turn.js +27 -0
  733. package/dist/store/markdown.d.ts +3 -7
  734. package/dist/store/markdown.js +25 -23
  735. package/dist/store/mirrors.d.ts +7 -13
  736. package/dist/store/mirrors.js +52 -47
  737. package/dist/store/object-types.d.ts +189 -0
  738. package/dist/store/object-types.js +4 -0
  739. package/dist/store/open.d.ts +6 -4
  740. package/dist/store/open.js +30 -36
  741. package/dist/store/planning-fallacy-evidence.d.ts +14 -0
  742. package/dist/store/planning-fallacy-evidence.js +52 -0
  743. package/dist/store/port.d.ts +649 -0
  744. package/dist/store/port.js +17 -0
  745. package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
  746. package/dist/{predictions/store.js → store/predictions.js} +88 -184
  747. package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
  748. package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
  749. package/dist/{quarantine.js → store/quarantine.js} +64 -22
  750. package/dist/store/raw-archive.d.ts +14 -0
  751. package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
  752. package/dist/store/recall-scope.d.ts +78 -0
  753. package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
  754. package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
  755. package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
  756. package/dist/store/rejected-values.d.ts +55 -0
  757. package/dist/store/rejected-values.js +150 -0
  758. package/dist/store/rejection.d.ts +54 -0
  759. package/dist/{rejection.js → store/rejection.js} +16 -67
  760. package/dist/store/report-reads.d.ts +6 -0
  761. package/dist/store/report-reads.js +29 -0
  762. package/dist/store/rows.d.ts +11 -22
  763. package/dist/store/rows.js +52 -43
  764. package/dist/store/rule-sql.d.ts +5 -0
  765. package/dist/store/rule-sql.js +37 -0
  766. package/dist/store/search-rows.d.ts +22 -42
  767. package/dist/store/search-rows.js +55 -78
  768. package/dist/store/sessions.d.ts +23 -49
  769. package/dist/store/sessions.js +96 -118
  770. package/dist/store/sqlite/commit-watch.d.ts +4 -0
  771. package/dist/store/sqlite/commit-watch.js +29 -0
  772. package/dist/store/sqlite/connector-events-group.d.ts +5 -0
  773. package/dist/store/sqlite/connector-events-group.js +50 -0
  774. package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
  775. package/dist/store/sqlite/connector-writes-group.js +65 -0
  776. package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
  777. package/dist/store/sqlite/dag-reads-group.js +45 -0
  778. package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
  779. package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
  780. package/dist/store/sqlite/error-codec.d.ts +17 -0
  781. package/dist/store/sqlite/error-codec.js +61 -0
  782. package/dist/store/sqlite/executor-counts.d.ts +10 -0
  783. package/dist/store/sqlite/executor-counts.js +11 -0
  784. package/dist/store/sqlite/executor.d.ts +29 -0
  785. package/dist/store/sqlite/executor.js +287 -0
  786. package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
  787. package/dist/store/sqlite/graph-reads-group.js +18 -0
  788. package/dist/store/sqlite/local.d.ts +21 -0
  789. package/dist/store/sqlite/local.js +39 -0
  790. package/dist/store/sqlite/object-rows.d.ts +102 -0
  791. package/dist/store/sqlite/object-rows.js +221 -0
  792. package/dist/store/sqlite/objects-group.d.ts +20 -0
  793. package/dist/store/sqlite/objects-group.js +316 -0
  794. package/dist/store/sqlite/predictions-group.d.ts +5 -0
  795. package/dist/store/sqlite/predictions-group.js +28 -0
  796. package/dist/store/sqlite/quarantine-group.d.ts +5 -0
  797. package/dist/store/sqlite/quarantine-group.js +38 -0
  798. package/dist/store/sqlite/store.d.ts +23 -0
  799. package/dist/store/sqlite/store.js +294 -0
  800. package/dist/store/sqlite/vector-pack.d.ts +18 -0
  801. package/dist/store/sqlite/vector-pack.js +46 -0
  802. package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
  803. package/dist/store/sqlite/vector-reads-group.js +23 -0
  804. package/dist/store/sqlite/worker-entry.d.ts +2 -0
  805. package/dist/store/sqlite/worker-entry.js +8 -0
  806. package/dist/store/sqlite/worker-jobs.d.ts +5 -0
  807. package/dist/store/sqlite/worker-jobs.js +116 -0
  808. package/dist/store/sqlite/worker-ops.d.ts +135 -0
  809. package/dist/store/sqlite/worker-ops.js +93 -0
  810. package/dist/store/sqlite/worker-store.d.ts +8 -0
  811. package/dist/store/sqlite/worker-store.js +79 -0
  812. package/dist/store/summaries.d.ts +11 -72
  813. package/dist/store/summaries.js +47 -186
  814. package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
  815. package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
  816. package/dist/store/tenant-lookup.d.ts +6 -1
  817. package/dist/store/tenant-lookup.js +7 -0
  818. package/dist/store/tenant.d.ts +11 -0
  819. package/dist/store/tenant.js +28 -0
  820. package/dist/store/token-ledger-rows.d.ts +61 -0
  821. package/dist/store/token-ledger-rows.js +68 -0
  822. package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
  823. package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
  824. package/dist/store/tombstone-checks.d.ts +12 -0
  825. package/dist/store/tombstone-checks.js +31 -0
  826. package/dist/store/usage-reports.d.ts +7 -0
  827. package/dist/store/usage-reports.js +18 -0
  828. package/dist/store/vector-index.d.ts +46 -0
  829. package/dist/store/vector-index.js +170 -0
  830. package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
  831. package/dist/store/working-memory.js +118 -0
  832. package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
  833. package/dist/{yaml.js → store/yaml.js} +2 -6
  834. package/dist/support-bundle.d.ts +1 -1
  835. package/dist/support-bundle.js +19 -37
  836. package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
  837. package/dist/{gated-write.js → trust/gated-write.js} +6 -6
  838. package/dist/trust/quarantine.d.ts +4 -0
  839. package/dist/trust/quarantine.js +8 -0
  840. package/dist/trust/reject-flow.d.ts +23 -0
  841. package/dist/trust/reject-flow.js +65 -0
  842. package/dist/util/anthropic-messages.d.ts +31 -0
  843. package/dist/util/anthropic-messages.js +58 -0
  844. package/dist/util/atomic-write.d.ts +4 -0
  845. package/dist/util/atomic-write.js +138 -0
  846. package/dist/util/capped-json.d.ts +6 -0
  847. package/dist/util/capped-json.js +46 -0
  848. package/dist/util/crash-handlers.d.ts +12 -0
  849. package/dist/util/crash-handlers.js +72 -0
  850. package/dist/{env.d.ts → util/env.d.ts} +27 -7
  851. package/dist/{env.js → util/env.js} +33 -8
  852. package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
  853. package/dist/util/home-path.js +69 -0
  854. package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
  855. package/dist/util/http-retry.js +103 -0
  856. package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
  857. package/dist/{http-util.js → util/http-util.js} +31 -11
  858. package/dist/util/json.d.ts +17 -0
  859. package/dist/util/json.js +25 -0
  860. package/dist/{log.d.ts → util/log.d.ts} +7 -3
  861. package/dist/{log.js → util/log.js} +36 -11
  862. package/dist/util/real-path.d.ts +3 -0
  863. package/dist/util/real-path.js +15 -0
  864. package/dist/util/request-scope.d.ts +28 -0
  865. package/dist/util/request-scope.js +48 -0
  866. package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
  867. package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
  868. package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
  869. package/dist/util/stored-json.d.ts +9 -0
  870. package/dist/util/stored-json.js +8 -0
  871. package/dist/util/time.d.ts +2 -0
  872. package/dist/util/time.js +3 -0
  873. package/dist/util/token-text.d.ts +15 -0
  874. package/dist/util/token-text.js +20 -0
  875. package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
  876. package/dist/util/transcript-tail.js +49 -0
  877. package/dist/util/version.d.ts +11 -0
  878. package/dist/util/version.js +26 -0
  879. package/extensions/openclaw-plugin/index.ts +2 -6
  880. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  881. package/extensions/openclaw-plugin/package.json +1 -1
  882. package/openclaw.plugin.json +1 -1
  883. package/package.json +2 -2
  884. package/dist/ablation.d.ts +0 -102
  885. package/dist/ablation.js +0 -136
  886. package/dist/api.d.ts +0 -26
  887. package/dist/api.js +0 -29
  888. package/dist/audit-prune.d.ts +0 -62
  889. package/dist/audit-prune.js +0 -107
  890. package/dist/autolearn.d.ts +0 -56
  891. package/dist/client.d.ts +0 -48
  892. package/dist/compare.d.ts +0 -86
  893. package/dist/compare.js +0 -117
  894. package/dist/connectors/github/cli-impl.d.ts +0 -25
  895. package/dist/connectors/github/cli-impl.js +0 -227
  896. package/dist/connectors/github/idempotency.d.ts +0 -19
  897. package/dist/connectors/github/idempotency.js +0 -27
  898. package/dist/connectors/slack/idempotency.d.ts +0 -17
  899. package/dist/connectors/slack/idempotency.js +0 -31
  900. package/dist/correction-latency.d.ts +0 -36
  901. package/dist/customer-notes.d.ts +0 -96
  902. package/dist/customer-notes.js +0 -336
  903. package/dist/db.d.ts +0 -9
  904. package/dist/db.js +0 -8
  905. package/dist/decisions.d.ts +0 -94
  906. package/dist/decisions.js +0 -326
  907. package/dist/dedupe.d.ts +0 -75
  908. package/dist/dedupe.js +0 -169
  909. package/dist/dormant.d.ts +0 -93
  910. package/dist/dormant.js +0 -137
  911. package/dist/embedding-provider.d.ts +0 -77
  912. package/dist/embeddings.d.ts +0 -101
  913. package/dist/extract.js +0 -133
  914. package/dist/forward-claim-detector.d.ts +0 -36
  915. package/dist/forward-claim-detector.js +0 -112
  916. package/dist/goals.d.ts +0 -173
  917. package/dist/goals.js +0 -448
  918. package/dist/graph/read.d.ts +0 -73
  919. package/dist/graph/rows.d.ts +0 -45
  920. package/dist/graph/types.js +0 -11
  921. package/dist/graph-stream.d.ts +0 -70
  922. package/dist/graph-view.d.ts +0 -73
  923. package/dist/graph-view.js +0 -333
  924. package/dist/half-life-migration.d.ts +0 -63
  925. package/dist/half-life-migration.js +0 -182
  926. package/dist/handoff.js +0 -68
  927. package/dist/home-path.js +0 -24
  928. package/dist/http-retry.js +0 -51
  929. package/dist/incidents.d.ts +0 -103
  930. package/dist/incidents.js +0 -349
  931. package/dist/instruction-detect.js +0 -27
  932. package/dist/json.d.ts +0 -7
  933. package/dist/json.js +0 -11
  934. package/dist/ledger-db.d.ts +0 -10
  935. package/dist/ledger-db.js +0 -42
  936. package/dist/memory-value-weights.d.ts +0 -19
  937. package/dist/memory-value.d.ts +0 -113
  938. package/dist/memory-value.js +0 -250
  939. package/dist/memory.d.ts +0 -294
  940. package/dist/memory.js +0 -522
  941. package/dist/owner-validation.d.ts +0 -42
  942. package/dist/owner-validation.js +0 -56
  943. package/dist/path-context.d.ts +0 -24
  944. package/dist/physics-state.d.ts +0 -39
  945. package/dist/policies.d.ts +0 -151
  946. package/dist/policies.js +0 -434
  947. package/dist/processes.d.ts +0 -108
  948. package/dist/processes.js +0 -371
  949. package/dist/project-briefs.d.ts +0 -128
  950. package/dist/project-briefs.js +0 -523
  951. package/dist/provenance-coverage.d.ts +0 -18
  952. package/dist/rate-limit.d.ts +0 -34
  953. package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
  954. package/dist/raw-archive.d.ts +0 -24
  955. package/dist/recall-history.d.ts +0 -131
  956. package/dist/recall-history.js +0 -227
  957. package/dist/recall-scope.d.ts +0 -138
  958. package/dist/refine-llm.d.ts +0 -61
  959. package/dist/refine-llm.js +0 -167
  960. package/dist/reject-flow.d.ts +0 -69
  961. package/dist/reject-flow.js +0 -260
  962. package/dist/rejection.d.ts +0 -100
  963. package/dist/replay.d.ts +0 -41
  964. package/dist/replay.js +0 -122
  965. package/dist/rrf.d.ts +0 -43
  966. package/dist/rrf.js +0 -61
  967. package/dist/scope.d.ts +0 -14
  968. package/dist/server-detect.d.ts +0 -72
  969. package/dist/server-detect.js +0 -222
  970. package/dist/session-owners.d.ts +0 -7
  971. package/dist/session-owners.js +0 -54
  972. package/dist/shared.d.ts +0 -186
  973. package/dist/shared.js +0 -540
  974. package/dist/skills.d.ts +0 -101
  975. package/dist/skills.js +0 -367
  976. package/dist/store/entry-writes-group.d.ts +0 -9
  977. package/dist/store/vector-writes.d.ts +0 -6
  978. package/dist/store/vector-writes.js +0 -59
  979. package/dist/store-port.d.ts +0 -262
  980. package/dist/store-port.js +0 -178
  981. package/dist/tenant.d.ts +0 -25
  982. package/dist/tenant.js +0 -43
  983. package/dist/trace.d.ts +0 -34
  984. package/dist/transcript-tail.js +0 -48
  985. package/dist/version.d.ts +0 -26
  986. package/dist/version.js +0 -41
  987. package/dist/working-memory.js +0 -154
  988. /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
  989. /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
  990. /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
  991. /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
  992. /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
  993. /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
  994. /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
  995. /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
  996. /package/dist/{api-errors.js → core/api-errors.js} +0 -0
  997. /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
  998. /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
  999. /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
  1000. /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
  1001. /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
  1002. /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
  1003. /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
  1004. /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
  1005. /package/dist/{escape.js → util/escape.js} +0 -0
  1006. /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
  1007. /package/dist/{keyset.js → util/keyset.js} +0 -0
  1008. /package/dist/{same-text.js → util/same-text.js} +0 -0
  1009. /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
  1010. /package/dist/{db → util}/sqlite-blocked.js +0 -0
  1011. /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
  1012. /package/dist/{tokenize.js → util/tokenize.js} +0 -0
  1013. /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
  1014. /package/dist/{write-budget.js → util/write-budget.js} +0 -0
@@ -1,96 +1,23 @@
1
- import { adminActor } from '../../api.js';
2
- import { openHippoDb, closeHippoDb } from '../../db.js';
1
+ import { adminActor } from '../../api/index.js';
2
+ import { bumpSlackDlqRetryCount, listSlackDlq, markSlackDlqRetried, slackDlqEntry, } from '../../store/connectors/slack.js';
3
+ import { replayFailed } from '../dlq.js';
3
4
  import { ingestMessage } from './ingest.js';
4
- import { resolveTenantForTeam } from './tenant-routing.js';
5
+ import { resolveTenantForSlackTeam } from './tenant-routing.js';
5
6
  import { verifySlackSignature } from './signature.js';
6
7
  import { isSlackEventEnvelope, isSlackMessageEvent } from './types.js';
7
8
  import { handleMessageDeleted } from './deletion.js';
8
- import { redactPayload, DLQ_REDACTED_NOTE } from '../../secret-detect.js';
9
- export function writeToDlq(db, opts) {
10
- const rawPayload = redactPayload(opts.rawPayload);
11
- // A redacted body can never match its signature, so the row keeps none and replay needs --force.
12
- const redacted = rawPayload !== opts.rawPayload;
13
- const result = db
14
- .prepare(`INSERT INTO slack_dlq
15
- (tenant_id, team_id, raw_payload, error, received_at, bucket, signature, slack_timestamp)
16
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
17
- .run(opts.tenantId ?? '__unroutable__', opts.teamId ?? null, rawPayload, redacted ? `${opts.error}; ${DLQ_REDACTED_NOTE}` : opts.error, new Date().toISOString(), opts.bucket ?? 'parse_error', redacted ? null : opts.signature ?? null, opts.slackTimestamp ?? null);
18
- return Number(result.lastInsertRowid);
19
- }
20
- export function listDlq(db, opts) {
21
- // SAFETY: row shape matches the columns named in the SELECT below.
22
- const rows = db
23
- .prepare(`SELECT id, tenant_id, team_id, raw_payload, error, received_at, retried_at,
24
- bucket, retry_count, signature, slack_timestamp
25
- FROM slack_dlq
26
- WHERE tenant_id = ?
27
- ORDER BY received_at ASC
28
- LIMIT ?`)
29
- .all(opts.tenantId, opts.limit ?? 100);
30
- return rows.map(rowToItem);
31
- }
32
- export function getDlqEntry(db, id) {
33
- // SAFETY: row shape matches the columns named in the SELECT below.
34
- const row = db
35
- .prepare(`SELECT id, tenant_id, team_id, raw_payload, error, received_at, retried_at,
36
- bucket, retry_count, signature, slack_timestamp
37
- FROM slack_dlq
38
- WHERE id = ?`)
39
- .get(id);
9
+ import { errorMessage } from '../../util/log.js';
10
+ /** Slack's dead-letter table; `teamId` and `slackTimestamp` are the columns only it has. */
11
+ export const slackDlq = {
12
+ letter: (row) => ({ connector: 'slack', ...row }),
13
+ list: listSlackDlq,
14
+ };
15
+ /** Replay a DLQ row via the normal ingest path (`hippo slack dlq replay <id> [--force]`), re-verifying the signature with the CURRENT secret unless forced.
16
+ * Rows with a NULL signature need --force; replays use today's routing, because the DLQ exists to be drained after the operator fixed routing. */
17
+ export async function replayDlqEntry(ctx, id, opts = {}) {
18
+ const row = slackDlqEntry(ctx.hippoRoot, id);
40
19
  if (!row)
41
- return null;
42
- return rowToItem(row);
43
- }
44
- function rowToItem(r) {
45
- return {
46
- id: Number(r.id),
47
- tenantId: String(r.tenant_id),
48
- teamId: r.team_id == null ? null : String(r.team_id),
49
- rawPayload: String(r.raw_payload),
50
- error: String(r.error),
51
- receivedAt: String(r.received_at),
52
- retriedAt: r.retried_at == null ? null : String(r.retried_at),
53
- bucket: r.bucket == null ? 'parse_error' : String(r.bucket),
54
- retryCount: Number(r.retry_count ?? 0),
55
- signature: r.signature == null ? null : String(r.signature),
56
- slackTimestamp: r.slack_timestamp == null ? null : String(r.slack_timestamp),
57
- };
58
- }
59
- export function markDlqRetried(db, id) {
60
- db.prepare(`UPDATE slack_dlq SET retried_at = ?, retry_count = retry_count + 1 WHERE id = ?`)
61
- .run(new Date().toISOString(), id);
62
- }
63
- /**
64
- * Replay a DLQ row through the normal ingest path. Used by `hippo slack dlq
65
- * replay <id> [--force]`.
66
- *
67
- * Behavior:
68
- * 1. SELECT the row.
69
- * 2. If signature + slack_timestamp are present and `signingSecret` is set,
70
- * re-verify with the CURRENT secret (not previous). Failure → bail unless
71
- * --force. Legacy rows from before v19 may have NULL signature; those
72
- * require --force to replay safely.
73
- * 3. Re-parse the raw_payload and dispatch to ingestMessage / handleMessageDeleted.
74
- * 4. On success: mark retried_at, increment retry_count.
75
- * 5. On failure: increment retry_count only, leave the row.
76
- *
77
- * The replay always uses the routing the deployment has NOW (current
78
- * slack_workspaces table + env), not whatever was in effect when the original
79
- * envelope was DLQed. That is intentional: the DLQ exists to be drained after
80
- * the operator fixed the routing.
81
- */
82
- export function replayDlqEntry(ctx, id, opts = {}) {
83
- const db = openHippoDb(ctx.hippoRoot);
84
- let row;
85
- try {
86
- row = getDlqEntry(db, id);
87
- }
88
- finally {
89
- closeHippoDb(db);
90
- }
91
- if (!row) {
92
- return { ok: false, status: 'not_found', memoryId: null, retryCount: 0, reason: `dlq id ${id} not found` };
93
- }
20
+ return replayFailed('not_found', 0, `dlq id ${id} not found`);
94
21
  // Signature verification (current secret, not previous).
95
22
  if (!opts.force) {
96
23
  const sigFailure = checkReplaySignature(row, opts);
@@ -103,20 +30,13 @@ export function replayDlqEntry(ctx, id, opts = {}) {
103
30
  parsed = JSON.parse(row.rawPayload);
104
31
  }
105
32
  catch (e) {
106
- return failAndBump(ctx.hippoRoot, row, 'parse_error', `still unparseable: ${e instanceof Error ? e.message : String(e)}`);
33
+ return failAndBump(ctx.hippoRoot, row, 'parse_error', `still unparseable: ${errorMessage(e)}`);
107
34
  }
108
35
  if (!isSlackEventEnvelope(parsed)) {
109
36
  return failAndBump(ctx.hippoRoot, row, 'unhandled', 'not an event_callback envelope');
110
37
  }
111
38
  // Resolve tenant against current state. If still unroutable, bail.
112
- const db2 = openHippoDb(ctx.hippoRoot);
113
- let tenant;
114
- try {
115
- tenant = resolveTenantForTeam(db2, parsed.team_id);
116
- }
117
- finally {
118
- closeHippoDb(db2);
119
- }
39
+ const tenant = await resolveTenantForSlackTeam(ctx.hippoRoot, parsed.team_id);
120
40
  if (!tenant) {
121
41
  return failAndBump(ctx.hippoRoot, row, 'unroutable', `team_id ${parsed.team_id} still unroutable`);
122
42
  }
@@ -130,13 +50,7 @@ export function replayDlqEntry(ctx, id, opts = {}) {
130
50
  /** The failure result when the row cannot pass the signature gate, else null; never bumps the count. */
131
51
  function checkReplaySignature(row, opts) {
132
52
  if (!row.signature || !row.slackTimestamp) {
133
- return {
134
- ok: false,
135
- status: 'sig_missing',
136
- memoryId: null,
137
- retryCount: row.retryCount,
138
- reason: 'row has no signature/timestamp (legacy, or redacted before storing); pass --force to replay',
139
- };
53
+ return replayFailed('sig_missing', row.retryCount, 'row has no signature/timestamp (legacy, or redacted before storing); pass --force to replay');
140
54
  }
141
55
  if (opts.signingSecret) {
142
56
  const ok = verifySlackSignature({
@@ -149,22 +63,16 @@ function checkReplaySignature(row, opts) {
149
63
  skewSeconds: opts.skewSeconds ?? 60 * 60 * 24 * 365,
150
64
  });
151
65
  if (!ok) {
152
- return {
153
- ok: false,
154
- status: 'sig_fail',
155
- memoryId: null,
156
- retryCount: row.retryCount,
157
- reason: 'signature did not verify against current SLACK_SIGNING_SECRET; pass --force to replay anyway',
158
- };
66
+ return replayFailed('sig_fail', row.retryCount, 'signature did not verify against current SLACK_SIGNING_SECRET; pass --force to replay anyway');
159
67
  }
160
68
  }
161
69
  return null;
162
70
  }
163
71
  function failAndBump(hippoRoot, row, status, reason) {
164
- bumpRetryCount(hippoRoot, row.id);
165
- return { ok: false, status, memoryId: null, retryCount: row.retryCount + 1, reason };
72
+ bumpSlackDlqRetryCount(hippoRoot, row.id);
73
+ return replayFailed(status, row.retryCount + 1, reason);
166
74
  }
167
- function dispatchReplay(replayCtx, row, parsed) {
75
+ async function dispatchReplay(replayCtx, row, parsed) {
168
76
  const { hippoRoot } = replayCtx;
169
77
  const id = row.id;
170
78
  const inner = parsed.event;
@@ -172,16 +80,16 @@ function dispatchReplay(replayCtx, row, parsed) {
172
80
  return failAndBump(hippoRoot, row, 'unhandled', `unhandled inner event type`);
173
81
  }
174
82
  if (inner.subtype === 'message_deleted' && inner.deleted_ts) {
175
- const r = handleMessageDeleted(replayCtx, {
83
+ const r = await handleMessageDeleted(replayCtx, {
176
84
  teamId: parsed.team_id,
177
85
  channelId: inner.channel,
178
86
  deletedTs: inner.deleted_ts,
179
87
  eventId: parsed.event_id,
180
88
  });
181
- markRetried(hippoRoot, id);
89
+ markSlackDlqRetried(hippoRoot, id);
182
90
  return { ok: true, status: r.status, memoryId: r.memoryId, retryCount: row.retryCount + 1 };
183
91
  }
184
- const result = ingestMessage(replayCtx, {
92
+ const result = await ingestMessage(replayCtx, {
185
93
  teamId: parsed.team_id,
186
94
  channel: {
187
95
  id: inner.channel,
@@ -192,25 +100,7 @@ function dispatchReplay(replayCtx, row, parsed) {
192
100
  message: inner,
193
101
  eventId: parsed.event_id,
194
102
  });
195
- markRetried(hippoRoot, id);
103
+ markSlackDlqRetried(hippoRoot, id);
196
104
  return { ok: true, status: result.status, memoryId: result.memoryId, retryCount: row.retryCount + 1 };
197
105
  }
198
- function markRetried(hippoRoot, id) {
199
- const db = openHippoDb(hippoRoot);
200
- try {
201
- markDlqRetried(db, id);
202
- }
203
- finally {
204
- closeHippoDb(db);
205
- }
206
- }
207
- function bumpRetryCount(hippoRoot, id) {
208
- const db = openHippoDb(hippoRoot);
209
- try {
210
- db.prepare(`UPDATE slack_dlq SET retry_count = retry_count + 1 WHERE id = ?`).run(id);
211
- }
212
- finally {
213
- closeHippoDb(db);
214
- }
215
- }
216
106
  //# sourceMappingURL=dlq.js.map
@@ -1,4 +1,4 @@
1
- import { type Context } from '../../api.js';
1
+ import { type Context } from '../../api/index.js';
2
2
  import type { ChannelMeta } from './scope.js';
3
3
  import type { SlackMessageEvent } from './types.js';
4
4
  export interface IngestInput {
@@ -13,21 +13,7 @@ export interface IngestResult {
13
13
  status: IngestStatus;
14
14
  memoryId: string | null;
15
15
  }
16
- /**
17
- * Ingest a Slack message into hippo as a kind='raw' memory.
18
- *
19
- * - Idempotency-checked via slack_event_log (Slack retries within 1 minute).
20
- * - The memory write and the slack_event_log mark commit atomically through
21
- * `api.remember`'s `afterWrite` hook — a crash between the two cannot
22
- * produce a duplicate on the next retry.
23
- * - The afterWrite hook uses an explicit `INSERT OR IGNORE` + changes-check:
24
- * if a concurrent worker beat us to slack_event_log between the pre-check
25
- * and the SAVEPOINT, we throw `DuplicateEventError` to roll back the memory
26
- * write. The pre-check `hasSeenEvent` stays as a fast path for the common
27
- * already-seen case, but the afterWrite throw is what makes idempotency
28
- * correct under two-worker concurrency.
29
- * - Empty-body messages return 'skipped' but still mark seen so a replay
30
- * returns 'duplicate' rather than re-running the transform.
31
- */
32
- export declare function ingestMessage(ctx: Context, input: IngestInput): IngestResult;
16
+ /** Ingests a Slack message as a kind='raw' memory once per event id (Slack redelivers within a minute); the pre-check is only the fast path,
17
+ * the store logs the event in the memory's own transaction, which holds when two workers race. An empty body is logged with no memory. */
18
+ export declare function ingestMessage(ctx: Context, input: IngestInput): Promise<IngestResult>;
33
19
  //# sourceMappingURL=ingest.d.ts.map
@@ -1,109 +1,44 @@
1
- import { remember } from '../../api.js';
2
- import { openHippoDb, closeHippoDb } from '../../db.js';
3
- import { RejectedValueError } from '../../rejection.js';
4
- import { hasSeenEvent, markEventSeen, lookupMemoryByEvent, DuplicateEventError, } from './idempotency.js';
1
+ import { remember } from '../../api/index.js';
2
+ import { requireGroup, storeFor } from '../../store/index.js';
3
+ import { RejectedValueError } from '../../store/rejection.js';
5
4
  import { messageToRememberOpts } from './transform.js';
6
- /**
7
- * Ingest a Slack message into hippo as a kind='raw' memory.
8
- *
9
- * - Idempotency-checked via slack_event_log (Slack retries within 1 minute).
10
- * - The memory write and the slack_event_log mark commit atomically through
11
- * `api.remember`'s `afterWrite` hook — a crash between the two cannot
12
- * produce a duplicate on the next retry.
13
- * - The afterWrite hook uses an explicit `INSERT OR IGNORE` + changes-check:
14
- * if a concurrent worker beat us to slack_event_log between the pre-check
15
- * and the SAVEPOINT, we throw `DuplicateEventError` to roll back the memory
16
- * write. The pre-check `hasSeenEvent` stays as a fast path for the common
17
- * already-seen case, but the afterWrite throw is what makes idempotency
18
- * correct under two-worker concurrency.
19
- * - Empty-body messages return 'skipped' but still mark seen so a replay
20
- * returns 'duplicate' rather than re-running the transform.
21
- */
22
- export function ingestMessage(ctx, input) {
5
+ /** Ingests a Slack message as a kind='raw' memory once per event id (Slack redelivers within a minute); the pre-check is only the fast path,
6
+ * the store logs the event in the memory's own transaction, which holds when two workers race. An empty body is logged with no memory. */
7
+ export async function ingestMessage(ctx, input) {
8
+ const events = requireGroup(storeFor(ctx), 'connectorEvents');
9
+ const event = { connector: 'slack', eventId: input.eventId };
23
10
  // Idempotency check: if already seen, return the cached memory_id without
24
11
  // re-running the transform or hitting api.remember.
25
- const db = openHippoDb(ctx.hippoRoot);
26
- try {
27
- if (hasSeenEvent(db, input.eventId)) {
28
- // Empty-body events are marked seen with memory_id=NULL, so their replay returns the same 'skipped'
29
- // they first returned; a non-NULL memory_id means a memory was ingested, so 'duplicate'.
30
- const cachedId = lookupMemoryByEvent(db, input.eventId);
31
- return { status: cachedId === null ? 'skipped' : 'duplicate', memoryId: cachedId };
32
- }
33
- }
34
- finally {
35
- closeHippoDb(db);
12
+ const seen = await events.eventRecord(event);
13
+ if (seen.seen) {
14
+ // Empty-body events are marked seen with memory_id=NULL, so their replay returns the same 'skipped'
15
+ // they first returned; a non-NULL memory_id means a memory was ingested, so 'duplicate'.
16
+ return { status: seen.memoryId === null ? 'skipped' : 'duplicate', memoryId: seen.memoryId };
36
17
  }
37
18
  const opts = messageToRememberOpts(input);
38
19
  if (!opts) {
39
- const db2 = openHippoDb(ctx.hippoRoot);
40
- try {
41
- markEventSeen(db2, input.eventId, null);
42
- }
43
- finally {
44
- closeHippoDb(db2);
45
- }
20
+ await events.markEventSeen(event);
46
21
  return { status: 'skipped', memoryId: null };
47
22
  }
48
- // Atomic write: the afterWrite callback runs inside writeEntry's SAVEPOINT,
49
- // so the memory row and the slack_event_log row commit (or roll back)
50
- // together. Slack's 1-minute retry window can no longer produce a duplicate
51
- // via the crash-between-handles race.
52
23
  try {
53
- return rememberWithEventLog(ctx, input.eventId, opts);
24
+ return await rememberWithEventLog(ctx, event, opts);
54
25
  }
55
26
  catch (e) {
56
- if (e instanceof DuplicateEventError)
57
- return lostRaceResult(ctx, input.eventId);
58
- if (e instanceof RejectedValueError)
59
- return rejectedValueResult(ctx, input.eventId);
60
- throw e;
27
+ if (!(e instanceof RejectedValueError))
28
+ throw e;
29
+ // A tombstone hit is a PERMANENT skip: a DLQ retry would hit the same refusal forever, so mark the
30
+ // event seen like the empty-body branch above and let a Slack retry ack as done, not error.
31
+ await events.markEventSeen(event);
32
+ return { status: 'skipped', memoryId: null };
61
33
  }
62
34
  }
63
- function rememberWithEventLog(ctx, eventId, opts) {
35
+ async function rememberWithEventLog(ctx, event, opts) {
64
36
  // No `|| 'connector:slack'` fallback: the caller always builds ctx with the connector subject, and with
65
37
  // an object-shaped Context.actor an OR-fallback would never fire anyway.
66
- const result = remember({ ...ctx, store: undefined }, // the event log row commits with the memory on hippo.db's own handle, never through a store
67
- {
68
- ...opts,
69
- untrusted: true,
70
- afterWrite: (innerDb, memoryId) => {
71
- const inserted = innerDb
72
- .prepare(`INSERT OR IGNORE INTO slack_event_log (event_id, ingested_at, memory_id) VALUES (?, ?, ?)`)
73
- .run(eventId, new Date().toISOString(), memoryId);
74
- if ((Number(inserted.changes ?? 0)) === 0) {
75
- // Two-worker race: another writer reserved this event_id between
76
- // the pre-check and the write. Throw to roll back the SAVEPOINT
77
- // in writeEntry — the memory row gets discarded, idempotency
78
- // holds, exactly one memory exists for this event_id.
79
- throw new DuplicateEventError(eventId);
80
- }
81
- },
82
- });
38
+ const result = await remember(ctx, { ...opts, untrusted: true, event });
39
+ // Another worker logged this event between the pre-check and the write: its memory stands and ours was not stored.
40
+ if (result.duplicate)
41
+ return { status: 'skipped_duplicate', memoryId: result.duplicate.memoryId };
83
42
  return { status: 'ingested', memoryId: result.id };
84
43
  }
85
- function lostRaceResult(ctx, eventId) {
86
- // The other worker's memory row is already committed. Return its id
87
- // so the caller behaves identically to the fast-path 'duplicate' branch.
88
- const db3 = openHippoDb(ctx.hippoRoot);
89
- try {
90
- const cachedId = lookupMemoryByEvent(db3, eventId);
91
- return { status: 'skipped_duplicate', memoryId: cachedId };
92
- }
93
- finally {
94
- closeHippoDb(db3);
95
- }
96
- }
97
- function rejectedValueResult(ctx, eventId) {
98
- // A tombstone hit is a PERMANENT skip: a DLQ retry would hit the same refusal forever, so mark the
99
- // event seen like the empty-body branch above and let a Slack retry ack as done, not error.
100
- const db4 = openHippoDb(ctx.hippoRoot);
101
- try {
102
- markEventSeen(db4, eventId, null);
103
- }
104
- finally {
105
- closeHippoDb(db4);
106
- }
107
- return { status: 'skipped', memoryId: null };
108
- }
109
44
  //# sourceMappingURL=ingest.js.map
@@ -4,13 +4,7 @@ export interface ChannelMeta {
4
4
  is_im?: boolean;
5
5
  is_mpim?: boolean;
6
6
  }
7
- /**
8
- * Map a Slack channel into a hippo scope string.
9
- *
10
- * Default to private when privacy is undetermined. The cost of leaking a
11
- * public channel into private scope (recall returns nothing) is far smaller
12
- * than the cost of leaking a private channel into public scope (data exposed
13
- * to a tenant that should not see it).
14
- */
7
+ /** Map a Slack channel into a hippo scope string, defaulting to private when privacy is undetermined:
8
+ * a public channel leaking into private scope returns nothing, but the reverse exposes data. */
15
9
  export declare function scopeFromChannel(ch: ChannelMeta): string;
16
10
  //# sourceMappingURL=scope.d.ts.map
@@ -1,11 +1,5 @@
1
- /**
2
- * Map a Slack channel into a hippo scope string.
3
- *
4
- * Default to private when privacy is undetermined. The cost of leaking a
5
- * public channel into private scope (recall returns nothing) is far smaller
6
- * than the cost of leaking a private channel into public scope (data exposed
7
- * to a tenant that should not see it).
8
- */
1
+ /** Map a Slack channel into a hippo scope string, defaulting to private when privacy is undetermined:
2
+ * a public channel leaking into private scope returns nothing, but the reverse exposes data. */
9
3
  export function scopeFromChannel(ch) {
10
4
  const isPublic = ch.is_private === false && !ch.is_im && !ch.is_mpim;
11
5
  return isPublic ? `slack:public:${ch.id}` : `slack:private:${ch.id}`;
@@ -3,12 +3,7 @@ export interface VerifyOpts {
3
3
  timestamp: string;
4
4
  signature: string;
5
5
  signingSecret: string;
6
- /**
7
- * Previous signing secret during a rotation. Deploy with
8
- * both `SLACK_SIGNING_SECRET` (new) and `SLACK_SIGNING_SECRET_PREVIOUS` (old)
9
- * set, verify both work, drop previous after rollover. The verifier tries
10
- * `signingSecret` first, then `previousSecret` if that fails.
11
- */
6
+ /** Previous signing secret during rotation (SLACK_SIGNING_SECRET_PREVIOUS); the verifier tries `signingSecret` first, then this. */
12
7
  previousSecret?: string;
13
8
  /** Current unix seconds. Injectable for tests. */
14
9
  now?: number;
@@ -1,4 +1,5 @@
1
1
  import { createHmac, timingSafeEqual } from 'crypto';
2
+ const DEFAULT_SKEW_SECONDS = 5 * 60;
2
3
  function verifyOne(rawBody, signature, timestamp, secret) {
3
4
  if (!signature.startsWith('v0='))
4
5
  return false;
@@ -12,7 +13,7 @@ function verifyOne(rawBody, signature, timestamp, secret) {
12
13
  export function verifySlackSignature(opts) {
13
14
  const { rawBody, timestamp, signature, signingSecret, previousSecret } = opts;
14
15
  const now = opts.now ?? Math.floor(Date.now() / 1000);
15
- const skew = opts.skewSeconds ?? 5 * 60;
16
+ const skew = opts.skewSeconds ?? DEFAULT_SKEW_SECONDS;
16
17
  const ts = Number(timestamp);
17
18
  if (!Number.isFinite(ts))
18
19
  return false;
@@ -1,19 +1,5 @@
1
- import type { DatabaseSyncLike } from '../../db.js';
2
- /**
3
- * Look up the tenant_id for a Slack team_id.
4
- *
5
- * Returns:
6
- * - mapped tenant_id when slack_workspaces has a row for `teamId`
7
- * - the deployment's HIPPO_TENANT fallback (or 'default') when slack_workspaces
8
- * is empty (single-workspace install — env fallback is safe)
9
- * - null when slack_workspaces is non-empty AND `teamId` is unknown
10
- * (multi-workspace install — fail closed; an unknown team is not the
11
- * deployment's tenant). Escape hatch: SLACK_ALLOW_UNKNOWN_TEAM_FALLBACK=1
12
- * restores the env fallback for emergency rollback only.
13
- *
14
- * The fail-closed contract lives here so every caller (route handler, CLI
15
- * replay, future MCP) gets the same protection against routing a foreign
16
- * workspace's events into the deployment tenant.
17
- */
18
- export declare function resolveTenantForTeam(db: DatabaseSyncLike, teamId: string): string | null;
1
+ import { type HippoStore } from '../../store/index.js';
2
+ /** Look up the tenant_id for a Slack team_id; the HIPPO_TENANT fallback applies only when slack_workspaces is empty (single-workspace install).
3
+ * An unknown team on a multi-workspace install returns null (fail closed); SLACK_ALLOW_UNKNOWN_TEAM_FALLBACK=1 is the emergency escape. */
4
+ export declare function resolveTenantForSlackTeam(hippoRoot: string, teamId: string, store?: HippoStore): Promise<string | null>;
19
5
  //# sourceMappingURL=tenant-routing.d.ts.map
@@ -1,34 +1,14 @@
1
- import { envSlackAllowUnknownTeamFallback, envTenant } from '../../env.js';
2
- /**
3
- * Look up the tenant_id for a Slack team_id.
4
- *
5
- * Returns:
6
- * - mapped tenant_id when slack_workspaces has a row for `teamId`
7
- * - the deployment's HIPPO_TENANT fallback (or 'default') when slack_workspaces
8
- * is empty (single-workspace install — env fallback is safe)
9
- * - null when slack_workspaces is non-empty AND `teamId` is unknown
10
- * (multi-workspace install — fail closed; an unknown team is not the
11
- * deployment's tenant). Escape hatch: SLACK_ALLOW_UNKNOWN_TEAM_FALLBACK=1
12
- * restores the env fallback for emergency rollback only.
13
- *
14
- * The fail-closed contract lives here so every caller (route handler, CLI
15
- * replay, future MCP) gets the same protection against routing a foreign
16
- * workspace's events into the deployment tenant.
17
- */
18
- export function resolveTenantForTeam(db, teamId) {
19
- // SAFETY: query selects only `tenant_id`, so a returned row has that shape;
20
- // .get() returns undefined when no row matches.
21
- const row = db
22
- .prepare(`SELECT tenant_id FROM slack_workspaces WHERE team_id = ?`)
23
- .get(teamId);
24
- if (row?.tenant_id)
25
- return row.tenant_id;
26
- // SAFETY: `COUNT(*) AS c` always returns exactly one row shaped { c }; sqlite
27
- // may return the count as number or bigint depending on driver.
28
- const total = db
29
- .prepare(`SELECT COUNT(*) AS c FROM slack_workspaces`)
30
- .get().c;
31
- if (Number(total) === 0) {
1
+ import { envSlackAllowUnknownTeamFallback, envTenant } from '../../util/env.js';
2
+ import { requireGroup, storeFor } from '../../store/index.js';
3
+ /** Look up the tenant_id for a Slack team_id; the HIPPO_TENANT fallback applies only when slack_workspaces is empty (single-workspace install).
4
+ * An unknown team on a multi-workspace install returns null (fail closed); SLACK_ALLOW_UNKNOWN_TEAM_FALLBACK=1 is the emergency escape. */
5
+ export async function resolveTenantForSlackTeam(hippoRoot, teamId, store) {
6
+ return tenantForRoute(await requireGroup(storeFor({ hippoRoot, store }), 'connectorEvents').slackTeamRoute(teamId));
7
+ }
8
+ function tenantForRoute(route) {
9
+ if (route.tenantId !== null)
10
+ return route.tenantId;
11
+ if (route.workspaceCount === 0) {
32
12
  // Single-workspace install: env fallback is safe.
33
13
  return envTenant();
34
14
  }
@@ -1,4 +1,4 @@
1
- import type { RememberOpts } from '../../api.js';
1
+ import type { RememberOpts } from '../../api/index.js';
2
2
  import { type ChannelMeta } from './scope.js';
3
3
  import type { SlackMessageEvent } from './types.js';
4
4
  export interface TransformInput {
@@ -6,23 +6,7 @@ export interface TransformInput {
6
6
  channel: ChannelMeta;
7
7
  message: SlackMessageEvent;
8
8
  }
9
- /**
10
- * Convert a SlackMessageEvent into RememberOpts for api.remember(). Returns
11
- * null when the message has no usable body (e.g. system events, bot reactions
12
- * without text). Caller treats null as "skip but mark idempotency seen".
13
- *
14
- * Contract:
15
- * - kind is the literal 'raw' (connector boundary, see src/importers.ts).
16
- * - artifact_ref format MUST be exactly `slack://${teamId}/${channelId}/${ts}`;
17
- * the deletion path looks up by this string.
18
- * - owner is non-null whenever a row is written. Required by the
19
- * provenance gate (`hippo provenance --strict`).
20
- * - `user:<slack_user_id>` when the event carries a `user`.
21
- * - `bot:<bot_id>` for the `bot_message` subtype (or any userless+text event
22
- * that supplies bot_id).
23
- * - `bot:unknown` only as a last-resort sentinel so the gate never sees null.
24
- * Skipping userless messages instead would silently drop bot ingestion
25
- * via the "skipped but seen" path in ingest.ts.
26
- */
9
+ /** Convert a SlackMessageEvent into RememberOpts; returns null when the message has no usable body so the caller marks it seen and skips it.
10
+ * artifact_ref MUST be `slack://${teamId}/${channelId}/${ts}` (deletion looks it up); owner is never null: `user:<id>`, `bot:<bot_id>`, else `bot:unknown`. */
27
11
  export declare function messageToRememberOpts(input: TransformInput): RememberOpts | null;
28
12
  //# sourceMappingURL=transform.d.ts.map
@@ -1,22 +1,6 @@
1
1
  import { scopeFromChannel } from './scope.js';
2
- /**
3
- * Convert a SlackMessageEvent into RememberOpts for api.remember(). Returns
4
- * null when the message has no usable body (e.g. system events, bot reactions
5
- * without text). Caller treats null as "skip but mark idempotency seen".
6
- *
7
- * Contract:
8
- * - kind is the literal 'raw' (connector boundary, see src/importers.ts).
9
- * - artifact_ref format MUST be exactly `slack://${teamId}/${channelId}/${ts}`;
10
- * the deletion path looks up by this string.
11
- * - owner is non-null whenever a row is written. Required by the
12
- * provenance gate (`hippo provenance --strict`).
13
- * - `user:<slack_user_id>` when the event carries a `user`.
14
- * - `bot:<bot_id>` for the `bot_message` subtype (or any userless+text event
15
- * that supplies bot_id).
16
- * - `bot:unknown` only as a last-resort sentinel so the gate never sees null.
17
- * Skipping userless messages instead would silently drop bot ingestion
18
- * via the "skipped but seen" path in ingest.ts.
19
- */
2
+ /** Convert a SlackMessageEvent into RememberOpts; returns null when the message has no usable body so the caller marks it seen and skips it.
3
+ * artifact_ref MUST be `slack://${teamId}/${channelId}/${ts}` (deletion looks it up); owner is never null: `user:<id>`, `bot:<bot_id>`, else `bot:unknown`. */
20
4
  export function messageToRememberOpts(input) {
21
5
  const text = input.message.text?.trim();
22
6
  if (!text)
@@ -1,8 +1,6 @@
1
- /**
2
- * Slack Events API envelope shapes used by the ingestion connector.
3
- * Spec: https://api.slack.com/events-api
4
- */
5
- import { type JsonValue } from '../../json.js';
1
+ /** Slack Events API envelope shapes used by the ingestion connector.
2
+ * Spec: https://api.slack.com/events-api */
3
+ import { type JsonValue } from '../../util/json.js';
6
4
  export interface SlackUrlVerification {
7
5
  type: 'url_verification';
8
6
  challenge: string;
@@ -17,11 +15,7 @@ export interface SlackMessageEvent {
17
15
  text?: string;
18
16
  ts: string;
19
17
  thread_ts?: string;
20
- /**
21
- * Slack `bot_message` subtype carries `bot_id` instead of `user`. The
22
- * provenance gate requires a non-null `owner`, so transform.ts
23
- * derives `owner: bot:<bot_id>` when `user` is absent.
24
- */
18
+ /** The `bot_message` subtype carries `bot_id` instead of `user`; transform.ts derives `owner: bot:<bot_id>` from it. */
25
19
  bot_id?: string;
26
20
  /** Present on subtype='message_deleted'. */
27
21
  deleted_ts?: string;
@@ -1,19 +1,8 @@
1
- /**
2
- * Slack Events API envelope shapes used by the ingestion connector.
3
- * Spec: https://api.slack.com/events-api
4
- */
5
- import { isJsonString } from '../../json.js';
6
- function isJsonNumber(value) {
7
- return typeof value === 'number';
8
- }
9
- function isJsonRecord(value) {
10
- return (value !== null &&
11
- value !== undefined &&
12
- !Array.isArray(value) &&
13
- typeof value === 'object');
14
- }
1
+ /** Slack Events API envelope shapes used by the ingestion connector.
2
+ * Spec: https://api.slack.com/events-api */
3
+ import { isJsonString, isJsonObject, isJsonNumber } from '../../util/json.js';
15
4
  export function isSlackEventEnvelope(x) {
16
- if (!isJsonRecord(x))
5
+ if (!isJsonObject(x))
17
6
  return false;
18
7
  const o = x;
19
8
  if (o.type !== 'event_callback')
@@ -22,7 +11,7 @@ export function isSlackEventEnvelope(x) {
22
11
  return false;
23
12
  }
24
13
  const event = o.event;
25
- return isJsonRecord(event) && isJsonString(event.type);
14
+ return isJsonObject(event) && isJsonString(event.type);
26
15
  }
27
16
  export function isSlackMessageEvent(x) {
28
17
  if (x === null || typeof x !== 'object' || Array.isArray(x))