squadfoundry 1.1.1 → 1.1.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/orchestrator/adapters/host/command-model-invoker.d.ts +3 -0
- package/dist/orchestrator/adapters/host/command-model-invoker.d.ts.map +1 -1
- package/dist/orchestrator/adapters/host/command-model-invoker.js +57 -31
- package/dist/orchestrator/adapters/host/command-model-invoker.js.map +1 -1
- package/dist/tests/unit/host/command-model-invoker.test.d.ts +2 -0
- package/dist/tests/unit/host/command-model-invoker.test.d.ts.map +1 -0
- package/dist/tests/unit/host/command-model-invoker.test.js +69 -0
- package/dist/tests/unit/host/command-model-invoker.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
export type SpawnLike = typeof spawn;
|
|
1
3
|
export type CommandInvokerOptions = {
|
|
2
4
|
command: string;
|
|
3
5
|
args?: string[];
|
|
4
6
|
timeoutMs?: number;
|
|
5
7
|
promptMode?: 'stdin' | 'arg';
|
|
8
|
+
spawnImpl?: SpawnLike;
|
|
6
9
|
};
|
|
7
10
|
export declare function createCommandModelInvoker(options: CommandInvokerOptions): (prompt: string) => Promise<string>;
|
|
8
11
|
//# sourceMappingURL=command-model-invoker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-model-invoker.d.ts","sourceRoot":"","sources":["../../../../orchestrator/adapters/host/command-model-invoker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command-model-invoker.d.ts","sourceRoot":"","sources":["../../../../orchestrator/adapters/host/command-model-invoker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAA;AAEpC,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,CAAA;AAmED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,qBAAqB,IAMxD,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAmC/C"}
|
|
@@ -1,46 +1,72 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
+
function isClaudeCommand(command) {
|
|
3
|
+
return command.toLowerCase().includes('claude');
|
|
4
|
+
}
|
|
5
|
+
async function invokeOnce(spawnImpl, command, args, prompt, promptMode, timeout) {
|
|
6
|
+
const child = spawnImpl(command, args, {
|
|
7
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
8
|
+
});
|
|
9
|
+
let stdout = '';
|
|
10
|
+
let stderr = '';
|
|
11
|
+
let timedOut = false;
|
|
12
|
+
const timer = setTimeout(() => {
|
|
13
|
+
timedOut = true;
|
|
14
|
+
child.kill('SIGTERM');
|
|
15
|
+
}, timeout);
|
|
16
|
+
child.stdout.on('data', (chunk) => {
|
|
17
|
+
stdout += chunk.toString();
|
|
18
|
+
});
|
|
19
|
+
child.stderr.on('data', (chunk) => {
|
|
20
|
+
stderr += chunk.toString();
|
|
21
|
+
});
|
|
22
|
+
if (promptMode === 'stdin') {
|
|
23
|
+
child.stdin.write(prompt);
|
|
24
|
+
child.stdin.end();
|
|
25
|
+
}
|
|
26
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
27
|
+
child.on('error', reject);
|
|
28
|
+
child.on('close', (code) => resolve(code ?? 0));
|
|
29
|
+
});
|
|
30
|
+
clearTimeout(timer);
|
|
31
|
+
const text = stdout.trim();
|
|
32
|
+
if (exitCode !== 0) {
|
|
33
|
+
return { ok: false, text, stderr: stderr.trim(), exitCode, timedOut };
|
|
34
|
+
}
|
|
35
|
+
if (!text && stderr.trim().length > 0) {
|
|
36
|
+
return { ok: false, text, stderr: stderr.trim(), exitCode, timedOut };
|
|
37
|
+
}
|
|
38
|
+
return { ok: true, text, stderr: stderr.trim(), exitCode, timedOut };
|
|
39
|
+
}
|
|
2
40
|
export function createCommandModelInvoker(options) {
|
|
3
41
|
const timeout = options.timeoutMs ?? 120000;
|
|
4
42
|
const baseArgs = options.args ?? [];
|
|
5
43
|
const promptMode = options.promptMode ?? 'stdin';
|
|
44
|
+
const spawnImpl = options.spawnImpl ?? spawn;
|
|
6
45
|
return async (prompt) => {
|
|
7
46
|
const args = promptMode === 'arg'
|
|
8
47
|
? [...baseArgs, '--', prompt]
|
|
9
48
|
: [...baseArgs];
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
let stdout = '';
|
|
14
|
-
let stderr = '';
|
|
15
|
-
const timer = setTimeout(() => {
|
|
16
|
-
child.kill('SIGTERM');
|
|
17
|
-
}, timeout);
|
|
18
|
-
child.stdout.on('data', (chunk) => {
|
|
19
|
-
stdout += chunk.toString();
|
|
20
|
-
});
|
|
21
|
-
child.stderr.on('data', (chunk) => {
|
|
22
|
-
stderr += chunk.toString();
|
|
23
|
-
});
|
|
24
|
-
if (promptMode === 'stdin') {
|
|
25
|
-
child.stdin.write(prompt);
|
|
26
|
-
child.stdin.end();
|
|
27
|
-
}
|
|
28
|
-
const exitCode = await new Promise((resolve, reject) => {
|
|
29
|
-
child.on('error', reject);
|
|
30
|
-
child.on('close', (code) => resolve(code ?? 0));
|
|
31
|
-
});
|
|
32
|
-
clearTimeout(timer);
|
|
33
|
-
if (exitCode !== 0) {
|
|
34
|
-
throw new Error(`Bridge command failed (${options.command} ${args.join(' ')}): ${stderr.trim()}`);
|
|
49
|
+
const firstAttempt = await invokeOnce(spawnImpl, options.command, args, prompt, promptMode, timeout);
|
|
50
|
+
if (firstAttempt.ok) {
|
|
51
|
+
return firstAttempt.text;
|
|
35
52
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
53
|
+
if (isClaudeCommand(options.command)) {
|
|
54
|
+
const retryArgsBase = baseArgs.includes('--dangerously-skip-permissions')
|
|
55
|
+
? [...baseArgs]
|
|
56
|
+
: [...baseArgs, '--dangerously-skip-permissions'];
|
|
57
|
+
const retryPromptMode = firstAttempt.timedOut && promptMode === 'stdin'
|
|
58
|
+
? 'arg'
|
|
59
|
+
: promptMode;
|
|
60
|
+
const retryArgs = retryPromptMode === 'arg'
|
|
61
|
+
? [...retryArgsBase, '--', prompt]
|
|
62
|
+
: [...retryArgsBase];
|
|
63
|
+
const secondAttempt = await invokeOnce(spawnImpl, options.command, retryArgs, prompt, retryPromptMode, timeout);
|
|
64
|
+
if (secondAttempt.ok) {
|
|
65
|
+
return secondAttempt.text;
|
|
41
66
|
}
|
|
67
|
+
throw new Error(`Bridge command failed (${options.command} ${retryArgs.join(' ')}): ${secondAttempt.stderr || firstAttempt.stderr}`);
|
|
42
68
|
}
|
|
43
|
-
|
|
69
|
+
throw new Error(`Bridge command failed (${options.command} ${args.join(' ')}): ${firstAttempt.stderr}`);
|
|
44
70
|
};
|
|
45
71
|
}
|
|
46
72
|
//# sourceMappingURL=command-model-invoker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-model-invoker.js","sourceRoot":"","sources":["../../../../orchestrator/adapters/host/command-model-invoker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"command-model-invoker.js","sourceRoot":"","sources":["../../../../orchestrator/adapters/host/command-model-invoker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-model-invoker.test.d.ts","sourceRoot":"","sources":["../../../../tests/unit/host/command-model-invoker.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { createCommandModelInvoker } from '../../../orchestrator/adapters/host/command-model-invoker.js';
|
|
4
|
+
class FakeStream extends EventEmitter {
|
|
5
|
+
emitData(text) {
|
|
6
|
+
this.emit('data', Buffer.from(text));
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
class FakeStdin {
|
|
10
|
+
writes = [];
|
|
11
|
+
write(text) {
|
|
12
|
+
this.writes.push(text);
|
|
13
|
+
}
|
|
14
|
+
end() {
|
|
15
|
+
// no-op
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function createSpawn(plans, calls) {
|
|
19
|
+
let index = 0;
|
|
20
|
+
return ((command, args) => {
|
|
21
|
+
calls.push({ command, args: [...(args ?? [])] });
|
|
22
|
+
const plan = plans[index++] ?? { exitCode: 0 };
|
|
23
|
+
const child = new EventEmitter();
|
|
24
|
+
child.stdout = new FakeStream();
|
|
25
|
+
child.stderr = new FakeStream();
|
|
26
|
+
child.stdin = new FakeStdin();
|
|
27
|
+
child.kill = () => {
|
|
28
|
+
// no-op for tests
|
|
29
|
+
};
|
|
30
|
+
queueMicrotask(() => {
|
|
31
|
+
if (plan.stdout)
|
|
32
|
+
child.stdout.emitData(plan.stdout);
|
|
33
|
+
if (plan.stderr)
|
|
34
|
+
child.stderr.emitData(plan.stderr);
|
|
35
|
+
child.emit('close', plan.exitCode);
|
|
36
|
+
});
|
|
37
|
+
return child;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
describe('command model invoker', () => {
|
|
41
|
+
it('retries Claude bridge with dangerously-skip-permissions after initial failure', async () => {
|
|
42
|
+
const calls = [];
|
|
43
|
+
const spawnImpl = createSpawn([
|
|
44
|
+
{ exitCode: 1, stderr: 'nested session' },
|
|
45
|
+
{ exitCode: 0, stdout: 'ok from retry' },
|
|
46
|
+
], calls);
|
|
47
|
+
const invoker = createCommandModelInvoker({
|
|
48
|
+
command: 'claude',
|
|
49
|
+
args: ['--print'],
|
|
50
|
+
spawnImpl,
|
|
51
|
+
});
|
|
52
|
+
const result = await invoker('hello');
|
|
53
|
+
expect(result).toBe('ok from retry');
|
|
54
|
+
expect(calls).toHaveLength(2);
|
|
55
|
+
expect(calls[0]?.args).toEqual(['--print']);
|
|
56
|
+
expect(calls[1]?.args).toContain('--dangerously-skip-permissions');
|
|
57
|
+
});
|
|
58
|
+
it('does not retry non-Claude commands', async () => {
|
|
59
|
+
const calls = [];
|
|
60
|
+
const spawnImpl = createSpawn([{ exitCode: 1, stderr: 'boom' }], calls);
|
|
61
|
+
const invoker = createCommandModelInvoker({
|
|
62
|
+
command: 'some-other-cli',
|
|
63
|
+
spawnImpl,
|
|
64
|
+
});
|
|
65
|
+
await expect(invoker('hello')).rejects.toThrow(/Bridge command failed/);
|
|
66
|
+
expect(calls).toHaveLength(1);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=command-model-invoker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-model-invoker.test.js","sourceRoot":"","sources":["../../../../tests/unit/host/command-model-invoker.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED