@hasna/sandboxes 0.1.2 → 0.1.5
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/cli/index.js +25 -26
- package/dist/lib/agent-runner.d.ts.map +1 -1
- package/dist/mcp/index.js +37 -27
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -3238,29 +3238,27 @@ async function runAgent(sandboxId, opts) {
|
|
|
3238
3238
|
emitLifecycleEvent(sandbox.id, `Agent ${opts.agentType} started: ${opts.prompt.slice(0, 100)}`);
|
|
3239
3239
|
const collector = createStreamCollector(sandbox.id, session.id);
|
|
3240
3240
|
const provider = await getProvider(sandbox.provider);
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
3258
|
-
return session;
|
|
3259
|
-
} catch (err) {
|
|
3241
|
+
const env = Object.keys(sandbox.env_vars ?? {}).length > 0 ? sandbox.env_vars : undefined;
|
|
3242
|
+
provider.exec(sandbox.provider_sandbox_id, cmd, {
|
|
3243
|
+
onStdout: (data) => {
|
|
3244
|
+
collector.onStdout(data);
|
|
3245
|
+
opts.onStdout?.(data);
|
|
3246
|
+
},
|
|
3247
|
+
onStderr: (data) => {
|
|
3248
|
+
collector.onStderr(data);
|
|
3249
|
+
opts.onStderr?.(data);
|
|
3250
|
+
},
|
|
3251
|
+
env
|
|
3252
|
+
}).then((result) => {
|
|
3253
|
+
const exitResult = result;
|
|
3254
|
+
const status = exitResult.exit_code === 0 ? "completed" : "failed";
|
|
3255
|
+
endSession(session.id, exitResult.exit_code ?? 0, status);
|
|
3256
|
+
emitLifecycleEvent(sandbox.id, `Agent ${opts.agentType} finished with exit code ${exitResult.exit_code}`);
|
|
3257
|
+
}).catch((err) => {
|
|
3260
3258
|
endSession(session.id, 1, "failed");
|
|
3261
3259
|
emitLifecycleEvent(sandbox.id, `Agent ${opts.agentType} failed: ${err.message}`);
|
|
3262
|
-
|
|
3263
|
-
|
|
3260
|
+
});
|
|
3261
|
+
return session;
|
|
3264
3262
|
}
|
|
3265
3263
|
async function stopAgent(sandboxId) {
|
|
3266
3264
|
const sandbox = getSandbox(sandboxId);
|
|
@@ -3272,14 +3270,15 @@ async function stopAgent(sandboxId) {
|
|
|
3272
3270
|
} catch {}
|
|
3273
3271
|
emitLifecycleEvent(sandbox.id, "Agent stopped by user");
|
|
3274
3272
|
}
|
|
3275
|
-
var AGENT_COMMANDS;
|
|
3273
|
+
var CLAUDE_ONBOARDING_SETUP, AGENT_COMMANDS;
|
|
3276
3274
|
var init_agent_runner = __esm(() => {
|
|
3277
3275
|
init_sandboxes();
|
|
3278
3276
|
init_sessions();
|
|
3279
3277
|
init_providers();
|
|
3280
3278
|
init_stream();
|
|
3279
|
+
CLAUDE_ONBOARDING_SETUP = `mkdir -p ~/.claude && ` + `echo '{"hasCompletedOnboarding":true,"hasTrustDialogAccepted":true,"hasAcknowledgedCostThreshold":true}' > ~/.claude.json`;
|
|
3281
3280
|
AGENT_COMMANDS = {
|
|
3282
|
-
claude: (prompt) =>
|
|
3281
|
+
claude: (prompt) => `${CLAUDE_ONBOARDING_SETUP} && claude --dangerously-skip-permissions -p ${JSON.stringify(prompt)}`,
|
|
3283
3282
|
codex: (prompt) => `codex -q ${JSON.stringify(prompt)}`,
|
|
3284
3283
|
gemini: (prompt) => `gemini -p ${JSON.stringify(prompt)}`
|
|
3285
3284
|
};
|
|
@@ -3762,7 +3761,7 @@ program2.command("mcp").description("Install MCP server for AI agents").option("
|
|
|
3762
3761
|
for (const target of targets) {
|
|
3763
3762
|
switch (target) {
|
|
3764
3763
|
case "claude": {
|
|
3765
|
-
const cmd = `claude mcp add --transport stdio --scope user sandboxes -- bunx @hasna/sandboxes sandboxes-mcp`;
|
|
3764
|
+
const cmd = `claude mcp add --transport stdio --scope user sandboxes -- bunx --bun --package @hasna/sandboxes sandboxes-mcp`;
|
|
3766
3765
|
console.log(chalk.dim(`Running: ${cmd}`));
|
|
3767
3766
|
execSync(cmd, { stdio: "inherit" });
|
|
3768
3767
|
console.log(chalk.green("Installed MCP server for Claude Code."));
|
|
@@ -3773,7 +3772,7 @@ program2.command("mcp").description("Install MCP server for AI agents").option("
|
|
|
3773
3772
|
console.log();
|
|
3774
3773
|
console.log(`[mcp_servers.sandboxes]`);
|
|
3775
3774
|
console.log(`command = "bunx"`);
|
|
3776
|
-
console.log(`args = ["@hasna/sandboxes", "sandboxes-mcp"]`);
|
|
3775
|
+
console.log(`args = ["--bun", "--package", "@hasna/sandboxes", "sandboxes-mcp"]`);
|
|
3777
3776
|
break;
|
|
3778
3777
|
}
|
|
3779
3778
|
case "gemini": {
|
|
@@ -3783,7 +3782,7 @@ program2.command("mcp").description("Install MCP server for AI agents").option("
|
|
|
3783
3782
|
mcpServers: {
|
|
3784
3783
|
sandboxes: {
|
|
3785
3784
|
command: "bunx",
|
|
3786
|
-
args: ["@hasna/sandboxes", "sandboxes-mcp"]
|
|
3785
|
+
args: ["--bun", "--package", "@hasna/sandboxes", "sandboxes-mcp"]
|
|
3787
3786
|
}
|
|
3788
3787
|
}
|
|
3789
3788
|
}, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runner.d.ts","sourceRoot":"","sources":["../../src/lib/agent-runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-runner.d.ts","sourceRoot":"","sources":["../../src/lib/agent-runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAc/E,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,cAAc,CAAC,CAkDzB;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAehE"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -5191,8 +5191,9 @@ function emitLifecycleEvent(sandboxId, message) {
|
|
|
5191
5191
|
}
|
|
5192
5192
|
|
|
5193
5193
|
// src/lib/agent-runner.ts
|
|
5194
|
+
var CLAUDE_ONBOARDING_SETUP = `mkdir -p ~/.claude && ` + `echo '{"hasCompletedOnboarding":true,"hasTrustDialogAccepted":true,"hasAcknowledgedCostThreshold":true}' > ~/.claude.json`;
|
|
5194
5195
|
var AGENT_COMMANDS = {
|
|
5195
|
-
claude: (prompt) =>
|
|
5196
|
+
claude: (prompt) => `${CLAUDE_ONBOARDING_SETUP} && claude --dangerously-skip-permissions -p ${JSON.stringify(prompt)}`,
|
|
5196
5197
|
codex: (prompt) => `codex -q ${JSON.stringify(prompt)}`,
|
|
5197
5198
|
gemini: (prompt) => `gemini -p ${JSON.stringify(prompt)}`
|
|
5198
5199
|
};
|
|
@@ -5211,29 +5212,27 @@ async function runAgent(sandboxId, opts) {
|
|
|
5211
5212
|
emitLifecycleEvent(sandbox.id, `Agent ${opts.agentType} started: ${opts.prompt.slice(0, 100)}`);
|
|
5212
5213
|
const collector = createStreamCollector(sandbox.id, session.id);
|
|
5213
5214
|
const provider = await getProvider(sandbox.provider);
|
|
5214
|
-
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
|
|
5224
|
-
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
return session;
|
|
5232
|
-
} catch (err) {
|
|
5215
|
+
const env = Object.keys(sandbox.env_vars ?? {}).length > 0 ? sandbox.env_vars : undefined;
|
|
5216
|
+
provider.exec(sandbox.provider_sandbox_id, cmd, {
|
|
5217
|
+
onStdout: (data) => {
|
|
5218
|
+
collector.onStdout(data);
|
|
5219
|
+
opts.onStdout?.(data);
|
|
5220
|
+
},
|
|
5221
|
+
onStderr: (data) => {
|
|
5222
|
+
collector.onStderr(data);
|
|
5223
|
+
opts.onStderr?.(data);
|
|
5224
|
+
},
|
|
5225
|
+
env
|
|
5226
|
+
}).then((result) => {
|
|
5227
|
+
const exitResult = result;
|
|
5228
|
+
const status = exitResult.exit_code === 0 ? "completed" : "failed";
|
|
5229
|
+
endSession(session.id, exitResult.exit_code ?? 0, status);
|
|
5230
|
+
emitLifecycleEvent(sandbox.id, `Agent ${opts.agentType} finished with exit code ${exitResult.exit_code}`);
|
|
5231
|
+
}).catch((err) => {
|
|
5233
5232
|
endSession(session.id, 1, "failed");
|
|
5234
5233
|
emitLifecycleEvent(sandbox.id, `Agent ${opts.agentType} failed: ${err.message}`);
|
|
5235
|
-
|
|
5236
|
-
|
|
5234
|
+
});
|
|
5235
|
+
return session;
|
|
5237
5236
|
}
|
|
5238
5237
|
async function stopAgent(sandboxId) {
|
|
5239
5238
|
const sandbox = getSandbox(sandboxId);
|
|
@@ -5397,14 +5396,25 @@ server.tool("exec_command", "Execute a command in a sandbox", {
|
|
|
5397
5396
|
});
|
|
5398
5397
|
const collector = createStreamCollector(sandbox.id, session.id);
|
|
5399
5398
|
const provider = await getProvider(sandbox.provider);
|
|
5400
|
-
const
|
|
5401
|
-
background: params.background,
|
|
5402
|
-
onStdout: collector.onStdout,
|
|
5403
|
-
onStderr: collector.onStderr
|
|
5404
|
-
});
|
|
5399
|
+
const env = Object.keys(sandbox.env_vars ?? {}).length > 0 ? sandbox.env_vars : undefined;
|
|
5405
5400
|
if (params.background) {
|
|
5401
|
+
provider.exec(sandbox.provider_sandbox_id, params.command, {
|
|
5402
|
+
onStdout: collector.onStdout,
|
|
5403
|
+
onStderr: collector.onStderr,
|
|
5404
|
+
env
|
|
5405
|
+
}).then((res) => {
|
|
5406
|
+
const r = res;
|
|
5407
|
+
endSession(session.id, r.exit_code ?? 0);
|
|
5408
|
+
}).catch(() => {
|
|
5409
|
+
endSession(session.id, 1);
|
|
5410
|
+
});
|
|
5406
5411
|
return ok({ session_id: session.id, background: true });
|
|
5407
5412
|
}
|
|
5413
|
+
const result = await provider.exec(sandbox.provider_sandbox_id, params.command, {
|
|
5414
|
+
onStdout: collector.onStdout,
|
|
5415
|
+
onStderr: collector.onStderr,
|
|
5416
|
+
env
|
|
5417
|
+
});
|
|
5408
5418
|
const execResult = result;
|
|
5409
5419
|
endSession(session.id, execResult.exit_code);
|
|
5410
5420
|
return ok({
|