@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/auto-checkpoint.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-Checkpoint
|
|
3
|
-
*
|
|
4
|
-
* Automatically creates git commits before destructive tool calls
|
|
5
|
-
* so the agent's changes can be easily reverted.
|
|
6
|
-
*
|
|
7
|
-
* Inspired by autoresearch's git-as-ledger pattern where every
|
|
8
|
-
* experiment is a commit, making the full history auditable.
|
|
9
|
-
*/
|
|
10
|
-
import { execFileSync } from 'child_process';
|
|
11
|
-
// ============================================================================
|
|
12
|
-
// Configuration
|
|
13
|
-
// ============================================================================
|
|
14
|
-
/** Tools that modify files and should trigger a checkpoint */
|
|
15
|
-
const DESTRUCTIVE_TOOLS = new Set([
|
|
16
|
-
'write_file',
|
|
17
|
-
'shell', // only for certain commands
|
|
18
|
-
]);
|
|
19
|
-
/** Shell commands that are destructive (write, delete, move) */
|
|
20
|
-
const DESTRUCTIVE_SHELL_PATTERNS = [
|
|
21
|
-
/\brm\b/,
|
|
22
|
-
/\bmv\b/,
|
|
23
|
-
/\bcp\b.*\s-[^-]*f/, // cp -f (force overwrite)
|
|
24
|
-
/\bgit\s+(reset|checkout\s+--)\b/,
|
|
25
|
-
/\bgit\s+clean\b/,
|
|
26
|
-
/\bsed\s+-i\b/,
|
|
27
|
-
/>\s*\S/, // output redirection
|
|
28
|
-
/\bdd\b/,
|
|
29
|
-
/\btruncate\b/,
|
|
30
|
-
];
|
|
31
|
-
// ============================================================================
|
|
32
|
-
// State
|
|
33
|
-
// ============================================================================
|
|
34
|
-
let enabled = true;
|
|
35
|
-
let lastCheckpointHash = null;
|
|
36
|
-
/** Repo root the lastCheckpointHash belongs to — revert must target this, not live cwd. */
|
|
37
|
-
let lastCheckpointRoot = null;
|
|
38
|
-
let checkpointCount = 0;
|
|
39
|
-
// ============================================================================
|
|
40
|
-
// Public API
|
|
41
|
-
// ============================================================================
|
|
42
|
-
/**
|
|
43
|
-
* Check if a tool call should trigger an auto-checkpoint.
|
|
44
|
-
*/
|
|
45
|
-
export function shouldCheckpoint(tool, args) {
|
|
46
|
-
if (!enabled)
|
|
47
|
-
return false;
|
|
48
|
-
if (!isGitRepo())
|
|
49
|
-
return false;
|
|
50
|
-
if (tool === 'write_file')
|
|
51
|
-
return true;
|
|
52
|
-
if (tool === 'shell') {
|
|
53
|
-
const command = String(args.command || '');
|
|
54
|
-
return DESTRUCTIVE_SHELL_PATTERNS.some(p => p.test(command));
|
|
55
|
-
}
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Create an auto-checkpoint commit with current staged + unstaged changes.
|
|
60
|
-
* Returns the commit hash if successful, null if nothing to commit.
|
|
61
|
-
*/
|
|
62
|
-
export function createCheckpoint(tool, args) {
|
|
63
|
-
if (!isGitRepo())
|
|
64
|
-
return null;
|
|
65
|
-
try {
|
|
66
|
-
// Capture the repo root once, at checkpoint time, and pin every git call for
|
|
67
|
-
// this checkpoint to it. process.cwd() may change before the matching revert.
|
|
68
|
-
const root = gitRepoRoot();
|
|
69
|
-
if (!root)
|
|
70
|
-
return null;
|
|
71
|
-
// Check if there are any changes to commit
|
|
72
|
-
const status = git(root, 'status', '--porcelain');
|
|
73
|
-
if (!status.trim())
|
|
74
|
-
return null; // Nothing to checkpoint
|
|
75
|
-
// Stage all tracked changes (don't add untracked files)
|
|
76
|
-
git(root, 'add', '-u');
|
|
77
|
-
// Check if there's anything staged
|
|
78
|
-
const staged = git(root, 'diff', '--cached', '--stat');
|
|
79
|
-
if (!staged.trim())
|
|
80
|
-
return null;
|
|
81
|
-
// Create checkpoint commit
|
|
82
|
-
const argSummary = tool === 'write_file'
|
|
83
|
-
? String(args.path || '')
|
|
84
|
-
: tool === 'shell'
|
|
85
|
-
? String(args.command || '').substring(0, 50)
|
|
86
|
-
: tool;
|
|
87
|
-
const message = `[auto-checkpoint] before ${tool}: ${argSummary}`;
|
|
88
|
-
git(root, 'commit', '-m', message, '--no-gpg-sign');
|
|
89
|
-
// Get the commit hash
|
|
90
|
-
const hash = git(root, 'rev-parse', '--short', 'HEAD').trim();
|
|
91
|
-
lastCheckpointHash = hash;
|
|
92
|
-
lastCheckpointRoot = root;
|
|
93
|
-
checkpointCount++;
|
|
94
|
-
return hash;
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
// Checkpoint failed silently — don't block the agent
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Revert to the last checkpoint.
|
|
103
|
-
*/
|
|
104
|
-
export function revertToLastCheckpoint() {
|
|
105
|
-
if (!lastCheckpointHash || !lastCheckpointRoot)
|
|
106
|
-
return false;
|
|
107
|
-
// Reset only the repo the checkpoint was created in. If that root has since
|
|
108
|
-
// moved or no longer resolves to the same repo, bail rather than risk a
|
|
109
|
-
// destructive cross-repo `git reset --hard` against the live cwd.
|
|
110
|
-
let currentRoot;
|
|
111
|
-
try {
|
|
112
|
-
currentRoot = gitRepoRoot(lastCheckpointRoot);
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
if (currentRoot !== lastCheckpointRoot)
|
|
118
|
-
return false;
|
|
119
|
-
try {
|
|
120
|
-
git(lastCheckpointRoot, 'reset', '--hard', lastCheckpointHash);
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Get checkpoint stats.
|
|
129
|
-
*/
|
|
130
|
-
export function getCheckpointStats() {
|
|
131
|
-
return { enabled, count: checkpointCount, lastHash: lastCheckpointHash };
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Enable or disable auto-checkpointing.
|
|
135
|
-
*/
|
|
136
|
-
export function setEnabled(value) {
|
|
137
|
-
enabled = value;
|
|
138
|
-
}
|
|
139
|
-
// ============================================================================
|
|
140
|
-
// Helpers
|
|
141
|
-
// ============================================================================
|
|
142
|
-
/**
|
|
143
|
-
* Whether the given directory (default: live cwd) is inside a git work tree.
|
|
144
|
-
* Not memoized: the answer depends on cwd, which changes over a session.
|
|
145
|
-
*/
|
|
146
|
-
function isGitRepo(cwd = process.cwd()) {
|
|
147
|
-
try {
|
|
148
|
-
git(cwd, 'rev-parse', '--is-inside-work-tree');
|
|
149
|
-
return true;
|
|
150
|
-
}
|
|
151
|
-
catch {
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Resolve the absolute repo root for the given directory (default: live cwd).
|
|
157
|
-
* Returns null if not inside a git work tree.
|
|
158
|
-
*/
|
|
159
|
-
function gitRepoRoot(cwd = process.cwd()) {
|
|
160
|
-
try {
|
|
161
|
-
const root = git(cwd, 'rev-parse', '--show-toplevel').trim();
|
|
162
|
-
return root || null;
|
|
163
|
-
}
|
|
164
|
-
catch {
|
|
165
|
-
return null;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
function git(cwd, ...args) {
|
|
169
|
-
return execFileSync('git', args, {
|
|
170
|
-
cwd,
|
|
171
|
-
encoding: 'utf-8',
|
|
172
|
-
timeout: 5000,
|
|
173
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
//# sourceMappingURL=auto-checkpoint.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auto-checkpoint.js","sourceRoot":"","sources":["../src/auto-checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,8DAA8D;AAC9D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,YAAY;IACZ,OAAO,EAAO,4BAA4B;CAC3C,CAAC,CAAC;AAEH,gEAAgE;AAChE,MAAM,0BAA0B,GAAG;IACjC,QAAQ;IACR,QAAQ;IACR,mBAAmB,EAAG,0BAA0B;IAChD,iCAAiC;IACjC,iBAAiB;IACjB,cAAc;IACd,QAAQ,EAAe,qBAAqB;IAC5C,QAAQ;IACR,cAAc;CACf,CAAC;AAEF,+EAA+E;AAC/E,QAAQ;AACR,+EAA+E;AAE/E,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAC7C,2FAA2F;AAC3F,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAC7C,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAA6B;IAC1E,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,CAAC,SAAS,EAAE;QAAE,OAAO,KAAK,CAAC;IAE/B,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAA6B;IAC1E,IAAI,CAAC,SAAS,EAAE;QAAE,OAAO,IAAI,CAAC;IAE9B,IAAI,CAAC;QACH,6EAA6E;QAC7E,8EAA8E;QAC9E,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,2CAA2C;QAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;QAEzD,wDAAwD;QACxD,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAEvB,mCAAmC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAEhC,2BAA2B;QAC3B,MAAM,UAAU,GAAG,IAAI,KAAK,YAAY;YACtC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YACzB,CAAC,CAAC,IAAI,KAAK,OAAO;gBAChB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC;QAEX,MAAM,OAAO,GAAG,4BAA4B,IAAI,KAAK,UAAU,EAAE,CAAC;QAClE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;QAEpD,sBAAsB;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9D,kBAAkB,GAAG,IAAI,CAAC;QAC1B,kBAAkB,GAAG,IAAI,CAAC;QAC1B,eAAe,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB;QAAE,OAAO,KAAK,CAAC;IAE7D,4EAA4E;IAC5E,wEAAwE;IACxE,kEAAkE;IAClE,IAAI,WAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,WAAW,KAAK,kBAAkB;QAAE,OAAO,KAAK,CAAC;IAErD,IAAI,CAAC;QACH,GAAG,CAAC,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC5C,IAAI,CAAC;QACH,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,GAAG,IAAc;IACzC,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;QAC/B,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calliope CLI - Background Jobs System
|
|
3
|
-
*
|
|
4
|
-
* Run agent tasks in the background while continuing interactive use.
|
|
5
|
-
* Commands: /bg, /jobs, /job, /cancel
|
|
6
|
-
*/
|
|
7
|
-
export type JobStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
8
|
-
export interface BackgroundJob {
|
|
9
|
-
id: string;
|
|
10
|
-
prompt: string;
|
|
11
|
-
status: JobStatus;
|
|
12
|
-
createdAt: string;
|
|
13
|
-
startedAt?: string;
|
|
14
|
-
completedAt?: string;
|
|
15
|
-
result?: string;
|
|
16
|
-
error?: string;
|
|
17
|
-
provider?: string;
|
|
18
|
-
model?: string;
|
|
19
|
-
iterations: number;
|
|
20
|
-
}
|
|
21
|
-
/** Create a new background job */
|
|
22
|
-
export declare function createJob(prompt: string, options?: {
|
|
23
|
-
provider?: string;
|
|
24
|
-
model?: string;
|
|
25
|
-
}): BackgroundJob;
|
|
26
|
-
/** Start executing a job (call this with your agent runner) */
|
|
27
|
-
export declare function runJob(id: string, executor: (prompt: string, signal: AbortSignal) => Promise<{
|
|
28
|
-
result: string;
|
|
29
|
-
iterations: number;
|
|
30
|
-
}>): Promise<BackgroundJob>;
|
|
31
|
-
/** Cancel a running job */
|
|
32
|
-
export declare function cancelJob(id: string): boolean;
|
|
33
|
-
/** Get a specific job */
|
|
34
|
-
export declare function getJob(id: string): BackgroundJob | undefined;
|
|
35
|
-
/** List all jobs, optionally filtered by status */
|
|
36
|
-
export declare function listJobs(statusFilter?: JobStatus): BackgroundJob[];
|
|
37
|
-
/** Get count of active (pending + running) jobs */
|
|
38
|
-
export declare function activeJobCount(): number;
|
|
39
|
-
/** Clear completed/failed/cancelled jobs */
|
|
40
|
-
export declare function clearFinishedJobs(): number;
|
|
41
|
-
/** Format job for display */
|
|
42
|
-
export declare function formatJob(job: BackgroundJob): string;
|
|
43
|
-
/** Format jobs list for display */
|
|
44
|
-
export declare function formatJobsList(): string;
|
|
45
|
-
//# sourceMappingURL=background-jobs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"background-jobs.d.ts","sourceRoot":"","sources":["../src/background-jobs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAErF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,kCAAkC;AAClC,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAaxG;AAED,+DAA+D;AAC/D,wBAAsB,MAAM,CAC1B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GACjG,OAAO,CAAC,aAAa,CAAC,CAgCxB;AAED,2BAA2B;AAC3B,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAa7C;AAED,yBAAyB;AACzB,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE5D;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,EAAE,CAIlE;AAED,mDAAmD;AACnD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,4CAA4C;AAC5C,wBAAgB,iBAAiB,IAAI,MAAM,CAS1C;AAED,6BAA6B;AAC7B,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAcpD;AAED,mCAAmC;AACnC,wBAAgB,cAAc,IAAI,MAAM,CAIvC"}
|
package/dist/background-jobs.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calliope CLI - Background Jobs System
|
|
3
|
-
*
|
|
4
|
-
* Run agent tasks in the background while continuing interactive use.
|
|
5
|
-
* Commands: /bg, /jobs, /job, /cancel
|
|
6
|
-
*/
|
|
7
|
-
// Job registry
|
|
8
|
-
const jobs = new Map();
|
|
9
|
-
const jobRunners = new Map();
|
|
10
|
-
let nextJobId = 1;
|
|
11
|
-
/** Create a new background job */
|
|
12
|
-
export function createJob(prompt, options) {
|
|
13
|
-
const id = `bg-${nextJobId++}`;
|
|
14
|
-
const job = {
|
|
15
|
-
id,
|
|
16
|
-
prompt,
|
|
17
|
-
status: 'pending',
|
|
18
|
-
createdAt: new Date().toISOString(),
|
|
19
|
-
provider: options?.provider,
|
|
20
|
-
model: options?.model,
|
|
21
|
-
iterations: 0,
|
|
22
|
-
};
|
|
23
|
-
jobs.set(id, job);
|
|
24
|
-
return job;
|
|
25
|
-
}
|
|
26
|
-
/** Start executing a job (call this with your agent runner) */
|
|
27
|
-
export async function runJob(id, executor) {
|
|
28
|
-
const job = jobs.get(id);
|
|
29
|
-
if (!job)
|
|
30
|
-
throw new Error(`Job ${id} not found`);
|
|
31
|
-
const controller = new AbortController();
|
|
32
|
-
jobRunners.set(id, controller);
|
|
33
|
-
job.status = 'running';
|
|
34
|
-
job.startedAt = new Date().toISOString();
|
|
35
|
-
try {
|
|
36
|
-
const { result, iterations } = await executor(job.prompt, controller.signal);
|
|
37
|
-
if (controller.signal.aborted) {
|
|
38
|
-
job.status = 'cancelled';
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
job.status = 'completed';
|
|
42
|
-
job.result = result;
|
|
43
|
-
job.iterations = iterations;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
if (controller.signal.aborted) {
|
|
48
|
-
job.status = 'cancelled';
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
job.status = 'failed';
|
|
52
|
-
job.error = err instanceof Error ? err.message : String(err);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
finally {
|
|
56
|
-
job.completedAt = new Date().toISOString();
|
|
57
|
-
jobRunners.delete(id);
|
|
58
|
-
}
|
|
59
|
-
return job;
|
|
60
|
-
}
|
|
61
|
-
/** Cancel a running job */
|
|
62
|
-
export function cancelJob(id) {
|
|
63
|
-
const controller = jobRunners.get(id);
|
|
64
|
-
if (controller) {
|
|
65
|
-
controller.abort();
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
const job = jobs.get(id);
|
|
69
|
-
if (job && job.status === 'pending') {
|
|
70
|
-
job.status = 'cancelled';
|
|
71
|
-
job.completedAt = new Date().toISOString();
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
/** Get a specific job */
|
|
77
|
-
export function getJob(id) {
|
|
78
|
-
return jobs.get(id);
|
|
79
|
-
}
|
|
80
|
-
/** List all jobs, optionally filtered by status */
|
|
81
|
-
export function listJobs(statusFilter) {
|
|
82
|
-
const all = Array.from(jobs.values());
|
|
83
|
-
if (statusFilter)
|
|
84
|
-
return all.filter(j => j.status === statusFilter);
|
|
85
|
-
return all.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
86
|
-
}
|
|
87
|
-
/** Get count of active (pending + running) jobs */
|
|
88
|
-
export function activeJobCount() {
|
|
89
|
-
return Array.from(jobs.values()).filter(j => j.status === 'pending' || j.status === 'running').length;
|
|
90
|
-
}
|
|
91
|
-
/** Clear completed/failed/cancelled jobs */
|
|
92
|
-
export function clearFinishedJobs() {
|
|
93
|
-
let cleared = 0;
|
|
94
|
-
for (const [id, job] of jobs) {
|
|
95
|
-
if (job.status === 'completed' || job.status === 'failed' || job.status === 'cancelled') {
|
|
96
|
-
jobs.delete(id);
|
|
97
|
-
cleared++;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return cleared;
|
|
101
|
-
}
|
|
102
|
-
/** Format job for display */
|
|
103
|
-
export function formatJob(job) {
|
|
104
|
-
const statusIcons = {
|
|
105
|
-
pending: '⏳',
|
|
106
|
-
running: '🔄',
|
|
107
|
-
completed: '✅',
|
|
108
|
-
failed: '❌',
|
|
109
|
-
cancelled: '🚫',
|
|
110
|
-
};
|
|
111
|
-
const icon = statusIcons[job.status];
|
|
112
|
-
const prompt = job.prompt.length > 60 ? job.prompt.slice(0, 57) + '...' : job.prompt;
|
|
113
|
-
let line = `${icon} ${job.id}: ${prompt} [${job.status}]`;
|
|
114
|
-
if (job.iterations > 0)
|
|
115
|
-
line += ` (${job.iterations} iterations)`;
|
|
116
|
-
if (job.error)
|
|
117
|
-
line += `\n Error: ${job.error}`;
|
|
118
|
-
return line;
|
|
119
|
-
}
|
|
120
|
-
/** Format jobs list for display */
|
|
121
|
-
export function formatJobsList() {
|
|
122
|
-
const all = listJobs();
|
|
123
|
-
if (all.length === 0)
|
|
124
|
-
return 'No background jobs.';
|
|
125
|
-
return all.map(formatJob).join('\n');
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=background-jobs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"background-jobs.js","sourceRoot":"","sources":["../src/background-jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/branching.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calliope CLI - Conversation Branching
|
|
3
|
-
*
|
|
4
|
-
* Fork conversations to try different approaches.
|
|
5
|
-
* Supports creating, switching, and merging branches.
|
|
6
|
-
*/
|
|
7
|
-
import type { Message as LLMMessage } from './types.js';
|
|
8
|
-
export interface Branch {
|
|
9
|
-
id: string;
|
|
10
|
-
name: string;
|
|
11
|
-
parentId: string | null;
|
|
12
|
-
parentMessageIndex: number;
|
|
13
|
-
createdAt: string;
|
|
14
|
-
description?: string;
|
|
15
|
-
}
|
|
16
|
-
export interface BranchState {
|
|
17
|
-
currentBranch: string;
|
|
18
|
-
branches: Record<string, Branch>;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Load branch state for a session
|
|
22
|
-
*/
|
|
23
|
-
export declare function loadBranchState(sessionId: string): BranchState;
|
|
24
|
-
/**
|
|
25
|
-
* Save branch state
|
|
26
|
-
*/
|
|
27
|
-
export declare function saveBranchState(sessionId: string, state: BranchState): void;
|
|
28
|
-
/**
|
|
29
|
-
* Create a new branch from current position
|
|
30
|
-
*/
|
|
31
|
-
export declare function createBranch(sessionId: string, name: string, messages: LLMMessage[], description?: string): Branch;
|
|
32
|
-
/**
|
|
33
|
-
* Switch to a different branch
|
|
34
|
-
*/
|
|
35
|
-
export declare function switchBranch(sessionId: string, branchIdOrName: string, currentMessages: LLMMessage[]): LLMMessage[] | null;
|
|
36
|
-
/**
|
|
37
|
-
* List all branches
|
|
38
|
-
*/
|
|
39
|
-
export declare function listBranches(sessionId: string): Branch[];
|
|
40
|
-
/**
|
|
41
|
-
* Get current branch
|
|
42
|
-
*/
|
|
43
|
-
export declare function getCurrentBranch(sessionId: string): Branch;
|
|
44
|
-
/**
|
|
45
|
-
* Delete a branch
|
|
46
|
-
*/
|
|
47
|
-
export declare function deleteBranch(sessionId: string, branchIdOrName: string): boolean;
|
|
48
|
-
/**
|
|
49
|
-
* Rename a branch
|
|
50
|
-
*/
|
|
51
|
-
export declare function renameBranch(sessionId: string, branchIdOrName: string, newName: string): boolean;
|
|
52
|
-
/**
|
|
53
|
-
* Get branch tree for display
|
|
54
|
-
*/
|
|
55
|
-
export declare function getBranchTree(sessionId: string): string;
|
|
56
|
-
//# sourceMappingURL=branching.d.ts.map
|
package/dist/branching.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"branching.d.ts","sourceRoot":"","sources":["../src/branching.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,YAAY,CAAC;AAMxD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AA4BD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAuB9D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAY3E;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,UAAU,EAAE,EACtB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CA4BR;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,UAAU,EAAE,GAC5B,UAAU,EAAE,GAAG,IAAI,CAqBrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAKxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAwB/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAYT;AA8BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA2BvD"}
|
package/dist/branching.js
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Calliope CLI - Conversation Branching
|
|
3
|
-
*
|
|
4
|
-
* Fork conversations to try different approaches.
|
|
5
|
-
* Supports creating, switching, and merging branches.
|
|
6
|
-
*/
|
|
7
|
-
import * as fs from 'fs';
|
|
8
|
-
import * as path from 'path';
|
|
9
|
-
import * as os from 'os';
|
|
10
|
-
// ============================================================================
|
|
11
|
-
// Paths
|
|
12
|
-
// ============================================================================
|
|
13
|
-
const BRANCHES_DIR = path.join(os.homedir(), '.calliope-cli', 'branches');
|
|
14
|
-
function ensureBranchesDir(sessionId) {
|
|
15
|
-
const dir = path.join(BRANCHES_DIR, sessionId);
|
|
16
|
-
if (!fs.existsSync(dir)) {
|
|
17
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
18
|
-
}
|
|
19
|
-
return dir;
|
|
20
|
-
}
|
|
21
|
-
function getStateFile(sessionId) {
|
|
22
|
-
return path.join(ensureBranchesDir(sessionId), 'state.json');
|
|
23
|
-
}
|
|
24
|
-
function getBranchFile(sessionId, branchId) {
|
|
25
|
-
return path.join(ensureBranchesDir(sessionId), `${branchId}.jsonl`);
|
|
26
|
-
}
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// State Management
|
|
29
|
-
// ============================================================================
|
|
30
|
-
/**
|
|
31
|
-
* Load branch state for a session
|
|
32
|
-
*/
|
|
33
|
-
export function loadBranchState(sessionId) {
|
|
34
|
-
const stateFile = getStateFile(sessionId);
|
|
35
|
-
if (fs.existsSync(stateFile)) {
|
|
36
|
-
try {
|
|
37
|
-
return JSON.parse(fs.readFileSync(stateFile, 'utf-8'));
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
// Fall through to default
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
// Default state with main branch
|
|
44
|
-
return {
|
|
45
|
-
currentBranch: 'main',
|
|
46
|
-
branches: {
|
|
47
|
-
main: {
|
|
48
|
-
id: 'main',
|
|
49
|
-
name: 'main',
|
|
50
|
-
parentId: null,
|
|
51
|
-
parentMessageIndex: 0,
|
|
52
|
-
createdAt: new Date().toISOString(),
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Save branch state
|
|
59
|
-
*/
|
|
60
|
-
export function saveBranchState(sessionId, state) {
|
|
61
|
-
const stateFile = getStateFile(sessionId);
|
|
62
|
-
// Atomic write: a crash or concurrent instance must never leave a truncated
|
|
63
|
-
// branch-state file (readers fall back to defaults on parse error).
|
|
64
|
-
const tmp = `${stateFile}.${process.pid}.${Date.now()}.tmp`;
|
|
65
|
-
try {
|
|
66
|
-
fs.writeFileSync(tmp, JSON.stringify(state, null, 2));
|
|
67
|
-
fs.renameSync(tmp, stateFile);
|
|
68
|
-
}
|
|
69
|
-
catch (e) {
|
|
70
|
-
try {
|
|
71
|
-
fs.unlinkSync(tmp);
|
|
72
|
-
}
|
|
73
|
-
catch { /* best effort */ }
|
|
74
|
-
throw e;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// ============================================================================
|
|
78
|
-
// Branch Operations
|
|
79
|
-
// ============================================================================
|
|
80
|
-
/**
|
|
81
|
-
* Create a new branch from current position
|
|
82
|
-
*/
|
|
83
|
-
export function createBranch(sessionId, name, messages, description) {
|
|
84
|
-
const state = loadBranchState(sessionId);
|
|
85
|
-
// Generate unique ID
|
|
86
|
-
const id = `branch_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
|
|
87
|
-
// Create branch
|
|
88
|
-
const branch = {
|
|
89
|
-
id,
|
|
90
|
-
name,
|
|
91
|
-
parentId: state.currentBranch,
|
|
92
|
-
parentMessageIndex: messages.length,
|
|
93
|
-
createdAt: new Date().toISOString(),
|
|
94
|
-
description,
|
|
95
|
-
};
|
|
96
|
-
// Save current messages to parent branch
|
|
97
|
-
saveBranchMessages(sessionId, state.currentBranch, messages);
|
|
98
|
-
// Copy messages to new branch
|
|
99
|
-
saveBranchMessages(sessionId, id, messages);
|
|
100
|
-
// Update state
|
|
101
|
-
state.branches[id] = branch;
|
|
102
|
-
state.currentBranch = id;
|
|
103
|
-
saveBranchState(sessionId, state);
|
|
104
|
-
return branch;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Switch to a different branch
|
|
108
|
-
*/
|
|
109
|
-
export function switchBranch(sessionId, branchIdOrName, currentMessages) {
|
|
110
|
-
const state = loadBranchState(sessionId);
|
|
111
|
-
// Find branch by ID or name
|
|
112
|
-
const branch = Object.values(state.branches).find(b => b.id === branchIdOrName || b.name === branchIdOrName);
|
|
113
|
-
if (!branch)
|
|
114
|
-
return null;
|
|
115
|
-
// Save current branch messages
|
|
116
|
-
saveBranchMessages(sessionId, state.currentBranch, currentMessages);
|
|
117
|
-
// Load target branch messages
|
|
118
|
-
const messages = loadBranchMessages(sessionId, branch.id);
|
|
119
|
-
// Update state
|
|
120
|
-
state.currentBranch = branch.id;
|
|
121
|
-
saveBranchState(sessionId, state);
|
|
122
|
-
return messages;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* List all branches
|
|
126
|
-
*/
|
|
127
|
-
export function listBranches(sessionId) {
|
|
128
|
-
const state = loadBranchState(sessionId);
|
|
129
|
-
return Object.values(state.branches).sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Get current branch
|
|
133
|
-
*/
|
|
134
|
-
export function getCurrentBranch(sessionId) {
|
|
135
|
-
const state = loadBranchState(sessionId);
|
|
136
|
-
return state.branches[state.currentBranch];
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Delete a branch
|
|
140
|
-
*/
|
|
141
|
-
export function deleteBranch(sessionId, branchIdOrName) {
|
|
142
|
-
const state = loadBranchState(sessionId);
|
|
143
|
-
// Find branch
|
|
144
|
-
const branch = Object.values(state.branches).find(b => b.id === branchIdOrName || b.name === branchIdOrName);
|
|
145
|
-
if (!branch || branch.id === 'main')
|
|
146
|
-
return false;
|
|
147
|
-
// Can't delete current branch
|
|
148
|
-
if (state.currentBranch === branch.id)
|
|
149
|
-
return false;
|
|
150
|
-
// Delete branch file
|
|
151
|
-
const branchFile = getBranchFile(sessionId, branch.id);
|
|
152
|
-
if (fs.existsSync(branchFile)) {
|
|
153
|
-
fs.unlinkSync(branchFile);
|
|
154
|
-
}
|
|
155
|
-
// Remove from state
|
|
156
|
-
delete state.branches[branch.id];
|
|
157
|
-
saveBranchState(sessionId, state);
|
|
158
|
-
return true;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Rename a branch
|
|
162
|
-
*/
|
|
163
|
-
export function renameBranch(sessionId, branchIdOrName, newName) {
|
|
164
|
-
const state = loadBranchState(sessionId);
|
|
165
|
-
const branch = Object.values(state.branches).find(b => b.id === branchIdOrName || b.name === branchIdOrName);
|
|
166
|
-
if (!branch)
|
|
167
|
-
return false;
|
|
168
|
-
branch.name = newName;
|
|
169
|
-
saveBranchState(sessionId, state);
|
|
170
|
-
return true;
|
|
171
|
-
}
|
|
172
|
-
// ============================================================================
|
|
173
|
-
// Message Storage
|
|
174
|
-
// ============================================================================
|
|
175
|
-
/**
|
|
176
|
-
* Save messages to branch file (JSONL format)
|
|
177
|
-
*/
|
|
178
|
-
function saveBranchMessages(sessionId, branchId, messages) {
|
|
179
|
-
const file = getBranchFile(sessionId, branchId);
|
|
180
|
-
const content = messages.map(m => JSON.stringify(m)).join('\n');
|
|
181
|
-
fs.writeFileSync(file, content);
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Load messages from branch file
|
|
185
|
-
*/
|
|
186
|
-
function loadBranchMessages(sessionId, branchId) {
|
|
187
|
-
const file = getBranchFile(sessionId, branchId);
|
|
188
|
-
if (!fs.existsSync(file))
|
|
189
|
-
return [];
|
|
190
|
-
try {
|
|
191
|
-
const content = fs.readFileSync(file, 'utf-8');
|
|
192
|
-
return content.split('\n').filter(Boolean).map(line => JSON.parse(line));
|
|
193
|
-
}
|
|
194
|
-
catch {
|
|
195
|
-
return [];
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Get branch tree for display
|
|
200
|
-
*/
|
|
201
|
-
export function getBranchTree(sessionId) {
|
|
202
|
-
const state = loadBranchState(sessionId);
|
|
203
|
-
const branches = Object.values(state.branches);
|
|
204
|
-
const lines = [];
|
|
205
|
-
function addBranch(branch, indent, isLast) {
|
|
206
|
-
const prefix = isLast ? '└── ' : '├── ';
|
|
207
|
-
const current = branch.id === state.currentBranch ? ' *' : '';
|
|
208
|
-
const desc = branch.description ? ` (${branch.description})` : '';
|
|
209
|
-
lines.push(`${indent}${prefix}${branch.name}${current}${desc}`);
|
|
210
|
-
// Find children
|
|
211
|
-
const children = branches.filter(b => b.parentId === branch.id);
|
|
212
|
-
const childIndent = indent + (isLast ? ' ' : '│ ');
|
|
213
|
-
children.forEach((child, i) => {
|
|
214
|
-
addBranch(child, childIndent, i === children.length - 1);
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
// Start with main branch
|
|
218
|
-
const main = branches.find(b => b.id === 'main');
|
|
219
|
-
if (main) {
|
|
220
|
-
addBranch(main, '', true);
|
|
221
|
-
}
|
|
222
|
-
return lines.join('\n');
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=branching.js.map
|
package/dist/branching.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"branching.js","sourceRoot":"","sources":["../src/branching.ts"],"names":[],"mappings":"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"}
|