@blackbox_ai/blackbox-cli 0.8.3 → 0.9.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/README.md +20 -0
- package/dist/package.json +2 -2
- package/dist/src/commands/configure/ConfigureUI.d.ts +1 -1
- package/dist/src/commands/configure/ConfigureUI.js +130 -26
- package/dist/src/commands/configure/ConfigureUI.js.map +1 -1
- package/dist/src/commands/configure.js +57 -16
- package/dist/src/commands/configure.js.map +1 -1
- package/dist/src/commands/shortcut.d.ts +10 -0
- package/dist/src/commands/shortcut.js +72 -0
- package/dist/src/commands/shortcut.js.map +1 -0
- package/dist/src/config/config.js +7 -1
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/modelFetcher.d.ts +4 -0
- package/dist/src/config/modelFetcher.js +68 -22
- package/dist/src/config/modelFetcher.js.map +1 -1
- package/dist/src/config/settings.js +26 -2
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +29 -0
- package/dist/src/config/settingsSchema.js +29 -0
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/gemini.js +6 -0
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/services/BuiltinCommandLoader.js +2 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/agentExecutor.d.ts +52 -0
- package/dist/src/services/agentExecutor.js +145 -0
- package/dist/src/services/agentExecutor.js.map +1 -0
- package/dist/src/ui/App.d.ts +1 -1
- package/dist/src/ui/App.js +47 -16
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/colors.js +3 -0
- package/dist/src/ui/colors.js.map +1 -1
- package/dist/src/ui/commands/agentCommand.d.ts +7 -0
- package/dist/src/ui/commands/agentCommand.js +90 -0
- package/dist/src/ui/commands/agentCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +12 -2
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AgentModelSelector.d.ts +17 -0
- package/dist/src/ui/components/AgentModelSelector.js +41 -0
- package/dist/src/ui/components/AgentModelSelector.js.map +1 -0
- package/dist/src/ui/components/AsciiArt.d.ts +3 -3
- package/dist/src/ui/components/AsciiArt.js +18 -18
- package/dist/src/ui/components/AsciiArt.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.js +70 -13
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +2 -0
- package/dist/src/ui/components/Footer.js +2 -4
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/Header.js +4 -1
- package/dist/src/ui/components/Header.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +1 -1
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/StatsDisplay.js +1 -1
- package/dist/src/ui/components/StatsDisplay.js.map +1 -1
- package/dist/src/ui/components/agents/SingleAgentDialog.d.ts +20 -0
- package/dist/src/ui/components/agents/SingleAgentDialog.js +150 -0
- package/dist/src/ui/components/agents/SingleAgentDialog.js.map +1 -0
- package/dist/src/ui/components/messages/ToolMessage.js +4 -4
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.js +1 -19
- package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js +13 -2
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +13 -29
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAdaptiveStream.d.ts +2 -1
- package/dist/src/ui/hooks/useAdaptiveStream.js +2 -2
- package/dist/src/ui/hooks/useAdaptiveStream.js.map +1 -1
- package/dist/src/ui/hooks/useAgentCommandProcessor.d.ts +16 -0
- package/dist/src/ui/hooks/useAgentCommandProcessor.js +802 -0
- package/dist/src/ui/hooks/useAgentCommandProcessor.js.map +1 -0
- package/dist/src/ui/hooks/useEncryptedStream.js +15 -0
- package/dist/src/ui/hooks/useEncryptedStream.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -1
- package/dist/src/ui/hooks/useGeminiStream.js +95 -20
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useSingleAgentCommand.d.ts +10 -0
- package/dist/src/ui/hooks/useSingleAgentCommand.js +21 -0
- package/dist/src/ui/hooks/useSingleAgentCommand.js.map +1 -0
- package/dist/src/ui/themes/ansi-light.js +1 -0
- package/dist/src/ui/themes/ansi-light.js.map +1 -1
- package/dist/src/ui/themes/ansi.js +1 -0
- package/dist/src/ui/themes/ansi.js.map +1 -1
- package/dist/src/ui/themes/atom-one-dark.js +14 -13
- package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
- package/dist/src/ui/themes/ayu-light.js +14 -13
- package/dist/src/ui/themes/ayu-light.js.map +1 -1
- package/dist/src/ui/themes/ayu.js +14 -13
- package/dist/src/ui/themes/ayu.js.map +1 -1
- package/dist/src/ui/themes/blackbox-dark.js +36 -31
- package/dist/src/ui/themes/blackbox-dark.js.map +1 -1
- package/dist/src/ui/themes/blackbox-light.js +41 -39
- package/dist/src/ui/themes/blackbox-light.js.map +1 -1
- package/dist/src/ui/themes/default-light.js +20 -20
- package/dist/src/ui/themes/default-light.js.map +1 -1
- package/dist/src/ui/themes/default.js +27 -27
- package/dist/src/ui/themes/default.js.map +1 -1
- package/dist/src/ui/themes/dracula.js +14 -13
- package/dist/src/ui/themes/dracula.js.map +1 -1
- package/dist/src/ui/themes/github-dark.js +14 -13
- package/dist/src/ui/themes/github-dark.js.map +1 -1
- package/dist/src/ui/themes/github-light.js +14 -13
- package/dist/src/ui/themes/github-light.js.map +1 -1
- package/dist/src/ui/themes/googlecode.js +1 -0
- package/dist/src/ui/themes/googlecode.js.map +1 -1
- package/dist/src/ui/themes/no-color.js +2 -0
- package/dist/src/ui/themes/no-color.js.map +1 -1
- package/dist/src/ui/themes/semantic-tokens.d.ts +1 -0
- package/dist/src/ui/themes/semantic-tokens.js +3 -0
- package/dist/src/ui/themes/semantic-tokens.js.map +1 -1
- package/dist/src/ui/themes/shades-of-purple.js +1 -0
- package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
- package/dist/src/ui/themes/theme.d.ts +2 -0
- package/dist/src/ui/themes/theme.js +35 -28
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/themes/xcode.js +1 -0
- package/dist/src/ui/themes/xcode.js.map +1 -1
- package/dist/src/ui/types.d.ts +5 -0
- package/dist/src/ui/utils/terminalBackgroundDetector.d.ts +19 -0
- package/dist/src/ui/utils/terminalBackgroundDetector.js +99 -0
- package/dist/src/ui/utils/terminalBackgroundDetector.js.map +1 -0
- package/dist/src/utils/agentCommandBuilder.d.ts +36 -0
- package/dist/src/utils/agentCommandBuilder.js +288 -0
- package/dist/src/utils/agentCommandBuilder.js.map +1 -0
- package/dist/src/utils/shellShortcut.d.ts +45 -0
- package/dist/src/utils/shellShortcut.js +221 -0
- package/dist/src/utils/shellShortcut.js.map +1 -0
- package/dist/src/utils/userStartupWarnings.js +0 -20
- package/dist/src/utils/userStartupWarnings.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalBackgroundDetector.js","sourceRoot":"","sources":["../../../../src/ui/utils/terminalBackgroundDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Blackbox
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export type AgentType = 'blackbox' | 'claude' | 'codex' | 'gemini';
|
|
7
|
+
/**
|
|
8
|
+
* Determines if an agent should use direct client integration vs CLI execution.
|
|
9
|
+
* Blackbox agent uses the existing Gemini client directly to reuse streaming, tools, and UI components.
|
|
10
|
+
* Other agents use CLI execution for their specific implementations.
|
|
11
|
+
*/
|
|
12
|
+
export declare function shouldUseDirectClient(agentType: AgentType): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Builds the CLI command for the specified agent type.
|
|
15
|
+
* This is the single source of truth for agent command generation,
|
|
16
|
+
* used by both single agent and multi-agent systems.
|
|
17
|
+
*
|
|
18
|
+
* Note: For blackbox agent in single agent mode, direct client integration is preferred
|
|
19
|
+
* over CLI execution to reuse existing streaming and tool infrastructure.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildAgentCommand(agentType: AgentType, model: string, task: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Builds the enhanced Claude command with jq parsing for readable output.
|
|
24
|
+
* Used specifically in multi-agent scenarios for better output formatting.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildClaudeCommandWithJqParsing(model: string, task: string, outputFile: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Builds the enhanced Codex command with jq parsing for readable output.
|
|
29
|
+
* Used specifically in multi-agent scenarios for better output formatting.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildCodexCommandWithJqParsing(model: string, task: string, outputFile: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Builds the enhanced Gemini command with jq parsing for readable output.
|
|
34
|
+
* Used specifically in multi-agent scenarios for better output formatting.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildGeminiCommandWithJqParsing(model: string, task: string, outputFile: string): string;
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Blackbox
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { resolveOpenAIModel } from '@blackbox_ai/blackbox-cli-core';
|
|
7
|
+
/**
|
|
8
|
+
* Determines if an agent should use direct client integration vs CLI execution.
|
|
9
|
+
* Blackbox agent uses the existing Gemini client directly to reuse streaming, tools, and UI components.
|
|
10
|
+
* Other agents use CLI execution for their specific implementations.
|
|
11
|
+
*/
|
|
12
|
+
export function shouldUseDirectClient(agentType) {
|
|
13
|
+
return agentType === 'blackbox';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Builds the CLI command for the specified agent type.
|
|
17
|
+
* This is the single source of truth for agent command generation,
|
|
18
|
+
* used by both single agent and multi-agent systems.
|
|
19
|
+
*
|
|
20
|
+
* Note: For blackbox agent in single agent mode, direct client integration is preferred
|
|
21
|
+
* over CLI execution to reuse existing streaming and tool infrastructure.
|
|
22
|
+
*/
|
|
23
|
+
export function buildAgentCommand(agentType, model, task) {
|
|
24
|
+
// Escape single quotes in the task for shell safety
|
|
25
|
+
const escapedTask = task.replace(/'/g, "'\\''");
|
|
26
|
+
switch (agentType) {
|
|
27
|
+
case 'blackbox':
|
|
28
|
+
return `blackbox -p '${escapedTask}' -y`;
|
|
29
|
+
case 'claude': {
|
|
30
|
+
const blackboxApiKey = process.env['BLACKBOX_API_KEY'];
|
|
31
|
+
if (!blackboxApiKey) {
|
|
32
|
+
throw new Error('BLACKBOX_API_KEY environment variable is required for Claude agent');
|
|
33
|
+
}
|
|
34
|
+
return `ANTHROPIC_API_KEY="${blackboxApiKey}" ANTHROPIC_BASE_URL="https://api.blackbox.ai" claude --model "${model}" -p --output-format=stream-json --include-partial-messages --dangerously-skip-permissions --verbose '${escapedTask}'`;
|
|
35
|
+
}
|
|
36
|
+
case 'codex': {
|
|
37
|
+
// Resolve model to use Blackbox provider if available
|
|
38
|
+
const apiKeys = {
|
|
39
|
+
blackbox_api_key: process.env['BLACKBOX_API_KEY'],
|
|
40
|
+
openai_api_key: process.env['OPENAI_API_KEY']
|
|
41
|
+
};
|
|
42
|
+
const resolved = resolveOpenAIModel(model, apiKeys);
|
|
43
|
+
if (!resolved.userApiKey) {
|
|
44
|
+
throw new Error('Either BLACKBOX_API_KEY or OPENAI_API_KEY environment variable is required for Codex agent');
|
|
45
|
+
}
|
|
46
|
+
// Check if using Blackbox provider
|
|
47
|
+
if (resolved.selectedModel.startsWith('blackboxai/')) {
|
|
48
|
+
// Use the full Blackbox model name (e.g., blackboxai/openai/gpt-5.1)
|
|
49
|
+
const blackboxModel = resolved.selectedModel;
|
|
50
|
+
// Create config.toml for Blackbox provider
|
|
51
|
+
const configToml = `model = "${blackboxModel}"
|
|
52
|
+
model_provider = "blackbox-ai-gateway"
|
|
53
|
+
|
|
54
|
+
[shell_environment_policy]
|
|
55
|
+
ignore_default_excludes = true
|
|
56
|
+
inherit = "all"
|
|
57
|
+
|
|
58
|
+
[model_providers.blackbox-ai-gateway]
|
|
59
|
+
name = "BlackBox AI Gateway"
|
|
60
|
+
base_url = "https://api.blackbox.ai/v1"
|
|
61
|
+
env_key = "BLACKBOX_API_KEY"
|
|
62
|
+
wire_api = "chat"
|
|
63
|
+
|
|
64
|
+
[debug]
|
|
65
|
+
log_requests = true`;
|
|
66
|
+
// Use Blackbox provider with custom configuration
|
|
67
|
+
return `mkdir -p ~/.codex && cat > ~/.codex/config.toml << 'EOF'
|
|
68
|
+
${configToml}
|
|
69
|
+
EOF
|
|
70
|
+
BLACKBOX_API_KEY="${resolved.userApiKey}" codex exec --json --dangerously-bypass-approvals-and-sandbox '${escapedTask}'`;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// Create config.toml for OpenAI provider
|
|
74
|
+
const configToml = `model = "${resolved.selectedModel}"
|
|
75
|
+
model_provider = "openai"
|
|
76
|
+
|
|
77
|
+
[shell_environment_policy]
|
|
78
|
+
ignore_default_excludes = true
|
|
79
|
+
inherit = "all"
|
|
80
|
+
|
|
81
|
+
[model_providers.openai]
|
|
82
|
+
name = "OpenAI"
|
|
83
|
+
base_url = "https://api.openai.com/v1"
|
|
84
|
+
env_key = "OPENAI_API_KEY"
|
|
85
|
+
wire_api = "responses"
|
|
86
|
+
|
|
87
|
+
[debug]
|
|
88
|
+
log_requests = true`;
|
|
89
|
+
// Use original OpenAI provider with custom configuration
|
|
90
|
+
return `mkdir -p ~/.codex && cat > ~/.codex/config.toml << 'EOF'
|
|
91
|
+
${configToml}
|
|
92
|
+
EOF
|
|
93
|
+
OPENAI_API_KEY="${resolved.userApiKey}" codex exec --json --dangerously-bypass-approvals-and-sandbox '${escapedTask}'`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
case 'gemini': {
|
|
97
|
+
const geminiApiKey = process.env['GEMINI_API_KEY'];
|
|
98
|
+
if (!geminiApiKey) {
|
|
99
|
+
throw new Error('GEMINI_API_KEY environment variable is required for Gemini agent');
|
|
100
|
+
}
|
|
101
|
+
return `GEMINI_API_KEY="${geminiApiKey}" gemini --model "${model}" --yolo '${escapedTask}' --output-format stream-json`;
|
|
102
|
+
}
|
|
103
|
+
default:
|
|
104
|
+
throw new Error(`Unsupported agent type: ${agentType}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Builds the enhanced Claude command with jq parsing for readable output.
|
|
109
|
+
* Used specifically in multi-agent scenarios for better output formatting.
|
|
110
|
+
*/
|
|
111
|
+
export function buildClaudeCommandWithJqParsing(model, task, outputFile) {
|
|
112
|
+
const blackboxApiKey = process.env['BLACKBOX_API_KEY'];
|
|
113
|
+
if (!blackboxApiKey) {
|
|
114
|
+
throw new Error('BLACKBOX_API_KEY environment variable is required for Claude agent');
|
|
115
|
+
}
|
|
116
|
+
const escapedTask = task.replace(/'/g, "'\\''");
|
|
117
|
+
return `ANTHROPIC_API_KEY="${blackboxApiKey}" ANTHROPIC_BASE_URL="https://api.blackbox.ai" claude --model "${model}" -p --output-format=stream-json --dangerously-skip-permissions --verbose '${escapedTask}' 2>&1 | jq -r '
|
|
118
|
+
if .type == "assistant" and .message.content then
|
|
119
|
+
.message.content[] |
|
|
120
|
+
if .type == "text" then .text
|
|
121
|
+
elif .type == "tool_use" then
|
|
122
|
+
"+-------------------------------------------------------------+\\n" +
|
|
123
|
+
"| 🔧 TOOL USE: \\(.name)\\n" +
|
|
124
|
+
"+-------------------------------------------------------------+\\n" +
|
|
125
|
+
"| Input:\\n" +
|
|
126
|
+
((.input | @json | split("\\n")) | map("| " + .) | join("\\n")) + "\\n" +
|
|
127
|
+
"+-------------------------------------------------------------+\\n"
|
|
128
|
+
else empty
|
|
129
|
+
end
|
|
130
|
+
elif .type == "user" and .message.content then
|
|
131
|
+
.message.content[] |
|
|
132
|
+
if .type == "tool_result" then
|
|
133
|
+
"\\n" +
|
|
134
|
+
((.content | split("\\n")) as $lines |
|
|
135
|
+
if ($lines | length) > 10 then
|
|
136
|
+
($lines[:10] | join("\\n")) + "\\n" +
|
|
137
|
+
"\\n... (\\($lines | length - 10) more lines hidden) ...\\n"
|
|
138
|
+
else
|
|
139
|
+
$lines | join("\\n")
|
|
140
|
+
end) +
|
|
141
|
+
"\\n"
|
|
142
|
+
else empty
|
|
143
|
+
end
|
|
144
|
+
else empty
|
|
145
|
+
end
|
|
146
|
+
' > ${outputFile} 2>&1`;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Builds the enhanced Codex command with jq parsing for readable output.
|
|
150
|
+
* Used specifically in multi-agent scenarios for better output formatting.
|
|
151
|
+
*/
|
|
152
|
+
export function buildCodexCommandWithJqParsing(model, task, outputFile) {
|
|
153
|
+
// Resolve model to use Blackbox provider if available
|
|
154
|
+
const apiKeys = {
|
|
155
|
+
blackbox_api_key: process.env['BLACKBOX_API_KEY'],
|
|
156
|
+
openai_api_key: process.env['OPENAI_API_KEY']
|
|
157
|
+
};
|
|
158
|
+
const resolved = resolveOpenAIModel(model, apiKeys);
|
|
159
|
+
if (!resolved.userApiKey) {
|
|
160
|
+
throw new Error('Either BLACKBOX_API_KEY or OPENAI_API_KEY environment variable is required for Codex agent');
|
|
161
|
+
}
|
|
162
|
+
const escapedTask = task.replace(/'/g, "'\\''");
|
|
163
|
+
// Check if using Blackbox provider
|
|
164
|
+
if (resolved.selectedModel.startsWith('blackboxai/')) {
|
|
165
|
+
const blackboxModel = resolved.selectedModel;
|
|
166
|
+
// Create config.toml for Blackbox provider
|
|
167
|
+
const configToml = `model = "${blackboxModel}"
|
|
168
|
+
model_provider = "blackbox-ai-gateway"
|
|
169
|
+
|
|
170
|
+
[shell_environment_policy]
|
|
171
|
+
ignore_default_excludes = true
|
|
172
|
+
inherit = "all"
|
|
173
|
+
|
|
174
|
+
[model_providers.blackbox-ai-gateway]
|
|
175
|
+
name = "BlackBox AI Gateway"
|
|
176
|
+
base_url = "https://api.blackbox.ai/v1"
|
|
177
|
+
env_key = "BLACKBOX_API_KEY"
|
|
178
|
+
wire_api = "chat"
|
|
179
|
+
|
|
180
|
+
[debug]
|
|
181
|
+
log_requests = true`;
|
|
182
|
+
return `mkdir -p ~/.codex && cat > ~/.codex/config.toml << 'EOF'
|
|
183
|
+
${configToml}
|
|
184
|
+
EOF
|
|
185
|
+
BLACKBOX_API_KEY="${resolved.userApiKey}" codex exec --json --dangerously-bypass-approvals-and-sandbox '${escapedTask}' 2>&1 | jq -r '
|
|
186
|
+
if .type == "item.completed" and .item.type == "agent_message" then
|
|
187
|
+
.item.text
|
|
188
|
+
elif .type == "item.started" and .item.type == "command_execution" then
|
|
189
|
+
"\\n🔧 EXECUTING: " + .item.command + "\\n"
|
|
190
|
+
elif .type == "item.completed" and .item.type == "command_execution" then
|
|
191
|
+
if .item.exit_code == 0 then
|
|
192
|
+
((.item.aggregated_output | split("\\n")) as $lines |
|
|
193
|
+
if ($lines | length) > 20 then
|
|
194
|
+
($lines[:20] | join("\\n")) + "\\n" +
|
|
195
|
+
"\\n... (\\($lines | length - 20) more lines hidden) ...\\n"
|
|
196
|
+
else
|
|
197
|
+
$lines | join("\\n")
|
|
198
|
+
end) + "\\n"
|
|
199
|
+
else
|
|
200
|
+
"❌ Command failed with exit code: " + (.item.exit_code | tostring) + "\\n" + .item.aggregated_output + "\\n"
|
|
201
|
+
end
|
|
202
|
+
elif .type == "turn.started" then
|
|
203
|
+
"🚀 Starting Codex execution...\\n"
|
|
204
|
+
elif .type == "turn.completed" then
|
|
205
|
+
"✅ Codex execution completed.\\n"
|
|
206
|
+
else empty
|
|
207
|
+
end
|
|
208
|
+
' > ${outputFile} 2>&1`;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// Create config.toml for OpenAI provider
|
|
212
|
+
const configToml = `model = "${resolved.selectedModel}"
|
|
213
|
+
model_provider = "openai"
|
|
214
|
+
|
|
215
|
+
[shell_environment_policy]
|
|
216
|
+
ignore_default_excludes = true
|
|
217
|
+
inherit = "all"
|
|
218
|
+
|
|
219
|
+
[model_providers.openai]
|
|
220
|
+
name = "OpenAI"
|
|
221
|
+
base_url = "https://api.openai.com/v1"
|
|
222
|
+
env_key = "OPENAI_API_KEY"
|
|
223
|
+
wire_api = "responses"
|
|
224
|
+
|
|
225
|
+
[debug]
|
|
226
|
+
log_requests = true`;
|
|
227
|
+
return `mkdir -p ~/.codex && cat > ~/.codex/config.toml << 'EOF'
|
|
228
|
+
${configToml}
|
|
229
|
+
EOF
|
|
230
|
+
OPENAI_API_KEY="${resolved.userApiKey}" codex exec --json --dangerously-bypass-approvals-and-sandbox '${escapedTask}' 2>&1 | jq -r '
|
|
231
|
+
if .type == "item.completed" and .item.type == "agent_message" then
|
|
232
|
+
.item.text
|
|
233
|
+
elif .type == "item.started" and .item.type == "command_execution" then
|
|
234
|
+
"\\n🔧 EXECUTING: " + .item.command + "\\n"
|
|
235
|
+
elif .type == "item.completed" and .item.type == "command_execution" then
|
|
236
|
+
if .item.exit_code == 0 then
|
|
237
|
+
((.item.aggregated_output | split("\\n")) as $lines |
|
|
238
|
+
if ($lines | length) > 20 then
|
|
239
|
+
($lines[:20] | join("\\n")) + "\\n" +
|
|
240
|
+
"\\n... (\\($lines | length - 20) more lines hidden) ...\\n"
|
|
241
|
+
else
|
|
242
|
+
$lines | join("\\n")
|
|
243
|
+
end) + "\\n"
|
|
244
|
+
else
|
|
245
|
+
"❌ Command failed with exit code: " + (.item.exit_code | tostring) + "\\n" + .item.aggregated_output + "\\n"
|
|
246
|
+
end
|
|
247
|
+
elif .type == "turn.started" then
|
|
248
|
+
"🚀 Starting Codex execution...\\n"
|
|
249
|
+
elif .type == "turn.completed" then
|
|
250
|
+
"✅ Codex execution completed.\\n"
|
|
251
|
+
else empty
|
|
252
|
+
end
|
|
253
|
+
' > ${outputFile} 2>&1`;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Builds the enhanced Gemini command with jq parsing for readable output.
|
|
258
|
+
* Used specifically in multi-agent scenarios for better output formatting.
|
|
259
|
+
*/
|
|
260
|
+
export function buildGeminiCommandWithJqParsing(model, task, outputFile) {
|
|
261
|
+
const geminiApiKey = process.env['GEMINI_API_KEY'];
|
|
262
|
+
if (!geminiApiKey) {
|
|
263
|
+
throw new Error('GEMINI_API_KEY environment variable is required for Gemini agent');
|
|
264
|
+
}
|
|
265
|
+
const escapedTask = task.replace(/'/g, "'\\''");
|
|
266
|
+
return `GEMINI_API_KEY="${geminiApiKey}" gemini --model "${model}" --yolo '${escapedTask}' --output-format stream-json | jq -r '
|
|
267
|
+
def hr(n): ("─" * n);
|
|
268
|
+
|
|
269
|
+
def box(title; body):
|
|
270
|
+
"\\n┌" + hr(78) + "┐\\n" +
|
|
271
|
+
"│ " + (title | ascii_upcase) + (" " * (77 - (title|length))) + "│\\n" +
|
|
272
|
+
"├" + hr(78) + "┤\\n" +
|
|
273
|
+
(body
|
|
274
|
+
| split("\\n")
|
|
275
|
+
| map("│ " + . + (" " * (77 - (. | length))))
|
|
276
|
+
| join("\\n")
|
|
277
|
+
) +
|
|
278
|
+
"\\n└" + hr(78) + "┘";
|
|
279
|
+
|
|
280
|
+
if .type == "message" and .role == "assistant" then
|
|
281
|
+
box("assistant"; .content)
|
|
282
|
+
elif .type == "tool_use" then
|
|
283
|
+
box("tool call: " + .tool_name; "INPUT:\\n" + (.parameters | tojson))
|
|
284
|
+
elif .type == "tool_result" then
|
|
285
|
+
box("tool result"; "STATUS: " + .status + (if .output != null and .output != "" then "\\nOUTPUT:\\n" + .output else "" end))
|
|
286
|
+
else empty end' > ${outputFile} 2>&1`;
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=agentCommandBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentCommandBuilder.js","sourceRoot":"","sources":["../../../src/utils/agentCommandBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export declare enum ShellType {
|
|
7
|
+
BASH = "bash",
|
|
8
|
+
ZSH = "zsh",
|
|
9
|
+
FISH = "fish",
|
|
10
|
+
POWERSHELL = "powershell",
|
|
11
|
+
UNKNOWN = "unknown"
|
|
12
|
+
}
|
|
13
|
+
export interface ShellConfig {
|
|
14
|
+
type: ShellType;
|
|
15
|
+
configPath: string;
|
|
16
|
+
aliasFormat: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Detect the user's current shell
|
|
20
|
+
*/
|
|
21
|
+
export declare function detectShell(): Promise<ShellType>;
|
|
22
|
+
/**
|
|
23
|
+
* Get the config file path for a given shell
|
|
24
|
+
*/
|
|
25
|
+
export declare function getShellConfigPath(shell: ShellType): string;
|
|
26
|
+
/**
|
|
27
|
+
* Check if an alias already exists in the config file
|
|
28
|
+
*/
|
|
29
|
+
export declare function aliasExists(aliasName: string, configPath: string): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Add an alias to the shell config file
|
|
32
|
+
*/
|
|
33
|
+
export declare function addAlias(aliasName: string, command: string, configPath: string, shellType: ShellType): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Remove an alias from the shell config file
|
|
36
|
+
*/
|
|
37
|
+
export declare function removeAlias(aliasName: string, configPath: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Get the full shell config for alias operations
|
|
40
|
+
*/
|
|
41
|
+
export declare function getShellConfig(): Promise<ShellConfig>;
|
|
42
|
+
/**
|
|
43
|
+
* Format an alias command for a specific shell
|
|
44
|
+
*/
|
|
45
|
+
export declare function formatAliasCommand(aliasName: string, command: string, shellType: ShellType): string;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs/promises';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { homedir } from 'node:os';
|
|
9
|
+
import { existsSync } from 'node:fs';
|
|
10
|
+
export var ShellType;
|
|
11
|
+
(function (ShellType) {
|
|
12
|
+
ShellType["BASH"] = "bash";
|
|
13
|
+
ShellType["ZSH"] = "zsh";
|
|
14
|
+
ShellType["FISH"] = "fish";
|
|
15
|
+
ShellType["POWERSHELL"] = "powershell";
|
|
16
|
+
ShellType["UNKNOWN"] = "unknown";
|
|
17
|
+
})(ShellType || (ShellType = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Detect the user's current shell
|
|
20
|
+
*/
|
|
21
|
+
export async function detectShell() {
|
|
22
|
+
// Check SHELL environment variable on Unix/Linux/macOS
|
|
23
|
+
const shellEnv = process.env['SHELL'];
|
|
24
|
+
if (shellEnv) {
|
|
25
|
+
const shellName = path.basename(shellEnv).toLowerCase();
|
|
26
|
+
if (shellName.includes('zsh')) {
|
|
27
|
+
return ShellType.ZSH;
|
|
28
|
+
}
|
|
29
|
+
if (shellName.includes('bash')) {
|
|
30
|
+
return ShellType.BASH;
|
|
31
|
+
}
|
|
32
|
+
if (shellName.includes('fish')) {
|
|
33
|
+
return ShellType.FISH;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Check for PowerShell on Windows
|
|
37
|
+
if (process.platform === 'win32') {
|
|
38
|
+
if (process.env['PSModulePath']) {
|
|
39
|
+
return ShellType.POWERSHELL;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Fallback based on platform
|
|
43
|
+
if (process.platform === 'darwin') {
|
|
44
|
+
// macOS defaults to zsh since Catalina
|
|
45
|
+
return ShellType.ZSH;
|
|
46
|
+
}
|
|
47
|
+
if (process.platform === 'linux') {
|
|
48
|
+
// Linux typically defaults to bash
|
|
49
|
+
return ShellType.BASH;
|
|
50
|
+
}
|
|
51
|
+
return ShellType.UNKNOWN;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the config file path for a given shell
|
|
55
|
+
*/
|
|
56
|
+
export function getShellConfigPath(shell) {
|
|
57
|
+
const home = homedir();
|
|
58
|
+
switch (shell) {
|
|
59
|
+
case ShellType.BASH:
|
|
60
|
+
// macOS uses .bash_profile, Linux uses .bashrc
|
|
61
|
+
if (process.platform === 'darwin') {
|
|
62
|
+
return path.join(home, '.bash_profile');
|
|
63
|
+
}
|
|
64
|
+
return path.join(home, '.bashrc');
|
|
65
|
+
case ShellType.ZSH:
|
|
66
|
+
return path.join(home, '.zshrc');
|
|
67
|
+
case ShellType.FISH:
|
|
68
|
+
return path.join(home, '.config', 'fish', 'config.fish');
|
|
69
|
+
case ShellType.POWERSHELL:
|
|
70
|
+
// PowerShell profile path
|
|
71
|
+
return path.join(home, 'Documents', 'PowerShell', 'Microsoft.PowerShell_profile.ps1');
|
|
72
|
+
default:
|
|
73
|
+
return '';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check if an alias already exists in the config file
|
|
78
|
+
*/
|
|
79
|
+
export async function aliasExists(aliasName, configPath) {
|
|
80
|
+
try {
|
|
81
|
+
if (!existsSync(configPath)) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
85
|
+
const lines = content.split('\n');
|
|
86
|
+
// Match alias definition: alias name='...' or alias name="..." or alias name=...
|
|
87
|
+
const aliasRegex = new RegExp(`^\\s*alias\\s+${aliasName}[=\\s]`, 'i');
|
|
88
|
+
for (const line of lines) {
|
|
89
|
+
if (aliasRegex.test(line)) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// If we can't read the file, assume alias doesn't exist
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Add an alias to the shell config file
|
|
102
|
+
*/
|
|
103
|
+
export async function addAlias(aliasName, command, configPath, shellType) {
|
|
104
|
+
// Check if alias already exists
|
|
105
|
+
const exists = await aliasExists(aliasName, configPath);
|
|
106
|
+
if (exists) {
|
|
107
|
+
throw new Error(`Alias '${aliasName}' already exists in ${configPath}`);
|
|
108
|
+
}
|
|
109
|
+
// Format the alias command
|
|
110
|
+
const aliasCommand = formatAliasCommand(aliasName, command, shellType);
|
|
111
|
+
// Prepare the content to append
|
|
112
|
+
const comment = '# Blackbox CLI alias - added by \'blackbox configure\'';
|
|
113
|
+
const contentToAppend = `\n${comment}\n${aliasCommand}\n`;
|
|
114
|
+
// Ensure directory exists (for fish)
|
|
115
|
+
const dir = path.dirname(configPath);
|
|
116
|
+
await fs.mkdir(dir, { recursive: true });
|
|
117
|
+
// Append to config file
|
|
118
|
+
await fs.appendFile(configPath, contentToAppend, 'utf-8');
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Remove an alias from the shell config file
|
|
122
|
+
*/
|
|
123
|
+
export async function removeAlias(aliasName, configPath) {
|
|
124
|
+
try {
|
|
125
|
+
if (!existsSync(configPath)) {
|
|
126
|
+
return; // Nothing to remove
|
|
127
|
+
}
|
|
128
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
129
|
+
const lines = content.split('\n');
|
|
130
|
+
// Match alias definition and the comment before it
|
|
131
|
+
const aliasRegex = new RegExp(`^\\s*alias\\s+${aliasName}[=\\s]`, 'i');
|
|
132
|
+
const commentRegex = /^\s*#\s*Blackbox CLI alias/i;
|
|
133
|
+
const filteredLines = [];
|
|
134
|
+
let skipNext = false;
|
|
135
|
+
for (let i = 0; i < lines.length; i++) {
|
|
136
|
+
const line = lines[i];
|
|
137
|
+
// Check if this is the comment line
|
|
138
|
+
if (commentRegex.test(line)) {
|
|
139
|
+
// Check if next line is the alias we're looking for
|
|
140
|
+
if (i + 1 < lines.length && aliasRegex.test(lines[i + 1])) {
|
|
141
|
+
skipNext = true;
|
|
142
|
+
continue; // Skip the comment
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Check if this is the alias line
|
|
146
|
+
if (skipNext && aliasRegex.test(line)) {
|
|
147
|
+
skipNext = false;
|
|
148
|
+
continue; // Skip the alias
|
|
149
|
+
}
|
|
150
|
+
// Check if this is the alias without a comment
|
|
151
|
+
if (aliasRegex.test(line)) {
|
|
152
|
+
continue; // Skip the alias
|
|
153
|
+
}
|
|
154
|
+
filteredLines.push(line);
|
|
155
|
+
}
|
|
156
|
+
// Write back to file
|
|
157
|
+
await fs.writeFile(configPath, filteredLines.join('\n'), 'utf-8');
|
|
158
|
+
// Remove alias from current shell session
|
|
159
|
+
// This ensures the alias is removed immediately without needing to source the config file
|
|
160
|
+
const { exec } = await import('node:child_process');
|
|
161
|
+
const { promisify } = await import('node:util');
|
|
162
|
+
const execAsync = promisify(exec);
|
|
163
|
+
try {
|
|
164
|
+
// Use unalias command to remove from current session's alias list
|
|
165
|
+
await execAsync(`unalias ${aliasName} 2>/dev/null || true`);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Ignore errors from unalias - it's not critical if it fails
|
|
169
|
+
// (e.g., alias might not be loaded in current session)
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
throw new Error(`Failed to remove alias: ${error instanceof Error ? error.message : error}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get the full shell config for alias operations
|
|
178
|
+
*/
|
|
179
|
+
export async function getShellConfig() {
|
|
180
|
+
const shellType = await detectShell();
|
|
181
|
+
const configPath = getShellConfigPath(shellType);
|
|
182
|
+
const aliasFormat = getAliasFormat(shellType);
|
|
183
|
+
return {
|
|
184
|
+
type: shellType,
|
|
185
|
+
configPath,
|
|
186
|
+
aliasFormat,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Format an alias command for a specific shell
|
|
191
|
+
*/
|
|
192
|
+
export function formatAliasCommand(aliasName, command, shellType) {
|
|
193
|
+
switch (shellType) {
|
|
194
|
+
case ShellType.BASH:
|
|
195
|
+
case ShellType.ZSH:
|
|
196
|
+
return `alias ${aliasName}='${command}'`;
|
|
197
|
+
case ShellType.FISH:
|
|
198
|
+
return `alias ${aliasName} '${command}'`;
|
|
199
|
+
case ShellType.POWERSHELL:
|
|
200
|
+
return `Set-Alias -Name ${aliasName} -Value ${command}`;
|
|
201
|
+
default:
|
|
202
|
+
return `alias ${aliasName}='${command}'`;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get the alias format string for a shell type
|
|
207
|
+
*/
|
|
208
|
+
function getAliasFormat(shellType) {
|
|
209
|
+
switch (shellType) {
|
|
210
|
+
case ShellType.BASH:
|
|
211
|
+
case ShellType.ZSH:
|
|
212
|
+
return "alias {name}='{command}'";
|
|
213
|
+
case ShellType.FISH:
|
|
214
|
+
return "alias {name} '{command}'";
|
|
215
|
+
case ShellType.POWERSHELL:
|
|
216
|
+
return "Set-Alias -Name {name} -Value {command}";
|
|
217
|
+
default:
|
|
218
|
+
return "alias {name}='{command}'";
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=shellShortcut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shellShortcut.js","sourceRoot":"","sources":["../../../src/utils/shellShortcut.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,27 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import fs from 'node:fs/promises';
|
|
7
|
-
import * as os from 'node:os';
|
|
8
7
|
import path from 'node:path';
|
|
9
8
|
// Individual warning checks
|
|
10
|
-
const homeDirectoryCheck = {
|
|
11
|
-
id: 'home-directory',
|
|
12
|
-
check: async (workspaceRoot) => {
|
|
13
|
-
try {
|
|
14
|
-
const [workspaceRealPath, homeRealPath] = await Promise.all([
|
|
15
|
-
fs.realpath(workspaceRoot),
|
|
16
|
-
fs.realpath(os.homedir()),
|
|
17
|
-
]);
|
|
18
|
-
if (workspaceRealPath === homeRealPath) {
|
|
19
|
-
return 'You are running Blackbox Code in your home directory. It is recommended to run in a project-specific directory.';
|
|
20
|
-
}
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
catch (_err) {
|
|
24
|
-
return 'Could not verify the current directory due to a file system error.';
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
9
|
const rootDirectoryCheck = {
|
|
29
10
|
id: 'root-directory',
|
|
30
11
|
check: async (workspaceRoot) => {
|
|
@@ -44,7 +25,6 @@ const rootDirectoryCheck = {
|
|
|
44
25
|
};
|
|
45
26
|
// All warning checks
|
|
46
27
|
const WARNING_CHECKS = [
|
|
47
|
-
homeDirectoryCheck,
|
|
48
28
|
rootDirectoryCheck,
|
|
49
29
|
];
|
|
50
30
|
export async function getUserStartupWarnings(workspaceRoot) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userStartupWarnings.js","sourceRoot":"","sources":["../../../src/utils/userStartupWarnings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"userStartupWarnings.js","sourceRoot":"","sources":["../../../src/utils/userStartupWarnings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,4BAA4B;AAC5B,MAAM,kBAAkB,GAAiB;IACvC,EAAE,EAAE,gBAAgB;IACpB,KAAK,EAAE,KAAK,EAAE,aAAqB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC3D,MAAM,YAAY,GAChB,yLAAyL,CAAC;YAE5L,gCAAgC;YAChC,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,iBAAiB,EAAE,CAAC;gBAC1D,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,IAAa,EAAE,CAAC;YACvB,OAAO,oEAAoE,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAC;AAEF,qBAAqB;AACrB,MAAM,cAAc,GAA4B;IAC9C,kBAAkB;CACnB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,aAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAC1D,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AAC/C,CAAC"}
|