svamp-cli 0.1.27 → 0.1.29

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.
@@ -1,5 +1,5 @@
1
1
  import { Command } from 'commander';
2
- import { connectAndGetMachine, resolveSessionId } from './commands-BOeSil-P.mjs';
2
+ import { connectAndGetMachine, resolveSessionId } from './commands-DDB3y1L1.mjs';
3
3
  import 'node:fs';
4
4
  import 'node:path';
5
5
  import 'node:os';
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-Cmostc0S.mjs';
1
+ import { s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-BCSNMhiz.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -6,12 +6,18 @@ import 'path';
6
6
  import 'url';
7
7
  import 'child_process';
8
8
  import 'crypto';
9
- import './hyphaClient-DLkclazm.mjs';
10
9
  import 'node:crypto';
11
10
  import 'node:fs';
12
11
  import 'node:path';
13
12
  import 'node:child_process';
14
13
  import '@agentclientprotocol/sdk';
14
+ import 'node:os';
15
+ import '@modelcontextprotocol/sdk/client/index.js';
16
+ import '@modelcontextprotocol/sdk/client/stdio.js';
17
+ import '@modelcontextprotocol/sdk/types.js';
18
+ import 'zod';
19
+ import 'node:fs/promises';
20
+ import 'node:util';
15
21
 
16
22
  const args = process.argv.slice(2);
17
23
  const subcommand = args[0];
@@ -61,7 +67,8 @@ async function main() {
61
67
  await startDaemon();
62
68
  process.exit(0);
63
69
  } else if (daemonSubcommand === "stop") {
64
- await stopDaemon();
70
+ const cleanup = args.includes("--cleanup");
71
+ await stopDaemon({ cleanup });
65
72
  process.exit(0);
66
73
  } else if (daemonSubcommand === "status") {
67
74
  daemonStatus();
@@ -82,7 +89,7 @@ async function main() {
82
89
  } else if (subcommand === "--help" || subcommand === "-h" || !subcommand) {
83
90
  printHelp();
84
91
  } else if (subcommand === "--version" || subcommand === "-v") {
85
- const pkg = await import('./package-CCJ045H0.mjs').catch(() => ({ default: { version: "unknown" } }));
92
+ const pkg = await import('./package-CKOQ5lA7.mjs').catch(() => ({ default: { version: "unknown" } }));
86
93
  console.log(`svamp version: ${pkg.default.version}`);
87
94
  } else {
88
95
  console.error(`Unknown command: ${subcommand}`);
@@ -97,7 +104,7 @@ async function handleAgentCommand() {
97
104
  return;
98
105
  }
99
106
  if (agentArgs[0] === "list") {
100
- const { KNOWN_ACP_AGENTS } = await import('./run-Cmostc0S.mjs').then(function (n) { return n.e; });
107
+ const { KNOWN_ACP_AGENTS } = await import('./run-BCSNMhiz.mjs').then(function (n) { return n.f; });
101
108
  console.log("Known ACP agents:");
102
109
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
103
110
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")}`);
@@ -106,10 +113,10 @@ async function handleAgentCommand() {
106
113
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
107
114
  return;
108
115
  }
109
- const { resolveAcpAgentConfig } = await import('./run-Cmostc0S.mjs').then(function (n) { return n.e; });
110
- const { AcpBackend } = await import('./run-Cmostc0S.mjs').then(function (n) { return n.c; });
111
- const { GeminiTransport } = await import('./run-Cmostc0S.mjs').then(function (n) { return n.G; });
112
- const { DefaultTransport } = await import('./run-Cmostc0S.mjs').then(function (n) { return n.D; });
116
+ const { resolveAcpAgentConfig } = await import('./run-BCSNMhiz.mjs').then(function (n) { return n.f; });
117
+ const { AcpBackend } = await import('./run-BCSNMhiz.mjs').then(function (n) { return n.e; });
118
+ const { GeminiTransport } = await import('./run-BCSNMhiz.mjs').then(function (n) { return n.G; });
119
+ const { DefaultTransport } = await import('./run-BCSNMhiz.mjs').then(function (n) { return n.D; });
113
120
  let cwd = process.cwd();
114
121
  const filteredArgs = [];
115
122
  for (let i = 0; i < agentArgs.length; i++) {
@@ -232,15 +239,45 @@ Agent stopped: ${msg.detail || ""}`);
232
239
  });
233
240
  }
234
241
  async function handleSessionCommand() {
235
- const sessionArgs = args.slice(1);
242
+ const rawSessionArgs = args.slice(1);
243
+ let targetMachineId;
244
+ const sessionArgs = [];
245
+ for (let i = 0; i < rawSessionArgs.length; i++) {
246
+ if ((rawSessionArgs[i] === "--machine" || rawSessionArgs[i] === "-m") && i + 1 < rawSessionArgs.length) {
247
+ targetMachineId = rawSessionArgs[i + 1];
248
+ i++;
249
+ } else {
250
+ sessionArgs.push(rawSessionArgs[i]);
251
+ }
252
+ }
236
253
  const sessionSubcommand = sessionArgs[0];
237
254
  if (!sessionSubcommand || sessionSubcommand === "--help" || sessionSubcommand === "-h") {
238
255
  printSessionHelp();
239
256
  return;
240
257
  }
241
- const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach } = await import('./commands-BOeSil-P.mjs');
242
- if (sessionSubcommand === "list" || sessionSubcommand === "ls") {
243
- await sessionList();
258
+ const { sessionList, sessionSpawn, sessionStop, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait } = await import('./commands-CtO1WRt4.mjs');
259
+ const parseFlagStr = (flag, shortFlag) => {
260
+ for (let i = 1; i < sessionArgs.length; i++) {
261
+ if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
262
+ return sessionArgs[i + 1];
263
+ }
264
+ }
265
+ return void 0;
266
+ };
267
+ const parseFlagInt = (flag, shortFlag) => {
268
+ const v = parseFlagStr(flag, shortFlag);
269
+ if (v === void 0) return void 0;
270
+ const n = parseInt(v, 10);
271
+ return isNaN(n) ? void 0 : n;
272
+ };
273
+ const hasFlag = (flag) => sessionArgs.includes(flag);
274
+ if (sessionSubcommand === "machines" || sessionSubcommand === "machine") {
275
+ await sessionMachines();
276
+ } else if (sessionSubcommand === "list" || sessionSubcommand === "ls") {
277
+ await sessionList(targetMachineId, {
278
+ active: hasFlag("--active"),
279
+ json: hasFlag("--json")
280
+ });
244
281
  } else if (sessionSubcommand === "spawn") {
245
282
  const agent = sessionArgs[1] || "claude";
246
283
  let dir = process.cwd();
@@ -250,36 +287,58 @@ async function handleSessionCommand() {
250
287
  i++;
251
288
  }
252
289
  }
253
- await sessionSpawn(agent, dir);
290
+ const message = parseFlagStr("--message");
291
+ const wait = hasFlag("--wait");
292
+ await sessionSpawn(agent, dir, targetMachineId, { message, wait });
254
293
  } else if (sessionSubcommand === "stop") {
255
294
  if (!sessionArgs[1]) {
256
295
  console.error("Usage: svamp session stop <session-id>");
257
296
  process.exit(1);
258
297
  }
259
- await sessionStop(sessionArgs[1]);
298
+ await sessionStop(sessionArgs[1], targetMachineId);
260
299
  } else if (sessionSubcommand === "info") {
261
300
  if (!sessionArgs[1]) {
262
301
  console.error("Usage: svamp session info <session-id>");
263
302
  process.exit(1);
264
303
  }
265
- await sessionInfo(sessionArgs[1]);
304
+ await sessionInfo(sessionArgs[1], targetMachineId, {
305
+ json: hasFlag("--json")
306
+ });
266
307
  } else if (sessionSubcommand === "messages" || sessionSubcommand === "msgs") {
267
308
  if (!sessionArgs[1]) {
268
- console.error("Usage: svamp session messages <session-id> [--last N]");
309
+ console.error("Usage: svamp session messages <session-id> [--last N] [--json] [--after N] [--limit N]");
269
310
  process.exit(1);
270
311
  }
271
- let last;
272
- const lastIdx = sessionArgs.indexOf("--last");
273
- if (lastIdx >= 0 && sessionArgs[lastIdx + 1]) {
274
- last = parseInt(sessionArgs[lastIdx + 1], 10);
275
- }
276
- await sessionMessages(sessionArgs[1], last);
312
+ await sessionMessages(sessionArgs[1], targetMachineId, {
313
+ last: parseFlagInt("--last"),
314
+ json: hasFlag("--json"),
315
+ after: parseFlagInt("--after"),
316
+ limit: parseFlagInt("--limit")
317
+ });
277
318
  } else if (sessionSubcommand === "attach") {
278
319
  if (!sessionArgs[1]) {
279
320
  console.error("Usage: svamp session attach <session-id>");
280
321
  process.exit(1);
281
322
  }
282
- await sessionAttach(sessionArgs[1]);
323
+ await sessionAttach(sessionArgs[1], targetMachineId);
324
+ } else if (sessionSubcommand === "send") {
325
+ if (!sessionArgs[1] || !sessionArgs[2]) {
326
+ console.error("Usage: svamp session send <session-id> <message> [--wait] [--timeout N] [--json]");
327
+ process.exit(1);
328
+ }
329
+ await sessionSend(sessionArgs[1], sessionArgs[2], targetMachineId, {
330
+ wait: hasFlag("--wait"),
331
+ timeout: parseFlagInt("--timeout"),
332
+ json: hasFlag("--json")
333
+ });
334
+ } else if (sessionSubcommand === "wait") {
335
+ if (!sessionArgs[1]) {
336
+ console.error("Usage: svamp session wait <session-id> [--timeout N]");
337
+ process.exit(1);
338
+ }
339
+ await sessionWait(sessionArgs[1], targetMachineId, {
340
+ timeout: parseFlagInt("--timeout")
341
+ });
283
342
  } else {
284
343
  console.error(`Unknown session command: ${sessionSubcommand}`);
285
344
  printSessionHelp();
@@ -591,11 +650,13 @@ svamp \u2014 Svamp CLI with Hypha transport
591
650
  Usage:
592
651
  svamp login [url] Login to Hypha (opens browser, stores token)
593
652
  svamp daemon start Start the daemon (detached)
594
- svamp daemon stop Stop the daemon
653
+ svamp daemon stop Stop the daemon (sessions preserved for restart)
654
+ svamp daemon stop --cleanup Stop and mark all sessions as stopped
595
655
  svamp daemon status Show daemon status
596
656
  svamp daemon install Install as system service (launchd/systemd/wrapper)
597
657
  svamp daemon uninstall Remove system service
598
658
  svamp session list List active daemon sessions
659
+ svamp session machines List discoverable machines
599
660
  svamp session spawn Spawn a new session on the daemon
600
661
  svamp session attach <id> Attach to a session (interactive)
601
662
  svamp session --help Show all session commands
@@ -618,11 +679,12 @@ function printDaemonHelp() {
618
679
  svamp daemon \u2014 Daemon management
619
680
 
620
681
  Usage:
621
- svamp daemon start Start the daemon (detached)
622
- svamp daemon stop Stop the daemon
623
- svamp daemon status Show daemon status
624
- svamp daemon install Install as launchd service (macOS) \u2014 auto-restart on crash
625
- svamp daemon uninstall Remove launchd service
682
+ svamp daemon start Start the daemon (detached)
683
+ svamp daemon stop Stop the daemon (sessions preserved for restart)
684
+ svamp daemon stop --cleanup Stop and mark all sessions as stopped
685
+ svamp daemon status Show daemon status
686
+ svamp daemon install Install as launchd service (macOS) \u2014 auto-restart on crash
687
+ svamp daemon uninstall Remove launchd service
626
688
  `);
627
689
  }
628
690
  function printSessionHelp() {
@@ -630,16 +692,25 @@ function printSessionHelp() {
630
692
  svamp session \u2014 Manage daemon sessions (Claude, Gemini, OpenCode)
631
693
 
632
694
  Usage:
633
- svamp session list List active sessions
634
- svamp session spawn <agent> [-d <path>] Spawn a new session
635
- svamp session stop <id> Stop a session
636
- svamp session info <id> Show session metadata
637
- svamp session messages <id> [--last N] Dump recent messages
638
- svamp session attach <id> Attach to session (interactive)
695
+ svamp session list [--active] [--json] List sessions (alias: ls)
696
+ svamp session machines List discoverable machines
697
+ svamp session spawn <agent> [-d <path>] [--message <msg>] [--wait]
698
+ Spawn a new session
699
+ svamp session stop <id> Stop a session
700
+ svamp session info <id> [--json] Show session metadata + activity
701
+ svamp session send <id> <message> [--wait] [--timeout N] [--json]
702
+ Send a message to a session
703
+ svamp session wait <id> [--timeout N] Wait for agent to become idle
704
+ svamp session messages <id> [--last N] [--json] [--after N] [--limit N]
705
+ Show messages (alias: msgs)
706
+ svamp session attach <id> Attach to session (interactive)
707
+
708
+ Options:
709
+ --machine <id>, -m <id> Target a specific machine (prefix match supported)
639
710
 
640
711
  Agents: claude (default), gemini, opencode
641
712
 
642
- Session IDs can be abbreviated (prefix match, like Docker).
713
+ Session and machine IDs can be abbreviated (prefix match, like Docker).
643
714
 
644
715
  Attach commands:
645
716
  /quit, /detach Detach (session keeps running)
@@ -648,11 +719,12 @@ Attach commands:
648
719
  /info Show session status
649
720
 
650
721
  Examples:
651
- svamp session list
652
- svamp session spawn claude -d ~/projects/myapp
653
- svamp session spawn gemini
654
- svamp session info abc12345
655
- svamp session messages abc12345 --last 10
722
+ svamp session list --active --json
723
+ svamp session spawn claude -d ~/projects/myapp --message "Fix the bug" --wait
724
+ svamp session send abc12345 "Run the tests" --wait --timeout 600
725
+ svamp session wait abc12345 --timeout 120
726
+ svamp session info abc12345 --json
727
+ svamp session messages abc12345 --last 10 --json
656
728
  svamp session attach abc12345
657
729
  `);
658
730
  }