oh-my-claude-sisyphus 2.6.1 → 3.0.0
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/README.md +59 -785
- package/agents/analyst.md +85 -0
- package/agents/architect-low.md +88 -0
- package/agents/architect-medium.md +108 -0
- package/agents/architect.md +77 -0
- package/agents/critic.md +97 -0
- package/agents/designer-high.md +113 -0
- package/agents/designer-low.md +89 -0
- package/agents/designer.md +80 -0
- package/agents/executor-high.md +116 -0
- package/agents/executor-low.md +94 -0
- package/agents/executor.md +62 -0
- package/agents/explore-medium.md +113 -0
- package/agents/explore.md +86 -0
- package/agents/planner.md +164 -0
- package/agents/qa-tester.md +109 -0
- package/agents/researcher-low.md +84 -0
- package/agents/researcher.md +70 -0
- package/agents/vision.md +39 -0
- package/agents/writer.md +152 -0
- package/commands/.gitkeep +0 -0
- package/dist/__tests__/hooks.test.js +22 -22
- package/dist/__tests__/hooks.test.js.map +1 -1
- package/dist/__tests__/hud-agents.test.d.ts +7 -0
- package/dist/__tests__/hud-agents.test.d.ts.map +1 -0
- package/dist/__tests__/hud-agents.test.js +363 -0
- package/dist/__tests__/hud-agents.test.js.map +1 -0
- package/dist/__tests__/installer.test.js +184 -116
- package/dist/__tests__/installer.test.js.map +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__/mnemosyne/config.test.d.ts +2 -0
- package/dist/__tests__/mnemosyne/config.test.d.ts.map +1 -0
- package/dist/__tests__/mnemosyne/config.test.js +37 -0
- package/dist/__tests__/mnemosyne/config.test.js.map +1 -0
- package/dist/__tests__/mnemosyne/detector.test.d.ts +2 -0
- package/dist/__tests__/mnemosyne/detector.test.d.ts.map +1 -0
- package/dist/__tests__/mnemosyne/detector.test.js +99 -0
- package/dist/__tests__/mnemosyne/detector.test.js.map +1 -0
- package/dist/__tests__/mnemosyne/finder.test.d.ts +2 -0
- package/dist/__tests__/mnemosyne/finder.test.d.ts.map +1 -0
- package/dist/__tests__/mnemosyne/finder.test.js +61 -0
- package/dist/__tests__/mnemosyne/finder.test.js.map +1 -0
- package/dist/__tests__/mnemosyne/loader.test.d.ts +2 -0
- package/dist/__tests__/mnemosyne/loader.test.d.ts.map +1 -0
- package/dist/__tests__/mnemosyne/loader.test.js +73 -0
- package/dist/__tests__/mnemosyne/loader.test.js.map +1 -0
- package/dist/__tests__/mnemosyne/parser.test.d.ts +2 -0
- package/dist/__tests__/mnemosyne/parser.test.d.ts.map +1 -0
- package/dist/__tests__/mnemosyne/parser.test.js +81 -0
- package/dist/__tests__/mnemosyne/parser.test.js.map +1 -0
- package/dist/__tests__/mnemosyne/validator.test.d.ts +2 -0
- package/dist/__tests__/mnemosyne/validator.test.d.ts.map +1 -0
- package/dist/__tests__/mnemosyne/validator.test.js +85 -0
- package/dist/__tests__/mnemosyne/validator.test.js.map +1 -0
- package/dist/__tests__/model-routing.test.js +34 -34
- package/dist/__tests__/model-routing.test.js.map +1 -1
- package/dist/__tests__/notepad.test.js +7 -7
- package/dist/__tests__/notepad.test.js.map +1 -1
- package/dist/__tests__/ralph-prd.test.js +12 -12
- package/dist/__tests__/ralph-prd.test.js.map +1 -1
- package/dist/__tests__/ralph-progress.test.js +12 -12
- package/dist/__tests__/ralph-progress.test.js.map +1 -1
- package/dist/__tests__/skills.test.js +50 -17
- package/dist/__tests__/skills.test.js.map +1 -1
- package/dist/__tests__/types.test.js +5 -5
- package/dist/__tests__/types.test.js.map +1 -1
- package/dist/agents/analyst.d.ts +11 -0
- package/dist/agents/analyst.d.ts.map +1 -0
- package/dist/agents/analyst.js +115 -0
- package/dist/agents/analyst.js.map +1 -0
- package/dist/agents/architect.d.ts +12 -0
- package/dist/agents/architect.d.ts.map +1 -0
- package/dist/agents/architect.js +189 -0
- package/dist/agents/architect.js.map +1 -0
- package/dist/agents/coordinator.d.ts +11 -0
- package/dist/agents/coordinator.d.ts.map +1 -0
- package/dist/agents/coordinator.js +115 -0
- package/dist/agents/coordinator.js.map +1 -0
- package/dist/agents/critic.d.ts +11 -0
- package/dist/agents/critic.d.ts.map +1 -0
- package/dist/agents/critic.js +127 -0
- package/dist/agents/critic.js.map +1 -0
- package/dist/agents/definitions.d.ts +33 -70
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +140 -1268
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/designer.d.ts +11 -0
- package/dist/agents/designer.d.ts.map +1 -0
- package/dist/agents/designer.js +115 -0
- package/dist/agents/designer.js.map +1 -0
- package/dist/agents/executor.d.ts +12 -0
- package/dist/agents/executor.d.ts.map +1 -0
- package/dist/agents/executor.js +93 -0
- package/dist/agents/executor.js.map +1 -0
- package/dist/agents/explore.js +4 -4
- package/dist/agents/explore.js.map +1 -1
- package/dist/agents/index.d.ts +12 -11
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +15 -16
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/planner.d.ts +11 -0
- package/dist/agents/planner.d.ts.map +1 -0
- package/dist/agents/planner.js +194 -0
- package/dist/agents/planner.js.map +1 -0
- package/dist/agents/qa-tester.js +16 -16
- package/dist/agents/qa-tester.js.map +1 -1
- package/dist/agents/researcher.d.ts +12 -0
- package/dist/agents/researcher.d.ts.map +1 -0
- package/dist/agents/researcher.js +103 -0
- package/dist/agents/researcher.js.map +1 -0
- package/dist/agents/vision.d.ts +11 -0
- package/dist/agents/vision.d.ts.map +1 -0
- package/dist/agents/vision.js +70 -0
- package/dist/agents/vision.js.map +1 -0
- package/dist/agents/writer.d.ts +11 -0
- package/dist/agents/writer.d.ts.map +1 -0
- package/dist/agents/writer.js +209 -0
- package/dist/agents/writer.js.map +1 -0
- package/dist/cli/index.js +32 -32
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/index.d.ts +4 -4
- package/dist/commands/index.js +4 -4
- package/dist/config/loader.js +25 -25
- package/dist/config/loader.js.map +1 -1
- package/dist/features/auto-update.d.ts +5 -5
- package/dist/features/auto-update.d.ts.map +1 -1
- package/dist/features/auto-update.js +17 -17
- package/dist/features/auto-update.js.map +1 -1
- package/dist/features/background-agent/manager.js +1 -1
- package/dist/features/background-agent/manager.js.map +1 -1
- package/dist/features/boulder-state/constants.d.ts +5 -5
- package/dist/features/boulder-state/constants.d.ts.map +1 -1
- package/dist/features/boulder-state/constants.js +3 -3
- package/dist/features/boulder-state/constants.js.map +1 -1
- package/dist/features/boulder-state/index.d.ts +2 -2
- package/dist/features/boulder-state/index.d.ts.map +1 -1
- package/dist/features/boulder-state/index.js +2 -2
- package/dist/features/boulder-state/index.js.map +1 -1
- package/dist/features/boulder-state/storage.d.ts +3 -3
- package/dist/features/boulder-state/storage.d.ts.map +1 -1
- package/dist/features/boulder-state/storage.js +6 -6
- package/dist/features/boulder-state/storage.js.map +1 -1
- package/dist/features/builtin-skills/skills.d.ts +15 -1
- package/dist/features/builtin-skills/skills.d.ts.map +1 -1
- package/dist/features/builtin-skills/skills.js +100 -1110
- package/dist/features/builtin-skills/skills.js.map +1 -1
- package/dist/features/context-injector/types.d.ts +1 -1
- package/dist/features/context-injector/types.d.ts.map +1 -1
- package/dist/features/index.d.ts +1 -1
- package/dist/features/index.d.ts.map +1 -1
- package/dist/features/index.js +2 -2
- package/dist/features/index.js.map +1 -1
- package/dist/features/magic-keywords.js +14 -14
- package/dist/features/magic-keywords.js.map +1 -1
- package/dist/features/model-routing/prompts/opus.d.ts +1 -1
- package/dist/features/model-routing/prompts/opus.d.ts.map +1 -1
- package/dist/features/model-routing/prompts/opus.js +1 -1
- package/dist/features/model-routing/router.d.ts +1 -1
- package/dist/features/model-routing/router.js +14 -14
- package/dist/features/model-routing/router.js.map +1 -1
- package/dist/features/model-routing/rules.js +31 -31
- package/dist/features/model-routing/rules.js.map +1 -1
- package/dist/features/model-routing/types.js +1 -1
- package/dist/features/model-routing/types.js.map +1 -1
- package/dist/hooks/agent-usage-reminder/constants.d.ts +2 -2
- package/dist/hooks/agent-usage-reminder/constants.d.ts.map +1 -1
- package/dist/hooks/agent-usage-reminder/constants.js +5 -5
- package/dist/hooks/agent-usage-reminder/constants.js.map +1 -1
- package/dist/hooks/auto-slash-command/constants.d.ts +1 -1
- package/dist/hooks/auto-slash-command/constants.d.ts.map +1 -1
- package/dist/hooks/auto-slash-command/constants.js +9 -2
- package/dist/hooks/auto-slash-command/constants.js.map +1 -1
- package/dist/hooks/bridge.d.ts +2 -2
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +50 -18
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/directory-readme-injector/constants.d.ts +1 -1
- package/dist/hooks/directory-readme-injector/constants.d.ts.map +1 -1
- package/dist/hooks/directory-readme-injector/constants.js +2 -2
- package/dist/hooks/directory-readme-injector/constants.js.map +1 -1
- package/dist/hooks/index.d.ts +3 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +9 -4
- package/dist/hooks/index.js.map +1 -1
- 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/learner/config.d.ts +53 -0
- package/dist/hooks/learner/config.d.ts.map +1 -0
- package/dist/hooks/learner/config.js +103 -0
- package/dist/hooks/learner/config.js.map +1 -0
- package/dist/hooks/learner/constants.d.ts +24 -0
- package/dist/hooks/learner/constants.d.ts.map +1 -0
- package/dist/hooks/learner/constants.js +26 -0
- package/dist/hooks/learner/constants.js.map +1 -0
- package/dist/hooks/learner/detection-hook.d.ts +39 -0
- package/dist/hooks/learner/detection-hook.d.ts.map +1 -0
- package/dist/hooks/learner/detection-hook.js +83 -0
- package/dist/hooks/learner/detection-hook.js.map +1 -0
- package/dist/hooks/learner/detector.d.ts +30 -0
- package/dist/hooks/learner/detector.d.ts.map +1 -0
- package/dist/hooks/learner/detector.js +150 -0
- package/dist/hooks/learner/detector.js.map +1 -0
- package/dist/hooks/learner/finder.d.ts +21 -0
- package/dist/hooks/learner/finder.d.ts.map +1 -0
- package/dist/hooks/learner/finder.js +117 -0
- package/dist/hooks/learner/finder.js.map +1 -0
- package/dist/hooks/learner/index.d.ts +62 -0
- package/dist/hooks/learner/index.d.ts.map +1 -0
- package/dist/hooks/learner/index.js +137 -0
- package/dist/hooks/learner/index.js.map +1 -0
- package/dist/hooks/learner/loader.d.ts +20 -0
- package/dist/hooks/learner/loader.d.ts.map +1 -0
- package/dist/hooks/learner/loader.js +113 -0
- package/dist/hooks/learner/loader.js.map +1 -0
- package/dist/hooks/learner/parser.d.ts +21 -0
- package/dist/hooks/learner/parser.d.ts.map +1 -0
- package/dist/hooks/learner/parser.js +190 -0
- package/dist/hooks/learner/parser.js.map +1 -0
- package/dist/hooks/learner/promotion.d.ts +29 -0
- package/dist/hooks/learner/promotion.d.ts.map +1 -0
- package/dist/hooks/learner/promotion.js +87 -0
- package/dist/hooks/learner/promotion.js.map +1 -0
- package/dist/hooks/learner/types.d.ts +109 -0
- package/dist/hooks/learner/types.d.ts.map +1 -0
- package/dist/hooks/learner/types.js +8 -0
- package/dist/hooks/learner/types.js.map +1 -0
- package/dist/hooks/learner/validator.d.ts +15 -0
- package/dist/hooks/learner/validator.d.ts.map +1 -0
- package/dist/hooks/learner/validator.js +87 -0
- package/dist/hooks/learner/validator.js.map +1 -0
- package/dist/hooks/learner/writer.d.ts +27 -0
- package/dist/hooks/learner/writer.d.ts.map +1 -0
- package/dist/hooks/learner/writer.js +126 -0
- package/dist/hooks/learner/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/notepad/index.d.ts +2 -2
- package/dist/hooks/notepad/index.js +7 -7
- package/dist/hooks/notepad/index.js.map +1 -1
- package/dist/hooks/omc-orchestrator/constants.d.ts +23 -0
- package/dist/hooks/omc-orchestrator/constants.d.ts.map +1 -0
- package/dist/hooks/omc-orchestrator/constants.js +142 -0
- package/dist/hooks/omc-orchestrator/constants.js.map +1 -0
- package/dist/hooks/omc-orchestrator/index.d.ts +113 -0
- package/dist/hooks/omc-orchestrator/index.d.ts.map +1 -0
- package/dist/hooks/omc-orchestrator/index.js +309 -0
- package/dist/hooks/omc-orchestrator/index.js.map +1 -0
- package/dist/hooks/persistent-mode/index.d.ts +4 -4
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
- package/dist/hooks/persistent-mode/index.js +37 -37
- package/dist/hooks/persistent-mode/index.js.map +1 -1
- package/dist/hooks/ralph-loop/index.d.ts +33 -5
- package/dist/hooks/ralph-loop/index.d.ts.map +1 -1
- package/dist/hooks/ralph-loop/index.js +91 -17
- package/dist/hooks/ralph-loop/index.js.map +1 -1
- package/dist/hooks/ralph-prd/index.d.ts +4 -4
- package/dist/hooks/ralph-prd/index.d.ts.map +1 -1
- package/dist/hooks/ralph-prd/index.js +13 -13
- package/dist/hooks/ralph-prd/index.js.map +1 -1
- package/dist/hooks/ralph-progress/index.d.ts +5 -5
- package/dist/hooks/ralph-progress/index.d.ts.map +1 -1
- package/dist/hooks/ralph-progress/index.js +14 -14
- package/dist/hooks/ralph-progress/index.js.map +1 -1
- package/dist/hooks/ralph-verifier/index.d.ts +23 -23
- package/dist/hooks/ralph-verifier/index.d.ts.map +1 -1
- package/dist/hooks/ralph-verifier/index.js +41 -41
- package/dist/hooks/ralph-verifier/index.js.map +1 -1
- package/dist/hooks/rules-injector/constants.d.ts +1 -1
- package/dist/hooks/rules-injector/constants.d.ts.map +1 -1
- package/dist/hooks/rules-injector/constants.js +2 -2
- package/dist/hooks/rules-injector/constants.js.map +1 -1
- package/dist/hooks/todo-continuation/index.js +1 -1
- package/dist/hooks/todo-continuation/index.js.map +1 -1
- package/dist/hooks/ultraqa-loop/index.d.ts +1 -1
- package/dist/hooks/ultraqa-loop/index.js +8 -8
- package/dist/hooks/ultraqa-loop/index.js.map +1 -1
- package/dist/hooks/ultrawork-state/index.js +7 -7
- package/dist/hooks/ultrawork-state/index.js.map +1 -1
- package/dist/hud/background-tasks.d.ts +26 -0
- package/dist/hud/background-tasks.d.ts.map +1 -0
- package/dist/hud/background-tasks.js +116 -0
- package/dist/hud/background-tasks.js.map +1 -0
- package/dist/hud/colors.d.ts +54 -0
- package/dist/hud/colors.d.ts.map +1 -0
- package/dist/hud/colors.js +156 -0
- package/dist/hud/colors.js.map +1 -0
- package/dist/hud/elements/agents.d.ts +73 -0
- package/dist/hud/elements/agents.d.ts.map +1 -0
- package/dist/hud/elements/agents.js +405 -0
- package/dist/hud/elements/agents.js.map +1 -0
- package/dist/hud/elements/background.d.ts +20 -0
- package/dist/hud/elements/background.d.ts.map +1 -0
- package/dist/hud/elements/background.js +70 -0
- package/dist/hud/elements/background.js.map +1 -0
- package/dist/hud/elements/context.d.ts +19 -0
- package/dist/hud/elements/context.d.ts.map +1 -0
- package/dist/hud/elements/context.js +58 -0
- package/dist/hud/elements/context.js.map +1 -0
- package/dist/hud/elements/index.d.ts +17 -0
- package/dist/hud/elements/index.d.ts.map +1 -0
- package/dist/hud/elements/index.js +17 -0
- package/dist/hud/elements/index.js.map +1 -0
- package/dist/hud/elements/limits.d.ts +19 -0
- package/dist/hud/elements/limits.d.ts.map +1 -0
- package/dist/hud/elements/limits.js +54 -0
- package/dist/hud/elements/limits.js.map +1 -0
- package/dist/hud/elements/permission.d.ts +13 -0
- package/dist/hud/elements/permission.d.ts.map +1 -0
- package/dist/hud/elements/permission.js +20 -0
- package/dist/hud/elements/permission.js.map +1 -0
- package/dist/hud/elements/prd.d.ts +20 -0
- package/dist/hud/elements/prd.d.ts.map +1 -0
- package/dist/hud/elements/prd.js +52 -0
- package/dist/hud/elements/prd.js.map +1 -0
- package/dist/hud/elements/ralph.d.ts +14 -0
- package/dist/hud/elements/ralph.d.ts.map +1 -0
- package/dist/hud/elements/ralph.js +36 -0
- package/dist/hud/elements/ralph.js.map +1 -0
- package/dist/hud/elements/session.d.ts +13 -0
- package/dist/hud/elements/session.d.ts.map +1 -0
- package/dist/hud/elements/session.js +24 -0
- package/dist/hud/elements/session.js.map +1 -0
- package/dist/hud/elements/skills.d.ts +24 -0
- package/dist/hud/elements/skills.d.ts.map +1 -0
- package/dist/hud/elements/skills.js +81 -0
- package/dist/hud/elements/skills.js.map +1 -0
- package/dist/hud/elements/thinking.d.ts +13 -0
- package/dist/hud/elements/thinking.d.ts.map +1 -0
- package/dist/hud/elements/thinking.js +19 -0
- package/dist/hud/elements/thinking.js.map +1 -0
- package/dist/hud/elements/todos.d.ts +20 -0
- package/dist/hud/elements/todos.d.ts.map +1 -0
- package/dist/hud/elements/todos.js +70 -0
- package/dist/hud/elements/todos.js.map +1 -0
- package/dist/hud/index.d.ts +9 -0
- package/dist/hud/index.d.ts.map +1 -0
- package/dist/hud/index.js +89 -0
- package/dist/hud/index.js.map +1 -0
- package/dist/hud/omc-state.d.ts +31 -0
- package/dist/hud/omc-state.d.ts.map +1 -0
- package/dist/hud/omc-state.js +163 -0
- package/dist/hud/omc-state.js.map +1 -0
- package/dist/hud/render.d.ts +11 -0
- package/dist/hud/render.d.ts.map +1 -0
- package/dist/hud/render.js +121 -0
- package/dist/hud/render.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/hud/state.d.ts +43 -0
- package/dist/hud/state.d.ts.map +1 -0
- package/dist/hud/state.js +201 -0
- package/dist/hud/state.js.map +1 -0
- package/dist/hud/stdin.d.ts +22 -0
- package/dist/hud/stdin.d.ts.map +1 -0
- package/dist/hud/stdin.js +65 -0
- package/dist/hud/stdin.js.map +1 -0
- package/dist/hud/transcript.d.ts +32 -0
- package/dist/hud/transcript.d.ts.map +1 -0
- package/dist/hud/transcript.js +364 -0
- package/dist/hud/transcript.js.map +1 -0
- package/dist/hud/types.d.ts +178 -0
- package/dist/hud/types.d.ts.map +1 -0
- package/dist/hud/types.js +119 -0
- package/dist/hud/types.js.map +1 -0
- package/dist/hud/usage-api.d.ts +24 -0
- package/dist/hud/usage-api.d.ts.map +1 -0
- package/dist/hud/usage-api.js +234 -0
- package/dist/hud/usage-api.js.map +1 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -12
- package/dist/index.js.map +1 -1
- package/dist/installer/hooks.d.ts +36 -64
- package/dist/installer/hooks.d.ts.map +1 -1
- package/dist/installer/hooks.js +91 -1298
- package/dist/installer/hooks.js.map +1 -1
- package/dist/installer/index.d.ts +23 -22
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +307 -2575
- package/dist/installer/index.js.map +1 -1
- package/dist/shared/types.d.ts +6 -6
- package/dist/shared/types.d.ts.map +1 -1
- package/docs/ARCHITECTURE.md +386 -0
- package/docs/CLAUDE.md +281 -0
- package/docs/FULL-README.md +822 -0
- package/docs/LOCAL_PLUGIN_INSTALL.md +94 -0
- package/docs/MIGRATION-v3.md +186 -0
- package/docs/MIGRATION.md +460 -0
- package/docs/TIERED_AGENTS_V2.md +322 -0
- package/hooks/hooks.json +70 -0
- package/hooks/keyword-detector.sh +102 -0
- package/hooks/persistent-mode.sh +172 -0
- package/hooks/session-start.sh +62 -0
- package/hooks/stop-continuation.sh +40 -0
- package/package.json +14 -8
- package/scripts/install.sh +90 -72
- package/scripts/keyword-detector.mjs +1 -1
- package/scripts/persistent-mode.mjs +9 -9
- package/scripts/persistent-mode.sh +21 -10
- package/scripts/plugin-setup.mjs +109 -0
- package/scripts/pre-tool-enforcer.mjs +1 -1
- package/scripts/pre-tool-enforcer.sh +1 -1
- package/scripts/session-start.mjs +38 -3
- package/scripts/skill-injector.mjs +231 -0
- package/scripts/uninstall.sh +8 -8
- package/skills/analyze/SKILL.md +47 -0
- package/skills/cancel-ralph/SKILL.md +43 -0
- package/skills/cancel-ultraqa/SKILL.md +29 -0
- package/skills/cancel-ultrawork/SKILL.md +42 -0
- package/skills/deepinit/SKILL.md +321 -0
- package/skills/deepsearch/SKILL.md +39 -0
- package/skills/doctor/SKILL.md +192 -0
- package/skills/frontend-ui-ux/SKILL.md +53 -0
- package/skills/git-master/SKILL.md +58 -0
- package/skills/help/SKILL.md +66 -0
- package/skills/hud/SKILL.md +142 -0
- package/skills/learner/SKILL.md +136 -0
- package/skills/note/SKILL.md +63 -0
- package/skills/omc-default/SKILL.md +78 -0
- package/skills/omc-default-global/SKILL.md +75 -0
- package/skills/omc-setup/SKILL.md +144 -0
- package/skills/orchestrate/SKILL.md +409 -0
- package/skills/plan/SKILL.md +37 -0
- package/skills/planner/SKILL.md +43 -0
- package/skills/ralph/SKILL.md +101 -0
- package/skills/ralph-init/SKILL.md +61 -0
- package/skills/ralplan/SKILL.md +219 -0
- package/skills/release/SKILL.md +84 -0
- package/skills/review/SKILL.md +37 -0
- package/skills/ultraqa/SKILL.md +123 -0
- package/skills/ultrawork/SKILL.md +89 -0
|
@@ -21,22 +21,22 @@ fi
|
|
|
21
21
|
|
|
22
22
|
# Check for active ultrawork state
|
|
23
23
|
ULTRAWORK_STATE=""
|
|
24
|
-
if [ -f "$DIRECTORY/.
|
|
25
|
-
ULTRAWORK_STATE=$(cat "$DIRECTORY/.
|
|
24
|
+
if [ -f "$DIRECTORY/.omc/ultrawork-state.json" ]; then
|
|
25
|
+
ULTRAWORK_STATE=$(cat "$DIRECTORY/.omc/ultrawork-state.json" 2>/dev/null)
|
|
26
26
|
elif [ -f "$HOME/.claude/ultrawork-state.json" ]; then
|
|
27
27
|
ULTRAWORK_STATE=$(cat "$HOME/.claude/ultrawork-state.json" 2>/dev/null)
|
|
28
28
|
fi
|
|
29
29
|
|
|
30
30
|
# Check for active ralph loop
|
|
31
31
|
RALPH_STATE=""
|
|
32
|
-
if [ -f "$DIRECTORY/.
|
|
33
|
-
RALPH_STATE=$(cat "$DIRECTORY/.
|
|
32
|
+
if [ -f "$DIRECTORY/.omc/ralph-state.json" ]; then
|
|
33
|
+
RALPH_STATE=$(cat "$DIRECTORY/.omc/ralph-state.json" 2>/dev/null)
|
|
34
34
|
fi
|
|
35
35
|
|
|
36
36
|
# Check for verification state (oracle verification)
|
|
37
37
|
VERIFICATION_STATE=""
|
|
38
|
-
if [ -f "$DIRECTORY/.
|
|
39
|
-
VERIFICATION_STATE=$(cat "$DIRECTORY/.
|
|
38
|
+
if [ -f "$DIRECTORY/.omc/ralph-verification.json" ]; then
|
|
39
|
+
VERIFICATION_STATE=$(cat "$DIRECTORY/.omc/ralph-verification.json" 2>/dev/null)
|
|
40
40
|
fi
|
|
41
41
|
|
|
42
42
|
# Check for incomplete todos
|
|
@@ -58,7 +58,7 @@ if [ -d "$TODOS_DIR" ]; then
|
|
|
58
58
|
fi
|
|
59
59
|
|
|
60
60
|
# Check project todos as well
|
|
61
|
-
for todo_path in "$DIRECTORY/.
|
|
61
|
+
for todo_path in "$DIRECTORY/.omc/todos.json" "$DIRECTORY/.claude/todos.json"; do
|
|
62
62
|
if [ -f "$todo_path" ]; then
|
|
63
63
|
if command -v jq &> /dev/null; then
|
|
64
64
|
COUNT=$(jq 'if type == "array" then [.[] | select(.status != "completed" and .status != "cancelled")] | length else 0 end' "$todo_path" 2>/dev/null || echo "0")
|
|
@@ -106,11 +106,22 @@ EOF
|
|
|
106
106
|
if [ "$ITERATION" -lt "$MAX_ITER" ]; then
|
|
107
107
|
# Increment iteration
|
|
108
108
|
NEW_ITER=$((ITERATION + 1))
|
|
109
|
-
echo "$RALPH_STATE" | jq ".iteration = $NEW_ITER" > "$DIRECTORY/.
|
|
109
|
+
echo "$RALPH_STATE" | jq ".iteration = $NEW_ITER" > "$DIRECTORY/.omc/ralph-state.json" 2>/dev/null
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
# Check if ultrawork is linked (auto-activated with ralph)
|
|
112
|
+
LINKED_ULTRAWORK=$(echo "$RALPH_STATE" | jq -r '.linked_ultrawork // false' 2>/dev/null)
|
|
113
|
+
|
|
114
|
+
if [ "$LINKED_ULTRAWORK" = "true" ]; then
|
|
115
|
+
# Combined ralph+ultrawork message with parallel execution rules
|
|
116
|
+
cat << EOF
|
|
117
|
+
{"continue": false, "reason": "<ralph-ultrawork-continuation>\n\n[RALPH + ULTRAWORK - ITERATION $NEW_ITER/$MAX_ITER]\n\nYour previous attempt did not output the completion promise. The work is NOT done yet.\n\n## ULTRAWORK RULES (ACTIVE)\n- **PARALLEL**: Fire independent calls simultaneously - NEVER wait sequentially\n- **BACKGROUND FIRST**: Use Task(run_in_background=true) for long operations\n- **DELEGATE**: Route tasks to specialist agents immediately\n- **SMART ROUTING**: Use haiku for lookups, sonnet for standard work, opus for complex analysis\n- **TODO**: Track EVERY step. Mark complete IMMEDIATELY.\n\n## COMPLETION REQUIREMENTS\n1. Review your progress and the original task\n2. Check your todo list - are ALL items marked complete?\n3. Continue from where you left off using PARALLEL execution\n4. Get Architect verification when ready\n5. When FULLY complete AND verified, output: <promise>$PROMISE</promise>\n6. Do NOT stop until the task is truly done\n\nOriginal task: $PROMPT\n\n</ralph-ultrawork-continuation>\n\n---\n"}
|
|
118
|
+
EOF
|
|
119
|
+
else
|
|
120
|
+
# Standard ralph-only message
|
|
121
|
+
cat << EOF
|
|
112
122
|
{"continue": false, "reason": "<ralph-loop-continuation>\n\n[RALPH LOOP - ITERATION $NEW_ITER/$MAX_ITER]\n\nYour previous attempt did not output the completion promise. The work is NOT done yet.\n\nCRITICAL INSTRUCTIONS:\n1. Review your progress and the original task\n2. Check your todo list - are ALL items marked complete?\n3. Continue from where you left off\n4. When FULLY complete, output: <promise>$PROMISE</promise>\n5. Do NOT stop until the task is truly done\n\nOriginal task: $PROMPT\n\n</ralph-loop-continuation>\n\n---\n"}
|
|
113
123
|
EOF
|
|
124
|
+
fi
|
|
114
125
|
exit 0
|
|
115
126
|
fi
|
|
116
127
|
fi
|
|
@@ -277,7 +288,7 @@ if [ -n "$ULTRAWORK_STATE" ] && [ "$INCOMPLETE_COUNT" -gt 0 ]; then
|
|
|
277
288
|
|
|
278
289
|
# Update state file (best effort)
|
|
279
290
|
if command -v jq &> /dev/null; then
|
|
280
|
-
echo "$ULTRAWORK_STATE" | jq ".reinforcement_count = $NEW_COUNT | .last_checked_at = \"$(date -Iseconds)\"" > "$DIRECTORY/.
|
|
291
|
+
echo "$ULTRAWORK_STATE" | jq ".reinforcement_count = $NEW_COUNT | .last_checked_at = \"$(date -Iseconds)\"" > "$DIRECTORY/.omc/ultrawork-state.json" 2>/dev/null
|
|
281
292
|
fi
|
|
282
293
|
|
|
283
294
|
cat << EOF
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Plugin Post-Install Setup
|
|
4
|
+
*
|
|
5
|
+
* Configures HUD statusline when plugin is installed.
|
|
6
|
+
* This runs after `claude plugin install oh-my-claudecode@oh-my-claudecode`
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, chmodSync } from 'node:fs';
|
|
10
|
+
import { homedir } from 'node:os';
|
|
11
|
+
import { join, dirname } from 'node:path';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
13
|
+
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
|
|
17
|
+
const CLAUDE_DIR = join(homedir(), '.claude');
|
|
18
|
+
const HUD_DIR = join(CLAUDE_DIR, 'hud');
|
|
19
|
+
const SETTINGS_FILE = join(CLAUDE_DIR, 'settings.json');
|
|
20
|
+
|
|
21
|
+
console.log('[Sisyphus] Running post-install setup...');
|
|
22
|
+
|
|
23
|
+
// 1. Create HUD directory
|
|
24
|
+
if (!existsSync(HUD_DIR)) {
|
|
25
|
+
mkdirSync(HUD_DIR, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// 2. Create HUD wrapper script
|
|
29
|
+
const hudScriptPath = join(HUD_DIR, 'sisyphus-hud.mjs');
|
|
30
|
+
const hudScript = `#!/usr/bin/env node
|
|
31
|
+
/**
|
|
32
|
+
* Sisyphus HUD - Statusline Script
|
|
33
|
+
* Wrapper that imports from plugin cache or development paths
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
37
|
+
import { homedir } from "node:os";
|
|
38
|
+
import { join } from "node:path";
|
|
39
|
+
|
|
40
|
+
async function main() {
|
|
41
|
+
const home = homedir();
|
|
42
|
+
|
|
43
|
+
// 1. Try plugin cache first (preferred for 3.0.0+)
|
|
44
|
+
const pluginCacheBase = join(home, ".claude/plugins/cache/oh-my-claudecode/oh-my-claudecode");
|
|
45
|
+
if (existsSync(pluginCacheBase)) {
|
|
46
|
+
try {
|
|
47
|
+
const versions = readdirSync(pluginCacheBase);
|
|
48
|
+
if (versions.length > 0) {
|
|
49
|
+
const latestVersion = versions.sort().reverse()[0];
|
|
50
|
+
const pluginPath = join(pluginCacheBase, latestVersion, "dist/hud/index.js");
|
|
51
|
+
if (existsSync(pluginPath)) {
|
|
52
|
+
await import(pluginPath);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
} catch { /* continue */ }
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 2. Development paths
|
|
60
|
+
const devPaths = [
|
|
61
|
+
join(home, "Workspace/oh-my-claudecode/dist/hud/index.js"),
|
|
62
|
+
join(home, "workspace/oh-my-claudecode/dist/hud/index.js"),
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
for (const devPath of devPaths) {
|
|
66
|
+
if (existsSync(devPath)) {
|
|
67
|
+
try {
|
|
68
|
+
await import(devPath);
|
|
69
|
+
return;
|
|
70
|
+
} catch { /* continue */ }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 3. Fallback
|
|
75
|
+
console.log("[SISYPHUS] active");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
main();
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
writeFileSync(hudScriptPath, hudScript);
|
|
82
|
+
try {
|
|
83
|
+
chmodSync(hudScriptPath, 0o755);
|
|
84
|
+
} catch { /* Windows doesn't need this */ }
|
|
85
|
+
console.log('[Sisyphus] Installed HUD wrapper script');
|
|
86
|
+
|
|
87
|
+
// 3. Configure settings.json
|
|
88
|
+
try {
|
|
89
|
+
let settings = {};
|
|
90
|
+
if (existsSync(SETTINGS_FILE)) {
|
|
91
|
+
settings = JSON.parse(readFileSync(SETTINGS_FILE, 'utf-8'));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Add statusLine if not configured
|
|
95
|
+
if (!settings.statusLine) {
|
|
96
|
+
settings.statusLine = {
|
|
97
|
+
type: 'command',
|
|
98
|
+
command: `node ${hudScriptPath}`
|
|
99
|
+
};
|
|
100
|
+
writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2));
|
|
101
|
+
console.log('[Sisyphus] Configured HUD statusLine in settings.json');
|
|
102
|
+
} else {
|
|
103
|
+
console.log('[Sisyphus] statusLine already configured, skipping');
|
|
104
|
+
}
|
|
105
|
+
} catch (e) {
|
|
106
|
+
console.log('[Sisyphus] Warning: Could not configure settings.json:', e.message);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
console.log('[Sisyphus] Setup complete! Restart Claude Code to activate HUD.');
|
|
@@ -19,7 +19,7 @@ toolName=$(extract_json_field "toolName" "unknown")
|
|
|
19
19
|
directory=$(extract_json_field "directory" "")
|
|
20
20
|
|
|
21
21
|
# Try to get todo count from todo list file (if exists)
|
|
22
|
-
todo_file="${directory}/.
|
|
22
|
+
todo_file="${directory}/.omc/todos.json"
|
|
23
23
|
todo_status=""
|
|
24
24
|
if [[ -f "$todo_file" ]] && command -v jq &> /dev/null; then
|
|
25
25
|
pending=$(jq -r '[.todos[] | select(.status == "pending")] | length' "$todo_file" 2>/dev/null || echo "0")
|
|
@@ -46,6 +46,33 @@ function countIncompleteTodos(todosDir) {
|
|
|
46
46
|
return count;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
// Check if HUD is properly installed
|
|
50
|
+
function checkHudInstallation() {
|
|
51
|
+
const hudScript = join(homedir(), '.claude', 'hud', 'sisyphus-hud.mjs');
|
|
52
|
+
const settingsFile = join(homedir(), '.claude', 'settings.json');
|
|
53
|
+
|
|
54
|
+
// Check if HUD script exists
|
|
55
|
+
if (!existsSync(hudScript)) {
|
|
56
|
+
return { installed: false, reason: 'HUD script missing' };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Check if statusLine is configured
|
|
60
|
+
try {
|
|
61
|
+
if (existsSync(settingsFile)) {
|
|
62
|
+
const settings = JSON.parse(readFileSync(settingsFile, 'utf-8'));
|
|
63
|
+
if (!settings.statusLine) {
|
|
64
|
+
return { installed: false, reason: 'statusLine not configured' };
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
return { installed: false, reason: 'settings.json missing' };
|
|
68
|
+
}
|
|
69
|
+
} catch {
|
|
70
|
+
return { installed: false, reason: 'Could not read settings' };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return { installed: true };
|
|
74
|
+
}
|
|
75
|
+
|
|
49
76
|
// Main
|
|
50
77
|
async function main() {
|
|
51
78
|
try {
|
|
@@ -56,8 +83,16 @@ async function main() {
|
|
|
56
83
|
const directory = data.directory || process.cwd();
|
|
57
84
|
const messages = [];
|
|
58
85
|
|
|
86
|
+
// Check HUD installation (one-time setup guidance)
|
|
87
|
+
const hudCheck = checkHudInstallation();
|
|
88
|
+
if (!hudCheck.installed) {
|
|
89
|
+
messages.push(`<system-reminder>
|
|
90
|
+
[Sisyphus] HUD not configured (${hudCheck.reason}). Run /hud setup then restart Claude Code.
|
|
91
|
+
</system-reminder>`);
|
|
92
|
+
}
|
|
93
|
+
|
|
59
94
|
// Check for ultrawork state
|
|
60
|
-
const ultraworkState = readJsonFile(join(directory, '.
|
|
95
|
+
const ultraworkState = readJsonFile(join(directory, '.omc', 'ultrawork-state.json'))
|
|
61
96
|
|| readJsonFile(join(homedir(), '.claude', 'ultrawork-state.json'));
|
|
62
97
|
|
|
63
98
|
if (ultraworkState?.active) {
|
|
@@ -77,7 +112,7 @@ Continue working in ultrawork mode until all tasks are complete.
|
|
|
77
112
|
}
|
|
78
113
|
|
|
79
114
|
// Check for ralph loop state
|
|
80
|
-
const ralphState = readJsonFile(join(directory, '.
|
|
115
|
+
const ralphState = readJsonFile(join(directory, '.omc', 'ralph-state.json'));
|
|
81
116
|
if (ralphState?.active) {
|
|
82
117
|
messages.push(`<session-restore>
|
|
83
118
|
|
|
@@ -114,7 +149,7 @@ Please continue working on these tasks.
|
|
|
114
149
|
}
|
|
115
150
|
|
|
116
151
|
// Check for notepad Priority Context
|
|
117
|
-
const notepadPath = join(directory, '.
|
|
152
|
+
const notepadPath = join(directory, '.omc', 'notepad.md');
|
|
118
153
|
if (existsSync(notepadPath)) {
|
|
119
154
|
try {
|
|
120
155
|
const notepadContent = readFileSync(notepadPath, 'utf-8');
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Skill Injector Hook (UserPromptSubmit)
|
|
5
|
+
* Injects relevant learned skills into context based on prompt triggers.
|
|
6
|
+
*
|
|
7
|
+
* STANDALONE SCRIPT - does not import from dist/
|
|
8
|
+
* Follows pattern of keyword-detector.mjs and session-start.mjs
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { existsSync, readdirSync, readFileSync, realpathSync } from 'fs';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { homedir } from 'os';
|
|
14
|
+
|
|
15
|
+
// Constants
|
|
16
|
+
const USER_SKILLS_DIR = join(homedir(), '.claude', 'skills', 'omc-learned');
|
|
17
|
+
const PROJECT_SKILLS_SUBDIR = '.omc/skills';
|
|
18
|
+
const SKILL_EXTENSION = '.md';
|
|
19
|
+
const MAX_SKILLS_PER_SESSION = 5;
|
|
20
|
+
|
|
21
|
+
// Session cache to avoid re-injecting same skills
|
|
22
|
+
const injectedCache = new Map();
|
|
23
|
+
|
|
24
|
+
// Read all stdin
|
|
25
|
+
async function readStdin() {
|
|
26
|
+
const chunks = [];
|
|
27
|
+
for await (const chunk of process.stdin) {
|
|
28
|
+
chunks.push(chunk);
|
|
29
|
+
}
|
|
30
|
+
return Buffer.concat(chunks).toString('utf-8');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Parse YAML frontmatter from skill file
|
|
34
|
+
function parseSkillFrontmatter(content) {
|
|
35
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
36
|
+
if (!match) return null;
|
|
37
|
+
|
|
38
|
+
const yamlContent = match[1];
|
|
39
|
+
const body = match[2].trim();
|
|
40
|
+
|
|
41
|
+
// Simple YAML parsing for triggers
|
|
42
|
+
const triggers = [];
|
|
43
|
+
const triggerMatch = yamlContent.match(/triggers:\s*\n((?:\s+-\s*.+\n?)*)/);
|
|
44
|
+
if (triggerMatch) {
|
|
45
|
+
const lines = triggerMatch[1].split('\n');
|
|
46
|
+
for (const line of lines) {
|
|
47
|
+
const itemMatch = line.match(/^\s+-\s*["']?([^"'\n]+)["']?\s*$/);
|
|
48
|
+
if (itemMatch) triggers.push(itemMatch[1].trim().toLowerCase());
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Extract name
|
|
53
|
+
const nameMatch = yamlContent.match(/name:\s*["']?([^"'\n]+)["']?/);
|
|
54
|
+
const name = nameMatch ? nameMatch[1].trim() : 'Unnamed Skill';
|
|
55
|
+
|
|
56
|
+
return { name, triggers, content: body };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Find all skill files
|
|
60
|
+
function findSkillFiles(directory) {
|
|
61
|
+
const candidates = [];
|
|
62
|
+
const seenPaths = new Set();
|
|
63
|
+
|
|
64
|
+
// Project-level skills (higher priority)
|
|
65
|
+
const projectDir = join(directory, PROJECT_SKILLS_SUBDIR);
|
|
66
|
+
if (existsSync(projectDir)) {
|
|
67
|
+
try {
|
|
68
|
+
const files = readdirSync(projectDir, { withFileTypes: true });
|
|
69
|
+
for (const file of files) {
|
|
70
|
+
if (file.isFile() && file.name.endsWith(SKILL_EXTENSION)) {
|
|
71
|
+
const fullPath = join(projectDir, file.name);
|
|
72
|
+
try {
|
|
73
|
+
const realPath = realpathSync(fullPath);
|
|
74
|
+
if (!seenPaths.has(realPath)) {
|
|
75
|
+
seenPaths.add(realPath);
|
|
76
|
+
candidates.push({ path: fullPath, scope: 'project' });
|
|
77
|
+
}
|
|
78
|
+
} catch {
|
|
79
|
+
// Ignore symlink resolution errors
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} catch {
|
|
84
|
+
// Ignore directory read errors
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// User-level skills
|
|
89
|
+
if (existsSync(USER_SKILLS_DIR)) {
|
|
90
|
+
try {
|
|
91
|
+
const files = readdirSync(USER_SKILLS_DIR, { withFileTypes: true });
|
|
92
|
+
for (const file of files) {
|
|
93
|
+
if (file.isFile() && file.name.endsWith(SKILL_EXTENSION)) {
|
|
94
|
+
const fullPath = join(USER_SKILLS_DIR, file.name);
|
|
95
|
+
try {
|
|
96
|
+
const realPath = realpathSync(fullPath);
|
|
97
|
+
if (!seenPaths.has(realPath)) {
|
|
98
|
+
seenPaths.add(realPath);
|
|
99
|
+
candidates.push({ path: fullPath, scope: 'user' });
|
|
100
|
+
}
|
|
101
|
+
} catch {
|
|
102
|
+
// Ignore symlink resolution errors
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
} catch {
|
|
107
|
+
// Ignore directory read errors
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return candidates;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Find matching skills by trigger keywords
|
|
115
|
+
function findMatchingSkills(prompt, directory, sessionId) {
|
|
116
|
+
const promptLower = prompt.toLowerCase();
|
|
117
|
+
const candidates = findSkillFiles(directory);
|
|
118
|
+
const matches = [];
|
|
119
|
+
|
|
120
|
+
// Get or create session cache
|
|
121
|
+
if (!injectedCache.has(sessionId)) {
|
|
122
|
+
injectedCache.set(sessionId, new Set());
|
|
123
|
+
}
|
|
124
|
+
const alreadyInjected = injectedCache.get(sessionId);
|
|
125
|
+
|
|
126
|
+
for (const candidate of candidates) {
|
|
127
|
+
// Skip if already injected this session
|
|
128
|
+
if (alreadyInjected.has(candidate.path)) continue;
|
|
129
|
+
|
|
130
|
+
try {
|
|
131
|
+
const content = readFileSync(candidate.path, 'utf-8');
|
|
132
|
+
const skill = parseSkillFrontmatter(content);
|
|
133
|
+
if (!skill) continue;
|
|
134
|
+
|
|
135
|
+
// Check if any trigger matches
|
|
136
|
+
let score = 0;
|
|
137
|
+
for (const trigger of skill.triggers) {
|
|
138
|
+
if (promptLower.includes(trigger)) {
|
|
139
|
+
score += 10;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (score > 0) {
|
|
144
|
+
matches.push({
|
|
145
|
+
path: candidate.path,
|
|
146
|
+
name: skill.name,
|
|
147
|
+
content: skill.content,
|
|
148
|
+
score,
|
|
149
|
+
scope: candidate.scope
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
} catch {
|
|
153
|
+
// Ignore file read errors
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Sort by score (descending) and limit
|
|
158
|
+
matches.sort((a, b) => b.score - a.score);
|
|
159
|
+
const selected = matches.slice(0, MAX_SKILLS_PER_SESSION);
|
|
160
|
+
|
|
161
|
+
// Mark as injected
|
|
162
|
+
for (const skill of selected) {
|
|
163
|
+
alreadyInjected.add(skill.path);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return selected;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Format skills for injection
|
|
170
|
+
function formatSkillsMessage(skills) {
|
|
171
|
+
const lines = [
|
|
172
|
+
'<mnemosyne>',
|
|
173
|
+
'',
|
|
174
|
+
'## Relevant Learned Skills',
|
|
175
|
+
'',
|
|
176
|
+
'The following skills from previous sessions may help:',
|
|
177
|
+
''
|
|
178
|
+
];
|
|
179
|
+
|
|
180
|
+
for (const skill of skills) {
|
|
181
|
+
lines.push(`### ${skill.name} (${skill.scope})`);
|
|
182
|
+
lines.push('');
|
|
183
|
+
lines.push(skill.content);
|
|
184
|
+
lines.push('');
|
|
185
|
+
lines.push('---');
|
|
186
|
+
lines.push('');
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
lines.push('</mnemosyne>');
|
|
190
|
+
return lines.join('\n');
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Main
|
|
194
|
+
async function main() {
|
|
195
|
+
try {
|
|
196
|
+
const input = await readStdin();
|
|
197
|
+
if (!input.trim()) {
|
|
198
|
+
console.log(JSON.stringify({ continue: true }));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
let data = {};
|
|
203
|
+
try { data = JSON.parse(input); } catch { /* ignore parse errors */ }
|
|
204
|
+
|
|
205
|
+
const prompt = data.prompt || '';
|
|
206
|
+
const sessionId = data.sessionId || 'unknown';
|
|
207
|
+
const directory = data.cwd || process.cwd();
|
|
208
|
+
|
|
209
|
+
// Skip if no prompt
|
|
210
|
+
if (!prompt) {
|
|
211
|
+
console.log(JSON.stringify({ continue: true }));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const matchingSkills = findMatchingSkills(prompt, directory, sessionId);
|
|
216
|
+
|
|
217
|
+
if (matchingSkills.length > 0) {
|
|
218
|
+
console.log(JSON.stringify({
|
|
219
|
+
continue: true,
|
|
220
|
+
message: formatSkillsMessage(matchingSkills)
|
|
221
|
+
}));
|
|
222
|
+
} else {
|
|
223
|
+
console.log(JSON.stringify({ continue: true }));
|
|
224
|
+
}
|
|
225
|
+
} catch (error) {
|
|
226
|
+
// On any error, allow continuation
|
|
227
|
+
console.log(JSON.stringify({ continue: true }));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
main();
|
package/scripts/uninstall.sh
CHANGED
|
@@ -90,10 +90,10 @@ rm -f "$CLAUDE_CONFIG_DIR/hooks/silent-auto-update.sh"
|
|
|
90
90
|
|
|
91
91
|
# Remove version, state, and config files
|
|
92
92
|
echo -e "${BLUE}Removing state and config files...${NC}"
|
|
93
|
-
rm -f "$CLAUDE_CONFIG_DIR/.
|
|
94
|
-
rm -f "$CLAUDE_CONFIG_DIR/.
|
|
95
|
-
rm -f "$CLAUDE_CONFIG_DIR/.
|
|
96
|
-
rm -f "$CLAUDE_CONFIG_DIR/.
|
|
93
|
+
rm -f "$CLAUDE_CONFIG_DIR/.omc-version.json"
|
|
94
|
+
rm -f "$CLAUDE_CONFIG_DIR/.omc-silent-update.json"
|
|
95
|
+
rm -f "$CLAUDE_CONFIG_DIR/.omc-update.log"
|
|
96
|
+
rm -f "$CLAUDE_CONFIG_DIR/.omc-config.json"
|
|
97
97
|
|
|
98
98
|
# Remove hook configurations from settings.json
|
|
99
99
|
SETTINGS_FILE="$CLAUDE_CONFIG_DIR/settings.json"
|
|
@@ -154,11 +154,11 @@ else
|
|
|
154
154
|
fi
|
|
155
155
|
fi
|
|
156
156
|
|
|
157
|
-
# Remove .
|
|
158
|
-
if [ -d "$CLAUDE_CONFIG_DIR/../.
|
|
159
|
-
echo -e "${YELLOW}Note: .
|
|
157
|
+
# Remove .omc directory if it exists (plans, notepads, drafts)
|
|
158
|
+
if [ -d "$CLAUDE_CONFIG_DIR/../.omc" ] || [ -d ".omc" ]; then
|
|
159
|
+
echo -e "${YELLOW}Note: .omc directory (plans/notepads) was not removed.${NC}"
|
|
160
160
|
echo " To remove project plans and notepads, run:"
|
|
161
|
-
echo " rm -rf .
|
|
161
|
+
echo " rm -rf .omc"
|
|
162
162
|
fi
|
|
163
163
|
|
|
164
164
|
echo ""
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: analyze
|
|
3
|
+
description: Deep analysis and investigation
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Deep Analysis Mode
|
|
8
|
+
|
|
9
|
+
[ANALYSIS MODE ACTIVATED]
|
|
10
|
+
|
|
11
|
+
## Objective
|
|
12
|
+
|
|
13
|
+
Conduct thorough analysis of the specified target (code, architecture, issue, bug, performance bottleneck, security concern).
|
|
14
|
+
|
|
15
|
+
## Approach
|
|
16
|
+
|
|
17
|
+
1. **Gather Context**
|
|
18
|
+
- Read relevant files
|
|
19
|
+
- Check git history if relevant
|
|
20
|
+
- Review related issues/PRs if applicable
|
|
21
|
+
|
|
22
|
+
2. **Analyze Systematically**
|
|
23
|
+
- Identify patterns and antipatterns
|
|
24
|
+
- Trace execution flows
|
|
25
|
+
- Map dependencies and relationships
|
|
26
|
+
- Check for edge cases
|
|
27
|
+
|
|
28
|
+
3. **Synthesize Findings**
|
|
29
|
+
- Root cause (for bugs)
|
|
30
|
+
- Design decisions and tradeoffs (for architecture)
|
|
31
|
+
- Bottlenecks and hotspots (for performance)
|
|
32
|
+
- Vulnerabilities and risks (for security)
|
|
33
|
+
|
|
34
|
+
4. **Provide Recommendations**
|
|
35
|
+
- Concrete, actionable next steps
|
|
36
|
+
- Prioritized by impact
|
|
37
|
+
- Consider maintainability and technical debt
|
|
38
|
+
|
|
39
|
+
## Output Format
|
|
40
|
+
|
|
41
|
+
Present findings clearly:
|
|
42
|
+
- **Summary** (2-3 sentences)
|
|
43
|
+
- **Key Findings** (bulleted list)
|
|
44
|
+
- **Analysis** (detailed explanation)
|
|
45
|
+
- **Recommendations** (prioritized)
|
|
46
|
+
|
|
47
|
+
Stay objective. Cite file paths and line numbers. No speculation without evidence.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cancel-ralph
|
|
3
|
+
description: Cancel active Ralph (and linked ultrawork if auto-activated)
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Cancel Ralph
|
|
8
|
+
|
|
9
|
+
[RALPH CANCELLED]
|
|
10
|
+
|
|
11
|
+
Ralph has been cancelled. You MUST now deactivate the state files.
|
|
12
|
+
|
|
13
|
+
## MANDATORY ACTION
|
|
14
|
+
|
|
15
|
+
Execute this command to fully cancel ALL persistent modes:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
mkdir -p .omc ~/.claude && \
|
|
19
|
+
echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph"}' > .omc/ralph-state.json && \
|
|
20
|
+
echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph", "linked_to_ralph": false}' > .omc/ultrawork-state.json && \
|
|
21
|
+
echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph"}' > .omc/ralph-plan-state.json && \
|
|
22
|
+
echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph"}' > ~/.claude/ralph-state.json && \
|
|
23
|
+
echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph"}' > ~/.claude/ultrawork-state.json && \
|
|
24
|
+
rm -f .omc/ralph-verification.json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
After running this command, you are free to stop working. The persistent mode hook will no longer force continuation.
|
|
28
|
+
|
|
29
|
+
## What Was Cancelled
|
|
30
|
+
|
|
31
|
+
- **Ralph**: Self-referential completion loop
|
|
32
|
+
- **Ultrawork**: Parallel execution mode (auto-activated with Ralph by default)
|
|
33
|
+
- **Ralph Plan**: Iterative planning loop (if active via /ralplan)
|
|
34
|
+
- **Verification State**: Any pending architect verification
|
|
35
|
+
|
|
36
|
+
## Note on Linked Modes
|
|
37
|
+
|
|
38
|
+
Since v3.0, Ralph automatically activates Ultrawork for parallel execution. When you cancel Ralph, the linked Ultrawork is also cancelled. If you started Ultrawork separately (not via Ralph), use `/cancel-ultrawork` to cancel it independently.
|
|
39
|
+
|
|
40
|
+
## To Start Fresh
|
|
41
|
+
|
|
42
|
+
- `/ralph "task"` - Start ralph with ultrawork (default)
|
|
43
|
+
- `/ultrawork "task"` - Start ultrawork only (standalone)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cancel-ultraqa
|
|
3
|
+
description: Cancel active UltraQA cycling workflow
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Cancel UltraQA
|
|
8
|
+
|
|
9
|
+
[ULTRAQA CANCELLED]
|
|
10
|
+
|
|
11
|
+
The UltraQA cycling workflow has been cancelled. Clearing state file.
|
|
12
|
+
|
|
13
|
+
## MANDATORY ACTION
|
|
14
|
+
|
|
15
|
+
Execute this command to cancel UltraQA:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
mkdir -p .sisyphus && echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ultraqa"}' > .omc/ultraqa-state.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
After running this command, the QA cycling will stop.
|
|
22
|
+
|
|
23
|
+
## To Start Fresh
|
|
24
|
+
|
|
25
|
+
- `/ultraqa --tests` - Run until all tests pass
|
|
26
|
+
- `/ultraqa --build` - Run until build succeeds
|
|
27
|
+
- `/ultraqa --lint` - Run until no lint errors
|
|
28
|
+
- `/ultraqa --typecheck` - Run until no type errors
|
|
29
|
+
- `/ultraqa --custom "pattern"` - Run until pattern matches
|