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,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rules Injector Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for rule file parsing and injection.
|
|
5
|
+
* Supports Claude Code format (globs, paths) and GitHub Copilot format (applyTo).
|
|
6
|
+
*
|
|
7
|
+
* Ported from oh-my-opencode's rules-injector hook.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Rule file metadata from YAML frontmatter.
|
|
11
|
+
* Supports multiple formats for compatibility.
|
|
12
|
+
*/
|
|
13
|
+
export interface RuleMetadata {
|
|
14
|
+
/** Description of what this rule does */
|
|
15
|
+
description?: string;
|
|
16
|
+
/** Glob patterns for matching files */
|
|
17
|
+
globs?: string | string[];
|
|
18
|
+
/** Whether this rule always applies regardless of file path */
|
|
19
|
+
alwaysApply?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Rule information with path context and content.
|
|
23
|
+
*/
|
|
24
|
+
export interface RuleInfo {
|
|
25
|
+
/** Absolute path to the rule file */
|
|
26
|
+
path: string;
|
|
27
|
+
/** Path relative to project root */
|
|
28
|
+
relativePath: string;
|
|
29
|
+
/** Directory distance from target file (0 = same dir) */
|
|
30
|
+
distance: number;
|
|
31
|
+
/** Rule file content (without frontmatter) */
|
|
32
|
+
content: string;
|
|
33
|
+
/** SHA-256 hash of content for deduplication */
|
|
34
|
+
contentHash: string;
|
|
35
|
+
/** Parsed frontmatter metadata */
|
|
36
|
+
metadata: RuleMetadata;
|
|
37
|
+
/** Why this rule matched (e.g., "alwaysApply", "glob: *.ts") */
|
|
38
|
+
matchReason: string;
|
|
39
|
+
/** Real path after symlink resolution (for duplicate detection) */
|
|
40
|
+
realPath: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Rule file candidate found during discovery.
|
|
44
|
+
*/
|
|
45
|
+
export interface RuleFileCandidate {
|
|
46
|
+
/** Path to the rule file */
|
|
47
|
+
path: string;
|
|
48
|
+
/** Real path after symlink resolution */
|
|
49
|
+
realPath: string;
|
|
50
|
+
/** Whether this is a global (user-level) rule */
|
|
51
|
+
isGlobal: boolean;
|
|
52
|
+
/** Directory distance from the target file */
|
|
53
|
+
distance: number;
|
|
54
|
+
/** Single-file rules (e.g., .github/copilot-instructions.md) always apply */
|
|
55
|
+
isSingleFile?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Session storage for tracking injected rules.
|
|
59
|
+
*/
|
|
60
|
+
export interface InjectedRulesData {
|
|
61
|
+
/** Session ID */
|
|
62
|
+
sessionId: string;
|
|
63
|
+
/** Content hashes of already injected rules */
|
|
64
|
+
injectedHashes: string[];
|
|
65
|
+
/** Real paths of already injected rules (for symlink deduplication) */
|
|
66
|
+
injectedRealPaths: string[];
|
|
67
|
+
/** Timestamp of last update */
|
|
68
|
+
updatedAt: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Rule to be injected into output.
|
|
72
|
+
*/
|
|
73
|
+
export interface RuleToInject {
|
|
74
|
+
/** Relative path to the rule file */
|
|
75
|
+
relativePath: string;
|
|
76
|
+
/** Why this rule matched */
|
|
77
|
+
matchReason: string;
|
|
78
|
+
/** Rule content to inject */
|
|
79
|
+
content: string;
|
|
80
|
+
/** Directory distance */
|
|
81
|
+
distance: number;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Result of rule matching check.
|
|
85
|
+
*/
|
|
86
|
+
export interface MatchResult {
|
|
87
|
+
/** Whether the rule applies */
|
|
88
|
+
applies: boolean;
|
|
89
|
+
/** Reason for match (e.g., "glob: *.ts") */
|
|
90
|
+
reason?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Frontmatter parsing result.
|
|
94
|
+
*/
|
|
95
|
+
export interface RuleFrontmatterResult {
|
|
96
|
+
/** Parsed metadata */
|
|
97
|
+
metadata: RuleMetadata;
|
|
98
|
+
/** Content body without frontmatter */
|
|
99
|
+
body: string;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/rules-injector/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sBAAsB;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rules Injector Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for rule file parsing and injection.
|
|
5
|
+
* Supports Claude Code format (globs, paths) and GitHub Copilot format (applyTo).
|
|
6
|
+
*
|
|
7
|
+
* Ported from oh-my-opencode's rules-injector hook.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/rules-injector/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Recovery Constants
|
|
3
|
+
*
|
|
4
|
+
* Constants for session recovery including storage paths and recovery messages.
|
|
5
|
+
* Adapted from oh-my-opencode's session-recovery hook.
|
|
6
|
+
*/
|
|
7
|
+
export declare const CLAUDE_CODE_STORAGE: string;
|
|
8
|
+
export declare const MESSAGE_STORAGE: string;
|
|
9
|
+
export declare const PART_STORAGE: string;
|
|
10
|
+
/**
|
|
11
|
+
* Part type sets for categorization
|
|
12
|
+
*/
|
|
13
|
+
export declare const THINKING_TYPES: Set<string>;
|
|
14
|
+
export declare const META_TYPES: Set<string>;
|
|
15
|
+
export declare const CONTENT_TYPES: Set<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Recovery messages
|
|
18
|
+
*/
|
|
19
|
+
export declare const RECOVERY_RESUME_TEXT = "[session recovered - continuing previous task]";
|
|
20
|
+
export declare const PLACEHOLDER_TEXT = "[user interrupted]";
|
|
21
|
+
/**
|
|
22
|
+
* Toast/notification messages for recovery
|
|
23
|
+
*/
|
|
24
|
+
export declare const RECOVERY_MESSAGES: {
|
|
25
|
+
readonly tool_result_missing: {
|
|
26
|
+
readonly title: "Tool Crash Recovery";
|
|
27
|
+
readonly message: "Injecting cancelled tool results...";
|
|
28
|
+
};
|
|
29
|
+
readonly thinking_block_order: {
|
|
30
|
+
readonly title: "Thinking Block Recovery";
|
|
31
|
+
readonly message: "Fixing message structure...";
|
|
32
|
+
};
|
|
33
|
+
readonly thinking_disabled_violation: {
|
|
34
|
+
readonly title: "Thinking Strip Recovery";
|
|
35
|
+
readonly message: "Stripping thinking blocks...";
|
|
36
|
+
};
|
|
37
|
+
readonly empty_content: {
|
|
38
|
+
readonly title: "Empty Content Recovery";
|
|
39
|
+
readonly message: "Adding placeholder content...";
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Recovery error patterns
|
|
44
|
+
*/
|
|
45
|
+
export declare const ERROR_PATTERNS: {
|
|
46
|
+
readonly tool_result_missing: readonly ["tool_use", "tool_result"];
|
|
47
|
+
readonly thinking_block_order: readonly ["thinking", "first block", "must start with", "preceeding", "final block", "cannot be thinking"];
|
|
48
|
+
readonly thinking_disabled_violation: readonly ["thinking is disabled", "cannot contain"];
|
|
49
|
+
readonly empty_content: readonly ["empty", "content", "message"];
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Debug logging configuration
|
|
53
|
+
*/
|
|
54
|
+
export declare const DEBUG: boolean;
|
|
55
|
+
export declare const DEBUG_LOG_PATH: string;
|
|
56
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-recovery/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,eAAO,MAAM,mBAAmB,QAA4B,CAAC;AAC7D,eAAO,MAAM,eAAe,QAAuC,CAAC;AACpE,eAAO,MAAM,YAAY,QAAoC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,aAA0D,CAAC;AACtF,eAAO,MAAM,UAAU,aAAyC,CAAC;AACjE,eAAO,MAAM,aAAa,aAAuD,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,oBAAoB,mDAAmD,CAAC;AACrF,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;CAiBpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAYjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,KAAK,SAA6C,CAAC;AAChE,eAAO,MAAM,cAAc,QAA+C,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Recovery Constants
|
|
3
|
+
*
|
|
4
|
+
* Constants for session recovery including storage paths and recovery messages.
|
|
5
|
+
* Adapted from oh-my-opencode's session-recovery hook.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { homedir, tmpdir } from "node:os";
|
|
9
|
+
/**
|
|
10
|
+
* Get the data directory for Claude Code storage
|
|
11
|
+
* Follows XDG Base Directory specification
|
|
12
|
+
*/
|
|
13
|
+
function getDataDir() {
|
|
14
|
+
return process.env.XDG_DATA_HOME ?? join(homedir(), ".local", "share");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the Claude Code storage directory
|
|
18
|
+
*/
|
|
19
|
+
function getClaudeCodeStorageDir() {
|
|
20
|
+
return join(getDataDir(), "claude-code", "storage");
|
|
21
|
+
}
|
|
22
|
+
export const CLAUDE_CODE_STORAGE = getClaudeCodeStorageDir();
|
|
23
|
+
export const MESSAGE_STORAGE = join(CLAUDE_CODE_STORAGE, "message");
|
|
24
|
+
export const PART_STORAGE = join(CLAUDE_CODE_STORAGE, "part");
|
|
25
|
+
/**
|
|
26
|
+
* Part type sets for categorization
|
|
27
|
+
*/
|
|
28
|
+
export const THINKING_TYPES = new Set(["thinking", "redacted_thinking", "reasoning"]);
|
|
29
|
+
export const META_TYPES = new Set(["step-start", "step-finish"]);
|
|
30
|
+
export const CONTENT_TYPES = new Set(["text", "tool", "tool_use", "tool_result"]);
|
|
31
|
+
/**
|
|
32
|
+
* Recovery messages
|
|
33
|
+
*/
|
|
34
|
+
export const RECOVERY_RESUME_TEXT = "[session recovered - continuing previous task]";
|
|
35
|
+
export const PLACEHOLDER_TEXT = "[user interrupted]";
|
|
36
|
+
/**
|
|
37
|
+
* Toast/notification messages for recovery
|
|
38
|
+
*/
|
|
39
|
+
export const RECOVERY_MESSAGES = {
|
|
40
|
+
tool_result_missing: {
|
|
41
|
+
title: "Tool Crash Recovery",
|
|
42
|
+
message: "Injecting cancelled tool results...",
|
|
43
|
+
},
|
|
44
|
+
thinking_block_order: {
|
|
45
|
+
title: "Thinking Block Recovery",
|
|
46
|
+
message: "Fixing message structure...",
|
|
47
|
+
},
|
|
48
|
+
thinking_disabled_violation: {
|
|
49
|
+
title: "Thinking Strip Recovery",
|
|
50
|
+
message: "Stripping thinking blocks...",
|
|
51
|
+
},
|
|
52
|
+
empty_content: {
|
|
53
|
+
title: "Empty Content Recovery",
|
|
54
|
+
message: "Adding placeholder content...",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Recovery error patterns
|
|
59
|
+
*/
|
|
60
|
+
export const ERROR_PATTERNS = {
|
|
61
|
+
tool_result_missing: ["tool_use", "tool_result"],
|
|
62
|
+
thinking_block_order: [
|
|
63
|
+
"thinking",
|
|
64
|
+
"first block",
|
|
65
|
+
"must start with",
|
|
66
|
+
"preceeding",
|
|
67
|
+
"final block",
|
|
68
|
+
"cannot be thinking",
|
|
69
|
+
],
|
|
70
|
+
thinking_disabled_violation: ["thinking is disabled", "cannot contain"],
|
|
71
|
+
empty_content: ["empty", "content", "message"],
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Debug logging configuration
|
|
75
|
+
*/
|
|
76
|
+
export const DEBUG = process.env.SESSION_RECOVERY_DEBUG === "1";
|
|
77
|
+
export const DEBUG_LOG_PATH = join(tmpdir(), "session-recovery-debug.log");
|
|
78
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/hooks/session-recovery/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB;IAC9B,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,gDAAgD,CAAC;AACrF,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mBAAmB,EAAE;QACnB,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EAAE,qCAAqC;KAC/C;IACD,oBAAoB,EAAE;QACpB,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,6BAA6B;KACvC;IACD,2BAA2B,EAAE;QAC3B,KAAK,EAAE,yBAAyB;QAChC,OAAO,EAAE,8BAA8B;KACxC;IACD,aAAa,EAAE;QACb,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,+BAA+B;KACzC;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;IAChD,oBAAoB,EAAE;QACpB,UAAU;QACV,aAAa;QACb,iBAAiB;QACjB,YAAY;QACZ,aAAa;QACb,oBAAoB;KACrB;IACD,2BAA2B,EAAE,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;IACvE,aAAa,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;CACtC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,CAAC;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Recovery Hook
|
|
3
|
+
*
|
|
4
|
+
* Helps recover session state when Claude Code restarts or crashes.
|
|
5
|
+
* Detects and fixes various error conditions that can cause session failures.
|
|
6
|
+
*
|
|
7
|
+
* Adapted from oh-my-opencode's session-recovery hook for Claude Code's
|
|
8
|
+
* shell hook system.
|
|
9
|
+
*
|
|
10
|
+
* Recovery Strategies:
|
|
11
|
+
* 1. Tool Result Missing: Inject cancelled tool results for orphaned tool_use
|
|
12
|
+
* 2. Thinking Block Order: Fix messages where thinking isn't first
|
|
13
|
+
* 3. Thinking Disabled: Strip thinking blocks when model doesn't support them
|
|
14
|
+
* 4. Empty Content: Add placeholder text to empty messages
|
|
15
|
+
*/
|
|
16
|
+
import type { MessageData, RecoveryErrorType, RecoveryResult, SessionRecoveryConfig } from "./types.js";
|
|
17
|
+
/**
|
|
18
|
+
* Detect the type of recoverable error
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectErrorType(error: unknown): RecoveryErrorType;
|
|
21
|
+
/**
|
|
22
|
+
* Check if an error is recoverable
|
|
23
|
+
*/
|
|
24
|
+
export declare function isRecoverableError(error: unknown): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Main recovery handler
|
|
27
|
+
*/
|
|
28
|
+
export declare function handleSessionRecovery(sessionID: string, error: unknown, failedMessage?: MessageData, config?: SessionRecoveryConfig): Promise<RecoveryResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Create session recovery hook for Claude Code
|
|
31
|
+
*/
|
|
32
|
+
export declare function createSessionRecoveryHook(config?: SessionRecoveryConfig): {
|
|
33
|
+
/**
|
|
34
|
+
* Check for errors during tool execution or message processing
|
|
35
|
+
*/
|
|
36
|
+
onError: (input: {
|
|
37
|
+
session_id: string;
|
|
38
|
+
error: unknown;
|
|
39
|
+
message?: MessageData;
|
|
40
|
+
}) => Promise<RecoveryResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Check if an error is recoverable
|
|
43
|
+
*/
|
|
44
|
+
isRecoverable: (error: unknown) => boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Get recovery message for an error type
|
|
47
|
+
*/
|
|
48
|
+
getRecoveryMessage: (errorType: RecoveryErrorType) => string | undefined;
|
|
49
|
+
};
|
|
50
|
+
export type { MessageData, RecoveryErrorType, RecoveryResult, SessionRecoveryConfig, StoredMessageMeta, StoredPart, StoredTextPart, StoredToolPart, } from "./types.js";
|
|
51
|
+
export { RECOVERY_MESSAGES, PLACEHOLDER_TEXT, } from "./constants.js";
|
|
52
|
+
export { findEmptyMessages, findMessagesWithThinkingBlocks, findMessagesWithOrphanThinking, readMessages, readParts, } from "./storage.js";
|
|
53
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-recovery/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACtB,MAAM,YAAY,CAAC;AA4DpB;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CA+BjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE1D;AA2LD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,aAAa,CAAC,EAAE,WAAW,EAC3B,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAqDzB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,qBAAqB;IAIpE;;OAEG;qBACoB;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB,KAAG,OAAO,CAAC,cAAc,CAAC;IAS3B;;OAEG;2BACoB,OAAO,KAAG,OAAO;IAIxC;;OAEG;oCAC6B,iBAAiB,KAAG,MAAM,GAAG,SAAS;EAMzE;AAGD,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,8BAA8B,EAC9B,YAAY,EACZ,SAAS,GACV,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Recovery Hook
|
|
3
|
+
*
|
|
4
|
+
* Helps recover session state when Claude Code restarts or crashes.
|
|
5
|
+
* Detects and fixes various error conditions that can cause session failures.
|
|
6
|
+
*
|
|
7
|
+
* Adapted from oh-my-opencode's session-recovery hook for Claude Code's
|
|
8
|
+
* shell hook system.
|
|
9
|
+
*
|
|
10
|
+
* Recovery Strategies:
|
|
11
|
+
* 1. Tool Result Missing: Inject cancelled tool results for orphaned tool_use
|
|
12
|
+
* 2. Thinking Block Order: Fix messages where thinking isn't first
|
|
13
|
+
* 3. Thinking Disabled: Strip thinking blocks when model doesn't support them
|
|
14
|
+
* 4. Empty Content: Add placeholder text to empty messages
|
|
15
|
+
*/
|
|
16
|
+
import { appendFileSync } from "node:fs";
|
|
17
|
+
import { findEmptyMessages, findEmptyMessageByIndex, findMessageByIndexNeedingThinking, findMessagesWithEmptyTextParts, findMessagesWithOrphanThinking, findMessagesWithThinkingBlocks, findMessagesWithThinkingOnly, injectTextPart, prependThinkingPart, readParts, replaceEmptyTextParts, stripThinkingParts, } from "./storage.js";
|
|
18
|
+
import { DEBUG, DEBUG_LOG_PATH, PLACEHOLDER_TEXT, RECOVERY_MESSAGES, } from "./constants.js";
|
|
19
|
+
/**
|
|
20
|
+
* Debug logging utility
|
|
21
|
+
*/
|
|
22
|
+
function debugLog(...args) {
|
|
23
|
+
if (DEBUG) {
|
|
24
|
+
const msg = `[${new Date().toISOString()}] [session-recovery] ${args
|
|
25
|
+
.map((a) => (typeof a === "object" ? JSON.stringify(a, null, 2) : String(a)))
|
|
26
|
+
.join(" ")}\n`;
|
|
27
|
+
appendFileSync(DEBUG_LOG_PATH, msg);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Extract error message from various error formats
|
|
32
|
+
*/
|
|
33
|
+
function getErrorMessage(error) {
|
|
34
|
+
if (!error)
|
|
35
|
+
return "";
|
|
36
|
+
if (typeof error === "string")
|
|
37
|
+
return error.toLowerCase();
|
|
38
|
+
const errorObj = error;
|
|
39
|
+
const paths = [
|
|
40
|
+
errorObj.data,
|
|
41
|
+
errorObj.error,
|
|
42
|
+
errorObj,
|
|
43
|
+
errorObj.data?.error,
|
|
44
|
+
];
|
|
45
|
+
for (const obj of paths) {
|
|
46
|
+
if (obj && typeof obj === "object") {
|
|
47
|
+
const msg = obj.message;
|
|
48
|
+
if (typeof msg === "string" && msg.length > 0) {
|
|
49
|
+
return msg.toLowerCase();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
return JSON.stringify(error).toLowerCase();
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Extract message index from error (e.g., "messages.5")
|
|
62
|
+
*/
|
|
63
|
+
function extractMessageIndex(error) {
|
|
64
|
+
const message = getErrorMessage(error);
|
|
65
|
+
const match = message.match(/messages\.(\d+)/);
|
|
66
|
+
return match ? parseInt(match[1], 10) : null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Detect the type of recoverable error
|
|
70
|
+
*/
|
|
71
|
+
export function detectErrorType(error) {
|
|
72
|
+
const message = getErrorMessage(error);
|
|
73
|
+
if (message.includes("tool_use") && message.includes("tool_result")) {
|
|
74
|
+
return "tool_result_missing";
|
|
75
|
+
}
|
|
76
|
+
if (message.includes("thinking") &&
|
|
77
|
+
(message.includes("first block") ||
|
|
78
|
+
message.includes("must start with") ||
|
|
79
|
+
message.includes("preceeding") ||
|
|
80
|
+
message.includes("final block") ||
|
|
81
|
+
message.includes("cannot be thinking") ||
|
|
82
|
+
(message.includes("expected") && message.includes("found")))) {
|
|
83
|
+
return "thinking_block_order";
|
|
84
|
+
}
|
|
85
|
+
if (message.includes("thinking is disabled") && message.includes("cannot contain")) {
|
|
86
|
+
return "thinking_disabled_violation";
|
|
87
|
+
}
|
|
88
|
+
if (message.includes("empty") &&
|
|
89
|
+
(message.includes("content") || message.includes("message"))) {
|
|
90
|
+
return "empty_content";
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if an error is recoverable
|
|
96
|
+
*/
|
|
97
|
+
export function isRecoverableError(error) {
|
|
98
|
+
return detectErrorType(error) !== null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract tool_use IDs from message parts
|
|
102
|
+
*/
|
|
103
|
+
function extractToolUseIds(parts) {
|
|
104
|
+
return parts
|
|
105
|
+
.filter((p) => p.type === "tool_use" && !!p.id)
|
|
106
|
+
.map((p) => p.id);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Recover from missing tool results
|
|
110
|
+
*/
|
|
111
|
+
async function recoverToolResultMissing(sessionID, failedAssistantMsg) {
|
|
112
|
+
debugLog("recoverToolResultMissing", { sessionID, msgId: failedAssistantMsg.info?.id });
|
|
113
|
+
// Try API parts first, fallback to filesystem if empty
|
|
114
|
+
let parts = failedAssistantMsg.parts || [];
|
|
115
|
+
if (parts.length === 0 && failedAssistantMsg.info?.id) {
|
|
116
|
+
const storedParts = readParts(failedAssistantMsg.info.id);
|
|
117
|
+
parts = storedParts.map((p) => ({
|
|
118
|
+
type: p.type === "tool" ? "tool_use" : p.type,
|
|
119
|
+
id: "callID" in p ? p.callID : p.id,
|
|
120
|
+
name: "tool" in p ? p.tool : undefined,
|
|
121
|
+
input: "state" in p
|
|
122
|
+
? p.state?.input
|
|
123
|
+
: undefined,
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
const toolUseIds = extractToolUseIds(parts);
|
|
127
|
+
if (toolUseIds.length === 0) {
|
|
128
|
+
debugLog("No tool_use IDs found");
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
debugLog("Found tool_use IDs to inject results for", toolUseIds);
|
|
132
|
+
// Note: In Claude Code's simplified architecture, we would need to
|
|
133
|
+
// integrate with the actual session/tool system to inject tool results.
|
|
134
|
+
// This is a placeholder showing the recovery intent.
|
|
135
|
+
// A full implementation would require access to the SDK client.
|
|
136
|
+
return true; // Indicate recovery was attempted
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Recover from thinking block order errors
|
|
140
|
+
*/
|
|
141
|
+
async function recoverThinkingBlockOrder(sessionID, _failedAssistantMsg, error) {
|
|
142
|
+
debugLog("recoverThinkingBlockOrder", { sessionID });
|
|
143
|
+
const targetIndex = extractMessageIndex(error);
|
|
144
|
+
if (targetIndex !== null) {
|
|
145
|
+
const targetMessageID = findMessageByIndexNeedingThinking(sessionID, targetIndex);
|
|
146
|
+
if (targetMessageID) {
|
|
147
|
+
debugLog("Found target message by index", { targetIndex, targetMessageID });
|
|
148
|
+
return prependThinkingPart(sessionID, targetMessageID);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const orphanMessages = findMessagesWithOrphanThinking(sessionID);
|
|
152
|
+
if (orphanMessages.length === 0) {
|
|
153
|
+
debugLog("No orphan thinking messages found");
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
debugLog("Found orphan thinking messages", orphanMessages);
|
|
157
|
+
let anySuccess = false;
|
|
158
|
+
for (const messageID of orphanMessages) {
|
|
159
|
+
if (prependThinkingPart(sessionID, messageID)) {
|
|
160
|
+
anySuccess = true;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return anySuccess;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Recover from thinking disabled violations
|
|
167
|
+
*/
|
|
168
|
+
async function recoverThinkingDisabledViolation(sessionID, _failedAssistantMsg) {
|
|
169
|
+
debugLog("recoverThinkingDisabledViolation", { sessionID });
|
|
170
|
+
const messagesWithThinking = findMessagesWithThinkingBlocks(sessionID);
|
|
171
|
+
if (messagesWithThinking.length === 0) {
|
|
172
|
+
debugLog("No messages with thinking blocks found");
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
debugLog("Found messages with thinking blocks", messagesWithThinking);
|
|
176
|
+
let anySuccess = false;
|
|
177
|
+
for (const messageID of messagesWithThinking) {
|
|
178
|
+
if (stripThinkingParts(messageID)) {
|
|
179
|
+
anySuccess = true;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return anySuccess;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Recover from empty content messages
|
|
186
|
+
*/
|
|
187
|
+
async function recoverEmptyContentMessage(sessionID, failedAssistantMsg, error) {
|
|
188
|
+
debugLog("recoverEmptyContentMessage", { sessionID });
|
|
189
|
+
const targetIndex = extractMessageIndex(error);
|
|
190
|
+
const failedID = failedAssistantMsg.info?.id;
|
|
191
|
+
let anySuccess = false;
|
|
192
|
+
// Fix messages with empty text parts
|
|
193
|
+
const messagesWithEmptyText = findMessagesWithEmptyTextParts(sessionID);
|
|
194
|
+
for (const messageID of messagesWithEmptyText) {
|
|
195
|
+
if (replaceEmptyTextParts(messageID, PLACEHOLDER_TEXT)) {
|
|
196
|
+
anySuccess = true;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Fix messages with only thinking
|
|
200
|
+
const thinkingOnlyIDs = findMessagesWithThinkingOnly(sessionID);
|
|
201
|
+
for (const messageID of thinkingOnlyIDs) {
|
|
202
|
+
if (injectTextPart(sessionID, messageID, PLACEHOLDER_TEXT)) {
|
|
203
|
+
anySuccess = true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Try target index if provided
|
|
207
|
+
if (targetIndex !== null) {
|
|
208
|
+
const targetMessageID = findEmptyMessageByIndex(sessionID, targetIndex);
|
|
209
|
+
if (targetMessageID) {
|
|
210
|
+
if (replaceEmptyTextParts(targetMessageID, PLACEHOLDER_TEXT)) {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
if (injectTextPart(sessionID, targetMessageID, PLACEHOLDER_TEXT)) {
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Try failed message ID
|
|
219
|
+
if (failedID) {
|
|
220
|
+
if (replaceEmptyTextParts(failedID, PLACEHOLDER_TEXT)) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
if (injectTextPart(sessionID, failedID, PLACEHOLDER_TEXT)) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Fix all empty messages as last resort
|
|
228
|
+
const emptyMessageIDs = findEmptyMessages(sessionID);
|
|
229
|
+
for (const messageID of emptyMessageIDs) {
|
|
230
|
+
if (replaceEmptyTextParts(messageID, PLACEHOLDER_TEXT)) {
|
|
231
|
+
anySuccess = true;
|
|
232
|
+
}
|
|
233
|
+
if (injectTextPart(sessionID, messageID, PLACEHOLDER_TEXT)) {
|
|
234
|
+
anySuccess = true;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return anySuccess;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Main recovery handler
|
|
241
|
+
*/
|
|
242
|
+
export async function handleSessionRecovery(sessionID, error, failedMessage, config) {
|
|
243
|
+
debugLog("handleSessionRecovery", { sessionID, error });
|
|
244
|
+
const errorType = detectErrorType(error);
|
|
245
|
+
if (!errorType) {
|
|
246
|
+
debugLog("Not a recoverable error");
|
|
247
|
+
return {
|
|
248
|
+
attempted: false,
|
|
249
|
+
success: false,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
debugLog("Detected recoverable error type", errorType);
|
|
253
|
+
try {
|
|
254
|
+
let success = false;
|
|
255
|
+
const failedMsg = failedMessage || { info: {}, parts: [] };
|
|
256
|
+
switch (errorType) {
|
|
257
|
+
case "tool_result_missing":
|
|
258
|
+
success = await recoverToolResultMissing(sessionID, failedMsg);
|
|
259
|
+
break;
|
|
260
|
+
case "thinking_block_order":
|
|
261
|
+
success = await recoverThinkingBlockOrder(sessionID, failedMsg, error);
|
|
262
|
+
break;
|
|
263
|
+
case "thinking_disabled_violation":
|
|
264
|
+
success = await recoverThinkingDisabledViolation(sessionID, failedMsg);
|
|
265
|
+
break;
|
|
266
|
+
case "empty_content":
|
|
267
|
+
success = await recoverEmptyContentMessage(sessionID, failedMsg, error);
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
debugLog("Recovery result", { errorType, success });
|
|
271
|
+
const recoveryMessage = config?.customMessages?.[errorType] ||
|
|
272
|
+
RECOVERY_MESSAGES[errorType]?.message ||
|
|
273
|
+
`Session recovery attempted for ${errorType}`;
|
|
274
|
+
return {
|
|
275
|
+
attempted: true,
|
|
276
|
+
success,
|
|
277
|
+
message: success ? recoveryMessage : undefined,
|
|
278
|
+
errorType,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
debugLog("Recovery failed with error", err);
|
|
283
|
+
return {
|
|
284
|
+
attempted: true,
|
|
285
|
+
success: false,
|
|
286
|
+
errorType,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Create session recovery hook for Claude Code
|
|
292
|
+
*/
|
|
293
|
+
export function createSessionRecoveryHook(config) {
|
|
294
|
+
debugLog("createSessionRecoveryHook", { config });
|
|
295
|
+
return {
|
|
296
|
+
/**
|
|
297
|
+
* Check for errors during tool execution or message processing
|
|
298
|
+
*/
|
|
299
|
+
onError: async (input) => {
|
|
300
|
+
return handleSessionRecovery(input.session_id, input.error, input.message, config);
|
|
301
|
+
},
|
|
302
|
+
/**
|
|
303
|
+
* Check if an error is recoverable
|
|
304
|
+
*/
|
|
305
|
+
isRecoverable: (error) => {
|
|
306
|
+
return isRecoverableError(error);
|
|
307
|
+
},
|
|
308
|
+
/**
|
|
309
|
+
* Get recovery message for an error type
|
|
310
|
+
*/
|
|
311
|
+
getRecoveryMessage: (errorType) => {
|
|
312
|
+
if (!errorType)
|
|
313
|
+
return undefined;
|
|
314
|
+
return config?.customMessages?.[errorType] ||
|
|
315
|
+
RECOVERY_MESSAGES[errorType]?.message;
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
export { RECOVERY_MESSAGES, PLACEHOLDER_TEXT, } from "./constants.js";
|
|
320
|
+
export { findEmptyMessages, findMessagesWithThinkingBlocks, findMessagesWithOrphanThinking, readMessages, readParts, } from "./storage.js";
|
|
321
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/session-recovery/index.ts"],"names":[],"mappings":"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"}
|