@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,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Shared Types & Utilities
|
|
3
|
+
*
|
|
4
|
+
* Constants, token estimation, context health, validation, and shared helpers.
|
|
5
|
+
*/
|
|
6
|
+
import { getModelContextLimit } from '../model-detection.js';
|
|
7
|
+
// Constants
|
|
8
|
+
export const MAX_TOKENS = 8192;
|
|
9
|
+
export const MIN_OUTPUT_TOKENS = 1024; // Minimum output tokens to request
|
|
10
|
+
export const CONTEXT_BUFFER_PERCENT = 0.08; // 8% of context as safety buffer
|
|
11
|
+
export const CONTEXT_BUFFER_MIN = 1024; // Minimum buffer (scales with context size)
|
|
12
|
+
/** Maximum allowed content length (1MB) to prevent memory issues */
|
|
13
|
+
export const MAX_CONTENT_LENGTH = 1024 * 1024;
|
|
14
|
+
// Debug logging helper
|
|
15
|
+
const DEBUG = process.env.CALLIOPE_DEBUG === '1';
|
|
16
|
+
export function debugLog(message, ...args) {
|
|
17
|
+
if (DEBUG)
|
|
18
|
+
console.log(`[DEBUG] ${message}`, ...args);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extract text from MessageContent
|
|
22
|
+
*/
|
|
23
|
+
export function getTextContent(content) {
|
|
24
|
+
if (typeof content === 'string') {
|
|
25
|
+
return content;
|
|
26
|
+
}
|
|
27
|
+
return content
|
|
28
|
+
.filter(block => block.type === 'text')
|
|
29
|
+
.map(block => block.text)
|
|
30
|
+
.join('\n');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Estimate tokens from messages (conservative: ~3 chars per token)
|
|
34
|
+
* Uses conservative estimation to avoid context overflow
|
|
35
|
+
*/
|
|
36
|
+
export function estimateInputTokens(messages, tools) {
|
|
37
|
+
let totalChars = 0;
|
|
38
|
+
for (const msg of messages) {
|
|
39
|
+
// Add per-message overhead (role, structure, etc.)
|
|
40
|
+
totalChars += 50;
|
|
41
|
+
if (typeof msg.content === 'string') {
|
|
42
|
+
totalChars += msg.content.length;
|
|
43
|
+
}
|
|
44
|
+
else if (Array.isArray(msg.content)) {
|
|
45
|
+
for (const block of msg.content) {
|
|
46
|
+
if (block.type === 'text') {
|
|
47
|
+
totalChars += block.text.length;
|
|
48
|
+
}
|
|
49
|
+
else if (block.type === 'image') {
|
|
50
|
+
// Images are roughly 85 tokens per tile (assuming ~750 tokens average)
|
|
51
|
+
totalChars += 3000;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Add overhead for tool calls in assistant messages
|
|
56
|
+
if (msg.toolCalls) {
|
|
57
|
+
totalChars += JSON.stringify(msg.toolCalls).length;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Add tool definitions overhead
|
|
61
|
+
if (tools.length > 0) {
|
|
62
|
+
totalChars += JSON.stringify(tools).length;
|
|
63
|
+
}
|
|
64
|
+
// Very conservative estimate: 2.5 characters per token
|
|
65
|
+
// Plus 35% overhead for message structure, system prompt, and formatting
|
|
66
|
+
return Math.ceil((totalChars / 2.5) * 1.35);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Calculate dynamic max_tokens based on available context space
|
|
70
|
+
*/
|
|
71
|
+
export function calculateMaxTokens(provider, model, messages, tools) {
|
|
72
|
+
const contextLimit = getModelContextLimit(provider, model);
|
|
73
|
+
const estimatedInput = estimateInputTokens(messages, tools);
|
|
74
|
+
// Use percentage-based buffer with minimum floor
|
|
75
|
+
const buffer = Math.max(CONTEXT_BUFFER_MIN, Math.ceil(contextLimit * CONTEXT_BUFFER_PERCENT));
|
|
76
|
+
const available = contextLimit - estimatedInput - buffer;
|
|
77
|
+
debugLog(`Context calculation: limit=${contextLimit}, input≈${estimatedInput}, buffer=${buffer}, available=${available}`);
|
|
78
|
+
// Ensure we have at least MIN_OUTPUT_TOKENS, up to MAX_TOKENS
|
|
79
|
+
if (available < MIN_OUTPUT_TOKENS) {
|
|
80
|
+
debugLog(`WARNING: Very limited output space (${available}), using minimum ${MIN_OUTPUT_TOKENS}`);
|
|
81
|
+
return MIN_OUTPUT_TOKENS;
|
|
82
|
+
}
|
|
83
|
+
return Math.min(MAX_TOKENS, available);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if context needs summarization based on actual token usage
|
|
87
|
+
* Call this with the input_tokens from the last API response
|
|
88
|
+
*/
|
|
89
|
+
export function needsSummarization(provider, model, actualInputTokens) {
|
|
90
|
+
const contextLimit = getModelContextLimit(provider, model);
|
|
91
|
+
const threshold = contextLimit * 0.75; // Trigger summarization at 75% full
|
|
92
|
+
return actualInputTokens >= threshold;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get context health info
|
|
96
|
+
*/
|
|
97
|
+
export function getContextHealth(provider, model, actualInputTokens) {
|
|
98
|
+
const limit = getModelContextLimit(provider, model);
|
|
99
|
+
const percent = Math.round((actualInputTokens / limit) * 100);
|
|
100
|
+
return {
|
|
101
|
+
limit,
|
|
102
|
+
used: actualInputTokens,
|
|
103
|
+
percent,
|
|
104
|
+
needsSummarization: actualInputTokens >= limit * 0.75,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Estimate context usage before making a request (for pre-request summarization)
|
|
109
|
+
* Uses conservative estimation since we don't have actual token counts yet
|
|
110
|
+
*/
|
|
111
|
+
export function estimateContextUsage(provider, model, messages, tools) {
|
|
112
|
+
const estimated = estimateInputTokens(messages, tools);
|
|
113
|
+
const limit = getModelContextLimit(provider, model);
|
|
114
|
+
const percent = Math.round((estimated / limit) * 100);
|
|
115
|
+
return {
|
|
116
|
+
estimated,
|
|
117
|
+
limit,
|
|
118
|
+
percent,
|
|
119
|
+
needsSummarization: estimated >= limit * 0.75, // Trigger auto-compact at 75%
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Validate and sanitize LLM response
|
|
124
|
+
*/
|
|
125
|
+
export function validateLLMResponse(response) {
|
|
126
|
+
// Ensure content is a string
|
|
127
|
+
if (response.content === null || response.content === undefined) {
|
|
128
|
+
response.content = '';
|
|
129
|
+
}
|
|
130
|
+
else if (typeof response.content !== 'string') {
|
|
131
|
+
response.content = String(response.content);
|
|
132
|
+
}
|
|
133
|
+
// Truncate if too long to prevent memory issues
|
|
134
|
+
if (response.content.length > MAX_CONTENT_LENGTH) {
|
|
135
|
+
debugLog('Response content truncated from', response.content.length, 'to', MAX_CONTENT_LENGTH);
|
|
136
|
+
response.content = response.content.slice(0, MAX_CONTENT_LENGTH) + '\n... [truncated]';
|
|
137
|
+
}
|
|
138
|
+
// Validate tool calls if present
|
|
139
|
+
if (response.toolCalls) {
|
|
140
|
+
response.toolCalls = response.toolCalls.filter(call => {
|
|
141
|
+
if (!call.id || typeof call.id !== 'string') {
|
|
142
|
+
debugLog('Invalid tool call: missing or invalid id', call);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
if (!call.name || typeof call.name !== 'string') {
|
|
146
|
+
debugLog('Invalid tool call: missing or invalid name', call);
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
if (call.arguments === null || call.arguments === undefined) {
|
|
150
|
+
call.arguments = {};
|
|
151
|
+
}
|
|
152
|
+
return true;
|
|
153
|
+
});
|
|
154
|
+
if (response.toolCalls.length === 0) {
|
|
155
|
+
response.toolCalls = undefined;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Ensure valid finish reason
|
|
159
|
+
if (!['stop', 'tool_use', 'length', 'error'].includes(response.finishReason)) {
|
|
160
|
+
response.finishReason = 'stop';
|
|
161
|
+
}
|
|
162
|
+
return response;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D,YAAY;AACZ,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,mCAAmC;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,CAAC,iCAAiC;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,4CAA4C;AAEpF,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,uBAAuB;AACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC;AACjD,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAG,IAAe;IAC1D,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;AACxD,CAAC;AAYD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAA2B;IACxD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO;SACX,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SACtC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAE,KAAqB,CAAC,IAAI,CAAC;SACzC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAmB,EAAE,KAAa;IACpE,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,mDAAmD;QACnD,UAAU,IAAI,EAAE,CAAC;QAEjB,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpC,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1B,UAAU,IAAK,KAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACnD,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAClC,uEAAuE;oBACvE,UAAU,IAAI,IAAI,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QACD,oDAAoD;QACpD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QACrD,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,uDAAuD;IACvD,yEAAyE;IACzE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAqB,EACrB,KAAa,EACb,QAAmB,EACnB,KAAa;IAEb,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5D,iDAAiD;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,sBAAsB,CAAC,CAAC,CAAC;IAC9F,MAAM,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,CAAC;IAEzD,QAAQ,CAAC,8BAA8B,YAAY,WAAW,cAAc,YAAY,MAAM,eAAe,SAAS,EAAE,CAAC,CAAC;IAE1H,8DAA8D;IAC9D,IAAI,SAAS,GAAG,iBAAiB,EAAE,CAAC;QAClC,QAAQ,CAAC,uCAAuC,SAAS,oBAAoB,iBAAiB,EAAE,CAAC,CAAC;QAClG,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAqB,EACrB,KAAa,EACb,iBAAyB;IAEzB,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC,oCAAoC;IAC3E,OAAO,iBAAiB,IAAI,SAAS,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAqB,EACrB,KAAa,EACb,iBAAyB;IAEzB,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9D,OAAO;QACL,KAAK;QACL,IAAI,EAAE,iBAAiB;QACvB,OAAO;QACP,kBAAkB,EAAE,iBAAiB,IAAI,KAAK,GAAG,IAAI;KACtD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAqB,EACrB,KAAa,EACb,QAAmB,EACnB,KAAa;IAEb,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IACtD,OAAO;QACL,SAAS;QACT,KAAK;QACL,OAAO;QACP,kBAAkB,EAAE,SAAS,IAAI,KAAK,GAAG,IAAI,EAAE,8BAA8B;KAC9E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAqB;IACvD,6BAA6B;IAC7B,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChE,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;IACxB,CAAC;SAAM,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChD,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,gDAAgD;IAChD,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACjD,QAAQ,CAAC,iCAAiC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;QAC/F,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,mBAAmB,CAAC;IACzF,CAAC;IAED,iCAAiC;IACjC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC5C,QAAQ,CAAC,0CAA0C,EAAE,IAAI,CAAC,CAAC;gBAC3D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChD,QAAQ,CAAC,4CAA4C,EAAE,IAAI,CAAC,CAAC;gBAC7D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5D,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACtB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;QACjC,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7E,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;IACjC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Native OS Sandbox
|
|
3
|
+
*
|
|
4
|
+
* Lightweight OS-level sandboxing as an alternative to Docker.
|
|
5
|
+
* Currently supports macOS (Seatbelt via sandbox-exec).
|
|
6
|
+
* Linux Landlock support is planned for the future.
|
|
7
|
+
*/
|
|
8
|
+
export type SandboxBackend = 'seatbelt' | 'landlock' | 'none';
|
|
9
|
+
export interface NativeSandboxResult {
|
|
10
|
+
stdout: string;
|
|
11
|
+
stderr: string;
|
|
12
|
+
exitCode: number;
|
|
13
|
+
sandboxed: boolean;
|
|
14
|
+
backend: SandboxBackend;
|
|
15
|
+
}
|
|
16
|
+
export interface NativeSandboxOptions {
|
|
17
|
+
/** Timeout in milliseconds (default: 60000) */
|
|
18
|
+
timeout?: number;
|
|
19
|
+
/** Allow network access (default: false) */
|
|
20
|
+
networkEnabled?: boolean;
|
|
21
|
+
/** Additional read-only paths to allow */
|
|
22
|
+
readOnlyPaths?: string[];
|
|
23
|
+
/** Additional read-write paths to allow */
|
|
24
|
+
readWritePaths?: string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if macOS Seatbelt (sandbox-exec) is available
|
|
28
|
+
*/
|
|
29
|
+
export declare function isSeatbeltAvailable(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Check if Linux Landlock is available (placeholder for future implementation)
|
|
32
|
+
*/
|
|
33
|
+
export declare function isLandlockAvailable(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Check if any native sandbox backend is available
|
|
36
|
+
*/
|
|
37
|
+
export declare function isNativeSandboxAvailable(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Get the available native sandbox backend
|
|
40
|
+
*/
|
|
41
|
+
export declare function getAvailableBackend(): SandboxBackend;
|
|
42
|
+
/**
|
|
43
|
+
* Get a human-readable description of the current sandbox status
|
|
44
|
+
*/
|
|
45
|
+
export declare function getSandboxStatus(): {
|
|
46
|
+
platform: string;
|
|
47
|
+
backend: SandboxBackend;
|
|
48
|
+
available: boolean;
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Execute a shell command inside a native OS sandbox
|
|
53
|
+
*/
|
|
54
|
+
export declare function executeInNativeSandbox(command: string, cwd: string, options?: NativeSandboxOptions): Promise<NativeSandboxResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Reset cached detection results (useful for testing)
|
|
57
|
+
*/
|
|
58
|
+
export declare function resetDetectionCache(): void;
|
|
59
|
+
//# sourceMappingURL=sandbox-native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-native.d.ts","sourceRoot":"","sources":["../src/sandbox-native.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AA+FD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAiB7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAa7C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAIpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAyBA;AAcD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAyB9B;AA0FD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Native OS Sandbox
|
|
3
|
+
*
|
|
4
|
+
* Lightweight OS-level sandboxing as an alternative to Docker.
|
|
5
|
+
* Currently supports macOS (Seatbelt via sandbox-exec).
|
|
6
|
+
* Linux Landlock support is planned for the future.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn, execFileSync } from 'child_process';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// macOS Seatbelt Profile
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Build a Seatbelt profile for sandboxed execution.
|
|
15
|
+
*
|
|
16
|
+
* Defaults:
|
|
17
|
+
* - deny everything by default
|
|
18
|
+
* - allow process execution and forking
|
|
19
|
+
* - allow all file reads (safe; write restriction is the enforcement point)
|
|
20
|
+
* - allow file writes only in: project cwd, /dev (stdout/stderr), temp dirs
|
|
21
|
+
* - allow file-ioctl (terminal I/O), sysctl-read, mach-lookup, signal
|
|
22
|
+
* - optionally allow outbound HTTP/HTTPS
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Sanitize a path for safe embedding in a Seatbelt profile string.
|
|
26
|
+
* Escapes characters that are significant in the Scheme-like DSL
|
|
27
|
+
* (double quotes, backslashes, parentheses) to prevent profile injection.
|
|
28
|
+
*/
|
|
29
|
+
function sanitizeSeatbeltPath(p) {
|
|
30
|
+
// Reject paths containing null bytes
|
|
31
|
+
if (p.includes('\0')) {
|
|
32
|
+
throw new Error(`Invalid path for sandbox profile: contains null bytes`);
|
|
33
|
+
}
|
|
34
|
+
// Escape backslashes first, then double quotes
|
|
35
|
+
return p.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
36
|
+
}
|
|
37
|
+
function buildSeatbeltProfile(cwd, options = {}) {
|
|
38
|
+
const extraReadWrite = options.readWritePaths || [];
|
|
39
|
+
const safeCwd = sanitizeSeatbeltPath(cwd);
|
|
40
|
+
// Build read-write subpath rules for extra paths
|
|
41
|
+
const extraRwRules = extraReadWrite
|
|
42
|
+
.map((p) => `(allow file-write* (subpath "${sanitizeSeatbeltPath(p)}"))`)
|
|
43
|
+
.join('\n');
|
|
44
|
+
// Network rules
|
|
45
|
+
const networkRules = options.networkEnabled
|
|
46
|
+
? `(allow network-outbound (remote ip "*:443") (remote ip "*:80"))\n(allow network-outbound (remote unix-socket))`
|
|
47
|
+
: '';
|
|
48
|
+
const profile = `(version 1)
|
|
49
|
+
(deny default)
|
|
50
|
+
|
|
51
|
+
;; Process execution
|
|
52
|
+
(allow process-exec)
|
|
53
|
+
(allow process-fork)
|
|
54
|
+
|
|
55
|
+
;; File reads: allow broadly (read-only is safe; write restrictions are the enforcement point)
|
|
56
|
+
(allow file-read*)
|
|
57
|
+
|
|
58
|
+
;; File writes: restricted to project directory, temp dirs, and stdout/stderr devices
|
|
59
|
+
(allow file-write*
|
|
60
|
+
(subpath "/dev")
|
|
61
|
+
(subpath "/private/tmp")
|
|
62
|
+
(subpath "/private/var/tmp")
|
|
63
|
+
(subpath "/private/var/folders")
|
|
64
|
+
(subpath "/var/tmp")
|
|
65
|
+
(subpath "/tmp")
|
|
66
|
+
(subpath "${safeCwd}")
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
;; Extra paths
|
|
70
|
+
${extraRwRules}
|
|
71
|
+
|
|
72
|
+
;; Terminal I/O control (needed for stdout/stderr)
|
|
73
|
+
(allow file-ioctl)
|
|
74
|
+
|
|
75
|
+
;; System operations
|
|
76
|
+
(allow sysctl-read)
|
|
77
|
+
(allow mach-lookup)
|
|
78
|
+
(allow signal)
|
|
79
|
+
|
|
80
|
+
;; Network
|
|
81
|
+
${networkRules}
|
|
82
|
+
`;
|
|
83
|
+
return profile;
|
|
84
|
+
}
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// Detection
|
|
87
|
+
// ============================================================================
|
|
88
|
+
let _seatbeltAvailable = null;
|
|
89
|
+
let _landlockAvailable = null;
|
|
90
|
+
/**
|
|
91
|
+
* Check if macOS Seatbelt (sandbox-exec) is available
|
|
92
|
+
*/
|
|
93
|
+
export function isSeatbeltAvailable() {
|
|
94
|
+
if (_seatbeltAvailable !== null)
|
|
95
|
+
return _seatbeltAvailable;
|
|
96
|
+
if (os.platform() !== 'darwin') {
|
|
97
|
+
_seatbeltAvailable = false;
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
// sandbox-exec exists on macOS by default, just verify the binary is present
|
|
102
|
+
execFileSync('which', ['sandbox-exec'], { stdio: 'pipe' });
|
|
103
|
+
_seatbeltAvailable = true;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
_seatbeltAvailable = false;
|
|
107
|
+
}
|
|
108
|
+
return _seatbeltAvailable;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if Linux Landlock is available (placeholder for future implementation)
|
|
112
|
+
*/
|
|
113
|
+
export function isLandlockAvailable() {
|
|
114
|
+
if (_landlockAvailable !== null)
|
|
115
|
+
return _landlockAvailable;
|
|
116
|
+
if (os.platform() !== 'linux') {
|
|
117
|
+
_landlockAvailable = false;
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
// TODO: Check for Landlock support via /proc/sys/kernel/landlock or similar
|
|
121
|
+
// Landlock requires Linux 5.13+ and is a kernel-level sandboxing mechanism.
|
|
122
|
+
// For now, return false until full implementation is done.
|
|
123
|
+
_landlockAvailable = false;
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if any native sandbox backend is available
|
|
128
|
+
*/
|
|
129
|
+
export function isNativeSandboxAvailable() {
|
|
130
|
+
return isSeatbeltAvailable() || isLandlockAvailable();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get the available native sandbox backend
|
|
134
|
+
*/
|
|
135
|
+
export function getAvailableBackend() {
|
|
136
|
+
if (isSeatbeltAvailable())
|
|
137
|
+
return 'seatbelt';
|
|
138
|
+
if (isLandlockAvailable())
|
|
139
|
+
return 'landlock';
|
|
140
|
+
return 'none';
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get a human-readable description of the current sandbox status
|
|
144
|
+
*/
|
|
145
|
+
export function getSandboxStatus() {
|
|
146
|
+
const platform = os.platform();
|
|
147
|
+
const backend = getAvailableBackend();
|
|
148
|
+
const available = backend !== 'none';
|
|
149
|
+
let description;
|
|
150
|
+
switch (backend) {
|
|
151
|
+
case 'seatbelt':
|
|
152
|
+
description = 'macOS Seatbelt (sandbox-exec) - restricts file access, network, and system calls';
|
|
153
|
+
break;
|
|
154
|
+
case 'landlock':
|
|
155
|
+
description = 'Linux Landlock - kernel-level filesystem sandboxing';
|
|
156
|
+
break;
|
|
157
|
+
case 'none':
|
|
158
|
+
if (platform === 'darwin') {
|
|
159
|
+
description = 'sandbox-exec not found on this macOS system';
|
|
160
|
+
}
|
|
161
|
+
else if (platform === 'linux') {
|
|
162
|
+
description = 'Landlock not available (requires Linux 5.13+, not yet implemented)';
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
description = `No native sandbox available for ${platform}`;
|
|
166
|
+
}
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
return { platform, backend, available, description };
|
|
170
|
+
}
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// Output Size Limits
|
|
173
|
+
// ============================================================================
|
|
174
|
+
/** Maximum size for stdout/stderr buffers (10MB) to prevent unbounded memory growth */
|
|
175
|
+
const MAX_OUTPUT_SIZE = 10 * 1024 * 1024;
|
|
176
|
+
const TRUNCATION_WARNING = '\n\n[Output truncated at 10MB limit]';
|
|
177
|
+
// ============================================================================
|
|
178
|
+
// Execution
|
|
179
|
+
// ============================================================================
|
|
180
|
+
/**
|
|
181
|
+
* Execute a shell command inside a native OS sandbox
|
|
182
|
+
*/
|
|
183
|
+
export function executeInNativeSandbox(command, cwd, options = {}) {
|
|
184
|
+
const backend = getAvailableBackend();
|
|
185
|
+
switch (backend) {
|
|
186
|
+
case 'seatbelt':
|
|
187
|
+
return executeWithSeatbelt(command, cwd, options);
|
|
188
|
+
case 'landlock':
|
|
189
|
+
// Landlock not yet implemented — fall through to unsandboxed
|
|
190
|
+
return Promise.resolve({
|
|
191
|
+
stdout: '',
|
|
192
|
+
stderr: 'Landlock sandbox is not yet implemented. Command was not executed.',
|
|
193
|
+
exitCode: 1,
|
|
194
|
+
sandboxed: false,
|
|
195
|
+
backend: 'none',
|
|
196
|
+
});
|
|
197
|
+
case 'none':
|
|
198
|
+
default:
|
|
199
|
+
return Promise.resolve({
|
|
200
|
+
stdout: '',
|
|
201
|
+
stderr: 'No native sandbox backend available. Command was not executed.',
|
|
202
|
+
exitCode: 1,
|
|
203
|
+
sandboxed: false,
|
|
204
|
+
backend: 'none',
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Execute a command using macOS Seatbelt (sandbox-exec)
|
|
210
|
+
*/
|
|
211
|
+
function executeWithSeatbelt(command, cwd, options = {}) {
|
|
212
|
+
const timeout = options.timeout || 60000;
|
|
213
|
+
const profile = buildSeatbeltProfile(cwd, options);
|
|
214
|
+
return new Promise((resolve) => {
|
|
215
|
+
let stdout = '';
|
|
216
|
+
let stderr = '';
|
|
217
|
+
let timedOut = false;
|
|
218
|
+
let stdoutTruncated = false;
|
|
219
|
+
let stderrTruncated = false;
|
|
220
|
+
const child = spawn('sandbox-exec', ['-p', profile, 'bash', '-c', command], {
|
|
221
|
+
cwd,
|
|
222
|
+
timeout,
|
|
223
|
+
env: { ...process.env, TERM: 'dumb' },
|
|
224
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
225
|
+
});
|
|
226
|
+
const timer = setTimeout(() => {
|
|
227
|
+
timedOut = true;
|
|
228
|
+
child.kill('SIGKILL');
|
|
229
|
+
}, timeout);
|
|
230
|
+
child.stdout.on('data', (data) => {
|
|
231
|
+
if (!stdoutTruncated) {
|
|
232
|
+
stdout += data.toString();
|
|
233
|
+
if (stdout.length > MAX_OUTPUT_SIZE) {
|
|
234
|
+
stdout = stdout.slice(0, MAX_OUTPUT_SIZE);
|
|
235
|
+
stdoutTruncated = true;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
child.stderr.on('data', (data) => {
|
|
240
|
+
if (!stderrTruncated) {
|
|
241
|
+
stderr += data.toString();
|
|
242
|
+
if (stderr.length > MAX_OUTPUT_SIZE) {
|
|
243
|
+
stderr = stderr.slice(0, MAX_OUTPUT_SIZE);
|
|
244
|
+
stderrTruncated = true;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
child.on('close', (code) => {
|
|
249
|
+
clearTimeout(timer);
|
|
250
|
+
if (stdoutTruncated)
|
|
251
|
+
stdout += TRUNCATION_WARNING;
|
|
252
|
+
if (stderrTruncated)
|
|
253
|
+
stderr += TRUNCATION_WARNING;
|
|
254
|
+
if (timedOut) {
|
|
255
|
+
resolve({
|
|
256
|
+
stdout,
|
|
257
|
+
stderr: stderr + '\nExecution timed out',
|
|
258
|
+
exitCode: 124,
|
|
259
|
+
sandboxed: true,
|
|
260
|
+
backend: 'seatbelt',
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
resolve({
|
|
265
|
+
stdout,
|
|
266
|
+
stderr,
|
|
267
|
+
exitCode: code || 0,
|
|
268
|
+
sandboxed: true,
|
|
269
|
+
backend: 'seatbelt',
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
child.on('error', (err) => {
|
|
274
|
+
clearTimeout(timer);
|
|
275
|
+
resolve({
|
|
276
|
+
stdout: '',
|
|
277
|
+
stderr: err.message,
|
|
278
|
+
exitCode: 1,
|
|
279
|
+
sandboxed: false,
|
|
280
|
+
backend: 'none',
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Reset cached detection results (useful for testing)
|
|
287
|
+
*/
|
|
288
|
+
export function resetDetectionCache() {
|
|
289
|
+
_seatbeltAvailable = null;
|
|
290
|
+
_landlockAvailable = null;
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=sandbox-native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-native.js","sourceRoot":"","sources":["../src/sandbox-native.ts"],"names":[],"mappings":"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"}
|
package/dist/sandbox.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export declare function ensureImage(image: string): Promise<boolean>;
|
|
|
37
37
|
/**
|
|
38
38
|
* Execute code in Docker sandbox
|
|
39
39
|
*/
|
|
40
|
-
export declare function executeInSandbox(language: Language, code: string, config?: Partial<SandboxConfig
|
|
40
|
+
export declare function executeInSandbox(language: Language, code: string, config?: Partial<SandboxConfig>, cwd?: string): Promise<ExecutionResult>;
|
|
41
41
|
/**
|
|
42
42
|
* Execute code without sandbox (fallback)
|
|
43
43
|
*/
|
|
@@ -45,5 +45,5 @@ export declare function executeUnsafe(language: Language, code: string, timeout?
|
|
|
45
45
|
/**
|
|
46
46
|
* Execute code (with or without sandbox based on availability)
|
|
47
47
|
*/
|
|
48
|
-
export declare function execute(language: Language, code: string, config?: Partial<SandboxConfig
|
|
48
|
+
export declare function execute(language: Language, code: string, config?: Partial<SandboxConfig>, cwd?: string): Promise<ExecutionResult>;
|
|
49
49
|
//# sourceMappingURL=sandbox.d.ts.map
|
package/dist/sandbox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAiC3E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjE;
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAiC3E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAW3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjE;AAcD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM,EACnC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,eAAe,CAAC,CAoI1B;AAqFD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAyG1B;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM,EACnC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,eAAe,CAAC,CAQ1B"}
|