oh-my-claude-sisyphus 3.7.3 → 3.7.5

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 (387) hide show
  1. package/agents/build-fixer-low.md +2 -2
  2. package/agents/build-fixer.md +74 -19
  3. package/agents/code-reviewer.md +7 -7
  4. package/agents/designer-high.md +2 -2
  5. package/agents/designer-low.md +1 -1
  6. package/agents/designer.md +17 -2
  7. package/agents/security-reviewer.md +86 -17
  8. package/agents/tdd-guide.md +151 -12
  9. package/commands/hud.md +3 -1
  10. package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
  11. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
  12. package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
  13. package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
  14. package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
  15. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
  16. package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
  17. package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
  18. package/dist/__tests__/analytics/output-estimator.test.js +18 -0
  19. package/dist/__tests__/analytics/output-estimator.test.js.map +1 -1
  20. package/dist/__tests__/analytics/token-extractor.test.js +44 -0
  21. package/dist/__tests__/analytics/token-extractor.test.js.map +1 -1
  22. package/dist/__tests__/analytics/token-tracker.test.d.ts +2 -0
  23. package/dist/__tests__/analytics/token-tracker.test.d.ts.map +1 -0
  24. package/dist/__tests__/analytics/token-tracker.test.js +189 -0
  25. package/dist/__tests__/analytics/token-tracker.test.js.map +1 -0
  26. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
  27. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
  28. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
  29. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
  30. package/dist/__tests__/hud/analytics-display.test.js +3 -8
  31. package/dist/__tests__/hud/analytics-display.test.js.map +1 -1
  32. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
  33. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
  34. package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
  35. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
  36. package/dist/__tests__/hud/top-agents.test.d.ts +8 -0
  37. package/dist/__tests__/hud/top-agents.test.d.ts.map +1 -0
  38. package/dist/__tests__/hud/top-agents.test.js +157 -0
  39. package/dist/__tests__/hud/top-agents.test.js.map +1 -0
  40. package/dist/__tests__/installer.test.js +1 -1
  41. package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
  42. package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
  43. package/dist/__tests__/learned-skills/config.test.js +37 -0
  44. package/dist/__tests__/learned-skills/config.test.js.map +1 -0
  45. package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
  46. package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
  47. package/dist/__tests__/learned-skills/detector.test.js +99 -0
  48. package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
  49. package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
  50. package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
  51. package/dist/__tests__/learned-skills/finder.test.js +59 -0
  52. package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
  53. package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
  54. package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
  55. package/dist/__tests__/learned-skills/loader.test.js +69 -0
  56. package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
  57. package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
  58. package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
  59. package/dist/__tests__/learned-skills/parser.test.js +81 -0
  60. package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
  61. package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
  62. package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
  63. package/dist/__tests__/learned-skills/validator.test.js +85 -0
  64. package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
  65. package/dist/__tests__/skills.test.js +6 -5
  66. package/dist/__tests__/skills.test.js.map +1 -1
  67. package/dist/agents/codex-agents.d.ts +20 -0
  68. package/dist/agents/codex-agents.d.ts.map +1 -0
  69. package/dist/agents/codex-agents.js +36 -0
  70. package/dist/agents/codex-agents.js.map +1 -0
  71. package/dist/agents/definitions.js +1 -1
  72. package/dist/agents/definitions.js.map +1 -1
  73. package/dist/agents/document-writer.d.ts +11 -0
  74. package/dist/agents/document-writer.d.ts.map +1 -0
  75. package/dist/agents/document-writer.js +209 -0
  76. package/dist/agents/document-writer.js.map +1 -0
  77. package/dist/agents/frontend-engineer.d.ts +11 -0
  78. package/dist/agents/frontend-engineer.d.ts.map +1 -0
  79. package/dist/agents/frontend-engineer.js +115 -0
  80. package/dist/agents/frontend-engineer.js.map +1 -0
  81. package/dist/agents/librarian.d.ts +12 -0
  82. package/dist/agents/librarian.d.ts.map +1 -0
  83. package/dist/agents/librarian.js +103 -0
  84. package/dist/agents/librarian.js.map +1 -0
  85. package/dist/agents/metis.d.ts +12 -0
  86. package/dist/agents/metis.d.ts.map +1 -0
  87. package/dist/agents/metis.js +117 -0
  88. package/dist/agents/metis.js.map +1 -0
  89. package/dist/agents/momus.d.ts +12 -0
  90. package/dist/agents/momus.d.ts.map +1 -0
  91. package/dist/agents/momus.js +128 -0
  92. package/dist/agents/momus.js.map +1 -0
  93. package/dist/agents/multimodal-looker.d.ts +11 -0
  94. package/dist/agents/multimodal-looker.d.ts.map +1 -0
  95. package/dist/agents/multimodal-looker.js +70 -0
  96. package/dist/agents/multimodal-looker.js.map +1 -0
  97. package/dist/agents/oracle.d.ts +13 -0
  98. package/dist/agents/oracle.d.ts.map +1 -0
  99. package/dist/agents/oracle.js +191 -0
  100. package/dist/agents/oracle.js.map +1 -0
  101. package/dist/agents/orchestrator-sisyphus.d.ts +11 -0
  102. package/dist/agents/orchestrator-sisyphus.d.ts.map +1 -0
  103. package/dist/agents/orchestrator-sisyphus.js +115 -0
  104. package/dist/agents/orchestrator-sisyphus.js.map +1 -0
  105. package/dist/agents/prometheus.d.ts +12 -0
  106. package/dist/agents/prometheus.d.ts.map +1 -0
  107. package/dist/agents/prometheus.js +195 -0
  108. package/dist/agents/prometheus.js.map +1 -0
  109. package/dist/agents/sisyphus-junior.d.ts +12 -0
  110. package/dist/agents/sisyphus-junior.d.ts.map +1 -0
  111. package/dist/agents/sisyphus-junior.js +93 -0
  112. package/dist/agents/sisyphus-junior.js.map +1 -0
  113. package/dist/analytics/output-estimator.d.ts.map +1 -1
  114. package/dist/analytics/output-estimator.js +5 -1
  115. package/dist/analytics/output-estimator.js.map +1 -1
  116. package/dist/analytics/token-extractor.js +2 -2
  117. package/dist/analytics/token-extractor.js.map +1 -1
  118. package/dist/cli/analytics.js +0 -0
  119. package/dist/cli/components/CostDashboard.d.ts +15 -0
  120. package/dist/cli/components/CostDashboard.d.ts.map +1 -0
  121. package/dist/cli/components/CostDashboard.js +15 -0
  122. package/dist/cli/components/CostDashboard.js.map +1 -0
  123. package/dist/cli/components/LiveStats.d.ts +16 -0
  124. package/dist/cli/components/LiveStats.d.ts.map +1 -0
  125. package/dist/cli/components/LiveStats.js +16 -0
  126. package/dist/cli/components/LiveStats.js.map +1 -0
  127. package/dist/cli/components/SessionBrowser.d.ts +14 -0
  128. package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
  129. package/dist/cli/components/SessionBrowser.js +14 -0
  130. package/dist/cli/components/SessionBrowser.js.map +1 -0
  131. package/dist/cli/index.js +0 -0
  132. package/dist/cli/tui.d.ts +21 -0
  133. package/dist/cli/tui.d.ts.map +1 -0
  134. package/dist/cli/tui.js +21 -0
  135. package/dist/cli/tui.js.map +1 -0
  136. package/dist/compatibility/discovery.d.ts.map +1 -1
  137. package/dist/compatibility/discovery.js +3 -1
  138. package/dist/compatibility/discovery.js.map +1 -1
  139. package/dist/hooks/autopilot/prompts.d.ts.map +1 -1
  140. package/dist/hooks/autopilot/prompts.js +17 -3
  141. package/dist/hooks/autopilot/prompts.js.map +1 -1
  142. package/dist/hooks/autopilot/signals.d.ts +20 -0
  143. package/dist/hooks/autopilot/signals.d.ts.map +1 -0
  144. package/dist/hooks/autopilot/signals.js +75 -0
  145. package/dist/hooks/autopilot/signals.js.map +1 -0
  146. package/dist/hooks/autopilot/summary.d.ts +27 -0
  147. package/dist/hooks/autopilot/summary.d.ts.map +1 -0
  148. package/dist/hooks/autopilot/summary.js +160 -0
  149. package/dist/hooks/autopilot/summary.js.map +1 -0
  150. package/dist/hooks/autopilot/transition.d.ts +39 -0
  151. package/dist/hooks/autopilot/transition.d.ts.map +1 -0
  152. package/dist/hooks/autopilot/transition.js +216 -0
  153. package/dist/hooks/autopilot/transition.js.map +1 -0
  154. package/dist/hooks/context-window-limit-recovery/constants.d.ts +28 -0
  155. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +1 -0
  156. package/dist/hooks/context-window-limit-recovery/constants.js +85 -0
  157. package/dist/hooks/context-window-limit-recovery/constants.js.map +1 -0
  158. package/dist/hooks/context-window-limit-recovery/index.d.ts +62 -0
  159. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -0
  160. package/dist/hooks/context-window-limit-recovery/index.js +201 -0
  161. package/dist/hooks/context-window-limit-recovery/index.js.map +1 -0
  162. package/dist/hooks/context-window-limit-recovery/parser.d.ts +31 -0
  163. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +1 -0
  164. package/dist/hooks/context-window-limit-recovery/parser.js +241 -0
  165. package/dist/hooks/context-window-limit-recovery/parser.js.map +1 -0
  166. package/dist/hooks/context-window-limit-recovery/types.d.ts +84 -0
  167. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +1 -0
  168. package/dist/hooks/context-window-limit-recovery/types.js +34 -0
  169. package/dist/hooks/context-window-limit-recovery/types.js.map +1 -0
  170. package/dist/hooks/edit-error-recovery/index.d.ts +62 -0
  171. package/dist/hooks/edit-error-recovery/index.d.ts.map +1 -0
  172. package/dist/hooks/edit-error-recovery/index.js +89 -0
  173. package/dist/hooks/edit-error-recovery/index.js.map +1 -0
  174. package/dist/hooks/github-auto-responder/classifier.d.ts +43 -0
  175. package/dist/hooks/github-auto-responder/classifier.d.ts.map +1 -0
  176. package/dist/hooks/github-auto-responder/classifier.js +150 -0
  177. package/dist/hooks/github-auto-responder/classifier.js.map +1 -0
  178. package/dist/hooks/github-auto-responder/config.d.ts +109 -0
  179. package/dist/hooks/github-auto-responder/config.d.ts.map +1 -0
  180. package/dist/hooks/github-auto-responder/config.js +69 -0
  181. package/dist/hooks/github-auto-responder/config.js.map +1 -0
  182. package/dist/hooks/github-auto-responder/constants.d.ts +45 -0
  183. package/dist/hooks/github-auto-responder/constants.d.ts.map +1 -0
  184. package/dist/hooks/github-auto-responder/constants.js +60 -0
  185. package/dist/hooks/github-auto-responder/constants.js.map +1 -0
  186. package/dist/hooks/github-auto-responder/filters.d.ts +95 -0
  187. package/dist/hooks/github-auto-responder/filters.d.ts.map +1 -0
  188. package/dist/hooks/github-auto-responder/filters.js +174 -0
  189. package/dist/hooks/github-auto-responder/filters.js.map +1 -0
  190. package/dist/hooks/github-auto-responder/github-client.d.ts +65 -0
  191. package/dist/hooks/github-auto-responder/github-client.d.ts.map +1 -0
  192. package/dist/hooks/github-auto-responder/github-client.js +128 -0
  193. package/dist/hooks/github-auto-responder/github-client.js.map +1 -0
  194. package/dist/hooks/github-auto-responder/idempotency.d.ts +68 -0
  195. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +1 -0
  196. package/dist/hooks/github-auto-responder/idempotency.js +147 -0
  197. package/dist/hooks/github-auto-responder/idempotency.js.map +1 -0
  198. package/dist/hooks/github-auto-responder/index.d.ts +140 -0
  199. package/dist/hooks/github-auto-responder/index.d.ts.map +1 -0
  200. package/dist/hooks/github-auto-responder/index.js +145 -0
  201. package/dist/hooks/github-auto-responder/index.js.map +1 -0
  202. package/dist/hooks/github-auto-responder/persona.d.ts +40 -0
  203. package/dist/hooks/github-auto-responder/persona.d.ts.map +1 -0
  204. package/dist/hooks/github-auto-responder/persona.js +99 -0
  205. package/dist/hooks/github-auto-responder/persona.js.map +1 -0
  206. package/dist/hooks/github-auto-responder/responder.d.ts +122 -0
  207. package/dist/hooks/github-auto-responder/responder.d.ts.map +1 -0
  208. package/dist/hooks/github-auto-responder/responder.js +264 -0
  209. package/dist/hooks/github-auto-responder/responder.js.map +1 -0
  210. package/dist/hooks/github-auto-responder/server.d.ts +140 -0
  211. package/dist/hooks/github-auto-responder/server.d.ts.map +1 -0
  212. package/dist/hooks/github-auto-responder/server.js +301 -0
  213. package/dist/hooks/github-auto-responder/server.js.map +1 -0
  214. package/dist/hooks/github-auto-responder/signature.d.ts +34 -0
  215. package/dist/hooks/github-auto-responder/signature.d.ts.map +1 -0
  216. package/dist/hooks/github-auto-responder/signature.js +79 -0
  217. package/dist/hooks/github-auto-responder/signature.js.map +1 -0
  218. package/dist/hooks/github-auto-responder/templates.d.ts +16 -0
  219. package/dist/hooks/github-auto-responder/templates.d.ts.map +1 -0
  220. package/dist/hooks/github-auto-responder/templates.js +93 -0
  221. package/dist/hooks/github-auto-responder/templates.js.map +1 -0
  222. package/dist/hooks/github-auto-responder/types.d.ts +246 -0
  223. package/dist/hooks/github-auto-responder/types.d.ts.map +1 -0
  224. package/dist/hooks/github-auto-responder/types.js +7 -0
  225. package/dist/hooks/github-auto-responder/types.js.map +1 -0
  226. package/dist/hooks/learned-skills/config.d.ts +53 -0
  227. package/dist/hooks/learned-skills/config.d.ts.map +1 -0
  228. package/dist/hooks/learned-skills/config.js +103 -0
  229. package/dist/hooks/learned-skills/config.js.map +1 -0
  230. package/dist/hooks/learned-skills/constants.d.ts +24 -0
  231. package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
  232. package/dist/hooks/learned-skills/constants.js +26 -0
  233. package/dist/hooks/learned-skills/constants.js.map +1 -0
  234. package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
  235. package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
  236. package/dist/hooks/learned-skills/detection-hook.js +83 -0
  237. package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
  238. package/dist/hooks/learned-skills/detector.d.ts +30 -0
  239. package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
  240. package/dist/hooks/learned-skills/detector.js +150 -0
  241. package/dist/hooks/learned-skills/detector.js.map +1 -0
  242. package/dist/hooks/learned-skills/finder.d.ts +21 -0
  243. package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
  244. package/dist/hooks/learned-skills/finder.js +117 -0
  245. package/dist/hooks/learned-skills/finder.js.map +1 -0
  246. package/dist/hooks/learned-skills/index.d.ts +62 -0
  247. package/dist/hooks/learned-skills/index.d.ts.map +1 -0
  248. package/dist/hooks/learned-skills/index.js +137 -0
  249. package/dist/hooks/learned-skills/index.js.map +1 -0
  250. package/dist/hooks/learned-skills/loader.d.ts +20 -0
  251. package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
  252. package/dist/hooks/learned-skills/loader.js +107 -0
  253. package/dist/hooks/learned-skills/loader.js.map +1 -0
  254. package/dist/hooks/learned-skills/parser.d.ts +21 -0
  255. package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
  256. package/dist/hooks/learned-skills/parser.js +190 -0
  257. package/dist/hooks/learned-skills/parser.js.map +1 -0
  258. package/dist/hooks/learned-skills/promotion.d.ts +29 -0
  259. package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
  260. package/dist/hooks/learned-skills/promotion.js +87 -0
  261. package/dist/hooks/learned-skills/promotion.js.map +1 -0
  262. package/dist/hooks/learned-skills/types.d.ts +109 -0
  263. package/dist/hooks/learned-skills/types.d.ts.map +1 -0
  264. package/dist/hooks/learned-skills/types.js +8 -0
  265. package/dist/hooks/learned-skills/types.js.map +1 -0
  266. package/dist/hooks/learned-skills/validator.d.ts +15 -0
  267. package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
  268. package/dist/hooks/learned-skills/validator.js +87 -0
  269. package/dist/hooks/learned-skills/validator.js.map +1 -0
  270. package/dist/hooks/learned-skills/writer.d.ts +27 -0
  271. package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
  272. package/dist/hooks/learned-skills/writer.js +126 -0
  273. package/dist/hooks/learned-skills/writer.js.map +1 -0
  274. package/dist/hooks/mnemosyne/config.d.ts +53 -0
  275. package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
  276. package/dist/hooks/mnemosyne/config.js +103 -0
  277. package/dist/hooks/mnemosyne/config.js.map +1 -0
  278. package/dist/hooks/mnemosyne/constants.d.ts +24 -0
  279. package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
  280. package/dist/hooks/mnemosyne/constants.js +26 -0
  281. package/dist/hooks/mnemosyne/constants.js.map +1 -0
  282. package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
  283. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
  284. package/dist/hooks/mnemosyne/detection-hook.js +83 -0
  285. package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
  286. package/dist/hooks/mnemosyne/detector.d.ts +30 -0
  287. package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
  288. package/dist/hooks/mnemosyne/detector.js +150 -0
  289. package/dist/hooks/mnemosyne/detector.js.map +1 -0
  290. package/dist/hooks/mnemosyne/finder.d.ts +21 -0
  291. package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
  292. package/dist/hooks/mnemosyne/finder.js +117 -0
  293. package/dist/hooks/mnemosyne/finder.js.map +1 -0
  294. package/dist/hooks/mnemosyne/index.d.ts +62 -0
  295. package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
  296. package/dist/hooks/mnemosyne/index.js +137 -0
  297. package/dist/hooks/mnemosyne/index.js.map +1 -0
  298. package/dist/hooks/mnemosyne/loader.d.ts +20 -0
  299. package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
  300. package/dist/hooks/mnemosyne/loader.js +113 -0
  301. package/dist/hooks/mnemosyne/loader.js.map +1 -0
  302. package/dist/hooks/mnemosyne/parser.d.ts +21 -0
  303. package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
  304. package/dist/hooks/mnemosyne/parser.js +190 -0
  305. package/dist/hooks/mnemosyne/parser.js.map +1 -0
  306. package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
  307. package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
  308. package/dist/hooks/mnemosyne/promotion.js +87 -0
  309. package/dist/hooks/mnemosyne/promotion.js.map +1 -0
  310. package/dist/hooks/mnemosyne/types.d.ts +109 -0
  311. package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
  312. package/dist/hooks/mnemosyne/types.js +8 -0
  313. package/dist/hooks/mnemosyne/types.js.map +1 -0
  314. package/dist/hooks/mnemosyne/validator.d.ts +15 -0
  315. package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
  316. package/dist/hooks/mnemosyne/validator.js +87 -0
  317. package/dist/hooks/mnemosyne/validator.js.map +1 -0
  318. package/dist/hooks/mnemosyne/writer.d.ts +27 -0
  319. package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
  320. package/dist/hooks/mnemosyne/writer.js +126 -0
  321. package/dist/hooks/mnemosyne/writer.js.map +1 -0
  322. package/dist/hooks/pre-compact/index.d.ts +2 -4
  323. package/dist/hooks/pre-compact/index.d.ts.map +1 -1
  324. package/dist/hooks/pre-compact/index.js +3 -4
  325. package/dist/hooks/pre-compact/index.js.map +1 -1
  326. package/dist/hooks/ralph-loop/index.d.ts +116 -0
  327. package/dist/hooks/ralph-loop/index.d.ts.map +1 -0
  328. package/dist/hooks/ralph-loop/index.js +322 -0
  329. package/dist/hooks/ralph-loop/index.js.map +1 -0
  330. package/dist/hooks/ralph-prd/index.d.ts +130 -0
  331. package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
  332. package/dist/hooks/ralph-prd/index.js +310 -0
  333. package/dist/hooks/ralph-prd/index.js.map +1 -0
  334. package/dist/hooks/ralph-progress/index.d.ts +102 -0
  335. package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
  336. package/dist/hooks/ralph-progress/index.js +408 -0
  337. package/dist/hooks/ralph-progress/index.js.map +1 -0
  338. package/dist/hooks/ralph-verifier/index.d.ts +72 -0
  339. package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
  340. package/dist/hooks/ralph-verifier/index.js +223 -0
  341. package/dist/hooks/ralph-verifier/index.js.map +1 -0
  342. package/dist/hooks/session-recovery/constants.d.ts +56 -0
  343. package/dist/hooks/session-recovery/constants.d.ts.map +1 -0
  344. package/dist/hooks/session-recovery/constants.js +78 -0
  345. package/dist/hooks/session-recovery/constants.js.map +1 -0
  346. package/dist/hooks/session-recovery/index.d.ts +53 -0
  347. package/dist/hooks/session-recovery/index.d.ts.map +1 -0
  348. package/dist/hooks/session-recovery/index.js +321 -0
  349. package/dist/hooks/session-recovery/index.js.map +1 -0
  350. package/dist/hooks/session-recovery/storage.d.ts +76 -0
  351. package/dist/hooks/session-recovery/storage.d.ts.map +1 -0
  352. package/dist/hooks/session-recovery/storage.js +383 -0
  353. package/dist/hooks/session-recovery/storage.js.map +1 -0
  354. package/dist/hooks/session-recovery/types.d.ts +145 -0
  355. package/dist/hooks/session-recovery/types.d.ts.map +1 -0
  356. package/dist/hooks/session-recovery/types.js +8 -0
  357. package/dist/hooks/session-recovery/types.js.map +1 -0
  358. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +23 -0
  359. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +1 -0
  360. package/dist/hooks/sisyphus-orchestrator/constants.js +142 -0
  361. package/dist/hooks/sisyphus-orchestrator/constants.js.map +1 -0
  362. package/dist/hooks/sisyphus-orchestrator/index.d.ts +113 -0
  363. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -0
  364. package/dist/hooks/sisyphus-orchestrator/index.js +309 -0
  365. package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -0
  366. package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
  367. package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
  368. package/dist/hooks/ultraqa-loop/index.js +216 -0
  369. package/dist/hooks/ultraqa-loop/index.js.map +1 -0
  370. package/dist/hooks/ultrawork-state/index.d.ts +62 -0
  371. package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
  372. package/dist/hooks/ultrawork-state/index.js +208 -0
  373. package/dist/hooks/ultrawork-state/index.js.map +1 -0
  374. package/dist/hud/analytics-display.d.ts.map +1 -1
  375. package/dist/hud/analytics-display.js +0 -1
  376. package/dist/hud/analytics-display.js.map +1 -1
  377. package/dist/hud/index.js +52 -3
  378. package/dist/hud/index.js.map +1 -1
  379. package/dist/hud/sisyphus-state.d.ts +31 -0
  380. package/dist/hud/sisyphus-state.d.ts.map +1 -0
  381. package/dist/hud/sisyphus-state.js +163 -0
  382. package/dist/hud/sisyphus-state.js.map +1 -0
  383. package/dist/installer/index.d.ts +1 -1
  384. package/dist/installer/index.js +1 -1
  385. package/package.json +1 -1
  386. package/scripts/github-webhook-server.ts +141 -0
  387. package/skills/hud/SKILL.md +3 -1
@@ -0,0 +1,150 @@
1
+ /**
2
+ * GitHub Event Classifier
3
+ *
4
+ * Classifies GitHub issues and PRs into response categories based on labels and keywords.
5
+ */
6
+ /**
7
+ * Keywords that indicate a bug report
8
+ */
9
+ const BUG_KEYWORDS = [
10
+ 'bug',
11
+ 'error',
12
+ 'crash',
13
+ 'broken',
14
+ 'fail',
15
+ 'issue',
16
+ 'problem',
17
+ 'wrong',
18
+ 'fix',
19
+ 'not working',
20
+ ];
21
+ /**
22
+ * Keywords that indicate a feature request
23
+ */
24
+ const FEATURE_KEYWORDS = [
25
+ 'feature',
26
+ 'enhancement',
27
+ 'request',
28
+ 'add',
29
+ 'implement',
30
+ 'suggest',
31
+ 'would be nice',
32
+ 'wish',
33
+ ];
34
+ /**
35
+ * Keywords that indicate a question
36
+ */
37
+ const QUESTION_KEYWORDS = [
38
+ 'how',
39
+ 'why',
40
+ 'what',
41
+ 'when',
42
+ 'where',
43
+ 'help',
44
+ 'question',
45
+ '?',
46
+ ];
47
+ /**
48
+ * Classifies based on GitHub labels
49
+ *
50
+ * @param labels - Array of GitHub labels
51
+ * @returns Classification result with high confidence (0.9) if label found, null otherwise
52
+ */
53
+ export function classifyByLabel(labels) {
54
+ const labelNames = labels.map((l) => l.name.toLowerCase());
55
+ if (labelNames.includes('bug')) {
56
+ return {
57
+ category: 'bug',
58
+ confidence: 0.9,
59
+ reason: 'Labeled as "bug"',
60
+ };
61
+ }
62
+ if (labelNames.includes('feature') ||
63
+ labelNames.includes('enhancement')) {
64
+ return {
65
+ category: 'feature',
66
+ confidence: 0.9,
67
+ reason: `Labeled as "${labelNames.includes('feature') ? 'feature' : 'enhancement'}"`,
68
+ };
69
+ }
70
+ if (labelNames.includes('question')) {
71
+ return {
72
+ category: 'question',
73
+ confidence: 0.9,
74
+ reason: 'Labeled as "question"',
75
+ };
76
+ }
77
+ return null;
78
+ }
79
+ /**
80
+ * Classifies based on keyword matching in title and body
81
+ *
82
+ * @param title - Issue/PR title
83
+ * @param body - Issue/PR body (may be null)
84
+ * @returns Classification result with confidence based on keyword matches
85
+ */
86
+ export function classifyByKeywords(title, body) {
87
+ const text = `${title} ${body || ''}`.toLowerCase();
88
+ // Count matches for each category
89
+ const bugMatches = BUG_KEYWORDS.filter((kw) => text.includes(kw)).length;
90
+ const featureMatches = FEATURE_KEYWORDS.filter((kw) => text.includes(kw)).length;
91
+ const questionMatches = QUESTION_KEYWORDS.filter((kw) => text.includes(kw)).length;
92
+ // Determine category with most matches
93
+ const maxMatches = Math.max(bugMatches, featureMatches, questionMatches);
94
+ // Calculate total unique keywords for confidence
95
+ const totalKeywords = BUG_KEYWORDS.length + FEATURE_KEYWORDS.length + QUESTION_KEYWORDS.length;
96
+ if (maxMatches === 0) {
97
+ return {
98
+ category: 'question',
99
+ confidence: 0.3,
100
+ reason: 'No keywords matched, defaulting to question',
101
+ };
102
+ }
103
+ if (bugMatches === maxMatches) {
104
+ return {
105
+ category: 'bug',
106
+ confidence: bugMatches / totalKeywords,
107
+ reason: `Matched ${bugMatches} bug keyword(s)`,
108
+ };
109
+ }
110
+ if (featureMatches === maxMatches) {
111
+ return {
112
+ category: 'feature',
113
+ confidence: featureMatches / totalKeywords,
114
+ reason: `Matched ${featureMatches} feature keyword(s)`,
115
+ };
116
+ }
117
+ return {
118
+ category: 'question',
119
+ confidence: questionMatches / totalKeywords,
120
+ reason: `Matched ${questionMatches} question keyword(s)`,
121
+ };
122
+ }
123
+ /**
124
+ * Classifies a GitHub webhook payload into a response category
125
+ *
126
+ * Uses label-based classification first (high confidence), then falls back
127
+ * to keyword-based classification. Pull requests are always classified as 'pr'.
128
+ *
129
+ * @param payload - GitHub webhook payload
130
+ * @returns Classification result with category, confidence, and reasoning
131
+ */
132
+ export function classify(payload) {
133
+ // Check if it's a PR payload
134
+ if ('pull_request' in payload) {
135
+ return {
136
+ category: 'pr',
137
+ confidence: 1.0,
138
+ reason: 'Pull request detected',
139
+ };
140
+ }
141
+ // Issue payload - try label-based classification first
142
+ const issue = payload.issue;
143
+ const labelResult = classifyByLabel(issue.labels);
144
+ if (labelResult) {
145
+ return labelResult;
146
+ }
147
+ // Fall back to keyword-based classification
148
+ return classifyByKeywords(issue.title, issue.body);
149
+ }
150
+ //# sourceMappingURL=classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Configuration loading and validation for GitHub Auto-Responder
3
+ */
4
+ import { z } from 'zod';
5
+ import type { AutoResponderConfig } from './types.js';
6
+ /**
7
+ * Zod schema for PersonaConfig validation
8
+ */
9
+ export declare const PersonaConfigSchema: z.ZodObject<{
10
+ tone: z.ZodEnum<["formal", "friendly", "technical", "casual", "direct"]>;
11
+ technicalDepth: z.ZodEnum<["beginner", "intermediate", "expert", "high"]>;
12
+ language: z.ZodEnum<["en", "ko-mix"]>;
13
+ signatureEmoji: z.ZodString;
14
+ maintainerName: z.ZodString;
15
+ }, "strip", z.ZodTypeAny, {
16
+ language: "en" | "ko-mix";
17
+ tone: "formal" | "friendly" | "technical" | "casual" | "direct";
18
+ technicalDepth: "high" | "beginner" | "intermediate" | "expert";
19
+ signatureEmoji: string;
20
+ maintainerName: string;
21
+ }, {
22
+ language: "en" | "ko-mix";
23
+ tone: "formal" | "friendly" | "technical" | "casual" | "direct";
24
+ technicalDepth: "high" | "beginner" | "intermediate" | "expert";
25
+ signatureEmoji: string;
26
+ maintainerName: string;
27
+ }>;
28
+ /**
29
+ * Zod schema for AutoResponderConfig validation
30
+ */
31
+ export declare const AutoResponderConfigSchema: z.ZodObject<{
32
+ webhookSecret: z.ZodString;
33
+ githubToken: z.ZodString;
34
+ anthropicApiKey: z.ZodString;
35
+ selfLogin: z.ZodString;
36
+ mode: z.ZodDefault<z.ZodEnum<["draft", "auto"]>>;
37
+ persona: z.ZodDefault<z.ZodOptional<z.ZodObject<{
38
+ tone: z.ZodEnum<["formal", "friendly", "technical", "casual", "direct"]>;
39
+ technicalDepth: z.ZodEnum<["beginner", "intermediate", "expert", "high"]>;
40
+ language: z.ZodEnum<["en", "ko-mix"]>;
41
+ signatureEmoji: z.ZodString;
42
+ maintainerName: z.ZodString;
43
+ }, "strip", z.ZodTypeAny, {
44
+ language: "en" | "ko-mix";
45
+ tone: "formal" | "friendly" | "technical" | "casual" | "direct";
46
+ technicalDepth: "high" | "beginner" | "intermediate" | "expert";
47
+ signatureEmoji: string;
48
+ maintainerName: string;
49
+ }, {
50
+ language: "en" | "ko-mix";
51
+ tone: "formal" | "friendly" | "technical" | "casual" | "direct";
52
+ technicalDepth: "high" | "beginner" | "intermediate" | "expert";
53
+ signatureEmoji: string;
54
+ maintainerName: string;
55
+ }>>>;
56
+ port: z.ZodDefault<z.ZodNumber>;
57
+ skipLabels: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
58
+ spamPatterns: z.ZodOptional<z.ZodArray<z.ZodType<RegExp, z.ZodTypeDef, RegExp>, "many">>;
59
+ idempotencyDbPath: z.ZodDefault<z.ZodString>;
60
+ maxResponseTokens: z.ZodDefault<z.ZodNumber>;
61
+ llmModel: z.ZodDefault<z.ZodString>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ port: number;
64
+ mode: "auto" | "draft";
65
+ webhookSecret: string;
66
+ githubToken: string;
67
+ anthropicApiKey: string;
68
+ selfLogin: string;
69
+ persona: {
70
+ language: "en" | "ko-mix";
71
+ tone: "formal" | "friendly" | "technical" | "casual" | "direct";
72
+ technicalDepth: "high" | "beginner" | "intermediate" | "expert";
73
+ signatureEmoji: string;
74
+ maintainerName: string;
75
+ };
76
+ skipLabels: string[];
77
+ idempotencyDbPath: string;
78
+ maxResponseTokens: number;
79
+ llmModel: string;
80
+ spamPatterns?: RegExp[] | undefined;
81
+ }, {
82
+ webhookSecret: string;
83
+ githubToken: string;
84
+ anthropicApiKey: string;
85
+ selfLogin: string;
86
+ port?: number | undefined;
87
+ mode?: "auto" | "draft" | undefined;
88
+ persona?: {
89
+ language: "en" | "ko-mix";
90
+ tone: "formal" | "friendly" | "technical" | "casual" | "direct";
91
+ technicalDepth: "high" | "beginner" | "intermediate" | "expert";
92
+ signatureEmoji: string;
93
+ maintainerName: string;
94
+ } | undefined;
95
+ skipLabels?: string[] | undefined;
96
+ spamPatterns?: RegExp[] | undefined;
97
+ idempotencyDbPath?: string | undefined;
98
+ maxResponseTokens?: number | undefined;
99
+ llmModel?: string | undefined;
100
+ }>;
101
+ /**
102
+ * Load configuration from environment variables
103
+ */
104
+ export declare function loadConfigFromEnv(): Partial<AutoResponderConfig>;
105
+ /**
106
+ * Load and validate configuration from environment and optional overrides
107
+ */
108
+ export declare function loadConfig(overrides?: Partial<AutoResponderConfig>): AutoResponderConfig;
109
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,YAAY,CAAC;AASrE;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAapC,CAAC;AAEH;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CA+BhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,SAAS,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACvC,mBAAmB,CAKrB"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Configuration loading and validation for GitHub Auto-Responder
3
+ */
4
+ import { z } from 'zod';
5
+ import { DEFAULT_PERSONA, DEFAULT_PORT, DEFAULT_SKIP_LABELS, DEFAULT_MAX_RESPONSE_TOKENS, DEFAULT_LLM_MODEL, } from './constants.js';
6
+ /**
7
+ * Zod schema for PersonaConfig validation
8
+ */
9
+ export const PersonaConfigSchema = z.object({
10
+ tone: z.enum(['formal', 'friendly', 'technical', 'casual', 'direct']),
11
+ technicalDepth: z.enum(['beginner', 'intermediate', 'expert', 'high']),
12
+ language: z.enum(['en', 'ko-mix']),
13
+ signatureEmoji: z.string(),
14
+ maintainerName: z.string().min(1),
15
+ });
16
+ /**
17
+ * Zod schema for AutoResponderConfig validation
18
+ */
19
+ export const AutoResponderConfigSchema = z.object({
20
+ webhookSecret: z.string().min(1),
21
+ githubToken: z.string().min(1),
22
+ anthropicApiKey: z.string().min(1),
23
+ selfLogin: z.string().min(1),
24
+ mode: z.enum(['draft', 'auto']).default('draft'),
25
+ persona: PersonaConfigSchema.optional().default(DEFAULT_PERSONA),
26
+ port: z.number().default(DEFAULT_PORT),
27
+ skipLabels: z.array(z.string()).default(DEFAULT_SKIP_LABELS),
28
+ spamPatterns: z.array(z.instanceof(RegExp)).optional(),
29
+ idempotencyDbPath: z.string().default('.omc/state/github-auto-responder.db'),
30
+ maxResponseTokens: z.number().default(DEFAULT_MAX_RESPONSE_TOKENS),
31
+ llmModel: z.string().default(DEFAULT_LLM_MODEL),
32
+ });
33
+ /**
34
+ * Load configuration from environment variables
35
+ */
36
+ export function loadConfigFromEnv() {
37
+ const config = {};
38
+ if (process.env.GITHUB_WEBHOOK_SECRET) {
39
+ config.webhookSecret = process.env.GITHUB_WEBHOOK_SECRET;
40
+ }
41
+ if (process.env.GITHUB_TOKEN) {
42
+ config.githubToken = process.env.GITHUB_TOKEN;
43
+ }
44
+ if (process.env.ANTHROPIC_API_KEY) {
45
+ config.anthropicApiKey = process.env.ANTHROPIC_API_KEY;
46
+ }
47
+ if (process.env.GITHUB_SELF_LOGIN) {
48
+ config.selfLogin = process.env.GITHUB_SELF_LOGIN;
49
+ }
50
+ if (process.env.AUTO_RESPONDER_MODE) {
51
+ config.mode = process.env.AUTO_RESPONDER_MODE;
52
+ }
53
+ if (process.env.AUTO_RESPONDER_PORT) {
54
+ const port = parseInt(process.env.AUTO_RESPONDER_PORT, 10);
55
+ if (!isNaN(port)) {
56
+ config.port = port;
57
+ }
58
+ }
59
+ return config;
60
+ }
61
+ /**
62
+ * Load and validate configuration from environment and optional overrides
63
+ */
64
+ export function loadConfig(overrides) {
65
+ const envConfig = loadConfigFromEnv();
66
+ const mergedConfig = { ...envConfig, ...overrides };
67
+ return AutoResponderConfigSchema.parse(mergedConfig);
68
+ }
69
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Constants for GitHub Auto-Responder
3
+ */
4
+ import type { PersonaConfig } from './types.js';
5
+ /**
6
+ * Default persona configuration for auto-responses
7
+ */
8
+ export declare const DEFAULT_PERSONA: PersonaConfig;
9
+ /**
10
+ * Labels that prevent auto-reply
11
+ */
12
+ export declare const DEFAULT_SKIP_LABELS: string[];
13
+ /**
14
+ * Patterns for spam detection
15
+ */
16
+ export declare const DEFAULT_SPAM_PATTERNS: RegExp[];
17
+ /**
18
+ * GitHub API base URL
19
+ */
20
+ export declare const GITHUB_API_BASE = "https://api.github.com";
21
+ /**
22
+ * Anthropic API endpoint
23
+ */
24
+ export declare const ANTHROPIC_API_URL = "https://api.anthropic.com/v1/messages";
25
+ /**
26
+ * Default server port
27
+ */
28
+ export declare const DEFAULT_PORT = 3000;
29
+ /**
30
+ * Default LLM model for responses
31
+ */
32
+ export declare const DEFAULT_LLM_MODEL = "claude-sonnet-4-20250514";
33
+ /**
34
+ * Maximum tokens for LLM response
35
+ */
36
+ export declare const DEFAULT_MAX_RESPONSE_TOKENS = 500;
37
+ /**
38
+ * Response timeout in milliseconds
39
+ */
40
+ export declare const RESPONSE_TIMEOUT_MS = 8000;
41
+ /**
42
+ * Idempotency key TTL (24 hours)
43
+ */
44
+ export declare const IDEMPOTENCY_TTL_MS: number;
45
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,aAM7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAAkC,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAYzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,iBAAiB,0CAA0C,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,kBAAkB,QAAsB,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Constants for GitHub Auto-Responder
3
+ */
4
+ /**
5
+ * Default persona configuration for auto-responses
6
+ */
7
+ export const DEFAULT_PERSONA = {
8
+ tone: 'direct',
9
+ technicalDepth: 'high',
10
+ language: 'ko-mix', // Korean/English blend
11
+ signatureEmoji: '🦞',
12
+ maintainerName: 'Yeachan Heo',
13
+ };
14
+ /**
15
+ * Labels that prevent auto-reply
16
+ */
17
+ export const DEFAULT_SKIP_LABELS = ['no-auto-reply', 'bot-ignore'];
18
+ /**
19
+ * Patterns for spam detection
20
+ */
21
+ export const DEFAULT_SPAM_PATTERNS = [
22
+ // ALL CAPS patterns (ignoring short acronyms)
23
+ /\b[A-Z]{10,}\b/,
24
+ /^[A-Z\s!?]{50,}$/,
25
+ // Excessive links (5+ URLs in a comment)
26
+ /(?:https?:\/\/[^\s]+.*?){5,}/,
27
+ // Known spam phrases
28
+ /\b(?:click here now|buy now|limited time offer|act now|free money|winner|congratulations you won)\b/i,
29
+ /\b(?:earn \$\d+|make money fast|work from home|100% free|risk free)\b/i,
30
+ /\b(?:casino|viagra|cialis|lottery|pills)\b/i,
31
+ ];
32
+ /**
33
+ * GitHub API base URL
34
+ */
35
+ export const GITHUB_API_BASE = 'https://api.github.com';
36
+ /**
37
+ * Anthropic API endpoint
38
+ */
39
+ export const ANTHROPIC_API_URL = 'https://api.anthropic.com/v1/messages';
40
+ /**
41
+ * Default server port
42
+ */
43
+ export const DEFAULT_PORT = 3000;
44
+ /**
45
+ * Default LLM model for responses
46
+ */
47
+ export const DEFAULT_LLM_MODEL = 'claude-sonnet-4-20250514';
48
+ /**
49
+ * Maximum tokens for LLM response
50
+ */
51
+ export const DEFAULT_MAX_RESPONSE_TOKENS = 500;
52
+ /**
53
+ * Response timeout in milliseconds
54
+ */
55
+ export const RESPONSE_TIMEOUT_MS = 8000;
56
+ /**
57
+ * Idempotency key TTL (24 hours)
58
+ */
59
+ export const IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1000;
60
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,IAAI,EAAE,QAAQ;IACd,cAAc,EAAE,MAAM;IACtB,QAAQ,EAAE,QAAQ,EAAE,uBAAuB;IAC3C,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,aAAa;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAa;IAC7C,8CAA8C;IAC9C,gBAAgB;IAChB,kBAAkB;IAElB,yCAAyC;IACzC,8BAA8B;IAE9B,qBAAqB;IACrB,sGAAsG;IACtG,wEAAwE;IACxE,6CAA6C;CAC9C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,uCAAuC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
@@ -0,0 +1,95 @@
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 type { WebhookPayload, FilterResult, GitHubIssuePayload, GitHubPRPayload } from './types.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 declare function isIssuePayload(payload: WebhookPayload): payload is GitHubIssuePayload;
19
+ /**
20
+ * Type guard: Check if payload is a pull request payload
21
+ *
22
+ * @param payload - Webhook payload
23
+ * @returns True if payload contains a pull request
24
+ */
25
+ export declare function isPRPayload(payload: WebhookPayload): payload is GitHubPRPayload;
26
+ /**
27
+ * Filter: Skip bot-generated events
28
+ *
29
+ * @param payload - Webhook payload
30
+ * @returns Filter result (skip if sender is a bot)
31
+ */
32
+ export declare function filterBot(payload: WebhookPayload): FilterResult;
33
+ /**
34
+ * Filter: Skip self-generated events
35
+ *
36
+ * @param payload - Webhook payload
37
+ * @param selfLogin - Bot's own GitHub username
38
+ * @returns Filter result (skip if sender is self)
39
+ */
40
+ export declare function filterSelf(payload: WebhookPayload, selfLogin: string): FilterResult;
41
+ /**
42
+ * Filter: Skip issues/PRs with excluded labels
43
+ *
44
+ * @param payload - Webhook payload
45
+ * @param skipLabels - Labels that prevent auto-response
46
+ * @returns Filter result (skip if any skip label is present)
47
+ */
48
+ export declare function filterLabel(payload: WebhookPayload, skipLabels: string[]): FilterResult;
49
+ /**
50
+ * Filter: Skip spam-like content
51
+ *
52
+ * @param payload - Webhook payload
53
+ * @param spamPatterns - Regex patterns to detect spam
54
+ * @returns Filter result (skip if title or body matches spam pattern)
55
+ */
56
+ export declare function filterSpam(payload: WebhookPayload, spamPatterns: RegExp[]): FilterResult;
57
+ /**
58
+ * Filter: Skip non-opened actions
59
+ *
60
+ * Only respond to newly opened issues and PRs.
61
+ *
62
+ * @param payload - Webhook payload
63
+ * @returns Filter result (skip if action is not 'opened')
64
+ */
65
+ export declare function filterAction(payload: WebhookPayload): FilterResult;
66
+ /**
67
+ * Create a filter pipeline that runs all filters in sequence
68
+ *
69
+ * Filters are run in order:
70
+ * 1. Bot check
71
+ * 2. Self check
72
+ * 3. Action check (only 'opened')
73
+ * 4. Label check
74
+ * 5. Spam check
75
+ *
76
+ * Pipeline short-circuits on first skip (returns immediately).
77
+ *
78
+ * @param selfLogin - Bot's own GitHub username
79
+ * @param skipLabels - Labels that prevent auto-response
80
+ * @param spamPatterns - Spam detection patterns (defaults to DEFAULT_SPAM_PATTERNS)
81
+ * @returns Filter function that returns skip decision
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const filter = createFilterPipeline('my-bot', ['no-auto-reply']);
86
+ * const result = await filter(payload);
87
+ * if (result.skip) {
88
+ * console.log('Skipping:', result.reason);
89
+ * return;
90
+ * }
91
+ * // Process payload...
92
+ * ```
93
+ */
94
+ export declare function createFilterPipeline(selfLogin: string, skipLabels: string[], spamPatterns?: RegExp[]): (payload: WebhookPayload) => Promise<FilterResult>;
95
+ //# sourceMappingURL=filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/filters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,IAAI,kBAAkB,CAE/B;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,GACtB,OAAO,IAAI,eAAe,CAE5B;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,CAS/D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,YAAY,CASd;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAAE,GACnB,YAAY,CAed;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,EAAE,GACrB,YAAY,CAsBd;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,CASlE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAAE,EACpB,YAAY,GAAE,MAAM,EAA0B,GAC7C,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,YAAY,CAAC,CAqBpD"}