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.
Files changed (65) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/cli/progress.d.ts +58 -0
  3. package/dist/src/cli/progress.d.ts.map +1 -0
  4. package/dist/src/cli/progress.js +179 -0
  5. package/dist/src/cli/progress.js.map +1 -0
  6. package/dist/src/cli/spinner.d.ts +2 -0
  7. package/dist/src/cli/spinner.d.ts.map +1 -1
  8. package/dist/src/cli/spinner.js +18 -0
  9. package/dist/src/cli/spinner.js.map +1 -1
  10. package/dist/src/core/agent-runner.d.ts +12 -0
  11. package/dist/src/core/agent-runner.d.ts.map +1 -1
  12. package/dist/src/core/agent-runner.js +176 -5
  13. package/dist/src/core/agent-runner.js.map +1 -1
  14. package/dist/src/core/event-bus.d.ts +12 -0
  15. package/dist/src/core/event-bus.d.ts.map +1 -1
  16. package/dist/src/core/event-bus.js.map +1 -1
  17. package/dist/src/core/types.d.ts +17 -0
  18. package/dist/src/core/types.d.ts.map +1 -1
  19. package/dist/src/core/types.js +8 -1
  20. package/dist/src/core/types.js.map +1 -1
  21. package/dist/src/llm/anthropic.d.ts +1 -0
  22. package/dist/src/llm/anthropic.d.ts.map +1 -1
  23. package/dist/src/llm/anthropic.js +20 -1
  24. package/dist/src/llm/anthropic.js.map +1 -1
  25. package/dist/src/llm/ollama.d.ts +2 -12
  26. package/dist/src/llm/ollama.d.ts.map +1 -1
  27. package/dist/src/llm/ollama.js +46 -250
  28. package/dist/src/llm/ollama.js.map +1 -1
  29. package/dist/src/llm/openai.d.ts +1 -0
  30. package/dist/src/llm/openai.d.ts.map +1 -1
  31. package/dist/src/llm/openai.js +21 -7
  32. package/dist/src/llm/openai.js.map +1 -1
  33. package/dist/src/llm/repair/retry-policy.d.ts +48 -0
  34. package/dist/src/llm/repair/retry-policy.d.ts.map +1 -0
  35. package/dist/src/llm/repair/retry-policy.js +85 -0
  36. package/dist/src/llm/repair/retry-policy.js.map +1 -0
  37. package/dist/src/llm/repair/tool-repair.d.ts +39 -0
  38. package/dist/src/llm/repair/tool-repair.d.ts.map +1 -0
  39. package/dist/src/llm/repair/tool-repair.js +313 -0
  40. package/dist/src/llm/repair/tool-repair.js.map +1 -0
  41. package/dist/src/llm/shared/text-cleanup.d.ts +16 -0
  42. package/dist/src/llm/shared/text-cleanup.d.ts.map +1 -0
  43. package/dist/src/llm/shared/text-cleanup.js +120 -0
  44. package/dist/src/llm/shared/text-cleanup.js.map +1 -0
  45. package/dist/src/llm/shared/tool-parsing.d.ts +70 -0
  46. package/dist/src/llm/shared/tool-parsing.d.ts.map +1 -0
  47. package/dist/src/llm/shared/tool-parsing.js +355 -0
  48. package/dist/src/llm/shared/tool-parsing.js.map +1 -0
  49. package/dist/src/llm/validation/tool-call-schema.d.ts +83 -0
  50. package/dist/src/llm/validation/tool-call-schema.d.ts.map +1 -0
  51. package/dist/src/llm/validation/tool-call-schema.js +145 -0
  52. package/dist/src/llm/validation/tool-call-schema.js.map +1 -0
  53. package/dist/src/tools/built-in/bash.d.ts +5 -1
  54. package/dist/src/tools/built-in/bash.d.ts.map +1 -1
  55. package/dist/src/tools/built-in/bash.js +34 -46
  56. package/dist/src/tools/built-in/bash.js.map +1 -1
  57. package/dist/src/tools/executor.d.ts +7 -1
  58. package/dist/src/tools/executor.d.ts.map +1 -1
  59. package/dist/src/tools/executor.js +20 -5
  60. package/dist/src/tools/executor.js.map +1 -1
  61. package/dist/src/tools/shell/shell-executor.d.ts +71 -0
  62. package/dist/src/tools/shell/shell-executor.d.ts.map +1 -0
  63. package/dist/src/tools/shell/shell-executor.js +238 -0
  64. package/dist/src/tools/shell/shell-executor.js.map +1 -0
  65. 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cmdr-agent",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Open-source multi-agent coding tool for your terminal. Powered by Ollama.",
5
5
  "type": "module",
6
6
  "bin": {