singleton-pipeline 0.4.0-beta.4 → 0.4.0-beta.6
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 +1 -1
- package/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/cli/src/commands/repl.js +1 -1
- package/packages/cli/src/index.js +1 -1
- package/packages/cli/src/runners/copilot.js +16 -4
- package/packages/server/package.json +1 -1
- package/packages/web/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Singleton Pipeline Builder (v0.4.0-beta.
|
|
1
|
+
# Singleton Pipeline Builder (v0.4.0-beta.6)
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/singleton-pipeline)
|
|
4
4
|
[](https://www.npmjs.com/package/singleton-pipeline)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "singleton-pipeline",
|
|
3
|
-
"version": "0.4.0-beta.
|
|
3
|
+
"version": "0.4.0-beta.6",
|
|
4
4
|
"description": "Visual pipeline builder for multi-agent AI workflows. Orchestrates Claude Code, Codex, Copilot, and OpenCode under a unified security policy.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -202,7 +202,7 @@ const SINGLETON_RAW = [
|
|
|
202
202
|
];
|
|
203
203
|
|
|
204
204
|
const ART_WIDTH = Math.max(...SINGLETON_RAW.map((l) => l.length));
|
|
205
|
-
const APP_VERSION = 'v0.4.0-beta.
|
|
205
|
+
const APP_VERSION = 'v0.4.0-beta.6';
|
|
206
206
|
|
|
207
207
|
async function showWelcome(root, shell) {
|
|
208
208
|
const now = new Date();
|
|
@@ -56,10 +56,15 @@ export function buildCopilotPermissionArgs(securityPolicy = {}) {
|
|
|
56
56
|
args.push('--allow-tool=write');
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
// Copilot CLI runs in deny-by-default mode as soon as any --allow-tool is
|
|
60
|
+
// present. Agents need shell access to list/grep the codebase even when their
|
|
61
|
+
// write surface is restricted — otherwise the scout can't discover anything.
|
|
62
|
+
// read-only stays shell-less; dangerous is already covered by --allow-all-tools.
|
|
59
63
|
if (profile === 'read-only') {
|
|
60
64
|
args.push('--deny-tool=write');
|
|
61
65
|
args.push('--deny-tool=shell');
|
|
62
66
|
} else {
|
|
67
|
+
if (profile !== 'dangerous') args.push('--allow-tool=shell');
|
|
63
68
|
args.push('--deny-tool=shell(git push)');
|
|
64
69
|
}
|
|
65
70
|
|
|
@@ -76,10 +81,14 @@ export function buildCopilotPermissionArgs(securityPolicy = {}) {
|
|
|
76
81
|
return args;
|
|
77
82
|
}
|
|
78
83
|
|
|
79
|
-
export function buildCopilotArgs({
|
|
84
|
+
export function buildCopilotArgs({ model, runnerAgent, securityPolicy = {} } = {}) {
|
|
85
|
+
// Prompt is written to stdin (see copilotRunner.run) instead of being passed
|
|
86
|
+
// as `-p <prompt>`. This avoids the Windows command-line length limit (~32KB)
|
|
87
|
+
// that hits as soon as the scout's context.md is injected into downstream
|
|
88
|
+
// prompts.
|
|
80
89
|
const args = [
|
|
81
90
|
'-p',
|
|
82
|
-
|
|
91
|
+
'-',
|
|
83
92
|
'--output-format',
|
|
84
93
|
'json',
|
|
85
94
|
...buildCopilotPermissionArgs(securityPolicy),
|
|
@@ -138,10 +147,10 @@ export const copilotRunner = {
|
|
|
138
147
|
timeoutMs = DEFAULT_TIMEOUT_MS,
|
|
139
148
|
}) {
|
|
140
149
|
const prompt = buildPrompt(systemPrompt, userPrompt);
|
|
141
|
-
const args = buildCopilotArgs({
|
|
150
|
+
const args = buildCopilotArgs({ model, runnerAgent, securityPolicy });
|
|
142
151
|
|
|
143
152
|
const { events, stderr } = await new Promise((resolve, reject) => {
|
|
144
|
-
const child = spawn('copilot', args, { cwd, stdio: ['
|
|
153
|
+
const child = spawn('copilot', args, { cwd, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
145
154
|
const stdoutChunks = [];
|
|
146
155
|
let stderrText = '';
|
|
147
156
|
let timedOut = false;
|
|
@@ -152,6 +161,9 @@ export const copilotRunner = {
|
|
|
152
161
|
setTimeout(() => child.kill('SIGKILL'), 5000).unref();
|
|
153
162
|
}, timeoutMs);
|
|
154
163
|
|
|
164
|
+
child.stdin.write(prompt);
|
|
165
|
+
child.stdin.end();
|
|
166
|
+
|
|
155
167
|
child.stdout.on('data', (d) => stdoutChunks.push(d.toString()));
|
|
156
168
|
child.stderr.on('data', (d) => (stderrText += d.toString()));
|
|
157
169
|
child.on('error', (err) => {
|