@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.
- package/dist/active-sessions.d.ts +4 -13
- package/dist/active-sessions.d.ts.map +1 -1
- package/dist/active-sessions.js +5 -39
- package/dist/active-sessions.js.map +1 -1
- package/dist/bridge/claude-code-base.d.ts +0 -2
- package/dist/bridge/claude-code-base.d.ts.map +1 -1
- package/dist/bridge/claude-code-base.js +0 -2
- package/dist/bridge/claude-code-base.js.map +1 -1
- package/dist/bridge/claude-md-generator.d.ts +2 -12
- package/dist/bridge/claude-md-generator.d.ts.map +1 -1
- package/dist/bridge/claude-md-generator.js +94 -72
- package/dist/bridge/claude-md-generator.js.map +1 -1
- package/dist/bridge/role-skills.d.ts.map +1 -1
- package/dist/bridge/role-skills.js +0 -8
- package/dist/bridge/role-skills.js.map +1 -1
- package/dist/client/assets/index-BfvQSMwH.css +1 -0
- package/dist/client/assets/index-BtX82X61.js +234 -0
- package/dist/client/index.html +2 -2
- package/dist/room-router.d.ts.map +1 -1
- package/dist/room-router.js +5 -20
- package/dist/room-router.js.map +1 -1
- package/dist/sandbox/docker.d.ts +0 -10
- package/dist/sandbox/docker.d.ts.map +1 -1
- package/dist/sandbox/docker.js +1 -115
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/sprites.d.ts +0 -1
- package/dist/sandbox/sprites.d.ts.map +1 -1
- package/dist/sandbox/sprites.js +0 -51
- package/dist/sandbox/sprites.js.map +1 -1
- package/dist/sandbox/types.d.ts +0 -5
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/server.d.ts +0 -12
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +187 -1097
- package/dist/server.js.map +1 -1
- package/dist/session-auth.d.ts +0 -3
- package/dist/session-auth.d.ts.map +1 -1
- package/dist/session-auth.js +0 -10
- package/dist/session-auth.js.map +1 -1
- 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/api-schemas.d.ts +0 -244
- package/dist/api-schemas.d.ts.map +0 -1
- package/dist/api-schemas.js +0 -103
- package/dist/api-schemas.js.map +0 -1
- package/dist/bridge/codex-docker.d.ts +0 -70
- package/dist/bridge/codex-docker.d.ts.map +0 -1
- package/dist/bridge/codex-docker.js +0 -234
- package/dist/bridge/codex-docker.js.map +0 -1
- package/dist/bridge/codex-json-parser.d.ts +0 -31
- package/dist/bridge/codex-json-parser.d.ts.map +0 -1
- package/dist/bridge/codex-json-parser.js +0 -267
- package/dist/bridge/codex-json-parser.js.map +0 -1
- package/dist/bridge/codex-md-generator.d.ts +0 -14
- package/dist/bridge/codex-md-generator.d.ts.map +0 -1
- package/dist/bridge/codex-md-generator.js +0 -55
- package/dist/bridge/codex-md-generator.js.map +0 -1
- package/dist/bridge/codex-sprites.d.ts +0 -64
- package/dist/bridge/codex-sprites.d.ts.map +0 -1
- package/dist/bridge/codex-sprites.js +0 -227
- package/dist/bridge/codex-sprites.js.map +0 -1
- package/dist/bridge/daytona.d.ts +0 -35
- package/dist/bridge/daytona.d.ts.map +0 -1
- package/dist/bridge/daytona.js +0 -141
- package/dist/bridge/daytona.js.map +0 -1
- package/dist/bridge/docker-stdio.d.ts +0 -30
- package/dist/bridge/docker-stdio.d.ts.map +0 -1
- package/dist/bridge/docker-stdio.js +0 -135
- package/dist/bridge/docker-stdio.js.map +0 -1
- package/dist/bridge/sprites.d.ts +0 -32
- package/dist/bridge/sprites.d.ts.map +0 -1
- package/dist/bridge/sprites.js +0 -133
- package/dist/bridge/sprites.js.map +0 -1
- package/dist/client/assets/index-BXdgNRgB.js +0 -235
- package/dist/client/assets/index-IvCtVUfs.css +0 -1
- package/dist/github-app.d.ts +0 -14
- package/dist/github-app.d.ts.map +0 -1
- package/dist/github-app.js +0 -62
- package/dist/github-app.js.map +0 -1
- package/dist/github-app.test.d.ts +0 -2
- package/dist/github-app.test.d.ts.map +0 -1
- package/dist/github-app.test.js +0 -62
- package/dist/github-app.test.js.map +0 -1
- package/dist/validate.d.ts +0 -10
- package/dist/validate.d.ts.map +0 -1
- package/dist/validate.js +0 -24
- package/dist/validate.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-sprites.js","sourceRoot":"","sources":["../../src/bridge/codex-sprites.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge/daytona.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionBridge implementation that communicates with a Daytona sandbox
|
|
3
|
-
* via the Daytona SDK session API (stdin/stdout NDJSON).
|
|
4
|
-
*
|
|
5
|
-
* The server bridges between the Durable Stream (for UI events) and
|
|
6
|
-
* the Daytona session (for agent communication). The agent inside the
|
|
7
|
-
* sandbox uses the stdio adapter — no outbound internet required.
|
|
8
|
-
*/
|
|
9
|
-
import type { Sandbox } from "@daytonaio/sdk"
|
|
10
|
-
import type { EngineEvent } from "@electric-agent/protocol"
|
|
11
|
-
import type { StreamConnectionInfo } from "../streams.js"
|
|
12
|
-
import type { SessionBridge } from "./types.js"
|
|
13
|
-
export declare class DaytonaSessionBridge implements SessionBridge {
|
|
14
|
-
readonly sessionId: string
|
|
15
|
-
readonly streamUrl: string
|
|
16
|
-
readonly streamHeaders: Record<string, string>
|
|
17
|
-
private sandbox
|
|
18
|
-
private writer
|
|
19
|
-
private agentEventCallbacks
|
|
20
|
-
private completeCallbacks
|
|
21
|
-
private closed
|
|
22
|
-
private cmdId
|
|
23
|
-
private stdoutBuffer
|
|
24
|
-
constructor(sessionId: string, connection: StreamConnectionInfo, sandbox: Sandbox)
|
|
25
|
-
emit(event: EngineEvent): Promise<void>
|
|
26
|
-
sendCommand(cmd: Record<string, unknown>): Promise<void>
|
|
27
|
-
sendGateResponse(gate: string, value: Record<string, unknown>): Promise<void>
|
|
28
|
-
onAgentEvent(cb: (event: EngineEvent) => void): void
|
|
29
|
-
onComplete(cb: (success: boolean) => void): void
|
|
30
|
-
start(): Promise<void>
|
|
31
|
-
private pollLogs
|
|
32
|
-
private handleStdout
|
|
33
|
-
close(): void
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=daytona.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daytona.d.ts","sourceRoot":"","sources":["../../src/bridge/daytona.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAA;AAI9D,qBAAa,oBAAqB,YAAW,aAAa;IACzD,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,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,mBAAmB,CAA0C;IACrE,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,YAAY,CAAK;gBAEb,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO;IAa3E,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnF,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;YA2Bd,QAAQ;IAqBtB,OAAO,CAAC,YAAY;IAiDpB,KAAK,IAAI,IAAI;CAGb"}
|
package/dist/bridge/daytona.js
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionBridge implementation that communicates with a Daytona sandbox
|
|
3
|
-
* via the Daytona SDK session API (stdin/stdout NDJSON).
|
|
4
|
-
*
|
|
5
|
-
* The server bridges between the Durable Stream (for UI events) and
|
|
6
|
-
* the Daytona session (for agent communication). The agent inside the
|
|
7
|
-
* sandbox uses the stdio adapter — no outbound internet required.
|
|
8
|
-
*/
|
|
9
|
-
import { DurableStream } from "@durable-streams/client"
|
|
10
|
-
|
|
11
|
-
const DAYTONA_SESSION_ID = "agent-session"
|
|
12
|
-
export class DaytonaSessionBridge {
|
|
13
|
-
sessionId
|
|
14
|
-
streamUrl
|
|
15
|
-
streamHeaders
|
|
16
|
-
sandbox
|
|
17
|
-
writer
|
|
18
|
-
agentEventCallbacks = []
|
|
19
|
-
completeCallbacks = []
|
|
20
|
-
closed = false
|
|
21
|
-
cmdId = null
|
|
22
|
-
stdoutBuffer = ""
|
|
23
|
-
constructor(sessionId, connection, sandbox) {
|
|
24
|
-
this.sessionId = sessionId
|
|
25
|
-
this.streamUrl = connection.url
|
|
26
|
-
this.streamHeaders = connection.headers
|
|
27
|
-
this.sandbox = sandbox
|
|
28
|
-
this.writer = new DurableStream({
|
|
29
|
-
url: connection.url,
|
|
30
|
-
headers: connection.headers,
|
|
31
|
-
contentType: "application/json",
|
|
32
|
-
})
|
|
33
|
-
}
|
|
34
|
-
async emit(event) {
|
|
35
|
-
if (this.closed) return
|
|
36
|
-
const msg = { source: "server", ...event }
|
|
37
|
-
await this.writer.append(JSON.stringify(msg))
|
|
38
|
-
}
|
|
39
|
-
async sendCommand(cmd) {
|
|
40
|
-
if (this.closed || !this.cmdId) return
|
|
41
|
-
const line = JSON.stringify({ type: "command", ...cmd })
|
|
42
|
-
await this.sandbox.process.sendSessionCommandInput(DAYTONA_SESSION_ID, this.cmdId, `${line}\n`)
|
|
43
|
-
}
|
|
44
|
-
async sendGateResponse(gate, value) {
|
|
45
|
-
if (this.closed || !this.cmdId) return
|
|
46
|
-
const line = JSON.stringify({ type: "gate_response", gate, ...value })
|
|
47
|
-
await this.sandbox.process.sendSessionCommandInput(DAYTONA_SESSION_ID, this.cmdId, `${line}\n`)
|
|
48
|
-
}
|
|
49
|
-
onAgentEvent(cb) {
|
|
50
|
-
this.agentEventCallbacks.push(cb)
|
|
51
|
-
}
|
|
52
|
-
onComplete(cb) {
|
|
53
|
-
this.completeCallbacks.push(cb)
|
|
54
|
-
}
|
|
55
|
-
async start() {
|
|
56
|
-
if (this.closed) return
|
|
57
|
-
// Create a persistent session in the sandbox
|
|
58
|
-
await this.sandbox.process.createSession(DAYTONA_SESSION_ID)
|
|
59
|
-
// Start the headless agent asynchronously
|
|
60
|
-
const response = await this.sandbox.process.executeSessionCommand(DAYTONA_SESSION_ID, {
|
|
61
|
-
command: "electric-agent headless",
|
|
62
|
-
runAsync: true,
|
|
63
|
-
})
|
|
64
|
-
this.cmdId = response.cmdId ?? null
|
|
65
|
-
if (!this.cmdId) {
|
|
66
|
-
throw new Error("Failed to get command ID from Daytona session")
|
|
67
|
-
}
|
|
68
|
-
console.log(`[daytona-bridge] Agent started: session=${this.sessionId} cmdId=${this.cmdId}`)
|
|
69
|
-
// Stream stdout output via log polling
|
|
70
|
-
this.pollLogs().catch((err) => {
|
|
71
|
-
if (!this.closed) {
|
|
72
|
-
console.error(`[daytona-bridge] Log streaming error:`, err)
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
}
|
|
76
|
-
async pollLogs() {
|
|
77
|
-
if (!this.cmdId) return
|
|
78
|
-
try {
|
|
79
|
-
await this.sandbox.process.getSessionCommandLogs(
|
|
80
|
-
DAYTONA_SESSION_ID,
|
|
81
|
-
this.cmdId,
|
|
82
|
-
(chunk) => this.handleStdout(chunk),
|
|
83
|
-
(chunk) => {
|
|
84
|
-
if (!this.closed) {
|
|
85
|
-
process.stderr.write(`[daytona-bridge:stderr] ${chunk}`)
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
)
|
|
89
|
-
} catch (err) {
|
|
90
|
-
if (!this.closed) {
|
|
91
|
-
console.error(`[daytona-bridge] getSessionCommandLogs error:`, err)
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
handleStdout(chunk) {
|
|
96
|
-
if (this.closed) return
|
|
97
|
-
// Buffer partial lines
|
|
98
|
-
this.stdoutBuffer += chunk
|
|
99
|
-
const lines = this.stdoutBuffer.split("\n")
|
|
100
|
-
// Keep the last (possibly incomplete) line in the buffer
|
|
101
|
-
this.stdoutBuffer = lines.pop() ?? ""
|
|
102
|
-
for (const line of lines) {
|
|
103
|
-
const trimmed = line.trim()
|
|
104
|
-
if (!trimmed) continue
|
|
105
|
-
let event
|
|
106
|
-
try {
|
|
107
|
-
event = JSON.parse(trimmed)
|
|
108
|
-
} catch {
|
|
109
|
-
// Not valid JSON — log as diagnostic
|
|
110
|
-
console.log(`[daytona-bridge] Non-JSON stdout: ${trimmed}`)
|
|
111
|
-
continue
|
|
112
|
-
}
|
|
113
|
-
// Write to Durable Stream for UI
|
|
114
|
-
const msg = { source: "agent", ...event }
|
|
115
|
-
this.writer.append(JSON.stringify(msg)).catch(() => {})
|
|
116
|
-
// Dispatch to callbacks
|
|
117
|
-
for (const cb of this.agentEventCallbacks) {
|
|
118
|
-
try {
|
|
119
|
-
cb(event)
|
|
120
|
-
} catch {
|
|
121
|
-
// Swallow callback errors
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Detect session_end
|
|
125
|
-
if (event.type === "session_end" && "success" in event) {
|
|
126
|
-
const success = event.success
|
|
127
|
-
for (const cb of this.completeCallbacks) {
|
|
128
|
-
try {
|
|
129
|
-
cb(success)
|
|
130
|
-
} catch {
|
|
131
|
-
// Swallow callback errors
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
close() {
|
|
138
|
-
this.closed = true
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=daytona.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daytona.js","sourceRoot":"","sources":["../../src/bridge/daytona.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionBridge implementation that communicates with a Docker container
|
|
3
|
-
* via stdin/stdout NDJSON using `docker exec -i`.
|
|
4
|
-
*
|
|
5
|
-
* The server bridges between the Durable Stream (for UI events) and
|
|
6
|
-
* the container's stdin/stdout (for agent communication).
|
|
7
|
-
*/
|
|
8
|
-
import type { EngineEvent } from "@electric-agent/protocol"
|
|
9
|
-
import type { StreamConnectionInfo } from "../streams.js"
|
|
10
|
-
import type { SessionBridge } from "./types.js"
|
|
11
|
-
export declare class DockerStdioBridge implements SessionBridge {
|
|
12
|
-
readonly sessionId: string
|
|
13
|
-
readonly streamUrl: string
|
|
14
|
-
readonly streamHeaders: Record<string, string>
|
|
15
|
-
private containerId
|
|
16
|
-
private writer
|
|
17
|
-
private agentEventCallbacks
|
|
18
|
-
private completeCallbacks
|
|
19
|
-
private closed
|
|
20
|
-
private proc
|
|
21
|
-
constructor(sessionId: string, connection: StreamConnectionInfo, containerId: string)
|
|
22
|
-
emit(event: EngineEvent): Promise<void>
|
|
23
|
-
sendCommand(cmd: Record<string, unknown>): Promise<void>
|
|
24
|
-
sendGateResponse(gate: string, value: Record<string, unknown>): Promise<void>
|
|
25
|
-
onAgentEvent(cb: (event: EngineEvent) => void): void
|
|
26
|
-
onComplete(cb: (success: boolean) => void): void
|
|
27
|
-
start(): Promise<void>
|
|
28
|
-
close(): void
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=docker-stdio.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docker-stdio.d.ts","sourceRoot":"","sources":["../../src/bridge/docker-stdio.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAA;AAE9D,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,CAAe;IAC7B,OAAO,CAAC,mBAAmB,CAA0C;IACrE,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,IAAI,CAA4B;gBAE5B,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM;IAa9E,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnF,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;IAgF5B,KAAK,IAAI,IAAI;CAYb"}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionBridge implementation that communicates with a Docker container
|
|
3
|
-
* via stdin/stdout NDJSON using `docker exec -i`.
|
|
4
|
-
*
|
|
5
|
-
* The server bridges between the Durable Stream (for UI events) and
|
|
6
|
-
* the container's stdin/stdout (for agent communication).
|
|
7
|
-
*/
|
|
8
|
-
import { spawn } from "node:child_process"
|
|
9
|
-
import * as readline from "node:readline"
|
|
10
|
-
import { DurableStream } from "@durable-streams/client"
|
|
11
|
-
export class DockerStdioBridge {
|
|
12
|
-
sessionId
|
|
13
|
-
streamUrl
|
|
14
|
-
streamHeaders
|
|
15
|
-
containerId
|
|
16
|
-
writer
|
|
17
|
-
agentEventCallbacks = []
|
|
18
|
-
completeCallbacks = []
|
|
19
|
-
closed = false
|
|
20
|
-
proc = null
|
|
21
|
-
constructor(sessionId, connection, containerId) {
|
|
22
|
-
this.sessionId = sessionId
|
|
23
|
-
this.streamUrl = connection.url
|
|
24
|
-
this.streamHeaders = connection.headers
|
|
25
|
-
this.containerId = containerId
|
|
26
|
-
this.writer = new DurableStream({
|
|
27
|
-
url: connection.url,
|
|
28
|
-
headers: connection.headers,
|
|
29
|
-
contentType: "application/json",
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
async emit(event) {
|
|
33
|
-
if (this.closed) return
|
|
34
|
-
const msg = { source: "server", ...event }
|
|
35
|
-
await this.writer.append(JSON.stringify(msg))
|
|
36
|
-
}
|
|
37
|
-
async sendCommand(cmd) {
|
|
38
|
-
if (this.closed || !this.proc?.stdin?.writable) return
|
|
39
|
-
const line = JSON.stringify({ type: "command", ...cmd })
|
|
40
|
-
this.proc.stdin.write(`${line}\n`)
|
|
41
|
-
}
|
|
42
|
-
async sendGateResponse(gate, value) {
|
|
43
|
-
if (this.closed || !this.proc?.stdin?.writable) return
|
|
44
|
-
const line = JSON.stringify({ type: "gate_response", gate, ...value })
|
|
45
|
-
this.proc.stdin.write(`${line}\n`)
|
|
46
|
-
}
|
|
47
|
-
onAgentEvent(cb) {
|
|
48
|
-
this.agentEventCallbacks.push(cb)
|
|
49
|
-
}
|
|
50
|
-
onComplete(cb) {
|
|
51
|
-
this.completeCallbacks.push(cb)
|
|
52
|
-
}
|
|
53
|
-
async start() {
|
|
54
|
-
if (this.closed) return
|
|
55
|
-
// Spawn docker exec with stdin piped
|
|
56
|
-
this.proc = spawn("docker", ["exec", "-i", this.containerId, "electric-agent", "headless"], {
|
|
57
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
58
|
-
})
|
|
59
|
-
console.log(
|
|
60
|
-
`[docker-stdio-bridge] Agent started: session=${this.sessionId} container=${this.containerId} pid=${this.proc.pid}`,
|
|
61
|
-
)
|
|
62
|
-
// Read stdout line by line (NDJSON)
|
|
63
|
-
if (this.proc.stdout) {
|
|
64
|
-
const rl = readline.createInterface({
|
|
65
|
-
input: this.proc.stdout,
|
|
66
|
-
terminal: false,
|
|
67
|
-
})
|
|
68
|
-
rl.on("line", (line) => {
|
|
69
|
-
if (this.closed) return
|
|
70
|
-
const trimmed = line.trim()
|
|
71
|
-
if (!trimmed) return
|
|
72
|
-
let event
|
|
73
|
-
try {
|
|
74
|
-
event = JSON.parse(trimmed)
|
|
75
|
-
} catch {
|
|
76
|
-
console.log(`[docker-stdio-bridge] Non-JSON stdout: ${trimmed}`)
|
|
77
|
-
return
|
|
78
|
-
}
|
|
79
|
-
// Write to Durable Stream for UI
|
|
80
|
-
const msg = { source: "agent", ...event }
|
|
81
|
-
this.writer.append(JSON.stringify(msg)).catch(() => {})
|
|
82
|
-
// Dispatch to callbacks
|
|
83
|
-
for (const cb of this.agentEventCallbacks) {
|
|
84
|
-
try {
|
|
85
|
-
cb(event)
|
|
86
|
-
} catch {
|
|
87
|
-
// Swallow callback errors
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// Detect session_end
|
|
91
|
-
if (event.type === "session_end" && "success" in event) {
|
|
92
|
-
const success = event.success
|
|
93
|
-
for (const cb of this.completeCallbacks) {
|
|
94
|
-
try {
|
|
95
|
-
cb(success)
|
|
96
|
-
} catch {
|
|
97
|
-
// Swallow callback errors
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
})
|
|
102
|
-
}
|
|
103
|
-
// Log stderr
|
|
104
|
-
if (this.proc.stderr) {
|
|
105
|
-
const stderrRl = readline.createInterface({
|
|
106
|
-
input: this.proc.stderr,
|
|
107
|
-
terminal: false,
|
|
108
|
-
})
|
|
109
|
-
stderrRl.on("line", (line) => {
|
|
110
|
-
if (!this.closed) {
|
|
111
|
-
console.error(`[docker-stdio-bridge:stderr] ${line}`)
|
|
112
|
-
}
|
|
113
|
-
})
|
|
114
|
-
}
|
|
115
|
-
// Handle process exit
|
|
116
|
-
this.proc.on("exit", (code) => {
|
|
117
|
-
console.log(
|
|
118
|
-
`[docker-stdio-bridge] Agent process exited: code=${code} session=${this.sessionId}`,
|
|
119
|
-
)
|
|
120
|
-
})
|
|
121
|
-
}
|
|
122
|
-
close() {
|
|
123
|
-
this.closed = true
|
|
124
|
-
if (this.proc) {
|
|
125
|
-
try {
|
|
126
|
-
this.proc.stdin?.end()
|
|
127
|
-
this.proc.kill("SIGTERM")
|
|
128
|
-
} catch {
|
|
129
|
-
// Process may already be dead
|
|
130
|
-
}
|
|
131
|
-
this.proc = null
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=docker-stdio.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"docker-stdio.js","sourceRoot":"","sources":["../../src/bridge/docker-stdio.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge/sprites.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionBridge implementation that communicates with a Sprites sandbox
|
|
3
|
-
* via the Sprites SDK session API (stdin/stdout NDJSON).
|
|
4
|
-
*
|
|
5
|
-
* The server bridges between the Durable Stream (for UI events) and
|
|
6
|
-
* the Sprites session (for agent communication). The agent inside the
|
|
7
|
-
* sprite uses the stdio adapter — the bridge relays events to the stream.
|
|
8
|
-
*/
|
|
9
|
-
import type { EngineEvent } from "@electric-agent/protocol"
|
|
10
|
-
import type { Sprite } from "@fly/sprites"
|
|
11
|
-
import type { StreamConnectionInfo } from "../streams.js"
|
|
12
|
-
import type { SessionBridge } from "./types.js"
|
|
13
|
-
export declare class SpritesStdioBridge implements SessionBridge {
|
|
14
|
-
readonly sessionId: string
|
|
15
|
-
readonly streamUrl: string
|
|
16
|
-
readonly streamHeaders: Record<string, string>
|
|
17
|
-
private sprite
|
|
18
|
-
private writer
|
|
19
|
-
private agentEventCallbacks
|
|
20
|
-
private completeCallbacks
|
|
21
|
-
private closed
|
|
22
|
-
private cmd
|
|
23
|
-
constructor(sessionId: string, connection: StreamConnectionInfo, sprite: Sprite)
|
|
24
|
-
emit(event: EngineEvent): Promise<void>
|
|
25
|
-
sendCommand(cmd: Record<string, unknown>): Promise<void>
|
|
26
|
-
sendGateResponse(gate: string, value: Record<string, unknown>): Promise<void>
|
|
27
|
-
onAgentEvent(cb: (event: EngineEvent) => void): void
|
|
28
|
-
onComplete(cb: (success: boolean) => void): void
|
|
29
|
-
start(): Promise<void>
|
|
30
|
-
close(): void
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=sprites.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sprites.d.ts","sourceRoot":"","sources":["../../src/bridge/sprites.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAA;AAI9D,qBAAa,kBAAmB,YAAW,aAAa;IACvD,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,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,mBAAmB,CAA0C;IACrE,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,GAAG,CAA6B;gBAE5B,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAazE,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnF,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;IA6E5B,KAAK,IAAI,IAAI;CAWb"}
|
package/dist/bridge/sprites.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SessionBridge implementation that communicates with a Sprites sandbox
|
|
3
|
-
* via the Sprites SDK session API (stdin/stdout NDJSON).
|
|
4
|
-
*
|
|
5
|
-
* The server bridges between the Durable Stream (for UI events) and
|
|
6
|
-
* the Sprites session (for agent communication). The agent inside the
|
|
7
|
-
* sprite uses the stdio adapter — the bridge relays events to the stream.
|
|
8
|
-
*/
|
|
9
|
-
import * as readline from "node:readline"
|
|
10
|
-
import { DurableStream } from "@durable-streams/client"
|
|
11
|
-
|
|
12
|
-
const SPRITES_SESSION_ID = "agent-session"
|
|
13
|
-
export class SpritesStdioBridge {
|
|
14
|
-
sessionId
|
|
15
|
-
streamUrl
|
|
16
|
-
streamHeaders
|
|
17
|
-
sprite
|
|
18
|
-
writer
|
|
19
|
-
agentEventCallbacks = []
|
|
20
|
-
completeCallbacks = []
|
|
21
|
-
closed = false
|
|
22
|
-
cmd = null
|
|
23
|
-
constructor(sessionId, connection, sprite) {
|
|
24
|
-
this.sessionId = sessionId
|
|
25
|
-
this.streamUrl = connection.url
|
|
26
|
-
this.streamHeaders = connection.headers
|
|
27
|
-
this.sprite = sprite
|
|
28
|
-
this.writer = new DurableStream({
|
|
29
|
-
url: connection.url,
|
|
30
|
-
headers: connection.headers,
|
|
31
|
-
contentType: "application/json",
|
|
32
|
-
})
|
|
33
|
-
}
|
|
34
|
-
async emit(event) {
|
|
35
|
-
if (this.closed) return
|
|
36
|
-
const msg = { source: "server", ...event }
|
|
37
|
-
await this.writer.append(JSON.stringify(msg))
|
|
38
|
-
}
|
|
39
|
-
async sendCommand(cmd) {
|
|
40
|
-
if (this.closed || !this.cmd) return
|
|
41
|
-
const line = JSON.stringify({ type: "command", ...cmd })
|
|
42
|
-
this.cmd.stdin.write(`${line}\n`)
|
|
43
|
-
}
|
|
44
|
-
async sendGateResponse(gate, value) {
|
|
45
|
-
if (this.closed || !this.cmd) return
|
|
46
|
-
const line = JSON.stringify({ type: "gate_response", gate, ...value })
|
|
47
|
-
this.cmd.stdin.write(`${line}\n`)
|
|
48
|
-
}
|
|
49
|
-
onAgentEvent(cb) {
|
|
50
|
-
this.agentEventCallbacks.push(cb)
|
|
51
|
-
}
|
|
52
|
-
onComplete(cb) {
|
|
53
|
-
this.completeCallbacks.push(cb)
|
|
54
|
-
}
|
|
55
|
-
async start() {
|
|
56
|
-
if (this.closed) return
|
|
57
|
-
// Create a persistent session in the sprite so we can reconnect if needed
|
|
58
|
-
this.cmd = this.sprite.createSession(
|
|
59
|
-
"bash",
|
|
60
|
-
[
|
|
61
|
-
"-c",
|
|
62
|
-
"source /etc/profile.d/npm-global.sh 2>/dev/null; source /etc/profile.d/electric-agent.sh && electric-agent headless",
|
|
63
|
-
],
|
|
64
|
-
{ detachable: true, sessionId: SPRITES_SESSION_ID },
|
|
65
|
-
)
|
|
66
|
-
console.log(`[sprites-bridge] Agent started: session=${this.sessionId}`)
|
|
67
|
-
// Read stdout line by line (NDJSON)
|
|
68
|
-
const rl = readline.createInterface({
|
|
69
|
-
input: this.cmd.stdout,
|
|
70
|
-
terminal: false,
|
|
71
|
-
})
|
|
72
|
-
rl.on("line", (line) => {
|
|
73
|
-
if (this.closed) return
|
|
74
|
-
const trimmed = line.trim()
|
|
75
|
-
if (!trimmed) return
|
|
76
|
-
let event
|
|
77
|
-
try {
|
|
78
|
-
event = JSON.parse(trimmed)
|
|
79
|
-
} catch {
|
|
80
|
-
console.log(`[sprites-bridge] Non-JSON stdout: ${trimmed}`)
|
|
81
|
-
return
|
|
82
|
-
}
|
|
83
|
-
// Write to Durable Stream for UI
|
|
84
|
-
const msg = { source: "agent", ...event }
|
|
85
|
-
this.writer.append(JSON.stringify(msg)).catch(() => {})
|
|
86
|
-
// Dispatch to callbacks
|
|
87
|
-
for (const cb of this.agentEventCallbacks) {
|
|
88
|
-
try {
|
|
89
|
-
cb(event)
|
|
90
|
-
} catch {
|
|
91
|
-
// Swallow callback errors
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// Detect session_end
|
|
95
|
-
if (event.type === "session_end" && "success" in event) {
|
|
96
|
-
const success = event.success
|
|
97
|
-
for (const cb of this.completeCallbacks) {
|
|
98
|
-
try {
|
|
99
|
-
cb(success)
|
|
100
|
-
} catch {
|
|
101
|
-
// Swallow callback errors
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
})
|
|
106
|
-
// Log stderr
|
|
107
|
-
const stderrRl = readline.createInterface({
|
|
108
|
-
input: this.cmd.stderr,
|
|
109
|
-
terminal: false,
|
|
110
|
-
})
|
|
111
|
-
stderrRl.on("line", (line) => {
|
|
112
|
-
if (!this.closed) {
|
|
113
|
-
console.error(`[sprites-bridge:stderr] ${line}`)
|
|
114
|
-
}
|
|
115
|
-
})
|
|
116
|
-
// Handle process exit
|
|
117
|
-
this.cmd.on("exit", (code) => {
|
|
118
|
-
console.log(`[sprites-bridge] Agent process exited: code=${code} session=${this.sessionId}`)
|
|
119
|
-
})
|
|
120
|
-
}
|
|
121
|
-
close() {
|
|
122
|
-
this.closed = true
|
|
123
|
-
if (this.cmd) {
|
|
124
|
-
try {
|
|
125
|
-
this.cmd.kill()
|
|
126
|
-
} catch {
|
|
127
|
-
// Process may already be dead
|
|
128
|
-
}
|
|
129
|
-
this.cmd = null
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=sprites.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sprites.js","sourceRoot":"","sources":["../../src/bridge/sprites.ts"],"names":[],"mappings":"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"}
|