oh-my-claude-sisyphus 3.7.6 → 3.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +24 -0
- package/.claude-plugin/plugin.json +7 -0
- package/.mcp.json +8 -0
- 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/mcp/standalone-server.d.ts +11 -0
- package/dist/mcp/standalone-server.d.ts.map +1 -0
- package/dist/mcp/standalone-server.js +139 -0
- package/dist/mcp/standalone-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 +4 -2
- 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
package/skills/AGENTS.md
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
<!-- Parent: ../AGENTS.md -->
|
|
2
|
+
<!-- Generated: 2026-01-28 | Updated: 2026-01-28 -->
|
|
3
|
+
|
|
4
|
+
# skills
|
|
5
|
+
|
|
6
|
+
32 skill definitions for workflow automation and specialized behaviors.
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Skills are reusable workflow templates that can be invoked via `/oh-my-claudecode:skill-name`. Each skill provides:
|
|
11
|
+
- Structured prompts for specific workflows
|
|
12
|
+
- Activation triggers (manual or automatic)
|
|
13
|
+
- Integration with execution modes
|
|
14
|
+
|
|
15
|
+
## Key Files
|
|
16
|
+
|
|
17
|
+
### Execution Mode Skills
|
|
18
|
+
| File | Skill | Purpose |
|
|
19
|
+
|------|-------|---------|
|
|
20
|
+
| `autopilot.md` | autopilot | Full autonomous execution from idea to working code |
|
|
21
|
+
| `ultrawork.md` | ultrawork | Maximum parallel agent execution |
|
|
22
|
+
| `ralph.md` | ralph | Persistence until verified complete |
|
|
23
|
+
| `ultrapilot.md` | ultrapilot | Parallel autopilot with file ownership |
|
|
24
|
+
| `swarm.md` | swarm | N coordinated agents with task claiming |
|
|
25
|
+
| `pipeline.md` | pipeline | Sequential agent chaining |
|
|
26
|
+
| `ecomode.md` | ecomode | Token-efficient parallel execution |
|
|
27
|
+
| `ultraqa.md` | ultraqa | QA cycling until goal met |
|
|
28
|
+
|
|
29
|
+
### Planning Skills
|
|
30
|
+
| File | Skill | Purpose |
|
|
31
|
+
|------|-------|---------|
|
|
32
|
+
| `plan.md` | plan | Strategic planning with interview workflow |
|
|
33
|
+
| `ralplan.md` | ralplan | Iterative planning (Planner+Architect+Critic) |
|
|
34
|
+
| `review.md` | review | Review plan with Critic |
|
|
35
|
+
| `analyze.md` | analyze | Deep analysis and investigation |
|
|
36
|
+
| `ralph-init.md` | ralph-init | Initialize PRD for structured ralph |
|
|
37
|
+
|
|
38
|
+
### Code Quality Skills
|
|
39
|
+
| File | Skill | Purpose |
|
|
40
|
+
|------|-------|---------|
|
|
41
|
+
| `code-review.md` | code-review | Comprehensive code review |
|
|
42
|
+
| `security-review.md` | security-review | Security vulnerability detection |
|
|
43
|
+
| `tdd.md` | tdd | Test-driven development workflow |
|
|
44
|
+
| `build-fix.md` | build-fix | Fix build and TypeScript errors |
|
|
45
|
+
|
|
46
|
+
### Exploration Skills
|
|
47
|
+
| File | Skill | Purpose |
|
|
48
|
+
|------|-------|---------|
|
|
49
|
+
| `deepsearch.md` | deepsearch | Thorough codebase search |
|
|
50
|
+
| `deepinit.md` | deepinit | Generate hierarchical AGENTS.md |
|
|
51
|
+
| `research.md` | research | Parallel scientist orchestration |
|
|
52
|
+
|
|
53
|
+
### Utility Skills
|
|
54
|
+
| File | Skill | Purpose |
|
|
55
|
+
|------|-------|---------|
|
|
56
|
+
| `learner.md` | learner | Extract reusable skill from session |
|
|
57
|
+
| `note.md` | note | Save notes for compaction resilience |
|
|
58
|
+
| `cancel.md` | cancel | Cancel any active OMC mode |
|
|
59
|
+
| `hud.md` | hud | Configure HUD display |
|
|
60
|
+
| `doctor.md` | doctor | Diagnose installation issues |
|
|
61
|
+
| `omc-setup.md` | omc-setup | One-time setup wizard |
|
|
62
|
+
| `mcp-setup.md` | mcp-setup | Configure MCP servers |
|
|
63
|
+
| `help.md` | help | Usage guide |
|
|
64
|
+
|
|
65
|
+
### Domain Skills
|
|
66
|
+
| File | Skill | Purpose |
|
|
67
|
+
|------|-------|---------|
|
|
68
|
+
| `frontend-ui-ux.md` | frontend-ui-ux | Designer-developer aesthetic |
|
|
69
|
+
| `git-master.md` | git-master | Git expertise, atomic commits |
|
|
70
|
+
| `project-session-manager.md` | psm | Isolated dev environments |
|
|
71
|
+
| `writer-memory.md` | writer-memory | Agentic memory for writers |
|
|
72
|
+
| `release.md` | release | Automated release workflow |
|
|
73
|
+
| `local-skills-setup.md` | local-skills-setup | Manage local skills |
|
|
74
|
+
|
|
75
|
+
## For AI Agents
|
|
76
|
+
|
|
77
|
+
### Working In This Directory
|
|
78
|
+
|
|
79
|
+
#### Skill Template Format
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
---
|
|
83
|
+
name: skill-name
|
|
84
|
+
description: Brief description
|
|
85
|
+
triggers:
|
|
86
|
+
- "keyword1"
|
|
87
|
+
- "keyword2"
|
|
88
|
+
agent: executor # Optional: which agent to use
|
|
89
|
+
model: sonnet # Optional: model override
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
# Skill Name
|
|
93
|
+
|
|
94
|
+
## Purpose
|
|
95
|
+
What this skill accomplishes.
|
|
96
|
+
|
|
97
|
+
## Workflow
|
|
98
|
+
1. Step one
|
|
99
|
+
2. Step two
|
|
100
|
+
3. Step three
|
|
101
|
+
|
|
102
|
+
## Usage
|
|
103
|
+
How to invoke this skill.
|
|
104
|
+
|
|
105
|
+
## Configuration
|
|
106
|
+
Any configurable options.
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### Skill Invocation
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Manual invocation
|
|
113
|
+
/oh-my-claudecode:skill-name
|
|
114
|
+
|
|
115
|
+
# With arguments
|
|
116
|
+
/oh-my-claudecode:skill-name arg1 arg2
|
|
117
|
+
|
|
118
|
+
# Auto-detected from keywords
|
|
119
|
+
"autopilot build me a REST API" # Triggers autopilot skill
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### Creating a New Skill
|
|
123
|
+
|
|
124
|
+
1. Create `new-skill.md` with YAML frontmatter
|
|
125
|
+
2. Define purpose, workflow, and usage
|
|
126
|
+
3. Add to skill registry (auto-detected from frontmatter)
|
|
127
|
+
4. Optionally add activation triggers
|
|
128
|
+
|
|
129
|
+
### Common Patterns
|
|
130
|
+
|
|
131
|
+
**Skill chaining:**
|
|
132
|
+
```markdown
|
|
133
|
+
## Workflow
|
|
134
|
+
1. Invoke `explore` agent for context
|
|
135
|
+
2. Invoke `architect` for analysis
|
|
136
|
+
3. Invoke `executor` for implementation
|
|
137
|
+
4. Invoke `qa-tester` for verification
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Conditional behavior:**
|
|
141
|
+
```markdown
|
|
142
|
+
## Workflow
|
|
143
|
+
1. Check if tests exist
|
|
144
|
+
- If yes: Run tests first
|
|
145
|
+
- If no: Create test plan
|
|
146
|
+
2. Proceed with implementation
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Testing Requirements
|
|
150
|
+
|
|
151
|
+
Skills are tested via integration tests that invoke skills and verify behavior.
|
|
152
|
+
|
|
153
|
+
## Dependencies
|
|
154
|
+
|
|
155
|
+
### Internal
|
|
156
|
+
- Loaded by skill bridge (`scripts/build-skill-bridge.mjs`)
|
|
157
|
+
- References agents from `agents/`
|
|
158
|
+
- Uses hooks from `src/hooks/`
|
|
159
|
+
|
|
160
|
+
### External
|
|
161
|
+
None - pure markdown files.
|
|
162
|
+
|
|
163
|
+
## Skill Categories
|
|
164
|
+
|
|
165
|
+
| Category | Skills | Trigger Keywords |
|
|
166
|
+
|----------|--------|------------------|
|
|
167
|
+
| Execution | autopilot, ultrawork, ralph, ultrapilot, swarm, pipeline, ecomode | "autopilot", "ulw", "ralph", "swarm", "eco" |
|
|
168
|
+
| Planning | plan, ralplan, review, analyze, ralph-init | "plan this", "analyze" |
|
|
169
|
+
| Quality | code-review, security-review, tdd, build-fix | "review", "security", "tdd" |
|
|
170
|
+
| Exploration | deepsearch, deepinit, research | "search", "research" |
|
|
171
|
+
| Utility | learner, note, cancel, hud, doctor, omc-setup, mcp-setup, help | "stop", "cancel" |
|
|
172
|
+
| Domain | frontend-ui-ux, git-master, psm, writer-memory, release | UI context, git context |
|
|
173
|
+
|
|
174
|
+
## Auto-Activation
|
|
175
|
+
|
|
176
|
+
Some skills activate automatically based on context:
|
|
177
|
+
|
|
178
|
+
| Skill | Auto-Trigger Condition |
|
|
179
|
+
|-------|----------------------|
|
|
180
|
+
| autopilot | "autopilot", "build me", "I want a" |
|
|
181
|
+
| ultrawork | "ulw", "ultrawork" |
|
|
182
|
+
| ralph | "ralph", "don't stop until" |
|
|
183
|
+
| frontend-ui-ux | UI/component work detected |
|
|
184
|
+
| git-master | Git operations detected |
|
|
185
|
+
| cancel | "stop", "cancel", "abort" |
|
|
186
|
+
|
|
187
|
+
<!-- MANUAL: -->
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detectProjectType.test.d.ts","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/detectProjectType.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for detectProjectType function
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
5
|
-
import { mkdtempSync, writeFileSync, rmSync } from 'fs';
|
|
6
|
-
import { join } from 'path';
|
|
7
|
-
import { tmpdir } from 'os';
|
|
8
|
-
import { detectProjectType } from '../index.js';
|
|
9
|
-
describe('detectProjectType', () => {
|
|
10
|
-
let tempDir;
|
|
11
|
-
beforeEach(() => {
|
|
12
|
-
tempDir = mkdtempSync(join(tmpdir(), 'detect-test-'));
|
|
13
|
-
});
|
|
14
|
-
afterEach(() => {
|
|
15
|
-
rmSync(tempDir, { recursive: true, force: true });
|
|
16
|
-
});
|
|
17
|
-
it('detects TypeScript project from tsconfig.json', () => {
|
|
18
|
-
writeFileSync(join(tempDir, 'tsconfig.json'), '{}');
|
|
19
|
-
expect(detectProjectType(tempDir)).toBe('typescript');
|
|
20
|
-
});
|
|
21
|
-
it('detects Go project from go.mod', () => {
|
|
22
|
-
writeFileSync(join(tempDir, 'go.mod'), 'module test');
|
|
23
|
-
expect(detectProjectType(tempDir)).toBe('go');
|
|
24
|
-
});
|
|
25
|
-
it('detects Rust project from Cargo.toml', () => {
|
|
26
|
-
writeFileSync(join(tempDir, 'Cargo.toml'), '[package]');
|
|
27
|
-
expect(detectProjectType(tempDir)).toBe('rust');
|
|
28
|
-
});
|
|
29
|
-
it('detects Python from pyproject.toml', () => {
|
|
30
|
-
writeFileSync(join(tempDir, 'pyproject.toml'), '[project]');
|
|
31
|
-
expect(detectProjectType(tempDir)).toBe('python');
|
|
32
|
-
});
|
|
33
|
-
it('returns unknown for empty directory', () => {
|
|
34
|
-
expect(detectProjectType(tempDir)).toBe('unknown');
|
|
35
|
-
});
|
|
36
|
-
it('respects tsconfig.json priority over go.mod', () => {
|
|
37
|
-
writeFileSync(join(tempDir, 'tsconfig.json'), '{}');
|
|
38
|
-
writeFileSync(join(tempDir, 'go.mod'), 'module test');
|
|
39
|
-
expect(detectProjectType(tempDir)).toBe('typescript');
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=detectProjectType.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detectProjectType.test.js","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/detectProjectType.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Integration tests for directory diagnostics
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
5
|
-
import * as path from 'path';
|
|
6
|
-
import * as os from 'os';
|
|
7
|
-
// Mock fs before importing the module under test
|
|
8
|
-
vi.mock('fs', async () => {
|
|
9
|
-
const actual = await vi.importActual('fs');
|
|
10
|
-
return {
|
|
11
|
-
...actual,
|
|
12
|
-
realpathSync: vi.fn(actual.realpathSync),
|
|
13
|
-
};
|
|
14
|
-
});
|
|
15
|
-
import * as fs from 'fs';
|
|
16
|
-
import { runDirectoryDiagnostics } from '../index.js';
|
|
17
|
-
import { getAllSupportedExtensions, invalidateExtensionCache } from '../lsp-aggregator.js';
|
|
18
|
-
describe('runDirectoryDiagnostics path validation', () => {
|
|
19
|
-
beforeEach(() => {
|
|
20
|
-
// Reset all mocks to their default implementation before each test
|
|
21
|
-
vi.mocked(fs.realpathSync).mockRestore();
|
|
22
|
-
});
|
|
23
|
-
it('returns skipped strategy when realpathSync fails', async () => {
|
|
24
|
-
// Create a valid temp directory
|
|
25
|
-
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'diag-test-'));
|
|
26
|
-
try {
|
|
27
|
-
// Mock realpathSync to throw for this specific path
|
|
28
|
-
const actualFs = await vi.importActual('fs');
|
|
29
|
-
vi.mocked(fs.realpathSync).mockImplementation((p) => {
|
|
30
|
-
if (p === tmpDir || p.toString() === tmpDir) {
|
|
31
|
-
throw new Error('Mock realpathSync failure');
|
|
32
|
-
}
|
|
33
|
-
// Call the real implementation for other paths
|
|
34
|
-
return actualFs.realpathSync(p);
|
|
35
|
-
});
|
|
36
|
-
const result = await runDirectoryDiagnostics(tmpDir);
|
|
37
|
-
expect(result.strategy).toBe('skipped');
|
|
38
|
-
expect(result.success).toBe(true);
|
|
39
|
-
expect(result.errorCount).toBe(0);
|
|
40
|
-
expect(result.summary).toContain('cannot resolve directory path');
|
|
41
|
-
}
|
|
42
|
-
finally {
|
|
43
|
-
fs.rmdirSync(tmpDir);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
it('returns skipped strategy for non-existent directory', async () => {
|
|
47
|
-
const result = await runDirectoryDiagnostics('/nonexistent/path/that/does/not/exist');
|
|
48
|
-
expect(result.strategy).toBe('skipped');
|
|
49
|
-
expect(result.success).toBe(true);
|
|
50
|
-
expect(result.errorCount).toBe(0);
|
|
51
|
-
expect(result.summary).toContain('does not exist');
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
describe('invalidateExtensionCache', () => {
|
|
55
|
-
it('clears the cached extensions so next call recomputes', () => {
|
|
56
|
-
// First call populates the cache
|
|
57
|
-
const extensions1 = getAllSupportedExtensions();
|
|
58
|
-
expect(extensions1.length).toBeGreaterThan(0);
|
|
59
|
-
// Invalidate
|
|
60
|
-
invalidateExtensionCache();
|
|
61
|
-
// Second call should still return the same result (recomputed from same data)
|
|
62
|
-
const extensions2 = getAllSupportedExtensions();
|
|
63
|
-
expect(extensions2).toEqual(extensions1);
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
//# sourceMappingURL=integration.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser-tests.d.ts","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/parser-tests.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for diagnostic output parsers
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect } from 'vitest';
|
|
5
|
-
import { parseGoOutput } from '../go-runner.js';
|
|
6
|
-
import { parseRustOutput } from '../rust-runner.js';
|
|
7
|
-
import { parseMypyOutput, parsePylintOutput } from '../python-runner.js';
|
|
8
|
-
describe('parseGoOutput', () => {
|
|
9
|
-
it('parses go vet output correctly', () => {
|
|
10
|
-
const output = `main.go:10:5: unreachable code
|
|
11
|
-
pkg/util.go:25:12: result of fmt.Sprintf call not used`;
|
|
12
|
-
const result = parseGoOutput(output);
|
|
13
|
-
expect(result.diagnostics).toHaveLength(2);
|
|
14
|
-
expect(result.diagnostics[0]).toMatchObject({
|
|
15
|
-
file: 'main.go',
|
|
16
|
-
line: 10,
|
|
17
|
-
column: 5,
|
|
18
|
-
message: 'unreachable code',
|
|
19
|
-
severity: 'warning'
|
|
20
|
-
});
|
|
21
|
-
expect(result.warningCount).toBe(2);
|
|
22
|
-
});
|
|
23
|
-
it('returns empty for clean output', () => {
|
|
24
|
-
const result = parseGoOutput('');
|
|
25
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
26
|
-
expect(result.success).toBe(true);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
describe('parseRustOutput', () => {
|
|
30
|
-
it('parses cargo check errors', () => {
|
|
31
|
-
const output = `error[E0382]: borrow of moved value: \`x\`
|
|
32
|
-
--> src/main.rs:5:20
|
|
33
|
-
warning: unused variable: \`y\`
|
|
34
|
-
--> src/lib.rs:10:9`;
|
|
35
|
-
const result = parseRustOutput(output);
|
|
36
|
-
expect(result.diagnostics).toHaveLength(2);
|
|
37
|
-
expect(result.errorCount).toBe(1);
|
|
38
|
-
expect(result.warningCount).toBe(1);
|
|
39
|
-
expect(result.diagnostics[0]).toMatchObject({
|
|
40
|
-
file: 'src/main.rs',
|
|
41
|
-
line: 5,
|
|
42
|
-
column: 20,
|
|
43
|
-
code: 'E0382',
|
|
44
|
-
severity: 'error'
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
it('returns empty for clean output', () => {
|
|
48
|
-
const result = parseRustOutput('');
|
|
49
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
50
|
-
expect(result.success).toBe(true);
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
describe('parseMypyOutput', () => {
|
|
54
|
-
it('parses mypy errors', () => {
|
|
55
|
-
const output = `main.py:10:5: error: Incompatible types [arg-type]
|
|
56
|
-
utils.py:25:1: warning: Unused variable [unused-variable]
|
|
57
|
-
main.py:15:1: note: See docs for details`;
|
|
58
|
-
const result = parseMypyOutput(output);
|
|
59
|
-
expect(result.diagnostics).toHaveLength(2); // note should be skipped
|
|
60
|
-
expect(result.errorCount).toBe(1);
|
|
61
|
-
expect(result.warningCount).toBe(1);
|
|
62
|
-
expect(result.tool).toBe('mypy');
|
|
63
|
-
});
|
|
64
|
-
it('returns empty for clean output', () => {
|
|
65
|
-
const result = parseMypyOutput('');
|
|
66
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
67
|
-
expect(result.success).toBe(true);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe('parsePylintOutput', () => {
|
|
71
|
-
it('parses pylint errors', () => {
|
|
72
|
-
const output = `main.py:10:5: E0001: syntax error
|
|
73
|
-
main.py:20:0: W0611: Unused import`;
|
|
74
|
-
const result = parsePylintOutput(output);
|
|
75
|
-
expect(result.diagnostics).toHaveLength(2);
|
|
76
|
-
expect(result.errorCount).toBe(1);
|
|
77
|
-
expect(result.warningCount).toBe(1);
|
|
78
|
-
expect(result.tool).toBe('pylint');
|
|
79
|
-
});
|
|
80
|
-
it('returns empty for clean output', () => {
|
|
81
|
-
const result = parsePylintOutput('');
|
|
82
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
83
|
-
expect(result.success).toBe(true);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=parser-tests.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser-tests.js","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/parser-tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.test.d.ts","sourceRoot":"","sources":["../../../../src/tools/diagnostics/__tests__/parsers.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for diagnostic output parsers
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect } from 'vitest';
|
|
5
|
-
import { parseGoOutput } from '../go-runner.js';
|
|
6
|
-
import { parseTscOutput } from '../tsc-runner.js';
|
|
7
|
-
import { parseRustOutput } from '../rust-runner.js';
|
|
8
|
-
import { parseMypyOutput, parsePylintOutput } from '../python-runner.js';
|
|
9
|
-
describe('parseGoOutput', () => {
|
|
10
|
-
it('parses go vet output correctly', () => {
|
|
11
|
-
const output = `main.go:10:5: unreachable code
|
|
12
|
-
pkg/util.go:25:12: result of fmt.Sprintf call not used`;
|
|
13
|
-
const result = parseGoOutput(output);
|
|
14
|
-
expect(result.diagnostics).toHaveLength(2);
|
|
15
|
-
expect(result.diagnostics[0]).toMatchObject({
|
|
16
|
-
file: 'main.go',
|
|
17
|
-
line: 10,
|
|
18
|
-
column: 5,
|
|
19
|
-
message: 'unreachable code',
|
|
20
|
-
severity: 'warning'
|
|
21
|
-
});
|
|
22
|
-
expect(result.warningCount).toBe(2);
|
|
23
|
-
});
|
|
24
|
-
it('returns empty for clean output', () => {
|
|
25
|
-
const result = parseGoOutput('');
|
|
26
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
27
|
-
expect(result.success).toBe(true);
|
|
28
|
-
});
|
|
29
|
-
it('parses Windows-style paths correctly', () => {
|
|
30
|
-
const output = `C:\\Users\\dev\\project\\main.go:10:5: unreachable code`;
|
|
31
|
-
const result = parseGoOutput(output);
|
|
32
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
33
|
-
expect(result.diagnostics[0].file).toBe('C:\\Users\\dev\\project\\main.go');
|
|
34
|
-
expect(result.diagnostics[0].line).toBe(10);
|
|
35
|
-
expect(result.diagnostics[0].column).toBe(5);
|
|
36
|
-
});
|
|
37
|
-
it('handles Unicode filenames', () => {
|
|
38
|
-
const output = `pkg/日本語.go:5:3: unreachable code`;
|
|
39
|
-
const result = parseGoOutput(output);
|
|
40
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
41
|
-
expect(result.diagnostics[0].file).toBe('pkg/日本語.go');
|
|
42
|
-
});
|
|
43
|
-
it('handles malformed output gracefully', () => {
|
|
44
|
-
const result = parseGoOutput('not valid output\nrandom noise\n');
|
|
45
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
46
|
-
expect(result.success).toBe(true);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
describe('parseTscOutput', () => {
|
|
50
|
-
it('parses tsc errors correctly', () => {
|
|
51
|
-
const output = `src/index.ts(10,5): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
|
52
|
-
src/utils.ts(25,12): error TS2304: Cannot find name 'foo'.`;
|
|
53
|
-
const result = parseTscOutput(output);
|
|
54
|
-
expect(result.diagnostics).toHaveLength(2);
|
|
55
|
-
expect(result.errorCount).toBe(2);
|
|
56
|
-
expect(result.warningCount).toBe(0);
|
|
57
|
-
expect(result.success).toBe(false);
|
|
58
|
-
expect(result.diagnostics[0]).toMatchObject({
|
|
59
|
-
file: 'src/index.ts',
|
|
60
|
-
line: 10,
|
|
61
|
-
column: 5,
|
|
62
|
-
code: 'TS2345',
|
|
63
|
-
severity: 'error',
|
|
64
|
-
message: "Argument of type 'string' is not assignable to parameter of type 'number'."
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
it('parses tsc warnings correctly', () => {
|
|
68
|
-
const output = `src/index.ts(5,1): warning TS6133: 'x' is declared but its value is never read.`;
|
|
69
|
-
const result = parseTscOutput(output);
|
|
70
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
71
|
-
expect(result.errorCount).toBe(0);
|
|
72
|
-
expect(result.warningCount).toBe(1);
|
|
73
|
-
expect(result.success).toBe(true);
|
|
74
|
-
});
|
|
75
|
-
it('returns empty for clean output', () => {
|
|
76
|
-
const result = parseTscOutput('');
|
|
77
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
78
|
-
expect(result.success).toBe(true);
|
|
79
|
-
});
|
|
80
|
-
it('parses Windows-style paths correctly', () => {
|
|
81
|
-
const output = `C:\\Users\\dev\\src\\index.ts(10,5): error TS2345: Type mismatch.`;
|
|
82
|
-
const result = parseTscOutput(output);
|
|
83
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
84
|
-
expect(result.diagnostics[0].file).toBe('C:\\Users\\dev\\src\\index.ts');
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
describe('parseRustOutput', () => {
|
|
88
|
-
it('parses cargo check JSON errors', () => {
|
|
89
|
-
// Cargo JSON format: one JSON object per line
|
|
90
|
-
const output = [
|
|
91
|
-
'{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"borrow of moved value: `x`","code":{"code":"E0382","explanation":null},"level":"error","spans":[{"file_name":"src/main.rs","line_start":5,"line_end":5,"column_start":20,"column_end":21,"is_primary":true,"text":[],"label":null}],"children":[],"rendered":null}}',
|
|
92
|
-
'{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"unused variable: `y`","code":null,"level":"warning","spans":[{"file_name":"src/lib.rs","line_start":10,"line_end":10,"column_start":9,"column_end":10,"is_primary":true,"text":[],"label":null}],"children":[],"rendered":null}}'
|
|
93
|
-
].join('\n');
|
|
94
|
-
const result = parseRustOutput(output);
|
|
95
|
-
expect(result.diagnostics).toHaveLength(2);
|
|
96
|
-
expect(result.errorCount).toBe(1);
|
|
97
|
-
expect(result.warningCount).toBe(1);
|
|
98
|
-
expect(result.diagnostics[0]).toMatchObject({
|
|
99
|
-
file: 'src/main.rs',
|
|
100
|
-
line: 5,
|
|
101
|
-
column: 20,
|
|
102
|
-
code: 'E0382',
|
|
103
|
-
severity: 'error',
|
|
104
|
-
message: 'borrow of moved value: `x`'
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
it('returns empty for clean output', () => {
|
|
108
|
-
// Empty output or only build-finished message
|
|
109
|
-
const result = parseRustOutput('');
|
|
110
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
111
|
-
expect(result.success).toBe(true);
|
|
112
|
-
});
|
|
113
|
-
it('ignores non-compiler-message JSON lines', () => {
|
|
114
|
-
const output = [
|
|
115
|
-
'{"reason":"compiler-artifact","package_id":"test","target":{"name":"test"}}',
|
|
116
|
-
'{"reason":"build-finished","success":false}',
|
|
117
|
-
'{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"type mismatch","code":{"code":"E0308","explanation":null},"level":"error","spans":[{"file_name":"src/main.rs","line_start":3,"line_end":3,"column_start":18,"column_end":25,"is_primary":true,"text":[],"label":null}],"children":[],"rendered":null}}'
|
|
118
|
-
].join('\n');
|
|
119
|
-
const result = parseRustOutput(output);
|
|
120
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
121
|
-
expect(result.diagnostics[0].file).toBe('src/main.rs');
|
|
122
|
-
expect(result.diagnostics[0].code).toBe('E0308');
|
|
123
|
-
});
|
|
124
|
-
it('handles warnings without error codes', () => {
|
|
125
|
-
const output = '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"unused variable: `x`","code":null,"level":"warning","spans":[{"file_name":"src/lib.rs","line_start":3,"line_end":3,"column_start":9,"column_end":10,"is_primary":true,"text":[],"label":null}],"children":[],"rendered":null}}';
|
|
126
|
-
const result = parseRustOutput(output);
|
|
127
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
128
|
-
expect(result.diagnostics[0].code).toBe('');
|
|
129
|
-
expect(result.diagnostics[0].severity).toBe('warning');
|
|
130
|
-
});
|
|
131
|
-
it('skips messages without primary span', () => {
|
|
132
|
-
// Message with no spans or no primary span should be skipped
|
|
133
|
-
const output = '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"some note","code":null,"level":"note","spans":[],"children":[],"rendered":null}}';
|
|
134
|
-
const result = parseRustOutput(output);
|
|
135
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
136
|
-
});
|
|
137
|
-
it('uses primary span when multiple spans exist', () => {
|
|
138
|
-
// Multiple spans, only primary should be used for location
|
|
139
|
-
const output = '{"reason":"compiler-message","package_id":"test","manifest_path":"/test/Cargo.toml","target":{"name":"test"},"message":{"message":"mismatched types","code":{"code":"E0308","explanation":null},"level":"error","spans":[{"file_name":"src/other.rs","line_start":1,"line_end":1,"column_start":1,"column_end":2,"is_primary":false,"text":[],"label":"expected"},{"file_name":"src/main.rs","line_start":10,"line_end":10,"column_start":5,"column_end":15,"is_primary":true,"text":[],"label":"found"}],"children":[],"rendered":null}}';
|
|
140
|
-
const result = parseRustOutput(output);
|
|
141
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
142
|
-
expect(result.diagnostics[0].file).toBe('src/main.rs');
|
|
143
|
-
expect(result.diagnostics[0].line).toBe(10);
|
|
144
|
-
expect(result.diagnostics[0].column).toBe(5);
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
describe('parseMypyOutput', () => {
|
|
148
|
-
it('parses mypy errors', () => {
|
|
149
|
-
const output = `main.py:10:5: error: Incompatible types [arg-type]
|
|
150
|
-
utils.py:25:1: warning: Unused variable [unused-variable]
|
|
151
|
-
main.py:15:1: note: See docs for details`;
|
|
152
|
-
const result = parseMypyOutput(output);
|
|
153
|
-
expect(result.diagnostics).toHaveLength(2); // note should be skipped
|
|
154
|
-
expect(result.errorCount).toBe(1);
|
|
155
|
-
expect(result.warningCount).toBe(1);
|
|
156
|
-
expect(result.tool).toBe('mypy');
|
|
157
|
-
});
|
|
158
|
-
it('returns empty for clean output', () => {
|
|
159
|
-
const result = parseMypyOutput('');
|
|
160
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
161
|
-
expect(result.success).toBe(true);
|
|
162
|
-
});
|
|
163
|
-
it('parses Windows-style mypy paths', () => {
|
|
164
|
-
const output = `C:\\Users\\dev\\main.py:10:5: error: Incompatible types [arg-type]`;
|
|
165
|
-
const result = parseMypyOutput(output);
|
|
166
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
167
|
-
expect(result.diagnostics[0].file).toBe('C:\\Users\\dev\\main.py');
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
describe('parsePylintOutput', () => {
|
|
171
|
-
it('parses pylint errors', () => {
|
|
172
|
-
const output = `main.py:10:5: E0001: syntax error
|
|
173
|
-
main.py:20:0: W0611: Unused import`;
|
|
174
|
-
const result = parsePylintOutput(output);
|
|
175
|
-
expect(result.diagnostics).toHaveLength(2);
|
|
176
|
-
expect(result.errorCount).toBe(1);
|
|
177
|
-
expect(result.warningCount).toBe(1);
|
|
178
|
-
expect(result.tool).toBe('pylint');
|
|
179
|
-
});
|
|
180
|
-
it('returns empty for clean output', () => {
|
|
181
|
-
const result = parsePylintOutput('');
|
|
182
|
-
expect(result.diagnostics).toHaveLength(0);
|
|
183
|
-
expect(result.success).toBe(true);
|
|
184
|
-
});
|
|
185
|
-
it('classifies F (Fatal) codes as errors', () => {
|
|
186
|
-
const output = `main.py:1:0: F0001: error in module (fatal)`;
|
|
187
|
-
const result = parsePylintOutput(output);
|
|
188
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
189
|
-
expect(result.diagnostics[0].severity).toBe('error');
|
|
190
|
-
expect(result.errorCount).toBe(1);
|
|
191
|
-
});
|
|
192
|
-
it('parses Windows-style pylint paths', () => {
|
|
193
|
-
const output = `C:\\Users\\dev\\main.py:10:5: E0001: syntax error`;
|
|
194
|
-
const result = parsePylintOutput(output);
|
|
195
|
-
expect(result.diagnostics).toHaveLength(1);
|
|
196
|
-
expect(result.diagnostics[0].file).toBe('C:\\Users\\dev\\main.py');
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
//# sourceMappingURL=parsers.test.js.map
|