olympus-ai 1.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/LICENSE +21 -0
- package/README.md +691 -0
- package/dist/__tests__/example.test.d.ts +2 -0
- package/dist/__tests__/example.test.d.ts.map +1 -0
- package/dist/__tests__/example.test.js +20 -0
- package/dist/__tests__/example.test.js.map +1 -0
- package/dist/__tests__/hooks.test.d.ts +2 -0
- package/dist/__tests__/hooks.test.d.ts.map +1 -0
- package/dist/__tests__/hooks.test.js +644 -0
- package/dist/__tests__/hooks.test.js.map +1 -0
- package/dist/__tests__/installer.test.d.ts +2 -0
- package/dist/__tests__/installer.test.d.ts.map +1 -0
- package/dist/__tests__/installer.test.js +369 -0
- package/dist/__tests__/installer.test.js.map +1 -0
- package/dist/__tests__/model-routing.test.d.ts +2 -0
- package/dist/__tests__/model-routing.test.d.ts.map +1 -0
- package/dist/__tests__/model-routing.test.js +814 -0
- package/dist/__tests__/model-routing.test.js.map +1 -0
- package/dist/__tests__/skills.test.d.ts +2 -0
- package/dist/__tests__/skills.test.d.ts.map +1 -0
- package/dist/__tests__/skills.test.js +126 -0
- package/dist/__tests__/skills.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +2 -0
- package/dist/__tests__/types.test.d.ts.map +1 -0
- package/dist/__tests__/types.test.js +77 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/agents/definitions.d.ts +105 -0
- package/dist/agents/definitions.d.ts.map +1 -0
- package/dist/agents/definitions.js +1379 -0
- package/dist/agents/definitions.js.map +1 -0
- package/dist/agents/document-writer.d.ts +11 -0
- package/dist/agents/document-writer.d.ts.map +1 -0
- package/dist/agents/document-writer.js +209 -0
- package/dist/agents/document-writer.js.map +1 -0
- package/dist/agents/explore.d.ts +12 -0
- package/dist/agents/explore.d.ts.map +1 -0
- package/dist/agents/explore.js +103 -0
- package/dist/agents/explore.js.map +1 -0
- package/dist/agents/frontend-engineer.d.ts +11 -0
- package/dist/agents/frontend-engineer.d.ts.map +1 -0
- package/dist/agents/frontend-engineer.js +115 -0
- package/dist/agents/frontend-engineer.js.map +1 -0
- package/dist/agents/index.d.ts +21 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +27 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/librarian.d.ts +12 -0
- package/dist/agents/librarian.d.ts.map +1 -0
- package/dist/agents/librarian.js +103 -0
- package/dist/agents/librarian.js.map +1 -0
- package/dist/agents/metis.d.ts +12 -0
- package/dist/agents/metis.d.ts.map +1 -0
- package/dist/agents/metis.js +117 -0
- package/dist/agents/metis.js.map +1 -0
- package/dist/agents/momus.d.ts +12 -0
- package/dist/agents/momus.d.ts.map +1 -0
- package/dist/agents/momus.js +128 -0
- package/dist/agents/momus.js.map +1 -0
- package/dist/agents/multimodal-looker.d.ts +11 -0
- package/dist/agents/multimodal-looker.d.ts.map +1 -0
- package/dist/agents/multimodal-looker.js +70 -0
- package/dist/agents/multimodal-looker.js.map +1 -0
- package/dist/agents/olympian.d.ts +12 -0
- package/dist/agents/olympian.d.ts.map +1 -0
- package/dist/agents/olympian.js +93 -0
- package/dist/agents/olympian.js.map +1 -0
- package/dist/agents/oracle.d.ts +13 -0
- package/dist/agents/oracle.d.ts.map +1 -0
- package/dist/agents/oracle.js +191 -0
- package/dist/agents/oracle.js.map +1 -0
- package/dist/agents/orchestrator-olympus.d.ts +11 -0
- package/dist/agents/orchestrator-olympus.d.ts.map +1 -0
- package/dist/agents/orchestrator-olympus.js +115 -0
- package/dist/agents/orchestrator-olympus.js.map +1 -0
- package/dist/agents/orchestrator-sisyphus.d.ts +11 -0
- package/dist/agents/orchestrator-sisyphus.d.ts.map +1 -0
- package/dist/agents/orchestrator-sisyphus.js +115 -0
- package/dist/agents/orchestrator-sisyphus.js.map +1 -0
- package/dist/agents/prometheus.d.ts +12 -0
- package/dist/agents/prometheus.d.ts.map +1 -0
- package/dist/agents/prometheus.js +156 -0
- package/dist/agents/prometheus.js.map +1 -0
- package/dist/agents/qa-tester.d.ts +16 -0
- package/dist/agents/qa-tester.d.ts.map +1 -0
- package/dist/agents/qa-tester.js +367 -0
- package/dist/agents/qa-tester.js.map +1 -0
- package/dist/agents/sisyphus-junior.d.ts +12 -0
- package/dist/agents/sisyphus-junior.d.ts.map +1 -0
- package/dist/agents/sisyphus-junior.js +93 -0
- package/dist/agents/sisyphus-junior.js.map +1 -0
- package/dist/agents/types.d.ts +120 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +38 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/utils.d.ts +49 -0
- package/dist/agents/utils.d.ts.map +1 -0
- package/dist/agents/utils.js +164 -0
- package/dist/agents/utils.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +496 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/index.d.ts +78 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +148 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +49 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +380 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/features/auto-update.d.ts +187 -0
- package/dist/features/auto-update.d.ts.map +1 -0
- package/dist/features/auto-update.js +539 -0
- package/dist/features/auto-update.js.map +1 -0
- package/dist/features/background-agent/concurrency.d.ts +53 -0
- package/dist/features/background-agent/concurrency.d.ts.map +1 -0
- package/dist/features/background-agent/concurrency.js +121 -0
- package/dist/features/background-agent/concurrency.js.map +1 -0
- package/dist/features/background-agent/index.d.ts +12 -0
- package/dist/features/background-agent/index.d.ts.map +1 -0
- package/dist/features/background-agent/index.js +12 -0
- package/dist/features/background-agent/index.js.map +1 -0
- package/dist/features/background-agent/manager.d.ts +134 -0
- package/dist/features/background-agent/manager.d.ts.map +1 -0
- package/dist/features/background-agent/manager.js +412 -0
- package/dist/features/background-agent/manager.js.map +1 -0
- package/dist/features/background-agent/types.d.ts +99 -0
- package/dist/features/background-agent/types.d.ts.map +1 -0
- package/dist/features/background-agent/types.js +9 -0
- package/dist/features/background-agent/types.js.map +1 -0
- package/dist/features/background-tasks.d.ts +99 -0
- package/dist/features/background-tasks.d.ts.map +1 -0
- package/dist/features/background-tasks.js +265 -0
- package/dist/features/background-tasks.js.map +1 -0
- package/dist/features/boulder-state/constants.d.ts +20 -0
- package/dist/features/boulder-state/constants.d.ts.map +1 -0
- package/dist/features/boulder-state/constants.js +20 -0
- package/dist/features/boulder-state/constants.js.map +1 -0
- package/dist/features/boulder-state/index.d.ts +12 -0
- package/dist/features/boulder-state/index.d.ts.map +1 -0
- package/dist/features/boulder-state/index.js +13 -0
- package/dist/features/boulder-state/index.js.map +1 -0
- package/dist/features/boulder-state/storage.d.ts +58 -0
- package/dist/features/boulder-state/storage.d.ts.map +1 -0
- package/dist/features/boulder-state/storage.js +174 -0
- package/dist/features/boulder-state/storage.js.map +1 -0
- package/dist/features/boulder-state/types.d.ts +48 -0
- package/dist/features/boulder-state/types.d.ts.map +1 -0
- package/dist/features/boulder-state/types.js +10 -0
- package/dist/features/boulder-state/types.js.map +1 -0
- package/dist/features/builtin-skills/index.d.ts +10 -0
- package/dist/features/builtin-skills/index.d.ts.map +1 -0
- package/dist/features/builtin-skills/index.js +10 -0
- package/dist/features/builtin-skills/index.js.map +1 -0
- package/dist/features/builtin-skills/skills.d.ts +21 -0
- package/dist/features/builtin-skills/skills.d.ts.map +1 -0
- package/dist/features/builtin-skills/skills.js +1082 -0
- package/dist/features/builtin-skills/skills.js.map +1 -0
- package/dist/features/builtin-skills/types.d.ts +60 -0
- package/dist/features/builtin-skills/types.d.ts.map +1 -0
- package/dist/features/builtin-skills/types.js +9 -0
- package/dist/features/builtin-skills/types.js.map +1 -0
- package/dist/features/context-injector/collector.d.ts +56 -0
- package/dist/features/context-injector/collector.d.ts.map +1 -0
- package/dist/features/context-injector/collector.js +122 -0
- package/dist/features/context-injector/collector.js.map +1 -0
- package/dist/features/context-injector/index.d.ts +12 -0
- package/dist/features/context-injector/index.d.ts.map +1 -0
- package/dist/features/context-injector/index.js +13 -0
- package/dist/features/context-injector/index.js.map +1 -0
- package/dist/features/context-injector/injector.d.ts +47 -0
- package/dist/features/context-injector/injector.d.ts.map +1 -0
- package/dist/features/context-injector/injector.js +103 -0
- package/dist/features/context-injector/injector.js.map +1 -0
- package/dist/features/context-injector/types.d.ts +103 -0
- package/dist/features/context-injector/types.d.ts.map +1 -0
- package/dist/features/context-injector/types.js +11 -0
- package/dist/features/context-injector/types.js.map +1 -0
- package/dist/features/continuation-enforcement.d.ts +36 -0
- package/dist/features/continuation-enforcement.d.ts.map +1 -0
- package/dist/features/continuation-enforcement.js +175 -0
- package/dist/features/continuation-enforcement.js.map +1 -0
- package/dist/features/index.d.ts +12 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +49 -0
- package/dist/features/index.js.map +1 -0
- package/dist/features/magic-keywords.d.ts +28 -0
- package/dist/features/magic-keywords.d.ts.map +1 -0
- package/dist/features/magic-keywords.js +421 -0
- package/dist/features/magic-keywords.js.map +1 -0
- package/dist/features/model-routing/index.d.ts +34 -0
- package/dist/features/model-routing/index.d.ts.map +1 -0
- package/dist/features/model-routing/index.js +48 -0
- package/dist/features/model-routing/index.js.map +1 -0
- package/dist/features/model-routing/prompts/haiku.d.ts +54 -0
- package/dist/features/model-routing/prompts/haiku.d.ts.map +1 -0
- package/dist/features/model-routing/prompts/haiku.js +141 -0
- package/dist/features/model-routing/prompts/haiku.js.map +1 -0
- package/dist/features/model-routing/prompts/index.d.ts +45 -0
- package/dist/features/model-routing/prompts/index.d.ts.map +1 -0
- package/dist/features/model-routing/prompts/index.js +116 -0
- package/dist/features/model-routing/prompts/index.js.map +1 -0
- package/dist/features/model-routing/prompts/opus.d.ts +34 -0
- package/dist/features/model-routing/prompts/opus.d.ts.map +1 -0
- package/dist/features/model-routing/prompts/opus.js +153 -0
- package/dist/features/model-routing/prompts/opus.js.map +1 -0
- package/dist/features/model-routing/prompts/sonnet.d.ts +38 -0
- package/dist/features/model-routing/prompts/sonnet.d.ts.map +1 -0
- package/dist/features/model-routing/prompts/sonnet.js +149 -0
- package/dist/features/model-routing/prompts/sonnet.js.map +1 -0
- package/dist/features/model-routing/router.d.ts +92 -0
- package/dist/features/model-routing/router.d.ts.map +1 -0
- package/dist/features/model-routing/router.js +267 -0
- package/dist/features/model-routing/router.js.map +1 -0
- package/dist/features/model-routing/rules.d.ts +32 -0
- package/dist/features/model-routing/rules.d.ts.map +1 -0
- package/dist/features/model-routing/rules.js +224 -0
- package/dist/features/model-routing/rules.js.map +1 -0
- package/dist/features/model-routing/scorer.d.ts +35 -0
- package/dist/features/model-routing/scorer.d.ts.map +1 -0
- package/dist/features/model-routing/scorer.js +241 -0
- package/dist/features/model-routing/scorer.js.map +1 -0
- package/dist/features/model-routing/signals.d.ts +26 -0
- package/dist/features/model-routing/signals.d.ts.map +1 -0
- package/dist/features/model-routing/signals.js +283 -0
- package/dist/features/model-routing/signals.js.map +1 -0
- package/dist/features/model-routing/types.d.ts +195 -0
- package/dist/features/model-routing/types.d.ts.map +1 -0
- package/dist/features/model-routing/types.js +86 -0
- package/dist/features/model-routing/types.js.map +1 -0
- package/dist/hooks/agent-usage-reminder/constants.d.ts +17 -0
- package/dist/hooks/agent-usage-reminder/constants.d.ts.map +1 -0
- package/dist/hooks/agent-usage-reminder/constants.js +58 -0
- package/dist/hooks/agent-usage-reminder/constants.js.map +1 -0
- package/dist/hooks/agent-usage-reminder/index.d.ts +36 -0
- package/dist/hooks/agent-usage-reminder/index.d.ts.map +1 -0
- package/dist/hooks/agent-usage-reminder/index.js +89 -0
- package/dist/hooks/agent-usage-reminder/index.js.map +1 -0
- package/dist/hooks/agent-usage-reminder/storage.d.ts +12 -0
- package/dist/hooks/agent-usage-reminder/storage.d.ts.map +1 -0
- package/dist/hooks/agent-usage-reminder/storage.js +39 -0
- package/dist/hooks/agent-usage-reminder/storage.js.map +1 -0
- package/dist/hooks/agent-usage-reminder/types.d.ts +14 -0
- package/dist/hooks/agent-usage-reminder/types.d.ts.map +1 -0
- package/dist/hooks/agent-usage-reminder/types.js +9 -0
- package/dist/hooks/agent-usage-reminder/types.js.map +1 -0
- package/dist/hooks/ascent-verifier/index.d.ts +72 -0
- package/dist/hooks/ascent-verifier/index.d.ts.map +1 -0
- package/dist/hooks/ascent-verifier/index.js +223 -0
- package/dist/hooks/ascent-verifier/index.js.map +1 -0
- package/dist/hooks/auto-slash-command/constants.d.ts +19 -0
- package/dist/hooks/auto-slash-command/constants.d.ts.map +1 -0
- package/dist/hooks/auto-slash-command/constants.js +28 -0
- package/dist/hooks/auto-slash-command/constants.js.map +1 -0
- package/dist/hooks/auto-slash-command/detector.d.ts +33 -0
- package/dist/hooks/auto-slash-command/detector.d.ts.map +1 -0
- package/dist/hooks/auto-slash-command/detector.js +73 -0
- package/dist/hooks/auto-slash-command/detector.js.map +1 -0
- package/dist/hooks/auto-slash-command/executor.d.ts +29 -0
- package/dist/hooks/auto-slash-command/executor.d.ts.map +1 -0
- package/dist/hooks/auto-slash-command/executor.js +214 -0
- package/dist/hooks/auto-slash-command/executor.js.map +1 -0
- package/dist/hooks/auto-slash-command/index.d.ts +53 -0
- package/dist/hooks/auto-slash-command/index.d.ts.map +1 -0
- package/dist/hooks/auto-slash-command/index.js +105 -0
- package/dist/hooks/auto-slash-command/index.js.map +1 -0
- package/dist/hooks/auto-slash-command/types.d.ts +77 -0
- package/dist/hooks/auto-slash-command/types.d.ts.map +1 -0
- package/dist/hooks/auto-slash-command/types.js +9 -0
- package/dist/hooks/auto-slash-command/types.js.map +1 -0
- package/dist/hooks/background-notification/index.d.ts +60 -0
- package/dist/hooks/background-notification/index.d.ts.map +1 -0
- package/dist/hooks/background-notification/index.js +180 -0
- package/dist/hooks/background-notification/index.js.map +1 -0
- package/dist/hooks/background-notification/types.d.ts +64 -0
- package/dist/hooks/background-notification/types.d.ts.map +1 -0
- package/dist/hooks/background-notification/types.js +8 -0
- package/dist/hooks/background-notification/types.js.map +1 -0
- package/dist/hooks/bridge.d.ts +68 -0
- package/dist/hooks/bridge.d.ts.map +1 -0
- package/dist/hooks/bridge.js +321 -0
- package/dist/hooks/bridge.js.map +1 -0
- package/dist/hooks/comment-checker/constants.d.ts +28 -0
- package/dist/hooks/comment-checker/constants.d.ts.map +1 -0
- package/dist/hooks/comment-checker/constants.js +189 -0
- package/dist/hooks/comment-checker/constants.js.map +1 -0
- package/dist/hooks/comment-checker/filters.d.ts +39 -0
- package/dist/hooks/comment-checker/filters.d.ts.map +1 -0
- package/dist/hooks/comment-checker/filters.js +126 -0
- package/dist/hooks/comment-checker/filters.js.map +1 -0
- package/dist/hooks/comment-checker/index.d.ts +58 -0
- package/dist/hooks/comment-checker/index.d.ts.map +1 -0
- package/dist/hooks/comment-checker/index.js +298 -0
- package/dist/hooks/comment-checker/index.js.map +1 -0
- package/dist/hooks/comment-checker/types.d.ts +88 -0
- package/dist/hooks/comment-checker/types.d.ts.map +1 -0
- package/dist/hooks/comment-checker/types.js +9 -0
- package/dist/hooks/comment-checker/types.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/constants.d.ts +28 -0
- package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/constants.js +85 -0
- package/dist/hooks/context-window-limit-recovery/constants.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/index.d.ts +62 -0
- package/dist/hooks/context-window-limit-recovery/index.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/index.js +201 -0
- package/dist/hooks/context-window-limit-recovery/index.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/parser.d.ts +31 -0
- package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/parser.js +241 -0
- package/dist/hooks/context-window-limit-recovery/parser.js.map +1 -0
- package/dist/hooks/context-window-limit-recovery/types.d.ts +84 -0
- package/dist/hooks/context-window-limit-recovery/types.d.ts.map +1 -0
- package/dist/hooks/context-window-limit-recovery/types.js +34 -0
- package/dist/hooks/context-window-limit-recovery/types.js.map +1 -0
- package/dist/hooks/directory-readme-injector/constants.d.ts +15 -0
- package/dist/hooks/directory-readme-injector/constants.d.ts.map +1 -0
- package/dist/hooks/directory-readme-injector/constants.js +17 -0
- package/dist/hooks/directory-readme-injector/constants.js.map +1 -0
- package/dist/hooks/directory-readme-injector/index.d.ts +41 -0
- package/dist/hooks/directory-readme-injector/index.d.ts.map +1 -0
- package/dist/hooks/directory-readme-injector/index.js +162 -0
- package/dist/hooks/directory-readme-injector/index.js.map +1 -0
- package/dist/hooks/directory-readme-injector/storage.d.ts +20 -0
- package/dist/hooks/directory-readme-injector/storage.d.ts.map +1 -0
- package/dist/hooks/directory-readme-injector/storage.js +56 -0
- package/dist/hooks/directory-readme-injector/storage.js.map +1 -0
- package/dist/hooks/directory-readme-injector/types.d.ts +20 -0
- package/dist/hooks/directory-readme-injector/types.d.ts.map +1 -0
- package/dist/hooks/directory-readme-injector/types.js +9 -0
- package/dist/hooks/directory-readme-injector/types.js.map +1 -0
- package/dist/hooks/edit-error-recovery/index.d.ts +62 -0
- package/dist/hooks/edit-error-recovery/index.d.ts.map +1 -0
- package/dist/hooks/edit-error-recovery/index.js +89 -0
- package/dist/hooks/edit-error-recovery/index.js.map +1 -0
- package/dist/hooks/empty-message-sanitizer/constants.d.ts +33 -0
- package/dist/hooks/empty-message-sanitizer/constants.d.ts.map +1 -0
- package/dist/hooks/empty-message-sanitizer/constants.js +37 -0
- package/dist/hooks/empty-message-sanitizer/constants.js.map +1 -0
- package/dist/hooks/empty-message-sanitizer/index.d.ts +59 -0
- package/dist/hooks/empty-message-sanitizer/index.d.ts.map +1 -0
- package/dist/hooks/empty-message-sanitizer/index.js +171 -0
- package/dist/hooks/empty-message-sanitizer/index.js.map +1 -0
- package/dist/hooks/empty-message-sanitizer/types.d.ts +79 -0
- package/dist/hooks/empty-message-sanitizer/types.d.ts.map +1 -0
- package/dist/hooks/empty-message-sanitizer/types.js +10 -0
- package/dist/hooks/empty-message-sanitizer/types.js.map +1 -0
- package/dist/hooks/index.d.ts +35 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +81 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/keyword-detector/index.d.ts +40 -0
- package/dist/hooks/keyword-detector/index.d.ts.map +1 -0
- package/dist/hooks/keyword-detector/index.js +88 -0
- package/dist/hooks/keyword-detector/index.js.map +1 -0
- package/dist/hooks/non-interactive-env/constants.d.ts +35 -0
- package/dist/hooks/non-interactive-env/constants.d.ts.map +1 -0
- package/dist/hooks/non-interactive-env/constants.js +69 -0
- package/dist/hooks/non-interactive-env/constants.js.map +1 -0
- package/dist/hooks/non-interactive-env/detector.d.ts +2 -0
- package/dist/hooks/non-interactive-env/detector.d.ts.map +1 -0
- package/dist/hooks/non-interactive-env/detector.js +16 -0
- package/dist/hooks/non-interactive-env/detector.js.map +1 -0
- package/dist/hooks/non-interactive-env/index.d.ts +14 -0
- package/dist/hooks/non-interactive-env/index.d.ts.map +1 -0
- package/dist/hooks/non-interactive-env/index.js +72 -0
- package/dist/hooks/non-interactive-env/index.js.map +1 -0
- package/dist/hooks/non-interactive-env/types.d.ts +14 -0
- package/dist/hooks/non-interactive-env/types.d.ts.map +1 -0
- package/dist/hooks/non-interactive-env/types.js +2 -0
- package/dist/hooks/non-interactive-env/types.js.map +1 -0
- package/dist/hooks/olympus-orchestrator/constants.d.ts +23 -0
- package/dist/hooks/olympus-orchestrator/constants.d.ts.map +1 -0
- package/dist/hooks/olympus-orchestrator/constants.js +142 -0
- package/dist/hooks/olympus-orchestrator/constants.js.map +1 -0
- package/dist/hooks/olympus-orchestrator/index.d.ts +113 -0
- package/dist/hooks/olympus-orchestrator/index.d.ts.map +1 -0
- package/dist/hooks/olympus-orchestrator/index.js +283 -0
- package/dist/hooks/olympus-orchestrator/index.js.map +1 -0
- package/dist/hooks/persistent-mode/index.d.ts +40 -0
- package/dist/hooks/persistent-mode/index.d.ts.map +1 -0
- package/dist/hooks/persistent-mode/index.js +322 -0
- package/dist/hooks/persistent-mode/index.js.map +1 -0
- package/dist/hooks/plugin-patterns/index.d.ts +107 -0
- package/dist/hooks/plugin-patterns/index.d.ts.map +1 -0
- package/dist/hooks/plugin-patterns/index.js +289 -0
- package/dist/hooks/plugin-patterns/index.js.map +1 -0
- package/dist/hooks/preemptive-compaction/constants.d.ts +48 -0
- package/dist/hooks/preemptive-compaction/constants.d.ts.map +1 -0
- package/dist/hooks/preemptive-compaction/constants.js +90 -0
- package/dist/hooks/preemptive-compaction/constants.js.map +1 -0
- package/dist/hooks/preemptive-compaction/index.d.ts +55 -0
- package/dist/hooks/preemptive-compaction/index.d.ts.map +1 -0
- package/dist/hooks/preemptive-compaction/index.js +227 -0
- package/dist/hooks/preemptive-compaction/index.js.map +1 -0
- package/dist/hooks/preemptive-compaction/types.d.ts +76 -0
- package/dist/hooks/preemptive-compaction/types.d.ts.map +1 -0
- package/dist/hooks/preemptive-compaction/types.js +9 -0
- package/dist/hooks/preemptive-compaction/types.js.map +1 -0
- package/dist/hooks/ralph-loop/index.d.ts +60 -0
- package/dist/hooks/ralph-loop/index.d.ts.map +1 -0
- package/dist/hooks/ralph-loop/index.js +155 -0
- package/dist/hooks/ralph-loop/index.js.map +1 -0
- package/dist/hooks/ralph-verifier/index.d.ts +72 -0
- package/dist/hooks/ralph-verifier/index.d.ts.map +1 -0
- package/dist/hooks/ralph-verifier/index.js +223 -0
- package/dist/hooks/ralph-verifier/index.js.map +1 -0
- package/dist/hooks/rules-injector/constants.d.ts +25 -0
- package/dist/hooks/rules-injector/constants.d.ts.map +1 -0
- package/dist/hooks/rules-injector/constants.js +40 -0
- package/dist/hooks/rules-injector/constants.js.map +1 -0
- package/dist/hooks/rules-injector/finder.d.ts +24 -0
- package/dist/hooks/rules-injector/finder.d.ts.map +1 -0
- package/dist/hooks/rules-injector/finder.js +215 -0
- package/dist/hooks/rules-injector/finder.js.map +1 -0
- package/dist/hooks/rules-injector/index.d.ts +45 -0
- package/dist/hooks/rules-injector/index.d.ts.map +1 -0
- package/dist/hooks/rules-injector/index.js +187 -0
- package/dist/hooks/rules-injector/index.js.map +1 -0
- package/dist/hooks/rules-injector/matcher.d.ts +25 -0
- package/dist/hooks/rules-injector/matcher.d.ts.map +1 -0
- package/dist/hooks/rules-injector/matcher.js +70 -0
- package/dist/hooks/rules-injector/matcher.js.map +1 -0
- package/dist/hooks/rules-injector/parser.d.ts +20 -0
- package/dist/hooks/rules-injector/parser.d.ts.map +1 -0
- package/dist/hooks/rules-injector/parser.js +179 -0
- package/dist/hooks/rules-injector/parser.js.map +1 -0
- package/dist/hooks/rules-injector/storage.d.ts +26 -0
- package/dist/hooks/rules-injector/storage.d.ts.map +1 -0
- package/dist/hooks/rules-injector/storage.js +61 -0
- package/dist/hooks/rules-injector/storage.js.map +1 -0
- package/dist/hooks/rules-injector/types.d.ts +101 -0
- package/dist/hooks/rules-injector/types.d.ts.map +1 -0
- package/dist/hooks/rules-injector/types.js +10 -0
- package/dist/hooks/rules-injector/types.js.map +1 -0
- package/dist/hooks/session-recovery/constants.d.ts +56 -0
- package/dist/hooks/session-recovery/constants.d.ts.map +1 -0
- package/dist/hooks/session-recovery/constants.js +78 -0
- package/dist/hooks/session-recovery/constants.js.map +1 -0
- package/dist/hooks/session-recovery/index.d.ts +53 -0
- package/dist/hooks/session-recovery/index.d.ts.map +1 -0
- package/dist/hooks/session-recovery/index.js +321 -0
- package/dist/hooks/session-recovery/index.js.map +1 -0
- package/dist/hooks/session-recovery/storage.d.ts +76 -0
- package/dist/hooks/session-recovery/storage.d.ts.map +1 -0
- package/dist/hooks/session-recovery/storage.js +383 -0
- package/dist/hooks/session-recovery/storage.js.map +1 -0
- package/dist/hooks/session-recovery/types.d.ts +145 -0
- package/dist/hooks/session-recovery/types.d.ts.map +1 -0
- package/dist/hooks/session-recovery/types.js +8 -0
- package/dist/hooks/session-recovery/types.js.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/constants.d.ts +23 -0
- package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/constants.js +142 -0
- package/dist/hooks/sisyphus-orchestrator/constants.js.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/index.d.ts +113 -0
- package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -0
- package/dist/hooks/sisyphus-orchestrator/index.js +283 -0
- package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -0
- package/dist/hooks/the-ascent/index.d.ts +60 -0
- package/dist/hooks/the-ascent/index.d.ts.map +1 -0
- package/dist/hooks/the-ascent/index.js +155 -0
- package/dist/hooks/the-ascent/index.js.map +1 -0
- package/dist/hooks/think-mode/detector.d.ts +28 -0
- package/dist/hooks/think-mode/detector.d.ts.map +1 -0
- package/dist/hooks/think-mode/detector.js +105 -0
- package/dist/hooks/think-mode/detector.js.map +1 -0
- package/dist/hooks/think-mode/index.d.ts +70 -0
- package/dist/hooks/think-mode/index.d.ts.map +1 -0
- package/dist/hooks/think-mode/index.js +144 -0
- package/dist/hooks/think-mode/index.js.map +1 -0
- package/dist/hooks/think-mode/switcher.d.ts +39 -0
- package/dist/hooks/think-mode/switcher.d.ts.map +1 -0
- package/dist/hooks/think-mode/switcher.js +180 -0
- package/dist/hooks/think-mode/switcher.js.map +1 -0
- package/dist/hooks/think-mode/types.d.ts +60 -0
- package/dist/hooks/think-mode/types.d.ts.map +1 -0
- package/dist/hooks/think-mode/types.js +9 -0
- package/dist/hooks/think-mode/types.js.map +1 -0
- package/dist/hooks/thinking-block-validator/constants.d.ts +37 -0
- package/dist/hooks/thinking-block-validator/constants.d.ts.map +1 -0
- package/dist/hooks/thinking-block-validator/constants.js +50 -0
- package/dist/hooks/thinking-block-validator/constants.js.map +1 -0
- package/dist/hooks/thinking-block-validator/index.d.ts +35 -0
- package/dist/hooks/thinking-block-validator/index.d.ts.map +1 -0
- package/dist/hooks/thinking-block-validator/index.js +156 -0
- package/dist/hooks/thinking-block-validator/index.js.map +1 -0
- package/dist/hooks/thinking-block-validator/types.d.ts +67 -0
- package/dist/hooks/thinking-block-validator/types.d.ts.map +1 -0
- package/dist/hooks/thinking-block-validator/types.js +9 -0
- package/dist/hooks/thinking-block-validator/types.js.map +1 -0
- package/dist/hooks/todo-continuation/index.d.ts +39 -0
- package/dist/hooks/todo-continuation/index.d.ts.map +1 -0
- package/dist/hooks/todo-continuation/index.js +140 -0
- package/dist/hooks/todo-continuation/index.js.map +1 -0
- package/dist/hooks/ultrawork-state/index.d.ts +60 -0
- package/dist/hooks/ultrawork-state/index.d.ts.map +1 -0
- package/dist/hooks/ultrawork-state/index.js +207 -0
- package/dist/hooks/ultrawork-state/index.js.map +1 -0
- package/dist/index.d.ts +117 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +175 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/hooks.d.ts +196 -0
- package/dist/installer/hooks.d.ts.map +1 -0
- package/dist/installer/hooks.js +1385 -0
- package/dist/installer/hooks.js.map +1 -0
- package/dist/installer/index.d.ts +92 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +2249 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/servers.d.ts +77 -0
- package/dist/mcp/servers.d.ts.map +1 -0
- package/dist/mcp/servers.js +122 -0
- package/dist/mcp/servers.js.map +1 -0
- package/dist/shared/index.d.ts +5 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +5 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/types.d.ts +159 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +5 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/tools/ast-tools.d.ts +63 -0
- package/dist/tools/ast-tools.d.ts.map +1 -0
- package/dist/tools/ast-tools.js +450 -0
- package/dist/tools/ast-tools.js.map +1 -0
- package/dist/tools/index.d.ts +52 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +120 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/lsp/client.d.ts +201 -0
- package/dist/tools/lsp/client.d.ts.map +1 -0
- package/dist/tools/lsp/client.js +454 -0
- package/dist/tools/lsp/client.js.map +1 -0
- package/dist/tools/lsp/index.d.ts +9 -0
- package/dist/tools/lsp/index.d.ts.map +1 -0
- package/dist/tools/lsp/index.js +7 -0
- package/dist/tools/lsp/index.js.map +1 -0
- package/dist/tools/lsp/servers.d.ts +37 -0
- package/dist/tools/lsp/servers.d.ts.map +1 -0
- package/dist/tools/lsp/servers.js +149 -0
- package/dist/tools/lsp/servers.js.map +1 -0
- package/dist/tools/lsp/utils.d.ts +58 -0
- package/dist/tools/lsp/utils.d.ts.map +1 -0
- package/dist/tools/lsp/utils.js +236 -0
- package/dist/tools/lsp/utils.js.map +1 -0
- package/dist/tools/lsp-tools.d.ts +151 -0
- package/dist/tools/lsp-tools.d.ts.map +1 -0
- package/dist/tools/lsp-tools.js +358 -0
- package/dist/tools/lsp-tools.js.map +1 -0
- package/package.json +85 -0
- package/scripts/claude-sisyphus.sh +9 -0
- package/scripts/install.sh +1774 -0
- package/scripts/keyword-detector.mjs +209 -0
- package/scripts/keyword-detector.sh +71 -0
- package/scripts/persistent-mode.mjs +241 -0
- package/scripts/persistent-mode.sh +300 -0
- package/scripts/post-tool-verifier.mjs +217 -0
- package/scripts/post-tool-verifier.sh +196 -0
- package/scripts/pre-tool-enforcer.mjs +99 -0
- package/scripts/pre-tool-enforcer.sh +76 -0
- package/scripts/sisyphus-aliases.sh +18 -0
- package/scripts/stop-continuation.sh +31 -0
- package/scripts/test-pr25.sh +525 -0
- package/scripts/uninstall.sh +171 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Olympus Orchestrator Hook
|
|
3
|
+
*
|
|
4
|
+
* Enforces orchestrator behavior - delegation over direct implementation.
|
|
5
|
+
* When an orchestrator agent tries to directly modify files outside .olympus/,
|
|
6
|
+
* this hook injects reminders to delegate to subagents instead.
|
|
7
|
+
*
|
|
8
|
+
* Adapted from oh-my-opencode's olympus-orchestrator hook for shell-based hooks.
|
|
9
|
+
*/
|
|
10
|
+
import { execSync } from 'child_process';
|
|
11
|
+
import { HOOK_NAME, ALLOWED_PATH_PREFIX, WRITE_EDIT_TOOLS, DIRECT_WORK_REMINDER, ORCHESTRATOR_DELEGATION_REQUIRED, BOULDER_CONTINUATION_PROMPT, VERIFICATION_REMINDER, SINGLE_TASK_DIRECTIVE, } from './constants.js';
|
|
12
|
+
import { readBoulderState, getPlanProgress, } from '../../features/boulder-state/index.js';
|
|
13
|
+
// Re-export constants
|
|
14
|
+
export * from './constants.js';
|
|
15
|
+
/**
|
|
16
|
+
* Check if a file path is allowed for direct orchestrator modification
|
|
17
|
+
*/
|
|
18
|
+
export function isAllowedPath(filePath) {
|
|
19
|
+
if (!filePath)
|
|
20
|
+
return true;
|
|
21
|
+
return filePath.includes(ALLOWED_PATH_PREFIX);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if a tool is a write/edit tool
|
|
25
|
+
*/
|
|
26
|
+
export function isWriteEditTool(toolName) {
|
|
27
|
+
return WRITE_EDIT_TOOLS.includes(toolName);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get git diff statistics for the working directory
|
|
31
|
+
*/
|
|
32
|
+
export function getGitDiffStats(directory) {
|
|
33
|
+
try {
|
|
34
|
+
const output = execSync('git diff --numstat HEAD', {
|
|
35
|
+
cwd: directory,
|
|
36
|
+
encoding: 'utf-8',
|
|
37
|
+
timeout: 5000,
|
|
38
|
+
}).trim();
|
|
39
|
+
if (!output)
|
|
40
|
+
return [];
|
|
41
|
+
const statusOutput = execSync('git status --porcelain', {
|
|
42
|
+
cwd: directory,
|
|
43
|
+
encoding: 'utf-8',
|
|
44
|
+
timeout: 5000,
|
|
45
|
+
}).trim();
|
|
46
|
+
const statusMap = new Map();
|
|
47
|
+
for (const line of statusOutput.split('\n')) {
|
|
48
|
+
if (!line)
|
|
49
|
+
continue;
|
|
50
|
+
const status = line.substring(0, 2).trim();
|
|
51
|
+
const filePath = line.substring(3);
|
|
52
|
+
if (status === 'A' || status === '??') {
|
|
53
|
+
statusMap.set(filePath, 'added');
|
|
54
|
+
}
|
|
55
|
+
else if (status === 'D') {
|
|
56
|
+
statusMap.set(filePath, 'deleted');
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
statusMap.set(filePath, 'modified');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const stats = [];
|
|
63
|
+
for (const line of output.split('\n')) {
|
|
64
|
+
const parts = line.split('\t');
|
|
65
|
+
if (parts.length < 3)
|
|
66
|
+
continue;
|
|
67
|
+
const [addedStr, removedStr, path] = parts;
|
|
68
|
+
const added = addedStr === '-' ? 0 : parseInt(addedStr, 10);
|
|
69
|
+
const removed = removedStr === '-' ? 0 : parseInt(removedStr, 10);
|
|
70
|
+
stats.push({
|
|
71
|
+
path,
|
|
72
|
+
added,
|
|
73
|
+
removed,
|
|
74
|
+
status: statusMap.get(path) ?? 'modified',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return stats;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Format file changes for display
|
|
85
|
+
*/
|
|
86
|
+
export function formatFileChanges(stats) {
|
|
87
|
+
if (stats.length === 0)
|
|
88
|
+
return '[FILE CHANGES SUMMARY]\nNo file changes detected.\n';
|
|
89
|
+
const modified = stats.filter((s) => s.status === 'modified');
|
|
90
|
+
const added = stats.filter((s) => s.status === 'added');
|
|
91
|
+
const deleted = stats.filter((s) => s.status === 'deleted');
|
|
92
|
+
const lines = ['[FILE CHANGES SUMMARY]'];
|
|
93
|
+
if (modified.length > 0) {
|
|
94
|
+
lines.push('Modified files:');
|
|
95
|
+
for (const f of modified) {
|
|
96
|
+
lines.push(` ${f.path} (+${f.added}, -${f.removed})`);
|
|
97
|
+
}
|
|
98
|
+
lines.push('');
|
|
99
|
+
}
|
|
100
|
+
if (added.length > 0) {
|
|
101
|
+
lines.push('Created files:');
|
|
102
|
+
for (const f of added) {
|
|
103
|
+
lines.push(` ${f.path} (+${f.added})`);
|
|
104
|
+
}
|
|
105
|
+
lines.push('');
|
|
106
|
+
}
|
|
107
|
+
if (deleted.length > 0) {
|
|
108
|
+
lines.push('Deleted files:');
|
|
109
|
+
for (const f of deleted) {
|
|
110
|
+
lines.push(` ${f.path} (-${f.removed})`);
|
|
111
|
+
}
|
|
112
|
+
lines.push('');
|
|
113
|
+
}
|
|
114
|
+
return lines.join('\n');
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Build verification reminder with session context
|
|
118
|
+
*/
|
|
119
|
+
export function buildVerificationReminder(sessionId) {
|
|
120
|
+
let reminder = VERIFICATION_REMINDER;
|
|
121
|
+
if (sessionId) {
|
|
122
|
+
reminder += `
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
**If ANY verification fails, resume the subagent with the fix:**
|
|
127
|
+
Task tool with resume="${sessionId}", prompt="fix: [describe the specific failure]"`;
|
|
128
|
+
}
|
|
129
|
+
return reminder;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Build orchestrator reminder with plan progress
|
|
133
|
+
*/
|
|
134
|
+
export function buildOrchestratorReminder(planName, progress, sessionId) {
|
|
135
|
+
const remaining = progress.total - progress.completed;
|
|
136
|
+
return `
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
**State:** Plan: ${planName} | ${progress.completed}/${progress.total} done, ${remaining} left
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
${buildVerificationReminder(sessionId)}
|
|
144
|
+
|
|
145
|
+
ALL pass? → commit atomic unit, mark \`[x]\`, next task.`;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Build boulder continuation message
|
|
149
|
+
*/
|
|
150
|
+
export function buildBoulderContinuation(planName, remaining, total) {
|
|
151
|
+
return BOULDER_CONTINUATION_PROMPT.replace(/{PLAN_NAME}/g, planName) +
|
|
152
|
+
`\n\n[Status: ${total - remaining}/${total} completed, ${remaining} remaining]`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Process pre-tool-use hook for orchestrator
|
|
156
|
+
* Returns warning message if orchestrator tries to modify non-allowed paths
|
|
157
|
+
*/
|
|
158
|
+
export function processOrchestratorPreTool(input) {
|
|
159
|
+
const { toolName, toolInput } = input;
|
|
160
|
+
// Only check write/edit tools
|
|
161
|
+
if (!isWriteEditTool(toolName)) {
|
|
162
|
+
return { continue: true };
|
|
163
|
+
}
|
|
164
|
+
// Extract file path from tool input
|
|
165
|
+
const filePath = (toolInput?.filePath ?? toolInput?.path ?? toolInput?.file);
|
|
166
|
+
// Allow if path is in allowed prefix
|
|
167
|
+
if (!filePath || isAllowedPath(filePath)) {
|
|
168
|
+
return { continue: true };
|
|
169
|
+
}
|
|
170
|
+
// Inject warning for non-allowed path modifications
|
|
171
|
+
const warning = ORCHESTRATOR_DELEGATION_REQUIRED.replace('$FILE_PATH', filePath);
|
|
172
|
+
return {
|
|
173
|
+
continue: true,
|
|
174
|
+
message: warning,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Process post-tool-use hook for orchestrator
|
|
179
|
+
* Adds reminders after file modifications and Task delegations
|
|
180
|
+
*/
|
|
181
|
+
export function processOrchestratorPostTool(input, output) {
|
|
182
|
+
const { toolName, toolInput, directory } = input;
|
|
183
|
+
const workDir = directory || process.cwd();
|
|
184
|
+
// Handle write/edit tools
|
|
185
|
+
if (isWriteEditTool(toolName)) {
|
|
186
|
+
const filePath = (toolInput?.filePath ?? toolInput?.path ?? toolInput?.file);
|
|
187
|
+
if (filePath && !isAllowedPath(filePath)) {
|
|
188
|
+
return {
|
|
189
|
+
continue: true,
|
|
190
|
+
modifiedOutput: output + DIRECT_WORK_REMINDER,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Handle Task tool completion
|
|
195
|
+
if (toolName === 'Task' || toolName === 'task') {
|
|
196
|
+
// Check for background task launch
|
|
197
|
+
const isBackgroundLaunch = output.includes('Background task launched') || output.includes('Background task resumed');
|
|
198
|
+
if (isBackgroundLaunch) {
|
|
199
|
+
return { continue: true };
|
|
200
|
+
}
|
|
201
|
+
// Get git stats and build enhanced output
|
|
202
|
+
const gitStats = getGitDiffStats(workDir);
|
|
203
|
+
const fileChanges = formatFileChanges(gitStats);
|
|
204
|
+
// Check for boulder state
|
|
205
|
+
const boulderState = readBoulderState(workDir);
|
|
206
|
+
if (boulderState) {
|
|
207
|
+
const progress = getPlanProgress(boulderState.active_plan);
|
|
208
|
+
const enhancedOutput = `
|
|
209
|
+
## SUBAGENT WORK COMPLETED
|
|
210
|
+
|
|
211
|
+
${fileChanges}
|
|
212
|
+
<system-reminder>
|
|
213
|
+
${buildOrchestratorReminder(boulderState.plan_name, progress)}
|
|
214
|
+
</system-reminder>`;
|
|
215
|
+
return {
|
|
216
|
+
continue: true,
|
|
217
|
+
modifiedOutput: enhancedOutput,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// No boulder state - add standalone verification reminder
|
|
221
|
+
return {
|
|
222
|
+
continue: true,
|
|
223
|
+
modifiedOutput: output + `\n<system-reminder>\n${buildVerificationReminder()}\n</system-reminder>`,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
return { continue: true };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Check if boulder has incomplete tasks and build continuation prompt
|
|
230
|
+
*/
|
|
231
|
+
export function checkBoulderContinuation(directory) {
|
|
232
|
+
const boulderState = readBoulderState(directory);
|
|
233
|
+
if (!boulderState) {
|
|
234
|
+
return { shouldContinue: false };
|
|
235
|
+
}
|
|
236
|
+
const progress = getPlanProgress(boulderState.active_plan);
|
|
237
|
+
if (progress.isComplete) {
|
|
238
|
+
return { shouldContinue: false };
|
|
239
|
+
}
|
|
240
|
+
const remaining = progress.total - progress.completed;
|
|
241
|
+
return {
|
|
242
|
+
shouldContinue: true,
|
|
243
|
+
message: buildBoulderContinuation(boulderState.plan_name, remaining, progress.total),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Create olympus orchestrator hook handlers
|
|
248
|
+
*/
|
|
249
|
+
export function createOlympusOrchestratorHook(directory) {
|
|
250
|
+
return {
|
|
251
|
+
/**
|
|
252
|
+
* Hook name identifier
|
|
253
|
+
*/
|
|
254
|
+
name: HOOK_NAME,
|
|
255
|
+
/**
|
|
256
|
+
* Pre-tool execution handler
|
|
257
|
+
*/
|
|
258
|
+
preTool: (toolName, toolInput) => {
|
|
259
|
+
return processOrchestratorPreTool({
|
|
260
|
+
toolName,
|
|
261
|
+
toolInput,
|
|
262
|
+
directory,
|
|
263
|
+
});
|
|
264
|
+
},
|
|
265
|
+
/**
|
|
266
|
+
* Post-tool execution handler
|
|
267
|
+
*/
|
|
268
|
+
postTool: (toolName, toolInput, output) => {
|
|
269
|
+
return processOrchestratorPostTool({ toolName, toolInput, directory }, output);
|
|
270
|
+
},
|
|
271
|
+
/**
|
|
272
|
+
* Check for boulder continuation on session idle
|
|
273
|
+
*/
|
|
274
|
+
checkContinuation: () => {
|
|
275
|
+
return checkBoulderContinuation(directory);
|
|
276
|
+
},
|
|
277
|
+
/**
|
|
278
|
+
* Get single task directive for subagent prompts
|
|
279
|
+
*/
|
|
280
|
+
getSingleTaskDirective: () => SINGLE_TASK_DIRECTIVE,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/olympus-orchestrator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Mode Hook
|
|
3
|
+
*
|
|
4
|
+
* Unified handler for persistent work modes: ultrawork, the-ascent, and todo-continuation.
|
|
5
|
+
* This hook intercepts Stop events and enforces work continuation based on:
|
|
6
|
+
* 1. Active ultrawork mode with pending todos
|
|
7
|
+
* 2. Active the-ascent with incomplete promise
|
|
8
|
+
* 3. Any pending todos (general enforcement)
|
|
9
|
+
*
|
|
10
|
+
* Priority order: The Ascent > Ultrawork > Todo Continuation
|
|
11
|
+
*/
|
|
12
|
+
export interface PersistentModeResult {
|
|
13
|
+
/** Whether to block the stop event */
|
|
14
|
+
shouldBlock: boolean;
|
|
15
|
+
/** Message to inject into context */
|
|
16
|
+
message: string;
|
|
17
|
+
/** Which mode triggered the block */
|
|
18
|
+
mode: 'the-ascent' | 'ultrawork' | 'todo-continuation' | 'none';
|
|
19
|
+
/** Additional metadata */
|
|
20
|
+
metadata?: {
|
|
21
|
+
todoCount?: number;
|
|
22
|
+
iteration?: number;
|
|
23
|
+
maxIterations?: number;
|
|
24
|
+
reinforcementCount?: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Main persistent mode checker
|
|
29
|
+
* Checks all persistent modes in priority order and returns appropriate action
|
|
30
|
+
*/
|
|
31
|
+
export declare function checkPersistentModes(sessionId?: string, directory?: string): Promise<PersistentModeResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Create hook output for Claude Code
|
|
34
|
+
*/
|
|
35
|
+
export declare function createHookOutput(result: PersistentModeResult): {
|
|
36
|
+
continue: boolean;
|
|
37
|
+
reason?: string;
|
|
38
|
+
message?: string;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/persistent-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8BH,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,mBAAmB,GAAG,MAAM,CAAC;IAChE,0BAA0B;IAC1B,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAsSD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAiC/B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG;IAC9D,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAcA"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Mode Hook
|
|
3
|
+
*
|
|
4
|
+
* Unified handler for persistent work modes: ultrawork, the-ascent, and todo-continuation.
|
|
5
|
+
* This hook intercepts Stop events and enforces work continuation based on:
|
|
6
|
+
* 1. Active ultrawork mode with pending todos
|
|
7
|
+
* 2. Active the-ascent with incomplete promise
|
|
8
|
+
* 3. Any pending todos (general enforcement)
|
|
9
|
+
*
|
|
10
|
+
* Priority order: The Ascent > Ultrawork > Todo Continuation
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync } from 'fs';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
import { homedir } from 'os';
|
|
15
|
+
import { readUltraworkState, incrementReinforcement, deactivateUltrawork, getUltraworkPersistenceMessage } from '../ultrawork-state/index.js';
|
|
16
|
+
import { readAscentState, incrementAscentIteration, clearAscentState, detectCompletionPromise } from '../the-ascent/index.js';
|
|
17
|
+
import { readVerificationState, startVerification, recordOracleFeedback, getOracleVerificationPrompt, getOracleRejectionContinuationPrompt, detectOracleApproval, detectOracleRejection, clearVerificationState } from '../ascent-verifier/index.js';
|
|
18
|
+
import { checkIncompleteTodos, getNextPendingTodo } from '../todo-continuation/index.js';
|
|
19
|
+
import { TODO_CONTINUATION_PROMPT } from '../../installer/hooks.js';
|
|
20
|
+
/**
|
|
21
|
+
* Check for oracle approval in session transcript
|
|
22
|
+
*/
|
|
23
|
+
function checkOracleApprovalInTranscript(sessionId) {
|
|
24
|
+
const claudeDir = join(homedir(), '.claude');
|
|
25
|
+
const possiblePaths = [
|
|
26
|
+
join(claudeDir, 'sessions', sessionId, 'transcript.md'),
|
|
27
|
+
join(claudeDir, 'sessions', sessionId, 'messages.json'),
|
|
28
|
+
join(claudeDir, 'transcripts', `${sessionId}.md`)
|
|
29
|
+
];
|
|
30
|
+
for (const transcriptPath of possiblePaths) {
|
|
31
|
+
if (existsSync(transcriptPath)) {
|
|
32
|
+
try {
|
|
33
|
+
const content = readFileSync(transcriptPath, 'utf-8');
|
|
34
|
+
if (detectOracleApproval(content)) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check for oracle rejection in session transcript
|
|
47
|
+
*/
|
|
48
|
+
function checkOracleRejectionInTranscript(sessionId) {
|
|
49
|
+
const claudeDir = join(homedir(), '.claude');
|
|
50
|
+
const possiblePaths = [
|
|
51
|
+
join(claudeDir, 'sessions', sessionId, 'transcript.md'),
|
|
52
|
+
join(claudeDir, 'sessions', sessionId, 'messages.json'),
|
|
53
|
+
join(claudeDir, 'transcripts', `${sessionId}.md`)
|
|
54
|
+
];
|
|
55
|
+
for (const transcriptPath of possiblePaths) {
|
|
56
|
+
if (existsSync(transcriptPath)) {
|
|
57
|
+
try {
|
|
58
|
+
const content = readFileSync(transcriptPath, 'utf-8');
|
|
59
|
+
const result = detectOracleRejection(content);
|
|
60
|
+
if (result.rejected) {
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { rejected: false, feedback: '' };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check The Ascent state and determine if it should continue
|
|
73
|
+
* Now includes Oracle verification for completion claims
|
|
74
|
+
*/
|
|
75
|
+
async function checkAscentLoop(sessionId, directory) {
|
|
76
|
+
const workingDir = directory || process.cwd();
|
|
77
|
+
const state = readAscentState(workingDir);
|
|
78
|
+
if (!state || !state.active) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
// Check if this is the right session
|
|
82
|
+
if (state.session_id && sessionId && state.session_id !== sessionId) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
// Check for existing verification state (oracle verification in progress)
|
|
86
|
+
const verificationState = readVerificationState(workingDir);
|
|
87
|
+
if (verificationState?.pending) {
|
|
88
|
+
// Verification is in progress - check for oracle's response
|
|
89
|
+
if (sessionId) {
|
|
90
|
+
// Check for oracle approval
|
|
91
|
+
if (checkOracleApprovalInTranscript(sessionId)) {
|
|
92
|
+
// Oracle approved - truly complete
|
|
93
|
+
clearVerificationState(workingDir);
|
|
94
|
+
clearAscentState(workingDir);
|
|
95
|
+
return {
|
|
96
|
+
shouldBlock: false,
|
|
97
|
+
message: `[ASCENT LOOP VERIFIED COMPLETE] Oracle verified task completion after ${state.iteration} iteration(s). Excellent work!`,
|
|
98
|
+
mode: 'none'
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// Check for oracle rejection
|
|
102
|
+
const rejection = checkOracleRejectionInTranscript(sessionId);
|
|
103
|
+
if (rejection.rejected) {
|
|
104
|
+
// Oracle rejected - continue with feedback
|
|
105
|
+
recordOracleFeedback(workingDir, false, rejection.feedback);
|
|
106
|
+
const updatedVerification = readVerificationState(workingDir);
|
|
107
|
+
if (updatedVerification) {
|
|
108
|
+
const continuationPrompt = getOracleRejectionContinuationPrompt(updatedVerification);
|
|
109
|
+
return {
|
|
110
|
+
shouldBlock: true,
|
|
111
|
+
message: continuationPrompt,
|
|
112
|
+
mode: 'the-ascent',
|
|
113
|
+
metadata: {
|
|
114
|
+
iteration: state.iteration,
|
|
115
|
+
maxIterations: state.max_iterations
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Verification still pending - remind to spawn oracle
|
|
122
|
+
const verificationPrompt = getOracleVerificationPrompt(verificationState);
|
|
123
|
+
return {
|
|
124
|
+
shouldBlock: true,
|
|
125
|
+
message: verificationPrompt,
|
|
126
|
+
mode: 'the-ascent',
|
|
127
|
+
metadata: {
|
|
128
|
+
iteration: state.iteration,
|
|
129
|
+
maxIterations: state.max_iterations
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Check for completion promise in transcript
|
|
134
|
+
const completed = detectCompletionPromise(sessionId || '', state.completion_promise);
|
|
135
|
+
if (completed) {
|
|
136
|
+
// Completion promise detected - START oracle verification instead of completing
|
|
137
|
+
startVerification(workingDir, state.completion_promise, state.prompt);
|
|
138
|
+
const newVerificationState = readVerificationState(workingDir);
|
|
139
|
+
if (newVerificationState) {
|
|
140
|
+
const verificationPrompt = getOracleVerificationPrompt(newVerificationState);
|
|
141
|
+
return {
|
|
142
|
+
shouldBlock: true,
|
|
143
|
+
message: verificationPrompt,
|
|
144
|
+
mode: 'the-ascent',
|
|
145
|
+
metadata: {
|
|
146
|
+
iteration: state.iteration,
|
|
147
|
+
maxIterations: state.max_iterations
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// Fallback if verification state couldn't be created
|
|
152
|
+
clearAscentState(workingDir);
|
|
153
|
+
return {
|
|
154
|
+
shouldBlock: false,
|
|
155
|
+
message: `[ASCENT LOOP COMPLETE] Task completed after ${state.iteration} iteration(s). Great work!`,
|
|
156
|
+
mode: 'none'
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// Check max iterations
|
|
160
|
+
if (state.iteration >= state.max_iterations) {
|
|
161
|
+
clearAscentState(workingDir);
|
|
162
|
+
clearVerificationState(workingDir);
|
|
163
|
+
return {
|
|
164
|
+
shouldBlock: false,
|
|
165
|
+
message: `[ASCENT LOOP STOPPED] Max iterations (${state.max_iterations}) reached without completion promise. Consider reviewing the task requirements.`,
|
|
166
|
+
mode: 'none'
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// Increment and continue
|
|
170
|
+
const newState = incrementAscentIteration(workingDir);
|
|
171
|
+
if (!newState) {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
const continuationPrompt = `<the-ascent-continuation>
|
|
175
|
+
|
|
176
|
+
[ASCENT LOOP - ITERATION ${newState.iteration}/${newState.max_iterations}]
|
|
177
|
+
|
|
178
|
+
Your previous attempt did not output the completion promise. The work is NOT done yet.
|
|
179
|
+
|
|
180
|
+
CRITICAL INSTRUCTIONS:
|
|
181
|
+
1. Review your progress and the original task
|
|
182
|
+
2. Check your todo list - are ALL items marked complete?
|
|
183
|
+
3. Continue from where you left off
|
|
184
|
+
4. When FULLY complete, output: <promise>${newState.completion_promise}</promise>
|
|
185
|
+
5. Do NOT stop until the task is truly done
|
|
186
|
+
|
|
187
|
+
${newState.prompt ? `Original task: ${newState.prompt}` : ''}
|
|
188
|
+
|
|
189
|
+
</the-ascent-continuation>
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
`;
|
|
194
|
+
return {
|
|
195
|
+
shouldBlock: true,
|
|
196
|
+
message: continuationPrompt,
|
|
197
|
+
mode: 'the-ascent',
|
|
198
|
+
metadata: {
|
|
199
|
+
iteration: newState.iteration,
|
|
200
|
+
maxIterations: newState.max_iterations
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Check Ultrawork state and determine if it should reinforce
|
|
206
|
+
*/
|
|
207
|
+
async function checkUltrawork(sessionId, directory, hasIncompleteTodos) {
|
|
208
|
+
const state = readUltraworkState(directory);
|
|
209
|
+
if (!state || !state.active) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
// If bound to a session, only reinforce for that session
|
|
213
|
+
if (state.session_id && sessionId && state.session_id !== sessionId) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
// If no incomplete todos, ultrawork can complete
|
|
217
|
+
if (!hasIncompleteTodos) {
|
|
218
|
+
deactivateUltrawork(directory);
|
|
219
|
+
return {
|
|
220
|
+
shouldBlock: false,
|
|
221
|
+
message: `[ULTRAWORK COMPLETE] All tasks finished. Ultrawork mode deactivated. Well done!`,
|
|
222
|
+
mode: 'none'
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
// Reinforce ultrawork mode
|
|
226
|
+
const newState = incrementReinforcement(directory);
|
|
227
|
+
if (!newState) {
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
const message = getUltraworkPersistenceMessage(newState);
|
|
231
|
+
return {
|
|
232
|
+
shouldBlock: true,
|
|
233
|
+
message,
|
|
234
|
+
mode: 'ultrawork',
|
|
235
|
+
metadata: {
|
|
236
|
+
reinforcementCount: newState.reinforcement_count
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Check for incomplete todos (baseline enforcement)
|
|
242
|
+
*/
|
|
243
|
+
async function checkTodoContinuation(sessionId, directory) {
|
|
244
|
+
const result = await checkIncompleteTodos(sessionId, directory);
|
|
245
|
+
if (result.count === 0) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
const nextTodo = getNextPendingTodo(result);
|
|
249
|
+
const nextTaskInfo = nextTodo
|
|
250
|
+
? `\n\nNext task: "${nextTodo.content}" (${nextTodo.status})`
|
|
251
|
+
: '';
|
|
252
|
+
const message = `<todo-continuation>
|
|
253
|
+
|
|
254
|
+
${TODO_CONTINUATION_PROMPT}
|
|
255
|
+
|
|
256
|
+
[Status: ${result.count} of ${result.total} tasks remaining]${nextTaskInfo}
|
|
257
|
+
|
|
258
|
+
</todo-continuation>
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
`;
|
|
263
|
+
return {
|
|
264
|
+
shouldBlock: true,
|
|
265
|
+
message,
|
|
266
|
+
mode: 'todo-continuation',
|
|
267
|
+
metadata: {
|
|
268
|
+
todoCount: result.count
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Main persistent mode checker
|
|
274
|
+
* Checks all persistent modes in priority order and returns appropriate action
|
|
275
|
+
*/
|
|
276
|
+
export async function checkPersistentModes(sessionId, directory) {
|
|
277
|
+
const workingDir = directory || process.cwd();
|
|
278
|
+
// First, check for incomplete todos (we need this info for ultrawork)
|
|
279
|
+
const todoResult = await checkIncompleteTodos(sessionId, workingDir);
|
|
280
|
+
const hasIncompleteTodos = todoResult.count > 0;
|
|
281
|
+
// Priority 1: The Ascent (explicit loop mode)
|
|
282
|
+
const ascentResult = await checkAscentLoop(sessionId, workingDir);
|
|
283
|
+
if (ascentResult?.shouldBlock) {
|
|
284
|
+
return ascentResult;
|
|
285
|
+
}
|
|
286
|
+
// Priority 2: Ultrawork Mode (performance mode with persistence)
|
|
287
|
+
const ultraworkResult = await checkUltrawork(sessionId, workingDir, hasIncompleteTodos);
|
|
288
|
+
if (ultraworkResult?.shouldBlock) {
|
|
289
|
+
return ultraworkResult;
|
|
290
|
+
}
|
|
291
|
+
// Priority 3: Todo Continuation (baseline enforcement)
|
|
292
|
+
if (hasIncompleteTodos) {
|
|
293
|
+
const todoContResult = await checkTodoContinuation(sessionId, workingDir);
|
|
294
|
+
if (todoContResult?.shouldBlock) {
|
|
295
|
+
return todoContResult;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// No blocking needed
|
|
299
|
+
return {
|
|
300
|
+
shouldBlock: false,
|
|
301
|
+
message: '',
|
|
302
|
+
mode: 'none'
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Create hook output for Claude Code
|
|
307
|
+
*/
|
|
308
|
+
export function createHookOutput(result) {
|
|
309
|
+
if (!result.shouldBlock) {
|
|
310
|
+
// Allow stop, but optionally inject completion message
|
|
311
|
+
return {
|
|
312
|
+
continue: true,
|
|
313
|
+
message: result.message || undefined
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
// Block stop and inject continuation message
|
|
317
|
+
return {
|
|
318
|
+
continue: false,
|
|
319
|
+
reason: result.message
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/persistent-mode/index.ts"],"names":[],"mappings":"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"}
|