svamp-cli 0.2.314 → 0.2.317

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 (30) hide show
  1. package/bin/commands/workflow.md +3 -2
  2. package/dist/{adminCommands-DCttALYO.mjs → adminCommands-fJVu-h9l.mjs} +1 -1
  3. package/dist/{agentCommands-BUsSOz5M.mjs → agentCommands-DdOSpUEW.mjs} +5 -5
  4. package/dist/{auth-D5yTcsy2.mjs → auth-B2XK13r-.mjs} +1 -1
  5. package/dist/{cli-ahWO_ULm.mjs → cli-DGVQaDbd.mjs} +115 -85
  6. package/dist/cli.mjs +2 -2
  7. package/dist/{commands-ZML4FIzg.mjs → commands-Bx2JkNft.mjs} +1 -1
  8. package/dist/{commands-CJmKY6Qo.mjs → commands-C4p4v9eO.mjs} +2 -2
  9. package/dist/{commands-bS4ErsEr.mjs → commands-CoBMjrtP.mjs} +2 -2
  10. package/dist/{commands-Ce7MP6Ut.mjs → commands-DEsDSuMW.mjs} +3 -3
  11. package/dist/{commands-Cl-TIip1.mjs → commands-DUdStLKb.mjs} +2 -2
  12. package/dist/{commands-CuinsdU0.mjs → commands-I9jHLkrI.mjs} +1 -1
  13. package/dist/{commands-BSHZGcCC.mjs → commands-ino-Gtcu.mjs} +8 -8
  14. package/dist/{commands-r4QVEq12.mjs → commands-wQYdc5EK.mjs} +1 -1
  15. package/dist/{fleet-CSwFR8B0.mjs → fleet-NRi2YMso.mjs} +6 -5
  16. package/dist/{frpc-CpuE7d3Y.mjs → frpc-CNZJM3qC.mjs} +1 -1
  17. package/dist/{headlessCli-Dg-awx4h.mjs → headlessCli-DpTQ00fL.mjs} +2 -2
  18. package/dist/index.mjs +1 -1
  19. package/dist/{notifyCommands-Dlm4RafU.mjs → notifyCommands-BFRuzxXP.mjs} +1 -1
  20. package/dist/package-DN_Oa_OT.mjs +64 -0
  21. package/dist/{pinnedClaudeCode-mM9Q6Q2G.mjs → pinnedClaudeCode-CnCpensV.mjs} +1 -1
  22. package/dist/{rpc-BN7kFhGk.mjs → rpc-CclCeDcu.mjs} +1 -1
  23. package/dist/{rpc-CLTPF1K6.mjs → rpc-Cx6KsBYC.mjs} +2 -2
  24. package/dist/{run-B6-6GYde.mjs → run-DKhnAl2f.mjs} +1 -1
  25. package/dist/{run-Y3YLx8x7.mjs → run-RA4Vr6lj.mjs} +595 -90
  26. package/dist/{scheduler-CWlkmpMz.mjs → scheduler-Wzzed1CU.mjs} +1 -1
  27. package/dist/{serveCommands-mnocpHcO.mjs → serveCommands-DQeSesYI.mjs} +5 -5
  28. package/dist/{sideband-c4lkIKWJ.mjs → sideband-gQ7oQEsx.mjs} +1 -1
  29. package/package.json +4 -4
  30. package/dist/package-DO2e6EnU.mjs +0 -64
@@ -1,4 +1,4 @@
1
- import { a3 as clearStopMarker, a4 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-Y3YLx8x7.mjs';
1
+ import { a4 as clearStopMarker, a5 as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-RA4Vr6lj.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-Y3YLx8x7.mjs').then(function (n) { return n.aq; });
36
+ const { getLoadedConfig } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.ar; });
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-Y3YLx8x7.mjs').then(function (n) { return n.aD; });
55
+ const mod = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.aE; });
56
56
  if (whenIdle && !force) {
57
57
  if (mod.isDaemonAlive()) {
58
58
  mod.writePendingRestart({ reason: "svamp daemon restart --when-idle" });
@@ -359,7 +359,7 @@ async function main() {
359
359
  console.error("svamp service: Service commands are not available in sandboxed sessions.");
360
360
  process.exit(1);
361
361
  }
362
- const { handleServiceCommand } = await import('./commands-BSHZGcCC.mjs');
362
+ const { handleServiceCommand } = await import('./commands-ino-Gtcu.mjs');
363
363
  await handleServiceCommand();
364
364
  } else if (subcommand === "serve") {
365
365
  const { isSandboxed: isSandboxedServe } = await import('./sandboxDetect-DNTcbgWD.mjs');
@@ -367,7 +367,7 @@ async function main() {
367
367
  console.error("svamp serve: Serve commands are not available in sandboxed sessions.");
368
368
  process.exit(1);
369
369
  }
370
- const { handleServeCommand } = await import('./serveCommands-mnocpHcO.mjs');
370
+ const { handleServeCommand } = await import('./serveCommands-DQeSesYI.mjs');
371
371
  await handleServeCommand();
372
372
  process.exit(0);
373
373
  } else if (subcommand === "process" || subcommand === "proc") {
@@ -376,7 +376,7 @@ async function main() {
376
376
  console.error("svamp process: Process commands are not available in sandboxed sessions.");
377
377
  process.exit(1);
378
378
  }
379
- const { processCommand } = await import('./commands-Cl-TIip1.mjs');
379
+ const { processCommand } = await import('./commands-DUdStLKb.mjs');
380
380
  let machineId;
381
381
  const processArgs = args.slice(1);
382
382
  const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
@@ -390,26 +390,26 @@ async function main() {
390
390
  }), machineId);
391
391
  process.exit(0);
392
392
  } else if (subcommand === "outpost") {
393
- const { outpostCommand } = await import('./commands-CJmKY6Qo.mjs');
393
+ const { outpostCommand } = await import('./commands-C4p4v9eO.mjs');
394
394
  await outpostCommand(args.slice(1));
395
395
  process.exit(0);
396
396
  } else if (subcommand === "issue" || subcommand === "issues") {
397
- const { issueCommand } = await import('./commands-Ce7MP6Ut.mjs');
397
+ const { issueCommand } = await import('./commands-DEsDSuMW.mjs');
398
398
  await issueCommand(args.slice(1));
399
399
  await flushAndExit(0);
400
400
  } else if (subcommand === "workflow" || subcommand === "workflows") {
401
- const { workflowCommand } = await import('./commands-CuinsdU0.mjs');
401
+ const { workflowCommand } = await import('./commands-I9jHLkrI.mjs');
402
402
  await workflowCommand(args.slice(1));
403
403
  await flushAndExit(0);
404
404
  } else if (subcommand === "wise-agent" || subcommand === "wise") {
405
405
  await handleWiseAgentCommand(args.slice(1));
406
406
  process.exit(0);
407
407
  } else if (subcommand === "feature" || subcommand === "crew") {
408
- const { crewCommand } = await import('./commands-bS4ErsEr.mjs');
408
+ const { crewCommand } = await import('./commands-CoBMjrtP.mjs');
409
409
  await crewCommand(args.slice(1));
410
410
  process.exit(0);
411
411
  } else if (subcommand === "notify") {
412
- const { notifyUser } = await import('./notifyCommands-Dlm4RafU.mjs');
412
+ const { notifyUser } = await import('./notifyCommands-BFRuzxXP.mjs');
413
413
  const rest = args.slice(1);
414
414
  let email;
415
415
  const o = {};
@@ -426,7 +426,7 @@ async function main() {
426
426
  } else if (subcommand === "admin") {
427
427
  const adminSub = args[1];
428
428
  if (adminSub === "set-collection-config") {
429
- const { setCollectionConfig } = await import('./adminCommands-DCttALYO.mjs');
429
+ const { setCollectionConfig } = await import('./adminCommands-fJVu-h9l.mjs');
430
430
  const rest = args.slice(2);
431
431
  let alias;
432
432
  let configJson;
@@ -436,10 +436,10 @@ async function main() {
436
436
  }
437
437
  await setCollectionConfig(alias, configJson);
438
438
  } else if (adminSub === "create-system-collections") {
439
- const { createSystemCollections } = await import('./adminCommands-DCttALYO.mjs');
439
+ const { createSystemCollections } = await import('./adminCommands-fJVu-h9l.mjs');
440
440
  await createSystemCollections();
441
441
  } else if (adminSub === "migrate-collection-children") {
442
- const { migrateCollectionChildren } = await import('./adminCommands-DCttALYO.mjs');
442
+ const { migrateCollectionChildren } = await import('./adminCommands-fJVu-h9l.mjs');
443
443
  const rest = args.slice(2).filter((a) => !a.startsWith("-"));
444
444
  await migrateCollectionChildren(rest[0], rest[1]);
445
445
  } else {
@@ -447,7 +447,7 @@ async function main() {
447
447
  }
448
448
  process.exit(0);
449
449
  } else if (subcommand === "events") {
450
- const { listEvents, ackEvent } = await import('./notifyCommands-Dlm4RafU.mjs');
450
+ const { listEvents, ackEvent } = await import('./notifyCommands-BFRuzxXP.mjs');
451
451
  const sub = args[1];
452
452
  const rest = args.slice(2);
453
453
  let email;
@@ -468,7 +468,7 @@ async function main() {
468
468
  } else if (!subcommand || subcommand === "start") {
469
469
  await handleInteractiveCommand();
470
470
  } else if (subcommand === "--version" || subcommand === "-v") {
471
- const pkg = await import('./package-DO2e6EnU.mjs').catch(() => ({ default: { version: "unknown" } }));
471
+ const pkg = await import('./package-DN_Oa_OT.mjs').catch(() => ({ default: { version: "unknown" } }));
472
472
  console.log(`svamp version: ${pkg.default.version}`);
473
473
  } else {
474
474
  console.error(`Unknown command: ${subcommand}`);
@@ -477,7 +477,7 @@ async function main() {
477
477
  }
478
478
  }
479
479
  async function handleInteractiveCommand() {
480
- const { runInteractive } = await import('./run-B6-6GYde.mjs');
480
+ const { runInteractive } = await import('./run-DKhnAl2f.mjs');
481
481
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
482
482
  let directory = process.cwd();
483
483
  let resumeSessionId;
@@ -522,7 +522,7 @@ async function handleAgentCommand() {
522
522
  return;
523
523
  }
524
524
  if (agentArgs[0] === "list") {
525
- const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aw; });
525
+ const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.ax; });
526
526
  console.log("Known agents:");
527
527
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
528
528
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -534,7 +534,7 @@ async function handleAgentCommand() {
534
534
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
535
535
  return;
536
536
  }
537
- const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aw; });
537
+ const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.ax; });
538
538
  let cwd = process.cwd();
539
539
  const filteredArgs = [];
540
540
  for (let i = 0; i < agentArgs.length; i++) {
@@ -558,19 +558,19 @@ async function handleAgentCommand() {
558
558
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
559
559
  let backend;
560
560
  if (KNOWN_CODEX_AGENTS[config.agentName]) {
561
- const { CodexAppServerBackend } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ax; });
561
+ const { CodexAppServerBackend } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.ay; });
562
562
  backend = new CodexAppServerBackend({ cwd, log: logFn });
563
563
  } else {
564
- const { AcpBackend } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.av; });
565
- const { GeminiTransport } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ay; });
566
- const { KimiTransport } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.az; });
567
- const { DefaultTransport } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.au; });
564
+ const { AcpBackend } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.aw; });
565
+ const { GeminiTransport } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.az; });
566
+ const { KimiTransport } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.aA; });
567
+ const { DefaultTransport } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.av; });
568
568
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : config.agentName === "kimi" ? new KimiTransport() : new DefaultTransport(config.agentName);
569
569
  let acpEnv;
570
570
  if (config.agentName === "kimi") {
571
- const { ensureKimiProviderConfigured } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aB; });
572
- const { kimiSpawnEnv } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aA; });
573
- ensureKimiProviderConfigured(process.env, config.command, logFn);
571
+ const { ensureKimiProviderConfigured } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.aC; });
572
+ const { kimiSpawnEnv } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.aB; });
573
+ await ensureKimiProviderConfigured(process.env, config.command, logFn);
574
574
  acpEnv = kimiSpawnEnv(process.env);
575
575
  }
576
576
  backend = new AcpBackend({
@@ -699,7 +699,7 @@ async function handleSessionCommand() {
699
699
  process.exit(1);
700
700
  }
701
701
  }
702
- 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-r4QVEq12.mjs');
702
+ 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-wQYdc5EK.mjs');
703
703
  const parseFlagStr = (flag, shortFlag) => {
704
704
  for (let i = 1; i < sessionArgs.length; i++) {
705
705
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -767,7 +767,13 @@ async function handleSessionCommand() {
767
767
  allowDomain.push(sessionArgs[++i]);
768
768
  }
769
769
  }
770
- const { parseShareArg } = await import('./commands-r4QVEq12.mjs');
770
+ if (denyRead.length > 0) {
771
+ console.warn("Warning: --deny-read is NOT ENFORCED by the sandbox (#0878). The session workspace");
772
+ console.warn(" is granted wholesale, so denying a path inside it has no effect. Use");
773
+ console.warn(" --allow-write / a securityContext allowedDirectories, or keep the");
774
+ console.warn(" sensitive path outside the workspace.");
775
+ }
776
+ const { parseShareArg } = await import('./commands-wQYdc5EK.mjs');
771
777
  const shareEntries = share.map((s) => parseShareArg(s));
772
778
  await sessionSpawn(agent, dir, targetMachineId, {
773
779
  message,
@@ -858,7 +864,7 @@ async function handleSessionCommand() {
858
864
  console.error(" Rewinds history: rewrites the message + drops everything after it, then restarts Claude.");
859
865
  process.exit(1);
860
866
  }
861
- const { sessionEditMessage } = await import('./commands-r4QVEq12.mjs');
867
+ const { sessionEditMessage } = await import('./commands-wQYdc5EK.mjs');
862
868
  await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
863
869
  } else if (sessionSubcommand === "refine") {
864
870
  if (!sessionArgs[1] || !sessionArgs[2]) {
@@ -866,7 +872,7 @@ async function handleSessionCommand() {
866
872
  console.error(" Asks the agent to revise its latest reply in place (no extra round).");
867
873
  process.exit(1);
868
874
  }
869
- const { sessionRefineLastReply } = await import('./commands-r4QVEq12.mjs');
875
+ const { sessionRefineLastReply } = await import('./commands-wQYdc5EK.mjs');
870
876
  await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
871
877
  } else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
872
878
  if (!sessionArgs[1]) {
@@ -874,7 +880,7 @@ async function handleSessionCommand() {
874
880
  console.error(" Reverts the most recent edit/refine, restoring the pre-edit history.");
875
881
  process.exit(1);
876
882
  }
877
- const { sessionUndoEdit } = await import('./commands-r4QVEq12.mjs');
883
+ const { sessionUndoEdit } = await import('./commands-wQYdc5EK.mjs');
878
884
  await sessionUndoEdit(sessionArgs[1], targetMachineId);
879
885
  } else if (sessionSubcommand === "query") {
880
886
  const dir = sessionArgs[1];
@@ -884,7 +890,7 @@ async function handleSessionCommand() {
884
890
  console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
885
891
  process.exit(1);
886
892
  }
887
- const { sessionQuery } = await import('./commands-r4QVEq12.mjs');
893
+ const { sessionQuery } = await import('./commands-wQYdc5EK.mjs');
888
894
  await sessionQuery(dir, prompt, targetMachineId, {
889
895
  timeout: parseFlagInt("--timeout"),
890
896
  json: hasFlag("--json"),
@@ -917,7 +923,7 @@ async function handleSessionCommand() {
917
923
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
918
924
  process.exit(1);
919
925
  }
920
- const { sessionApprove } = await import('./commands-r4QVEq12.mjs');
926
+ const { sessionApprove } = await import('./commands-wQYdc5EK.mjs');
921
927
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
922
928
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
923
929
  json: hasFlag("--json")
@@ -927,7 +933,7 @@ async function handleSessionCommand() {
927
933
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
928
934
  process.exit(1);
929
935
  }
930
- const { sessionDeny } = await import('./commands-r4QVEq12.mjs');
936
+ const { sessionDeny } = await import('./commands-wQYdc5EK.mjs');
931
937
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
932
938
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
933
939
  json: hasFlag("--json")
@@ -979,7 +985,7 @@ async function handleSessionCommand() {
979
985
  console.error("Usage: svamp session set-title <title>");
980
986
  process.exit(1);
981
987
  }
982
- const { sessionSetTitle } = await import('./agentCommands-BUsSOz5M.mjs');
988
+ const { sessionSetTitle } = await import('./agentCommands-DdOSpUEW.mjs');
983
989
  await sessionSetTitle(title);
984
990
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
985
991
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -987,7 +993,7 @@ async function handleSessionCommand() {
987
993
  console.error("Usage: svamp session set-project-description <text>");
988
994
  process.exit(1);
989
995
  }
990
- const { sessionSetProjectDescription } = await import('./agentCommands-BUsSOz5M.mjs');
996
+ const { sessionSetProjectDescription } = await import('./agentCommands-DdOSpUEW.mjs');
991
997
  await sessionSetProjectDescription(desc);
992
998
  } else if (sessionSubcommand === "set-link") {
993
999
  const url = sessionArgs[1];
@@ -996,11 +1002,11 @@ async function handleSessionCommand() {
996
1002
  process.exit(1);
997
1003
  }
998
1004
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
999
- const { sessionSetLink } = await import('./agentCommands-BUsSOz5M.mjs');
1005
+ const { sessionSetLink } = await import('./agentCommands-DdOSpUEW.mjs');
1000
1006
  await sessionSetLink(url, label);
1001
1007
  } else if (sessionSubcommand === "link") {
1002
1008
  const op = sessionArgs[1];
1003
- const lm = await import('./agentCommands-BUsSOz5M.mjs');
1009
+ const lm = await import('./agentCommands-DdOSpUEW.mjs');
1004
1010
  if (op === "add") {
1005
1011
  const url = sessionArgs[2];
1006
1012
  if (!url || url.startsWith("--")) {
@@ -1035,7 +1041,7 @@ async function handleSessionCommand() {
1035
1041
  process.exit(1);
1036
1042
  }
1037
1043
  const level = parseFlagStr("--level") || "info";
1038
- const { sessionNotify } = await import('./agentCommands-BUsSOz5M.mjs');
1044
+ const { sessionNotify } = await import('./agentCommands-DdOSpUEW.mjs');
1039
1045
  await sessionNotify(message, level);
1040
1046
  } else if (sessionSubcommand === "broadcast") {
1041
1047
  const action = sessionArgs[1];
@@ -1043,7 +1049,7 @@ async function handleSessionCommand() {
1043
1049
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
1044
1050
  process.exit(1);
1045
1051
  }
1046
- const { sessionBroadcast } = await import('./agentCommands-BUsSOz5M.mjs');
1052
+ const { sessionBroadcast } = await import('./agentCommands-DdOSpUEW.mjs');
1047
1053
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
1048
1054
  } else if (sessionSubcommand === "inbox") {
1049
1055
  const inboxSubcmd = sessionArgs[1];
@@ -1054,7 +1060,7 @@ async function handleSessionCommand() {
1054
1060
  process.exit(1);
1055
1061
  }
1056
1062
  if (agentSessionId) {
1057
- const { inboxSend } = await import('./agentCommands-BUsSOz5M.mjs');
1063
+ const { inboxSend } = await import('./agentCommands-DdOSpUEW.mjs');
1058
1064
  await inboxSend(sessionArgs[2], {
1059
1065
  body: sessionArgs[3],
1060
1066
  subject: parseFlagStr("--subject"),
@@ -1071,7 +1077,7 @@ async function handleSessionCommand() {
1071
1077
  }
1072
1078
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
1073
1079
  if (agentSessionId && !sessionArgs[2]) {
1074
- const { inboxList } = await import('./agentCommands-BUsSOz5M.mjs');
1080
+ const { inboxList } = await import('./agentCommands-DdOSpUEW.mjs');
1075
1081
  await inboxList({
1076
1082
  unread: hasFlag("--unread"),
1077
1083
  limit: parseFlagInt("--limit"),
@@ -1093,7 +1099,7 @@ async function handleSessionCommand() {
1093
1099
  process.exit(1);
1094
1100
  }
1095
1101
  if (agentSessionId && !sessionArgs[3]) {
1096
- const { inboxList } = await import('./agentCommands-BUsSOz5M.mjs');
1102
+ const { inboxList } = await import('./agentCommands-DdOSpUEW.mjs');
1097
1103
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
1098
1104
  } else if (sessionArgs[3]) {
1099
1105
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1103,7 +1109,7 @@ async function handleSessionCommand() {
1103
1109
  }
1104
1110
  } else if (inboxSubcmd === "reply") {
1105
1111
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1106
- const { inboxReply } = await import('./agentCommands-BUsSOz5M.mjs');
1112
+ const { inboxReply } = await import('./agentCommands-DdOSpUEW.mjs');
1107
1113
  await inboxReply(sessionArgs[2], sessionArgs[3]);
1108
1114
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1109
1115
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -1141,7 +1147,7 @@ async function handleMachineCommand() {
1141
1147
  return;
1142
1148
  }
1143
1149
  if (machineSubcommand === "share") {
1144
- const { machineShare } = await import('./commands-r4QVEq12.mjs');
1150
+ const { machineShare } = await import('./commands-wQYdc5EK.mjs');
1145
1151
  let machineId;
1146
1152
  const shareArgs = [];
1147
1153
  for (let i = 1; i < machineArgs.length; i++) {
@@ -1192,14 +1198,14 @@ async function handleMachineCommand() {
1192
1198
  process.exit(1);
1193
1199
  }
1194
1200
  if (all) {
1195
- const { fleetExec } = await import('./fleet-CSwFR8B0.mjs');
1201
+ const { fleetExec } = await import('./fleet-NRi2YMso.mjs');
1196
1202
  await fleetExec(command, { cwd });
1197
1203
  } else {
1198
- const { machineExec } = await import('./commands-r4QVEq12.mjs');
1204
+ const { machineExec } = await import('./commands-wQYdc5EK.mjs');
1199
1205
  await machineExec(machineId, command, cwd);
1200
1206
  }
1201
1207
  } else if (machineSubcommand === "info") {
1202
- const { machineInfo } = await import('./commands-r4QVEq12.mjs');
1208
+ const { machineInfo } = await import('./commands-wQYdc5EK.mjs');
1203
1209
  let machineId;
1204
1210
  for (let i = 1; i < machineArgs.length; i++) {
1205
1211
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1217,12 +1223,21 @@ async function handleMachineCommand() {
1217
1223
  for (let i = 2; i < machineArgs.length; i++) {
1218
1224
  if (machineArgs[i] === "--level" && i + 1 < machineArgs.length) {
1219
1225
  level = machineArgs[++i];
1226
+ continue;
1227
+ }
1228
+ if (machineArgs[i] === "-m" || machineArgs[i] === "--machine" || machineArgs[i] === "--all") {
1229
+ console.error(`svamp machine notify does not support ${machineArgs[i]} \u2014 it always notifies THIS machine's sessions.`);
1230
+ console.error(' To reach another machine: svamp session send <id> "<message>" (or svamp machine exec -m <id>).');
1231
+ process.exit(1);
1220
1232
  }
1233
+ console.error(`Unknown option for 'svamp machine notify': ${machineArgs[i]}`);
1234
+ console.error("Usage: svamp machine notify <message> [--level info|warning|error]");
1235
+ process.exit(1);
1221
1236
  }
1222
- const { machineNotify } = await import('./agentCommands-BUsSOz5M.mjs');
1237
+ const { machineNotify } = await import('./agentCommands-DdOSpUEW.mjs');
1223
1238
  await machineNotify(message, level);
1224
1239
  } else if (machineSubcommand === "ls") {
1225
- const { machineLs } = await import('./commands-r4QVEq12.mjs');
1240
+ const { machineLs } = await import('./commands-wQYdc5EK.mjs');
1226
1241
  let machineId;
1227
1242
  let showHidden = false;
1228
1243
  let path;
@@ -1288,26 +1303,26 @@ Examples:
1288
1303
  };
1289
1304
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1290
1305
  if (sub === "status") {
1291
- const { fleetStatus } = await import('./fleet-CSwFR8B0.mjs');
1306
+ const { fleetStatus } = await import('./fleet-NRi2YMso.mjs');
1292
1307
  await fleetStatus();
1293
1308
  } else if (sub === "upgrade-claude") {
1294
- const { fleetUpgradeClaude } = await import('./fleet-CSwFR8B0.mjs');
1309
+ const { fleetUpgradeClaude } = await import('./fleet-NRi2YMso.mjs');
1295
1310
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1296
1311
  } else if (sub === "upgrade-codex") {
1297
- const { fleetUpgradeCodex } = await import('./fleet-CSwFR8B0.mjs');
1312
+ const { fleetUpgradeCodex } = await import('./fleet-NRi2YMso.mjs');
1298
1313
  await fleetUpgradeCodex({ version: flag("version", "-v") });
1299
1314
  } else if (sub === "upgrade-kimi") {
1300
- const { fleetUpgradeKimi } = await import('./fleet-CSwFR8B0.mjs');
1315
+ const { fleetUpgradeKimi } = await import('./fleet-NRi2YMso.mjs');
1301
1316
  await fleetUpgradeKimi({ version: flag("version", "-v") });
1302
1317
  } else if (sub === "upgrade-svamp") {
1303
- const { fleetUpgradeSvamp } = await import('./fleet-CSwFR8B0.mjs');
1318
+ const { fleetUpgradeSvamp } = await import('./fleet-NRi2YMso.mjs');
1304
1319
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self"), force: hasFlag("force") });
1305
1320
  } else if (sub === "daemon-restart") {
1306
- const { fleetDaemonRestart } = await import('./fleet-CSwFR8B0.mjs');
1321
+ const { fleetDaemonRestart } = await import('./fleet-NRi2YMso.mjs');
1307
1322
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
1308
1323
  } else if (sub === "push-skill") {
1309
1324
  const name = fleetArgs[1];
1310
- const { fleetPushSkill } = await import('./fleet-CSwFR8B0.mjs');
1325
+ const { fleetPushSkill } = await import('./fleet-NRi2YMso.mjs');
1311
1326
  await fleetPushSkill(name);
1312
1327
  } else {
1313
1328
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -1323,7 +1338,7 @@ async function handleSkillsCommand() {
1323
1338
  await printSkillsHelp();
1324
1339
  return;
1325
1340
  }
1326
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-ZML4FIzg.mjs');
1341
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-Bx2JkNft.mjs');
1327
1342
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
1328
1343
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1329
1344
  if (!query) {
@@ -1370,7 +1385,7 @@ async function loginToHypha() {
1370
1385
  process.exit(1);
1371
1386
  }
1372
1387
  const anchor = anchorArg.replace(/\/+$/, "");
1373
- const { loadInstanceConfig } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aq; });
1388
+ const { loadInstanceConfig } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.ar; });
1374
1389
  let cfg = null;
1375
1390
  try {
1376
1391
  cfg = await loadInstanceConfig({ anchor, force: true });
@@ -1449,7 +1464,11 @@ Please open this URL in your browser:
1449
1464
  while (envLines.length > 0 && envLines[envLines.length - 1].trim() === "") {
1450
1465
  envLines.pop();
1451
1466
  }
1452
- fs.writeFileSync(envFile, envLines.join("\n") + "\n", "utf-8");
1467
+ fs.writeFileSync(envFile, envLines.join("\n") + "\n", { encoding: "utf-8", mode: 384 });
1468
+ try {
1469
+ fs.chmodSync(envFile, 384);
1470
+ } catch {
1471
+ }
1453
1472
  console.log(`
1454
1473
  Login successful!`);
1455
1474
  console.log(` User: ${userId}`);
@@ -1481,7 +1500,7 @@ async function logoutFromHypha() {
1481
1500
  } catch {
1482
1501
  }
1483
1502
  try {
1484
- const { clearInstanceConfigCache } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aq; });
1503
+ const { clearInstanceConfigCache } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.ar; });
1485
1504
  clearInstanceConfigCache();
1486
1505
  } catch {
1487
1506
  }
@@ -1499,7 +1518,11 @@ async function logoutFromHypha() {
1499
1518
  kept.pop();
1500
1519
  }
1501
1520
  if (kept.length > 0) {
1502
- fs.writeFileSync(envFile, kept.join("\n") + "\n", "utf-8");
1521
+ fs.writeFileSync(envFile, kept.join("\n") + "\n", { encoding: "utf-8", mode: 384 });
1522
+ try {
1523
+ fs.chmodSync(envFile, 384);
1524
+ } catch {
1525
+ }
1503
1526
  } else {
1504
1527
  fs.unlinkSync(envFile);
1505
1528
  }
@@ -1726,7 +1749,7 @@ Commands:
1726
1749
  svamp daemon --help Show all daemon commands
1727
1750
 
1728
1751
  Session management (requires daemon running):
1729
- svamp session spawn <agent> [opts] Spawn a new agent session (agents: claude, gemini, codex)
1752
+ svamp session spawn <agent> [opts] Spawn a new agent session (agents: claude, gemini, codex, kimi)
1730
1753
  svamp session send <id> <message> Send message to a session (urgent by default \u2014 wakes the recipient; --when-idle to defer to their next idle turn)
1731
1754
  svamp session query <dir> <prompt> Stateless one-shot: spawn \u2192 ask \u2192 answer \u2192 delete
1732
1755
  svamp session wait <id> Wait for agent to become idle
@@ -1764,6 +1787,7 @@ Commands:
1764
1787
  svamp skills --help Skills marketplace (find, install, publish)
1765
1788
  svamp service --help Service exposure (HTTP services from sandboxes)
1766
1789
  svamp outpost --help Connect a remote machine (FDE outpost): up, exec, list, install
1790
+ svamp wise --help WISE voice & meeting agent (ask, join-meeting, announce, meetings, voice)
1767
1791
  svamp notify <email> \u2026 Send a cross-user notification (bell inbox); --title/--body/--action/--level
1768
1792
  svamp events list|ack Read / dismiss your notification bell inbox
1769
1793
  svamp admin \u2026 System-collection ops (create-system-collections, set-collection-config, migrate-collection-children)
@@ -1802,6 +1826,8 @@ Usage:
1802
1826
  for the hypha-cloud cluster, or your own deployment's proxy.
1803
1827
  svamp daemon auth use-login Use ~/.claude credentials (run "claude login" to set them)
1804
1828
  svamp daemon auth set <URL> <KEY> Use a custom Anthropic gateway (base URL must not end in /v1)
1829
+ svamp daemon codex-auth --help Configure how Codex authenticates (status/set/use-openai/use-chatgpt/clear)
1830
+ svamp daemon kimi-auth --help Configure how Kimi Code authenticates (status/use-moonshot/use-coding/set/clear)
1805
1831
 
1806
1832
  Claude auth flags (take effect on next start/restart):
1807
1833
  svamp daemon start --use-hypha-proxy <URL> (or --hypha-proxy-url URL)
@@ -1827,7 +1853,7 @@ async function applyClaudeAuthFlags(argv) {
1827
1853
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
1828
1854
  );
1829
1855
  }
1830
- const mod = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
1856
+ const mod = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.as; });
1831
1857
  if (hasHypha) {
1832
1858
  let url;
1833
1859
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -1881,7 +1907,7 @@ async function applyDaemonShareFlag(argv) {
1881
1907
  }
1882
1908
  }
1883
1909
  if (collected.length === 0) return;
1884
- const { updateEnvFile } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
1910
+ const { updateEnvFile } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.as; });
1885
1911
  const seen = /* @__PURE__ */ new Set();
1886
1912
  const deduped = collected.filter((e) => {
1887
1913
  const k = e.toLowerCase();
@@ -1914,7 +1940,7 @@ async function handleWiseAgentCommand(rest) {
1914
1940
  }
1915
1941
  });
1916
1942
  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(" ");
1917
- const { wiseAskCli } = await import('./commands-r4QVEq12.mjs');
1943
+ const { wiseAskCli } = await import('./commands-wQYdc5EK.mjs');
1918
1944
  await wiseAskCli(machineId, message, sessionId, { json });
1919
1945
  return;
1920
1946
  }
@@ -1926,7 +1952,7 @@ async function handleWiseAgentCommand(rest) {
1926
1952
  }
1927
1953
  return void 0;
1928
1954
  };
1929
- const { runWiseVoiceCli } = await import('./headlessCli-Dg-awx4h.mjs');
1955
+ const { runWiseVoiceCli } = await import('./headlessCli-DpTQ00fL.mjs');
1930
1956
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
1931
1957
  return;
1932
1958
  }
@@ -1944,7 +1970,7 @@ async function handleWiseAgentCommand(rest) {
1944
1970
  const mode = valueOf(["--mode"]);
1945
1971
  const mission = valueOf(["--mission"]);
1946
1972
  const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
1947
- const { wiseJoinMeetingCli } = await import('./commands-r4QVEq12.mjs');
1973
+ const { wiseJoinMeetingCli } = await import('./commands-wQYdc5EK.mjs');
1948
1974
  await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
1949
1975
  return;
1950
1976
  }
@@ -1956,7 +1982,7 @@ async function handleWiseAgentCommand(rest) {
1956
1982
  }
1957
1983
  return void 0;
1958
1984
  };
1959
- const { wiseLeaveMeetingCli } = await import('./commands-r4QVEq12.mjs');
1985
+ const { wiseLeaveMeetingCli } = await import('./commands-wQYdc5EK.mjs');
1960
1986
  await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
1961
1987
  return;
1962
1988
  }
@@ -1980,7 +2006,7 @@ async function handleWiseAgentCommand(rest) {
1980
2006
  }
1981
2007
  });
1982
2008
  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(" ");
1983
- const { wiseAnnounceCli } = await import('./commands-r4QVEq12.mjs');
2009
+ const { wiseAnnounceCli } = await import('./commands-wQYdc5EK.mjs');
1984
2010
  await wiseAnnounceCli(machineId, text, sessionId, { json });
1985
2011
  return;
1986
2012
  }
@@ -1992,13 +2018,15 @@ async function handleWiseAgentCommand(rest) {
1992
2018
  }
1993
2019
  return void 0;
1994
2020
  };
1995
- const { wiseMeetingsCli } = await import('./commands-r4QVEq12.mjs');
2021
+ const { wiseMeetingsCli } = await import('./commands-wQYdc5EK.mjs');
1996
2022
  await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
1997
2023
  return;
1998
2024
  }
1999
2025
  if (sub === "--help" || sub === "-h") {
2000
2026
  console.log(`Usage:
2001
2027
  svamp wise ask "<message>" [--session <id>] [-m <machine>] [--json]
2028
+ Fast WISE turn \u2014 GLOBAL machine-manager by default (daemon status, run
2029
+ commands, inspect/spawn/drive any session); --session <id> scopes to one.
2002
2030
  svamp wise join-meeting <zoom|meet|teams url> [--session <id>|--global] [--mode listen|text|voice] [--mission "<prompt>"] [-m <machine>]
2003
2031
  --mode listen=silent (transcribe only), text=reply in meeting chat, voice=speak aloud (default).
2004
2032
  --mission optional focus prompt for the agent; omit for a general meeting mission.
@@ -2007,8 +2035,7 @@ async function handleWiseAgentCommand(rest) {
2007
2035
  Post a chat message into the live meeting (defaults --session to
2008
2036
  $SVAMP_SESSION_ID, so the deep agent can announce when work is done).
2009
2037
  svamp wise meetings [-m <machine>]
2010
- Fast WISE turn \u2014 GLOBAL machine-manager by default (daemon status, run
2011
- commands, inspect/spawn/drive any session); --session <id> scopes to one.
2038
+ List the meeting agents currently active on the machine.
2012
2039
 
2013
2040
  svamp wise voice [--voice <name>] [--wake <keyword.ppn>] [--model <id>]
2014
2041
  HEADLESS voice on this machine (mic + speaker, no browser). Needs \`sox\`.
@@ -2042,7 +2069,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2042
2069
  return;
2043
2070
  }
2044
2071
  const authArgs = rest.slice(1);
2045
- const mod = await import('./auth-D5yTcsy2.mjs');
2072
+ const mod = await import('./auth-B2XK13r-.mjs');
2046
2073
  let action;
2047
2074
  try {
2048
2075
  action = mod.parseWiseAgentAuthArgs(authArgs);
@@ -2052,7 +2079,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2052
2079
  return;
2053
2080
  }
2054
2081
  if (action) {
2055
- const { updateEnvFile } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
2082
+ const { updateEnvFile } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.as; });
2056
2083
  const updates = mod.buildWiseAgentEnvUpdates(action);
2057
2084
  updateEnvFile(updates);
2058
2085
  for (const [k, v] of Object.entries(updates)) {
@@ -2066,7 +2093,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2066
2093
  }
2067
2094
  async function handleDaemonAuthCommand(argv) {
2068
2095
  const sub = (argv[0] || "status").toLowerCase();
2069
- const mod = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
2096
+ const mod = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.as; });
2070
2097
  if (sub === "--help" || sub === "-h" || sub === "help") {
2071
2098
  console.log(`
2072
2099
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2140,8 +2167,8 @@ one step: --use-hypha-proxy / --use-claude-login / --anthropic-base-url URL --an
2140
2167
  }
2141
2168
  async function handleDaemonCodexAuthCommand(argv) {
2142
2169
  const sub = (argv[0] || "status").toLowerCase();
2143
- const { updateEnvFile } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
2144
- const { resolveCodexProvider } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.as; });
2170
+ const { updateEnvFile } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.as; });
2171
+ const { resolveCodexProvider } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.at; });
2145
2172
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2146
2173
  if (sub === "--help" || sub === "-h" || sub === "help") {
2147
2174
  console.log(`
@@ -2227,8 +2254,8 @@ The generic LLM_API_BASE / LLM_API_KEY / LLM_MODEL env vars are also honored if
2227
2254
  }
2228
2255
  async function handleDaemonKimiAuthCommand(argv) {
2229
2256
  const sub = (argv[0] || "status").toLowerCase();
2230
- const { updateEnvFile } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ar; });
2231
- const { resolveKimiProvider, buildKimiCatalogAddArgs, DEFAULT_KIMI_PROVIDER } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aA; });
2257
+ const { updateEnvFile } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.as; });
2258
+ const { resolveKimiProvider, buildKimiCatalogAddArgs, DEFAULT_KIMI_PROVIDER } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.aB; });
2232
2259
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2233
2260
  const PRESETS = {
2234
2261
  "use-moonshot": { provider: "moonshotai", base: "https://api.moonshot.ai/v1", label: "Moonshot AI (moonshotai)" },
@@ -2361,6 +2388,7 @@ AGENTS:
2361
2388
  claude Claude Code \u2014 full coding agent (default)
2362
2389
  gemini Google Gemini via ACP protocol
2363
2390
  codex OpenAI Codex via app-server (streaming, resume, custom providers)
2391
+ kimi MoonshotAI Kimi Code via ACP (auth: svamp daemon kimi-auth)
2364
2392
 
2365
2393
  Usage: svamp session spawn <agent> [options]
2366
2394
  The <agent> argument is required. Use "claude" if unsure.
@@ -2382,7 +2410,8 @@ COMMANDS:
2382
2410
  same-user sessions on other machines, and how to reach them (alias: env)
2383
2411
 
2384
2412
  Communicate:
2385
- send <id> <message> [--when-idle] [--wait] [--response] [--btw] [--require-approval] [--timeout N] [--json] [--urgency urgent|normal]
2413
+ send <id> <message> [--model <id>] [--plain] [--subject "..."] [--when-idle] [--wait] [--response] [--btw]
2414
+ [--require-approval] [--as-issue [--issue-title "..."]] [--timeout N] [--json] [--urgency urgent|normal]
2386
2415
  Send a message to a running session.
2387
2416
  By default this is URGENT: it wakes the recipient so they
2388
2417
  handle it promptly. Pass --when-idle to defer instead \u2014
@@ -2567,10 +2596,11 @@ Usage:
2567
2596
  svamp machine share --remove <email> Remove shared user
2568
2597
  svamp machine share --config <path> Apply security context config
2569
2598
  svamp machine share --show-config Show current security context config
2570
- svamp machine notify <message> [--level ...] Send a machine notification (info|warning|error)
2599
+ svamp machine notify <message> [--level ...] Notify THIS machine's sessions (local-only, no -m/--all)
2571
2600
 
2572
2601
  Options:
2573
- --machine <id>, -m <id> Target a specific machine (prefix match supported)
2602
+ --machine <id>, -m <id> Target a specific machine (prefix match supported).
2603
+ Applies to info/exec/ls \u2014 NOT to notify, which is local-only.
2574
2604
  --cwd <path> Working directory for exec (default: home dir)
2575
2605
  --hidden, -a Show hidden files in ls
2576
2606
 
@@ -2588,7 +2618,7 @@ Examples:
2588
2618
  async function printSkillsHelp() {
2589
2619
  let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
2590
2620
  try {
2591
- const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.aC; });
2621
+ const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-RA4Vr6lj.mjs').then(function (n) { return n.aD; });
2592
2622
  browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
2593
2623
  } catch {
2594
2624
  }