@calliopelabs/cli 2.5.0 → 3.1.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 -661
- 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/bin.d.ts +3 -7
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +56 -79
- 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 +247 -160
- package/dist/checkpoint.js.map +1 -1
- package/dist/circuit-breaker/breaker.d.ts.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 +236 -304
- 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 +11 -7
- package/dist/diff.js.map +1 -1
- package/dist/env-expansion.js.map +1 -1
- package/dist/errors.js +3 -3
- 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 +166 -24
- package/dist/headless.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/mcp.d.ts.map +1 -1
- package/dist/mcp.js +5 -2
- 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.js +2 -2
- package/dist/model-detection.js.map +1 -1
- package/dist/parallel-tools.js.map +1 -1
- package/dist/plugins.d.ts +32 -1
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +116 -5
- 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/bedrock.d.ts.map +1 -1
- package/dist/providers/bedrock.js +2 -5
- 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 +61 -10
- 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 +10 -10
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +18 -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.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/router.d.ts +133 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/{model-router.js → router.js} +329 -3
- 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} +1 -1
- package/dist/sandbox/native.d.ts.map +1 -0
- package/dist/{sandbox-native.js → sandbox/native.js} +1 -1
- package/dist/sandbox/native.js.map +1 -0
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js +1 -1
- package/dist/scope.js.map +1 -1
- package/dist/scuttlebot/client.d.ts.map +1 -1
- package/dist/scuttlebot/client.js.map +1 -1
- package/dist/scuttlebot/config.js.map +1 -1
- package/dist/scuttlebot/http-client.d.ts.map +1 -1
- package/dist/scuttlebot/irc-client.d.ts +5 -5
- package/dist/scuttlebot/irc-client.d.ts.map +1 -1
- package/dist/scuttlebot/irc-client.js.map +1 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +25 -54
- package/dist/setup.js.map +1 -1
- package/dist/skills.d.ts +39 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +90 -8
- package/dist/skills.js.map +1 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +6 -3
- 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 +62 -56
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +11 -0
- package/dist/styles.js.map +1 -1
- package/dist/summarization.d.ts.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 +128 -179
- package/dist/tools.js.map +1 -1
- 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 +21 -40
- package/dist/types.js.map +1 -1
- package/dist/ui/agent.d.ts +3 -6
- package/dist/ui/agent.d.ts.map +1 -1
- package/dist/ui/agent.js +328 -38
- 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 +4 -2
- package/dist/ui/chat-input.d.ts.map +1 -1
- package/dist/ui/chat-input.js +31 -350
- package/dist/ui/chat-input.js.map +1 -1
- package/dist/ui/commands.d.ts +14 -46
- package/dist/ui/commands.d.ts.map +1 -1
- package/dist/ui/commands.js +416 -2899
- 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 +20 -12
- 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 +1 -1
- 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 +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 +45 -1076
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/messages.d.ts +5 -8
- package/dist/ui/messages.d.ts.map +1 -1
- package/dist/ui/messages.js +15 -30
- 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/prompts.d.ts +38 -0
- package/dist/ui/modals/prompts.d.ts.map +1 -0
- package/dist/ui/modals/prompts.js +124 -0
- package/dist/ui/modals/prompts.js.map +1 -0
- package/dist/ui/modals/selectors.d.ts +34 -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 +18 -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 +1 -1
- package/dist/ui/status-bar.d.ts.map +1 -1
- package/dist/ui/status-bar.js +3 -4
- package/dist/ui/status-bar.js.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 +17 -10
- 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 -424
- 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 -45
- package/dist/api-server.d.ts.map +0 -1
- package/dist/api-server.js +0 -326
- 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 -176
- 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 -224
- 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 -330
- 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 -1042
- 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 -268
- 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/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 -85
- package/dist/idle-eviction.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 +0 -72
- package/dist/ui/modals.d.ts.map +0 -1
- package/dist/ui/modals.js +0 -266
- 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/ui/completions.js
CHANGED
|
@@ -3,106 +3,42 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Slash command list, path completion, and context-aware command suggestions.
|
|
5
5
|
*/
|
|
6
|
+
import config from '../config.js';
|
|
6
7
|
import * as fs from 'fs';
|
|
7
8
|
import * as path from 'path';
|
|
8
9
|
// ============================================================================
|
|
9
10
|
// Slash Commands (for tab completion)
|
|
10
11
|
// ============================================================================
|
|
11
|
-
|
|
12
|
-
'/help',
|
|
13
|
-
'/
|
|
14
|
-
'/
|
|
15
|
-
'/
|
|
16
|
-
'/
|
|
17
|
-
'/
|
|
18
|
-
'/
|
|
19
|
-
'/todo',
|
|
20
|
-
'/plans',
|
|
21
|
-
'/session',
|
|
22
|
-
'/sessions',
|
|
23
|
-
'/log',
|
|
24
|
-
'/history',
|
|
25
|
-
'/context',
|
|
26
|
-
'/summarize',
|
|
27
|
-
'/clear', '/c',
|
|
28
|
-
'/copy',
|
|
29
|
-
'/export',
|
|
30
|
-
'/edit',
|
|
12
|
+
const BASE_SLASH_COMMANDS = [
|
|
13
|
+
'/help',
|
|
14
|
+
'/status',
|
|
15
|
+
'/clear',
|
|
16
|
+
'/exit',
|
|
17
|
+
'/model', '/model list',
|
|
18
|
+
'/provider',
|
|
19
|
+
'/mode', '/mode plan', '/mode work',
|
|
31
20
|
'/undo',
|
|
32
|
-
'/
|
|
33
|
-
'/
|
|
34
|
-
'/
|
|
21
|
+
'/export',
|
|
22
|
+
'/resume',
|
|
23
|
+
'/compact',
|
|
24
|
+
'/scope', '/scope add', '/scope remove',
|
|
25
|
+
'/memory',
|
|
35
26
|
'/mcp',
|
|
36
27
|
'/skills',
|
|
37
|
-
'/
|
|
38
|
-
'/
|
|
39
|
-
'/
|
|
40
|
-
'/
|
|
41
|
-
'/
|
|
42
|
-
'/hooks',
|
|
43
|
-
'/search',
|
|
44
|
-
'/status', '/s',
|
|
45
|
-
'/config',
|
|
46
|
-
'/set',
|
|
47
|
-
'/layout',
|
|
48
|
-
'/density',
|
|
49
|
-
'/collapse',
|
|
50
|
-
'/scope',
|
|
51
|
-
'/add-dir',
|
|
52
|
-
'/remove-dir',
|
|
53
|
-
'/agents',
|
|
54
|
-
'/install-agents',
|
|
55
|
-
'/agents defs',
|
|
56
|
-
'/agents teams',
|
|
57
|
-
'/agents init',
|
|
58
|
-
'/agents show',
|
|
59
|
-
'/build-agent',
|
|
60
|
-
'/build-team',
|
|
61
|
-
'/upgrade',
|
|
62
|
-
'/loop',
|
|
63
|
-
'/cancel-loop',
|
|
64
|
-
'/breakloop',
|
|
65
|
-
'/exit',
|
|
66
|
-
'/keys',
|
|
67
|
-
'/?',
|
|
68
|
-
'/queue',
|
|
69
|
-
'/flush',
|
|
70
|
-
'/debug',
|
|
71
|
-
'/unstick',
|
|
72
|
-
'/work',
|
|
73
|
-
'/plan',
|
|
74
|
-
'/resume',
|
|
75
|
-
'/skin',
|
|
76
|
-
'/palette',
|
|
77
|
-
'/companion',
|
|
78
|
-
'/hud',
|
|
79
|
-
'/pack',
|
|
80
|
-
'/intensity',
|
|
81
|
-
'/emoji',
|
|
82
|
-
'/breaker', '/cb',
|
|
83
|
-
'/smart',
|
|
84
|
-
'/swarm',
|
|
85
|
-
'/council',
|
|
86
|
-
'/trust',
|
|
87
|
-
'/untrust',
|
|
88
|
-
'/checkpoint', '/cp',
|
|
28
|
+
'/config', '/config set',
|
|
29
|
+
'/setup',
|
|
30
|
+
'/trust', '/trust remove',
|
|
31
|
+
'/cost',
|
|
32
|
+
'/loop', '/loop stop',
|
|
89
33
|
'/restore',
|
|
90
|
-
'/
|
|
91
|
-
'/sandbox',
|
|
92
|
-
'/banner',
|
|
93
|
-
'/bg',
|
|
94
|
-
'/jobs',
|
|
95
|
-
'/job',
|
|
96
|
-
'/cancel',
|
|
97
|
-
'/clear-jobs',
|
|
98
|
-
'/recordings',
|
|
99
|
-
'/recording',
|
|
100
|
-
'/delete-recording',
|
|
101
|
-
'/serve',
|
|
102
|
-
'/serve-stop',
|
|
34
|
+
'/debug',
|
|
103
35
|
];
|
|
36
|
+
/** Slash commands offered in completions. /fleet appears only when fleet mode is enabled. */
|
|
37
|
+
export const SLASH_COMMANDS = config.get('fleet')?.enabled === true
|
|
38
|
+
? [...BASE_SLASH_COMMANDS, '/fleet']
|
|
39
|
+
: BASE_SLASH_COMMANDS;
|
|
104
40
|
// Commands that take a path argument (for file tab completion)
|
|
105
|
-
export const PATH_COMMANDS = ['/
|
|
41
|
+
export const PATH_COMMANDS = ['/export', '/restore'];
|
|
106
42
|
// ============================================================================
|
|
107
43
|
// Path Completion
|
|
108
44
|
// ============================================================================
|
|
@@ -168,39 +104,32 @@ export function getPathCompletions(partial, cwd) {
|
|
|
168
104
|
}
|
|
169
105
|
}
|
|
170
106
|
export function getSmartCommandSuggestions(ctx) {
|
|
171
|
-
const { input,
|
|
107
|
+
const { input, contextPercentage, currentMode, recentCommands } = ctx;
|
|
172
108
|
if (!input.startsWith('/'))
|
|
173
109
|
return [];
|
|
174
110
|
const suggestions = [];
|
|
175
111
|
const inputLower = input.toLowerCase();
|
|
176
|
-
// All available commands for matching
|
|
112
|
+
// All available commands for matching (survivors only)
|
|
177
113
|
const allCommands = [
|
|
178
|
-
'/help', '/
|
|
179
|
-
'/
|
|
180
|
-
'/
|
|
181
|
-
'/scope', '/
|
|
182
|
-
'/
|
|
183
|
-
'/
|
|
184
|
-
'/branch', '/branches', '/switch',
|
|
185
|
-
'/save', '/load', '/sessions',
|
|
186
|
-
'/git', '/run', '/set', '/confirm',
|
|
114
|
+
'/help', '/status', '/clear', '/exit',
|
|
115
|
+
'/model', '/provider', '/mode',
|
|
116
|
+
'/undo', '/export', '/resume', '/compact',
|
|
117
|
+
'/scope', '/memory', '/trust', '/restore',
|
|
118
|
+
'/mcp', '/skills',
|
|
119
|
+
'/config', '/setup', '/cost', '/loop', '/debug',
|
|
187
120
|
];
|
|
188
121
|
// Context-aware prioritization
|
|
189
122
|
const prioritized = [];
|
|
190
123
|
// High context? Suggest compaction commands first
|
|
191
124
|
if (contextPercentage > 70) {
|
|
192
|
-
prioritized.push('/
|
|
125
|
+
prioritized.push('/compact', '/clear');
|
|
193
126
|
}
|
|
194
127
|
// Mode-specific suggestions
|
|
195
128
|
if (currentMode === 'plan') {
|
|
196
|
-
prioritized.push('/mode hybrid', '/work');
|
|
129
|
+
prioritized.push('/mode hybrid', '/mode work');
|
|
197
130
|
}
|
|
198
131
|
else if (currentMode === 'work') {
|
|
199
|
-
prioritized.push('/mode hybrid', '/plan');
|
|
200
|
-
}
|
|
201
|
-
// Git repo? Suggest git commands
|
|
202
|
-
if (hasGitRepo) {
|
|
203
|
-
prioritized.push('/git status', '/git diff', '/git add', '/git commit');
|
|
132
|
+
prioritized.push('/mode hybrid', '/mode plan');
|
|
204
133
|
}
|
|
205
134
|
// Add recent commands (deduplicated)
|
|
206
135
|
for (const cmd of recentCommands.slice(-5)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/ui/completions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,+EAA+E;AAC/E,sCAAsC;AACtC,+EAA+E;AAE/E,MAAM,
|
|
1
|
+
{"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/ui/completions.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/components.d.ts
CHANGED
|
@@ -2,37 +2,45 @@
|
|
|
2
2
|
* UI Module - Utility Components
|
|
3
3
|
*
|
|
4
4
|
* Animated thinking displays, state transitions, streaming indicators.
|
|
5
|
-
* Colors sourced from active palette, animations from active skin.
|
|
5
|
+
* Colors sourced from active palette, animations from active skin. Pure frame
|
|
6
|
+
* generators and the transition hook live in animations.ts.
|
|
6
7
|
*/
|
|
8
|
+
import React from 'react';
|
|
7
9
|
import type { ThinkingState, ActivityState } from './types.js';
|
|
8
10
|
export declare function getBannerLines(): string[];
|
|
9
11
|
export declare function getSkinSpinnerFrames(): string[];
|
|
10
12
|
/** Get spinner frames for a specific state, falling back to skin default */
|
|
11
13
|
export declare function getStateSpinner(state: 'thinking' | 'processing' | 'streaming'): string[];
|
|
12
14
|
export declare const DEFAULT_SPINNER: string[];
|
|
13
|
-
export declare function Separator():
|
|
14
|
-
|
|
15
|
+
export declare function Separator(): React.JSX.Element;
|
|
16
|
+
declare function ThinkingDisplayInner({ state }: {
|
|
15
17
|
state: ThinkingState;
|
|
16
|
-
}):
|
|
17
|
-
export declare
|
|
18
|
+
}): React.JSX.Element;
|
|
19
|
+
export declare const ThinkingDisplay: React.MemoExoticComponent<typeof ThinkingDisplayInner>;
|
|
20
|
+
declare function ProcessingIndicatorInner({ label }: {
|
|
18
21
|
label: string;
|
|
19
|
-
}):
|
|
22
|
+
}): React.JSX.Element;
|
|
23
|
+
export declare const ProcessingIndicator: React.MemoExoticComponent<typeof ProcessingIndicatorInner>;
|
|
20
24
|
/** Brief splash overlay shown when switching themes (auto-dismisses) */
|
|
21
|
-
|
|
25
|
+
declare function SplashOverlayInner({ art, color, onDone }: {
|
|
22
26
|
art: string[];
|
|
23
27
|
color: string;
|
|
24
28
|
onDone: () => void;
|
|
25
|
-
}):
|
|
26
|
-
export declare
|
|
29
|
+
}): React.JSX.Element;
|
|
30
|
+
export declare const SplashOverlay: React.MemoExoticComponent<typeof SplashOverlayInner>;
|
|
31
|
+
declare function StreamingIndicatorInner({ activity }: {
|
|
27
32
|
activity?: ActivityState;
|
|
28
|
-
}):
|
|
33
|
+
}): React.JSX.Element;
|
|
34
|
+
export declare const StreamingIndicator: React.MemoExoticComponent<typeof StreamingIndicatorInner>;
|
|
29
35
|
/**
|
|
30
36
|
* Renders a brief transition effect between processing states.
|
|
31
37
|
* Mount when transitioning, unmount after onComplete fires.
|
|
32
38
|
*/
|
|
33
|
-
|
|
39
|
+
declare function StateTransitionInner({ from, to, onComplete }: {
|
|
34
40
|
from: 'idle' | 'thinking' | 'streaming' | 'done';
|
|
35
41
|
to: 'idle' | 'thinking' | 'streaming' | 'done';
|
|
36
42
|
onComplete: () => void;
|
|
37
|
-
}):
|
|
43
|
+
}): React.JSX.Element;
|
|
44
|
+
export declare const StateTransition: React.MemoExoticComponent<typeof StateTransitionInner>;
|
|
45
|
+
export {};
|
|
38
46
|
//# sourceMappingURL=components.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/ui/components.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/ui/components.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAW/D,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAID,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,EAAE,CAOxF;AAED,eAAO,MAAM,eAAe,UAAqD,CAAC;AAMlF,wBAAgB,SAAS,sBAKxB;AAED,iBAAS,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,qBAoGhE;AAID,eAAO,MAAM,eAAe,wDAAmC,CAAC;AAEhE,iBAAS,wBAAwB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,qBA4B7D;AAED,eAAO,MAAM,mBAAmB,4DAAuC,CAAC;AAExE,wEAAwE;AACxE,iBAAS,kBAAkB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,qBAqBvG;AAED,eAAO,MAAM,aAAa,sDAAiC,CAAC;AAE5D,iBAAS,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,aAAa,CAAA;CAAE,qBAmD1E;AAED,eAAO,MAAM,kBAAkB,2DAAsC,CAAC;AAMtE;;;GAGG;AACH,iBAAS,oBAAoB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE;IACtD,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACjD,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,qBAyEA;AAED,eAAO,MAAM,eAAe,wDAAmC,CAAC"}
|
package/dist/ui/components.js
CHANGED
|
@@ -3,12 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
* UI Module - Utility Components
|
|
4
4
|
*
|
|
5
5
|
* Animated thinking displays, state transitions, streaming indicators.
|
|
6
|
-
* Colors sourced from active palette, animations from active skin.
|
|
6
|
+
* Colors sourced from active palette, animations from active skin. Pure frame
|
|
7
|
+
* generators and the transition hook live in animations.ts.
|
|
7
8
|
*/
|
|
8
|
-
import { useState, useEffect, useRef } from 'react';
|
|
9
|
+
import React, { useState, useEffect, useRef } from 'react';
|
|
9
10
|
import { Box, Text, useStdout } from 'ink';
|
|
10
11
|
import { getCurrentSkin, getSpinnerFrames, getInkColor } from '../hud/api.js';
|
|
11
|
-
import {
|
|
12
|
+
import { waveFrame, neuralFrame, circuitFrame, dnaFrame, pulseBarFrame, cascadeFrame, scanLine, getAnimationStyle, useTransition, transitionWipe, formatElapsed, elapsedDots, ORBIT_CHARS, } from './animations.js';
|
|
12
13
|
// ============================================================================
|
|
13
14
|
// Constants & Helpers
|
|
14
15
|
// ============================================================================
|
|
@@ -32,202 +33,6 @@ export function getStateSpinner(state) {
|
|
|
32
33
|
return state === 'streaming' ? DEFAULT_PULSE : getSpinnerFrames();
|
|
33
34
|
}
|
|
34
35
|
export const DEFAULT_SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
35
|
-
/** Characters for each animation style */
|
|
36
|
-
const WAVE_CHARS = ' ░▒▓█▓▒░ ';
|
|
37
|
-
const NEURAL_NODES = ['◇', '◆', '○', '●', '◎', '◉'];
|
|
38
|
-
const CIRCUIT_CHARS = ['─', '┐', '│', '└', '─', '┌', '│', '┘'];
|
|
39
|
-
const DNA_LEFT = ['╭', '│', '╰', ' ', ' ', '╭', '│', '╰'];
|
|
40
|
-
const DNA_RIGHT = [' ', ' ', '╭', '│', '╰', ' ', ' ', '╭'];
|
|
41
|
-
const DNA_BASES = ['A', 'T', 'G', 'C'];
|
|
42
|
-
const ORBIT_CHARS = [
|
|
43
|
-
' ◠ ',
|
|
44
|
-
' ◜ ◝ ',
|
|
45
|
-
' ◜ ● ◝ ',
|
|
46
|
-
' ◟ ◞ ',
|
|
47
|
-
' ◡ ',
|
|
48
|
-
];
|
|
49
|
-
/** Generate a wave animation line */
|
|
50
|
-
function waveFrame(tick, width) {
|
|
51
|
-
let line = '';
|
|
52
|
-
for (let x = 0; x < width; x++) {
|
|
53
|
-
const phase = (x * 0.3 + tick * 0.4) % WAVE_CHARS.length;
|
|
54
|
-
line += WAVE_CHARS[Math.floor(phase)] || ' ';
|
|
55
|
-
}
|
|
56
|
-
return line;
|
|
57
|
-
}
|
|
58
|
-
/** Generate neural network activity */
|
|
59
|
-
function neuralFrame(tick, width) {
|
|
60
|
-
let line = '';
|
|
61
|
-
for (let x = 0; x < width; x++) {
|
|
62
|
-
if (x % 4 === 0) {
|
|
63
|
-
const nodeIdx = (tick + x) % NEURAL_NODES.length;
|
|
64
|
-
line += NEURAL_NODES[nodeIdx];
|
|
65
|
-
}
|
|
66
|
-
else if (x % 4 === 2) {
|
|
67
|
-
const active = ((tick + x * 3) % 7) < 3;
|
|
68
|
-
line += active ? '─' : ' ';
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
line += ' ';
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return line;
|
|
75
|
-
}
|
|
76
|
-
/** Generate circuit trace pattern */
|
|
77
|
-
function circuitFrame(tick, width) {
|
|
78
|
-
let line = '';
|
|
79
|
-
const pulsePos = tick % width;
|
|
80
|
-
for (let x = 0; x < width; x++) {
|
|
81
|
-
const charIdx = (x + tick) % CIRCUIT_CHARS.length;
|
|
82
|
-
const dist = Math.abs(x - pulsePos);
|
|
83
|
-
if (dist < 3) {
|
|
84
|
-
line += CIRCUIT_CHARS[charIdx];
|
|
85
|
-
}
|
|
86
|
-
else if (x % 5 === 0) {
|
|
87
|
-
line += '·';
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
line += ' ';
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return line;
|
|
94
|
-
}
|
|
95
|
-
/** Generate DNA helix pattern (2 lines) */
|
|
96
|
-
function dnaFrame(tick, _width) {
|
|
97
|
-
const len = 24;
|
|
98
|
-
let top = ' ';
|
|
99
|
-
let bot = ' ';
|
|
100
|
-
for (let x = 0; x < len; x++) {
|
|
101
|
-
const phase = (x + tick) % 8;
|
|
102
|
-
const lt = DNA_LEFT[phase];
|
|
103
|
-
const rt = DNA_RIGHT[phase];
|
|
104
|
-
if (lt !== ' ' && rt !== ' ') {
|
|
105
|
-
// Crossover — show a base pair
|
|
106
|
-
const base = DNA_BASES[(x + tick) % DNA_BASES.length];
|
|
107
|
-
top += lt + base;
|
|
108
|
-
bot += rt + base;
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
top += lt + ' ';
|
|
112
|
-
bot += rt + ' ';
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return [top, bot];
|
|
116
|
-
}
|
|
117
|
-
/** Generate an animated pulse bar */
|
|
118
|
-
function pulseBarFrame(tick, width) {
|
|
119
|
-
const barWidth = Math.min(width - 4, 32);
|
|
120
|
-
let bar = '│';
|
|
121
|
-
for (let x = 0; x < barWidth; x++) {
|
|
122
|
-
const intensity = Math.sin((x / barWidth) * Math.PI + tick * 0.3);
|
|
123
|
-
if (intensity > 0.8)
|
|
124
|
-
bar += '█';
|
|
125
|
-
else if (intensity > 0.5)
|
|
126
|
-
bar += '▓';
|
|
127
|
-
else if (intensity > 0.2)
|
|
128
|
-
bar += '▒';
|
|
129
|
-
else if (intensity > -0.2)
|
|
130
|
-
bar += '░';
|
|
131
|
-
else
|
|
132
|
-
bar += ' ';
|
|
133
|
-
}
|
|
134
|
-
bar += '│';
|
|
135
|
-
return bar;
|
|
136
|
-
}
|
|
137
|
-
/** Generate cascade / waterfall pattern */
|
|
138
|
-
function cascadeFrame(tick, width) {
|
|
139
|
-
const lines = [];
|
|
140
|
-
const cascadeWidth = Math.min(width - 2, 36);
|
|
141
|
-
for (let row = 0; row < 3; row++) {
|
|
142
|
-
let line = '';
|
|
143
|
-
for (let x = 0; x < cascadeWidth; x++) {
|
|
144
|
-
const drop = ((x * 7 + row * 13 + tick * 3) % 23);
|
|
145
|
-
if (drop < 2)
|
|
146
|
-
line += '│';
|
|
147
|
-
else if (drop < 4)
|
|
148
|
-
line += '┊';
|
|
149
|
-
else if (drop < 6)
|
|
150
|
-
line += '·';
|
|
151
|
-
else
|
|
152
|
-
line += ' ';
|
|
153
|
-
}
|
|
154
|
-
lines.push(line);
|
|
155
|
-
}
|
|
156
|
-
return lines;
|
|
157
|
-
}
|
|
158
|
-
/** Pick animation style from skin config or infer from skin name */
|
|
159
|
-
function getAnimationStyle() {
|
|
160
|
-
const skin = getCurrentSkin();
|
|
161
|
-
// Explicit skin preference wins
|
|
162
|
-
if (skin.animations?.thinkingStyle)
|
|
163
|
-
return skin.animations.thinkingStyle;
|
|
164
|
-
const skinName = skin.name.toLowerCase();
|
|
165
|
-
// Infer from skin name / vibe
|
|
166
|
-
if (skinName.includes('matrix') || skinName.includes('neo') || skinName.includes('hack'))
|
|
167
|
-
return 'cascade';
|
|
168
|
-
if (skinName.includes('retro') || skinName.includes('basic') || skinName.includes('arcade'))
|
|
169
|
-
return 'circuit';
|
|
170
|
-
if (skinName.includes('sci') || skinName.includes('trek') || skinName.includes('space'))
|
|
171
|
-
return 'neural';
|
|
172
|
-
if (skinName.includes('bio') || skinName.includes('nature') || skinName.includes('organic'))
|
|
173
|
-
return 'dna';
|
|
174
|
-
if (skinName.includes('minimal') || skinName.includes('clean'))
|
|
175
|
-
return 'minimal';
|
|
176
|
-
return 'wave';
|
|
177
|
-
}
|
|
178
|
-
function useTransition(isActive, enterMs = 300, exitMs = 200) {
|
|
179
|
-
const [phase, setPhase] = useState(isActive ? 'active' : 'exit');
|
|
180
|
-
const [progress, setProgress] = useState(isActive ? 1 : 0);
|
|
181
|
-
const startTime = useRef(Date.now());
|
|
182
|
-
useEffect(() => {
|
|
183
|
-
if (isActive && phase !== 'active') {
|
|
184
|
-
setPhase('enter');
|
|
185
|
-
startTime.current = Date.now();
|
|
186
|
-
}
|
|
187
|
-
else if (!isActive && phase === 'active') {
|
|
188
|
-
setPhase('exit');
|
|
189
|
-
startTime.current = Date.now();
|
|
190
|
-
}
|
|
191
|
-
}, [isActive]);
|
|
192
|
-
useEffect(() => {
|
|
193
|
-
if (phase === 'enter' || phase === 'exit') {
|
|
194
|
-
const duration = phase === 'enter' ? enterMs : exitMs;
|
|
195
|
-
const timer = setInterval(() => {
|
|
196
|
-
const elapsed = Date.now() - startTime.current;
|
|
197
|
-
const p = Math.min(1, elapsed / duration);
|
|
198
|
-
setProgress(phase === 'enter' ? p : 1 - p);
|
|
199
|
-
if (p >= 1) {
|
|
200
|
-
setPhase(phase === 'enter' ? 'active' : 'exit');
|
|
201
|
-
setProgress(phase === 'enter' ? 1 : 0);
|
|
202
|
-
clearInterval(timer);
|
|
203
|
-
}
|
|
204
|
-
}, 30);
|
|
205
|
-
return () => clearInterval(timer);
|
|
206
|
-
}
|
|
207
|
-
}, [phase]);
|
|
208
|
-
return { phase, progress };
|
|
209
|
-
}
|
|
210
|
-
/** Build a transition-in wipe line */
|
|
211
|
-
function transitionWipe(text, progress) {
|
|
212
|
-
const visibleChars = Math.floor(text.length * progress);
|
|
213
|
-
return text.slice(0, visibleChars) + ' '.repeat(Math.max(0, text.length - visibleChars));
|
|
214
|
-
}
|
|
215
|
-
// ============================================================================
|
|
216
|
-
// Elapsed Time Visualization
|
|
217
|
-
// ============================================================================
|
|
218
|
-
function formatElapsed(seconds) {
|
|
219
|
-
if (seconds < 60)
|
|
220
|
-
return `${seconds}s`;
|
|
221
|
-
const m = Math.floor(seconds / 60);
|
|
222
|
-
const s = seconds % 60;
|
|
223
|
-
return `${m}m${s.toString().padStart(2, '0')}s`;
|
|
224
|
-
}
|
|
225
|
-
/** Tiny progress dots that grow with time */
|
|
226
|
-
function elapsedDots(seconds) {
|
|
227
|
-
const filled = Math.min(seconds, 20);
|
|
228
|
-
const dots = '·'.repeat(Math.max(0, 20 - filled)) + '•'.repeat(Math.min(filled, 10));
|
|
229
|
-
return dots.slice(0, 20);
|
|
230
|
-
}
|
|
231
36
|
// ============================================================================
|
|
232
37
|
// Components
|
|
233
38
|
// ============================================================================
|
|
@@ -237,12 +42,11 @@ export function Separator() {
|
|
|
237
42
|
const borderColor = getInkColor('border');
|
|
238
43
|
return _jsx(Text, { color: borderColor, dimColor: true, children: '─'.repeat(width) });
|
|
239
44
|
}
|
|
240
|
-
|
|
45
|
+
function ThinkingDisplayInner({ state }) {
|
|
241
46
|
const [frame, setFrame] = useState(0);
|
|
242
47
|
const [elapsed, setElapsed] = useState(0);
|
|
243
48
|
const startTime = useRef(Date.now());
|
|
244
49
|
const spinFrames = getStateSpinner('thinking');
|
|
245
|
-
const [immersionPhrase] = useState(() => getThinkingPhrase());
|
|
246
50
|
const [animStyle] = useState(() => getAnimationStyle());
|
|
247
51
|
const { stdout } = useStdout();
|
|
248
52
|
const termWidth = stdout?.columns || 80;
|
|
@@ -257,7 +61,7 @@ export function ThinkingDisplay({ state }) {
|
|
|
257
61
|
}, 80);
|
|
258
62
|
return () => clearInterval(timer);
|
|
259
63
|
}, []);
|
|
260
|
-
const displayStatus =
|
|
64
|
+
const displayStatus = state.status;
|
|
261
65
|
const animWidth = Math.min(termWidth - 4, 40);
|
|
262
66
|
// Build animation lines based on style
|
|
263
67
|
let animLines = [];
|
|
@@ -290,7 +94,10 @@ export function ThinkingDisplay({ state }) {
|
|
|
290
94
|
}
|
|
291
95
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: primaryColor, children: spinFrames[frame % spinFrames.length] }), _jsxs(Text, { color: primaryColor, bold: true, children: [" ", displayStatus] }), state.iteration != null && state.maxIterations && Number.isFinite(state.maxIterations) && (_jsxs(Text, { dimColor: true, children: [" (", state.iteration, "/", state.maxIterations, ")"] })), elapsed > 0 && (_jsxs(Text, { dimColor: true, children: [" ", formatElapsed(elapsed)] }))] }), animStyle !== 'minimal' && animLines.length > 0 && (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: animLines.map((line, i) => (_jsx(Text, { color: secondaryColor, dimColor: true, children: line }, i))) })), elapsed > 2 && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: accentColor, dimColor: true, children: elapsedDots(elapsed) }) })), state.detail && (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["\u21B3 ", state.detail] }) })), state.thinking && (_jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [_jsx(Text, { color: accentColor, children: "Thinking:" }), state.thinking.split('\n').slice(0, 5).map((line, i) => (_jsxs(Text, { dimColor: true, children: [" ", line.substring(0, 80)] }, i))), state.thinking.split('\n').length > 5 && (_jsx(Text, { dimColor: true, children: " ..." }))] }))] }));
|
|
292
96
|
}
|
|
293
|
-
|
|
97
|
+
// Memoized so unrelated parent re-renders (streaming chunks, stats ticks) don't
|
|
98
|
+
// re-run the animation build between its own timer frames.
|
|
99
|
+
export const ThinkingDisplay = React.memo(ThinkingDisplayInner);
|
|
100
|
+
function ProcessingIndicatorInner({ label }) {
|
|
294
101
|
const [frame, setFrame] = useState(0);
|
|
295
102
|
const spinFrames = getStateSpinner('processing');
|
|
296
103
|
const primaryColor = getInkColor('primary');
|
|
@@ -305,28 +112,9 @@ export function ProcessingIndicator({ label }) {
|
|
|
305
112
|
const dots = '.'.repeat((frame % 12) < 3 ? 1 : (frame % 12) < 6 ? 2 : (frame % 12) < 9 ? 3 : 0);
|
|
306
113
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: primaryColor, children: spinFrames[frame % spinFrames.length] }), _jsxs(Text, { dimColor: true, children: [" ", label, dots] })] }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: secondaryColor, dimColor: true, children: scanLine(frame, 24) }) })] }));
|
|
307
114
|
}
|
|
308
|
-
|
|
309
|
-
function scanLine(tick, width) {
|
|
310
|
-
const pos = tick % (width * 2);
|
|
311
|
-
const actual = pos < width ? pos : width * 2 - pos;
|
|
312
|
-
let line = '';
|
|
313
|
-
for (let x = 0; x < width; x++) {
|
|
314
|
-
const dist = Math.abs(x - actual);
|
|
315
|
-
if (dist === 0)
|
|
316
|
-
line += '█';
|
|
317
|
-
else if (dist === 1)
|
|
318
|
-
line += '▓';
|
|
319
|
-
else if (dist === 2)
|
|
320
|
-
line += '▒';
|
|
321
|
-
else if (dist === 3)
|
|
322
|
-
line += '░';
|
|
323
|
-
else
|
|
324
|
-
line += '·';
|
|
325
|
-
}
|
|
326
|
-
return line;
|
|
327
|
-
}
|
|
115
|
+
export const ProcessingIndicator = React.memo(ProcessingIndicatorInner);
|
|
328
116
|
/** Brief splash overlay shown when switching themes (auto-dismisses) */
|
|
329
|
-
|
|
117
|
+
function SplashOverlayInner({ art, color, onDone }) {
|
|
330
118
|
const [visibleLines, setVisibleLines] = useState(0);
|
|
331
119
|
useEffect(() => {
|
|
332
120
|
// Typewriter entry: reveal one line at a time
|
|
@@ -340,7 +128,8 @@ export function SplashOverlay({ art, color, onDone }) {
|
|
|
340
128
|
}, [visibleLines, art.length, onDone]);
|
|
341
129
|
return (_jsx(Box, { flexDirection: "column", justifyContent: "center", alignItems: "center", marginY: 1, children: art.slice(0, visibleLines).map((line, i) => (_jsx(Text, { color: color, children: line }, i))) }));
|
|
342
130
|
}
|
|
343
|
-
export
|
|
131
|
+
export const SplashOverlay = React.memo(SplashOverlayInner);
|
|
132
|
+
function StreamingIndicatorInner({ activity }) {
|
|
344
133
|
const [frame, setFrame] = useState(0);
|
|
345
134
|
const [elapsed, setElapsed] = useState(0);
|
|
346
135
|
const pulseFrames = getStateSpinner('streaming');
|
|
@@ -366,6 +155,7 @@ export function StreamingIndicator({ activity }) {
|
|
|
366
155
|
}
|
|
367
156
|
return (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { children: [_jsx(Text, { color: successColor, children: pulseFrames[frame % pulseFrames.length] }), _jsx(Text, { dimColor: true, children: " receiving" }), _jsxs(Text, { color: accentColor, dimColor: true, children: [" ", streamVis] })] }) }));
|
|
368
157
|
}
|
|
158
|
+
export const StreamingIndicator = React.memo(StreamingIndicatorInner);
|
|
369
159
|
// ============================================================================
|
|
370
160
|
// State Transition Overlay
|
|
371
161
|
// ============================================================================
|
|
@@ -373,7 +163,7 @@ export function StreamingIndicator({ activity }) {
|
|
|
373
163
|
* Renders a brief transition effect between processing states.
|
|
374
164
|
* Mount when transitioning, unmount after onComplete fires.
|
|
375
165
|
*/
|
|
376
|
-
|
|
166
|
+
function StateTransitionInner({ from, to, onComplete }) {
|
|
377
167
|
const [frame, setFrame] = useState(0);
|
|
378
168
|
const totalFrames = 8;
|
|
379
169
|
const primaryColor = getInkColor('primary');
|
|
@@ -424,4 +214,5 @@ export function StateTransition({ from, to, onComplete }) {
|
|
|
424
214
|
const fadeBar = opacity > 0.5 ? '─'.repeat(width) : opacity > 0.2 ? '·'.repeat(width) : '';
|
|
425
215
|
return (_jsx(Box, { children: _jsx(Text, { dimColor: true, children: fadeBar }) }));
|
|
426
216
|
}
|
|
217
|
+
export const StateTransition = React.memo(StateTransitionInner);
|
|
427
218
|
//# sourceMappingURL=components.js.map
|