svamp-cli 0.2.269 → 0.2.271

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 (24) hide show
  1. package/dist/{agentCommands-Dzk4e5se.mjs → agentCommands-CcvH2Sic.mjs} +5 -5
  2. package/dist/{auth-Bsp6Mn7W.mjs → auth-BOmLOTb2.mjs} +1 -1
  3. package/dist/{cli-COQg5XhV.mjs → cli-Ct6iRiK8.mjs} +63 -63
  4. package/dist/cli.mjs +2 -2
  5. package/dist/{commands-BbsqugoB.mjs → commands-B6Gz-6n7.mjs} +2 -2
  6. package/dist/{commands-BS1nRSti.mjs → commands-BKs44mJ_.mjs} +2 -2
  7. package/dist/{commands-DqyqbI0p.mjs → commands-D3GMer4U.mjs} +1 -1
  8. package/dist/{commands-C-UQ3PbA.mjs → commands-DUIWBt-g.mjs} +1 -1
  9. package/dist/{commands-CJxlXlTy.mjs → commands-Dg7hxtOY.mjs} +7 -7
  10. package/dist/{commands-Y-Nna_A4.mjs → commands-DwQJ6hVG.mjs} +2 -2
  11. package/dist/{commands-v-bJG0B0.mjs → commands-xQ2Hb-E1.mjs} +1 -1
  12. package/dist/{fleet-BNJf0oiF.mjs → fleet-Cwy0Ylrr.mjs} +1 -1
  13. package/dist/{frpc-D0O_ho2a.mjs → frpc-BAPNDwFz.mjs} +1 -1
  14. package/dist/{headlessCli-CDajSqLP.mjs → headlessCli-BliMQ-Vv.mjs} +2 -2
  15. package/dist/index.mjs +1 -1
  16. package/dist/{package-C4LMqtdL.mjs → package-XyoKsbcd.mjs} +2 -2
  17. package/dist/{rpc-CiB0ZTCJ.mjs → rpc-6vMdF_Bi.mjs} +1 -1
  18. package/dist/{rpc-KQlBd_Kl.mjs → rpc-xVRkdJOj.mjs} +1 -1
  19. package/dist/{run-BwLjjDzE.mjs → run-DRTKhT5t.mjs} +1 -1
  20. package/dist/{run-ZZJd3r3N.mjs → run-fb578WlD.mjs} +35 -37
  21. package/dist/{scheduler-dJbWmJa6.mjs → scheduler-BnGmCzUW.mjs} +1 -1
  22. package/dist/{serveCommands-Wy_O_dIQ.mjs → serveCommands-BYR845ZH.mjs} +5 -5
  23. package/dist/{sideband-DgvSqT9x.mjs → sideband-DOKXLjFQ.mjs} +1 -1
  24. package/package.json +2 -2
@@ -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-ZZJd3r3N.mjs';
5
+ import { i as shortId } from './run-fb578WlD.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-ZZJd3r3N.mjs').then(function (n) { return n.al; });
99
+ const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-fb578WlD.mjs').then(function (n) { return n.al; });
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-DqyqbI0p.mjs');
346
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
347
347
  return connectAndGetMachine();
348
348
  }
349
349
  function buildInboxMessage(args) {
@@ -421,7 +421,7 @@ async function inboxSend(targetSessionId, opts) {
421
421
  console.error("Message body is required.");
422
422
  process.exit(1);
423
423
  }
424
- const { connectAndResolveSession } = await import('./commands-DqyqbI0p.mjs');
424
+ const { connectAndResolveSession } = await import('./commands-D3GMer4U.mjs');
425
425
  let server;
426
426
  try {
427
427
  const { targetId, messageId } = await inboxSendCore(
@@ -475,7 +475,7 @@ async function inboxReply(messageId, body) {
475
475
  console.error("SVAMP_SESSION_ID not set. This command must be run inside a Svamp session.");
476
476
  process.exit(1);
477
477
  }
478
- const { connectAndResolveSession } = await import('./commands-DqyqbI0p.mjs');
478
+ const { connectAndResolveSession } = await import('./commands-D3GMer4U.mjs');
479
479
  const { server: localServer, machine: localMachine } = await connectToMachineService();
480
480
  let localDisconnected = false;
481
481
  const disconnectLocal = async () => {
@@ -1,4 +1,4 @@
1
- import { Y as resolveModel } from './run-ZZJd3r3N.mjs';
1
+ import { Y as resolveModel } from './run-fb578WlD.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { Z as clearStopMarker, _ as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-ZZJd3r3N.mjs';
1
+ import { Z as clearStopMarker, _ as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-fb578WlD.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-ZZJd3r3N.mjs').then(function (n) { return n.ai; });
36
+ const { getLoadedConfig } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ai; });
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-ZZJd3r3N.mjs').then(function (n) { return n.as; });
55
+ const mod = await import('./run-fb578WlD.mjs').then(function (n) { return n.as; });
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-CJxlXlTy.mjs');
359
+ const { handleServiceCommand } = await import('./commands-Dg7hxtOY.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-Wy_O_dIQ.mjs');
367
+ const { handleServeCommand } = await import('./serveCommands-BYR845ZH.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-BbsqugoB.mjs');
376
+ const { processCommand } = await import('./commands-B6Gz-6n7.mjs');
377
377
  let machineId;
378
378
  const processArgs = args.slice(1);
379
379
  const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
@@ -387,18 +387,18 @@ async function main() {
387
387
  }), machineId);
388
388
  process.exit(0);
389
389
  } else if (subcommand === "issue" || subcommand === "issues") {
390
- const { issueCommand } = await import('./commands-BS1nRSti.mjs');
390
+ const { issueCommand } = await import('./commands-BKs44mJ_.mjs');
391
391
  await issueCommand(args.slice(1));
392
392
  await flushAndExit(0);
393
393
  } else if (subcommand === "workflow" || subcommand === "workflows") {
394
- const { workflowCommand } = await import('./commands-v-bJG0B0.mjs');
394
+ const { workflowCommand } = await import('./commands-xQ2Hb-E1.mjs');
395
395
  await workflowCommand(args.slice(1));
396
396
  await flushAndExit(0);
397
397
  } else if (subcommand === "wise-agent" || subcommand === "wise") {
398
398
  await handleWiseAgentCommand(args.slice(1));
399
399
  process.exit(0);
400
400
  } else if (subcommand === "feature" || subcommand === "crew") {
401
- const { crewCommand } = await import('./commands-Y-Nna_A4.mjs');
401
+ const { crewCommand } = await import('./commands-DwQJ6hVG.mjs');
402
402
  await crewCommand(args.slice(1));
403
403
  process.exit(0);
404
404
  } else if (subcommand === "--help" || subcommand === "-h") {
@@ -406,7 +406,7 @@ async function main() {
406
406
  } else if (!subcommand || subcommand === "start") {
407
407
  await handleInteractiveCommand();
408
408
  } else if (subcommand === "--version" || subcommand === "-v") {
409
- const pkg = await import('./package-C4LMqtdL.mjs').catch(() => ({ default: { version: "unknown" } }));
409
+ const pkg = await import('./package-XyoKsbcd.mjs').catch(() => ({ default: { version: "unknown" } }));
410
410
  console.log(`svamp version: ${pkg.default.version}`);
411
411
  } else {
412
412
  console.error(`Unknown command: ${subcommand}`);
@@ -415,7 +415,7 @@ async function main() {
415
415
  }
416
416
  }
417
417
  async function handleInteractiveCommand() {
418
- const { runInteractive } = await import('./run-BwLjjDzE.mjs');
418
+ const { runInteractive } = await import('./run-DRTKhT5t.mjs');
419
419
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
420
420
  let directory = process.cwd();
421
421
  let resumeSessionId;
@@ -460,7 +460,7 @@ async function handleAgentCommand() {
460
460
  return;
461
461
  }
462
462
  if (agentArgs[0] === "list") {
463
- const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.ao; });
463
+ const { KNOWN_ACP_AGENTS, KNOWN_CODEX_AGENTS: KNOWN_CODEX_AGENTS2 } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ao; });
464
464
  console.log("Known agents:");
465
465
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
466
466
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -472,7 +472,7 @@ async function handleAgentCommand() {
472
472
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
473
473
  return;
474
474
  }
475
- const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.ao; });
475
+ const { resolveAcpAgentConfig, KNOWN_CODEX_AGENTS } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ao; });
476
476
  let cwd = process.cwd();
477
477
  const filteredArgs = [];
478
478
  for (let i = 0; i < agentArgs.length; i++) {
@@ -496,12 +496,12 @@ async function handleAgentCommand() {
496
496
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
497
497
  let backend;
498
498
  if (KNOWN_CODEX_AGENTS[config.agentName]) {
499
- const { CodexAppServerBackend } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.ap; });
499
+ const { CodexAppServerBackend } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ap; });
500
500
  backend = new CodexAppServerBackend({ cwd, log: logFn });
501
501
  } else {
502
- const { AcpBackend } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.an; });
503
- const { GeminiTransport } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.aq; });
504
- const { DefaultTransport } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.am; });
502
+ const { AcpBackend } = await import('./run-fb578WlD.mjs').then(function (n) { return n.an; });
503
+ const { GeminiTransport } = await import('./run-fb578WlD.mjs').then(function (n) { return n.aq; });
504
+ const { DefaultTransport } = await import('./run-fb578WlD.mjs').then(function (n) { return n.am; });
505
505
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
506
506
  backend = new AcpBackend({
507
507
  agentName: config.agentName,
@@ -628,7 +628,7 @@ async function handleSessionCommand() {
628
628
  process.exit(1);
629
629
  }
630
630
  }
631
- 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-DqyqbI0p.mjs');
631
+ 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-D3GMer4U.mjs');
632
632
  const parseFlagStr = (flag, shortFlag) => {
633
633
  for (let i = 1; i < sessionArgs.length; i++) {
634
634
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -696,7 +696,7 @@ async function handleSessionCommand() {
696
696
  allowDomain.push(sessionArgs[++i]);
697
697
  }
698
698
  }
699
- const { parseShareArg } = await import('./commands-DqyqbI0p.mjs');
699
+ const { parseShareArg } = await import('./commands-D3GMer4U.mjs');
700
700
  const shareEntries = share.map((s) => parseShareArg(s));
701
701
  await sessionSpawn(agent, dir, targetMachineId, {
702
702
  message,
@@ -786,7 +786,7 @@ async function handleSessionCommand() {
786
786
  console.error(" Rewinds history: rewrites the message + drops everything after it, then restarts Claude.");
787
787
  process.exit(1);
788
788
  }
789
- const { sessionEditMessage } = await import('./commands-DqyqbI0p.mjs');
789
+ const { sessionEditMessage } = await import('./commands-D3GMer4U.mjs');
790
790
  await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
791
791
  } else if (sessionSubcommand === "refine") {
792
792
  if (!sessionArgs[1] || !sessionArgs[2]) {
@@ -794,7 +794,7 @@ async function handleSessionCommand() {
794
794
  console.error(" Asks the agent to revise its latest reply in place (no extra round).");
795
795
  process.exit(1);
796
796
  }
797
- const { sessionRefineLastReply } = await import('./commands-DqyqbI0p.mjs');
797
+ const { sessionRefineLastReply } = await import('./commands-D3GMer4U.mjs');
798
798
  await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
799
799
  } else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
800
800
  if (!sessionArgs[1]) {
@@ -802,7 +802,7 @@ async function handleSessionCommand() {
802
802
  console.error(" Reverts the most recent edit/refine, restoring the pre-edit history.");
803
803
  process.exit(1);
804
804
  }
805
- const { sessionUndoEdit } = await import('./commands-DqyqbI0p.mjs');
805
+ const { sessionUndoEdit } = await import('./commands-D3GMer4U.mjs');
806
806
  await sessionUndoEdit(sessionArgs[1], targetMachineId);
807
807
  } else if (sessionSubcommand === "query") {
808
808
  const dir = sessionArgs[1];
@@ -812,7 +812,7 @@ async function handleSessionCommand() {
812
812
  console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
813
813
  process.exit(1);
814
814
  }
815
- const { sessionQuery } = await import('./commands-DqyqbI0p.mjs');
815
+ const { sessionQuery } = await import('./commands-D3GMer4U.mjs');
816
816
  await sessionQuery(dir, prompt, targetMachineId, {
817
817
  timeout: parseFlagInt("--timeout"),
818
818
  json: hasFlag("--json"),
@@ -845,7 +845,7 @@ async function handleSessionCommand() {
845
845
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
846
846
  process.exit(1);
847
847
  }
848
- const { sessionApprove } = await import('./commands-DqyqbI0p.mjs');
848
+ const { sessionApprove } = await import('./commands-D3GMer4U.mjs');
849
849
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
850
850
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
851
851
  json: hasFlag("--json")
@@ -855,7 +855,7 @@ async function handleSessionCommand() {
855
855
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
856
856
  process.exit(1);
857
857
  }
858
- const { sessionDeny } = await import('./commands-DqyqbI0p.mjs');
858
+ const { sessionDeny } = await import('./commands-D3GMer4U.mjs');
859
859
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
860
860
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
861
861
  json: hasFlag("--json")
@@ -907,7 +907,7 @@ async function handleSessionCommand() {
907
907
  console.error("Usage: svamp session set-title <title>");
908
908
  process.exit(1);
909
909
  }
910
- const { sessionSetTitle } = await import('./agentCommands-Dzk4e5se.mjs');
910
+ const { sessionSetTitle } = await import('./agentCommands-CcvH2Sic.mjs');
911
911
  await sessionSetTitle(title);
912
912
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
913
913
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -915,7 +915,7 @@ async function handleSessionCommand() {
915
915
  console.error("Usage: svamp session set-project-description <text>");
916
916
  process.exit(1);
917
917
  }
918
- const { sessionSetProjectDescription } = await import('./agentCommands-Dzk4e5se.mjs');
918
+ const { sessionSetProjectDescription } = await import('./agentCommands-CcvH2Sic.mjs');
919
919
  await sessionSetProjectDescription(desc);
920
920
  } else if (sessionSubcommand === "set-link") {
921
921
  const url = sessionArgs[1];
@@ -924,11 +924,11 @@ async function handleSessionCommand() {
924
924
  process.exit(1);
925
925
  }
926
926
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
927
- const { sessionSetLink } = await import('./agentCommands-Dzk4e5se.mjs');
927
+ const { sessionSetLink } = await import('./agentCommands-CcvH2Sic.mjs');
928
928
  await sessionSetLink(url, label);
929
929
  } else if (sessionSubcommand === "link") {
930
930
  const op = sessionArgs[1];
931
- const lm = await import('./agentCommands-Dzk4e5se.mjs');
931
+ const lm = await import('./agentCommands-CcvH2Sic.mjs');
932
932
  if (op === "add") {
933
933
  const url = sessionArgs[2];
934
934
  if (!url || url.startsWith("--")) {
@@ -963,7 +963,7 @@ async function handleSessionCommand() {
963
963
  process.exit(1);
964
964
  }
965
965
  const level = parseFlagStr("--level") || "info";
966
- const { sessionNotify } = await import('./agentCommands-Dzk4e5se.mjs');
966
+ const { sessionNotify } = await import('./agentCommands-CcvH2Sic.mjs');
967
967
  await sessionNotify(message, level);
968
968
  } else if (sessionSubcommand === "broadcast") {
969
969
  const action = sessionArgs[1];
@@ -971,7 +971,7 @@ async function handleSessionCommand() {
971
971
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
972
972
  process.exit(1);
973
973
  }
974
- const { sessionBroadcast } = await import('./agentCommands-Dzk4e5se.mjs');
974
+ const { sessionBroadcast } = await import('./agentCommands-CcvH2Sic.mjs');
975
975
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
976
976
  } else if (sessionSubcommand === "inbox") {
977
977
  const inboxSubcmd = sessionArgs[1];
@@ -982,7 +982,7 @@ async function handleSessionCommand() {
982
982
  process.exit(1);
983
983
  }
984
984
  if (agentSessionId) {
985
- const { inboxSend } = await import('./agentCommands-Dzk4e5se.mjs');
985
+ const { inboxSend } = await import('./agentCommands-CcvH2Sic.mjs');
986
986
  await inboxSend(sessionArgs[2], {
987
987
  body: sessionArgs[3],
988
988
  subject: parseFlagStr("--subject"),
@@ -997,7 +997,7 @@ async function handleSessionCommand() {
997
997
  }
998
998
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
999
999
  if (agentSessionId && !sessionArgs[2]) {
1000
- const { inboxList } = await import('./agentCommands-Dzk4e5se.mjs');
1000
+ const { inboxList } = await import('./agentCommands-CcvH2Sic.mjs');
1001
1001
  await inboxList({
1002
1002
  unread: hasFlag("--unread"),
1003
1003
  limit: parseFlagInt("--limit"),
@@ -1019,7 +1019,7 @@ async function handleSessionCommand() {
1019
1019
  process.exit(1);
1020
1020
  }
1021
1021
  if (agentSessionId && !sessionArgs[3]) {
1022
- const { inboxList } = await import('./agentCommands-Dzk4e5se.mjs');
1022
+ const { inboxList } = await import('./agentCommands-CcvH2Sic.mjs');
1023
1023
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
1024
1024
  } else if (sessionArgs[3]) {
1025
1025
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1029,7 +1029,7 @@ async function handleSessionCommand() {
1029
1029
  }
1030
1030
  } else if (inboxSubcmd === "reply") {
1031
1031
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1032
- const { inboxReply } = await import('./agentCommands-Dzk4e5se.mjs');
1032
+ const { inboxReply } = await import('./agentCommands-CcvH2Sic.mjs');
1033
1033
  await inboxReply(sessionArgs[2], sessionArgs[3]);
1034
1034
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1035
1035
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -1067,7 +1067,7 @@ async function handleMachineCommand() {
1067
1067
  return;
1068
1068
  }
1069
1069
  if (machineSubcommand === "share") {
1070
- const { machineShare } = await import('./commands-DqyqbI0p.mjs');
1070
+ const { machineShare } = await import('./commands-D3GMer4U.mjs');
1071
1071
  let machineId;
1072
1072
  const shareArgs = [];
1073
1073
  for (let i = 1; i < machineArgs.length; i++) {
@@ -1118,14 +1118,14 @@ async function handleMachineCommand() {
1118
1118
  process.exit(1);
1119
1119
  }
1120
1120
  if (all) {
1121
- const { fleetExec } = await import('./fleet-BNJf0oiF.mjs');
1121
+ const { fleetExec } = await import('./fleet-Cwy0Ylrr.mjs');
1122
1122
  await fleetExec(command, { cwd });
1123
1123
  } else {
1124
- const { machineExec } = await import('./commands-DqyqbI0p.mjs');
1124
+ const { machineExec } = await import('./commands-D3GMer4U.mjs');
1125
1125
  await machineExec(machineId, command, cwd);
1126
1126
  }
1127
1127
  } else if (machineSubcommand === "info") {
1128
- const { machineInfo } = await import('./commands-DqyqbI0p.mjs');
1128
+ const { machineInfo } = await import('./commands-D3GMer4U.mjs');
1129
1129
  let machineId;
1130
1130
  for (let i = 1; i < machineArgs.length; i++) {
1131
1131
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1145,10 +1145,10 @@ async function handleMachineCommand() {
1145
1145
  level = machineArgs[++i];
1146
1146
  }
1147
1147
  }
1148
- const { machineNotify } = await import('./agentCommands-Dzk4e5se.mjs');
1148
+ const { machineNotify } = await import('./agentCommands-CcvH2Sic.mjs');
1149
1149
  await machineNotify(message, level);
1150
1150
  } else if (machineSubcommand === "ls") {
1151
- const { machineLs } = await import('./commands-DqyqbI0p.mjs');
1151
+ const { machineLs } = await import('./commands-D3GMer4U.mjs');
1152
1152
  let machineId;
1153
1153
  let showHidden = false;
1154
1154
  let path;
@@ -1207,20 +1207,20 @@ Examples:
1207
1207
  };
1208
1208
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1209
1209
  if (sub === "status") {
1210
- const { fleetStatus } = await import('./fleet-BNJf0oiF.mjs');
1210
+ const { fleetStatus } = await import('./fleet-Cwy0Ylrr.mjs');
1211
1211
  await fleetStatus();
1212
1212
  } else if (sub === "upgrade-claude") {
1213
- const { fleetUpgradeClaude } = await import('./fleet-BNJf0oiF.mjs');
1213
+ const { fleetUpgradeClaude } = await import('./fleet-Cwy0Ylrr.mjs');
1214
1214
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1215
1215
  } else if (sub === "upgrade-svamp") {
1216
- const { fleetUpgradeSvamp } = await import('./fleet-BNJf0oiF.mjs');
1216
+ const { fleetUpgradeSvamp } = await import('./fleet-Cwy0Ylrr.mjs');
1217
1217
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self"), force: hasFlag("force") });
1218
1218
  } else if (sub === "daemon-restart") {
1219
- const { fleetDaemonRestart } = await import('./fleet-BNJf0oiF.mjs');
1219
+ const { fleetDaemonRestart } = await import('./fleet-Cwy0Ylrr.mjs');
1220
1220
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
1221
1221
  } else if (sub === "push-skill") {
1222
1222
  const name = fleetArgs[1];
1223
- const { fleetPushSkill } = await import('./fleet-BNJf0oiF.mjs');
1223
+ const { fleetPushSkill } = await import('./fleet-Cwy0Ylrr.mjs');
1224
1224
  await fleetPushSkill(name);
1225
1225
  } else {
1226
1226
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -1236,7 +1236,7 @@ async function handleSkillsCommand() {
1236
1236
  await printSkillsHelp();
1237
1237
  return;
1238
1238
  }
1239
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-C-UQ3PbA.mjs');
1239
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-DUIWBt-g.mjs');
1240
1240
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
1241
1241
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1242
1242
  if (!query) {
@@ -1283,7 +1283,7 @@ async function loginToHypha() {
1283
1283
  process.exit(1);
1284
1284
  }
1285
1285
  const anchor = anchorArg.replace(/\/+$/, "");
1286
- const { loadInstanceConfig } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.ai; });
1286
+ const { loadInstanceConfig } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ai; });
1287
1287
  let cfg = null;
1288
1288
  try {
1289
1289
  cfg = await loadInstanceConfig({ anchor, force: true });
@@ -1394,7 +1394,7 @@ async function logoutFromHypha() {
1394
1394
  } catch {
1395
1395
  }
1396
1396
  try {
1397
- const { clearInstanceConfigCache } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.ai; });
1397
+ const { clearInstanceConfigCache } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ai; });
1398
1398
  clearInstanceConfigCache();
1399
1399
  } catch {
1400
1400
  }
@@ -1733,7 +1733,7 @@ async function applyClaudeAuthFlags(argv) {
1733
1733
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
1734
1734
  );
1735
1735
  }
1736
- const mod = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.aj; });
1736
+ const mod = await import('./run-fb578WlD.mjs').then(function (n) { return n.aj; });
1737
1737
  if (hasHypha) {
1738
1738
  let url;
1739
1739
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -1787,7 +1787,7 @@ async function applyDaemonShareFlag(argv) {
1787
1787
  }
1788
1788
  }
1789
1789
  if (collected.length === 0) return;
1790
- const { updateEnvFile } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.aj; });
1790
+ const { updateEnvFile } = await import('./run-fb578WlD.mjs').then(function (n) { return n.aj; });
1791
1791
  const seen = /* @__PURE__ */ new Set();
1792
1792
  const deduped = collected.filter((e) => {
1793
1793
  const k = e.toLowerCase();
@@ -1820,7 +1820,7 @@ async function handleWiseAgentCommand(rest) {
1820
1820
  }
1821
1821
  });
1822
1822
  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(" ");
1823
- const { wiseAskCli } = await import('./commands-DqyqbI0p.mjs');
1823
+ const { wiseAskCli } = await import('./commands-D3GMer4U.mjs');
1824
1824
  await wiseAskCli(machineId, message, sessionId, { json });
1825
1825
  return;
1826
1826
  }
@@ -1832,7 +1832,7 @@ async function handleWiseAgentCommand(rest) {
1832
1832
  }
1833
1833
  return void 0;
1834
1834
  };
1835
- const { runWiseVoiceCli } = await import('./headlessCli-CDajSqLP.mjs');
1835
+ const { runWiseVoiceCli } = await import('./headlessCli-BliMQ-Vv.mjs');
1836
1836
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
1837
1837
  return;
1838
1838
  }
@@ -1850,7 +1850,7 @@ async function handleWiseAgentCommand(rest) {
1850
1850
  const mode = valueOf(["--mode"]);
1851
1851
  const mission = valueOf(["--mission"]);
1852
1852
  const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
1853
- const { wiseJoinMeetingCli } = await import('./commands-DqyqbI0p.mjs');
1853
+ const { wiseJoinMeetingCli } = await import('./commands-D3GMer4U.mjs');
1854
1854
  await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
1855
1855
  return;
1856
1856
  }
@@ -1862,7 +1862,7 @@ async function handleWiseAgentCommand(rest) {
1862
1862
  }
1863
1863
  return void 0;
1864
1864
  };
1865
- const { wiseLeaveMeetingCli } = await import('./commands-DqyqbI0p.mjs');
1865
+ const { wiseLeaveMeetingCli } = await import('./commands-D3GMer4U.mjs');
1866
1866
  await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
1867
1867
  return;
1868
1868
  }
@@ -1886,7 +1886,7 @@ async function handleWiseAgentCommand(rest) {
1886
1886
  }
1887
1887
  });
1888
1888
  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(" ");
1889
- const { wiseAnnounceCli } = await import('./commands-DqyqbI0p.mjs');
1889
+ const { wiseAnnounceCli } = await import('./commands-D3GMer4U.mjs');
1890
1890
  await wiseAnnounceCli(machineId, text, sessionId, { json });
1891
1891
  return;
1892
1892
  }
@@ -1898,7 +1898,7 @@ async function handleWiseAgentCommand(rest) {
1898
1898
  }
1899
1899
  return void 0;
1900
1900
  };
1901
- const { wiseMeetingsCli } = await import('./commands-DqyqbI0p.mjs');
1901
+ const { wiseMeetingsCli } = await import('./commands-D3GMer4U.mjs');
1902
1902
  await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
1903
1903
  return;
1904
1904
  }
@@ -1948,7 +1948,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1948
1948
  return;
1949
1949
  }
1950
1950
  const authArgs = rest.slice(1);
1951
- const mod = await import('./auth-Bsp6Mn7W.mjs');
1951
+ const mod = await import('./auth-BOmLOTb2.mjs');
1952
1952
  let action;
1953
1953
  try {
1954
1954
  action = mod.parseWiseAgentAuthArgs(authArgs);
@@ -1958,7 +1958,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1958
1958
  return;
1959
1959
  }
1960
1960
  if (action) {
1961
- const { updateEnvFile } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.aj; });
1961
+ const { updateEnvFile } = await import('./run-fb578WlD.mjs').then(function (n) { return n.aj; });
1962
1962
  const updates = mod.buildWiseAgentEnvUpdates(action);
1963
1963
  updateEnvFile(updates);
1964
1964
  for (const [k, v] of Object.entries(updates)) {
@@ -1972,7 +1972,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1972
1972
  }
1973
1973
  async function handleDaemonAuthCommand(argv) {
1974
1974
  const sub = (argv[0] || "status").toLowerCase();
1975
- const mod = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.aj; });
1975
+ const mod = await import('./run-fb578WlD.mjs').then(function (n) { return n.aj; });
1976
1976
  if (sub === "--help" || sub === "-h" || sub === "help") {
1977
1977
  console.log(`
1978
1978
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2046,8 +2046,8 @@ one step: --use-hypha-proxy / --use-claude-login / --anthropic-base-url URL --an
2046
2046
  }
2047
2047
  async function handleDaemonCodexAuthCommand(argv) {
2048
2048
  const sub = (argv[0] || "status").toLowerCase();
2049
- const { updateEnvFile } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.aj; });
2050
- const { resolveCodexProvider } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.ak; });
2049
+ const { updateEnvFile } = await import('./run-fb578WlD.mjs').then(function (n) { return n.aj; });
2050
+ const { resolveCodexProvider } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ak; });
2051
2051
  const redact = (k) => k && k.length > 10 ? `${k.slice(0, 6)}\u2026${k.slice(-4)}` : k ? "***" : "(unset)";
2052
2052
  if (sub === "--help" || sub === "-h" || sub === "help") {
2053
2053
  console.log(`
@@ -2379,7 +2379,7 @@ Examples:
2379
2379
  async function printSkillsHelp() {
2380
2380
  let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
2381
2381
  try {
2382
- const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.ar; });
2382
+ const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ar; });
2383
2383
  browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
2384
2384
  } catch {
2385
2385
  }
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import './run-ZZJd3r3N.mjs';
1
+ import './run-fb578WlD.mjs';
2
2
  import './serviceManager-hlOVxkhW.mjs';
3
- import './cli-COQg5XhV.mjs';
3
+ import './cli-Ct6iRiK8.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-DqyqbI0p.mjs';
3
+ import { connectAndGetMachine } from './commands-D3GMer4U.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-ZZJd3r3N.mjs';
8
+ import './run-fb578WlD.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';
@@ -1,8 +1,8 @@
1
1
  import { execSync } from 'node:child_process';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
- import { f as flushAndExit } from './cli-COQg5XhV.mjs';
5
- import { j as resolveProjectRoot, q as searchIssues, o as listIssues, l as resumeIssue, p as pauseIssue, m as addComment, u as updateIssue, k as getIssue, t as isVisibleTo, H as summarize, n as addIssue } from './run-ZZJd3r3N.mjs';
4
+ import { f as flushAndExit } from './cli-Ct6iRiK8.mjs';
5
+ import { j as resolveProjectRoot, q as searchIssues, o as listIssues, l as resumeIssue, p as pauseIssue, m as addComment, u as updateIssue, k as getIssue, t as isVisibleTo, H as summarize, n as addIssue } from './run-fb578WlD.mjs';
6
6
  import './serviceManager-hlOVxkhW.mjs';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { execSync } from 'node:child_process';
3
3
  import { basename, resolve, join, isAbsolute } from 'node:path';
4
4
  import os from 'node:os';
5
- import { $ as formatHandle, a0 as normalizeAllowedUser, a1 as loadSecurityContextConfig, a2 as resolveSecurityContext, a3 as buildSecurityContextFromFlags, a4 as mergeSecurityContexts, c as connectToHypha, a5 as buildSessionShareUrl, a6 as computeOutboundHop, i as shortId, a7 as registerAwaitingReply, a8 as buildMachineShareUrl, a9 as parseHandle, aa as handleMatchesMetadata } from './run-ZZJd3r3N.mjs';
5
+ import { $ as formatHandle, a0 as normalizeAllowedUser, a1 as loadSecurityContextConfig, a2 as resolveSecurityContext, a3 as buildSecurityContextFromFlags, a4 as mergeSecurityContexts, c as connectToHypha, a5 as buildSessionShareUrl, a6 as computeOutboundHop, i as shortId, a7 as registerAwaitingReply, a8 as buildMachineShareUrl, a9 as parseHandle, aa as handleMatchesMetadata } from './run-fb578WlD.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -1,7 +1,7 @@
1
1
  import os from 'os';
2
2
  import fs__default from 'fs';
3
3
  import { resolve, join, relative } from 'path';
4
- import { N as parseFrontmatter, O as getSkillsServer, P as getSkillsWorkspaceName, Q as getSkillsCollectionName, S as fetchWithTimeout, T as searchSkills, U as SKILLS_DIR, V as getSkillInfo, W as downloadSkillFile, X as listSkillFiles } from './run-ZZJd3r3N.mjs';
4
+ import { N as parseFrontmatter, O as getSkillsServer, P as getSkillsWorkspaceName, Q as getSkillsCollectionName, S as fetchWithTimeout, T as searchSkills, U as SKILLS_DIR, V as getSkillInfo, W as downloadSkillFile, X as listSkillFiles } from './run-fb578WlD.mjs';
5
5
  import 'fs/promises';
6
6
  import 'url';
7
7
  import 'child_process';
@@ -58,7 +58,7 @@ async function serviceExpose(args) {
58
58
  process.exit(1);
59
59
  }
60
60
  if (foreground) {
61
- const { runFrpcTunnel } = await import('./frpc-D0O_ho2a.mjs');
61
+ const { runFrpcTunnel } = await import('./frpc-BAPNDwFz.mjs');
62
62
  await runFrpcTunnel(name, ports, void 0, {
63
63
  group,
64
64
  groupKey,
@@ -68,7 +68,7 @@ async function serviceExpose(args) {
68
68
  });
69
69
  return;
70
70
  }
71
- const { connectAndGetMachine } = await import('./commands-DqyqbI0p.mjs');
71
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
72
72
  const { server, machine } = await connectAndGetMachine();
73
73
  try {
74
74
  const status = await machine.tunnelStart({
@@ -90,7 +90,7 @@ async function serviceExpose(args) {
90
90
  console.log(` port ${port}: ${url}`);
91
91
  }
92
92
  if (process.env.SVAMP_SESSION_ID) {
93
- const { autoAddSessionLink } = await import('./agentCommands-Dzk4e5se.mjs');
93
+ const { autoAddSessionLink } = await import('./agentCommands-CcvH2Sic.mjs');
94
94
  let added = 0;
95
95
  for (const [port, url] of urlEntries) {
96
96
  const label = urlEntries.length > 1 ? `${name}:${port}` : name;
@@ -127,7 +127,7 @@ async function serviceServe(args) {
127
127
  console.log(`Serving ${resolvedDir}`);
128
128
  const servePort = 18080;
129
129
  const http = await import('http');
130
- const { serveStaticMount } = await import('./run-ZZJd3r3N.mjs').then(function (n) { return n.ah; });
130
+ const { serveStaticMount } = await import('./run-fb578WlD.mjs').then(function (n) { return n.ah; });
131
131
  const server = http.createServer((req, res) => {
132
132
  const u = new URL(req.url || "/", "http://127.0.0.1");
133
133
  let rel = u.pathname;
@@ -138,7 +138,7 @@ async function serviceServe(args) {
138
138
  server.once("error", reject);
139
139
  server.listen(servePort, "127.0.0.1", () => resolve());
140
140
  });
141
- const { runFrpcTunnel } = await import('./frpc-D0O_ho2a.mjs');
141
+ const { runFrpcTunnel } = await import('./frpc-BAPNDwFz.mjs');
142
142
  void server;
143
143
  await runFrpcTunnel(name, [servePort]);
144
144
  } catch (err) {
@@ -148,7 +148,7 @@ async function serviceServe(args) {
148
148
  }
149
149
  async function serviceList(_args) {
150
150
  try {
151
- const { connectAndGetMachine } = await import('./commands-DqyqbI0p.mjs');
151
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
152
152
  const { server, machine } = await connectAndGetMachine();
153
153
  try {
154
154
  const tunnels = await machine.tunnelList({});
@@ -188,7 +188,7 @@ async function serviceDelete(args) {
188
188
  process.exit(1);
189
189
  }
190
190
  try {
191
- const { connectAndGetMachine } = await import('./commands-DqyqbI0p.mjs');
191
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
192
192
  const { server, machine } = await connectAndGetMachine();
193
193
  try {
194
194
  await machine.tunnelStop({ name });
@@ -1,8 +1,8 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
- import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-DqyqbI0p.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-D3GMer4U.mjs';
4
4
  import { execSync } from 'node:child_process';
5
- import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-ZZJd3r3N.mjs';
5
+ import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-fb578WlD.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from 'node:child_process';
2
- import { j as resolveProjectRoot, I as workflowSteps, z as setWorkflowEnabled, E as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, D as listWorkflows, B as saveWorkflow, C as rawWorkflow } from './run-ZZJd3r3N.mjs';
2
+ import { j as resolveProjectRoot, I as workflowSteps, z as setWorkflowEnabled, E as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, D as listWorkflows, B as saveWorkflow, C as rawWorkflow } from './run-fb578WlD.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  import 'fs';
@@ -1,7 +1,7 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import os from 'node:os';
4
- import { c as connectToHypha } from './run-ZZJd3r3N.mjs';
4
+ import { c as connectToHypha } from './run-fb578WlD.mjs';
5
5
  import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-B9O-hKxm.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
@@ -4,7 +4,7 @@ import { mkdirSync, chmodSync, writeFileSync, unlinkSync, existsSync, readFileSy
4
4
  import { join } from 'path';
5
5
  import { homedir, platform, arch } from 'os';
6
6
  import { randomUUID, createHash } from 'crypto';
7
- import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-ZZJd3r3N.mjs';
7
+ import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-fb578WlD.mjs';
8
8
  import 'fs/promises';
9
9
  import 'url';
10
10
  import 'node:crypto';
@@ -1,5 +1,5 @@
1
- import { Y as resolveModel, ab as describeMisconfiguration, ac as buildMachineDeps } from './run-ZZJd3r3N.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-DgvSqT9x.mjs';
1
+ import { Y as resolveModel, ab as describeMisconfiguration, ac as buildMachineDeps } from './run-fb578WlD.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-DOKXLjFQ.mjs';
3
3
  import { WebSocket } from 'ws';
4
4
  import { execSync, spawn } from 'child_process';
5
5
  import 'os';
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { c as connectToHypha, a as createSessionStore, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, s as startDaemon, b as stopDaemon } from './run-ZZJd3r3N.mjs';
1
+ export { c as connectToHypha, a as createSessionStore, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, s as startDaemon, b as stopDaemon } from './run-fb578WlD.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,5 +1,5 @@
1
1
  var name = "svamp-cli";
2
- var version = "0.2.269";
2
+ var version = "0.2.271";
3
3
  var description = "Svamp CLI — AI workspace daemon on Hypha Cloud";
4
4
  var author = "Amun AI AB";
5
5
  var license = "SEE LICENSE IN LICENSE";
@@ -19,7 +19,7 @@ var exports$1 = {
19
19
  var scripts = {
20
20
  build: "rm -rf dist bin/skills bin/commands && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/crew bin/skills/crew && cp -r ../../commands bin/commands && tsc --noEmit && pkgroll",
21
21
  typecheck: "tsc --noEmit",
22
- test: "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs",
22
+ test: "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs",
23
23
  "test:hypha": "node --no-warnings test/test-hypha-service.mjs",
24
24
  dev: "tsx src/cli.ts",
25
25
  "dev:daemon": "tsx src/cli.ts daemon start-sync",
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as saveWorkflow, C as rawWorkflow, D as listWorkflows } from './run-ZZJd3r3N.mjs';
1
+ import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as saveWorkflow, C as rawWorkflow, D as listWorkflows } from './run-fb578WlD.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-ZZJd3r3N.mjs';
1
+ import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-fb578WlD.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ad as applyClaudeProxyEnv, ae as composeSessionId, af as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ag as generateHookSettings } from './run-ZZJd3r3N.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ad as applyClaudeProxyEnv, ae as composeSessionId, af as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ag as generateHookSettings } from './run-fb578WlD.mjs';
2
2
  import os from 'node:os';
3
3
  import { resolve, join } from 'node:path';
4
4
  import { existsSync, readFileSync, watch } from 'node:fs';
@@ -148,7 +148,7 @@ function authorizeRequest(context, sharing, requiredRole = "view") {
148
148
  if (!userEmail) {
149
149
  throw new Error("Access denied: this session is not publicly shared");
150
150
  }
151
- throw new Error("Access denied: you are not in the allowed users list");
151
+ throw new Error(`Access denied: ${userEmail} is not in the allowed users list`);
152
152
  }
153
153
  if (effectiveLevel < ROLE_HIERARCHY[requiredRole]) {
154
154
  const effectiveRole = levelToRole(effectiveLevel) || "unknown";
@@ -2896,7 +2896,7 @@ Connection: close\r
2896
2896
  const mount = this.mounts.get(mountName);
2897
2897
  const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
2898
2898
  try {
2899
- const { FrpcTunnel } = await import('./frpc-D0O_ho2a.mjs');
2899
+ const { FrpcTunnel } = await import('./frpc-BAPNDwFz.mjs');
2900
2900
  let tunnel;
2901
2901
  tunnel = new FrpcTunnel({
2902
2902
  name: tunnelName,
@@ -4663,7 +4663,17 @@ async function registerMachineService(server, machineId, metadata, daemonState,
4663
4663
  }
4664
4664
  }
4665
4665
  };
4666
- const ROLE_RANK = { view: 1, interact: 2, admin: 3 };
4666
+ const hasExplicitSessionAccess = async (rpc, requiredRole, context) => {
4667
+ try {
4668
+ const meta = await rpc.getMetadata(context);
4669
+ const sharing = meta?.metadata?.sharing;
4670
+ if (!sharing || !sharing.enabled) return false;
4671
+ authorizeRequest(context, sharing, requiredRole);
4672
+ return true;
4673
+ } catch {
4674
+ return false;
4675
+ }
4676
+ };
4667
4677
  const authorizeSessionAccess = async (sessionId, requiredRole, context) => {
4668
4678
  try {
4669
4679
  authorizeRequest(context, currentMetadata.sharing, requiredRole);
@@ -4672,10 +4682,8 @@ async function registerMachineService(server, machineId, metadata, daemonState,
4672
4682
  }
4673
4683
  const rpc = handlers.getSessionRPCHandlers?.(sessionId);
4674
4684
  if (!rpc) throw new Error(`Session '${sessionId}' not found`);
4675
- const role = await rpc.getEffectiveRole(context).catch(() => null);
4676
- if (!role || (ROLE_RANK[role] ?? 0) < ROLE_RANK[requiredRole]) {
4677
- throw new Error(`Access denied: ${requiredRole} role required on session ${sessionId}`);
4678
- }
4685
+ if (await hasExplicitSessionAccess(rpc, requiredRole, context)) return;
4686
+ throw new Error(`Access denied: ${requiredRole} role required on session ${sessionId}`);
4679
4687
  };
4680
4688
  const notifyListeners = (update) => {
4681
4689
  const snapshot = [...listeners];
@@ -4775,11 +4783,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
4775
4783
  for (const t of tracked) {
4776
4784
  const rpc = handlers.getSessionRPCHandlers?.(t.sessionId);
4777
4785
  if (!rpc) continue;
4778
- try {
4779
- const meta = await rpc.getMetadata(context);
4780
- result.push(t);
4781
- } catch {
4782
- }
4786
+ if (await hasExplicitSessionAccess(rpc, "view", context)) result.push(t);
4783
4787
  }
4784
4788
  return result;
4785
4789
  },
@@ -4802,6 +4806,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
4802
4806
  for (const sid of sessionIds) {
4803
4807
  const rpc = handlers.getSessionRPCHandlers?.(sid);
4804
4808
  if (!rpc) continue;
4809
+ if (!hasMachineAccess && !await hasExplicitSessionAccess(rpc, "view", context)) continue;
4805
4810
  try {
4806
4811
  const [metaResult, stateResult, activity] = await Promise.all([
4807
4812
  rpc.getMetadata(context),
@@ -4844,13 +4849,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
4844
4849
  try {
4845
4850
  authorizeRequest(context, currentMetadata.sharing, "view");
4846
4851
  } catch (machineErr) {
4847
- try {
4848
- const meta = await rpc.getMetadata(context);
4849
- const sessionSharing = meta?.metadata?.sharing;
4850
- authorizeRequest(context, sessionSharing, "view");
4851
- } catch {
4852
- throw machineErr;
4853
- }
4852
+ if (!await hasExplicitSessionAccess(rpc, "view", context)) throw machineErr;
4854
4853
  }
4855
4854
  const handler = rpc[method];
4856
4855
  if (typeof handler !== "function") {
@@ -4875,11 +4874,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
4875
4874
  try {
4876
4875
  authorizeRequest(context, currentMetadata.sharing, "view");
4877
4876
  } catch (machineErr) {
4878
- try {
4879
- const meta = await rpc.getMetadata(context);
4880
- const sessionSharing = meta?.metadata?.sharing;
4881
- authorizeRequest(context, sessionSharing, "view");
4882
- } catch {
4877
+ if (!await hasExplicitSessionAccess(rpc, "view", context)) {
4883
4878
  throw machineErr;
4884
4879
  }
4885
4880
  }
@@ -5703,7 +5698,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5703
5698
  const tunnels = handlers.tunnels;
5704
5699
  if (!tunnels) throw new Error("Tunnel management not available");
5705
5700
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
5706
- const { FrpcTunnel } = await import('./frpc-D0O_ho2a.mjs');
5701
+ const { FrpcTunnel } = await import('./frpc-BAPNDwFz.mjs');
5707
5702
  const tunnel = new FrpcTunnel({
5708
5703
  name: params.name,
5709
5704
  ports: params.ports,
@@ -6177,7 +6172,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6177
6172
  }
6178
6173
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
6179
6174
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
6180
- const { toolsForRole } = await import('./sideband-DgvSqT9x.mjs');
6175
+ const { toolsForRole } = await import('./sideband-DOKXLjFQ.mjs');
6181
6176
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
6182
6177
  return fmt(r2);
6183
6178
  }
@@ -6276,7 +6271,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6276
6271
  if (r.error || !r.sender) return { error: r.error || "unauthorized" };
6277
6272
  const callId = "call_" + Math.random().toString(16).slice(2, 12);
6278
6273
  const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
6279
- const { queryCore } = await import('./commands-DqyqbI0p.mjs');
6274
+ const { queryCore } = await import('./commands-D3GMer4U.mjs');
6280
6275
  const timeout = c.reply?.timeout_sec || 120;
6281
6276
  let result;
6282
6277
  try {
@@ -15902,7 +15897,7 @@ async function startDaemon(options) {
15902
15897
  try {
15903
15898
  const dir = loadSessionIndex()[sessionId]?.directory;
15904
15899
  if (!dir) return;
15905
- const { reconcileServiceLinks } = await import('./agentCommands-Dzk4e5se.mjs');
15900
+ const { reconcileServiceLinks } = await import('./agentCommands-CcvH2Sic.mjs');
15906
15901
  const configPath = getSvampConfigPath(dir, sessionId);
15907
15902
  const config = readSvampConfig(configPath);
15908
15903
  const entries = Array.from(urls.entries());
@@ -15920,7 +15915,7 @@ async function startDaemon(options) {
15920
15915
  }
15921
15916
  }
15922
15917
  async function createExposedTunnel(spec) {
15923
- const { FrpcTunnel } = await import('./frpc-D0O_ho2a.mjs');
15918
+ const { FrpcTunnel } = await import('./frpc-BAPNDwFz.mjs');
15924
15919
  const tunnel = new FrpcTunnel({
15925
15920
  name: spec.name,
15926
15921
  ports: spec.ports,
@@ -16383,9 +16378,12 @@ ${v.guidance ? v.guidance + "\n" : ""}Criteria: ${v.criteria || "(none)"}
16383
16378
  // persisted metadata; the daemon resolves it to concrete auth at each Claude spawn.
16384
16379
  accountId: options2.accountId ?? persisted?.metadata?.accountId ?? void 0
16385
16380
  };
16386
- let currentPermissionMode = options2.permissionMode || persisted?.permissionMode || "bypassPermissions";
16381
+ let currentPermissionMode = options2.permissionMode || persisted?.permissionMode || agentConfig.default_permission_mode || "bypassPermissions";
16387
16382
  const sessionCreatedAt = persisted?.createdAt || Date.now();
16388
- let lastSpawnMeta = persisted?.spawnMeta || (options2.model ? { model: options2.model } : {});
16383
+ let lastSpawnMeta = persisted?.spawnMeta || {
16384
+ ...options2.model ? { model: options2.model } : {},
16385
+ ...options2.permissionMode ? { permissionMode: options2.permissionMode } : {}
16386
+ };
16389
16387
  let sessionWasProcessing = !!options2.wasProcessing;
16390
16388
  let lastMainModel;
16391
16389
  const AUTO_TOPIC_DISABLED = process.env.SVAMP_AUTO_TOPIC === "0";
@@ -18088,11 +18086,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18088
18086
  });
18089
18087
  },
18090
18088
  onIssue: async (params) => {
18091
- const { issueRpc } = await import('./rpc-KQlBd_Kl.mjs');
18089
+ const { issueRpc } = await import('./rpc-xVRkdJOj.mjs');
18092
18090
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
18093
18091
  },
18094
18092
  onWorkflow: async (params) => {
18095
- const { workflowRpc } = await import('./rpc-CiB0ZTCJ.mjs');
18093
+ const { workflowRpc } = await import('./rpc-6vMdF_Bi.mjs');
18096
18094
  return workflowRpc(params?.cwd || directory, params || {});
18097
18095
  },
18098
18096
  onRipgrep: async (args, cwd) => {
@@ -18387,7 +18385,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18387
18385
  // Selected backend account — sticky across restart via persisted metadata.
18388
18386
  accountId: options2.accountId ?? acpPersisted?.metadata?.accountId ?? void 0
18389
18387
  };
18390
- let currentPermissionMode = options2.permissionMode || "bypassPermissions";
18388
+ let currentPermissionMode = options2.permissionMode || agentConfig?.default_permission_mode || "bypassPermissions";
18391
18389
  const allowedTools = /* @__PURE__ */ new Set();
18392
18390
  const allowedBashLiterals = /* @__PURE__ */ new Set();
18393
18391
  const allowedBashPrefixes = /* @__PURE__ */ new Set();
@@ -18662,11 +18660,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18662
18660
  });
18663
18661
  },
18664
18662
  onIssue: async (params) => {
18665
- const { issueRpc } = await import('./rpc-KQlBd_Kl.mjs');
18663
+ const { issueRpc } = await import('./rpc-xVRkdJOj.mjs');
18666
18664
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
18667
18665
  },
18668
18666
  onWorkflow: async (params) => {
18669
- const { workflowRpc } = await import('./rpc-CiB0ZTCJ.mjs');
18667
+ const { workflowRpc } = await import('./rpc-6vMdF_Bi.mjs');
18670
18668
  return workflowRpc(params?.cwd || directory, params || {});
18671
18669
  },
18672
18670
  onRipgrep: async (args, cwd) => {
@@ -19702,7 +19700,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
19702
19700
  const PING_TIMEOUT_MS = 15e3;
19703
19701
  const POST_RECONNECT_GRACE_MS = 2e4;
19704
19702
  const RECONNECT_JITTER_MS = 2500;
19705
- const { WorkflowScheduler } = await import('./scheduler-dJbWmJa6.mjs');
19703
+ const { WorkflowScheduler } = await import('./scheduler-BnGmCzUW.mjs');
19706
19704
  const workflowScheduler = new WorkflowScheduler({
19707
19705
  projectRoots: () => {
19708
19706
  const dirs = /* @__PURE__ */ new Set();
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-ZZJd3r3N.mjs';
1
+ import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-fb578WlD.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -54,7 +54,7 @@ async function handleServeCommand() {
54
54
  }
55
55
  }
56
56
  async function serveAdd(args, machineId) {
57
- const { connectAndGetMachine } = await import('./commands-DqyqbI0p.mjs');
57
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
58
58
  const pos = positionalArgs(args);
59
59
  const name = pos[0];
60
60
  if (!name) {
@@ -93,7 +93,7 @@ async function serveAdd(args, machineId) {
93
93
  }
94
94
  }
95
95
  async function serveApply(args, machineId) {
96
- const { connectAndGetMachine } = await import('./commands-DqyqbI0p.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
97
97
  const fs = await import('fs');
98
98
  const yaml = await import('yaml');
99
99
  const file = positionalArgs(args)[0];
@@ -182,7 +182,7 @@ async function serveApply(args, machineId) {
182
182
  }
183
183
  }
184
184
  async function serveRemove(args, machineId) {
185
- const { connectAndGetMachine } = await import('./commands-DqyqbI0p.mjs');
185
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
186
186
  const pos = positionalArgs(args);
187
187
  const name = pos[0];
188
188
  if (!name) {
@@ -202,7 +202,7 @@ async function serveRemove(args, machineId) {
202
202
  }
203
203
  }
204
204
  async function serveList(args, machineId) {
205
- const { connectAndGetMachine } = await import('./commands-DqyqbI0p.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
206
206
  const all = hasFlag(args, "--all", "-a");
207
207
  const json = hasFlag(args, "--json");
208
208
  const sessionId = getFlag(args, "--session");
@@ -235,7 +235,7 @@ async function serveList(args, machineId) {
235
235
  }
236
236
  }
237
237
  async function serveInfo(machineId) {
238
- const { connectAndGetMachine } = await import('./commands-DqyqbI0p.mjs');
238
+ const { connectAndGetMachine } = await import('./commands-D3GMer4U.mjs');
239
239
  const { machine, server } = await connectAndGetMachine(machineId);
240
240
  try {
241
241
  const info = await machine.serveInfo();
@@ -1,4 +1,4 @@
1
- import { R as READ_ONLY_TOOLS, J as loadMachineContext, K as buildMachineInstructions, L as machineToolsForRole, M as buildMachineTools } from './run-ZZJd3r3N.mjs';
1
+ import { R as READ_ONLY_TOOLS, J as loadMachineContext, K as buildMachineInstructions, L as machineToolsForRole, M as buildMachineTools } from './run-fb578WlD.mjs';
2
2
  import 'node:child_process';
3
3
  import 'os';
4
4
  import 'fs/promises';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svamp-cli",
3
- "version": "0.2.269",
3
+ "version": "0.2.271",
4
4
  "description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
5
5
  "author": "Amun AI AB",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -20,7 +20,7 @@
20
20
  "scripts": {
21
21
  "build": "rm -rf dist bin/skills bin/commands && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/crew bin/skills/crew && cp -r ../../commands bin/commands && tsc --noEmit && pkgroll",
22
22
  "typecheck": "tsc --noEmit",
23
- "test": "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs",
23
+ "test": "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs",
24
24
  "test:hypha": "node --no-warnings test/test-hypha-service.mjs",
25
25
  "dev": "tsx src/cli.ts",
26
26
  "dev:daemon": "tsx src/cli.ts daemon start-sync",