hippo-memory 2.0.0 → 2.1.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 (965) hide show
  1. package/dist/agent-memories/apply.d.ts +7 -5
  2. package/dist/agent-memories/apply.js +66 -39
  3. package/dist/agent-memories/claude-code.d.ts +8 -2
  4. package/dist/agent-memories/claude-code.js +26 -7
  5. package/dist/agent-memories/copilot.js +2 -1
  6. package/dist/agent-memories/files.js +2 -1
  7. package/dist/agent-memories/legacy.d.ts +6 -3
  8. package/dist/agent-memories/legacy.js +35 -14
  9. package/dist/agent-memories/markdown.d.ts +3 -1
  10. package/dist/agent-memories/markdown.js +3 -1
  11. package/dist/agent-memories/openclaw.js +5 -2
  12. package/dist/agent-memories/plan.js +11 -1
  13. package/dist/agent-memories/project-folds.js +2 -1
  14. package/dist/agent-memories/report.d.ts +4 -1
  15. package/dist/agent-memories/report.js +43 -9
  16. package/dist/agent-memories/source.d.ts +8 -2
  17. package/dist/agent-memories/source.js +11 -3
  18. package/dist/agent-memories/sync.d.ts +7 -2
  19. package/dist/agent-memories/sync.js +141 -101
  20. package/dist/api/assemble.d.ts +6 -4
  21. package/dist/api/assemble.js +11 -6
  22. package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
  23. package/dist/api/{audit.js → auth/audit.js} +11 -11
  24. package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
  25. package/dist/api/{auth.js → auth/auth.js} +46 -29
  26. package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
  27. package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
  28. package/dist/api/auth/session-owners.d.ts +10 -0
  29. package/dist/api/auth/session-owners.js +35 -0
  30. package/dist/api/availability.d.ts +3 -1
  31. package/dist/api/availability.js +3 -1
  32. package/dist/api/busy.d.ts +2 -0
  33. package/dist/api/busy.js +2 -0
  34. package/dist/api/cli-surface.d.ts +6 -0
  35. package/dist/api/cli-surface.js +6 -0
  36. package/dist/api/config-of.d.ts +5 -0
  37. package/dist/api/config-of.js +6 -0
  38. package/dist/api/context-auto.d.ts +4 -1
  39. package/dist/api/context-auto.js +10 -2
  40. package/dist/api/context-render.js +14 -7
  41. package/dist/api/context-select.d.ts +4 -1
  42. package/dist/api/context-select.js +23 -14
  43. package/dist/api/context-types.d.ts +38 -12
  44. package/dist/api/context.d.ts +8 -5
  45. package/dist/api/context.js +112 -57
  46. package/dist/api/continuity.d.ts +24 -21
  47. package/dist/api/continuity.js +18 -20
  48. package/dist/api/correction-latency.d.ts +3 -1
  49. package/dist/api/correction-latency.js +3 -1
  50. package/dist/api/error-reply.d.ts +4 -1
  51. package/dist/api/error-reply.js +12 -3
  52. package/dist/api/index.d.ts +39 -23
  53. package/dist/api/index.js +21 -23
  54. package/dist/api/instruction-detect.d.ts +4 -1
  55. package/dist/api/instruction-detect.js +75 -20
  56. package/dist/api/ledger-db.d.ts +15 -11
  57. package/dist/api/ledger-db.js +21 -23
  58. package/dist/api/memories/conflicts.d.ts +33 -0
  59. package/dist/api/memories/conflicts.js +67 -0
  60. package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
  61. package/dist/api/{forget.js → memories/forget.js} +22 -15
  62. package/dist/api/memories/memories.d.ts +27 -0
  63. package/dist/api/{memories.js → memories/memories.js} +16 -21
  64. package/dist/api/memories/outcome.d.ts +22 -0
  65. package/dist/api/{outcome.js → memories/outcome.js} +14 -8
  66. package/dist/api/memories/promote.d.ts +40 -0
  67. package/dist/api/{promote.js → memories/promote.js} +35 -22
  68. package/dist/api/memories/refine.d.ts +10 -0
  69. package/dist/api/memories/refine.js +12 -0
  70. package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
  71. package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
  72. package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
  73. package/dist/api/{remember.js → memories/remember.js} +42 -26
  74. package/dist/api/objects/cards.d.ts +39 -0
  75. package/dist/api/{cards.js → objects/cards.js} +12 -14
  76. package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
  77. package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
  78. package/dist/api/objects/goals.d.ts +18 -0
  79. package/dist/api/{goals.js → objects/goals.js} +12 -12
  80. package/dist/api/objects/graph.d.ts +11 -0
  81. package/dist/api/objects/graph.js +16 -0
  82. package/dist/api/objects/objects.d.ts +9 -0
  83. package/dist/api/{objects.js → objects/objects.js} +2 -4
  84. package/dist/api/objects/predictions.d.ts +11 -0
  85. package/dist/api/{predictions.js → objects/predictions.js} +7 -6
  86. package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
  87. package/dist/api/{projects.js → objects/projects.js} +8 -4
  88. package/dist/api/pilot-arm.d.ts +8 -4
  89. package/dist/api/pilot-arm.js +5 -4
  90. package/dist/api/prompt-hook.d.ts +32 -19
  91. package/dist/api/prompt-hook.js +65 -44
  92. package/dist/api/provenance-coverage.d.ts +3 -1
  93. package/dist/api/provenance-coverage.js +3 -1
  94. package/dist/api/recall/finish.d.ts +185 -0
  95. package/dist/api/recall/finish.js +301 -0
  96. package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
  97. package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
  98. package/dist/api/recall/recall.d.ts +6 -0
  99. package/dist/api/{recall.js → recall/recall.js} +101 -60
  100. package/dist/api/recall/render.d.ts +39 -0
  101. package/dist/api/recall/render.js +60 -0
  102. package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
  103. package/dist/api/recall/request.js +261 -0
  104. package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
  105. package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
  106. package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
  107. package/dist/api/{recall-types.js → recall/types.js} +1 -1
  108. package/dist/api/session-end.d.ts +16 -12
  109. package/dist/api/session-end.js +46 -30
  110. package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
  111. package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
  112. package/dist/api/sleep/dormant.d.ts +25 -0
  113. package/dist/api/sleep/dormant.js +64 -0
  114. package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
  115. package/dist/api/sleep/learn.js +138 -0
  116. package/dist/api/sleep/sleep-run.d.ts +38 -0
  117. package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
  118. package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
  119. package/dist/api/sleep/sleep.js +9 -0
  120. package/dist/api/status.d.ts +3 -1
  121. package/dist/api/status.js +3 -1
  122. package/dist/api/store-init.d.ts +4 -1
  123. package/dist/api/store-init.js +4 -1
  124. package/dist/api/tokens.d.ts +10 -9
  125. package/dist/api/tokens.js +9 -10
  126. package/dist/api/types.d.ts +28 -7
  127. package/dist/api/types.js +13 -4
  128. package/dist/capture/caller-session.d.ts +8 -2
  129. package/dist/capture/caller-session.js +16 -6
  130. package/dist/capture/capture-error.d.ts +3 -1
  131. package/dist/capture/capture-error.js +3 -1
  132. package/dist/capture/codex-patch.js +7 -2
  133. package/dist/capture/command.d.ts +4 -2
  134. package/dist/capture/command.js +33 -14
  135. package/dist/capture/compact-resume-caller.js +15 -8
  136. package/dist/capture/compact.d.ts +8 -5
  137. package/dist/capture/compact.js +34 -23
  138. package/dist/capture/compaction-items-caller.js +9 -3
  139. package/dist/capture/compaction-record.d.ts +4 -3
  140. package/dist/capture/compaction-record.js +20 -12
  141. package/dist/capture/compaction-spool.d.ts +15 -4
  142. package/dist/capture/compaction-spool.js +64 -17
  143. package/dist/capture/copilot-transcript.d.ts +11 -3
  144. package/dist/capture/copilot-transcript.js +16 -6
  145. package/dist/capture/extract.js +20 -8
  146. package/dist/capture/failure-caller.js +23 -12
  147. package/dist/capture/failure-reading.d.ts +10 -3
  148. package/dist/capture/failure-reading.js +24 -7
  149. package/dist/capture/pre-compact-caller.js +11 -4
  150. package/dist/capture/session-digest.d.ts +15 -4
  151. package/dist/capture/session-digest.js +39 -13
  152. package/dist/capture/session-end-caller.d.ts +4 -1
  153. package/dist/capture/session-end-caller.js +20 -8
  154. package/dist/capture/session-texts.d.ts +6 -2
  155. package/dist/capture/session-texts.js +22 -7
  156. package/dist/capture/session-worker.d.ts +4 -2
  157. package/dist/capture/session-worker.js +45 -17
  158. package/dist/capture/transcript.d.ts +13 -4
  159. package/dist/capture/transcript.js +32 -10
  160. package/dist/capture/working-state.d.ts +13 -4
  161. package/dist/capture/working-state.js +50 -56
  162. package/dist/cli/api-context.d.ts +14 -2
  163. package/dist/cli/api-context.js +45 -2
  164. package/dist/cli/audit.js +23 -23
  165. package/dist/cli/auth.js +19 -27
  166. package/dist/cli/briefs.d.ts +1 -1
  167. package/dist/cli/briefs.js +20 -15
  168. package/dist/cli/card.d.ts +1 -1
  169. package/dist/cli/card.js +56 -73
  170. package/dist/cli/client.d.ts +12 -4
  171. package/dist/cli/client.js +43 -13
  172. package/dist/cli/compact-resume-payload.d.ts +4 -1
  173. package/dist/cli/compact-resume-payload.js +12 -5
  174. package/dist/cli/context.js +42 -17
  175. package/dist/cli/continuity.d.ts +5 -5
  176. package/dist/cli/continuity.js +90 -107
  177. package/dist/cli/curate.d.ts +4 -3
  178. package/dist/cli/curate.js +46 -68
  179. package/dist/cli/dag.d.ts +1 -1
  180. package/dist/cli/dag.js +14 -17
  181. package/dist/cli/decisions.js +27 -26
  182. package/dist/cli/eval.js +16 -21
  183. package/dist/cli/exit.d.ts +4 -1
  184. package/dist/cli/exit.js +10 -2
  185. package/dist/cli/explain.js +12 -11
  186. package/dist/cli/flag-values.d.ts +1 -1
  187. package/dist/cli/flag-values.js +9 -18
  188. package/dist/cli/github.d.ts +6 -0
  189. package/dist/cli/github.js +25 -13
  190. package/dist/cli/goals.d.ts +1 -1
  191. package/dist/cli/goals.js +39 -56
  192. package/dist/cli/graph.d.ts +1 -1
  193. package/dist/cli/graph.js +15 -11
  194. package/dist/cli/hook-runtime.d.ts +31 -9
  195. package/dist/cli/hook-runtime.js +40 -15
  196. package/dist/cli/incidents.d.ts +1 -1
  197. package/dist/cli/incidents.js +25 -25
  198. package/dist/cli/init.js +26 -11
  199. package/dist/cli/install-steps.d.ts +12 -3
  200. package/dist/cli/install-steps.js +42 -18
  201. package/dist/cli/last-sleep.d.ts +4 -1
  202. package/dist/cli/last-sleep.js +9 -4
  203. package/dist/cli/maintenance.d.ts +1 -1
  204. package/dist/cli/maintenance.js +11 -12
  205. package/dist/cli/notes.d.ts +1 -1
  206. package/dist/cli/notes.js +8 -5
  207. package/dist/cli/object-verbs.d.ts +4 -4
  208. package/dist/cli/object-verbs.js +10 -13
  209. package/dist/cli/open-browser.js +11 -2
  210. package/dist/cli/playbooks.d.ts +3 -3
  211. package/dist/cli/playbooks.js +40 -32
  212. package/dist/cli/predictions.js +15 -19
  213. package/dist/cli/print.js +4 -2
  214. package/dist/cli/projects.js +21 -11
  215. package/dist/cli/quality-repair-once.js +5 -4
  216. package/dist/cli/recall.js +129 -93
  217. package/dist/cli/refine-llm.d.ts +15 -4
  218. package/dist/cli/refine-llm.js +16 -7
  219. package/dist/cli/remember.js +46 -50
  220. package/dist/cli/scheduler.d.ts +4 -1
  221. package/dist/cli/scheduler.js +9 -5
  222. package/dist/cli/serve.js +22 -17
  223. package/dist/cli/session-hooks.d.ts +2 -2
  224. package/dist/cli/session-hooks.js +87 -50
  225. package/dist/cli/setup.js +54 -32
  226. package/dist/cli/shared.d.ts +3 -1
  227. package/dist/cli/shared.js +24 -9
  228. package/dist/cli/slack.js +15 -24
  229. package/dist/cli/sleep-render.d.ts +3 -1
  230. package/dist/cli/sleep-render.js +8 -5
  231. package/dist/cli/sleep.js +14 -6
  232. package/dist/cli/status.d.ts +4 -4
  233. package/dist/cli/status.js +32 -27
  234. package/dist/cli/stdin.d.ts +10 -3
  235. package/dist/cli/stdin.js +10 -3
  236. package/dist/cli/transfer.d.ts +1 -1
  237. package/dist/cli/transfer.js +71 -75
  238. package/dist/cli/verbs/memory.js +8 -6
  239. package/dist/cli/verbs/objects.js +10 -4
  240. package/dist/cli/versioned-verbs.d.ts +8 -7
  241. package/dist/cli/versioned-verbs.js +31 -21
  242. package/dist/cli.js +13 -16
  243. package/dist/connectors/dlq.d.ts +6 -6
  244. package/dist/connectors/dlq.js +12 -8
  245. package/dist/connectors/github/backfill.d.ts +4 -4
  246. package/dist/connectors/github/backfill.js +6 -4
  247. package/dist/connectors/github/deletion.d.ts +6 -4
  248. package/dist/connectors/github/deletion.js +5 -5
  249. package/dist/connectors/github/dlq.d.ts +8 -6
  250. package/dist/connectors/github/dlq.js +11 -5
  251. package/dist/connectors/github/ingest.d.ts +2 -2
  252. package/dist/connectors/github/ingest.js +9 -6
  253. package/dist/connectors/github/octokit-client.d.ts +3 -1
  254. package/dist/connectors/github/octokit-client.js +7 -2
  255. package/dist/connectors/github/ratelimit.d.ts +6 -2
  256. package/dist/connectors/github/ratelimit.js +6 -2
  257. package/dist/connectors/github/signature.d.ts +14 -3
  258. package/dist/connectors/github/signature.js +17 -3
  259. package/dist/connectors/github/tenant-routing.d.ts +6 -4
  260. package/dist/connectors/github/tenant-routing.js +6 -6
  261. package/dist/connectors/github/transform.js +50 -67
  262. package/dist/connectors/github/types.d.ts +10 -3
  263. package/dist/connectors/github/types.js +6 -2
  264. package/dist/connectors/github/webhook.d.ts +5 -5
  265. package/dist/connectors/github/webhook.js +34 -23
  266. package/dist/connectors/ingest.d.ts +5 -3
  267. package/dist/connectors/ingest.js +3 -4
  268. package/dist/connectors/slack/backfill.d.ts +5 -5
  269. package/dist/connectors/slack/backfill.js +3 -3
  270. package/dist/connectors/slack/deletion.d.ts +4 -4
  271. package/dist/connectors/slack/deletion.js +6 -6
  272. package/dist/connectors/slack/dlq.d.ts +4 -4
  273. package/dist/connectors/slack/dlq.js +6 -6
  274. package/dist/connectors/slack/ingest.d.ts +6 -4
  275. package/dist/connectors/slack/ingest.js +5 -5
  276. package/dist/connectors/slack/signature.d.ts +4 -1
  277. package/dist/connectors/slack/tenant-routing.d.ts +6 -4
  278. package/dist/connectors/slack/tenant-routing.js +6 -6
  279. package/dist/connectors/slack/transform.d.ts +6 -2
  280. package/dist/connectors/slack/transform.js +6 -2
  281. package/dist/connectors/slack/types.d.ts +3 -1
  282. package/dist/connectors/slack/web-client.js +8 -3
  283. package/dist/connectors/slack/webhook.d.ts +5 -5
  284. package/dist/connectors/slack/webhook.js +19 -11
  285. package/dist/connectors/slack/workspaces.d.ts +7 -3
  286. package/dist/connectors/slack/workspaces.js +7 -3
  287. package/dist/connectors/store.d.ts +8 -0
  288. package/dist/connectors/store.js +2 -0
  289. package/dist/consolidate/conflicts.js +23 -9
  290. package/dist/consolidate/dag-summary.js +2 -1
  291. package/dist/consolidate/dag.d.ts +10 -5
  292. package/dist/consolidate/dag.js +37 -36
  293. package/dist/consolidate/decay.js +19 -6
  294. package/dist/consolidate/dedupe.d.ts +14 -5
  295. package/dist/consolidate/dedupe.js +27 -16
  296. package/dist/consolidate/flush-units.d.ts +4 -1
  297. package/dist/consolidate/flush-units.js +4 -1
  298. package/dist/consolidate/half-life-migration.d.ts +18 -8
  299. package/dist/consolidate/half-life-migration.js +48 -18
  300. package/dist/consolidate/llm-passes.js +27 -11
  301. package/dist/consolidate/memory-value-weights.d.ts +6 -2
  302. package/dist/consolidate/memory-value-weights.js +6 -2
  303. package/dist/consolidate/memory-value.d.ts +30 -10
  304. package/dist/consolidate/memory-value.js +36 -13
  305. package/dist/consolidate/merge.d.ts +4 -1
  306. package/dist/consolidate/merge.js +42 -32
  307. package/dist/consolidate/overlap-index.d.ts +8 -2
  308. package/dist/consolidate/overlap-index.js +11 -4
  309. package/dist/consolidate/physics-pass.d.ts +3 -1
  310. package/dist/consolidate/physics-pass.js +10 -7
  311. package/dist/consolidate/replay.d.ts +11 -4
  312. package/dist/consolidate/replay.js +19 -7
  313. package/dist/consolidate/run.d.ts +13 -5
  314. package/dist/consolidate/run.js +4 -4
  315. package/dist/consolidate/sleep.d.ts +14 -6
  316. package/dist/consolidate/sleep.js +41 -38
  317. package/dist/consolidate/trace.d.ts +7 -2
  318. package/dist/consolidate/trace.js +7 -2
  319. package/dist/consolidate/traces.js +26 -29
  320. package/dist/core/ablation.d.ts +9 -3
  321. package/dist/core/ablation.js +14 -4
  322. package/dist/core/active-scope.d.ts +3 -1
  323. package/dist/core/active-scope.js +3 -1
  324. package/dist/core/agent-memory-tools.d.ts +2 -0
  325. package/dist/core/agent-memory-tools.js +2 -0
  326. package/dist/core/ambient.d.ts +4 -3
  327. package/dist/core/ambient.js +8 -6
  328. package/dist/core/api-errors.d.ts +9 -3
  329. package/dist/core/api-errors.js +9 -3
  330. package/dist/core/capture-contract.d.ts +4 -1
  331. package/dist/core/capture-contract.js +27 -8
  332. package/dist/core/compare.d.ts +24 -8
  333. package/dist/core/compare.js +24 -8
  334. package/dist/core/config.d.ts +18 -9
  335. package/dist/core/config.js +24 -14
  336. package/dist/core/cosine.d.ts +4 -1
  337. package/dist/core/cosine.js +4 -1
  338. package/dist/core/handoff.d.ts +7 -2
  339. package/dist/core/handoff.js +4 -1
  340. package/dist/core/markdown.js +21 -16
  341. package/dist/core/memory-audit.js +14 -3
  342. package/dist/core/memory-quality.d.ts +12 -3
  343. package/dist/core/memory-quality.js +57 -21
  344. package/dist/core/memory.d.ts +84 -27
  345. package/dist/core/memory.js +73 -29
  346. package/dist/core/merged-row.d.ts +8 -2
  347. package/dist/core/merged-row.js +10 -3
  348. package/dist/core/package-root.d.ts +3 -1
  349. package/dist/core/package-root.js +3 -1
  350. package/dist/core/particle-refresh.d.ts +8 -0
  351. package/dist/core/particle-refresh.js +22 -0
  352. package/dist/core/physics-config.d.ts +4 -1
  353. package/dist/core/physics-config.js +6 -2
  354. package/dist/core/physics.d.ts +37 -11
  355. package/dist/core/physics.js +55 -20
  356. package/dist/core/project-identity.d.ts +34 -17
  357. package/dist/core/project-identity.js +33 -17
  358. package/dist/core/project-remote.d.ts +8 -4
  359. package/dist/core/project-remote.js +31 -14
  360. package/dist/core/recall-scope.d.ts +33 -11
  361. package/dist/core/recall-scope.js +42 -15
  362. package/dist/core/rejection-digest.d.ts +7 -0
  363. package/dist/core/rejection-digest.js +13 -0
  364. package/dist/core/salience.d.ts +3 -1
  365. package/dist/core/salience.js +10 -4
  366. package/dist/core/search-types.d.ts +15 -2
  367. package/dist/core/search-types.js +11 -0
  368. package/dist/dashboard/dashboard-actions.js +13 -2
  369. package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
  370. package/dist/dashboard/dashboard-snapshot.js +4 -4
  371. package/dist/dashboard/dashboard.js +6 -3
  372. package/dist/db/backup.js +2 -2
  373. package/dist/db/busy.d.ts +10 -3
  374. package/dist/db/busy.js +27 -5
  375. package/dist/db/connect.d.ts +10 -3
  376. package/dist/db/connect.js +8 -3
  377. package/dist/db/continuity.d.ts +1 -1
  378. package/dist/db/continuity.js +27 -11
  379. package/dist/db/meta.d.ts +4 -1
  380. package/dist/db/meta.js +4 -1
  381. package/dist/db/migrate.d.ts +10 -5
  382. package/dist/db/migrate.js +26 -13
  383. package/dist/db/migrations/index.d.ts +1 -1
  384. package/dist/db/migrations/index.js +3 -1
  385. package/dist/db/migrations/types.d.ts +2 -1
  386. package/dist/db/migrations/v12.js +2 -1
  387. package/dist/db/migrations/v14.js +2 -1
  388. package/dist/db/migrations/v15.js +4 -2
  389. package/dist/db/migrations/v16.js +6 -3
  390. package/dist/db/migrations/v17.js +2 -1
  391. package/dist/db/migrations/v19.js +4 -2
  392. package/dist/db/migrations/v20.js +2 -1
  393. package/dist/db/migrations/v22.js +12 -6
  394. package/dist/db/migrations/v23.js +6 -3
  395. package/dist/db/migrations/v24.js +6 -3
  396. package/dist/db/migrations/v25.js +4 -2
  397. package/dist/db/migrations/v26.js +4 -2
  398. package/dist/db/migrations/v27.js +6 -3
  399. package/dist/db/migrations/v28.js +4 -2
  400. package/dist/db/migrations/v29.js +4 -2
  401. package/dist/db/migrations/v30.js +6 -3
  402. package/dist/db/migrations/v31.js +4 -2
  403. package/dist/db/migrations/v32.js +6 -3
  404. package/dist/db/migrations/v33.js +4 -2
  405. package/dist/db/migrations/v34.js +2 -1
  406. package/dist/db/migrations/v35.js +2 -1
  407. package/dist/db/migrations/v36.js +2 -1
  408. package/dist/db/migrations/v37.js +10 -5
  409. package/dist/db/migrations/v38.js +10 -5
  410. package/dist/db/migrations/v39.js +14 -6
  411. package/dist/db/migrations/v40.js +4 -2
  412. package/dist/db/migrations/v41.js +4 -2
  413. package/dist/db/migrations/v42.js +2 -1
  414. package/dist/db/migrations/v44.js +4 -2
  415. package/dist/db/migrations/v45.js +4 -2
  416. package/dist/db/migrations/v49.js +2 -1
  417. package/dist/db/migrations/v50.js +4 -2
  418. package/dist/db/migrations/v51.js +4 -2
  419. package/dist/db/migrations/v52.js +2 -1
  420. package/dist/db/migrations/v53.js +8 -4
  421. package/dist/db/migrations/v54.js +2 -1
  422. package/dist/db/migrations/v55.js +4 -2
  423. package/dist/db/migrations/v56.d.ts +3 -0
  424. package/dist/db/migrations/v56.js +28 -0
  425. package/dist/db/open.d.ts +24 -12
  426. package/dist/db/open.js +25 -13
  427. package/dist/db/physics-state.d.ts +8 -4
  428. package/dist/db/physics-state.js +13 -20
  429. package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
  430. package/dist/db/raw-archive-mirror-cleanup.js +6 -4
  431. package/dist/db/request-stores.d.ts +19 -5
  432. package/dist/db/request-stores.js +14 -5
  433. package/dist/db/tables.d.ts +2 -1
  434. package/dist/db/tables.js +12 -4
  435. package/dist/db/vector-store.d.ts +13 -4
  436. package/dist/db/vector-store.js +34 -14
  437. package/dist/db/wal-checkpointer.d.ts +2 -1
  438. package/dist/db/wal-checkpointer.js +19 -7
  439. package/dist/doctor.d.ts +4 -1
  440. package/dist/doctor.js +121 -39
  441. package/dist/embeddings/local.d.ts +8 -4
  442. package/dist/embeddings/local.js +9 -5
  443. package/dist/embeddings/provider.d.ts +19 -10
  444. package/dist/embeddings/provider.js +31 -17
  445. package/dist/embeddings/transformers.d.ts +16 -4
  446. package/dist/embeddings/transformers.js +32 -15
  447. package/dist/entry/json-hooks.d.ts +1 -1
  448. package/dist/entry/json-hooks.js +1 -1
  449. package/dist/entry/project-identity.js +2 -1
  450. package/dist/entry/session-text.d.ts +1 -1
  451. package/dist/entry/session-text.js +1 -1
  452. package/dist/entry/sqlite-handles.d.ts +10 -0
  453. package/dist/entry/sqlite-handles.js +9 -0
  454. package/dist/entry/store-kit.d.ts +19 -6
  455. package/dist/entry/store-kit.js +6 -4
  456. package/dist/eval/eval-stats.d.ts +27 -8
  457. package/dist/eval/eval-stats.js +17 -5
  458. package/dist/eval/eval-suite.d.ts +3 -1
  459. package/dist/eval/eval-suite.js +409 -187
  460. package/dist/eval/eval.d.ts +8 -2
  461. package/dist/eval/eval.js +8 -2
  462. package/dist/eval/judgment.js +16 -6
  463. package/dist/graph/delta.d.ts +9 -42
  464. package/dist/graph/delta.js +17 -11
  465. package/dist/graph/extract.d.ts +10 -7
  466. package/dist/graph/extract.js +57 -25
  467. package/dist/graph/recall.d.ts +12 -4
  468. package/dist/graph/recall.js +30 -13
  469. package/dist/graph/stream.d.ts +18 -6
  470. package/dist/graph/stream.js +32 -10
  471. package/dist/graph/view.d.ts +19 -6
  472. package/dist/graph/view.js +42 -17
  473. package/dist/hooks/codex-session.js +2 -2
  474. package/dist/hooks/codex-wrapper.d.ts +3 -1
  475. package/dist/hooks/codex-wrapper.js +9 -4
  476. package/dist/hooks/copilot.d.ts +19 -5
  477. package/dist/hooks/copilot.js +54 -15
  478. package/dist/hooks/hook-blocks.d.ts +4 -1
  479. package/dist/hooks/hook-blocks.js +8 -3
  480. package/dist/hooks/json-hooks.d.ts +9 -5
  481. package/dist/hooks/json-hooks.js +69 -34
  482. package/dist/hooks/opencode.js +15 -5
  483. package/dist/hooks/shared.d.ts +27 -8
  484. package/dist/hooks/shared.js +57 -16
  485. package/dist/importers/core.d.ts +12 -4
  486. package/dist/importers/core.js +8 -7
  487. package/dist/importers/markdown-parse.d.ts +15 -5
  488. package/dist/importers/markdown-parse.js +16 -7
  489. package/dist/importers/markdown.js +6 -9
  490. package/dist/importers/sources.js +10 -23
  491. package/dist/importers/vault.d.ts +2 -2
  492. package/dist/importers/vault.js +43 -27
  493. package/dist/index.d.ts +32 -6
  494. package/dist/index.js +25 -7
  495. package/dist/learn/autolearn.d.ts +17 -6
  496. package/dist/learn/autolearn.js +53 -24
  497. package/dist/learn/churn-git.d.ts +4 -1
  498. package/dist/learn/churn-git.js +29 -5
  499. package/dist/learn/extract.d.ts +4 -1
  500. package/dist/learn/extract.js +16 -9
  501. package/dist/learn/forward-claim-detector.d.ts +17 -5
  502. package/dist/learn/forward-claim-detector.js +34 -15
  503. package/dist/learn/invalidation.d.ts +12 -7
  504. package/dist/learn/invalidation.js +56 -27
  505. package/dist/learn/roots.d.ts +3 -0
  506. package/dist/learn/roots.js +5 -0
  507. package/dist/mcp/admin-tools.d.ts +5 -5
  508. package/dist/mcp/admin-tools.js +28 -23
  509. package/dist/mcp/format.d.ts +1 -1
  510. package/dist/mcp/format.js +4 -2
  511. package/dist/mcp/framing.d.ts +3 -1
  512. package/dist/mcp/framing.js +20 -8
  513. package/dist/mcp/memory-tools.d.ts +3 -3
  514. package/dist/mcp/memory-tools.js +18 -14
  515. package/dist/mcp/protocol.d.ts +32 -16
  516. package/dist/mcp/protocol.js +12 -9
  517. package/dist/mcp/recall-tools.d.ts +3 -3
  518. package/dist/mcp/recall-tools.js +62 -74
  519. package/dist/mcp/request.d.ts +7 -5
  520. package/dist/mcp/request.js +57 -74
  521. package/dist/mcp/server.d.ts +3 -1
  522. package/dist/mcp/server.js +8 -3
  523. package/dist/mcp/session-state.d.ts +1 -1
  524. package/dist/mcp/session-state.js +4 -3
  525. package/dist/mcp/shared-gate.d.ts +3 -2
  526. package/dist/mcp/shared-gate.js +3 -2
  527. package/dist/mcp/stdio.d.ts +6 -3
  528. package/dist/mcp/stdio.js +52 -21
  529. package/dist/mcp/tool-args.d.ts +4 -1
  530. package/dist/mcp/tool-args.js +8 -3
  531. package/dist/mcp/tools.js +76 -32
  532. package/dist/objects/customer-notes.d.ts +12 -10
  533. package/dist/objects/customer-notes.js +21 -15
  534. package/dist/objects/decisions.d.ts +18 -10
  535. package/dist/objects/decisions.js +23 -17
  536. package/dist/objects/descriptor.js +2 -1
  537. package/dist/objects/fields.d.ts +4 -1
  538. package/dist/objects/fields.js +6 -2
  539. package/dist/objects/incidents.d.ts +14 -16
  540. package/dist/objects/incidents.js +29 -30
  541. package/dist/objects/lifecycle.d.ts +0 -4
  542. package/dist/objects/lifecycle.js +21 -24
  543. package/dist/objects/policies.d.ts +12 -16
  544. package/dist/objects/policies.js +17 -21
  545. package/dist/objects/processes.d.ts +16 -10
  546. package/dist/objects/processes.js +20 -15
  547. package/dist/objects/project-briefs.d.ts +13 -14
  548. package/dist/objects/project-briefs.js +33 -39
  549. package/dist/objects/skills.d.ts +10 -12
  550. package/dist/objects/skills.js +17 -22
  551. package/dist/postinstall.js +15 -7
  552. package/dist/predictions/planning-fallacy.d.ts +19 -6
  553. package/dist/predictions/planning-fallacy.js +4 -2
  554. package/dist/rerankers/clef.d.ts +8 -2
  555. package/dist/rerankers/clef.js +14 -9
  556. package/dist/rerankers/cross-encoder.d.ts +2 -1
  557. package/dist/rerankers/cross-encoder.js +9 -6
  558. package/dist/rerankers/index.js +2 -1
  559. package/dist/rerankers/jev.js +2 -1
  560. package/dist/rerankers/llm.d.ts +6 -2
  561. package/dist/rerankers/llm.js +8 -3
  562. package/dist/rerankers/remote.d.ts +3 -1
  563. package/dist/rerankers/remote.js +5 -2
  564. package/dist/rerankers/types.d.ts +6 -2
  565. package/dist/search/bm25-search.d.ts +3 -1
  566. package/dist/search/bm25-search.js +15 -2
  567. package/dist/search/boosts.js +4 -3
  568. package/dist/search/embed-memories.d.ts +10 -5
  569. package/dist/search/embed-memories.js +62 -36
  570. package/dist/search/engine.d.ts +4 -1
  571. package/dist/search/engine.js +6 -2
  572. package/dist/search/goal-boost.d.ts +10 -3
  573. package/dist/search/goal-boost.js +13 -6
  574. package/dist/search/hybrid-score.d.ts +4 -1
  575. package/dist/search/hybrid-score.js +4 -1
  576. package/dist/search/hybrid.d.ts +23 -8
  577. package/dist/search/hybrid.js +12 -7
  578. package/dist/search/multihop.js +14 -13
  579. package/dist/search/path-context.d.ts +10 -3
  580. package/dist/search/path-context.js +10 -3
  581. package/dist/search/physics-search.d.ts +9 -4
  582. package/dist/search/physics-search.js +38 -14
  583. package/dist/search/rerank.d.ts +2 -1
  584. package/dist/search/rerank.js +2 -1
  585. package/dist/search/rrf.d.ts +14 -5
  586. package/dist/search/rrf.js +11 -4
  587. package/dist/search/vector.d.ts +8 -2
  588. package/dist/search/vector.js +9 -3
  589. package/dist/server/auth.d.ts +18 -14
  590. package/dist/server/auth.js +69 -38
  591. package/dist/server/boot.d.ts +3 -1
  592. package/dist/server/boot.js +95 -56
  593. package/dist/server/client-ip.d.ts +11 -4
  594. package/dist/server/client-ip.js +27 -10
  595. package/dist/server/cursor.d.ts +10 -3
  596. package/dist/server/cursor.js +10 -3
  597. package/dist/server/deadline.d.ts +5 -2
  598. package/dist/server/deadline.js +10 -3
  599. package/dist/server/key-check-bounds.js +12 -4
  600. package/dist/server/lifecycle.d.ts +4 -1
  601. package/dist/server/lifecycle.js +10 -4
  602. package/dist/server/mcp-http.d.ts +2 -1
  603. package/dist/server/mcp-http.js +37 -22
  604. package/dist/server/rate-limit.d.ts +17 -5
  605. package/dist/server/rate-limit.js +55 -26
  606. package/dist/server/ready.js +7 -4
  607. package/dist/server/request.d.ts +15 -4
  608. package/dist/server/request.js +42 -15
  609. package/dist/server/route-checks.d.ts +4 -1
  610. package/dist/server/route-checks.js +8 -3
  611. package/dist/server/route-table.d.ts +8 -6
  612. package/dist/server/route-table.js +547 -93
  613. package/dist/server/routes/admin.d.ts +7 -7
  614. package/dist/server/routes/admin.js +36 -15
  615. package/dist/server/routes/customer-notes.d.ts +5 -5
  616. package/dist/server/routes/customer-notes.js +5 -4
  617. package/dist/server/routes/decisions.d.ts +5 -5
  618. package/dist/server/routes/decisions.js +12 -6
  619. package/dist/server/routes/incidents.d.ts +5 -5
  620. package/dist/server/routes/incidents.js +10 -4
  621. package/dist/server/routes/memories.d.ts +8 -8
  622. package/dist/server/routes/memories.js +12 -19
  623. package/dist/server/routes/object-routes.d.ts +8 -5
  624. package/dist/server/routes/object-routes.js +4 -2
  625. package/dist/server/routes/policies.d.ts +6 -6
  626. package/dist/server/routes/policies.js +11 -4
  627. package/dist/server/routes/predictions.d.ts +5 -5
  628. package/dist/server/routes/predictions.js +9 -4
  629. package/dist/server/routes/processes.d.ts +5 -5
  630. package/dist/server/routes/processes.js +15 -6
  631. package/dist/server/routes/project-briefs.d.ts +6 -6
  632. package/dist/server/routes/project-briefs.js +3 -2
  633. package/dist/server/routes/recall.d.ts +3 -3
  634. package/dist/server/routes/recall.js +21 -10
  635. package/dist/server/routes/skills.d.ts +6 -6
  636. package/dist/server/routes/skills.js +12 -4
  637. package/dist/server/server-detect.d.ts +24 -8
  638. package/dist/server/server-detect.js +57 -22
  639. package/dist/server/sleep-child.js +16 -10
  640. package/dist/server/sleep-offload.d.ts +8 -5
  641. package/dist/server/sleep-offload.js +41 -19
  642. package/dist/server/tls.d.ts +4 -1
  643. package/dist/server/tls.js +13 -5
  644. package/dist/server/types.d.ts +38 -26
  645. package/dist/server/validation.d.ts +4 -1
  646. package/dist/server/validation.js +22 -9
  647. package/dist/server.d.ts +15 -10
  648. package/dist/server.js +32 -12
  649. package/dist/sharing/global-store.d.ts +5 -10
  650. package/dist/sharing/global-store.js +8 -43
  651. package/dist/sharing/global-sync.d.ts +3 -1
  652. package/dist/sharing/global-sync.js +16 -6
  653. package/dist/sharing/project-merge.d.ts +25 -7
  654. package/dist/sharing/project-merge.js +49 -17
  655. package/dist/sharing/search-both.d.ts +8 -4
  656. package/dist/sharing/search-both.js +19 -12
  657. package/dist/sharing/share.d.ts +8 -4
  658. package/dist/sharing/share.js +39 -15
  659. package/dist/store/ambient.js +9 -5
  660. package/dist/store/audit-event.d.ts +2 -2
  661. package/dist/store/audit-event.js +8 -3
  662. package/dist/store/audit.d.ts +6 -3
  663. package/dist/store/audit.js +16 -6
  664. package/dist/store/auth.d.ts +4 -2
  665. package/dist/store/auth.js +63 -20
  666. package/dist/store/busy.d.ts +9 -0
  667. package/dist/store/busy.js +16 -0
  668. package/dist/store/candidates.d.ts +12 -5
  669. package/dist/store/candidates.js +75 -36
  670. package/dist/store/capture-write.d.ts +2 -1
  671. package/dist/store/capture-write.js +2 -1
  672. package/dist/store/card-detail.d.ts +4 -4
  673. package/dist/store/card-detail.js +15 -8
  674. package/dist/store/cards.d.ts +24 -10
  675. package/dist/store/cards.js +93 -60
  676. package/dist/store/compaction-caller.d.ts +2 -1
  677. package/dist/store/compaction-caller.js +2 -1
  678. package/dist/store/compactions-record.d.ts +14 -8
  679. package/dist/store/compactions-record.js +95 -32
  680. package/dist/store/compactions.js +35 -15
  681. package/dist/store/conflicts.d.ts +9 -4
  682. package/dist/store/conflicts.js +100 -45
  683. package/dist/store/connectors/dlq.d.ts +17 -5
  684. package/dist/store/connectors/dlq.js +56 -5
  685. package/dist/store/connectors/event-log.d.ts +111 -2
  686. package/dist/store/connectors/event-log.js +2 -1
  687. package/dist/store/connectors/github.d.ts +6 -3
  688. package/dist/store/connectors/github.js +24 -40
  689. package/dist/store/connectors/slack.d.ts +2 -1
  690. package/dist/store/connectors/slack.js +25 -37
  691. package/dist/store/dashboard-reads.d.ts +7 -3
  692. package/dist/store/dashboard-reads.js +32 -11
  693. package/dist/store/delete-and-batch.d.ts +17 -11
  694. package/dist/store/delete-and-batch.js +67 -26
  695. package/dist/store/delivery-recorder.d.ts +8 -5
  696. package/dist/store/delivery-recorder.js +70 -32
  697. package/dist/store/descendant-page.d.ts +2 -1
  698. package/dist/store/descendant-page.js +24 -9
  699. package/dist/store/diagnostics.d.ts +2 -1
  700. package/dist/store/diagnostics.js +2 -1
  701. package/dist/store/doctor-reads.d.ts +2 -1
  702. package/dist/store/doctor-reads.js +13 -5
  703. package/dist/store/dormant.d.ts +19 -11
  704. package/dist/store/dormant.js +40 -18
  705. package/dist/store/embeddings/index.d.ts +13 -9
  706. package/dist/store/embeddings/index.js +19 -12
  707. package/dist/store/entry-reads.d.ts +49 -20
  708. package/dist/store/entry-reads.js +181 -66
  709. package/dist/store/entry-row.d.ts +10 -6
  710. package/dist/store/entry-row.js +17 -12
  711. package/dist/store/entry-writes.d.ts +22 -10
  712. package/dist/store/entry-writes.js +41 -14
  713. package/dist/store/failure-log-at.js +1 -1
  714. package/dist/store/failure-log.d.ts +4 -2
  715. package/dist/store/failure-log.js +13 -6
  716. package/dist/store/gated-write.d.ts +3 -3
  717. package/dist/store/gated-write.js +3 -3
  718. package/dist/store/goals.d.ts +5 -4
  719. package/dist/store/goals.js +8 -10
  720. package/dist/store/graph-apply.d.ts +21 -0
  721. package/dist/{graph/write.js → store/graph-apply.js} +31 -11
  722. package/dist/store/graph-queue.d.ts +9 -6
  723. package/dist/store/graph-queue.js +15 -10
  724. package/dist/store/graph-reads.d.ts +16 -11
  725. package/dist/store/graph-reads.js +24 -15
  726. package/dist/store/graph-rows.d.ts +41 -3
  727. package/dist/store/graph-rows.js +10 -7
  728. package/dist/store/graph-view-rows.js +14 -7
  729. package/dist/store/graph-writes.d.ts +16 -10
  730. package/dist/store/graph-writes.js +59 -36
  731. package/dist/store/handoffs.d.ts +4 -4
  732. package/dist/store/handoffs.js +40 -19
  733. package/dist/store/index-and-stats.d.ts +2 -2
  734. package/dist/store/index-and-stats.js +6 -5
  735. package/dist/store/index.d.ts +3 -1
  736. package/dist/store/index.js +1 -0
  737. package/dist/store/key-audit.d.ts +2 -1
  738. package/dist/store/key-audit.js +2 -1
  739. package/dist/store/key-writes.d.ts +2 -1
  740. package/dist/store/key-writes.js +9 -2
  741. package/dist/store/ledger-turn.d.ts +4 -1
  742. package/dist/store/ledger-turn.js +7 -2
  743. package/dist/store/mirrors.d.ts +11 -4
  744. package/dist/store/mirrors.js +88 -16
  745. package/dist/store/narrow.d.ts +6 -0
  746. package/dist/store/narrow.js +11 -0
  747. package/dist/store/open.d.ts +4 -2
  748. package/dist/store/open.js +18 -9
  749. package/dist/store/pilot-arm.d.ts +2 -1
  750. package/dist/store/pilot-arm.js +18 -6
  751. package/dist/store/planning-fallacy-evidence.d.ts +2 -2
  752. package/dist/store/planning-fallacy-evidence.js +8 -5
  753. package/dist/store/port/agent-import.d.ts +62 -0
  754. package/dist/store/port/agent-import.js +2 -0
  755. package/dist/store/port/consolidation.d.ts +129 -0
  756. package/dist/store/port/consolidation.js +2 -0
  757. package/dist/store/port/learning.d.ts +19 -0
  758. package/dist/store/port/learning.js +2 -0
  759. package/dist/store/port/local-files.d.ts +18 -0
  760. package/dist/store/port/local-files.js +2 -0
  761. package/dist/store/port/promotion.d.ts +20 -0
  762. package/dist/store/port/promotion.js +3 -0
  763. package/dist/store/port-groups.d.ts +160 -0
  764. package/dist/store/port-groups.js +2 -0
  765. package/dist/store/port.d.ts +215 -229
  766. package/dist/store/port.js +3 -9
  767. package/dist/store/predictions.d.ts +14 -10
  768. package/dist/store/predictions.js +37 -17
  769. package/dist/store/project-tags.d.ts +4 -1
  770. package/dist/store/project-tags.js +16 -5
  771. package/dist/store/quality-repair.d.ts +8 -4
  772. package/dist/store/quality-repair.js +53 -20
  773. package/dist/store/quarantine.d.ts +1 -0
  774. package/dist/store/quarantine.js +23 -9
  775. package/dist/store/raw-archive.d.ts +5 -4
  776. package/dist/store/raw-archive.js +11 -10
  777. package/dist/store/recall-trace.d.ts +22 -17
  778. package/dist/store/recall-trace.js +126 -63
  779. package/dist/store/rejected-values.d.ts +15 -10
  780. package/dist/store/rejected-values.js +33 -12
  781. package/dist/store/rejection.d.ts +12 -11
  782. package/dist/store/rejection.js +18 -19
  783. package/dist/store/report-reads.d.ts +2 -1
  784. package/dist/store/report-reads.js +2 -1
  785. package/dist/store/rows.d.ts +7 -5
  786. package/dist/store/rows.js +18 -11
  787. package/dist/store/rule-sql.d.ts +6 -4
  788. package/dist/store/rule-sql.js +16 -9
  789. package/dist/store/search-rows.d.ts +14 -9
  790. package/dist/store/search-rows.js +48 -23
  791. package/dist/store/sessions.d.ts +12 -10
  792. package/dist/store/sessions.js +40 -21
  793. package/dist/store/set-aside.d.ts +2 -2
  794. package/dist/store/set-aside.js +18 -5
  795. package/dist/store/sqlite/agent-import.d.ts +3 -0
  796. package/dist/store/sqlite/agent-import.js +77 -0
  797. package/dist/store/sqlite/cards-group.d.ts +6 -0
  798. package/dist/store/sqlite/cards-group.js +37 -0
  799. package/dist/store/sqlite/conflicts-group.d.ts +6 -0
  800. package/dist/store/sqlite/conflicts-group.js +18 -0
  801. package/dist/store/sqlite/connector-events-group.d.ts +2 -1
  802. package/dist/store/sqlite/connector-events-group.js +17 -6
  803. package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
  804. package/dist/store/sqlite/connector-writes-group.js +9 -4
  805. package/dist/store/sqlite/consolidation-group.d.ts +4 -0
  806. package/dist/store/sqlite/consolidation-group.js +64 -0
  807. package/dist/store/sqlite/dag-reads-group.js +1 -1
  808. package/dist/store/sqlite/dormant-group.d.ts +6 -0
  809. package/dist/store/sqlite/dormant-group.js +29 -0
  810. package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
  811. package/dist/store/sqlite/entry-writes-group.js +37 -14
  812. package/dist/store/sqlite/error-codec.d.ts +4 -2
  813. package/dist/store/sqlite/error-codec.js +32 -10
  814. package/dist/store/sqlite/executor-counts.js +2 -1
  815. package/dist/store/sqlite/executor.d.ts +8 -3
  816. package/dist/store/sqlite/executor.js +56 -18
  817. package/dist/store/sqlite/global-promote.d.ts +5 -0
  818. package/dist/store/sqlite/global-promote.js +48 -0
  819. package/dist/store/sqlite/goals-group.d.ts +6 -0
  820. package/dist/store/sqlite/goals-group.js +23 -0
  821. package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
  822. package/dist/store/sqlite/graph-reads-group.js +2 -1
  823. package/dist/store/sqlite/held-connection.d.ts +7 -1
  824. package/dist/store/sqlite/held-connection.js +34 -7
  825. package/dist/store/sqlite/last-recall-group.d.ts +4 -2
  826. package/dist/store/sqlite/last-recall-group.js +9 -4
  827. package/dist/store/sqlite/learning-group.d.ts +4 -0
  828. package/dist/store/sqlite/learning-group.js +17 -0
  829. package/dist/store/sqlite/maintenance-groups.js +2 -1
  830. package/dist/store/sqlite/object-rows.d.ts +6 -3
  831. package/dist/store/sqlite/object-rows.js +34 -5
  832. package/dist/store/sqlite/objects-group.d.ts +5 -4
  833. package/dist/store/sqlite/objects-group.js +84 -33
  834. package/dist/store/sqlite/predictions-group.d.ts +2 -1
  835. package/dist/store/sqlite/predictions-group.js +4 -2
  836. package/dist/store/sqlite/promotion-group.d.ts +3 -0
  837. package/dist/store/sqlite/promotion-group.js +10 -0
  838. package/dist/store/sqlite/quarantine-group.d.ts +2 -1
  839. package/dist/store/sqlite/quarantine-group.js +4 -2
  840. package/dist/store/sqlite/reports-group.d.ts +6 -0
  841. package/dist/store/sqlite/reports-group.js +33 -0
  842. package/dist/store/sqlite/request-scope.d.ts +6 -0
  843. package/dist/store/sqlite/request-scope.js +18 -0
  844. package/dist/store/sqlite/sessions-group.d.ts +6 -0
  845. package/dist/store/sqlite/sessions-group.js +46 -0
  846. package/dist/store/sqlite/store.d.ts +22 -11
  847. package/dist/store/sqlite/store.js +84 -11
  848. package/dist/store/sqlite/vector-pack.js +2 -1
  849. package/dist/store/sqlite/vector-reads-group.js +2 -1
  850. package/dist/store/sqlite/worker-jobs.d.ts +2 -1
  851. package/dist/store/sqlite/worker-jobs.js +19 -7
  852. package/dist/store/sqlite/worker-ops.d.ts +10 -5
  853. package/dist/store/sqlite/worker-ops.js +6 -3
  854. package/dist/store/sqlite/worker-store.d.ts +4 -3
  855. package/dist/store/sqlite/worker-store.js +24 -14
  856. package/dist/store/summaries.d.ts +19 -12
  857. package/dist/store/summaries.js +36 -21
  858. package/dist/store/summary-dirty.d.ts +2 -1
  859. package/dist/store/summary-dirty.js +2 -1
  860. package/dist/store/tenant.d.ts +3 -2
  861. package/dist/store/tenant.js +5 -4
  862. package/dist/store/token-ledger-rows.js +6 -3
  863. package/dist/store/token-ledger.d.ts +19 -13
  864. package/dist/store/token-ledger.js +27 -14
  865. package/dist/store/tombstone-checks.d.ts +4 -1
  866. package/dist/store/tombstone-checks.js +10 -1
  867. package/dist/store/usage-reports.js +2 -1
  868. package/dist/store/vector-index.d.ts +8 -5
  869. package/dist/store/vector-index.js +24 -10
  870. package/dist/store/working-memory.d.ts +6 -4
  871. package/dist/store/working-memory.js +14 -9
  872. package/dist/support-bundle.js +10 -5
  873. package/dist/trust/quarantine.d.ts +1 -2
  874. package/dist/trust/quarantine.js +1 -5
  875. package/dist/trust/reject-flow.d.ts +12 -3
  876. package/dist/trust/reject-flow.js +12 -4
  877. package/dist/util/anthropic-messages.d.ts +4 -1
  878. package/dist/util/anthropic-messages.js +14 -5
  879. package/dist/util/atomic-write.d.ts +4 -2
  880. package/dist/util/atomic-write.js +25 -14
  881. package/dist/util/compaction-items.d.ts +4 -1
  882. package/dist/util/compaction-items.js +8 -2
  883. package/dist/util/crash-handlers.d.ts +7 -2
  884. package/dist/util/crash-handlers.js +13 -4
  885. package/dist/util/env.d.ts +16 -4
  886. package/dist/util/env.js +78 -25
  887. package/dist/util/home-path.js +12 -6
  888. package/dist/util/hook-payload.d.ts +3 -1
  889. package/dist/util/hook-payload.js +3 -1
  890. package/dist/util/http-retry.d.ts +12 -6
  891. package/dist/util/http-retry.js +16 -6
  892. package/dist/util/http-util.d.ts +20 -5
  893. package/dist/util/http-util.js +28 -9
  894. package/dist/util/json.d.ts +4 -1
  895. package/dist/util/json.js +4 -1
  896. package/dist/util/keyset.js +2 -1
  897. package/dist/util/limits.js +4 -2
  898. package/dist/util/log.d.ts +13 -5
  899. package/dist/util/log.js +29 -6
  900. package/dist/util/net.d.ts +5 -0
  901. package/dist/util/net.js +19 -0
  902. package/dist/util/real-path.d.ts +2 -1
  903. package/dist/util/real-path.js +4 -3
  904. package/dist/util/request-scope.d.ts +11 -3
  905. package/dist/util/request-scope.js +13 -4
  906. package/dist/util/same-text.d.ts +10 -3
  907. package/dist/util/same-text.js +10 -3
  908. package/dist/util/secret-detect.d.ts +24 -7
  909. package/dist/util/secret-detect.js +49 -14
  910. package/dist/util/spawn-argv.d.ts +3 -1
  911. package/dist/util/spawn-argv.js +13 -4
  912. package/dist/util/sqlite-blocked.d.ts +15 -4
  913. package/dist/util/sqlite-blocked.js +19 -6
  914. package/dist/util/stored-json.d.ts +4 -1
  915. package/dist/util/stored-json.js +6 -2
  916. package/dist/util/stream-tee.d.ts +2 -1
  917. package/dist/util/stream-tee.js +8 -5
  918. package/dist/util/transcript-tail.d.ts +4 -1
  919. package/dist/util/transcript-tail.js +4 -1
  920. package/dist/util/version.d.ts +8 -3
  921. package/dist/util/version.js +8 -3
  922. package/dist/util/write-budget.d.ts +7 -2
  923. package/dist/util/write-budget.js +5 -2
  924. package/dist/util/yaml.d.ts +4 -1
  925. package/dist/util/yaml.js +4 -1
  926. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  927. package/extensions/openclaw-plugin/package.json +1 -1
  928. package/openclaw.plugin.json +1 -1
  929. package/package.json +2 -1
  930. package/scripts/postinstall.cjs +3 -1
  931. package/dist/api/cards.d.ts +0 -42
  932. package/dist/api/conflicts.d.ts +0 -28
  933. package/dist/api/conflicts.js +0 -61
  934. package/dist/api/dormant.d.ts +0 -14
  935. package/dist/api/dormant.js +0 -58
  936. package/dist/api/goals.d.ts +0 -18
  937. package/dist/api/graph.d.ts +0 -8
  938. package/dist/api/graph.js +0 -8
  939. package/dist/api/learn.js +0 -125
  940. package/dist/api/memories.d.ts +0 -25
  941. package/dist/api/objects.d.ts +0 -9
  942. package/dist/api/outcome.d.ts +0 -19
  943. package/dist/api/predictions.d.ts +0 -11
  944. package/dist/api/promote.d.ts +0 -36
  945. package/dist/api/recall-core.d.ts +0 -4
  946. package/dist/api/recall-core.js +0 -125
  947. package/dist/api/recall-finish.d.ts +0 -53
  948. package/dist/api/recall-finish.js +0 -30
  949. package/dist/api/recall-history.d.ts +0 -64
  950. package/dist/api/recall-history.js +0 -159
  951. package/dist/api/recall-record.d.ts +0 -43
  952. package/dist/api/recall-record.js +0 -78
  953. package/dist/api/recall-request.js +0 -121
  954. package/dist/api/recall.d.ts +0 -6
  955. package/dist/api/refine.d.ts +0 -7
  956. package/dist/api/refine.js +0 -10
  957. package/dist/api/session-owners.d.ts +0 -4
  958. package/dist/api/session-owners.js +0 -17
  959. package/dist/api/sleep-run.d.ts +0 -26
  960. package/dist/api/sleep.js +0 -11
  961. package/dist/graph/write.d.ts +0 -14
  962. package/dist/store/sqlite/busy.d.ts +0 -3
  963. package/dist/store/sqlite/busy.js +0 -8
  964. package/dist/store/sqlite/local.d.ts +0 -4
  965. package/dist/store/sqlite/local.js +0 -8
package/dist/cli.js CHANGED
@@ -12,17 +12,18 @@ import { printGitHubBackfillUsage } from './cli/github.js';
12
12
  import { printError } from './cli/output.js';
13
13
  import { errorFields, errorMessage, isLevelEnabled, log } from './util/log.js';
14
14
  import { STORE_BUSY_MESSAGE } from './store/port.js';
15
- import { isStoreBusy } from './store/sqlite/busy.js';
15
+ import { isStoreBusy } from './api/busy.js';
16
16
  import { flagIsTrue, isBooleanFlag, isStringFlag } from './cli/flag-values.js';
17
- import { USAGE_HEADER, USAGE_EXAMPLES, printAuditPruneUsage, printSlackBackfillUsage, printSlackWorkspacesUsage } from './cli/usage.js';
17
+ import { USAGE_HEADER, USAGE_EXAMPLES, printAuditPruneUsage, printSlackBackfillUsage, printSlackWorkspacesUsage, } from './cli/usage.js';
18
18
  import { flagKind, isKnownFlag, undeclaredFlags } from './cli/flags.js';
19
19
  import { COMMANDS } from './cli/verbs.js';
20
- import { CliExit } from './cli/exit.js';
21
- // Helpers
20
+ import { CliExit, fail } from './cli/exit.js';
22
21
  // A command that does not honour --dry-run would ignore it and run for real.
23
22
  function dryRunRefusal(command, spec, args, flags) {
24
23
  const only = spec?.dryRun;
25
- const honoured = only === undefined ? spec?.flags.switches?.includes('dry-run') : only !== false && only.honoured(args, flags);
24
+ const honoured = only === undefined
25
+ ? spec?.flags.switches?.includes('dry-run')
26
+ : only !== false && only.honoured(args, flags);
26
27
  if (honoured)
27
28
  return null;
28
29
  const where = only ? ` outside \`hippo ${command} ${only.form}\`` : '';
@@ -59,7 +60,6 @@ function setSeparatedFlag(flags, key, next, kind) {
59
60
  return 2;
60
61
  }
61
62
  if (!next || next.startsWith('--') || kind === 'switch') {
62
- // Boolean flag
63
63
  flags[key] = true;
64
64
  return 1;
65
65
  }
@@ -122,7 +122,7 @@ function maybeRepairCodexWrapper(currentCommand, flags) {
122
122
  repairCodexWrapperIfInstalled();
123
123
  }
124
124
  catch (err) {
125
- log.debug(`codex wrapper not repaired: ${errorMessage(err)}`);
125
+ log.debug(`codex wrapper not repaired: ${errorMessage(err)}`, errorFields(err));
126
126
  }
127
127
  }
128
128
  const ROWS = Object.values(COMMANDS);
@@ -154,7 +154,6 @@ function printHelp(command, args) {
154
154
  else
155
155
  console.log(verbUsage(command) ?? usageText());
156
156
  }
157
- // Entry point
158
157
  function printVersion() {
159
158
  const __filename_local = fileURLToPath(import.meta.url);
160
159
  const __dirname_local = path.dirname(__filename_local);
@@ -168,8 +167,7 @@ function printVersion() {
168
167
  * reject it once here so every command, thin-client relays included, sees only a non-empty string. */
169
168
  function rejectEmptyScope(flags) {
170
169
  if ('scope' in flags && (!isStringFlag(flags['scope']) || !flags['scope'].trim())) {
171
- printError('--scope requires a non-empty value (e.g. --scope slack:private:C1).');
172
- throw new CliExit(1);
170
+ fail('--scope requires a non-empty value (e.g. --scope slack:private:C1).');
173
171
  }
174
172
  }
175
173
  // parseArgs stores a value-less flag as boolean true, and NaN then survives every
@@ -179,8 +177,7 @@ function rejectNonNumericFlags(flags, declared) {
179
177
  if (flagKind(declared, key) !== 'number')
180
178
  continue;
181
179
  if (!isStringFlag(raw) || !raw.trim() || !Number.isFinite(Number(raw))) {
182
- printError(`--${key} requires a numeric value.`);
183
- throw new CliExit(1);
180
+ fail(`--${key} requires a numeric value.`);
184
181
  }
185
182
  }
186
183
  }
@@ -189,8 +186,7 @@ function rejectNonNumericFlags(flags, declared) {
189
186
  function rejectValuedSwitches(flags, declared) {
190
187
  for (const [key, raw] of Object.entries(flags)) {
191
188
  if (flagKind(declared, key) === 'switch' && !isBooleanFlag(raw)) {
192
- printError(`--${key} takes no value`);
193
- throw new CliExit(1);
189
+ fail(`--${key} takes no value`);
194
190
  }
195
191
  }
196
192
  }
@@ -207,8 +203,9 @@ function checkUnknownFlags(command, flags, spec) {
207
203
  }
208
204
  // main() refuses --dry-run by name on a verb without one, so that flag is not also called ignored.
209
205
  const ignored = declared ? undeclaredFlags(declared, Object.keys(flags)).filter((key) => key !== 'dry-run') : unknown;
210
- if (ignored.length > 0)
206
+ if (ignored.length > 0) {
211
207
  printError(`hippo: ignoring unknown flag ${flagNames(ignored)}. A later release will reject it.`);
208
+ }
212
209
  }
213
210
  async function main(command, args, flags, hippoRoot) {
214
211
  if (command === '--version' || command === '-v' || flags['version'])
@@ -239,7 +236,7 @@ async function main(command, args, flags, hippoRoot) {
239
236
  throw new CliExit(1);
240
237
  }
241
238
  const run = () => spec.run({ hippoRoot, tenantId: resolveTenantId({}), args, flags });
242
- await (spec.scoped ? (await import('./db/request-stores.js')).runWithRequestStores(run) : run());
239
+ await (spec.scoped ? (await import('./cli/api-context.js')).cliRequest(run) : run());
243
240
  }
244
241
  export async function runCli(argv = process.argv) {
245
242
  const { command, args, flags } = parseArgs(argv);
@@ -1,4 +1,4 @@
1
- import { type HippoStore } from '../store/index.js';
1
+ import type { StoreWith } from '../store/index.js';
2
2
  import type { ConnectorDeadLetter } from '../store/port.js';
3
3
  import type { JsonValue } from '../util/json.js';
4
4
  declare const DEFAULT_BUCKET = "parse_error";
@@ -19,8 +19,8 @@ export interface ParkedRow<Bucket extends string> {
19
19
  bucket: Bucket | typeof DEFAULT_BUCKET;
20
20
  signature: string | null;
21
21
  }
22
- /** What one connector supplies: the tag that names its table to the store, its list, its one-row read and its retry bump.
23
- * `Own` is the columns only its table has. */
22
+ /** What one connector supplies: the tag that names its table to the store, its list, its one-row read and its retry
23
+ * bump. `Own` is the columns only its table has. */
24
24
  export interface ConnectorDlq<Own, Bucket extends string, Item> {
25
25
  readonly letter: (row: ParkedRow<Bucket> & Own) => ConnectorDeadLetter;
26
26
  readonly list: (hippoRoot: string, tenantId: string, limit: number) => Item[];
@@ -28,8 +28,7 @@ export interface ConnectorDlq<Own, Bucket extends string, Item> {
28
28
  /** Adds one to `retry_count` and stamps `retried_at`. */
29
29
  readonly bump: (hippoRoot: string, id: number) => void;
30
30
  }
31
- /** Parks on `store`, else on hippo.db under `hippoRoot`. */
32
- export declare function parkInDlq<Own, Bucket extends string>(dlq: ConnectorDlq<Own, Bucket, unknown>, hippoRoot: string, opts: ParkOpts<Bucket> & NoInfer<Own>, store?: HippoStore): Promise<number>;
31
+ export declare function parkInDlq<Own, Bucket extends string>(dlq: ConnectorDlq<Own, Bucket, unknown>, store: StoreWith<'connectorEvents'>, opts: ParkOpts<Bucket> & NoInfer<Own>): Promise<number>;
33
32
  export declare function listDlq<Item>(dlq: ConnectorDlq<never, never, Item>, hippoRoot: string, opts: {
34
33
  tenantId: string;
35
34
  limit?: number;
@@ -74,7 +73,8 @@ export interface ReplaySteps<Item, Envelope extends JsonValue> {
74
73
  readonly notEnvelope: string;
75
74
  readonly reingest: (row: Item, envelope: Envelope) => Promise<Reingest>;
76
75
  }
77
- /** Re-runs a parked row under today's secret and routing; every attempt past the read is counted once, except a missing signature. */
76
+ /** Re-runs a parked row under today's secret and routing; every
77
+ * attempt past the read is counted once, except a missing signature. */
78
78
  export declare function replayParked<Item extends ParkedEntry, Envelope extends JsonValue>(steps: ReplaySteps<Item, Envelope>, hippoRoot: string, id: number, force: boolean): Promise<ReplayResult>;
79
79
  export {};
80
80
  //# sourceMappingURL=dlq.d.ts.map
@@ -1,14 +1,12 @@
1
- // The dead-letter queue every webhook connector parks into: one redaction, one unroutable sentinel, one set of defaults, one replay result.
1
+ // The dead-letter queue every webhook connector parks into: one redaction, one unroutable sentinel, one set of
2
+ // defaults, one replay result.
2
3
  import { DEFAULT_LIST_LIMIT } from '../util/limits.js';
3
4
  import { DLQ_REDACTED_NOTE, redactPayload } from '../util/secret-detect.js';
4
- import { requireGroup } from '../store/index.js';
5
- import { storeFor } from '../store/sqlite/store.js';
6
5
  import { errorMessage } from '../util/log.js';
7
6
  /** The tenant stored on a row no tenant was resolved for; the column is NOT NULL. */
8
7
  const UNROUTABLE_TENANT = '__unroutable__';
9
8
  const DEFAULT_BUCKET = 'parse_error';
10
- /** Parks on `store`, else on hippo.db under `hippoRoot`. */
11
- export async function parkInDlq(dlq, hippoRoot, opts, store) {
9
+ export async function parkInDlq(dlq, store, opts) {
12
10
  const rawPayload = redactPayload(opts.rawPayload);
13
11
  // A redacted body can never match its signature, so the row keeps none and replay needs --force.
14
12
  const redacted = rawPayload !== opts.rawPayload;
@@ -20,7 +18,7 @@ export async function parkInDlq(dlq, hippoRoot, opts, store) {
20
18
  bucket: opts.bucket ?? DEFAULT_BUCKET,
21
19
  signature: redacted ? null : opts.signature ?? null,
22
20
  });
23
- return requireGroup(storeFor({ hippoRoot, store }), 'connectorEvents').parkDeadLetter(letter);
21
+ return store.connectorEvents.parkDeadLetter(letter);
24
22
  }
25
23
  export function listDlq(dlq, hippoRoot, opts) {
26
24
  return dlq.list(hippoRoot, opts.tenantId, opts.limit ?? DEFAULT_LIST_LIMIT);
@@ -34,7 +32,8 @@ function failAndBump(dlq, hippoRoot, row, status, reason) {
34
32
  dlq.bump(hippoRoot, row.id);
35
33
  return replayFailed(status, row.retryCount + 1, reason);
36
34
  }
37
- /** Re-runs a parked row under today's secret and routing; every attempt past the read is counted once, except a missing signature. */
35
+ /** Re-runs a parked row under today's secret and routing; every
36
+ * attempt past the read is counted once, except a missing signature. */
38
37
  export async function replayParked(steps, hippoRoot, id, force) {
39
38
  const row = steps.dlq.entry(hippoRoot, id);
40
39
  if (!row)
@@ -57,7 +56,12 @@ export async function replayParked(steps, hippoRoot, id, force) {
57
56
  if (!outcome.ok)
58
57
  return failAndBump(steps.dlq, hippoRoot, row, outcome.status, outcome.reason);
59
58
  steps.dlq.bump(hippoRoot, row.id);
60
- const result = { ok: true, status: outcome.status, memoryId: outcome.memoryId, retryCount: row.retryCount + 1 };
59
+ const result = {
60
+ ok: true,
61
+ status: outcome.status,
62
+ memoryId: outcome.memoryId,
63
+ retryCount: row.retryCount + 1,
64
+ };
61
65
  if (outcome.reason !== undefined)
62
66
  result.reason = outcome.reason;
63
67
  return result;
@@ -1,7 +1,7 @@
1
- /** Paginated backfill of the GitHub issues, issue-comments and PR-review-comments streams, each with its own high-water mark (HWM).
2
- * An HWM is persisted only after its stream fully drains, so a crash in stream 2 leaves stream 1 committed and stream 2 resumes from its prior HWM.
1
+ /** Paginated backfill of the GitHub issues, issue-comments and PR-review-comments streams, each with its own HWM.
2
+ * An HWM (high-water mark) is saved only after its stream fully drains, so a crash in stream 2 keeps stream 1.
3
3
  * `repository.private` is left undefined (REST lists omit it), so scopeFromRepository falls through to private. */
4
- import type { Context } from '../../api/index.js';
4
+ import type { ConnectorContext } from '../store.js';
5
5
  import type { GitHubFetcher } from './octokit-client.js';
6
6
  export interface BackfillOpts {
7
7
  /** e.g. 'acme/repo'. */
@@ -24,5 +24,5 @@ export interface BackfillResult {
24
24
  ingested: BackfillStreamCounts;
25
25
  pages: BackfillStreamCounts;
26
26
  }
27
- export declare function backfillRepo(ctx: Context, opts: BackfillOpts): Promise<BackfillResult>;
27
+ export declare function backfillRepo(ctx: ConnectorContext, opts: BackfillOpts): Promise<BackfillResult>;
28
28
  //# sourceMappingURL=backfill.d.ts.map
@@ -1,9 +1,10 @@
1
- /** Paginated backfill of the GitHub issues, issue-comments and PR-review-comments streams, each with its own high-water mark (HWM).
2
- * An HWM is persisted only after its stream fully drains, so a crash in stream 2 leaves stream 1 committed and stream 2 resumes from its prior HWM.
1
+ /** Paginated backfill of the GitHub issues, issue-comments and PR-review-comments streams, each with its own HWM.
2
+ * An HWM (high-water mark) is saved only after its stream fully drains, so a crash in stream 2 keeps stream 1.
3
3
  * `repository.private` is left undefined (REST lists omit it), so scopeFromRepository falls through to private. */
4
4
  import { readCursors, seedCursors, writeHwm } from '../../store/connectors/github.js';
5
5
  import { ingestEvent } from './ingest.js';
6
6
  import { isJsonObject } from '../../util/json.js';
7
+ import { MINUTE_MS } from '../../util/time.js';
7
8
  const API = 'https://api.github.com';
8
9
  /** Build a synthetic `repository` from the known repo full name, because REST list items often omit it.
9
10
  * `private` stays undefined so scopeFromRepository falls through to private. */
@@ -82,9 +83,10 @@ async function drainStream(ctx, url0, options) {
82
83
  }
83
84
  return { ingested, pages, maxUpdatedAt, drained: true };
84
85
  }
85
- // A reset hours away must fail the run for a later rerun; sleeping through it would hold the process for the whole window.
86
+ // A reset hours away must fail the run for a later rerun; sleeping
87
+ // through it would hold the process for the whole window.
86
88
  const MAX_RATE_LIMIT_ATTEMPTS = 5;
87
- const MAX_RATE_LIMIT_WAIT_MS = 10 * 60 * 1000;
89
+ const MAX_RATE_LIMIT_WAIT_MS = 10 * MINUTE_MS;
88
90
  async function fetchPagePastRateLimit(options, url) {
89
91
  const { fetcher, token, sleep } = options;
90
92
  let waitedMs = 0;
@@ -1,4 +1,4 @@
1
- import { type Context } from '../../api/index.js';
1
+ import type { ConnectorContext } from '../store.js';
2
2
  export interface DeletionInput {
3
3
  /** artifact_ref of the comment, e.g. 'github://acme/repo/issue/42/comment/123'
4
4
  * or 'github://acme/repo/pull/7/review_comment/456'. */
@@ -15,7 +15,9 @@ export interface DeletionResult {
15
15
  status: DeletionStatus;
16
16
  archivedCount: number;
17
17
  }
18
- /** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`: archive ALL active raw rows for the artifact_ref in one write.
19
- * Tenant and kind='raw' filtering are load-bearing: without them a deletion could archive another tenant's row or a distilled row. */
20
- export declare function handleCommentDeleted(ctx: Context, input: DeletionInput): Promise<DeletionResult>;
18
+ /** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`:
19
+ * archive ALL active raw rows for the artifact_ref in one write. Tenant and
20
+ * kind='raw' filtering are load-bearing: without them a deletion could
21
+ * archive another tenant's row or a distilled row. */
22
+ export declare function handleCommentDeleted(ctx: ConnectorContext, input: DeletionInput): Promise<DeletionResult>;
21
23
  //# sourceMappingURL=deletion.d.ts.map
@@ -1,10 +1,10 @@
1
- import { requireGroup } from '../../store/index.js';
2
- import { storeFor } from '../../store/sqlite/store.js';
3
- /** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`: archive ALL active raw rows for the artifact_ref in one write.
4
- * Tenant and kind='raw' filtering are load-bearing: without them a deletion could archive another tenant's row or a distilled row. */
1
+ /** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`:
2
+ * archive ALL active raw rows for the artifact_ref in one write. Tenant and
3
+ * kind='raw' filtering are load-bearing: without them a deletion could
4
+ * archive another tenant's row or a distilled row. */
5
5
  export async function handleCommentDeleted(ctx, input) {
6
6
  const { artifactRef, idempotencyKey, deliveryId, eventName } = input;
7
- const done = await requireGroup(storeFor(ctx), 'connectorEvents').archiveDeletedArtifact({
7
+ const done = await ctx.store.connectorEvents.archiveDeletedArtifact({
8
8
  tenantId: ctx.tenantId,
9
9
  actor: ctx.actor.subject,
10
10
  artifactRef,
@@ -1,21 +1,23 @@
1
- import type { Context } from '../../api/index.js';
1
+ import type { ConnectorContext } from '../store.js';
2
2
  import { type DlqBucket, type DlqItem, type GitHubDlqInsert } from '../../store/connectors/github.js';
3
3
  import { type ConnectorDlq, type ReplayResult } from '../dlq.js';
4
4
  export type { DlqBucket, DlqItem };
5
5
  type GitHubOwnColumns = Pick<GitHubDlqInsert, 'eventName' | 'deliveryId' | 'installationId' | 'repoFullName'>;
6
- /** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row without re-reading the payload. */
6
+ /** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row
7
+ * without re-reading the payload. */
7
8
  export declare const githubDlq: ConnectorDlq<GitHubOwnColumns, DlqBucket, DlqItem>;
8
9
  export interface ReplayDlqOpts {
9
10
  /** Current webhook secret. If omitted, signature check is skipped (force-only path). */
10
11
  webhookSecret?: string;
11
- /** Previous webhook secret during rotation, passed to verifyGitHubSignature.previousSecret so old-secret DLQ rows need no --force. */
12
+ /** Previous webhook secret during rotation, passed to verifyGitHubSignature.previousSecret so old-secret DLQ rows
13
+ * need no --force. */
12
14
  previousSecret?: string;
13
15
  /** When true, skip signature verification (used for legacy entries after secret rotation). */
14
16
  force?: boolean;
15
17
  }
16
18
  /** Hook the webhook route injects to re-ingest a row, which keeps this module free of every event-type handler.
17
19
  * No `idempotencyKey` field: ingest re-derives it from the parsed event, and a passed-in key could be stale. */
18
- export type IngestHook = (ctx: Context, args: {
20
+ export type IngestHook = (ctx: ConnectorContext, args: {
19
21
  rawPayload: string;
20
22
  eventName: string;
21
23
  deliveryId: string;
@@ -23,8 +25,8 @@ export type IngestHook = (ctx: Context, args: {
23
25
  memoryId: string | null;
24
26
  }>;
25
27
  /** Replay a DLQ row through the normal ingest path; a failed signature, parse or envelope check bumps retry_count.
26
- * Without an `ingestHook` (dry-run) it bumps retry_count and returns `replayed` with memoryId=null; replays use today's routing, not the original's. */
27
- export declare function replayDlqEntry(ctx: Context, id: number, opts?: ReplayDlqOpts & {
28
+ * No `ingestHook` (dry-run): bumps retry_count, returns `replayed` with memoryId=null. Replays use today's routing. */
29
+ export declare function replayDlqEntry(ctx: ConnectorContext, id: number, opts?: ReplayDlqOpts & {
28
30
  ingestHook?: IngestHook;
29
31
  }): Promise<ReplayResult>;
30
32
  //# sourceMappingURL=dlq.d.ts.map
@@ -2,7 +2,8 @@ import { githubDlqEntry, markGitHubDlqRetried, listGitHubDlq, } from '../../stor
2
2
  import { replayParked } from '../dlq.js';
3
3
  import { verifyGitHubSignature } from './signature.js';
4
4
  import { isGitHubWebhookEnvelope } from './types.js';
5
- /** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row without re-reading the payload. */
5
+ /** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row
6
+ * without re-reading the payload. */
6
7
  export const githubDlq = {
7
8
  letter: (row) => ({ connector: 'github', ...row }),
8
9
  list: listGitHubDlq,
@@ -10,7 +11,7 @@ export const githubDlq = {
10
11
  bump: markGitHubDlqRetried,
11
12
  };
12
13
  /** Replay a DLQ row through the normal ingest path; a failed signature, parse or envelope check bumps retry_count.
13
- * Without an `ingestHook` (dry-run) it bumps retry_count and returns `replayed` with memoryId=null; replays use today's routing, not the original's. */
14
+ * No `ingestHook` (dry-run): bumps retry_count, returns `replayed` with memoryId=null. Replays use today's routing. */
14
15
  export async function replayDlqEntry(ctx, id, opts = {}) {
15
16
  const { webhookSecret, previousSecret, ingestHook } = opts;
16
17
  return replayParked({
@@ -20,8 +21,9 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
20
21
  isEnvelope: isGitHubWebhookEnvelope,
21
22
  notEnvelope: 'not a GitHub webhook envelope',
22
23
  reingest: async (row) => {
23
- if (!ingestHook)
24
+ if (!ingestHook) {
24
25
  return { ok: true, status: 'replayed', memoryId: null, reason: 'dry-run: no ingest hook supplied' };
26
+ }
25
27
  // The hook owns routing, idempotency and the memory write, and re-derives the key from the parsed event.
26
28
  const { memoryId } = await ingestHook(ctx, {
27
29
  rawPayload: row.rawPayload,
@@ -34,10 +36,14 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
34
36
  }
35
37
  function refuseSignature(row, webhookSecret, previousSecret) {
36
38
  if (!row.signature) {
37
- return { status: 'sig_missing', reason: 'row has no signature (legacy, or redacted before storing); pass --force to replay' };
39
+ return {
40
+ status: 'sig_missing',
41
+ reason: 'row has no signature (legacy, or redacted before storing); pass --force to replay',
42
+ };
38
43
  }
39
- if (verifyGitHubSignature({ rawBody: row.rawPayload, signature: row.signature, webhookSecret, previousSecret }))
44
+ if (verifyGitHubSignature({ rawBody: row.rawPayload, signature: row.signature, webhookSecret, previousSecret })) {
40
45
  return null;
46
+ }
41
47
  return {
42
48
  status: 'sig_fail',
43
49
  reason: 'signature did not verify against current GITHUB_WEBHOOK_SECRET; pass --force to replay anyway',
@@ -1,4 +1,4 @@
1
- import type { Context } from '../../api/index.js';
1
+ import type { ConnectorContext } from '../store.js';
2
2
  import { type IngestResult } from '../ingest.js';
3
3
  import type { GitHubIssueEvent, GitHubIssueCommentEvent, GitHubPullRequestEvent, GitHubPullRequestReviewCommentEvent } from './types.js';
4
4
  /** Discriminated union of the four event shapes V1 ingests; eventName MUST equal the X-GitHub-Event header,
@@ -24,5 +24,5 @@ export interface IngestInput {
24
24
  /** X-GitHub-Delivery header value, audit metadata only. */
25
25
  deliveryId: string;
26
26
  }
27
- export declare function ingestEvent(ctx: Context, input: IngestInput): Promise<IngestResult>;
27
+ export declare function ingestEvent(ctx: ConnectorContext, input: IngestInput): Promise<IngestResult>;
28
28
  //# sourceMappingURL=ingest.d.ts.map
@@ -1,8 +1,6 @@
1
1
  // GitHub event ingest, once per idempotency key. The key comes from the event's own content, never from the unsigned
2
- // X-GitHub-Delivery header, so a replay cannot get past it by rotating the delivery id. The pre-check is only the fast path:
3
- // the store logs the key in the memory's own transaction, which is what holds when two workers race.
4
- import { requireGroup } from '../../store/index.js';
5
- import { storeFor } from '../../store/sqlite/store.js';
2
+ // X-GitHub-Delivery header, so a replay cannot get past it by rotating the delivery id. The pre-check is only the fast
3
+ // path: the store logs the key in the memory's own transaction, which is what holds when two workers race.
6
4
  import { rememberWithEventLog } from '../ingest.js';
7
5
  import { computeIdempotencyKey } from './signature.js';
8
6
  import { issueEventToRememberOpts, issueCommentEventToRememberOpts, pullRequestEventToRememberOpts, prReviewCommentEventToRememberOpts, } from './transform.js';
@@ -46,9 +44,14 @@ function eventUpdatedAt(event) {
46
44
  }
47
45
  }
48
46
  export async function ingestEvent(ctx, input) {
49
- const events = requireGroup(storeFor(ctx), 'connectorEvents');
47
+ const events = ctx.store.connectorEvents;
50
48
  const idempotencyKey = computeIdempotencyKey(eventArtifactRef(input.event), eventUpdatedAt(input.event));
51
- const event = { connector: 'github', idempotencyKey, deliveryId: input.deliveryId, eventName: input.event.eventName };
49
+ const event = {
50
+ connector: 'github',
51
+ idempotencyKey,
52
+ deliveryId: input.deliveryId,
53
+ eventName: input.event.eventName,
54
+ };
52
55
  // Fast path: pre-check. Avoids running the transform / opening a write tx
53
56
  // for the common already-seen case (GitHub auto-retries with the same body).
54
57
  const seen = await events.eventRecord(event);
@@ -1,5 +1,7 @@
1
1
  /** Octokit-shaped HTTP fetcher for the GitHub backfill; tests inject a fake `GitHubFetcher`.
2
- * Any non-200 that is not a recognised rate-limit pause MUST throw `GitHubFetchError`, since an empty page would be a silent empty backfill. */
2
+ * Any non-200 that is not a recognised rate-limit pause MUST throw `GitHubFetchError`, since an empty page would be a
3
+ * silent empty backfill.
4
+ */
3
5
  import { type RateLimitInfo } from './ratelimit.js';
4
6
  import type { JsonValue } from '../../util/json.js';
5
7
  export declare class GitHubFetchError extends Error {
@@ -1,5 +1,7 @@
1
1
  /** Octokit-shaped HTTP fetcher for the GitHub backfill; tests inject a fake `GitHubFetcher`.
2
- * Any non-200 that is not a recognised rate-limit pause MUST throw `GitHubFetchError`, since an empty page would be a silent empty backfill. */
2
+ * Any non-200 that is not a recognised rate-limit pause MUST throw `GitHubFetchError`, since an empty page would be a
3
+ * silent empty backfill.
4
+ */
3
5
  import { parseRateLimit } from './ratelimit.js';
4
6
  import { fetchWithRetry } from '../../util/http-retry.js';
5
7
  import { readCappedJson, readCappedText } from '../../util/capped-json.js';
@@ -36,7 +38,10 @@ const ERROR_BODY_SNIPPET_CHARS = 256;
36
38
  const UTF8_MAX_BYTES_PER_CHAR = 4;
37
39
  // A page is at most 100 items (per_page=100), each with a body of up to 65,536 characters at 4 bytes, plus its fields.
38
40
  const GITHUB_MAX_REPLY_BYTES = 32 * 1024 * 1024;
39
- /** The items of a 200 list reply. A body that is not JSON, is over the cap or is not an array throws, so it never reaches ingest as items. */
41
+ /**
42
+ * The items of a 200 list reply. A body that is not JSON, is over the cap or is not an array throws, so it never
43
+ * reaches ingest as items.
44
+ */
40
45
  async function readItems(res, url) {
41
46
  // The path only: a `next` link comes from the server, so its query string is not ours to print.
42
47
  const path = new URL(url).pathname;
@@ -1,9 +1,13 @@
1
- /** GitHub rate-limit header parser: 403 with `X-RateLimit-Remaining: 0` is primary, 429 with `Retry-After` is secondary.
1
+ /**
2
+ * GitHub rate-limit header parser: 403 with `X-RateLimit-Remaining: 0` is primary, 429 with `Retry-After` is secondary.
2
3
  * Backfill must pause and resume rather than error. */
3
4
  export interface RateLimitInfo {
4
5
  readonly sleepSeconds: number;
5
6
  readonly reason: 'primary' | 'secondary' | 'none';
6
7
  }
7
- /** Parse the rate-limit signal from a GitHub response; `headers` are lower-cased and `now` (epoch seconds) is for deterministic tests. */
8
+ /**
9
+ * Parse the rate-limit signal from a GitHub response; `headers` are lower-cased and `now` (epoch seconds) is for
10
+ * deterministic tests.
11
+ */
8
12
  export declare function parseRateLimit(headers: Record<string, string | undefined>, status: number, now?: number): RateLimitInfo;
9
13
  //# sourceMappingURL=ratelimit.d.ts.map
@@ -1,6 +1,10 @@
1
- /** GitHub rate-limit header parser: 403 with `X-RateLimit-Remaining: 0` is primary, 429 with `Retry-After` is secondary.
1
+ /**
2
+ * GitHub rate-limit header parser: 403 with `X-RateLimit-Remaining: 0` is primary, 429 with `Retry-After` is secondary.
2
3
  * Backfill must pause and resume rather than error. */
3
- /** Parse the rate-limit signal from a GitHub response; `headers` are lower-cased and `now` (epoch seconds) is for deterministic tests. */
4
+ /**
5
+ * Parse the rate-limit signal from a GitHub response; `headers` are lower-cased and `now` (epoch seconds) is for
6
+ * deterministic tests.
7
+ */
4
8
  export function parseRateLimit(headers, status, now) {
5
9
  const _now = now ?? Math.floor(Date.now() / 1000);
6
10
  if (status === 429) {
@@ -6,11 +6,22 @@ export interface VerifyOpts {
6
6
  /** Previous secret for rotation parity with Slack. Optional. */
7
7
  previousSecret?: string;
8
8
  }
9
+ /**
10
+ * True for a header that could be a GitHub signature; anything else is refused before the body is read, since no secret
11
+ * can make it match.
12
+ */
13
+ export declare function isWellFormedGitHubSignature(signature: string): boolean;
9
14
  export declare function verifyGitHubSignature(opts: VerifyOpts): boolean;
10
- /** Source-aware idempotency key: artifact_ref plus the source-side updated_at, so a webhook and a REST backfill of the SAME event dedupe.
11
- * An edit gets a new key (a new revision); both inputs come from the parsed event, not the unsigned delivery header, so replays cannot bypass dedupe. */
15
+ /**
16
+ * Source-aware idempotency key: artifact_ref plus the source-side updated_at, so a webhook and a REST backfill of the
17
+ * SAME event dedupe.
18
+ * An edit gets a new key (a new revision); both inputs come from the parsed event, not the unsigned delivery header, so
19
+ * replays cannot bypass dedupe.
20
+ */
12
21
  export declare function computeIdempotencyKey(artifactRef: string, updatedAt: string | null | undefined): string;
13
22
  /** Deletion idempotency key: sha256('deleted:' + artifactRef + ':' + updatedAt).
14
- * A separate namespace so an ingest's event-log row cannot make a deletion return 'duplicate'; retries of the same deletion still dedupe. */
23
+ * A separate namespace so an ingest's event-log row cannot make a deletion return 'duplicate'; retries of the same
24
+ * deletion still dedupe.
25
+ */
15
26
  export declare function computeDeletionKey(artifactRef: string, updatedAt: string | null | undefined): string;
16
27
  //# sourceMappingURL=signature.d.ts.map
@@ -1,4 +1,12 @@
1
1
  import { createHmac, createHash, timingSafeEqual } from 'crypto';
2
+ const SIGNATURE_HEADER_RE = /^sha256=[0-9a-f]{64}$/;
3
+ /**
4
+ * True for a header that could be a GitHub signature; anything else is refused before the body is read, since no secret
5
+ * can make it match.
6
+ */
7
+ export function isWellFormedGitHubSignature(signature) {
8
+ return SIGNATURE_HEADER_RE.test(signature);
9
+ }
2
10
  function verifyOne(rawBody, signature, secret) {
3
11
  if (!signature.startsWith('sha256='))
4
12
  return false;
@@ -16,13 +24,19 @@ export function verifyGitHubSignature(opts) {
16
24
  return true;
17
25
  return false;
18
26
  }
19
- /** Source-aware idempotency key: artifact_ref plus the source-side updated_at, so a webhook and a REST backfill of the SAME event dedupe.
20
- * An edit gets a new key (a new revision); both inputs come from the parsed event, not the unsigned delivery header, so replays cannot bypass dedupe. */
27
+ /**
28
+ * Source-aware idempotency key: artifact_ref plus the source-side updated_at, so a webhook and a REST backfill of the
29
+ * SAME event dedupe.
30
+ * An edit gets a new key (a new revision); both inputs come from the parsed event, not the unsigned delivery header, so
31
+ * replays cannot bypass dedupe.
32
+ */
21
33
  export function computeIdempotencyKey(artifactRef, updatedAt) {
22
34
  return createHash('sha256').update(`${artifactRef}:${updatedAt ?? ''}`).digest('hex');
23
35
  }
24
36
  /** Deletion idempotency key: sha256('deleted:' + artifactRef + ':' + updatedAt).
25
- * A separate namespace so an ingest's event-log row cannot make a deletion return 'duplicate'; retries of the same deletion still dedupe. */
37
+ * A separate namespace so an ingest's event-log row cannot make a deletion return 'duplicate'; retries of the same
38
+ * deletion still dedupe.
39
+ */
26
40
  export function computeDeletionKey(artifactRef, updatedAt) {
27
41
  return createHash('sha256').update(`deleted:${artifactRef}:${updatedAt ?? ''}`).digest('hex');
28
42
  }
@@ -1,11 +1,13 @@
1
- import { type HippoStore } from '../../store/index.js';
1
+ import type { StoreWith } from '../../store/index.js';
2
2
  export interface ResolveArgs {
3
3
  /** String form of `installation.id`. `null`/`undefined` means "no installation field" (PAT-mode webhook). */
4
4
  installationId?: string | null;
5
5
  /** `repository.full_name` from the webhook envelope, used for PAT-mode multi-tenant routing. */
6
6
  repoFullName?: string | null;
7
7
  }
8
- /** Resolve a GitHub envelope's tenant_id by installation id, then repository.full_name; the HIPPO_TENANT fallback applies only if both tables are empty.
9
- * An unknown installation or repo on a multi-tenant deployment returns null (fail closed); GITHUB_ALLOW_UNKNOWN_INSTALLATION_FALLBACK=1 escapes. */
10
- export declare function resolveTenantForGitHub(hippoRoot: string, args: ResolveArgs, store?: HippoStore): Promise<string | null>;
8
+ /** Resolve a GitHub envelope's tenant_id by installation id, then
9
+ * repository.full_name; the HIPPO_TENANT fallback applies only if both tables are
10
+ * empty. An unknown installation or repo on a multi-tenant deployment returns
11
+ * null (fail closed); GITHUB_ALLOW_UNKNOWN_INSTALLATION_FALLBACK=1 escapes. */
12
+ export declare function resolveTenantForGitHub(store: StoreWith<'connectorEvents'>, args: ResolveArgs): Promise<string | null>;
11
13
  //# sourceMappingURL=tenant-routing.d.ts.map
@@ -1,12 +1,12 @@
1
1
  import { envGitHubAllowUnknownInstallationFallback, envTenant } from '../../util/env.js';
2
- import { requireGroup } from '../../store/index.js';
3
- import { storeFor } from '../../store/sqlite/store.js';
4
- /** Resolve a GitHub envelope's tenant_id by installation id, then repository.full_name; the HIPPO_TENANT fallback applies only if both tables are empty.
5
- * An unknown installation or repo on a multi-tenant deployment returns null (fail closed); GITHUB_ALLOW_UNKNOWN_INSTALLATION_FALLBACK=1 escapes. */
6
- export async function resolveTenantForGitHub(hippoRoot, args, store) {
2
+ /** Resolve a GitHub envelope's tenant_id by installation id, then
3
+ * repository.full_name; the HIPPO_TENANT fallback applies only if both tables are
4
+ * empty. An unknown installation or repo on a multi-tenant deployment returns
5
+ * null (fail closed); GITHUB_ALLOW_UNKNOWN_INSTALLATION_FALLBACK=1 escapes. */
6
+ export async function resolveTenantForGitHub(store, args) {
7
7
  const envFallback = () => envTenant();
8
8
  const escapeHatch = envGitHubAllowUnknownInstallationFallback();
9
- const routing = await requireGroup(storeFor({ hippoRoot, store }), 'connectorEvents').githubRouting(args);
9
+ const routing = await store.connectorEvents.githubRouting(args);
10
10
  if (routing.tenant)
11
11
  return routing.tenant;
12
12
  if (args.installationId) {