svamp-cli 0.2.346 → 0.2.358

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 (33) hide show
  1. package/bin/skills/artifact/SKILL.md +19 -5
  2. package/bin/skills/crew/SKILL.md +42 -11
  3. package/dist/{acpBackend-BZ1MJhQV.mjs → acpBackend-UaBD4zL3.mjs} +3 -0
  4. package/dist/{agentCommands-B2Nl7Fof.mjs → agentCommands-C_KvvYFp.mjs} +5 -5
  5. package/dist/{claudeAuth-iAerdaMr.mjs → claudeAuth-DMDvPNhO.mjs} +55 -6
  6. package/dist/cli.mjs +164 -86
  7. package/dist/{commands-D69mnkYu.mjs → commands-B19lVZjm.mjs} +10 -3
  8. package/dist/{commands-BB1Kcyt-.mjs → commands-Bmoy6Rlw.mjs} +34 -4
  9. package/dist/{commands-CiRCwjkJ.mjs → commands-CFBKkfX8.mjs} +9 -9
  10. package/dist/{commands-D1pZq3d4.mjs → commands-CcdoQIkb.mjs} +126 -25
  11. package/dist/{commands-BOpoVBOM.mjs → commands-DH_YQrAP.mjs} +5 -21
  12. package/dist/{commands-H4PsTGn8.mjs → commands-DRxANaS5.mjs} +65 -19
  13. package/dist/{commands-C2aODeVc.mjs → commands-nkvTnUJj.mjs} +29 -13
  14. package/dist/{detectIsolation-CzoDCEnh.mjs → detectIsolation-CrV8IFDv.mjs} +36 -16
  15. package/dist/{fleet-DM_Q7w69.mjs → fleet-Ca-UjJNL.mjs} +40 -15
  16. package/dist/friendlyName-B-OEwt0t.mjs +341 -0
  17. package/dist/{headlessCli-C8HzQvis.mjs → headlessCli-BpTXz6FD.mjs} +24 -16
  18. package/dist/{hookSettings-DYMTUgVA.mjs → hookSettings-CvvUhwCK.mjs} +294 -55
  19. package/dist/{friendlyName-1UZcyDhu.mjs → inboxGuard-CDqmIypF.mjs} +32 -347
  20. package/dist/index.mjs +10 -9
  21. package/dist/{loopVerify-B47sSjxe.mjs → loopVerify-CxAKJB5a.mjs} +1 -1
  22. package/dist/{notifyCommands-D-IKIxiq.mjs → notifyCommands-CCUE18Q-.mjs} +1 -1
  23. package/dist/package-DTTWvJbp.mjs +64 -0
  24. package/dist/{rpc-Cf0grcru.mjs → rpc-CAlAHQAy.mjs} +8 -3
  25. package/dist/{rpc-BB6RF4-F.mjs → rpc-CacreLQ8.mjs} +13 -9
  26. package/dist/{run-ChdsgaSD.mjs → run-Bc81iurl.mjs} +27 -8
  27. package/dist/{run-DkjwF-zA.mjs → run-DKOND4dO.mjs} +222 -73
  28. package/dist/{scheduler-BY30ZrB9.mjs → scheduler-IyLWBF8T.mjs} +28 -10
  29. package/dist/{serveAuth-DbVLRCRR.mjs → serveAuth-4M0vwMyj.mjs} +53 -11
  30. package/dist/{serveCommands-CUHUiYnZ.mjs → serveCommands-B-Ym_QXc.mjs} +8 -8
  31. package/dist/{store-Bn0ByYev.mjs → store-D8dok6_d.mjs} +62 -14
  32. package/package.json +3 -3
  33. package/dist/package-DtuINqf5.mjs +0 -64
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { c as clearStopMarker, b as stopMarkerExists, s as startDaemon, a as stopDaemon, d as daemonStatus } from './run-DkjwF-zA.mjs';
1
+ import { c as clearStopMarker, b as stopMarkerExists, s as startDaemon, a as stopDaemon, d as daemonStatus } from './run-DKOND4dO.mjs';
2
2
  import { ensureSupervisorViaServiceManager, LAUNCHD_LABEL } from './serviceManager-hlOVxkhW.mjs';
3
3
  import { f as flushStdout, a as flushAndExit } from './flushExit-C-i6SGjj.mjs';
4
4
  import { w as wantsHelp } from './wantsHelp-6bMOeNUz.mjs';
@@ -9,7 +9,7 @@ import 'path';
9
9
  import 'url';
10
10
  import 'child_process';
11
11
  import 'crypto';
12
- import './hookSettings-DYMTUgVA.mjs';
12
+ import './hookSettings-CvvUhwCK.mjs';
13
13
  import 'node:crypto';
14
14
  import './types-57J3Re0n.mjs';
15
15
  import './securityContext-Cm5UTCuD.mjs';
@@ -21,19 +21,20 @@ import 'util';
21
21
  import 'http';
22
22
  import 'net';
23
23
  import './instance-CeHz5C8v.mjs';
24
- import './serveAuth-DbVLRCRR.mjs';
24
+ import './serveAuth-4M0vwMyj.mjs';
25
25
  import 'node:os';
26
26
  import 'node:path';
27
27
  import './envFlag-COOuJ3AH.mjs';
28
- import './claudeAuth-iAerdaMr.mjs';
28
+ import './claudeAuth-DMDvPNhO.mjs';
29
29
  import './fileLock-BMPwCrB6.mjs';
30
30
  import './codexProvider-BtxYc5Rj.mjs';
31
- import './friendlyName-1UZcyDhu.mjs';
31
+ import './inboxGuard-CDqmIypF.mjs';
32
32
  import 'node:events';
33
33
  import './cron-hHGdb5kU.mjs';
34
+ import './friendlyName-B-OEwt0t.mjs';
34
35
  import './hyphaClient-ybivOjZo.mjs';
35
36
  import './sharingNotificationSync-qGIQ-3yf.mjs';
36
- import './acpBackend-BZ1MJhQV.mjs';
37
+ import './acpBackend-UaBD4zL3.mjs';
37
38
  import '@agentclientprotocol/sdk';
38
39
  import './DefaultTransport-vfp78fug.mjs';
39
40
  import './wrapCommand-CdNawSaa.mjs';
@@ -46,12 +47,12 @@ import './GeminiTransport-3OkhtFRO.mjs';
46
47
  import './KimiTransport-D8n009Tr.mjs';
47
48
  import './kimiProvider-DbxODebR.mjs';
48
49
  import './kimiSetup-NGsoYB5h.mjs';
49
- import './detectIsolation-CzoDCEnh.mjs';
50
+ import './detectIsolation-CrV8IFDv.mjs';
50
51
  import 'node:fs/promises';
51
52
  import './pinnedNono-5ZHb6328.mjs';
52
53
  import './bootStatus-DqtNgJch.mjs';
53
- import './loopVerify-B47sSjxe.mjs';
54
- import './store-Bn0ByYev.mjs';
54
+ import './loopVerify-CxAKJB5a.mjs';
55
+ import './store-D8dok6_d.mjs';
55
56
  import './api-BHjyC0Ph.mjs';
56
57
  import './store-fi0f-ff1.mjs';
57
58
  import 'yaml';
@@ -89,7 +90,7 @@ async function main() {
89
90
  }
90
91
  const whenIdle = args.includes("--when-idle");
91
92
  const force = args.includes("--force");
92
- const mod = await import('./run-DkjwF-zA.mjs').then(function (n) { return n.h; });
93
+ const mod = await import('./run-DKOND4dO.mjs').then(function (n) { return n.i; });
93
94
  if (whenIdle && !force) {
94
95
  if (mod.isDaemonAlive()) {
95
96
  mod.writePendingRestart({ reason: "svamp daemon restart --when-idle" });
@@ -255,7 +256,7 @@ async function main() {
255
256
  releaseSupervisorLock,
256
257
  findOrphanedSyncPids,
257
258
  killOrphanedSyncs
258
- } = await import('./run-DkjwF-zA.mjs').then(function (n) { return n.f; });
259
+ } = await import('./run-DKOND4dO.mjs').then(function (n) { return n.h; });
259
260
  const supervisorPidFile = pathJoin(svampHome, "supervisor.pid");
260
261
  const lock = acquireSupervisorLockWithRetry(supervisorPidFile, process.pid);
261
262
  if (!lock.acquired) {
@@ -421,7 +422,7 @@ async function main() {
421
422
  await flushStdout();
422
423
  process.exit(0);
423
424
  } else if (daemonSubcommand === "install-nono") {
424
- const { installNono } = await import('./detectIsolation-CzoDCEnh.mjs');
425
+ const { installNono } = await import('./detectIsolation-CrV8IFDv.mjs');
425
426
  const okNono = await installNono();
426
427
  if (!okNono) {
427
428
  console.error("Failed to install nono. See the log above for the reason.");
@@ -473,7 +474,7 @@ async function main() {
473
474
  await flushStdout();
474
475
  process.exit(1);
475
476
  }
476
- const { handleServiceCommand } = await import('./commands-CiRCwjkJ.mjs');
477
+ const { handleServiceCommand } = await import('./commands-CFBKkfX8.mjs');
477
478
  await handleServiceCommand();
478
479
  } else if (subcommand === "serve") {
479
480
  const { isSandboxed: isSandboxedServe } = await import('./sandboxDetect-Cdzsj5TC.mjs');
@@ -482,7 +483,7 @@ async function main() {
482
483
  await flushStdout();
483
484
  process.exit(1);
484
485
  }
485
- const { handleServeCommand } = await import('./serveCommands-CUHUiYnZ.mjs');
486
+ const { handleServeCommand } = await import('./serveCommands-B-Ym_QXc.mjs');
486
487
  await handleServeCommand();
487
488
  await flushStdout();
488
489
  process.exit(0);
@@ -493,7 +494,7 @@ async function main() {
493
494
  await flushStdout();
494
495
  process.exit(1);
495
496
  }
496
- const { processCommand } = await import('./commands-BOpoVBOM.mjs');
497
+ const { processCommand } = await import('./commands-DH_YQrAP.mjs');
497
498
  let machineId;
498
499
  const processArgs = args.slice(1);
499
500
  const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
@@ -508,16 +509,16 @@ async function main() {
508
509
  await flushStdout();
509
510
  process.exit(0);
510
511
  } else if (subcommand === "outpost") {
511
- const { outpostCommand } = await import('./commands-BB1Kcyt-.mjs');
512
+ const { outpostCommand } = await import('./commands-Bmoy6Rlw.mjs');
512
513
  await outpostCommand(args.slice(1));
513
514
  await flushStdout();
514
515
  process.exit(0);
515
516
  } else if (subcommand === "issue" || subcommand === "issues") {
516
- const { issueCommand } = await import('./commands-H4PsTGn8.mjs');
517
+ const { issueCommand } = await import('./commands-DRxANaS5.mjs');
517
518
  await issueCommand(args.slice(1));
518
519
  await flushAndExit(0);
519
520
  } else if (subcommand === "workflow" || subcommand === "workflows") {
520
- const { workflowCommand } = await import('./commands-D69mnkYu.mjs');
521
+ const { workflowCommand } = await import('./commands-B19lVZjm.mjs');
521
522
  await workflowCommand(args.slice(1));
522
523
  await flushAndExit(0);
523
524
  } else if (subcommand === "wise-agent" || subcommand === "wise") {
@@ -525,12 +526,12 @@ async function main() {
525
526
  await flushStdout();
526
527
  process.exit(0);
527
528
  } else if (subcommand === "feature" || subcommand === "crew") {
528
- const { crewCommand } = await import('./commands-C2aODeVc.mjs');
529
+ const { crewCommand } = await import('./commands-nkvTnUJj.mjs');
529
530
  await crewCommand(args.slice(1));
530
531
  await flushStdout();
531
532
  process.exit(0);
532
533
  } else if (subcommand === "notify") {
533
- const { notifyUser } = await import('./notifyCommands-D-IKIxiq.mjs');
534
+ const { notifyUser } = await import('./notifyCommands-CCUE18Q-.mjs');
534
535
  const rest = args.slice(1);
535
536
  let email;
536
537
  const o = {};
@@ -570,7 +571,7 @@ async function main() {
570
571
  await flushStdout();
571
572
  process.exit(0);
572
573
  } else if (subcommand === "events") {
573
- const { listEvents, ackEvent } = await import('./notifyCommands-D-IKIxiq.mjs');
574
+ const { listEvents, ackEvent } = await import('./notifyCommands-CCUE18Q-.mjs');
574
575
  const sub = args[1];
575
576
  const rest = args.slice(2);
576
577
  let email;
@@ -592,7 +593,7 @@ async function main() {
592
593
  } else if (!subcommand || subcommand === "start") {
593
594
  await handleInteractiveCommand();
594
595
  } else if (subcommand === "--version" || subcommand === "-v") {
595
- const pkg = await import('./package-DtuINqf5.mjs').catch(() => ({ default: { version: "unknown" } }));
596
+ const pkg = await import('./package-DTTWvJbp.mjs').catch(() => ({ default: { version: "unknown" } }));
596
597
  console.log(`svamp version: ${pkg.default.version}`);
597
598
  } else {
598
599
  console.error(`Unknown command: ${subcommand}`);
@@ -602,7 +603,7 @@ async function main() {
602
603
  }
603
604
  }
604
605
  async function handleInteractiveCommand() {
605
- const { runInteractive } = await import('./run-ChdsgaSD.mjs');
606
+ const { runInteractive } = await import('./run-Bc81iurl.mjs');
606
607
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
607
608
  let directory = process.cwd();
608
609
  let resumeSessionId;
@@ -657,15 +658,19 @@ async function handleAgentCommand() {
657
658
  }
658
659
  console.log('\nUse "svamp agent <name>" to start an interactive session.');
659
660
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
661
+ console.log("Tool calls are prompted on a terminal; add --auto-approve (-y) to allow them unattended.");
660
662
  return;
661
663
  }
662
664
  const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./acpAgentConfig-CObOPlA8.mjs');
663
665
  let cwd = process.cwd();
666
+ let autoApprove = false;
664
667
  const filteredArgs = [];
665
668
  for (let i = 0; i < agentArgs.length; i++) {
666
669
  if ((agentArgs[i] === "-d" || agentArgs[i] === "--directory") && i + 1 < agentArgs.length) {
667
670
  cwd = agentArgs[i + 1];
668
671
  i++;
672
+ } else if (agentArgs[i] === "--auto-approve" || agentArgs[i] === "--yes" || agentArgs[i] === "-y") {
673
+ autoApprove = true;
669
674
  } else {
670
675
  filteredArgs.push(agentArgs[i]);
671
676
  }
@@ -682,12 +687,54 @@ async function handleAgentCommand() {
682
687
  if (process.env.DEBUG) console.error("[debug]", ...logArgs);
683
688
  };
684
689
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
690
+ let replRl = null;
691
+ const stdinIsTty = Boolean(process.stdin.isTTY);
692
+ let approveAllForSession = autoApprove;
693
+ const permissionHandler = {
694
+ async handleToolCall(_toolCallId, toolName, input) {
695
+ if (approveAllForSession) {
696
+ return { decision: "approved" };
697
+ }
698
+ if (!stdinIsTty || !replRl) {
699
+ console.error(
700
+ `
701
+ [permission] DENIED ${toolName}: no terminal to ask on. Re-run with --auto-approve to allow tool calls unattended, or use \`svamp session spawn ${config.agentName}\` for a managed session.`
702
+ );
703
+ return { decision: "denied" };
704
+ }
705
+ const preview = (() => {
706
+ try {
707
+ const j = JSON.stringify(input);
708
+ return j && j.length > 200 ? j.slice(0, 200) + "\u2026" : j || "";
709
+ } catch {
710
+ return "";
711
+ }
712
+ })();
713
+ const answer = await new Promise((resolve) => {
714
+ replRl.question(
715
+ `
716
+ [permission] ${toolName} ${preview}
717
+ allow? [y]es / [n]o / [a]ll for this session: `,
718
+ (a) => resolve(String(a || "").trim().toLowerCase())
719
+ );
720
+ });
721
+ if (answer === "a" || answer === "all") {
722
+ approveAllForSession = true;
723
+ return { decision: "approved_for_session" };
724
+ }
725
+ if (answer === "y" || answer === "yes") return { decision: "approved" };
726
+ return { decision: "denied" };
727
+ }
728
+ };
729
+ console.log(
730
+ autoApprove ? "Tool calls: AUTO-APPROVED (--auto-approve)." : stdinIsTty ? "Tool calls: you will be asked to approve each one (y / n / a)." : "Tool calls: DENIED \u2014 stdin is not a terminal. Re-run with --auto-approve to allow them."
731
+ );
685
732
  let backend;
686
733
  if (KNOWN_CODEX_AGENTS[config.agentName]) {
687
734
  const { CodexAppServerBackend } = await import('./codexAppServerBackend-VGsYtbqg.mjs').then(function (n) { return n.a; });
688
735
  backend = new CodexAppServerBackend({ cwd, log: logFn });
689
736
  } else {
690
- const { AcpBackend } = await import('./acpBackend-BZ1MJhQV.mjs');
737
+ const { AcpBackend } = await import('./acpBackend-UaBD4zL3.mjs');
691
738
  const { GeminiTransport } = await import('./GeminiTransport-3OkhtFRO.mjs');
692
739
  const { KimiTransport } = await import('./KimiTransport-D8n009Tr.mjs');
693
740
  const { DefaultTransport } = await import('./DefaultTransport-vfp78fug.mjs');
@@ -706,7 +753,9 @@ async function handleAgentCommand() {
706
753
  args: config.args,
707
754
  transportHandler,
708
755
  env: acpEnv,
709
- log: logFn
756
+ log: logFn,
757
+ permissionHandler
758
+ // #1715 — without one, AcpBackend cancels every tool call (#1630)
710
759
  });
711
760
  }
712
761
  let currentText = "";
@@ -772,6 +821,7 @@ Agent stopped: ${msg.detail || ""}`);
772
821
  output: process.stdout,
773
822
  terminal: false
774
823
  });
824
+ replRl = rl;
775
825
  rl.on("line", async (line) => {
776
826
  const trimmed = line.trim();
777
827
  if (!trimmed) return;
@@ -829,7 +879,7 @@ async function handleSessionCommand() {
829
879
  process.exit(1);
830
880
  }
831
881
  }
832
- 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-D1pZq3d4.mjs');
882
+ const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionLoopExtend, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, replyPositionals, sendPositionals, sessionInboxClear } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
833
883
  const parseFlagStr = (flag, shortFlag) => {
834
884
  for (let i = 1; i < sessionArgs.length; i++) {
835
885
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -845,6 +895,16 @@ async function handleSessionCommand() {
845
895
  return isNaN(n) ? void 0 : n;
846
896
  };
847
897
  const hasFlag = (flag) => sessionArgs.includes(flag);
898
+ const { parseUrgencyValue } = await import('./inboxGuard-CDqmIypF.mjs');
899
+ const urgencyFlag = async () => {
900
+ const parsed = parseUrgencyValue(parseFlagStr("--urgency"), { present: hasFlag("--urgency") });
901
+ if (!parsed.ok) {
902
+ console.error(parsed.message);
903
+ await flushStdout();
904
+ process.exit(1);
905
+ }
906
+ return parsed.value;
907
+ };
848
908
  if (sessionSubcommand === "machines" || sessionSubcommand === "machine") {
849
909
  await sessionMachines();
850
910
  } else if (sessionSubcommand === "list" || sessionSubcommand === "ls") {
@@ -902,7 +962,7 @@ async function handleSessionCommand() {
902
962
  const warning = describeUnenforceable("nono", { filesystem: { denyRead } });
903
963
  if (warning) console.warn(`Warning: ${warning}`);
904
964
  }
905
- const { parseShareArg } = await import('./commands-D1pZq3d4.mjs');
965
+ const { parseShareArg } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
906
966
  const shareEntries = share.map((s) => parseShareArg(s));
907
967
  await sessionSpawn(agent, dir, targetMachineId, {
908
968
  message,
@@ -971,7 +1031,8 @@ async function handleSessionCommand() {
971
1031
  }
972
1032
  await sessionAttach(sessionArgs[1], targetMachineId);
973
1033
  } else if (sessionSubcommand === "send") {
974
- if (!sessionArgs[1] || !sessionArgs[2]) {
1034
+ const sendPos = sendPositionals(sessionArgs.slice(1));
1035
+ if (!sendPos[0] || !sendPos[1]) {
975
1036
  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]');
976
1037
  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).");
977
1038
  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.");
@@ -979,7 +1040,7 @@ async function handleSessionCommand() {
979
1040
  await flushStdout();
980
1041
  process.exit(1);
981
1042
  }
982
- await sessionSend(sessionArgs[1], sessionArgs[2], targetMachineId, {
1043
+ await sessionSend(sendPos[0], sendPos[1], targetMachineId, {
983
1044
  wait: hasFlag("--wait"),
984
1045
  response: hasFlag("--response"),
985
1046
  btw: hasFlag("--btw"),
@@ -988,7 +1049,7 @@ async function handleSessionCommand() {
988
1049
  json: hasFlag("--json"),
989
1050
  subject: parseFlagStr("--subject"),
990
1051
  whenIdle: hasFlag("--when-idle"),
991
- urgency: parseFlagStr("--urgency"),
1052
+ urgency: await urgencyFlag(),
992
1053
  model: parseFlagStr("--model"),
993
1054
  plain: hasFlag("--plain"),
994
1055
  asIssue: hasFlag("--as-issue"),
@@ -1001,7 +1062,7 @@ async function handleSessionCommand() {
1001
1062
  await flushStdout();
1002
1063
  process.exit(1);
1003
1064
  }
1004
- const { sessionEditMessage } = await import('./commands-D1pZq3d4.mjs');
1065
+ const { sessionEditMessage } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1005
1066
  await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
1006
1067
  } else if (sessionSubcommand === "refine") {
1007
1068
  if (!sessionArgs[1] || !sessionArgs[2]) {
@@ -1010,7 +1071,7 @@ async function handleSessionCommand() {
1010
1071
  await flushStdout();
1011
1072
  process.exit(1);
1012
1073
  }
1013
- const { sessionRefineLastReply } = await import('./commands-D1pZq3d4.mjs');
1074
+ const { sessionRefineLastReply } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1014
1075
  await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
1015
1076
  } else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
1016
1077
  if (!sessionArgs[1]) {
@@ -1019,7 +1080,7 @@ async function handleSessionCommand() {
1019
1080
  await flushStdout();
1020
1081
  process.exit(1);
1021
1082
  }
1022
- const { sessionUndoEdit } = await import('./commands-D1pZq3d4.mjs');
1083
+ const { sessionUndoEdit } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1023
1084
  await sessionUndoEdit(sessionArgs[1], targetMachineId);
1024
1085
  } else if (sessionSubcommand === "query") {
1025
1086
  const dir = sessionArgs[1];
@@ -1030,7 +1091,7 @@ async function handleSessionCommand() {
1030
1091
  await flushStdout();
1031
1092
  process.exit(1);
1032
1093
  }
1033
- const { sessionQuery } = await import('./commands-D1pZq3d4.mjs');
1094
+ const { sessionQuery } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1034
1095
  await sessionQuery(dir, prompt, targetMachineId, {
1035
1096
  timeout: parseFlagInt("--timeout"),
1036
1097
  json: hasFlag("--json"),
@@ -1066,7 +1127,7 @@ async function handleSessionCommand() {
1066
1127
  await flushStdout();
1067
1128
  process.exit(1);
1068
1129
  }
1069
- const { sessionApprove } = await import('./commands-D1pZq3d4.mjs');
1130
+ const { sessionApprove } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1070
1131
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
1071
1132
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
1072
1133
  json: hasFlag("--json")
@@ -1077,7 +1138,7 @@ async function handleSessionCommand() {
1077
1138
  await flushStdout();
1078
1139
  process.exit(1);
1079
1140
  }
1080
- const { sessionDeny } = await import('./commands-D1pZq3d4.mjs');
1141
+ const { sessionDeny } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1081
1142
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
1082
1143
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
1083
1144
  json: hasFlag("--json")
@@ -1086,10 +1147,14 @@ async function handleSessionCommand() {
1086
1147
  const id = sessionArgs[1];
1087
1148
  const maybeTask = sessionArgs[2] && !sessionArgs[2].startsWith("-") ? sessionArgs[2] : void 0;
1088
1149
  const until = parseFlagStr("--until") ?? parseFlagStr("--criteria");
1089
- if (!id || !maybeTask && !until) {
1150
+ const limitOnlyFlags = ["--max", "--max-iterations", "--max-rounds", "--max-tokens-per-hour", "--max-runtime", "--max-runtime-sec"];
1151
+ const hasLimit = limitOnlyFlags.some((f) => parseFlagInt(f) !== void 0);
1152
+ if (!id || !maybeTask && !until && !hasLimit) {
1090
1153
  console.error('Usage: svamp session loop <session-id> ["<task>"] --until "<criteria>" [--oracle "cmd"] [--max N] [--max-tokens-per-hour N] [--max-runtime-sec N]');
1091
1154
  console.error(" With a task: kicks the agent off and gates it until done.");
1092
1155
  console.error(" With only --until: hot-plugs the gate onto the running session (no kickoff).");
1156
+ console.error(" With only a limit (--max / --max-tokens-per-hour / --max-runtime-sec):");
1157
+ console.error(" updates the cap on an existing loop, and RESUMES it if a ceiling had stopped it.");
1093
1158
  await flushStdout();
1094
1159
  process.exit(1);
1095
1160
  }
@@ -1130,7 +1195,7 @@ async function handleSessionCommand() {
1130
1195
  await flushStdout();
1131
1196
  process.exit(1);
1132
1197
  }
1133
- const { sessionSetTitle } = await import('./agentCommands-B2Nl7Fof.mjs');
1198
+ const { sessionSetTitle } = await import('./agentCommands-C_KvvYFp.mjs');
1134
1199
  await sessionSetTitle(title);
1135
1200
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
1136
1201
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -1139,7 +1204,7 @@ async function handleSessionCommand() {
1139
1204
  await flushStdout();
1140
1205
  process.exit(1);
1141
1206
  }
1142
- const { sessionSetProjectDescription } = await import('./agentCommands-B2Nl7Fof.mjs');
1207
+ const { sessionSetProjectDescription } = await import('./agentCommands-C_KvvYFp.mjs');
1143
1208
  await sessionSetProjectDescription(desc);
1144
1209
  } else if (sessionSubcommand === "set-link") {
1145
1210
  const url = sessionArgs[1];
@@ -1149,11 +1214,11 @@ async function handleSessionCommand() {
1149
1214
  process.exit(1);
1150
1215
  }
1151
1216
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
1152
- const { sessionSetLink } = await import('./agentCommands-B2Nl7Fof.mjs');
1217
+ const { sessionSetLink } = await import('./agentCommands-C_KvvYFp.mjs');
1153
1218
  await sessionSetLink(url, label);
1154
1219
  } else if (sessionSubcommand === "link") {
1155
1220
  const op = sessionArgs[1];
1156
- const lm = await import('./agentCommands-B2Nl7Fof.mjs');
1221
+ const lm = await import('./agentCommands-C_KvvYFp.mjs');
1157
1222
  if (op === "add") {
1158
1223
  const url = sessionArgs[2];
1159
1224
  if (!url || url.startsWith("--")) {
@@ -1190,7 +1255,7 @@ async function handleSessionCommand() {
1190
1255
  process.exit(1);
1191
1256
  }
1192
1257
  const level = parseFlagStr("--level") || "info";
1193
- const { sessionNotify } = await import('./agentCommands-B2Nl7Fof.mjs');
1258
+ const { sessionNotify } = await import('./agentCommands-C_KvvYFp.mjs');
1194
1259
  await sessionNotify(message, level);
1195
1260
  } else if (sessionSubcommand === "broadcast") {
1196
1261
  const action = sessionArgs[1];
@@ -1199,7 +1264,7 @@ async function handleSessionCommand() {
1199
1264
  await flushStdout();
1200
1265
  process.exit(1);
1201
1266
  }
1202
- const { sessionBroadcast } = await import('./agentCommands-B2Nl7Fof.mjs');
1267
+ const { sessionBroadcast } = await import('./agentCommands-C_KvvYFp.mjs');
1203
1268
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
1204
1269
  } else if (sessionSubcommand === "inbox") {
1205
1270
  const inboxSubcmd = sessionArgs[1];
@@ -1211,24 +1276,24 @@ async function handleSessionCommand() {
1211
1276
  process.exit(1);
1212
1277
  }
1213
1278
  if (agentSessionId) {
1214
- const { inboxSend } = await import('./agentCommands-B2Nl7Fof.mjs');
1279
+ const { inboxSend } = await import('./agentCommands-C_KvvYFp.mjs');
1215
1280
  await inboxSend(sessionArgs[2], {
1216
1281
  body: sessionArgs[3],
1217
1282
  subject: parseFlagStr("--subject"),
1218
- urgency: parseFlagStr("--urgency"),
1283
+ urgency: await urgencyFlag(),
1219
1284
  whenIdle: hasFlag("--when-idle")
1220
1285
  });
1221
1286
  } else {
1222
1287
  await sessionInboxSend(sessionArgs[2], sessionArgs[3], targetMachineId, {
1223
1288
  subject: parseFlagStr("--subject"),
1224
- urgency: parseFlagStr("--urgency"),
1289
+ urgency: await urgencyFlag(),
1225
1290
  whenIdle: hasFlag("--when-idle"),
1226
1291
  json: hasFlag("--json")
1227
1292
  });
1228
1293
  }
1229
1294
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
1230
1295
  if (agentSessionId && !sessionArgs[2]) {
1231
- const { inboxList } = await import('./agentCommands-B2Nl7Fof.mjs');
1296
+ const { inboxList } = await import('./agentCommands-C_KvvYFp.mjs');
1232
1297
  await inboxList({
1233
1298
  unread: hasFlag("--unread"),
1234
1299
  limit: parseFlagInt("--limit"),
@@ -1252,7 +1317,7 @@ async function handleSessionCommand() {
1252
1317
  process.exit(1);
1253
1318
  }
1254
1319
  if (agentSessionId && !sessionArgs[3]) {
1255
- const { inboxList } = await import('./agentCommands-B2Nl7Fof.mjs');
1320
+ const { inboxList } = await import('./agentCommands-C_KvvYFp.mjs');
1256
1321
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
1257
1322
  } else if (sessionArgs[3]) {
1258
1323
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1262,13 +1327,15 @@ async function handleSessionCommand() {
1262
1327
  process.exit(1);
1263
1328
  }
1264
1329
  } else if (inboxSubcmd === "reply") {
1265
- if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1266
- const { inboxReply } = await import('./agentCommands-B2Nl7Fof.mjs');
1267
- await inboxReply(sessionArgs[2], sessionArgs[3]);
1268
- } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1269
- await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
1330
+ const pos = replyPositionals(sessionArgs.slice(2));
1331
+ const replyOpts = { urgency: await urgencyFlag(), whenIdle: hasFlag("--when-idle") };
1332
+ if (agentSessionId && pos[0] && pos[1] && !pos[2]) {
1333
+ const { inboxReply } = await import('./agentCommands-C_KvvYFp.mjs');
1334
+ await inboxReply(pos[0], pos[1], replyOpts);
1335
+ } else if (pos[0] && pos[1] && pos[2]) {
1336
+ await sessionInboxReply(pos[0], pos[1], pos[2], targetMachineId, replyOpts);
1270
1337
  } else {
1271
- console.error('Usage: svamp session inbox reply <session-id> <message-id> "<body>"');
1338
+ console.error('Usage: svamp session inbox reply <session-id> <message-id> "<body>" [--urgency urgent|normal] [--when-idle]');
1272
1339
  await flushStdout();
1273
1340
  process.exit(1);
1274
1341
  }
@@ -1306,7 +1373,7 @@ async function handleMachineCommand() {
1306
1373
  return;
1307
1374
  }
1308
1375
  if (machineSubcommand === "share") {
1309
- const { machineShare } = await import('./commands-D1pZq3d4.mjs');
1376
+ const { machineShare } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1310
1377
  let machineId;
1311
1378
  const shareArgs = [];
1312
1379
  for (let i = 1; i < machineArgs.length; i++) {
@@ -1358,14 +1425,14 @@ async function handleMachineCommand() {
1358
1425
  process.exit(1);
1359
1426
  }
1360
1427
  if (all) {
1361
- const { fleetExec } = await import('./fleet-DM_Q7w69.mjs');
1428
+ const { fleetExec } = await import('./fleet-Ca-UjJNL.mjs');
1362
1429
  await fleetExec(command, { cwd });
1363
1430
  } else {
1364
- const { machineExec } = await import('./commands-D1pZq3d4.mjs');
1431
+ const { machineExec } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1365
1432
  await machineExec(machineId, command, cwd);
1366
1433
  }
1367
1434
  } else if (machineSubcommand === "info") {
1368
- const { machineInfo } = await import('./commands-D1pZq3d4.mjs');
1435
+ const { machineInfo } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1369
1436
  let machineId;
1370
1437
  for (let i = 1; i < machineArgs.length; i++) {
1371
1438
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1397,10 +1464,10 @@ async function handleMachineCommand() {
1397
1464
  await flushStdout();
1398
1465
  process.exit(1);
1399
1466
  }
1400
- const { machineNotify } = await import('./agentCommands-B2Nl7Fof.mjs');
1467
+ const { machineNotify } = await import('./agentCommands-C_KvvYFp.mjs');
1401
1468
  await machineNotify(message, level);
1402
1469
  } else if (machineSubcommand === "ls") {
1403
- const { machineLs } = await import('./commands-D1pZq3d4.mjs');
1470
+ const { machineLs } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
1404
1471
  let machineId;
1405
1472
  let showHidden = false;
1406
1473
  let path;
@@ -1486,29 +1553,29 @@ Examples:
1486
1553
  };
1487
1554
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1488
1555
  if (sub === "status") {
1489
- const { fleetStatus } = await import('./fleet-DM_Q7w69.mjs');
1556
+ const { fleetStatus } = await import('./fleet-Ca-UjJNL.mjs');
1490
1557
  await fleetStatus();
1491
1558
  } else if (sub === "upgrade-claude") {
1492
- const { fleetUpgradeClaude } = await import('./fleet-DM_Q7w69.mjs');
1559
+ const { fleetUpgradeClaude } = await import('./fleet-Ca-UjJNL.mjs');
1493
1560
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1494
1561
  } else if (sub === "upgrade-codex") {
1495
- const { fleetUpgradeCodex } = await import('./fleet-DM_Q7w69.mjs');
1562
+ const { fleetUpgradeCodex } = await import('./fleet-Ca-UjJNL.mjs');
1496
1563
  await fleetUpgradeCodex({ version: flag("version", "-v") });
1497
1564
  } else if (sub === "upgrade-kimi") {
1498
- const { fleetUpgradeKimi } = await import('./fleet-DM_Q7w69.mjs');
1565
+ const { fleetUpgradeKimi } = await import('./fleet-Ca-UjJNL.mjs');
1499
1566
  await fleetUpgradeKimi({ version: flag("version", "-v") });
1500
1567
  } else if (sub === "upgrade-nono") {
1501
- const { fleetUpgradeNono } = await import('./fleet-DM_Q7w69.mjs');
1568
+ const { fleetUpgradeNono } = await import('./fleet-Ca-UjJNL.mjs');
1502
1569
  await fleetUpgradeNono({ version: flag("version", "-v") });
1503
1570
  } else if (sub === "upgrade-svamp") {
1504
- const { fleetUpgradeSvamp } = await import('./fleet-DM_Q7w69.mjs');
1571
+ const { fleetUpgradeSvamp } = await import('./fleet-Ca-UjJNL.mjs');
1505
1572
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self"), force: hasFlag("force") });
1506
1573
  } else if (sub === "daemon-restart") {
1507
- const { fleetDaemonRestart } = await import('./fleet-DM_Q7w69.mjs');
1574
+ const { fleetDaemonRestart } = await import('./fleet-Ca-UjJNL.mjs');
1508
1575
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup"), force: hasFlag("force") });
1509
1576
  } else if (sub === "push-skill") {
1510
1577
  const name = fleetArgs[1];
1511
- const { fleetPushSkill } = await import('./fleet-DM_Q7w69.mjs');
1578
+ const { fleetPushSkill } = await import('./fleet-Ca-UjJNL.mjs');
1512
1579
  await fleetPushSkill(name);
1513
1580
  } else {
1514
1581
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -2003,7 +2070,7 @@ Commands:
2003
2070
  svamp workflow --help Automation workflows (schedule / event / idle triggers)
2004
2071
  svamp process --help Process supervisor (apply, list, start, stop, logs)
2005
2072
  svamp machine --help Machine sharing & security contexts
2006
- svamp fleet --help Fan-out commands across all your machines (status, upgrade-claude, upgrade-codex, upgrade-kimi, upgrade-svamp, daemon-restart, push-skill)
2073
+ svamp fleet --help Fan-out commands across all your machines (status, upgrade-claude, upgrade-codex, upgrade-kimi, upgrade-nono, upgrade-svamp, daemon-restart, push-skill)
2007
2074
  svamp skills --help Skills marketplace (find, install, publish)
2008
2075
  svamp service --help Service exposure (HTTP services from sandboxes)
2009
2076
  svamp outpost --help Connect a remote machine (FDE outpost): up, exec, list, install
@@ -2048,6 +2115,11 @@ Usage:
2048
2115
  svamp daemon auth set <URL> <KEY> Use a custom Anthropic gateway (base URL must not end in /v1)
2049
2116
  svamp daemon codex-auth --help Configure how Codex authenticates (status/set/use-openai/use-chatgpt/clear)
2050
2117
  svamp daemon kimi-auth --help Configure how Kimi Code authenticates (status/use-moonshot/use-coding/set/clear)
2118
+ svamp daemon install-nono Install/reconcile THIS machine onto the pinned, checksum-verified
2119
+ nono \u2014 the sandbox boundary. installNono() otherwise runs only
2120
+ when the binary is ABSENT, so an existing machine never picks up
2121
+ a new pin. Roll deliberately; 'svamp fleet upgrade-nono' fans
2122
+ this out (no -v \u2014 it always installs the pin, #1376).
2051
2123
 
2052
2124
  Claude auth flags (take effect on next start/restart):
2053
2125
  svamp daemon start --use-hypha-proxy <URL> (or --hypha-proxy-url URL)
@@ -2073,7 +2145,7 @@ async function applyClaudeAuthFlags(argv) {
2073
2145
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
2074
2146
  );
2075
2147
  }
2076
- const mod = await import('./claudeAuth-iAerdaMr.mjs');
2148
+ const mod = await import('./claudeAuth-DMDvPNhO.mjs');
2077
2149
  if (hasHypha) {
2078
2150
  let url;
2079
2151
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -2127,7 +2199,7 @@ async function applyDaemonShareFlag(argv) {
2127
2199
  }
2128
2200
  }
2129
2201
  if (collected.length === 0) return;
2130
- const { updateEnvFile } = await import('./claudeAuth-iAerdaMr.mjs');
2202
+ const { updateEnvFile } = await import('./claudeAuth-DMDvPNhO.mjs');
2131
2203
  const seen = /* @__PURE__ */ new Set();
2132
2204
  const deduped = collected.filter((e) => {
2133
2205
  const k = e.toLowerCase();
@@ -2160,7 +2232,7 @@ async function handleWiseAgentCommand(rest) {
2160
2232
  }
2161
2233
  });
2162
2234
  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(" ");
2163
- const { wiseAskCli } = await import('./commands-D1pZq3d4.mjs');
2235
+ const { wiseAskCli } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
2164
2236
  await wiseAskCli(machineId, message, sessionId, { json });
2165
2237
  return;
2166
2238
  }
@@ -2172,7 +2244,7 @@ async function handleWiseAgentCommand(rest) {
2172
2244
  }
2173
2245
  return void 0;
2174
2246
  };
2175
- const { runWiseVoiceCli } = await import('./headlessCli-C8HzQvis.mjs');
2247
+ const { runWiseVoiceCli } = await import('./headlessCli-BpTXz6FD.mjs');
2176
2248
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
2177
2249
  return;
2178
2250
  }
@@ -2190,7 +2262,7 @@ async function handleWiseAgentCommand(rest) {
2190
2262
  const mode = valueOf(["--mode"]);
2191
2263
  const mission = valueOf(["--mission"]);
2192
2264
  const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
2193
- const { wiseJoinMeetingCli } = await import('./commands-D1pZq3d4.mjs');
2265
+ const { wiseJoinMeetingCli } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
2194
2266
  await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
2195
2267
  return;
2196
2268
  }
@@ -2202,7 +2274,7 @@ async function handleWiseAgentCommand(rest) {
2202
2274
  }
2203
2275
  return void 0;
2204
2276
  };
2205
- const { wiseLeaveMeetingCli } = await import('./commands-D1pZq3d4.mjs');
2277
+ const { wiseLeaveMeetingCli } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
2206
2278
  await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
2207
2279
  return;
2208
2280
  }
@@ -2226,7 +2298,7 @@ async function handleWiseAgentCommand(rest) {
2226
2298
  }
2227
2299
  });
2228
2300
  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(" ");
2229
- const { wiseAnnounceCli } = await import('./commands-D1pZq3d4.mjs');
2301
+ const { wiseAnnounceCli } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
2230
2302
  await wiseAnnounceCli(machineId, text, sessionId, { json });
2231
2303
  return;
2232
2304
  }
@@ -2238,7 +2310,7 @@ async function handleWiseAgentCommand(rest) {
2238
2310
  }
2239
2311
  return void 0;
2240
2312
  };
2241
- const { wiseMeetingsCli } = await import('./commands-D1pZq3d4.mjs');
2313
+ const { wiseMeetingsCli } = await import('./commands-CcdoQIkb.mjs').then(function (n) { return n.d; });
2242
2314
  await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
2243
2315
  return;
2244
2316
  }
@@ -2299,7 +2371,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2299
2371
  return;
2300
2372
  }
2301
2373
  if (action) {
2302
- const { updateEnvFile } = await import('./claudeAuth-iAerdaMr.mjs');
2374
+ const { updateEnvFile } = await import('./claudeAuth-DMDvPNhO.mjs');
2303
2375
  const updates = mod.buildWiseAgentEnvUpdates(action);
2304
2376
  updateEnvFile(updates);
2305
2377
  for (const [k, v] of Object.entries(updates)) {
@@ -2313,7 +2385,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
2313
2385
  }
2314
2386
  async function handleDaemonAuthCommand(argv) {
2315
2387
  const sub = wantsHelp(argv) ? "--help" : (argv[0] || "status").toLowerCase();
2316
- const mod = await import('./claudeAuth-iAerdaMr.mjs');
2388
+ const mod = await import('./claudeAuth-DMDvPNhO.mjs');
2317
2389
  if (sub === "--help" || sub === "-h" || sub === "help") {
2318
2390
  console.log(`
2319
2391
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2390,7 +2462,7 @@ one step: --use-hypha-proxy / --use-claude-login / --anthropic-base-url URL --an
2390
2462
  }
2391
2463
  async function handleDaemonCodexAuthCommand(argv) {
2392
2464
  const sub = wantsHelp(argv) ? "--help" : (argv[0] || "status").toLowerCase();
2393
- const { updateEnvFile } = await import('./claudeAuth-iAerdaMr.mjs');
2465
+ const { updateEnvFile } = await import('./claudeAuth-DMDvPNhO.mjs');
2394
2466
  const { resolveCodexProvider } = await import('./codexProvider-BtxYc5Rj.mjs');
2395
2467
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2396
2468
  if (sub === "--help" || sub === "-h" || sub === "help") {
@@ -2479,7 +2551,7 @@ The generic LLM_API_BASE / LLM_API_KEY / LLM_MODEL env vars are also honored if
2479
2551
  }
2480
2552
  async function handleDaemonKimiAuthCommand(argv) {
2481
2553
  const sub = wantsHelp(argv) ? "--help" : (argv[0] || "status").toLowerCase();
2482
- const { updateEnvFile } = await import('./claudeAuth-iAerdaMr.mjs');
2554
+ const { updateEnvFile } = await import('./claudeAuth-DMDvPNhO.mjs');
2483
2555
  const { resolveKimiProvider, buildKimiCatalogAddArgs, DEFAULT_KIMI_PROVIDER } = await import('./kimiProvider-DbxODebR.mjs');
2484
2556
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2485
2557
  const PRESETS = {
@@ -2646,9 +2718,13 @@ COMMANDS:
2646
2718
  the message lands in the peer's inbox and is processed on
2647
2719
  their next idle turn (no interrupt). Loop safeguard: a send
2648
2720
  issued from a turn that was itself triggered by an inbox
2649
- message is always forced non-urgent (no recursive wake
2650
- cascades); the daemon's per-sender rate limit + circuit
2651
- breaker further bound any storm.
2721
+ message DEFAULTS to non-urgent (no recursive wake cascades)
2722
+ and says so on stderr; pass --urgency urgent to override.
2723
+ This safeguard covers "send" and "inbox send" only \u2014
2724
+ "inbox reply" deliberately defaults urgent (it wakes a party
2725
+ that is waiting) and is bounded by the hop cap instead.
2726
+ The daemon's per-sender rate limit + circuit breaker
2727
+ further bound any storm.
2652
2728
  --when-idle defer: handle on the recipient's
2653
2729
  next idle turn (opposite of the
2654
2730
  urgent default)
@@ -2710,7 +2786,9 @@ COMMANDS:
2710
2786
  inbox send <id> "<body>" [opts] Send a message to session inbox
2711
2787
  inbox list <id> [--unread] [--json] List inbox messages
2712
2788
  inbox read <id> <msg-id> Read and mark a message
2713
- inbox reply <id> <msg-id> "<body>" Reply to sender's session
2789
+ inbox reply <id> <msg-id> "<body>" Reply to sender's session (urgent by default \u2014
2790
+ [--urgency urgent|normal] it wakes a party that is waiting; --when-idle or
2791
+ [--when-idle] --urgency normal defers to their next idle turn)
2714
2792
  inbox clear <id> [--all] Clear read (or all) messages
2715
2793
 
2716
2794
  SPAWN OPTIONS:
@@ -2762,7 +2840,7 @@ ISOLATION & SHARING OPTIONS (for spawn):
2762
2840
  MESSAGES OPTIONS:
2763
2841
  --last N Show last N messages only
2764
2842
  --after N Start after sequence number N (for pagination)
2765
- --limit N Max messages to fetch (default: 1000)
2843
+ --limit N Max messages to fetch (default: 50, capped at 500 by the daemon)
2766
2844
  --json Output as JSON array of {id, seq, role, text, createdAt}
2767
2845
  --raw With --json: include full raw objects (tool_use, tool_result, thinking)
2768
2846