svamp-cli 0.1.42 → 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 (128) hide show
  1. package/dist/cli.mjs +94 -14
  2. package/dist/commands-8Xn02pQg.mjs +1217 -0
  3. package/dist/commands-B53zuBHB.mjs +1217 -0
  4. package/dist/commands-BDVAO_N2.mjs +1217 -0
  5. package/dist/commands-BD_NjWJL.mjs +1217 -0
  6. package/dist/commands-BIFQZZGw.mjs +1375 -0
  7. package/dist/commands-BImRR1Wr.mjs +1217 -0
  8. package/dist/commands-BLmRIMdf.mjs +1217 -0
  9. package/dist/commands-BQ_347V_.mjs +1374 -0
  10. package/dist/commands-BVjcCbWS.mjs +1375 -0
  11. package/dist/commands-BVsLRttq.mjs +1217 -0
  12. package/dist/commands-BdnG1cqQ.mjs +1217 -0
  13. package/dist/commands-BpSUbvmr.mjs +1217 -0
  14. package/dist/commands-BuJ6xTfc.mjs +1217 -0
  15. package/dist/commands-CFv6lO0D.mjs +1217 -0
  16. package/dist/commands-CJ2n5jS2.mjs +1375 -0
  17. package/dist/commands-CKEKQ_5B.mjs +1217 -0
  18. package/dist/commands-CRZbJjqN.mjs +1375 -0
  19. package/dist/commands-CWsfciHn.mjs +1217 -0
  20. package/dist/commands-Cc73uUnP.mjs +1375 -0
  21. package/dist/commands-CdMsAD1-.mjs +1217 -0
  22. package/dist/commands-ClVCprrK.mjs +1217 -0
  23. package/dist/commands-CorUNLRF.mjs +1375 -0
  24. package/dist/commands-Cq0oj5_v.mjs +1217 -0
  25. package/dist/commands-CxSCUJCB.mjs +1217 -0
  26. package/dist/commands-D-PTwdZz.mjs +1217 -0
  27. package/dist/commands-D7kH-7Vn.mjs +1217 -0
  28. package/dist/commands-DD3HXakm.mjs +1217 -0
  29. package/dist/commands-DLoe6FyK.mjs +1375 -0
  30. package/dist/commands-DPbH8KF0.mjs +1217 -0
  31. package/dist/commands-DUAQ9MZM.mjs +1217 -0
  32. package/dist/commands-DVygnMsh.mjs +1217 -0
  33. package/dist/commands-DYTdUlul.mjs +1217 -0
  34. package/dist/commands-DZfaDmsk.mjs +1374 -0
  35. package/dist/commands-DuJGOq1y.mjs +1217 -0
  36. package/dist/commands-SQ0Wp_kD.mjs +1217 -0
  37. package/dist/commands-Z-CbuF8E.mjs +1217 -0
  38. package/dist/commands-mC0oe0lj.mjs +1217 -0
  39. package/dist/commands-zGHnUXh5.mjs +1217 -0
  40. package/dist/index.mjs +1 -1
  41. package/dist/package-BufekbY1.mjs +57 -0
  42. package/dist/package-C1hpYMj4.mjs +57 -0
  43. package/dist/package-CmIBOZtY.mjs +57 -0
  44. package/dist/package-CmVt1kdw.mjs +58 -0
  45. package/dist/package-Cn6Ya4A0.mjs +57 -0
  46. package/dist/package-Csd530Ym.mjs +57 -0
  47. package/dist/package-DRO1LpXW.mjs +58 -0
  48. package/dist/package-Dav8qh6X.mjs +57 -0
  49. package/dist/package-DiA55dzE.mjs +57 -0
  50. package/dist/package-UwLIU765.mjs +58 -0
  51. package/dist/package-rasGC9_z.mjs +58 -0
  52. package/dist/run-4eArMb_9.mjs +1050 -0
  53. package/dist/run-67wfoMuo.mjs +5383 -0
  54. package/dist/run-6N2IdEX7.mjs +5410 -0
  55. package/dist/run-7iQKryzo.mjs +5383 -0
  56. package/dist/run-7s8lOXqB.mjs +1050 -0
  57. package/dist/run-B1l9Ed8k.mjs +5403 -0
  58. package/dist/run-B2zRMxE0.mjs +5508 -0
  59. package/dist/run-B31biy0V.mjs +1050 -0
  60. package/dist/run-B7V-xXM7.mjs +5775 -0
  61. package/dist/run-BKdOv7gX.mjs +1050 -0
  62. package/dist/run-BQ0lIare.mjs +1050 -0
  63. package/dist/run-BREPr7Yc.mjs +5508 -0
  64. package/dist/run-BTwshVk1.mjs +5728 -0
  65. package/dist/run-BUL3eAqT.mjs +1050 -0
  66. package/dist/run-BWsDPiNe.mjs +1050 -0
  67. package/dist/run-BX4iy6k8.mjs +1050 -0
  68. package/dist/run-BXYfq8mK.mjs +5836 -0
  69. package/dist/run-BY12Ataq.mjs +5732 -0
  70. package/dist/run-BYDOX4yk.mjs +5402 -0
  71. package/dist/run-BfF4bgA3.mjs +5403 -0
  72. package/dist/run-BieEN0Pg.mjs +5761 -0
  73. package/dist/run-BjEQi6PN.mjs +1050 -0
  74. package/dist/run-BlEFlhfn.mjs +5510 -0
  75. package/dist/run-BnX5Rw8x.mjs +5403 -0
  76. package/dist/run-C1lS3SwN.mjs +5733 -0
  77. package/dist/run-C3eaYQub.mjs +1050 -0
  78. package/dist/run-C676pHe-.mjs +5423 -0
  79. package/dist/run-C9Hrqjy_.mjs +1050 -0
  80. package/dist/run-CCcW4asS.mjs +1050 -0
  81. package/dist/run-CF6aXLmA.mjs +5445 -0
  82. package/dist/run-CHyN5U0t.mjs +1050 -0
  83. package/dist/run-COWb9ovq.mjs +1050 -0
  84. package/dist/run-CSk7i0Hq.mjs +1050 -0
  85. package/dist/run-CUtqSGWJ.mjs +1050 -0
  86. package/dist/run-CZj0sRCs.mjs +1050 -0
  87. package/dist/run-C_8iOjO1.mjs +5892 -0
  88. package/dist/run-CbzXO7fw.mjs +1050 -0
  89. package/dist/run-CuckJGM-.mjs +1050 -0
  90. package/dist/run-CxGAa9MH.mjs +1050 -0
  91. package/dist/run-CyU4-O-e.mjs +5411 -0
  92. package/dist/run-D0Ha4aWt.mjs +1050 -0
  93. package/dist/run-D39C7Ta3.mjs +1050 -0
  94. package/dist/run-D3bhRCCb.mjs +1051 -0
  95. package/dist/run-D7dLDpq3.mjs +5403 -0
  96. package/dist/run-DCINWip4.mjs +1050 -0
  97. package/dist/run-DCrZ3vke.mjs +5406 -0
  98. package/dist/run-DGSgljJE.mjs +5421 -0
  99. package/dist/run-DGsXW19O.mjs +5541 -0
  100. package/dist/run-DHrF2xpW.mjs +5776 -0
  101. package/dist/run-DIB0W42M.mjs +1050 -0
  102. package/dist/run-DJ4k0WzZ.mjs +1051 -0
  103. package/dist/run-DMI83W7i.mjs +5434 -0
  104. package/dist/run-DNX3djCI.mjs +1050 -0
  105. package/dist/run-DTkldU6a.mjs +1050 -0
  106. package/dist/run-DU10B3gK.mjs +5728 -0
  107. package/dist/run-DV86VJNG.mjs +5386 -0
  108. package/dist/run-DVZGKdKO.mjs +1050 -0
  109. package/dist/run-DXJ2M19k.mjs +1050 -0
  110. package/dist/run-DZOeccNu.mjs +5484 -0
  111. package/dist/run-DaYrEeQ9.mjs +5400 -0
  112. package/dist/run-DbC9-WM4.mjs +1050 -0
  113. package/dist/run-De-wkVl3.mjs +5487 -0
  114. package/dist/run-Dfl3Ze2L.mjs +5541 -0
  115. package/dist/run-Dge2K7h1.mjs +1050 -0
  116. package/dist/run-Du0YOs48.mjs +5446 -0
  117. package/dist/run-DuaIQAE4.mjs +5392 -0
  118. package/dist/run-DxM7xaBa.mjs +1050 -0
  119. package/dist/run-DysN-cGm.mjs +1050 -0
  120. package/dist/run-HhiYlJuS.mjs +5414 -0
  121. package/dist/run-JXLlRLFb.mjs +1050 -0
  122. package/dist/run-LDiT4WF-.mjs +1050 -0
  123. package/dist/run-NToLJWx-.mjs +5442 -0
  124. package/dist/run-azpFWM6w.mjs +1050 -0
  125. package/dist/run-r9CAcL_U.mjs +5403 -0
  126. package/dist/run-w-HVv5py.mjs +5410 -0
  127. package/dist/run-zo5GSoVC.mjs +1050 -0
  128. package/package.json +3 -2
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-YG1Pb9dY.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,13 +19,24 @@ 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
- const daemonSubcommand = args[1];
31
+ let daemonSubcommand = args[1];
25
32
  async function main() {
26
33
  if (subcommand === "login") {
27
34
  await loginToHypha();
28
35
  } else if (subcommand === "daemon") {
36
+ if (daemonSubcommand === "restart") {
37
+ await stopDaemon();
38
+ daemonSubcommand = "start";
39
+ }
29
40
  if (daemonSubcommand === "start") {
30
41
  const { spawn } = await import('child_process');
31
42
  const extraArgs = [];
@@ -97,7 +108,7 @@ async function main() {
97
108
  } else if (!subcommand || subcommand === "start") {
98
109
  await handleInteractiveCommand();
99
110
  } else if (subcommand === "--version" || subcommand === "-v") {
100
- const pkg = await import('./package-BPMWPlS0.mjs').catch(() => ({ default: { version: "unknown" } }));
111
+ const pkg = await import('./package-rasGC9_z.mjs').catch(() => ({ default: { version: "unknown" } }));
101
112
  console.log(`svamp version: ${pkg.default.version}`);
102
113
  } else {
103
114
  console.error(`Unknown command: ${subcommand}`);
@@ -106,7 +117,7 @@ async function main() {
106
117
  }
107
118
  }
108
119
  async function handleInteractiveCommand() {
109
- const { runInteractive } = await import('./run-Di3I0USw.mjs');
120
+ const { runInteractive } = await import('./run-D3bhRCCb.mjs');
110
121
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
111
122
  let directory = process.cwd();
112
123
  let resumeSessionId;
@@ -151,7 +162,7 @@ async function handleAgentCommand() {
151
162
  return;
152
163
  }
153
164
  if (agentArgs[0] === "list") {
154
- const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-YG1Pb9dY.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; });
155
166
  console.log("Known agents:");
156
167
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
157
168
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -163,7 +174,7 @@ async function handleAgentCommand() {
163
174
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
164
175
  return;
165
176
  }
166
- const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-YG1Pb9dY.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; });
167
178
  let cwd = process.cwd();
168
179
  const filteredArgs = [];
169
180
  for (let i = 0; i < agentArgs.length; i++) {
@@ -187,12 +198,12 @@ async function handleAgentCommand() {
187
198
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
188
199
  let backend;
189
200
  if (KNOWN_MCP_AGENTS[config.agentName]) {
190
- const { CodexMcpBackend } = await import('./run-YG1Pb9dY.mjs').then(function (n) { return n.j; });
201
+ const { CodexMcpBackend } = await import('./run-C_8iOjO1.mjs').then(function (n) { return n.j; });
191
202
  backend = new CodexMcpBackend({ cwd, log: logFn });
192
203
  } else {
193
- const { AcpBackend } = await import('./run-YG1Pb9dY.mjs').then(function (n) { return n.h; });
194
- const { GeminiTransport } = await import('./run-YG1Pb9dY.mjs').then(function (n) { return n.G; });
195
- const { DefaultTransport } = await import('./run-YG1Pb9dY.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; });
196
207
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
197
208
  backend = new AcpBackend({
198
209
  agentName: config.agentName,
@@ -310,7 +321,7 @@ async function handleSessionCommand() {
310
321
  printSessionHelp();
311
322
  return;
312
323
  }
313
- const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare } = await import('./commands-CwC2aVzu.mjs');
324
+ const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionRalphStart, sessionRalphCancel, sessionRalphStatus, sessionQueueAdd, sessionQueueList, sessionQueueClear } = await import('./commands-Cc73uUnP.mjs');
314
325
  const parseFlagStr = (flag, shortFlag) => {
315
326
  for (let i = 1; i < sessionArgs.length; i++) {
316
327
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -362,7 +373,7 @@ async function handleSessionCommand() {
362
373
  allowDomain.push(sessionArgs[++i]);
363
374
  }
364
375
  }
365
- const { parseShareArg } = await import('./commands-CwC2aVzu.mjs');
376
+ const { parseShareArg } = await import('./commands-Cc73uUnP.mjs');
366
377
  const shareEntries = share.map((s) => parseShareArg(s));
367
378
  await sessionSpawn(agent, dir, targetMachineId, {
368
379
  message,
@@ -434,6 +445,51 @@ async function handleSessionCommand() {
434
445
  remove: parseFlagStr("--remove"),
435
446
  list: hasFlag("--list")
436
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
+ }
437
493
  } else {
438
494
  console.error(`Unknown session command: ${sessionSubcommand}`);
439
495
  printSessionHelp();
@@ -449,7 +505,7 @@ async function handleMachineCommand() {
449
505
  return;
450
506
  }
451
507
  if (machineSubcommand === "share") {
452
- const { machineShare } = await import('./commands-CwC2aVzu.mjs');
508
+ const { machineShare } = await import('./commands-Cc73uUnP.mjs');
453
509
  let machineId;
454
510
  const shareArgs = [];
455
511
  for (let i = 1; i < machineArgs.length; i++) {
@@ -562,7 +618,14 @@ Login successful!`);
562
618
  console.log(`
563
619
  You can now start the daemon: svamp daemon start`);
564
620
  } catch (err) {
565
- 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
+ }
566
629
  process.exit(1);
567
630
  }
568
631
  }
@@ -792,6 +855,7 @@ Usage:
792
855
  svamp login [url] Login to Hypha (opens browser, stores token)
793
856
  svamp daemon start Start the daemon (detached)
794
857
  svamp daemon stop Stop the daemon (sessions preserved for restart)
858
+ svamp daemon restart Restart the daemon (sessions resume seamlessly)
795
859
  svamp daemon status Show daemon status
796
860
  svamp daemon install Install as system service (launchd/systemd/wrapper)
797
861
  svamp session list List active sessions
@@ -829,6 +893,7 @@ Usage:
829
893
  svamp daemon start --no-auto-continue Start without auto-continuing interrupted sessions
830
894
  svamp daemon stop Stop the daemon (sessions preserved for restart)
831
895
  svamp daemon stop --cleanup Stop and mark all sessions as stopped
896
+ svamp daemon restart Restart daemon (sessions resume seamlessly)
832
897
  svamp daemon status Show daemon status
833
898
  svamp daemon install Install as launchd service (macOS) \u2014 auto-restart on crash
834
899
  svamp daemon uninstall Remove launchd service
@@ -884,6 +949,21 @@ Examples:
884
949
  svamp session spawn claude --security-context ./security.json
885
950
  svamp session share abc12345 --add bob@example.com:view
886
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
887
967
  `);
888
968
  }
889
969
  function printMachineHelp() {