svamp-cli 0.2.305 → 0.2.307

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 (29) hide show
  1. package/dist/{adminCommands-DlD78CYk.mjs → adminCommands-DZ9MECkY.mjs} +1 -1
  2. package/dist/{agentCommands-B3FTfsg-.mjs → agentCommands-D68wBf-y.mjs} +5 -5
  3. package/dist/{auth-2-M7wMHL.mjs → auth-DDgr4YFE.mjs} +1 -1
  4. package/dist/{cli-CoQ_iSxW.mjs → cli-Bk6IPB9M.mjs} +76 -70
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-CfSAnB1T.mjs → commands-Bl9AtWkD.mjs} +2 -2
  7. package/dist/{commands-CjZKWU9a.mjs → commands-BlIR3KBq.mjs} +2 -2
  8. package/dist/{commands-HncLAND-.mjs → commands-CESl13XD.mjs} +2 -2
  9. package/dist/{commands--WPYI2sm.mjs → commands-CJVqMnNf.mjs} +1 -1
  10. package/dist/{commands-mm9jZg5L.mjs → commands-DJwSJOPD.mjs} +1 -1
  11. package/dist/{commands-CaeLSCaX.mjs → commands-Dh2S9Gf1.mjs} +1 -1
  12. package/dist/{commands-CG6AF59l.mjs → commands-DsfIIri_.mjs} +7 -7
  13. package/dist/{commands-BO-oHKFw.mjs → commands-rGFSTXKu.mjs} +2 -2
  14. package/dist/{fleet-GklB5DQn.mjs → fleet-okzhGLEY.mjs} +1 -1
  15. package/dist/{frpc-Dsada5ox.mjs → frpc-NDcBtpwa.mjs} +30 -6
  16. package/dist/{headlessCli-B2IWICNI.mjs → headlessCli-BkU5B5Jp.mjs} +2 -2
  17. package/dist/{httpServer-CSMZTpoh.mjs → httpServer-1XjB2h3K.mjs} +15 -2
  18. package/dist/index.mjs +1 -1
  19. package/dist/{notifyCommands-BzCPoBy8.mjs → notifyCommands-Oh0kvQgj.mjs} +1 -1
  20. package/dist/package-k1G6ygGP.mjs +64 -0
  21. package/dist/{rpc-DOVHyr_6.mjs → rpc-DSyBSuTF.mjs} +2 -1
  22. package/dist/{rpc--eK356Xz.mjs → rpc-K5xzddMF.mjs} +1 -1
  23. package/dist/{run-IqHyd8bA.mjs → run-09G0RL2B.mjs} +1 -1
  24. package/dist/{run-BtVKqoF4.mjs → run-DYVmYsvg.mjs} +861 -378
  25. package/dist/{scheduler-DAkzJVgr.mjs → scheduler-CtKlSyIq.mjs} +1 -1
  26. package/dist/{serveCommands-AEtGwfIU.mjs → serveCommands-BnOmV2Z3.mjs} +6 -6
  27. package/dist/{sideband-CSwHDjzp.mjs → sideband-CdJ0O6L6.mjs} +1 -1
  28. package/package.json +2 -2
  29. package/dist/package-DcJpavob.mjs +0 -64
@@ -1,4 +1,4 @@
1
- import { c as connectToHypha, K as computeCollectionConfigUpdate, L as SYSTEM_COLLECTION_CONFIG } from './run-BtVKqoF4.mjs';
1
+ import { c as connectToHypha, L as computeCollectionConfigUpdate, M as SYSTEM_COLLECTION_CONFIG } from './run-DYVmYsvg.mjs';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import os from 'node:os';
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync } from '
2
2
  import { join, dirname } from 'node:path';
3
3
  import os from 'node:os';
4
4
  import { requireNotSandboxed } from './sandboxDetect-DNTcbgWD.mjs';
5
- import { i as shortId } from './run-BtVKqoF4.mjs';
5
+ import { i as shortId } from './run-DYVmYsvg.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -96,7 +96,7 @@ async function sessionSetTitle(title) {
96
96
  }
97
97
  async function sessionSetProjectDescription(description) {
98
98
  const dir = process.cwd();
99
- const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.ap; });
99
+ const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.aq; });
100
100
  const desc = sanitizeDescription(description, 240);
101
101
  if (!desc) {
102
102
  console.error("Project description is empty.");
@@ -343,7 +343,7 @@ async function sessionBroadcast(action, args) {
343
343
  console.log(`Broadcast sent: ${action}`);
344
344
  }
345
345
  async function connectToMachineService() {
346
- const { connectAndGetMachine } = await import('./commands--WPYI2sm.mjs');
346
+ const { connectAndGetMachine } = await import('./commands-CJVqMnNf.mjs');
347
347
  return connectAndGetMachine();
348
348
  }
349
349
  function buildInboxMessage(args) {
@@ -426,7 +426,7 @@ async function inboxSend(targetSessionId, opts) {
426
426
  console.error("Message body is required.");
427
427
  process.exit(1);
428
428
  }
429
- const { connectAndResolveSession } = await import('./commands--WPYI2sm.mjs');
429
+ const { connectAndResolveSession } = await import('./commands-CJVqMnNf.mjs');
430
430
  let server;
431
431
  try {
432
432
  const { targetId, messageId } = await inboxSendCore(
@@ -481,7 +481,7 @@ async function inboxReply(messageId, body, opts) {
481
481
  console.error("SVAMP_SESSION_ID not set. This command must be run inside a Svamp session.");
482
482
  process.exit(1);
483
483
  }
484
- const { connectAndResolveSession } = await import('./commands--WPYI2sm.mjs');
484
+ const { connectAndResolveSession } = await import('./commands-CJVqMnNf.mjs');
485
485
  const { server: localServer, machine: localMachine } = await connectToMachineService();
486
486
  let localDisconnected = false;
487
487
  const disconnectLocal = async () => {
@@ -1,4 +1,4 @@
1
- import { a0 as resolveModel } from './run-BtVKqoF4.mjs';
1
+ import { a1 as resolveModel } from './run-DYVmYsvg.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { a1 as clearStopMarker, a2 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-BtVKqoF4.mjs';
1
+ import { a2 as clearStopMarker, a3 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-DYVmYsvg.mjs';
2
2
  import { ensureSupervisorViaServiceManager, LAUNCHD_LABEL } from './serviceManager-hlOVxkhW.mjs';
3
3
 
4
4
  function flushAndExit(code) {
@@ -33,7 +33,7 @@ const subcommand = args[0];
33
33
  let daemonSubcommand = args[1];
34
34
  async function main() {
35
35
  try {
36
- const { getLoadedConfig } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.am; });
36
+ const { getLoadedConfig } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.an; });
37
37
  getLoadedConfig();
38
38
  } catch {
39
39
  }
@@ -52,7 +52,7 @@ async function main() {
52
52
  }
53
53
  const whenIdle = args.includes("--when-idle");
54
54
  const force = args.includes("--force");
55
- const mod = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.aw; });
55
+ const mod = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.ax; });
56
56
  if (whenIdle && !force) {
57
57
  if (mod.isDaemonAlive()) {
58
58
  mod.writePendingRestart({ reason: "svamp daemon restart --when-idle" });
@@ -356,7 +356,7 @@ async function main() {
356
356
  console.error("svamp service: Service commands are not available in sandboxed sessions.");
357
357
  process.exit(1);
358
358
  }
359
- const { handleServiceCommand } = await import('./commands-CG6AF59l.mjs');
359
+ const { handleServiceCommand } = await import('./commands-DsfIIri_.mjs');
360
360
  await handleServiceCommand();
361
361
  } else if (subcommand === "serve") {
362
362
  const { isSandboxed: isSandboxedServe } = await import('./sandboxDetect-DNTcbgWD.mjs');
@@ -364,7 +364,7 @@ async function main() {
364
364
  console.error("svamp serve: Serve commands are not available in sandboxed sessions.");
365
365
  process.exit(1);
366
366
  }
367
- const { handleServeCommand } = await import('./serveCommands-AEtGwfIU.mjs');
367
+ const { handleServeCommand } = await import('./serveCommands-BnOmV2Z3.mjs');
368
368
  await handleServeCommand();
369
369
  process.exit(0);
370
370
  } else if (subcommand === "process" || subcommand === "proc") {
@@ -373,7 +373,7 @@ async function main() {
373
373
  console.error("svamp process: Process commands are not available in sandboxed sessions.");
374
374
  process.exit(1);
375
375
  }
376
- const { processCommand } = await import('./commands-CfSAnB1T.mjs');
376
+ const { processCommand } = await import('./commands-Bl9AtWkD.mjs');
377
377
  let machineId;
378
378
  const processArgs = args.slice(1);
379
379
  const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
@@ -387,26 +387,26 @@ async function main() {
387
387
  }), machineId);
388
388
  process.exit(0);
389
389
  } else if (subcommand === "outpost") {
390
- const { outpostCommand } = await import('./commands-CjZKWU9a.mjs');
390
+ const { outpostCommand } = await import('./commands-BlIR3KBq.mjs');
391
391
  await outpostCommand(args.slice(1));
392
392
  process.exit(0);
393
393
  } else if (subcommand === "issue" || subcommand === "issues") {
394
- const { issueCommand } = await import('./commands-HncLAND-.mjs');
394
+ const { issueCommand } = await import('./commands-CESl13XD.mjs');
395
395
  await issueCommand(args.slice(1));
396
396
  await flushAndExit(0);
397
397
  } else if (subcommand === "workflow" || subcommand === "workflows") {
398
- const { workflowCommand } = await import('./commands-CaeLSCaX.mjs');
398
+ const { workflowCommand } = await import('./commands-Dh2S9Gf1.mjs');
399
399
  await workflowCommand(args.slice(1));
400
400
  await flushAndExit(0);
401
401
  } else if (subcommand === "wise-agent" || subcommand === "wise") {
402
402
  await handleWiseAgentCommand(args.slice(1));
403
403
  process.exit(0);
404
404
  } else if (subcommand === "feature" || subcommand === "crew") {
405
- const { crewCommand } = await import('./commands-BO-oHKFw.mjs');
405
+ const { crewCommand } = await import('./commands-rGFSTXKu.mjs');
406
406
  await crewCommand(args.slice(1));
407
407
  process.exit(0);
408
408
  } else if (subcommand === "notify") {
409
- const { notifyUser } = await import('./notifyCommands-BzCPoBy8.mjs');
409
+ const { notifyUser } = await import('./notifyCommands-Oh0kvQgj.mjs');
410
410
  const rest = args.slice(1);
411
411
  let email;
412
412
  const o = {};
@@ -423,7 +423,7 @@ async function main() {
423
423
  } else if (subcommand === "admin") {
424
424
  const adminSub = args[1];
425
425
  if (adminSub === "set-collection-config") {
426
- const { setCollectionConfig } = await import('./adminCommands-DlD78CYk.mjs');
426
+ const { setCollectionConfig } = await import('./adminCommands-DZ9MECkY.mjs');
427
427
  const rest = args.slice(2);
428
428
  let alias;
429
429
  let configJson;
@@ -433,10 +433,10 @@ async function main() {
433
433
  }
434
434
  await setCollectionConfig(alias, configJson);
435
435
  } else if (adminSub === "create-system-collections") {
436
- const { createSystemCollections } = await import('./adminCommands-DlD78CYk.mjs');
436
+ const { createSystemCollections } = await import('./adminCommands-DZ9MECkY.mjs');
437
437
  await createSystemCollections();
438
438
  } else if (adminSub === "migrate-collection-children") {
439
- const { migrateCollectionChildren } = await import('./adminCommands-DlD78CYk.mjs');
439
+ const { migrateCollectionChildren } = await import('./adminCommands-DZ9MECkY.mjs');
440
440
  const rest = args.slice(2).filter((a) => !a.startsWith("-"));
441
441
  await migrateCollectionChildren(rest[0], rest[1]);
442
442
  } else {
@@ -444,7 +444,7 @@ async function main() {
444
444
  }
445
445
  process.exit(0);
446
446
  } else if (subcommand === "events") {
447
- const { listEvents, ackEvent } = await import('./notifyCommands-BzCPoBy8.mjs');
447
+ const { listEvents, ackEvent } = await import('./notifyCommands-Oh0kvQgj.mjs');
448
448
  const sub = args[1];
449
449
  const rest = args.slice(2);
450
450
  let email;
@@ -465,7 +465,7 @@ async function main() {
465
465
  } else if (!subcommand || subcommand === "start") {
466
466
  await handleInteractiveCommand();
467
467
  } else if (subcommand === "--version" || subcommand === "-v") {
468
- const pkg = await import('./package-DcJpavob.mjs').catch(() => ({ default: { version: "unknown" } }));
468
+ const pkg = await import('./package-k1G6ygGP.mjs').catch(() => ({ default: { version: "unknown" } }));
469
469
  console.log(`svamp version: ${pkg.default.version}`);
470
470
  } else {
471
471
  console.error(`Unknown command: ${subcommand}`);
@@ -474,7 +474,7 @@ async function main() {
474
474
  }
475
475
  }
476
476
  async function handleInteractiveCommand() {
477
- const { runInteractive } = await import('./run-IqHyd8bA.mjs');
477
+ const { runInteractive } = await import('./run-09G0RL2B.mjs');
478
478
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
479
479
  let directory = process.cwd();
480
480
  let resumeSessionId;
@@ -519,7 +519,7 @@ async function handleAgentCommand() {
519
519
  return;
520
520
  }
521
521
  if (agentArgs[0] === "list") {
522
- const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.as; });
522
+ const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.at; });
523
523
  console.log("Known agents:");
524
524
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
525
525
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -531,7 +531,7 @@ async function handleAgentCommand() {
531
531
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
532
532
  return;
533
533
  }
534
- const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.as; });
534
+ const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.at; });
535
535
  let cwd = process.cwd();
536
536
  const filteredArgs = [];
537
537
  for (let i = 0; i < agentArgs.length; i++) {
@@ -555,12 +555,12 @@ async function handleAgentCommand() {
555
555
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
556
556
  let backend;
557
557
  if (KNOWN_CODEX_AGENTS[config.agentName]) {
558
- const { CodexAppServerBackend } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.at; });
558
+ const { CodexAppServerBackend } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.au; });
559
559
  backend = new CodexAppServerBackend({ cwd, log: logFn });
560
560
  } else {
561
- const { AcpBackend } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.ar; });
562
- const { GeminiTransport } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.au; });
563
- const { DefaultTransport } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.aq; });
561
+ const { AcpBackend } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.as; });
562
+ const { GeminiTransport } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.av; });
563
+ const { DefaultTransport } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.ar; });
564
564
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
565
565
  backend = new AcpBackend({
566
566
  agentName: config.agentName,
@@ -687,7 +687,7 @@ async function handleSessionCommand() {
687
687
  process.exit(1);
688
688
  }
689
689
  }
690
- const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionLoopExtend, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands--WPYI2sm.mjs');
690
+ const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionLoopExtend, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-CJVqMnNf.mjs');
691
691
  const parseFlagStr = (flag, shortFlag) => {
692
692
  for (let i = 1; i < sessionArgs.length; i++) {
693
693
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -755,7 +755,7 @@ async function handleSessionCommand() {
755
755
  allowDomain.push(sessionArgs[++i]);
756
756
  }
757
757
  }
758
- const { parseShareArg } = await import('./commands--WPYI2sm.mjs');
758
+ const { parseShareArg } = await import('./commands-CJVqMnNf.mjs');
759
759
  const shareEntries = share.map((s) => parseShareArg(s));
760
760
  await sessionSpawn(agent, dir, targetMachineId, {
761
761
  message,
@@ -819,9 +819,10 @@ async function handleSessionCommand() {
819
819
  await sessionAttach(sessionArgs[1], targetMachineId);
820
820
  } else if (sessionSubcommand === "send") {
821
821
  if (!sessionArgs[1] || !sessionArgs[2]) {
822
- console.error('Usage: svamp session send <session-id> <message> [--model <id>] [--plain] [--subject "..."] [--when-idle] [--urgency urgent|normal] [--wait] [--response] [--btw] [--require-approval] [--timeout N] [--json]');
822
+ console.error('Usage: svamp session send <session-id> <message> [--model <id>] [--plain] [--subject "..."] [--when-idle] [--urgency urgent|normal] [--wait] [--response] [--btw] [--require-approval] [--as-issue [--issue-title "..."]] [--timeout N] [--json]');
823
823
  console.error(" --when-idle Deferred delivery: park the message and let the recipient handle it on its next idle turn (default is urgent \u2014 wakes immediately).");
824
824
  console.error(" --model <id> Switch the session model (e.g. claude-opus-4-7, claude-sonnet-4-6) before delivering the message \u2014 forces a respawn.");
825
+ console.error(" --as-issue File the message as an issue in the recipient session's backlog (optionally titled with --issue-title) instead of a chat send.");
825
826
  process.exit(1);
826
827
  }
827
828
  await sessionSend(sessionArgs[1], sessionArgs[2], targetMachineId, {
@@ -845,7 +846,7 @@ async function handleSessionCommand() {
845
846
  console.error(" Rewinds history: rewrites the message + drops everything after it, then restarts Claude.");
846
847
  process.exit(1);
847
848
  }
848
- const { sessionEditMessage } = await import('./commands--WPYI2sm.mjs');
849
+ const { sessionEditMessage } = await import('./commands-CJVqMnNf.mjs');
849
850
  await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
850
851
  } else if (sessionSubcommand === "refine") {
851
852
  if (!sessionArgs[1] || !sessionArgs[2]) {
@@ -853,7 +854,7 @@ async function handleSessionCommand() {
853
854
  console.error(" Asks the agent to revise its latest reply in place (no extra round).");
854
855
  process.exit(1);
855
856
  }
856
- const { sessionRefineLastReply } = await import('./commands--WPYI2sm.mjs');
857
+ const { sessionRefineLastReply } = await import('./commands-CJVqMnNf.mjs');
857
858
  await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
858
859
  } else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
859
860
  if (!sessionArgs[1]) {
@@ -861,7 +862,7 @@ async function handleSessionCommand() {
861
862
  console.error(" Reverts the most recent edit/refine, restoring the pre-edit history.");
862
863
  process.exit(1);
863
864
  }
864
- const { sessionUndoEdit } = await import('./commands--WPYI2sm.mjs');
865
+ const { sessionUndoEdit } = await import('./commands-CJVqMnNf.mjs');
865
866
  await sessionUndoEdit(sessionArgs[1], targetMachineId);
866
867
  } else if (sessionSubcommand === "query") {
867
868
  const dir = sessionArgs[1];
@@ -871,7 +872,7 @@ async function handleSessionCommand() {
871
872
  console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
872
873
  process.exit(1);
873
874
  }
874
- const { sessionQuery } = await import('./commands--WPYI2sm.mjs');
875
+ const { sessionQuery } = await import('./commands-CJVqMnNf.mjs');
875
876
  await sessionQuery(dir, prompt, targetMachineId, {
876
877
  timeout: parseFlagInt("--timeout"),
877
878
  json: hasFlag("--json"),
@@ -904,7 +905,7 @@ async function handleSessionCommand() {
904
905
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
905
906
  process.exit(1);
906
907
  }
907
- const { sessionApprove } = await import('./commands--WPYI2sm.mjs');
908
+ const { sessionApprove } = await import('./commands-CJVqMnNf.mjs');
908
909
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
909
910
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
910
911
  json: hasFlag("--json")
@@ -914,7 +915,7 @@ async function handleSessionCommand() {
914
915
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
915
916
  process.exit(1);
916
917
  }
917
- const { sessionDeny } = await import('./commands--WPYI2sm.mjs');
918
+ const { sessionDeny } = await import('./commands-CJVqMnNf.mjs');
918
919
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
919
920
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
920
921
  json: hasFlag("--json")
@@ -966,7 +967,7 @@ async function handleSessionCommand() {
966
967
  console.error("Usage: svamp session set-title <title>");
967
968
  process.exit(1);
968
969
  }
969
- const { sessionSetTitle } = await import('./agentCommands-B3FTfsg-.mjs');
970
+ const { sessionSetTitle } = await import('./agentCommands-D68wBf-y.mjs');
970
971
  await sessionSetTitle(title);
971
972
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
972
973
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -974,7 +975,7 @@ async function handleSessionCommand() {
974
975
  console.error("Usage: svamp session set-project-description <text>");
975
976
  process.exit(1);
976
977
  }
977
- const { sessionSetProjectDescription } = await import('./agentCommands-B3FTfsg-.mjs');
978
+ const { sessionSetProjectDescription } = await import('./agentCommands-D68wBf-y.mjs');
978
979
  await sessionSetProjectDescription(desc);
979
980
  } else if (sessionSubcommand === "set-link") {
980
981
  const url = sessionArgs[1];
@@ -983,11 +984,11 @@ async function handleSessionCommand() {
983
984
  process.exit(1);
984
985
  }
985
986
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
986
- const { sessionSetLink } = await import('./agentCommands-B3FTfsg-.mjs');
987
+ const { sessionSetLink } = await import('./agentCommands-D68wBf-y.mjs');
987
988
  await sessionSetLink(url, label);
988
989
  } else if (sessionSubcommand === "link") {
989
990
  const op = sessionArgs[1];
990
- const lm = await import('./agentCommands-B3FTfsg-.mjs');
991
+ const lm = await import('./agentCommands-D68wBf-y.mjs');
991
992
  if (op === "add") {
992
993
  const url = sessionArgs[2];
993
994
  if (!url || url.startsWith("--")) {
@@ -1022,7 +1023,7 @@ async function handleSessionCommand() {
1022
1023
  process.exit(1);
1023
1024
  }
1024
1025
  const level = parseFlagStr("--level") || "info";
1025
- const { sessionNotify } = await import('./agentCommands-B3FTfsg-.mjs');
1026
+ const { sessionNotify } = await import('./agentCommands-D68wBf-y.mjs');
1026
1027
  await sessionNotify(message, level);
1027
1028
  } else if (sessionSubcommand === "broadcast") {
1028
1029
  const action = sessionArgs[1];
@@ -1030,7 +1031,7 @@ async function handleSessionCommand() {
1030
1031
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
1031
1032
  process.exit(1);
1032
1033
  }
1033
- const { sessionBroadcast } = await import('./agentCommands-B3FTfsg-.mjs');
1034
+ const { sessionBroadcast } = await import('./agentCommands-D68wBf-y.mjs');
1034
1035
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
1035
1036
  } else if (sessionSubcommand === "inbox") {
1036
1037
  const inboxSubcmd = sessionArgs[1];
@@ -1041,7 +1042,7 @@ async function handleSessionCommand() {
1041
1042
  process.exit(1);
1042
1043
  }
1043
1044
  if (agentSessionId) {
1044
- const { inboxSend } = await import('./agentCommands-B3FTfsg-.mjs');
1045
+ const { inboxSend } = await import('./agentCommands-D68wBf-y.mjs');
1045
1046
  await inboxSend(sessionArgs[2], {
1046
1047
  body: sessionArgs[3],
1047
1048
  subject: parseFlagStr("--subject"),
@@ -1058,7 +1059,7 @@ async function handleSessionCommand() {
1058
1059
  }
1059
1060
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
1060
1061
  if (agentSessionId && !sessionArgs[2]) {
1061
- const { inboxList } = await import('./agentCommands-B3FTfsg-.mjs');
1062
+ const { inboxList } = await import('./agentCommands-D68wBf-y.mjs');
1062
1063
  await inboxList({
1063
1064
  unread: hasFlag("--unread"),
1064
1065
  limit: parseFlagInt("--limit"),
@@ -1080,7 +1081,7 @@ async function handleSessionCommand() {
1080
1081
  process.exit(1);
1081
1082
  }
1082
1083
  if (agentSessionId && !sessionArgs[3]) {
1083
- const { inboxList } = await import('./agentCommands-B3FTfsg-.mjs');
1084
+ const { inboxList } = await import('./agentCommands-D68wBf-y.mjs');
1084
1085
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
1085
1086
  } else if (sessionArgs[3]) {
1086
1087
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1090,7 +1091,7 @@ async function handleSessionCommand() {
1090
1091
  }
1091
1092
  } else if (inboxSubcmd === "reply") {
1092
1093
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1093
- const { inboxReply } = await import('./agentCommands-B3FTfsg-.mjs');
1094
+ const { inboxReply } = await import('./agentCommands-D68wBf-y.mjs');
1094
1095
  await inboxReply(sessionArgs[2], sessionArgs[3]);
1095
1096
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1096
1097
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -1128,7 +1129,7 @@ async function handleMachineCommand() {
1128
1129
  return;
1129
1130
  }
1130
1131
  if (machineSubcommand === "share") {
1131
- const { machineShare } = await import('./commands--WPYI2sm.mjs');
1132
+ const { machineShare } = await import('./commands-CJVqMnNf.mjs');
1132
1133
  let machineId;
1133
1134
  const shareArgs = [];
1134
1135
  for (let i = 1; i < machineArgs.length; i++) {
@@ -1179,14 +1180,14 @@ async function handleMachineCommand() {
1179
1180
  process.exit(1);
1180
1181
  }
1181
1182
  if (all) {
1182
- const { fleetExec } = await import('./fleet-GklB5DQn.mjs');
1183
+ const { fleetExec } = await import('./fleet-okzhGLEY.mjs');
1183
1184
  await fleetExec(command, { cwd });
1184
1185
  } else {
1185
- const { machineExec } = await import('./commands--WPYI2sm.mjs');
1186
+ const { machineExec } = await import('./commands-CJVqMnNf.mjs');
1186
1187
  await machineExec(machineId, command, cwd);
1187
1188
  }
1188
1189
  } else if (machineSubcommand === "info") {
1189
- const { machineInfo } = await import('./commands--WPYI2sm.mjs');
1190
+ const { machineInfo } = await import('./commands-CJVqMnNf.mjs');
1190
1191
  let machineId;
1191
1192
  for (let i = 1; i < machineArgs.length; i++) {
1192
1193
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1206,10 +1207,10 @@ async function handleMachineCommand() {
1206
1207
  level = machineArgs[++i];
1207
1208
  }
1208
1209
  }
1209
- const { machineNotify } = await import('./agentCommands-B3FTfsg-.mjs');
1210
+ const { machineNotify } = await import('./agentCommands-D68wBf-y.mjs');
1210
1211
  await machineNotify(message, level);
1211
1212
  } else if (machineSubcommand === "ls") {
1212
- const { machineLs } = await import('./commands--WPYI2sm.mjs');
1213
+ const { machineLs } = await import('./commands-CJVqMnNf.mjs');
1213
1214
  let machineId;
1214
1215
  let showHidden = false;
1215
1216
  let path;
@@ -1268,20 +1269,20 @@ Examples:
1268
1269
  };
1269
1270
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1270
1271
  if (sub === "status") {
1271
- const { fleetStatus } = await import('./fleet-GklB5DQn.mjs');
1272
+ const { fleetStatus } = await import('./fleet-okzhGLEY.mjs');
1272
1273
  await fleetStatus();
1273
1274
  } else if (sub === "upgrade-claude") {
1274
- const { fleetUpgradeClaude } = await import('./fleet-GklB5DQn.mjs');
1275
+ const { fleetUpgradeClaude } = await import('./fleet-okzhGLEY.mjs');
1275
1276
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1276
1277
  } else if (sub === "upgrade-svamp") {
1277
- const { fleetUpgradeSvamp } = await import('./fleet-GklB5DQn.mjs');
1278
+ const { fleetUpgradeSvamp } = await import('./fleet-okzhGLEY.mjs');
1278
1279
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self"), force: hasFlag("force") });
1279
1280
  } else if (sub === "daemon-restart") {
1280
- const { fleetDaemonRestart } = await import('./fleet-GklB5DQn.mjs');
1281
+ const { fleetDaemonRestart } = await import('./fleet-okzhGLEY.mjs');
1281
1282
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
1282
1283
  } else if (sub === "push-skill") {
1283
1284
  const name = fleetArgs[1];
1284
- const { fleetPushSkill } = await import('./fleet-GklB5DQn.mjs');
1285
+ const { fleetPushSkill } = await import('./fleet-okzhGLEY.mjs');
1285
1286
  await fleetPushSkill(name);
1286
1287
  } else {
1287
1288
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -1297,7 +1298,7 @@ async function handleSkillsCommand() {
1297
1298
  await printSkillsHelp();
1298
1299
  return;
1299
1300
  }
1300
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-mm9jZg5L.mjs');
1301
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-DJwSJOPD.mjs');
1301
1302
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
1302
1303
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1303
1304
  if (!query) {
@@ -1344,7 +1345,7 @@ async function loginToHypha() {
1344
1345
  process.exit(1);
1345
1346
  }
1346
1347
  const anchor = anchorArg.replace(/\/+$/, "");
1347
- const { loadInstanceConfig } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.am; });
1348
+ const { loadInstanceConfig } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.an; });
1348
1349
  let cfg = null;
1349
1350
  try {
1350
1351
  cfg = await loadInstanceConfig({ anchor, force: true });
@@ -1455,7 +1456,7 @@ async function logoutFromHypha() {
1455
1456
  } catch {
1456
1457
  }
1457
1458
  try {
1458
- const { clearInstanceConfigCache } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.am; });
1459
+ const { clearInstanceConfigCache } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.an; });
1459
1460
  clearInstanceConfigCache();
1460
1461
  } catch {
1461
1462
  }
@@ -1730,10 +1731,14 @@ Commands:
1730
1731
  svamp serve --help Show all serve commands
1731
1732
 
1732
1733
  Other:
1734
+ svamp issue --help Issue backlog (add, list, work, close, pending, guide)
1735
+ svamp workflow --help Automation workflows (schedule / event / idle triggers)
1736
+ svamp process --help Process supervisor (apply, list, start, stop, logs)
1733
1737
  svamp machine --help Machine sharing & security contexts
1734
1738
  svamp fleet --help Fan-out commands across all your machines (status, upgrade-claude, upgrade-svamp, daemon-restart, push-skill)
1735
1739
  svamp skills --help Skills marketplace (find, install, publish)
1736
1740
  svamp service --help Service exposure (HTTP services from sandboxes)
1741
+ svamp outpost --help Connect a remote machine (FDE outpost): up, exec, list, install
1737
1742
  svamp notify <email> \u2026 Send a cross-user notification (bell inbox); --title/--body/--action/--level
1738
1743
  svamp events list|ack Read / dismiss your notification bell inbox
1739
1744
  svamp admin \u2026 System-collection ops (create-system-collections, set-collection-config, migrate-collection-children)
@@ -1797,7 +1802,7 @@ async function applyClaudeAuthFlags(argv) {
1797
1802
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
1798
1803
  );
1799
1804
  }
1800
- const mod = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.an; });
1805
+ const mod = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.ao; });
1801
1806
  if (hasHypha) {
1802
1807
  let url;
1803
1808
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -1851,7 +1856,7 @@ async function applyDaemonShareFlag(argv) {
1851
1856
  }
1852
1857
  }
1853
1858
  if (collected.length === 0) return;
1854
- const { updateEnvFile } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.an; });
1859
+ const { updateEnvFile } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.ao; });
1855
1860
  const seen = /* @__PURE__ */ new Set();
1856
1861
  const deduped = collected.filter((e) => {
1857
1862
  const k = e.toLowerCase();
@@ -1884,7 +1889,7 @@ async function handleWiseAgentCommand(rest) {
1884
1889
  }
1885
1890
  });
1886
1891
  const message = rest.slice(1).map((a, idx) => ({ a, idx: idx + 1 })).filter(({ a, idx }) => !a.startsWith("-") && !consumed.has(String(idx))).map(({ a }) => a).join(" ");
1887
- const { wiseAskCli } = await import('./commands--WPYI2sm.mjs');
1892
+ const { wiseAskCli } = await import('./commands-CJVqMnNf.mjs');
1888
1893
  await wiseAskCli(machineId, message, sessionId, { json });
1889
1894
  return;
1890
1895
  }
@@ -1896,7 +1901,7 @@ async function handleWiseAgentCommand(rest) {
1896
1901
  }
1897
1902
  return void 0;
1898
1903
  };
1899
- const { runWiseVoiceCli } = await import('./headlessCli-B2IWICNI.mjs');
1904
+ const { runWiseVoiceCli } = await import('./headlessCli-BkU5B5Jp.mjs');
1900
1905
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
1901
1906
  return;
1902
1907
  }
@@ -1914,7 +1919,7 @@ async function handleWiseAgentCommand(rest) {
1914
1919
  const mode = valueOf(["--mode"]);
1915
1920
  const mission = valueOf(["--mission"]);
1916
1921
  const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
1917
- const { wiseJoinMeetingCli } = await import('./commands--WPYI2sm.mjs');
1922
+ const { wiseJoinMeetingCli } = await import('./commands-CJVqMnNf.mjs');
1918
1923
  await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
1919
1924
  return;
1920
1925
  }
@@ -1926,7 +1931,7 @@ async function handleWiseAgentCommand(rest) {
1926
1931
  }
1927
1932
  return void 0;
1928
1933
  };
1929
- const { wiseLeaveMeetingCli } = await import('./commands--WPYI2sm.mjs');
1934
+ const { wiseLeaveMeetingCli } = await import('./commands-CJVqMnNf.mjs');
1930
1935
  await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
1931
1936
  return;
1932
1937
  }
@@ -1950,7 +1955,7 @@ async function handleWiseAgentCommand(rest) {
1950
1955
  }
1951
1956
  });
1952
1957
  const text = rest.slice(1).map((a, idx) => ({ a, idx: idx + 1 })).filter(({ a, idx }) => !a.startsWith("-") && !consumed.has(String(idx))).map(({ a }) => a).join(" ");
1953
- const { wiseAnnounceCli } = await import('./commands--WPYI2sm.mjs');
1958
+ const { wiseAnnounceCli } = await import('./commands-CJVqMnNf.mjs');
1954
1959
  await wiseAnnounceCli(machineId, text, sessionId, { json });
1955
1960
  return;
1956
1961
  }
@@ -1962,7 +1967,7 @@ async function handleWiseAgentCommand(rest) {
1962
1967
  }
1963
1968
  return void 0;
1964
1969
  };
1965
- const { wiseMeetingsCli } = await import('./commands--WPYI2sm.mjs');
1970
+ const { wiseMeetingsCli } = await import('./commands-CJVqMnNf.mjs');
1966
1971
  await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
1967
1972
  return;
1968
1973
  }
@@ -2012,7 +2017,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2012
2017
  return;
2013
2018
  }
2014
2019
  const authArgs = rest.slice(1);
2015
- const mod = await import('./auth-2-M7wMHL.mjs');
2020
+ const mod = await import('./auth-DDgr4YFE.mjs');
2016
2021
  let action;
2017
2022
  try {
2018
2023
  action = mod.parseWiseAgentAuthArgs(authArgs);
@@ -2022,7 +2027,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2022
2027
  return;
2023
2028
  }
2024
2029
  if (action) {
2025
- const { updateEnvFile } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.an; });
2030
+ const { updateEnvFile } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.ao; });
2026
2031
  const updates = mod.buildWiseAgentEnvUpdates(action);
2027
2032
  updateEnvFile(updates);
2028
2033
  for (const [k, v] of Object.entries(updates)) {
@@ -2036,7 +2041,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2036
2041
  }
2037
2042
  async function handleDaemonAuthCommand(argv) {
2038
2043
  const sub = (argv[0] || "status").toLowerCase();
2039
- const mod = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.an; });
2044
+ const mod = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.ao; });
2040
2045
  if (sub === "--help" || sub === "-h" || sub === "help") {
2041
2046
  console.log(`
2042
2047
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2110,8 +2115,8 @@ one step: --use-hypha-proxy / --use-claude-login / --anthropic-base-url URL --an
2110
2115
  }
2111
2116
  async function handleDaemonCodexAuthCommand(argv) {
2112
2117
  const sub = (argv[0] || "status").toLowerCase();
2113
- const { updateEnvFile } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.an; });
2114
- const { resolveCodexProvider } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.ao; });
2118
+ const { updateEnvFile } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.ao; });
2119
+ const { resolveCodexProvider } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.ap; });
2115
2120
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2116
2121
  if (sub === "--help" || sub === "-h" || sub === "help") {
2117
2122
  console.log(`
@@ -2423,6 +2428,7 @@ Usage:
2423
2428
  svamp machine share --remove <email> Remove shared user
2424
2429
  svamp machine share --config <path> Apply security context config
2425
2430
  svamp machine share --show-config Show current security context config
2431
+ svamp machine notify <message> [--level ...] Send a machine notification (info|warning|error)
2426
2432
 
2427
2433
  Options:
2428
2434
  --machine <id>, -m <id> Target a specific machine (prefix match supported)
@@ -2443,7 +2449,7 @@ Examples:
2443
2449
  async function printSkillsHelp() {
2444
2450
  let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
2445
2451
  try {
2446
- const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-BtVKqoF4.mjs').then(function (n) { return n.av; });
2452
+ const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-DYVmYsvg.mjs').then(function (n) { return n.aw; });
2447
2453
  browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
2448
2454
  } catch {
2449
2455
  }
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import './run-BtVKqoF4.mjs';
1
+ import './run-DYVmYsvg.mjs';
2
2
  import './serviceManager-hlOVxkhW.mjs';
3
- import './cli-CoQ_iSxW.mjs';
3
+ import './cli-Bk6IPB9M.mjs';
4
4
  import 'os';
5
5
  import 'fs/promises';
6
6
  import 'fs';
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands--WPYI2sm.mjs';
3
+ import { connectAndGetMachine } from './commands-CJVqMnNf.mjs';
4
4
  import 'node:fs';
5
5
  import 'node:child_process';
6
6
  import 'node:path';
7
7
  import 'node:os';
8
- import './run-BtVKqoF4.mjs';
8
+ import './run-DYVmYsvg.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';