@electric-agent/studio 1.0.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/daytona.d.ts +35 -0
- package/dist/bridge/daytona.d.ts.map +1 -0
- package/dist/bridge/daytona.js +146 -0
- package/dist/bridge/daytona.js.map +1 -0
- package/dist/bridge/docker-stdio.d.ts +30 -0
- package/dist/bridge/docker-stdio.d.ts.map +1 -0
- package/dist/bridge/docker-stdio.js +141 -0
- package/dist/bridge/docker-stdio.js.map +1 -0
- package/dist/bridge/hosted.d.ts +28 -0
- package/dist/bridge/hosted.d.ts.map +1 -0
- package/dist/bridge/hosted.js +113 -0
- package/dist/bridge/hosted.js.map +1 -0
- package/dist/bridge/index.d.ts +6 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +5 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/sprites.d.ts +32 -0
- package/dist/bridge/sprites.d.ts.map +1 -0
- package/dist/bridge/sprites.js +138 -0
- package/dist/bridge/sprites.js.map +1 -0
- package/dist/bridge/types.d.ts +97 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +2 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/client/assets/OpenSauceOne-Bold-BeiFYFR5.woff2 +0 -0
- package/dist/client/assets/OpenSauceOne-ExtraBold-DO6BqiNe.woff2 +0 -0
- package/dist/client/assets/OpenSauceOne-Light-NEdTeQp-.woff2 +0 -0
- package/dist/client/assets/OpenSauceOne-Medium-Cu5cjAHY.woff2 +0 -0
- package/dist/client/assets/OpenSauceOne-Regular-BivIUdzJ.woff2 +0 -0
- package/dist/client/assets/SourceCodePro-Regular-CoIbWt_c.woff2 +0 -0
- package/dist/client/assets/index-CK__1-6e.css +1 -0
- package/dist/client/assets/index-DKL-jl7t.js +241 -0
- package/dist/client/favicon.ico +0 -0
- package/dist/client/img/brand/favicon.png +0 -0
- package/dist/client/img/brand/favicon.svg +4 -0
- package/dist/client/img/brand/icon.svg +4 -0
- package/dist/client/img/brand/logo.inverse.svg +13 -0
- package/dist/client/img/brand/logo.svg +13 -0
- package/dist/client/index.html +16 -0
- package/dist/electric-api.d.ts +14 -0
- package/dist/electric-api.d.ts.map +1 -0
- package/dist/electric-api.js +70 -0
- package/dist/electric-api.js.map +1 -0
- package/dist/gate.d.ts +28 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +72 -0
- package/dist/gate.js.map +1 -0
- package/dist/git.d.ts +30 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +115 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/project-utils.d.ts +9 -0
- package/dist/project-utils.d.ts.map +1 -0
- package/dist/project-utils.js +17 -0
- package/dist/project-utils.js.map +1 -0
- package/dist/sandbox/daytona-push.d.ts +3 -0
- package/dist/sandbox/daytona-push.d.ts.map +1 -0
- package/dist/sandbox/daytona-push.js +56 -0
- package/dist/sandbox/daytona-push.js.map +1 -0
- package/dist/sandbox/daytona-registry.d.ts +41 -0
- package/dist/sandbox/daytona-registry.d.ts.map +1 -0
- package/dist/sandbox/daytona-registry.js +127 -0
- package/dist/sandbox/daytona-registry.js.map +1 -0
- package/dist/sandbox/daytona.d.ts +41 -0
- package/dist/sandbox/daytona.d.ts.map +1 -0
- package/dist/sandbox/daytona.js +282 -0
- package/dist/sandbox/daytona.js.map +1 -0
- package/dist/sandbox/docker.d.ts +29 -0
- package/dist/sandbox/docker.d.ts.map +1 -0
- package/dist/sandbox/docker.js +465 -0
- package/dist/sandbox/docker.js.map +1 -0
- package/dist/sandbox/index.d.ts +5 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +4 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/sprites-bootstrap.d.ts +26 -0
- package/dist/sandbox/sprites-bootstrap.d.ts.map +1 -0
- package/dist/sandbox/sprites-bootstrap.js +127 -0
- package/dist/sandbox/sprites-bootstrap.js.map +1 -0
- package/dist/sandbox/sprites.d.ts +55 -0
- package/dist/sandbox/sprites.d.ts.map +1 -0
- package/dist/sandbox/sprites.js +323 -0
- package/dist/sandbox/sprites.js.map +1 -0
- package/dist/sandbox/types.d.ts +73 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/sandbox/types.js +5 -0
- package/dist/sandbox/types.js.map +1 -0
- package/dist/server.d.ts +26 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1266 -0
- package/dist/server.js.map +1 -0
- package/dist/sessions.d.ts +46 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +66 -0
- package/dist/sessions.js.map +1 -0
- package/dist/streams.d.ts +34 -0
- package/dist/streams.d.ts.map +1 -0
- package/dist/streams.js +42 -0
- package/dist/streams.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprites-bootstrap.js","sourceRoot":"","sources":["../../src/sandbox/sprites-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type Sprite } from "@fly/sprites";
|
|
2
|
+
import type { CreateSandboxOpts, GitStatus, SandboxHandle, SandboxProvider } from "./types.js";
|
|
3
|
+
export declare class SpritesSandboxProvider implements SandboxProvider {
|
|
4
|
+
readonly runtime: "sprites";
|
|
5
|
+
private client;
|
|
6
|
+
private token;
|
|
7
|
+
private baseURL;
|
|
8
|
+
private handles;
|
|
9
|
+
private sprites;
|
|
10
|
+
constructor(opts?: {
|
|
11
|
+
token?: string;
|
|
12
|
+
region?: string;
|
|
13
|
+
ramMB?: number;
|
|
14
|
+
cpus?: number;
|
|
15
|
+
});
|
|
16
|
+
private getSprite;
|
|
17
|
+
/**
|
|
18
|
+
* Fetch the public URL for a sprite from the REST API.
|
|
19
|
+
* The URL includes an org slug suffix that we can't derive locally.
|
|
20
|
+
*/
|
|
21
|
+
private getSpriteUrl;
|
|
22
|
+
/**
|
|
23
|
+
* Set network policy to allow all outbound connections.
|
|
24
|
+
* The JS SDK doesn't expose this yet, so we call the REST API directly.
|
|
25
|
+
*/
|
|
26
|
+
private setNetworkPolicyAllowAll;
|
|
27
|
+
create(sessionId: string, opts?: CreateSandboxOpts): Promise<SandboxHandle>;
|
|
28
|
+
destroy(handle: SandboxHandle): Promise<void>;
|
|
29
|
+
restartAgent(handle: SandboxHandle): Promise<SandboxHandle>;
|
|
30
|
+
/**
|
|
31
|
+
* Launch the headless agent process in the sprite without blocking.
|
|
32
|
+
* Uses spawn() (event-based API) instead of execFile() which waits for exit.
|
|
33
|
+
*/
|
|
34
|
+
startAgent(handle: SandboxHandle): Promise<void>;
|
|
35
|
+
/** Get the underlying Sprite SDK object for bridge communication */
|
|
36
|
+
getSpriteObject(sessionId: string): Sprite | undefined;
|
|
37
|
+
get(sessionId: string): SandboxHandle | undefined;
|
|
38
|
+
list(): SandboxHandle[];
|
|
39
|
+
isAlive(handle: SandboxHandle): boolean;
|
|
40
|
+
exec(handle: SandboxHandle, command: string): Promise<string>;
|
|
41
|
+
listFiles(handle: SandboxHandle, dir: string): Promise<string[]>;
|
|
42
|
+
readFile(handle: SandboxHandle, filePath: string): Promise<string | null>;
|
|
43
|
+
startApp(handle: SandboxHandle): Promise<boolean>;
|
|
44
|
+
stopApp(handle: SandboxHandle): Promise<boolean>;
|
|
45
|
+
isAppRunning(handle: SandboxHandle): Promise<boolean>;
|
|
46
|
+
gitStatus(handle: SandboxHandle, projectDir: string): Promise<GitStatus>;
|
|
47
|
+
getPreviewUrl(handle: SandboxHandle, _port: number): Promise<string | null>;
|
|
48
|
+
createFromRepo(sessionId: string, repoUrl: string, opts?: {
|
|
49
|
+
branch?: string;
|
|
50
|
+
apiKey?: string;
|
|
51
|
+
oauthToken?: string;
|
|
52
|
+
ghToken?: string;
|
|
53
|
+
}): Promise<SandboxHandle>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=sprites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprites.d.ts","sourceRoot":"","sources":["../../src/sandbox/sprites.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,cAAc,CAAA;AAEzD,OAAO,KAAK,EACX,iBAAiB,EACjB,SAAS,EAET,aAAa,EACb,eAAe,EACf,MAAM,YAAY,CAAA;AAUnB,qBAAa,sBAAuB,YAAW,eAAe;IAC7D,QAAQ,CAAC,OAAO,EAAG,SAAS,CAAS;IAErC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,OAAO,CAA4B;gBAE/B,IAAI,CAAC,EAAE;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;KACb;IAMD,OAAO,CAAC,SAAS;IAMjB;;;OAGG;YACW,YAAY;IAa1B;;;OAGG;YACW,wBAAwB;IAiBhC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IA6F3E,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7C,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAejE;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtD,oEAAoE;IACpE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,IAAI,IAAI,aAAa,EAAE;IAIvB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAIjC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW7D,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBhE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAYzE,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IASjD,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAShD,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAYrD,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA6DxE,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI3E,cAAc,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAChF,OAAO,CAAC,aAAa,CAAC;CA2BzB"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { SpritesClient } from "@fly/sprites";
|
|
2
|
+
import { ensureBootstrapped } from "./sprites-bootstrap.js";
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// SpritesSandboxProvider — cloud sandboxes via Fly.io Sprites
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
const DEFAULT_REGION = "ord";
|
|
7
|
+
const DEFAULT_RAM_MB = 2048;
|
|
8
|
+
const DEFAULT_CPUS = 2;
|
|
9
|
+
export class SpritesSandboxProvider {
|
|
10
|
+
runtime = "sprites";
|
|
11
|
+
client;
|
|
12
|
+
token;
|
|
13
|
+
baseURL;
|
|
14
|
+
handles = new Map();
|
|
15
|
+
sprites = new Map();
|
|
16
|
+
constructor(opts) {
|
|
17
|
+
this.token = opts?.token ?? process.env.FLY_API_TOKEN ?? "";
|
|
18
|
+
this.baseURL = "https://api.sprites.dev";
|
|
19
|
+
this.client = new SpritesClient(this.token);
|
|
20
|
+
}
|
|
21
|
+
getSprite(handle) {
|
|
22
|
+
const sprite = this.sprites.get(handle.sessionId);
|
|
23
|
+
if (!sprite)
|
|
24
|
+
throw new Error(`No Sprites sandbox for session ${handle.sessionId}`);
|
|
25
|
+
return sprite;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Fetch the public URL for a sprite from the REST API.
|
|
29
|
+
* The URL includes an org slug suffix that we can't derive locally.
|
|
30
|
+
*/
|
|
31
|
+
async getSpriteUrl(spriteName) {
|
|
32
|
+
const url = `${this.baseURL}/v1/sprites/${encodeURIComponent(spriteName)}`;
|
|
33
|
+
const resp = await fetch(url, {
|
|
34
|
+
headers: { Authorization: `Bearer ${this.token}` },
|
|
35
|
+
});
|
|
36
|
+
if (!resp.ok) {
|
|
37
|
+
console.warn(`[sprites] Failed to get sprite info (${resp.status}): ${await resp.text()}`);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const data = (await resp.json());
|
|
41
|
+
return data.url ?? null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Set network policy to allow all outbound connections.
|
|
45
|
+
* The JS SDK doesn't expose this yet, so we call the REST API directly.
|
|
46
|
+
*/
|
|
47
|
+
async setNetworkPolicyAllowAll(spriteName) {
|
|
48
|
+
const url = `${this.baseURL}/v1/sprites/${encodeURIComponent(spriteName)}/policy/network`;
|
|
49
|
+
const resp = await fetch(url, {
|
|
50
|
+
method: "POST",
|
|
51
|
+
headers: {
|
|
52
|
+
Authorization: `Bearer ${this.token}`,
|
|
53
|
+
"Content-Type": "application/json",
|
|
54
|
+
},
|
|
55
|
+
body: JSON.stringify({
|
|
56
|
+
rules: [{ domain: "*", action: "allow" }],
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
if (!resp.ok) {
|
|
60
|
+
console.warn(`[sprites] Failed to set network policy (${resp.status}): ${await resp.text()}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async create(sessionId, opts) {
|
|
64
|
+
const infra = opts?.infra ?? { mode: "local" };
|
|
65
|
+
const projectName = opts?.projectName || sessionId.slice(0, 8);
|
|
66
|
+
const spriteName = `ea-${sessionId.slice(0, 12)}`;
|
|
67
|
+
console.log(`[sprites] Creating sprite: session=${sessionId} project=${projectName} name=${spriteName} infra=${infra.mode}`);
|
|
68
|
+
// Create sprite with resource config
|
|
69
|
+
const sprite = await this.client.createSprite(spriteName, {
|
|
70
|
+
ramMB: DEFAULT_RAM_MB,
|
|
71
|
+
cpus: DEFAULT_CPUS,
|
|
72
|
+
region: DEFAULT_REGION,
|
|
73
|
+
});
|
|
74
|
+
// Enable outbound internet access
|
|
75
|
+
await this.setNetworkPolicyAllowAll(spriteName);
|
|
76
|
+
// Bootstrap (or restore from checkpoint).
|
|
77
|
+
// When AGENT_PACKAGE_URL is set (e.g. PR preview), install from that URL
|
|
78
|
+
// instead of the published electric-agent package.
|
|
79
|
+
const packageUrl = process.env.AGENT_PACKAGE_URL || undefined;
|
|
80
|
+
await ensureBootstrapped(sprite, packageUrl ? { packageUrl } : undefined);
|
|
81
|
+
// Set environment variables by writing an env file and sourcing it
|
|
82
|
+
const envVars = {
|
|
83
|
+
SANDBOX_MODE: "1",
|
|
84
|
+
VITE_PORT: "8080",
|
|
85
|
+
};
|
|
86
|
+
const isCloud = infra.mode === "cloud" || infra.mode === "claim";
|
|
87
|
+
if (isCloud) {
|
|
88
|
+
envVars.DATABASE_URL = infra.databaseUrl;
|
|
89
|
+
envVars.ELECTRIC_URL = infra.electricUrl;
|
|
90
|
+
envVars.ELECTRIC_SOURCE_ID = infra.sourceId;
|
|
91
|
+
envVars.ELECTRIC_SECRET = infra.secret;
|
|
92
|
+
}
|
|
93
|
+
if (opts?.apiKey) {
|
|
94
|
+
envVars.ANTHROPIC_API_KEY = opts.apiKey;
|
|
95
|
+
}
|
|
96
|
+
else if (opts?.oauthToken) {
|
|
97
|
+
envVars.CLAUDE_CODE_OAUTH_TOKEN = opts.oauthToken;
|
|
98
|
+
}
|
|
99
|
+
if (opts?.ghToken) {
|
|
100
|
+
envVars.GH_TOKEN = opts.ghToken;
|
|
101
|
+
}
|
|
102
|
+
// Pass stream env vars for hosted Durable Streams communication
|
|
103
|
+
if (opts?.streamEnv) {
|
|
104
|
+
for (const [key, value] of Object.entries(opts.streamEnv)) {
|
|
105
|
+
envVars[key] = value;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Write env vars to a profile file so all commands inherit them.
|
|
109
|
+
// NOTE: sprite.exec() splits the command string by whitespace, so shell
|
|
110
|
+
// features (pipes, redirects, heredocs) don't work. Use execFile with
|
|
111
|
+
// explicit args to run through bash -c instead.
|
|
112
|
+
const envLines = Object.entries(envVars)
|
|
113
|
+
.map(([k, v]) => `export ${k}=${JSON.stringify(v)}`)
|
|
114
|
+
.join("\n");
|
|
115
|
+
const b64 = Buffer.from(envLines).toString("base64");
|
|
116
|
+
await sprite.execFile("bash", [
|
|
117
|
+
"-c",
|
|
118
|
+
`echo ${b64} | base64 -d > /etc/profile.d/electric-agent.sh`,
|
|
119
|
+
]);
|
|
120
|
+
const projectDir = `/home/agent/workspace/${projectName}`;
|
|
121
|
+
await sprite.exec(`mkdir -p ${projectDir}`);
|
|
122
|
+
// Fetch the public URL from the API — it includes the org slug suffix.
|
|
123
|
+
// Sprites route this URL to port 8080 by default; VITE_PORT is set to 8080 above.
|
|
124
|
+
const previewUrl = await this.getSpriteUrl(spriteName);
|
|
125
|
+
const handle = {
|
|
126
|
+
sessionId,
|
|
127
|
+
runtime: "sprites",
|
|
128
|
+
port: 8080,
|
|
129
|
+
projectDir,
|
|
130
|
+
previewUrl: previewUrl ?? undefined,
|
|
131
|
+
};
|
|
132
|
+
this.handles.set(sessionId, handle);
|
|
133
|
+
this.sprites.set(sessionId, sprite);
|
|
134
|
+
// Agent is NOT started here — the bridge starts it
|
|
135
|
+
console.log("[sprites] Sprite ready (agent will be started by bridge)");
|
|
136
|
+
return handle;
|
|
137
|
+
}
|
|
138
|
+
async destroy(handle) {
|
|
139
|
+
const sprite = this.sprites.get(handle.sessionId);
|
|
140
|
+
this.handles.delete(handle.sessionId);
|
|
141
|
+
this.sprites.delete(handle.sessionId);
|
|
142
|
+
if (sprite) {
|
|
143
|
+
try {
|
|
144
|
+
await sprite.delete();
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Sprite may already be deleted
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async restartAgent(handle) {
|
|
152
|
+
const sprite = this.getSprite(handle);
|
|
153
|
+
// Kill any running agent process — the bridge will restart it
|
|
154
|
+
try {
|
|
155
|
+
await sprite.execFile("bash", ["-c", "pkill -f 'electric-agent headless' || true"]);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Process may not be running
|
|
159
|
+
}
|
|
160
|
+
const newHandle = { ...handle };
|
|
161
|
+
this.handles.set(handle.sessionId, newHandle);
|
|
162
|
+
return newHandle;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Launch the headless agent process in the sprite without blocking.
|
|
166
|
+
* Uses spawn() (event-based API) instead of execFile() which waits for exit.
|
|
167
|
+
*/
|
|
168
|
+
async startAgent(handle) {
|
|
169
|
+
const sprite = this.getSprite(handle);
|
|
170
|
+
const cmd = sprite.spawn("bash", [
|
|
171
|
+
"-c",
|
|
172
|
+
"source /etc/profile.d/npm-global.sh 2>/dev/null; source /etc/profile.d/electric-agent.sh && electric-agent headless > /tmp/agent-stdout.log 2> /tmp/agent-stderr.log",
|
|
173
|
+
]);
|
|
174
|
+
await cmd.start();
|
|
175
|
+
// Don't await cmd.wait() — we want the agent to run in the background
|
|
176
|
+
}
|
|
177
|
+
/** Get the underlying Sprite SDK object for bridge communication */
|
|
178
|
+
getSpriteObject(sessionId) {
|
|
179
|
+
return this.sprites.get(sessionId);
|
|
180
|
+
}
|
|
181
|
+
get(sessionId) {
|
|
182
|
+
return this.handles.get(sessionId);
|
|
183
|
+
}
|
|
184
|
+
list() {
|
|
185
|
+
return [...this.handles.values()];
|
|
186
|
+
}
|
|
187
|
+
isAlive(handle) {
|
|
188
|
+
return this.sprites.has(handle.sessionId);
|
|
189
|
+
}
|
|
190
|
+
async exec(handle, command) {
|
|
191
|
+
const sprite = this.getSprite(handle);
|
|
192
|
+
const result = await sprite.execFile("bash", [
|
|
193
|
+
"-c",
|
|
194
|
+
`source /etc/profile.d/npm-global.sh 2>/dev/null; source /etc/profile.d/electric-agent.sh && ${command}`,
|
|
195
|
+
]);
|
|
196
|
+
return (typeof result.stdout === "string" ? result.stdout : result.stdout.toString("utf-8")).trim();
|
|
197
|
+
}
|
|
198
|
+
async listFiles(handle, dir) {
|
|
199
|
+
const sprite = this.sprites.get(handle.sessionId);
|
|
200
|
+
if (!sprite)
|
|
201
|
+
return [];
|
|
202
|
+
try {
|
|
203
|
+
const result = await sprite.execFile("bash", [
|
|
204
|
+
"-c",
|
|
205
|
+
`find ${dir} -type f -not -path '*/node_modules/*' -not -path '*/.git/*' -not -path '*/dist/*' -not -path '*/.next/*' -not -path '*/.cache/*' -not -path '*/.electric/*' -not -name 'pnpm-lock.yaml' -not -name 'package-lock.json'`,
|
|
206
|
+
]);
|
|
207
|
+
const stdout = typeof result.stdout === "string" ? result.stdout : result.stdout.toString("utf-8");
|
|
208
|
+
return stdout
|
|
209
|
+
.split("\n")
|
|
210
|
+
.map((l) => l.trim())
|
|
211
|
+
.filter(Boolean);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return [];
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async readFile(handle, filePath) {
|
|
218
|
+
const sprite = this.sprites.get(handle.sessionId);
|
|
219
|
+
if (!sprite)
|
|
220
|
+
return null;
|
|
221
|
+
try {
|
|
222
|
+
const result = await sprite.exec(`cat ${filePath}`);
|
|
223
|
+
return typeof result.stdout === "string" ? result.stdout : result.stdout.toString("utf-8");
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async startApp(handle) {
|
|
230
|
+
try {
|
|
231
|
+
await this.exec(handle, "cd /home/agent/workspace/*/ && pnpm dev:start");
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async stopApp(handle) {
|
|
239
|
+
try {
|
|
240
|
+
await this.exec(handle, "cd /home/agent/workspace/*/ && pnpm dev:stop");
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
async isAppRunning(handle) {
|
|
248
|
+
try {
|
|
249
|
+
const result = await this.exec(handle, "kill -0 $(cat /tmp/dev-server.pid 2>/dev/null) 2>/dev/null && echo RUNNING || echo STOPPED");
|
|
250
|
+
return result.includes("RUNNING");
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async gitStatus(handle, projectDir) {
|
|
257
|
+
const sprite = this.sprites.get(handle.sessionId);
|
|
258
|
+
if (!sprite) {
|
|
259
|
+
return {
|
|
260
|
+
initialized: false,
|
|
261
|
+
branch: null,
|
|
262
|
+
hasUncommitted: false,
|
|
263
|
+
lastCommitHash: null,
|
|
264
|
+
lastCommitMessage: null,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
try {
|
|
268
|
+
const initResult = await this.exec(handle, `cd ${projectDir} && test -d .git && echo "GIT_INIT=yes" || echo "GIT_INIT=no"`);
|
|
269
|
+
if (!initResult.includes("GIT_INIT=yes")) {
|
|
270
|
+
return {
|
|
271
|
+
initialized: false,
|
|
272
|
+
branch: null,
|
|
273
|
+
hasUncommitted: false,
|
|
274
|
+
lastCommitHash: null,
|
|
275
|
+
lastCommitMessage: null,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
const branch = (await this.exec(handle, `cd ${projectDir} && git rev-parse --abbrev-ref HEAD 2>/dev/null || echo ""`)).trim();
|
|
279
|
+
const hash = (await this.exec(handle, `cd ${projectDir} && git rev-parse HEAD 2>/dev/null || echo ""`)).trim();
|
|
280
|
+
const message = (await this.exec(handle, `cd ${projectDir} && git log -1 --format=%s 2>/dev/null || echo ""`)).trim();
|
|
281
|
+
const statusOutput = (await this.exec(handle, `cd ${projectDir} && git status --porcelain 2>/dev/null || echo ""`)).trim();
|
|
282
|
+
return {
|
|
283
|
+
initialized: true,
|
|
284
|
+
branch: branch || null,
|
|
285
|
+
hasUncommitted: statusOutput.length > 0,
|
|
286
|
+
lastCommitHash: hash || null,
|
|
287
|
+
lastCommitMessage: message || null,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
return {
|
|
292
|
+
initialized: false,
|
|
293
|
+
branch: null,
|
|
294
|
+
hasUncommitted: false,
|
|
295
|
+
lastCommitHash: null,
|
|
296
|
+
lastCommitMessage: null,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
async getPreviewUrl(handle, _port) {
|
|
301
|
+
return handle.previewUrl ?? null;
|
|
302
|
+
}
|
|
303
|
+
async createFromRepo(sessionId, repoUrl, opts) {
|
|
304
|
+
const repoName = repoUrl
|
|
305
|
+
.split("/")
|
|
306
|
+
.pop()
|
|
307
|
+
?.replace(/\.git$/, "") || "resumed-project";
|
|
308
|
+
const handle = await this.create(sessionId, {
|
|
309
|
+
apiKey: opts?.apiKey,
|
|
310
|
+
oauthToken: opts?.oauthToken,
|
|
311
|
+
ghToken: opts?.ghToken,
|
|
312
|
+
projectName: repoName,
|
|
313
|
+
});
|
|
314
|
+
const targetDir = `/home/agent/workspace/${repoName}`;
|
|
315
|
+
await this.exec(handle, `gh repo clone "${repoUrl}" "${targetDir}" 2>/dev/null || git clone "${repoUrl}" "${targetDir}"`);
|
|
316
|
+
if (opts?.branch) {
|
|
317
|
+
await this.exec(handle, `cd ${targetDir} && git checkout ${opts.branch}`);
|
|
318
|
+
}
|
|
319
|
+
handle.projectDir = targetDir;
|
|
320
|
+
return handle;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=sprites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprites.js","sourceRoot":"","sources":["../../src/sandbox/sprites.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export type SandboxRuntime = "docker" | "daytona" | "sprites";
|
|
2
|
+
export interface SandboxHandle {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
runtime: SandboxRuntime;
|
|
5
|
+
port: number;
|
|
6
|
+
projectDir: string;
|
|
7
|
+
/** Preview URL for cloud runtimes (Daytona) */
|
|
8
|
+
previewUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface GitStatus {
|
|
11
|
+
initialized: boolean;
|
|
12
|
+
branch: string | null;
|
|
13
|
+
hasUncommitted: boolean;
|
|
14
|
+
lastCommitHash: string | null;
|
|
15
|
+
lastCommitMessage: string | null;
|
|
16
|
+
}
|
|
17
|
+
export type InfraConfig = {
|
|
18
|
+
mode: "local";
|
|
19
|
+
} | {
|
|
20
|
+
mode: "cloud";
|
|
21
|
+
databaseUrl: string;
|
|
22
|
+
electricUrl: string;
|
|
23
|
+
sourceId: string;
|
|
24
|
+
secret: string;
|
|
25
|
+
} | {
|
|
26
|
+
mode: "claim";
|
|
27
|
+
databaseUrl: string;
|
|
28
|
+
electricUrl: string;
|
|
29
|
+
sourceId: string;
|
|
30
|
+
secret: string;
|
|
31
|
+
claimId: string;
|
|
32
|
+
};
|
|
33
|
+
export interface CreateSandboxOpts {
|
|
34
|
+
apiKey?: string;
|
|
35
|
+
oauthToken?: string;
|
|
36
|
+
ghToken?: string;
|
|
37
|
+
projectName?: string;
|
|
38
|
+
infra?: InfraConfig;
|
|
39
|
+
/** Stream env vars to inject into the sandbox for --stream mode */
|
|
40
|
+
streamEnv?: Record<string, string>;
|
|
41
|
+
/**
|
|
42
|
+
* If true, the sandbox should NOT auto-start the headless agent.
|
|
43
|
+
* The bridge will start it via stdin/stdout (session API or docker exec).
|
|
44
|
+
*/
|
|
45
|
+
deferAgentStart?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface SandboxProvider {
|
|
48
|
+
/** The runtime type this provider manages */
|
|
49
|
+
readonly runtime: SandboxRuntime;
|
|
50
|
+
create(sessionId: string, opts?: CreateSandboxOpts): Promise<SandboxHandle>;
|
|
51
|
+
destroy(handle: SandboxHandle): Promise<void>;
|
|
52
|
+
restartAgent(handle: SandboxHandle): Promise<SandboxHandle>;
|
|
53
|
+
get(sessionId: string): SandboxHandle | undefined;
|
|
54
|
+
list(): SandboxHandle[];
|
|
55
|
+
/** Check if the sandbox is still alive and responsive */
|
|
56
|
+
isAlive(handle: SandboxHandle): boolean;
|
|
57
|
+
listFiles(handle: SandboxHandle, dir: string): Promise<string[]>;
|
|
58
|
+
readFile(handle: SandboxHandle, filePath: string): Promise<string | null>;
|
|
59
|
+
startApp(handle: SandboxHandle): Promise<boolean>;
|
|
60
|
+
stopApp(handle: SandboxHandle): Promise<boolean>;
|
|
61
|
+
isAppRunning(handle: SandboxHandle): Promise<boolean>;
|
|
62
|
+
exec(handle: SandboxHandle, command: string): Promise<string>;
|
|
63
|
+
gitStatus(handle: SandboxHandle, projectDir: string): Promise<GitStatus>;
|
|
64
|
+
/** Get a preview URL for a port (cloud runtimes only) */
|
|
65
|
+
getPreviewUrl?(handle: SandboxHandle, port: number): Promise<string | null>;
|
|
66
|
+
createFromRepo(sessionId: string, repoUrl: string, opts?: {
|
|
67
|
+
branch?: string;
|
|
68
|
+
apiKey?: string;
|
|
69
|
+
oauthToken?: string;
|
|
70
|
+
ghToken?: string;
|
|
71
|
+
}): Promise<SandboxHandle>;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sandbox/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sandbox/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import type { SandboxProvider } from "./sandbox/index.js";
|
|
3
|
+
import { type StreamConfig } from "./streams.js";
|
|
4
|
+
type BridgeMode = "stream" | "stdio";
|
|
5
|
+
interface ServerConfig {
|
|
6
|
+
port: number;
|
|
7
|
+
dataDir: string;
|
|
8
|
+
sandbox: SandboxProvider;
|
|
9
|
+
/** Hosted stream config — required */
|
|
10
|
+
streamConfig: StreamConfig;
|
|
11
|
+
/** Bridge mode: "stream" (hosted DS, default) or "stdio" (stdin/stdout via SDK/Docker) */
|
|
12
|
+
bridgeMode: BridgeMode;
|
|
13
|
+
/** Optional: infer a short project name from a description (calls an LLM). Falls back to slugified description. */
|
|
14
|
+
inferProjectName?: (description: string) => Promise<string>;
|
|
15
|
+
}
|
|
16
|
+
export declare function createApp(config: ServerConfig): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
17
|
+
export declare function startWebServer(opts: {
|
|
18
|
+
port?: number;
|
|
19
|
+
dataDir?: string;
|
|
20
|
+
sandbox: SandboxProvider;
|
|
21
|
+
streamConfig: StreamConfig;
|
|
22
|
+
bridgeMode?: BridgeMode;
|
|
23
|
+
inferProjectName?: (description: string) => Promise<string>;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAa3B,OAAO,KAAK,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAWtE,OAAO,EAGN,KAAK,YAAY,EAEjB,MAAM,cAAc,CAAA;AAErB,KAAK,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEpC,UAAU,YAAY;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,eAAe,CAAA;IACxB,sCAAsC;IACtC,YAAY,EAAE,YAAY,CAAA;IAC1B,0FAA0F;IAC1F,UAAU,EAAE,UAAU,CAAA;IACtB,mHAAmH;IACnH,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC3D;AAuOD,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,8EA6pC7C;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,eAAe,CAAA;IACxB,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC3D,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhB"}
|