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,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Ascent Hook
|
|
3
|
+
*
|
|
4
|
+
* Self-referential work loop that continues until a completion promise is detected.
|
|
5
|
+
* Named after the character who keeps working until the job is done.
|
|
6
|
+
*
|
|
7
|
+
* Ported from oh-my-opencode's the-ascent hook.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { homedir } from 'os';
|
|
12
|
+
const DEFAULT_MAX_ITERATIONS = 10;
|
|
13
|
+
const DEFAULT_COMPLETION_PROMISE = 'TASK_COMPLETE';
|
|
14
|
+
/**
|
|
15
|
+
* Get the state file path for The Ascent
|
|
16
|
+
*/
|
|
17
|
+
function getStateFilePath(directory) {
|
|
18
|
+
const olympusDir = join(directory, '.olympus');
|
|
19
|
+
return join(olympusDir, 'ascent-state.json');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Ensure the .olympus directory exists
|
|
23
|
+
*/
|
|
24
|
+
function ensureStateDir(directory) {
|
|
25
|
+
const olympusDir = join(directory, '.olympus');
|
|
26
|
+
if (!existsSync(olympusDir)) {
|
|
27
|
+
mkdirSync(olympusDir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Read The Ascent state from disk
|
|
32
|
+
*/
|
|
33
|
+
export function readAscentState(directory) {
|
|
34
|
+
const stateFile = getStateFilePath(directory);
|
|
35
|
+
if (!existsSync(stateFile)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const content = readFileSync(stateFile, 'utf-8');
|
|
40
|
+
return JSON.parse(content);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Write The Ascent state to disk
|
|
48
|
+
*/
|
|
49
|
+
export function writeAscentState(directory, state) {
|
|
50
|
+
try {
|
|
51
|
+
ensureStateDir(directory);
|
|
52
|
+
const stateFile = getStateFilePath(directory);
|
|
53
|
+
writeFileSync(stateFile, JSON.stringify(state, null, 2));
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Clear The Ascent state
|
|
62
|
+
*/
|
|
63
|
+
export function clearAscentState(directory) {
|
|
64
|
+
const stateFile = getStateFilePath(directory);
|
|
65
|
+
if (!existsSync(stateFile)) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
unlinkSync(stateFile);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Increment The Ascent iteration
|
|
78
|
+
*/
|
|
79
|
+
export function incrementAscentIteration(directory) {
|
|
80
|
+
const state = readAscentState(directory);
|
|
81
|
+
if (!state || !state.active) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
state.iteration += 1;
|
|
85
|
+
if (writeAscentState(directory, state)) {
|
|
86
|
+
return state;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Detect completion promise in session transcript
|
|
92
|
+
*/
|
|
93
|
+
export function detectCompletionPromise(sessionId, promise) {
|
|
94
|
+
// Try to find transcript in Claude's session directory
|
|
95
|
+
const claudeDir = join(homedir(), '.claude');
|
|
96
|
+
const possiblePaths = [
|
|
97
|
+
join(claudeDir, 'sessions', sessionId, 'transcript.md'),
|
|
98
|
+
join(claudeDir, 'sessions', sessionId, 'messages.json'),
|
|
99
|
+
join(claudeDir, 'transcripts', `${sessionId}.md`)
|
|
100
|
+
];
|
|
101
|
+
for (const transcriptPath of possiblePaths) {
|
|
102
|
+
if (existsSync(transcriptPath)) {
|
|
103
|
+
try {
|
|
104
|
+
const content = readFileSync(transcriptPath, 'utf-8');
|
|
105
|
+
const pattern = new RegExp(`<promise>\\s*${escapeRegex(promise)}\\s*</promise>`, 'is');
|
|
106
|
+
if (pattern.test(content)) {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Escape regex special characters
|
|
119
|
+
*/
|
|
120
|
+
function escapeRegex(str) {
|
|
121
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a The Ascent hook instance
|
|
125
|
+
*/
|
|
126
|
+
export function createAscentLoopHook(directory) {
|
|
127
|
+
const startLoop = (sessionId, prompt, options) => {
|
|
128
|
+
const state = {
|
|
129
|
+
active: true,
|
|
130
|
+
iteration: 1,
|
|
131
|
+
max_iterations: options?.maxIterations ?? DEFAULT_MAX_ITERATIONS,
|
|
132
|
+
completion_promise: options?.completionPromise ?? DEFAULT_COMPLETION_PROMISE,
|
|
133
|
+
started_at: new Date().toISOString(),
|
|
134
|
+
prompt,
|
|
135
|
+
session_id: sessionId
|
|
136
|
+
};
|
|
137
|
+
return writeAscentState(directory, state);
|
|
138
|
+
};
|
|
139
|
+
const cancelLoop = (sessionId) => {
|
|
140
|
+
const state = readAscentState(directory);
|
|
141
|
+
if (!state || state.session_id !== sessionId) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
return clearAscentState(directory);
|
|
145
|
+
};
|
|
146
|
+
const getState = () => {
|
|
147
|
+
return readAscentState(directory);
|
|
148
|
+
};
|
|
149
|
+
return {
|
|
150
|
+
startLoop,
|
|
151
|
+
cancelLoop,
|
|
152
|
+
getState
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/the-ascent/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Think Mode Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects think/ultrathink keywords in prompts.
|
|
5
|
+
* Supports multiple languages for global accessibility.
|
|
6
|
+
*
|
|
7
|
+
* Ported from oh-my-opencode's think-mode hook.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Remove code blocks from text to avoid false positive keyword detection.
|
|
11
|
+
*/
|
|
12
|
+
export declare function removeCodeBlocks(text: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Detect if text contains a think keyword (excluding code blocks).
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectThinkKeyword(text: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Extract text content from message parts.
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractPromptText(parts: Array<{
|
|
21
|
+
type: string;
|
|
22
|
+
text?: string;
|
|
23
|
+
}>): string;
|
|
24
|
+
/**
|
|
25
|
+
* Check if the text contains the ultrathink keyword specifically.
|
|
26
|
+
*/
|
|
27
|
+
export declare function detectUltrathinkKeyword(text: string): boolean;
|
|
28
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/hooks/think-mode/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5C,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG7D"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Think Mode Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects think/ultrathink keywords in prompts.
|
|
5
|
+
* Supports multiple languages for global accessibility.
|
|
6
|
+
*
|
|
7
|
+
* Ported from oh-my-opencode's think-mode hook.
|
|
8
|
+
*/
|
|
9
|
+
/** English patterns for think keywords */
|
|
10
|
+
const ENGLISH_PATTERNS = [/\bultrathink\b/i, /\bthink\b/i];
|
|
11
|
+
/** Multilingual think keywords for global support */
|
|
12
|
+
const MULTILINGUAL_KEYWORDS = [
|
|
13
|
+
// Korean
|
|
14
|
+
'생각', '고민', '검토', '제대로',
|
|
15
|
+
// Chinese (Simplified & Traditional)
|
|
16
|
+
'思考', '考虑', '考慮',
|
|
17
|
+
// Japanese
|
|
18
|
+
'考え', '熟考',
|
|
19
|
+
// Hindi
|
|
20
|
+
'सोच', 'विचार',
|
|
21
|
+
// Arabic
|
|
22
|
+
'تفكير', 'تأمل',
|
|
23
|
+
// Bengali
|
|
24
|
+
'চিন্তা', 'ভাবনা',
|
|
25
|
+
// Russian
|
|
26
|
+
'думать', 'думай', 'размышлять', 'размышляй',
|
|
27
|
+
// Portuguese
|
|
28
|
+
'pensar', 'pense', 'refletir', 'reflita',
|
|
29
|
+
// Spanish
|
|
30
|
+
'piensa', 'reflexionar', 'reflexiona',
|
|
31
|
+
// French
|
|
32
|
+
'penser', 'réfléchir', 'réfléchis',
|
|
33
|
+
// German
|
|
34
|
+
'denken', 'denk', 'nachdenken',
|
|
35
|
+
// Vietnamese
|
|
36
|
+
'suy nghĩ', 'cân nhắc',
|
|
37
|
+
// Turkish
|
|
38
|
+
'düşün', 'düşünmek',
|
|
39
|
+
// Italian
|
|
40
|
+
'pensare', 'pensa', 'riflettere', 'rifletti',
|
|
41
|
+
// Thai
|
|
42
|
+
'คิด', 'พิจารณา',
|
|
43
|
+
// Polish
|
|
44
|
+
'myśl', 'myśleć', 'zastanów',
|
|
45
|
+
// Dutch
|
|
46
|
+
'nadenken',
|
|
47
|
+
// Indonesian/Malay
|
|
48
|
+
'berpikir', 'pikir', 'pertimbangkan',
|
|
49
|
+
// Ukrainian
|
|
50
|
+
'думати', 'роздумувати',
|
|
51
|
+
// Greek
|
|
52
|
+
'σκέψου', 'σκέφτομαι',
|
|
53
|
+
// Czech
|
|
54
|
+
'myslet', 'mysli', 'přemýšlet',
|
|
55
|
+
// Romanian
|
|
56
|
+
'gândește', 'gândi', 'reflectă',
|
|
57
|
+
// Swedish
|
|
58
|
+
'tänka', 'tänk', 'fundera',
|
|
59
|
+
// Hungarian
|
|
60
|
+
'gondolkodj', 'gondolkodni',
|
|
61
|
+
// Finnish
|
|
62
|
+
'ajattele', 'ajatella', 'pohdi',
|
|
63
|
+
// Danish
|
|
64
|
+
'tænk', 'tænke', 'overvej',
|
|
65
|
+
// Norwegian
|
|
66
|
+
'tenk', 'tenke', 'gruble',
|
|
67
|
+
// Hebrew
|
|
68
|
+
'חשוב', 'לחשוב', 'להרהר',
|
|
69
|
+
];
|
|
70
|
+
/** Combined patterns including multilingual support */
|
|
71
|
+
const MULTILINGUAL_PATTERNS = MULTILINGUAL_KEYWORDS.map((kw) => new RegExp(kw, 'i'));
|
|
72
|
+
const THINK_PATTERNS = [...ENGLISH_PATTERNS, ...MULTILINGUAL_PATTERNS];
|
|
73
|
+
/** Regex patterns for code blocks */
|
|
74
|
+
const CODE_BLOCK_PATTERN = /```[\s\S]*?```/g;
|
|
75
|
+
const INLINE_CODE_PATTERN = /`[^`]+`/g;
|
|
76
|
+
/**
|
|
77
|
+
* Remove code blocks from text to avoid false positive keyword detection.
|
|
78
|
+
*/
|
|
79
|
+
export function removeCodeBlocks(text) {
|
|
80
|
+
return text.replace(CODE_BLOCK_PATTERN, '').replace(INLINE_CODE_PATTERN, '');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Detect if text contains a think keyword (excluding code blocks).
|
|
84
|
+
*/
|
|
85
|
+
export function detectThinkKeyword(text) {
|
|
86
|
+
const textWithoutCode = removeCodeBlocks(text);
|
|
87
|
+
return THINK_PATTERNS.some((pattern) => pattern.test(textWithoutCode));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Extract text content from message parts.
|
|
91
|
+
*/
|
|
92
|
+
export function extractPromptText(parts) {
|
|
93
|
+
return parts
|
|
94
|
+
.filter((p) => p.type === 'text')
|
|
95
|
+
.map((p) => p.text || '')
|
|
96
|
+
.join('');
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if the text contains the ultrathink keyword specifically.
|
|
100
|
+
*/
|
|
101
|
+
export function detectUltrathinkKeyword(text) {
|
|
102
|
+
const textWithoutCode = removeCodeBlocks(text);
|
|
103
|
+
return /\bultrathink\b/i.test(textWithoutCode);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/hooks/think-mode/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Think Mode Hook
|
|
3
|
+
*
|
|
4
|
+
* Activates extended thinking/reasoning mode when users include
|
|
5
|
+
* think keywords in their prompts.
|
|
6
|
+
*
|
|
7
|
+
* Ported from oh-my-opencode's think-mode hook.
|
|
8
|
+
*/
|
|
9
|
+
import { getClaudeThinkingConfig } from './switcher.js';
|
|
10
|
+
import type { ThinkModeState, ThinkModeInput } from './types.js';
|
|
11
|
+
export * from './detector.js';
|
|
12
|
+
export * from './switcher.js';
|
|
13
|
+
export * from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Clear think mode state for a session.
|
|
16
|
+
*/
|
|
17
|
+
export declare function clearThinkModeState(sessionId: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Get the current think mode state for a session.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getThinkModeState(sessionId: string): ThinkModeState | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Check if think mode is active for a session.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isThinkModeActive(sessionId: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Process a prompt for think mode keywords.
|
|
28
|
+
* Returns the detected state.
|
|
29
|
+
*/
|
|
30
|
+
export declare function processThinkMode(sessionId: string, promptText: string): ThinkModeState;
|
|
31
|
+
/**
|
|
32
|
+
* Create the think mode hook for Claude Code integration.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createThinkModeHook(): {
|
|
35
|
+
/**
|
|
36
|
+
* Process chat parameters and detect think mode.
|
|
37
|
+
*/
|
|
38
|
+
processChatParams: (sessionId: string, input: ThinkModeInput) => ThinkModeState;
|
|
39
|
+
/**
|
|
40
|
+
* Handle session deletion events.
|
|
41
|
+
*/
|
|
42
|
+
onSessionDeleted: (sessionId: string) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Check if think mode was requested.
|
|
45
|
+
*/
|
|
46
|
+
isRequested: (sessionId: string) => boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Get the current state.
|
|
49
|
+
*/
|
|
50
|
+
getState: (sessionId: string) => ThinkModeState | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Clear state for a session.
|
|
53
|
+
*/
|
|
54
|
+
clear: typeof clearThinkModeState;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Simplified function to check if a prompt requests think mode.
|
|
58
|
+
* For direct use without hook context.
|
|
59
|
+
*/
|
|
60
|
+
export declare function shouldActivateThinkMode(prompt: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Check if ultrathink (highest reasoning) was requested.
|
|
63
|
+
*/
|
|
64
|
+
export declare function shouldActivateUltrathink(prompt: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Get Claude thinking configuration for extended thinking.
|
|
67
|
+
* For direct use when manually configuring Claude API calls.
|
|
68
|
+
*/
|
|
69
|
+
export { getClaudeThinkingConfig };
|
|
70
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/think-mode/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAA2D,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACjH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjE,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAK3B;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,cAAc,CAehB;AAED;;GAEG;AACH,wBAAgB,mBAAmB;IAE/B;;OAEG;mCAEU,MAAM,SACV,cAAc,KACpB,cAAc;IAkDjB;;OAEG;kCAC2B,MAAM,KAAG,IAAI;IAI3C;;OAEG;6BACsB,MAAM,KAAG,OAAO;IAKzC;;OAEG;0BACmB,MAAM,KAAG,cAAc,GAAG,SAAS;IAIzD;;OAEG;;EAGN;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;GAGG;AACH,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Think Mode Hook
|
|
3
|
+
*
|
|
4
|
+
* Activates extended thinking/reasoning mode when users include
|
|
5
|
+
* think keywords in their prompts.
|
|
6
|
+
*
|
|
7
|
+
* Ported from oh-my-opencode's think-mode hook.
|
|
8
|
+
*/
|
|
9
|
+
import { detectThinkKeyword, extractPromptText, detectUltrathinkKeyword } from './detector.js';
|
|
10
|
+
import { getHighVariant, isAlreadyHighVariant, getThinkingConfig, getClaudeThinkingConfig } from './switcher.js';
|
|
11
|
+
// Re-export all submodules
|
|
12
|
+
export * from './detector.js';
|
|
13
|
+
export * from './switcher.js';
|
|
14
|
+
export * from './types.js';
|
|
15
|
+
/** Session state storage for think mode */
|
|
16
|
+
const thinkModeState = new Map();
|
|
17
|
+
/**
|
|
18
|
+
* Clear think mode state for a session.
|
|
19
|
+
*/
|
|
20
|
+
export function clearThinkModeState(sessionId) {
|
|
21
|
+
thinkModeState.delete(sessionId);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the current think mode state for a session.
|
|
25
|
+
*/
|
|
26
|
+
export function getThinkModeState(sessionId) {
|
|
27
|
+
return thinkModeState.get(sessionId);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if think mode is active for a session.
|
|
31
|
+
*/
|
|
32
|
+
export function isThinkModeActive(sessionId) {
|
|
33
|
+
const state = thinkModeState.get(sessionId);
|
|
34
|
+
return state?.requested ?? false;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Process a prompt for think mode keywords.
|
|
38
|
+
* Returns the detected state.
|
|
39
|
+
*/
|
|
40
|
+
export function processThinkMode(sessionId, promptText) {
|
|
41
|
+
const state = {
|
|
42
|
+
requested: false,
|
|
43
|
+
modelSwitched: false,
|
|
44
|
+
thinkingConfigInjected: false,
|
|
45
|
+
};
|
|
46
|
+
if (!detectThinkKeyword(promptText)) {
|
|
47
|
+
thinkModeState.set(sessionId, state);
|
|
48
|
+
return state;
|
|
49
|
+
}
|
|
50
|
+
state.requested = true;
|
|
51
|
+
thinkModeState.set(sessionId, state);
|
|
52
|
+
return state;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create the think mode hook for Claude Code integration.
|
|
56
|
+
*/
|
|
57
|
+
export function createThinkModeHook() {
|
|
58
|
+
return {
|
|
59
|
+
/**
|
|
60
|
+
* Process chat parameters and detect think mode.
|
|
61
|
+
*/
|
|
62
|
+
processChatParams: (sessionId, input) => {
|
|
63
|
+
const promptText = extractPromptText(input.parts);
|
|
64
|
+
const state = {
|
|
65
|
+
requested: false,
|
|
66
|
+
modelSwitched: false,
|
|
67
|
+
thinkingConfigInjected: false,
|
|
68
|
+
};
|
|
69
|
+
if (!detectThinkKeyword(promptText)) {
|
|
70
|
+
thinkModeState.set(sessionId, state);
|
|
71
|
+
return state;
|
|
72
|
+
}
|
|
73
|
+
state.requested = true;
|
|
74
|
+
const currentModel = input.message.model;
|
|
75
|
+
if (!currentModel) {
|
|
76
|
+
thinkModeState.set(sessionId, state);
|
|
77
|
+
return state;
|
|
78
|
+
}
|
|
79
|
+
state.providerId = currentModel.providerId;
|
|
80
|
+
state.modelId = currentModel.modelId;
|
|
81
|
+
if (isAlreadyHighVariant(currentModel.modelId)) {
|
|
82
|
+
thinkModeState.set(sessionId, state);
|
|
83
|
+
return state;
|
|
84
|
+
}
|
|
85
|
+
const highVariant = getHighVariant(currentModel.modelId);
|
|
86
|
+
const thinkingConfig = getThinkingConfig(currentModel.providerId, currentModel.modelId);
|
|
87
|
+
if (highVariant) {
|
|
88
|
+
input.message.model = {
|
|
89
|
+
providerId: currentModel.providerId,
|
|
90
|
+
modelId: highVariant,
|
|
91
|
+
};
|
|
92
|
+
state.modelSwitched = true;
|
|
93
|
+
}
|
|
94
|
+
if (thinkingConfig) {
|
|
95
|
+
Object.assign(input.message, thinkingConfig);
|
|
96
|
+
state.thinkingConfigInjected = true;
|
|
97
|
+
}
|
|
98
|
+
thinkModeState.set(sessionId, state);
|
|
99
|
+
return state;
|
|
100
|
+
},
|
|
101
|
+
/**
|
|
102
|
+
* Handle session deletion events.
|
|
103
|
+
*/
|
|
104
|
+
onSessionDeleted: (sessionId) => {
|
|
105
|
+
thinkModeState.delete(sessionId);
|
|
106
|
+
},
|
|
107
|
+
/**
|
|
108
|
+
* Check if think mode was requested.
|
|
109
|
+
*/
|
|
110
|
+
isRequested: (sessionId) => {
|
|
111
|
+
const state = thinkModeState.get(sessionId);
|
|
112
|
+
return state?.requested ?? false;
|
|
113
|
+
},
|
|
114
|
+
/**
|
|
115
|
+
* Get the current state.
|
|
116
|
+
*/
|
|
117
|
+
getState: (sessionId) => {
|
|
118
|
+
return thinkModeState.get(sessionId);
|
|
119
|
+
},
|
|
120
|
+
/**
|
|
121
|
+
* Clear state for a session.
|
|
122
|
+
*/
|
|
123
|
+
clear: clearThinkModeState,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Simplified function to check if a prompt requests think mode.
|
|
128
|
+
* For direct use without hook context.
|
|
129
|
+
*/
|
|
130
|
+
export function shouldActivateThinkMode(prompt) {
|
|
131
|
+
return detectThinkKeyword(prompt);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if ultrathink (highest reasoning) was requested.
|
|
135
|
+
*/
|
|
136
|
+
export function shouldActivateUltrathink(prompt) {
|
|
137
|
+
return detectUltrathinkKeyword(prompt);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get Claude thinking configuration for extended thinking.
|
|
141
|
+
* For direct use when manually configuring Claude API calls.
|
|
142
|
+
*/
|
|
143
|
+
export { getClaudeThinkingConfig };
|
|
144
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/think-mode/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Think Mode Switcher
|
|
3
|
+
*
|
|
4
|
+
* Handles model switching to high-reasoning variants when think mode is activated.
|
|
5
|
+
* Supports Claude, GPT, and Gemini model families.
|
|
6
|
+
*
|
|
7
|
+
* Ported from oh-my-opencode's think-mode hook.
|
|
8
|
+
*/
|
|
9
|
+
import type { ThinkingConfig } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Provider-specific thinking configurations.
|
|
12
|
+
*/
|
|
13
|
+
export declare const THINKING_CONFIGS: Record<string, ThinkingConfig>;
|
|
14
|
+
/**
|
|
15
|
+
* Get the high-reasoning variant for a model ID.
|
|
16
|
+
* Returns null if already high or no variant exists.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getHighVariant(modelId: string): string | null;
|
|
19
|
+
/**
|
|
20
|
+
* Check if a model is already in high variant mode.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isAlreadyHighVariant(modelId: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Get the thinking configuration for a provider and model.
|
|
25
|
+
* Returns null if not supported or already in high mode.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getThinkingConfig(providerId: string, modelId: string): ThinkingConfig | null;
|
|
28
|
+
/**
|
|
29
|
+
* Get Claude-specific thinking configuration.
|
|
30
|
+
* This is used by Claude Code for extended thinking.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getClaudeThinkingConfig(budgetTokens?: number): {
|
|
33
|
+
thinking: {
|
|
34
|
+
type: "enabled";
|
|
35
|
+
budgetTokens: number;
|
|
36
|
+
};
|
|
37
|
+
maxTokens: number;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=switcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switcher.d.ts","sourceRoot":"","sources":["../../../src/hooks/think-mode/switcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkDjD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA2B3D,CAAC;AAYF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI7D;AAyBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,cAAc,GAAG,IAAI,CA4BvB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,GAAE,MAAc;;;;;;EAQnE"}
|