oh-my-claude-sisyphus 2.6.0 → 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 -708
- 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 +39 -20
- 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
|
@@ -7,9 +7,22 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { existsSync, readFileSync, writeFileSync, readdirSync } from 'fs';
|
|
10
|
-
import { join } from 'path';
|
|
10
|
+
import { join, dirname } from 'path';
|
|
11
11
|
import { homedir } from 'os';
|
|
12
|
-
import {
|
|
12
|
+
import { fileURLToPath } from 'url';
|
|
13
|
+
|
|
14
|
+
// Dynamic import for notepad with fallback
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = dirname(__filename);
|
|
17
|
+
let pruneOldEntries = null;
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
const notepadModule = await import(join(__dirname, '../dist/hooks/notepad/index.js'));
|
|
21
|
+
pruneOldEntries = notepadModule.pruneOldEntries;
|
|
22
|
+
} catch (err) {
|
|
23
|
+
// Notepad module not available - pruning will be skipped
|
|
24
|
+
// This can happen in older versions or if build failed
|
|
25
|
+
}
|
|
13
26
|
|
|
14
27
|
// Read all stdin
|
|
15
28
|
async function readStdin() {
|
|
@@ -45,7 +58,7 @@ function getPrdStatus(projectDir) {
|
|
|
45
58
|
// Check both root and .sisyphus for prd.json
|
|
46
59
|
const paths = [
|
|
47
60
|
join(projectDir, 'prd.json'),
|
|
48
|
-
join(projectDir, '.
|
|
61
|
+
join(projectDir, '.omc', 'prd.json')
|
|
49
62
|
];
|
|
50
63
|
|
|
51
64
|
for (const prdPath of paths) {
|
|
@@ -75,7 +88,7 @@ function getPrdStatus(projectDir) {
|
|
|
75
88
|
function getProgressPatterns(projectDir) {
|
|
76
89
|
const paths = [
|
|
77
90
|
join(projectDir, 'progress.txt'),
|
|
78
|
-
join(projectDir, '.
|
|
91
|
+
join(projectDir, '.omc', 'progress.txt')
|
|
79
92
|
];
|
|
80
93
|
|
|
81
94
|
for (const progressPath of paths) {
|
|
@@ -130,7 +143,7 @@ function countIncompleteTodos(todosDir, projectDir) {
|
|
|
130
143
|
|
|
131
144
|
// Check project todos
|
|
132
145
|
for (const path of [
|
|
133
|
-
join(projectDir, '.
|
|
146
|
+
join(projectDir, '.omc', 'todos.json'),
|
|
134
147
|
join(projectDir, '.claude', 'todos.json')
|
|
135
148
|
]) {
|
|
136
149
|
const data = readJsonFile(path);
|
|
@@ -153,14 +166,14 @@ async function main() {
|
|
|
153
166
|
const todosDir = join(homedir(), '.claude', 'todos');
|
|
154
167
|
|
|
155
168
|
// Check for ultrawork state
|
|
156
|
-
let ultraworkState = readJsonFile(join(directory, '.
|
|
169
|
+
let ultraworkState = readJsonFile(join(directory, '.omc', 'ultrawork-state.json'))
|
|
157
170
|
|| readJsonFile(join(homedir(), '.claude', 'ultrawork-state.json'));
|
|
158
171
|
|
|
159
172
|
// Check for ralph loop state
|
|
160
|
-
const ralphState = readJsonFile(join(directory, '.
|
|
173
|
+
const ralphState = readJsonFile(join(directory, '.omc', 'ralph-state.json'));
|
|
161
174
|
|
|
162
175
|
// Check for verification state
|
|
163
|
-
const verificationState = readJsonFile(join(directory, '.
|
|
176
|
+
const verificationState = readJsonFile(join(directory, '.omc', 'ralph-verification.json'));
|
|
164
177
|
|
|
165
178
|
// Count incomplete todos
|
|
166
179
|
const incompleteCount = countIncompleteTodos(todosDir, directory);
|
|
@@ -178,9 +191,11 @@ async function main() {
|
|
|
178
191
|
if (prdStatus.hasPrd && prdStatus.allComplete) {
|
|
179
192
|
// Prune old notepad entries on clean session stop
|
|
180
193
|
try {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
194
|
+
if (pruneOldEntries) {
|
|
195
|
+
const pruneResult = pruneOldEntries(directory, 7);
|
|
196
|
+
if (pruneResult.pruned > 0) {
|
|
197
|
+
// Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
|
|
198
|
+
}
|
|
184
199
|
}
|
|
185
200
|
} catch (err) {
|
|
186
201
|
// Silently ignore prune errors
|
|
@@ -241,7 +256,7 @@ ${verificationState.oracle_feedback}
|
|
|
241
256
|
if (iteration < maxIter) {
|
|
242
257
|
const newIter = iteration + 1;
|
|
243
258
|
ralphState.iteration = newIter;
|
|
244
|
-
writeJsonFile(join(directory, '.
|
|
259
|
+
writeJsonFile(join(directory, '.omc', 'ralph-state.json'), ralphState);
|
|
245
260
|
|
|
246
261
|
// Build continuation message with PRD context if available
|
|
247
262
|
let prdContext = '';
|
|
@@ -314,9 +329,11 @@ ${ralphState.prompt ? `Original task: ${ralphState.prompt}` : ''}
|
|
|
314
329
|
if (newCount > maxReinforcements) {
|
|
315
330
|
// Prune old notepad entries on clean session stop
|
|
316
331
|
try {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
332
|
+
if (pruneOldEntries) {
|
|
333
|
+
const pruneResult = pruneOldEntries(directory, 7);
|
|
334
|
+
if (pruneResult.pruned > 0) {
|
|
335
|
+
// Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
|
|
336
|
+
}
|
|
320
337
|
}
|
|
321
338
|
} catch (err) {
|
|
322
339
|
// Silently ignore prune errors
|
|
@@ -332,7 +349,7 @@ ${ralphState.prompt ? `Original task: ${ralphState.prompt}` : ''}
|
|
|
332
349
|
ultraworkState.reinforcement_count = newCount;
|
|
333
350
|
ultraworkState.last_checked_at = new Date().toISOString();
|
|
334
351
|
|
|
335
|
-
writeJsonFile(join(directory, '.
|
|
352
|
+
writeJsonFile(join(directory, '.omc', 'ultrawork-state.json'), ultraworkState);
|
|
336
353
|
|
|
337
354
|
console.log(JSON.stringify({
|
|
338
355
|
continue: false,
|
|
@@ -364,7 +381,7 @@ ${ultraworkState.original_prompt ? `Original task: ${ultraworkState.original_pro
|
|
|
364
381
|
// Priority 3: Todo Continuation (with escape mechanism)
|
|
365
382
|
if (incompleteCount > 0) {
|
|
366
383
|
// Track continuation attempts in a lightweight way
|
|
367
|
-
const contFile = join(directory, '.
|
|
384
|
+
const contFile = join(directory, '.omc', 'continuation-count.json');
|
|
368
385
|
let contState = readJsonFile(contFile) || { count: 0 };
|
|
369
386
|
contState.count = (contState.count || 0) + 1;
|
|
370
387
|
contState.last_checked_at = new Date().toISOString();
|
|
@@ -376,9 +393,11 @@ ${ultraworkState.original_prompt ? `Original task: ${ultraworkState.original_pro
|
|
|
376
393
|
if (contState.count > maxContinuations) {
|
|
377
394
|
// Prune old notepad entries on clean session stop
|
|
378
395
|
try {
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
396
|
+
if (pruneOldEntries) {
|
|
397
|
+
const pruneResult = pruneOldEntries(directory, 7);
|
|
398
|
+
if (pruneResult.pruned > 0) {
|
|
399
|
+
// Optionally log: console.error(`Pruned ${pruneResult.pruned} old notepad entries`);
|
|
400
|
+
}
|
|
382
401
|
}
|
|
383
402
|
} catch (err) {
|
|
384
403
|
// Silently ignore prune errors
|
|
@@ -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 ""
|