oh-my-claude-sisyphus 3.7.6 → 3.7.8
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.
- package/agents/AGENTS.md +144 -0
- package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
- package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
- package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
- package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
- package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
- package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
- package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +7 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +1 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.js +374 -0
- package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +1 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
- package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
- package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/config.test.js +37 -0
- package/dist/__tests__/learned-skills/config.test.js.map +1 -0
- package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/detector.test.js +99 -0
- package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
- package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/finder.test.js +59 -0
- package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
- package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/loader.test.js +69 -0
- package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
- package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/parser.test.js +81 -0
- package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
- package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
- package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
- package/dist/__tests__/learned-skills/validator.test.js +85 -0
- package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
- package/dist/__tests__/omc-tools-server.test.d.ts +2 -0
- package/dist/__tests__/omc-tools-server.test.d.ts.map +1 -0
- package/dist/__tests__/omc-tools-server.test.js +52 -0
- package/dist/__tests__/omc-tools-server.test.js.map +1 -0
- package/dist/agents/architect.js +1 -1
- package/dist/agents/architect.js.map +1 -1
- package/dist/agents/codex-agents.d.ts +20 -0
- package/dist/agents/codex-agents.d.ts.map +1 -0
- package/dist/agents/codex-agents.js +36 -0
- package/dist/agents/codex-agents.js.map +1 -0
- package/dist/agents/definitions.js +13 -13
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/document-writer.d.ts +11 -0
- package/dist/agents/document-writer.d.ts.map +1 -0
- package/dist/agents/document-writer.js +209 -0
- package/dist/agents/document-writer.js.map +1 -0
- package/dist/agents/executor.js +1 -1
- package/dist/agents/executor.js.map +1 -1
- package/dist/agents/explore.js +1 -1
- package/dist/agents/explore.js.map +1 -1
- package/dist/agents/frontend-engineer.d.ts +11 -0
- package/dist/agents/frontend-engineer.d.ts.map +1 -0
- package/dist/agents/frontend-engineer.js +115 -0
- package/dist/agents/frontend-engineer.js.map +1 -0
- package/dist/agents/librarian.d.ts +12 -0
- package/dist/agents/librarian.d.ts.map +1 -0
- package/dist/agents/librarian.js +103 -0
- package/dist/agents/librarian.js.map +1 -0
- package/dist/agents/metis.d.ts +12 -0
- package/dist/agents/metis.d.ts.map +1 -0
- package/dist/agents/metis.js +117 -0
- package/dist/agents/metis.js.map +1 -0
- package/dist/agents/momus.d.ts +12 -0
- package/dist/agents/momus.d.ts.map +1 -0
- package/dist/agents/momus.js +128 -0
- package/dist/agents/momus.js.map +1 -0
- package/dist/agents/multimodal-looker.d.ts +11 -0
- package/dist/agents/multimodal-looker.d.ts.map +1 -0
- package/dist/agents/multimodal-looker.js +70 -0
- package/dist/agents/multimodal-looker.js.map +1 -0
- package/dist/agents/oracle.d.ts +13 -0
- package/dist/agents/oracle.d.ts.map +1 -0
- package/dist/agents/oracle.js +191 -0
- package/dist/agents/oracle.js.map +1 -0
- package/dist/agents/orchestrator-sisyphus.d.ts +11 -0
- package/dist/agents/orchestrator-sisyphus.d.ts.map +1 -0
- package/dist/agents/orchestrator-sisyphus.js +115 -0
- package/dist/agents/orchestrator-sisyphus.js.map +1 -0
- package/dist/agents/prometheus.d.ts +12 -0
- package/dist/agents/prometheus.d.ts.map +1 -0
- package/dist/agents/prometheus.js +195 -0
- package/dist/agents/prometheus.js.map +1 -0
- package/dist/agents/qa-tester.js +1 -1
- package/dist/agents/qa-tester.js.map +1 -1
- package/dist/agents/sisyphus-junior.d.ts +12 -0
- package/dist/agents/sisyphus-junior.d.ts.map +1 -0
- package/dist/agents/sisyphus-junior.js +93 -0
- package/dist/agents/sisyphus-junior.js.map +1 -0
- package/dist/cli/analytics.js +0 -0
- package/dist/cli/components/CostDashboard.d.ts +15 -0
- package/dist/cli/components/CostDashboard.d.ts.map +1 -0
- package/dist/cli/components/CostDashboard.js +15 -0
- package/dist/cli/components/CostDashboard.js.map +1 -0
- package/dist/cli/components/LiveStats.d.ts +16 -0
- package/dist/cli/components/LiveStats.d.ts.map +1 -0
- package/dist/cli/components/LiveStats.js +16 -0
- package/dist/cli/components/LiveStats.js.map +1 -0
- package/dist/cli/components/SessionBrowser.d.ts +14 -0
- package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
- package/dist/cli/components/SessionBrowser.js +14 -0
- package/dist/cli/components/SessionBrowser.js.map +1 -0
- package/dist/cli/index.js +0 -0
- package/dist/cli/tui.d.ts +21 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +21 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/hooks/autopilot/signals.d.ts +20 -0
- package/dist/hooks/autopilot/signals.d.ts.map +1 -0
- package/dist/hooks/autopilot/signals.js +75 -0
- package/dist/hooks/autopilot/signals.js.map +1 -0
- package/dist/hooks/autopilot/summary.d.ts +27 -0
- package/dist/hooks/autopilot/summary.d.ts.map +1 -0
- package/dist/hooks/autopilot/summary.js +160 -0
- package/dist/hooks/autopilot/summary.js.map +1 -0
- package/dist/hooks/autopilot/transition.d.ts +39 -0
- package/dist/hooks/autopilot/transition.d.ts.map +1 -0
- package/dist/hooks/autopilot/transition.js +216 -0
- package/dist/hooks/autopilot/transition.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/constants.d.ts +28 -0
- package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/constants.js +85 -0
- package/dist/hooks/context-window-limit-recovery/constants.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/index.d.ts +62 -0
- package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/index.js +201 -0
- package/dist/hooks/context-window-limit-recovery/index.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/parser.d.ts +31 -0
- package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/parser.js +241 -0
- package/dist/hooks/context-window-limit-recovery/parser.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/types.d.ts +84 -0
- package/dist/hooks/context-window-limit-recovery/types.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/types.js +34 -0
- package/dist/hooks/context-window-limit-recovery/types.js.map +1 -0
- package/dist/hooks/edit-error-recovery/index.d.ts +62 -0
- package/dist/hooks/edit-error-recovery/index.d.ts.map +1 -0
- package/dist/hooks/edit-error-recovery/index.js +89 -0
- package/dist/hooks/edit-error-recovery/index.js.map +1 -0
- package/dist/hooks/github-auto-responder/classifier.d.ts +43 -0
- package/dist/hooks/github-auto-responder/classifier.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/classifier.js +150 -0
- package/dist/hooks/github-auto-responder/classifier.js.map +1 -0
- package/dist/hooks/github-auto-responder/config.d.ts +109 -0
- package/dist/hooks/github-auto-responder/config.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/config.js +69 -0
- package/dist/hooks/github-auto-responder/config.js.map +1 -0
- package/dist/hooks/github-auto-responder/constants.d.ts +45 -0
- package/dist/hooks/github-auto-responder/constants.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/constants.js +60 -0
- package/dist/hooks/github-auto-responder/constants.js.map +1 -0
- package/dist/hooks/github-auto-responder/filters.d.ts +95 -0
- package/dist/hooks/github-auto-responder/filters.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/filters.js +174 -0
- package/dist/hooks/github-auto-responder/filters.js.map +1 -0
- package/dist/hooks/github-auto-responder/github-client.d.ts +65 -0
- package/dist/hooks/github-auto-responder/github-client.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/github-client.js +128 -0
- package/dist/hooks/github-auto-responder/github-client.js.map +1 -0
- package/dist/hooks/github-auto-responder/idempotency.d.ts +68 -0
- package/dist/hooks/github-auto-responder/idempotency.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/idempotency.js +147 -0
- package/dist/hooks/github-auto-responder/idempotency.js.map +1 -0
- package/dist/hooks/github-auto-responder/index.d.ts +140 -0
- package/dist/hooks/github-auto-responder/index.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/index.js +145 -0
- package/dist/hooks/github-auto-responder/index.js.map +1 -0
- package/dist/hooks/github-auto-responder/persona.d.ts +40 -0
- package/dist/hooks/github-auto-responder/persona.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/persona.js +99 -0
- package/dist/hooks/github-auto-responder/persona.js.map +1 -0
- package/dist/hooks/github-auto-responder/responder.d.ts +122 -0
- package/dist/hooks/github-auto-responder/responder.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/responder.js +264 -0
- package/dist/hooks/github-auto-responder/responder.js.map +1 -0
- package/dist/hooks/github-auto-responder/server.d.ts +140 -0
- package/dist/hooks/github-auto-responder/server.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/server.js +301 -0
- package/dist/hooks/github-auto-responder/server.js.map +1 -0
- package/dist/hooks/github-auto-responder/signature.d.ts +34 -0
- package/dist/hooks/github-auto-responder/signature.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/signature.js +79 -0
- package/dist/hooks/github-auto-responder/signature.js.map +1 -0
- package/dist/hooks/github-auto-responder/templates.d.ts +16 -0
- package/dist/hooks/github-auto-responder/templates.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/templates.js +93 -0
- package/dist/hooks/github-auto-responder/templates.js.map +1 -0
- package/dist/hooks/github-auto-responder/types.d.ts +246 -0
- package/dist/hooks/github-auto-responder/types.d.ts.map +1 -0
- package/dist/hooks/github-auto-responder/types.js +7 -0
- package/dist/hooks/github-auto-responder/types.js.map +1 -0
- package/dist/hooks/learned-skills/config.d.ts +53 -0
- package/dist/hooks/learned-skills/config.d.ts.map +1 -0
- package/dist/hooks/learned-skills/config.js +103 -0
- package/dist/hooks/learned-skills/config.js.map +1 -0
- package/dist/hooks/learned-skills/constants.d.ts +24 -0
- package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
- package/dist/hooks/learned-skills/constants.js +26 -0
- package/dist/hooks/learned-skills/constants.js.map +1 -0
- package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
- package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
- package/dist/hooks/learned-skills/detection-hook.js +83 -0
- package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
- package/dist/hooks/learned-skills/detector.d.ts +30 -0
- package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
- package/dist/hooks/learned-skills/detector.js +150 -0
- package/dist/hooks/learned-skills/detector.js.map +1 -0
- package/dist/hooks/learned-skills/finder.d.ts +21 -0
- package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
- package/dist/hooks/learned-skills/finder.js +117 -0
- package/dist/hooks/learned-skills/finder.js.map +1 -0
- package/dist/hooks/learned-skills/index.d.ts +62 -0
- package/dist/hooks/learned-skills/index.d.ts.map +1 -0
- package/dist/hooks/learned-skills/index.js +137 -0
- package/dist/hooks/learned-skills/index.js.map +1 -0
- package/dist/hooks/learned-skills/loader.d.ts +20 -0
- package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
- package/dist/hooks/learned-skills/loader.js +107 -0
- package/dist/hooks/learned-skills/loader.js.map +1 -0
- package/dist/hooks/learned-skills/parser.d.ts +21 -0
- package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
- package/dist/hooks/learned-skills/parser.js +190 -0
- package/dist/hooks/learned-skills/parser.js.map +1 -0
- package/dist/hooks/learned-skills/promotion.d.ts +29 -0
- package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
- package/dist/hooks/learned-skills/promotion.js +87 -0
- package/dist/hooks/learned-skills/promotion.js.map +1 -0
- package/dist/hooks/learned-skills/types.d.ts +109 -0
- package/dist/hooks/learned-skills/types.d.ts.map +1 -0
- package/dist/hooks/learned-skills/types.js +8 -0
- package/dist/hooks/learned-skills/types.js.map +1 -0
- package/dist/hooks/learned-skills/validator.d.ts +15 -0
- package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
- package/dist/hooks/learned-skills/validator.js +87 -0
- package/dist/hooks/learned-skills/validator.js.map +1 -0
- package/dist/hooks/learned-skills/writer.d.ts +27 -0
- package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
- package/dist/hooks/learned-skills/writer.js +126 -0
- package/dist/hooks/learned-skills/writer.js.map +1 -0
- package/dist/hooks/mnemosyne/config.d.ts +53 -0
- package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/config.js +103 -0
- package/dist/hooks/mnemosyne/config.js.map +1 -0
- package/dist/hooks/mnemosyne/constants.d.ts +24 -0
- package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/constants.js +26 -0
- package/dist/hooks/mnemosyne/constants.js.map +1 -0
- package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
- package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/detection-hook.js +83 -0
- package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
- package/dist/hooks/mnemosyne/detector.d.ts +30 -0
- package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/detector.js +150 -0
- package/dist/hooks/mnemosyne/detector.js.map +1 -0
- package/dist/hooks/mnemosyne/finder.d.ts +21 -0
- package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/finder.js +117 -0
- package/dist/hooks/mnemosyne/finder.js.map +1 -0
- package/dist/hooks/mnemosyne/index.d.ts +62 -0
- package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/index.js +137 -0
- package/dist/hooks/mnemosyne/index.js.map +1 -0
- package/dist/hooks/mnemosyne/loader.d.ts +20 -0
- package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/loader.js +113 -0
- package/dist/hooks/mnemosyne/loader.js.map +1 -0
- package/dist/hooks/mnemosyne/parser.d.ts +21 -0
- package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/parser.js +190 -0
- package/dist/hooks/mnemosyne/parser.js.map +1 -0
- package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
- package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/promotion.js +87 -0
- package/dist/hooks/mnemosyne/promotion.js.map +1 -0
- package/dist/hooks/mnemosyne/types.d.ts +109 -0
- package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/types.js +8 -0
- package/dist/hooks/mnemosyne/types.js.map +1 -0
- package/dist/hooks/mnemosyne/validator.d.ts +15 -0
- package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/validator.js +87 -0
- package/dist/hooks/mnemosyne/validator.js.map +1 -0
- package/dist/hooks/mnemosyne/writer.d.ts +27 -0
- package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
- package/dist/hooks/mnemosyne/writer.js +126 -0
- package/dist/hooks/mnemosyne/writer.js.map +1 -0
- package/dist/hooks/ralph-loop/index.d.ts +116 -0
- package/dist/hooks/ralph-loop/index.d.ts.map +1 -0
- package/dist/hooks/ralph-loop/index.js +322 -0
- package/dist/hooks/ralph-loop/index.js.map +1 -0
- package/dist/hooks/ralph-prd/index.d.ts +130 -0
- package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
- package/dist/hooks/ralph-prd/index.js +310 -0
- package/dist/hooks/ralph-prd/index.js.map +1 -0
- package/dist/hooks/ralph-progress/index.d.ts +102 -0
- package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
- package/dist/hooks/ralph-progress/index.js +408 -0
- package/dist/hooks/ralph-progress/index.js.map +1 -0
- package/dist/hooks/ralph-verifier/index.d.ts +72 -0
- package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
- package/dist/hooks/ralph-verifier/index.js +223 -0
- package/dist/hooks/ralph-verifier/index.js.map +1 -0
- package/dist/hooks/session-recovery/constants.d.ts +56 -0
- package/dist/hooks/session-recovery/constants.d.ts.map +1 -0
- package/dist/hooks/session-recovery/constants.js +78 -0
- package/dist/hooks/session-recovery/constants.js.map +1 -0
- package/dist/hooks/session-recovery/index.d.ts +53 -0
- package/dist/hooks/session-recovery/index.d.ts.map +1 -0
- package/dist/hooks/session-recovery/index.js +321 -0
- package/dist/hooks/session-recovery/index.js.map +1 -0
- package/dist/hooks/session-recovery/storage.d.ts +76 -0
- package/dist/hooks/session-recovery/storage.d.ts.map +1 -0
- package/dist/hooks/session-recovery/storage.js +383 -0
- package/dist/hooks/session-recovery/storage.js.map +1 -0
- package/dist/hooks/session-recovery/types.d.ts +145 -0
- package/dist/hooks/session-recovery/types.d.ts.map +1 -0
- package/dist/hooks/session-recovery/types.js +8 -0
- package/dist/hooks/session-recovery/types.js.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/constants.d.ts +23 -0
- package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/constants.js +142 -0
- package/dist/hooks/sisyphus-orchestrator/constants.js.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/index.d.ts +113 -0
- package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/index.js +309 -0
- package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -0
- package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
- package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
- package/dist/hooks/ultraqa-loop/index.js +216 -0
- package/dist/hooks/ultraqa-loop/index.js.map +1 -0
- package/dist/hooks/ultrawork-state/index.d.ts +62 -0
- package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
- package/dist/hooks/ultrawork-state/index.js +208 -0
- package/dist/hooks/ultrawork-state/index.js.map +1 -0
- package/dist/hud/sisyphus-state.d.ts +31 -0
- package/dist/hud/sisyphus-state.d.ts.map +1 -0
- package/dist/hud/sisyphus-state.js +163 -0
- package/dist/hud/sisyphus-state.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/omc-tools-server.d.ts +25 -0
- package/dist/mcp/omc-tools-server.d.ts.map +1 -0
- package/dist/mcp/omc-tools-server.js +49 -0
- package/dist/mcp/omc-tools-server.js.map +1 -0
- package/dist/tools/ast-tools.d.ts.map +1 -1
- package/dist/tools/ast-tools.js +19 -39
- package/dist/tools/ast-tools.js.map +1 -1
- package/dist/tools/diagnostics/index.d.ts +7 -32
- package/dist/tools/diagnostics/index.d.ts.map +1 -1
- package/dist/tools/diagnostics/index.js +41 -171
- package/dist/tools/diagnostics/index.js.map +1 -1
- package/dist/tools/diagnostics/lsp-aggregator.d.ts +1 -13
- package/dist/tools/diagnostics/lsp-aggregator.d.ts.map +1 -1
- package/dist/tools/diagnostics/lsp-aggregator.js +4 -32
- package/dist/tools/diagnostics/lsp-aggregator.js.map +1 -1
- package/dist/tools/diagnostics/tsc-runner.d.ts +0 -6
- package/dist/tools/diagnostics/tsc-runner.d.ts.map +1 -1
- package/dist/tools/diagnostics/tsc-runner.js +5 -32
- package/dist/tools/diagnostics/tsc-runner.js.map +1 -1
- package/dist/tools/lsp/client.d.ts.map +1 -1
- package/dist/tools/lsp/client.js +1 -26
- package/dist/tools/lsp/client.js.map +1 -1
- package/dist/tools/lsp/servers.d.ts +0 -3
- package/dist/tools/lsp/servers.d.ts.map +1 -1
- package/dist/tools/lsp/servers.js +4 -111
- package/dist/tools/lsp/servers.js.map +1 -1
- package/dist/tools/lsp-tools.d.ts +2 -2
- package/dist/tools/lsp-tools.d.ts.map +1 -1
- package/dist/tools/lsp-tools.js +2 -2
- package/dist/tools/lsp-tools.js.map +1 -1
- package/package.json +1 -1
- package/skills/AGENTS.md +187 -0
- package/dist/tools/diagnostics/__tests__/detectProjectType.test.d.ts +0 -5
- package/dist/tools/diagnostics/__tests__/detectProjectType.test.d.ts.map +0 -1
- package/dist/tools/diagnostics/__tests__/detectProjectType.test.js +0 -42
- package/dist/tools/diagnostics/__tests__/detectProjectType.test.js.map +0 -1
- package/dist/tools/diagnostics/__tests__/integration.test.d.ts +0 -5
- package/dist/tools/diagnostics/__tests__/integration.test.d.ts.map +0 -1
- package/dist/tools/diagnostics/__tests__/integration.test.js +0 -66
- package/dist/tools/diagnostics/__tests__/integration.test.js.map +0 -1
- package/dist/tools/diagnostics/__tests__/parser-tests.d.ts +0 -5
- package/dist/tools/diagnostics/__tests__/parser-tests.d.ts.map +0 -1
- package/dist/tools/diagnostics/__tests__/parser-tests.js +0 -86
- package/dist/tools/diagnostics/__tests__/parser-tests.js.map +0 -1
- package/dist/tools/diagnostics/__tests__/parsers.test.d.ts +0 -5
- package/dist/tools/diagnostics/__tests__/parsers.test.d.ts.map +0 -1
- package/dist/tools/diagnostics/__tests__/parsers.test.js +0 -199
- package/dist/tools/diagnostics/__tests__/parsers.test.js.map +0 -1
- package/dist/tools/diagnostics/constants.d.ts +0 -9
- package/dist/tools/diagnostics/constants.d.ts.map +0 -1
- package/dist/tools/diagnostics/constants.js +0 -9
- package/dist/tools/diagnostics/constants.js.map +0 -1
- package/dist/tools/diagnostics/go-runner.d.ts +0 -31
- package/dist/tools/diagnostics/go-runner.d.ts.map +0 -1
- package/dist/tools/diagnostics/go-runner.js +0 -78
- package/dist/tools/diagnostics/go-runner.js.map +0 -1
- package/dist/tools/diagnostics/python-runner.d.ts +0 -39
- package/dist/tools/diagnostics/python-runner.d.ts.map +0 -1
- package/dist/tools/diagnostics/python-runner.js +0 -200
- package/dist/tools/diagnostics/python-runner.js.map +0 -1
- package/dist/tools/diagnostics/rust-runner.d.ts +0 -34
- package/dist/tools/diagnostics/rust-runner.d.ts.map +0 -1
- package/dist/tools/diagnostics/rust-runner.js +0 -106
- package/dist/tools/diagnostics/rust-runner.js.map +0 -1
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Auto Responder - HTTP Webhook Server
|
|
3
|
+
*
|
|
4
|
+
* HTTP server that receives GitHub webhook events, verifies signatures,
|
|
5
|
+
* and delegates to the AutoResponder for processing.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - HMAC-SHA256 signature verification for security
|
|
9
|
+
* - 1MB body size limit to prevent memory exhaustion
|
|
10
|
+
* - Graceful shutdown on SIGTERM/SIGINT
|
|
11
|
+
* - Health check endpoint for monitoring
|
|
12
|
+
* - Fire-and-forget webhook processing (responds 200 immediately)
|
|
13
|
+
* - JSON responses for all endpoints
|
|
14
|
+
*/
|
|
15
|
+
import http from 'node:http';
|
|
16
|
+
import { verifySignature } from './signature.js';
|
|
17
|
+
/** Maximum request body size (1MB) */
|
|
18
|
+
const MAX_BODY_SIZE = 1024 * 1024;
|
|
19
|
+
/**
|
|
20
|
+
* Read the full request body as a Buffer.
|
|
21
|
+
*
|
|
22
|
+
* Enforces a maximum size limit to prevent memory exhaustion attacks.
|
|
23
|
+
*
|
|
24
|
+
* @param req - HTTP request
|
|
25
|
+
* @returns Request body as Buffer
|
|
26
|
+
* @throws Error if body exceeds MAX_BODY_SIZE
|
|
27
|
+
*/
|
|
28
|
+
async function readBody(req) {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
const chunks = [];
|
|
31
|
+
let totalSize = 0;
|
|
32
|
+
req.on('data', (chunk) => {
|
|
33
|
+
totalSize += chunk.length;
|
|
34
|
+
if (totalSize > MAX_BODY_SIZE) {
|
|
35
|
+
req.destroy();
|
|
36
|
+
reject(new Error(`Request body exceeds ${MAX_BODY_SIZE} bytes`));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
chunks.push(chunk);
|
|
40
|
+
});
|
|
41
|
+
req.on('end', () => {
|
|
42
|
+
resolve(Buffer.concat(chunks));
|
|
43
|
+
});
|
|
44
|
+
req.on('error', (err) => {
|
|
45
|
+
reject(err);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* HTTP webhook server for GitHub events.
|
|
51
|
+
*
|
|
52
|
+
* Endpoints:
|
|
53
|
+
* - GET /health - Health check (returns 200 with status)
|
|
54
|
+
* - POST /webhook - Webhook receiver (signature verification + processing)
|
|
55
|
+
* - Other routes - 404 Not Found
|
|
56
|
+
*
|
|
57
|
+
* Webhook processing is fire-and-forget: the server responds 200 immediately
|
|
58
|
+
* after signature verification, then processes asynchronously. Errors during
|
|
59
|
+
* processing are logged but don't affect the HTTP response.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const responder = createAutoResponder(config);
|
|
64
|
+
* await responder.init();
|
|
65
|
+
*
|
|
66
|
+
* const server = createWebhookServer(responder, config);
|
|
67
|
+
* await server.start();
|
|
68
|
+
*
|
|
69
|
+
* // Later...
|
|
70
|
+
* await server.stop();
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export class WebhookServer {
|
|
74
|
+
responder;
|
|
75
|
+
config;
|
|
76
|
+
/** HTTP server instance */
|
|
77
|
+
server;
|
|
78
|
+
/** Whether the server is currently running */
|
|
79
|
+
running = false;
|
|
80
|
+
/**
|
|
81
|
+
* Create a new webhook server.
|
|
82
|
+
*
|
|
83
|
+
* @param responder - AutoResponder instance for webhook processing
|
|
84
|
+
* @param config - Server configuration (port, webhook secret, etc.)
|
|
85
|
+
*/
|
|
86
|
+
constructor(responder, config) {
|
|
87
|
+
this.responder = responder;
|
|
88
|
+
this.config = config;
|
|
89
|
+
this.server = http.createServer((req, res) => this.handleRequest(req, res));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Start the HTTP server and listen on configured port.
|
|
93
|
+
*
|
|
94
|
+
* @throws Error if server is already running or fails to bind
|
|
95
|
+
*/
|
|
96
|
+
async start() {
|
|
97
|
+
if (this.running) {
|
|
98
|
+
throw new Error('Server is already running');
|
|
99
|
+
}
|
|
100
|
+
return new Promise((resolve, reject) => {
|
|
101
|
+
this.server.once('error', reject);
|
|
102
|
+
this.server.listen(this.config.port, () => {
|
|
103
|
+
this.running = true;
|
|
104
|
+
console.log(`[webhook-server] Listening on http://localhost:${this.config.port}`);
|
|
105
|
+
resolve();
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Route incoming requests to appropriate handlers.
|
|
111
|
+
*
|
|
112
|
+
* Routes:
|
|
113
|
+
* - GET /health → handleHealth()
|
|
114
|
+
* - POST /webhook → handleWebhook()
|
|
115
|
+
* - Other → 404
|
|
116
|
+
*
|
|
117
|
+
* @param req - HTTP request
|
|
118
|
+
* @param res - HTTP response
|
|
119
|
+
*/
|
|
120
|
+
handleRequest(req, res) {
|
|
121
|
+
const { method, url } = req;
|
|
122
|
+
if (method === 'GET' && url === '/health') {
|
|
123
|
+
this.handleHealth(res);
|
|
124
|
+
}
|
|
125
|
+
else if (method === 'POST' && url === '/webhook') {
|
|
126
|
+
this.handleWebhook(req, res).catch((err) => {
|
|
127
|
+
console.error('[webhook-server] Unhandled error in webhook handler:', err);
|
|
128
|
+
if (!res.headersSent) {
|
|
129
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
130
|
+
res.end(JSON.stringify({ error: 'Internal server error' }));
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
136
|
+
res.end(JSON.stringify({ error: 'Not found' }));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Handle health check requests.
|
|
141
|
+
*
|
|
142
|
+
* Returns 200 with JSON status payload.
|
|
143
|
+
*
|
|
144
|
+
* @param res - HTTP response
|
|
145
|
+
*/
|
|
146
|
+
handleHealth(res) {
|
|
147
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
148
|
+
res.end(JSON.stringify({ status: 'healthy' }));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Handle webhook POST requests.
|
|
152
|
+
*
|
|
153
|
+
* Processing pipeline:
|
|
154
|
+
* 1. Read raw request body as Buffer
|
|
155
|
+
* 2. Verify HMAC-SHA256 signature
|
|
156
|
+
* 3. Parse JSON payload
|
|
157
|
+
* 4. Extract event type and delivery ID from headers
|
|
158
|
+
* 5. Respond 200 OK immediately
|
|
159
|
+
* 6. Process webhook asynchronously (fire-and-forget)
|
|
160
|
+
*
|
|
161
|
+
* Errors during validation return appropriate HTTP status codes.
|
|
162
|
+
* Errors during async processing are logged but don't affect the response.
|
|
163
|
+
*
|
|
164
|
+
* @param req - HTTP request
|
|
165
|
+
* @param res - HTTP response
|
|
166
|
+
*/
|
|
167
|
+
async handleWebhook(req, res) {
|
|
168
|
+
try {
|
|
169
|
+
// Step 1: Read raw body (needed for signature verification)
|
|
170
|
+
const rawBody = await readBody(req);
|
|
171
|
+
// Step 2: Verify signature
|
|
172
|
+
const signature = req.headers['x-hub-signature-256'];
|
|
173
|
+
if (!signature) {
|
|
174
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
175
|
+
res.end(JSON.stringify({ error: 'Missing X-Hub-Signature-256 header' }));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const isValid = verifySignature(rawBody, signature, this.config.webhookSecret);
|
|
179
|
+
if (!isValid) {
|
|
180
|
+
console.error('[webhook-server] Invalid signature');
|
|
181
|
+
res.writeHead(401, { 'Content-Type': 'application/json' });
|
|
182
|
+
res.end(JSON.stringify({ error: 'Invalid signature' }));
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Step 3: Parse JSON payload
|
|
186
|
+
let payload;
|
|
187
|
+
try {
|
|
188
|
+
payload = JSON.parse(rawBody.toString('utf-8'));
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
console.error('[webhook-server] Invalid JSON:', err);
|
|
192
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
193
|
+
res.end(JSON.stringify({ error: 'Invalid JSON payload' }));
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Step 4: Extract metadata from headers
|
|
197
|
+
const eventType = req.headers['x-github-event'];
|
|
198
|
+
const deliveryId = req.headers['x-github-delivery'];
|
|
199
|
+
if (!eventType) {
|
|
200
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
201
|
+
res.end(JSON.stringify({ error: 'Missing X-GitHub-Event header' }));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (!deliveryId) {
|
|
205
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
206
|
+
res.end(JSON.stringify({ error: 'Missing X-GitHub-Delivery header' }));
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
console.log(`[webhook-server] Received ${eventType} event (delivery: ${deliveryId})`);
|
|
210
|
+
// Step 5: Respond 200 immediately (GitHub expects quick response)
|
|
211
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
212
|
+
res.end(JSON.stringify({ status: 'accepted' }));
|
|
213
|
+
// Step 6: Process webhook asynchronously (fire-and-forget)
|
|
214
|
+
this.responder.processWebhook(deliveryId, payload).catch((err) => {
|
|
215
|
+
console.error(`[webhook-server] Error processing webhook ${deliveryId}:`, err);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
// Errors during validation (before response sent)
|
|
220
|
+
console.error('[webhook-server] Webhook validation error:', err);
|
|
221
|
+
if (!res.headersSent) {
|
|
222
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
223
|
+
res.end(JSON.stringify({ error: 'Internal server error' }));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Gracefully shut down the server.
|
|
229
|
+
*
|
|
230
|
+
* Stops accepting new connections and waits for existing requests
|
|
231
|
+
* to complete. Also closes the AutoResponder.
|
|
232
|
+
*
|
|
233
|
+
* Safe to call multiple times.
|
|
234
|
+
*/
|
|
235
|
+
async stop() {
|
|
236
|
+
if (!this.running) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
return new Promise((resolve, reject) => {
|
|
240
|
+
this.server.close((err) => {
|
|
241
|
+
if (err) {
|
|
242
|
+
reject(err);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
this.running = false;
|
|
246
|
+
console.log('[webhook-server] Server stopped');
|
|
247
|
+
// Close the responder (shuts down idempotency store)
|
|
248
|
+
this.responder.close().then(resolve).catch(reject);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Factory function to create a new webhook server.
|
|
256
|
+
*
|
|
257
|
+
* @param responder - AutoResponder instance for webhook processing
|
|
258
|
+
* @param config - Server configuration
|
|
259
|
+
* @returns New WebhookServer instance (call start() to begin listening)
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* ```typescript
|
|
263
|
+
* import { loadConfig } from './config.js';
|
|
264
|
+
* import { createAutoResponder } from './responder.js';
|
|
265
|
+
* import { createWebhookServer } from './server.js';
|
|
266
|
+
*
|
|
267
|
+
* const config = loadConfig();
|
|
268
|
+
* const responder = createAutoResponder(config);
|
|
269
|
+
* await responder.init();
|
|
270
|
+
*
|
|
271
|
+
* const server = createWebhookServer(responder, config);
|
|
272
|
+
* await server.start();
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
export function createWebhookServer(responder, config) {
|
|
276
|
+
return new WebhookServer(responder, config);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Register signal handlers for graceful shutdown.
|
|
280
|
+
*
|
|
281
|
+
* Listens for SIGTERM and SIGINT (Ctrl+C) and gracefully shuts down
|
|
282
|
+
* the server before exiting.
|
|
283
|
+
*
|
|
284
|
+
* @param server - Webhook server to shut down
|
|
285
|
+
*/
|
|
286
|
+
export function registerShutdownHandlers(server) {
|
|
287
|
+
const shutdown = async (signal) => {
|
|
288
|
+
console.log(`[webhook-server] Received ${signal}, shutting down gracefully...`);
|
|
289
|
+
try {
|
|
290
|
+
await server.stop();
|
|
291
|
+
process.exit(0);
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
console.error('[webhook-server] Error during shutdown:', err);
|
|
295
|
+
process.exit(1);
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
299
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts the HMAC signature from the GitHub webhook signature header.
|
|
3
|
+
*
|
|
4
|
+
* @param header - The X-Hub-Signature-256 header value (format: "sha256=...")
|
|
5
|
+
* @returns The hex digest string if valid, null if malformed or missing
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* extractSignature("sha256=abc123") // => "abc123"
|
|
10
|
+
* extractSignature("invalid") // => null
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function extractSignature(header: string): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Verifies a GitHub webhook signature using HMAC-SHA256.
|
|
16
|
+
*
|
|
17
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
18
|
+
*
|
|
19
|
+
* @param payload - The raw request body as a Buffer
|
|
20
|
+
* @param signature - The X-Hub-Signature-256 header value (format: "sha256=...")
|
|
21
|
+
* @param secret - The webhook secret configured in GitHub
|
|
22
|
+
* @returns true if signature is valid, false otherwise
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const isValid = verifySignature(
|
|
27
|
+
* Buffer.from(requestBody),
|
|
28
|
+
* req.headers['x-hub-signature-256'],
|
|
29
|
+
* process.env.GITHUB_WEBHOOK_SECRET
|
|
30
|
+
* );
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function verifySignature(payload: Buffer, signature: string, secret: string): boolean;
|
|
34
|
+
//# sourceMappingURL=signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/signature.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAmCT"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Extracts the HMAC signature from the GitHub webhook signature header.
|
|
4
|
+
*
|
|
5
|
+
* @param header - The X-Hub-Signature-256 header value (format: "sha256=...")
|
|
6
|
+
* @returns The hex digest string if valid, null if malformed or missing
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* extractSignature("sha256=abc123") // => "abc123"
|
|
11
|
+
* extractSignature("invalid") // => null
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function extractSignature(header) {
|
|
15
|
+
if (!header || typeof header !== 'string') {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const parts = header.split('=');
|
|
19
|
+
if (parts.length !== 2 || parts[0] !== 'sha256') {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const digest = parts[1];
|
|
23
|
+
// Validate hex format (64 chars for SHA256)
|
|
24
|
+
if (!/^[a-f0-9]{64}$/i.test(digest)) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return digest;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Verifies a GitHub webhook signature using HMAC-SHA256.
|
|
31
|
+
*
|
|
32
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
33
|
+
*
|
|
34
|
+
* @param payload - The raw request body as a Buffer
|
|
35
|
+
* @param signature - The X-Hub-Signature-256 header value (format: "sha256=...")
|
|
36
|
+
* @param secret - The webhook secret configured in GitHub
|
|
37
|
+
* @returns true if signature is valid, false otherwise
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* const isValid = verifySignature(
|
|
42
|
+
* Buffer.from(requestBody),
|
|
43
|
+
* req.headers['x-hub-signature-256'],
|
|
44
|
+
* process.env.GITHUB_WEBHOOK_SECRET
|
|
45
|
+
* );
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function verifySignature(payload, signature, secret) {
|
|
49
|
+
// Validate inputs
|
|
50
|
+
if (!payload || !Buffer.isBuffer(payload)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (!secret || typeof secret !== 'string') {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
// Extract signature from header
|
|
57
|
+
const expectedDigest = extractSignature(signature);
|
|
58
|
+
if (!expectedDigest) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// Compute HMAC-SHA256 of payload
|
|
62
|
+
const hmac = createHmac('sha256', secret);
|
|
63
|
+
hmac.update(payload);
|
|
64
|
+
const actualDigest = hmac.digest('hex');
|
|
65
|
+
// Constant-time comparison to prevent timing attacks
|
|
66
|
+
try {
|
|
67
|
+
const expectedBuffer = Buffer.from(expectedDigest, 'hex');
|
|
68
|
+
const actualBuffer = Buffer.from(actualDigest, 'hex');
|
|
69
|
+
if (expectedBuffer.length !== actualBuffer.length) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return timingSafeEqual(expectedBuffer, actualBuffer);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Buffer conversion or comparison failed
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,4CAA4C;IAC5C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,SAAiB,EACjB,MAAc;IAEd,kBAAkB;IAClB,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gCAAgC;IAChC,MAAM,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iCAAiC;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAExC,qDAAqD;IACrD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAEtD,IAAI,cAAc,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,eAAe,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Auto Responder Templates
|
|
3
|
+
*
|
|
4
|
+
* Static fallback response templates for different issue/PR categories.
|
|
5
|
+
* These are used when LLM generation is not available or as a basis for LLM-enhanced responses.
|
|
6
|
+
*/
|
|
7
|
+
import type { ResponseCategory, PersonaConfig } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Get static template for a given response category
|
|
10
|
+
*
|
|
11
|
+
* @param category - The category of response needed
|
|
12
|
+
* @param persona - Persona configuration for customization
|
|
13
|
+
* @returns Template string with {emoji} placeholder
|
|
14
|
+
*/
|
|
15
|
+
export declare function getTemplate(category: ResponseCategory, persona: PersonaConfig): string;
|
|
16
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,aAAa,GACrB,MAAM,CAeR"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Auto Responder Templates
|
|
3
|
+
*
|
|
4
|
+
* Static fallback response templates for different issue/PR categories.
|
|
5
|
+
* These are used when LLM generation is not available or as a basis for LLM-enhanced responses.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Get static template for a given response category
|
|
9
|
+
*
|
|
10
|
+
* @param category - The category of response needed
|
|
11
|
+
* @param persona - Persona configuration for customization
|
|
12
|
+
* @returns Template string with {emoji} placeholder
|
|
13
|
+
*/
|
|
14
|
+
export function getTemplate(category, persona) {
|
|
15
|
+
const emoji = persona.signatureEmoji;
|
|
16
|
+
switch (category) {
|
|
17
|
+
case 'bug':
|
|
18
|
+
return getBugReportTemplate(emoji);
|
|
19
|
+
case 'feature':
|
|
20
|
+
return getFeatureRequestTemplate(emoji);
|
|
21
|
+
case 'question':
|
|
22
|
+
return getQuestionTemplate(emoji);
|
|
23
|
+
case 'pr':
|
|
24
|
+
return getPRTemplate(emoji);
|
|
25
|
+
default:
|
|
26
|
+
return getGenericTemplate(emoji);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Bug report template
|
|
31
|
+
*/
|
|
32
|
+
function getBugReportTemplate(emoji) {
|
|
33
|
+
return `Thanks for reporting! ${emoji}
|
|
34
|
+
|
|
35
|
+
To help us fix this faster:
|
|
36
|
+
1. Steps to reproduce
|
|
37
|
+
2. Expected vs actual behavior
|
|
38
|
+
3. OMC version (\`omc --version\`)
|
|
39
|
+
4. OS & Node version
|
|
40
|
+
|
|
41
|
+
잘 부탁드립니다!`;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Feature request template
|
|
45
|
+
*/
|
|
46
|
+
function getFeatureRequestTemplate(emoji) {
|
|
47
|
+
return `Interesting idea! ${emoji}
|
|
48
|
+
|
|
49
|
+
몇 가지 궁금한 점:
|
|
50
|
+
- What's your use case?
|
|
51
|
+
- Have you tried existing alternatives?
|
|
52
|
+
- How should it integrate with current features?
|
|
53
|
+
|
|
54
|
+
Thanks for the suggestion!`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Question template
|
|
58
|
+
*/
|
|
59
|
+
function getQuestionTemplate(emoji) {
|
|
60
|
+
return `Thanks for asking! ${emoji}
|
|
61
|
+
|
|
62
|
+
Check out our docs first: [README](../../README.md)
|
|
63
|
+
If that doesn't help, please share:
|
|
64
|
+
- What you're trying to do
|
|
65
|
+
- What you've tried
|
|
66
|
+
- Error messages (if any)
|
|
67
|
+
|
|
68
|
+
질문 감사합니다!`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Pull request template
|
|
72
|
+
*/
|
|
73
|
+
function getPRTemplate(emoji) {
|
|
74
|
+
return `Thanks for the PR! ${emoji}
|
|
75
|
+
|
|
76
|
+
Quick checklist:
|
|
77
|
+
- [ ] Tests added/updated?
|
|
78
|
+
- [ ] Docs updated if needed?
|
|
79
|
+
- [ ] Breaking changes noted?
|
|
80
|
+
|
|
81
|
+
Will review in detail soon. 감사합니다!`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Generic fallback template
|
|
85
|
+
*/
|
|
86
|
+
function getGenericTemplate(emoji) {
|
|
87
|
+
return `Thanks for your contribution! ${emoji}
|
|
88
|
+
|
|
89
|
+
We'll take a look and get back to you soon.
|
|
90
|
+
|
|
91
|
+
감사합니다!`;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,QAA0B,EAC1B,OAAsB;IAEtB,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;IAErC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,SAAS;YACZ,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC1C,KAAK,UAAU;YACb,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,IAAI;YACP,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B;YACE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,yBAAyB,KAAK;;;;;;;;UAQ7B,CAAC;AACX,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,KAAa;IAC9C,OAAO,qBAAqB,KAAK;;;;;;;2BAOR,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,sBAAsB,KAAK;;;;;;;;UAQ1B,CAAC;AACX,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,sBAAsB,KAAK;;;;;;;mCAOD,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,iCAAiC,KAAK;;;;OAIxC,CAAC;AACR,CAAC"}
|