@calliopelabs/cli 2.3.0 → 3.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/README.md +45 -644
- package/dist/acp.d.ts +78 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +572 -0
- package/dist/acp.js.map +1 -0
- package/dist/auto-compressor.d.ts.map +1 -1
- package/dist/auto-compressor.js +9 -5
- package/dist/auto-compressor.js.map +1 -1
- package/dist/bin.d.ts +9 -5
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +108 -76
- package/dist/bin.js.map +1 -1
- package/dist/budget.d.ts +64 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +157 -0
- package/dist/budget.js.map +1 -0
- package/dist/checkpoint.d.ts +63 -30
- package/dist/checkpoint.d.ts.map +1 -1
- package/dist/checkpoint.js +249 -150
- package/dist/checkpoint.js.map +1 -1
- package/dist/circuit-breaker/breaker.js.map +1 -1
- package/dist/config.d.ts +86 -81
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +237 -305
- package/dist/config.js.map +1 -1
- package/dist/cost.d.ts +114 -0
- package/dist/cost.d.ts.map +1 -0
- package/dist/cost.js +499 -0
- package/dist/cost.js.map +1 -0
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +53 -11
- package/dist/diff.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +33 -6
- package/dist/errors.js.map +1 -1
- package/dist/files.js.map +1 -1
- package/dist/fleet.d.ts +30 -0
- package/dist/fleet.d.ts.map +1 -0
- package/dist/fleet.js +86 -0
- package/dist/fleet.js.map +1 -0
- package/dist/fuzzy-search.d.ts.map +1 -1
- package/dist/fuzzy-search.js +2 -1
- package/dist/fuzzy-search.js.map +1 -1
- package/dist/git-status.js.map +1 -1
- package/dist/headless.d.ts +1 -2
- package/dist/headless.d.ts.map +1 -1
- package/dist/headless.js +222 -26
- package/dist/headless.js.map +1 -1
- package/dist/hooks.d.ts +8 -2
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +97 -11
- package/dist/hooks.js.map +1 -1
- package/dist/hud/api.d.ts +3 -18
- package/dist/hud/api.d.ts.map +1 -1
- package/dist/hud/api.js +9 -352
- package/dist/hud/api.js.map +1 -1
- package/dist/hud/palettes.d.ts.map +1 -1
- package/dist/hud/palettes.js +0 -180
- package/dist/hud/palettes.js.map +1 -1
- package/dist/hud/skins.d.ts.map +1 -1
- package/dist/hud/skins.js +0 -263
- package/dist/hud/skins.js.map +1 -1
- package/dist/hud/types.d.ts +2 -5
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/iteration-ledger.d.ts.map +1 -1
- package/dist/iteration-ledger.js +3 -2
- package/dist/iteration-ledger.js.map +1 -1
- package/dist/local-model.d.ts +150 -0
- package/dist/local-model.d.ts.map +1 -0
- package/dist/local-model.js +408 -0
- package/dist/local-model.js.map +1 -0
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +32 -10
- package/dist/markdown.js.map +1 -1
- package/dist/mcp.d.ts +35 -5
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +190 -13
- package/dist/mcp.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +6 -4
- package/dist/memory.js.map +1 -1
- package/dist/model-detection.d.ts +14 -1
- package/dist/model-detection.d.ts.map +1 -1
- package/dist/model-detection.js +308 -115
- package/dist/model-detection.js.map +1 -1
- package/dist/parallel-tools.d.ts +9 -1
- package/dist/parallel-tools.d.ts.map +1 -1
- package/dist/parallel-tools.js +6 -5
- package/dist/parallel-tools.js.map +1 -1
- package/dist/plugins.d.ts +68 -0
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +201 -3
- package/dist/plugins.js.map +1 -1
- package/dist/policy.d.ts +43 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +139 -0
- package/dist/policy.js.map +1 -0
- package/dist/project-config.d.ts +1 -2
- package/dist/project-config.d.ts.map +1 -1
- package/dist/project-config.js +0 -3
- package/dist/project-config.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +36 -2
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/bedrock.d.ts.map +1 -1
- package/dist/providers/bedrock.js +83 -22
- package/dist/providers/bedrock.js.map +1 -1
- package/dist/providers/compat.d.ts +21 -0
- package/dist/providers/compat.d.ts.map +1 -1
- package/dist/providers/compat.js +176 -6
- package/dist/providers/compat.js.map +1 -1
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/index.d.ts +19 -4
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +62 -9
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/ollama.d.ts +2 -2
- package/dist/providers/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +26 -6
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +14 -10
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/types.d.ts +8 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +19 -10
- package/dist/providers/types.js.map +1 -1
- package/dist/replay.d.ts +37 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +168 -0
- package/dist/replay.js.map +1 -0
- package/dist/risk.d.ts.map +1 -1
- package/dist/risk.js +15 -5
- package/dist/risk.js.map +1 -1
- package/dist/router.d.ts +133 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/{model-router.js → router.js} +336 -10
- package/dist/router.js.map +1 -0
- package/dist/runlog.d.ts +185 -0
- package/dist/runlog.d.ts.map +1 -0
- package/dist/runlog.js +398 -0
- package/dist/runlog.js.map +1 -0
- package/dist/{sandbox.d.ts → sandbox/docker.d.ts} +1 -1
- package/dist/sandbox/docker.d.ts.map +1 -0
- package/dist/{sandbox.js → sandbox/docker.js} +1 -1
- package/dist/sandbox/docker.js.map +1 -0
- package/dist/sandbox/index.d.ts +36 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +62 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/{sandbox-native.d.ts → sandbox/native.d.ts} +2 -1
- package/dist/sandbox/native.d.ts.map +1 -0
- package/dist/{sandbox-native.js → sandbox/native.js} +38 -6
- package/dist/sandbox/native.js.map +1 -0
- package/dist/scope.d.ts +10 -0
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js +76 -16
- package/dist/scope.js.map +1 -1
- package/dist/scuttlebot/client.d.ts +83 -0
- package/dist/scuttlebot/client.d.ts.map +1 -0
- package/dist/scuttlebot/client.js +350 -0
- package/dist/scuttlebot/client.js.map +1 -0
- package/dist/scuttlebot/config.d.ts +28 -0
- package/dist/scuttlebot/config.d.ts.map +1 -0
- package/dist/scuttlebot/config.js +91 -0
- package/dist/scuttlebot/config.js.map +1 -0
- package/dist/scuttlebot/http-client.d.ts +63 -0
- package/dist/scuttlebot/http-client.d.ts.map +1 -0
- package/dist/scuttlebot/http-client.js +124 -0
- package/dist/scuttlebot/http-client.js.map +1 -0
- package/dist/scuttlebot/index.d.ts +13 -0
- package/dist/scuttlebot/index.d.ts.map +1 -0
- package/dist/scuttlebot/index.js +10 -0
- package/dist/scuttlebot/index.js.map +1 -0
- package/dist/scuttlebot/irc-client.d.ts +124 -0
- package/dist/scuttlebot/irc-client.d.ts.map +1 -0
- package/dist/scuttlebot/irc-client.js +599 -0
- package/dist/scuttlebot/irc-client.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +22 -54
- package/dist/setup.js.map +1 -1
- package/dist/skills.d.ts +58 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +186 -16
- package/dist/skills.js.map +1 -1
- package/dist/storage.d.ts +0 -4
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +87 -8
- package/dist/storage.js.map +1 -1
- package/dist/streaming.d.ts +25 -0
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +59 -0
- package/dist/streaming.js.map +1 -1
- package/dist/styles.d.ts +6 -0
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +11 -0
- package/dist/styles.js.map +1 -1
- package/dist/summarization.js.map +1 -1
- package/dist/terminal-image.js +1 -1
- package/dist/terminal-image.js.map +1 -1
- package/dist/themes.d.ts +5 -4
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +35 -90
- package/dist/themes.js.map +1 -1
- package/dist/tools.d.ts +27 -3
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +352 -209
- package/dist/tools.js.map +1 -1
- package/dist/trust.d.ts +16 -3
- package/dist/trust.d.ts.map +1 -1
- package/dist/trust.js +23 -4
- package/dist/trust.js.map +1 -1
- package/dist/types.d.ts +4 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +34 -44
- package/dist/types.js.map +1 -1
- package/dist/ui/agent.d.ts +4 -7
- package/dist/ui/agent.d.ts.map +1 -1
- package/dist/ui/agent.js +354 -73
- package/dist/ui/agent.js.map +1 -1
- package/dist/ui/animations.d.ts +37 -0
- package/dist/ui/animations.d.ts.map +1 -0
- package/dist/ui/animations.js +227 -0
- package/dist/ui/animations.js.map +1 -0
- package/dist/ui/chat-input-keys.d.ts +42 -0
- package/dist/ui/chat-input-keys.d.ts.map +1 -0
- package/dist/ui/chat-input-keys.js +360 -0
- package/dist/ui/chat-input-keys.js.map +1 -0
- package/dist/ui/chat-input.d.ts +5 -2
- package/dist/ui/chat-input.d.ts.map +1 -1
- package/dist/ui/chat-input.js +54 -308
- package/dist/ui/chat-input.js.map +1 -1
- package/dist/ui/commands.d.ts +15 -45
- package/dist/ui/commands.d.ts.map +1 -1
- package/dist/ui/commands.js +461 -2636
- package/dist/ui/commands.js.map +1 -1
- package/dist/ui/completions.d.ts +1 -0
- package/dist/ui/completions.d.ts.map +1 -1
- package/dist/ui/completions.js +36 -107
- package/dist/ui/completions.js.map +1 -1
- package/dist/ui/components.d.ts +14 -6
- package/dist/ui/components.d.ts.map +1 -1
- package/dist/ui/components.js +17 -226
- package/dist/ui/components.js.map +1 -1
- package/dist/ui/context.js +6 -6
- package/dist/ui/context.js.map +1 -1
- package/dist/ui/debug-log.d.ts +11 -0
- package/dist/ui/debug-log.d.ts.map +1 -0
- package/dist/ui/debug-log.js +21 -0
- package/dist/ui/debug-log.js.map +1 -0
- package/dist/ui/error-boundary.d.ts.map +1 -1
- package/dist/ui/error-boundary.js.map +1 -1
- package/dist/ui/frame.d.ts.map +1 -1
- package/dist/ui/frame.js +1 -3
- package/dist/ui/frame.js.map +1 -1
- package/dist/ui/index.d.ts +11 -3
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +46 -887
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/input-utils.d.ts +20 -0
- package/dist/ui/input-utils.d.ts.map +1 -0
- package/dist/ui/input-utils.js +35 -0
- package/dist/ui/input-utils.js.map +1 -0
- package/dist/ui/messages.d.ts +8 -7
- package/dist/ui/messages.d.ts.map +1 -1
- package/dist/ui/messages.js +51 -35
- package/dist/ui/messages.js.map +1 -1
- package/dist/ui/modals/index.d.ts +11 -0
- package/dist/ui/modals/index.d.ts.map +1 -0
- package/dist/ui/modals/index.js +10 -0
- package/dist/ui/modals/index.js.map +1 -0
- package/dist/ui/{modals.d.ts → modals/prompts.d.ts} +5 -20
- package/dist/ui/modals/prompts.d.ts.map +1 -0
- package/dist/ui/{modals.js → modals/prompts.js} +14 -94
- package/dist/ui/modals/prompts.js.map +1 -0
- package/dist/ui/modals/selectors.d.ts +33 -0
- package/dist/ui/modals/selectors.d.ts.map +1 -0
- package/dist/ui/modals/selectors.js +111 -0
- package/dist/ui/modals/selectors.js.map +1 -0
- package/dist/ui/modals/setup.d.ts +17 -0
- package/dist/ui/modals/setup.d.ts.map +1 -0
- package/dist/ui/modals/setup.js +51 -0
- package/dist/ui/modals/setup.js.map +1 -0
- package/dist/ui/regions/input-region.d.ts +40 -0
- package/dist/ui/regions/input-region.d.ts.map +1 -0
- package/dist/ui/regions/input-region.js +116 -0
- package/dist/ui/regions/input-region.js.map +1 -0
- package/dist/ui/regions/modal-host.d.ts +41 -0
- package/dist/ui/regions/modal-host.d.ts.map +1 -0
- package/dist/ui/regions/modal-host.js +51 -0
- package/dist/ui/regions/modal-host.js.map +1 -0
- package/dist/ui/regions/render-probe.d.ts +22 -0
- package/dist/ui/regions/render-probe.d.ts.map +1 -0
- package/dist/ui/regions/render-probe.js +45 -0
- package/dist/ui/regions/render-probe.js.map +1 -0
- package/dist/ui/regions/static-scrollback.d.ts +39 -0
- package/dist/ui/regions/static-scrollback.d.ts.map +1 -0
- package/dist/ui/regions/static-scrollback.js +68 -0
- package/dist/ui/regions/static-scrollback.js.map +1 -0
- package/dist/ui/regions/status-region.d.ts +24 -0
- package/dist/ui/regions/status-region.d.ts.map +1 -0
- package/dist/ui/regions/status-region.js +17 -0
- package/dist/ui/regions/status-region.js.map +1 -0
- package/dist/ui/regions/transcript-region.d.ts +41 -0
- package/dist/ui/regions/transcript-region.d.ts.map +1 -0
- package/dist/ui/regions/transcript-region.js +52 -0
- package/dist/ui/regions/transcript-region.js.map +1 -0
- package/dist/ui/self-restart.d.ts +9 -0
- package/dist/ui/self-restart.d.ts.map +1 -0
- package/dist/ui/self-restart.js +24 -0
- package/dist/ui/self-restart.js.map +1 -0
- package/dist/ui/state/use-chat-controller.d.ts +23 -0
- package/dist/ui/state/use-chat-controller.d.ts.map +1 -0
- package/dist/ui/state/use-chat-controller.js +643 -0
- package/dist/ui/state/use-chat-controller.js.map +1 -0
- package/dist/ui/state/use-loop-state.d.ts +23 -0
- package/dist/ui/state/use-loop-state.d.ts.map +1 -0
- package/dist/ui/state/use-loop-state.js +39 -0
- package/dist/ui/state/use-loop-state.js.map +1 -0
- package/dist/ui/state/use-modal-state.d.ts +52 -0
- package/dist/ui/state/use-modal-state.d.ts.map +1 -0
- package/dist/ui/state/use-modal-state.js +44 -0
- package/dist/ui/state/use-modal-state.js.map +1 -0
- package/dist/ui/state/use-model-state.d.ts +29 -0
- package/dist/ui/state/use-model-state.d.ts.map +1 -0
- package/dist/ui/state/use-model-state.js +47 -0
- package/dist/ui/state/use-model-state.js.map +1 -0
- package/dist/ui/state/use-processing-state.d.ts +24 -0
- package/dist/ui/state/use-processing-state.d.ts.map +1 -0
- package/dist/ui/state/use-processing-state.js +46 -0
- package/dist/ui/state/use-processing-state.js.map +1 -0
- package/dist/ui/state/use-queue-state.d.ts +19 -0
- package/dist/ui/state/use-queue-state.d.ts.map +1 -0
- package/dist/ui/state/use-queue-state.js +30 -0
- package/dist/ui/state/use-queue-state.js.map +1 -0
- package/dist/ui/state/use-session-init.d.ts +22 -0
- package/dist/ui/state/use-session-init.d.ts.map +1 -0
- package/dist/ui/state/use-session-init.js +77 -0
- package/dist/ui/state/use-session-init.js.map +1 -0
- package/dist/ui/state/use-session-stats.d.ts +16 -0
- package/dist/ui/state/use-session-stats.d.ts.map +1 -0
- package/dist/ui/state/use-session-stats.js +18 -0
- package/dist/ui/state/use-session-stats.js.map +1 -0
- package/dist/ui/state/use-terminal-width.d.ts +8 -0
- package/dist/ui/state/use-terminal-width.d.ts.map +1 -0
- package/dist/ui/state/use-terminal-width.js +22 -0
- package/dist/ui/state/use-terminal-width.js.map +1 -0
- package/dist/ui/state/use-transcript-state.d.ts +21 -0
- package/dist/ui/state/use-transcript-state.d.ts.map +1 -0
- package/dist/ui/state/use-transcript-state.js +49 -0
- package/dist/ui/state/use-transcript-state.js.map +1 -0
- package/dist/ui/status-bar.d.ts +4 -1
- package/dist/ui/status-bar.d.ts.map +1 -1
- package/dist/ui/status-bar.js +13 -3
- package/dist/ui/status-bar.js.map +1 -1
- package/dist/ui/types.d.ts +3 -0
- package/dist/ui/types.d.ts.map +1 -1
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +10 -0
- package/dist/version-check.js.map +1 -1
- package/package.json +12 -8
- package/dist/agents/agent-config-loader.d.ts +0 -60
- package/dist/agents/agent-config-loader.d.ts.map +0 -1
- package/dist/agents/agent-config-loader.js +0 -402
- package/dist/agents/agent-config-loader.js.map +0 -1
- package/dist/agents/agent-config-presets.d.ts +0 -10
- package/dist/agents/agent-config-presets.d.ts.map +0 -1
- package/dist/agents/agent-config-presets.js +0 -940
- package/dist/agents/agent-config-presets.js.map +0 -1
- package/dist/agents/agent-config-types.d.ts +0 -145
- package/dist/agents/agent-config-types.d.ts.map +0 -1
- package/dist/agents/agent-config-types.js +0 -12
- package/dist/agents/agent-config-types.js.map +0 -1
- package/dist/agents/agent-detection.d.ts +0 -35
- package/dist/agents/agent-detection.d.ts.map +0 -1
- package/dist/agents/agent-detection.js +0 -110
- package/dist/agents/agent-detection.js.map +0 -1
- package/dist/agents/aggregator.d.ts +0 -19
- package/dist/agents/aggregator.d.ts.map +0 -1
- package/dist/agents/aggregator.js +0 -141
- package/dist/agents/aggregator.js.map +0 -1
- package/dist/agents/cli-backend.d.ts +0 -32
- package/dist/agents/cli-backend.d.ts.map +0 -1
- package/dist/agents/cli-backend.js +0 -271
- package/dist/agents/cli-backend.js.map +0 -1
- package/dist/agents/council-types.d.ts +0 -115
- package/dist/agents/council-types.d.ts.map +0 -1
- package/dist/agents/council-types.js +0 -81
- package/dist/agents/council-types.js.map +0 -1
- package/dist/agents/council.d.ts +0 -112
- package/dist/agents/council.d.ts.map +0 -1
- package/dist/agents/council.js +0 -722
- package/dist/agents/council.js.map +0 -1
- package/dist/agents/decomposer.d.ts +0 -33
- package/dist/agents/decomposer.d.ts.map +0 -1
- package/dist/agents/decomposer.js +0 -138
- package/dist/agents/decomposer.js.map +0 -1
- package/dist/agents/dynamic-tools.d.ts +0 -52
- package/dist/agents/dynamic-tools.d.ts.map +0 -1
- package/dist/agents/dynamic-tools.js +0 -395
- package/dist/agents/dynamic-tools.js.map +0 -1
- package/dist/agents/index.d.ts +0 -29
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js +0 -29
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/installer.d.ts +0 -39
- package/dist/agents/installer.d.ts.map +0 -1
- package/dist/agents/installer.js +0 -205
- package/dist/agents/installer.js.map +0 -1
- package/dist/agents/orchestrator.d.ts +0 -106
- package/dist/agents/orchestrator.d.ts.map +0 -1
- package/dist/agents/orchestrator.js +0 -363
- package/dist/agents/orchestrator.js.map +0 -1
- package/dist/agents/sdk-backend.d.ts +0 -63
- package/dist/agents/sdk-backend.d.ts.map +0 -1
- package/dist/agents/sdk-backend.js +0 -489
- package/dist/agents/sdk-backend.js.map +0 -1
- package/dist/agents/swarm-types.d.ts +0 -84
- package/dist/agents/swarm-types.d.ts.map +0 -1
- package/dist/agents/swarm-types.js +0 -20
- package/dist/agents/swarm-types.js.map +0 -1
- package/dist/agents/swarm.d.ts +0 -79
- package/dist/agents/swarm.d.ts.map +0 -1
- package/dist/agents/swarm.js +0 -375
- package/dist/agents/swarm.js.map +0 -1
- package/dist/agents/tools.d.ts +0 -26
- package/dist/agents/tools.d.ts.map +0 -1
- package/dist/agents/tools.js +0 -776
- package/dist/agents/tools.js.map +0 -1
- package/dist/agents/types.d.ts +0 -108
- package/dist/agents/types.d.ts.map +0 -1
- package/dist/agents/types.js +0 -43
- package/dist/agents/types.js.map +0 -1
- package/dist/api-server.d.ts +0 -36
- package/dist/api-server.d.ts.map +0 -1
- package/dist/api-server.js +0 -255
- package/dist/api-server.js.map +0 -1
- package/dist/auto-checkpoint.d.ts +0 -35
- package/dist/auto-checkpoint.d.ts.map +0 -1
- package/dist/auto-checkpoint.js +0 -143
- package/dist/auto-checkpoint.js.map +0 -1
- package/dist/background-jobs.d.ts +0 -45
- package/dist/background-jobs.d.ts.map +0 -1
- package/dist/background-jobs.js +0 -127
- package/dist/background-jobs.js.map +0 -1
- package/dist/branching.d.ts +0 -56
- package/dist/branching.d.ts.map +0 -1
- package/dist/branching.js +0 -211
- package/dist/branching.js.map +0 -1
- package/dist/cli/agent.d.ts +0 -9
- package/dist/cli/agent.d.ts.map +0 -1
- package/dist/cli/agent.js +0 -314
- package/dist/cli/agent.js.map +0 -1
- package/dist/cli/commands.d.ts +0 -12
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -943
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/index.d.ts +0 -8
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -237
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/types.d.ts +0 -33
- package/dist/cli/types.d.ts.map +0 -1
- package/dist/cli/types.js +0 -21
- package/dist/cli/types.js.map +0 -1
- package/dist/companions.d.ts +0 -54
- package/dist/companions.d.ts.map +0 -1
- package/dist/companions.js +0 -440
- package/dist/companions.js.map +0 -1
- package/dist/completion.d.ts +0 -75
- package/dist/completion.d.ts.map +0 -1
- package/dist/completion.js +0 -234
- package/dist/completion.js.map +0 -1
- package/dist/file-watcher.d.ts +0 -91
- package/dist/file-watcher.d.ts.map +0 -1
- package/dist/file-watcher.js +0 -269
- package/dist/file-watcher.js.map +0 -1
- package/dist/hud/theme-packs/api.d.ts +0 -51
- package/dist/hud/theme-packs/api.d.ts.map +0 -1
- package/dist/hud/theme-packs/api.js +0 -145
- package/dist/hud/theme-packs/api.js.map +0 -1
- package/dist/hud/theme-packs/index.d.ts +0 -18
- package/dist/hud/theme-packs/index.d.ts.map +0 -1
- package/dist/hud/theme-packs/index.js +0 -38
- package/dist/hud/theme-packs/index.js.map +0 -1
- package/dist/hud/theme-packs/types.d.ts +0 -29
- package/dist/hud/theme-packs/types.d.ts.map +0 -1
- package/dist/hud/theme-packs/types.js +0 -9
- package/dist/hud/theme-packs/types.js.map +0 -1
- package/dist/idle-eviction.d.ts +0 -34
- package/dist/idle-eviction.d.ts.map +0 -1
- package/dist/idle-eviction.js +0 -78
- package/dist/idle-eviction.js.map +0 -1
- package/dist/keyboard.d.ts +0 -57
- package/dist/keyboard.d.ts.map +0 -1
- package/dist/keyboard.js +0 -265
- package/dist/keyboard.js.map +0 -1
- package/dist/model-router.d.ts +0 -67
- package/dist/model-router.d.ts.map +0 -1
- package/dist/model-router.js.map +0 -1
- package/dist/providers/openai-compat-shims.d.ts +0 -31
- package/dist/providers/openai-compat-shims.d.ts.map +0 -1
- package/dist/providers/openai-compat-shims.js +0 -179
- package/dist/providers/openai-compat-shims.js.map +0 -1
- package/dist/sandbox-native.d.ts.map +0 -1
- package/dist/sandbox-native.js.map +0 -1
- package/dist/sandbox.d.ts.map +0 -1
- package/dist/sandbox.js.map +0 -1
- package/dist/session-timeout.d.ts +0 -31
- package/dist/session-timeout.d.ts.map +0 -1
- package/dist/session-timeout.js +0 -100
- package/dist/session-timeout.js.map +0 -1
- package/dist/smart-router.d.ts +0 -73
- package/dist/smart-router.d.ts.map +0 -1
- package/dist/smart-router.js +0 -332
- package/dist/smart-router.js.map +0 -1
- package/dist/terminal-recording.d.ts +0 -55
- package/dist/terminal-recording.d.ts.map +0 -1
- package/dist/terminal-recording.js +0 -182
- package/dist/terminal-recording.js.map +0 -1
- package/dist/tmux.d.ts +0 -35
- package/dist/tmux.d.ts.map +0 -1
- package/dist/tmux.js +0 -106
- package/dist/tmux.js.map +0 -1
- package/dist/ui/modals.d.ts.map +0 -1
- package/dist/ui/modals.js.map +0 -1
- package/dist/ui/pack-picker.d.ts +0 -12
- package/dist/ui/pack-picker.d.ts.map +0 -1
- package/dist/ui/pack-picker.js +0 -101
- package/dist/ui/pack-picker.js.map +0 -1
- package/dist/ui/theme-picker.d.ts +0 -24
- package/dist/ui/theme-picker.d.ts.map +0 -1
- package/dist/ui/theme-picker.js +0 -190
- package/dist/ui/theme-picker.js.map +0 -1
package/dist/agents/installer.js
DELETED
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calliope Agents — Agent & SDK Installer
|
|
3
|
-
*
|
|
4
|
-
* Detects missing agent CLIs and SDK backends, provides install commands,
|
|
5
|
-
* and can run installations directly.
|
|
6
|
-
*/
|
|
7
|
-
import { execFileSync, execSync } from 'child_process';
|
|
8
|
-
import { detectAgents } from './agent-detection.js';
|
|
9
|
-
import { isClaudeSdkAvailable, isOpenaiSdkAvailable, isGoogleAdkAvailable } from './sdk-backend.js';
|
|
10
|
-
/**
|
|
11
|
-
* CLI agent install commands
|
|
12
|
-
*/
|
|
13
|
-
const CLI_AGENTS = {
|
|
14
|
-
calliope: {
|
|
15
|
-
description: 'Calliope CLI — multi-model AI agent (self)',
|
|
16
|
-
install: 'npm install -g @calliopelabs/cli',
|
|
17
|
-
check: 'calliope',
|
|
18
|
-
},
|
|
19
|
-
claude: {
|
|
20
|
-
description: 'Claude Code CLI — Anthropic coding agent',
|
|
21
|
-
install: 'npm install -g @anthropic-ai/claude-code',
|
|
22
|
-
altInstall: 'brew install --cask claude-code',
|
|
23
|
-
check: 'claude',
|
|
24
|
-
},
|
|
25
|
-
gemini: {
|
|
26
|
-
description: 'Gemini CLI — Google AI coding agent',
|
|
27
|
-
install: 'npm install -g @google/gemini-cli',
|
|
28
|
-
check: 'gemini',
|
|
29
|
-
},
|
|
30
|
-
codex: {
|
|
31
|
-
description: 'Codex CLI — OpenAI coding agent',
|
|
32
|
-
install: 'npm install -g @openai/codex',
|
|
33
|
-
altInstall: 'brew install --cask codex',
|
|
34
|
-
check: 'codex',
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* SDK backend install commands
|
|
39
|
-
*/
|
|
40
|
-
const SDK_BACKENDS = {
|
|
41
|
-
'claude-sdk': {
|
|
42
|
-
description: 'Claude Agent SDK — in-process Claude agent (supports Anthropic, Bedrock, Vertex)',
|
|
43
|
-
install: 'npm install -g @anthropic-ai/claude-agent-sdk',
|
|
44
|
-
},
|
|
45
|
-
'openai-sdk': {
|
|
46
|
-
description: 'OpenAI Agents JS — in-process agent framework (supports OpenAI, Azure, Ollama, OpenRouter, Groq, etc.)',
|
|
47
|
-
install: 'npm install -g @openai/agents',
|
|
48
|
-
},
|
|
49
|
-
'google-adk': {
|
|
50
|
-
description: 'Google ADK — in-process agent framework (supports Gemini, Vertex AI)',
|
|
51
|
-
install: 'npm install -g @google/adk',
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
// ============================================================================
|
|
55
|
-
// Detection
|
|
56
|
-
// ============================================================================
|
|
57
|
-
function commandExists(command) {
|
|
58
|
-
try {
|
|
59
|
-
execFileSync('which', [command], { stdio: 'ignore' });
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Get full status of all installable items
|
|
68
|
-
*/
|
|
69
|
-
export async function getInstallableItems() {
|
|
70
|
-
const items = [];
|
|
71
|
-
// CLI agents
|
|
72
|
-
const agents = detectAgents();
|
|
73
|
-
for (const agent of agents) {
|
|
74
|
-
const cliInfo = CLI_AGENTS[agent.type];
|
|
75
|
-
if (!cliInfo)
|
|
76
|
-
continue;
|
|
77
|
-
const cliInstalled = commandExists(agent.command);
|
|
78
|
-
items.push({
|
|
79
|
-
name: agent.type,
|
|
80
|
-
description: cliInfo.description,
|
|
81
|
-
category: 'cli',
|
|
82
|
-
installCommand: cliInfo.install,
|
|
83
|
-
checkCommand: agent.command,
|
|
84
|
-
installed: cliInstalled,
|
|
85
|
-
reason: cliInstalled ? undefined : `${agent.command} not found in PATH`,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
// SDK backends
|
|
89
|
-
const claudeSdk = await isClaudeSdkAvailable();
|
|
90
|
-
items.push({
|
|
91
|
-
name: 'claude-sdk',
|
|
92
|
-
description: SDK_BACKENDS['claude-sdk'].description,
|
|
93
|
-
category: 'sdk',
|
|
94
|
-
installCommand: SDK_BACKENDS['claude-sdk'].install,
|
|
95
|
-
installed: claudeSdk,
|
|
96
|
-
reason: claudeSdk ? undefined : 'Package not installed',
|
|
97
|
-
});
|
|
98
|
-
const openaiSdk = await isOpenaiSdkAvailable();
|
|
99
|
-
items.push({
|
|
100
|
-
name: 'openai-sdk',
|
|
101
|
-
description: SDK_BACKENDS['openai-sdk'].description,
|
|
102
|
-
category: 'sdk',
|
|
103
|
-
installCommand: SDK_BACKENDS['openai-sdk'].install,
|
|
104
|
-
installed: openaiSdk,
|
|
105
|
-
reason: openaiSdk ? undefined : 'Package not installed',
|
|
106
|
-
});
|
|
107
|
-
const googleAdk = await isGoogleAdkAvailable();
|
|
108
|
-
items.push({
|
|
109
|
-
name: 'google-adk',
|
|
110
|
-
description: SDK_BACKENDS['google-adk'].description,
|
|
111
|
-
category: 'sdk',
|
|
112
|
-
installCommand: SDK_BACKENDS['google-adk'].install,
|
|
113
|
-
installed: googleAdk,
|
|
114
|
-
reason: googleAdk ? undefined : 'Package not installed',
|
|
115
|
-
});
|
|
116
|
-
return items;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Format install status report for display
|
|
120
|
-
*/
|
|
121
|
-
export async function getInstallReport() {
|
|
122
|
-
const items = await getInstallableItems();
|
|
123
|
-
const cliItems = items.filter(i => i.category === 'cli');
|
|
124
|
-
const sdkItems = items.filter(i => i.category === 'sdk');
|
|
125
|
-
const lines = [];
|
|
126
|
-
lines.push('Agent CLIs:');
|
|
127
|
-
for (const item of cliItems) {
|
|
128
|
-
const status = item.installed ? ' ✓' : ' ✗';
|
|
129
|
-
const label = item.installed ? 'installed' : 'not installed';
|
|
130
|
-
lines.push(`${status} ${item.name} — ${label}`);
|
|
131
|
-
if (!item.installed) {
|
|
132
|
-
lines.push(` Install: ${item.installCommand}`);
|
|
133
|
-
const cliDef = CLI_AGENTS[item.name];
|
|
134
|
-
if (cliDef?.altInstall) {
|
|
135
|
-
lines.push(` or: ${cliDef.altInstall}`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
lines.push('');
|
|
140
|
-
lines.push('SDK Backends (optional, for in-process execution):');
|
|
141
|
-
for (const item of sdkItems) {
|
|
142
|
-
const status = item.installed ? ' ✓' : ' ✗';
|
|
143
|
-
const label = item.installed ? 'installed' : 'not installed';
|
|
144
|
-
lines.push(`${status} ${item.name} — ${label}`);
|
|
145
|
-
if (!item.installed) {
|
|
146
|
-
lines.push(` ${item.description}`);
|
|
147
|
-
lines.push(` Install: ${item.installCommand}`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
const missing = items.filter(i => !i.installed);
|
|
151
|
-
if (missing.length === 0) {
|
|
152
|
-
lines.push('');
|
|
153
|
-
lines.push('All agents and SDK backends are installed!');
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
lines.push('');
|
|
157
|
-
lines.push(`Install all missing: ${missing.map(i => i.installCommand).join(' && ')}`);
|
|
158
|
-
}
|
|
159
|
-
return lines.join('\n');
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Install a specific item by name
|
|
163
|
-
* Returns { success, output } with install result
|
|
164
|
-
*/
|
|
165
|
-
export function installItem(name) {
|
|
166
|
-
// Find the install command
|
|
167
|
-
const cliInfo = CLI_AGENTS[name];
|
|
168
|
-
const sdkInfo = SDK_BACKENDS[name];
|
|
169
|
-
const installCmd = cliInfo?.install || sdkInfo?.install;
|
|
170
|
-
if (!installCmd) {
|
|
171
|
-
return { success: false, output: `Unknown item: ${name}. Available: ${[...Object.keys(CLI_AGENTS), ...Object.keys(SDK_BACKENDS)].join(', ')}` };
|
|
172
|
-
}
|
|
173
|
-
try {
|
|
174
|
-
const output = execSync(installCmd, {
|
|
175
|
-
encoding: 'utf-8',
|
|
176
|
-
timeout: 120_000, // 2 minute timeout
|
|
177
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
178
|
-
});
|
|
179
|
-
return { success: true, output: output.trim() || `${name} installed successfully.` };
|
|
180
|
-
}
|
|
181
|
-
catch (error) {
|
|
182
|
-
const msg = error instanceof Error ? error.stderr || error.message : String(error);
|
|
183
|
-
return { success: false, output: `Failed to install ${name}: ${msg}` };
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Install all missing items
|
|
188
|
-
*/
|
|
189
|
-
export async function installAllMissing() {
|
|
190
|
-
const items = await getInstallableItems();
|
|
191
|
-
const missing = items.filter(i => !i.installed);
|
|
192
|
-
const installed = [];
|
|
193
|
-
const failed = [];
|
|
194
|
-
for (const item of missing) {
|
|
195
|
-
const result = installItem(item.name);
|
|
196
|
-
if (result.success) {
|
|
197
|
-
installed.push(item.name);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
failed.push(`${item.name}: ${result.output}`);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return { installed, failed };
|
|
204
|
-
}
|
|
205
|
-
//# sourceMappingURL=installer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/agents/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calliope Agents — Orchestrator
|
|
3
|
-
*
|
|
4
|
-
* Task queue management with depth limiting and priority ordering.
|
|
5
|
-
*/
|
|
6
|
-
import type { SubAgentTask, SubAgentType, TaskPriority, TaskExecutor, OrchestratorConfig } from './types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Agent Orchestrator
|
|
9
|
-
*
|
|
10
|
-
* Manages task queue, depth limiting, and sub-agent execution.
|
|
11
|
-
*/
|
|
12
|
-
declare class AgentOrchestrator {
|
|
13
|
-
private config;
|
|
14
|
-
private tasks;
|
|
15
|
-
private taskQueue;
|
|
16
|
-
private runningTasks;
|
|
17
|
-
private currentCwd;
|
|
18
|
-
constructor(config?: Partial<OrchestratorConfig>);
|
|
19
|
-
/**
|
|
20
|
-
* Update configuration
|
|
21
|
-
*/
|
|
22
|
-
updateConfig(config: Partial<OrchestratorConfig>): void;
|
|
23
|
-
/**
|
|
24
|
-
* Set the working directory for task execution
|
|
25
|
-
*/
|
|
26
|
-
setCwd(cwd: string): void;
|
|
27
|
-
/**
|
|
28
|
-
* Spawn a sub-agent task
|
|
29
|
-
*/
|
|
30
|
-
spawnAgent(prompt: string, agent: SubAgentType, options?: {
|
|
31
|
-
parentId?: string;
|
|
32
|
-
priority?: TaskPriority;
|
|
33
|
-
background?: boolean;
|
|
34
|
-
cwd?: string;
|
|
35
|
-
model?: string;
|
|
36
|
-
provider?: string;
|
|
37
|
-
executor?: TaskExecutor;
|
|
38
|
-
systemPrompt?: string;
|
|
39
|
-
timeout?: number;
|
|
40
|
-
}): Promise<SubAgentTask>;
|
|
41
|
-
/**
|
|
42
|
-
* Get a task by ID
|
|
43
|
-
*/
|
|
44
|
-
getTask(taskId: string): SubAgentTask | undefined;
|
|
45
|
-
/**
|
|
46
|
-
* Wait for a task to reach a final state.
|
|
47
|
-
*/
|
|
48
|
-
waitForTask(taskId: string, options?: {
|
|
49
|
-
pollIntervalMs?: number;
|
|
50
|
-
timeoutMs?: number;
|
|
51
|
-
}): Promise<SubAgentTask>;
|
|
52
|
-
/**
|
|
53
|
-
* Get all tasks
|
|
54
|
-
*/
|
|
55
|
-
getAllTasks(): SubAgentTask[];
|
|
56
|
-
/**
|
|
57
|
-
* Get tasks by status
|
|
58
|
-
*/
|
|
59
|
-
getTasksByStatus(status: SubAgentTask['status']): SubAgentTask[];
|
|
60
|
-
/**
|
|
61
|
-
* Get task tree (task and all descendants)
|
|
62
|
-
*/
|
|
63
|
-
getTaskTree(taskId: string): SubAgentTask[];
|
|
64
|
-
/**
|
|
65
|
-
* Cancel a task and its children
|
|
66
|
-
*/
|
|
67
|
-
cancelTask(taskId: string): Promise<void>;
|
|
68
|
-
/**
|
|
69
|
-
* Get orchestrator statistics
|
|
70
|
-
*/
|
|
71
|
-
getStats(): {
|
|
72
|
-
totalTasks: number;
|
|
73
|
-
queuedTasks: number;
|
|
74
|
-
runningTasks: number;
|
|
75
|
-
completedTasks: number;
|
|
76
|
-
failedTasks: number;
|
|
77
|
-
cancelledTasks: number;
|
|
78
|
-
maxDepthUsed: number;
|
|
79
|
-
};
|
|
80
|
-
/**
|
|
81
|
-
* Cleanup old completed tasks
|
|
82
|
-
*/
|
|
83
|
-
cleanup(maxAgeMs?: number): number;
|
|
84
|
-
/**
|
|
85
|
-
* Reset orchestrator state
|
|
86
|
-
*/
|
|
87
|
-
reset(): void;
|
|
88
|
-
/**
|
|
89
|
-
* Insert task into queue based on priority
|
|
90
|
-
*/
|
|
91
|
-
private insertIntoQueue;
|
|
92
|
-
/**
|
|
93
|
-
* Process the task queue
|
|
94
|
-
*/
|
|
95
|
-
private processQueue;
|
|
96
|
-
/**
|
|
97
|
-
* Run a single task
|
|
98
|
-
*/
|
|
99
|
-
private runTask;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Singleton orchestrator instance
|
|
103
|
-
*/
|
|
104
|
-
export declare const orchestrator: AgentOrchestrator;
|
|
105
|
-
export {};
|
|
106
|
-
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/agents/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,kBAAkB,EACnB,MAAM,YAAY,CAAC;AA4BpB;;;;GAIG;AACH,cAAM,iBAAiB;IACrB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAyB;gBAE/B,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAIpD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAIvD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,GACL,OAAO,CAAC,YAAY,CAAC;IAiGxB;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,YAAY,CAAC;IAuBxB;;OAEG;IACH,WAAW,IAAI,YAAY,EAAE;IAI7B;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,YAAY,EAAE;IAIhE;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE;IAW3C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B/C;;OAEG;IACH,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;KACtB;IAaD;;OAEG;IACH,OAAO,CAAC,QAAQ,GAAE,MAAuB,GAAG,MAAM;IAmClD;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;YACW,YAAY;IAmB1B;;OAEG;YACW,OAAO;CAsDtB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,mBAA0B,CAAC"}
|
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calliope Agents — Orchestrator
|
|
3
|
-
*
|
|
4
|
-
* Task queue management with depth limiting and priority ordering.
|
|
5
|
-
*/
|
|
6
|
-
import { randomUUID } from 'crypto';
|
|
7
|
-
import { DEFAULT_ORCHESTRATOR_CONFIG } from './types.js';
|
|
8
|
-
import { executeAgent, cancelTask as cancelBackendTask } from './cli-backend.js';
|
|
9
|
-
import { executeSdkAgent } from './sdk-backend.js';
|
|
10
|
-
import { isAgentAvailable } from './agent-detection.js';
|
|
11
|
-
/**
|
|
12
|
-
* Priority values for queue ordering
|
|
13
|
-
*/
|
|
14
|
-
const PRIORITY_ORDER = {
|
|
15
|
-
critical: 4,
|
|
16
|
-
high: 3,
|
|
17
|
-
normal: 2,
|
|
18
|
-
low: 1,
|
|
19
|
-
};
|
|
20
|
-
const FINAL_TASK_STATUSES = new Set(['completed', 'failed', 'cancelled']);
|
|
21
|
-
function isFinalTaskStatus(status) {
|
|
22
|
-
return FINAL_TASK_STATUSES.has(status);
|
|
23
|
-
}
|
|
24
|
-
function isTaskCancelled(task) {
|
|
25
|
-
return task.status === 'cancelled';
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Agent Orchestrator
|
|
29
|
-
*
|
|
30
|
-
* Manages task queue, depth limiting, and sub-agent execution.
|
|
31
|
-
*/
|
|
32
|
-
class AgentOrchestrator {
|
|
33
|
-
config;
|
|
34
|
-
tasks = new Map();
|
|
35
|
-
taskQueue = [];
|
|
36
|
-
runningTasks = new Set();
|
|
37
|
-
currentCwd = process.cwd();
|
|
38
|
-
constructor(config = {}) {
|
|
39
|
-
this.config = { ...DEFAULT_ORCHESTRATOR_CONFIG, ...config };
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Update configuration
|
|
43
|
-
*/
|
|
44
|
-
updateConfig(config) {
|
|
45
|
-
this.config = { ...this.config, ...config };
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Set the working directory for task execution
|
|
49
|
-
*/
|
|
50
|
-
setCwd(cwd) {
|
|
51
|
-
this.currentCwd = cwd;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Spawn a sub-agent task
|
|
55
|
-
*/
|
|
56
|
-
async spawnAgent(prompt, agent, options = {}) {
|
|
57
|
-
// Validate agent availability
|
|
58
|
-
if (!isAgentAvailable(agent)) {
|
|
59
|
-
throw new Error(`Agent '${agent}' is not available. Check CLI installation and API key.`);
|
|
60
|
-
}
|
|
61
|
-
// Check queue limits
|
|
62
|
-
if (this.taskQueue.length >= this.config.maxQueueSize) {
|
|
63
|
-
throw new Error(`Task queue is full (max ${this.config.maxQueueSize})`);
|
|
64
|
-
}
|
|
65
|
-
// Calculate depth and check limits
|
|
66
|
-
let depth = 0;
|
|
67
|
-
if (options.parentId) {
|
|
68
|
-
const parent = this.tasks.get(options.parentId);
|
|
69
|
-
if (parent) {
|
|
70
|
-
depth = parent.depth + 1;
|
|
71
|
-
// Check nesting allowed
|
|
72
|
-
if (!this.config.allowNestedSubAgents && parent.depth > 0) {
|
|
73
|
-
throw new Error('Nested sub-agents are disabled');
|
|
74
|
-
}
|
|
75
|
-
// Check depth limit
|
|
76
|
-
if (depth > this.config.maxDepth) {
|
|
77
|
-
throw new Error(`Maximum sub-agent depth (${this.config.maxDepth}) exceeded`);
|
|
78
|
-
}
|
|
79
|
-
// Check children per task limit
|
|
80
|
-
if (parent.childIds.length >= this.config.maxChildrenPerTask) {
|
|
81
|
-
throw new Error(`Maximum children per task (${this.config.maxChildrenPerTask}) exceeded`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Check total sub-agents limit
|
|
86
|
-
const totalSubAgents = Array.from(this.tasks.values())
|
|
87
|
-
.filter(t => t.parentId && !['completed', 'failed', 'cancelled'].includes(t.status))
|
|
88
|
-
.length;
|
|
89
|
-
if (options.parentId && totalSubAgents >= this.config.maxTotalSubAgents) {
|
|
90
|
-
throw new Error(`Maximum total sub-agents (${this.config.maxTotalSubAgents}) exceeded`);
|
|
91
|
-
}
|
|
92
|
-
// Create task
|
|
93
|
-
const task = {
|
|
94
|
-
id: randomUUID(),
|
|
95
|
-
prompt,
|
|
96
|
-
agent,
|
|
97
|
-
executor: options.executor || 'cli',
|
|
98
|
-
status: 'pending',
|
|
99
|
-
priority: options.priority || 'normal',
|
|
100
|
-
parentId: options.parentId,
|
|
101
|
-
depth,
|
|
102
|
-
childIds: [],
|
|
103
|
-
cwd: options.cwd || this.currentCwd,
|
|
104
|
-
model: options.model,
|
|
105
|
-
provider: options.provider,
|
|
106
|
-
systemPrompt: options.systemPrompt,
|
|
107
|
-
timeout: options.timeout,
|
|
108
|
-
createdAt: new Date(),
|
|
109
|
-
updatedAt: new Date(),
|
|
110
|
-
};
|
|
111
|
-
this.tasks.set(task.id, task);
|
|
112
|
-
// Link to parent
|
|
113
|
-
if (options.parentId) {
|
|
114
|
-
const parent = this.tasks.get(options.parentId);
|
|
115
|
-
if (parent) {
|
|
116
|
-
parent.childIds.push(task.id);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Execute based on background flag
|
|
120
|
-
if (options.background) {
|
|
121
|
-
// Queue for background execution
|
|
122
|
-
this.insertIntoQueue(task.id, task.priority);
|
|
123
|
-
task.status = 'queued';
|
|
124
|
-
task.updatedAt = new Date();
|
|
125
|
-
void this.processQueue();
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
// Execute immediately and wait
|
|
129
|
-
await this.runTask(task);
|
|
130
|
-
}
|
|
131
|
-
return task;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Get a task by ID
|
|
135
|
-
*/
|
|
136
|
-
getTask(taskId) {
|
|
137
|
-
return this.tasks.get(taskId);
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Wait for a task to reach a final state.
|
|
141
|
-
*/
|
|
142
|
-
async waitForTask(taskId, options = {}) {
|
|
143
|
-
const pollIntervalMs = options.pollIntervalMs ?? 25;
|
|
144
|
-
const timeoutMs = options.timeoutMs;
|
|
145
|
-
const startedAt = Date.now();
|
|
146
|
-
while (true) {
|
|
147
|
-
const task = this.tasks.get(taskId);
|
|
148
|
-
if (!task) {
|
|
149
|
-
throw new Error(`Task ${taskId} not found`);
|
|
150
|
-
}
|
|
151
|
-
if (isFinalTaskStatus(task.status)) {
|
|
152
|
-
return task;
|
|
153
|
-
}
|
|
154
|
-
if (typeof timeoutMs === 'number' && Date.now() - startedAt >= timeoutMs) {
|
|
155
|
-
throw new Error(`Timed out waiting for task ${taskId}`);
|
|
156
|
-
}
|
|
157
|
-
await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Get all tasks
|
|
162
|
-
*/
|
|
163
|
-
getAllTasks() {
|
|
164
|
-
return Array.from(this.tasks.values());
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Get tasks by status
|
|
168
|
-
*/
|
|
169
|
-
getTasksByStatus(status) {
|
|
170
|
-
return Array.from(this.tasks.values()).filter(t => t.status === status);
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Get task tree (task and all descendants)
|
|
174
|
-
*/
|
|
175
|
-
getTaskTree(taskId) {
|
|
176
|
-
const task = this.tasks.get(taskId);
|
|
177
|
-
if (!task)
|
|
178
|
-
return [];
|
|
179
|
-
const tree = [task];
|
|
180
|
-
for (const childId of task.childIds) {
|
|
181
|
-
tree.push(...this.getTaskTree(childId));
|
|
182
|
-
}
|
|
183
|
-
return tree;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Cancel a task and its children
|
|
187
|
-
*/
|
|
188
|
-
async cancelTask(taskId) {
|
|
189
|
-
const task = this.tasks.get(taskId);
|
|
190
|
-
if (!task)
|
|
191
|
-
return;
|
|
192
|
-
// Cancel children first
|
|
193
|
-
for (const childId of task.childIds) {
|
|
194
|
-
await this.cancelTask(childId);
|
|
195
|
-
}
|
|
196
|
-
// Remove from queue
|
|
197
|
-
const queueIndex = this.taskQueue.indexOf(taskId);
|
|
198
|
-
if (queueIndex !== -1) {
|
|
199
|
-
this.taskQueue.splice(queueIndex, 1);
|
|
200
|
-
}
|
|
201
|
-
// Cancel if running
|
|
202
|
-
if (this.runningTasks.has(taskId)) {
|
|
203
|
-
cancelBackendTask(taskId);
|
|
204
|
-
this.runningTasks.delete(taskId);
|
|
205
|
-
}
|
|
206
|
-
task.status = 'cancelled';
|
|
207
|
-
task.completedAt = new Date();
|
|
208
|
-
task.updatedAt = new Date();
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Get orchestrator statistics
|
|
212
|
-
*/
|
|
213
|
-
getStats() {
|
|
214
|
-
const allTasks = Array.from(this.tasks.values());
|
|
215
|
-
return {
|
|
216
|
-
totalTasks: this.tasks.size,
|
|
217
|
-
queuedTasks: this.taskQueue.length,
|
|
218
|
-
runningTasks: this.runningTasks.size,
|
|
219
|
-
completedTasks: allTasks.filter(t => t.status === 'completed').length,
|
|
220
|
-
failedTasks: allTasks.filter(t => t.status === 'failed').length,
|
|
221
|
-
cancelledTasks: allTasks.filter(t => t.status === 'cancelled').length,
|
|
222
|
-
maxDepthUsed: Math.max(0, ...allTasks.map(t => t.depth)),
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Cleanup old completed tasks
|
|
227
|
-
*/
|
|
228
|
-
cleanup(maxAgeMs = 60 * 60 * 1000) {
|
|
229
|
-
const now = Date.now();
|
|
230
|
-
let cleaned = 0;
|
|
231
|
-
// Collect IDs to delete first, then delete in a separate pass
|
|
232
|
-
const toDelete = [];
|
|
233
|
-
for (const [taskId, task] of this.tasks) {
|
|
234
|
-
if (['completed', 'failed', 'cancelled'].includes(task.status) &&
|
|
235
|
-
task.completedAt &&
|
|
236
|
-
now - task.completedAt.getTime() > maxAgeMs) {
|
|
237
|
-
toDelete.push(taskId);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
for (const taskId of toDelete) {
|
|
241
|
-
const task = this.tasks.get(taskId);
|
|
242
|
-
if (task) {
|
|
243
|
-
// Remove from parent's childIds
|
|
244
|
-
if (task.parentId) {
|
|
245
|
-
const parent = this.tasks.get(task.parentId);
|
|
246
|
-
if (parent) {
|
|
247
|
-
const idx = parent.childIds.indexOf(taskId);
|
|
248
|
-
if (idx !== -1)
|
|
249
|
-
parent.childIds.splice(idx, 1);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
this.tasks.delete(taskId);
|
|
253
|
-
cleaned++;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
return cleaned;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Reset orchestrator state
|
|
260
|
-
*/
|
|
261
|
-
reset() {
|
|
262
|
-
// Cancel all running tasks
|
|
263
|
-
for (const taskId of this.runningTasks) {
|
|
264
|
-
cancelBackendTask(taskId);
|
|
265
|
-
}
|
|
266
|
-
this.tasks.clear();
|
|
267
|
-
this.taskQueue.length = 0;
|
|
268
|
-
this.runningTasks.clear();
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Insert task into queue based on priority
|
|
272
|
-
*/
|
|
273
|
-
insertIntoQueue(taskId, priority) {
|
|
274
|
-
const taskPriorityValue = PRIORITY_ORDER[priority];
|
|
275
|
-
// Find insertion point to maintain priority order
|
|
276
|
-
let insertIndex = this.taskQueue.length;
|
|
277
|
-
for (let i = 0; i < this.taskQueue.length; i++) {
|
|
278
|
-
const queuedTask = this.tasks.get(this.taskQueue[i]);
|
|
279
|
-
if (queuedTask && PRIORITY_ORDER[queuedTask.priority] < taskPriorityValue) {
|
|
280
|
-
insertIndex = i;
|
|
281
|
-
break;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
this.taskQueue.splice(insertIndex, 0, taskId);
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Process the task queue
|
|
288
|
-
*/
|
|
289
|
-
async processQueue() {
|
|
290
|
-
while (this.taskQueue.length > 0 &&
|
|
291
|
-
this.runningTasks.size < this.config.maxConcurrent) {
|
|
292
|
-
const taskId = this.taskQueue.shift();
|
|
293
|
-
if (!taskId)
|
|
294
|
-
break;
|
|
295
|
-
const task = this.tasks.get(taskId);
|
|
296
|
-
if (!task || !['pending', 'queued'].includes(task.status))
|
|
297
|
-
continue;
|
|
298
|
-
this.runningTasks.add(taskId);
|
|
299
|
-
// Fire and forget - don't await, let it run in background
|
|
300
|
-
this.runTask(task).catch(() => {
|
|
301
|
-
// Error already handled in runTask
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Run a single task
|
|
307
|
-
*/
|
|
308
|
-
async runTask(task) {
|
|
309
|
-
task.status = 'running';
|
|
310
|
-
task.startedAt = new Date();
|
|
311
|
-
task.updatedAt = new Date();
|
|
312
|
-
try {
|
|
313
|
-
let result = '';
|
|
314
|
-
const cwd = task.cwd || this.currentCwd;
|
|
315
|
-
// Per-task timeout overrides global config (0 = no timeout)
|
|
316
|
-
const taskTimeout = task.timeout || this.config.taskTimeout;
|
|
317
|
-
// Select executor: SDK backends run in-process, CLI backend spawns a process
|
|
318
|
-
const eventSource = task.executor === 'cli'
|
|
319
|
-
? executeAgent(task, cwd, taskTimeout)
|
|
320
|
-
: executeSdkAgent(task, cwd, taskTimeout);
|
|
321
|
-
for await (const event of eventSource) {
|
|
322
|
-
if (isTaskCancelled(task)) {
|
|
323
|
-
break;
|
|
324
|
-
}
|
|
325
|
-
if (event.type === 'text' && event.content) {
|
|
326
|
-
result += event.content;
|
|
327
|
-
}
|
|
328
|
-
else if (event.type === 'error') {
|
|
329
|
-
if (isTaskCancelled(task)) {
|
|
330
|
-
break;
|
|
331
|
-
}
|
|
332
|
-
throw new Error(event.message || 'Unknown error');
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
if (isTaskCancelled(task)) {
|
|
336
|
-
return;
|
|
337
|
-
}
|
|
338
|
-
task.status = 'completed';
|
|
339
|
-
task.result = result.trim() || '(no output)';
|
|
340
|
-
task.completedAt = new Date();
|
|
341
|
-
task.updatedAt = new Date();
|
|
342
|
-
}
|
|
343
|
-
catch (error) {
|
|
344
|
-
if (isTaskCancelled(task)) {
|
|
345
|
-
return;
|
|
346
|
-
}
|
|
347
|
-
task.status = 'failed';
|
|
348
|
-
task.error = error instanceof Error ? error.message : String(error);
|
|
349
|
-
task.completedAt = new Date();
|
|
350
|
-
task.updatedAt = new Date();
|
|
351
|
-
}
|
|
352
|
-
finally {
|
|
353
|
-
this.runningTasks.delete(task.id);
|
|
354
|
-
// Continue processing queue
|
|
355
|
-
void this.processQueue();
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
/**
|
|
360
|
-
* Singleton orchestrator instance
|
|
361
|
-
*/
|
|
362
|
-
export const orchestrator = new AgentOrchestrator();
|
|
363
|
-
//# sourceMappingURL=orchestrator.js.map
|