@madarco/agentbox 0.11.1 → 0.11.3
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/CHANGELOG.md +25 -0
- package/dist/{_cloud-attach-45ECDTRL.js → _cloud-attach-XWCVLO5V.js} +6 -4
- package/dist/{chunk-PZ2TJF2U.js → chunk-GYJ62GFL.js} +32 -12
- package/dist/chunk-GYJ62GFL.js.map +1 -0
- package/dist/index.js +100 -26
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/share/host-skills/agentbox-info/SKILL.md +26 -6
- package/dist/chunk-PZ2TJF2U.js.map +0 -1
- /package/dist/{_cloud-attach-45ECDTRL.js.map → _cloud-attach-XWCVLO5V.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
buildCloudAttachInnerCommand,
|
|
41
41
|
clipboardCaptureAvailable,
|
|
42
42
|
cloudAgentAttach,
|
|
43
|
+
cloudAgentStartDetached,
|
|
43
44
|
createMenuLines,
|
|
44
45
|
detectHostTerminal,
|
|
45
46
|
getProvider,
|
|
@@ -61,7 +62,7 @@ import {
|
|
|
61
62
|
statusLine,
|
|
62
63
|
stripTitleGlyph,
|
|
63
64
|
subscribePrompts
|
|
64
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-GYJ62GFL.js";
|
|
65
66
|
import {
|
|
66
67
|
AmbiguousBoxError,
|
|
67
68
|
BOX_STATUS_EVENT,
|
|
@@ -220,8 +221,8 @@ import {
|
|
|
220
221
|
import "./chunk-G3H2L3O2.js";
|
|
221
222
|
|
|
222
223
|
// src/version.ts
|
|
223
|
-
var AGENTBOX_VERSION = true ? "0.11.
|
|
224
|
-
var AGENTBOX_COMMIT = true ? "
|
|
224
|
+
var AGENTBOX_VERSION = true ? "0.11.3" : "0.0.0-dev";
|
|
225
|
+
var AGENTBOX_COMMIT = true ? "c74f16c4" : "dev";
|
|
225
226
|
|
|
226
227
|
// src/index.ts
|
|
227
228
|
import { Command as Command46 } from "commander";
|
|
@@ -2249,11 +2250,6 @@ var claudeCommand = new Command2("claude").description("Create a sandboxed box a
|
|
|
2249
2250
|
const providerName = opts.provider ?? cfg.effective.box.provider ?? "docker";
|
|
2250
2251
|
const isCloud = providerName !== "docker";
|
|
2251
2252
|
if (opts.initialPrompt && opts.initialPrompt.length > 0) {
|
|
2252
|
-
if (isCloud) {
|
|
2253
|
-
log8.error("-i / --initial-prompt is currently docker-only (cloud sessions only start on attach).");
|
|
2254
|
-
cmdLog.close();
|
|
2255
|
-
process.exit(2);
|
|
2256
|
-
}
|
|
2257
2253
|
try {
|
|
2258
2254
|
await assertAgentCredsAvailable({
|
|
2259
2255
|
agent: "claude-code",
|
|
@@ -3664,11 +3660,6 @@ var codexCommand = new Command5("codex").description("Create a sandboxed box and
|
|
|
3664
3660
|
const providerDefault = resolveDefaultCheckpoint(cfg.effective, providerName);
|
|
3665
3661
|
const checkpointRef = opts.snapshot && opts.snapshot.length > 0 ? opts.snapshot : providerDefault.length > 0 ? providerDefault : void 0;
|
|
3666
3662
|
if (opts.initialPrompt && opts.initialPrompt.length > 0) {
|
|
3667
|
-
if (isCloud) {
|
|
3668
|
-
log11.error("-i / --initial-prompt is currently docker-only (cloud sessions only start on attach).");
|
|
3669
|
-
cmdLog.close();
|
|
3670
|
-
process.exit(2);
|
|
3671
|
-
}
|
|
3672
3663
|
try {
|
|
3673
3664
|
await assertAgentCredsAvailable({
|
|
3674
3665
|
agent: "codex",
|
|
@@ -4382,11 +4373,6 @@ var opencodeCommand = new Command6("opencode").description("Create a sandboxed b
|
|
|
4382
4373
|
const providerDefault = resolveDefaultCheckpoint(cfg.effective, providerName);
|
|
4383
4374
|
const checkpointRef = opts.snapshot && opts.snapshot.length > 0 ? opts.snapshot : providerDefault.length > 0 ? providerDefault : void 0;
|
|
4384
4375
|
if (opts.initialPrompt && opts.initialPrompt.length > 0) {
|
|
4385
|
-
if (isCloud) {
|
|
4386
|
-
log12.error("-i / --initial-prompt is currently docker-only (cloud sessions only start on attach).");
|
|
4387
|
-
cmdLog.close();
|
|
4388
|
-
process.exit(2);
|
|
4389
|
-
}
|
|
4390
4376
|
try {
|
|
4391
4377
|
await assertAgentCredsAvailable({
|
|
4392
4378
|
agent: "opencode",
|
|
@@ -5419,7 +5405,7 @@ var createCommand = new Command9("create").description("Create and start a new a
|
|
|
5419
5405
|
}
|
|
5420
5406
|
outro4("done");
|
|
5421
5407
|
if (attachClaudeAfter) {
|
|
5422
|
-
const { cloudAgentAttach: cloudAgentAttach2 } = await import("./_cloud-attach-
|
|
5408
|
+
const { cloudAgentAttach: cloudAgentAttach2 } = await import("./_cloud-attach-XWCVLO5V.js");
|
|
5423
5409
|
await cloudAgentAttach2({
|
|
5424
5410
|
box: result.record,
|
|
5425
5411
|
binary: "claude",
|
|
@@ -10866,9 +10852,14 @@ var runQueuedJobCommand = new Command35("_run-queued-job").description("internal
|
|
|
10866
10852
|
log44.close();
|
|
10867
10853
|
process.exit(64);
|
|
10868
10854
|
}
|
|
10869
|
-
|
|
10855
|
+
const onBoxCreated = (boxId) => {
|
|
10870
10856
|
if (job) job = { ...job, boxId };
|
|
10871
|
-
}
|
|
10857
|
+
};
|
|
10858
|
+
if ((job.providerName || "docker") === "docker") {
|
|
10859
|
+
await runDockerJob(job, log44, onBoxCreated);
|
|
10860
|
+
} else {
|
|
10861
|
+
await runCloudJob(job, log44, onBoxCreated);
|
|
10862
|
+
}
|
|
10872
10863
|
const done = {
|
|
10873
10864
|
...job,
|
|
10874
10865
|
status: "done",
|
|
@@ -10906,9 +10897,6 @@ async function runDockerJob(job, log44, onBoxCreated) {
|
|
|
10906
10897
|
});
|
|
10907
10898
|
const projectRoot = (await findProjectRoot(opts.workspace)).root;
|
|
10908
10899
|
const providerName = job.providerName || cfg.effective.box.provider || "docker";
|
|
10909
|
-
if (providerName !== "docker") {
|
|
10910
|
-
throw new Error(`worker only supports docker provider (got "${providerName}")`);
|
|
10911
|
-
}
|
|
10912
10900
|
const providerDefault = resolveDefaultCheckpoint(cfg.effective, providerName);
|
|
10913
10901
|
const checkpointRef = opts.snapshot && opts.snapshot.length > 0 ? opts.snapshot : providerDefault.length > 0 ? providerDefault : void 0;
|
|
10914
10902
|
const useSnapshot = opts.hostSnapshot === false ? false : opts.hostSnapshot === true ? true : cfg.effective.box.hostSnapshot ?? false;
|
|
@@ -10981,6 +10969,60 @@ async function runDockerJob(job, log44, onBoxCreated) {
|
|
|
10981
10969
|
throw new Error(`unknown agent kind: ${String(job.agent)}`);
|
|
10982
10970
|
}
|
|
10983
10971
|
}
|
|
10972
|
+
async function runCloudJob(job, log44, onBoxCreated) {
|
|
10973
|
+
const opts = job.createOpts;
|
|
10974
|
+
const cfg = await loadEffectiveConfig(opts.workspace, {
|
|
10975
|
+
cliOverrides: buildOverridesFromJob(job)
|
|
10976
|
+
});
|
|
10977
|
+
const projectRoot = (await findProjectRoot(opts.workspace)).root;
|
|
10978
|
+
const providerName = job.providerName || cfg.effective.box.provider || "docker";
|
|
10979
|
+
const provider = await providerForCreate({ flag: providerName, config: cfg.effective });
|
|
10980
|
+
const providerDefault = resolveDefaultCheckpoint(cfg.effective, providerName);
|
|
10981
|
+
const checkpointRef = opts.snapshot && opts.snapshot.length > 0 ? opts.snapshot : providerDefault.length > 0 ? providerDefault : void 0;
|
|
10982
|
+
const withPlaywright = cfg.effective.box.withPlaywright || cfg.effective.browser.default !== "agent-browser";
|
|
10983
|
+
log44.write(`creating cloud box (${providerName}) for agent=${job.agent}`);
|
|
10984
|
+
const result = await provider.create({
|
|
10985
|
+
workspacePath: opts.workspace,
|
|
10986
|
+
name: opts.name && opts.name.length > 0 ? opts.name : void 0,
|
|
10987
|
+
checkpointRef,
|
|
10988
|
+
image: cfg.effective.box.image,
|
|
10989
|
+
withPlaywright,
|
|
10990
|
+
withEnv: cfg.effective.box.withEnv,
|
|
10991
|
+
vnc: { enabled: cfg.effective.box.vnc },
|
|
10992
|
+
limits: resolveLimits(cfg.effective.box, opts),
|
|
10993
|
+
projectRoot,
|
|
10994
|
+
onLog: (line) => log44.write(line)
|
|
10995
|
+
});
|
|
10996
|
+
log44.write(`box created: ${result.record.id}`);
|
|
10997
|
+
onBoxCreated(result.record.id);
|
|
10998
|
+
await writeJob({ ...job, boxId: result.record.id });
|
|
10999
|
+
const promptedArgs = buildPromptArgs(job.agent, job.prompt, job.agentArgs);
|
|
11000
|
+
let binary;
|
|
11001
|
+
let sessionName;
|
|
11002
|
+
let extraArgs;
|
|
11003
|
+
if (job.agent === "claude-code") {
|
|
11004
|
+
binary = "claude";
|
|
11005
|
+
sessionName = cfg.effective.claude.sessionName;
|
|
11006
|
+
extraArgs = applyClaudeSkipPermissions(promptedArgs, cfg.effective);
|
|
11007
|
+
} else if (job.agent === "codex") {
|
|
11008
|
+
binary = "codex";
|
|
11009
|
+
sessionName = cfg.effective.codex.sessionName;
|
|
11010
|
+
extraArgs = applyCodexSkipPermissions(promptedArgs, cfg.effective);
|
|
11011
|
+
} else if (job.agent === "opencode") {
|
|
11012
|
+
binary = "opencode";
|
|
11013
|
+
sessionName = cfg.effective.opencode.sessionName;
|
|
11014
|
+
extraArgs = promptedArgs;
|
|
11015
|
+
} else {
|
|
11016
|
+
throw new Error(`unknown agent kind: ${String(job.agent)}`);
|
|
11017
|
+
}
|
|
11018
|
+
log44.write(`starting detached ${job.agent} session`);
|
|
11019
|
+
await cloudAgentStartDetached({
|
|
11020
|
+
box: result.record,
|
|
11021
|
+
binary,
|
|
11022
|
+
sessionName,
|
|
11023
|
+
extraArgs
|
|
11024
|
+
});
|
|
11025
|
+
}
|
|
10984
11026
|
function buildOverridesFromJob(job) {
|
|
10985
11027
|
const opts = job.createOpts;
|
|
10986
11028
|
const box = {};
|
|
@@ -12057,8 +12099,8 @@ function runInherit(cmd, args) {
|
|
|
12057
12099
|
});
|
|
12058
12100
|
}
|
|
12059
12101
|
var updateCommand = new Command43("self-update").description(
|
|
12060
|
-
"Update agentbox: self-update via npm/pnpm (unless run via npx), wipe the box image so it rebuilds, and reload the relay"
|
|
12061
|
-
).option("-y, --yes", "skip the confirmation prompt").option("--dry-run", "show what would happen, don't change anything").option("--skip-self", "skip the package self-update; only refresh the image + relay").action(async (opts) => {
|
|
12102
|
+
"Update agentbox: self-update via npm/pnpm (unless run via npx), refresh the host skills, wipe the box image so it rebuilds, and reload the relay"
|
|
12103
|
+
).option("-y, --yes", "skip the confirmation prompt").option("--dry-run", "show what would happen, don't change anything").option("--skip-self", "skip the package self-update; only refresh the skills + image + relay").option("--skip-skills", "skip refreshing the host skill files in ~/.claude, ~/.codex, ~/.config/opencode").action(async (opts) => {
|
|
12062
12104
|
try {
|
|
12063
12105
|
const method = detectExecutionMethod({
|
|
12064
12106
|
userAgent: process.env.npm_config_user_agent,
|
|
@@ -12066,10 +12108,12 @@ var updateCommand = new Command43("self-update").description(
|
|
|
12066
12108
|
});
|
|
12067
12109
|
intro8("agentbox self-update");
|
|
12068
12110
|
const selfStep = opts.skipSelf ? "self-update: skipped (--skip-self)" : describeSelfUpdate(method);
|
|
12111
|
+
const skillsStep = opts.skipSkills ? "skills: skipped (--skip-skills)" : "skills: refresh agentbox-managed host skill files in ~/.claude (and Codex/OpenCode)";
|
|
12069
12112
|
log41.info(
|
|
12070
12113
|
[
|
|
12071
12114
|
"plan:",
|
|
12072
12115
|
` ${selfStep}`,
|
|
12116
|
+
` ${skillsStep}`,
|
|
12073
12117
|
` image: docker image rm -f ${DEFAULT_BOX_IMAGE} (rebuilds on next create/claude)`,
|
|
12074
12118
|
" relay: stop, then respawn unless a self-update ran"
|
|
12075
12119
|
].join("\n")
|
|
@@ -12102,6 +12146,36 @@ var updateCommand = new Command43("self-update").description(
|
|
|
12102
12146
|
log41.success(`updated ${PKG} via ${cmd.cmd}`);
|
|
12103
12147
|
}
|
|
12104
12148
|
}
|
|
12149
|
+
if (opts.skipSkills) {
|
|
12150
|
+
log41.info("skipping skills refresh (--skip-skills)");
|
|
12151
|
+
} else if (selfUpdated) {
|
|
12152
|
+
const code = await runInherit("agentbox", ["install", "--skills-only"]);
|
|
12153
|
+
if (code === 0) {
|
|
12154
|
+
log41.success("refreshed host skills (via updated build)");
|
|
12155
|
+
} else {
|
|
12156
|
+
log41.warn(
|
|
12157
|
+
`host skills not refreshed (agentbox install --skills-only exited ${String(code)}) \u2014 run it manually to pick up the new versions`
|
|
12158
|
+
);
|
|
12159
|
+
}
|
|
12160
|
+
} else {
|
|
12161
|
+
try {
|
|
12162
|
+
const res = installHostSkills({ quiet: true });
|
|
12163
|
+
if (res.written.length > 0) {
|
|
12164
|
+
log41.success(`refreshed host skills (${String(res.written.length)} file(s))`);
|
|
12165
|
+
} else {
|
|
12166
|
+
log41.info(`host skills already current (${String(res.skipped)} skipped)`);
|
|
12167
|
+
}
|
|
12168
|
+
if (res.blocked.length > 0) {
|
|
12169
|
+
log41.warn(
|
|
12170
|
+
`user-modified skill file(s) left in place: ${res.blocked.join(", ")} \u2014 run \`agentbox install --skills-only --force\` to overwrite`
|
|
12171
|
+
);
|
|
12172
|
+
}
|
|
12173
|
+
} catch (err) {
|
|
12174
|
+
log41.warn(
|
|
12175
|
+
`host skills not refreshed (${err instanceof Error ? err.message : String(err)})`
|
|
12176
|
+
);
|
|
12177
|
+
}
|
|
12178
|
+
}
|
|
12105
12179
|
const s = spinner10();
|
|
12106
12180
|
s.start(`removing image ${DEFAULT_BOX_IMAGE}`);
|
|
12107
12181
|
const removed = await removeImage(DEFAULT_BOX_IMAGE);
|