@calliopelabs/cli 0.8.20 → 2.0.2
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/dist/agents/agent-config-loader.d.ts +60 -0
- package/dist/agents/agent-config-loader.d.ts.map +1 -0
- package/dist/agents/agent-config-loader.js +402 -0
- package/dist/agents/agent-config-loader.js.map +1 -0
- package/dist/agents/agent-config-presets.d.ts +10 -0
- package/dist/agents/agent-config-presets.d.ts.map +1 -0
- package/dist/agents/agent-config-presets.js +940 -0
- package/dist/agents/agent-config-presets.js.map +1 -0
- package/dist/agents/agent-config-types.d.ts +145 -0
- package/dist/agents/agent-config-types.d.ts.map +1 -0
- package/dist/agents/agent-config-types.js +12 -0
- package/dist/agents/agent-config-types.js.map +1 -0
- package/dist/{agterm → agents}/agent-detection.d.ts +1 -1
- package/dist/{agterm → agents}/agent-detection.d.ts.map +1 -1
- package/dist/{agterm → agents}/agent-detection.js +21 -5
- package/dist/agents/agent-detection.js.map +1 -0
- package/dist/agents/aggregator.d.ts +19 -0
- package/dist/agents/aggregator.d.ts.map +1 -0
- package/dist/agents/aggregator.js +141 -0
- package/dist/agents/aggregator.js.map +1 -0
- package/dist/{agterm → agents}/cli-backend.d.ts +1 -1
- package/dist/{agterm → agents}/cli-backend.d.ts.map +1 -1
- package/dist/{agterm → agents}/cli-backend.js +90 -12
- package/dist/agents/cli-backend.js.map +1 -0
- package/dist/agents/council-types.d.ts +113 -0
- package/dist/agents/council-types.d.ts.map +1 -0
- package/dist/agents/council-types.js +81 -0
- package/dist/agents/council-types.js.map +1 -0
- package/dist/agents/council.d.ts +107 -0
- package/dist/agents/council.d.ts.map +1 -0
- package/dist/agents/council.js +586 -0
- package/dist/agents/council.js.map +1 -0
- package/dist/agents/decomposer.d.ts +33 -0
- package/dist/agents/decomposer.d.ts.map +1 -0
- package/dist/agents/decomposer.js +138 -0
- package/dist/agents/decomposer.js.map +1 -0
- package/dist/agents/dynamic-tools.d.ts +52 -0
- package/dist/agents/dynamic-tools.d.ts.map +1 -0
- package/dist/agents/dynamic-tools.js +395 -0
- package/dist/agents/dynamic-tools.js.map +1 -0
- package/dist/agents/index.d.ts +29 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +29 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/installer.d.ts +39 -0
- package/dist/agents/installer.d.ts.map +1 -0
- package/dist/agents/installer.js +205 -0
- package/dist/agents/installer.js.map +1 -0
- package/dist/{agterm → agents}/orchestrator.d.ts +7 -2
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/{agterm → agents}/orchestrator.js +22 -2
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/sdk-backend.d.ts +63 -0
- package/dist/agents/sdk-backend.d.ts.map +1 -0
- package/dist/agents/sdk-backend.js +489 -0
- package/dist/agents/sdk-backend.js.map +1 -0
- package/dist/agents/swarm-types.d.ts +83 -0
- package/dist/agents/swarm-types.d.ts.map +1 -0
- package/dist/agents/swarm-types.js +20 -0
- package/dist/agents/swarm-types.js.map +1 -0
- package/dist/agents/swarm.d.ts +74 -0
- package/dist/agents/swarm.d.ts.map +1 -0
- package/dist/agents/swarm.js +307 -0
- package/dist/agents/swarm.js.map +1 -0
- package/dist/{agterm → agents}/tools.d.ts +7 -5
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +776 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/{agterm → agents}/types.d.ts +14 -2
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/{agterm → agents}/types.js +2 -2
- package/dist/agents/types.js.map +1 -0
- package/dist/api-server.d.ts +26 -0
- package/dist/api-server.d.ts.map +1 -0
- package/dist/api-server.js +230 -0
- package/dist/api-server.js.map +1 -0
- package/dist/auto-checkpoint.d.ts +35 -0
- package/dist/auto-checkpoint.d.ts.map +1 -0
- package/dist/auto-checkpoint.js +143 -0
- package/dist/auto-checkpoint.js.map +1 -0
- package/dist/auto-compressor.d.ts +44 -0
- package/dist/auto-compressor.d.ts.map +1 -0
- package/dist/auto-compressor.js +145 -0
- package/dist/auto-compressor.js.map +1 -0
- package/dist/background-jobs.d.ts +45 -0
- package/dist/background-jobs.d.ts.map +1 -0
- package/dist/background-jobs.js +122 -0
- package/dist/background-jobs.js.map +1 -0
- package/dist/bin.d.ts +6 -2
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +127 -24
- package/dist/bin.js.map +1 -1
- package/dist/checkpoint.d.ts +49 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +219 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/circuit-breaker/breaker.d.ts +80 -0
- package/dist/circuit-breaker/breaker.d.ts.map +1 -0
- package/dist/circuit-breaker/breaker.js +408 -0
- package/dist/circuit-breaker/breaker.js.map +1 -0
- package/dist/circuit-breaker/defaults.d.ts +8 -0
- package/dist/circuit-breaker/defaults.d.ts.map +1 -0
- package/dist/circuit-breaker/defaults.js +35 -0
- package/dist/circuit-breaker/defaults.js.map +1 -0
- package/dist/circuit-breaker/index.d.ts +9 -0
- package/dist/circuit-breaker/index.d.ts.map +1 -0
- package/dist/circuit-breaker/index.js +8 -0
- package/dist/circuit-breaker/index.js.map +1 -0
- package/dist/circuit-breaker/types.d.ts +77 -0
- package/dist/circuit-breaker/types.d.ts.map +1 -0
- package/dist/circuit-breaker/types.js +8 -0
- package/dist/circuit-breaker/types.js.map +1 -0
- package/dist/circuit-breaker.d.ts +8 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +7 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/cli/agent.d.ts +9 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +262 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/commands.d.ts +12 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/{cli.js → cli/commands.js} +285 -422
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +222 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/types.d.ts +30 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +20 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/companions.d.ts +54 -0
- package/dist/companions.d.ts.map +1 -0
- package/dist/companions.js +440 -0
- package/dist/companions.js.map +1 -0
- package/dist/config.d.ts +23 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +95 -22
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +27 -0
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +415 -10
- package/dist/diff.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -11
- package/dist/errors.js.map +1 -1
- package/dist/git-status.d.ts +23 -0
- package/dist/git-status.d.ts.map +1 -0
- package/dist/git-status.js +92 -0
- package/dist/git-status.js.map +1 -0
- package/dist/headless.d.ts +25 -0
- package/dist/headless.d.ts.map +1 -0
- package/dist/headless.js +182 -0
- package/dist/headless.js.map +1 -0
- package/dist/hud/api.d.ts +35 -0
- package/dist/hud/api.d.ts.map +1 -0
- package/dist/hud/api.js +448 -0
- package/dist/hud/api.js.map +1 -0
- package/dist/hud/palettes.d.ts +9 -0
- package/dist/hud/palettes.d.ts.map +1 -0
- package/dist/hud/palettes.js +280 -0
- package/dist/hud/palettes.js.map +1 -0
- package/dist/hud/skins.d.ts +12 -0
- package/dist/hud/skins.d.ts.map +1 -0
- package/dist/hud/skins.js +365 -0
- package/dist/hud/skins.js.map +1 -0
- package/dist/hud/theme-packs/api.d.ts +51 -0
- package/dist/hud/theme-packs/api.d.ts.map +1 -0
- package/dist/hud/theme-packs/api.js +145 -0
- package/dist/hud/theme-packs/api.js.map +1 -0
- package/dist/hud/theme-packs/index.d.ts +18 -0
- package/dist/hud/theme-packs/index.d.ts.map +1 -0
- package/dist/hud/theme-packs/index.js +38 -0
- package/dist/hud/theme-packs/index.js.map +1 -0
- package/dist/hud/theme-packs/types.d.ts +29 -0
- package/dist/hud/theme-packs/types.d.ts.map +1 -0
- package/dist/hud/theme-packs/types.js +9 -0
- package/dist/hud/theme-packs/types.js.map +1 -0
- package/dist/hud/types.d.ts +182 -0
- package/dist/hud/types.d.ts.map +1 -0
- package/dist/hud/types.js +7 -0
- package/dist/hud/types.js.map +1 -0
- package/dist/idle-eviction.d.ts +34 -0
- package/dist/idle-eviction.d.ts.map +1 -0
- package/dist/idle-eviction.js +78 -0
- package/dist/idle-eviction.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/iteration-ledger.d.ts +105 -0
- package/dist/iteration-ledger.d.ts.map +1 -0
- package/dist/iteration-ledger.js +237 -0
- package/dist/iteration-ledger.js.map +1 -0
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js +1 -27
- package/dist/markdown.js.map +1 -1
- package/dist/mcp.d.ts +35 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +291 -7
- package/dist/mcp.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +12 -2
- package/dist/memory.js.map +1 -1
- package/dist/model-detection.d.ts +5 -0
- package/dist/model-detection.d.ts.map +1 -1
- package/dist/model-detection.js +278 -10
- package/dist/model-detection.js.map +1 -1
- package/dist/model-router.d.ts.map +1 -1
- package/dist/model-router.js +33 -11
- package/dist/model-router.js.map +1 -1
- package/dist/plugins.d.ts +8 -0
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +97 -6
- package/dist/plugins.js.map +1 -1
- package/dist/providers/anthropic.d.ts +10 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +221 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/bedrock.d.ts +17 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +574 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/compat.d.ts +13 -0
- package/dist/providers/compat.d.ts.map +1 -0
- package/dist/providers/compat.js +202 -0
- package/dist/providers/compat.js.map +1 -0
- package/dist/providers/google.d.ts +10 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +203 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +23 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +145 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama.d.ts +17 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +289 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +121 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +485 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +63 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +164 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/sandbox-native.d.ts +59 -0
- package/dist/sandbox-native.d.ts.map +1 -0
- package/dist/sandbox-native.js +292 -0
- package/dist/sandbox-native.js.map +1 -0
- package/dist/sandbox.d.ts +2 -2
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +59 -13
- package/dist/sandbox.js.map +1 -1
- package/dist/scope.d.ts +3 -1
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js +13 -1
- package/dist/scope.js.map +1 -1
- package/dist/session-timeout.d.ts +31 -0
- package/dist/session-timeout.d.ts.map +1 -0
- package/dist/session-timeout.js +100 -0
- package/dist/session-timeout.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +29 -17
- package/dist/setup.js.map +1 -1
- package/dist/smart-router.d.ts +73 -0
- package/dist/smart-router.d.ts.map +1 -0
- package/dist/smart-router.js +332 -0
- package/dist/smart-router.js.map +1 -0
- package/dist/storage.d.ts +19 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +164 -1
- package/dist/storage.js.map +1 -1
- package/dist/streaming.d.ts +4 -0
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +12 -0
- package/dist/streaming.js.map +1 -1
- package/dist/styles.d.ts +32 -0
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +91 -0
- package/dist/styles.js.map +1 -1
- package/dist/summarization.d.ts +1 -1
- package/dist/summarization.js +4 -4
- package/dist/summarization.js.map +1 -1
- package/dist/terminal-image.d.ts +115 -0
- package/dist/terminal-image.d.ts.map +1 -0
- package/dist/terminal-image.js +766 -0
- package/dist/terminal-image.js.map +1 -0
- package/dist/terminal-recording.d.ts +55 -0
- package/dist/terminal-recording.d.ts.map +1 -0
- package/dist/terminal-recording.js +182 -0
- package/dist/terminal-recording.js.map +1 -0
- package/dist/themes.d.ts +19 -35
- package/dist/themes.d.ts.map +1 -1
- package/dist/themes.js +101 -210
- package/dist/themes.js.map +1 -1
- package/dist/tmux.d.ts +35 -0
- package/dist/tmux.d.ts.map +1 -0
- package/dist/tmux.js +106 -0
- package/dist/tmux.js.map +1 -0
- package/dist/tools.d.ts +3 -3
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +587 -45
- package/dist/tools.js.map +1 -1
- package/dist/trust.d.ts +53 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +154 -0
- package/dist/trust.js.map +1 -0
- package/dist/types.d.ts +7 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +70 -32
- package/dist/types.js.map +1 -1
- package/dist/ui/agent.d.ts +61 -0
- package/dist/ui/agent.d.ts.map +1 -0
- package/dist/ui/agent.js +768 -0
- package/dist/ui/agent.js.map +1 -0
- package/dist/ui/chat-input.d.ts +32 -0
- package/dist/ui/chat-input.d.ts.map +1 -0
- package/dist/ui/chat-input.js +355 -0
- package/dist/ui/chat-input.js.map +1 -0
- package/dist/ui/commands.d.ts +92 -0
- package/dist/ui/commands.d.ts.map +1 -0
- package/dist/ui/commands.js +3006 -0
- package/dist/ui/commands.js.map +1 -0
- package/dist/ui/completions.d.ts +22 -0
- package/dist/ui/completions.d.ts.map +1 -0
- package/dist/ui/completions.js +215 -0
- package/dist/ui/completions.js.map +1 -0
- package/dist/ui/components.d.ts +38 -0
- package/dist/ui/components.d.ts.map +1 -0
- package/dist/ui/components.js +422 -0
- package/dist/ui/components.js.map +1 -0
- package/dist/ui/context.d.ts +12 -0
- package/dist/ui/context.d.ts.map +1 -0
- package/dist/ui/context.js +102 -0
- package/dist/ui/context.js.map +1 -0
- package/dist/ui/error-boundary.d.ts +33 -0
- package/dist/ui/error-boundary.d.ts.map +1 -0
- package/dist/ui/error-boundary.js +94 -0
- package/dist/ui/error-boundary.js.map +1 -0
- package/dist/ui/frame.d.ts +13 -0
- package/dist/ui/frame.d.ts.map +1 -0
- package/dist/ui/frame.js +89 -0
- package/dist/ui/frame.js.map +1 -0
- package/dist/ui/index.d.ts +12 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +928 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/messages.d.ts +19 -0
- package/dist/ui/messages.d.ts.map +1 -0
- package/dist/ui/messages.js +181 -0
- package/dist/ui/messages.js.map +1 -0
- package/dist/ui/modals.d.ts +52 -0
- package/dist/ui/modals.d.ts.map +1 -0
- package/dist/ui/modals.js +204 -0
- package/dist/ui/modals.js.map +1 -0
- package/dist/ui/pack-picker.d.ts +12 -0
- package/dist/ui/pack-picker.d.ts.map +1 -0
- package/dist/ui/pack-picker.js +101 -0
- package/dist/ui/pack-picker.js.map +1 -0
- package/dist/ui/status-bar.d.ts +20 -0
- package/dist/ui/status-bar.d.ts.map +1 -0
- package/dist/ui/status-bar.js +41 -0
- package/dist/ui/status-bar.js.map +1 -0
- package/dist/ui/theme-picker.d.ts +24 -0
- package/dist/ui/theme-picker.d.ts.map +1 -0
- package/dist/ui/theme-picker.js +190 -0
- package/dist/ui/theme-picker.js.map +1 -0
- package/dist/ui/types.d.ts +62 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +7 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +1 -9
- package/dist/version-check.js.map +1 -1
- package/package.json +8 -3
- package/dist/agterm/agent-detection.js.map +0 -1
- package/dist/agterm/cli-backend.js.map +0 -1
- package/dist/agterm/index.d.ts +0 -12
- package/dist/agterm/index.d.ts.map +0 -1
- package/dist/agterm/index.js +0 -15
- package/dist/agterm/index.js.map +0 -1
- package/dist/agterm/orchestrator.d.ts.map +0 -1
- package/dist/agterm/orchestrator.js.map +0 -1
- package/dist/agterm/tools.d.ts.map +0 -1
- package/dist/agterm/tools.js +0 -278
- package/dist/agterm/tools.js.map +0 -1
- package/dist/agterm/types.d.ts.map +0 -1
- package/dist/agterm/types.js.map +0 -1
- package/dist/cli.d.ts +0 -14
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/providers.d.ts +0 -51
- package/dist/providers.d.ts.map +0 -1
- package/dist/providers.js +0 -1146
- package/dist/providers.js.map +0 -1
- package/dist/ui-cli.d.ts +0 -17
- package/dist/ui-cli.d.ts.map +0 -1
- package/dist/ui-cli.js +0 -3730
- package/dist/ui-cli.js.map +0 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - LLM-Based Auto-Compression
|
|
3
|
+
*
|
|
4
|
+
* Automatically compresses conversation context using LLM summarization
|
|
5
|
+
* when approaching token limits. Falls back to heuristic summarization.
|
|
6
|
+
*/
|
|
7
|
+
import { chat } from './providers/index.js';
|
|
8
|
+
import { summarizeMessages, estimateTotalTokens } from './summarization.js';
|
|
9
|
+
const DEFAULT_CONFIG = {
|
|
10
|
+
enabled: true,
|
|
11
|
+
triggerThreshold: 75,
|
|
12
|
+
targetThreshold: 50,
|
|
13
|
+
preserveRecent: 10,
|
|
14
|
+
useLlm: true,
|
|
15
|
+
};
|
|
16
|
+
let config = { ...DEFAULT_CONFIG };
|
|
17
|
+
/** Configure auto-compressor */
|
|
18
|
+
export function configureAutoCompressor(opts) {
|
|
19
|
+
config = { ...config, ...opts };
|
|
20
|
+
}
|
|
21
|
+
/** Get current config */
|
|
22
|
+
export function getAutoCompressorConfig() {
|
|
23
|
+
return { ...config };
|
|
24
|
+
}
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// LLM-Based Summarization
|
|
27
|
+
// ============================================================================
|
|
28
|
+
const COMPRESSION_PROMPT = `You are a conversation summarizer. Compress the following conversation into a concise summary that preserves:
|
|
29
|
+
1. Key decisions and their reasoning
|
|
30
|
+
2. Files modified and their changes
|
|
31
|
+
3. Commands executed and their outcomes
|
|
32
|
+
4. Current task status and next steps
|
|
33
|
+
5. Any errors encountered and how they were resolved
|
|
34
|
+
|
|
35
|
+
Be concise but complete. Use bullet points. Do not lose important technical details like file paths, function names, or error messages.
|
|
36
|
+
|
|
37
|
+
Conversation to summarize:`;
|
|
38
|
+
/**
|
|
39
|
+
* Summarize messages using an LLM call.
|
|
40
|
+
* Returns the summary text, or null if LLM call fails.
|
|
41
|
+
*/
|
|
42
|
+
export async function llmSummarize(messages, provider, model) {
|
|
43
|
+
try {
|
|
44
|
+
// Build conversation text for the summarizer
|
|
45
|
+
const conversationText = messages.map(m => {
|
|
46
|
+
const content = typeof m.content === 'string' ? m.content :
|
|
47
|
+
m.content.filter(b => b.type === 'text').map(b => b.text).join('\n');
|
|
48
|
+
const prefix = m.role === 'user' ? 'User' : m.role === 'assistant' ? 'Assistant' : m.role === 'tool' ? 'Tool' : 'System';
|
|
49
|
+
return `${prefix}: ${content.slice(0, 2000)}`; // Cap per-message length
|
|
50
|
+
}).join('\n\n');
|
|
51
|
+
const emptyTools = [];
|
|
52
|
+
const summaryMessages = [
|
|
53
|
+
{ role: 'system', content: 'You are a precise conversation summarizer. Output only the summary, no preamble.' },
|
|
54
|
+
{ role: 'user', content: `${COMPRESSION_PROMPT}\n\n${conversationText}` },
|
|
55
|
+
];
|
|
56
|
+
const response = await chat(provider, summaryMessages, emptyTools, model);
|
|
57
|
+
if (response.content && response.content.length > 20) {
|
|
58
|
+
return response.content;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if compression is needed and compress if so.
|
|
68
|
+
* Returns the (possibly compressed) message array.
|
|
69
|
+
*/
|
|
70
|
+
export async function autoCompress(messages, contextLimit, provider, model) {
|
|
71
|
+
const currentTokens = estimateTotalTokens(messages);
|
|
72
|
+
const triggerAt = contextLimit * (config.triggerThreshold / 100);
|
|
73
|
+
// Not over threshold — no compression needed
|
|
74
|
+
if (!config.enabled || currentTokens < triggerAt) {
|
|
75
|
+
return {
|
|
76
|
+
compressed: false,
|
|
77
|
+
method: 'none',
|
|
78
|
+
messages,
|
|
79
|
+
originalTokens: currentTokens,
|
|
80
|
+
compressedTokens: currentTokens,
|
|
81
|
+
summarizedCount: 0,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Separate system messages and recent messages
|
|
85
|
+
// Adapt preserveRecent for small context models (real-world models are >= 2048 tokens)
|
|
86
|
+
// Only override when contextLimit represents a real small model, not test values
|
|
87
|
+
const effectivePreserve = contextLimit >= 2048 && contextLimit < 8000 ? Math.min(config.preserveRecent, 2)
|
|
88
|
+
: contextLimit >= 8000 && contextLimit < 16000 ? Math.min(config.preserveRecent, 4)
|
|
89
|
+
: contextLimit >= 16000 && contextLimit < 32000 ? Math.min(config.preserveRecent, 6)
|
|
90
|
+
: config.preserveRecent;
|
|
91
|
+
const systemMessages = messages.filter(m => m.role === 'system');
|
|
92
|
+
const nonSystem = messages.filter(m => m.role !== 'system');
|
|
93
|
+
const preserveCount = Math.min(effectivePreserve, nonSystem.length);
|
|
94
|
+
const toSummarize = nonSystem.slice(0, nonSystem.length - preserveCount);
|
|
95
|
+
const toKeep = nonSystem.slice(nonSystem.length - preserveCount);
|
|
96
|
+
if (toSummarize.length === 0) {
|
|
97
|
+
return {
|
|
98
|
+
compressed: false,
|
|
99
|
+
method: 'none',
|
|
100
|
+
messages,
|
|
101
|
+
originalTokens: currentTokens,
|
|
102
|
+
compressedTokens: currentTokens,
|
|
103
|
+
summarizedCount: 0,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Try LLM summarization first
|
|
107
|
+
let summary = null;
|
|
108
|
+
let method = 'heuristic';
|
|
109
|
+
if (config.useLlm) {
|
|
110
|
+
summary = await llmSummarize(toSummarize, provider, config.compressionModel || model);
|
|
111
|
+
if (summary)
|
|
112
|
+
method = 'llm';
|
|
113
|
+
}
|
|
114
|
+
// Fallback to heuristic
|
|
115
|
+
if (!summary) {
|
|
116
|
+
summary = summarizeMessages(toSummarize);
|
|
117
|
+
method = 'heuristic';
|
|
118
|
+
}
|
|
119
|
+
// Build compressed messages
|
|
120
|
+
const compressed = [
|
|
121
|
+
...systemMessages,
|
|
122
|
+
{ role: 'system', content: `[Auto-compressed context — ${method} summary of ${toSummarize.length} messages]\n\n${summary}` },
|
|
123
|
+
...toKeep,
|
|
124
|
+
];
|
|
125
|
+
const compressedTokens = estimateTotalTokens(compressed);
|
|
126
|
+
return {
|
|
127
|
+
compressed: true,
|
|
128
|
+
method,
|
|
129
|
+
messages: compressed,
|
|
130
|
+
originalTokens: currentTokens,
|
|
131
|
+
compressedTokens,
|
|
132
|
+
summarizedCount: toSummarize.length,
|
|
133
|
+
summary,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Check if compression should be triggered (without actually compressing).
|
|
138
|
+
* Useful for status display.
|
|
139
|
+
*/
|
|
140
|
+
export function shouldCompress(currentTokens, contextLimit) {
|
|
141
|
+
if (!config.enabled)
|
|
142
|
+
return false;
|
|
143
|
+
return currentTokens >= contextLimit * (config.triggerThreshold / 100);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=auto-compressor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-compressor.js","sourceRoot":"","sources":["../src/auto-compressor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAgB5E,MAAM,cAAc,GAAyB;IAC3C,OAAO,EAAE,IAAI;IACb,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,IAAI,MAAM,GAAyB,EAAE,GAAG,cAAc,EAAE,CAAC;AAEzD,gCAAgC;AAChC,MAAM,UAAU,uBAAuB,CAAC,IAAmC;IACzE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,uBAAuB;IACrC,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACvB,CAAC;AAED,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,kBAAkB,GAAG;;;;;;;;;2BASA,CAAC;AAE5B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAsB,EACtB,QAAqB,EACrB,KAAc;IAEd,IAAI,CAAC;QACH,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACxC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACzD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7F,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzH,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAE,yBAAyB;QAC3E,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,UAAU,GAAW,EAAE,CAAC;QAC9B,MAAM,eAAe,GAAiB;YACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,kFAAkF,EAAE;YAC/G,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,OAAO,gBAAgB,EAAE,EAAE;SAC1E,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACrD,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAgBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAsB,EACtB,YAAoB,EACpB,QAAqB,EACrB,KAAc;IAEd,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,YAAY,GAAG,CAAC,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC;IAEjE,6CAA6C;IAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,aAAa,GAAG,SAAS,EAAE,CAAC;QACjD,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,MAAM;YACd,QAAQ;YACR,cAAc,EAAE,aAAa;YAC7B,gBAAgB,EAAE,aAAa;YAC/B,eAAe,EAAE,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,uFAAuF;IACvF,iFAAiF;IACjF,MAAM,iBAAiB,GAAG,YAAY,IAAI,IAAI,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACxG,CAAC,CAAC,YAAY,IAAI,IAAI,IAAI,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACnF,CAAC,CAAC,YAAY,IAAI,KAAK,IAAI,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;gBACpF,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAC1B,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IAEjE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,MAAM;YACd,QAAQ;YACR,cAAc,EAAE,aAAa;YAC7B,gBAAgB,EAAE,aAAa;YAC/B,eAAe,EAAE,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,MAAM,GAAwB,WAAW,CAAC;IAE9C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC;QACtF,IAAI,OAAO;YAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,GAAG,WAAW,CAAC;IACvB,CAAC;IAED,4BAA4B;IAC5B,MAAM,UAAU,GAAiB;QAC/B,GAAG,cAAc;QACjB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,8BAA8B,MAAM,eAAe,WAAW,CAAC,MAAM,iBAAiB,OAAO,EAAE,EAAE;QAC5H,GAAG,MAAM;KACV,CAAC;IAEF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEzD,OAAO;QACL,UAAU,EAAE,IAAI;QAChB,MAAM;QACN,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,aAAa;QAC7B,gBAAgB;QAChB,eAAe,EAAE,WAAW,CAAC,MAAM;QACnC,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,aAAqB,EAAE,YAAoB;IACxE,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,aAAa,IAAI,YAAY,GAAG,CAAC,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,CA4BxB;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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
job.status = 'completed';
|
|
38
|
+
job.result = result;
|
|
39
|
+
job.iterations = iterations;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (controller.signal.aborted) {
|
|
43
|
+
job.status = 'cancelled';
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
job.status = 'failed';
|
|
47
|
+
job.error = err instanceof Error ? err.message : String(err);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
job.completedAt = new Date().toISOString();
|
|
52
|
+
jobRunners.delete(id);
|
|
53
|
+
}
|
|
54
|
+
return job;
|
|
55
|
+
}
|
|
56
|
+
/** Cancel a running job */
|
|
57
|
+
export function cancelJob(id) {
|
|
58
|
+
const controller = jobRunners.get(id);
|
|
59
|
+
if (controller) {
|
|
60
|
+
controller.abort();
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
const job = jobs.get(id);
|
|
64
|
+
if (job && job.status === 'pending') {
|
|
65
|
+
job.status = 'cancelled';
|
|
66
|
+
job.completedAt = new Date().toISOString();
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
/** Get a specific job */
|
|
72
|
+
export function getJob(id) {
|
|
73
|
+
return jobs.get(id);
|
|
74
|
+
}
|
|
75
|
+
/** List all jobs, optionally filtered by status */
|
|
76
|
+
export function listJobs(statusFilter) {
|
|
77
|
+
const all = Array.from(jobs.values());
|
|
78
|
+
if (statusFilter)
|
|
79
|
+
return all.filter(j => j.status === statusFilter);
|
|
80
|
+
return all.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
81
|
+
}
|
|
82
|
+
/** Get count of active (pending + running) jobs */
|
|
83
|
+
export function activeJobCount() {
|
|
84
|
+
return Array.from(jobs.values()).filter(j => j.status === 'pending' || j.status === 'running').length;
|
|
85
|
+
}
|
|
86
|
+
/** Clear completed/failed/cancelled jobs */
|
|
87
|
+
export function clearFinishedJobs() {
|
|
88
|
+
let cleared = 0;
|
|
89
|
+
for (const [id, job] of jobs) {
|
|
90
|
+
if (job.status === 'completed' || job.status === 'failed' || job.status === 'cancelled') {
|
|
91
|
+
jobs.delete(id);
|
|
92
|
+
cleared++;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return cleared;
|
|
96
|
+
}
|
|
97
|
+
/** Format job for display */
|
|
98
|
+
export function formatJob(job) {
|
|
99
|
+
const statusIcons = {
|
|
100
|
+
pending: '⏳',
|
|
101
|
+
running: '🔄',
|
|
102
|
+
completed: '✅',
|
|
103
|
+
failed: '❌',
|
|
104
|
+
cancelled: '🚫',
|
|
105
|
+
};
|
|
106
|
+
const icon = statusIcons[job.status];
|
|
107
|
+
const prompt = job.prompt.length > 60 ? job.prompt.slice(0, 57) + '...' : job.prompt;
|
|
108
|
+
let line = `${icon} ${job.id}: ${prompt} [${job.status}]`;
|
|
109
|
+
if (job.iterations > 0)
|
|
110
|
+
line += ` (${job.iterations} iterations)`;
|
|
111
|
+
if (job.error)
|
|
112
|
+
line += `\n Error: ${job.error}`;
|
|
113
|
+
return line;
|
|
114
|
+
}
|
|
115
|
+
/** Format jobs list for display */
|
|
116
|
+
export function formatJobsList() {
|
|
117
|
+
const all = listJobs();
|
|
118
|
+
if (all.length === 0)
|
|
119
|
+
return 'No background jobs.';
|
|
120
|
+
return all.map(formatJob).join('\n');
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=background-jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-jobs.js","sourceRoot":"","sources":["../src/background-jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/bin.d.ts
CHANGED
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Calliope CLI - Main Entry Point
|
|
4
4
|
*
|
|
5
|
-
* Multi-model AI agent CLI with
|
|
5
|
+
* Multi-model AI agent CLI with autonomous agent loops.
|
|
6
6
|
* Run `calliope` to start an interactive session.
|
|
7
7
|
*/
|
|
8
8
|
declare const skipPermissions: boolean;
|
|
9
9
|
declare const agtermEnabled: boolean;
|
|
10
|
-
|
|
10
|
+
declare const useHeadless: boolean;
|
|
11
|
+
declare const envSkin: string | undefined;
|
|
12
|
+
declare const envPalette: string | undefined;
|
|
13
|
+
declare const envCompanion: string | undefined;
|
|
14
|
+
export { skipPermissions, agtermEnabled, useHeadless, envSkin, envPalette, envCompanion };
|
|
11
15
|
//# sourceMappingURL=bin.d.ts.map
|
package/dist/bin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AA6CH,QAAA,MAAM,eAAe,SACsB,CAAC;AAM5C,QAAA,MAAM,aAAa,SAAgF,CAAC;AAGpG,QAAA,MAAM,WAAW,SAA8G,CAAC;AAMhI,QAAA,MAAM,OAAO,oBAA4B,CAAC;AAC1C,QAAA,MAAM,UAAU,oBAA+B,CAAC;AAChD,QAAA,MAAM,YAAY,oBAAiC,CAAC;AAGpD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/bin.js
CHANGED
|
@@ -2,12 +2,49 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Calliope CLI - Main Entry Point
|
|
4
4
|
*
|
|
5
|
-
* Multi-model AI agent CLI with
|
|
5
|
+
* Multi-model AI agent CLI with autonomous agent loops.
|
|
6
6
|
* Run `calliope` to start an interactive session.
|
|
7
7
|
*/
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
8
10
|
import { runSetup } from './setup.js';
|
|
9
11
|
import * as config from './config.js';
|
|
10
12
|
import { getVersion, checkForUpdates, getLatestVersion, performUpgrade } from './version-check.js';
|
|
13
|
+
import { colors } from './styles.js';
|
|
14
|
+
// Load .env / cli.env files (dotenv-style, no dependency)
|
|
15
|
+
function loadEnvFile(filePath) {
|
|
16
|
+
try {
|
|
17
|
+
if (!fs.existsSync(filePath))
|
|
18
|
+
return;
|
|
19
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
20
|
+
for (const line of content.split('\n')) {
|
|
21
|
+
const trimmed = line.trim();
|
|
22
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
23
|
+
continue;
|
|
24
|
+
// Strip optional "export " prefix
|
|
25
|
+
const assignment = trimmed.replace(/^export\s+/, '');
|
|
26
|
+
const eqIndex = assignment.indexOf('=');
|
|
27
|
+
if (eqIndex === -1)
|
|
28
|
+
continue;
|
|
29
|
+
const key = assignment.slice(0, eqIndex).trim();
|
|
30
|
+
let value = assignment.slice(eqIndex + 1).trim();
|
|
31
|
+
// Strip surrounding quotes
|
|
32
|
+
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
33
|
+
value = value.slice(1, -1);
|
|
34
|
+
}
|
|
35
|
+
// Don't overwrite existing env vars
|
|
36
|
+
if (!process.env[key]) {
|
|
37
|
+
process.env[key] = value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Silently ignore unreadable env files
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Check for env files in cwd and home directory (cwd takes priority)
|
|
46
|
+
loadEnvFile(path.join(process.cwd(), '.env'));
|
|
47
|
+
loadEnvFile(path.join(process.cwd(), 'cli.env'));
|
|
11
48
|
// Handle CLI flags
|
|
12
49
|
const args = process.argv.slice(2);
|
|
13
50
|
// Check for god-mode flag (skip all permission prompts)
|
|
@@ -15,11 +52,26 @@ const skipPermissions = args.includes('--god-mode') ||
|
|
|
15
52
|
args.includes('-g');
|
|
16
53
|
// Check for legacy UI flag
|
|
17
54
|
const useLegacyUI = args.includes('--legacy');
|
|
18
|
-
// Check for
|
|
19
|
-
const agtermEnabled = args.includes('--agterm') || args.includes('-a');
|
|
55
|
+
// Check for multi-agent orchestration mode
|
|
56
|
+
const agtermEnabled = args.includes('--agents') || args.includes('--agterm') || args.includes('-a');
|
|
57
|
+
// Check for headless mode (no-TTY agent orchestration)
|
|
58
|
+
const useHeadless = args.includes('--headless') || args.includes('--batch') || args.includes('--pipe') || !process.stdout.isTTY;
|
|
59
|
+
// Check for API server flag
|
|
60
|
+
const useApiServer = args.includes('--serve') || args.includes('--api');
|
|
61
|
+
// HUD environment variable overrides
|
|
62
|
+
const envSkin = process.env.CALLIOPE_SKIN;
|
|
63
|
+
const envPalette = process.env.CALLIOPE_PALETTE;
|
|
64
|
+
const envCompanion = process.env.CALLIOPE_COMPANION;
|
|
20
65
|
// Export for CLI to access
|
|
21
|
-
export { skipPermissions, agtermEnabled };
|
|
66
|
+
export { skipPermissions, agtermEnabled, useHeadless, envSkin, envPalette, envCompanion };
|
|
22
67
|
async function main() {
|
|
68
|
+
// Check Node.js version — ink requires Node >=20 (uses /v regex flag in string-width)
|
|
69
|
+
const [nodeMaj] = process.versions.node.split('.').map(Number);
|
|
70
|
+
if (nodeMaj < 20) {
|
|
71
|
+
console.error(`calliope requires Node.js 20 or later (you have ${process.versions.node})`);
|
|
72
|
+
console.error('Upgrade: https://nodejs.org/en/download or nvm install 20');
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
23
75
|
// Handle --help
|
|
24
76
|
if (args.includes('--help') || args.includes('-h')) {
|
|
25
77
|
printHelp();
|
|
@@ -45,18 +97,18 @@ async function main() {
|
|
|
45
97
|
const [lMaj, lMin, lPat] = latest.split('.').map(Number);
|
|
46
98
|
const hasUpdate = lMaj > cMaj || (lMaj === cMaj && lMin > cMin) || (lMaj === cMaj && lMin === cMin && lPat > cPat);
|
|
47
99
|
if (!hasUpdate) {
|
|
48
|
-
console.log(
|
|
100
|
+
console.log(`${colors.green}✓${colors.reset} Already on latest version (v${current})`);
|
|
49
101
|
process.exit(0);
|
|
50
102
|
}
|
|
51
|
-
console.log(
|
|
103
|
+
console.log(`${colors.yellow}→${colors.reset} New version available: v${latest}`);
|
|
52
104
|
console.log('Upgrading...');
|
|
53
105
|
const success = await performUpgrade();
|
|
54
106
|
if (success) {
|
|
55
|
-
console.log(
|
|
107
|
+
console.log(`${colors.green}✓${colors.reset} Upgraded to v${latest}`);
|
|
56
108
|
process.exit(0);
|
|
57
109
|
}
|
|
58
110
|
else {
|
|
59
|
-
console.log(
|
|
111
|
+
console.log(`${colors.red}✗${colors.reset} Upgrade failed. Try: npm install -g @calliopelabs/cli@latest`);
|
|
60
112
|
process.exit(1);
|
|
61
113
|
}
|
|
62
114
|
}
|
|
@@ -82,14 +134,14 @@ async function main() {
|
|
|
82
134
|
}
|
|
83
135
|
// Show warning if god-mode enabled
|
|
84
136
|
if (skipPermissions) {
|
|
85
|
-
console.log(
|
|
86
|
-
console.log(
|
|
137
|
+
console.log(`${colors.magenta}⚡ GOD MODE ENABLED${colors.reset}`);
|
|
138
|
+
console.log(`${colors.dim} Tools execute without confirmation. Use wisely.${colors.reset}`);
|
|
87
139
|
console.log();
|
|
88
140
|
}
|
|
89
|
-
// Show notice if
|
|
141
|
+
// Show notice if agents mode enabled
|
|
90
142
|
if (agtermEnabled) {
|
|
91
|
-
console.log(
|
|
92
|
-
console.log(
|
|
143
|
+
console.log(`${colors.cyan}🤖 AGENTS MODE${colors.reset}`);
|
|
144
|
+
console.log(`${colors.dim} Multi-agent orchestration active. Use /agents to see available sub-agents.${colors.reset}`);
|
|
93
145
|
console.log();
|
|
94
146
|
}
|
|
95
147
|
// Check if setup is needed
|
|
@@ -106,9 +158,11 @@ async function main() {
|
|
|
106
158
|
process.env.OLLAMA_BASE_URL ||
|
|
107
159
|
process.env.AI21_API_KEY ||
|
|
108
160
|
process.env.HUGGINGFACE_API_KEY ||
|
|
109
|
-
process.env.LITELLM_BASE_URL
|
|
110
|
-
|
|
111
|
-
|
|
161
|
+
process.env.LITELLM_BASE_URL ||
|
|
162
|
+
process.env.BEDROCK_API_KEY ||
|
|
163
|
+
process.env.BEDROCK_BASE_URL;
|
|
164
|
+
if (hasEnvKeys) {
|
|
165
|
+
// Skip setup if env keys present
|
|
112
166
|
config.markSetupComplete();
|
|
113
167
|
}
|
|
114
168
|
else {
|
|
@@ -124,19 +178,54 @@ async function main() {
|
|
|
124
178
|
await startCLI();
|
|
125
179
|
}
|
|
126
180
|
async function startCLI(options = {}) {
|
|
181
|
+
// Initialize HUD (skin + palette + companion)
|
|
182
|
+
const { applySkin, applyPalette } = await import('./hud/api.js');
|
|
183
|
+
const { populateLegacyRegistries } = await import('./hud/theme-packs/api.js');
|
|
184
|
+
const { applyCompanion } = await import('./companions.js');
|
|
185
|
+
// Populate legacy registries from theme packs (optional @calliopelabs/cli-themes)
|
|
186
|
+
await populateLegacyRegistries();
|
|
187
|
+
const skinName = envSkin || config.get('activeSkin') || 'clean';
|
|
188
|
+
const paletteName = envPalette || config.get('activePalette') || 'default';
|
|
189
|
+
const companionName = envCompanion || config.get('activeCompanion') || 'calliope';
|
|
190
|
+
applySkin(skinName);
|
|
191
|
+
applyPalette(paletteName);
|
|
192
|
+
applyCompanion(companionName);
|
|
127
193
|
// Merge in global flags
|
|
128
194
|
const fullOptions = {
|
|
129
195
|
...options,
|
|
130
196
|
agtermEnabled: options.agtermEnabled ?? agtermEnabled,
|
|
131
197
|
};
|
|
132
|
-
if
|
|
198
|
+
// Start API server if --serve/--api flag is set
|
|
199
|
+
if (useApiServer) {
|
|
200
|
+
const { startApiServer } = await import('./api-server.js');
|
|
201
|
+
const port = 3100;
|
|
202
|
+
try {
|
|
203
|
+
const info = await startApiServer({ port, host: '127.0.0.1' });
|
|
204
|
+
console.log(`${colors.dim} API server: http://${info.host}:${info.port}${colors.reset}`);
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
console.error(`API server failed to start: ${err instanceof Error ? err.message : String(err)}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (useHeadless) {
|
|
211
|
+
// Use headless renderer (no-TTY, JSON/text output)
|
|
212
|
+
const { runHeadless } = await import('./headless.js');
|
|
213
|
+
// Extract prompt from remaining args (non-flag args)
|
|
214
|
+
const prompt = args.filter(a => !a.startsWith('-')).join(' ');
|
|
215
|
+
const exitCode = await runHeadless({
|
|
216
|
+
prompt: prompt || undefined,
|
|
217
|
+
outputMode: args.includes('--json') ? 'json' : 'text',
|
|
218
|
+
});
|
|
219
|
+
process.exit(exitCode);
|
|
220
|
+
}
|
|
221
|
+
else if (useLegacyUI) {
|
|
133
222
|
// Use legacy readline-based CLI
|
|
134
|
-
const { startCLI: start } = await import('./cli.js');
|
|
223
|
+
const { startCLI: start } = await import('./cli/index.js');
|
|
135
224
|
await start(fullOptions);
|
|
136
225
|
}
|
|
137
226
|
else {
|
|
138
227
|
// Use new ink-based UI
|
|
139
|
-
const { startInkCLI } = await import('./ui
|
|
228
|
+
const { startInkCLI } = await import('./ui/index.js');
|
|
140
229
|
await startInkCLI(fullOptions);
|
|
141
230
|
}
|
|
142
231
|
}
|
|
@@ -158,9 +247,14 @@ ${bold('OPTIONS')}
|
|
|
158
247
|
|
|
159
248
|
-g, --god-mode Run tools without confirmation prompts
|
|
160
249
|
Enables unrestricted autonomous execution
|
|
161
|
-
-a, --
|
|
162
|
-
Unlock spawn_agent,
|
|
250
|
+
-a, --agents Enable multi-agent orchestration mode
|
|
251
|
+
Unlock spawn_agent, swarm, coordination tools
|
|
252
|
+
--serve, --api Start API server on port 3100 (localhost)
|
|
163
253
|
--legacy Use legacy readline UI instead of ink
|
|
254
|
+
--headless Headless mode (JSON/text output, no TTY)
|
|
255
|
+
--batch Alias for --headless
|
|
256
|
+
--json Output JSON events (with --headless)
|
|
257
|
+
--pipe Read from stdin, write to stdout (alias)
|
|
164
258
|
|
|
165
259
|
${bold('ENVIRONMENT VARIABLES')}
|
|
166
260
|
ANTHROPIC_API_KEY Anthropic Claude API key
|
|
@@ -175,27 +269,36 @@ ${bold('ENVIRONMENT VARIABLES')}
|
|
|
175
269
|
OLLAMA_BASE_URL Ollama server URL (default: localhost:11434)
|
|
176
270
|
LITELLM_BASE_URL LiteLLM proxy URL (default: localhost:4000)
|
|
177
271
|
LITELLM_API_KEY LiteLLM API key (if required)
|
|
272
|
+
BEDROCK_BASE_URL AWS Bedrock gateway/proxy URL
|
|
273
|
+
BEDROCK_API_KEY AWS Bedrock gateway API key (if required)
|
|
274
|
+
|
|
275
|
+
CALLIOPE_SKIN Override active skin (e.g. falcon, matrix)
|
|
276
|
+
CALLIOPE_PALETTE Override active palette (e.g. neon, pastel)
|
|
277
|
+
CALLIOPE_COMPANION Override active companion (e.g. copilot, wopr)
|
|
178
278
|
|
|
179
279
|
${bold('INTERACTIVE COMMANDS')}
|
|
180
280
|
/help Show all commands
|
|
181
281
|
/provider Switch AI provider
|
|
182
282
|
/model Change model
|
|
183
283
|
/persona Change personality
|
|
184
|
-
/loop Start autonomous loop
|
|
284
|
+
/loop Start autonomous agent loop
|
|
185
285
|
/save Save session
|
|
186
286
|
/exit Exit
|
|
187
287
|
|
|
188
288
|
${bold('EXAMPLES')}
|
|
189
289
|
calliope Start interactive session
|
|
190
|
-
calliope --setup Run setup wizard
|
|
191
290
|
calliope "explain this" Start with a prompt
|
|
291
|
+
calliope --setup Run setup wizard
|
|
292
|
+
calliope --batch "fix lint" Non-interactive batch execution
|
|
293
|
+
echo "review" | calliope Pipe prompt via stdin
|
|
294
|
+
calliope --headless --json JSON event stream output
|
|
192
295
|
|
|
193
296
|
${bold('MORE INFO')}
|
|
194
297
|
https://github.com/calliopeai/calliope-cli
|
|
195
298
|
`);
|
|
196
299
|
}
|
|
197
300
|
function bold(text) {
|
|
198
|
-
return
|
|
301
|
+
return `${colors.bold}${text}${colors.reset}`;
|
|
199
302
|
}
|
|
200
303
|
// Run
|
|
201
304
|
main().catch((err) => {
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|