cmdr-agent 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +1 -1
- package/dist/src/cli/progress.d.ts +58 -0
- package/dist/src/cli/progress.d.ts.map +1 -0
- package/dist/src/cli/progress.js +179 -0
- package/dist/src/cli/progress.js.map +1 -0
- package/dist/src/cli/spinner.d.ts +2 -0
- package/dist/src/cli/spinner.d.ts.map +1 -1
- package/dist/src/cli/spinner.js +18 -0
- package/dist/src/cli/spinner.js.map +1 -1
- package/dist/src/core/agent-runner.d.ts +12 -0
- package/dist/src/core/agent-runner.d.ts.map +1 -1
- package/dist/src/core/agent-runner.js +176 -5
- package/dist/src/core/agent-runner.js.map +1 -1
- package/dist/src/core/event-bus.d.ts +12 -0
- package/dist/src/core/event-bus.d.ts.map +1 -1
- package/dist/src/core/event-bus.js.map +1 -1
- package/dist/src/core/types.d.ts +17 -0
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/types.js +8 -1
- package/dist/src/core/types.js.map +1 -1
- package/dist/src/llm/anthropic.d.ts +1 -0
- package/dist/src/llm/anthropic.d.ts.map +1 -1
- package/dist/src/llm/anthropic.js +20 -1
- package/dist/src/llm/anthropic.js.map +1 -1
- package/dist/src/llm/ollama.d.ts +2 -12
- package/dist/src/llm/ollama.d.ts.map +1 -1
- package/dist/src/llm/ollama.js +46 -250
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/openai.d.ts +1 -0
- package/dist/src/llm/openai.d.ts.map +1 -1
- package/dist/src/llm/openai.js +21 -7
- package/dist/src/llm/openai.js.map +1 -1
- package/dist/src/llm/repair/retry-policy.d.ts +48 -0
- package/dist/src/llm/repair/retry-policy.d.ts.map +1 -0
- package/dist/src/llm/repair/retry-policy.js +85 -0
- package/dist/src/llm/repair/retry-policy.js.map +1 -0
- package/dist/src/llm/repair/tool-repair.d.ts +39 -0
- package/dist/src/llm/repair/tool-repair.d.ts.map +1 -0
- package/dist/src/llm/repair/tool-repair.js +313 -0
- package/dist/src/llm/repair/tool-repair.js.map +1 -0
- package/dist/src/llm/shared/text-cleanup.d.ts +16 -0
- package/dist/src/llm/shared/text-cleanup.d.ts.map +1 -0
- package/dist/src/llm/shared/text-cleanup.js +120 -0
- package/dist/src/llm/shared/text-cleanup.js.map +1 -0
- package/dist/src/llm/shared/tool-parsing.d.ts +70 -0
- package/dist/src/llm/shared/tool-parsing.d.ts.map +1 -0
- package/dist/src/llm/shared/tool-parsing.js +355 -0
- package/dist/src/llm/shared/tool-parsing.js.map +1 -0
- package/dist/src/llm/validation/tool-call-schema.d.ts +83 -0
- package/dist/src/llm/validation/tool-call-schema.d.ts.map +1 -0
- package/dist/src/llm/validation/tool-call-schema.js +145 -0
- package/dist/src/llm/validation/tool-call-schema.js.map +1 -0
- package/dist/src/tools/built-in/bash.d.ts +5 -1
- package/dist/src/tools/built-in/bash.d.ts.map +1 -1
- package/dist/src/tools/built-in/bash.js +34 -46
- package/dist/src/tools/built-in/bash.js.map +1 -1
- package/dist/src/tools/executor.d.ts +7 -1
- package/dist/src/tools/executor.d.ts.map +1 -1
- package/dist/src/tools/executor.js +20 -5
- package/dist/src/tools/executor.js.map +1 -1
- package/dist/src/tools/shell/shell-executor.d.ts +71 -0
- package/dist/src/tools/shell/shell-executor.d.ts.map +1 -0
- package/dist/src/tools/shell/shell-executor.js +238 -0
- package/dist/src/tools/shell/shell-executor.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform shell executor for cmdr.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors Claude Code's approach: separate BashTool + PowerShellTool with
|
|
5
|
+
* a shared shell abstraction. Detects platform, resolves the correct shell,
|
|
6
|
+
* normalizes paths, and escapes arguments safely.
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from 'child_process';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Platform detection
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
let _cachedPlatform;
|
|
16
|
+
export function detectPlatform() {
|
|
17
|
+
if (_cachedPlatform)
|
|
18
|
+
return _cachedPlatform;
|
|
19
|
+
_cachedPlatform = os.platform() === 'win32' ? 'windows' : 'unix';
|
|
20
|
+
return _cachedPlatform;
|
|
21
|
+
}
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Shell resolution
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
const SHELL_LOOKUP = {
|
|
26
|
+
bash: { executable: 'bash', args: ['-c'], shellType: 'bash' },
|
|
27
|
+
zsh: { executable: 'zsh', args: ['-c'], shellType: 'zsh' },
|
|
28
|
+
sh: { executable: 'sh', args: ['-c'], shellType: 'sh' },
|
|
29
|
+
powershell: { executable: 'powershell.exe', args: ['-NoProfile', '-NonInteractive', '-Command'], shellType: 'powershell' },
|
|
30
|
+
cmd: { executable: 'cmd.exe', args: ['/c'], shellType: 'cmd' },
|
|
31
|
+
};
|
|
32
|
+
let _cachedDefaultShell;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the default shell for the current platform.
|
|
35
|
+
* On unix: prefers SHELL env, falls back to bash, then sh.
|
|
36
|
+
* On windows: prefers powershell, falls back to cmd.
|
|
37
|
+
*/
|
|
38
|
+
export function getDefaultShell() {
|
|
39
|
+
if (_cachedDefaultShell)
|
|
40
|
+
return _cachedDefaultShell;
|
|
41
|
+
const platform = detectPlatform();
|
|
42
|
+
if (platform === 'unix') {
|
|
43
|
+
// Prefer user's SHELL env, then bash, then sh
|
|
44
|
+
const userShell = process.env.SHELL;
|
|
45
|
+
if (userShell) {
|
|
46
|
+
const name = path.basename(userShell);
|
|
47
|
+
if (SHELL_LOOKUP[name]) {
|
|
48
|
+
_cachedDefaultShell = { ...SHELL_LOOKUP[name], executable: userShell };
|
|
49
|
+
return _cachedDefaultShell;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
_cachedDefaultShell = SHELL_LOOKUP.bash;
|
|
53
|
+
return _cachedDefaultShell;
|
|
54
|
+
}
|
|
55
|
+
// Windows: prefer powershell if available
|
|
56
|
+
const psLocations = [
|
|
57
|
+
'C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe',
|
|
58
|
+
'C:\\Program Files\\PowerShell\\7\\pwsh.exe',
|
|
59
|
+
];
|
|
60
|
+
for (const psPath of psLocations) {
|
|
61
|
+
if (existsSync(psPath)) {
|
|
62
|
+
_cachedDefaultShell = {
|
|
63
|
+
executable: psPath,
|
|
64
|
+
args: ['-NoProfile', '-NonInteractive', '-Command'],
|
|
65
|
+
shellType: 'powershell',
|
|
66
|
+
};
|
|
67
|
+
return _cachedDefaultShell;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Fallback to cmd
|
|
71
|
+
_cachedDefaultShell = SHELL_LOOKUP.cmd;
|
|
72
|
+
return _cachedDefaultShell;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get a specific shell config by type.
|
|
76
|
+
*/
|
|
77
|
+
export function getShell(shellType) {
|
|
78
|
+
return SHELL_LOOKUP[shellType] ?? SHELL_LOOKUP.sh;
|
|
79
|
+
}
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Path normalization
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
/**
|
|
84
|
+
* Normalize a file path for the current platform.
|
|
85
|
+
* On Windows: converts forward slashes to backslashes.
|
|
86
|
+
* On Unix: converts backslashes to forward slashes.
|
|
87
|
+
*/
|
|
88
|
+
export function normalizePath(p) {
|
|
89
|
+
if (detectPlatform() === 'windows') {
|
|
90
|
+
return p.replace(/\//g, '\\');
|
|
91
|
+
}
|
|
92
|
+
return p.replace(/\\/g, '/');
|
|
93
|
+
}
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
// Argument escaping
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
/**
|
|
98
|
+
* Escape a shell argument for the current platform.
|
|
99
|
+
* Prevents shell injection by properly quoting arguments.
|
|
100
|
+
*/
|
|
101
|
+
export function escapeArg(arg, shellType) {
|
|
102
|
+
const shell = shellType ?? getDefaultShell().shellType;
|
|
103
|
+
if (shell === 'cmd') {
|
|
104
|
+
// CMD: double-quote and escape internal quotes
|
|
105
|
+
return `"${arg.replace(/"/g, '""')}"`;
|
|
106
|
+
}
|
|
107
|
+
if (shell === 'powershell') {
|
|
108
|
+
// PowerShell: single-quote (no variable expansion)
|
|
109
|
+
return `'${arg.replace(/'/g, "''")}'`;
|
|
110
|
+
}
|
|
111
|
+
// Unix shells: single-quote (safest, no expansions)
|
|
112
|
+
return `'${arg.replace(/'/g, "'\\''")}'`;
|
|
113
|
+
}
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// Environment variable expansion
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
/**
|
|
118
|
+
* Translate environment variable references between platforms.
|
|
119
|
+
* $VAR / ${VAR} (unix) <-> %VAR% (windows cmd) / $env:VAR (powershell)
|
|
120
|
+
*/
|
|
121
|
+
export function translateEnvVars(command, targetShell) {
|
|
122
|
+
if (targetShell === 'cmd') {
|
|
123
|
+
// Unix → CMD: $VAR / ${VAR} → %VAR%
|
|
124
|
+
return command
|
|
125
|
+
.replace(/\$\{(\w+)\}/g, '%$1%')
|
|
126
|
+
.replace(/\$(\w+)/g, '%$1%');
|
|
127
|
+
}
|
|
128
|
+
if (targetShell === 'powershell') {
|
|
129
|
+
// Unix → PowerShell: $VAR → $env:VAR (only top-level, not already $env:)
|
|
130
|
+
return command
|
|
131
|
+
.replace(/\$\{(\w+)\}/g, '$env:$1')
|
|
132
|
+
.replace(/(?<!\w)\$(?!env:)(\w+)/g, '$env:$1');
|
|
133
|
+
}
|
|
134
|
+
// Already unix-style
|
|
135
|
+
return command;
|
|
136
|
+
}
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
// Shell execution
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
141
|
+
const MAX_BUFFER_SIZE = 10 * 1024 * 1024; // 10MB
|
|
142
|
+
/**
|
|
143
|
+
* Execute a command in the appropriate shell.
|
|
144
|
+
* Mirrors Claude Code's BashTool execution model with:
|
|
145
|
+
* - Platform-aware shell selection
|
|
146
|
+
* - Timeout support
|
|
147
|
+
* - AbortSignal support
|
|
148
|
+
* - Output size limiting
|
|
149
|
+
*/
|
|
150
|
+
export function execute(options) {
|
|
151
|
+
return new Promise((resolve) => {
|
|
152
|
+
const shellConfig = options.shell
|
|
153
|
+
? getShell(options.shell)
|
|
154
|
+
: getDefaultShell();
|
|
155
|
+
const command = options.command;
|
|
156
|
+
const cwd = options.cwd ? normalizePath(options.cwd) : process.cwd();
|
|
157
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
158
|
+
const env = options.env
|
|
159
|
+
? { ...process.env, ...options.env }
|
|
160
|
+
: process.env;
|
|
161
|
+
const stdoutChunks = [];
|
|
162
|
+
const stderrChunks = [];
|
|
163
|
+
let stdoutSize = 0;
|
|
164
|
+
let stderrSize = 0;
|
|
165
|
+
let timedOut = false;
|
|
166
|
+
let interrupted = false;
|
|
167
|
+
const child = spawn(shellConfig.executable, [...shellConfig.args, command], {
|
|
168
|
+
cwd,
|
|
169
|
+
env,
|
|
170
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
171
|
+
});
|
|
172
|
+
child.stdout?.on('data', (chunk) => {
|
|
173
|
+
stdoutSize += chunk.length;
|
|
174
|
+
if (stdoutSize <= MAX_BUFFER_SIZE) {
|
|
175
|
+
stdoutChunks.push(chunk);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
child.stderr?.on('data', (chunk) => {
|
|
179
|
+
stderrSize += chunk.length;
|
|
180
|
+
if (stderrSize <= MAX_BUFFER_SIZE) {
|
|
181
|
+
stderrChunks.push(chunk);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
const timer = setTimeout(() => {
|
|
185
|
+
timedOut = true;
|
|
186
|
+
child.kill('SIGKILL');
|
|
187
|
+
}, timeoutMs);
|
|
188
|
+
const onAbort = () => {
|
|
189
|
+
interrupted = true;
|
|
190
|
+
child.kill('SIGKILL');
|
|
191
|
+
};
|
|
192
|
+
options.signal?.addEventListener('abort', onAbort, { once: true });
|
|
193
|
+
child.on('close', (code) => {
|
|
194
|
+
clearTimeout(timer);
|
|
195
|
+
options.signal?.removeEventListener('abort', onAbort);
|
|
196
|
+
let stdout = Buffer.concat(stdoutChunks).toString('utf-8');
|
|
197
|
+
let stderr = Buffer.concat(stderrChunks).toString('utf-8');
|
|
198
|
+
// Truncation notice
|
|
199
|
+
if (stdoutSize > MAX_BUFFER_SIZE) {
|
|
200
|
+
stdout += `\n[stdout truncated: ${stdoutSize} bytes total, showing first ${MAX_BUFFER_SIZE}]`;
|
|
201
|
+
}
|
|
202
|
+
if (stderrSize > MAX_BUFFER_SIZE) {
|
|
203
|
+
stderr += `\n[stderr truncated: ${stderrSize} bytes total, showing first ${MAX_BUFFER_SIZE}]`;
|
|
204
|
+
}
|
|
205
|
+
resolve({
|
|
206
|
+
stdout,
|
|
207
|
+
stderr,
|
|
208
|
+
exitCode: code ?? 1,
|
|
209
|
+
timedOut,
|
|
210
|
+
interrupted,
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
child.on('error', (err) => {
|
|
214
|
+
clearTimeout(timer);
|
|
215
|
+
options.signal?.removeEventListener('abort', onAbort);
|
|
216
|
+
resolve({
|
|
217
|
+
stdout: '',
|
|
218
|
+
stderr: err.message,
|
|
219
|
+
exitCode: 1,
|
|
220
|
+
timedOut: false,
|
|
221
|
+
interrupted: false,
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Check if a command exists on the system.
|
|
228
|
+
*/
|
|
229
|
+
export async function commandExists(cmd) {
|
|
230
|
+
const platform = detectPlatform();
|
|
231
|
+
const checkCmd = platform === 'windows' ? `where ${cmd}` : `which ${cmd}`;
|
|
232
|
+
const result = await execute({
|
|
233
|
+
command: checkCmd,
|
|
234
|
+
timeoutMs: 5000,
|
|
235
|
+
});
|
|
236
|
+
return result.exitCode === 0;
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=shell-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-executor.js","sourceRoot":"","sources":["../../../../src/tools/shell/shell-executor.ts"],"names":[],"mappings":"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"}
|