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
@@ -0,0 +1,44 @@
1
+ import { type HippoStore } from '../store/index.js';
2
+ import type { ConnectorDeadLetter } from '../store/port.js';
3
+ declare const DEFAULT_BUCKET = "parse_error";
4
+ /** What a caller hands over to park one payload, whatever the connector. */
5
+ export interface ParkOpts<Bucket extends string> {
6
+ /** null when no tenant was resolved for the payload. */
7
+ tenantId: string | null;
8
+ rawPayload: string;
9
+ error: string;
10
+ bucket?: Bucket;
11
+ signature?: string | null;
12
+ }
13
+ /** The columns every connector's table has, as stored. */
14
+ export interface ParkedRow<Bucket extends string> {
15
+ tenantId: string;
16
+ rawPayload: string;
17
+ error: string;
18
+ bucket: Bucket | typeof DEFAULT_BUCKET;
19
+ signature: string | null;
20
+ }
21
+ /** What one connector supplies: the tag that names its table to the store, and its list. `Own` is the columns only its table has. */
22
+ export interface ConnectorDlq<Own, Bucket extends string, Item> {
23
+ readonly letter: (row: ParkedRow<Bucket> & Own) => ConnectorDeadLetter;
24
+ readonly list: (hippoRoot: string, tenantId: string, limit: number) => Item[];
25
+ }
26
+ /** Parks on `store`, else on hippo.db under `hippoRoot`. */
27
+ export declare function parkInDlq<Own, Bucket extends string>(dlq: ConnectorDlq<Own, Bucket, unknown>, hippoRoot: string, opts: ParkOpts<Bucket> & NoInfer<Own>, store?: HippoStore): Promise<number>;
28
+ export declare function listDlq<Item>(dlq: ConnectorDlq<never, never, Item>, hippoRoot: string, opts: {
29
+ tenantId: string;
30
+ limit?: number;
31
+ }): Item[];
32
+ /** Every outcome a replay reports; a connector that re-ingests inline reports the ingest outcome itself. */
33
+ export type ReplayStatus = 'not_found' | 'sig_missing' | 'sig_fail' | 'parse_error' | 'unhandled' | 'unroutable' | 'replayed' | 'ingested' | 'duplicate' | 'skipped' | 'skipped_duplicate' | 'archived';
34
+ export interface ReplayResult {
35
+ ok: boolean;
36
+ status: ReplayStatus;
37
+ memoryId: string | null;
38
+ retryCount: number;
39
+ reason?: string;
40
+ }
41
+ /** A replay that did not go through; `retryCount` is the row's count after any bump the caller made. */
42
+ export declare function replayFailed(status: ReplayStatus, retryCount: number, reason: string): ReplayResult;
43
+ export {};
44
+ //# sourceMappingURL=dlq.d.ts.map
@@ -0,0 +1,30 @@
1
+ // The dead-letter queue every webhook connector parks into: one redaction, one unroutable sentinel, one set of defaults, one replay result.
2
+ import { DLQ_REDACTED_NOTE, redactPayload } from '../util/secret-detect.js';
3
+ import { requireGroup, storeFor } from '../store/index.js';
4
+ /** The tenant stored on a row no tenant was resolved for; the column is NOT NULL. */
5
+ const UNROUTABLE_TENANT = '__unroutable__';
6
+ const DEFAULT_BUCKET = 'parse_error';
7
+ const DEFAULT_LIST_LIMIT = 100;
8
+ /** Parks on `store`, else on hippo.db under `hippoRoot`. */
9
+ export async function parkInDlq(dlq, hippoRoot, opts, store) {
10
+ const rawPayload = redactPayload(opts.rawPayload);
11
+ // A redacted body can never match its signature, so the row keeps none and replay needs --force.
12
+ const redacted = rawPayload !== opts.rawPayload;
13
+ const letter = dlq.letter({
14
+ ...opts,
15
+ tenantId: opts.tenantId ?? UNROUTABLE_TENANT,
16
+ rawPayload,
17
+ error: redacted ? `${opts.error}; ${DLQ_REDACTED_NOTE}` : opts.error,
18
+ bucket: opts.bucket ?? DEFAULT_BUCKET,
19
+ signature: redacted ? null : opts.signature ?? null,
20
+ });
21
+ return requireGroup(storeFor({ hippoRoot, store }), 'connectorEvents').parkDeadLetter(letter);
22
+ }
23
+ export function listDlq(dlq, hippoRoot, opts) {
24
+ return dlq.list(hippoRoot, opts.tenantId, opts.limit ?? DEFAULT_LIST_LIMIT);
25
+ }
26
+ /** A replay that did not go through; `retryCount` is the row's count after any bump the caller made. */
27
+ export function replayFailed(status, retryCount, reason) {
28
+ return { ok: false, status, memoryId: null, retryCount, reason };
29
+ }
30
+ //# sourceMappingURL=dlq.js.map
@@ -1,29 +1,7 @@
1
- /**
2
- * Paginated backfill of three GitHub REST streams with per-stream
3
- * high-water marks (HWMs):
4
- * - /repos/{repo}/issues -> issues_hwm
5
- * - /repos/{repo}/issues/comments -> issue_comments_hwm
6
- * - /repos/{repo}/pulls/comments -> pr_review_comments_hwm
7
- *
8
- * Crash safety: each stream's HWM is persisted ONLY after
9
- * the stream fully drains. If stream 2 throws mid-flight, stream 1's HWM
10
- * is committed and stream 2's stays NULL (or its prior value). Rerun
11
- * picks up from stream 1's saved HWM and re-fetches stream 2 from its
12
- * last committed point.
13
- *
14
- * The /issues endpoint returns BOTH issues and PRs (a PR is
15
- * an issue with a `pull_request` field). We skip PRs here so they don't
16
- * get ingested under the issues schema. PRs are handled via webhook in
17
- * V1 (no /pulls backfill stream — review comments cover the discussion
18
- * surface).
19
- *
20
- * Privacy (V1 limitation): the REST list endpoints don't reliably set
21
- * `repository.private`, and resolving it requires an extra API call per
22
- * repo. Backfill leaves the field undefined so scopeFromRepository falls
23
- * through to private. Callers who know the repo is public can re-tag
24
- * downstream; the fail-safe default protects private orgs.
25
- */
26
- import type { Context } from '../../api.js';
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.
3
+ * `repository.private` is left undefined (REST lists omit it), so scopeFromRepository falls through to private. */
4
+ import type { Context } from '../../api/index.js';
27
5
  import type { GitHubFetcher } from './octokit-client.js';
28
6
  export interface BackfillOpts {
29
7
  /** e.g. 'acme/repo'. */
@@ -32,6 +10,8 @@ export interface BackfillOpts {
32
10
  token: string;
33
11
  /** Optional cap on items per stream. Useful for tests. */
34
12
  maxPerStream?: number;
13
+ /** First-run `--since`; seeds all three HWMs, COALESCE keeps any HWM a stream already saved. */
14
+ sinceIso?: string;
35
15
  /** sleep ms — injectable so tests don't actually wait. */
36
16
  sleepMs?: (ms: number) => Promise<void>;
37
17
  }
@@ -1,68 +1,12 @@
1
- /**
2
- * Paginated backfill of three GitHub REST streams with per-stream
3
- * high-water marks (HWMs):
4
- * - /repos/{repo}/issues -> issues_hwm
5
- * - /repos/{repo}/issues/comments -> issue_comments_hwm
6
- * - /repos/{repo}/pulls/comments -> pr_review_comments_hwm
7
- *
8
- * Crash safety: each stream's HWM is persisted ONLY after
9
- * the stream fully drains. If stream 2 throws mid-flight, stream 1's HWM
10
- * is committed and stream 2's stays NULL (or its prior value). Rerun
11
- * picks up from stream 1's saved HWM and re-fetches stream 2 from its
12
- * last committed point.
13
- *
14
- * The /issues endpoint returns BOTH issues and PRs (a PR is
15
- * an issue with a `pull_request` field). We skip PRs here so they don't
16
- * get ingested under the issues schema. PRs are handled via webhook in
17
- * V1 (no /pulls backfill stream — review comments cover the discussion
18
- * surface).
19
- *
20
- * Privacy (V1 limitation): the REST list endpoints don't reliably set
21
- * `repository.private`, and resolving it requires an extra API call per
22
- * repo. Backfill leaves the field undefined so scopeFromRepository falls
23
- * through to private. Callers who know the repo is public can re-tag
24
- * downstream; the fail-safe default protects private orgs.
25
- */
26
- import { openHippoDb, closeHippoDb } from '../../db.js';
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.
3
+ * `repository.private` is left undefined (REST lists omit it), so scopeFromRepository falls through to private. */
4
+ import { readCursors, seedCursors, writeHwm } from '../../store/connectors/github.js';
27
5
  import { ingestEvent } from './ingest.js';
6
+ import { isJsonObject } from '../../util/json.js';
28
7
  const API = 'https://api.github.com';
29
- function readCursor(root, tenantId, repo) {
30
- const db = openHippoDb(root);
31
- try {
32
- // SAFETY: row's shape matches the three HWM columns named in the SELECT
33
- // above; `better-sqlite3`'s `.get()` return type is untyped by the driver.
34
- const row = db
35
- .prepare(`SELECT issues_hwm, issue_comments_hwm, pr_review_comments_hwm
36
- FROM github_cursors WHERE tenant_id = ? AND repo_full_name = ?`)
37
- .get(tenantId, repo);
38
- return {
39
- issues: row?.issues_hwm ?? null,
40
- issueComments: row?.issue_comments_hwm ?? null,
41
- prReviewComments: row?.pr_review_comments_hwm ?? null,
42
- };
43
- }
44
- finally {
45
- closeHippoDb(db);
46
- }
47
- }
48
- function writeOneHwm(root, tenantId, repo, column, value) {
49
- const db = openHippoDb(root);
50
- try {
51
- db.prepare(`INSERT INTO github_cursors (tenant_id, repo_full_name, ${column}, updated_at)
52
- VALUES (?, ?, ?, ?)
53
- ON CONFLICT(tenant_id, repo_full_name)
54
- DO UPDATE SET ${column} = excluded.${column}, updated_at = excluded.updated_at`).run(tenantId, repo, value, new Date().toISOString());
55
- }
56
- finally {
57
- closeHippoDb(db);
58
- }
59
- }
60
- /**
61
- * Build a synthetic `repository` object from the known repo full name.
62
- * REST list endpoints often omit the full repository object on each item;
63
- * we already know the repo since the caller passed it. `private` left
64
- * undefined so scopeFromRepository falls through to private.
65
- */
8
+ /** Build a synthetic `repository` from the known repo full name, because REST list items often omit it.
9
+ * `private` stays undefined so scopeFromRepository falls through to private. */
66
10
  function syntheticRepository(repoFullName) {
67
11
  const [owner, name] = repoFullName.split('/');
68
12
  return {
@@ -72,11 +16,7 @@ function syntheticRepository(repoFullName) {
72
16
  // private intentionally omitted — fail-safe to private scope.
73
17
  };
74
18
  }
75
- /**
76
- * Parse the trailing issue/PR number from a REST API URL.
77
- * e.g. https://api.github.com/repos/o/r/issues/42 -> 42
78
- * https://api.github.com/repos/o/r/pulls/7 -> 7
79
- */
19
+ /** Parse the trailing issue/PR number from a REST API URL, e.g. .../issues/42 -> 42. */
80
20
  function parseTrailingNumber(url) {
81
21
  if (!url)
82
22
  return null;
@@ -86,14 +26,11 @@ function parseTrailingNumber(url) {
86
26
  const n = Number(m[1]);
87
27
  return Number.isFinite(n) ? n : null;
88
28
  }
89
- function isPlainObject(x) {
90
- return x !== undefined && x !== null && typeof x === 'object' && !Array.isArray(x);
91
- }
92
29
  function isGitHubUser(x) {
93
- return isPlainObject(x) && typeof x.login === 'string' && typeof x.id === 'number';
30
+ return isJsonObject(x) && typeof x.login === 'string' && typeof x.id === 'number';
94
31
  }
95
32
  function isIssuesItem(x) {
96
- if (!isPlainObject(x))
33
+ if (!isJsonObject(x))
97
34
  return false;
98
35
  if (typeof x.number !== 'number')
99
36
  return false;
@@ -102,47 +39,25 @@ function isIssuesItem(x) {
102
39
  return isGitHubUser(x.user);
103
40
  }
104
41
  function isCommentItem(x) {
105
- if (!isPlainObject(x))
42
+ if (!isJsonObject(x))
106
43
  return false;
107
44
  if (typeof x.id !== 'number')
108
45
  return false;
109
46
  return isGitHubUser(x.user);
110
47
  }
111
- /**
112
- * Drain one stream end-to-end. Pauses and retries on rate-limit. Throws on
113
- * any other fetch error so the caller leaves the HWM unchanged.
114
- *
115
- * - Tracks max(updated_at) across ALL fetched items, including ones
116
- * `toIngestEvent` rejects (e.g., PRs returned via `/issues`). Otherwise
117
- * a page of pure PRs would never advance the HWM and the next run would
118
- * re-fetch the same window forever.
119
- * - Returns `drained: boolean` — true only when the stream actually ran
120
- * to next=null. Callers MUST NOT advance the HWM when drained=false,
121
- * or a capped run would persist a partial HWM and skip the unfetched tail.
122
- */
123
- async function drainStream(ctx, url0, toIngestEvent, fetcher, token, sleep, maxItems) {
48
+ async function drainStream(ctx, url0, options) {
49
+ const { toIngestEvent, maxItems } = options;
124
50
  let url = url0;
125
51
  let ingested = 0;
126
52
  let pages = 0;
127
53
  let maxUpdatedAt = null;
128
54
  while (url) {
129
- // Fetch with rate-limit retry loop.
130
- let page;
131
- while (true) {
132
- page = await fetcher({ url, token });
133
- if (page.rateLimit.reason !== 'none') {
134
- await sleep(page.rateLimit.sleepSeconds * 1000);
135
- continue;
136
- }
137
- break;
138
- }
55
+ const page = await fetchPagePastRateLimit(options, url);
139
56
  pages++;
140
57
  for (const item of page.items) {
141
58
  // Track updated_at on EVERY item, before the toIngestEvent filter, so PR-only pages don't loop forever.
142
- // SAFETY: updated_at is GitHub's ISO-timestamp field on every item
143
- // shape this stream returns; a non-string value would only fail the
144
- // string comparisons below, matching pre-migration passthrough.
145
- const updatedAt = isPlainObject(item)
59
+ // SAFETY: updated_at is GitHub's ISO-timestamp field on every item shape this stream returns.
60
+ const updatedAt = isJsonObject(item)
146
61
  ? (item.updated_at ?? null)
147
62
  : null;
148
63
  if (updatedAt && (!maxUpdatedAt || updatedAt > maxUpdatedAt)) {
@@ -151,7 +66,7 @@ async function drainStream(ctx, url0, toIngestEvent, fetcher, token, sleep, maxI
151
66
  const evt = toIngestEvent(item);
152
67
  if (!evt)
153
68
  continue;
154
- const r = ingestEvent(ctx, {
69
+ const r = await ingestEvent(ctx, {
155
70
  event: evt,
156
71
  rawBody: JSON.stringify(item),
157
72
  deliveryId: `backfill:${ctx.tenantId}:${updatedAt ?? ''}`,
@@ -167,6 +82,16 @@ async function drainStream(ctx, url0, toIngestEvent, fetcher, token, sleep, maxI
167
82
  }
168
83
  return { ingested, pages, maxUpdatedAt, drained: true };
169
84
  }
85
+ async function fetchPagePastRateLimit(options, url) {
86
+ const { fetcher, token, sleep } = options;
87
+ // Fetch with rate-limit retry loop.
88
+ while (true) {
89
+ const page = await fetcher({ url, token });
90
+ if (page.rateLimit.reason === 'none')
91
+ return page;
92
+ await sleep(page.rateLimit.sleepSeconds * 1000);
93
+ }
94
+ }
170
95
  function issueItemToEvent(item, repository) {
171
96
  if (!isIssuesItem(item))
172
97
  return null;
@@ -189,9 +114,8 @@ function issueItemToEvent(item, repository) {
189
114
  function issueCommentItemToEvent(item, repository) {
190
115
  if (!isCommentItem(item))
191
116
  return null;
192
- // SAFETY: this closure only runs against the /issues/comments stream,
193
- // so every item isCommentItem validates here is genuinely an
194
- // IssueCommentItem; a missing issue_url is handled defensively below.
117
+ // SAFETY: this closure only runs against the /issues/comments stream, so every item isCommentItem
118
+ // validates is an IssueCommentItem; a missing issue_url is handled below.
195
119
  const c = item;
196
120
  const issueNumber = parseTrailingNumber(c.issue_url);
197
121
  if (issueNumber === null)
@@ -212,9 +136,8 @@ function issueCommentItemToEvent(item, repository) {
212
136
  function prReviewCommentItemToEvent(item, repository) {
213
137
  if (!isCommentItem(item))
214
138
  return null;
215
- // SAFETY: this closure only runs against the /pulls/comments stream,
216
- // so every item isCommentItem validates here is genuinely a
217
- // PrReviewCommentItem; a missing pull_request_url is handled below.
139
+ // SAFETY: this closure only runs against the /pulls/comments stream, so every item isCommentItem
140
+ // validates is a PrReviewCommentItem; a missing pull_request_url is handled below.
218
141
  const c = item;
219
142
  const prNumber = parseTrailingNumber(c.pull_request_url);
220
143
  if (prNumber === null)
@@ -234,22 +157,29 @@ function prReviewCommentItemToEvent(item, repository) {
234
157
  }
235
158
  /** Drains one stream, then persists its HWM only when the stream ran to the end. */
236
159
  async function backfillStream(ctx, opts, sleep, stream) {
237
- const res = await drainStream(ctx, stream.url, stream.toIngestEvent, opts.fetcher, opts.token, sleep, opts.maxPerStream);
160
+ const res = await drainStream(ctx, stream.url, {
161
+ toIngestEvent: stream.toIngestEvent,
162
+ fetcher: opts.fetcher,
163
+ token: opts.token,
164
+ sleep,
165
+ maxItems: opts.maxPerStream,
166
+ });
238
167
  // A capped run (--max) must leave the HWM at its previous value so the next run re-fetches the unprocessed tail.
239
168
  if (res.drained && res.maxUpdatedAt) {
240
- writeOneHwm(ctx.hippoRoot, ctx.tenantId, opts.repoFullName, stream.column, res.maxUpdatedAt);
169
+ writeHwm(ctx.hippoRoot, ctx.tenantId, opts.repoFullName, stream.column, res.maxUpdatedAt);
241
170
  }
242
171
  return { ingested: res.ingested, pages: res.pages };
243
172
  }
244
173
  export async function backfillRepo(ctx, opts) {
245
174
  const sleep = opts.sleepMs ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
246
- const cursors = readCursor(ctx.hippoRoot, ctx.tenantId, opts.repoFullName);
175
+ if (opts.sinceIso)
176
+ seedCursors(ctx.hippoRoot, ctx.tenantId, opts.repoFullName, opts.sinceIso);
177
+ const cursors = readCursors(ctx.hippoRoot, ctx.tenantId, opts.repoFullName);
247
178
  const repository = syntheticRepository(opts.repoFullName);
248
179
  const result = {
249
180
  ingested: { issues: 0, issueComments: 0, prReviewComments: 0 },
250
181
  pages: { issues: 0, issueComments: 0, prReviewComments: 0 },
251
182
  };
252
- // ---------- Stream 1: issues (skip PRs) ----------
253
183
  const issuesRes = await backfillStream(ctx, opts, sleep, {
254
184
  url: `${API}/repos/${opts.repoFullName}/issues?state=all&per_page=100` +
255
185
  (cursors.issues ? `&since=${encodeURIComponent(cursors.issues)}` : ''),
@@ -258,7 +188,6 @@ export async function backfillRepo(ctx, opts) {
258
188
  });
259
189
  result.ingested.issues = issuesRes.ingested;
260
190
  result.pages.issues = issuesRes.pages;
261
- // ---------- Stream 2: repo-level issue comments ----------
262
191
  const commentsRes = await backfillStream(ctx, opts, sleep, {
263
192
  url: `${API}/repos/${opts.repoFullName}/issues/comments?per_page=100` +
264
193
  (cursors.issueComments ? `&since=${encodeURIComponent(cursors.issueComments)}` : ''),
@@ -267,7 +196,6 @@ export async function backfillRepo(ctx, opts) {
267
196
  });
268
197
  result.ingested.issueComments = commentsRes.ingested;
269
198
  result.pages.issueComments = commentsRes.pages;
270
- // ---------- Stream 3: repo-level PR review comments ----------
271
199
  const prCommentsRes = await backfillStream(ctx, opts, sleep, {
272
200
  url: `${API}/repos/${opts.repoFullName}/pulls/comments?per_page=100` +
273
201
  (cursors.prReviewComments ? `&since=${encodeURIComponent(cursors.prReviewComments)}` : ''),
@@ -1,8 +1,7 @@
1
- import { type Context } from '../../api.js';
1
+ import { type Context } from '../../api/index.js';
2
2
  export interface DeletionInput {
3
- /** artifact_ref of the comment, e.g.,
4
- * 'github://acme/repo/issue/42/comment/123' or
5
- * 'github://acme/repo/pull/7/review_comment/456'. */
3
+ /** artifact_ref of the comment, e.g. 'github://acme/repo/issue/42/comment/123'
4
+ * or 'github://acme/repo/pull/7/review_comment/456'. */
6
5
  artifactRef: string;
7
6
  /** Source idempotency key for this delete event (sha256 of artifact_ref + ':' + updated_at). */
8
7
  idempotencyKey: string;
@@ -16,21 +15,7 @@ export interface DeletionResult {
16
15
  status: DeletionStatus;
17
16
  archivedCount: number;
18
17
  }
19
- /**
20
- * Handle GitHub `issue_comment.deleted` and `pull_request_review_comment.deleted`.
21
- *
22
- * Filter by tenant_id + kind='raw'. Multi-row archive:
23
- * GitHub edits keep the same artifact_ref, so multiple active raw rows can
24
- * match a single deletion event. Archive ALL of them.
25
- *
26
- * ONE shared DB handle wraps ALL archives + the idempotency mark in a single
27
- * outer write scope: a per-row failure rolls back the whole batch, idempotency
28
- * included, so a retry re-attempts cleanly instead of leaving searchable
29
- * survivors. archiveRawMemory's own inner SAVEPOINT nests safely inside it.
30
- *
31
- * Tenant scope and kind='raw' filtering are load-bearing: without them a
32
- * deletion event from tenant A could archive tenant B's row sharing the same
33
- * artifact_ref, or accidentally target a distilled row.
34
- */
35
- export declare function handleCommentDeleted(ctx: Context, input: DeletionInput): DeletionResult;
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>;
36
21
  //# sourceMappingURL=deletion.d.ts.map
@@ -1,66 +1,19 @@
1
- import { openHippoDb, closeHippoDb, withWriteScope } from '../../db.js';
2
- import { archiveRawMemory } from '../../raw-archive.js';
3
- import { hasSeenKey, markKeySeen } from './idempotency.js';
4
- /**
5
- * Handle GitHub `issue_comment.deleted` and `pull_request_review_comment.deleted`.
6
- *
7
- * Filter by tenant_id + kind='raw'. Multi-row archive:
8
- * GitHub edits keep the same artifact_ref, so multiple active raw rows can
9
- * match a single deletion event. Archive ALL of them.
10
- *
11
- * ONE shared DB handle wraps ALL archives + the idempotency mark in a single
12
- * outer write scope: a per-row failure rolls back the whole batch, idempotency
13
- * included, so a retry re-attempts cleanly instead of leaving searchable
14
- * survivors. archiveRawMemory's own inner SAVEPOINT nests safely inside it.
15
- *
16
- * Tenant scope and kind='raw' filtering are load-bearing: without them a
17
- * deletion event from tenant A could archive tenant B's row sharing the same
18
- * artifact_ref, or accidentally target a distilled row.
19
- */
20
- export function handleCommentDeleted(ctx, input) {
21
- const db = openHippoDb(ctx.hippoRoot);
22
- try {
23
- if (hasSeenKey(db, input.idempotencyKey)) {
24
- return { status: 'duplicate', archivedCount: 0 };
25
- }
26
- // SAFETY: rows come from the SELECT above, which projects only the
27
- // `id` column, so each row is exactly `{ id: string }`.
28
- const rows = db
29
- .prepare(`SELECT id FROM memories WHERE artifact_ref = ? AND tenant_id = ? AND kind = 'raw'`)
30
- .all(input.artifactRef, ctx.tenantId);
31
- const memoryIds = rows.map((r) => r.id);
32
- if (memoryIds.length === 0) {
33
- // Nothing to archive — still mark idempotency so a retry returns 'duplicate'.
34
- // Independent INSERT, no rollback needed.
35
- markKeySeen(db, {
36
- idempotencyKey: input.idempotencyKey,
37
- deliveryId: input.deliveryId,
38
- eventName: input.eventName,
39
- memoryId: null,
40
- });
41
- return { status: 'archive_skipped_not_found', archivedCount: 0 };
42
- }
43
- // Outer write scope wrapping all archives + the idempotency mark. Any throw
44
- // rolls back the whole batch so retry sees neither archive nor mark — and
45
- // re-attempts the full set.
46
- withWriteScope(db, 'github_delete_all', () => {
47
- for (const id of memoryIds) {
48
- archiveRawMemory(db, id, {
49
- reason: `source_deleted:github:${input.eventName}:${input.deliveryId}`,
50
- who: ctx.actor.subject,
51
- });
52
- }
53
- markKeySeen(db, {
54
- idempotencyKey: input.idempotencyKey,
55
- deliveryId: input.deliveryId,
56
- eventName: input.eventName,
57
- memoryId: memoryIds[0],
58
- });
59
- });
60
- return { status: 'archived', archivedCount: memoryIds.length };
61
- }
62
- finally {
63
- closeHippoDb(db);
64
- }
1
+ import { requireGroup, storeFor } from '../../store/index.js';
2
+ /** Handle `issue_comment.deleted` and `pull_request_review_comment.deleted`: archive ALL active raw rows for the artifact_ref in one write.
3
+ * Tenant and kind='raw' filtering are load-bearing: without them a deletion could archive another tenant's row or a distilled row. */
4
+ export async function handleCommentDeleted(ctx, input) {
5
+ const { artifactRef, idempotencyKey, deliveryId, eventName } = input;
6
+ const done = await requireGroup(storeFor(ctx), 'connectorEvents').archiveDeletedArtifact({
7
+ tenantId: ctx.tenantId,
8
+ actor: ctx.actor.subject,
9
+ artifactRef,
10
+ reason: `source_deleted:github:${eventName}:${deliveryId}`,
11
+ event: { connector: 'github', idempotencyKey, deliveryId, eventName },
12
+ });
13
+ if (done.duplicate)
14
+ return { status: 'duplicate', archivedCount: 0 };
15
+ if (done.archived === 0)
16
+ return { status: 'archive_skipped_not_found', archivedCount: 0 };
17
+ return { status: 'archived', archivedCount: done.archived };
65
18
  }
66
19
  //# sourceMappingURL=deletion.js.map
@@ -1,86 +1,20 @@
1
- import type { DatabaseSyncLike } from '../../db.js';
2
- import type { Context } from '../../api.js';
3
- /**
4
- * GitHub webhook DLQ. Mirrors the Slack DLQ shape (src/connectors/slack/dlq.ts)
5
- * but carries GitHub-specific metadata: event_name, delivery_id, signature,
6
- * installation_id, repo_full_name, so a `hippo gh dlq replay` operator can
7
- * triage without re-deriving anything from the raw payload.
8
- *
9
- * Buckets:
10
- * - parse_error — raw_payload was not valid JSON
11
- * - unroutable — no tenant resolved for installation_id / repo_full_name
12
- * - signature_failed — HMAC did not verify against the active webhook secret
13
- * - unhandled — parsed but no handler matched the event
14
- */
15
- export type DlqBucket = 'parse_error' | 'unroutable' | 'signature_failed' | 'unhandled';
16
- export interface DlqItem {
17
- id: number;
18
- tenantId: string;
19
- rawPayload: string;
20
- error: string;
21
- eventName: string | null;
22
- deliveryId: string | null;
23
- signature: string | null;
24
- installationId: string | null;
25
- repoFullName: string | null;
26
- retryCount: number;
27
- receivedAt: string;
28
- retriedAt: string | null;
29
- bucket: DlqBucket | string;
30
- }
31
- /**
32
- * `tenantId: null` means the connector could not resolve a tenant for the
33
- * envelope (unroutable installation/repo). Stored as the sentinel
34
- * `'__unroutable__'` so the NOT NULL column is honored — same convention as
35
- * Slack DLQ.
36
- */
37
- export interface WriteDlqOpts {
38
- tenantId: string | null;
39
- rawPayload: string;
40
- error: string;
41
- bucket?: DlqBucket;
42
- eventName?: string | null;
43
- deliveryId?: string | null;
44
- signature?: string | null;
45
- installationId?: string | null;
46
- repoFullName?: string | null;
47
- }
48
- export declare function writeToDlq(db: DatabaseSyncLike, opts: WriteDlqOpts): number;
49
- export declare function listDlq(db: DatabaseSyncLike, opts: {
50
- tenantId: string;
51
- limit?: number;
52
- }): DlqItem[];
53
- export declare function getDlqEntry(db: DatabaseSyncLike, id: number): DlqItem | null;
1
+ import type { Context } from '../../api/index.js';
2
+ import { type DlqBucket, type DlqItem, type GitHubDlqInsert } from '../../store/connectors/github.js';
3
+ import { type ConnectorDlq, type ReplayResult } from '../dlq.js';
4
+ export type { DlqBucket, DlqItem };
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. */
7
+ export declare const githubDlq: ConnectorDlq<GitHubOwnColumns, DlqBucket, DlqItem>;
54
8
  export interface ReplayDlqOpts {
55
9
  /** Current webhook secret. If omitted, signature check is skipped (force-only path). */
56
10
  webhookSecret?: string;
57
- /**
58
- * Previous webhook secret during rotation.
59
- * Operators rotating GITHUB_WEBHOOK_SECRET would otherwise be forced into
60
- * --force on DLQ rows written under the old secret. Plumbed through to
61
- * verifyGitHubSignature.previousSecret.
62
- */
11
+ /** Previous webhook secret during rotation, passed to verifyGitHubSignature.previousSecret so old-secret DLQ rows need no --force. */
63
12
  previousSecret?: string;
64
13
  /** When true, skip signature verification (used for legacy entries after secret rotation). */
65
14
  force?: boolean;
66
15
  }
67
- export type ReplayStatus = 'replayed' | 'parse_error' | 'sig_fail' | 'sig_missing' | 'unhandled' | 'not_found';
68
- export interface ReplayResult {
69
- ok: boolean;
70
- status: ReplayStatus;
71
- memoryId: string | null;
72
- retryCount: number;
73
- reason?: string;
74
- }
75
- /**
76
- * Hook the webhook route injects to actually re-ingest a row. Decoupling
77
- * the dispatch keeps this module free of every event-type handler — the
78
- * route already knows how to route an envelope, so it passes that capability
79
- * back in.
80
- *
81
- * No `idempotencyKey` field: ingest re-derives the key from the parsed event,
82
- * so a hook trusting a passed-in key would dedupe against a stale one.
83
- */
16
+ /** Hook the webhook route injects to re-ingest a row, which keeps this module free of every event-type handler.
17
+ * No `idempotencyKey` field: ingest re-derives it from the parsed event, and a passed-in key could be stale. */
84
18
  export type IngestHook = (ctx: Context, args: {
85
19
  rawPayload: string;
86
20
  eventName: string;
@@ -88,21 +22,8 @@ export type IngestHook = (ctx: Context, args: {
88
22
  }) => Promise<{
89
23
  memoryId: string | null;
90
24
  }>;
91
- /**
92
- * Replay a DLQ row through the normal ingest path. Behavior:
93
- * 1. Fetch row by id. Not found → `not_found`.
94
- * 2. If !force and webhookSecret provided, verify signature with the
95
- * current secret. Fail → bump retry_count, `sig_fail`.
96
- * Missing signature on the row → `sig_missing` (no bump; --force required).
97
- * 3. JSON.parse the raw payload. Fail → bump, `parse_error`.
98
- * 4. Type-guard the envelope. Fail → bump, `unhandled`.
99
- * 5. If an `ingestHook` is supplied, call it and return its memoryId.
100
- * If not (dry-run path), bump retry_count and return status `replayed`
101
- * with memoryId=null. The webhook route wires the real hook.
102
- *
103
- * Mirrors Slack's "always use current routing" policy: replays use the
104
- * deployment state NOW, not at the time of original DLQing.
105
- */
25
+ /** 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. */
106
27
  export declare function replayDlqEntry(ctx: Context, id: number, opts?: ReplayDlqOpts & {
107
28
  ingestHook?: IngestHook;
108
29
  }): Promise<ReplayResult>;