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,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comment Checker Hook
|
|
3
|
+
*
|
|
4
|
+
* Detects comments and docstrings in code changes and prompts Claude
|
|
5
|
+
* to justify or remove unnecessary comments.
|
|
6
|
+
*
|
|
7
|
+
* Adapted from oh-my-opencode's comment-checker hook.
|
|
8
|
+
* Instead of using an external CLI binary, this implementation does
|
|
9
|
+
* comment detection directly in TypeScript.
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from 'fs';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import { tmpdir } from 'os';
|
|
14
|
+
import { HOOK_MESSAGE_HEADER, LINE_COMMENT_PATTERNS, EXTENSION_TO_LANGUAGE, } from './constants.js';
|
|
15
|
+
import { applyFilters } from './filters.js';
|
|
16
|
+
const DEBUG = process.env.COMMENT_CHECKER_DEBUG === '1';
|
|
17
|
+
const DEBUG_FILE = path.join(tmpdir(), 'comment-checker-debug.log');
|
|
18
|
+
function debugLog(...args) {
|
|
19
|
+
if (DEBUG) {
|
|
20
|
+
const msg = `[${new Date().toISOString()}] [comment-checker] ${args
|
|
21
|
+
.map((a) => (typeof a === 'object' ? JSON.stringify(a, null, 2) : String(a)))
|
|
22
|
+
.join(' ')}\n`;
|
|
23
|
+
fs.appendFileSync(DEBUG_FILE, msg);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get language from file extension
|
|
28
|
+
*/
|
|
29
|
+
function getLanguageFromPath(filePath) {
|
|
30
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
31
|
+
return EXTENSION_TO_LANGUAGE[ext];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Detect comments in content using regex patterns
|
|
35
|
+
*/
|
|
36
|
+
function detectComments(content, filePath) {
|
|
37
|
+
const language = getLanguageFromPath(filePath);
|
|
38
|
+
if (!language) {
|
|
39
|
+
debugLog('unsupported language for:', filePath);
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
const pattern = LINE_COMMENT_PATTERNS[language];
|
|
43
|
+
if (!pattern) {
|
|
44
|
+
debugLog('no pattern for language:', language);
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const comments = [];
|
|
48
|
+
const _lines = content.split('\n');
|
|
49
|
+
// Reset regex state
|
|
50
|
+
pattern.lastIndex = 0;
|
|
51
|
+
let match;
|
|
52
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
53
|
+
const matchStart = match.index;
|
|
54
|
+
const matchText = match[0];
|
|
55
|
+
// Calculate line number
|
|
56
|
+
const beforeMatch = content.substring(0, matchStart);
|
|
57
|
+
const lineNumber = beforeMatch.split('\n').length;
|
|
58
|
+
// Determine comment type
|
|
59
|
+
let commentType = 'line';
|
|
60
|
+
let isDocstring = false;
|
|
61
|
+
if (matchText.startsWith('/*') || matchText.startsWith('<!--')) {
|
|
62
|
+
commentType = 'block';
|
|
63
|
+
}
|
|
64
|
+
else if (matchText.startsWith("'''") ||
|
|
65
|
+
matchText.startsWith('"""') ||
|
|
66
|
+
matchText.startsWith('=begin')) {
|
|
67
|
+
commentType = 'docstring';
|
|
68
|
+
isDocstring = true;
|
|
69
|
+
}
|
|
70
|
+
comments.push({
|
|
71
|
+
text: matchText.trim(),
|
|
72
|
+
lineNumber,
|
|
73
|
+
filePath,
|
|
74
|
+
commentType,
|
|
75
|
+
isDocstring,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return comments;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Extract comments from new content (for Write tool)
|
|
82
|
+
*/
|
|
83
|
+
function extractCommentsFromContent(content, filePath) {
|
|
84
|
+
return detectComments(content, filePath);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extract comments from new string (for Edit tool)
|
|
88
|
+
*/
|
|
89
|
+
function extractCommentsFromEdit(newString, filePath, oldString) {
|
|
90
|
+
// Only check comments that are newly added
|
|
91
|
+
const newComments = detectComments(newString, filePath);
|
|
92
|
+
if (oldString) {
|
|
93
|
+
const oldComments = detectComments(oldString, filePath);
|
|
94
|
+
const oldTexts = new Set(oldComments.map((c) => c.text));
|
|
95
|
+
// Filter out comments that existed before
|
|
96
|
+
return newComments.filter((c) => !oldTexts.has(c.text));
|
|
97
|
+
}
|
|
98
|
+
return newComments;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Format comments for output message
|
|
102
|
+
*/
|
|
103
|
+
function formatCommentMessage(comments) {
|
|
104
|
+
if (comments.length === 0) {
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
const grouped = new Map();
|
|
108
|
+
for (const comment of comments) {
|
|
109
|
+
const existing = grouped.get(comment.filePath) || [];
|
|
110
|
+
existing.push(comment);
|
|
111
|
+
grouped.set(comment.filePath, existing);
|
|
112
|
+
}
|
|
113
|
+
let message = HOOK_MESSAGE_HEADER;
|
|
114
|
+
for (const [filePath, fileComments] of grouped) {
|
|
115
|
+
message += `\nFile: ${filePath}\n`;
|
|
116
|
+
for (const comment of fileComments) {
|
|
117
|
+
const typeLabel = comment.isDocstring ? 'docstring' : comment.commentType;
|
|
118
|
+
message += ` Line ${comment.lineNumber} (${typeLabel}): ${comment.text.substring(0, 100)}${comment.text.length > 100 ? '...' : ''}\n`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return message;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check content for comments
|
|
125
|
+
*/
|
|
126
|
+
export function checkForComments(filePath, content, oldString, newString, edits) {
|
|
127
|
+
let allComments = [];
|
|
128
|
+
if (content) {
|
|
129
|
+
// Write tool - check entire content
|
|
130
|
+
allComments = extractCommentsFromContent(content, filePath);
|
|
131
|
+
}
|
|
132
|
+
else if (newString) {
|
|
133
|
+
// Edit tool - check new content
|
|
134
|
+
allComments = extractCommentsFromEdit(newString, filePath, oldString);
|
|
135
|
+
}
|
|
136
|
+
else if (edits && edits.length > 0) {
|
|
137
|
+
// MultiEdit tool - check all edits
|
|
138
|
+
for (const edit of edits) {
|
|
139
|
+
const editComments = extractCommentsFromEdit(edit.new_string, filePath, edit.old_string);
|
|
140
|
+
allComments.push(...editComments);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Apply filters to remove acceptable comments
|
|
144
|
+
const flaggedComments = applyFilters(allComments);
|
|
145
|
+
debugLog(`found ${allComments.length} comments, ${flaggedComments.length} flagged after filtering`);
|
|
146
|
+
if (flaggedComments.length === 0) {
|
|
147
|
+
return {
|
|
148
|
+
hasComments: false,
|
|
149
|
+
count: 0,
|
|
150
|
+
comments: [],
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
hasComments: true,
|
|
155
|
+
count: flaggedComments.length,
|
|
156
|
+
message: formatCommentMessage(flaggedComments),
|
|
157
|
+
comments: flaggedComments,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Pending calls tracking
|
|
162
|
+
*/
|
|
163
|
+
const pendingCalls = new Map();
|
|
164
|
+
const PENDING_CALL_TTL = 60_000;
|
|
165
|
+
function cleanupOldPendingCalls() {
|
|
166
|
+
const now = Date.now();
|
|
167
|
+
for (const [callID, call] of pendingCalls) {
|
|
168
|
+
if (now - call.timestamp > PENDING_CALL_TTL) {
|
|
169
|
+
pendingCalls.delete(callID);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
let cleanupIntervalStarted = false;
|
|
174
|
+
/**
|
|
175
|
+
* Create comment checker hook for Claude Code shell hooks
|
|
176
|
+
*
|
|
177
|
+
* This hook checks for comments in Write/Edit operations and injects
|
|
178
|
+
* a message prompting Claude to justify or remove unnecessary comments.
|
|
179
|
+
*/
|
|
180
|
+
export function createCommentCheckerHook(config) {
|
|
181
|
+
debugLog('createCommentCheckerHook called', { config });
|
|
182
|
+
if (!cleanupIntervalStarted) {
|
|
183
|
+
cleanupIntervalStarted = true;
|
|
184
|
+
setInterval(cleanupOldPendingCalls, 10_000);
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
/**
|
|
188
|
+
* PreToolUse - Track pending write/edit calls
|
|
189
|
+
*/
|
|
190
|
+
preToolUse: (input) => {
|
|
191
|
+
const toolLower = input.tool_name.toLowerCase();
|
|
192
|
+
if (toolLower !== 'write' &&
|
|
193
|
+
toolLower !== 'edit' &&
|
|
194
|
+
toolLower !== 'multiedit') {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
const filePath = (input.tool_input.file_path ??
|
|
198
|
+
input.tool_input.filePath ??
|
|
199
|
+
input.tool_input.path);
|
|
200
|
+
const content = input.tool_input.content;
|
|
201
|
+
const oldString = (input.tool_input.old_string ??
|
|
202
|
+
input.tool_input.oldString);
|
|
203
|
+
const newString = (input.tool_input.new_string ??
|
|
204
|
+
input.tool_input.newString);
|
|
205
|
+
const edits = input.tool_input.edits;
|
|
206
|
+
if (!filePath) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
// Generate a call ID based on session and timestamp
|
|
210
|
+
const callId = `${input.session_id}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
211
|
+
debugLog('registering pendingCall:', {
|
|
212
|
+
callId,
|
|
213
|
+
filePath,
|
|
214
|
+
tool: toolLower,
|
|
215
|
+
});
|
|
216
|
+
pendingCalls.set(callId, {
|
|
217
|
+
filePath,
|
|
218
|
+
content,
|
|
219
|
+
oldString,
|
|
220
|
+
newString,
|
|
221
|
+
edits,
|
|
222
|
+
tool: toolLower,
|
|
223
|
+
sessionId: input.session_id,
|
|
224
|
+
timestamp: Date.now(),
|
|
225
|
+
});
|
|
226
|
+
return null;
|
|
227
|
+
},
|
|
228
|
+
/**
|
|
229
|
+
* PostToolUse - Check for comments after successful write/edit
|
|
230
|
+
*/
|
|
231
|
+
postToolUse: (input) => {
|
|
232
|
+
const toolLower = input.tool_name.toLowerCase();
|
|
233
|
+
if (toolLower !== 'write' &&
|
|
234
|
+
toolLower !== 'edit' &&
|
|
235
|
+
toolLower !== 'multiedit') {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
// Find the pending call for this session
|
|
239
|
+
let pendingCall;
|
|
240
|
+
let callIdToDelete;
|
|
241
|
+
for (const [callId, call] of pendingCalls) {
|
|
242
|
+
if (call.sessionId === input.session_id && call.tool === toolLower) {
|
|
243
|
+
pendingCall = call;
|
|
244
|
+
callIdToDelete = callId;
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (!pendingCall) {
|
|
249
|
+
// Fall back to extracting from tool_input
|
|
250
|
+
const filePath = (input.tool_input.file_path ??
|
|
251
|
+
input.tool_input.filePath ??
|
|
252
|
+
input.tool_input.path);
|
|
253
|
+
if (!filePath) {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
pendingCall = {
|
|
257
|
+
filePath,
|
|
258
|
+
content: input.tool_input.content,
|
|
259
|
+
oldString: (input.tool_input.old_string ??
|
|
260
|
+
input.tool_input.oldString),
|
|
261
|
+
newString: (input.tool_input.new_string ??
|
|
262
|
+
input.tool_input.newString),
|
|
263
|
+
edits: input.tool_input.edits,
|
|
264
|
+
tool: toolLower,
|
|
265
|
+
sessionId: input.session_id,
|
|
266
|
+
timestamp: Date.now(),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
if (callIdToDelete) {
|
|
270
|
+
pendingCalls.delete(callIdToDelete);
|
|
271
|
+
}
|
|
272
|
+
// Check if tool execution failed
|
|
273
|
+
if (input.tool_response) {
|
|
274
|
+
const responseLower = input.tool_response.toLowerCase();
|
|
275
|
+
const isToolFailure = responseLower.includes('error:') ||
|
|
276
|
+
responseLower.includes('failed to') ||
|
|
277
|
+
responseLower.includes('could not') ||
|
|
278
|
+
responseLower.startsWith('error');
|
|
279
|
+
if (isToolFailure) {
|
|
280
|
+
debugLog('skipping due to tool failure in response');
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Check for comments
|
|
285
|
+
const result = checkForComments(pendingCall.filePath, pendingCall.content, pendingCall.oldString, pendingCall.newString, pendingCall.edits);
|
|
286
|
+
if (result.hasComments && result.message) {
|
|
287
|
+
debugLog('detected comments, returning message');
|
|
288
|
+
return config?.customPrompt || result.message;
|
|
289
|
+
}
|
|
290
|
+
return null;
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
// Re-export filters
|
|
295
|
+
export { applyFilters } from './filters.js';
|
|
296
|
+
// Re-export constants
|
|
297
|
+
export { BDD_KEYWORDS, TYPE_CHECKER_PREFIXES, HOOK_MESSAGE_HEADER, LINE_COMMENT_PATTERNS, EXTENSION_TO_LANGUAGE, } from './constants.js';
|
|
298
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/comment-checker/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comment Checker Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for comment detection in code changes.
|
|
5
|
+
*
|
|
6
|
+
* Adapted from oh-my-opencode's comment-checker hook.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Type of comment detected
|
|
10
|
+
*/
|
|
11
|
+
export type CommentType = 'line' | 'block' | 'docstring';
|
|
12
|
+
/**
|
|
13
|
+
* Information about a detected comment
|
|
14
|
+
*/
|
|
15
|
+
export interface CommentInfo {
|
|
16
|
+
/** The comment text content */
|
|
17
|
+
text: string;
|
|
18
|
+
/** Line number where comment appears */
|
|
19
|
+
lineNumber: number;
|
|
20
|
+
/** File path containing the comment */
|
|
21
|
+
filePath: string;
|
|
22
|
+
/** Type of comment */
|
|
23
|
+
commentType: CommentType;
|
|
24
|
+
/** Whether this is a docstring */
|
|
25
|
+
isDocstring: boolean;
|
|
26
|
+
/** Additional metadata */
|
|
27
|
+
metadata?: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Pending tool call for comment checking
|
|
31
|
+
*/
|
|
32
|
+
export interface PendingCall {
|
|
33
|
+
/** File path being modified */
|
|
34
|
+
filePath: string;
|
|
35
|
+
/** New file content (for Write tool) */
|
|
36
|
+
content?: string;
|
|
37
|
+
/** Old string being replaced (for Edit tool) */
|
|
38
|
+
oldString?: string;
|
|
39
|
+
/** New string replacement (for Edit tool) */
|
|
40
|
+
newString?: string;
|
|
41
|
+
/** Multiple edits (for MultiEdit tool) */
|
|
42
|
+
edits?: Array<{
|
|
43
|
+
old_string: string;
|
|
44
|
+
new_string: string;
|
|
45
|
+
}>;
|
|
46
|
+
/** Tool that triggered this check */
|
|
47
|
+
tool: 'write' | 'edit' | 'multiedit';
|
|
48
|
+
/** Session ID */
|
|
49
|
+
sessionId: string;
|
|
50
|
+
/** Timestamp of the call */
|
|
51
|
+
timestamp: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Comments found in a file
|
|
55
|
+
*/
|
|
56
|
+
export interface FileComments {
|
|
57
|
+
/** File path */
|
|
58
|
+
filePath: string;
|
|
59
|
+
/** List of comments found */
|
|
60
|
+
comments: CommentInfo[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Result of a comment filter
|
|
64
|
+
*/
|
|
65
|
+
export interface FilterResult {
|
|
66
|
+
/** Whether to skip this comment */
|
|
67
|
+
shouldSkip: boolean;
|
|
68
|
+
/** Reason for skipping */
|
|
69
|
+
reason?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Function type for comment filters
|
|
73
|
+
*/
|
|
74
|
+
export type CommentFilter = (comment: CommentInfo) => FilterResult;
|
|
75
|
+
/**
|
|
76
|
+
* Result of comment checking
|
|
77
|
+
*/
|
|
78
|
+
export interface CommentCheckResult {
|
|
79
|
+
/** Whether comments were detected */
|
|
80
|
+
hasComments: boolean;
|
|
81
|
+
/** Number of comments found */
|
|
82
|
+
count: number;
|
|
83
|
+
/** Message to inject if comments found */
|
|
84
|
+
message?: string;
|
|
85
|
+
/** Detailed comment information */
|
|
86
|
+
comments: CommentInfo[];
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/comment-checker/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,qCAAqC;IACrC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IACrC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,YAAY,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/comment-checker/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Window Limit Recovery Constants
|
|
3
|
+
*
|
|
4
|
+
* Messages and prompts for recovery from context limit errors.
|
|
5
|
+
*
|
|
6
|
+
* Adapted from oh-my-opencode's anthropic-context-window-limit-recovery hook.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Recovery message when context window limit is hit
|
|
10
|
+
*/
|
|
11
|
+
export declare const CONTEXT_LIMIT_RECOVERY_MESSAGE = "CONTEXT WINDOW LIMIT REACHED - IMMEDIATE ACTION REQUIRED\n\nThe conversation has exceeded the model's context window limit. To continue working effectively, you must take one of these actions:\n\n1. SUMMARIZE THE CONVERSATION\n - Use the /compact command if available\n - Or provide a concise summary of what has been accomplished so far\n - Include key decisions, code changes, and remaining tasks\n\n2. START A FRESH CONTEXT\n - If summarization isn't sufficient, suggest starting a new session\n - Provide a handoff message with essential context\n\n3. REDUCE OUTPUT SIZE\n - When showing code, show only relevant portions\n - Use file paths and line numbers instead of full code blocks\n - Be more concise in explanations\n\nIMPORTANT: Do not attempt to continue without addressing this limit.\nThe API will reject further requests until the context is reduced.\n\nCurrent Status:\n- Context limit exceeded\n- Further API calls will fail until context is reduced\n- Action required before continuing\n";
|
|
12
|
+
/**
|
|
13
|
+
* Short notification for context limit
|
|
14
|
+
*/
|
|
15
|
+
export declare const CONTEXT_LIMIT_SHORT_MESSAGE = "Context window limit reached. Please use /compact to summarize the conversation or start a new session.";
|
|
16
|
+
/**
|
|
17
|
+
* Recovery message for non-empty content errors
|
|
18
|
+
*/
|
|
19
|
+
export declare const NON_EMPTY_CONTENT_RECOVERY_MESSAGE = "API ERROR: Non-empty content validation failed.\n\nThis error typically occurs when:\n- A message has empty text content\n- The conversation structure is invalid\n\nSuggested actions:\n1. Continue with a new message\n2. If the error persists, start a new session\n\nThe system will attempt automatic recovery.\n";
|
|
20
|
+
/**
|
|
21
|
+
* Recovery message when truncation was applied
|
|
22
|
+
*/
|
|
23
|
+
export declare const TRUNCATION_APPLIED_MESSAGE = "CONTEXT OPTIMIZATION APPLIED\n\nSome tool outputs have been truncated to fit within the context window.\nThe conversation can now continue normally.\n\nIf you need to see the full output of a previous tool call, you can:\n- Re-run the specific command\n- Ask to see a particular file or section\n\nContinuing with the current task...\n";
|
|
24
|
+
/**
|
|
25
|
+
* Message when recovery fails
|
|
26
|
+
*/
|
|
27
|
+
export declare const RECOVERY_FAILED_MESSAGE = "CONTEXT RECOVERY FAILED\n\nAll automatic recovery attempts have been exhausted.\nPlease start a new session to continue.\n\nBefore starting a new session:\n1. Note what has been accomplished\n2. Save any important code changes\n3. Document the current state of the task\n\nYou can copy this conversation summary to continue in a new session.\n";
|
|
28
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/hooks/context-window-limit-recovery/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,eAAO,MAAM,8BAA8B,kgCAyB1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,4GAA4G,CAAC;AAErJ;;GAEG;AACH,eAAO,MAAM,kCAAkC,4TAW9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,oVAUtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,4VAWnC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Window Limit Recovery Constants
|
|
3
|
+
*
|
|
4
|
+
* Messages and prompts for recovery from context limit errors.
|
|
5
|
+
*
|
|
6
|
+
* Adapted from oh-my-opencode's anthropic-context-window-limit-recovery hook.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Recovery message when context window limit is hit
|
|
10
|
+
*/
|
|
11
|
+
export const CONTEXT_LIMIT_RECOVERY_MESSAGE = `CONTEXT WINDOW LIMIT REACHED - IMMEDIATE ACTION REQUIRED
|
|
12
|
+
|
|
13
|
+
The conversation has exceeded the model's context window limit. To continue working effectively, you must take one of these actions:
|
|
14
|
+
|
|
15
|
+
1. SUMMARIZE THE CONVERSATION
|
|
16
|
+
- Use the /compact command if available
|
|
17
|
+
- Or provide a concise summary of what has been accomplished so far
|
|
18
|
+
- Include key decisions, code changes, and remaining tasks
|
|
19
|
+
|
|
20
|
+
2. START A FRESH CONTEXT
|
|
21
|
+
- If summarization isn't sufficient, suggest starting a new session
|
|
22
|
+
- Provide a handoff message with essential context
|
|
23
|
+
|
|
24
|
+
3. REDUCE OUTPUT SIZE
|
|
25
|
+
- When showing code, show only relevant portions
|
|
26
|
+
- Use file paths and line numbers instead of full code blocks
|
|
27
|
+
- Be more concise in explanations
|
|
28
|
+
|
|
29
|
+
IMPORTANT: Do not attempt to continue without addressing this limit.
|
|
30
|
+
The API will reject further requests until the context is reduced.
|
|
31
|
+
|
|
32
|
+
Current Status:
|
|
33
|
+
- Context limit exceeded
|
|
34
|
+
- Further API calls will fail until context is reduced
|
|
35
|
+
- Action required before continuing
|
|
36
|
+
`;
|
|
37
|
+
/**
|
|
38
|
+
* Short notification for context limit
|
|
39
|
+
*/
|
|
40
|
+
export const CONTEXT_LIMIT_SHORT_MESSAGE = `Context window limit reached. Please use /compact to summarize the conversation or start a new session.`;
|
|
41
|
+
/**
|
|
42
|
+
* Recovery message for non-empty content errors
|
|
43
|
+
*/
|
|
44
|
+
export const NON_EMPTY_CONTENT_RECOVERY_MESSAGE = `API ERROR: Non-empty content validation failed.
|
|
45
|
+
|
|
46
|
+
This error typically occurs when:
|
|
47
|
+
- A message has empty text content
|
|
48
|
+
- The conversation structure is invalid
|
|
49
|
+
|
|
50
|
+
Suggested actions:
|
|
51
|
+
1. Continue with a new message
|
|
52
|
+
2. If the error persists, start a new session
|
|
53
|
+
|
|
54
|
+
The system will attempt automatic recovery.
|
|
55
|
+
`;
|
|
56
|
+
/**
|
|
57
|
+
* Recovery message when truncation was applied
|
|
58
|
+
*/
|
|
59
|
+
export const TRUNCATION_APPLIED_MESSAGE = `CONTEXT OPTIMIZATION APPLIED
|
|
60
|
+
|
|
61
|
+
Some tool outputs have been truncated to fit within the context window.
|
|
62
|
+
The conversation can now continue normally.
|
|
63
|
+
|
|
64
|
+
If you need to see the full output of a previous tool call, you can:
|
|
65
|
+
- Re-run the specific command
|
|
66
|
+
- Ask to see a particular file or section
|
|
67
|
+
|
|
68
|
+
Continuing with the current task...
|
|
69
|
+
`;
|
|
70
|
+
/**
|
|
71
|
+
* Message when recovery fails
|
|
72
|
+
*/
|
|
73
|
+
export const RECOVERY_FAILED_MESSAGE = `CONTEXT RECOVERY FAILED
|
|
74
|
+
|
|
75
|
+
All automatic recovery attempts have been exhausted.
|
|
76
|
+
Please start a new session to continue.
|
|
77
|
+
|
|
78
|
+
Before starting a new session:
|
|
79
|
+
1. Note what has been accomplished
|
|
80
|
+
2. Save any important code changes
|
|
81
|
+
3. Document the current state of the task
|
|
82
|
+
|
|
83
|
+
You can copy this conversation summary to continue in a new session.
|
|
84
|
+
`;
|
|
85
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/hooks/context-window-limit-recovery/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyB7C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,yGAAyG,CAAC;AAErJ;;GAEG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG;;;;;;;;;;;CAWjD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;CAUzC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;CAWtC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Window Limit Recovery Hook
|
|
3
|
+
*
|
|
4
|
+
* Detects context window limit errors and injects recovery messages
|
|
5
|
+
* to help Claude recover gracefully.
|
|
6
|
+
*
|
|
7
|
+
* Adapted from oh-my-opencode's anthropic-context-window-limit-recovery hook.
|
|
8
|
+
*
|
|
9
|
+
* Note: This is a simplified version for Claude Code's shell hook system.
|
|
10
|
+
* The original uses OpenCode's plugin event system for more sophisticated
|
|
11
|
+
* recovery like automatic summarization and truncation.
|
|
12
|
+
*/
|
|
13
|
+
import type { ParsedTokenLimitError, RecoveryResult } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for context limit recovery hook
|
|
16
|
+
*/
|
|
17
|
+
export interface ContextLimitRecoveryConfig {
|
|
18
|
+
/** Whether to show detailed recovery messages */
|
|
19
|
+
detailed?: boolean;
|
|
20
|
+
/** Custom recovery message */
|
|
21
|
+
customMessage?: string;
|
|
22
|
+
/** Whether to enable the hook */
|
|
23
|
+
enabled?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create context window limit recovery hook
|
|
27
|
+
*
|
|
28
|
+
* This hook monitors for token/context limit errors and injects
|
|
29
|
+
* helpful recovery messages when detected.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createContextLimitRecoveryHook(config?: ContextLimitRecoveryConfig): {
|
|
32
|
+
/**
|
|
33
|
+
* PostToolUse - Check for context limit errors in tool responses
|
|
34
|
+
*/
|
|
35
|
+
postToolUse: (input: {
|
|
36
|
+
tool_name: string;
|
|
37
|
+
session_id: string;
|
|
38
|
+
tool_input: Record<string, unknown>;
|
|
39
|
+
tool_response?: string;
|
|
40
|
+
}) => string | null;
|
|
41
|
+
/**
|
|
42
|
+
* Notification - Check for error notifications
|
|
43
|
+
* (Called when errors are passed through notification system)
|
|
44
|
+
*/
|
|
45
|
+
onError: (input: {
|
|
46
|
+
session_id: string;
|
|
47
|
+
error: unknown;
|
|
48
|
+
}) => RecoveryResult;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Check if text contains a context limit error
|
|
52
|
+
*/
|
|
53
|
+
export declare function detectContextLimitError(text: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Parse error to get detailed token limit info
|
|
56
|
+
*/
|
|
57
|
+
export declare function parseContextLimitError(error: unknown): ParsedTokenLimitError | null;
|
|
58
|
+
export type { ParsedTokenLimitError, RetryState, TruncateState, RecoveryResult, } from './types.js';
|
|
59
|
+
export { RETRY_CONFIG, TRUNCATE_CONFIG } from './types.js';
|
|
60
|
+
export { CONTEXT_LIMIT_RECOVERY_MESSAGE, CONTEXT_LIMIT_SHORT_MESSAGE, NON_EMPTY_CONTENT_RECOVERY_MESSAGE, TRUNCATION_APPLIED_MESSAGE, RECOVERY_FAILED_MESSAGE, } from './constants.js';
|
|
61
|
+
export { parseTokenLimitError, containsTokenLimitError, TOKEN_LIMIT_PATTERNS, TOKEN_LIMIT_KEYWORDS, } from './parser.js';
|
|
62
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/context-window-limit-recovery/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,OAAO,KAAK,EACV,qBAAqB,EAGrB,cAAc,EACf,MAAM,YAAY,CAAC;AAsEpB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,CAAC,EAAE,0BAA0B;IAUjC;;OAEG;yBACkB;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,KAAG,MAAM,GAAG,IAAI;IAmCjB;;;OAGG;qBACc;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;KAChB,KAAG,cAAc;EA6BrB;AA8DD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,qBAAqB,GAAG,IAAI,CAE9B;AAGD,YAAY,EACV,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,kCAAkC,EAClC,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|