@electric-agent/studio 1.13.1 → 1.14.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 (89) hide show
  1. package/dist/active-sessions.d.ts +4 -13
  2. package/dist/active-sessions.d.ts.map +1 -1
  3. package/dist/active-sessions.js +5 -39
  4. package/dist/active-sessions.js.map +1 -1
  5. package/dist/bridge/claude-code-base.d.ts +0 -2
  6. package/dist/bridge/claude-code-base.d.ts.map +1 -1
  7. package/dist/bridge/claude-code-base.js +0 -2
  8. package/dist/bridge/claude-code-base.js.map +1 -1
  9. package/dist/bridge/claude-md-generator.d.ts +2 -12
  10. package/dist/bridge/claude-md-generator.d.ts.map +1 -1
  11. package/dist/bridge/claude-md-generator.js +94 -72
  12. package/dist/bridge/claude-md-generator.js.map +1 -1
  13. package/dist/bridge/role-skills.d.ts.map +1 -1
  14. package/dist/bridge/role-skills.js +0 -8
  15. package/dist/bridge/role-skills.js.map +1 -1
  16. package/dist/client/assets/index-BfvQSMwH.css +1 -0
  17. package/dist/client/assets/index-BtX82X61.js +234 -0
  18. package/dist/client/index.html +2 -2
  19. package/dist/room-router.d.ts.map +1 -1
  20. package/dist/room-router.js +5 -20
  21. package/dist/room-router.js.map +1 -1
  22. package/dist/sandbox/docker.d.ts +0 -10
  23. package/dist/sandbox/docker.d.ts.map +1 -1
  24. package/dist/sandbox/docker.js +1 -115
  25. package/dist/sandbox/docker.js.map +1 -1
  26. package/dist/sandbox/sprites.d.ts +0 -1
  27. package/dist/sandbox/sprites.d.ts.map +1 -1
  28. package/dist/sandbox/sprites.js +0 -51
  29. package/dist/sandbox/sprites.js.map +1 -1
  30. package/dist/sandbox/types.d.ts +0 -5
  31. package/dist/sandbox/types.d.ts.map +1 -1
  32. package/dist/server.d.ts +0 -12
  33. package/dist/server.d.ts.map +1 -1
  34. package/dist/server.js +187 -1097
  35. package/dist/server.js.map +1 -1
  36. package/dist/session-auth.d.ts +0 -3
  37. package/dist/session-auth.d.ts.map +1 -1
  38. package/dist/session-auth.js +0 -10
  39. package/dist/session-auth.js.map +1 -1
  40. package/dist/sessions.d.ts +0 -2
  41. package/dist/sessions.d.ts.map +1 -1
  42. package/dist/sessions.js.map +1 -1
  43. package/package.json +2 -2
  44. package/dist/api-schemas.d.ts +0 -244
  45. package/dist/api-schemas.d.ts.map +0 -1
  46. package/dist/api-schemas.js +0 -103
  47. package/dist/api-schemas.js.map +0 -1
  48. package/dist/bridge/codex-docker.d.ts +0 -70
  49. package/dist/bridge/codex-docker.d.ts.map +0 -1
  50. package/dist/bridge/codex-docker.js +0 -234
  51. package/dist/bridge/codex-docker.js.map +0 -1
  52. package/dist/bridge/codex-json-parser.d.ts +0 -31
  53. package/dist/bridge/codex-json-parser.d.ts.map +0 -1
  54. package/dist/bridge/codex-json-parser.js +0 -267
  55. package/dist/bridge/codex-json-parser.js.map +0 -1
  56. package/dist/bridge/codex-md-generator.d.ts +0 -14
  57. package/dist/bridge/codex-md-generator.d.ts.map +0 -1
  58. package/dist/bridge/codex-md-generator.js +0 -55
  59. package/dist/bridge/codex-md-generator.js.map +0 -1
  60. package/dist/bridge/codex-sprites.d.ts +0 -64
  61. package/dist/bridge/codex-sprites.d.ts.map +0 -1
  62. package/dist/bridge/codex-sprites.js +0 -227
  63. package/dist/bridge/codex-sprites.js.map +0 -1
  64. package/dist/bridge/daytona.d.ts +0 -35
  65. package/dist/bridge/daytona.d.ts.map +0 -1
  66. package/dist/bridge/daytona.js +0 -141
  67. package/dist/bridge/daytona.js.map +0 -1
  68. package/dist/bridge/docker-stdio.d.ts +0 -30
  69. package/dist/bridge/docker-stdio.d.ts.map +0 -1
  70. package/dist/bridge/docker-stdio.js +0 -135
  71. package/dist/bridge/docker-stdio.js.map +0 -1
  72. package/dist/bridge/sprites.d.ts +0 -32
  73. package/dist/bridge/sprites.d.ts.map +0 -1
  74. package/dist/bridge/sprites.js +0 -133
  75. package/dist/bridge/sprites.js.map +0 -1
  76. package/dist/client/assets/index-BXdgNRgB.js +0 -235
  77. package/dist/client/assets/index-IvCtVUfs.css +0 -1
  78. package/dist/github-app.d.ts +0 -14
  79. package/dist/github-app.d.ts.map +0 -1
  80. package/dist/github-app.js +0 -62
  81. package/dist/github-app.js.map +0 -1
  82. package/dist/github-app.test.d.ts +0 -2
  83. package/dist/github-app.test.d.ts.map +0 -1
  84. package/dist/github-app.test.js +0 -62
  85. package/dist/github-app.test.js.map +0 -1
  86. package/dist/validate.d.ts +0 -10
  87. package/dist/validate.d.ts.map +0 -1
  88. package/dist/validate.js +0 -24
  89. package/dist/validate.js.map +0 -1
@@ -1,244 +0,0 @@
1
- /**
2
- * Zod schemas for API request body validation.
3
- *
4
- * Each schema corresponds to a POST endpoint in server.ts.
5
- * Using `.passthrough()` where backwards-compat matters (unknown fields ignored).
6
- */
7
- import { z } from "zod";
8
- export declare const createSessionSchema: z.ZodObject<{
9
- description: z.ZodString;
10
- name: z.ZodOptional<z.ZodString>;
11
- baseDir: z.ZodOptional<z.ZodString>;
12
- freeform: z.ZodOptional<z.ZodBoolean>;
13
- apiKey: z.ZodOptional<z.ZodString>;
14
- oauthToken: z.ZodOptional<z.ZodString>;
15
- ghToken: z.ZodOptional<z.ZodString>;
16
- }, "strip", z.ZodTypeAny, {
17
- description: string;
18
- name?: string | undefined;
19
- baseDir?: string | undefined;
20
- freeform?: boolean | undefined;
21
- apiKey?: string | undefined;
22
- oauthToken?: string | undefined;
23
- ghToken?: string | undefined;
24
- }, {
25
- description: string;
26
- name?: string | undefined;
27
- baseDir?: string | undefined;
28
- freeform?: boolean | undefined;
29
- apiKey?: string | undefined;
30
- oauthToken?: string | undefined;
31
- ghToken?: string | undefined;
32
- }>;
33
- export declare const iterateSessionSchema: z.ZodObject<{
34
- request: z.ZodString;
35
- }, "strip", z.ZodTypeAny, {
36
- request: string;
37
- }, {
38
- request: string;
39
- }>;
40
- export declare const createSandboxSchema: z.ZodObject<{
41
- sessionId: z.ZodOptional<z.ZodString>;
42
- projectName: z.ZodOptional<z.ZodString>;
43
- infra: z.ZodOptional<z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
44
- mode: z.ZodLiteral<"none">;
45
- }, "strip", z.ZodTypeAny, {
46
- mode: "none";
47
- }, {
48
- mode: "none";
49
- }>, z.ZodObject<{
50
- mode: z.ZodLiteral<"local">;
51
- }, "strip", z.ZodTypeAny, {
52
- mode: "local";
53
- }, {
54
- mode: "local";
55
- }>, z.ZodObject<{
56
- mode: z.ZodLiteral<"cloud">;
57
- databaseUrl: z.ZodString;
58
- electricUrl: z.ZodString;
59
- sourceId: z.ZodString;
60
- secret: z.ZodString;
61
- }, "strip", z.ZodTypeAny, {
62
- secret: string;
63
- mode: "cloud";
64
- databaseUrl: string;
65
- electricUrl: string;
66
- sourceId: string;
67
- }, {
68
- secret: string;
69
- mode: "cloud";
70
- databaseUrl: string;
71
- electricUrl: string;
72
- sourceId: string;
73
- }>, z.ZodObject<{
74
- mode: z.ZodLiteral<"claim">;
75
- databaseUrl: z.ZodString;
76
- electricUrl: z.ZodString;
77
- sourceId: z.ZodString;
78
- secret: z.ZodString;
79
- claimId: z.ZodString;
80
- }, "strip", z.ZodTypeAny, {
81
- claimId: string;
82
- secret: string;
83
- mode: "claim";
84
- databaseUrl: string;
85
- electricUrl: string;
86
- sourceId: string;
87
- }, {
88
- claimId: string;
89
- secret: string;
90
- mode: "claim";
91
- databaseUrl: string;
92
- electricUrl: string;
93
- sourceId: string;
94
- }>]>>;
95
- }, "strip", z.ZodTypeAny, {
96
- projectName?: string | undefined;
97
- sessionId?: string | undefined;
98
- infra?: {
99
- mode: "none";
100
- } | {
101
- mode: "local";
102
- } | {
103
- secret: string;
104
- mode: "cloud";
105
- databaseUrl: string;
106
- electricUrl: string;
107
- sourceId: string;
108
- } | {
109
- claimId: string;
110
- secret: string;
111
- mode: "claim";
112
- databaseUrl: string;
113
- electricUrl: string;
114
- sourceId: string;
115
- } | undefined;
116
- }, {
117
- projectName?: string | undefined;
118
- sessionId?: string | undefined;
119
- infra?: {
120
- mode: "none";
121
- } | {
122
- mode: "local";
123
- } | {
124
- secret: string;
125
- mode: "cloud";
126
- databaseUrl: string;
127
- electricUrl: string;
128
- sourceId: string;
129
- } | {
130
- claimId: string;
131
- secret: string;
132
- mode: "claim";
133
- databaseUrl: string;
134
- electricUrl: string;
135
- sourceId: string;
136
- } | undefined;
137
- }>;
138
- export declare const createRoomSchema: z.ZodObject<{
139
- name: z.ZodString;
140
- maxRounds: z.ZodOptional<z.ZodNumber>;
141
- }, "strip", z.ZodTypeAny, {
142
- name: string;
143
- maxRounds?: number | undefined;
144
- }, {
145
- name: string;
146
- maxRounds?: number | undefined;
147
- }>;
148
- export declare const createAppRoomSchema: z.ZodObject<{
149
- description: z.ZodString;
150
- name: z.ZodOptional<z.ZodString>;
151
- apiKey: z.ZodOptional<z.ZodString>;
152
- oauthToken: z.ZodOptional<z.ZodString>;
153
- ghToken: z.ZodOptional<z.ZodString>;
154
- }, "strip", z.ZodTypeAny, {
155
- description: string;
156
- name?: string | undefined;
157
- apiKey?: string | undefined;
158
- oauthToken?: string | undefined;
159
- ghToken?: string | undefined;
160
- }, {
161
- description: string;
162
- name?: string | undefined;
163
- apiKey?: string | undefined;
164
- oauthToken?: string | undefined;
165
- ghToken?: string | undefined;
166
- }>;
167
- export declare const addAgentSchema: z.ZodObject<{
168
- name: z.ZodOptional<z.ZodString>;
169
- role: z.ZodOptional<z.ZodString>;
170
- gated: z.ZodOptional<z.ZodBoolean>;
171
- initialPrompt: z.ZodOptional<z.ZodString>;
172
- apiKey: z.ZodOptional<z.ZodString>;
173
- oauthToken: z.ZodOptional<z.ZodString>;
174
- ghToken: z.ZodOptional<z.ZodString>;
175
- }, "strip", z.ZodTypeAny, {
176
- name?: string | undefined;
177
- apiKey?: string | undefined;
178
- oauthToken?: string | undefined;
179
- ghToken?: string | undefined;
180
- role?: string | undefined;
181
- gated?: boolean | undefined;
182
- initialPrompt?: string | undefined;
183
- }, {
184
- name?: string | undefined;
185
- apiKey?: string | undefined;
186
- oauthToken?: string | undefined;
187
- ghToken?: string | undefined;
188
- role?: string | undefined;
189
- gated?: boolean | undefined;
190
- initialPrompt?: string | undefined;
191
- }>;
192
- export declare const addSessionToRoomSchema: z.ZodObject<{
193
- sessionId: z.ZodString;
194
- name: z.ZodString;
195
- initialPrompt: z.ZodOptional<z.ZodString>;
196
- }, "strip", z.ZodTypeAny, {
197
- sessionId: string;
198
- name: string;
199
- initialPrompt?: string | undefined;
200
- }, {
201
- sessionId: string;
202
- name: string;
203
- initialPrompt?: string | undefined;
204
- }>;
205
- export declare const iterateRoomSessionSchema: z.ZodObject<{
206
- request: z.ZodString;
207
- }, "strip", z.ZodTypeAny, {
208
- request: string;
209
- }, {
210
- request: string;
211
- }>;
212
- export declare const sendRoomMessageSchema: z.ZodObject<{
213
- from: z.ZodString;
214
- body: z.ZodString;
215
- to: z.ZodOptional<z.ZodString>;
216
- }, "strip", z.ZodTypeAny, {
217
- from: string;
218
- body: string;
219
- to?: string | undefined;
220
- }, {
221
- from: string;
222
- body: string;
223
- to?: string | undefined;
224
- }>;
225
- export declare const resumeSessionSchema: z.ZodObject<{
226
- repoUrl: z.ZodString;
227
- branch: z.ZodOptional<z.ZodString>;
228
- apiKey: z.ZodOptional<z.ZodString>;
229
- oauthToken: z.ZodOptional<z.ZodString>;
230
- ghToken: z.ZodOptional<z.ZodString>;
231
- }, "strip", z.ZodTypeAny, {
232
- repoUrl: string;
233
- apiKey?: string | undefined;
234
- oauthToken?: string | undefined;
235
- ghToken?: string | undefined;
236
- branch?: string | undefined;
237
- }, {
238
- repoUrl: string;
239
- apiKey?: string | undefined;
240
- oauthToken?: string | undefined;
241
- ghToken?: string | undefined;
242
- branch?: string | undefined;
243
- }>;
244
- //# sourceMappingURL=api-schemas.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-schemas.d.ts","sourceRoot":"","sources":["../src/api-schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;EAQ9B,CAAA;AAGF,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAA;AA2BF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI9B,CAAA;AAGF,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAA;AAGF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAA;AAGF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;EAQzB,CAAA;AAGF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAIjC,CAAA;AAGF,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAA;AAGF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAA;AAGF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAA"}
@@ -1,103 +0,0 @@
1
- /**
2
- * Zod schemas for API request body validation.
3
- *
4
- * Each schema corresponds to a POST endpoint in server.ts.
5
- * Using `.passthrough()` where backwards-compat matters (unknown fields ignored).
6
- */
7
- import { z } from "zod";
8
- /** Max length for free-text fields to prevent abuse */
9
- const MAX_TEXT = 10_000;
10
- const MAX_SHORT = 500;
11
- const MAX_KEY = 1_000;
12
- const optionalKey = z.string().max(MAX_KEY).optional();
13
- // POST /api/sessions
14
- export const createSessionSchema = z.object({
15
- description: z.string().min(1).max(MAX_TEXT),
16
- name: z.string().max(MAX_SHORT).optional(),
17
- baseDir: z.string().max(MAX_SHORT).optional(),
18
- freeform: z.boolean().optional(),
19
- apiKey: optionalKey,
20
- oauthToken: optionalKey,
21
- ghToken: optionalKey,
22
- });
23
- // POST /api/sessions/:id/iterate
24
- export const iterateSessionSchema = z.object({
25
- request: z.string().min(1).max(MAX_TEXT),
26
- });
27
- // POST /api/sandboxes
28
- const infraNoneSchema = z.object({ mode: z.literal("none") });
29
- const infraLocalSchema = z.object({ mode: z.literal("local") });
30
- const infraCloudSchema = z.object({
31
- mode: z.literal("cloud"),
32
- databaseUrl: z.string().max(MAX_KEY),
33
- electricUrl: z.string().max(MAX_KEY),
34
- sourceId: z.string().max(MAX_SHORT),
35
- secret: z.string().max(MAX_KEY),
36
- });
37
- const infraClaimSchema = z.object({
38
- mode: z.literal("claim"),
39
- databaseUrl: z.string().max(MAX_KEY),
40
- electricUrl: z.string().max(MAX_KEY),
41
- sourceId: z.string().max(MAX_SHORT),
42
- secret: z.string().max(MAX_KEY),
43
- claimId: z.string().max(MAX_SHORT),
44
- });
45
- const infraConfigSchema = z.discriminatedUnion("mode", [
46
- infraNoneSchema,
47
- infraLocalSchema,
48
- infraCloudSchema,
49
- infraClaimSchema,
50
- ]);
51
- export const createSandboxSchema = z.object({
52
- sessionId: z.string().uuid().optional(),
53
- projectName: z.string().max(MAX_SHORT).optional(),
54
- infra: infraConfigSchema.optional(),
55
- });
56
- // POST /api/rooms
57
- export const createRoomSchema = z.object({
58
- name: z.string().min(1).max(MAX_SHORT),
59
- maxRounds: z.number().int().positive().optional(),
60
- });
61
- // POST /api/rooms/create-app
62
- export const createAppRoomSchema = z.object({
63
- description: z.string().min(1).max(MAX_TEXT),
64
- name: z.string().max(MAX_SHORT).optional(),
65
- apiKey: optionalKey,
66
- oauthToken: optionalKey,
67
- ghToken: optionalKey,
68
- });
69
- // POST /api/rooms/:id/agents
70
- export const addAgentSchema = z.object({
71
- name: z.string().max(MAX_SHORT).optional(),
72
- role: z.string().max(MAX_SHORT).optional(),
73
- gated: z.boolean().optional(),
74
- initialPrompt: z.string().max(MAX_TEXT).optional(),
75
- apiKey: optionalKey,
76
- oauthToken: optionalKey,
77
- ghToken: optionalKey,
78
- });
79
- // POST /api/rooms/:id/sessions
80
- export const addSessionToRoomSchema = z.object({
81
- sessionId: z.string().uuid(),
82
- name: z.string().min(1).max(MAX_SHORT),
83
- initialPrompt: z.string().max(MAX_TEXT).optional(),
84
- });
85
- // POST /api/rooms/:id/sessions/:sessionId/iterate
86
- export const iterateRoomSessionSchema = z.object({
87
- request: z.string().min(1).max(MAX_TEXT),
88
- });
89
- // POST /api/rooms/:id/messages
90
- export const sendRoomMessageSchema = z.object({
91
- from: z.string().min(1).max(MAX_SHORT),
92
- body: z.string().min(1).max(MAX_TEXT),
93
- to: z.string().max(MAX_SHORT).optional(),
94
- });
95
- // POST /api/sessions/resume
96
- export const resumeSessionSchema = z.object({
97
- repoUrl: z.string().min(1).max(MAX_KEY),
98
- branch: z.string().max(MAX_SHORT).optional(),
99
- apiKey: optionalKey,
100
- oauthToken: optionalKey,
101
- ghToken: optionalKey,
102
- });
103
- //# sourceMappingURL=api-schemas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-schemas.js","sourceRoot":"","sources":["../src/api-schemas.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
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(
43
- sessionId: string,
44
- connection: StreamConnectionInfo,
45
- containerId: string,
46
- config: CodexDockerConfig,
47
- )
48
- emit(event: EngineEvent): Promise<void>
49
- /**
50
- * Send a follow-up user message to Codex by respawning with a new prompt.
51
- */
52
- sendCommand(cmd: Record<string, unknown>): Promise<void>
53
- /**
54
- * Send a gate response. Codex exec mode doesn't support stdin interaction,
55
- * so gate responses are limited.
56
- */
57
- sendGateResponse(_gate: string, _value: Record<string, unknown>): Promise<void>
58
- onAgentEvent(cb: (event: EngineEvent) => void): void
59
- onComplete(cb: (success: boolean) => void): void
60
- start(): Promise<void>
61
- close(): void
62
- /**
63
- * Spawn a new Codex process. Called for both the initial prompt
64
- * and follow-up iterate messages.
65
- */
66
- private spawnCodex
67
- private handleLine
68
- private dispatchEvent
69
- }
70
- //# sourceMappingURL=codex-docker.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,234 +0,0 @@
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 { spawn } from "node:child_process"
12
- import * as readline from "node:readline"
13
- import { DurableStream } from "@durable-streams/client"
14
- import { ts } from "@electric-agent/protocol"
15
- import { createCodexJsonParser } from "./codex-json-parser.js"
16
- export class CodexDockerBridge {
17
- sessionId
18
- streamUrl
19
- streamHeaders
20
- containerId
21
- config
22
- writer
23
- parser = createCodexJsonParser()
24
- agentEventCallbacks = []
25
- completeCallbacks = []
26
- closed = false
27
- proc = null
28
- /** Codex thread ID captured from thread.started — used for resume */
29
- codexThreadId = null
30
- /** Whether a Codex process is currently running */
31
- running = false
32
- /** Whether the parser already emitted a session_end */
33
- resultReceived = false
34
- constructor(sessionId, connection, containerId, config) {
35
- this.sessionId = sessionId
36
- this.streamUrl = connection.url
37
- this.streamHeaders = connection.headers
38
- this.containerId = containerId
39
- this.config = config
40
- this.writer = new DurableStream({
41
- url: connection.url,
42
- headers: connection.headers,
43
- contentType: "application/json",
44
- })
45
- }
46
- async emit(event) {
47
- if (this.closed) return
48
- const msg = { source: "server", ...event }
49
- await this.writer.append(JSON.stringify(msg))
50
- }
51
- /**
52
- * Send a follow-up user message to Codex by respawning with a new prompt.
53
- */
54
- async sendCommand(cmd) {
55
- if (this.closed) return
56
- if (cmd.command === "iterate" && typeof cmd.request === "string") {
57
- this.spawnCodex(cmd.request)
58
- return
59
- }
60
- console.log(`[codex-docker] Ignoring unsupported command: ${cmd.command}`)
61
- }
62
- /**
63
- * Send a gate response. Codex exec mode doesn't support stdin interaction,
64
- * so gate responses are limited.
65
- */
66
- async sendGateResponse(_gate, _value) {
67
- // Codex exec --json doesn't support stdin user messages mid-run
68
- }
69
- onAgentEvent(cb) {
70
- this.agentEventCallbacks.push(cb)
71
- }
72
- onComplete(cb) {
73
- this.completeCallbacks.push(cb)
74
- }
75
- async start() {
76
- if (this.closed) return
77
- this.spawnCodex(this.config.prompt)
78
- }
79
- close() {
80
- this.closed = true
81
- if (this.proc) {
82
- try {
83
- this.proc.stdin?.end()
84
- this.proc.kill("SIGTERM")
85
- } catch {
86
- // Process may already be dead
87
- }
88
- this.proc = null
89
- }
90
- }
91
- // -----------------------------------------------------------------------
92
- // Private helpers
93
- // -----------------------------------------------------------------------
94
- /**
95
- * Spawn a new Codex process. Called for both the initial prompt
96
- * and follow-up iterate messages.
97
- */
98
- spawnCodex(prompt) {
99
- // Kill any existing process
100
- if (this.proc) {
101
- try {
102
- this.proc.stdin?.end()
103
- this.proc.kill("SIGTERM")
104
- } catch {
105
- // Already dead
106
- }
107
- this.proc = null
108
- }
109
- // Reset parser state for the new process
110
- this.parser = createCodexJsonParser()
111
- this.resultReceived = false
112
- this.running = true
113
- const model = this.config.model ?? "o4-mini"
114
- // Build the codex CLI command
115
- const codexArgs = [
116
- "exec",
117
- "--json",
118
- "--full-auto",
119
- "--model",
120
- model,
121
- ...(this.config.extraFlags ?? []),
122
- "-q",
123
- prompt,
124
- ]
125
- // Escape for bash
126
- const escapedArgs = codexArgs.map((a) => `'${a.replace(/'/g, "'\\''")}'`).join(" ")
127
- const cmd = `cd '${this.config.cwd}' && codex ${escapedArgs}`
128
- this.proc = spawn("docker", ["exec", this.containerId, "bash", "-c", cmd], {
129
- stdio: ["pipe", "pipe", "pipe"],
130
- })
131
- console.log(
132
- `[codex-docker] Started: session=${this.sessionId} container=${this.containerId} pid=${this.proc.pid}`,
133
- )
134
- console.log(`[codex-docker] cmd: ${cmd}`)
135
- const currentProc = this.proc
136
- // Read stdout line by line (exec --json NDJSON)
137
- if (currentProc.stdout) {
138
- const rl = readline.createInterface({
139
- input: currentProc.stdout,
140
- terminal: false,
141
- })
142
- rl.on("line", (line) => {
143
- if (this.closed) return
144
- console.log(`[codex-docker:stdout] ${line.slice(0, 120)}...`)
145
- this.handleLine(line)
146
- })
147
- }
148
- // Log stderr
149
- if (currentProc.stderr) {
150
- const stderrRl = readline.createInterface({
151
- input: currentProc.stderr,
152
- terminal: false,
153
- })
154
- stderrRl.on("line", (line) => {
155
- if (!this.closed) {
156
- console.error(`[codex-docker:stderr] ${line}`)
157
- }
158
- })
159
- }
160
- // Handle process exit — defer to let pending readline events flush first
161
- currentProc.on("exit", (code) => {
162
- console.log(`[codex-docker] Process exited: code=${code} session=${this.sessionId}`)
163
- setTimeout(() => {
164
- // Capture thread ID from parser state before marking not running
165
- if (this.parser.state.threadId) {
166
- this.codexThreadId = this.parser.state.threadId
167
- }
168
- this.running = false
169
- // Emit session_end if the parser didn't already
170
- if (!this.closed && !this.resultReceived) {
171
- const endEvent = {
172
- type: "session_end",
173
- success: code === 0,
174
- ts: ts(),
175
- }
176
- this.dispatchEvent(endEvent)
177
- }
178
- }, 100)
179
- })
180
- }
181
- handleLine(line) {
182
- const trimmed = line.trim()
183
- if (!trimmed) return
184
- const events = this.parser.parse(trimmed)
185
- for (const event of events) {
186
- this.dispatchEvent(event)
187
- }
188
- }
189
- dispatchEvent(event) {
190
- // Write to Durable Stream for UI
191
- const msg = { source: "agent", ...event }
192
- this.writer.append(JSON.stringify(msg)).catch(() => {})
193
- // Track session_end to prevent duplicates
194
- if (event.type === "session_end") {
195
- this.resultReceived = true
196
- }
197
- // Detect dev:start in Bash tool_use → emit app_ready for the UI preview
198
- if (event.type === "pre_tool_use" && event.tool_name === "Bash") {
199
- const cmd = event.tool_input?.command
200
- if (typeof cmd === "string" && /\bdev:start\b/.test(cmd)) {
201
- const appReady = { type: "app_ready", ts: ts() }
202
- const appReadyMsg = { source: "agent", ...appReady }
203
- this.writer.append(JSON.stringify(appReadyMsg)).catch(() => {})
204
- for (const cb of this.agentEventCallbacks) {
205
- try {
206
- cb(appReady)
207
- } catch {
208
- // Swallow
209
- }
210
- }
211
- }
212
- }
213
- // Dispatch to callbacks
214
- for (const cb of this.agentEventCallbacks) {
215
- try {
216
- cb(event)
217
- } catch {
218
- // Swallow callback errors
219
- }
220
- }
221
- // Detect session_end
222
- if (event.type === "session_end" && "success" in event) {
223
- const success = event.success
224
- for (const cb of this.completeCallbacks) {
225
- try {
226
- cb(success)
227
- } catch {
228
- // Swallow callback errors
229
- }
230
- }
231
- }
232
- }
233
- }
234
- //# sourceMappingURL=codex-docker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-docker.js","sourceRoot":"","sources":["../../src/bridge/codex-docker.ts"],"names":[],"mappings":"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"}