hippo-memory 1.43.3 → 1.45.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 (534) hide show
  1. package/README.md +14 -12
  2. package/bin/hippo.js +3 -1
  3. package/dist/api.d.ts +21 -21
  4. package/dist/api.js +69 -42
  5. package/dist/audit-prune.js +4 -1
  6. package/dist/audit.d.ts +1 -1
  7. package/dist/audit.js +9 -0
  8. package/dist/autolearn.d.ts +1 -1
  9. package/dist/autolearn.js +2 -1
  10. package/dist/capture.d.ts +11 -10
  11. package/dist/capture.js +22 -30
  12. package/dist/cli.d.ts +4 -0
  13. package/dist/cli.js +309 -171
  14. package/dist/client.d.ts +4 -21
  15. package/dist/client.js +3 -112
  16. package/dist/config.js +2 -1
  17. package/dist/consolidate.d.ts +3 -0
  18. package/dist/consolidate.js +44 -42
  19. package/dist/dag.d.ts +1 -0
  20. package/dist/dag.js +10 -5
  21. package/dist/dashboard.js +7 -3
  22. package/dist/db.js +16 -24
  23. package/dist/dedupe.d.ts +1 -0
  24. package/dist/dedupe.js +4 -7
  25. package/dist/embedding-provider.d.ts +1 -1
  26. package/dist/embedding-provider.js +3 -2
  27. package/dist/embeddings.js +81 -8
  28. package/dist/extract.d.ts +2 -0
  29. package/dist/extract.js +9 -4
  30. package/dist/goals.js +12 -3
  31. package/dist/mcp/server.js +21 -36
  32. package/dist/memory.d.ts +3 -0
  33. package/dist/memory.js +7 -1
  34. package/dist/physics-state.js +4 -1
  35. package/dist/raw-archive.js +5 -2
  36. package/dist/recall-trace.js +4 -1
  37. package/dist/refine-llm.js +3 -2
  38. package/dist/rerankers/jev.js +3 -2
  39. package/dist/rerankers/llm.js +3 -2
  40. package/dist/search.js +3 -3
  41. package/dist/server.d.ts +5 -0
  42. package/dist/server.js +39 -29
  43. package/dist/shared.js +1 -1
  44. package/dist/stdin.d.ts +12 -0
  45. package/dist/stdin.js +41 -0
  46. package/dist/store.d.ts +18 -11
  47. package/dist/store.js +152 -65
  48. package/dist/version.d.ts +4 -6
  49. package/dist/version.js +4 -7
  50. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  51. package/extensions/openclaw-plugin/package.json +1 -1
  52. package/openclaw.plugin.json +1 -1
  53. package/package.json +8 -5
  54. package/dist/ablation.d.ts.map +0 -1
  55. package/dist/ablation.js.map +0 -1
  56. package/dist/ambient.d.ts.map +0 -1
  57. package/dist/ambient.js.map +0 -1
  58. package/dist/api.d.ts.map +0 -1
  59. package/dist/api.js.map +0 -1
  60. package/dist/audit-prune.d.ts.map +0 -1
  61. package/dist/audit-prune.js.map +0 -1
  62. package/dist/audit.d.ts.map +0 -1
  63. package/dist/audit.js.map +0 -1
  64. package/dist/auth.d.ts.map +0 -1
  65. package/dist/auth.js.map +0 -1
  66. package/dist/autolearn.d.ts.map +0 -1
  67. package/dist/autolearn.js.map +0 -1
  68. package/dist/availability.d.ts.map +0 -1
  69. package/dist/availability.js.map +0 -1
  70. package/dist/benchmarks/e1.3/incident-recall-eval.js +0 -78
  71. package/dist/benchmarks/e1.3/incident-recall-eval.js.map +0 -1
  72. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js +0 -103
  73. package/dist/benchmarks/e1.3/slack-1000-event-smoke.js.map +0 -1
  74. package/dist/capture.d.ts.map +0 -1
  75. package/dist/capture.js.map +0 -1
  76. package/dist/card-detail.d.ts.map +0 -1
  77. package/dist/card-detail.js.map +0 -1
  78. package/dist/card.d.ts.map +0 -1
  79. package/dist/card.js.map +0 -1
  80. package/dist/cli.d.ts.map +0 -1
  81. package/dist/cli.js.map +0 -1
  82. package/dist/client.d.ts.map +0 -1
  83. package/dist/client.js.map +0 -1
  84. package/dist/compare.d.ts.map +0 -1
  85. package/dist/compare.js.map +0 -1
  86. package/dist/config.d.ts.map +0 -1
  87. package/dist/config.js.map +0 -1
  88. package/dist/connectors/github/backfill.d.ts.map +0 -1
  89. package/dist/connectors/github/backfill.js.map +0 -1
  90. package/dist/connectors/github/cli-impl.d.ts.map +0 -1
  91. package/dist/connectors/github/cli-impl.js.map +0 -1
  92. package/dist/connectors/github/deletion.d.ts.map +0 -1
  93. package/dist/connectors/github/deletion.js.map +0 -1
  94. package/dist/connectors/github/dlq.d.ts.map +0 -1
  95. package/dist/connectors/github/dlq.js.map +0 -1
  96. package/dist/connectors/github/idempotency.d.ts.map +0 -1
  97. package/dist/connectors/github/idempotency.js.map +0 -1
  98. package/dist/connectors/github/ingest.d.ts.map +0 -1
  99. package/dist/connectors/github/ingest.js.map +0 -1
  100. package/dist/connectors/github/octokit-client.d.ts.map +0 -1
  101. package/dist/connectors/github/octokit-client.js.map +0 -1
  102. package/dist/connectors/github/ratelimit.d.ts.map +0 -1
  103. package/dist/connectors/github/ratelimit.js.map +0 -1
  104. package/dist/connectors/github/scope.d.ts.map +0 -1
  105. package/dist/connectors/github/scope.js.map +0 -1
  106. package/dist/connectors/github/signature.d.ts.map +0 -1
  107. package/dist/connectors/github/signature.js.map +0 -1
  108. package/dist/connectors/github/tenant-routing.d.ts.map +0 -1
  109. package/dist/connectors/github/tenant-routing.js.map +0 -1
  110. package/dist/connectors/github/transform.d.ts.map +0 -1
  111. package/dist/connectors/github/transform.js.map +0 -1
  112. package/dist/connectors/github/types.d.ts.map +0 -1
  113. package/dist/connectors/github/types.js.map +0 -1
  114. package/dist/connectors/slack/backfill.d.ts.map +0 -1
  115. package/dist/connectors/slack/backfill.js.map +0 -1
  116. package/dist/connectors/slack/deletion.d.ts.map +0 -1
  117. package/dist/connectors/slack/deletion.js.map +0 -1
  118. package/dist/connectors/slack/dlq.d.ts.map +0 -1
  119. package/dist/connectors/slack/dlq.js.map +0 -1
  120. package/dist/connectors/slack/idempotency.d.ts.map +0 -1
  121. package/dist/connectors/slack/idempotency.js.map +0 -1
  122. package/dist/connectors/slack/ingest.d.ts.map +0 -1
  123. package/dist/connectors/slack/ingest.js.map +0 -1
  124. package/dist/connectors/slack/ratelimit.d.ts.map +0 -1
  125. package/dist/connectors/slack/ratelimit.js.map +0 -1
  126. package/dist/connectors/slack/scope.d.ts.map +0 -1
  127. package/dist/connectors/slack/scope.js.map +0 -1
  128. package/dist/connectors/slack/signature.d.ts.map +0 -1
  129. package/dist/connectors/slack/signature.js.map +0 -1
  130. package/dist/connectors/slack/tenant-routing.d.ts.map +0 -1
  131. package/dist/connectors/slack/tenant-routing.js.map +0 -1
  132. package/dist/connectors/slack/transform.d.ts.map +0 -1
  133. package/dist/connectors/slack/transform.js.map +0 -1
  134. package/dist/connectors/slack/types.d.ts.map +0 -1
  135. package/dist/connectors/slack/types.js.map +0 -1
  136. package/dist/connectors/slack/web-client.d.ts.map +0 -1
  137. package/dist/connectors/slack/web-client.js.map +0 -1
  138. package/dist/connectors/slack/workspaces.d.ts.map +0 -1
  139. package/dist/connectors/slack/workspaces.js.map +0 -1
  140. package/dist/consolidate.d.ts.map +0 -1
  141. package/dist/consolidate.js.map +0 -1
  142. package/dist/correction-latency.d.ts.map +0 -1
  143. package/dist/correction-latency.js.map +0 -1
  144. package/dist/customer-notes.d.ts.map +0 -1
  145. package/dist/customer-notes.js.map +0 -1
  146. package/dist/dag.d.ts.map +0 -1
  147. package/dist/dag.js.map +0 -1
  148. package/dist/dashboard.d.ts.map +0 -1
  149. package/dist/dashboard.js.map +0 -1
  150. package/dist/db.d.ts.map +0 -1
  151. package/dist/db.js.map +0 -1
  152. package/dist/decisions.d.ts.map +0 -1
  153. package/dist/decisions.js.map +0 -1
  154. package/dist/dedupe.d.ts.map +0 -1
  155. package/dist/dedupe.js.map +0 -1
  156. package/dist/embedding-provider.d.ts.map +0 -1
  157. package/dist/embedding-provider.js.map +0 -1
  158. package/dist/embeddings.d.ts.map +0 -1
  159. package/dist/embeddings.js.map +0 -1
  160. package/dist/eval-suite.d.ts.map +0 -1
  161. package/dist/eval-suite.js.map +0 -1
  162. package/dist/eval.d.ts.map +0 -1
  163. package/dist/eval.js.map +0 -1
  164. package/dist/extensions/openclaw-plugin/index.js.map +0 -1
  165. package/dist/extract.d.ts.map +0 -1
  166. package/dist/extract.js.map +0 -1
  167. package/dist/forward-claim-detector.d.ts.map +0 -1
  168. package/dist/forward-claim-detector.js.map +0 -1
  169. package/dist/goals.d.ts.map +0 -1
  170. package/dist/goals.js.map +0 -1
  171. package/dist/graph-extract.d.ts.map +0 -1
  172. package/dist/graph-extract.js.map +0 -1
  173. package/dist/graph-recall.d.ts.map +0 -1
  174. package/dist/graph-recall.js.map +0 -1
  175. package/dist/graph-stream.d.ts.map +0 -1
  176. package/dist/graph-stream.js.map +0 -1
  177. package/dist/graph-view.d.ts.map +0 -1
  178. package/dist/graph-view.js.map +0 -1
  179. package/dist/graph.d.ts.map +0 -1
  180. package/dist/graph.js.map +0 -1
  181. package/dist/handoff.d.ts.map +0 -1
  182. package/dist/handoff.js.map +0 -1
  183. package/dist/hooks.d.ts.map +0 -1
  184. package/dist/hooks.js.map +0 -1
  185. package/dist/importers.d.ts.map +0 -1
  186. package/dist/importers.js.map +0 -1
  187. package/dist/incidents.d.ts.map +0 -1
  188. package/dist/incidents.js.map +0 -1
  189. package/dist/index.d.ts.map +0 -1
  190. package/dist/index.js.map +0 -1
  191. package/dist/invalidation.d.ts.map +0 -1
  192. package/dist/invalidation.js.map +0 -1
  193. package/dist/mcp/framing.d.ts.map +0 -1
  194. package/dist/mcp/framing.js.map +0 -1
  195. package/dist/mcp/server.d.ts.map +0 -1
  196. package/dist/mcp/server.js.map +0 -1
  197. package/dist/memory-value-weights.d.ts.map +0 -1
  198. package/dist/memory-value-weights.js.map +0 -1
  199. package/dist/memory-value.d.ts.map +0 -1
  200. package/dist/memory-value.js.map +0 -1
  201. package/dist/memory.d.ts.map +0 -1
  202. package/dist/memory.js.map +0 -1
  203. package/dist/multihop.d.ts.map +0 -1
  204. package/dist/multihop.js.map +0 -1
  205. package/dist/owner-validation.d.ts.map +0 -1
  206. package/dist/owner-validation.js.map +0 -1
  207. package/dist/path-context.d.ts.map +0 -1
  208. package/dist/path-context.js.map +0 -1
  209. package/dist/physics-config.d.ts.map +0 -1
  210. package/dist/physics-config.js.map +0 -1
  211. package/dist/physics-state.d.ts.map +0 -1
  212. package/dist/physics-state.js.map +0 -1
  213. package/dist/physics.d.ts.map +0 -1
  214. package/dist/physics.js.map +0 -1
  215. package/dist/policies.d.ts.map +0 -1
  216. package/dist/policies.js.map +0 -1
  217. package/dist/postinstall.d.ts.map +0 -1
  218. package/dist/postinstall.js.map +0 -1
  219. package/dist/predictions.d.ts.map +0 -1
  220. package/dist/predictions.js.map +0 -1
  221. package/dist/processes.d.ts.map +0 -1
  222. package/dist/processes.js.map +0 -1
  223. package/dist/project-briefs.d.ts.map +0 -1
  224. package/dist/project-briefs.js.map +0 -1
  225. package/dist/project-identity.d.ts.map +0 -1
  226. package/dist/project-identity.js.map +0 -1
  227. package/dist/provenance-coverage.d.ts.map +0 -1
  228. package/dist/provenance-coverage.js.map +0 -1
  229. package/dist/rate-limit.d.ts.map +0 -1
  230. package/dist/rate-limit.js.map +0 -1
  231. package/dist/raw-archive-mirror-cleanup.d.ts.map +0 -1
  232. package/dist/raw-archive-mirror-cleanup.js.map +0 -1
  233. package/dist/raw-archive.d.ts.map +0 -1
  234. package/dist/raw-archive.js.map +0 -1
  235. package/dist/recall-history.d.ts.map +0 -1
  236. package/dist/recall-history.js.map +0 -1
  237. package/dist/recall-scope.d.ts.map +0 -1
  238. package/dist/recall-scope.js.map +0 -1
  239. package/dist/recall-trace.d.ts.map +0 -1
  240. package/dist/recall-trace.js.map +0 -1
  241. package/dist/refine-llm.d.ts.map +0 -1
  242. package/dist/refine-llm.js.map +0 -1
  243. package/dist/reject-flow.d.ts.map +0 -1
  244. package/dist/reject-flow.js.map +0 -1
  245. package/dist/rejection.d.ts.map +0 -1
  246. package/dist/rejection.js.map +0 -1
  247. package/dist/replay.d.ts.map +0 -1
  248. package/dist/replay.js.map +0 -1
  249. package/dist/rerankers/cross-encoder.d.ts.map +0 -1
  250. package/dist/rerankers/cross-encoder.js.map +0 -1
  251. package/dist/rerankers/index.d.ts.map +0 -1
  252. package/dist/rerankers/index.js.map +0 -1
  253. package/dist/rerankers/jev.d.ts.map +0 -1
  254. package/dist/rerankers/jev.js.map +0 -1
  255. package/dist/rerankers/llm.d.ts.map +0 -1
  256. package/dist/rerankers/llm.js.map +0 -1
  257. package/dist/rerankers/types.d.ts.map +0 -1
  258. package/dist/rerankers/types.js.map +0 -1
  259. package/dist/rrf.d.ts.map +0 -1
  260. package/dist/rrf.js.map +0 -1
  261. package/dist/salience.d.ts.map +0 -1
  262. package/dist/salience.js.map +0 -1
  263. package/dist/scheduler.d.ts.map +0 -1
  264. package/dist/scheduler.js.map +0 -1
  265. package/dist/scope.d.ts.map +0 -1
  266. package/dist/scope.js.map +0 -1
  267. package/dist/search.d.ts.map +0 -1
  268. package/dist/search.js.map +0 -1
  269. package/dist/secret-detect.d.ts.map +0 -1
  270. package/dist/secret-detect.js.map +0 -1
  271. package/dist/server-detect.d.ts.map +0 -1
  272. package/dist/server-detect.js.map +0 -1
  273. package/dist/server.d.ts.map +0 -1
  274. package/dist/server.js.map +0 -1
  275. package/dist/shared.d.ts.map +0 -1
  276. package/dist/shared.js.map +0 -1
  277. package/dist/skills.d.ts.map +0 -1
  278. package/dist/skills.js.map +0 -1
  279. package/dist/sleep-redact.d.ts +0 -58
  280. package/dist/sleep-redact.d.ts.map +0 -1
  281. package/dist/sleep-redact.js +0 -80
  282. package/dist/sleep-redact.js.map +0 -1
  283. package/dist/src/ablation.js +0 -138
  284. package/dist/src/ablation.js.map +0 -1
  285. package/dist/src/ambient.js +0 -148
  286. package/dist/src/ambient.js.map +0 -1
  287. package/dist/src/api.js +0 -2109
  288. package/dist/src/api.js.map +0 -1
  289. package/dist/src/audit-prune.js +0 -106
  290. package/dist/src/audit-prune.js.map +0 -1
  291. package/dist/src/audit.js +0 -213
  292. package/dist/src/audit.js.map +0 -1
  293. package/dist/src/auth.js +0 -97
  294. package/dist/src/auth.js.map +0 -1
  295. package/dist/src/autolearn.js +0 -174
  296. package/dist/src/autolearn.js.map +0 -1
  297. package/dist/src/availability.js +0 -94
  298. package/dist/src/availability.js.map +0 -1
  299. package/dist/src/capture.js +0 -1354
  300. package/dist/src/capture.js.map +0 -1
  301. package/dist/src/card-detail.js +0 -15
  302. package/dist/src/card-detail.js.map +0 -1
  303. package/dist/src/card.js +0 -19
  304. package/dist/src/card.js.map +0 -1
  305. package/dist/src/cli.js +0 -9328
  306. package/dist/src/cli.js.map +0 -1
  307. package/dist/src/client.js +0 -237
  308. package/dist/src/client.js.map +0 -1
  309. package/dist/src/compare.js +0 -122
  310. package/dist/src/compare.js.map +0 -1
  311. package/dist/src/config.js +0 -135
  312. package/dist/src/config.js.map +0 -1
  313. package/dist/src/connectors/github/backfill.js +0 -281
  314. package/dist/src/connectors/github/backfill.js.map +0 -1
  315. package/dist/src/connectors/github/cli-impl.js +0 -234
  316. package/dist/src/connectors/github/cli-impl.js.map +0 -1
  317. package/dist/src/connectors/github/deletion.js +0 -85
  318. package/dist/src/connectors/github/deletion.js.map +0 -1
  319. package/dist/src/connectors/github/dlq.js +0 -190
  320. package/dist/src/connectors/github/dlq.js.map +0 -1
  321. package/dist/src/connectors/github/idempotency.js +0 -27
  322. package/dist/src/connectors/github/idempotency.js.map +0 -1
  323. package/dist/src/connectors/github/ingest.js +0 -156
  324. package/dist/src/connectors/github/ingest.js.map +0 -1
  325. package/dist/src/connectors/github/octokit-client.js +0 -70
  326. package/dist/src/connectors/github/octokit-client.js.map +0 -1
  327. package/dist/src/connectors/github/ratelimit.js +0 -31
  328. package/dist/src/connectors/github/ratelimit.js.map +0 -1
  329. package/dist/src/connectors/github/scope.js +0 -13
  330. package/dist/src/connectors/github/scope.js.map +0 -1
  331. package/dist/src/connectors/github/signature.js +0 -81
  332. package/dist/src/connectors/github/signature.js.map +0 -1
  333. package/dist/src/connectors/github/tenant-routing.js +0 -69
  334. package/dist/src/connectors/github/tenant-routing.js.map +0 -1
  335. package/dist/src/connectors/github/transform.js +0 -103
  336. package/dist/src/connectors/github/transform.js.map +0 -1
  337. package/dist/src/connectors/github/types.js +0 -100
  338. package/dist/src/connectors/github/types.js.map +0 -1
  339. package/dist/src/connectors/slack/backfill.js +0 -78
  340. package/dist/src/connectors/slack/backfill.js.map +0 -1
  341. package/dist/src/connectors/slack/deletion.js +0 -59
  342. package/dist/src/connectors/slack/deletion.js.map +0 -1
  343. package/dist/src/connectors/slack/dlq.js +0 -224
  344. package/dist/src/connectors/slack/dlq.js.map +0 -1
  345. package/dist/src/connectors/slack/idempotency.js +0 -31
  346. package/dist/src/connectors/slack/idempotency.js.map +0 -1
  347. package/dist/src/connectors/slack/ingest.js +0 -109
  348. package/dist/src/connectors/slack/ingest.js.map +0 -1
  349. package/dist/src/connectors/slack/ratelimit.js +0 -18
  350. package/dist/src/connectors/slack/ratelimit.js.map +0 -1
  351. package/dist/src/connectors/slack/scope.js +0 -13
  352. package/dist/src/connectors/slack/scope.js.map +0 -1
  353. package/dist/src/connectors/slack/signature.js +0 -27
  354. package/dist/src/connectors/slack/signature.js.map +0 -1
  355. package/dist/src/connectors/slack/tenant-routing.js +0 -41
  356. package/dist/src/connectors/slack/tenant-routing.js.map +0 -1
  357. package/dist/src/connectors/slack/transform.js +0 -47
  358. package/dist/src/connectors/slack/transform.js.map +0 -1
  359. package/dist/src/connectors/slack/types.js +0 -35
  360. package/dist/src/connectors/slack/types.js.map +0 -1
  361. package/dist/src/connectors/slack/web-client.js +0 -43
  362. package/dist/src/connectors/slack/web-client.js.map +0 -1
  363. package/dist/src/connectors/slack/workspaces.js +0 -62
  364. package/dist/src/connectors/slack/workspaces.js.map +0 -1
  365. package/dist/src/consolidate.js +0 -978
  366. package/dist/src/consolidate.js.map +0 -1
  367. package/dist/src/correction-latency.js +0 -74
  368. package/dist/src/correction-latency.js.map +0 -1
  369. package/dist/src/customer-notes.js +0 -325
  370. package/dist/src/customer-notes.js.map +0 -1
  371. package/dist/src/dag.js +0 -352
  372. package/dist/src/dag.js.map +0 -1
  373. package/dist/src/dashboard.js +0 -258
  374. package/dist/src/dashboard.js.map +0 -1
  375. package/dist/src/db.js +0 -2728
  376. package/dist/src/db.js.map +0 -1
  377. package/dist/src/decisions.js +0 -304
  378. package/dist/src/decisions.js.map +0 -1
  379. package/dist/src/dedupe.js +0 -141
  380. package/dist/src/dedupe.js.map +0 -1
  381. package/dist/src/embedding-provider.js +0 -314
  382. package/dist/src/embedding-provider.js.map +0 -1
  383. package/dist/src/embeddings.js +0 -543
  384. package/dist/src/embeddings.js.map +0 -1
  385. package/dist/src/eval-suite.js +0 -294
  386. package/dist/src/eval-suite.js.map +0 -1
  387. package/dist/src/eval.js +0 -187
  388. package/dist/src/eval.js.map +0 -1
  389. package/dist/src/extract.js +0 -117
  390. package/dist/src/extract.js.map +0 -1
  391. package/dist/src/forward-claim-detector.js +0 -117
  392. package/dist/src/forward-claim-detector.js.map +0 -1
  393. package/dist/src/goals.js +0 -390
  394. package/dist/src/goals.js.map +0 -1
  395. package/dist/src/graph-extract.js +0 -314
  396. package/dist/src/graph-extract.js.map +0 -1
  397. package/dist/src/graph-recall.js +0 -277
  398. package/dist/src/graph-recall.js.map +0 -1
  399. package/dist/src/graph-stream.js +0 -176
  400. package/dist/src/graph-stream.js.map +0 -1
  401. package/dist/src/graph-view.js +0 -310
  402. package/dist/src/graph-view.js.map +0 -1
  403. package/dist/src/graph.js +0 -762
  404. package/dist/src/graph.js.map +0 -1
  405. package/dist/src/handoff.js +0 -65
  406. package/dist/src/handoff.js.map +0 -1
  407. package/dist/src/hooks.js +0 -926
  408. package/dist/src/hooks.js.map +0 -1
  409. package/dist/src/importers.js +0 -881
  410. package/dist/src/importers.js.map +0 -1
  411. package/dist/src/incidents.js +0 -336
  412. package/dist/src/incidents.js.map +0 -1
  413. package/dist/src/index.js +0 -32
  414. package/dist/src/index.js.map +0 -1
  415. package/dist/src/invalidation.js +0 -129
  416. package/dist/src/invalidation.js.map +0 -1
  417. package/dist/src/mcp/framing.js +0 -45
  418. package/dist/src/mcp/framing.js.map +0 -1
  419. package/dist/src/mcp/server.js +0 -1298
  420. package/dist/src/mcp/server.js.map +0 -1
  421. package/dist/src/memory-value-weights.js +0 -31
  422. package/dist/src/memory-value-weights.js.map +0 -1
  423. package/dist/src/memory-value.js +0 -261
  424. package/dist/src/memory-value.js.map +0 -1
  425. package/dist/src/memory.js +0 -425
  426. package/dist/src/memory.js.map +0 -1
  427. package/dist/src/multihop.js +0 -35
  428. package/dist/src/multihop.js.map +0 -1
  429. package/dist/src/owner-validation.js +0 -56
  430. package/dist/src/owner-validation.js.map +0 -1
  431. package/dist/src/path-context.js +0 -48
  432. package/dist/src/path-context.js.map +0 -1
  433. package/dist/src/physics-config.js +0 -26
  434. package/dist/src/physics-config.js.map +0 -1
  435. package/dist/src/physics-state.js +0 -169
  436. package/dist/src/physics-state.js.map +0 -1
  437. package/dist/src/physics.js +0 -378
  438. package/dist/src/physics.js.map +0 -1
  439. package/dist/src/policies.js +0 -414
  440. package/dist/src/policies.js.map +0 -1
  441. package/dist/src/postinstall.js +0 -101
  442. package/dist/src/postinstall.js.map +0 -1
  443. package/dist/src/predictions.js +0 -629
  444. package/dist/src/predictions.js.map +0 -1
  445. package/dist/src/processes.js +0 -349
  446. package/dist/src/processes.js.map +0 -1
  447. package/dist/src/project-briefs.js +0 -492
  448. package/dist/src/project-briefs.js.map +0 -1
  449. package/dist/src/project-identity.js +0 -200
  450. package/dist/src/project-identity.js.map +0 -1
  451. package/dist/src/provenance-coverage.js +0 -23
  452. package/dist/src/provenance-coverage.js.map +0 -1
  453. package/dist/src/rate-limit.js +0 -60
  454. package/dist/src/rate-limit.js.map +0 -1
  455. package/dist/src/raw-archive-mirror-cleanup.js +0 -55
  456. package/dist/src/raw-archive-mirror-cleanup.js.map +0 -1
  457. package/dist/src/raw-archive.js +0 -88
  458. package/dist/src/raw-archive.js.map +0 -1
  459. package/dist/src/recall-history.js +0 -235
  460. package/dist/src/recall-history.js.map +0 -1
  461. package/dist/src/recall-scope.js +0 -89
  462. package/dist/src/recall-scope.js.map +0 -1
  463. package/dist/src/recall-trace.js +0 -183
  464. package/dist/src/recall-trace.js.map +0 -1
  465. package/dist/src/refine-llm.js +0 -156
  466. package/dist/src/refine-llm.js.map +0 -1
  467. package/dist/src/reject-flow.js +0 -209
  468. package/dist/src/reject-flow.js.map +0 -1
  469. package/dist/src/rejection.js +0 -160
  470. package/dist/src/rejection.js.map +0 -1
  471. package/dist/src/replay.js +0 -122
  472. package/dist/src/replay.js.map +0 -1
  473. package/dist/src/rerankers/cross-encoder.js +0 -137
  474. package/dist/src/rerankers/cross-encoder.js.map +0 -1
  475. package/dist/src/rerankers/index.js +0 -20
  476. package/dist/src/rerankers/index.js.map +0 -1
  477. package/dist/src/rerankers/jev.js +0 -119
  478. package/dist/src/rerankers/jev.js.map +0 -1
  479. package/dist/src/rerankers/llm.js +0 -80
  480. package/dist/src/rerankers/llm.js.map +0 -1
  481. package/dist/src/rerankers/types.js +0 -2
  482. package/dist/src/rerankers/types.js.map +0 -1
  483. package/dist/src/rrf.js +0 -61
  484. package/dist/src/rrf.js.map +0 -1
  485. package/dist/src/salience.js +0 -74
  486. package/dist/src/salience.js.map +0 -1
  487. package/dist/src/scheduler.js +0 -77
  488. package/dist/src/scheduler.js.map +0 -1
  489. package/dist/src/scope.js +0 -35
  490. package/dist/src/scope.js.map +0 -1
  491. package/dist/src/search.js +0 -1003
  492. package/dist/src/search.js.map +0 -1
  493. package/dist/src/secret-detect.js +0 -95
  494. package/dist/src/secret-detect.js.map +0 -1
  495. package/dist/src/server-detect.js +0 -231
  496. package/dist/src/server-detect.js.map +0 -1
  497. package/dist/src/server.js +0 -3255
  498. package/dist/src/server.js.map +0 -1
  499. package/dist/src/shared.js +0 -502
  500. package/dist/src/shared.js.map +0 -1
  501. package/dist/src/skills.js +0 -346
  502. package/dist/src/skills.js.map +0 -1
  503. package/dist/src/sleep-redact.js +0 -80
  504. package/dist/src/sleep-redact.js.map +0 -1
  505. package/dist/src/sso.js +0 -22
  506. package/dist/src/sso.js.map +0 -1
  507. package/dist/src/store.js +0 -3743
  508. package/dist/src/store.js.map +0 -1
  509. package/dist/src/tenant.js +0 -17
  510. package/dist/src/tenant.js.map +0 -1
  511. package/dist/src/trace.js +0 -72
  512. package/dist/src/trace.js.map +0 -1
  513. package/dist/src/version.js +0 -40
  514. package/dist/src/version.js.map +0 -1
  515. package/dist/src/working-memory.js +0 -157
  516. package/dist/src/working-memory.js.map +0 -1
  517. package/dist/src/yaml.js +0 -107
  518. package/dist/src/yaml.js.map +0 -1
  519. package/dist/sso.d.ts +0 -13
  520. package/dist/sso.d.ts.map +0 -1
  521. package/dist/sso.js +0 -22
  522. package/dist/sso.js.map +0 -1
  523. package/dist/store.d.ts.map +0 -1
  524. package/dist/store.js.map +0 -1
  525. package/dist/tenant.d.ts.map +0 -1
  526. package/dist/tenant.js.map +0 -1
  527. package/dist/trace.d.ts.map +0 -1
  528. package/dist/trace.js.map +0 -1
  529. package/dist/version.d.ts.map +0 -1
  530. package/dist/version.js.map +0 -1
  531. package/dist/working-memory.d.ts.map +0 -1
  532. package/dist/working-memory.js.map +0 -1
  533. package/dist/yaml.d.ts.map +0 -1
  534. package/dist/yaml.js.map +0 -1
@@ -1,281 +0,0 @@
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 (codex P1 #3): 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
- * Codex P1 #2: 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';
27
- import { ingestEvent } from './ingest.js';
28
- 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
- */
66
- function syntheticRepository(repoFullName) {
67
- const [owner, name] = repoFullName.split('/');
68
- return {
69
- full_name: repoFullName,
70
- name: name ?? repoFullName,
71
- owner: { login: owner ?? repoFullName },
72
- // private intentionally omitted — fail-safe to private scope.
73
- };
74
- }
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
- */
80
- function parseTrailingNumber(url) {
81
- if (!url)
82
- return null;
83
- const m = url.match(/\/(\d+)(?:\?.*)?$/);
84
- if (!m)
85
- return null;
86
- const n = Number(m[1]);
87
- return Number.isFinite(n) ? n : null;
88
- }
89
- function isPlainObject(x) {
90
- return x !== undefined && x !== null && typeof x === 'object' && !Array.isArray(x);
91
- }
92
- function isGitHubUser(x) {
93
- return isPlainObject(x) && typeof x.login === 'string' && typeof x.id === 'number';
94
- }
95
- function isIssuesItem(x) {
96
- if (!isPlainObject(x))
97
- return false;
98
- if (typeof x.number !== 'number')
99
- return false;
100
- if (typeof x.title !== 'string')
101
- return false;
102
- return isGitHubUser(x.user);
103
- }
104
- function isCommentItem(x) {
105
- if (!isPlainObject(x))
106
- return false;
107
- if (typeof x.id !== 'number')
108
- return false;
109
- return isGitHubUser(x.user);
110
- }
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 (round 1
114
- * codex P1 #3 crash safety).
115
- *
116
- * v1.3.1 (round 2 codex P1s + claude P1):
117
- * - Tracks max(updated_at) across ALL fetched items, including ones
118
- * `toIngestEvent` rejects (e.g., PRs returned via `/issues`). Otherwise
119
- * a page of pure PRs would never advance the HWM and the next run would
120
- * re-fetch the same window forever.
121
- * - Returns `drained: boolean` — true only when the stream actually ran
122
- * to next=null. Callers MUST NOT advance the HWM when drained=false.
123
- * Was a bug in v1.3.0: hitting maxPerStream cap returned the partial
124
- * maxUpdatedAt and the caller persisted it, skipping the unfetched tail.
125
- */
126
- async function drainStream(ctx, url0, toIngestEvent, fetcher, token, sleep, maxItems) {
127
- let url = url0;
128
- let ingested = 0;
129
- let pages = 0;
130
- let maxUpdatedAt = null;
131
- while (url) {
132
- // Fetch with rate-limit retry loop.
133
- let page;
134
- while (true) {
135
- page = await fetcher({ url, token });
136
- if (page.rateLimit.reason !== 'none') {
137
- await sleep(page.rateLimit.sleepSeconds * 1000);
138
- continue;
139
- }
140
- break;
141
- }
142
- pages++;
143
- for (const item of page.items) {
144
- // v1.3.1: track updated_at on EVERY item, before the toIngestEvent
145
- // filter. Skipped PRs from /issues still contribute to the HWM so
146
- // PR-only pages don't loop forever.
147
- // SAFETY: updated_at is GitHub's ISO-timestamp field on every item
148
- // shape this stream returns; a non-string value would only fail the
149
- // string comparisons below, matching pre-migration passthrough.
150
- const updatedAt = isPlainObject(item)
151
- ? (item.updated_at ?? null)
152
- : null;
153
- if (updatedAt && (!maxUpdatedAt || updatedAt > maxUpdatedAt)) {
154
- maxUpdatedAt = updatedAt;
155
- }
156
- const evt = toIngestEvent(item);
157
- if (!evt)
158
- continue;
159
- const r = ingestEvent(ctx, {
160
- event: evt,
161
- rawBody: JSON.stringify(item),
162
- deliveryId: `backfill:${ctx.tenantId}:${updatedAt ?? ''}`,
163
- });
164
- if (r.status === 'ingested' || r.status === 'skipped')
165
- ingested++;
166
- if (maxItems && ingested >= maxItems) {
167
- // Capped mid-stream: caller MUST NOT advance the HWM (drained=false).
168
- return { ingested, pages, maxUpdatedAt, drained: false };
169
- }
170
- }
171
- url = page.next;
172
- }
173
- return { ingested, pages, maxUpdatedAt, drained: true };
174
- }
175
- export async function backfillRepo(ctx, opts) {
176
- const sleep = opts.sleepMs ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
177
- const cursors = readCursor(ctx.hippoRoot, ctx.tenantId, opts.repoFullName);
178
- const repository = syntheticRepository(opts.repoFullName);
179
- const result = {
180
- ingested: { issues: 0, issueComments: 0, prReviewComments: 0 },
181
- pages: { issues: 0, issueComments: 0, prReviewComments: 0 },
182
- };
183
- // ---------- Stream 1: issues (skip PRs) ----------
184
- const issuesUrl = `${API}/repos/${opts.repoFullName}/issues?state=all&per_page=100` +
185
- (cursors.issues ? `&since=${encodeURIComponent(cursors.issues)}` : '');
186
- const issuesRes = await drainStream(ctx, issuesUrl, (item) => {
187
- if (!isIssuesItem(item))
188
- return null;
189
- // Codex P1 #2: /issues returns PRs too — skip them.
190
- if (item.pull_request)
191
- return null;
192
- const payload = {
193
- action: 'opened',
194
- repository,
195
- issue: {
196
- number: item.number,
197
- title: item.title,
198
- body: item.body ?? null,
199
- user: { login: item.user.login, id: item.user.id },
200
- updated_at: item.updated_at,
201
- },
202
- };
203
- return { eventName: 'issues', payload };
204
- }, opts.fetcher, opts.token, sleep, opts.maxPerStream);
205
- result.ingested.issues = issuesRes.ingested;
206
- result.pages.issues = issuesRes.pages;
207
- // v1.3.1: only advance HWM when the stream actually drained. A capped run
208
- // (--max) must leave the HWM at its previous value so the next invocation
209
- // re-fetches the unprocessed tail.
210
- if (issuesRes.drained && issuesRes.maxUpdatedAt) {
211
- writeOneHwm(ctx.hippoRoot, ctx.tenantId, opts.repoFullName, 'issues_hwm', issuesRes.maxUpdatedAt);
212
- }
213
- // ---------- Stream 2: repo-level issue comments ----------
214
- const commentsUrl = `${API}/repos/${opts.repoFullName}/issues/comments?per_page=100` +
215
- (cursors.issueComments
216
- ? `&since=${encodeURIComponent(cursors.issueComments)}`
217
- : '');
218
- const commentsRes = await drainStream(ctx, commentsUrl, (item) => {
219
- if (!isCommentItem(item))
220
- return null;
221
- // SAFETY: this closure only runs against the /issues/comments stream,
222
- // so every item isCommentItem validates here is genuinely an
223
- // IssueCommentItem; a missing issue_url is handled defensively below.
224
- const c = item;
225
- const issueNumber = parseTrailingNumber(c.issue_url);
226
- if (issueNumber === null)
227
- return null;
228
- const payload = {
229
- action: 'created',
230
- repository,
231
- issue: { number: issueNumber },
232
- comment: {
233
- id: c.id,
234
- body: c.body ?? null,
235
- user: { login: c.user.login, id: c.user.id },
236
- updated_at: c.updated_at,
237
- },
238
- };
239
- return { eventName: 'issue_comment', payload };
240
- }, opts.fetcher, opts.token, sleep, opts.maxPerStream);
241
- result.ingested.issueComments = commentsRes.ingested;
242
- result.pages.issueComments = commentsRes.pages;
243
- if (commentsRes.drained && commentsRes.maxUpdatedAt) {
244
- writeOneHwm(ctx.hippoRoot, ctx.tenantId, opts.repoFullName, 'issue_comments_hwm', commentsRes.maxUpdatedAt);
245
- }
246
- // ---------- Stream 3: repo-level PR review comments ----------
247
- const prCommentsUrl = `${API}/repos/${opts.repoFullName}/pulls/comments?per_page=100` +
248
- (cursors.prReviewComments
249
- ? `&since=${encodeURIComponent(cursors.prReviewComments)}`
250
- : '');
251
- const prCommentsRes = await drainStream(ctx, prCommentsUrl, (item) => {
252
- if (!isCommentItem(item))
253
- return null;
254
- // SAFETY: this closure only runs against the /pulls/comments stream,
255
- // so every item isCommentItem validates here is genuinely a
256
- // PrReviewCommentItem; a missing pull_request_url is handled below.
257
- const c = item;
258
- const prNumber = parseTrailingNumber(c.pull_request_url);
259
- if (prNumber === null)
260
- return null;
261
- const payload = {
262
- action: 'created',
263
- repository,
264
- pull_request: { number: prNumber },
265
- comment: {
266
- id: c.id,
267
- body: c.body ?? null,
268
- user: { login: c.user.login, id: c.user.id },
269
- updated_at: c.updated_at,
270
- },
271
- };
272
- return { eventName: 'pull_request_review_comment', payload };
273
- }, opts.fetcher, opts.token, sleep, opts.maxPerStream);
274
- result.ingested.prReviewComments = prCommentsRes.ingested;
275
- result.pages.prReviewComments = prCommentsRes.pages;
276
- if (prCommentsRes.drained && prCommentsRes.maxUpdatedAt) {
277
- writeOneHwm(ctx.hippoRoot, ctx.tenantId, opts.repoFullName, 'pr_review_comments_hwm', prCommentsRes.maxUpdatedAt);
278
- }
279
- return result;
280
- }
281
- //# sourceMappingURL=backfill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backfill.js","sourceRoot":"","sources":["../../../../src/connectors/github/backfill.ts"],"names":[],"mappings":"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"}
@@ -1,234 +0,0 @@
1
- /**
2
- * Implementation of `hippo github` CLI subcommands. Extracted from the main
3
- * cli.ts so unit tests can import these functions directly without triggering
4
- * the cli.ts main() side effects. The cli.ts dispatcher re-exports the
5
- * top-level cmdGithub.
6
- *
7
- * Subcommands mirror the Slack connector shape (cli.ts §Slack subcommands):
8
- * - hippo github backfill --repo <owner/name> [--since ISO] [--max <N>]
9
- * - hippo github dlq list
10
- * - hippo github dlq replay <id> [--force]
11
- */
12
- import { adminActor } from '../../api.js';
13
- import { openHippoDb, closeHippoDb } from '../../db.js';
14
- import { resolveTenantId } from '../../tenant.js';
15
- import { backfillRepo } from './backfill.js';
16
- import { realGitHubFetcher } from './octokit-client.js';
17
- import { listDlq, replayDlqEntry } from './dlq.js';
18
- import { ingestEvent } from './ingest.js';
19
- import { handleCommentDeleted } from './deletion.js';
20
- import { computeDeletionKey } from './signature.js';
21
- import { isGitHubIssueEvent, isGitHubIssueCommentEvent, isGitHubPullRequestEvent, isGitHubPullRequestReviewCommentEvent, } from './types.js';
22
- function isFlagString(value) {
23
- return typeof value === 'string';
24
- }
25
- // FlagValue never includes `number` (see its declaration above), so a
26
- // `value is number` predicate directly on FlagValue would not type-check —
27
- // the generic wrapper narrows a value of any type T instead.
28
- function isNumberLike(value) {
29
- return typeof value === 'number';
30
- }
31
- function isFlagValueNumberLike(value) {
32
- return isNumberLike(value);
33
- }
34
- /**
35
- * Map a parsed envelope + eventName header to an IngestEvent discriminated
36
- * union. Returns null for unknown event types or shapes that don't pass the
37
- * type guards.
38
- */
39
- function parsedToIngestEvent(parsed, eventName) {
40
- if (eventName === 'issues' && isGitHubIssueEvent(parsed, eventName)) {
41
- return { eventName: 'issues', payload: parsed };
42
- }
43
- if (eventName === 'issue_comment' && isGitHubIssueCommentEvent(parsed, eventName)) {
44
- return { eventName: 'issue_comment', payload: parsed };
45
- }
46
- if (eventName === 'pull_request' && isGitHubPullRequestEvent(parsed, eventName)) {
47
- return { eventName: 'pull_request', payload: parsed };
48
- }
49
- if (eventName === 'pull_request_review_comment' &&
50
- isGitHubPullRequestReviewCommentEvent(parsed, eventName)) {
51
- return { eventName: 'pull_request_review_comment', payload: parsed };
52
- }
53
- return null;
54
- }
55
- export function printGithubBackfillUsage() {
56
- console.log('hippo github backfill --repo <owner/name> [--since ISO] [--max <N>]');
57
- console.log(' --repo GitHub repository in owner/name format (required, e.g. acme/widgets)');
58
- console.log(' --since Initial high-water-mark for first run (optional, ISO 8601)');
59
- console.log(' --max Cap items per stream (optional, integer)');
60
- console.log(' Requires GITHUB_TOKEN env var with repo read scope.');
61
- }
62
- /**
63
- * `hippo github backfill`. The fetcher is injectable so tests can drive the
64
- * code path without hitting the network. Defaults to `realGitHubFetcher`.
65
- */
66
- export async function cmdGithubBackfill(hippoRoot, flags, fetcher = realGitHubFetcher) {
67
- if (flags['help']) {
68
- printGithubBackfillUsage();
69
- return;
70
- }
71
- const repo = flags['repo'];
72
- if (!isFlagString(repo) || !repo.includes('/')) {
73
- printGithubBackfillUsage();
74
- process.exit(2);
75
- }
76
- const token = process.env.GITHUB_TOKEN;
77
- if (!token) {
78
- console.error('GITHUB_TOKEN is not set. Backfill requires a personal access token with repo read scope.');
79
- process.exit(2);
80
- }
81
- const maxRaw = flags['max'];
82
- let maxPerStream;
83
- if (isFlagString(maxRaw) || isFlagValueNumberLike(maxRaw)) {
84
- const parsed = Number(maxRaw);
85
- if (Number.isFinite(parsed) && parsed > 0) {
86
- maxPerStream = Math.floor(parsed);
87
- }
88
- }
89
- const sinceFlag = flags['since'];
90
- const sinceIso = isFlagString(sinceFlag) ? sinceFlag : undefined;
91
- const tenantId = resolveTenantId({});
92
- // Seed the github_cursors row so all 3 streams use --since on a fresh run.
93
- // COALESCE preserves any existing HWM (subsequent runs ignore --since for
94
- // streams that already drained at least once — same idempotency story as
95
- // Slack's slack_cursors).
96
- if (sinceIso) {
97
- const db = openHippoDb(hippoRoot);
98
- try {
99
- db.prepare(`INSERT INTO github_cursors (tenant_id, repo_full_name, issues_hwm, issue_comments_hwm, pr_review_comments_hwm, updated_at)
100
- VALUES (?, ?, ?, ?, ?, ?)
101
- ON CONFLICT(tenant_id, repo_full_name) DO UPDATE SET
102
- issues_hwm = COALESCE(github_cursors.issues_hwm, excluded.issues_hwm),
103
- issue_comments_hwm = COALESCE(github_cursors.issue_comments_hwm, excluded.issue_comments_hwm),
104
- pr_review_comments_hwm = COALESCE(github_cursors.pr_review_comments_hwm, excluded.pr_review_comments_hwm),
105
- updated_at = excluded.updated_at`).run(tenantId, repo, sinceIso, sinceIso, sinceIso, new Date().toISOString());
106
- }
107
- finally {
108
- closeHippoDb(db);
109
- }
110
- }
111
- const ctx = {
112
- hippoRoot,
113
- tenantId,
114
- actor: adminActor('cli:github-backfill'),
115
- };
116
- try {
117
- const result = await backfillRepo(ctx, {
118
- repoFullName: repo,
119
- fetcher,
120
- token,
121
- maxPerStream,
122
- });
123
- console.log(JSON.stringify(result, null, 2));
124
- }
125
- catch (e) {
126
- // SAFETY: this is a best-effort error message only; property access on
127
- // any JS value is safe (undefined if absent), preserving the existing
128
- // lenient formatting even when something non-Error was thrown.
129
- console.error('backfill failed:', e.message);
130
- process.exit(3);
131
- }
132
- }
133
- export function cmdGithubDlqList(hippoRoot, _flags) {
134
- const db = openHippoDb(hippoRoot);
135
- try {
136
- const tenantId = resolveTenantId({});
137
- const items = listDlq(db, { tenantId });
138
- if (items.length === 0) {
139
- console.log('no entries');
140
- return;
141
- }
142
- for (const it of items) {
143
- console.log(`${it.id}\t${it.bucket}\t${it.tenantId}\t${it.eventName ?? '-'}\t${it.receivedAt}\t${it.error}`);
144
- }
145
- }
146
- finally {
147
- closeHippoDb(db);
148
- }
149
- }
150
- export async function cmdGithubDlqReplay(hippoRoot, args, flags) {
151
- const idArg = args[0];
152
- if (!idArg) {
153
- console.error('Usage: hippo github dlq replay <id> [--force]');
154
- process.exit(1);
155
- }
156
- const id = Number(idArg);
157
- if (!Number.isFinite(id) || !Number.isInteger(id) || id < 1) {
158
- console.error(`replay: invalid id ${idArg}`);
159
- process.exit(1);
160
- }
161
- const force = flags['force'] === true;
162
- const ctx = {
163
- hippoRoot,
164
- tenantId: resolveTenantId({}),
165
- actor: adminActor('cli:github-dlq-replay'),
166
- };
167
- // v1.3.1 hotfix (codex P1): without an ingestHook the v1.3.0 CLI was a
168
- // dry-run that printed "replay ok" while only bumping retry_count. Wire the
169
- // real hook so `replay` actually re-runs the ingest path.
170
- const result = await replayDlqEntry(ctx, id, {
171
- force,
172
- webhookSecret: process.env.GITHUB_WEBHOOK_SECRET,
173
- previousSecret: process.env.GITHUB_WEBHOOK_SECRET_PREVIOUS,
174
- ingestHook: async (innerCtx, args) => {
175
- const parsed = JSON.parse(args.rawPayload);
176
- const event = parsedToIngestEvent(parsed, args.eventName);
177
- if (!event) {
178
- return { memoryId: null };
179
- }
180
- // v1.3.2 (codex round 3 P1): a replayed `issue_comment.deleted` or
181
- // `pull_request_review_comment.deleted` row must route to the deletion
182
- // handler, NOT to ingestEvent. The v1.3.1 hook unconditionally called
183
- // ingestEvent and would have written the deleted comment as a NEW raw
184
- // memory instead of archiving the matching ones.
185
- if ((event.eventName === 'issue_comment' || event.eventName === 'pull_request_review_comment') &&
186
- event.payload.action === 'deleted') {
187
- const repo = event.payload.repository?.full_name ?? '';
188
- const artifactRef = event.eventName === 'issue_comment'
189
- ? `github://${repo}/issue/${event.payload.issue.number}/comment/${event.payload.comment.id}`
190
- : `github://${repo}/pull/${event.payload.pull_request.number}/review_comment/${event.payload.comment.id}`;
191
- const idempotencyKey = computeDeletionKey(artifactRef, event.payload.comment.updated_at ?? null);
192
- const r = handleCommentDeleted(innerCtx, {
193
- artifactRef,
194
- idempotencyKey,
195
- deliveryId: args.deliveryId,
196
- eventName: event.eventName,
197
- });
198
- // archivedCount maps to memoryId only loosely — return null since the
199
- // archive operation can affect multiple rows. The replay-result audit
200
- // trail is in github_dlq.retry_count + retried_at.
201
- return { memoryId: r.archivedCount > 0 ? 'archived' : null };
202
- }
203
- const r = ingestEvent(innerCtx, {
204
- event,
205
- rawBody: args.rawPayload,
206
- deliveryId: args.deliveryId,
207
- });
208
- return { memoryId: r.memoryId };
209
- },
210
- });
211
- if (!result.ok) {
212
- console.error(`replay failed: status=${result.status} retry_count=${result.retryCount}${result.reason ? ` reason=${result.reason}` : ''}`);
213
- process.exit(1);
214
- }
215
- console.log(`replay ok: status=${result.status} memory_id=${result.memoryId ?? '(none)'} retry_count=${result.retryCount}`);
216
- }
217
- export async function cmdGithub(hippoRoot, args, flags) {
218
- const sub = args[0];
219
- if (sub === 'backfill') {
220
- await cmdGithubBackfill(hippoRoot, flags);
221
- return;
222
- }
223
- if (sub === 'dlq' && args[1] === 'list') {
224
- cmdGithubDlqList(hippoRoot, flags);
225
- return;
226
- }
227
- if (sub === 'dlq' && args[1] === 'replay') {
228
- await cmdGithubDlqReplay(hippoRoot, args.slice(2), flags);
229
- return;
230
- }
231
- console.error('Usage: hippo github <backfill|dlq list|dlq replay <id> [--force]> [...]');
232
- process.exit(1);
233
- }
234
- //# sourceMappingURL=cli-impl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-impl.js","sourceRoot":"","sources":["../../../../src/connectors/github/cli-impl.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- import { openHippoDb, closeHippoDb } 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
- * Codex round 1 P0 #5: 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
- * Claude round 2 P0 #2 (v1.3.1 hotfix): the v1.3.0 implementation called
12
- * archiveRaw N times in a loop, each opening its own DB handle and SAVEPOINT.
13
- * The first archive's afterArchive committed the idempotency mark. If archive
14
- * 2..N threw, idempotency was already committed and retry returned 'duplicate'
15
- * with archivedCount=0 — survivors stayed searchable, leaking private bodies.
16
- *
17
- * v1.3.1 fix: ONE shared DB handle wrapping ALL archives + the idempotency
18
- * mark in a single outer SAVEPOINT. Any per-row failure rolls back the entire
19
- * batch (including idempotency), so retry re-attempts cleanly. archiveRawMemory
20
- * (the lower-level function from raw-archive.js) runs its own inner SAVEPOINT
21
- * which nests safely inside the outer one.
22
- *
23
- * Tenant scope and kind='raw' filtering are load-bearing: without them a
24
- * deletion event from tenant A could archive tenant B's row sharing the same
25
- * artifact_ref, or accidentally target a distilled row.
26
- */
27
- export function handleCommentDeleted(ctx, input) {
28
- const db = openHippoDb(ctx.hippoRoot);
29
- try {
30
- if (hasSeenKey(db, input.idempotencyKey)) {
31
- return { status: 'duplicate', archivedCount: 0 };
32
- }
33
- // SAFETY: rows come from the SELECT above, which projects only the
34
- // `id` column, so each row is exactly `{ id: string }`.
35
- const rows = db
36
- .prepare(`SELECT id FROM memories WHERE artifact_ref = ? AND tenant_id = ? AND kind = 'raw'`)
37
- .all(input.artifactRef, ctx.tenantId);
38
- const memoryIds = rows.map((r) => r.id);
39
- if (memoryIds.length === 0) {
40
- // Nothing to archive — still mark idempotency so a retry returns 'duplicate'.
41
- // Independent INSERT, no rollback needed.
42
- markKeySeen(db, {
43
- idempotencyKey: input.idempotencyKey,
44
- deliveryId: input.deliveryId,
45
- eventName: input.eventName,
46
- memoryId: null,
47
- });
48
- return { status: 'archive_skipped_not_found', archivedCount: 0 };
49
- }
50
- // Outer SAVEPOINT wrapping all archives + the idempotency mark. Any throw
51
- // rolls back the whole batch so retry sees neither archive nor mark — and
52
- // re-attempts the full set.
53
- db.exec('SAVEPOINT github_delete_all');
54
- try {
55
- for (const id of memoryIds) {
56
- archiveRawMemory(db, id, {
57
- reason: `source_deleted:github:${input.eventName}:${input.deliveryId}`,
58
- who: ctx.actor.subject,
59
- });
60
- }
61
- markKeySeen(db, {
62
- idempotencyKey: input.idempotencyKey,
63
- deliveryId: input.deliveryId,
64
- eventName: input.eventName,
65
- memoryId: memoryIds[0],
66
- });
67
- db.exec('RELEASE SAVEPOINT github_delete_all');
68
- }
69
- catch (e) {
70
- try {
71
- db.exec('ROLLBACK TO SAVEPOINT github_delete_all');
72
- db.exec('RELEASE SAVEPOINT github_delete_all');
73
- }
74
- catch {
75
- // Best effort. Surface the original error.
76
- }
77
- throw e;
78
- }
79
- return { status: 'archived', archivedCount: memoryIds.length };
80
- }
81
- finally {
82
- closeHippoDb(db);
83
- }
84
- }
85
- //# sourceMappingURL=deletion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deletion.js","sourceRoot":"","sources":["../../../../src/connectors/github/deletion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAsB3D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAY,EAAE,KAAoB;IACrE,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QACnD,CAAC;QAED,mEAAmE;QACnE,wDAAwD;QACxD,MAAM,IAAI,GAAG,EAAE;aACZ,OAAO,CACN,mFAAmF,CACpF;aACA,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,CAA0B,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,8EAA8E;YAC9E,0CAA0C;YAC1C,WAAW,CAAC,EAAE,EAAE;gBACd,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QACnE,CAAC;QAED,0EAA0E;QAC1E,0EAA0E;QAC1E,4BAA4B;QAC5B,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE;oBACvB,MAAM,EAAE,yBAAyB,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE;oBACtE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;YACL,CAAC;YACD,WAAW,CAAC,EAAE,EAAE;gBACd,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAE;aACxB,CAAC,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;gBACnD,EAAE,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}