svamp-cli 0.1.48 → 0.1.50

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.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { b as stopDaemon, s as startDaemon, d as daemonStatus } from './run-ByOVDgvx.mjs';
1
+ import { b as stopDaemon, s as startDaemon, d as daemonStatus } from './run-Bc83CRUn.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -105,12 +105,15 @@ async function main() {
105
105
  await handleMachineCommand();
106
106
  } else if (subcommand === "skills") {
107
107
  await handleSkillsCommand();
108
+ } else if (subcommand === "service" || subcommand === "svc") {
109
+ const { handleServiceCommand } = await import('./commands-DlPBC5p0.mjs').then(function (n) { return n.c; });
110
+ await handleServiceCommand();
108
111
  } else if (subcommand === "--help" || subcommand === "-h") {
109
112
  printHelp();
110
113
  } else if (!subcommand || subcommand === "start") {
111
114
  await handleInteractiveCommand();
112
115
  } else if (subcommand === "--version" || subcommand === "-v") {
113
- const pkg = await import('./package-BaGfG8vL.mjs').catch(() => ({ default: { version: "unknown" } }));
116
+ const pkg = await import('./package-BLDik3NY.mjs').catch(() => ({ default: { version: "unknown" } }));
114
117
  console.log(`svamp version: ${pkg.default.version}`);
115
118
  } else {
116
119
  console.error(`Unknown command: ${subcommand}`);
@@ -119,7 +122,7 @@ async function main() {
119
122
  }
120
123
  }
121
124
  async function handleInteractiveCommand() {
122
- const { runInteractive } = await import('./run-BjZ6SyFy.mjs');
125
+ const { runInteractive } = await import('./run-C4pdX4sY.mjs');
123
126
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
124
127
  let directory = process.cwd();
125
128
  let resumeSessionId;
@@ -164,7 +167,7 @@ async function handleAgentCommand() {
164
167
  return;
165
168
  }
166
169
  if (agentArgs[0] === "list") {
167
- const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-ByOVDgvx.mjs').then(function (n) { return n.i; });
170
+ const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-Bc83CRUn.mjs').then(function (n) { return n.i; });
168
171
  console.log("Known agents:");
169
172
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
170
173
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -176,7 +179,7 @@ async function handleAgentCommand() {
176
179
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
177
180
  return;
178
181
  }
179
- const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-ByOVDgvx.mjs').then(function (n) { return n.i; });
182
+ const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-Bc83CRUn.mjs').then(function (n) { return n.i; });
180
183
  let cwd = process.cwd();
181
184
  const filteredArgs = [];
182
185
  for (let i = 0; i < agentArgs.length; i++) {
@@ -200,12 +203,12 @@ async function handleAgentCommand() {
200
203
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
201
204
  let backend;
202
205
  if (KNOWN_MCP_AGENTS[config.agentName]) {
203
- const { CodexMcpBackend } = await import('./run-ByOVDgvx.mjs').then(function (n) { return n.j; });
206
+ const { CodexMcpBackend } = await import('./run-Bc83CRUn.mjs').then(function (n) { return n.j; });
204
207
  backend = new CodexMcpBackend({ cwd, log: logFn });
205
208
  } else {
206
- const { AcpBackend } = await import('./run-ByOVDgvx.mjs').then(function (n) { return n.h; });
207
- const { GeminiTransport } = await import('./run-ByOVDgvx.mjs').then(function (n) { return n.G; });
208
- const { DefaultTransport } = await import('./run-ByOVDgvx.mjs').then(function (n) { return n.D; });
209
+ const { AcpBackend } = await import('./run-Bc83CRUn.mjs').then(function (n) { return n.h; });
210
+ const { GeminiTransport } = await import('./run-Bc83CRUn.mjs').then(function (n) { return n.G; });
211
+ const { DefaultTransport } = await import('./run-Bc83CRUn.mjs').then(function (n) { return n.D; });
209
212
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
210
213
  backend = new AcpBackend({
211
214
  agentName: config.agentName,
@@ -323,7 +326,7 @@ async function handleSessionCommand() {
323
326
  printSessionHelp();
324
327
  return;
325
328
  }
326
- const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionRalphStart, sessionRalphCancel, sessionRalphStatus, sessionQueueAdd, sessionQueueList, sessionQueueClear } = await import('./commands-C9TdN_El.mjs');
329
+ const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionRalphStart, sessionRalphCancel, sessionRalphStatus, sessionQueueAdd, sessionQueueList, sessionQueueClear } = await import('./commands-D-nIO_Sf.mjs');
327
330
  const parseFlagStr = (flag, shortFlag) => {
328
331
  for (let i = 1; i < sessionArgs.length; i++) {
329
332
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -383,7 +386,7 @@ async function handleSessionCommand() {
383
386
  allowDomain.push(sessionArgs[++i]);
384
387
  }
385
388
  }
386
- const { parseShareArg } = await import('./commands-C9TdN_El.mjs');
389
+ const { parseShareArg } = await import('./commands-D-nIO_Sf.mjs');
387
390
  const shareEntries = share.map((s) => parseShareArg(s));
388
391
  await sessionSpawn(agent, dir, targetMachineId, {
389
392
  message,
@@ -467,7 +470,7 @@ async function handleSessionCommand() {
467
470
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
468
471
  process.exit(1);
469
472
  }
470
- const { sessionApprove } = await import('./commands-C9TdN_El.mjs');
473
+ const { sessionApprove } = await import('./commands-D-nIO_Sf.mjs');
471
474
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
472
475
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
473
476
  json: hasFlag("--json")
@@ -477,19 +480,20 @@ async function handleSessionCommand() {
477
480
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
478
481
  process.exit(1);
479
482
  }
480
- const { sessionDeny } = await import('./commands-C9TdN_El.mjs');
483
+ const { sessionDeny } = await import('./commands-D-nIO_Sf.mjs');
481
484
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
482
485
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
483
486
  json: hasFlag("--json")
484
487
  });
485
488
  } else if (sessionSubcommand === "ralph-start" || sessionSubcommand === "ralph") {
486
489
  if (!sessionArgs[1] || !sessionArgs[2]) {
487
- console.error('Usage: svamp session ralph-start <session-id> "<task>" [--completion-promise TEXT] [--max-iterations N]');
490
+ console.error('Usage: svamp session ralph-start <session-id> "<task>" [--completion-promise TEXT] [--max-iterations N] [--cooldown N]');
488
491
  process.exit(1);
489
492
  }
490
493
  await sessionRalphStart(sessionArgs[1], sessionArgs[2], targetMachineId, {
491
494
  completionPromise: parseFlagStr("--completion-promise"),
492
- maxIterations: parseFlagInt("--max-iterations")
495
+ maxIterations: parseFlagInt("--max-iterations"),
496
+ cooldownSeconds: parseFlagInt("--cooldown")
493
497
  });
494
498
  } else if (sessionSubcommand === "ralph-cancel") {
495
499
  if (!sessionArgs[1]) {
@@ -542,7 +546,7 @@ async function handleMachineCommand() {
542
546
  return;
543
547
  }
544
548
  if (machineSubcommand === "share") {
545
- const { machineShare } = await import('./commands-C9TdN_El.mjs');
549
+ const { machineShare } = await import('./commands-D-nIO_Sf.mjs');
546
550
  let machineId;
547
551
  const shareArgs = [];
548
552
  for (let i = 1; i < machineArgs.length; i++) {
@@ -571,6 +575,50 @@ async function handleMachineCommand() {
571
575
  }
572
576
  }
573
577
  await machineShare(machineId, { add, remove, list, configPath, showConfig });
578
+ } else if (machineSubcommand === "exec") {
579
+ const { machineExec } = await import('./commands-D-nIO_Sf.mjs');
580
+ let machineId;
581
+ let cwd;
582
+ const cmdParts = [];
583
+ for (let i = 1; i < machineArgs.length; i++) {
584
+ if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
585
+ machineId = machineArgs[++i];
586
+ } else if (machineArgs[i] === "--cwd" && i + 1 < machineArgs.length) {
587
+ cwd = machineArgs[++i];
588
+ } else {
589
+ cmdParts.push(machineArgs[i]);
590
+ }
591
+ }
592
+ const command = cmdParts.join(" ");
593
+ if (!command) {
594
+ console.error("Usage: svamp machine exec <command> [--cwd <path>] [-m <id>]");
595
+ process.exit(1);
596
+ }
597
+ await machineExec(machineId, command, cwd);
598
+ } else if (machineSubcommand === "info") {
599
+ const { machineInfo } = await import('./commands-D-nIO_Sf.mjs');
600
+ let machineId;
601
+ for (let i = 1; i < machineArgs.length; i++) {
602
+ if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
603
+ machineId = machineArgs[++i];
604
+ }
605
+ }
606
+ await machineInfo(machineId);
607
+ } else if (machineSubcommand === "ls") {
608
+ const { machineLs } = await import('./commands-D-nIO_Sf.mjs');
609
+ let machineId;
610
+ let showHidden = false;
611
+ let path;
612
+ for (let i = 1; i < machineArgs.length; i++) {
613
+ if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
614
+ machineId = machineArgs[++i];
615
+ } else if (machineArgs[i] === "--hidden" || machineArgs[i] === "-a") {
616
+ showHidden = true;
617
+ } else if (!path) {
618
+ path = machineArgs[i];
619
+ }
620
+ }
621
+ await machineLs(machineId, path, showHidden);
574
622
  } else {
575
623
  console.error(`Unknown machine command: ${machineSubcommand}`);
576
624
  printMachineHelp();
@@ -585,7 +633,7 @@ async function handleSkillsCommand() {
585
633
  printSkillsHelp();
586
634
  return;
587
635
  }
588
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-BVuE0VQU.mjs');
636
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-6EyqaoCp.mjs');
589
637
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
590
638
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
591
639
  if (!query) {
@@ -956,6 +1004,9 @@ Usage:
956
1004
  svamp skills find <query> Search the skills marketplace
957
1005
  svamp skills install <n> Install a skill from the marketplace
958
1006
  svamp skills --help Show all skill commands
1007
+ svamp service expose <name> Expose a service from this sandbox
1008
+ svamp service list List service groups
1009
+ svamp service --help Show all service commands
959
1010
  svamp agent list List known agents
960
1011
  svamp agent <name> Start local agent session (gemini, codex)
961
1012
  svamp --version Show version
@@ -1103,9 +1154,10 @@ Attach commands:
1103
1154
  /info Show session status
1104
1155
 
1105
1156
  Ralph Loop (iterative task automation):
1106
- svamp session ralph-start <id> "<task>" [--completion-promise TEXT] [--max-iterations N]
1157
+ svamp session ralph-start <id> "<task>" [--completion-promise TEXT] [--max-iterations N] [--cooldown N]
1107
1158
  svamp session ralph-cancel <id>
1108
1159
  svamp session ralph-status <id>
1160
+ (alias: svamp session ralph <id> "<task>" ...)
1109
1161
 
1110
1162
  Message Queue:
1111
1163
  svamp session queue add <id> "<message>"
@@ -1141,6 +1193,9 @@ function printMachineHelp() {
1141
1193
  svamp machine \u2014 Machine management
1142
1194
 
1143
1195
  Usage:
1196
+ svamp machine info Show machine info & status
1197
+ svamp machine exec <command> [--cwd <path>] Run command on machine
1198
+ svamp machine ls [path] [--hidden] List directory on machine
1144
1199
  svamp machine share --list List shared users
1145
1200
  svamp machine share --add <email>[:<role>] Share machine with user
1146
1201
  svamp machine share --remove <email> Remove shared user
@@ -1149,28 +1204,17 @@ Usage:
1149
1204
 
1150
1205
  Options:
1151
1206
  --machine <id>, -m <id> Target a specific machine (prefix match supported)
1152
-
1153
- Security context config file format (JSON):
1154
- {
1155
- "default": {
1156
- "role": "interact",
1157
- "filesystem": { "denyRead": ["/etc/shadow"], "denyWrite": ["/usr"] },
1158
- "network": { "allowedDomains": ["api.anthropic.com"] }
1159
- },
1160
- "users": {
1161
- "alice@example.com": { "role": "admin" },
1162
- "bob@example.com": { "role": "view", "denyAllNetwork": true }
1163
- }
1164
- }
1165
-
1166
- The "default" entry applies to all users. Per-user entries override defaults.
1167
- Machine-level config is merged with session-level config at spawn time.
1207
+ --cwd <path> Working directory for exec (default: home dir)
1208
+ --hidden, -a Show hidden files in ls
1168
1209
 
1169
1210
  Examples:
1211
+ svamp machine info
1212
+ svamp machine exec "ls -la /tmp"
1213
+ svamp machine exec "df -h" -m cloud-box --cwd /
1214
+ svamp machine ls /home/user/projects
1215
+ svamp machine ls --hidden -m cloud-box
1170
1216
  svamp machine share --add alice@example.com:admin
1171
1217
  svamp machine share --config ./security-context.json
1172
- svamp machine share --show-config
1173
- svamp machine share --list
1174
1218
  `);
1175
1219
  }
1176
1220
  function printSkillsHelp() {