oh-my-claude-sisyphus 3.7.3 → 3.7.4
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/build-fixer-low.md +2 -2
- package/agents/build-fixer.md +74 -19
- package/agents/code-reviewer.md +7 -7
- package/agents/designer-high.md +2 -2
- package/agents/designer-low.md +1 -1
- package/agents/designer.md +17 -2
- package/agents/security-reviewer.md +86 -17
- package/agents/tdd-guide.md +151 -12
- 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__/installer.test.js +1 -1
- 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__/skills.test.js +6 -5
- package/dist/__tests__/skills.test.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 +1 -1
- 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/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/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/compatibility/discovery.d.ts.map +1 -1
- package/dist/compatibility/discovery.js +3 -1
- package/dist/compatibility/discovery.js.map +1 -1
- package/dist/hooks/autopilot/prompts.d.ts.map +1 -1
- package/dist/hooks/autopilot/prompts.js +17 -3
- package/dist/hooks/autopilot/prompts.js.map +1 -1
- 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/installer/index.d.ts +1 -1
- package/dist/installer/index.js +1 -1
- package/package.json +1 -1
- package/scripts/github-webhook-server.ts +141 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/idempotency.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKpD;;;GAGG;AACH,qBAAa,gBAAgB;IAQf,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,EAAE,CAAuC;IACjD,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;gBAC0B,MAAM,EAAE,MAAM;IAE3C;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC3B;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAMhB;;;;OAIG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAQxC;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IASvC;;;OAGG;IACH,OAAO,IAAI,MAAM;IASjB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAQb;;;OAGG;IACH,aAAa,IAAI,iBAAiB,EAAE;IAYpC;;;OAGG;IACH,cAAc,IAAI,MAAM;IAQxB;;;OAGG;IACH,QAAQ,IAAI,MAAM;CAOnB"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idempotency Store for GitHub Auto-Responder
|
|
3
|
+
*
|
|
4
|
+
* SQLite-based deduplication using GitHub delivery IDs.
|
|
5
|
+
* Prevents duplicate webhook processing with automatic cleanup of old records.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
8
|
+
import { dirname } from 'node:path';
|
|
9
|
+
import { IDEMPOTENCY_TTL_MS } from './constants.js';
|
|
10
|
+
/**
|
|
11
|
+
* SQLite-backed idempotency store for webhook deduplication.
|
|
12
|
+
* Uses GitHub delivery IDs to track processed events.
|
|
13
|
+
*/
|
|
14
|
+
export class IdempotencyStore {
|
|
15
|
+
dbPath;
|
|
16
|
+
db = null;
|
|
17
|
+
initialized = false;
|
|
18
|
+
/**
|
|
19
|
+
* Create a new idempotency store.
|
|
20
|
+
* @param dbPath - Path to SQLite database file
|
|
21
|
+
*/
|
|
22
|
+
constructor(dbPath) {
|
|
23
|
+
this.dbPath = dbPath;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the database connection and schema.
|
|
27
|
+
* Dynamically imports better-sqlite3 and creates tables.
|
|
28
|
+
*/
|
|
29
|
+
async init() {
|
|
30
|
+
if (this.initialized) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
// Dynamic import of better-sqlite3
|
|
35
|
+
const betterSqlite3 = await import('better-sqlite3');
|
|
36
|
+
const Database = betterSqlite3.default;
|
|
37
|
+
// Ensure database directory exists
|
|
38
|
+
const dbDir = dirname(this.dbPath);
|
|
39
|
+
if (!existsSync(dbDir)) {
|
|
40
|
+
mkdirSync(dbDir, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
// Create database connection
|
|
43
|
+
this.db = new Database(this.dbPath);
|
|
44
|
+
// Enable WAL mode for concurrent access
|
|
45
|
+
this.db.pragma('journal_mode = WAL');
|
|
46
|
+
// Create schema
|
|
47
|
+
this.db.exec(`
|
|
48
|
+
CREATE TABLE IF NOT EXISTS processed_events (
|
|
49
|
+
delivery_id TEXT PRIMARY KEY,
|
|
50
|
+
created_at INTEGER NOT NULL
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
-- Index for efficient TTL cleanup
|
|
54
|
+
CREATE INDEX IF NOT EXISTS idx_created_at ON processed_events(created_at);
|
|
55
|
+
`);
|
|
56
|
+
this.initialized = true;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new Error(`Failed to initialize idempotency store at ${this.dbPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Ensure database is initialized before use.
|
|
64
|
+
* @throws {Error} If database is not initialized
|
|
65
|
+
*/
|
|
66
|
+
ensureDb() {
|
|
67
|
+
if (!this.db || !this.initialized) {
|
|
68
|
+
throw new Error('IdempotencyStore not initialized. Call init() first.');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if a delivery ID has already been processed.
|
|
73
|
+
* @param deliveryId - GitHub webhook delivery ID
|
|
74
|
+
* @returns True if already processed, false otherwise
|
|
75
|
+
*/
|
|
76
|
+
isProcessed(deliveryId) {
|
|
77
|
+
this.ensureDb();
|
|
78
|
+
const stmt = this.db.prepare('SELECT 1 FROM processed_events WHERE delivery_id = ?');
|
|
79
|
+
const result = stmt.get(deliveryId);
|
|
80
|
+
return result !== undefined;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Mark a delivery ID as processed.
|
|
84
|
+
* @param deliveryId - GitHub webhook delivery ID
|
|
85
|
+
*/
|
|
86
|
+
markProcessed(deliveryId) {
|
|
87
|
+
this.ensureDb();
|
|
88
|
+
const stmt = this.db.prepare('INSERT OR IGNORE INTO processed_events (delivery_id, created_at) VALUES (?, ?)');
|
|
89
|
+
stmt.run(deliveryId, Date.now());
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Remove records older than the TTL.
|
|
93
|
+
* @returns Number of records deleted
|
|
94
|
+
*/
|
|
95
|
+
cleanup() {
|
|
96
|
+
this.ensureDb();
|
|
97
|
+
const cutoff = Date.now() - IDEMPOTENCY_TTL_MS;
|
|
98
|
+
const stmt = this.db.prepare('DELETE FROM processed_events WHERE created_at < ?');
|
|
99
|
+
const result = stmt.run(cutoff);
|
|
100
|
+
return result.changes;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Close the database connection.
|
|
104
|
+
* Safe to call multiple times.
|
|
105
|
+
*/
|
|
106
|
+
close() {
|
|
107
|
+
if (this.db) {
|
|
108
|
+
this.db.close();
|
|
109
|
+
this.db = null;
|
|
110
|
+
this.initialized = false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get all processed records (for debugging/testing).
|
|
115
|
+
* @returns Array of idempotency records
|
|
116
|
+
*/
|
|
117
|
+
getAllRecords() {
|
|
118
|
+
this.ensureDb();
|
|
119
|
+
const stmt = this.db.prepare('SELECT delivery_id, created_at FROM processed_events');
|
|
120
|
+
const rows = stmt.all();
|
|
121
|
+
return rows.map(row => ({
|
|
122
|
+
deliveryId: row.delivery_id,
|
|
123
|
+
createdAt: row.created_at,
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get count of processed records.
|
|
128
|
+
* @returns Total number of records in store
|
|
129
|
+
*/
|
|
130
|
+
getRecordCount() {
|
|
131
|
+
this.ensureDb();
|
|
132
|
+
const stmt = this.db.prepare('SELECT COUNT(*) as count FROM processed_events');
|
|
133
|
+
const result = stmt.get();
|
|
134
|
+
return result.count;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Clear all records (for testing/reset).
|
|
138
|
+
* @returns Number of records deleted
|
|
139
|
+
*/
|
|
140
|
+
clearAll() {
|
|
141
|
+
this.ensureDb();
|
|
142
|
+
const stmt = this.db.prepare('DELETE FROM processed_events');
|
|
143
|
+
const result = stmt.run();
|
|
144
|
+
return result.changes;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=idempotency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/idempotency.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMpD;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAQE;IAPrB,EAAE,GAAkC,IAAI,CAAC;IACzC,WAAW,GAAG,KAAK,CAAC;IAE5B;;;OAGG;IACH,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C;;;OAGG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAwB,aAAa,CAAC,OAAO,CAAC;YAE5D,mCAAmC;YACnC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,6BAA6B;YAC7B,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEpC,wCAAwC;YACxC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAErC,gBAAgB;YAChB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;OAQZ,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,CAAC,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,QAAQ;QACd,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,UAAkB;QAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,OAAO,MAAM,KAAK,SAAS,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,UAAkB;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAC3B,gFAAgF,CACjF,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAwD,CAAC;QAE9E,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtB,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAuB,CAAC;QAC/C,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Auto-Responder - Public API Entry Point
|
|
3
|
+
*
|
|
4
|
+
* This module provides a high-level API for creating and managing
|
|
5
|
+
* GitHub webhook auto-responders powered by Claude.
|
|
6
|
+
*
|
|
7
|
+
* @example Quick Start
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { startGitHubAutoResponder } from '@/hooks/github-auto-responder';
|
|
10
|
+
*
|
|
11
|
+
* // Start with environment variables
|
|
12
|
+
* const { server, responder, config, stop } = await startGitHubAutoResponder();
|
|
13
|
+
*
|
|
14
|
+
* // Or with config overrides
|
|
15
|
+
* const instance = await startGitHubAutoResponder({
|
|
16
|
+
* mode: 'auto',
|
|
17
|
+
* port: 3001,
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Later...
|
|
21
|
+
* await instance.stop();
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @example Manual Setup
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { createGitHubAutoResponder } from '@/hooks/github-auto-responder';
|
|
27
|
+
*
|
|
28
|
+
* const { server, responder, config } = createGitHubAutoResponder({
|
|
29
|
+
* webhookSecret: process.env.GITHUB_WEBHOOK_SECRET!,
|
|
30
|
+
* githubToken: process.env.GITHUB_TOKEN!,
|
|
31
|
+
* anthropicApiKey: process.env.ANTHROPIC_API_KEY!,
|
|
32
|
+
* selfLogin: 'my-bot',
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* await responder.init();
|
|
36
|
+
* await server.start();
|
|
37
|
+
*
|
|
38
|
+
* // Later...
|
|
39
|
+
* await server.stop();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
import type { AutoResponderConfig, PersonaConfig, ResponseCategory, ResponseMode, WebhookPayload, WebhookHeaders, GitHubUser, GitHubLabel, GitHubRepository, GitHubIssue, GitHubPullRequest, GitHubIssuePayload, GitHubPRPayload, FilterResult, WebhookFilter, IdempotencyRecord, LLMResponse, CommentResult } from './types.js';
|
|
43
|
+
import { loadConfig, loadConfigFromEnv } from './config.js';
|
|
44
|
+
import { DEFAULT_PERSONA, DEFAULT_SKIP_LABELS, DEFAULT_SPAM_PATTERNS, DEFAULT_PORT, DEFAULT_LLM_MODEL, DEFAULT_MAX_RESPONSE_TOKENS, GITHUB_API_BASE, ANTHROPIC_API_URL, RESPONSE_TIMEOUT_MS, IDEMPOTENCY_TTL_MS } from './constants.js';
|
|
45
|
+
import { AutoResponder, createAutoResponder } from './responder.js';
|
|
46
|
+
import type { ResponderResult } from './responder.js';
|
|
47
|
+
import { WebhookServer, createWebhookServer, registerShutdownHandlers } from './server.js';
|
|
48
|
+
export type { AutoResponderConfig, PersonaConfig, ResponseCategory, ResponseMode, WebhookPayload, WebhookHeaders, GitHubUser, GitHubLabel, GitHubRepository, GitHubIssue, GitHubPullRequest, GitHubIssuePayload, GitHubPRPayload, FilterResult, WebhookFilter, IdempotencyRecord, LLMResponse, CommentResult, ResponderResult, };
|
|
49
|
+
export { loadConfig, loadConfigFromEnv };
|
|
50
|
+
export { DEFAULT_PERSONA, DEFAULT_SKIP_LABELS, DEFAULT_SPAM_PATTERNS, DEFAULT_PORT, DEFAULT_LLM_MODEL, DEFAULT_MAX_RESPONSE_TOKENS, GITHUB_API_BASE, ANTHROPIC_API_URL, RESPONSE_TIMEOUT_MS, IDEMPOTENCY_TTL_MS, };
|
|
51
|
+
export { AutoResponder, createAutoResponder };
|
|
52
|
+
export { WebhookServer, createWebhookServer, registerShutdownHandlers };
|
|
53
|
+
/**
|
|
54
|
+
* Result of creating a GitHub auto-responder instance.
|
|
55
|
+
*/
|
|
56
|
+
export interface GitHubAutoResponderInstance {
|
|
57
|
+
/** Auto-responder for webhook processing */
|
|
58
|
+
responder: AutoResponder;
|
|
59
|
+
/** HTTP webhook server */
|
|
60
|
+
server: WebhookServer;
|
|
61
|
+
/** Resolved configuration */
|
|
62
|
+
config: AutoResponderConfig;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Result of starting a GitHub auto-responder (includes stop function).
|
|
66
|
+
*/
|
|
67
|
+
export interface StartedGitHubAutoResponder extends GitHubAutoResponderInstance {
|
|
68
|
+
/** Stop the server and close the responder */
|
|
69
|
+
stop: () => Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a GitHub auto-responder instance (server + responder).
|
|
73
|
+
*
|
|
74
|
+
* This factory function creates both the webhook server and the auto-responder,
|
|
75
|
+
* but does NOT initialize or start them. You must call:
|
|
76
|
+
* 1. `responder.init()` to initialize the idempotency store
|
|
77
|
+
* 2. `server.start()` to begin listening for webhooks
|
|
78
|
+
*
|
|
79
|
+
* Use {@link startGitHubAutoResponder} if you want a fully initialized and
|
|
80
|
+
* running instance in a single call.
|
|
81
|
+
*
|
|
82
|
+
* @param configOverrides - Partial configuration to override defaults/env vars
|
|
83
|
+
* @returns Auto-responder instance with server, responder, and resolved config
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* const { server, responder, config } = createGitHubAutoResponder({
|
|
88
|
+
* mode: 'draft', // Draft mode: log responses without posting
|
|
89
|
+
* port: 3001,
|
|
90
|
+
* });
|
|
91
|
+
*
|
|
92
|
+
* await responder.init();
|
|
93
|
+
* await server.start();
|
|
94
|
+
*
|
|
95
|
+
* console.log(`Webhook server running on port ${config.port}`);
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare function createGitHubAutoResponder(configOverrides?: Partial<AutoResponderConfig>): GitHubAutoResponderInstance;
|
|
99
|
+
/**
|
|
100
|
+
* Create and start a fully initialized GitHub auto-responder.
|
|
101
|
+
*
|
|
102
|
+
* This is the recommended high-level API for most use cases. It:
|
|
103
|
+
* 1. Loads configuration from environment + overrides
|
|
104
|
+
* 2. Creates the auto-responder and webhook server
|
|
105
|
+
* 3. Initializes the responder (idempotency store)
|
|
106
|
+
* 4. Starts the HTTP server
|
|
107
|
+
* 5. Returns a handle with a convenient `stop()` function
|
|
108
|
+
*
|
|
109
|
+
* @param configOverrides - Partial configuration to override defaults/env vars
|
|
110
|
+
* @returns Started instance with server, responder, config, and stop function
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* // Start in auto mode (post comments automatically)
|
|
115
|
+
* const instance = await startGitHubAutoResponder({ mode: 'auto' });
|
|
116
|
+
*
|
|
117
|
+
* console.log(`Listening on port ${instance.config.port}`);
|
|
118
|
+
*
|
|
119
|
+
* // Later: gracefully shut down
|
|
120
|
+
* await instance.stop();
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```typescript
|
|
125
|
+
* // Start in draft mode (log responses without posting)
|
|
126
|
+
* const instance = await startGitHubAutoResponder({
|
|
127
|
+
* mode: 'draft',
|
|
128
|
+
* port: 3001,
|
|
129
|
+
* persona: {
|
|
130
|
+
* tone: 'friendly',
|
|
131
|
+
* technicalDepth: 'intermediate',
|
|
132
|
+
* language: 'en',
|
|
133
|
+
* signatureEmoji: '🤖',
|
|
134
|
+
* maintainerName: 'Bot Master',
|
|
135
|
+
* },
|
|
136
|
+
* });
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export declare function startGitHubAutoResponder(configOverrides?: Partial<AutoResponderConfig>): Promise<StartedGitHubAutoResponder>;
|
|
140
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,eAAe,GAChB,CAAC;AAGF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AAGzC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,CAAC;AAGF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,4CAA4C;IAC5C,SAAS,EAAE,aAAa,CAAC;IACzB,0BAA0B;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,6BAA6B;IAC7B,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,2BAA2B;IAC7E,8CAA8C;IAC9C,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,yBAAyB,CACvC,eAAe,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAC7C,2BAA2B,CAW7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAC7C,OAAO,CAAC,0BAA0B,CAAC,CAkBrC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Auto-Responder - Public API Entry Point
|
|
3
|
+
*
|
|
4
|
+
* This module provides a high-level API for creating and managing
|
|
5
|
+
* GitHub webhook auto-responders powered by Claude.
|
|
6
|
+
*
|
|
7
|
+
* @example Quick Start
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { startGitHubAutoResponder } from '@/hooks/github-auto-responder';
|
|
10
|
+
*
|
|
11
|
+
* // Start with environment variables
|
|
12
|
+
* const { server, responder, config, stop } = await startGitHubAutoResponder();
|
|
13
|
+
*
|
|
14
|
+
* // Or with config overrides
|
|
15
|
+
* const instance = await startGitHubAutoResponder({
|
|
16
|
+
* mode: 'auto',
|
|
17
|
+
* port: 3001,
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Later...
|
|
21
|
+
* await instance.stop();
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @example Manual Setup
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { createGitHubAutoResponder } from '@/hooks/github-auto-responder';
|
|
27
|
+
*
|
|
28
|
+
* const { server, responder, config } = createGitHubAutoResponder({
|
|
29
|
+
* webhookSecret: process.env.GITHUB_WEBHOOK_SECRET!,
|
|
30
|
+
* githubToken: process.env.GITHUB_TOKEN!,
|
|
31
|
+
* anthropicApiKey: process.env.ANTHROPIC_API_KEY!,
|
|
32
|
+
* selfLogin: 'my-bot',
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* await responder.init();
|
|
36
|
+
* await server.start();
|
|
37
|
+
*
|
|
38
|
+
* // Later...
|
|
39
|
+
* await server.stop();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
import { loadConfig, loadConfigFromEnv } from './config.js';
|
|
43
|
+
import { DEFAULT_PERSONA, DEFAULT_SKIP_LABELS, DEFAULT_SPAM_PATTERNS, DEFAULT_PORT, DEFAULT_LLM_MODEL, DEFAULT_MAX_RESPONSE_TOKENS, GITHUB_API_BASE, ANTHROPIC_API_URL, RESPONSE_TIMEOUT_MS, IDEMPOTENCY_TTL_MS, } from './constants.js';
|
|
44
|
+
import { AutoResponder, createAutoResponder } from './responder.js';
|
|
45
|
+
import { WebhookServer, createWebhookServer, registerShutdownHandlers, } from './server.js';
|
|
46
|
+
// Re-export config utilities
|
|
47
|
+
export { loadConfig, loadConfigFromEnv };
|
|
48
|
+
// Re-export constants
|
|
49
|
+
export { DEFAULT_PERSONA, DEFAULT_SKIP_LABELS, DEFAULT_SPAM_PATTERNS, DEFAULT_PORT, DEFAULT_LLM_MODEL, DEFAULT_MAX_RESPONSE_TOKENS, GITHUB_API_BASE, ANTHROPIC_API_URL, RESPONSE_TIMEOUT_MS, IDEMPOTENCY_TTL_MS, };
|
|
50
|
+
// Re-export core classes and factories
|
|
51
|
+
export { AutoResponder, createAutoResponder };
|
|
52
|
+
export { WebhookServer, createWebhookServer, registerShutdownHandlers };
|
|
53
|
+
/**
|
|
54
|
+
* Create a GitHub auto-responder instance (server + responder).
|
|
55
|
+
*
|
|
56
|
+
* This factory function creates both the webhook server and the auto-responder,
|
|
57
|
+
* but does NOT initialize or start them. You must call:
|
|
58
|
+
* 1. `responder.init()` to initialize the idempotency store
|
|
59
|
+
* 2. `server.start()` to begin listening for webhooks
|
|
60
|
+
*
|
|
61
|
+
* Use {@link startGitHubAutoResponder} if you want a fully initialized and
|
|
62
|
+
* running instance in a single call.
|
|
63
|
+
*
|
|
64
|
+
* @param configOverrides - Partial configuration to override defaults/env vars
|
|
65
|
+
* @returns Auto-responder instance with server, responder, and resolved config
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const { server, responder, config } = createGitHubAutoResponder({
|
|
70
|
+
* mode: 'draft', // Draft mode: log responses without posting
|
|
71
|
+
* port: 3001,
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* await responder.init();
|
|
75
|
+
* await server.start();
|
|
76
|
+
*
|
|
77
|
+
* console.log(`Webhook server running on port ${config.port}`);
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export function createGitHubAutoResponder(configOverrides) {
|
|
81
|
+
// Load config from environment + overrides
|
|
82
|
+
const config = loadConfig(configOverrides);
|
|
83
|
+
// Create responder
|
|
84
|
+
const responder = createAutoResponder(config);
|
|
85
|
+
// Create webhook server
|
|
86
|
+
const server = createWebhookServer(responder, config);
|
|
87
|
+
return { responder, server, config };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create and start a fully initialized GitHub auto-responder.
|
|
91
|
+
*
|
|
92
|
+
* This is the recommended high-level API for most use cases. It:
|
|
93
|
+
* 1. Loads configuration from environment + overrides
|
|
94
|
+
* 2. Creates the auto-responder and webhook server
|
|
95
|
+
* 3. Initializes the responder (idempotency store)
|
|
96
|
+
* 4. Starts the HTTP server
|
|
97
|
+
* 5. Returns a handle with a convenient `stop()` function
|
|
98
|
+
*
|
|
99
|
+
* @param configOverrides - Partial configuration to override defaults/env vars
|
|
100
|
+
* @returns Started instance with server, responder, config, and stop function
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* // Start in auto mode (post comments automatically)
|
|
105
|
+
* const instance = await startGitHubAutoResponder({ mode: 'auto' });
|
|
106
|
+
*
|
|
107
|
+
* console.log(`Listening on port ${instance.config.port}`);
|
|
108
|
+
*
|
|
109
|
+
* // Later: gracefully shut down
|
|
110
|
+
* await instance.stop();
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* // Start in draft mode (log responses without posting)
|
|
116
|
+
* const instance = await startGitHubAutoResponder({
|
|
117
|
+
* mode: 'draft',
|
|
118
|
+
* port: 3001,
|
|
119
|
+
* persona: {
|
|
120
|
+
* tone: 'friendly',
|
|
121
|
+
* technicalDepth: 'intermediate',
|
|
122
|
+
* language: 'en',
|
|
123
|
+
* signatureEmoji: '🤖',
|
|
124
|
+
* maintainerName: 'Bot Master',
|
|
125
|
+
* },
|
|
126
|
+
* });
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
export async function startGitHubAutoResponder(configOverrides) {
|
|
130
|
+
const { responder, server, config } = createGitHubAutoResponder(configOverrides);
|
|
131
|
+
// Initialize responder (idempotency store)
|
|
132
|
+
await responder.init();
|
|
133
|
+
// Start HTTP server
|
|
134
|
+
await server.start();
|
|
135
|
+
// Return handle with convenient stop function
|
|
136
|
+
return {
|
|
137
|
+
responder,
|
|
138
|
+
server,
|
|
139
|
+
config,
|
|
140
|
+
stop: async () => {
|
|
141
|
+
await server.stop();
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAwBH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAyBrB,6BAA6B;AAC7B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AAEzC,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,CAAC;AAEF,uCAAuC;AACvC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC;AAsBxE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,yBAAyB,CACvC,eAA8C;IAE9C,2CAA2C;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE3C,mBAAmB;IACnB,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE9C,wBAAwB;IACxB,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,eAA8C;IAE9C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAEjF,2CAA2C;IAC3C,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IAEvB,oBAAoB;IACpB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAErB,8CAA8C;IAC9C,OAAO;QACL,SAAS;QACT,MAAM;QACN,MAAM;QACN,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Auto Responder - Persona & Prompt Building
|
|
3
|
+
*
|
|
4
|
+
* Constructs LLM prompts that encode maintainer persona and response guidelines.
|
|
5
|
+
*/
|
|
6
|
+
import type { ResponseCategory, PersonaConfig, WebhookPayload } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Context for LLM prompt generation
|
|
9
|
+
*/
|
|
10
|
+
export interface PromptContext {
|
|
11
|
+
/** System prompt defining persona and guidelines */
|
|
12
|
+
system: string;
|
|
13
|
+
/** User prompt with issue/PR context */
|
|
14
|
+
user: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Builds the system prompt encoding maintainer persona and response guidelines.
|
|
18
|
+
*
|
|
19
|
+
* @param persona - Persona configuration
|
|
20
|
+
* @returns System prompt string
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildSystemPrompt(persona: PersonaConfig): string;
|
|
23
|
+
/**
|
|
24
|
+
* Builds the user prompt with issue/PR context.
|
|
25
|
+
*
|
|
26
|
+
* @param category - Classified response category
|
|
27
|
+
* @param payload - GitHub webhook payload
|
|
28
|
+
* @returns User prompt string
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildUserPrompt(category: ResponseCategory, payload: WebhookPayload): string;
|
|
31
|
+
/**
|
|
32
|
+
* Builds complete prompt context (system + user prompts).
|
|
33
|
+
*
|
|
34
|
+
* @param persona - Persona configuration
|
|
35
|
+
* @param category - Response category
|
|
36
|
+
* @param payload - GitHub webhook payload
|
|
37
|
+
* @returns Complete prompt context
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildPrompt(persona: PersonaConfig, category: ResponseCategory, payload: WebhookPayload): PromptContext;
|
|
40
|
+
//# sourceMappingURL=persona.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/persona.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,cAAc,EAGf,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA4ChE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,cAAc,GACtB,MAAM,CA8BR;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,cAAc,GACtB,aAAa,CAKf"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Auto Responder - Persona & Prompt Building
|
|
3
|
+
*
|
|
4
|
+
* Constructs LLM prompts that encode maintainer persona and response guidelines.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Builds the system prompt encoding maintainer persona and response guidelines.
|
|
8
|
+
*
|
|
9
|
+
* @param persona - Persona configuration
|
|
10
|
+
* @returns System prompt string
|
|
11
|
+
*/
|
|
12
|
+
export function buildSystemPrompt(persona) {
|
|
13
|
+
const toneDescriptions = {
|
|
14
|
+
formal: 'professional and formal',
|
|
15
|
+
friendly: 'warm and approachable',
|
|
16
|
+
technical: 'direct and technical',
|
|
17
|
+
casual: 'relaxed and conversational',
|
|
18
|
+
direct: 'straightforward and to the point',
|
|
19
|
+
};
|
|
20
|
+
const depthDescriptions = {
|
|
21
|
+
beginner: 'accessible to beginners with clear explanations',
|
|
22
|
+
intermediate: 'assuming some technical knowledge',
|
|
23
|
+
expert: 'technical and detailed for experienced developers',
|
|
24
|
+
high: 'highly technical with advanced details',
|
|
25
|
+
};
|
|
26
|
+
const languageInstructions = {
|
|
27
|
+
en: 'Respond in English only.',
|
|
28
|
+
'ko-mix': 'You may use a mix of Korean and English. Use Korean for friendliness and English for technical terms.',
|
|
29
|
+
};
|
|
30
|
+
return `You are responding on behalf of ${persona.maintainerName}, maintainer of oh-my-claudecode, a multi-agent orchestration system for Claude Code.
|
|
31
|
+
|
|
32
|
+
**Tone & Style:**
|
|
33
|
+
- Be ${toneDescriptions[persona.tone]}
|
|
34
|
+
- Make responses ${depthDescriptions[persona.technicalDepth]}
|
|
35
|
+
- ${languageInstructions[persona.language]}
|
|
36
|
+
- Use the emoji ${persona.signatureEmoji} once at the start of your response
|
|
37
|
+
- Keep responses concise: 150-200 words maximum
|
|
38
|
+
|
|
39
|
+
**Response Guidelines:**
|
|
40
|
+
- Be friendly but professional
|
|
41
|
+
- Acknowledge the contribution or concern
|
|
42
|
+
- Ask clarifying questions if information is missing
|
|
43
|
+
- For bug reports: request reproduction steps, environment details, logs
|
|
44
|
+
- For feature requests: ask about use cases, priority, alternatives considered
|
|
45
|
+
- For pull requests: note what you'll look for in review (tests, docs, breaking changes)
|
|
46
|
+
- For questions: point to documentation first if available, then provide guidance
|
|
47
|
+
|
|
48
|
+
**Important:**
|
|
49
|
+
- Never commit to timelines or features without verification
|
|
50
|
+
- Be honest about limitations or current project status
|
|
51
|
+
- Thank contributors for their time and effort`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Builds the user prompt with issue/PR context.
|
|
55
|
+
*
|
|
56
|
+
* @param category - Classified response category
|
|
57
|
+
* @param payload - GitHub webhook payload
|
|
58
|
+
* @returns User prompt string
|
|
59
|
+
*/
|
|
60
|
+
export function buildUserPrompt(category, payload) {
|
|
61
|
+
const isIssue = 'issue' in payload;
|
|
62
|
+
const item = isIssue
|
|
63
|
+
? payload.issue
|
|
64
|
+
: payload.pull_request;
|
|
65
|
+
const eventType = isIssue ? 'Issue' : 'Pull Request';
|
|
66
|
+
const title = item.title;
|
|
67
|
+
const body = item.body || 'No description provided';
|
|
68
|
+
const labels = item.labels.map((l) => l.name).join(', ') || 'None';
|
|
69
|
+
const author = item.user.login;
|
|
70
|
+
let contextParts = [
|
|
71
|
+
`**Event Type:** ${eventType}`,
|
|
72
|
+
`**Category:** ${category}`,
|
|
73
|
+
`**Title:** ${title}`,
|
|
74
|
+
`**Body:**\n${body}`,
|
|
75
|
+
`**Labels:** ${labels}`,
|
|
76
|
+
`**Author:** @${author}`,
|
|
77
|
+
];
|
|
78
|
+
// Add PR-specific context
|
|
79
|
+
if (!isIssue) {
|
|
80
|
+
const pr = item;
|
|
81
|
+
contextParts.push(`**Changes:** +${pr.additions}/-${pr.deletions} in ${pr.changed_files} file(s)`);
|
|
82
|
+
}
|
|
83
|
+
return contextParts.join('\n\n');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Builds complete prompt context (system + user prompts).
|
|
87
|
+
*
|
|
88
|
+
* @param persona - Persona configuration
|
|
89
|
+
* @param category - Response category
|
|
90
|
+
* @param payload - GitHub webhook payload
|
|
91
|
+
* @returns Complete prompt context
|
|
92
|
+
*/
|
|
93
|
+
export function buildPrompt(persona, category, payload) {
|
|
94
|
+
return {
|
|
95
|
+
system: buildSystemPrompt(persona),
|
|
96
|
+
user: buildUserPrompt(category, payload),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=persona.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona.js","sourceRoot":"","sources":["../../../src/hooks/github-auto-responder/persona.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,gBAAgB,GAAG;QACvB,MAAM,EAAE,yBAAyB;QACjC,QAAQ,EAAE,uBAAuB;QACjC,SAAS,EAAE,sBAAsB;QACjC,MAAM,EAAE,4BAA4B;QACpC,MAAM,EAAE,kCAAkC;KAC3C,CAAC;IAEF,MAAM,iBAAiB,GAAG;QACxB,QAAQ,EAAE,iDAAiD;QAC3D,YAAY,EAAE,mCAAmC;QACjD,MAAM,EAAE,mDAAmD;QAC3D,IAAI,EAAE,wCAAwC;KAC/C,CAAC;IAEF,MAAM,oBAAoB,GAAG;QAC3B,EAAE,EAAE,0BAA0B;QAC9B,QAAQ,EACN,uGAAuG;KAC1G,CAAC;IAEF,OAAO,mCAAmC,OAAO,CAAC,cAAc;;;OAG3D,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;mBAClB,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAC;IACxD,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC;kBACxB,OAAO,CAAC,cAAc;;;;;;;;;;;;;;;+CAeO,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,QAA0B,EAC1B,OAAuB;IAEvB,MAAM,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO;QAClB,CAAC,CAAE,OAA8B,CAAC,KAAK;QACvC,CAAC,CAAE,OAA2B,CAAC,YAAY,CAAC;IAE9C,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,yBAAyB,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAE/B,IAAI,YAAY,GAAG;QACjB,mBAAmB,SAAS,EAAE;QAC9B,iBAAiB,QAAQ,EAAE;QAC3B,cAAc,KAAK,EAAE;QACrB,cAAc,IAAI,EAAE;QACpB,eAAe,MAAM,EAAE;QACvB,gBAAgB,MAAM,EAAE;KACzB,CAAC;IAEF,0BAA0B;IAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,IAAuC,CAAC;QACnD,YAAY,CAAC,IAAI,CACf,iBAAiB,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,aAAa,UAAU,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,OAAsB,EACtB,QAA0B,EAC1B,OAAuB;IAEvB,OAAO;QACL,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC;KACzC,CAAC;AACJ,CAAC"}
|