oh-my-claude-sisyphus 3.7.6 → 3.7.9

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 (428) hide show
  1. package/.claude-plugin/marketplace.json +24 -0
  2. package/.claude-plugin/plugin.json +7 -0
  3. package/.mcp.json +8 -0
  4. package/agents/AGENTS.md +144 -0
  5. package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
  6. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
  7. package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
  8. package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
  9. package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
  10. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
  11. package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
  12. package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
  13. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
  14. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
  15. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
  16. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
  17. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
  18. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
  19. package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
  20. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
  21. package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
  22. package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
  23. package/dist/__tests__/learned-skills/config.test.js +37 -0
  24. package/dist/__tests__/learned-skills/config.test.js.map +1 -0
  25. package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
  26. package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
  27. package/dist/__tests__/learned-skills/detector.test.js +99 -0
  28. package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
  29. package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
  30. package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
  31. package/dist/__tests__/learned-skills/finder.test.js +59 -0
  32. package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
  33. package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
  34. package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
  35. package/dist/__tests__/learned-skills/loader.test.js +69 -0
  36. package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
  37. package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
  38. package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
  39. package/dist/__tests__/learned-skills/parser.test.js +81 -0
  40. package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
  41. package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
  42. package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
  43. package/dist/__tests__/learned-skills/validator.test.js +85 -0
  44. package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
  45. package/dist/__tests__/omc-tools-server.test.d.ts +2 -0
  46. package/dist/__tests__/omc-tools-server.test.d.ts.map +1 -0
  47. package/dist/__tests__/omc-tools-server.test.js +52 -0
  48. package/dist/__tests__/omc-tools-server.test.js.map +1 -0
  49. package/dist/agents/architect.js +1 -1
  50. package/dist/agents/architect.js.map +1 -1
  51. package/dist/agents/codex-agents.d.ts +20 -0
  52. package/dist/agents/codex-agents.d.ts.map +1 -0
  53. package/dist/agents/codex-agents.js +36 -0
  54. package/dist/agents/codex-agents.js.map +1 -0
  55. package/dist/agents/definitions.js +13 -13
  56. package/dist/agents/definitions.js.map +1 -1
  57. package/dist/agents/document-writer.d.ts +11 -0
  58. package/dist/agents/document-writer.d.ts.map +1 -0
  59. package/dist/agents/document-writer.js +209 -0
  60. package/dist/agents/document-writer.js.map +1 -0
  61. package/dist/agents/executor.js +1 -1
  62. package/dist/agents/executor.js.map +1 -1
  63. package/dist/agents/explore.js +1 -1
  64. package/dist/agents/explore.js.map +1 -1
  65. package/dist/agents/frontend-engineer.d.ts +11 -0
  66. package/dist/agents/frontend-engineer.d.ts.map +1 -0
  67. package/dist/agents/frontend-engineer.js +115 -0
  68. package/dist/agents/frontend-engineer.js.map +1 -0
  69. package/dist/agents/librarian.d.ts +12 -0
  70. package/dist/agents/librarian.d.ts.map +1 -0
  71. package/dist/agents/librarian.js +103 -0
  72. package/dist/agents/librarian.js.map +1 -0
  73. package/dist/agents/metis.d.ts +12 -0
  74. package/dist/agents/metis.d.ts.map +1 -0
  75. package/dist/agents/metis.js +117 -0
  76. package/dist/agents/metis.js.map +1 -0
  77. package/dist/agents/momus.d.ts +12 -0
  78. package/dist/agents/momus.d.ts.map +1 -0
  79. package/dist/agents/momus.js +128 -0
  80. package/dist/agents/momus.js.map +1 -0
  81. package/dist/agents/multimodal-looker.d.ts +11 -0
  82. package/dist/agents/multimodal-looker.d.ts.map +1 -0
  83. package/dist/agents/multimodal-looker.js +70 -0
  84. package/dist/agents/multimodal-looker.js.map +1 -0
  85. package/dist/agents/oracle.d.ts +13 -0
  86. package/dist/agents/oracle.d.ts.map +1 -0
  87. package/dist/agents/oracle.js +191 -0
  88. package/dist/agents/oracle.js.map +1 -0
  89. package/dist/agents/orchestrator-sisyphus.d.ts +11 -0
  90. package/dist/agents/orchestrator-sisyphus.d.ts.map +1 -0
  91. package/dist/agents/orchestrator-sisyphus.js +115 -0
  92. package/dist/agents/orchestrator-sisyphus.js.map +1 -0
  93. package/dist/agents/prometheus.d.ts +12 -0
  94. package/dist/agents/prometheus.d.ts.map +1 -0
  95. package/dist/agents/prometheus.js +195 -0
  96. package/dist/agents/prometheus.js.map +1 -0
  97. package/dist/agents/qa-tester.js +1 -1
  98. package/dist/agents/qa-tester.js.map +1 -1
  99. package/dist/agents/sisyphus-junior.d.ts +12 -0
  100. package/dist/agents/sisyphus-junior.d.ts.map +1 -0
  101. package/dist/agents/sisyphus-junior.js +93 -0
  102. package/dist/agents/sisyphus-junior.js.map +1 -0
  103. package/dist/cli/analytics.js +0 -0
  104. package/dist/cli/components/CostDashboard.d.ts +15 -0
  105. package/dist/cli/components/CostDashboard.d.ts.map +1 -0
  106. package/dist/cli/components/CostDashboard.js +15 -0
  107. package/dist/cli/components/CostDashboard.js.map +1 -0
  108. package/dist/cli/components/LiveStats.d.ts +16 -0
  109. package/dist/cli/components/LiveStats.d.ts.map +1 -0
  110. package/dist/cli/components/LiveStats.js +16 -0
  111. package/dist/cli/components/LiveStats.js.map +1 -0
  112. package/dist/cli/components/SessionBrowser.d.ts +14 -0
  113. package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
  114. package/dist/cli/components/SessionBrowser.js +14 -0
  115. package/dist/cli/components/SessionBrowser.js.map +1 -0
  116. package/dist/cli/index.js +0 -0
  117. package/dist/cli/tui.d.ts +21 -0
  118. package/dist/cli/tui.d.ts.map +1 -0
  119. package/dist/cli/tui.js +21 -0
  120. package/dist/cli/tui.js.map +1 -0
  121. package/dist/hooks/autopilot/signals.d.ts +20 -0
  122. package/dist/hooks/autopilot/signals.d.ts.map +1 -0
  123. package/dist/hooks/autopilot/signals.js +75 -0
  124. package/dist/hooks/autopilot/signals.js.map +1 -0
  125. package/dist/hooks/autopilot/summary.d.ts +27 -0
  126. package/dist/hooks/autopilot/summary.d.ts.map +1 -0
  127. package/dist/hooks/autopilot/summary.js +160 -0
  128. package/dist/hooks/autopilot/summary.js.map +1 -0
  129. package/dist/hooks/autopilot/transition.d.ts +39 -0
  130. package/dist/hooks/autopilot/transition.d.ts.map +1 -0
  131. package/dist/hooks/autopilot/transition.js +216 -0
  132. package/dist/hooks/autopilot/transition.js.map +1 -0
  133. package/dist/hooks/context-window-limit-recovery/constants.d.ts +28 -0
  134. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +1 -0
  135. package/dist/hooks/context-window-limit-recovery/constants.js +85 -0
  136. package/dist/hooks/context-window-limit-recovery/constants.js.map +1 -0
  137. package/dist/hooks/context-window-limit-recovery/index.d.ts +62 -0
  138. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -0
  139. package/dist/hooks/context-window-limit-recovery/index.js +201 -0
  140. package/dist/hooks/context-window-limit-recovery/index.js.map +1 -0
  141. package/dist/hooks/context-window-limit-recovery/parser.d.ts +31 -0
  142. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +1 -0
  143. package/dist/hooks/context-window-limit-recovery/parser.js +241 -0
  144. package/dist/hooks/context-window-limit-recovery/parser.js.map +1 -0
  145. package/dist/hooks/context-window-limit-recovery/types.d.ts +84 -0
  146. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +1 -0
  147. package/dist/hooks/context-window-limit-recovery/types.js +34 -0
  148. package/dist/hooks/context-window-limit-recovery/types.js.map +1 -0
  149. package/dist/hooks/edit-error-recovery/index.d.ts +62 -0
  150. package/dist/hooks/edit-error-recovery/index.d.ts.map +1 -0
  151. package/dist/hooks/edit-error-recovery/index.js +89 -0
  152. package/dist/hooks/edit-error-recovery/index.js.map +1 -0
  153. package/dist/hooks/github-auto-responder/classifier.d.ts +43 -0
  154. package/dist/hooks/github-auto-responder/classifier.d.ts.map +1 -0
  155. package/dist/hooks/github-auto-responder/classifier.js +150 -0
  156. package/dist/hooks/github-auto-responder/classifier.js.map +1 -0
  157. package/dist/hooks/github-auto-responder/config.d.ts +109 -0
  158. package/dist/hooks/github-auto-responder/config.d.ts.map +1 -0
  159. package/dist/hooks/github-auto-responder/config.js +69 -0
  160. package/dist/hooks/github-auto-responder/config.js.map +1 -0
  161. package/dist/hooks/github-auto-responder/constants.d.ts +45 -0
  162. package/dist/hooks/github-auto-responder/constants.d.ts.map +1 -0
  163. package/dist/hooks/github-auto-responder/constants.js +60 -0
  164. package/dist/hooks/github-auto-responder/constants.js.map +1 -0
  165. package/dist/hooks/github-auto-responder/filters.d.ts +95 -0
  166. package/dist/hooks/github-auto-responder/filters.d.ts.map +1 -0
  167. package/dist/hooks/github-auto-responder/filters.js +174 -0
  168. package/dist/hooks/github-auto-responder/filters.js.map +1 -0
  169. package/dist/hooks/github-auto-responder/github-client.d.ts +65 -0
  170. package/dist/hooks/github-auto-responder/github-client.d.ts.map +1 -0
  171. package/dist/hooks/github-auto-responder/github-client.js +128 -0
  172. package/dist/hooks/github-auto-responder/github-client.js.map +1 -0
  173. package/dist/hooks/github-auto-responder/idempotency.d.ts +68 -0
  174. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +1 -0
  175. package/dist/hooks/github-auto-responder/idempotency.js +147 -0
  176. package/dist/hooks/github-auto-responder/idempotency.js.map +1 -0
  177. package/dist/hooks/github-auto-responder/index.d.ts +140 -0
  178. package/dist/hooks/github-auto-responder/index.d.ts.map +1 -0
  179. package/dist/hooks/github-auto-responder/index.js +145 -0
  180. package/dist/hooks/github-auto-responder/index.js.map +1 -0
  181. package/dist/hooks/github-auto-responder/persona.d.ts +40 -0
  182. package/dist/hooks/github-auto-responder/persona.d.ts.map +1 -0
  183. package/dist/hooks/github-auto-responder/persona.js +99 -0
  184. package/dist/hooks/github-auto-responder/persona.js.map +1 -0
  185. package/dist/hooks/github-auto-responder/responder.d.ts +122 -0
  186. package/dist/hooks/github-auto-responder/responder.d.ts.map +1 -0
  187. package/dist/hooks/github-auto-responder/responder.js +264 -0
  188. package/dist/hooks/github-auto-responder/responder.js.map +1 -0
  189. package/dist/hooks/github-auto-responder/server.d.ts +140 -0
  190. package/dist/hooks/github-auto-responder/server.d.ts.map +1 -0
  191. package/dist/hooks/github-auto-responder/server.js +301 -0
  192. package/dist/hooks/github-auto-responder/server.js.map +1 -0
  193. package/dist/hooks/github-auto-responder/signature.d.ts +34 -0
  194. package/dist/hooks/github-auto-responder/signature.d.ts.map +1 -0
  195. package/dist/hooks/github-auto-responder/signature.js +79 -0
  196. package/dist/hooks/github-auto-responder/signature.js.map +1 -0
  197. package/dist/hooks/github-auto-responder/templates.d.ts +16 -0
  198. package/dist/hooks/github-auto-responder/templates.d.ts.map +1 -0
  199. package/dist/hooks/github-auto-responder/templates.js +93 -0
  200. package/dist/hooks/github-auto-responder/templates.js.map +1 -0
  201. package/dist/hooks/github-auto-responder/types.d.ts +246 -0
  202. package/dist/hooks/github-auto-responder/types.d.ts.map +1 -0
  203. package/dist/hooks/github-auto-responder/types.js +7 -0
  204. package/dist/hooks/github-auto-responder/types.js.map +1 -0
  205. package/dist/hooks/learned-skills/config.d.ts +53 -0
  206. package/dist/hooks/learned-skills/config.d.ts.map +1 -0
  207. package/dist/hooks/learned-skills/config.js +103 -0
  208. package/dist/hooks/learned-skills/config.js.map +1 -0
  209. package/dist/hooks/learned-skills/constants.d.ts +24 -0
  210. package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
  211. package/dist/hooks/learned-skills/constants.js +26 -0
  212. package/dist/hooks/learned-skills/constants.js.map +1 -0
  213. package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
  214. package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
  215. package/dist/hooks/learned-skills/detection-hook.js +83 -0
  216. package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
  217. package/dist/hooks/learned-skills/detector.d.ts +30 -0
  218. package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
  219. package/dist/hooks/learned-skills/detector.js +150 -0
  220. package/dist/hooks/learned-skills/detector.js.map +1 -0
  221. package/dist/hooks/learned-skills/finder.d.ts +21 -0
  222. package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
  223. package/dist/hooks/learned-skills/finder.js +117 -0
  224. package/dist/hooks/learned-skills/finder.js.map +1 -0
  225. package/dist/hooks/learned-skills/index.d.ts +62 -0
  226. package/dist/hooks/learned-skills/index.d.ts.map +1 -0
  227. package/dist/hooks/learned-skills/index.js +137 -0
  228. package/dist/hooks/learned-skills/index.js.map +1 -0
  229. package/dist/hooks/learned-skills/loader.d.ts +20 -0
  230. package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
  231. package/dist/hooks/learned-skills/loader.js +107 -0
  232. package/dist/hooks/learned-skills/loader.js.map +1 -0
  233. package/dist/hooks/learned-skills/parser.d.ts +21 -0
  234. package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
  235. package/dist/hooks/learned-skills/parser.js +190 -0
  236. package/dist/hooks/learned-skills/parser.js.map +1 -0
  237. package/dist/hooks/learned-skills/promotion.d.ts +29 -0
  238. package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
  239. package/dist/hooks/learned-skills/promotion.js +87 -0
  240. package/dist/hooks/learned-skills/promotion.js.map +1 -0
  241. package/dist/hooks/learned-skills/types.d.ts +109 -0
  242. package/dist/hooks/learned-skills/types.d.ts.map +1 -0
  243. package/dist/hooks/learned-skills/types.js +8 -0
  244. package/dist/hooks/learned-skills/types.js.map +1 -0
  245. package/dist/hooks/learned-skills/validator.d.ts +15 -0
  246. package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
  247. package/dist/hooks/learned-skills/validator.js +87 -0
  248. package/dist/hooks/learned-skills/validator.js.map +1 -0
  249. package/dist/hooks/learned-skills/writer.d.ts +27 -0
  250. package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
  251. package/dist/hooks/learned-skills/writer.js +126 -0
  252. package/dist/hooks/learned-skills/writer.js.map +1 -0
  253. package/dist/hooks/mnemosyne/config.d.ts +53 -0
  254. package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
  255. package/dist/hooks/mnemosyne/config.js +103 -0
  256. package/dist/hooks/mnemosyne/config.js.map +1 -0
  257. package/dist/hooks/mnemosyne/constants.d.ts +24 -0
  258. package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
  259. package/dist/hooks/mnemosyne/constants.js +26 -0
  260. package/dist/hooks/mnemosyne/constants.js.map +1 -0
  261. package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
  262. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
  263. package/dist/hooks/mnemosyne/detection-hook.js +83 -0
  264. package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
  265. package/dist/hooks/mnemosyne/detector.d.ts +30 -0
  266. package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
  267. package/dist/hooks/mnemosyne/detector.js +150 -0
  268. package/dist/hooks/mnemosyne/detector.js.map +1 -0
  269. package/dist/hooks/mnemosyne/finder.d.ts +21 -0
  270. package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
  271. package/dist/hooks/mnemosyne/finder.js +117 -0
  272. package/dist/hooks/mnemosyne/finder.js.map +1 -0
  273. package/dist/hooks/mnemosyne/index.d.ts +62 -0
  274. package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
  275. package/dist/hooks/mnemosyne/index.js +137 -0
  276. package/dist/hooks/mnemosyne/index.js.map +1 -0
  277. package/dist/hooks/mnemosyne/loader.d.ts +20 -0
  278. package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
  279. package/dist/hooks/mnemosyne/loader.js +113 -0
  280. package/dist/hooks/mnemosyne/loader.js.map +1 -0
  281. package/dist/hooks/mnemosyne/parser.d.ts +21 -0
  282. package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
  283. package/dist/hooks/mnemosyne/parser.js +190 -0
  284. package/dist/hooks/mnemosyne/parser.js.map +1 -0
  285. package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
  286. package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
  287. package/dist/hooks/mnemosyne/promotion.js +87 -0
  288. package/dist/hooks/mnemosyne/promotion.js.map +1 -0
  289. package/dist/hooks/mnemosyne/types.d.ts +109 -0
  290. package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
  291. package/dist/hooks/mnemosyne/types.js +8 -0
  292. package/dist/hooks/mnemosyne/types.js.map +1 -0
  293. package/dist/hooks/mnemosyne/validator.d.ts +15 -0
  294. package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
  295. package/dist/hooks/mnemosyne/validator.js +87 -0
  296. package/dist/hooks/mnemosyne/validator.js.map +1 -0
  297. package/dist/hooks/mnemosyne/writer.d.ts +27 -0
  298. package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
  299. package/dist/hooks/mnemosyne/writer.js +126 -0
  300. package/dist/hooks/mnemosyne/writer.js.map +1 -0
  301. package/dist/hooks/ralph-loop/index.d.ts +116 -0
  302. package/dist/hooks/ralph-loop/index.d.ts.map +1 -0
  303. package/dist/hooks/ralph-loop/index.js +322 -0
  304. package/dist/hooks/ralph-loop/index.js.map +1 -0
  305. package/dist/hooks/ralph-prd/index.d.ts +130 -0
  306. package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
  307. package/dist/hooks/ralph-prd/index.js +310 -0
  308. package/dist/hooks/ralph-prd/index.js.map +1 -0
  309. package/dist/hooks/ralph-progress/index.d.ts +102 -0
  310. package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
  311. package/dist/hooks/ralph-progress/index.js +408 -0
  312. package/dist/hooks/ralph-progress/index.js.map +1 -0
  313. package/dist/hooks/ralph-verifier/index.d.ts +72 -0
  314. package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
  315. package/dist/hooks/ralph-verifier/index.js +223 -0
  316. package/dist/hooks/ralph-verifier/index.js.map +1 -0
  317. package/dist/hooks/session-recovery/constants.d.ts +56 -0
  318. package/dist/hooks/session-recovery/constants.d.ts.map +1 -0
  319. package/dist/hooks/session-recovery/constants.js +78 -0
  320. package/dist/hooks/session-recovery/constants.js.map +1 -0
  321. package/dist/hooks/session-recovery/index.d.ts +53 -0
  322. package/dist/hooks/session-recovery/index.d.ts.map +1 -0
  323. package/dist/hooks/session-recovery/index.js +321 -0
  324. package/dist/hooks/session-recovery/index.js.map +1 -0
  325. package/dist/hooks/session-recovery/storage.d.ts +76 -0
  326. package/dist/hooks/session-recovery/storage.d.ts.map +1 -0
  327. package/dist/hooks/session-recovery/storage.js +383 -0
  328. package/dist/hooks/session-recovery/storage.js.map +1 -0
  329. package/dist/hooks/session-recovery/types.d.ts +145 -0
  330. package/dist/hooks/session-recovery/types.d.ts.map +1 -0
  331. package/dist/hooks/session-recovery/types.js +8 -0
  332. package/dist/hooks/session-recovery/types.js.map +1 -0
  333. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +23 -0
  334. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +1 -0
  335. package/dist/hooks/sisyphus-orchestrator/constants.js +142 -0
  336. package/dist/hooks/sisyphus-orchestrator/constants.js.map +1 -0
  337. package/dist/hooks/sisyphus-orchestrator/index.d.ts +113 -0
  338. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -0
  339. package/dist/hooks/sisyphus-orchestrator/index.js +309 -0
  340. package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -0
  341. package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
  342. package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
  343. package/dist/hooks/ultraqa-loop/index.js +216 -0
  344. package/dist/hooks/ultraqa-loop/index.js.map +1 -0
  345. package/dist/hooks/ultrawork-state/index.d.ts +62 -0
  346. package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
  347. package/dist/hooks/ultrawork-state/index.js +208 -0
  348. package/dist/hooks/ultrawork-state/index.js.map +1 -0
  349. package/dist/hud/sisyphus-state.d.ts +31 -0
  350. package/dist/hud/sisyphus-state.d.ts.map +1 -0
  351. package/dist/hud/sisyphus-state.js +163 -0
  352. package/dist/hud/sisyphus-state.js.map +1 -0
  353. package/dist/index.d.ts +1 -0
  354. package/dist/index.d.ts.map +1 -1
  355. package/dist/index.js +15 -3
  356. package/dist/index.js.map +1 -1
  357. package/dist/mcp/index.d.ts +1 -0
  358. package/dist/mcp/index.d.ts.map +1 -1
  359. package/dist/mcp/index.js +2 -0
  360. package/dist/mcp/index.js.map +1 -1
  361. package/dist/mcp/omc-tools-server.d.ts +25 -0
  362. package/dist/mcp/omc-tools-server.d.ts.map +1 -0
  363. package/dist/mcp/omc-tools-server.js +49 -0
  364. package/dist/mcp/omc-tools-server.js.map +1 -0
  365. package/dist/mcp/standalone-server.d.ts +11 -0
  366. package/dist/mcp/standalone-server.d.ts.map +1 -0
  367. package/dist/mcp/standalone-server.js +139 -0
  368. package/dist/mcp/standalone-server.js.map +1 -0
  369. package/dist/tools/ast-tools.d.ts.map +1 -1
  370. package/dist/tools/ast-tools.js +19 -39
  371. package/dist/tools/ast-tools.js.map +1 -1
  372. package/dist/tools/diagnostics/index.d.ts +7 -32
  373. package/dist/tools/diagnostics/index.d.ts.map +1 -1
  374. package/dist/tools/diagnostics/index.js +41 -171
  375. package/dist/tools/diagnostics/index.js.map +1 -1
  376. package/dist/tools/diagnostics/lsp-aggregator.d.ts +1 -13
  377. package/dist/tools/diagnostics/lsp-aggregator.d.ts.map +1 -1
  378. package/dist/tools/diagnostics/lsp-aggregator.js +4 -32
  379. package/dist/tools/diagnostics/lsp-aggregator.js.map +1 -1
  380. package/dist/tools/diagnostics/tsc-runner.d.ts +0 -6
  381. package/dist/tools/diagnostics/tsc-runner.d.ts.map +1 -1
  382. package/dist/tools/diagnostics/tsc-runner.js +5 -32
  383. package/dist/tools/diagnostics/tsc-runner.js.map +1 -1
  384. package/dist/tools/lsp/client.d.ts.map +1 -1
  385. package/dist/tools/lsp/client.js +1 -26
  386. package/dist/tools/lsp/client.js.map +1 -1
  387. package/dist/tools/lsp/servers.d.ts +0 -3
  388. package/dist/tools/lsp/servers.d.ts.map +1 -1
  389. package/dist/tools/lsp/servers.js +4 -111
  390. package/dist/tools/lsp/servers.js.map +1 -1
  391. package/dist/tools/lsp-tools.d.ts +2 -2
  392. package/dist/tools/lsp-tools.d.ts.map +1 -1
  393. package/dist/tools/lsp-tools.js +2 -2
  394. package/dist/tools/lsp-tools.js.map +1 -1
  395. package/package.json +4 -2
  396. package/skills/AGENTS.md +187 -0
  397. package/dist/tools/diagnostics/__tests__/detectProjectType.test.d.ts +0 -5
  398. package/dist/tools/diagnostics/__tests__/detectProjectType.test.d.ts.map +0 -1
  399. package/dist/tools/diagnostics/__tests__/detectProjectType.test.js +0 -42
  400. package/dist/tools/diagnostics/__tests__/detectProjectType.test.js.map +0 -1
  401. package/dist/tools/diagnostics/__tests__/integration.test.d.ts +0 -5
  402. package/dist/tools/diagnostics/__tests__/integration.test.d.ts.map +0 -1
  403. package/dist/tools/diagnostics/__tests__/integration.test.js +0 -66
  404. package/dist/tools/diagnostics/__tests__/integration.test.js.map +0 -1
  405. package/dist/tools/diagnostics/__tests__/parser-tests.d.ts +0 -5
  406. package/dist/tools/diagnostics/__tests__/parser-tests.d.ts.map +0 -1
  407. package/dist/tools/diagnostics/__tests__/parser-tests.js +0 -86
  408. package/dist/tools/diagnostics/__tests__/parser-tests.js.map +0 -1
  409. package/dist/tools/diagnostics/__tests__/parsers.test.d.ts +0 -5
  410. package/dist/tools/diagnostics/__tests__/parsers.test.d.ts.map +0 -1
  411. package/dist/tools/diagnostics/__tests__/parsers.test.js +0 -199
  412. package/dist/tools/diagnostics/__tests__/parsers.test.js.map +0 -1
  413. package/dist/tools/diagnostics/constants.d.ts +0 -9
  414. package/dist/tools/diagnostics/constants.d.ts.map +0 -1
  415. package/dist/tools/diagnostics/constants.js +0 -9
  416. package/dist/tools/diagnostics/constants.js.map +0 -1
  417. package/dist/tools/diagnostics/go-runner.d.ts +0 -31
  418. package/dist/tools/diagnostics/go-runner.d.ts.map +0 -1
  419. package/dist/tools/diagnostics/go-runner.js +0 -78
  420. package/dist/tools/diagnostics/go-runner.js.map +0 -1
  421. package/dist/tools/diagnostics/python-runner.d.ts +0 -39
  422. package/dist/tools/diagnostics/python-runner.d.ts.map +0 -1
  423. package/dist/tools/diagnostics/python-runner.js +0 -200
  424. package/dist/tools/diagnostics/python-runner.js.map +0 -1
  425. package/dist/tools/diagnostics/rust-runner.d.ts +0 -34
  426. package/dist/tools/diagnostics/rust-runner.d.ts.map +0 -1
  427. package/dist/tools/diagnostics/rust-runner.js +0 -106
  428. package/dist/tools/diagnostics/rust-runner.js.map +0 -1
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Filter pipeline for GitHub webhook payloads
3
+ *
4
+ * Filters determine whether to skip responding to an issue or PR based on:
5
+ * - Bot detection
6
+ * - Self-response prevention
7
+ * - Label-based skipping
8
+ * - Spam detection
9
+ * - Action filtering (only 'opened' events)
10
+ */
11
+ import { DEFAULT_SPAM_PATTERNS } from './constants.js';
12
+ /**
13
+ * Type guard: Check if payload is an issue payload
14
+ *
15
+ * @param payload - Webhook payload
16
+ * @returns True if payload contains an issue
17
+ */
18
+ export function isIssuePayload(payload) {
19
+ return 'issue' in payload;
20
+ }
21
+ /**
22
+ * Type guard: Check if payload is a pull request payload
23
+ *
24
+ * @param payload - Webhook payload
25
+ * @returns True if payload contains a pull request
26
+ */
27
+ export function isPRPayload(payload) {
28
+ return 'pull_request' in payload;
29
+ }
30
+ /**
31
+ * Filter: Skip bot-generated events
32
+ *
33
+ * @param payload - Webhook payload
34
+ * @returns Filter result (skip if sender is a bot)
35
+ */
36
+ export function filterBot(payload) {
37
+ if (payload.sender.type === 'Bot') {
38
+ return {
39
+ skip: true,
40
+ reason: `Sender is a bot (${payload.sender.login})`,
41
+ };
42
+ }
43
+ return { skip: false, reason: '' };
44
+ }
45
+ /**
46
+ * Filter: Skip self-generated events
47
+ *
48
+ * @param payload - Webhook payload
49
+ * @param selfLogin - Bot's own GitHub username
50
+ * @returns Filter result (skip if sender is self)
51
+ */
52
+ export function filterSelf(payload, selfLogin) {
53
+ if (payload.sender.login === selfLogin) {
54
+ return {
55
+ skip: true,
56
+ reason: `Sender is self (${selfLogin})`,
57
+ };
58
+ }
59
+ return { skip: false, reason: '' };
60
+ }
61
+ /**
62
+ * Filter: Skip issues/PRs with excluded labels
63
+ *
64
+ * @param payload - Webhook payload
65
+ * @param skipLabels - Labels that prevent auto-response
66
+ * @returns Filter result (skip if any skip label is present)
67
+ */
68
+ export function filterLabel(payload, skipLabels) {
69
+ const labels = isIssuePayload(payload)
70
+ ? payload.issue.labels
71
+ : payload.pull_request.labels;
72
+ for (const label of labels) {
73
+ if (skipLabels.includes(label.name)) {
74
+ return {
75
+ skip: true,
76
+ reason: `Has skip label: ${label.name}`,
77
+ };
78
+ }
79
+ }
80
+ return { skip: false, reason: '' };
81
+ }
82
+ /**
83
+ * Filter: Skip spam-like content
84
+ *
85
+ * @param payload - Webhook payload
86
+ * @param spamPatterns - Regex patterns to detect spam
87
+ * @returns Filter result (skip if title or body matches spam pattern)
88
+ */
89
+ export function filterSpam(payload, spamPatterns) {
90
+ const item = isIssuePayload(payload) ? payload.issue : payload.pull_request;
91
+ const title = item.title;
92
+ const body = item.body ?? '';
93
+ for (const pattern of spamPatterns) {
94
+ if (pattern.test(title)) {
95
+ return {
96
+ skip: true,
97
+ reason: `Title matches spam pattern: ${pattern}`,
98
+ };
99
+ }
100
+ if (pattern.test(body)) {
101
+ return {
102
+ skip: true,
103
+ reason: `Body matches spam pattern: ${pattern}`,
104
+ };
105
+ }
106
+ }
107
+ return { skip: false, reason: '' };
108
+ }
109
+ /**
110
+ * Filter: Skip non-opened actions
111
+ *
112
+ * Only respond to newly opened issues and PRs.
113
+ *
114
+ * @param payload - Webhook payload
115
+ * @returns Filter result (skip if action is not 'opened')
116
+ */
117
+ export function filterAction(payload) {
118
+ if (payload.action !== 'opened') {
119
+ return {
120
+ skip: true,
121
+ reason: `Action is not 'opened': ${payload.action}`,
122
+ };
123
+ }
124
+ return { skip: false, reason: '' };
125
+ }
126
+ /**
127
+ * Create a filter pipeline that runs all filters in sequence
128
+ *
129
+ * Filters are run in order:
130
+ * 1. Bot check
131
+ * 2. Self check
132
+ * 3. Action check (only 'opened')
133
+ * 4. Label check
134
+ * 5. Spam check
135
+ *
136
+ * Pipeline short-circuits on first skip (returns immediately).
137
+ *
138
+ * @param selfLogin - Bot's own GitHub username
139
+ * @param skipLabels - Labels that prevent auto-response
140
+ * @param spamPatterns - Spam detection patterns (defaults to DEFAULT_SPAM_PATTERNS)
141
+ * @returns Filter function that returns skip decision
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * const filter = createFilterPipeline('my-bot', ['no-auto-reply']);
146
+ * const result = await filter(payload);
147
+ * if (result.skip) {
148
+ * console.log('Skipping:', result.reason);
149
+ * return;
150
+ * }
151
+ * // Process payload...
152
+ * ```
153
+ */
154
+ export function createFilterPipeline(selfLogin, skipLabels, spamPatterns = DEFAULT_SPAM_PATTERNS) {
155
+ return async (payload) => {
156
+ // Run filters in sequence, short-circuit on first skip
157
+ const filters = [
158
+ () => filterBot(payload),
159
+ () => filterSelf(payload, selfLogin),
160
+ () => filterAction(payload),
161
+ () => filterLabel(payload, skipLabels),
162
+ () => filterSpam(payload, spamPatterns),
163
+ ];
164
+ for (const filter of filters) {
165
+ const result = filter();
166
+ if (result.skip) {
167
+ return result;
168
+ }
169
+ }
170
+ // All filters passed
171
+ return { skip: false, reason: '' };
172
+ };
173
+ }
174
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * GitHub REST API Client
3
+ *
4
+ * Client for making authenticated GitHub API calls with rate limiting support.
5
+ */
6
+ import type { CommentResult } from './types.js';
7
+ /**
8
+ * GitHub REST API client with authentication and rate limiting
9
+ */
10
+ export declare class GitHubClient {
11
+ private token;
12
+ /**
13
+ * Create a new GitHub API client
14
+ * @param token - GitHub personal access token
15
+ */
16
+ constructor(token: string);
17
+ /**
18
+ * Make an authenticated GitHub API request
19
+ * @param method - HTTP method
20
+ * @param path - API endpoint path (e.g., '/repos/owner/repo/issues')
21
+ * @param body - Request body (for POST/PATCH)
22
+ * @returns Response JSON
23
+ */
24
+ private request;
25
+ /**
26
+ * Post a comment on a GitHub issue
27
+ * @param repo - Repository in format 'owner/name'
28
+ * @param issueNumber - Issue number
29
+ * @param body - Comment body (markdown supported)
30
+ * @returns Result with success status and comment URL
31
+ */
32
+ postIssueComment(repo: string, issueNumber: number, body: string): Promise<CommentResult>;
33
+ /**
34
+ * Post a comment on a GitHub pull request
35
+ * (Uses same endpoint as issues since PRs are issues)
36
+ * @param repo - Repository in format 'owner/name'
37
+ * @param prNumber - Pull request number
38
+ * @param body - Comment body (markdown supported)
39
+ * @returns Result with success status and comment URL
40
+ */
41
+ postPRComment(repo: string, prNumber: number, body: string): Promise<CommentResult>;
42
+ /**
43
+ * Add a label to a GitHub issue or pull request
44
+ * @param repo - Repository in format 'owner/name'
45
+ * @param issueNumber - Issue or PR number
46
+ * @param label - Label name to add
47
+ * @returns Success status
48
+ */
49
+ addLabel(repo: string, issueNumber: number, label: string): Promise<boolean>;
50
+ /**
51
+ * Get a GitHub issue or pull request
52
+ * @param repo - Repository in format 'owner/name'
53
+ * @param issueNumber - Issue or PR number
54
+ * @returns Issue/PR data
55
+ */
56
+ getIssue(repo: string, issueNumber: number): Promise<any>;
57
+ /**
58
+ * List comments on a GitHub issue or pull request
59
+ * @param repo - Repository in format 'owner/name'
60
+ * @param issueNumber - Issue or PR number
61
+ * @returns Array of comments
62
+ */
63
+ listComments(repo: string, issueNumber: number): Promise<any[]>;
64
+ }
65
+ //# sourceMappingURL=github-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-client.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/github-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAS;IAEtB;;;OAGG;gBACS,KAAK,EAAE,MAAM;IAIzB;;;;;;OAMG;YACW,OAAO;IAiDrB;;;;;;OAMG;IACG,gBAAgB,CACpB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC;IAoBzB;;;;;;;OAOG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC;IAIzB;;;;;;OAMG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAcnB;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI/D;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;CAGtE"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * GitHub REST API Client
3
+ *
4
+ * Client for making authenticated GitHub API calls with rate limiting support.
5
+ */
6
+ import { GITHUB_API_BASE } from './constants.js';
7
+ /**
8
+ * GitHub REST API client with authentication and rate limiting
9
+ */
10
+ export class GitHubClient {
11
+ token;
12
+ /**
13
+ * Create a new GitHub API client
14
+ * @param token - GitHub personal access token
15
+ */
16
+ constructor(token) {
17
+ this.token = token;
18
+ }
19
+ /**
20
+ * Make an authenticated GitHub API request
21
+ * @param method - HTTP method
22
+ * @param path - API endpoint path (e.g., '/repos/owner/repo/issues')
23
+ * @param body - Request body (for POST/PATCH)
24
+ * @returns Response JSON
25
+ */
26
+ async request(method, path, body) {
27
+ const url = `${GITHUB_API_BASE}${path}`;
28
+ const headers = {
29
+ Authorization: `Bearer ${this.token}`,
30
+ Accept: 'application/vnd.github+json',
31
+ 'X-GitHub-Api-Version': '2022-11-28',
32
+ 'User-Agent': 'omc-github-auto-responder',
33
+ };
34
+ if (body) {
35
+ headers['Content-Type'] = 'application/json';
36
+ }
37
+ const response = await fetch(url, {
38
+ method,
39
+ headers,
40
+ body: body ? JSON.stringify(body) : undefined,
41
+ });
42
+ // Handle rate limiting
43
+ if (response.status === 429) {
44
+ const retryAfter = response.headers.get('Retry-After');
45
+ const waitSeconds = retryAfter ? parseInt(retryAfter, 10) : 60;
46
+ throw new Error(`GitHub API rate limit exceeded. Retry after ${waitSeconds} seconds.`);
47
+ }
48
+ // Handle other errors
49
+ if (!response.ok) {
50
+ const errorText = await response.text();
51
+ throw new Error(`GitHub API error (${response.status}): ${errorText || response.statusText}`);
52
+ }
53
+ // Handle 204 No Content
54
+ if (response.status === 204) {
55
+ return null;
56
+ }
57
+ return await response.json();
58
+ }
59
+ /**
60
+ * Post a comment on a GitHub issue
61
+ * @param repo - Repository in format 'owner/name'
62
+ * @param issueNumber - Issue number
63
+ * @param body - Comment body (markdown supported)
64
+ * @returns Result with success status and comment URL
65
+ */
66
+ async postIssueComment(repo, issueNumber, body) {
67
+ try {
68
+ const data = await this.request('POST', `/repos/${repo}/issues/${issueNumber}/comments`, { body });
69
+ return {
70
+ success: true,
71
+ url: data.html_url,
72
+ };
73
+ }
74
+ catch (error) {
75
+ return {
76
+ success: false,
77
+ error: error instanceof Error ? error.message : String(error),
78
+ };
79
+ }
80
+ }
81
+ /**
82
+ * Post a comment on a GitHub pull request
83
+ * (Uses same endpoint as issues since PRs are issues)
84
+ * @param repo - Repository in format 'owner/name'
85
+ * @param prNumber - Pull request number
86
+ * @param body - Comment body (markdown supported)
87
+ * @returns Result with success status and comment URL
88
+ */
89
+ async postPRComment(repo, prNumber, body) {
90
+ return this.postIssueComment(repo, prNumber, body);
91
+ }
92
+ /**
93
+ * Add a label to a GitHub issue or pull request
94
+ * @param repo - Repository in format 'owner/name'
95
+ * @param issueNumber - Issue or PR number
96
+ * @param label - Label name to add
97
+ * @returns Success status
98
+ */
99
+ async addLabel(repo, issueNumber, label) {
100
+ try {
101
+ await this.request('POST', `/repos/${repo}/issues/${issueNumber}/labels`, { labels: [label] });
102
+ return true;
103
+ }
104
+ catch (error) {
105
+ console.error('Failed to add label:', error);
106
+ return false;
107
+ }
108
+ }
109
+ /**
110
+ * Get a GitHub issue or pull request
111
+ * @param repo - Repository in format 'owner/name'
112
+ * @param issueNumber - Issue or PR number
113
+ * @returns Issue/PR data
114
+ */
115
+ async getIssue(repo, issueNumber) {
116
+ return this.request('GET', `/repos/${repo}/issues/${issueNumber}`);
117
+ }
118
+ /**
119
+ * List comments on a GitHub issue or pull request
120
+ * @param repo - Repository in format 'owner/name'
121
+ * @param issueNumber - Issue or PR number
122
+ * @returns Array of comments
123
+ */
124
+ async listComments(repo, issueNumber) {
125
+ return this.request('GET', `/repos/${repo}/issues/${issueNumber}/comments`);
126
+ }
127
+ }
128
+ //# sourceMappingURL=github-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-client.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/github-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Idempotency Store for GitHub Auto-Responder
3
+ *
4
+ * SQLite-based deduplication using GitHub delivery IDs.
5
+ * Prevents duplicate webhook processing with automatic cleanup of old records.
6
+ */
7
+ import type { IdempotencyRecord } from './types.js';
8
+ /**
9
+ * SQLite-backed idempotency store for webhook deduplication.
10
+ * Uses GitHub delivery IDs to track processed events.
11
+ */
12
+ export declare class IdempotencyStore {
13
+ private readonly dbPath;
14
+ private db;
15
+ private initialized;
16
+ /**
17
+ * Create a new idempotency store.
18
+ * @param dbPath - Path to SQLite database file
19
+ */
20
+ constructor(dbPath: string);
21
+ /**
22
+ * Initialize the database connection and schema.
23
+ * Dynamically imports better-sqlite3 and creates tables.
24
+ */
25
+ init(): Promise<void>;
26
+ /**
27
+ * Ensure database is initialized before use.
28
+ * @throws {Error} If database is not initialized
29
+ */
30
+ private ensureDb;
31
+ /**
32
+ * Check if a delivery ID has already been processed.
33
+ * @param deliveryId - GitHub webhook delivery ID
34
+ * @returns True if already processed, false otherwise
35
+ */
36
+ isProcessed(deliveryId: string): boolean;
37
+ /**
38
+ * Mark a delivery ID as processed.
39
+ * @param deliveryId - GitHub webhook delivery ID
40
+ */
41
+ markProcessed(deliveryId: string): void;
42
+ /**
43
+ * Remove records older than the TTL.
44
+ * @returns Number of records deleted
45
+ */
46
+ cleanup(): number;
47
+ /**
48
+ * Close the database connection.
49
+ * Safe to call multiple times.
50
+ */
51
+ close(): void;
52
+ /**
53
+ * Get all processed records (for debugging/testing).
54
+ * @returns Array of idempotency records
55
+ */
56
+ getAllRecords(): IdempotencyRecord[];
57
+ /**
58
+ * Get count of processed records.
59
+ * @returns Total number of records in store
60
+ */
61
+ getRecordCount(): number;
62
+ /**
63
+ * Clear all records (for testing/reset).
64
+ * @returns Number of records deleted
65
+ */
66
+ clearAll(): number;
67
+ }
68
+ //# sourceMappingURL=idempotency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/idempotency.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKpD;;;GAGG;AACH,qBAAa,gBAAgB;IAQf,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,EAAE,CAAuC;IACjD,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;gBAC0B,MAAM,EAAE,MAAM;IAE3C;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC3B;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAMhB;;;;OAIG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAQxC;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IASvC;;;OAGG;IACH,OAAO,IAAI,MAAM;IASjB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAQb;;;OAGG;IACH,aAAa,IAAI,iBAAiB,EAAE;IAYpC;;;OAGG;IACH,cAAc,IAAI,MAAM;IAQxB;;;OAGG;IACH,QAAQ,IAAI,MAAM;CAOnB"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Idempotency Store for GitHub Auto-Responder
3
+ *
4
+ * SQLite-based deduplication using GitHub delivery IDs.
5
+ * Prevents duplicate webhook processing with automatic cleanup of old records.
6
+ */
7
+ import { existsSync, mkdirSync } from 'node:fs';
8
+ import { dirname } from 'node:path';
9
+ import { IDEMPOTENCY_TTL_MS } from './constants.js';
10
+ /**
11
+ * SQLite-backed idempotency store for webhook deduplication.
12
+ * Uses GitHub delivery IDs to track processed events.
13
+ */
14
+ export class IdempotencyStore {
15
+ dbPath;
16
+ db = null;
17
+ initialized = false;
18
+ /**
19
+ * Create a new idempotency store.
20
+ * @param dbPath - Path to SQLite database file
21
+ */
22
+ constructor(dbPath) {
23
+ this.dbPath = dbPath;
24
+ }
25
+ /**
26
+ * Initialize the database connection and schema.
27
+ * Dynamically imports better-sqlite3 and creates tables.
28
+ */
29
+ async init() {
30
+ if (this.initialized) {
31
+ return;
32
+ }
33
+ try {
34
+ // Dynamic import of better-sqlite3
35
+ const betterSqlite3 = await import('better-sqlite3');
36
+ const Database = betterSqlite3.default;
37
+ // Ensure database directory exists
38
+ const dbDir = dirname(this.dbPath);
39
+ if (!existsSync(dbDir)) {
40
+ mkdirSync(dbDir, { recursive: true });
41
+ }
42
+ // Create database connection
43
+ this.db = new Database(this.dbPath);
44
+ // Enable WAL mode for concurrent access
45
+ this.db.pragma('journal_mode = WAL');
46
+ // Create schema
47
+ this.db.exec(`
48
+ CREATE TABLE IF NOT EXISTS processed_events (
49
+ delivery_id TEXT PRIMARY KEY,
50
+ created_at INTEGER NOT NULL
51
+ );
52
+
53
+ -- Index for efficient TTL cleanup
54
+ CREATE INDEX IF NOT EXISTS idx_created_at ON processed_events(created_at);
55
+ `);
56
+ this.initialized = true;
57
+ }
58
+ catch (error) {
59
+ throw new Error(`Failed to initialize idempotency store at ${this.dbPath}: ${error instanceof Error ? error.message : String(error)}`);
60
+ }
61
+ }
62
+ /**
63
+ * Ensure database is initialized before use.
64
+ * @throws {Error} If database is not initialized
65
+ */
66
+ ensureDb() {
67
+ if (!this.db || !this.initialized) {
68
+ throw new Error('IdempotencyStore not initialized. Call init() first.');
69
+ }
70
+ }
71
+ /**
72
+ * Check if a delivery ID has already been processed.
73
+ * @param deliveryId - GitHub webhook delivery ID
74
+ * @returns True if already processed, false otherwise
75
+ */
76
+ isProcessed(deliveryId) {
77
+ this.ensureDb();
78
+ const stmt = this.db.prepare('SELECT 1 FROM processed_events WHERE delivery_id = ?');
79
+ const result = stmt.get(deliveryId);
80
+ return result !== undefined;
81
+ }
82
+ /**
83
+ * Mark a delivery ID as processed.
84
+ * @param deliveryId - GitHub webhook delivery ID
85
+ */
86
+ markProcessed(deliveryId) {
87
+ this.ensureDb();
88
+ const stmt = this.db.prepare('INSERT OR IGNORE INTO processed_events (delivery_id, created_at) VALUES (?, ?)');
89
+ stmt.run(deliveryId, Date.now());
90
+ }
91
+ /**
92
+ * Remove records older than the TTL.
93
+ * @returns Number of records deleted
94
+ */
95
+ cleanup() {
96
+ this.ensureDb();
97
+ const cutoff = Date.now() - IDEMPOTENCY_TTL_MS;
98
+ const stmt = this.db.prepare('DELETE FROM processed_events WHERE created_at < ?');
99
+ const result = stmt.run(cutoff);
100
+ return result.changes;
101
+ }
102
+ /**
103
+ * Close the database connection.
104
+ * Safe to call multiple times.
105
+ */
106
+ close() {
107
+ if (this.db) {
108
+ this.db.close();
109
+ this.db = null;
110
+ this.initialized = false;
111
+ }
112
+ }
113
+ /**
114
+ * Get all processed records (for debugging/testing).
115
+ * @returns Array of idempotency records
116
+ */
117
+ getAllRecords() {
118
+ this.ensureDb();
119
+ const stmt = this.db.prepare('SELECT delivery_id, created_at FROM processed_events');
120
+ const rows = stmt.all();
121
+ return rows.map(row => ({
122
+ deliveryId: row.delivery_id,
123
+ createdAt: row.created_at,
124
+ }));
125
+ }
126
+ /**
127
+ * Get count of processed records.
128
+ * @returns Total number of records in store
129
+ */
130
+ getRecordCount() {
131
+ this.ensureDb();
132
+ const stmt = this.db.prepare('SELECT COUNT(*) as count FROM processed_events');
133
+ const result = stmt.get();
134
+ return result.count;
135
+ }
136
+ /**
137
+ * Clear all records (for testing/reset).
138
+ * @returns Number of records deleted
139
+ */
140
+ clearAll() {
141
+ this.ensureDb();
142
+ const stmt = this.db.prepare('DELETE FROM processed_events');
143
+ const result = stmt.run();
144
+ return result.changes;
145
+ }
146
+ }
147
+ //# sourceMappingURL=idempotency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/idempotency.ts"],"names":[],"mappings":"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"}