singleton-pipeline 0.4.0-beta.6 → 0.4.0-beta.8

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 CHANGED
@@ -1,4 +1,4 @@
1
- # Singleton Pipeline Builder (v0.4.0-beta.6)
1
+ # Singleton Pipeline Builder (v0.4.0-beta.8)
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/singleton-pipeline/beta.svg)](https://www.npmjs.com/package/singleton-pipeline)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/singleton-pipeline.svg)](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.6",
3
+ "version": "0.4.0-beta.8",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@singleton/cli",
3
- "version": "0.4.0-beta.6",
3
+ "version": "0.4.0-beta.8",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "singleton": "./src/index.js"
@@ -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.6';
205
+ const APP_VERSION = 'v0.4.0-beta.8';
206
206
 
207
207
  async function showWelcome(root, shell) {
208
208
  const now = new Date();
@@ -22,7 +22,7 @@ function groupAgentsByProvider(agents) {
22
22
  program
23
23
  .name('singleton')
24
24
  .description('Singleton Pipeline Builder — scan agents and build pipelines')
25
- .version('0.4.0-beta.6');
25
+ .version('0.4.0-beta.8');
26
26
 
27
27
  program
28
28
  .command('scan')
@@ -97,8 +97,11 @@ export const claudeRunner = {
97
97
  }
98
98
  });
99
99
 
100
- child.stdin.write(userPrompt);
101
- child.stdin.end();
100
+ child.stdin.on('error', () => { /* surfaced via close handler */ });
101
+ try {
102
+ child.stdin.write(userPrompt);
103
+ child.stdin.end();
104
+ } catch { /* same */ }
102
105
  });
103
106
 
104
107
  return {
@@ -128,8 +128,11 @@ export const codexRunner = {
128
128
  resolve({ events, stderr: stderrText });
129
129
  });
130
130
 
131
- child.stdin.write(prompt);
132
- child.stdin.end();
131
+ child.stdin.on('error', () => { /* surfaced via close handler */ });
132
+ try {
133
+ child.stdin.write(prompt);
134
+ child.stdin.end();
135
+ } catch { /* same */ }
133
136
  });
134
137
 
135
138
  let text = '';
@@ -146,7 +146,12 @@ export const copilotRunner = {
146
146
  securityPolicy,
147
147
  timeoutMs = DEFAULT_TIMEOUT_MS,
148
148
  }) {
149
- const prompt = buildPrompt(systemPrompt, userPrompt);
149
+ // When --agent is used, Copilot loads the system prompt from .github/agents/<name>.md.
150
+ // Sending Singleton's combined <system>...<user>...</user> stdin in that case
151
+ // duplicates the system instructions and buries the user inputs in noise. So we
152
+ // pipe ONLY the user prompt when runnerAgent is set — this matches the pattern
153
+ // `copilot -p "<user_message>" --agent <name>` used in standalone bash scripts.
154
+ const prompt = runnerAgent ? userPrompt : buildPrompt(systemPrompt, userPrompt);
150
155
  const args = buildCopilotArgs({ model, runnerAgent, securityPolicy });
151
156
 
152
157
  const { events, stderr } = await new Promise((resolve, reject) => {
@@ -161,8 +166,14 @@ export const copilotRunner = {
161
166
  setTimeout(() => child.kill('SIGKILL'), 5000).unref();
162
167
  }, timeoutMs);
163
168
 
164
- child.stdin.write(prompt);
165
- child.stdin.end();
169
+ // Silence EPIPE/EOF if the child process exits before consuming stdin
170
+ // (e.g. copilot rejects the args, hits an internal limit, or crashes).
171
+ // We surface the real reason via the 'close' handler with exit code + stderr.
172
+ child.stdin.on('error', () => { /* swallowed — see close handler */ });
173
+ try {
174
+ child.stdin.write(prompt);
175
+ child.stdin.end();
176
+ } catch { /* same */ }
166
177
 
167
178
  child.stdout.on('data', (d) => stdoutChunks.push(d.toString()));
168
179
  child.stderr.on('data', (d) => (stderrText += d.toString()));
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@singleton/server",
3
- "version": "0.4.0-beta.6",
3
+ "version": "0.4.0-beta.8",
4
4
  "type": "module",
5
5
  "main": "./src/index.js",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@singleton/web",
3
- "version": "0.4.0-beta.6",
3
+ "version": "0.4.0-beta.8",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {