@calliopelabs/cli 0.1.1
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/LICENSE +21 -0
- package/README.md +222 -0
- package/dist/bin.d.ts +10 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +156 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +446 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +79 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +181 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/providers.d.ts +19 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +383 -0
- package/dist/providers.js.map +1 -0
- package/dist/setup.d.ts +15 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +286 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools.d.ts +15 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +281 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +47 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +60 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqCH;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CA+M9D;AAgDD;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAMjD;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI Setup Wizard
|
|
3
|
+
*
|
|
4
|
+
* Interactive first-run setup for API keys and preferences.
|
|
5
|
+
*/
|
|
6
|
+
import { input, select, confirm, password } from '@inquirer/prompts';
|
|
7
|
+
import * as config from './config.js';
|
|
8
|
+
// ANSI colors
|
|
9
|
+
const colors = {
|
|
10
|
+
reset: '\x1b[0m',
|
|
11
|
+
bold: '\x1b[1m',
|
|
12
|
+
dim: '\x1b[2m',
|
|
13
|
+
cyan: '\x1b[36m',
|
|
14
|
+
green: '\x1b[32m',
|
|
15
|
+
yellow: '\x1b[33m',
|
|
16
|
+
magenta: '\x1b[35m',
|
|
17
|
+
brightCyan: '\x1b[96m',
|
|
18
|
+
};
|
|
19
|
+
function c(text, color) {
|
|
20
|
+
return `${colors[color]}${text}${colors.reset}`;
|
|
21
|
+
}
|
|
22
|
+
const BANNER = `
|
|
23
|
+
${c(' ╭─────────────────────────────────────────────────────────────────╮', 'cyan')}
|
|
24
|
+
${c(' │', 'cyan')} ${c('│', 'cyan')}
|
|
25
|
+
${c(' │', 'cyan')} ${c(' ██████╗ █████╗ ██╗ ██╗ ██╗ ██████╗ ██████╗ ███████╗', 'brightCyan')} ${c('│', 'cyan')}
|
|
26
|
+
${c(' │', 'cyan')} ${c('██╔════╝██╔══██╗██║ ██║ ██║██╔═══██╗██╔══██╗██╔════╝', 'brightCyan')} ${c('│', 'cyan')}
|
|
27
|
+
${c(' │', 'cyan')} ${c('██║ ███████║██║ ██║ ██║██║ ██║██████╔╝█████╗ ', 'cyan')} ${c('│', 'cyan')}
|
|
28
|
+
${c(' │', 'cyan')} ${c('██║ ██╔══██║██║ ██║ ██║██║ ██║██╔═══╝ ██╔══╝ ', 'cyan')} ${c('│', 'cyan')}
|
|
29
|
+
${c(' │', 'cyan')} ${c('╚██████╗██║ ██║███████╗███████╗██║╚██████╔╝██║ ███████╗', 'brightCyan')} ${c('│', 'cyan')}
|
|
30
|
+
${c(' │', 'cyan')} ${c(' ╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚══════╝', 'cyan')} ${c('│', 'cyan')}
|
|
31
|
+
${c(' │', 'cyan')} ${c('│', 'cyan')}
|
|
32
|
+
${c(' │', 'cyan')} ${c('The Muse of Digital Eloquence', 'dim')} ${c('│', 'cyan')}
|
|
33
|
+
${c(' │', 'cyan')} ${c('│', 'cyan')}
|
|
34
|
+
${c(' ╰─────────────────────────────────────────────────────────────────╯', 'cyan')}
|
|
35
|
+
`;
|
|
36
|
+
/**
|
|
37
|
+
* Run the setup wizard
|
|
38
|
+
*/
|
|
39
|
+
export async function runSetup(force = false) {
|
|
40
|
+
// Check if already set up
|
|
41
|
+
if (config.isSetupComplete() && !force) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
console.log(BANNER);
|
|
45
|
+
console.log();
|
|
46
|
+
console.log(c(' Welcome to Calliope!', 'bold'));
|
|
47
|
+
console.log(c(' Let\'s set up your AI providers and preferences.', 'dim'));
|
|
48
|
+
console.log();
|
|
49
|
+
// Check for existing environment variables
|
|
50
|
+
const envProviders = [];
|
|
51
|
+
if (process.env.ANTHROPIC_API_KEY)
|
|
52
|
+
envProviders.push('anthropic');
|
|
53
|
+
if (process.env.GOOGLE_API_KEY)
|
|
54
|
+
envProviders.push('google');
|
|
55
|
+
if (process.env.OPENAI_API_KEY)
|
|
56
|
+
envProviders.push('openai');
|
|
57
|
+
if (process.env.TOGETHER_API_KEY)
|
|
58
|
+
envProviders.push('together');
|
|
59
|
+
if (process.env.OPENROUTER_API_KEY)
|
|
60
|
+
envProviders.push('openrouter');
|
|
61
|
+
if (process.env.GROQ_API_KEY)
|
|
62
|
+
envProviders.push('groq');
|
|
63
|
+
if (process.env.MISTRAL_API_KEY)
|
|
64
|
+
envProviders.push('mistral');
|
|
65
|
+
if (process.env.OLLAMA_BASE_URL)
|
|
66
|
+
envProviders.push('ollama');
|
|
67
|
+
if (process.env.AI21_API_KEY)
|
|
68
|
+
envProviders.push('ai21');
|
|
69
|
+
if (process.env.HUGGINGFACE_API_KEY)
|
|
70
|
+
envProviders.push('huggingface');
|
|
71
|
+
if (process.env.LITELLM_BASE_URL)
|
|
72
|
+
envProviders.push('litellm');
|
|
73
|
+
if (envProviders.length > 0) {
|
|
74
|
+
console.log(c(` Found API keys in environment: ${envProviders.join(', ')}`, 'green'));
|
|
75
|
+
console.log();
|
|
76
|
+
}
|
|
77
|
+
// Provider selection
|
|
78
|
+
const providerChoice = await select({
|
|
79
|
+
message: 'Which AI provider would you like to use?',
|
|
80
|
+
choices: [
|
|
81
|
+
{ value: 'anthropic', name: 'Anthropic Claude (Recommended)', description: 'Claude 4 Sonnet - best for coding' },
|
|
82
|
+
{ value: 'google', name: 'Google Gemini', description: 'Gemini 2.0 Flash - fast and capable' },
|
|
83
|
+
{ value: 'openai', name: 'OpenAI GPT', description: 'GPT-4o - versatile' },
|
|
84
|
+
{ value: 'openrouter', name: 'OpenRouter', description: 'Access multiple models via one API' },
|
|
85
|
+
{ value: 'together', name: 'Together AI', description: 'Open source models (Llama, Mixtral)' },
|
|
86
|
+
{ value: 'groq', name: 'Groq', description: 'Ultra-fast inference' },
|
|
87
|
+
{ value: 'mistral', name: 'Mistral AI', description: 'Mistral Large - European AI' },
|
|
88
|
+
{ value: 'ollama', name: 'Ollama (Local)', description: 'Run models locally - no API key needed' },
|
|
89
|
+
{ value: 'litellm', name: 'LiteLLM Proxy', description: 'Unified proxy for multiple providers' },
|
|
90
|
+
{ value: 'ai21', name: 'AI21 Labs', description: 'Jamba models' },
|
|
91
|
+
{ value: 'huggingface', name: 'HuggingFace', description: 'Open source model inference' },
|
|
92
|
+
{ value: 'auto', name: 'Auto (use first available)', description: 'Automatically select based on available keys' },
|
|
93
|
+
],
|
|
94
|
+
default: envProviders[0] || 'anthropic',
|
|
95
|
+
});
|
|
96
|
+
config.set('defaultProvider', providerChoice);
|
|
97
|
+
// API Key or Base URL setup (if not in env)
|
|
98
|
+
const needsKey = providerChoice !== 'auto' && !envProviders.includes(providerChoice);
|
|
99
|
+
// Special handling for Ollama and LiteLLM (use base URL, not API key)
|
|
100
|
+
if (providerChoice === 'ollama' && needsKey) {
|
|
101
|
+
console.log();
|
|
102
|
+
console.log(c(` Ollama runs locally and doesn't need an API key.`, 'dim'));
|
|
103
|
+
const baseUrl = await input({
|
|
104
|
+
message: 'Enter your Ollama base URL:',
|
|
105
|
+
default: 'http://localhost:11434',
|
|
106
|
+
});
|
|
107
|
+
config.set('ollamaBaseUrl', baseUrl);
|
|
108
|
+
}
|
|
109
|
+
else if (providerChoice === 'litellm' && needsKey) {
|
|
110
|
+
console.log();
|
|
111
|
+
console.log(c(` LiteLLM is a proxy server for multiple providers.`, 'dim'));
|
|
112
|
+
const baseUrl = await input({
|
|
113
|
+
message: 'Enter your LiteLLM proxy URL:',
|
|
114
|
+
default: 'http://localhost:4000',
|
|
115
|
+
});
|
|
116
|
+
config.set('litellmBaseUrl', baseUrl);
|
|
117
|
+
const needsApiKey = await confirm({
|
|
118
|
+
message: 'Does your LiteLLM proxy require an API key?',
|
|
119
|
+
default: false,
|
|
120
|
+
});
|
|
121
|
+
if (needsApiKey) {
|
|
122
|
+
const apiKey = await password({
|
|
123
|
+
message: 'Enter your LiteLLM API key:',
|
|
124
|
+
mask: '*',
|
|
125
|
+
});
|
|
126
|
+
if (apiKey && apiKey.length > 0) {
|
|
127
|
+
config.set('litellmApiKey', apiKey);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else if (needsKey) {
|
|
132
|
+
console.log();
|
|
133
|
+
console.log(c(` You'll need an API key for ${providerChoice}.`, 'dim'));
|
|
134
|
+
const apiKeyUrls = {
|
|
135
|
+
anthropic: 'https://console.anthropic.com/settings/keys',
|
|
136
|
+
google: 'https://aistudio.google.com/apikey',
|
|
137
|
+
openai: 'https://platform.openai.com/api-keys',
|
|
138
|
+
openrouter: 'https://openrouter.ai/keys',
|
|
139
|
+
together: 'https://api.together.xyz/settings/api-keys',
|
|
140
|
+
groq: 'https://console.groq.com/keys',
|
|
141
|
+
mistral: 'https://console.mistral.ai/api-keys',
|
|
142
|
+
ai21: 'https://studio.ai21.com/account/api-keys',
|
|
143
|
+
huggingface: 'https://huggingface.co/settings/tokens',
|
|
144
|
+
};
|
|
145
|
+
if (apiKeyUrls[providerChoice]) {
|
|
146
|
+
console.log(c(` Get one at: ${apiKeyUrls[providerChoice]}`, 'cyan'));
|
|
147
|
+
}
|
|
148
|
+
console.log();
|
|
149
|
+
// Provider-specific key patterns
|
|
150
|
+
const keyPatterns = {
|
|
151
|
+
anthropic: { prefix: 'sk-ant-', minLen: 40 },
|
|
152
|
+
openai: { prefix: 'sk-', minLen: 40 },
|
|
153
|
+
google: { minLen: 30 },
|
|
154
|
+
openrouter: { prefix: 'sk-or-', minLen: 40 },
|
|
155
|
+
together: { minLen: 40 },
|
|
156
|
+
groq: { prefix: 'gsk_', minLen: 40 },
|
|
157
|
+
mistral: { minLen: 30 },
|
|
158
|
+
ai21: { minLen: 30 },
|
|
159
|
+
huggingface: { prefix: 'hf_', minLen: 30 },
|
|
160
|
+
};
|
|
161
|
+
const pattern = keyPatterns[providerChoice] || { minLen: 20 };
|
|
162
|
+
const apiKey = await password({
|
|
163
|
+
message: `Enter your ${providerChoice} API key:`,
|
|
164
|
+
mask: '*',
|
|
165
|
+
validate: (value) => {
|
|
166
|
+
if (!value || value.length < pattern.minLen) {
|
|
167
|
+
return `API key too short (expected ${pattern.minLen}+ characters)`;
|
|
168
|
+
}
|
|
169
|
+
if (pattern.prefix && !value.startsWith(pattern.prefix)) {
|
|
170
|
+
return `${providerChoice} keys usually start with "${pattern.prefix}"`;
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
// Store the key
|
|
176
|
+
const keyMap = {
|
|
177
|
+
anthropic: 'anthropicApiKey',
|
|
178
|
+
google: 'googleApiKey',
|
|
179
|
+
openai: 'openaiApiKey',
|
|
180
|
+
openrouter: 'openrouterApiKey',
|
|
181
|
+
together: 'togetherApiKey',
|
|
182
|
+
groq: 'groqApiKey',
|
|
183
|
+
fireworks: 'fireworksApiKey',
|
|
184
|
+
mistral: 'mistralApiKey',
|
|
185
|
+
ai21: 'ai21ApiKey',
|
|
186
|
+
huggingface: 'huggingfaceApiKey',
|
|
187
|
+
};
|
|
188
|
+
if (keyMap[providerChoice]) {
|
|
189
|
+
config.set(keyMap[providerChoice], apiKey);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Persona selection
|
|
193
|
+
console.log();
|
|
194
|
+
const personaChoice = await select({
|
|
195
|
+
message: 'Choose Calliope\'s personality:',
|
|
196
|
+
choices: [
|
|
197
|
+
{ value: 'calliope', name: 'Calliope (Poetic)', description: 'The Muse - creative with artistic flair' },
|
|
198
|
+
{ value: 'professional', name: 'Professional', description: 'Clear, concise, and thorough' },
|
|
199
|
+
{ value: 'minimal', name: 'Minimal', description: 'Extremely brief and efficient' },
|
|
200
|
+
],
|
|
201
|
+
default: 'calliope',
|
|
202
|
+
});
|
|
203
|
+
config.set('persona', personaChoice);
|
|
204
|
+
// Fancy output
|
|
205
|
+
console.log();
|
|
206
|
+
const fancyOutput = await confirm({
|
|
207
|
+
message: 'Enable fancy terminal output (colors, spinners, ASCII art)?',
|
|
208
|
+
default: true,
|
|
209
|
+
});
|
|
210
|
+
config.set('fancyOutput', fancyOutput);
|
|
211
|
+
// Optional: Additional providers
|
|
212
|
+
console.log();
|
|
213
|
+
const addMore = await confirm({
|
|
214
|
+
message: 'Would you like to configure additional AI providers?',
|
|
215
|
+
default: false,
|
|
216
|
+
});
|
|
217
|
+
if (addMore) {
|
|
218
|
+
await configureAdditionalProviders(envProviders);
|
|
219
|
+
}
|
|
220
|
+
// Mark setup complete
|
|
221
|
+
config.markSetupComplete();
|
|
222
|
+
// Summary
|
|
223
|
+
console.log();
|
|
224
|
+
console.log(c(' ─────────────────────────────────────────', 'dim'));
|
|
225
|
+
console.log(c(' Setup complete!', 'green'));
|
|
226
|
+
console.log();
|
|
227
|
+
console.log(` ${c('Provider:', 'dim')} ${c(providerChoice, 'cyan')}`);
|
|
228
|
+
console.log(` ${c('Persona:', 'dim')} ${c(personaChoice, 'magenta')}`);
|
|
229
|
+
console.log(` ${c('Config:', 'dim')} ${c(config.getConfigPath(), 'dim')}`);
|
|
230
|
+
console.log();
|
|
231
|
+
console.log(c(' Type your first message to begin, or /help for commands.', 'dim'));
|
|
232
|
+
console.log(c(' ─────────────────────────────────────────', 'dim'));
|
|
233
|
+
console.log();
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Configure additional providers
|
|
238
|
+
*/
|
|
239
|
+
async function configureAdditionalProviders(existingEnvProviders) {
|
|
240
|
+
const providers = [
|
|
241
|
+
{ id: 'anthropic', name: 'Anthropic Claude', envKey: 'ANTHROPIC_API_KEY', configKey: 'anthropicApiKey' },
|
|
242
|
+
{ id: 'google', name: 'Google Gemini', envKey: 'GOOGLE_API_KEY', configKey: 'googleApiKey' },
|
|
243
|
+
{ id: 'openai', name: 'OpenAI GPT', envKey: 'OPENAI_API_KEY', configKey: 'openaiApiKey' },
|
|
244
|
+
{ id: 'openrouter', name: 'OpenRouter', envKey: 'OPENROUTER_API_KEY', configKey: 'openrouterApiKey' },
|
|
245
|
+
{ id: 'together', name: 'Together AI', envKey: 'TOGETHER_API_KEY', configKey: 'togetherApiKey' },
|
|
246
|
+
{ id: 'groq', name: 'Groq', envKey: 'GROQ_API_KEY', configKey: 'groqApiKey' },
|
|
247
|
+
{ id: 'mistral', name: 'Mistral AI', envKey: 'MISTRAL_API_KEY', configKey: 'mistralApiKey' },
|
|
248
|
+
{ id: 'ai21', name: 'AI21 Labs', envKey: 'AI21_API_KEY', configKey: 'ai21ApiKey' },
|
|
249
|
+
{ id: 'huggingface', name: 'HuggingFace', envKey: 'HUGGINGFACE_API_KEY', configKey: 'huggingfaceApiKey' },
|
|
250
|
+
];
|
|
251
|
+
for (const provider of providers) {
|
|
252
|
+
// Skip if already configured via env or selected as primary
|
|
253
|
+
if (existingEnvProviders.includes(provider.id)) {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
const existing = config.get(provider.configKey);
|
|
257
|
+
if (existing) {
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
const configure = await confirm({
|
|
261
|
+
message: `Configure ${provider.name}?`,
|
|
262
|
+
default: false,
|
|
263
|
+
});
|
|
264
|
+
if (configure) {
|
|
265
|
+
const apiKey = await password({
|
|
266
|
+
message: `Enter your ${provider.name} API key:`,
|
|
267
|
+
mask: '*',
|
|
268
|
+
});
|
|
269
|
+
if (apiKey && apiKey.length > 10) {
|
|
270
|
+
config.set(provider.configKey, apiKey);
|
|
271
|
+
console.log(c(` ✓ ${provider.name} configured`, 'green'));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Quick reconfigure (for /setup command)
|
|
278
|
+
*/
|
|
279
|
+
export async function reconfigure() {
|
|
280
|
+
console.log();
|
|
281
|
+
console.log(c(' Reconfiguring Calliope...', 'cyan'));
|
|
282
|
+
console.log();
|
|
283
|
+
await runSetup(true);
|
|
284
|
+
}
|
|
285
|
+
export default runSetup;
|
|
286
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Tools
|
|
3
|
+
*
|
|
4
|
+
* Tool definitions and execution for the agent.
|
|
5
|
+
*/
|
|
6
|
+
import type { Tool, ToolCall, ToolResult } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Available tools for the agent
|
|
9
|
+
*/
|
|
10
|
+
export declare const TOOLS: Tool[];
|
|
11
|
+
/**
|
|
12
|
+
* Execute a tool call
|
|
13
|
+
*/
|
|
14
|
+
export declare function executeTool(toolCall: ToolCall, cwd: string, timeout?: number): Promise<ToolResult>;
|
|
15
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,IAAI,EA8EvB,CAAC;AAqBF;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,SAAQ,GACd,OAAO,CAAC,UAAU,CAAC,CA0DrB"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Tools
|
|
3
|
+
*
|
|
4
|
+
* Tool definitions and execution for the agent.
|
|
5
|
+
*/
|
|
6
|
+
import { spawn } from 'child_process';
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
/**
|
|
10
|
+
* Available tools for the agent
|
|
11
|
+
*/
|
|
12
|
+
export const TOOLS = [
|
|
13
|
+
{
|
|
14
|
+
name: 'shell',
|
|
15
|
+
description: 'Execute a shell command and return the output. Use for running programs, git commands, file operations, etc.',
|
|
16
|
+
parameters: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
command: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'The shell command to execute',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
required: ['command'],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'read_file',
|
|
29
|
+
description: 'Read the contents of a file',
|
|
30
|
+
parameters: {
|
|
31
|
+
type: 'object',
|
|
32
|
+
properties: {
|
|
33
|
+
path: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'The path to the file to read',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
required: ['path'],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'write_file',
|
|
43
|
+
description: 'Write content to a file (creates or overwrites)',
|
|
44
|
+
parameters: {
|
|
45
|
+
type: 'object',
|
|
46
|
+
properties: {
|
|
47
|
+
path: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
description: 'The path to the file to write',
|
|
50
|
+
},
|
|
51
|
+
content: {
|
|
52
|
+
type: 'string',
|
|
53
|
+
description: 'The content to write to the file',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
required: ['path', 'content'],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'list_files',
|
|
61
|
+
description: 'List files in a directory',
|
|
62
|
+
parameters: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
path: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'The directory path to list (default: current directory)',
|
|
68
|
+
},
|
|
69
|
+
recursive: {
|
|
70
|
+
type: 'boolean',
|
|
71
|
+
description: 'Whether to list recursively (default: false)',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'think',
|
|
78
|
+
description: 'Use this tool to think through complex problems step by step. Write out your reasoning before taking action.',
|
|
79
|
+
parameters: {
|
|
80
|
+
type: 'object',
|
|
81
|
+
properties: {
|
|
82
|
+
thought: {
|
|
83
|
+
type: 'string',
|
|
84
|
+
description: 'Your reasoning and thought process',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
required: ['thought'],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
/**
|
|
92
|
+
* Validate path is within allowed directory (prevent path traversal)
|
|
93
|
+
*/
|
|
94
|
+
function validatePath(filePath, cwd) {
|
|
95
|
+
const absPath = path.isAbsolute(filePath) ? filePath : path.join(cwd, filePath);
|
|
96
|
+
const normalizedPath = path.resolve(absPath);
|
|
97
|
+
const normalizedCwd = path.resolve(cwd);
|
|
98
|
+
// Allow access to cwd and subdirectories, or absolute paths within home
|
|
99
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '/tmp';
|
|
100
|
+
const normalizedHome = path.resolve(homeDir);
|
|
101
|
+
if (!normalizedPath.startsWith(normalizedCwd) && !normalizedPath.startsWith(normalizedHome)) {
|
|
102
|
+
throw new Error(`Access denied: ${filePath} is outside allowed directories`);
|
|
103
|
+
}
|
|
104
|
+
return normalizedPath;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Execute a tool call
|
|
108
|
+
*/
|
|
109
|
+
export async function executeTool(toolCall, cwd, timeout = 60000) {
|
|
110
|
+
const { id, name, arguments: args } = toolCall;
|
|
111
|
+
try {
|
|
112
|
+
let result;
|
|
113
|
+
switch (name) {
|
|
114
|
+
case 'shell': {
|
|
115
|
+
if (typeof args.command !== 'string') {
|
|
116
|
+
return { toolCallId: id, result: 'Error: command must be a string', isError: true };
|
|
117
|
+
}
|
|
118
|
+
result = await executeShell(args.command, cwd, timeout);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case 'read_file': {
|
|
122
|
+
if (typeof args.path !== 'string') {
|
|
123
|
+
return { toolCallId: id, result: 'Error: path must be a string', isError: true };
|
|
124
|
+
}
|
|
125
|
+
result = await readFile(args.path, cwd);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
case 'write_file': {
|
|
129
|
+
if (typeof args.path !== 'string') {
|
|
130
|
+
return { toolCallId: id, result: 'Error: path must be a string', isError: true };
|
|
131
|
+
}
|
|
132
|
+
if (typeof args.content !== 'string') {
|
|
133
|
+
return { toolCallId: id, result: 'Error: content must be a string', isError: true };
|
|
134
|
+
}
|
|
135
|
+
result = await writeFile(args.path, args.content, cwd);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case 'list_files': {
|
|
139
|
+
const listPath = args.path !== undefined && typeof args.path !== 'string' ? undefined : args.path;
|
|
140
|
+
const recursive = typeof args.recursive === 'boolean' ? args.recursive : false;
|
|
141
|
+
result = await listFiles(listPath, recursive, cwd);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case 'think': {
|
|
145
|
+
if (typeof args.thought !== 'string') {
|
|
146
|
+
return { toolCallId: id, result: 'Error: thought must be a string', isError: true };
|
|
147
|
+
}
|
|
148
|
+
result = 'Thought recorded.';
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
default:
|
|
152
|
+
return { toolCallId: id, result: `Unknown tool: ${name}`, isError: true };
|
|
153
|
+
}
|
|
154
|
+
return { toolCallId: id, result };
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
158
|
+
return { toolCallId: id, result: `Error: ${msg}`, isError: true };
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Execute a shell command
|
|
163
|
+
*/
|
|
164
|
+
async function executeShell(command, cwd, timeout) {
|
|
165
|
+
return new Promise((resolve, reject) => {
|
|
166
|
+
const proc = spawn('bash', ['-c', command], {
|
|
167
|
+
cwd,
|
|
168
|
+
env: { ...process.env, TERM: 'dumb' },
|
|
169
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
170
|
+
});
|
|
171
|
+
let stdout = '';
|
|
172
|
+
let stderr = '';
|
|
173
|
+
proc.stdout.on('data', (data) => {
|
|
174
|
+
stdout += data.toString();
|
|
175
|
+
});
|
|
176
|
+
proc.stderr.on('data', (data) => {
|
|
177
|
+
stderr += data.toString();
|
|
178
|
+
});
|
|
179
|
+
const timer = setTimeout(() => {
|
|
180
|
+
proc.kill('SIGTERM');
|
|
181
|
+
reject(new Error('Command timed out'));
|
|
182
|
+
}, timeout);
|
|
183
|
+
proc.on('close', (code) => {
|
|
184
|
+
clearTimeout(timer);
|
|
185
|
+
const output = stdout + (stderr ? `\nstderr: ${stderr}` : '');
|
|
186
|
+
if (code !== 0) {
|
|
187
|
+
resolve(`Exit code ${code}\n${output}`);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
resolve(output || '(no output)');
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
proc.on('error', (err) => {
|
|
194
|
+
clearTimeout(timer);
|
|
195
|
+
reject(err);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Read a file
|
|
201
|
+
*/
|
|
202
|
+
async function readFile(filePath, cwd) {
|
|
203
|
+
const absPath = validatePath(filePath, cwd);
|
|
204
|
+
if (!fs.existsSync(absPath)) {
|
|
205
|
+
throw new Error(`File not found: ${absPath}`);
|
|
206
|
+
}
|
|
207
|
+
const stats = fs.statSync(absPath);
|
|
208
|
+
if (stats.isDirectory()) {
|
|
209
|
+
throw new Error(`Path is a directory: ${absPath}`);
|
|
210
|
+
}
|
|
211
|
+
// Check file size (limit to 1MB)
|
|
212
|
+
if (stats.size > 1024 * 1024) {
|
|
213
|
+
throw new Error(`File too large (${Math.round(stats.size / 1024)}KB). Max 1MB.`);
|
|
214
|
+
}
|
|
215
|
+
return fs.readFileSync(absPath, 'utf-8');
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Write a file
|
|
219
|
+
*/
|
|
220
|
+
async function writeFile(filePath, content, cwd) {
|
|
221
|
+
const absPath = validatePath(filePath, cwd);
|
|
222
|
+
// Create directory if needed
|
|
223
|
+
const dir = path.dirname(absPath);
|
|
224
|
+
if (!fs.existsSync(dir)) {
|
|
225
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
226
|
+
}
|
|
227
|
+
fs.writeFileSync(absPath, content);
|
|
228
|
+
return `File written: ${absPath} (${content.length} bytes)`;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* List files in a directory
|
|
232
|
+
*/
|
|
233
|
+
async function listFiles(dirPath, recursive, cwd) {
|
|
234
|
+
const absPath = dirPath ? validatePath(dirPath, cwd) : cwd;
|
|
235
|
+
if (!fs.existsSync(absPath)) {
|
|
236
|
+
throw new Error(`Directory not found: ${absPath}`);
|
|
237
|
+
}
|
|
238
|
+
const stats = fs.statSync(absPath);
|
|
239
|
+
if (!stats.isDirectory()) {
|
|
240
|
+
throw new Error(`Not a directory: ${absPath}`);
|
|
241
|
+
}
|
|
242
|
+
if (recursive) {
|
|
243
|
+
return listFilesRecursive(absPath, '', 0);
|
|
244
|
+
}
|
|
245
|
+
const entries = fs.readdirSync(absPath, { withFileTypes: true });
|
|
246
|
+
const lines = [];
|
|
247
|
+
for (const entry of entries.slice(0, 100)) {
|
|
248
|
+
const prefix = entry.isDirectory() ? '📁 ' : '📄 ';
|
|
249
|
+
lines.push(`${prefix}${entry.name}`);
|
|
250
|
+
}
|
|
251
|
+
if (entries.length > 100) {
|
|
252
|
+
lines.push(`... and ${entries.length - 100} more`);
|
|
253
|
+
}
|
|
254
|
+
return lines.join('\n') || '(empty directory)';
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* List files recursively
|
|
258
|
+
*/
|
|
259
|
+
function listFilesRecursive(dir, prefix, depth) {
|
|
260
|
+
if (depth > 5)
|
|
261
|
+
return `${prefix}(max depth reached)`;
|
|
262
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
263
|
+
const lines = [];
|
|
264
|
+
for (const entry of entries.slice(0, 50)) {
|
|
265
|
+
if (entry.name.startsWith('.'))
|
|
266
|
+
continue; // Skip hidden files
|
|
267
|
+
const entryPath = path.join(dir, entry.name);
|
|
268
|
+
if (entry.isDirectory()) {
|
|
269
|
+
lines.push(`${prefix}📁 ${entry.name}/`);
|
|
270
|
+
lines.push(listFilesRecursive(entryPath, prefix + ' ', depth + 1));
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
lines.push(`${prefix}📄 ${entry.name}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (entries.length > 50) {
|
|
277
|
+
lines.push(`${prefix}... and ${entries.length - 50} more`);
|
|
278
|
+
}
|
|
279
|
+
return lines.join('\n');
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|