@electric-agent/studio 1.1.0 → 1.3.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/bridge/claude-code-docker.d.ts +27 -1
- package/dist/bridge/claude-code-docker.d.ts.map +1 -1
- package/dist/bridge/claude-code-docker.js +171 -43
- package/dist/bridge/claude-code-docker.js.map +1 -1
- package/dist/bridge/claude-code-sprites.d.ts +24 -0
- package/dist/bridge/claude-code-sprites.d.ts.map +1 -1
- package/dist/bridge/claude-code-sprites.js +177 -39
- package/dist/bridge/claude-code-sprites.js.map +1 -1
- package/dist/bridge/claude-md-generator.d.ts +1 -0
- package/dist/bridge/claude-md-generator.d.ts.map +1 -1
- package/dist/bridge/claude-md-generator.js +64 -7
- package/dist/bridge/claude-md-generator.js.map +1 -1
- package/dist/bridge/codex-docker.d.ts +65 -0
- package/dist/bridge/codex-docker.d.ts.map +1 -0
- package/dist/bridge/codex-docker.js +242 -0
- package/dist/bridge/codex-docker.js.map +1 -0
- package/dist/bridge/codex-json-parser.d.ts +31 -0
- package/dist/bridge/codex-json-parser.d.ts.map +1 -0
- package/dist/bridge/codex-json-parser.js +274 -0
- package/dist/bridge/codex-json-parser.js.map +1 -0
- package/dist/bridge/codex-md-generator.d.ts +14 -0
- package/dist/bridge/codex-md-generator.d.ts.map +1 -0
- package/dist/bridge/codex-md-generator.js +45 -0
- package/dist/bridge/codex-md-generator.js.map +1 -0
- package/dist/bridge/codex-sprites.d.ts +59 -0
- package/dist/bridge/codex-sprites.d.ts.map +1 -0
- package/dist/bridge/codex-sprites.js +237 -0
- package/dist/bridge/codex-sprites.js.map +1 -0
- package/dist/bridge/create-app-skill.d.ts +11 -0
- package/dist/bridge/create-app-skill.d.ts.map +1 -0
- package/dist/bridge/create-app-skill.js +39 -0
- package/dist/bridge/create-app-skill.js.map +1 -0
- package/dist/bridge/index.d.ts +0 -3
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +0 -3
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/stream-json-parser.d.ts +0 -2
- package/dist/bridge/stream-json-parser.d.ts.map +1 -1
- package/dist/bridge/stream-json-parser.js +0 -18
- package/dist/bridge/stream-json-parser.js.map +1 -1
- package/dist/client/assets/index-Bq9zwhHj.css +1 -0
- package/dist/client/assets/index-Dgpqg5fv.js +234 -0
- package/dist/client/index.html +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/sandbox/daytona.js +4 -4
- package/dist/sandbox/daytona.js.map +1 -1
- package/dist/sandbox/docker.d.ts +0 -1
- package/dist/sandbox/docker.d.ts.map +1 -1
- package/dist/sandbox/docker.js +10 -42
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/sprites.d.ts +0 -6
- package/dist/sandbox/sprites.d.ts.map +1 -1
- package/dist/sandbox/sprites.js +4 -36
- package/dist/sandbox/sprites.js.map +1 -1
- package/dist/sandbox/types.d.ts +0 -8
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/server.d.ts +2 -5
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +195 -160
- package/dist/server.js.map +1 -1
- package/dist/session-auth.d.ts +3 -0
- package/dist/session-auth.d.ts.map +1 -0
- package/dist/session-auth.js +11 -0
- package/dist/session-auth.js.map +1 -0
- package/dist/sessions.d.ts +0 -2
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js.map +1 -1
- package/package.json +2 -2
- package/dist/client/assets/index-BeZ6CTGd.css +0 -1
- package/dist/client/assets/index-DRLXdDNp.js +0 -241
|
@@ -5,10 +5,15 @@
|
|
|
5
5
|
* The bridge translates Claude Code's stream-json output into EngineEvents
|
|
6
6
|
* and writes them to the Durable Stream for the UI. User messages and
|
|
7
7
|
* gate responses are sent to Claude Code's stdin.
|
|
8
|
+
*
|
|
9
|
+
* Claude Code runs in one-shot mode (`-p`) and exits after completing.
|
|
10
|
+
* On iterate (follow-up message), the bridge respawns Claude Code with
|
|
11
|
+
* `--resume <sessionId>` so it picks up the previous conversation context.
|
|
8
12
|
*/
|
|
9
13
|
import * as readline from "node:readline";
|
|
10
14
|
import { DurableStream } from "@durable-streams/client";
|
|
11
15
|
import { ts } from "@electric-agent/protocol";
|
|
16
|
+
import { SpriteCommand } from "@fly/sprites";
|
|
12
17
|
import { createStreamJsonParser } from "./stream-json-parser.js";
|
|
13
18
|
const SPRITES_SESSION_ID = "claude-code-session";
|
|
14
19
|
const DEFAULT_ALLOWED_TOOLS = [
|
|
@@ -21,6 +26,7 @@ const DEFAULT_ALLOWED_TOOLS = [
|
|
|
21
26
|
"WebSearch",
|
|
22
27
|
"TodoWrite",
|
|
23
28
|
"AskUserQuestion",
|
|
29
|
+
"Skill",
|
|
24
30
|
];
|
|
25
31
|
export class ClaudeCodeSpritesBridge {
|
|
26
32
|
sessionId;
|
|
@@ -34,6 +40,14 @@ export class ClaudeCodeSpritesBridge {
|
|
|
34
40
|
completeCallbacks = [];
|
|
35
41
|
closed = false;
|
|
36
42
|
cmd = null;
|
|
43
|
+
/** Claude Code session ID captured from stream-json system.init — used for --resume */
|
|
44
|
+
claudeSessionId = null;
|
|
45
|
+
/** Whether a Claude Code process is currently running */
|
|
46
|
+
running = false;
|
|
47
|
+
/** Whether the parser already emitted a session_end (from a "result" message) */
|
|
48
|
+
resultReceived = false;
|
|
49
|
+
/** Whether hooks have been installed in the sprite */
|
|
50
|
+
hooksInstalled = false;
|
|
37
51
|
constructor(sessionId, connection, sprite, config) {
|
|
38
52
|
this.sessionId = sessionId;
|
|
39
53
|
this.streamUrl = connection.url;
|
|
@@ -53,10 +67,11 @@ export class ClaudeCodeSpritesBridge {
|
|
|
53
67
|
await this.writer.append(JSON.stringify(msg));
|
|
54
68
|
}
|
|
55
69
|
async sendCommand(cmd) {
|
|
56
|
-
if (this.closed
|
|
70
|
+
if (this.closed)
|
|
57
71
|
return;
|
|
58
72
|
if (cmd.command === "iterate" && typeof cmd.request === "string") {
|
|
59
|
-
|
|
73
|
+
// Respawn Claude Code with --resume for follow-up messages
|
|
74
|
+
this.spawnClaudeAsync(cmd.request, this.claudeSessionId ?? undefined);
|
|
60
75
|
return;
|
|
61
76
|
}
|
|
62
77
|
console.log(`[claude-code-sprites] Ignoring unsupported command: ${cmd.command}`);
|
|
@@ -97,33 +112,157 @@ export class ClaudeCodeSpritesBridge {
|
|
|
97
112
|
async start() {
|
|
98
113
|
if (this.closed)
|
|
99
114
|
return;
|
|
100
|
-
|
|
115
|
+
await this.spawnClaudeAsync(this.config.prompt);
|
|
116
|
+
}
|
|
117
|
+
close() {
|
|
118
|
+
this.closed = true;
|
|
119
|
+
if (this.cmd) {
|
|
120
|
+
try {
|
|
121
|
+
this.cmd.kill();
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Process may already be dead
|
|
125
|
+
}
|
|
126
|
+
this.cmd = null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// -----------------------------------------------------------------------
|
|
130
|
+
// Private helpers
|
|
131
|
+
// -----------------------------------------------------------------------
|
|
132
|
+
/**
|
|
133
|
+
* Install Claude Code hooks inside the sprite so that AskUserQuestion
|
|
134
|
+
* blocks until the user answers in the studio UI.
|
|
135
|
+
*/
|
|
136
|
+
async installHooks() {
|
|
137
|
+
const studioUrl = this.config.studioUrl;
|
|
138
|
+
if (!studioUrl)
|
|
139
|
+
return;
|
|
140
|
+
const hookDir = `${this.config.cwd}/.claude/hooks`;
|
|
141
|
+
const settingsFile = `${this.config.cwd}/.claude/settings.local.json`;
|
|
142
|
+
const forwardScript = `#!/bin/bash
|
|
143
|
+
BODY="$(cat)"
|
|
144
|
+
RESPONSE=$(curl -s -X POST "${studioUrl}/api/sessions/${this.sessionId}/hook-event" \\
|
|
145
|
+
-H "Content-Type: application/json" \\
|
|
146
|
+
-d "\${BODY}" \\
|
|
147
|
+
--max-time 360 \\
|
|
148
|
+
--connect-timeout 5 \\
|
|
149
|
+
2>/dev/null)
|
|
150
|
+
if echo "\${RESPONSE}" | grep -q '"hookSpecificOutput"'; then
|
|
151
|
+
echo "\${RESPONSE}"
|
|
152
|
+
fi
|
|
153
|
+
exit 0`;
|
|
154
|
+
// Configure hooks in settings.local.json.
|
|
155
|
+
// Tool permissions come from --allowedTools CLI flag instead.
|
|
156
|
+
// Hook format: each event has matcher groups, each with a `hooks` array.
|
|
157
|
+
const settings = JSON.stringify({
|
|
158
|
+
hooks: {
|
|
159
|
+
PreToolUse: [
|
|
160
|
+
{
|
|
161
|
+
matcher: "AskUserQuestion",
|
|
162
|
+
hooks: [
|
|
163
|
+
{
|
|
164
|
+
type: "command",
|
|
165
|
+
command: `${hookDir}/forward.sh`,
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
try {
|
|
173
|
+
// Use base64 encoding to avoid heredoc delimiter issues
|
|
174
|
+
const forwardB64 = Buffer.from(forwardScript).toString("base64");
|
|
175
|
+
const settingsB64 = Buffer.from(settings).toString("base64");
|
|
176
|
+
await this.sprite.execFile("bash", [
|
|
177
|
+
"-c",
|
|
178
|
+
[
|
|
179
|
+
`mkdir -p '${hookDir}'`,
|
|
180
|
+
`echo '${forwardB64}' | base64 -d > '${hookDir}/forward.sh'`,
|
|
181
|
+
`chmod +x '${hookDir}/forward.sh'`,
|
|
182
|
+
`echo '${settingsB64}' | base64 -d > '${settingsFile}'`,
|
|
183
|
+
].join(" && "),
|
|
184
|
+
]);
|
|
185
|
+
console.log(`[claude-code-sprites] Installed AskUserQuestion hooks in sprite`);
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
console.error(`[claude-code-sprites] Failed to install hooks:`, err);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Spawn a new Claude Code process. Called for both the initial prompt
|
|
193
|
+
* and follow-up iterate messages (with --resume).
|
|
194
|
+
*/
|
|
195
|
+
async spawnClaudeAsync(prompt, resumeSessionId) {
|
|
196
|
+
// Kill any existing process
|
|
197
|
+
if (this.cmd) {
|
|
198
|
+
try {
|
|
199
|
+
this.cmd.kill();
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
// Already dead
|
|
203
|
+
}
|
|
204
|
+
this.cmd = null;
|
|
205
|
+
}
|
|
206
|
+
// Install hooks on first spawn (they persist for resume spawns)
|
|
207
|
+
// Must await to ensure hooks are in place before Claude starts.
|
|
208
|
+
if (!this.hooksInstalled) {
|
|
209
|
+
try {
|
|
210
|
+
await this.installHooks();
|
|
211
|
+
this.hooksInstalled = true;
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
console.error(`[claude-code-sprites] Hook install error:`, err);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Reset parser state for the new process
|
|
218
|
+
this.parser = createStreamJsonParser();
|
|
219
|
+
this.resultReceived = false;
|
|
220
|
+
this.running = true;
|
|
101
221
|
const model = this.config.model ?? "claude-sonnet-4-6";
|
|
102
|
-
// Build the claude CLI command
|
|
222
|
+
// Build the claude CLI command.
|
|
223
|
+
// Use --allowedTools to grant permissions (keeps hooks firing, unlike
|
|
224
|
+
// --dangerously-skip-permissions which bypasses hooks entirely).
|
|
225
|
+
const allowedTools = this.config.allowedTools ?? DEFAULT_ALLOWED_TOOLS;
|
|
103
226
|
const claudeArgs = [
|
|
104
227
|
"-p",
|
|
105
|
-
|
|
228
|
+
prompt,
|
|
106
229
|
"--output-format",
|
|
107
230
|
"stream-json",
|
|
108
231
|
"--verbose",
|
|
109
232
|
"--model",
|
|
110
233
|
model,
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
234
|
+
...(this.hooksInstalled
|
|
235
|
+
? ["--allowedTools", allowedTools.join(",")]
|
|
236
|
+
: ["--dangerously-skip-permissions"]),
|
|
114
237
|
...(this.config.extraFlags ?? []),
|
|
115
238
|
];
|
|
239
|
+
// Add --resume if we have a previous session ID
|
|
240
|
+
if (resumeSessionId) {
|
|
241
|
+
claudeArgs.push("--resume", resumeSessionId);
|
|
242
|
+
}
|
|
116
243
|
// Escape for bash — use bash -c with properly escaped args
|
|
117
244
|
const escapedArgs = claudeArgs.map((a) => `'${a.replace(/'/g, "'\\''")}'`).join(" ");
|
|
118
245
|
const fullCmd = `source /etc/profile.d/npm-global.sh 2>/dev/null; source /etc/profile.d/electric-agent.sh 2>/dev/null; cd '${this.config.cwd}' && claude ${escapedArgs}`;
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
246
|
+
// Use SpriteCommand with tty:false so stdout/stderr are cleanly
|
|
247
|
+
// separated via binary WebSocket stream IDs. tty:true merges them
|
|
248
|
+
// through a PTY which corrupts hook response JSON and prevents
|
|
249
|
+
// AskUserQuestion gates from blocking properly.
|
|
250
|
+
// Do NOT use detachable (creates a tmux session causing immediate exit).
|
|
251
|
+
this.cmd = new SpriteCommand(this.sprite, "bash", ["-c", fullCmd]);
|
|
252
|
+
await this.cmd.start();
|
|
253
|
+
console.log(`[claude-code-sprites] Started: session=${this.sessionId} resume=${resumeSessionId ?? "none"}`);
|
|
254
|
+
const currentCmd = this.cmd;
|
|
255
|
+
// DEBUG: raw stdout data events
|
|
256
|
+
currentCmd.stdout.on("data", (chunk) => {
|
|
257
|
+
console.log(`[claude-code-sprites:raw-stdout] ${chunk.length} bytes: ${chunk.toString("utf8").slice(0, 200)}`);
|
|
258
|
+
});
|
|
259
|
+
// DEBUG: raw stderr data events
|
|
260
|
+
currentCmd.stderr.on("data", (chunk) => {
|
|
261
|
+
console.log(`[claude-code-sprites:raw-stderr] ${chunk.length} bytes: ${chunk.toString("utf8").slice(0, 200)}`);
|
|
122
262
|
});
|
|
123
|
-
console.log(`[claude-code-sprites] Started: session=${this.sessionId}`);
|
|
124
263
|
// Read stdout line by line (stream-json NDJSON)
|
|
125
264
|
const rl = readline.createInterface({
|
|
126
|
-
input:
|
|
265
|
+
input: currentCmd.stdout,
|
|
127
266
|
terminal: false,
|
|
128
267
|
});
|
|
129
268
|
rl.on("line", (line) => {
|
|
@@ -133,7 +272,7 @@ export class ClaudeCodeSpritesBridge {
|
|
|
133
272
|
});
|
|
134
273
|
// Log stderr
|
|
135
274
|
const stderrRl = readline.createInterface({
|
|
136
|
-
input:
|
|
275
|
+
input: currentCmd.stderr,
|
|
137
276
|
terminal: false,
|
|
138
277
|
});
|
|
139
278
|
stderrRl.on("line", (line) => {
|
|
@@ -141,34 +280,29 @@ export class ClaudeCodeSpritesBridge {
|
|
|
141
280
|
console.error(`[claude-code-sprites:stderr] ${line}`);
|
|
142
281
|
}
|
|
143
282
|
});
|
|
144
|
-
// Handle process exit
|
|
145
|
-
|
|
283
|
+
// Handle process exit — defer to let pending readline events flush first,
|
|
284
|
+
// which prevents duplicate session_end (the parser emits one from "result").
|
|
285
|
+
currentCmd.on("exit", (code) => {
|
|
146
286
|
console.log(`[claude-code-sprites] Process exited: code=${code} session=${this.sessionId}`);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
287
|
+
setTimeout(() => {
|
|
288
|
+
// Capture session ID from parser state before marking not running
|
|
289
|
+
if (this.parser.state.sessionId) {
|
|
290
|
+
this.claudeSessionId = this.parser.state.sessionId;
|
|
291
|
+
}
|
|
292
|
+
this.running = false;
|
|
293
|
+
// Only emit session_end from exit handler if the parser didn't already
|
|
294
|
+
// emit one (via a "result" message). This prevents double session_end.
|
|
295
|
+
if (!this.closed && !this.resultReceived) {
|
|
296
|
+
const endEvent = {
|
|
297
|
+
type: "session_end",
|
|
298
|
+
success: code === 0,
|
|
299
|
+
ts: ts(),
|
|
300
|
+
};
|
|
301
|
+
this.dispatchEvent(endEvent);
|
|
302
|
+
}
|
|
303
|
+
}, 100);
|
|
155
304
|
});
|
|
156
305
|
}
|
|
157
|
-
close() {
|
|
158
|
-
this.closed = true;
|
|
159
|
-
if (this.cmd) {
|
|
160
|
-
try {
|
|
161
|
-
this.cmd.kill();
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
// Process may already be dead
|
|
165
|
-
}
|
|
166
|
-
this.cmd = null;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// -----------------------------------------------------------------------
|
|
170
|
-
// Private helpers
|
|
171
|
-
// -----------------------------------------------------------------------
|
|
172
306
|
handleLine(line) {
|
|
173
307
|
const trimmed = line.trim();
|
|
174
308
|
if (!trimmed)
|
|
@@ -181,6 +315,10 @@ export class ClaudeCodeSpritesBridge {
|
|
|
181
315
|
dispatchEvent(event) {
|
|
182
316
|
const msg = { source: "agent", ...event };
|
|
183
317
|
this.writer.append(JSON.stringify(msg)).catch(() => { });
|
|
318
|
+
// Track session_end from result messages to prevent duplicates
|
|
319
|
+
if (event.type === "session_end") {
|
|
320
|
+
this.resultReceived = true;
|
|
321
|
+
}
|
|
184
322
|
// Detect dev:start in Bash tool_use → emit app_ready for the UI preview
|
|
185
323
|
if (event.type === "pre_tool_use" && event.tool_name === "Bash") {
|
|
186
324
|
const cmd = event.tool_input?.command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-sprites.js","sourceRoot":"","sources":["../../src/bridge/claude-code-sprites.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude-code-sprites.js","sourceRoot":"","sources":["../../src/bridge/claude-code-sprites.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,4 +21,5 @@ export interface ClaudeMdOptions {
|
|
|
21
21
|
}
|
|
22
22
|
export declare function generateClaudeMd(opts: ClaudeMdOptions): string;
|
|
23
23
|
export declare function generateElectricAgentClaudeMd(opts: ClaudeMdOptions): string;
|
|
24
|
+
export { createAppSkillContent } from "./create-app-skill.js";
|
|
24
25
|
//# sourceMappingURL=claude-md-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md-generator.d.ts","sourceRoot":"","sources":["../../src/bridge/claude-md-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,eAAe;IAC/B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kEAAkE;IAClE,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;CAC1C;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"claude-md-generator.d.ts","sourceRoot":"","sources":["../../src/bridge/claude-md-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,eAAe;IAC/B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kEAAkE;IAClE,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;CAC1C;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAsC9D;AAMD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA0C3E;AA+RD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -14,10 +14,17 @@ export function generateClaudeMd(opts) {
|
|
|
14
14
|
sections.push("");
|
|
15
15
|
sections.push(PROJECT_CONTEXT);
|
|
16
16
|
sections.push("");
|
|
17
|
+
const sandbox = sandboxEnvironment(opts.runtime);
|
|
18
|
+
if (sandbox) {
|
|
19
|
+
sections.push(sandbox);
|
|
20
|
+
sections.push("");
|
|
21
|
+
}
|
|
17
22
|
if (!opts.isIteration) {
|
|
18
23
|
sections.push("## Current Task");
|
|
19
24
|
sections.push(opts.description);
|
|
20
25
|
sections.push("");
|
|
26
|
+
sections.push(SKILL_AUTO_TRIGGER);
|
|
27
|
+
sections.push("");
|
|
21
28
|
}
|
|
22
29
|
sections.push(SCAFFOLD_STRUCTURE);
|
|
23
30
|
sections.push("");
|
|
@@ -44,6 +51,11 @@ export function generateElectricAgentClaudeMd(opts) {
|
|
|
44
51
|
sections.push("");
|
|
45
52
|
sections.push(PROJECT_CONTEXT);
|
|
46
53
|
sections.push("");
|
|
54
|
+
const sandbox = sandboxEnvironment(opts.runtime);
|
|
55
|
+
if (sandbox) {
|
|
56
|
+
sections.push(sandbox);
|
|
57
|
+
sections.push("");
|
|
58
|
+
}
|
|
47
59
|
if (!opts.isIteration) {
|
|
48
60
|
sections.push("## Current Task");
|
|
49
61
|
sections.push(opts.description);
|
|
@@ -98,6 +110,7 @@ const GUARDRAILS = `## Guardrails (MUST FOLLOW)
|
|
|
98
110
|
|
|
99
111
|
### Protected Files — DO NOT MODIFY
|
|
100
112
|
- docker-compose.yml
|
|
113
|
+
- vite.config.ts (pre-configured with port, host, allowedHosts, and proxy — modifying it WILL break the preview)
|
|
101
114
|
- tsconfig.json
|
|
102
115
|
- biome.json
|
|
103
116
|
- pnpm-lock.yaml
|
|
@@ -123,6 +136,35 @@ const GUARDRAILS = `## Guardrails (MUST FOLLOW)
|
|
|
123
136
|
- timestamp({ withTimezone: true }) for all dates
|
|
124
137
|
- snake_case for SQL table/column names
|
|
125
138
|
- Foreign keys with onDelete: "cascade" where appropriate`;
|
|
139
|
+
function sandboxEnvironment(runtime) {
|
|
140
|
+
if (runtime === "sprites" || runtime === "daytona") {
|
|
141
|
+
return `## Sandbox Environment (IMPORTANT — READ FIRST)
|
|
142
|
+
You are running inside a cloud micro-VM (Fly.io Sprite). This is NOT a local machine.
|
|
143
|
+
|
|
144
|
+
### Networking & Port Exposure
|
|
145
|
+
- The Sprite HTTP proxy routes all external traffic to **port 8080** inside the VM
|
|
146
|
+
- Your app MUST listen on port 8080 to be accessible via the preview URL — this is pre-configured via the \`VITE_PORT\` environment variable
|
|
147
|
+
- The app MUST bind to \`0.0.0.0\` (not localhost) — pre-configured via \`host: true\` in vite.config.ts
|
|
148
|
+
- The preview URL follows the pattern: \`https://<sprite-name>.sprites.app\`
|
|
149
|
+
- There is NO way to expose other ports — only port 8080 is proxied
|
|
150
|
+
|
|
151
|
+
### What's Available
|
|
152
|
+
- Node.js (via nvm at \`/.sprite/languages/node/nvm/\`)
|
|
153
|
+
- pnpm, git, gh CLI
|
|
154
|
+
- Outbound internet access (npm install, API calls, etc.)
|
|
155
|
+
- \`DATABASE_URL\` — remote Postgres (Neon), no local database
|
|
156
|
+
|
|
157
|
+
### What's NOT Available
|
|
158
|
+
- Docker, docker-compose, or any container runtime
|
|
159
|
+
- Local Postgres or any local database
|
|
160
|
+
- Ports other than 8080 for external HTTP access
|
|
161
|
+
|
|
162
|
+
### PATH
|
|
163
|
+
- npm global binaries are NOT in PATH by default
|
|
164
|
+
- If you need a globally installed tool, source the profile first: \`source /etc/profile.d/npm-global.sh\``;
|
|
165
|
+
}
|
|
166
|
+
return "";
|
|
167
|
+
}
|
|
126
168
|
function devServerInstructions(runtime) {
|
|
127
169
|
if (runtime === "sprites" || runtime === "daytona") {
|
|
128
170
|
return `## Dev Server & Migrations
|
|
@@ -131,7 +173,7 @@ function devServerInstructions(runtime) {
|
|
|
131
173
|
- \`pnpm dev:stop\` — stop the dev server
|
|
132
174
|
- \`pnpm dev:restart\` — stop then start
|
|
133
175
|
|
|
134
|
-
The app
|
|
176
|
+
The app listens on port 8080 (set via VITE_PORT) — this is the only port the Sprite proxy exposes.
|
|
135
177
|
The database and Electric sync service are remote (cloud-hosted) — there is no local Postgres or Docker.
|
|
136
178
|
|
|
137
179
|
### Migrations (CRITICAL)
|
|
@@ -141,12 +183,6 @@ pnpm drizzle-kit generate # generate SQL from schema changes
|
|
|
141
183
|
pnpm drizzle-kit migrate # apply migration to the database
|
|
142
184
|
\`\`\`
|
|
143
185
|
|
|
144
|
-
### Sprites Environment Gotchas
|
|
145
|
-
- npm global binaries are NOT in PATH by default. If you need to run a globally installed tool, source the profile first: \`source /etc/profile.d/npm-global.sh\`
|
|
146
|
-
- Node.js is managed via nvm at \`/.sprite/languages/node/nvm/\`
|
|
147
|
-
- The sandbox is a cloud micro-VM — there is no Docker, no docker-compose, no local Postgres
|
|
148
|
-
- The database connection string is in DATABASE_URL (remote Neon Postgres)
|
|
149
|
-
|
|
150
186
|
### Workflow
|
|
151
187
|
After finishing ALL code generation: run migrations, then \`pnpm dev:start\` so the user can preview the app.`;
|
|
152
188
|
}
|
|
@@ -176,6 +212,22 @@ This is needed because useLiveQuery uses useSyncExternalStore without getServerS
|
|
|
176
212
|
// ---------------------------------------------------------------------------
|
|
177
213
|
// Claude Code–only sections
|
|
178
214
|
// ---------------------------------------------------------------------------
|
|
215
|
+
const SKILL_AUTO_TRIGGER = `## App Generation Pipeline (CRITICAL)
|
|
216
|
+
When building a new app, you MUST use the /create-app skill. This skill is available at .claude/skills/create-app/SKILL.md and provides the structured phased pipeline for generating Electric SQL apps.
|
|
217
|
+
|
|
218
|
+
Invoke it with: /create-app <description>
|
|
219
|
+
|
|
220
|
+
The skill enforces the correct phase order:
|
|
221
|
+
1. Clarification (if description is vague)
|
|
222
|
+
2. Plan generation (PLAN.md with data model + tasks)
|
|
223
|
+
3. Data model validation (schema + zod-schemas + tests — STOP if tests fail)
|
|
224
|
+
4. Collections & API routes
|
|
225
|
+
5. UI components
|
|
226
|
+
6. Build & lint
|
|
227
|
+
7. Final tests
|
|
228
|
+
8. Architecture reference (ARCHITECTURE.md)
|
|
229
|
+
|
|
230
|
+
Do NOT skip phases or code ad-hoc. Always follow the skill's structured pipeline.`;
|
|
179
231
|
const PLAYBOOK_INSTRUCTIONS = `## Playbooks (Domain Knowledge — MUST READ)
|
|
180
232
|
Playbook SKILL.md files contain critical API usage patterns. Read them BEFORE writing code for each phase.
|
|
181
233
|
|
|
@@ -292,6 +344,11 @@ You have git and gh CLI available via Bash. Use them when needed:
|
|
|
292
344
|
- \`gh repo create "org/name" --private --source . --remote origin --push\` — create repo
|
|
293
345
|
- \`gh pr create --title "..." --body "..."\` — create PR
|
|
294
346
|
Commit types: feat, fix, refactor, style, chore, docs, test`;
|
|
347
|
+
// ---------------------------------------------------------------------------
|
|
348
|
+
// Create-app skill content — exported so the server can write it to sandboxes
|
|
349
|
+
// where the npm-installed electric-agent may not include it yet.
|
|
350
|
+
// ---------------------------------------------------------------------------
|
|
351
|
+
export { createAppSkillContent } from "./create-app-skill.js";
|
|
295
352
|
const ERROR_HANDLING = `## Error Handling
|
|
296
353
|
Before fixing any error, check _agent/errors.md for previous attempts at the same fix.
|
|
297
354
|
If you see the same error has failed before, try a different approach.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md-generator.js","sourceRoot":"","sources":["../../src/bridge/claude-md-generator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claude-md-generator.js","sourceRoot":"","sources":["../../src/bridge/claude-md-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionBridge implementation that runs Codex CLI inside a Docker
|
|
3
|
+
* container via `docker exec -i`, communicating via exec --json NDJSON.
|
|
4
|
+
*
|
|
5
|
+
* The bridge translates Codex's exec --json output into EngineEvents
|
|
6
|
+
* and writes them to the Durable Stream for the UI.
|
|
7
|
+
*
|
|
8
|
+
* Codex runs in one-shot mode (`codex exec --json`) and exits after completing.
|
|
9
|
+
* On iterate (follow-up message), the bridge respawns Codex with the new prompt.
|
|
10
|
+
*/
|
|
11
|
+
import type { EngineEvent } from "@electric-agent/protocol";
|
|
12
|
+
import type { StreamConnectionInfo } from "../streams.js";
|
|
13
|
+
import type { SessionBridge } from "./types.js";
|
|
14
|
+
export interface CodexDockerConfig {
|
|
15
|
+
/** Initial prompt (the user's app description or task) */
|
|
16
|
+
prompt: string;
|
|
17
|
+
/** Working directory inside the container */
|
|
18
|
+
cwd: string;
|
|
19
|
+
/** Model to use (default: o4-mini) */
|
|
20
|
+
model?: string;
|
|
21
|
+
/** Additional CLI flags */
|
|
22
|
+
extraFlags?: string[];
|
|
23
|
+
}
|
|
24
|
+
export declare class CodexDockerBridge implements SessionBridge {
|
|
25
|
+
readonly sessionId: string;
|
|
26
|
+
readonly streamUrl: string;
|
|
27
|
+
readonly streamHeaders: Record<string, string>;
|
|
28
|
+
private containerId;
|
|
29
|
+
private config;
|
|
30
|
+
private writer;
|
|
31
|
+
private parser;
|
|
32
|
+
private agentEventCallbacks;
|
|
33
|
+
private completeCallbacks;
|
|
34
|
+
private closed;
|
|
35
|
+
private proc;
|
|
36
|
+
/** Codex thread ID captured from thread.started — used for resume */
|
|
37
|
+
private codexThreadId;
|
|
38
|
+
/** Whether a Codex process is currently running */
|
|
39
|
+
private running;
|
|
40
|
+
/** Whether the parser already emitted a session_end */
|
|
41
|
+
private resultReceived;
|
|
42
|
+
constructor(sessionId: string, connection: StreamConnectionInfo, containerId: string, config: CodexDockerConfig);
|
|
43
|
+
emit(event: EngineEvent): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Send a follow-up user message to Codex by respawning with a new prompt.
|
|
46
|
+
*/
|
|
47
|
+
sendCommand(cmd: Record<string, unknown>): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Send a gate response. Codex exec mode doesn't support stdin interaction,
|
|
50
|
+
* so gate responses are limited.
|
|
51
|
+
*/
|
|
52
|
+
sendGateResponse(_gate: string, _value: Record<string, unknown>): Promise<void>;
|
|
53
|
+
onAgentEvent(cb: (event: EngineEvent) => void): void;
|
|
54
|
+
onComplete(cb: (success: boolean) => void): void;
|
|
55
|
+
start(): Promise<void>;
|
|
56
|
+
close(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Spawn a new Codex process. Called for both the initial prompt
|
|
59
|
+
* and follow-up iterate messages.
|
|
60
|
+
*/
|
|
61
|
+
private spawnCodex;
|
|
62
|
+
private handleLine;
|
|
63
|
+
private dispatchEvent;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=codex-docker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-docker.d.ts","sourceRoot":"","sources":["../../src/bridge/codex-docker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAA;AAE9D,MAAM,WAAW,iBAAiB;IACjC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAA;IACX,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,qBAAa,iBAAkB,YAAW,aAAa;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE9C,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,mBAAmB,CAA0C;IACrE,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,IAAI,CAA4B;IAExC,qEAAqE;IACrE,OAAO,CAAC,aAAa,CAAsB;IAC3C,mDAAmD;IACnD,OAAO,CAAC,OAAO,CAAQ;IACvB,uDAAuD;IACvD,OAAO,CAAC,cAAc,CAAQ;gBAG7B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB;IAepB,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9D;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIpD,UAAU,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAI1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,KAAK,IAAI,IAAI;IAiBb;;;OAGG;IACH,OAAO,CAAC,UAAU;IAgGlB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;CAgDrB"}
|