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,539 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Update System
|
|
3
|
+
*
|
|
4
|
+
* Provides version checking and auto-update functionality for Olympus.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Check for new versions from GitHub releases
|
|
8
|
+
* - Download and install updates automatically
|
|
9
|
+
* - Store version metadata for installed components
|
|
10
|
+
* - Configurable update notifications
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, unlinkSync } from 'fs';
|
|
13
|
+
import { join, dirname } from 'path';
|
|
14
|
+
import { homedir, tmpdir } from 'os';
|
|
15
|
+
import { execSync } from 'child_process';
|
|
16
|
+
/** GitHub repository information */
|
|
17
|
+
export const REPO_OWNER = 'mikev10';
|
|
18
|
+
export const REPO_NAME = 'olympus';
|
|
19
|
+
export const GITHUB_API_URL = `https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}`;
|
|
20
|
+
export const GITHUB_RAW_URL = `https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}`;
|
|
21
|
+
/** Installation paths */
|
|
22
|
+
export const CLAUDE_CONFIG_DIR = join(homedir(), '.claude');
|
|
23
|
+
export const VERSION_FILE = join(CLAUDE_CONFIG_DIR, '.olympus-version.json');
|
|
24
|
+
export const CONFIG_FILE = join(CLAUDE_CONFIG_DIR, '.olympus-config.json');
|
|
25
|
+
/**
|
|
26
|
+
* Read the Olympus configuration
|
|
27
|
+
*/
|
|
28
|
+
export function getOlympusConfig() {
|
|
29
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
30
|
+
// No config file = disabled by default for security
|
|
31
|
+
return { silentAutoUpdate: false };
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const content = readFileSync(CONFIG_FILE, 'utf-8');
|
|
35
|
+
const config = JSON.parse(content);
|
|
36
|
+
return {
|
|
37
|
+
silentAutoUpdate: config.silentAutoUpdate ?? false,
|
|
38
|
+
configuredAt: config.configuredAt,
|
|
39
|
+
configVersion: config.configVersion
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// If config file is invalid, default to disabled for security
|
|
44
|
+
return { silentAutoUpdate: false };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if silent auto-updates are enabled
|
|
49
|
+
*/
|
|
50
|
+
export function isSilentAutoUpdateEnabled() {
|
|
51
|
+
return getOlympusConfig().silentAutoUpdate;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read the current version metadata
|
|
55
|
+
*/
|
|
56
|
+
export function getInstalledVersion() {
|
|
57
|
+
if (!existsSync(VERSION_FILE)) {
|
|
58
|
+
// Try to detect version from package.json if installed via npm
|
|
59
|
+
try {
|
|
60
|
+
// Check if we can find the package in node_modules
|
|
61
|
+
const result = execSync('npm list -g olympus --json', {
|
|
62
|
+
encoding: 'utf-8',
|
|
63
|
+
timeout: 5000,
|
|
64
|
+
stdio: 'pipe'
|
|
65
|
+
});
|
|
66
|
+
const data = JSON.parse(result);
|
|
67
|
+
if (data.dependencies?.['olympus']?.version) {
|
|
68
|
+
return {
|
|
69
|
+
version: data.dependencies['olympus'].version,
|
|
70
|
+
installedAt: new Date().toISOString(),
|
|
71
|
+
installMethod: 'npm'
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Not installed via npm or command failed
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const content = readFileSync(VERSION_FILE, 'utf-8');
|
|
82
|
+
return JSON.parse(content);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error('Error reading version file:', error);
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Save version metadata after installation/update
|
|
91
|
+
*/
|
|
92
|
+
export function saveVersionMetadata(metadata) {
|
|
93
|
+
const dir = dirname(VERSION_FILE);
|
|
94
|
+
if (!existsSync(dir)) {
|
|
95
|
+
mkdirSync(dir, { recursive: true });
|
|
96
|
+
}
|
|
97
|
+
writeFileSync(VERSION_FILE, JSON.stringify(metadata, null, 2));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Update the last check timestamp
|
|
101
|
+
*/
|
|
102
|
+
export function updateLastCheckTime() {
|
|
103
|
+
const current = getInstalledVersion();
|
|
104
|
+
if (current) {
|
|
105
|
+
current.lastCheckAt = new Date().toISOString();
|
|
106
|
+
saveVersionMetadata(current);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Fetch the latest release from GitHub
|
|
111
|
+
*/
|
|
112
|
+
export async function fetchLatestRelease() {
|
|
113
|
+
const response = await fetch(`${GITHUB_API_URL}/releases/latest`, {
|
|
114
|
+
headers: {
|
|
115
|
+
'Accept': 'application/vnd.github.v3+json',
|
|
116
|
+
'User-Agent': 'olympus-updater'
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
if (response.status === 404) {
|
|
120
|
+
// No releases found - try to get version from package.json in repo
|
|
121
|
+
const pkgResponse = await fetch(`${GITHUB_RAW_URL}/main/package.json`, {
|
|
122
|
+
headers: {
|
|
123
|
+
'User-Agent': 'olympus-updater'
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
if (pkgResponse.ok) {
|
|
127
|
+
const pkg = await pkgResponse.json();
|
|
128
|
+
return {
|
|
129
|
+
tag_name: `v${pkg.version}`,
|
|
130
|
+
name: `Version ${pkg.version}`,
|
|
131
|
+
published_at: new Date().toISOString(),
|
|
132
|
+
html_url: `https://github.com/${REPO_OWNER}/${REPO_NAME}`,
|
|
133
|
+
body: 'No release notes available (fetched from package.json)',
|
|
134
|
+
prerelease: false,
|
|
135
|
+
draft: false
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
throw new Error('No releases found and could not fetch package.json');
|
|
139
|
+
}
|
|
140
|
+
if (!response.ok) {
|
|
141
|
+
throw new Error(`Failed to fetch release info: ${response.status} ${response.statusText}`);
|
|
142
|
+
}
|
|
143
|
+
return await response.json();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Compare semantic versions
|
|
147
|
+
* Returns: -1 if a < b, 0 if a == b, 1 if a > b
|
|
148
|
+
*/
|
|
149
|
+
export function compareVersions(a, b) {
|
|
150
|
+
// Remove 'v' prefix if present
|
|
151
|
+
const cleanA = a.replace(/^v/, '');
|
|
152
|
+
const cleanB = b.replace(/^v/, '');
|
|
153
|
+
const partsA = cleanA.split('.').map(n => parseInt(n, 10) || 0);
|
|
154
|
+
const partsB = cleanB.split('.').map(n => parseInt(n, 10) || 0);
|
|
155
|
+
const maxLength = Math.max(partsA.length, partsB.length);
|
|
156
|
+
for (let i = 0; i < maxLength; i++) {
|
|
157
|
+
const numA = partsA[i] || 0;
|
|
158
|
+
const numB = partsB[i] || 0;
|
|
159
|
+
if (numA < numB)
|
|
160
|
+
return -1;
|
|
161
|
+
if (numA > numB)
|
|
162
|
+
return 1;
|
|
163
|
+
}
|
|
164
|
+
return 0;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check for available updates
|
|
168
|
+
*/
|
|
169
|
+
export async function checkForUpdates() {
|
|
170
|
+
const installed = getInstalledVersion();
|
|
171
|
+
const release = await fetchLatestRelease();
|
|
172
|
+
const currentVersion = installed?.version ?? null;
|
|
173
|
+
const latestVersion = release.tag_name.replace(/^v/, '');
|
|
174
|
+
const updateAvailable = currentVersion === null || compareVersions(currentVersion, latestVersion) < 0;
|
|
175
|
+
// Update last check time
|
|
176
|
+
updateLastCheckTime();
|
|
177
|
+
return {
|
|
178
|
+
currentVersion,
|
|
179
|
+
latestVersion,
|
|
180
|
+
updateAvailable,
|
|
181
|
+
releaseInfo: release,
|
|
182
|
+
releaseNotes: release.body || 'No release notes available.'
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Download and execute the install script to perform an update
|
|
187
|
+
*/
|
|
188
|
+
export async function performUpdate(options) {
|
|
189
|
+
const installed = getInstalledVersion();
|
|
190
|
+
const previousVersion = installed?.version ?? null;
|
|
191
|
+
try {
|
|
192
|
+
// Fetch the latest release to get the version
|
|
193
|
+
const release = await fetchLatestRelease();
|
|
194
|
+
const newVersion = release.tag_name.replace(/^v/, '');
|
|
195
|
+
// Download the install script
|
|
196
|
+
const installScriptUrl = `${GITHUB_RAW_URL}/main/scripts/install.sh`;
|
|
197
|
+
const response = await fetch(installScriptUrl);
|
|
198
|
+
if (!response.ok) {
|
|
199
|
+
throw new Error(`Failed to download install script: ${response.status}`);
|
|
200
|
+
}
|
|
201
|
+
const scriptContent = await response.text();
|
|
202
|
+
// Save to a temporary file
|
|
203
|
+
const tempDir = tmpdir();
|
|
204
|
+
const tempScript = join(tempDir, `olympus-update-${Date.now()}.sh`);
|
|
205
|
+
writeFileSync(tempScript, scriptContent, { mode: 0o755 });
|
|
206
|
+
// Execute the install script (platform-aware)
|
|
207
|
+
try {
|
|
208
|
+
const isWindows = process.platform === 'win32';
|
|
209
|
+
if (isWindows) {
|
|
210
|
+
// On Windows, we cannot execute bash scripts directly
|
|
211
|
+
// The install.sh script should be converted to PowerShell or executed via WSL
|
|
212
|
+
// For now, throw an error with instructions
|
|
213
|
+
throw new Error('Automated updates are not yet supported on Windows. ' +
|
|
214
|
+
'Please run the installer manually:\n' +
|
|
215
|
+
' npm install -g olympus\n' +
|
|
216
|
+
'Or visit: https://github.com/mikev10/olympus');
|
|
217
|
+
}
|
|
218
|
+
execSync(`bash "${tempScript}"`, {
|
|
219
|
+
encoding: 'utf-8',
|
|
220
|
+
stdio: options?.verbose ? 'inherit' : 'pipe',
|
|
221
|
+
timeout: 60000 // 1 minute timeout
|
|
222
|
+
});
|
|
223
|
+
// Update version metadata
|
|
224
|
+
saveVersionMetadata({
|
|
225
|
+
version: newVersion,
|
|
226
|
+
installedAt: new Date().toISOString(),
|
|
227
|
+
installMethod: 'script',
|
|
228
|
+
lastCheckAt: new Date().toISOString()
|
|
229
|
+
});
|
|
230
|
+
// Clean up temp file
|
|
231
|
+
try {
|
|
232
|
+
unlinkSync(tempScript);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Ignore cleanup errors
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
success: true,
|
|
239
|
+
previousVersion,
|
|
240
|
+
newVersion,
|
|
241
|
+
message: `Successfully updated from ${previousVersion ?? 'unknown'} to ${newVersion}`
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
// Clean up temp file on error too
|
|
246
|
+
try {
|
|
247
|
+
unlinkSync(tempScript);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// Ignore cleanup errors
|
|
251
|
+
}
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
257
|
+
return {
|
|
258
|
+
success: false,
|
|
259
|
+
previousVersion,
|
|
260
|
+
newVersion: 'unknown',
|
|
261
|
+
message: `Update failed: ${errorMessage}`,
|
|
262
|
+
errors: [errorMessage]
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get a formatted update notification message
|
|
268
|
+
*/
|
|
269
|
+
export function formatUpdateNotification(checkResult) {
|
|
270
|
+
if (!checkResult.updateAvailable) {
|
|
271
|
+
return `Olympus is up to date (v${checkResult.currentVersion ?? 'unknown'})`;
|
|
272
|
+
}
|
|
273
|
+
const lines = [
|
|
274
|
+
'╔═══════════════════════════════════════════════════════════╗',
|
|
275
|
+
'║ Olympus Update Available! ║',
|
|
276
|
+
'╚═══════════════════════════════════════════════════════════╝',
|
|
277
|
+
'',
|
|
278
|
+
` Current version: ${checkResult.currentVersion ?? 'unknown'}`,
|
|
279
|
+
` Latest version: ${checkResult.latestVersion}`,
|
|
280
|
+
'',
|
|
281
|
+
' To update, run: /update',
|
|
282
|
+
' Or run: curl -fsSL https://raw.githubusercontent.com/mikev10/olympus/main/scripts/install.sh | bash',
|
|
283
|
+
''
|
|
284
|
+
];
|
|
285
|
+
// Add truncated release notes if available
|
|
286
|
+
if (checkResult.releaseNotes && checkResult.releaseNotes !== 'No release notes available.') {
|
|
287
|
+
lines.push(' Release notes:');
|
|
288
|
+
const notes = checkResult.releaseNotes.split('\n').slice(0, 5);
|
|
289
|
+
notes.forEach(line => lines.push(` ${line}`));
|
|
290
|
+
if (checkResult.releaseNotes.split('\n').length > 5) {
|
|
291
|
+
lines.push(' ...');
|
|
292
|
+
}
|
|
293
|
+
lines.push('');
|
|
294
|
+
}
|
|
295
|
+
return lines.join('\n');
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Check if enough time has passed since the last update check
|
|
299
|
+
*/
|
|
300
|
+
export function shouldCheckForUpdates(intervalHours = 24) {
|
|
301
|
+
const installed = getInstalledVersion();
|
|
302
|
+
if (!installed?.lastCheckAt) {
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
const lastCheck = new Date(installed.lastCheckAt).getTime();
|
|
306
|
+
const now = Date.now();
|
|
307
|
+
const hoursSinceLastCheck = (now - lastCheck) / (1000 * 60 * 60);
|
|
308
|
+
return hoursSinceLastCheck >= intervalHours;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Perform a background update check (non-blocking)
|
|
312
|
+
*/
|
|
313
|
+
export function backgroundUpdateCheck(callback) {
|
|
314
|
+
if (!shouldCheckForUpdates()) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
// Run the check asynchronously without blocking
|
|
318
|
+
checkForUpdates()
|
|
319
|
+
.then(result => {
|
|
320
|
+
if (callback) {
|
|
321
|
+
callback(result);
|
|
322
|
+
}
|
|
323
|
+
else if (result.updateAvailable) {
|
|
324
|
+
// Default behavior: print notification to console
|
|
325
|
+
console.log('\n' + formatUpdateNotification(result));
|
|
326
|
+
}
|
|
327
|
+
})
|
|
328
|
+
.catch(error => {
|
|
329
|
+
// Silently ignore errors in background checks
|
|
330
|
+
if (process.env.OLYMPUS_DEBUG) {
|
|
331
|
+
console.error('Background update check failed:', error);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* CLI helper: perform interactive update
|
|
337
|
+
*/
|
|
338
|
+
export async function interactiveUpdate() {
|
|
339
|
+
console.log('Checking for updates...');
|
|
340
|
+
try {
|
|
341
|
+
const checkResult = await checkForUpdates();
|
|
342
|
+
if (!checkResult.updateAvailable) {
|
|
343
|
+
console.log(`✓ You are running the latest version (${checkResult.currentVersion})`);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
console.log(formatUpdateNotification(checkResult));
|
|
347
|
+
console.log('Starting update...\n');
|
|
348
|
+
const result = await performUpdate({ verbose: true });
|
|
349
|
+
if (result.success) {
|
|
350
|
+
console.log(`\n✓ ${result.message}`);
|
|
351
|
+
console.log('\nPlease restart your Claude Code session to use the new version.');
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
console.error(`\n✗ ${result.message}`);
|
|
355
|
+
if (result.errors) {
|
|
356
|
+
result.errors.forEach(err => console.error(` - ${err}`));
|
|
357
|
+
}
|
|
358
|
+
process.exit(1);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
console.error('Update check failed:', error instanceof Error ? error.message : error);
|
|
363
|
+
process.exit(1);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
/** State file for tracking silent update status */
|
|
367
|
+
const SILENT_UPDATE_STATE_FILE = join(CLAUDE_CONFIG_DIR, '.olympus-silent-update.json');
|
|
368
|
+
/**
|
|
369
|
+
* Read silent update state
|
|
370
|
+
*/
|
|
371
|
+
function getSilentUpdateState() {
|
|
372
|
+
if (!existsSync(SILENT_UPDATE_STATE_FILE)) {
|
|
373
|
+
return { consecutiveFailures: 0, pendingRestart: false };
|
|
374
|
+
}
|
|
375
|
+
try {
|
|
376
|
+
return JSON.parse(readFileSync(SILENT_UPDATE_STATE_FILE, 'utf-8'));
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
return { consecutiveFailures: 0, pendingRestart: false };
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Save silent update state
|
|
384
|
+
*/
|
|
385
|
+
function saveSilentUpdateState(state) {
|
|
386
|
+
const dir = dirname(SILENT_UPDATE_STATE_FILE);
|
|
387
|
+
if (!existsSync(dir)) {
|
|
388
|
+
mkdirSync(dir, { recursive: true });
|
|
389
|
+
}
|
|
390
|
+
writeFileSync(SILENT_UPDATE_STATE_FILE, JSON.stringify(state, null, 2));
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Log message to silent update log file (if configured)
|
|
394
|
+
*/
|
|
395
|
+
function silentLog(message, logFile) {
|
|
396
|
+
const timestamp = new Date().toISOString();
|
|
397
|
+
const logMessage = `[${timestamp}] ${message}\n`;
|
|
398
|
+
if (logFile) {
|
|
399
|
+
try {
|
|
400
|
+
const dir = dirname(logFile);
|
|
401
|
+
if (!existsSync(dir)) {
|
|
402
|
+
mkdirSync(dir, { recursive: true });
|
|
403
|
+
}
|
|
404
|
+
writeFileSync(logFile, logMessage, { flag: 'a' });
|
|
405
|
+
}
|
|
406
|
+
catch {
|
|
407
|
+
// Silently ignore log errors
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Perform a completely silent update check and installation
|
|
413
|
+
*
|
|
414
|
+
* This function runs without any user interaction or console output.
|
|
415
|
+
* It's designed to be called from hooks or startup scripts to keep
|
|
416
|
+
* the system updated automatically without user awareness.
|
|
417
|
+
*
|
|
418
|
+
* Features:
|
|
419
|
+
* - Rate-limited to prevent excessive checks
|
|
420
|
+
* - Exponential backoff on failures
|
|
421
|
+
* - Optional logging to file for debugging
|
|
422
|
+
* - Tracks pending restart state
|
|
423
|
+
*
|
|
424
|
+
* @param config - Silent update configuration
|
|
425
|
+
* @returns Promise resolving to update result or null if skipped
|
|
426
|
+
*/
|
|
427
|
+
export async function silentAutoUpdate(config = {}) {
|
|
428
|
+
const { checkIntervalHours = 24, autoApply = true, logFile = join(CLAUDE_CONFIG_DIR, '.olympus-update.log'), maxRetries = 3 } = config;
|
|
429
|
+
// SECURITY: Check if silent auto-update is enabled in configuration
|
|
430
|
+
// Default is disabled - users must explicitly opt-in during installation
|
|
431
|
+
if (!isSilentAutoUpdateEnabled()) {
|
|
432
|
+
silentLog('Silent auto-update is disabled (run installer to enable, or use /update)', logFile);
|
|
433
|
+
return null;
|
|
434
|
+
}
|
|
435
|
+
const state = getSilentUpdateState();
|
|
436
|
+
// Check rate limiting
|
|
437
|
+
if (!shouldCheckForUpdates(checkIntervalHours)) {
|
|
438
|
+
return null;
|
|
439
|
+
}
|
|
440
|
+
// Check for consecutive failures and apply exponential backoff
|
|
441
|
+
if (state.consecutiveFailures >= maxRetries) {
|
|
442
|
+
const backoffHours = Math.min(24 * state.consecutiveFailures, 168); // Max 1 week
|
|
443
|
+
const lastAttempt = state.lastAttempt ? new Date(state.lastAttempt).getTime() : 0;
|
|
444
|
+
const hoursSinceLastAttempt = (Date.now() - lastAttempt) / (1000 * 60 * 60);
|
|
445
|
+
if (hoursSinceLastAttempt < backoffHours) {
|
|
446
|
+
silentLog(`Skipping update check (in backoff period: ${backoffHours}h)`, logFile);
|
|
447
|
+
return null;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
silentLog('Starting silent update check...', logFile);
|
|
451
|
+
state.lastAttempt = new Date().toISOString();
|
|
452
|
+
try {
|
|
453
|
+
// Check for updates
|
|
454
|
+
const checkResult = await checkForUpdates();
|
|
455
|
+
if (!checkResult.updateAvailable) {
|
|
456
|
+
silentLog(`No update available (current: ${checkResult.currentVersion})`, logFile);
|
|
457
|
+
state.consecutiveFailures = 0;
|
|
458
|
+
state.pendingRestart = false;
|
|
459
|
+
saveSilentUpdateState(state);
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
silentLog(`Update available: ${checkResult.currentVersion} -> ${checkResult.latestVersion}`, logFile);
|
|
463
|
+
if (!autoApply) {
|
|
464
|
+
silentLog('Auto-apply disabled, skipping installation', logFile);
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
// Perform the update silently
|
|
468
|
+
const result = await performUpdate({
|
|
469
|
+
skipConfirmation: true,
|
|
470
|
+
verbose: false
|
|
471
|
+
});
|
|
472
|
+
if (result.success) {
|
|
473
|
+
silentLog(`Update successful: ${result.previousVersion} -> ${result.newVersion}`, logFile);
|
|
474
|
+
state.consecutiveFailures = 0;
|
|
475
|
+
state.pendingRestart = true;
|
|
476
|
+
state.lastSuccess = new Date().toISOString();
|
|
477
|
+
state.lastVersion = result.newVersion;
|
|
478
|
+
saveSilentUpdateState(state);
|
|
479
|
+
return result;
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
silentLog(`Update failed: ${result.message}`, logFile);
|
|
483
|
+
state.consecutiveFailures++;
|
|
484
|
+
saveSilentUpdateState(state);
|
|
485
|
+
return result;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
catch (error) {
|
|
489
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
490
|
+
silentLog(`Update check error: ${errorMessage}`, logFile);
|
|
491
|
+
state.consecutiveFailures++;
|
|
492
|
+
saveSilentUpdateState(state);
|
|
493
|
+
return {
|
|
494
|
+
success: false,
|
|
495
|
+
previousVersion: null,
|
|
496
|
+
newVersion: 'unknown',
|
|
497
|
+
message: `Silent update failed: ${errorMessage}`,
|
|
498
|
+
errors: [errorMessage]
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Check if there's a pending restart after a silent update
|
|
504
|
+
*/
|
|
505
|
+
export function hasPendingUpdateRestart() {
|
|
506
|
+
const state = getSilentUpdateState();
|
|
507
|
+
return state.pendingRestart;
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Clear the pending restart flag (call after notifying user or restart)
|
|
511
|
+
*/
|
|
512
|
+
export function clearPendingUpdateRestart() {
|
|
513
|
+
const state = getSilentUpdateState();
|
|
514
|
+
state.pendingRestart = false;
|
|
515
|
+
saveSilentUpdateState(state);
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Get the version that was silently updated to (if pending restart)
|
|
519
|
+
*/
|
|
520
|
+
export function getPendingUpdateVersion() {
|
|
521
|
+
const state = getSilentUpdateState();
|
|
522
|
+
return state.pendingRestart ? (state.lastVersion ?? null) : null;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Initialize silent auto-update on startup
|
|
526
|
+
*
|
|
527
|
+
* This is the main entry point for the silent update system.
|
|
528
|
+
* Call this function once when the application starts or from a hook.
|
|
529
|
+
* It runs the update check completely in the background without blocking.
|
|
530
|
+
*
|
|
531
|
+
* @param config - Silent update configuration
|
|
532
|
+
*/
|
|
533
|
+
export function initSilentAutoUpdate(config = {}) {
|
|
534
|
+
// Run update check in background without blocking
|
|
535
|
+
silentAutoUpdate(config).catch(() => {
|
|
536
|
+
// Silently ignore any errors - they're already logged
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
//# sourceMappingURL=auto-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../src/features/auto-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Agent Concurrency Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages concurrency limits for background tasks.
|
|
5
|
+
*
|
|
6
|
+
* Adapted from oh-my-opencode's background-agent feature.
|
|
7
|
+
*/
|
|
8
|
+
import type { BackgroundTaskConfig } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Manages concurrency limits for background tasks.
|
|
11
|
+
* Provides acquire/release semantics with queueing.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ConcurrencyManager {
|
|
14
|
+
private config?;
|
|
15
|
+
private counts;
|
|
16
|
+
private queues;
|
|
17
|
+
constructor(config?: BackgroundTaskConfig);
|
|
18
|
+
/**
|
|
19
|
+
* Get the concurrency limit for a given key (model/agent name)
|
|
20
|
+
*/
|
|
21
|
+
getConcurrencyLimit(key: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* Acquire a slot for the given key.
|
|
24
|
+
* Returns immediately if under limit, otherwise queues the request.
|
|
25
|
+
*/
|
|
26
|
+
acquire(key: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Release a slot for the given key.
|
|
29
|
+
* If there are queued requests, resolves the next one.
|
|
30
|
+
*/
|
|
31
|
+
release(key: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Get current count for a key
|
|
34
|
+
*/
|
|
35
|
+
getCount(key: string): number;
|
|
36
|
+
/**
|
|
37
|
+
* Get queue length for a key
|
|
38
|
+
*/
|
|
39
|
+
getQueueLength(key: string): number;
|
|
40
|
+
/**
|
|
41
|
+
* Check if a key is at capacity
|
|
42
|
+
*/
|
|
43
|
+
isAtCapacity(key: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Get all active keys and their counts
|
|
46
|
+
*/
|
|
47
|
+
getActiveCounts(): Map<string, number>;
|
|
48
|
+
/**
|
|
49
|
+
* Clear all counts and queues
|
|
50
|
+
*/
|
|
51
|
+
clear(): void;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=concurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../../src/features/background-agent/concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAA6C;gBAE/C,MAAM,CAAC,EAAE,oBAAoB;IAIzC;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAwBxC;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzC;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAoB1B;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI7B;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAInC;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAMlC;;OAEG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAItC;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|