svamp-cli 0.1.43 → 0.1.46

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.
Files changed (57) hide show
  1. package/dist/cli.mjs +87 -13
  2. package/dist/commands-8Xn02pQg.mjs +1217 -0
  3. package/dist/commands-BD_NjWJL.mjs +1217 -0
  4. package/dist/commands-BIFQZZGw.mjs +1375 -0
  5. package/dist/commands-BLmRIMdf.mjs +1217 -0
  6. package/dist/commands-BQ_347V_.mjs +1374 -0
  7. package/dist/commands-BVjcCbWS.mjs +1375 -0
  8. package/dist/commands-CFv6lO0D.mjs +1217 -0
  9. package/dist/commands-CJ2n5jS2.mjs +1375 -0
  10. package/dist/commands-CKEKQ_5B.mjs +1217 -0
  11. package/dist/commands-CRZbJjqN.mjs +1375 -0
  12. package/dist/commands-CWsfciHn.mjs +1217 -0
  13. package/dist/commands-Cc73uUnP.mjs +1375 -0
  14. package/dist/commands-CorUNLRF.mjs +1375 -0
  15. package/dist/commands-DLoe6FyK.mjs +1375 -0
  16. package/dist/commands-DVygnMsh.mjs +1217 -0
  17. package/dist/commands-DZfaDmsk.mjs +1374 -0
  18. package/dist/index.mjs +1 -1
  19. package/dist/package-BufekbY1.mjs +57 -0
  20. package/dist/package-CmIBOZtY.mjs +57 -0
  21. package/dist/package-CmVt1kdw.mjs +58 -0
  22. package/dist/package-DRO1LpXW.mjs +58 -0
  23. package/dist/package-UwLIU765.mjs +58 -0
  24. package/dist/package-rasGC9_z.mjs +58 -0
  25. package/dist/run-B2zRMxE0.mjs +5508 -0
  26. package/dist/run-B31biy0V.mjs +1050 -0
  27. package/dist/run-B7V-xXM7.mjs +5775 -0
  28. package/dist/run-BREPr7Yc.mjs +5508 -0
  29. package/dist/run-BTwshVk1.mjs +5728 -0
  30. package/dist/run-BWsDPiNe.mjs +1050 -0
  31. package/dist/run-BXYfq8mK.mjs +5836 -0
  32. package/dist/run-BY12Ataq.mjs +5732 -0
  33. package/dist/run-BieEN0Pg.mjs +5761 -0
  34. package/dist/run-BlEFlhfn.mjs +5510 -0
  35. package/dist/run-C1lS3SwN.mjs +5733 -0
  36. package/dist/run-C9Hrqjy_.mjs +1050 -0
  37. package/dist/run-CCcW4asS.mjs +1050 -0
  38. package/dist/run-CHyN5U0t.mjs +1050 -0
  39. package/dist/run-COWb9ovq.mjs +1050 -0
  40. package/dist/run-CSk7i0Hq.mjs +1050 -0
  41. package/dist/run-C_8iOjO1.mjs +5892 -0
  42. package/dist/run-CxGAa9MH.mjs +1050 -0
  43. package/dist/run-D39C7Ta3.mjs +1050 -0
  44. package/dist/run-D3bhRCCb.mjs +1051 -0
  45. package/dist/run-DGsXW19O.mjs +5541 -0
  46. package/dist/run-DHrF2xpW.mjs +5776 -0
  47. package/dist/run-DJ4k0WzZ.mjs +1051 -0
  48. package/dist/run-DNX3djCI.mjs +1050 -0
  49. package/dist/run-DTkldU6a.mjs +1050 -0
  50. package/dist/run-DU10B3gK.mjs +5728 -0
  51. package/dist/run-DVZGKdKO.mjs +1050 -0
  52. package/dist/run-DXJ2M19k.mjs +1050 -0
  53. package/dist/run-DZOeccNu.mjs +5484 -0
  54. package/dist/run-De-wkVl3.mjs +5487 -0
  55. package/dist/run-Dfl3Ze2L.mjs +5541 -0
  56. package/dist/run-Dge2K7h1.mjs +1050 -0
  57. package/package.json +3 -2
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { b as stopDaemon, s as startDaemon, d as daemonStatus } from './run-CF6aXLmA.mjs';
1
+ import { b as stopDaemon, s as startDaemon, d as daemonStatus } from './run-C_8iOjO1.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -19,6 +19,13 @@ import 'zod';
19
19
  import 'node:fs/promises';
20
20
  import 'node:util';
21
21
 
22
+ const nodeMajor = parseInt(process.versions.node.split(".")[0], 10);
23
+ if (nodeMajor < 22) {
24
+ console.error(`Error: svamp requires Node.js >= 22 (you have ${process.version}).`);
25
+ console.error(" Node 22+ includes native WebSocket support needed by hypha-rpc.");
26
+ console.error(" Upgrade with: nvm install 22 && nvm alias default 22");
27
+ process.exit(1);
28
+ }
22
29
  const args = process.argv.slice(2);
23
30
  const subcommand = args[0];
24
31
  let daemonSubcommand = args[1];
@@ -101,7 +108,7 @@ async function main() {
101
108
  } else if (!subcommand || subcommand === "start") {
102
109
  await handleInteractiveCommand();
103
110
  } else if (subcommand === "--version" || subcommand === "-v") {
104
- const pkg = await import('./package-C1hpYMj4.mjs').catch(() => ({ default: { version: "unknown" } }));
111
+ const pkg = await import('./package-rasGC9_z.mjs').catch(() => ({ default: { version: "unknown" } }));
105
112
  console.log(`svamp version: ${pkg.default.version}`);
106
113
  } else {
107
114
  console.error(`Unknown command: ${subcommand}`);
@@ -110,7 +117,7 @@ async function main() {
110
117
  }
111
118
  }
112
119
  async function handleInteractiveCommand() {
113
- const { runInteractive } = await import('./run-4eArMb_9.mjs');
120
+ const { runInteractive } = await import('./run-D3bhRCCb.mjs');
114
121
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
115
122
  let directory = process.cwd();
116
123
  let resumeSessionId;
@@ -155,7 +162,7 @@ async function handleAgentCommand() {
155
162
  return;
156
163
  }
157
164
  if (agentArgs[0] === "list") {
158
- const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-CF6aXLmA.mjs').then(function (n) { return n.i; });
165
+ const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-C_8iOjO1.mjs').then(function (n) { return n.i; });
159
166
  console.log("Known agents:");
160
167
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
161
168
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -167,7 +174,7 @@ async function handleAgentCommand() {
167
174
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
168
175
  return;
169
176
  }
170
- const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-CF6aXLmA.mjs').then(function (n) { return n.i; });
177
+ const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-C_8iOjO1.mjs').then(function (n) { return n.i; });
171
178
  let cwd = process.cwd();
172
179
  const filteredArgs = [];
173
180
  for (let i = 0; i < agentArgs.length; i++) {
@@ -191,12 +198,12 @@ async function handleAgentCommand() {
191
198
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
192
199
  let backend;
193
200
  if (KNOWN_MCP_AGENTS[config.agentName]) {
194
- const { CodexMcpBackend } = await import('./run-CF6aXLmA.mjs').then(function (n) { return n.j; });
201
+ const { CodexMcpBackend } = await import('./run-C_8iOjO1.mjs').then(function (n) { return n.j; });
195
202
  backend = new CodexMcpBackend({ cwd, log: logFn });
196
203
  } else {
197
- const { AcpBackend } = await import('./run-CF6aXLmA.mjs').then(function (n) { return n.h; });
198
- const { GeminiTransport } = await import('./run-CF6aXLmA.mjs').then(function (n) { return n.G; });
199
- const { DefaultTransport } = await import('./run-CF6aXLmA.mjs').then(function (n) { return n.D; });
204
+ const { AcpBackend } = await import('./run-C_8iOjO1.mjs').then(function (n) { return n.h; });
205
+ const { GeminiTransport } = await import('./run-C_8iOjO1.mjs').then(function (n) { return n.G; });
206
+ const { DefaultTransport } = await import('./run-C_8iOjO1.mjs').then(function (n) { return n.D; });
200
207
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
201
208
  backend = new AcpBackend({
202
209
  agentName: config.agentName,
@@ -314,7 +321,7 @@ async function handleSessionCommand() {
314
321
  printSessionHelp();
315
322
  return;
316
323
  }
317
- const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare } = await import('./commands-SQ0Wp_kD.mjs');
324
+ const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionRalphStart, sessionRalphCancel, sessionRalphStatus, sessionQueueAdd, sessionQueueList, sessionQueueClear } = await import('./commands-Cc73uUnP.mjs');
318
325
  const parseFlagStr = (flag, shortFlag) => {
319
326
  for (let i = 1; i < sessionArgs.length; i++) {
320
327
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -366,7 +373,7 @@ async function handleSessionCommand() {
366
373
  allowDomain.push(sessionArgs[++i]);
367
374
  }
368
375
  }
369
- const { parseShareArg } = await import('./commands-SQ0Wp_kD.mjs');
376
+ const { parseShareArg } = await import('./commands-Cc73uUnP.mjs');
370
377
  const shareEntries = share.map((s) => parseShareArg(s));
371
378
  await sessionSpawn(agent, dir, targetMachineId, {
372
379
  message,
@@ -438,6 +445,51 @@ async function handleSessionCommand() {
438
445
  remove: parseFlagStr("--remove"),
439
446
  list: hasFlag("--list")
440
447
  });
448
+ } else if (sessionSubcommand === "ralph-start" || sessionSubcommand === "ralph") {
449
+ if (!sessionArgs[1] || !sessionArgs[2]) {
450
+ console.error('Usage: svamp session ralph-start <session-id> "<task>" [--completion-promise TEXT] [--max-iterations N]');
451
+ process.exit(1);
452
+ }
453
+ await sessionRalphStart(sessionArgs[1], sessionArgs[2], targetMachineId, {
454
+ completionPromise: parseFlagStr("--completion-promise"),
455
+ maxIterations: parseFlagInt("--max-iterations")
456
+ });
457
+ } else if (sessionSubcommand === "ralph-cancel") {
458
+ if (!sessionArgs[1]) {
459
+ console.error("Usage: svamp session ralph-cancel <session-id>");
460
+ process.exit(1);
461
+ }
462
+ await sessionRalphCancel(sessionArgs[1], targetMachineId);
463
+ } else if (sessionSubcommand === "ralph-status") {
464
+ if (!sessionArgs[1]) {
465
+ console.error("Usage: svamp session ralph-status <session-id>");
466
+ process.exit(1);
467
+ }
468
+ await sessionRalphStatus(sessionArgs[1], targetMachineId);
469
+ } else if (sessionSubcommand === "queue") {
470
+ const queueSubcmd = sessionArgs[1];
471
+ if (queueSubcmd === "add") {
472
+ if (!sessionArgs[2] || !sessionArgs[3]) {
473
+ console.error('Usage: svamp session queue add <session-id> "<message>"');
474
+ process.exit(1);
475
+ }
476
+ await sessionQueueAdd(sessionArgs[2], sessionArgs[3], targetMachineId);
477
+ } else if (queueSubcmd === "list" || queueSubcmd === "ls") {
478
+ if (!sessionArgs[2]) {
479
+ console.error("Usage: svamp session queue list <session-id>");
480
+ process.exit(1);
481
+ }
482
+ await sessionQueueList(sessionArgs[2], targetMachineId);
483
+ } else if (queueSubcmd === "clear") {
484
+ if (!sessionArgs[2]) {
485
+ console.error("Usage: svamp session queue clear <session-id>");
486
+ process.exit(1);
487
+ }
488
+ await sessionQueueClear(sessionArgs[2], targetMachineId);
489
+ } else {
490
+ console.error("Usage: svamp session queue <add|list|clear> <session-id> [args]");
491
+ process.exit(1);
492
+ }
441
493
  } else {
442
494
  console.error(`Unknown session command: ${sessionSubcommand}`);
443
495
  printSessionHelp();
@@ -453,7 +505,7 @@ async function handleMachineCommand() {
453
505
  return;
454
506
  }
455
507
  if (machineSubcommand === "share") {
456
- const { machineShare } = await import('./commands-SQ0Wp_kD.mjs');
508
+ const { machineShare } = await import('./commands-Cc73uUnP.mjs');
457
509
  let machineId;
458
510
  const shareArgs = [];
459
511
  for (let i = 1; i < machineArgs.length; i++) {
@@ -566,7 +618,14 @@ Login successful!`);
566
618
  console.log(`
567
619
  You can now start the daemon: svamp daemon start`);
568
620
  } catch (err) {
569
- console.error("Login failed:", err.message || err);
621
+ const msg = err.message || String(err);
622
+ if (msg.includes("WebSocket is not defined")) {
623
+ console.error(`Login failed: WebSocket is not available in this Node.js version (${process.version}).`);
624
+ console.error(` hypha-rpc requires Node.js >= 22 (which includes native WebSocket support).`);
625
+ console.error(` Please upgrade Node.js: nvm install 22 && nvm use 22`);
626
+ } else {
627
+ console.error("Login failed:", msg);
628
+ }
570
629
  process.exit(1);
571
630
  }
572
631
  }
@@ -890,6 +949,21 @@ Examples:
890
949
  svamp session spawn claude --security-context ./security.json
891
950
  svamp session share abc12345 --add bob@example.com:view
892
951
  svamp session share abc12345 --list
952
+
953
+ Ralph Loop (iterative task loop):
954
+ svamp session ralph-start <id> "<task>" [--completion-promise TEXT] [--max-iterations N]
955
+ Start a Ralph loop
956
+ svamp session ralph-cancel <id> Cancel active Ralph loop
957
+ svamp session ralph-status <id> Show Ralph loop status
958
+
959
+ Message Queue:
960
+ svamp session queue add <id> "<message>" Add message to queue
961
+ svamp session queue list <id> List queued messages
962
+ svamp session queue clear <id> Clear the queue
963
+
964
+ Ralph Loop Examples:
965
+ svamp session ralph-start abc12 "Fix all linting errors" --completion-promise "All linting errors fixed" --max-iterations 10
966
+ svamp session ralph-cancel abc12
893
967
  `);
894
968
  }
895
969
  function printMachineHelp() {