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,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Notification Hook
|
|
3
|
+
*
|
|
4
|
+
* Handles notifications for background tasks completing.
|
|
5
|
+
* Integrates with the BackgroundManager to show task completion status.
|
|
6
|
+
*
|
|
7
|
+
* Adapted from oh-my-opencode's background-notification hook for Claude Code's
|
|
8
|
+
* shell hooks system.
|
|
9
|
+
*/
|
|
10
|
+
import { getBackgroundManager } from '../../features/background-agent/index.js';
|
|
11
|
+
/** Hook name identifier */
|
|
12
|
+
export const HOOK_NAME = 'background-notification';
|
|
13
|
+
/**
|
|
14
|
+
* Format a single task notification
|
|
15
|
+
*/
|
|
16
|
+
function formatTaskNotification(task) {
|
|
17
|
+
const status = task.status.toUpperCase();
|
|
18
|
+
const duration = formatDuration(task.startedAt, task.completedAt);
|
|
19
|
+
const emoji = task.status === 'completed' ? '✓' : task.status === 'error' ? '✗' : '○';
|
|
20
|
+
const lines = [
|
|
21
|
+
`${emoji} [${status}] ${task.description}`,
|
|
22
|
+
` Agent: ${task.agent}`,
|
|
23
|
+
` Duration: ${duration}`,
|
|
24
|
+
];
|
|
25
|
+
if (task.progress?.toolCalls) {
|
|
26
|
+
lines.push(` Tool calls: ${task.progress.toolCalls}`);
|
|
27
|
+
}
|
|
28
|
+
if (task.result) {
|
|
29
|
+
const resultPreview = task.result.substring(0, 200);
|
|
30
|
+
const truncated = task.result.length > 200 ? '...' : '';
|
|
31
|
+
lines.push(` Result: ${resultPreview}${truncated}`);
|
|
32
|
+
}
|
|
33
|
+
if (task.error) {
|
|
34
|
+
lines.push(` Error: ${task.error}`);
|
|
35
|
+
}
|
|
36
|
+
return lines.join('\n');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Format duration between two dates
|
|
40
|
+
*/
|
|
41
|
+
function formatDuration(start, end) {
|
|
42
|
+
const duration = (end ?? new Date()).getTime() - start.getTime();
|
|
43
|
+
const seconds = Math.floor(duration / 1000);
|
|
44
|
+
const minutes = Math.floor(seconds / 60);
|
|
45
|
+
const hours = Math.floor(minutes / 60);
|
|
46
|
+
if (hours > 0) {
|
|
47
|
+
return `${hours}h ${minutes % 60}m ${seconds % 60}s`;
|
|
48
|
+
}
|
|
49
|
+
else if (minutes > 0) {
|
|
50
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
51
|
+
}
|
|
52
|
+
return `${seconds}s`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Default formatter for notification messages
|
|
56
|
+
*/
|
|
57
|
+
function defaultFormatNotification(tasks) {
|
|
58
|
+
if (tasks.length === 0) {
|
|
59
|
+
return '';
|
|
60
|
+
}
|
|
61
|
+
const header = tasks.length === 1
|
|
62
|
+
? '\n[BACKGROUND TASK COMPLETED]\n'
|
|
63
|
+
: `\n[${tasks.length} BACKGROUND TASKS COMPLETED]\n`;
|
|
64
|
+
const taskDescriptions = tasks
|
|
65
|
+
.map(task => formatTaskNotification(task))
|
|
66
|
+
.join('\n\n');
|
|
67
|
+
return `${header}\n${taskDescriptions}\n`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check for pending background notifications
|
|
71
|
+
*/
|
|
72
|
+
export function checkBackgroundNotifications(sessionId, manager, config) {
|
|
73
|
+
// Get pending notifications for this session
|
|
74
|
+
const tasks = manager.getPendingNotifications(sessionId);
|
|
75
|
+
if (tasks.length === 0) {
|
|
76
|
+
return {
|
|
77
|
+
hasNotifications: false,
|
|
78
|
+
tasks: [],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Format notification message
|
|
82
|
+
const formatter = config?.formatNotification ?? defaultFormatNotification;
|
|
83
|
+
const message = formatter(tasks);
|
|
84
|
+
return {
|
|
85
|
+
hasNotifications: true,
|
|
86
|
+
tasks,
|
|
87
|
+
message,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Process background notification event
|
|
92
|
+
*/
|
|
93
|
+
export function processBackgroundNotification(input, config) {
|
|
94
|
+
const sessionId = input.sessionId;
|
|
95
|
+
if (!sessionId) {
|
|
96
|
+
return { continue: true };
|
|
97
|
+
}
|
|
98
|
+
// Get background manager
|
|
99
|
+
const manager = getBackgroundManager();
|
|
100
|
+
// Check for notifications
|
|
101
|
+
const result = checkBackgroundNotifications(sessionId, manager, config);
|
|
102
|
+
if (!result.hasNotifications) {
|
|
103
|
+
return { continue: true };
|
|
104
|
+
}
|
|
105
|
+
// Clear notifications if auto-clear is enabled (default: true)
|
|
106
|
+
const autoClear = config?.autoClear ?? true;
|
|
107
|
+
if (autoClear) {
|
|
108
|
+
manager.clearNotifications(sessionId);
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
continue: true,
|
|
112
|
+
message: result.message,
|
|
113
|
+
notificationCount: result.tasks.length,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Handle event from BackgroundManager
|
|
118
|
+
* This is called by the BackgroundManager when tasks complete
|
|
119
|
+
*/
|
|
120
|
+
export function handleBackgroundEvent(event, manager) {
|
|
121
|
+
// Handle task completion events
|
|
122
|
+
if (event.type === 'task.completed' || event.type === 'task.failed') {
|
|
123
|
+
const taskId = event.properties?.taskId;
|
|
124
|
+
if (taskId) {
|
|
125
|
+
const task = manager.getTask(taskId);
|
|
126
|
+
if (task) {
|
|
127
|
+
manager.markForNotification(task);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create background notification hook handlers
|
|
134
|
+
*/
|
|
135
|
+
export function createBackgroundNotificationHook(manager, config) {
|
|
136
|
+
return {
|
|
137
|
+
/**
|
|
138
|
+
* Hook name identifier
|
|
139
|
+
*/
|
|
140
|
+
name: HOOK_NAME,
|
|
141
|
+
/**
|
|
142
|
+
* Process an event (for shell hook compatibility)
|
|
143
|
+
*/
|
|
144
|
+
event: async (input) => {
|
|
145
|
+
// Handle event if provided
|
|
146
|
+
if (input.event) {
|
|
147
|
+
handleBackgroundEvent(input.event, manager);
|
|
148
|
+
}
|
|
149
|
+
// Process notifications
|
|
150
|
+
return processBackgroundNotification(input, config);
|
|
151
|
+
},
|
|
152
|
+
/**
|
|
153
|
+
* Check for pending notifications without clearing them
|
|
154
|
+
*/
|
|
155
|
+
check: (sessionId) => {
|
|
156
|
+
return checkBackgroundNotifications(sessionId, manager, config);
|
|
157
|
+
},
|
|
158
|
+
/**
|
|
159
|
+
* Manually clear notifications for a session
|
|
160
|
+
*/
|
|
161
|
+
clear: (sessionId) => {
|
|
162
|
+
manager.clearNotifications(sessionId);
|
|
163
|
+
},
|
|
164
|
+
/**
|
|
165
|
+
* Get all pending notifications without clearing
|
|
166
|
+
*/
|
|
167
|
+
getPending: (sessionId) => {
|
|
168
|
+
return manager.getPendingNotifications(sessionId);
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Simple utility function for shell hook integration
|
|
174
|
+
*/
|
|
175
|
+
export async function processBackgroundNotificationHook(input, config) {
|
|
176
|
+
const manager = getBackgroundManager();
|
|
177
|
+
const hook = createBackgroundNotificationHook(manager, config);
|
|
178
|
+
return hook.event(input);
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/background-notification/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Notification Hook Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for background task notification handling.
|
|
5
|
+
* Adapted from oh-my-opencode's background-notification hook.
|
|
6
|
+
*/
|
|
7
|
+
import type { BackgroundTask } from '../../features/background-agent/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for background notification hook
|
|
10
|
+
*/
|
|
11
|
+
export interface BackgroundNotificationHookConfig {
|
|
12
|
+
/**
|
|
13
|
+
* Custom formatter for notification messages
|
|
14
|
+
* If not provided, uses default formatting
|
|
15
|
+
*/
|
|
16
|
+
formatNotification?: (tasks: BackgroundTask[]) => string;
|
|
17
|
+
/**
|
|
18
|
+
* Whether to automatically clear notifications after they're shown
|
|
19
|
+
* Default: true
|
|
20
|
+
*/
|
|
21
|
+
autoClear?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to show notifications only for the current session
|
|
24
|
+
* Default: true (only show notifications for tasks launched by current session)
|
|
25
|
+
*/
|
|
26
|
+
currentSessionOnly?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Input for background notification hook
|
|
30
|
+
*/
|
|
31
|
+
export interface BackgroundNotificationHookInput {
|
|
32
|
+
/** Current session ID */
|
|
33
|
+
sessionId?: string;
|
|
34
|
+
/** Working directory */
|
|
35
|
+
directory?: string;
|
|
36
|
+
/** Event type (for shell hook compatibility) */
|
|
37
|
+
event?: {
|
|
38
|
+
type: string;
|
|
39
|
+
properties?: Record<string, unknown>;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Output from background notification hook
|
|
44
|
+
*/
|
|
45
|
+
export interface BackgroundNotificationHookOutput {
|
|
46
|
+
/** Whether to continue with the operation */
|
|
47
|
+
continue: boolean;
|
|
48
|
+
/** Notification message to inject into context */
|
|
49
|
+
message?: string;
|
|
50
|
+
/** Number of tasks with notifications */
|
|
51
|
+
notificationCount?: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Result of checking for background notifications
|
|
55
|
+
*/
|
|
56
|
+
export interface NotificationCheckResult {
|
|
57
|
+
/** Whether there are pending notifications */
|
|
58
|
+
hasNotifications: boolean;
|
|
59
|
+
/** Completed tasks to notify about */
|
|
60
|
+
tasks: BackgroundTask[];
|
|
61
|
+
/** Formatted notification message */
|
|
62
|
+
message?: string;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/background-notification/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,MAAM,CAAC;IAEzD;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,8CAA8C;IAC9C,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sCAAsC;IACtC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/background-notification/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Bridge - TypeScript logic invoked by shell scripts
|
|
3
|
+
*
|
|
4
|
+
* This module provides the main entry point for shell hooks to call TypeScript
|
|
5
|
+
* for complex processing. The shell script reads stdin, passes it to this module,
|
|
6
|
+
* and writes the JSON output to stdout.
|
|
7
|
+
*
|
|
8
|
+
* Usage from shell:
|
|
9
|
+
* ```bash
|
|
10
|
+
* #!/bin/bash
|
|
11
|
+
* INPUT=$(cat)
|
|
12
|
+
* echo "$INPUT" | node ~/.claude/olympus/hook-bridge.mjs --hook=keyword-detector
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Input format from Claude Code hooks (via stdin)
|
|
17
|
+
*/
|
|
18
|
+
export interface HookInput {
|
|
19
|
+
/** Session identifier */
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
/** User prompt text */
|
|
22
|
+
prompt?: string;
|
|
23
|
+
/** Message content (alternative to prompt) */
|
|
24
|
+
message?: {
|
|
25
|
+
content?: string;
|
|
26
|
+
};
|
|
27
|
+
/** Message parts (alternative structure) */
|
|
28
|
+
parts?: Array<{
|
|
29
|
+
type: string;
|
|
30
|
+
text?: string;
|
|
31
|
+
}>;
|
|
32
|
+
/** Tool name (for tool hooks) */
|
|
33
|
+
toolName?: string;
|
|
34
|
+
/** Tool input parameters */
|
|
35
|
+
toolInput?: unknown;
|
|
36
|
+
/** Tool output (for post-tool hooks) */
|
|
37
|
+
toolOutput?: unknown;
|
|
38
|
+
/** Working directory */
|
|
39
|
+
directory?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Output format for Claude Code hooks (to stdout)
|
|
43
|
+
*/
|
|
44
|
+
export interface HookOutput {
|
|
45
|
+
/** Whether to continue with the operation */
|
|
46
|
+
continue: boolean;
|
|
47
|
+
/** Optional message to inject into context */
|
|
48
|
+
message?: string;
|
|
49
|
+
/** Reason for blocking (when continue=false) */
|
|
50
|
+
reason?: string;
|
|
51
|
+
/** Modified tool input (for pre-tool hooks) */
|
|
52
|
+
modifiedInput?: unknown;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Hook types that can be processed
|
|
56
|
+
*/
|
|
57
|
+
export type HookType = 'keyword-detector' | 'stop-continuation' | 'the-ascent' | 'persistent-mode' | 'session-start' | 'pre-tool-use' | 'post-tool-use';
|
|
58
|
+
/**
|
|
59
|
+
* Main hook processor
|
|
60
|
+
* Routes to specific hook handler based on type
|
|
61
|
+
*/
|
|
62
|
+
export declare function processHook(hookType: HookType, input: HookInput): Promise<HookOutput>;
|
|
63
|
+
/**
|
|
64
|
+
* CLI entry point for shell script invocation
|
|
65
|
+
* Reads JSON from stdin, processes hook, writes JSON to stdout
|
|
66
|
+
*/
|
|
67
|
+
export declare function main(): Promise<void>;
|
|
68
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/hooks/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqBH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,4CAA4C;IAC5C,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,kBAAkB,GAClB,mBAAmB,GACnB,YAAY,GACZ,iBAAiB,GACjB,eAAe,GACf,cAAc,GACd,eAAe,CAAC;AA8QpB;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,UAAU,CAAC,CAkCrB;AAED;;;GAGG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B1C"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Bridge - TypeScript logic invoked by shell scripts
|
|
3
|
+
*
|
|
4
|
+
* This module provides the main entry point for shell hooks to call TypeScript
|
|
5
|
+
* for complex processing. The shell script reads stdin, passes it to this module,
|
|
6
|
+
* and writes the JSON output to stdout.
|
|
7
|
+
*
|
|
8
|
+
* Usage from shell:
|
|
9
|
+
* ```bash
|
|
10
|
+
* #!/bin/bash
|
|
11
|
+
* INPUT=$(cat)
|
|
12
|
+
* echo "$INPUT" | node ~/.claude/olympus/hook-bridge.mjs --hook=keyword-detector
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { detectKeywordsWithType, removeCodeBlocks } from './keyword-detector/index.js';
|
|
16
|
+
import { readAscentState, incrementAscentIteration, clearAscentState, detectCompletionPromise } from './the-ascent/index.js';
|
|
17
|
+
import { readVerificationState, startVerification, getOracleVerificationPrompt, clearVerificationState } from './ascent-verifier/index.js';
|
|
18
|
+
import { checkIncompleteTodos } from './todo-continuation/index.js';
|
|
19
|
+
import { checkPersistentModes, createHookOutput } from './persistent-mode/index.js';
|
|
20
|
+
import { activateUltrawork, readUltraworkState } from './ultrawork-state/index.js';
|
|
21
|
+
import { ULTRAWORK_MESSAGE, ULTRATHINK_MESSAGE, SEARCH_MESSAGE, ANALYZE_MESSAGE, TODO_CONTINUATION_PROMPT } from '../installer/hooks.js';
|
|
22
|
+
/**
|
|
23
|
+
* Extract prompt text from various input formats
|
|
24
|
+
*/
|
|
25
|
+
function getPromptText(input) {
|
|
26
|
+
if (input.prompt) {
|
|
27
|
+
return input.prompt;
|
|
28
|
+
}
|
|
29
|
+
if (input.message?.content) {
|
|
30
|
+
return input.message.content;
|
|
31
|
+
}
|
|
32
|
+
if (input.parts) {
|
|
33
|
+
return input.parts
|
|
34
|
+
.filter(p => p.type === 'text' && p.text)
|
|
35
|
+
.map(p => p.text)
|
|
36
|
+
.join(' ');
|
|
37
|
+
}
|
|
38
|
+
return '';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Process keyword detection hook
|
|
42
|
+
* Detects ultrawork/ultrathink/search/analyze keywords and returns injection message
|
|
43
|
+
* Also activates persistent ultrawork state when ultrawork keyword is detected
|
|
44
|
+
*/
|
|
45
|
+
function processKeywordDetector(input) {
|
|
46
|
+
const promptText = getPromptText(input);
|
|
47
|
+
if (!promptText) {
|
|
48
|
+
return { continue: true };
|
|
49
|
+
}
|
|
50
|
+
// Remove code blocks to prevent false positives
|
|
51
|
+
const cleanedText = removeCodeBlocks(promptText);
|
|
52
|
+
// Detect keywords
|
|
53
|
+
const keywords = detectKeywordsWithType(cleanedText);
|
|
54
|
+
if (keywords.length === 0) {
|
|
55
|
+
return { continue: true };
|
|
56
|
+
}
|
|
57
|
+
// Priority: ultrawork > ultrathink > search > analyze
|
|
58
|
+
const hasUltrawork = keywords.some(k => k.type === 'ultrawork');
|
|
59
|
+
const hasUltrathink = keywords.some(k => k.type === 'ultrathink');
|
|
60
|
+
const hasSearch = keywords.some(k => k.type === 'search');
|
|
61
|
+
const hasAnalyze = keywords.some(k => k.type === 'analyze');
|
|
62
|
+
if (hasUltrawork) {
|
|
63
|
+
// Activate persistent ultrawork state
|
|
64
|
+
const sessionId = input.sessionId;
|
|
65
|
+
const directory = input.directory || process.cwd();
|
|
66
|
+
activateUltrawork(promptText, sessionId, directory);
|
|
67
|
+
return {
|
|
68
|
+
continue: true,
|
|
69
|
+
message: ULTRAWORK_MESSAGE
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (hasUltrathink) {
|
|
73
|
+
return {
|
|
74
|
+
continue: true,
|
|
75
|
+
message: ULTRATHINK_MESSAGE
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (hasSearch) {
|
|
79
|
+
return {
|
|
80
|
+
continue: true,
|
|
81
|
+
message: SEARCH_MESSAGE
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
if (hasAnalyze) {
|
|
85
|
+
return {
|
|
86
|
+
continue: true,
|
|
87
|
+
message: ANALYZE_MESSAGE
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return { continue: true };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Process stop continuation hook
|
|
94
|
+
* Checks for incomplete todos and blocks stop if tasks remain
|
|
95
|
+
*/
|
|
96
|
+
async function processStopContinuation(input) {
|
|
97
|
+
const sessionId = input.sessionId;
|
|
98
|
+
const directory = input.directory || process.cwd();
|
|
99
|
+
// Check for incomplete todos
|
|
100
|
+
const incompleteTodos = await checkIncompleteTodos(sessionId, directory);
|
|
101
|
+
if (incompleteTodos.count > 0) {
|
|
102
|
+
return {
|
|
103
|
+
continue: false,
|
|
104
|
+
reason: `${TODO_CONTINUATION_PROMPT}\n\n[Status: ${incompleteTodos.count} tasks remaining]`
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return { continue: true };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Process The Ascent hook (session.idle event)
|
|
111
|
+
* Continues work loops until completion promise is detected and oracle verifies
|
|
112
|
+
*/
|
|
113
|
+
async function processAscentLoop(input) {
|
|
114
|
+
const sessionId = input.sessionId;
|
|
115
|
+
const directory = input.directory || process.cwd();
|
|
116
|
+
if (!sessionId) {
|
|
117
|
+
return { continue: true };
|
|
118
|
+
}
|
|
119
|
+
// Read Ascent state
|
|
120
|
+
const state = readAscentState(directory);
|
|
121
|
+
if (!state || !state.active) {
|
|
122
|
+
return { continue: true };
|
|
123
|
+
}
|
|
124
|
+
// Check if this is the right session
|
|
125
|
+
if (state.session_id && state.session_id !== sessionId) {
|
|
126
|
+
return { continue: true };
|
|
127
|
+
}
|
|
128
|
+
// Check for existing verification state (oracle verification in progress)
|
|
129
|
+
const verificationState = readVerificationState(directory);
|
|
130
|
+
if (verificationState?.pending) {
|
|
131
|
+
// Check if oracle has approved (by looking for the tag in transcript)
|
|
132
|
+
// This is handled more thoroughly in persistent-mode hook
|
|
133
|
+
// Here we just remind to spawn oracle if verification is pending
|
|
134
|
+
const verificationPrompt = getOracleVerificationPrompt(verificationState);
|
|
135
|
+
return {
|
|
136
|
+
continue: true,
|
|
137
|
+
message: verificationPrompt
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// Check for completion promise in transcript
|
|
141
|
+
const completed = detectCompletionPromise(sessionId, state.completion_promise);
|
|
142
|
+
if (completed) {
|
|
143
|
+
// Start oracle verification instead of completing immediately
|
|
144
|
+
startVerification(directory, state.completion_promise, state.prompt);
|
|
145
|
+
const newVerificationState = readVerificationState(directory);
|
|
146
|
+
if (newVerificationState) {
|
|
147
|
+
const verificationPrompt = getOracleVerificationPrompt(newVerificationState);
|
|
148
|
+
return {
|
|
149
|
+
continue: true,
|
|
150
|
+
message: verificationPrompt
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Fallback if verification couldn't be started
|
|
154
|
+
clearAscentState(directory);
|
|
155
|
+
return {
|
|
156
|
+
continue: true,
|
|
157
|
+
message: `[ASCENT LOOP COMPLETE] Task completed after ${state.iteration} iteration(s).`
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// Check max iterations
|
|
161
|
+
if (state.iteration >= state.max_iterations) {
|
|
162
|
+
clearAscentState(directory);
|
|
163
|
+
clearVerificationState(directory);
|
|
164
|
+
return {
|
|
165
|
+
continue: true,
|
|
166
|
+
message: `[ASCENT LOOP STOPPED] Max iterations (${state.max_iterations}) reached without completion.`
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// Increment and continue
|
|
170
|
+
const newState = incrementAscentIteration(directory);
|
|
171
|
+
if (!newState) {
|
|
172
|
+
return { continue: true };
|
|
173
|
+
}
|
|
174
|
+
const continuationPrompt = `[ASCENT LOOP - ITERATION ${newState.iteration}/${newState.max_iterations}]
|
|
175
|
+
|
|
176
|
+
Your previous attempt did not output the completion promise. Continue working on the task.
|
|
177
|
+
|
|
178
|
+
IMPORTANT:
|
|
179
|
+
- Review your progress so far
|
|
180
|
+
- Continue from where you left off
|
|
181
|
+
- When FULLY complete, output: <promise>${newState.completion_promise}</promise>
|
|
182
|
+
- Do not stop until the task is truly done
|
|
183
|
+
|
|
184
|
+
Original task:
|
|
185
|
+
${newState.prompt}`;
|
|
186
|
+
return {
|
|
187
|
+
continue: true,
|
|
188
|
+
message: continuationPrompt
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Process persistent mode hook (enhanced stop continuation)
|
|
193
|
+
* Unified handler for ultrawork, the-ascent, and todo-continuation
|
|
194
|
+
*/
|
|
195
|
+
async function processPersistentMode(input) {
|
|
196
|
+
const sessionId = input.sessionId;
|
|
197
|
+
const directory = input.directory || process.cwd();
|
|
198
|
+
const result = await checkPersistentModes(sessionId, directory);
|
|
199
|
+
return createHookOutput(result);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Process session start hook
|
|
203
|
+
* Restores persistent mode states and injects context if needed
|
|
204
|
+
*/
|
|
205
|
+
async function processSessionStart(input) {
|
|
206
|
+
const sessionId = input.sessionId;
|
|
207
|
+
const directory = input.directory || process.cwd();
|
|
208
|
+
const messages = [];
|
|
209
|
+
// Check for active ultrawork state
|
|
210
|
+
const ultraworkState = readUltraworkState(directory);
|
|
211
|
+
if (ultraworkState?.active) {
|
|
212
|
+
messages.push(`<session-restore>
|
|
213
|
+
|
|
214
|
+
[ULTRAWORK MODE RESTORED]
|
|
215
|
+
|
|
216
|
+
You have an active ultrawork session from ${ultraworkState.started_at}.
|
|
217
|
+
Original task: ${ultraworkState.original_prompt}
|
|
218
|
+
|
|
219
|
+
Continue working in ultrawork mode until all tasks are complete.
|
|
220
|
+
|
|
221
|
+
</session-restore>
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
`);
|
|
226
|
+
}
|
|
227
|
+
// Check for incomplete todos
|
|
228
|
+
const todoResult = await checkIncompleteTodos(sessionId, directory);
|
|
229
|
+
if (todoResult.count > 0) {
|
|
230
|
+
messages.push(`<session-restore>
|
|
231
|
+
|
|
232
|
+
[PENDING TASKS DETECTED]
|
|
233
|
+
|
|
234
|
+
You have ${todoResult.count} incomplete tasks from a previous session.
|
|
235
|
+
Please continue working on these tasks.
|
|
236
|
+
|
|
237
|
+
</session-restore>
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
`);
|
|
242
|
+
}
|
|
243
|
+
if (messages.length > 0) {
|
|
244
|
+
return {
|
|
245
|
+
continue: true,
|
|
246
|
+
message: messages.join('\n')
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
return { continue: true };
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Main hook processor
|
|
253
|
+
* Routes to specific hook handler based on type
|
|
254
|
+
*/
|
|
255
|
+
export async function processHook(hookType, input) {
|
|
256
|
+
try {
|
|
257
|
+
switch (hookType) {
|
|
258
|
+
case 'keyword-detector':
|
|
259
|
+
return processKeywordDetector(input);
|
|
260
|
+
case 'stop-continuation':
|
|
261
|
+
return await processStopContinuation(input);
|
|
262
|
+
case 'the-ascent':
|
|
263
|
+
return await processAscentLoop(input);
|
|
264
|
+
case 'persistent-mode':
|
|
265
|
+
return await processPersistentMode(input);
|
|
266
|
+
case 'session-start':
|
|
267
|
+
return await processSessionStart(input);
|
|
268
|
+
case 'pre-tool-use':
|
|
269
|
+
// Pre-tool-use hooks can be extended here
|
|
270
|
+
return { continue: true };
|
|
271
|
+
case 'post-tool-use':
|
|
272
|
+
// Post-tool-use hooks can be extended here
|
|
273
|
+
return { continue: true };
|
|
274
|
+
default:
|
|
275
|
+
return { continue: true };
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
// Log error but don't block execution
|
|
280
|
+
console.error(`[hook-bridge] Error in ${hookType}:`, error);
|
|
281
|
+
return { continue: true };
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* CLI entry point for shell script invocation
|
|
286
|
+
* Reads JSON from stdin, processes hook, writes JSON to stdout
|
|
287
|
+
*/
|
|
288
|
+
export async function main() {
|
|
289
|
+
const args = process.argv.slice(2);
|
|
290
|
+
const hookArg = args.find(a => a.startsWith('--hook='));
|
|
291
|
+
if (!hookArg) {
|
|
292
|
+
console.error('Usage: node hook-bridge.mjs --hook=<type>');
|
|
293
|
+
process.exit(1);
|
|
294
|
+
}
|
|
295
|
+
const hookType = hookArg.split('=')[1];
|
|
296
|
+
// Read stdin
|
|
297
|
+
const chunks = [];
|
|
298
|
+
for await (const chunk of process.stdin) {
|
|
299
|
+
chunks.push(chunk);
|
|
300
|
+
}
|
|
301
|
+
const inputStr = Buffer.concat(chunks).toString('utf-8');
|
|
302
|
+
let input;
|
|
303
|
+
try {
|
|
304
|
+
input = JSON.parse(inputStr);
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
input = {};
|
|
308
|
+
}
|
|
309
|
+
// Process hook
|
|
310
|
+
const output = await processHook(hookType, input);
|
|
311
|
+
// Write output to stdout
|
|
312
|
+
console.log(JSON.stringify(output));
|
|
313
|
+
}
|
|
314
|
+
// Run if called directly
|
|
315
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
316
|
+
main().catch(err => {
|
|
317
|
+
console.error('[hook-bridge] Fatal error:', err);
|
|
318
|
+
process.exit(1);
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/hooks/bridge.ts"],"names":[],"mappings":"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"}
|