@electric-agent/studio 1.13.1 → 1.14.2
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/message-parser.d.ts +3 -3
- package/dist/bridge/message-parser.d.ts.map +1 -1
- package/dist/bridge/message-parser.js +3 -3
- package/dist/bridge/message-parser.js.map +1 -1
- package/dist/client/assets/{index-IvCtVUfs.css → index-BSGS-yya.css} +1 -1
- package/dist/client/assets/{index-BXdgNRgB.js → index-qUqEqKXn.js} +35 -35
- package/dist/client/index.html +2 -2
- package/dist/room-router.d.ts +13 -0
- package/dist/room-router.d.ts.map +1 -1
- package/dist/room-router.js +29 -1
- package/dist/room-router.js.map +1 -1
- package/dist/server.d.ts +2 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +60 -68
- package/dist/server.js.map +1 -1
- package/package.json +7 -2
- 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/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/sandbox/daytona-push.d.ts +0 -3
- package/dist/sandbox/daytona-push.d.ts.map +0 -1
- package/dist/sandbox/daytona-push.js +0 -56
- package/dist/sandbox/daytona-push.js.map +0 -1
- package/dist/sandbox/daytona-registry.d.ts +0 -41
- package/dist/sandbox/daytona-registry.d.ts.map +0 -1
- package/dist/sandbox/daytona-registry.js +0 -127
- package/dist/sandbox/daytona-registry.js.map +0 -1
- package/dist/sandbox/daytona.d.ts +0 -41
- package/dist/sandbox/daytona.d.ts.map +0 -1
- package/dist/sandbox/daytona.js +0 -282
- package/dist/sandbox/daytona.js.map +0 -1
- package/dist/shared-sessions.d.ts +0 -16
- package/dist/shared-sessions.d.ts.map +0 -1
- package/dist/shared-sessions.js +0 -52
- package/dist/shared-sessions.js.map +0 -1
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { type Sandbox } from "@daytonaio/sdk";
|
|
2
|
-
import type { CreateSandboxOpts, GitStatus, SandboxHandle, SandboxProvider } from "./types.js";
|
|
3
|
-
export declare class DaytonaSandboxProvider implements SandboxProvider {
|
|
4
|
-
readonly runtime: "daytona";
|
|
5
|
-
private client;
|
|
6
|
-
private handles;
|
|
7
|
-
private sandboxes;
|
|
8
|
-
private apiKey;
|
|
9
|
-
private apiUrl?;
|
|
10
|
-
private cachedSnapshot;
|
|
11
|
-
constructor(opts?: {
|
|
12
|
-
apiKey?: string;
|
|
13
|
-
apiUrl?: string;
|
|
14
|
-
target?: string;
|
|
15
|
-
});
|
|
16
|
-
private getSandbox;
|
|
17
|
-
private resolveSnapshot;
|
|
18
|
-
create(sessionId: string, opts?: CreateSandboxOpts): Promise<SandboxHandle>;
|
|
19
|
-
destroy(handle: SandboxHandle): Promise<void>;
|
|
20
|
-
restartAgent(handle: SandboxHandle): Promise<SandboxHandle>;
|
|
21
|
-
/** Get the underlying Daytona SDK Sandbox object for bridge communication */
|
|
22
|
-
getSandboxObject(sessionId: string): Sandbox | undefined;
|
|
23
|
-
get(sessionId: string): SandboxHandle | undefined;
|
|
24
|
-
list(): SandboxHandle[];
|
|
25
|
-
isAlive(handle: SandboxHandle): boolean;
|
|
26
|
-
exec(handle: SandboxHandle, command: string): Promise<string>;
|
|
27
|
-
listFiles(handle: SandboxHandle, dir: string): Promise<string[]>;
|
|
28
|
-
readFile(handle: SandboxHandle, filePath: string): Promise<string | null>;
|
|
29
|
-
startApp(handle: SandboxHandle): Promise<boolean>;
|
|
30
|
-
stopApp(handle: SandboxHandle): Promise<boolean>;
|
|
31
|
-
isAppRunning(handle: SandboxHandle): Promise<boolean>;
|
|
32
|
-
gitStatus(handle: SandboxHandle, projectDir: string): Promise<GitStatus>;
|
|
33
|
-
getPreviewUrl(handle: SandboxHandle, port: number): Promise<string | null>;
|
|
34
|
-
createFromRepo(sessionId: string, repoUrl: string, opts?: {
|
|
35
|
-
branch?: string;
|
|
36
|
-
apiKey?: string;
|
|
37
|
-
oauthToken?: string;
|
|
38
|
-
ghToken?: string;
|
|
39
|
-
}): Promise<SandboxHandle>;
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=daytona.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daytona.d.ts","sourceRoot":"","sources":["../../src/sandbox/daytona.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,KAAK,EACX,iBAAiB,EACjB,SAAS,EAET,aAAa,EACb,eAAe,EACf,MAAM,YAAY,CAAA;AAQnB,qBAAa,sBAAuB,YAAW,eAAe;IAC7D,QAAQ,CAAC,OAAO,EAAG,SAAS,CAAS;IAErC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,cAAc,CAAsB;gBAEhC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAUxE,OAAO,CAAC,UAAU;YAMJ,eAAe;IAavB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2E3E,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7C,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAejE,6EAA6E;IAC7E,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIxD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,IAAI,IAAI,aAAa,EAAE;IAIvB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAMjC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM7D,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;IAiBjD,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBhD,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBrD,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiExE,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY1E,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;CA8BzB"}
|
package/dist/sandbox/daytona.js
DELETED
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
import { Daytona } from "@daytonaio/sdk";
|
|
2
|
-
import { ensureSnapshot } from "./daytona-registry.js";
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
// DaytonaSandboxProvider — cloud sandboxes via Daytona
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
const SANDBOX_IMAGE = process.env.SANDBOX_IMAGE || "electric-agent-sandbox";
|
|
7
|
-
export class DaytonaSandboxProvider {
|
|
8
|
-
runtime = "daytona";
|
|
9
|
-
client;
|
|
10
|
-
handles = new Map();
|
|
11
|
-
sandboxes = new Map();
|
|
12
|
-
apiKey;
|
|
13
|
-
apiUrl;
|
|
14
|
-
cachedSnapshot = null;
|
|
15
|
-
constructor(opts) {
|
|
16
|
-
this.apiKey = opts?.apiKey ?? process.env.DAYTONA_API_KEY ?? "";
|
|
17
|
-
this.apiUrl = opts?.apiUrl ?? process.env.DAYTONA_API_URL;
|
|
18
|
-
this.client = new Daytona({
|
|
19
|
-
apiKey: this.apiKey,
|
|
20
|
-
apiUrl: this.apiUrl,
|
|
21
|
-
target: opts?.target ?? process.env.DAYTONA_TARGET ?? "eu",
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
getSandbox(handle) {
|
|
25
|
-
const sb = this.sandboxes.get(handle.sessionId);
|
|
26
|
-
if (!sb)
|
|
27
|
-
throw new Error(`No Daytona sandbox for session ${handle.sessionId}`);
|
|
28
|
-
return sb;
|
|
29
|
-
}
|
|
30
|
-
async resolveSnapshot() {
|
|
31
|
-
if (this.cachedSnapshot)
|
|
32
|
-
return this.cachedSnapshot;
|
|
33
|
-
const snapshotName = await ensureSnapshot(this.client, {
|
|
34
|
-
apiKey: this.apiKey,
|
|
35
|
-
apiUrl: this.apiUrl,
|
|
36
|
-
localImage: SANDBOX_IMAGE,
|
|
37
|
-
});
|
|
38
|
-
this.cachedSnapshot = snapshotName;
|
|
39
|
-
return snapshotName;
|
|
40
|
-
}
|
|
41
|
-
async create(sessionId, opts) {
|
|
42
|
-
const infra = opts?.infra ?? { mode: "local" };
|
|
43
|
-
const isCloud = infra.mode === "cloud";
|
|
44
|
-
const projectName = opts?.projectName || sessionId.slice(0, 8);
|
|
45
|
-
console.log(`[daytona] Creating sandbox: session=${sessionId} project=${projectName} image=${SANDBOX_IMAGE} infra=${infra.mode}`);
|
|
46
|
-
const envVars = {
|
|
47
|
-
SANDBOX_MODE: "1",
|
|
48
|
-
VITE_PORT: "5173",
|
|
49
|
-
};
|
|
50
|
-
if (isCloud) {
|
|
51
|
-
envVars.DATABASE_URL = infra.databaseUrl;
|
|
52
|
-
envVars.ELECTRIC_URL = infra.electricUrl;
|
|
53
|
-
envVars.ELECTRIC_SOURCE_ID = infra.sourceId;
|
|
54
|
-
envVars.ELECTRIC_SECRET = infra.secret;
|
|
55
|
-
}
|
|
56
|
-
if (opts?.oauthToken) {
|
|
57
|
-
envVars.CLAUDE_CODE_OAUTH_TOKEN = opts.oauthToken;
|
|
58
|
-
}
|
|
59
|
-
else if (opts?.apiKey) {
|
|
60
|
-
envVars.ANTHROPIC_API_KEY = opts.apiKey;
|
|
61
|
-
}
|
|
62
|
-
if (opts?.ghToken) {
|
|
63
|
-
envVars.GH_TOKEN = opts.ghToken;
|
|
64
|
-
}
|
|
65
|
-
// Note: stream env vars are NOT passed to Daytona sandboxes.
|
|
66
|
-
// The DaytonaSessionBridge communicates via the session API (stdin/stdout),
|
|
67
|
-
// so the agent doesn't need direct access to Durable Streams.
|
|
68
|
-
// Ensure a Daytona snapshot exists (push image + create snapshot if needed)
|
|
69
|
-
const snapshotName = await this.resolveSnapshot();
|
|
70
|
-
console.log(`[daytona] Creating sandbox from snapshot "${snapshotName}" with ${Object.keys(envVars).length} env vars...`);
|
|
71
|
-
console.log("[daytona] Waiting for sandbox to be ready (this may take up to 2 minutes)...");
|
|
72
|
-
const sandbox = await this.client.create({
|
|
73
|
-
snapshot: snapshotName,
|
|
74
|
-
envVars,
|
|
75
|
-
labels: { sessionId, projectName },
|
|
76
|
-
}, { timeout: 120 });
|
|
77
|
-
console.log(`[daytona] Sandbox created, getting preview link...`);
|
|
78
|
-
const previewLink = await sandbox.getPreviewLink(5173);
|
|
79
|
-
const projectDir = `/home/agent/workspace/${projectName}`;
|
|
80
|
-
console.log(`[daytona] Preview URL: ${previewLink.url}`);
|
|
81
|
-
const handle = {
|
|
82
|
-
sessionId,
|
|
83
|
-
runtime: "daytona",
|
|
84
|
-
port: 5173,
|
|
85
|
-
projectDir,
|
|
86
|
-
previewUrl: previewLink.url,
|
|
87
|
-
};
|
|
88
|
-
this.handles.set(sessionId, handle);
|
|
89
|
-
this.sandboxes.set(sessionId, sandbox);
|
|
90
|
-
// Agent is NOT started here — the DaytonaSessionBridge starts it
|
|
91
|
-
// via the session API (createSession + executeSessionCommand)
|
|
92
|
-
console.log("[daytona] Sandbox ready (agent will be started by bridge)");
|
|
93
|
-
return handle;
|
|
94
|
-
}
|
|
95
|
-
async destroy(handle) {
|
|
96
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
97
|
-
this.handles.delete(handle.sessionId);
|
|
98
|
-
this.sandboxes.delete(handle.sessionId);
|
|
99
|
-
if (sandbox) {
|
|
100
|
-
try {
|
|
101
|
-
await sandbox.delete(30);
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// Sandbox may already be deleted
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
async restartAgent(handle) {
|
|
109
|
-
const sandbox = this.getSandbox(handle);
|
|
110
|
-
// Kill any running agent process — the bridge will restart it
|
|
111
|
-
try {
|
|
112
|
-
await sandbox.process.executeCommand("pkill -f 'electric-agent headless' || true");
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
// Process may not be running
|
|
116
|
-
}
|
|
117
|
-
const newHandle = { ...handle };
|
|
118
|
-
this.handles.set(handle.sessionId, newHandle);
|
|
119
|
-
return newHandle;
|
|
120
|
-
}
|
|
121
|
-
/** Get the underlying Daytona SDK Sandbox object for bridge communication */
|
|
122
|
-
getSandboxObject(sessionId) {
|
|
123
|
-
return this.sandboxes.get(sessionId);
|
|
124
|
-
}
|
|
125
|
-
get(sessionId) {
|
|
126
|
-
return this.handles.get(sessionId);
|
|
127
|
-
}
|
|
128
|
-
list() {
|
|
129
|
-
return [...this.handles.values()];
|
|
130
|
-
}
|
|
131
|
-
isAlive(handle) {
|
|
132
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
133
|
-
if (!sandbox)
|
|
134
|
-
return false;
|
|
135
|
-
return sandbox.state === "started";
|
|
136
|
-
}
|
|
137
|
-
async exec(handle, command) {
|
|
138
|
-
const sandbox = this.getSandbox(handle);
|
|
139
|
-
const result = await sandbox.process.executeCommand(command, undefined, undefined, 30);
|
|
140
|
-
return result.result?.trim() ?? "";
|
|
141
|
-
}
|
|
142
|
-
async listFiles(handle, dir) {
|
|
143
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
144
|
-
if (!sandbox)
|
|
145
|
-
return [];
|
|
146
|
-
try {
|
|
147
|
-
const result = await sandbox.process.executeCommand(`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'`, undefined, undefined, 10);
|
|
148
|
-
return (result.result ?? "")
|
|
149
|
-
.split("\n")
|
|
150
|
-
.map((l) => l.trim())
|
|
151
|
-
.filter(Boolean);
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
return [];
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
async readFile(handle, filePath) {
|
|
158
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
159
|
-
if (!sandbox)
|
|
160
|
-
return null;
|
|
161
|
-
try {
|
|
162
|
-
const buffer = await sandbox.fs.downloadFile(filePath, 5);
|
|
163
|
-
return buffer.toString("utf-8");
|
|
164
|
-
}
|
|
165
|
-
catch {
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
async startApp(handle) {
|
|
170
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
171
|
-
if (!sandbox)
|
|
172
|
-
return false;
|
|
173
|
-
try {
|
|
174
|
-
await sandbox.process.executeCommand("cd /home/agent/workspace/*/ && pnpm dev:start", undefined, undefined, 10);
|
|
175
|
-
return true;
|
|
176
|
-
}
|
|
177
|
-
catch {
|
|
178
|
-
return false;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
async stopApp(handle) {
|
|
182
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
183
|
-
if (!sandbox)
|
|
184
|
-
return false;
|
|
185
|
-
try {
|
|
186
|
-
await sandbox.process.executeCommand("cd /home/agent/workspace/*/ && pnpm dev:stop", undefined, undefined, 5);
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
189
|
-
catch {
|
|
190
|
-
return false;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
async isAppRunning(handle) {
|
|
194
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
195
|
-
if (!sandbox)
|
|
196
|
-
return false;
|
|
197
|
-
try {
|
|
198
|
-
const result = await sandbox.process.executeCommand("kill -0 $(cat /tmp/dev-server.pid 2>/dev/null) 2>/dev/null && echo RUNNING || echo STOPPED", undefined, undefined, 5);
|
|
199
|
-
return (result.result ?? "").includes("RUNNING");
|
|
200
|
-
}
|
|
201
|
-
catch {
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
async gitStatus(handle, projectDir) {
|
|
206
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
207
|
-
if (!sandbox) {
|
|
208
|
-
return {
|
|
209
|
-
initialized: false,
|
|
210
|
-
branch: null,
|
|
211
|
-
hasUncommitted: false,
|
|
212
|
-
lastCommitHash: null,
|
|
213
|
-
lastCommitMessage: null,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
try {
|
|
217
|
-
const initCheck = await sandbox.process.executeCommand(`cd ${projectDir} && test -d .git && echo "GIT_INIT=yes" || echo "GIT_INIT=no"`);
|
|
218
|
-
if (!(initCheck.result ?? "").includes("GIT_INIT=yes")) {
|
|
219
|
-
return {
|
|
220
|
-
initialized: false,
|
|
221
|
-
branch: null,
|
|
222
|
-
hasUncommitted: false,
|
|
223
|
-
lastCommitHash: null,
|
|
224
|
-
lastCommitMessage: null,
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
const branch = (await sandbox.process.executeCommand(`cd ${projectDir} && git rev-parse --abbrev-ref HEAD 2>/dev/null || echo ""`)).result?.trim();
|
|
228
|
-
const hash = (await sandbox.process.executeCommand(`cd ${projectDir} && git rev-parse HEAD 2>/dev/null || echo ""`)).result?.trim();
|
|
229
|
-
const message = (await sandbox.process.executeCommand(`cd ${projectDir} && git log -1 --format=%s 2>/dev/null || echo ""`)).result?.trim();
|
|
230
|
-
const statusOutput = (await sandbox.process.executeCommand(`cd ${projectDir} && git status --porcelain 2>/dev/null || echo ""`)).result?.trim();
|
|
231
|
-
return {
|
|
232
|
-
initialized: true,
|
|
233
|
-
branch: branch || null,
|
|
234
|
-
hasUncommitted: (statusOutput ?? "").length > 0,
|
|
235
|
-
lastCommitHash: hash || null,
|
|
236
|
-
lastCommitMessage: message || null,
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
return {
|
|
241
|
-
initialized: false,
|
|
242
|
-
branch: null,
|
|
243
|
-
hasUncommitted: false,
|
|
244
|
-
lastCommitHash: null,
|
|
245
|
-
lastCommitMessage: null,
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
async getPreviewUrl(handle, port) {
|
|
250
|
-
const sandbox = this.sandboxes.get(handle.sessionId);
|
|
251
|
-
if (!sandbox)
|
|
252
|
-
return null;
|
|
253
|
-
try {
|
|
254
|
-
const preview = await sandbox.getPreviewLink(port);
|
|
255
|
-
return preview.url;
|
|
256
|
-
}
|
|
257
|
-
catch {
|
|
258
|
-
return null;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
async createFromRepo(sessionId, repoUrl, opts) {
|
|
262
|
-
const repoName = repoUrl
|
|
263
|
-
.split("/")
|
|
264
|
-
.pop()
|
|
265
|
-
?.replace(/\.git$/, "") || "resumed-project";
|
|
266
|
-
const handle = await this.create(sessionId, {
|
|
267
|
-
apiKey: opts?.apiKey,
|
|
268
|
-
oauthToken: opts?.oauthToken,
|
|
269
|
-
ghToken: opts?.ghToken,
|
|
270
|
-
projectName: repoName,
|
|
271
|
-
});
|
|
272
|
-
const sandbox = this.getSandbox(handle);
|
|
273
|
-
const targetDir = `/home/agent/workspace/${repoName}`;
|
|
274
|
-
await sandbox.process.executeCommand(`gh repo clone "${repoUrl}" "${targetDir}" 2>/dev/null || git clone "${repoUrl}" "${targetDir}"`, undefined, undefined, 60);
|
|
275
|
-
if (opts?.branch) {
|
|
276
|
-
await sandbox.process.executeCommand(`cd ${targetDir} && git checkout ${opts.branch}`);
|
|
277
|
-
}
|
|
278
|
-
handle.projectDir = targetDir;
|
|
279
|
-
return handle;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
//# sourceMappingURL=daytona.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daytona.js","sourceRoot":"","sources":["../../src/sandbox/daytona.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export interface SharedSessionEntry {
|
|
2
|
-
id: string;
|
|
3
|
-
/** 8-char random invite code (e.g. "ABCD-1234") */
|
|
4
|
-
code: string;
|
|
5
|
-
createdAt: string;
|
|
6
|
-
revoked: boolean;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Generate a cryptographically random 8-char invite code (e.g. "ABCD-1234").
|
|
10
|
-
*/
|
|
11
|
-
export declare function generateInviteCode(): string;
|
|
12
|
-
export declare function addSharedSession(dataDir: string, entry: SharedSessionEntry): void;
|
|
13
|
-
export declare function getSharedSessionByCode(dataDir: string, code: string): SharedSessionEntry | undefined;
|
|
14
|
-
export declare function getSharedSession(dataDir: string, id: string): SharedSessionEntry | undefined;
|
|
15
|
-
export declare function revokeSharedSession(dataDir: string, id: string): boolean;
|
|
16
|
-
//# sourceMappingURL=shared-sessions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared-sessions.d.ts","sourceRoot":"","sources":["../src/shared-sessions.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CAChB;AAuBD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAQ3C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAIjF;AAED,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACV,kBAAkB,GAAG,SAAS,CAGhC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAG5F;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAOxE"}
|
package/dist/shared-sessions.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import crypto from "node:crypto";
|
|
2
|
-
import fs from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
function indexPath(dataDir) {
|
|
5
|
-
return path.join(dataDir, "shared-sessions.json");
|
|
6
|
-
}
|
|
7
|
-
function readIndex(dataDir) {
|
|
8
|
-
const file = indexPath(dataDir);
|
|
9
|
-
if (!fs.existsSync(file)) {
|
|
10
|
-
return { sharedSessions: [] };
|
|
11
|
-
}
|
|
12
|
-
return JSON.parse(fs.readFileSync(file, "utf-8"));
|
|
13
|
-
}
|
|
14
|
-
function writeIndex(dataDir, index) {
|
|
15
|
-
fs.mkdirSync(dataDir, { recursive: true });
|
|
16
|
-
fs.writeFileSync(indexPath(dataDir), JSON.stringify(index, null, 2), "utf-8");
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Generate a cryptographically random 8-char invite code (e.g. "ABCD-1234").
|
|
20
|
-
*/
|
|
21
|
-
export function generateInviteCode() {
|
|
22
|
-
const chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"; // No ambiguous chars (0/O, 1/I)
|
|
23
|
-
const bytes = crypto.randomBytes(8);
|
|
24
|
-
let code = "";
|
|
25
|
-
for (let i = 0; i < 8; i++) {
|
|
26
|
-
code += chars[bytes[i] % chars.length];
|
|
27
|
-
}
|
|
28
|
-
return `${code.slice(0, 4)}-${code.slice(4)}`;
|
|
29
|
-
}
|
|
30
|
-
export function addSharedSession(dataDir, entry) {
|
|
31
|
-
const index = readIndex(dataDir);
|
|
32
|
-
index.sharedSessions.push(entry);
|
|
33
|
-
writeIndex(dataDir, index);
|
|
34
|
-
}
|
|
35
|
-
export function getSharedSessionByCode(dataDir, code) {
|
|
36
|
-
const index = readIndex(dataDir);
|
|
37
|
-
return index.sharedSessions.find((s) => s.code === code);
|
|
38
|
-
}
|
|
39
|
-
export function getSharedSession(dataDir, id) {
|
|
40
|
-
const index = readIndex(dataDir);
|
|
41
|
-
return index.sharedSessions.find((s) => s.id === id);
|
|
42
|
-
}
|
|
43
|
-
export function revokeSharedSession(dataDir, id) {
|
|
44
|
-
const index = readIndex(dataDir);
|
|
45
|
-
const entry = index.sharedSessions.find((s) => s.id === id);
|
|
46
|
-
if (!entry)
|
|
47
|
-
return false;
|
|
48
|
-
entry.revoked = true;
|
|
49
|
-
writeIndex(dataDir, index);
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=shared-sessions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared-sessions.js","sourceRoot":"","sources":["../src/shared-sessions.ts"],"names":[],"mappings":"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"}
|