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,107 +1,18 @@
1
- import { openHippoDb, closeHippoDb } from '../../db.js';
1
+ import { bumpGitHubDlqRetryCount, githubDlqEntry, listGitHubDlq, } from '../../store/connectors/github.js';
2
+ import { replayFailed } from '../dlq.js';
2
3
  import { verifyGitHubSignature } from './signature.js';
3
4
  import { isGitHubWebhookEnvelope } from './types.js';
4
- import { redactPayload, DLQ_REDACTED_NOTE } from '../../secret-detect.js';
5
- export function writeToDlq(db, opts) {
6
- const rawPayload = redactPayload(opts.rawPayload);
7
- const redacted = rawPayload !== opts.rawPayload;
8
- const result = db
9
- .prepare(`INSERT INTO github_dlq
10
- (tenant_id, raw_payload, error, event_name, delivery_id, signature,
11
- installation_id, repo_full_name, received_at, bucket)
12
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
13
- .run(opts.tenantId ?? '__unroutable__', rawPayload, redacted ? `${opts.error}; ${DLQ_REDACTED_NOTE}` : opts.error, opts.eventName ?? null, opts.deliveryId ?? null, redacted ? null : opts.signature ?? null, opts.installationId ?? null, opts.repoFullName ?? null, new Date().toISOString(), opts.bucket ?? 'parse_error');
14
- return Number(result.lastInsertRowid);
15
- }
16
- const SELECT_COLUMNS = `id, tenant_id, raw_payload, error, event_name, delivery_id,
17
- signature, installation_id, repo_full_name, retry_count,
18
- received_at, retried_at, bucket`;
19
- export function listDlq(db, opts) {
20
- // SAFETY: rows come from the SELECT above (SELECT_COLUMNS), which projects
21
- // exactly DlqRawRow's fields, in the same order github_dlq defines them.
22
- const rows = db
23
- .prepare(`SELECT ${SELECT_COLUMNS}
24
- FROM github_dlq
25
- WHERE tenant_id = ?
26
- ORDER BY received_at ASC
27
- LIMIT ?`)
28
- .all(opts.tenantId, opts.limit ?? 100);
29
- return rows.map(rowToItem);
30
- }
31
- export function getDlqEntry(db, id) {
32
- // SAFETY: the row comes from the SELECT above (SELECT_COLUMNS), which
33
- // projects exactly DlqRawRow's fields, in the same order github_dlq defines them.
34
- const row = db
35
- .prepare(`SELECT ${SELECT_COLUMNS}
36
- FROM github_dlq
37
- WHERE id = ?`)
38
- .get(id);
39
- if (!row)
40
- return null;
41
- return rowToItem(row);
42
- }
43
- function rowToItem(r) {
44
- return {
45
- id: Number(r.id),
46
- tenantId: String(r.tenant_id),
47
- rawPayload: String(r.raw_payload),
48
- error: String(r.error),
49
- eventName: r.event_name == null ? null : String(r.event_name),
50
- deliveryId: r.delivery_id == null ? null : String(r.delivery_id),
51
- signature: r.signature == null ? null : String(r.signature),
52
- installationId: r.installation_id == null ? null : String(r.installation_id),
53
- repoFullName: r.repo_full_name == null ? null : String(r.repo_full_name),
54
- retryCount: Number(r.retry_count ?? 0),
55
- receivedAt: String(r.received_at),
56
- retriedAt: r.retried_at == null ? null : String(r.retried_at),
57
- bucket: r.bucket == null ? 'parse_error' : String(r.bucket),
58
- };
59
- }
60
- function bumpRetryCount(hippoRoot, id) {
61
- const db = openHippoDb(hippoRoot);
62
- try {
63
- db.prepare(`UPDATE github_dlq
64
- SET retry_count = retry_count + 1,
65
- retried_at = ?
66
- WHERE id = ?`).run(new Date().toISOString(), id);
67
- }
68
- finally {
69
- closeHippoDb(db);
70
- }
71
- }
72
- /**
73
- * Replay a DLQ row through the normal ingest path. Behavior:
74
- * 1. Fetch row by id. Not found → `not_found`.
75
- * 2. If !force and webhookSecret provided, verify signature with the
76
- * current secret. Fail → bump retry_count, `sig_fail`.
77
- * Missing signature on the row → `sig_missing` (no bump; --force required).
78
- * 3. JSON.parse the raw payload. Fail → bump, `parse_error`.
79
- * 4. Type-guard the envelope. Fail → bump, `unhandled`.
80
- * 5. If an `ingestHook` is supplied, call it and return its memoryId.
81
- * If not (dry-run path), bump retry_count and return status `replayed`
82
- * with memoryId=null. The webhook route wires the real hook.
83
- *
84
- * Mirrors Slack's "always use current routing" policy: replays use the
85
- * deployment state NOW, not at the time of original DLQing.
86
- */
5
+ /** GitHub's dead-letter table; the event, delivery, installation and repo columns let an operator triage a row without re-reading the payload. */
6
+ export const githubDlq = {
7
+ letter: (row) => ({ connector: 'github', ...row }),
8
+ list: listGitHubDlq,
9
+ };
10
+ /** Replay a DLQ row through the normal ingest path; a failed signature, parse or envelope check bumps retry_count.
11
+ * Without an `ingestHook` (dry-run) it bumps retry_count and returns `replayed` with memoryId=null; replays use today's routing, not the original's. */
87
12
  export async function replayDlqEntry(ctx, id, opts = {}) {
88
- const db = openHippoDb(ctx.hippoRoot);
89
- let row;
90
- try {
91
- row = getDlqEntry(db, id);
92
- }
93
- finally {
94
- closeHippoDb(db);
95
- }
96
- if (!row) {
97
- return {
98
- ok: false,
99
- status: 'not_found',
100
- memoryId: null,
101
- retryCount: 0,
102
- reason: `dlq id ${id} not found`,
103
- };
104
- }
13
+ const row = githubDlqEntry(ctx.hippoRoot, id);
14
+ if (!row)
15
+ return replayFailed('not_found', 0, `dlq id ${id} not found`);
105
16
  // Signature verification (current secret, not the one in effect when DLQed).
106
17
  if (!opts.force && opts.webhookSecret) {
107
18
  const sigFailure = checkReplaySignature(ctx.hippoRoot, id, row, opts.webhookSecret, opts.previousSecret);
@@ -113,7 +24,7 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
113
24
  return envelopeFailure;
114
25
  // Without an ingest hook this is a dry-run validation. Bump and report.
115
26
  if (!opts.ingestHook) {
116
- bumpRetryCount(ctx.hippoRoot, id);
27
+ bumpGitHubDlqRetryCount(ctx.hippoRoot, id);
117
28
  return {
118
29
  ok: true,
119
30
  status: 'replayed',
@@ -122,9 +33,7 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
122
33
  reason: 'dry-run: no ingest hook supplied',
123
34
  };
124
35
  }
125
- // Real replay path. The route's IngestHook is responsible for routing,
126
- // idempotency, and writing the memory. The DLQ module only validates the
127
- // surface and bumps the retry counter.
36
+ // Real replay path: the route's IngestHook owns routing, idempotency and the memory write; this module only validates and bumps the retry counter.
128
37
  // No idempotencyKey arg: the hook re-derives it from the parsed event (artifact_ref + updated_at).
129
38
  const eventName = row.eventName ?? '';
130
39
  const deliveryId = row.deliveryId ?? '';
@@ -133,7 +42,7 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
133
42
  eventName,
134
43
  deliveryId,
135
44
  });
136
- bumpRetryCount(ctx.hippoRoot, id);
45
+ bumpGitHubDlqRetryCount(ctx.hippoRoot, id);
137
46
  return {
138
47
  ok: true,
139
48
  status: 'replayed',
@@ -144,13 +53,7 @@ export async function replayDlqEntry(ctx, id, opts = {}) {
144
53
  /** The failure result when the row cannot pass the signature gate, else null. */
145
54
  function checkReplaySignature(hippoRoot, id, row, webhookSecret, previousSecret) {
146
55
  if (!row.signature) {
147
- return {
148
- ok: false,
149
- status: 'sig_missing',
150
- memoryId: null,
151
- retryCount: row.retryCount,
152
- reason: 'row has no signature (legacy, or redacted before storing); pass --force to replay',
153
- };
56
+ return replayFailed('sig_missing', row.retryCount, 'row has no signature (legacy, or redacted before storing); pass --force to replay');
154
57
  }
155
58
  const sigOk = verifyGitHubSignature({
156
59
  rawBody: row.rawPayload,
@@ -159,14 +62,8 @@ function checkReplaySignature(hippoRoot, id, row, webhookSecret, previousSecret)
159
62
  previousSecret,
160
63
  });
161
64
  if (!sigOk) {
162
- bumpRetryCount(hippoRoot, id);
163
- return {
164
- ok: false,
165
- status: 'sig_fail',
166
- memoryId: null,
167
- retryCount: row.retryCount + 1,
168
- reason: 'signature did not verify against current GITHUB_WEBHOOK_SECRET; pass --force to replay anyway',
169
- };
65
+ bumpGitHubDlqRetryCount(hippoRoot, id);
66
+ return replayFailed('sig_fail', row.retryCount + 1, 'signature did not verify against current GITHUB_WEBHOOK_SECRET; pass --force to replay anyway');
170
67
  }
171
68
  return null;
172
69
  }
@@ -177,28 +74,14 @@ function checkReplayEnvelope(hippoRoot, id, row) {
177
74
  parsed = JSON.parse(row.rawPayload);
178
75
  }
179
76
  catch (e) {
180
- bumpRetryCount(hippoRoot, id);
181
- // SAFETY: this is a best-effort error message only; property access on
182
- // any JS value is safe (undefined if absent), preserving the existing
183
- // lenient formatting even when something non-Error was thrown.
77
+ bumpGitHubDlqRetryCount(hippoRoot, id);
78
+ // SAFETY: best-effort error message only; property access on any JS value is safe, even for a non-Error throw.
184
79
  const message = e.message;
185
- return {
186
- ok: false,
187
- status: 'parse_error',
188
- memoryId: null,
189
- retryCount: row.retryCount + 1,
190
- reason: `still unparseable: ${message}`,
191
- };
80
+ return replayFailed('parse_error', row.retryCount + 1, `still unparseable: ${message}`);
192
81
  }
193
82
  if (!isGitHubWebhookEnvelope(parsed)) {
194
- bumpRetryCount(hippoRoot, id);
195
- return {
196
- ok: false,
197
- status: 'unhandled',
198
- memoryId: null,
199
- retryCount: row.retryCount + 1,
200
- reason: 'not a GitHub webhook envelope',
201
- };
83
+ bumpGitHubDlqRetryCount(hippoRoot, id);
84
+ return replayFailed('unhandled', row.retryCount + 1, 'not a GitHub webhook envelope');
202
85
  }
203
86
  return null;
204
87
  }
@@ -1,37 +1,12 @@
1
- /**
2
- * GitHub event ingest with afterWrite race-safe idempotency.
3
- *
4
- * Mirrors src/connectors/slack/ingest.ts. The dedupe key is sha256(eventName +
5
- * ':' + rawBody), derived from the signed body, not from the
6
- * unsigned X-GitHub-Delivery header, so a replay attacker cannot bypass
7
- * idempotency by rotating the delivery UUID.
8
- *
9
- * Race semantics:
10
- * - Fast path: hasSeenKey pre-check returns 'duplicate' for the common case.
11
- * - Slow path: hasSeenKey passes (no row yet). Two workers may race into
12
- * remember() concurrently. Inside the writeEntry SAVEPOINT, INSERT OR
13
- * IGNORE on github_event_log either inserts (changes=1, commit) or
14
- * collides (changes=0, throw DuplicateIdempotencyError -> SAVEPOINT
15
- * rolls back this worker's memory row). Exactly one memory exists per
16
- * idempotency_key.
17
- *
18
- * The `__testInjectBeforeLog` hook below lets tests pre-populate github_event_log
19
- * inside the SAVEPOINT to exercise the changes=0 -> rollback path, not just the fast path.
20
- */
21
- import { type Context } from '../../api.js';
22
- import { type DatabaseSyncLike } from '../../db.js';
1
+ import { type Context } from '../../api/index.js';
23
2
  import type { GitHubIssueEvent, GitHubIssueCommentEvent, GitHubPullRequestEvent, GitHubPullRequestReviewCommentEvent } from './types.js';
24
3
  export type IngestStatus = 'ingested' | 'duplicate' | 'skipped' | 'skipped_duplicate';
25
4
  export interface IngestResult {
26
5
  status: IngestStatus;
27
6
  memoryId: string | null;
28
7
  }
29
- /**
30
- * Discriminated union of the four event shapes V1 ingests. The eventName
31
- * field MUST equal the X-GitHub-Event header value; computeIdempotencyKey
32
- * folds it into the dedupe key so the same body posted under two different
33
- * X-GitHub-Event headers produces two distinct keys (test 7).
34
- */
8
+ /** Discriminated union of the four event shapes V1 ingests; eventName MUST equal the X-GitHub-Event header,
9
+ * since computeIdempotencyKey folds it into the dedupe key. */
35
10
  export type IngestEvent = {
36
11
  eventName: 'issues';
37
12
  payload: GitHubIssueEvent;
@@ -52,14 +27,6 @@ export interface IngestInput {
52
27
  rawBody: string;
53
28
  /** X-GitHub-Delivery header value, audit metadata only. */
54
29
  deliveryId: string;
55
- /**
56
- * Test-only hook fired inside the SAVEPOINT, AFTER the memory row is
57
- * inserted but BEFORE the github_event_log INSERT OR IGNORE. Tests pass
58
- * a function that pre-inserts the github_event_log row using the
59
- * provided db handle to simulate a concurrent worker winning the race.
60
- * Production callers leave this undefined.
61
- */
62
- __testInjectBeforeLog?: (db: DatabaseSyncLike, idempotencyKey: string) => void;
63
30
  }
64
- export declare function ingestEvent(ctx: Context, input: IngestInput): IngestResult;
31
+ export declare function ingestEvent(ctx: Context, input: IngestInput): Promise<IngestResult>;
65
32
  //# sourceMappingURL=ingest.d.ts.map
@@ -1,27 +1,9 @@
1
- /**
2
- * GitHub event ingest with afterWrite race-safe idempotency.
3
- *
4
- * Mirrors src/connectors/slack/ingest.ts. The dedupe key is sha256(eventName +
5
- * ':' + rawBody), derived from the signed body, not from the
6
- * unsigned X-GitHub-Delivery header, so a replay attacker cannot bypass
7
- * idempotency by rotating the delivery UUID.
8
- *
9
- * Race semantics:
10
- * - Fast path: hasSeenKey pre-check returns 'duplicate' for the common case.
11
- * - Slow path: hasSeenKey passes (no row yet). Two workers may race into
12
- * remember() concurrently. Inside the writeEntry SAVEPOINT, INSERT OR
13
- * IGNORE on github_event_log either inserts (changes=1, commit) or
14
- * collides (changes=0, throw DuplicateIdempotencyError -> SAVEPOINT
15
- * rolls back this worker's memory row). Exactly one memory exists per
16
- * idempotency_key.
17
- *
18
- * The `__testInjectBeforeLog` hook below lets tests pre-populate github_event_log
19
- * inside the SAVEPOINT to exercise the changes=0 -> rollback path, not just the fast path.
20
- */
21
- import { remember } from '../../api.js';
22
- import { openHippoDb, closeHippoDb } from '../../db.js';
23
- import { RejectedValueError } from '../../rejection.js';
24
- import { hasSeenKey, lookupMemoryByKey, DuplicateIdempotencyError } from './idempotency.js';
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 { remember } from '../../api/index.js';
5
+ import { requireGroup, storeFor } from '../../store/index.js';
6
+ import { RejectedValueError } from '../../store/rejection.js';
25
7
  import { computeIdempotencyKey } from './signature.js';
26
8
  import { issueEventToRememberOpts, issueCommentEventToRememberOpts, pullRequestEventToRememberOpts, prReviewCommentEventToRememberOpts, } from './transform.js';
27
9
  function transformEvent(event) {
@@ -36,12 +18,8 @@ function transformEvent(event) {
36
18
  return prReviewCommentEventToRememberOpts(event.payload);
37
19
  }
38
20
  }
39
- /**
40
- * Extract the source-normalized identifier the idempotency key needs.
41
- * Backfill and webhook both produce IngestEvent objects describing the same
42
- * source revision, so deriving the key from these fields collapses both paths
43
- * onto the same dedupe row. Mirrors the artifactRef strings in transform.ts.
44
- */
21
+ /** Extract the source-normalized identifier the idempotency key needs, so backfill and webhook deliveries of the same
22
+ * source revision collapse onto one dedupe row. Mirrors the artifactRef strings in transform.ts. */
45
23
  function eventArtifactRef(event) {
46
24
  const repo = event.payload.repository?.full_name ?? 'unknown/unknown';
47
25
  switch (event.eventName) {
@@ -67,87 +45,40 @@ function eventUpdatedAt(event) {
67
45
  return event.payload.comment.updated_at ?? null;
68
46
  }
69
47
  }
70
- const INSERT_EVENT_LOG_SQL = `INSERT OR IGNORE INTO github_event_log (idempotency_key, delivery_id, event_name, ingested_at, memory_id) VALUES (?, ?, ?, ?, ?)`;
71
- export function ingestEvent(ctx, input) {
48
+ export async function ingestEvent(ctx, input) {
49
+ const events = requireGroup(storeFor(ctx), 'connectorEvents');
72
50
  const idempotencyKey = computeIdempotencyKey(eventArtifactRef(input.event), eventUpdatedAt(input.event));
51
+ const event = { connector: 'github', idempotencyKey, deliveryId: input.deliveryId, eventName: input.event.eventName };
73
52
  // Fast path: pre-check. Avoids running the transform / opening a write tx
74
53
  // for the common already-seen case (GitHub auto-retries with the same body).
75
- const db = openHippoDb(ctx.hippoRoot);
76
- try {
77
- if (hasSeenKey(db, idempotencyKey)) {
78
- return { status: 'duplicate', memoryId: lookupMemoryByKey(db, idempotencyKey) };
79
- }
80
- }
81
- finally {
82
- closeHippoDb(db);
83
- }
54
+ const seen = await events.eventRecord(event);
55
+ if (seen.seen)
56
+ return { status: 'duplicate', memoryId: seen.memoryId };
84
57
  const opts = transformEvent(input.event);
85
58
  if (!opts) {
86
- // Empty body: no memory to write, but mark seen so a retry of the same
87
- // empty event returns 'duplicate' (not 'skipped' again — that would
88
- // re-run the transform on every retry).
89
- markKeySeenWithoutMemory(ctx.hippoRoot, idempotencyKey, input);
59
+ // Empty body: no memory to write, but mark seen so a retry returns 'duplicate' instead of re-running the transform.
60
+ await events.markEventSeen(event);
90
61
  return { status: 'skipped', memoryId: null };
91
62
  }
92
- // Atomic write via afterWrite. Inside writeEntry's SAVEPOINT:
93
- // 1. memories row INSERT lands.
94
- // 2. (test-only) __testInjectBeforeLog can race-inject a colliding key.
95
- // 3. INSERT OR IGNORE on github_event_log; if a concurrent worker (or
96
- // the test injection) beat us, changes=0 -> throw -> SAVEPOINT rolls
97
- // back our memory row. Other worker's commit stands.
98
63
  try {
99
- return rememberWithEventLog(ctx, input, idempotencyKey, opts);
64
+ return await rememberWithEventLog(ctx, event, opts);
100
65
  }
101
66
  catch (e) {
102
- if (e instanceof DuplicateIdempotencyError) {
103
- // Other worker's row is committed. Return its memory_id so callers
104
- // behave identically to the fast-path 'duplicate' branch.
105
- const db3 = openHippoDb(ctx.hippoRoot);
106
- try {
107
- return { status: 'skipped_duplicate', memoryId: lookupMemoryByKey(db3, idempotencyKey) };
108
- }
109
- finally {
110
- closeHippoDb(db3);
111
- }
112
- }
113
67
  if (e instanceof RejectedValueError) {
114
68
  // A tombstone hit is a PERMANENT skip, never DLQ-retried: mark the key seen like the empty-body
115
69
  // branch above so a GitHub retry of the same delivery acks as done, not error.
116
- markKeySeenWithoutMemory(ctx.hippoRoot, idempotencyKey, input);
70
+ await events.markEventSeen(event);
117
71
  return { status: 'skipped', memoryId: null };
118
72
  }
119
73
  throw e;
120
74
  }
121
75
  }
122
- function markKeySeenWithoutMemory(hippoRoot, idempotencyKey, input) {
123
- const db = openHippoDb(hippoRoot);
124
- try {
125
- db
126
- .prepare(INSERT_EVENT_LOG_SQL)
127
- .run(idempotencyKey, input.deliveryId, input.event.eventName, new Date().toISOString(), null);
128
- }
129
- finally {
130
- closeHippoDb(db);
131
- }
132
- }
133
- function rememberWithEventLog(ctx, input, idempotencyKey, opts) {
134
- // No `|| 'connector:github'` fallback (see rememberWithEventLog in slack/ingest.ts for rationale).
135
- const result = remember({ ...ctx, store: undefined }, // the event log row commits with the memory on hippo.db's own handle, never through a store
136
- {
137
- ...opts,
138
- untrusted: true,
139
- afterWrite: (innerDb, memoryId) => {
140
- if (input.__testInjectBeforeLog) {
141
- input.__testInjectBeforeLog(innerDb, idempotencyKey);
142
- }
143
- const inserted = innerDb
144
- .prepare(INSERT_EVENT_LOG_SQL)
145
- .run(idempotencyKey, input.deliveryId, input.event.eventName, new Date().toISOString(), memoryId);
146
- if (Number(inserted.changes ?? 0) === 0) {
147
- throw new DuplicateIdempotencyError(idempotencyKey);
148
- }
149
- },
150
- });
76
+ async function rememberWithEventLog(ctx, event, opts) {
77
+ // No `|| 'connector:github'` fallback: the caller always builds ctx with the connector subject (same as slack/ingest.ts).
78
+ const result = await remember(ctx, { ...opts, untrusted: true, event });
79
+ // Another worker logged this key between the pre-check and the write: its memory stands and ours was not stored.
80
+ if (result.duplicate)
81
+ return { status: 'skipped_duplicate', memoryId: result.duplicate.memoryId };
151
82
  return { status: 'ingested', memoryId: result.id };
152
83
  }
153
84
  //# sourceMappingURL=ingest.js.map
@@ -1,19 +1,12 @@
1
- /**
2
- * Octokit-shaped HTTP fetcher for the GitHub connector backfill.
3
- *
4
- * Production uses `realGitHubFetcher` against `https://api.github.com`.
5
- * Tests inject a fake `GitHubFetcher` so they never hit the network.
6
- *
7
- * Any non-200 response that is NOT a recognized rate-limit pause MUST throw
8
- * `GitHubFetchError`: an empty page would be an empty backfill with no operator signal.
9
- */
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. */
10
3
  import { type RateLimitInfo } from './ratelimit.js';
11
- import type { JsonValue } from '../../json.js';
4
+ import type { JsonValue } from '../../util/json.js';
12
5
  export declare class GitHubFetchError extends Error {
13
6
  readonly status: number;
14
7
  readonly bodyExcerpt: string;
15
8
  readonly url: string;
16
- constructor(status: number, bodyExcerpt: string, url: string);
9
+ constructor(status: number, bodyExcerpt: string, url: string, options?: ErrorOptions);
17
10
  }
18
11
  export interface GitHubBackfillPage {
19
12
  readonly items: ReadonlyArray<JsonValue>;
@@ -24,12 +17,7 @@ export type GitHubFetcher = (args: {
24
17
  url: string;
25
18
  token: string;
26
19
  }) => Promise<GitHubBackfillPage>;
27
- /**
28
- * Parse the rel="next" URL from an RFC 5988 `Link` header.
29
- *
30
- * Header format: `<url1>; rel="next", <url2>; rel="last"`.
31
- * Returns the URL whose rel parameter is exactly `"next"`, or null.
32
- */
20
+ /** Parse the rel="next" URL from an RFC 5988 `Link` header, or null. */
33
21
  export declare function parseNextLink(linkHeader: string): string | null;
34
22
  export declare const realGitHubFetcher: GitHubFetcher;
35
23
  //# sourceMappingURL=octokit-client.d.ts.map
@@ -1,32 +1,22 @@
1
- /**
2
- * Octokit-shaped HTTP fetcher for the GitHub connector backfill.
3
- *
4
- * Production uses `realGitHubFetcher` against `https://api.github.com`.
5
- * Tests inject a fake `GitHubFetcher` so they never hit the network.
6
- *
7
- * Any non-200 response that is NOT a recognized rate-limit pause MUST throw
8
- * `GitHubFetchError`: an empty page would be an empty backfill with no operator signal.
9
- */
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. */
10
3
  import { parseRateLimit } from './ratelimit.js';
11
- import { fetchWithRetry } from '../../http-retry.js';
4
+ import { fetchWithRetry } from '../../util/http-retry.js';
5
+ import { readCappedJson, readCappedText } from '../../util/capped-json.js';
6
+ import { errorMessage } from '../../util/log.js';
12
7
  export class GitHubFetchError extends Error {
13
8
  status;
14
9
  bodyExcerpt;
15
10
  url;
16
- constructor(status, bodyExcerpt, url) {
17
- super(`GitHub ${status} on ${url}: ${bodyExcerpt}`);
11
+ constructor(status, bodyExcerpt, url, options) {
12
+ super(`GitHub ${status} on ${url}: ${bodyExcerpt}`, options);
18
13
  this.status = status;
19
14
  this.bodyExcerpt = bodyExcerpt;
20
15
  this.url = url;
21
16
  this.name = 'GitHubFetchError';
22
17
  }
23
18
  }
24
- /**
25
- * Parse the rel="next" URL from an RFC 5988 `Link` header.
26
- *
27
- * Header format: `<url1>; rel="next", <url2>; rel="last"`.
28
- * Returns the URL whose rel parameter is exactly `"next"`, or null.
29
- */
19
+ /** Parse the rel="next" URL from an RFC 5988 `Link` header, or null. */
30
20
  export function parseNextLink(linkHeader) {
31
21
  if (!linkHeader)
32
22
  return null;
@@ -43,6 +33,24 @@ function headersToRecord(h) {
43
33
  }
44
34
  const GITHUB_TIMEOUT_MS = 30_000;
45
35
  const ERROR_BODY_SNIPPET_CHARS = 256;
36
+ const UTF8_MAX_BYTES_PER_CHAR = 4;
37
+ // 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
+ 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. */
40
+ async function readItems(res, url) {
41
+ // The path only: a `next` link comes from the server, so its query string is not ours to print.
42
+ const path = new URL(url).pathname;
43
+ let body;
44
+ try {
45
+ body = await readCappedJson(res, GITHUB_MAX_REPLY_BYTES);
46
+ }
47
+ catch (err) {
48
+ throw new GitHubFetchError(res.status, errorMessage(err), path, { cause: err });
49
+ }
50
+ if (!Array.isArray(body))
51
+ throw new GitHubFetchError(res.status, 'the reply is not a JSON array', path);
52
+ return body;
53
+ }
46
54
  export const realGitHubFetcher = async ({ url, token }) => {
47
55
  const res = await fetchWithRetry(url, {
48
56
  headers: {
@@ -55,15 +63,11 @@ export const realGitHubFetcher = async ({ url, token }) => {
55
63
  const rateLimit = parseRateLimit(headers, res.status);
56
64
  // Don't silently turn 401/403/404/500 into empty pages.
57
65
  if (res.status !== 200 && rateLimit.reason === 'none') {
58
- const body = await res.text().catch(() => '');
66
+ // The status is the error reported; a body that cannot be read only costs its snippet.
67
+ const body = await readCappedText(res, ERROR_BODY_SNIPPET_CHARS * UTF8_MAX_BYTES_PER_CHAR).catch(() => '');
59
68
  throw new GitHubFetchError(res.status, body.slice(0, ERROR_BODY_SNIPPET_CHARS), url);
60
69
  }
61
- // SAFETY: GitHub's list/paginated endpoints (issues, comments, etc. — the
62
- // only endpoints this backfill fetcher targets) return a JSON array body
63
- // on 200; per-item shape is intentionally left as `unknown` here since
64
- // GitHubBackfillPage.items is opaque to this seam (callers parse the
65
- // shape they expect downstream).
66
- const items = res.status === 200 ? (await res.json()) : [];
70
+ const items = res.status === 200 ? await readItems(res, url) : [];
67
71
  const link = res.headers.get('link') ?? '';
68
72
  const next = parseNextLink(link);
69
73
  return { items, next, rateLimit };
@@ -1,20 +1,9 @@
1
- /**
2
- * GitHub rate-limit header parser.
3
- *
4
- * GitHub returns 403 for primary rate-limit (with `X-RateLimit-Remaining: 0`
5
- * and `X-RateLimit-Reset: <epoch>`) and 429 + `Retry-After: <seconds>` for
6
- * secondary rate-limit. Backfill must pause and resume rather than error.
7
- */
1
+ /** GitHub rate-limit header parser: 403 with `X-RateLimit-Remaining: 0` is primary, 429 with `Retry-After` is secondary.
2
+ * Backfill must pause and resume rather than error. */
8
3
  export interface RateLimitInfo {
9
4
  readonly sleepSeconds: number;
10
5
  readonly reason: 'primary' | 'secondary' | 'none';
11
6
  }
12
- /**
13
- * Parse rate-limit signal from a GitHub HTTP response.
14
- *
15
- * @param headers Lower-cased HTTP response headers.
16
- * @param status HTTP status code.
17
- * @param now Optional current epoch seconds (for deterministic tests).
18
- */
7
+ /** Parse the rate-limit signal from a GitHub response; `headers` are lower-cased and `now` (epoch seconds) is for deterministic tests. */
19
8
  export declare function parseRateLimit(headers: Record<string, string | undefined>, status: number, now?: number): RateLimitInfo;
20
9
  //# sourceMappingURL=ratelimit.d.ts.map
@@ -1,17 +1,6 @@
1
- /**
2
- * GitHub rate-limit header parser.
3
- *
4
- * GitHub returns 403 for primary rate-limit (with `X-RateLimit-Remaining: 0`
5
- * and `X-RateLimit-Reset: <epoch>`) and 429 + `Retry-After: <seconds>` for
6
- * secondary rate-limit. Backfill must pause and resume rather than error.
7
- */
8
- /**
9
- * Parse rate-limit signal from a GitHub HTTP response.
10
- *
11
- * @param headers Lower-cased HTTP response headers.
12
- * @param status HTTP status code.
13
- * @param now Optional current epoch seconds (for deterministic tests).
14
- */
1
+ /** GitHub rate-limit header parser: 403 with `X-RateLimit-Remaining: 0` is primary, 429 with `Retry-After` is secondary.
2
+ * 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. */
15
4
  export function parseRateLimit(headers, status, now) {
16
5
  const _now = now ?? Math.floor(Date.now() / 1000);
17
6
  if (status === 429) {
@@ -1,8 +1,6 @@
1
1
  import type { GitHubRepository } from './types.js';
2
- /**
3
- * Map a GitHub repository to a hippo scope string. Default-private when
4
- * privacy is undetermined: cost of leaking public into private (recall returns
5
- * nothing) << cost of leaking private into public (data exposure).
6
- */
2
+ /** Map a GitHub repository to a hippo scope string. Default-private when
3
+ * privacy is undetermined: cost of leaking public into private (recall returns
4
+ * nothing) << cost of leaking private into public (data exposure). */
7
5
  export declare function scopeFromRepository(repo: GitHubRepository | undefined): string;
8
6
  //# sourceMappingURL=scope.d.ts.map
@@ -1,8 +1,6 @@
1
- /**
2
- * Map a GitHub repository to a hippo scope string. Default-private when
3
- * privacy is undetermined: cost of leaking public into private (recall returns
4
- * nothing) << cost of leaking private into public (data exposure).
5
- */
1
+ /** Map a GitHub repository to a hippo scope string. Default-private when
2
+ * privacy is undetermined: cost of leaking public into private (recall returns
3
+ * nothing) << cost of leaking private into public (data exposure). */
6
4
  export function scopeFromRepository(repo) {
7
5
  if (!repo)
8
6
  return 'github:private:unknown';