svamp-cli 0.2.252 → 0.2.253

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 (25) hide show
  1. package/dist/{agentCommands-BfK_xRcZ.mjs → agentCommands-DYoNzX4K.mjs} +5 -5
  2. package/dist/{auth-dxadQh0v.mjs → auth-D0nW0Gyj.mjs} +1 -1
  3. package/dist/cli.mjs +61 -61
  4. package/dist/{commands-eDMV8Q8q.mjs → commands-B9wShol7.mjs} +1 -1
  5. package/dist/{commands-Blddcoeh.mjs → commands-C3YGnWyy.mjs} +1 -1
  6. package/dist/{commands-CuSO_rgw.mjs → commands-CfDWN8Ej.mjs} +2 -2
  7. package/dist/{commands-Cg3yUhp1.mjs → commands-CvWkQB_c.mjs} +1 -1
  8. package/dist/{commands-BAtj5B4a.mjs → commands-EhQiKpwu.mjs} +6 -6
  9. package/dist/{commands-BkroIJOC.mjs → commands-YPQSZ4Qx.mjs} +1 -1
  10. package/dist/{commands-B9eaRA8O.mjs → commands-_Tr8pO3_.mjs} +2 -2
  11. package/dist/{fleet-CNmpoV_Q.mjs → fleet-Ndfbo8Ni.mjs} +2 -2
  12. package/dist/{frpc-DoUUUoZn.mjs → frpc-CLQB-GM1.mjs} +1 -1
  13. package/dist/{headlessCli-DGTHnPjT.mjs → headlessCli-CbCWVR81.mjs} +2 -2
  14. package/dist/index.mjs +1 -1
  15. package/dist/{package-C2CWKEW-.mjs → package-BTW_-LFn.mjs} +1 -1
  16. package/dist/{pinnedClaudeCode-ivV7xAp3.mjs → pinnedClaudeCode-DuLXaoGP.mjs} +1 -1
  17. package/dist/{rpc-_rwZwiHD.mjs → rpc-0HSLhpCb.mjs} +1 -1
  18. package/dist/{rpc-665-sPRQ.mjs → rpc-BB-AxQa_.mjs} +1 -1
  19. package/dist/{run-BPNXOI3F.mjs → run-BtWV7xhR.mjs} +1 -1
  20. package/dist/{run-BNxaekWa.mjs → run-hYUl-Fln.mjs} +96 -44
  21. package/dist/{scheduler-DjMTCoWS.mjs → scheduler-DaFydJPf.mjs} +1 -1
  22. package/dist/{serveCommands-Bc6fchAf.mjs → serveCommands-BgtRllaY.mjs} +5 -5
  23. package/dist/{serveManager-DAuIjPuV.mjs → serveManager-BK5OjhXU.mjs} +2 -2
  24. package/dist/{sideband-D6vgqNiq.mjs → sideband-C0qzprWp.mjs} +1 -1
  25. package/package.json +1 -1
@@ -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 { k as shortId } from './run-BNxaekWa.mjs';
5
+ import { k as shortId } from './run-hYUl-Fln.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -97,7 +97,7 @@ async function sessionSetTitle(title) {
97
97
  }
98
98
  async function sessionSetProjectDescription(description) {
99
99
  const dir = process.cwd();
100
- const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.al; });
100
+ const { projectName, writeProjectInfo, sanitizeDescription, projectInfoPath } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.al; });
101
101
  const desc = sanitizeDescription(description, 240);
102
102
  if (!desc) {
103
103
  console.error("Project description is empty.");
@@ -344,7 +344,7 @@ async function sessionBroadcast(action, args) {
344
344
  console.log(`Broadcast sent: ${action}`);
345
345
  }
346
346
  async function connectToMachineService() {
347
- const { connectAndGetMachine } = await import('./commands-BkroIJOC.mjs');
347
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.mjs');
348
348
  return connectAndGetMachine();
349
349
  }
350
350
  function buildInboxMessage(args) {
@@ -422,7 +422,7 @@ async function inboxSend(targetSessionId, opts) {
422
422
  console.error("Message body is required.");
423
423
  process.exit(1);
424
424
  }
425
- const { connectAndResolveSession } = await import('./commands-BkroIJOC.mjs');
425
+ const { connectAndResolveSession } = await import('./commands-YPQSZ4Qx.mjs');
426
426
  let server;
427
427
  try {
428
428
  const { targetId, messageId } = await inboxSendCore(
@@ -476,7 +476,7 @@ async function inboxReply(messageId, body) {
476
476
  console.error("SVAMP_SESSION_ID not set. This command must be run inside a Svamp session.");
477
477
  process.exit(1);
478
478
  }
479
- const { connectAndResolveSession } = await import('./commands-BkroIJOC.mjs');
479
+ const { connectAndResolveSession } = await import('./commands-YPQSZ4Qx.mjs');
480
480
  const { server: localServer, machine: localMachine } = await connectToMachineService();
481
481
  let localDisconnected = false;
482
482
  const disconnectLocal = async () => {
@@ -1,4 +1,4 @@
1
- import { a1 as resolveModel } from './run-BNxaekWa.mjs';
1
+ import { a1 as resolveModel } from './run-hYUl-Fln.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { e as clearStopMarker, f as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-BNxaekWa.mjs';
1
+ import { e as clearStopMarker, f as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-hYUl-Fln.mjs';
2
2
  import { ensureSupervisorViaServiceManager, LAUNCHD_LABEL } from './serviceManager-hlOVxkhW.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
@@ -35,7 +35,7 @@ const subcommand = args[0];
35
35
  let daemonSubcommand = args[1];
36
36
  async function main() {
37
37
  try {
38
- const { getLoadedConfig } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ar; });
38
+ const { getLoadedConfig } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ar; });
39
39
  getLoadedConfig();
40
40
  } catch {
41
41
  }
@@ -54,7 +54,7 @@ async function main() {
54
54
  }
55
55
  const whenIdle = args.includes("--when-idle");
56
56
  const force = args.includes("--force");
57
- const mod = await import('./run-BNxaekWa.mjs').then(function (n) { return n.at; });
57
+ const mod = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.at; });
58
58
  if (whenIdle && !force) {
59
59
  if (mod.isDaemonAlive()) {
60
60
  mod.writePendingRestart({ reason: "svamp daemon restart --when-idle" });
@@ -355,7 +355,7 @@ async function main() {
355
355
  console.error("svamp service: Service commands are not available in sandboxed sessions.");
356
356
  process.exit(1);
357
357
  }
358
- const { handleServiceCommand } = await import('./commands-BAtj5B4a.mjs');
358
+ const { handleServiceCommand } = await import('./commands-EhQiKpwu.mjs');
359
359
  await handleServiceCommand();
360
360
  } else if (subcommand === "serve") {
361
361
  const { isSandboxed: isSandboxedServe } = await import('./sandboxDetect-DNTcbgWD.mjs');
@@ -363,7 +363,7 @@ async function main() {
363
363
  console.error("svamp serve: Serve commands are not available in sandboxed sessions.");
364
364
  process.exit(1);
365
365
  }
366
- const { handleServeCommand } = await import('./serveCommands-Bc6fchAf.mjs');
366
+ const { handleServeCommand } = await import('./serveCommands-BgtRllaY.mjs');
367
367
  await handleServeCommand();
368
368
  process.exit(0);
369
369
  } else if (subcommand === "process" || subcommand === "proc") {
@@ -372,7 +372,7 @@ async function main() {
372
372
  console.error("svamp process: Process commands are not available in sandboxed sessions.");
373
373
  process.exit(1);
374
374
  }
375
- const { processCommand } = await import('./commands-B9eaRA8O.mjs');
375
+ const { processCommand } = await import('./commands-_Tr8pO3_.mjs');
376
376
  let machineId;
377
377
  const processArgs = args.slice(1);
378
378
  const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
@@ -386,18 +386,18 @@ async function main() {
386
386
  }), machineId);
387
387
  process.exit(0);
388
388
  } else if (subcommand === "issue" || subcommand === "issues") {
389
- const { issueCommand } = await import('./commands-Blddcoeh.mjs');
389
+ const { issueCommand } = await import('./commands-C3YGnWyy.mjs');
390
390
  await issueCommand(args.slice(1));
391
391
  process.exit(0);
392
392
  } else if (subcommand === "workflow" || subcommand === "workflows") {
393
- const { workflowCommand } = await import('./commands-eDMV8Q8q.mjs');
393
+ const { workflowCommand } = await import('./commands-B9wShol7.mjs');
394
394
  await workflowCommand(args.slice(1));
395
395
  process.exit(0);
396
396
  } else if (subcommand === "wise-agent" || subcommand === "wise") {
397
397
  await handleWiseAgentCommand(args.slice(1));
398
398
  process.exit(0);
399
399
  } else if (subcommand === "feature" || subcommand === "crew") {
400
- const { crewCommand } = await import('./commands-CuSO_rgw.mjs');
400
+ const { crewCommand } = await import('./commands-CfDWN8Ej.mjs');
401
401
  await crewCommand(args.slice(1));
402
402
  process.exit(0);
403
403
  } else if (subcommand === "--help" || subcommand === "-h") {
@@ -405,7 +405,7 @@ async function main() {
405
405
  } else if (!subcommand || subcommand === "start") {
406
406
  await handleInteractiveCommand();
407
407
  } else if (subcommand === "--version" || subcommand === "-v") {
408
- const pkg = await import('./package-C2CWKEW-.mjs').catch(() => ({ default: { version: "unknown" } }));
408
+ const pkg = await import('./package-BTW_-LFn.mjs').catch(() => ({ default: { version: "unknown" } }));
409
409
  console.log(`svamp version: ${pkg.default.version}`);
410
410
  } else {
411
411
  console.error(`Unknown command: ${subcommand}`);
@@ -414,7 +414,7 @@ async function main() {
414
414
  }
415
415
  }
416
416
  async function handleInteractiveCommand() {
417
- const { runInteractive } = await import('./run-BPNXOI3F.mjs');
417
+ const { runInteractive } = await import('./run-BtWV7xhR.mjs');
418
418
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
419
419
  let directory = process.cwd();
420
420
  let resumeSessionId;
@@ -459,7 +459,7 @@ async function handleAgentCommand() {
459
459
  return;
460
460
  }
461
461
  if (agentArgs[0] === "list") {
462
- const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ao; });
462
+ const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ao; });
463
463
  console.log("Known agents:");
464
464
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
465
465
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -471,7 +471,7 @@ async function handleAgentCommand() {
471
471
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
472
472
  return;
473
473
  }
474
- const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ao; });
474
+ const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ao; });
475
475
  let cwd = process.cwd();
476
476
  const filteredArgs = [];
477
477
  for (let i = 0; i < agentArgs.length; i++) {
@@ -495,12 +495,12 @@ async function handleAgentCommand() {
495
495
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
496
496
  let backend;
497
497
  if (KNOWN_MCP_AGENTS[config.agentName]) {
498
- const { CodexMcpBackend } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ap; });
498
+ const { CodexMcpBackend } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ap; });
499
499
  backend = new CodexMcpBackend({ cwd, log: logFn });
500
500
  } else {
501
- const { AcpBackend } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.an; });
502
- const { GeminiTransport } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.aq; });
503
- const { DefaultTransport } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.am; });
501
+ const { AcpBackend } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.an; });
502
+ const { GeminiTransport } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.aq; });
503
+ const { DefaultTransport } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.am; });
504
504
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
505
505
  backend = new AcpBackend({
506
506
  agentName: config.agentName,
@@ -627,7 +627,7 @@ async function handleSessionCommand() {
627
627
  process.exit(1);
628
628
  }
629
629
  }
630
- const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-BkroIJOC.mjs');
630
+ const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionLoopStart, sessionLoopCancel, sessionLoopStatus, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-YPQSZ4Qx.mjs');
631
631
  const parseFlagStr = (flag, shortFlag) => {
632
632
  for (let i = 1; i < sessionArgs.length; i++) {
633
633
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -695,7 +695,7 @@ async function handleSessionCommand() {
695
695
  allowDomain.push(sessionArgs[++i]);
696
696
  }
697
697
  }
698
- const { parseShareArg } = await import('./commands-BkroIJOC.mjs');
698
+ const { parseShareArg } = await import('./commands-YPQSZ4Qx.mjs');
699
699
  const shareEntries = share.map((s) => parseShareArg(s));
700
700
  await sessionSpawn(agent, dir, targetMachineId, {
701
701
  message,
@@ -785,7 +785,7 @@ async function handleSessionCommand() {
785
785
  console.error(" Rewinds history: rewrites the message + drops everything after it, then restarts Claude.");
786
786
  process.exit(1);
787
787
  }
788
- const { sessionEditMessage } = await import('./commands-BkroIJOC.mjs');
788
+ const { sessionEditMessage } = await import('./commands-YPQSZ4Qx.mjs');
789
789
  await sessionEditMessage(sessionArgs[1], sessionArgs[2], sessionArgs[3], targetMachineId);
790
790
  } else if (sessionSubcommand === "refine") {
791
791
  if (!sessionArgs[1] || !sessionArgs[2]) {
@@ -793,7 +793,7 @@ async function handleSessionCommand() {
793
793
  console.error(" Asks the agent to revise its latest reply in place (no extra round).");
794
794
  process.exit(1);
795
795
  }
796
- const { sessionRefineLastReply } = await import('./commands-BkroIJOC.mjs');
796
+ const { sessionRefineLastReply } = await import('./commands-YPQSZ4Qx.mjs');
797
797
  await sessionRefineLastReply(sessionArgs[1], sessionArgs[2], targetMachineId);
798
798
  } else if (sessionSubcommand === "undo-edit" || sessionSubcommand === "undo") {
799
799
  if (!sessionArgs[1]) {
@@ -801,7 +801,7 @@ async function handleSessionCommand() {
801
801
  console.error(" Reverts the most recent edit/refine, restoring the pre-edit history.");
802
802
  process.exit(1);
803
803
  }
804
- const { sessionUndoEdit } = await import('./commands-BkroIJOC.mjs');
804
+ const { sessionUndoEdit } = await import('./commands-YPQSZ4Qx.mjs');
805
805
  await sessionUndoEdit(sessionArgs[1], targetMachineId);
806
806
  } else if (sessionSubcommand === "query") {
807
807
  const dir = sessionArgs[1];
@@ -811,7 +811,7 @@ async function handleSessionCommand() {
811
811
  console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
812
812
  process.exit(1);
813
813
  }
814
- const { sessionQuery } = await import('./commands-BkroIJOC.mjs');
814
+ const { sessionQuery } = await import('./commands-YPQSZ4Qx.mjs');
815
815
  await sessionQuery(dir, prompt, targetMachineId, {
816
816
  timeout: parseFlagInt("--timeout"),
817
817
  json: hasFlag("--json"),
@@ -844,7 +844,7 @@ async function handleSessionCommand() {
844
844
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
845
845
  process.exit(1);
846
846
  }
847
- const { sessionApprove } = await import('./commands-BkroIJOC.mjs');
847
+ const { sessionApprove } = await import('./commands-YPQSZ4Qx.mjs');
848
848
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
849
849
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
850
850
  json: hasFlag("--json")
@@ -854,7 +854,7 @@ async function handleSessionCommand() {
854
854
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
855
855
  process.exit(1);
856
856
  }
857
- const { sessionDeny } = await import('./commands-BkroIJOC.mjs');
857
+ const { sessionDeny } = await import('./commands-YPQSZ4Qx.mjs');
858
858
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
859
859
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
860
860
  json: hasFlag("--json")
@@ -899,7 +899,7 @@ async function handleSessionCommand() {
899
899
  console.error("Usage: svamp session set-title <title>");
900
900
  process.exit(1);
901
901
  }
902
- const { sessionSetTitle } = await import('./agentCommands-BfK_xRcZ.mjs');
902
+ const { sessionSetTitle } = await import('./agentCommands-DYoNzX4K.mjs');
903
903
  await sessionSetTitle(title);
904
904
  } else if (sessionSubcommand === "set-project-description" || sessionSubcommand === "set-project") {
905
905
  const desc = sessionArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
@@ -907,7 +907,7 @@ async function handleSessionCommand() {
907
907
  console.error("Usage: svamp session set-project-description <text>");
908
908
  process.exit(1);
909
909
  }
910
- const { sessionSetProjectDescription } = await import('./agentCommands-BfK_xRcZ.mjs');
910
+ const { sessionSetProjectDescription } = await import('./agentCommands-DYoNzX4K.mjs');
911
911
  await sessionSetProjectDescription(desc);
912
912
  } else if (sessionSubcommand === "set-link") {
913
913
  const url = sessionArgs[1];
@@ -916,11 +916,11 @@ async function handleSessionCommand() {
916
916
  process.exit(1);
917
917
  }
918
918
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
919
- const { sessionSetLink } = await import('./agentCommands-BfK_xRcZ.mjs');
919
+ const { sessionSetLink } = await import('./agentCommands-DYoNzX4K.mjs');
920
920
  await sessionSetLink(url, label);
921
921
  } else if (sessionSubcommand === "link") {
922
922
  const op = sessionArgs[1];
923
- const lm = await import('./agentCommands-BfK_xRcZ.mjs');
923
+ const lm = await import('./agentCommands-DYoNzX4K.mjs');
924
924
  if (op === "add") {
925
925
  const url = sessionArgs[2];
926
926
  if (!url || url.startsWith("--")) {
@@ -955,7 +955,7 @@ async function handleSessionCommand() {
955
955
  process.exit(1);
956
956
  }
957
957
  const level = parseFlagStr("--level") || "info";
958
- const { sessionNotify } = await import('./agentCommands-BfK_xRcZ.mjs');
958
+ const { sessionNotify } = await import('./agentCommands-DYoNzX4K.mjs');
959
959
  await sessionNotify(message, level);
960
960
  } else if (sessionSubcommand === "broadcast") {
961
961
  const action = sessionArgs[1];
@@ -963,7 +963,7 @@ async function handleSessionCommand() {
963
963
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
964
964
  process.exit(1);
965
965
  }
966
- const { sessionBroadcast } = await import('./agentCommands-BfK_xRcZ.mjs');
966
+ const { sessionBroadcast } = await import('./agentCommands-DYoNzX4K.mjs');
967
967
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
968
968
  } else if (sessionSubcommand === "inbox") {
969
969
  const inboxSubcmd = sessionArgs[1];
@@ -974,7 +974,7 @@ async function handleSessionCommand() {
974
974
  process.exit(1);
975
975
  }
976
976
  if (agentSessionId) {
977
- const { inboxSend } = await import('./agentCommands-BfK_xRcZ.mjs');
977
+ const { inboxSend } = await import('./agentCommands-DYoNzX4K.mjs');
978
978
  await inboxSend(sessionArgs[2], {
979
979
  body: sessionArgs[3],
980
980
  subject: parseFlagStr("--subject"),
@@ -989,7 +989,7 @@ async function handleSessionCommand() {
989
989
  }
990
990
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
991
991
  if (agentSessionId && !sessionArgs[2]) {
992
- const { inboxList } = await import('./agentCommands-BfK_xRcZ.mjs');
992
+ const { inboxList } = await import('./agentCommands-DYoNzX4K.mjs');
993
993
  await inboxList({
994
994
  unread: hasFlag("--unread"),
995
995
  limit: parseFlagInt("--limit"),
@@ -1011,7 +1011,7 @@ async function handleSessionCommand() {
1011
1011
  process.exit(1);
1012
1012
  }
1013
1013
  if (agentSessionId && !sessionArgs[3]) {
1014
- const { inboxList } = await import('./agentCommands-BfK_xRcZ.mjs');
1014
+ const { inboxList } = await import('./agentCommands-DYoNzX4K.mjs');
1015
1015
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
1016
1016
  } else if (sessionArgs[3]) {
1017
1017
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -1021,7 +1021,7 @@ async function handleSessionCommand() {
1021
1021
  }
1022
1022
  } else if (inboxSubcmd === "reply") {
1023
1023
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
1024
- const { inboxReply } = await import('./agentCommands-BfK_xRcZ.mjs');
1024
+ const { inboxReply } = await import('./agentCommands-DYoNzX4K.mjs');
1025
1025
  await inboxReply(sessionArgs[2], sessionArgs[3]);
1026
1026
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
1027
1027
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -1059,7 +1059,7 @@ async function handleMachineCommand() {
1059
1059
  return;
1060
1060
  }
1061
1061
  if (machineSubcommand === "share") {
1062
- const { machineShare } = await import('./commands-BkroIJOC.mjs');
1062
+ const { machineShare } = await import('./commands-YPQSZ4Qx.mjs');
1063
1063
  let machineId;
1064
1064
  const shareArgs = [];
1065
1065
  for (let i = 1; i < machineArgs.length; i++) {
@@ -1110,14 +1110,14 @@ async function handleMachineCommand() {
1110
1110
  process.exit(1);
1111
1111
  }
1112
1112
  if (all) {
1113
- const { fleetExec } = await import('./fleet-CNmpoV_Q.mjs');
1113
+ const { fleetExec } = await import('./fleet-Ndfbo8Ni.mjs');
1114
1114
  await fleetExec(command, { cwd });
1115
1115
  } else {
1116
- const { machineExec } = await import('./commands-BkroIJOC.mjs');
1116
+ const { machineExec } = await import('./commands-YPQSZ4Qx.mjs');
1117
1117
  await machineExec(machineId, command, cwd);
1118
1118
  }
1119
1119
  } else if (machineSubcommand === "info") {
1120
- const { machineInfo } = await import('./commands-BkroIJOC.mjs');
1120
+ const { machineInfo } = await import('./commands-YPQSZ4Qx.mjs');
1121
1121
  let machineId;
1122
1122
  for (let i = 1; i < machineArgs.length; i++) {
1123
1123
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1137,10 +1137,10 @@ async function handleMachineCommand() {
1137
1137
  level = machineArgs[++i];
1138
1138
  }
1139
1139
  }
1140
- const { machineNotify } = await import('./agentCommands-BfK_xRcZ.mjs');
1140
+ const { machineNotify } = await import('./agentCommands-DYoNzX4K.mjs');
1141
1141
  await machineNotify(message, level);
1142
1142
  } else if (machineSubcommand === "ls") {
1143
- const { machineLs } = await import('./commands-BkroIJOC.mjs');
1143
+ const { machineLs } = await import('./commands-YPQSZ4Qx.mjs');
1144
1144
  let machineId;
1145
1145
  let showHidden = false;
1146
1146
  let path;
@@ -1199,20 +1199,20 @@ Examples:
1199
1199
  };
1200
1200
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1201
1201
  if (sub === "status") {
1202
- const { fleetStatus } = await import('./fleet-CNmpoV_Q.mjs');
1202
+ const { fleetStatus } = await import('./fleet-Ndfbo8Ni.mjs');
1203
1203
  await fleetStatus();
1204
1204
  } else if (sub === "upgrade-claude") {
1205
- const { fleetUpgradeClaude } = await import('./fleet-CNmpoV_Q.mjs');
1205
+ const { fleetUpgradeClaude } = await import('./fleet-Ndfbo8Ni.mjs');
1206
1206
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1207
1207
  } else if (sub === "upgrade-svamp") {
1208
- const { fleetUpgradeSvamp } = await import('./fleet-CNmpoV_Q.mjs');
1208
+ const { fleetUpgradeSvamp } = await import('./fleet-Ndfbo8Ni.mjs');
1209
1209
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self"), force: hasFlag("force") });
1210
1210
  } else if (sub === "daemon-restart") {
1211
- const { fleetDaemonRestart } = await import('./fleet-CNmpoV_Q.mjs');
1211
+ const { fleetDaemonRestart } = await import('./fleet-Ndfbo8Ni.mjs');
1212
1212
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
1213
1213
  } else if (sub === "push-skill") {
1214
1214
  const name = fleetArgs[1];
1215
- const { fleetPushSkill } = await import('./fleet-CNmpoV_Q.mjs');
1215
+ const { fleetPushSkill } = await import('./fleet-Ndfbo8Ni.mjs');
1216
1216
  await fleetPushSkill(name);
1217
1217
  } else {
1218
1218
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -1228,7 +1228,7 @@ async function handleSkillsCommand() {
1228
1228
  await printSkillsHelp();
1229
1229
  return;
1230
1230
  }
1231
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-Cg3yUhp1.mjs');
1231
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-CvWkQB_c.mjs');
1232
1232
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
1233
1233
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1234
1234
  if (!query) {
@@ -1275,7 +1275,7 @@ async function loginToHypha() {
1275
1275
  process.exit(1);
1276
1276
  }
1277
1277
  const anchor = anchorArg.replace(/\/+$/, "");
1278
- const { loadInstanceConfig } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ar; });
1278
+ const { loadInstanceConfig } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ar; });
1279
1279
  let cfg = null;
1280
1280
  try {
1281
1281
  cfg = await loadInstanceConfig({ anchor, force: true });
@@ -1386,7 +1386,7 @@ async function logoutFromHypha() {
1386
1386
  } catch {
1387
1387
  }
1388
1388
  try {
1389
- const { clearInstanceConfigCache } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ar; });
1389
+ const { clearInstanceConfigCache } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ar; });
1390
1390
  clearInstanceConfigCache();
1391
1391
  } catch {
1392
1392
  }
@@ -1725,7 +1725,7 @@ async function applyClaudeAuthFlags(argv) {
1725
1725
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
1726
1726
  );
1727
1727
  }
1728
- const mod = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ak; });
1728
+ const mod = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ak; });
1729
1729
  if (hasHypha) {
1730
1730
  let url;
1731
1731
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -1779,7 +1779,7 @@ async function applyDaemonShareFlag(argv) {
1779
1779
  }
1780
1780
  }
1781
1781
  if (collected.length === 0) return;
1782
- const { updateEnvFile } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ak; });
1782
+ const { updateEnvFile } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ak; });
1783
1783
  const seen = /* @__PURE__ */ new Set();
1784
1784
  const deduped = collected.filter((e) => {
1785
1785
  const k = e.toLowerCase();
@@ -1812,7 +1812,7 @@ async function handleWiseAgentCommand(rest) {
1812
1812
  }
1813
1813
  });
1814
1814
  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(" ");
1815
- const { wiseAskCli } = await import('./commands-BkroIJOC.mjs');
1815
+ const { wiseAskCli } = await import('./commands-YPQSZ4Qx.mjs');
1816
1816
  await wiseAskCli(machineId, message, sessionId, { json });
1817
1817
  return;
1818
1818
  }
@@ -1824,7 +1824,7 @@ async function handleWiseAgentCommand(rest) {
1824
1824
  }
1825
1825
  return void 0;
1826
1826
  };
1827
- const { runWiseVoiceCli } = await import('./headlessCli-DGTHnPjT.mjs');
1827
+ const { runWiseVoiceCli } = await import('./headlessCli-CbCWVR81.mjs');
1828
1828
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
1829
1829
  return;
1830
1830
  }
@@ -1842,7 +1842,7 @@ async function handleWiseAgentCommand(rest) {
1842
1842
  const mode = valueOf(["--mode"]);
1843
1843
  const mission = valueOf(["--mission"]);
1844
1844
  const url = rest.slice(1).find((a) => /^https?:\/\//.test(a)) || "";
1845
- const { wiseJoinMeetingCli } = await import('./commands-BkroIJOC.mjs');
1845
+ const { wiseJoinMeetingCli } = await import('./commands-YPQSZ4Qx.mjs');
1846
1846
  await wiseJoinMeetingCli(machineId, url, sessionId, { json, mode, mission });
1847
1847
  return;
1848
1848
  }
@@ -1854,7 +1854,7 @@ async function handleWiseAgentCommand(rest) {
1854
1854
  }
1855
1855
  return void 0;
1856
1856
  };
1857
- const { wiseLeaveMeetingCli } = await import('./commands-BkroIJOC.mjs');
1857
+ const { wiseLeaveMeetingCli } = await import('./commands-YPQSZ4Qx.mjs');
1858
1858
  await wiseLeaveMeetingCli(valueOf(["--machine", "-m"]), valueOf(["--session", "-s"]), { json: rest.includes("--json") });
1859
1859
  return;
1860
1860
  }
@@ -1878,7 +1878,7 @@ async function handleWiseAgentCommand(rest) {
1878
1878
  }
1879
1879
  });
1880
1880
  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(" ");
1881
- const { wiseAnnounceCli } = await import('./commands-BkroIJOC.mjs');
1881
+ const { wiseAnnounceCli } = await import('./commands-YPQSZ4Qx.mjs');
1882
1882
  await wiseAnnounceCli(machineId, text, sessionId, { json });
1883
1883
  return;
1884
1884
  }
@@ -1890,7 +1890,7 @@ async function handleWiseAgentCommand(rest) {
1890
1890
  }
1891
1891
  return void 0;
1892
1892
  };
1893
- const { wiseMeetingsCli } = await import('./commands-BkroIJOC.mjs');
1893
+ const { wiseMeetingsCli } = await import('./commands-YPQSZ4Qx.mjs');
1894
1894
  await wiseMeetingsCli(valueOf(["--machine", "-m"]), { json: rest.includes("--json") });
1895
1895
  return;
1896
1896
  }
@@ -1940,7 +1940,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1940
1940
  return;
1941
1941
  }
1942
1942
  const authArgs = rest.slice(1);
1943
- const mod = await import('./auth-dxadQh0v.mjs');
1943
+ const mod = await import('./auth-D0nW0Gyj.mjs');
1944
1944
  let action;
1945
1945
  try {
1946
1946
  action = mod.parseWiseAgentAuthArgs(authArgs);
@@ -1950,7 +1950,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1950
1950
  return;
1951
1951
  }
1952
1952
  if (action) {
1953
- const { updateEnvFile } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ak; });
1953
+ const { updateEnvFile } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ak; });
1954
1954
  const updates = mod.buildWiseAgentEnvUpdates(action);
1955
1955
  updateEnvFile(updates);
1956
1956
  for (const [k, v] of Object.entries(updates)) {
@@ -1964,7 +1964,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1964
1964
  }
1965
1965
  async function handleDaemonAuthCommand(argv) {
1966
1966
  const sub = (argv[0] || "status").toLowerCase();
1967
- const mod = await import('./run-BNxaekWa.mjs').then(function (n) { return n.ak; });
1967
+ const mod = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.ak; });
1968
1968
  if (sub === "--help" || sub === "-h" || sub === "help") {
1969
1969
  console.log(`
1970
1970
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2283,7 +2283,7 @@ Examples:
2283
2283
  async function printSkillsHelp() {
2284
2284
  let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
2285
2285
  try {
2286
- const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-BNxaekWa.mjs').then(function (n) { return n.as; });
2286
+ const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-hYUl-Fln.mjs').then(function (n) { return n.as; });
2287
2287
  browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
2288
2288
  } catch {
2289
2289
  }
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from 'node:child_process';
2
- import { n as resolveProjectRoot, M as workflowSteps, D as setWorkflowEnabled, I as isWorkflowEnabled, E as removeWorkflow, B as getWorkflow, H as listWorkflows, F as saveWorkflow, G as rawWorkflow } from './run-BNxaekWa.mjs';
2
+ import { n as resolveProjectRoot, M as workflowSteps, D as setWorkflowEnabled, I as isWorkflowEnabled, E as removeWorkflow, B as getWorkflow, H as listWorkflows, F as saveWorkflow, G as rawWorkflow } from './run-hYUl-Fln.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  import 'fs';
@@ -1,7 +1,7 @@
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 { n as resolveProjectRoot, x as searchIssues, w as listIssues, p as resumeIssue, q as pauseIssue, t as addComment, u as updateIssue, o as getIssue, y as isVisibleTo, L as summarize, v as addIssue } from './run-BNxaekWa.mjs';
4
+ import { n as resolveProjectRoot, x as searchIssues, w as listIssues, p as resumeIssue, q as pauseIssue, t as addComment, u as updateIssue, o as getIssue, y as isVisibleTo, L as summarize, v as addIssue } from './run-hYUl-Fln.mjs';
5
5
  import 'os';
6
6
  import 'fs/promises';
7
7
  import 'fs';
@@ -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-BkroIJOC.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-YPQSZ4Qx.mjs';
4
4
  import { execSync } from 'node:child_process';
5
- import { u as updateIssue, t as addComment, v as addIssue, k as shortId } from './run-BNxaekWa.mjs';
5
+ import { u as updateIssue, t as addComment, v as addIssue, k as shortId } from './run-hYUl-Fln.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -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 { T as parseFrontmatter, U as getSkillsServer, V as getSkillsWorkspaceName, W as getSkillsCollectionName, X as fetchWithTimeout, Y as searchSkills, Z as SKILLS_DIR, _ as getSkillInfo, $ as downloadSkillFile, a0 as listSkillFiles } from './run-BNxaekWa.mjs';
4
+ import { T as parseFrontmatter, U as getSkillsServer, V as getSkillsWorkspaceName, W as getSkillsCollectionName, X as fetchWithTimeout, Y as searchSkills, Z as SKILLS_DIR, _ as getSkillInfo, $ as downloadSkillFile, a0 as listSkillFiles } from './run-hYUl-Fln.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-DoUUUoZn.mjs');
61
+ const { runFrpcTunnel } = await import('./frpc-CLQB-GM1.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-BkroIJOC.mjs');
71
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.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-BfK_xRcZ.mjs');
93
+ const { autoAddSessionLink } = await import('./agentCommands-DYoNzX4K.mjs');
94
94
  let added = 0;
95
95
  for (const [port, url] of urlEntries) {
96
96
  const label = urlEntries.length > 1 ? `${name}:${port}` : name;
@@ -136,7 +136,7 @@ async function serviceServe(args) {
136
136
  };
137
137
  process.on("SIGINT", cleanup);
138
138
  process.on("SIGTERM", cleanup);
139
- const { runFrpcTunnel } = await import('./frpc-DoUUUoZn.mjs');
139
+ const { runFrpcTunnel } = await import('./frpc-CLQB-GM1.mjs');
140
140
  await runFrpcTunnel(name, [caddyPort]);
141
141
  } catch (err) {
142
142
  console.error(`Error serving directory: ${err.message}`);
@@ -145,7 +145,7 @@ async function serviceServe(args) {
145
145
  }
146
146
  async function serviceList(_args) {
147
147
  try {
148
- const { connectAndGetMachine } = await import('./commands-BkroIJOC.mjs');
148
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.mjs');
149
149
  const { server, machine } = await connectAndGetMachine();
150
150
  try {
151
151
  const tunnels = await machine.tunnelList({});
@@ -185,7 +185,7 @@ async function serviceDelete(args) {
185
185
  process.exit(1);
186
186
  }
187
187
  try {
188
- const { connectAndGetMachine } = await import('./commands-BkroIJOC.mjs');
188
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.mjs');
189
189
  const { server, machine } = await connectAndGetMachine();
190
190
  try {
191
191
  await machine.tunnelStop({ name });
@@ -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 { a2 as formatHandle, a3 as normalizeAllowedUser, a4 as loadSecurityContextConfig, a5 as resolveSecurityContext, a6 as buildSecurityContextFromFlags, a7 as mergeSecurityContexts, c as connectToHypha, a8 as buildSessionShareUrl, a9 as computeOutboundHop, k as shortId, aa as registerAwaitingReply, ab as buildMachineShareUrl, ac as parseHandle, ad as handleMatchesMetadata } from './run-BNxaekWa.mjs';
5
+ import { a2 as formatHandle, a3 as normalizeAllowedUser, a4 as loadSecurityContextConfig, a5 as resolveSecurityContext, a6 as buildSecurityContextFromFlags, a7 as mergeSecurityContexts, c as connectToHypha, a8 as buildSessionShareUrl, a9 as computeOutboundHop, k as shortId, aa as registerAwaitingReply, ab as buildMachineShareUrl, ac as parseHandle, ad as handleMatchesMetadata } from './run-hYUl-Fln.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands-BkroIJOC.mjs';
3
+ import { connectAndGetMachine } from './commands-YPQSZ4Qx.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-BNxaekWa.mjs';
8
+ import './run-hYUl-Fln.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';
@@ -1,8 +1,8 @@
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-BNxaekWa.mjs';
5
- import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-ivV7xAp3.mjs';
4
+ import { c as connectToHypha } from './run-hYUl-Fln.mjs';
5
+ import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-DuLXaoGP.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -4,7 +4,7 @@ import { mkdirSync, writeFileSync, unlinkSync, existsSync, chmodSync, readFileSy
4
4
  import { join } from 'path';
5
5
  import { homedir, platform, arch } from 'os';
6
6
  import { randomUUID, createHash } from 'crypto';
7
- import { h as getFrpsSubdomainHost, i as getFrpsServerPort, j as getFrpsServerAddr } from './run-BNxaekWa.mjs';
7
+ import { h as getFrpsSubdomainHost, i as getFrpsServerPort, j as getFrpsServerAddr } from './run-hYUl-Fln.mjs';
8
8
  import 'fs/promises';
9
9
  import 'url';
10
10
  import 'node:crypto';
@@ -1,5 +1,5 @@
1
- import { a1 as resolveModel, ae as describeMisconfiguration, af as buildMachineDeps } from './run-BNxaekWa.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-D6vgqNiq.mjs';
1
+ import { a1 as resolveModel, ae as describeMisconfiguration, af as buildMachineDeps } from './run-hYUl-Fln.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-C0qzprWp.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-BNxaekWa.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-hYUl-Fln.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.252";
2
+ var version = "0.2.253";
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";
@@ -1,7 +1,7 @@
1
1
  import { spawn, exec as exec$1 } from 'node:child_process';
2
2
  import { promisify } from 'node:util';
3
3
 
4
- const PINNED_CLAUDE_CODE_VERSION = "2.1.195";
4
+ const PINNED_CLAUDE_CODE_VERSION = "2.1.206";
5
5
  const exec = promisify(exec$1);
6
6
  let _reconcile = null;
7
7
  function beginClaudeVersionReconcile(log) {
@@ -1,4 +1,4 @@
1
- import { n as resolveProjectRoot, u as updateIssue, o as getIssue, p as resumeIssue, q as pauseIssue, t as addComment, v as addIssue, w as listIssues, x as searchIssues, y as isVisibleTo } from './run-BNxaekWa.mjs';
1
+ import { n as resolveProjectRoot, u as updateIssue, o as getIssue, p as resumeIssue, q as pauseIssue, t as addComment, v as addIssue, w as listIssues, x as searchIssues, y as isVisibleTo } from './run-hYUl-Fln.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { n as resolveProjectRoot, z as getRun, A as listRuns, B as getWorkflow, C as runWorkflow, D as setWorkflowEnabled, E as removeWorkflow, F as saveWorkflow, G as rawWorkflow, H as listWorkflows } from './run-BNxaekWa.mjs';
1
+ import { n as resolveProjectRoot, z as getRun, A as listRuns, B as getWorkflow, C as runWorkflow, D as setWorkflowEnabled, E as removeWorkflow, F as saveWorkflow, G as rawWorkflow, H as listWorkflows } from './run-hYUl-Fln.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 { ag as applyClaudeProxyEnv, ah as composeSessionId, ai as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, aj as generateHookSettings } from './run-BNxaekWa.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ag as applyClaudeProxyEnv, ah as composeSessionId, ai as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, aj as generateHookSettings } from './run-hYUl-Fln.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';
@@ -2985,7 +2985,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
2985
2985
  const tunnels = handlers.tunnels;
2986
2986
  if (!tunnels) throw new Error("Tunnel management not available");
2987
2987
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
2988
- const { FrpcTunnel } = await import('./frpc-DoUUUoZn.mjs');
2988
+ const { FrpcTunnel } = await import('./frpc-CLQB-GM1.mjs');
2989
2989
  const tunnel = new FrpcTunnel({
2990
2990
  name: params.name,
2991
2991
  ports: params.ports,
@@ -3452,7 +3452,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
3452
3452
  }
3453
3453
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
3454
3454
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
3455
- const { toolsForRole } = await import('./sideband-D6vgqNiq.mjs');
3455
+ const { toolsForRole } = await import('./sideband-C0qzprWp.mjs');
3456
3456
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
3457
3457
  return fmt(r2);
3458
3458
  }
@@ -3551,7 +3551,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
3551
3551
  if (r.error || !r.sender) return { error: r.error || "unauthorized" };
3552
3552
  const callId = "call_" + Math.random().toString(16).slice(2, 12);
3553
3553
  const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
3554
- const { queryCore } = await import('./commands-BkroIJOC.mjs');
3554
+ const { queryCore } = await import('./commands-YPQSZ4Qx.mjs');
3555
3555
  const timeout = c.reply?.timeout_sec || 120;
3556
3556
  let result;
3557
3557
  try {
@@ -3813,14 +3813,19 @@ function registerAwaitingReply(sessionId, threadId, now = Date.now()) {
3813
3813
  }
3814
3814
  writeAwaiting(sessionId, map);
3815
3815
  }
3816
- function takeAwaitingReply(sessionId, threadId, now = Date.now()) {
3816
+ function peekAwaitingReply(sessionId, threadId, now = Date.now()) {
3817
3817
  if (!sessionId || !threadId) return false;
3818
3818
  const map = readAwaiting(sessionId);
3819
3819
  const at = map[threadId];
3820
3820
  if (typeof at !== "number") return false;
3821
+ return now - at <= AWAIT_TTL_MS;
3822
+ }
3823
+ function consumeAwaitingReply(sessionId, threadId) {
3824
+ if (!sessionId || !threadId) return;
3825
+ const map = readAwaiting(sessionId);
3826
+ if (!(threadId in map)) return;
3821
3827
  delete map[threadId];
3822
3828
  writeAwaiting(sessionId, map);
3823
- return now - at <= AWAIT_TTL_MS;
3824
3829
  }
3825
3830
  function computeOutboundHop(sessionId) {
3826
3831
  if (!sessionId) return { hopCount: 0, fromInboxTurn: false };
@@ -4177,6 +4182,26 @@ function isStructuredMessage(msg) {
4177
4182
  function escapeXml(s) {
4178
4183
  return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
4179
4184
  }
4185
+ function sanitizeInboundInboxMessage(message, opts) {
4186
+ if (opts.trusted) return message;
4187
+ const email = opts.callerEmail;
4188
+ return {
4189
+ ...message,
4190
+ // Attribute to the SERVER-KNOWN identity, never the caller's self-asserted `from`.
4191
+ // An authenticated collaborator is an honest verified human (`user:<email>` → may
4192
+ // wake, attributed to THEM not the owner); an anonymous caller cannot claim human.
4193
+ from: email ? `user:${email}` : "agent:anonymous",
4194
+ verified: !!email,
4195
+ // Strip self-asserted channel provenance + async-reply routing a direct caller
4196
+ // has no business setting (legit channel ingress goes via the trusted channel path).
4197
+ channel: void 0,
4198
+ channelId: void 0,
4199
+ correlationId: void 0,
4200
+ // Escape the body so a nested </svamp-message> can't break out and forge a second
4201
+ // attributed envelope in the agent's transcript.
4202
+ body: xmlEscape(String(message.body ?? "").slice(0, 16 * 1024))
4203
+ };
4204
+ }
4180
4205
  function formatInboxMessageXml(msg) {
4181
4206
  if (!isStructuredMessage(msg)) return msg.body;
4182
4207
  const attrs = [`message-id="${escapeXml(msg.messageId)}"`];
@@ -5305,12 +5330,14 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
5305
5330
  // ── Inbox ──
5306
5331
  sendInboxMessage: async (message, context) => {
5307
5332
  authorizeRequest(context, metadata.sharing, "interact");
5308
- inbox.push(message);
5333
+ const trusted = getEffectiveRole(context, metadata.sharing) === "admin";
5334
+ const msg = sanitizeInboundInboxMessage(message, { trusted, callerEmail: context?.user?.email });
5335
+ inbox.push(msg);
5309
5336
  while (inbox.length > INBOX_MAX) inbox.shift();
5310
5337
  syncInboxToMetadata();
5311
- callbacks.onInboxMessage?.(message);
5312
- notifyListeners({ type: "inbox-update", sessionId, message });
5313
- return { success: true, messageId: message.messageId };
5338
+ callbacks.onInboxMessage?.(msg);
5339
+ notifyListeners({ type: "inbox-update", sessionId, message: msg });
5340
+ return { success: true, messageId: msg.messageId };
5314
5341
  },
5315
5342
  getInbox: async (opts, context) => {
5316
5343
  authorizeRequest(context, metadata.sharing, "view");
@@ -6279,12 +6306,10 @@ async function registerDebugService(server, machineId, deps) {
6279
6306
  // require_context: true → Hypha injects the caller context as the last arg of every
6280
6307
  // method, which the authorize() gate below enforces. 'unlisted' only hides discovery.
6281
6308
  config: { visibility: "unlisted", require_context: true },
6282
- healthCheck: async () => ({
6283
- ok: true,
6284
- machineId,
6285
- uptime: process.uptime(),
6286
- timestamp: Date.now()
6287
- }),
6309
+ healthCheck: async (context) => {
6310
+ authorize(context, "view");
6311
+ return { ok: true, machineId, uptime: process.uptime(), timestamp: Date.now() };
6312
+ },
6288
6313
  getSessionStates: async (context) => {
6289
6314
  authorize(context, "view");
6290
6315
  const sessions = deps.getTrackedSessions();
@@ -10127,6 +10152,18 @@ var api = /*#__PURE__*/Object.freeze({
10127
10152
  searchSkills: searchSkills
10128
10153
  });
10129
10154
 
10155
+ function signalProcessTree(child, signal) {
10156
+ const pid = child.pid;
10157
+ if (pid === void 0) return;
10158
+ try {
10159
+ process.kill(-pid, signal);
10160
+ } catch {
10161
+ try {
10162
+ child.kill(signal);
10163
+ } catch {
10164
+ }
10165
+ }
10166
+ }
10130
10167
  const DEFAULT_PROBE_INTERVAL_S = 10;
10131
10168
  const DEFAULT_PROBE_TIMEOUT_S = 5;
10132
10169
  const DEFAULT_PROBE_FAILURE_THRESHOLD = 3;
@@ -10458,7 +10495,13 @@ class ProcessSupervisor {
10458
10495
  const child = spawn$1(spec.command, spec.args, {
10459
10496
  cwd: spec.workdir,
10460
10497
  env,
10461
- stdio: ["ignore", "pipe", "pipe"]
10498
+ stdio: ["ignore", "pipe", "pipe"],
10499
+ // #0316: run each supervised process in its OWN process group (setsid) so a
10500
+ // shell-wrapping spec (`bash -c …`, `npm start`) can be torn down with the whole
10501
+ // tree — otherwise stop/restart/TTL only kills the direct PID and leaks
10502
+ // grandchildren. Kills below signal the group (negative PID). POSIX only; on
10503
+ // Windows `detached` just decouples the console and the group-kill falls back.
10504
+ detached: process.platform !== "win32"
10462
10505
  });
10463
10506
  entry.child = child;
10464
10507
  state.status = "running";
@@ -10620,10 +10663,7 @@ class ProcessSupervisor {
10620
10663
  console.warn(`[SUPERVISOR] Probe failed for '${entry.spec.name}' \u2014 killing to trigger restart`);
10621
10664
  entry.state.consecutiveProbeFailures = 0;
10622
10665
  if (entry.child) {
10623
- try {
10624
- entry.child.kill("SIGTERM");
10625
- } catch {
10626
- }
10666
+ signalProcessTree(entry.child, "SIGTERM");
10627
10667
  }
10628
10668
  }
10629
10669
  // ── TTL ───────────────────────────────────────────────────────────────────
@@ -10668,15 +10708,9 @@ class ProcessSupervisor {
10668
10708
  };
10669
10709
  child.once("exit", done);
10670
10710
  child.once("close", done);
10671
- try {
10672
- child.kill("SIGTERM");
10673
- } catch {
10674
- }
10711
+ signalProcessTree(child, "SIGTERM");
10675
10712
  forceKillTimer = setTimeout(() => {
10676
- try {
10677
- child.kill("SIGKILL");
10678
- } catch {
10679
- }
10713
+ signalProcessTree(child, "SIGKILL");
10680
10714
  hardDeadlineTimer = setTimeout(() => {
10681
10715
  if (!resolved) {
10682
10716
  resolved = true;
@@ -11379,6 +11413,9 @@ function fireIdleWorkflows(root, sessionId, deps = {}) {
11379
11413
  }
11380
11414
 
11381
11415
  const UNBOUNDED_LOOP_ITERATIONS = 1e6;
11416
+ function loopCancelledDuringVerify(current) {
11417
+ return !!current && (current.phase === "cancelled" || current.active === false);
11418
+ }
11382
11419
  function backlogOraclePending(projectRoot, sessionId) {
11383
11420
  const inScope = (i) => !sessionId || isVisibleTo(i, sessionId);
11384
11421
  return listIssues(projectRoot).filter(inScope).filter((i) => i.status === "ready" || i.status === "in_progress").map((i) => ({ id: i.id }));
@@ -11506,7 +11543,7 @@ function computeSoftTurnCap(hardMax, cadence) {
11506
11543
  return Math.ceil(hardMax / chunks);
11507
11544
  }
11508
11545
  const DEFAULT_LOOP_STUCK_CHECKPOINTS = 3;
11509
- const DEFAULT_LOOP_MAX_AUTORESUMES = 3;
11546
+ const DEFAULT_LOOP_MAX_AUTORESUMES = Number.POSITIVE_INFINITY;
11510
11547
  const PROGRESS_HISTORY_CAP = 12;
11511
11548
  function resolveStuckLimit(envValue) {
11512
11549
  const n = Number(envValue);
@@ -11551,7 +11588,8 @@ function decideLoopContinuation(input) {
11551
11588
  return { action: "continue", kind: "progress", consumeAutoResume: false, reason: `still making progress (${stuckCheckpoints}/${stuckLimit} stuck checkpoints)` };
11552
11589
  }
11553
11590
  if (autoResumes < maxAutoResumes) {
11554
- return { action: "continue", kind: "autoresume", consumeAutoResume: true, reason: `no progress across ${stuckCheckpoints} checkpoints \u2014 auto-resume ${autoResumes + 1}/${maxAutoResumes}` };
11591
+ const label = Number.isFinite(maxAutoResumes) ? `auto-resume ${autoResumes + 1}/${maxAutoResumes}` : `auto-resume ${autoResumes + 1} (unbounded \u2014 bounded only by the cost/iteration ceiling)`;
11592
+ return { action: "continue", kind: "autoresume", consumeAutoResume: true, reason: `no progress across ${stuckCheckpoints} checkpoints \u2014 ${label}` };
11555
11593
  }
11556
11594
  const tail = `no progress across ${stuckCheckpoints} checkpoints; ${maxAutoResumes} auto-resume(s) exhausted`;
11557
11595
  return { action: "stop", kind: "stuck", reason: input.stuckReason ? `${input.stuckReason} \u2014 ${tail}` : tail };
@@ -12523,9 +12561,17 @@ function classifyOptsForMessage(sessionId, message, ownerEmail) {
12523
12561
  const fromVal = message.from || "";
12524
12562
  const senderEmail = message.verified && fromVal.includes("@") ? fromVal.replace(/^user:/, "").toLowerCase() : void 0;
12525
12563
  const self = !!(ownerEmail && senderEmail && senderEmail === String(ownerEmail).toLowerCase());
12526
- const openThreadReply = takeAwaitingReply(sessionId, message.threadId);
12564
+ const openThreadReply = peekAwaitingReply(sessionId, message.threadId);
12527
12565
  return { self, openThreadReply };
12528
12566
  }
12567
+ function classifyInboundForSession(sessionId, message, ownerEmail) {
12568
+ const opts = classifyOptsForMessage(sessionId, message, ownerEmail);
12569
+ const decision = classifyInbound(message, Date.now(), opts);
12570
+ if (opts.openThreadReply && decision.action === "wake") {
12571
+ consumeAwaitingReply(sessionId, message.threadId);
12572
+ }
12573
+ return decision;
12574
+ }
12529
12575
  function writeGoalLoopState(directory, sessionId, state) {
12530
12576
  try {
12531
12577
  const dir = getLoopDir(directory, sessionId);
@@ -13403,7 +13449,7 @@ async function startDaemon(options) {
13403
13449
  try {
13404
13450
  const dir = loadSessionIndex()[sessionId]?.directory;
13405
13451
  if (!dir) return;
13406
- const { reconcileServiceLinks } = await import('./agentCommands-BfK_xRcZ.mjs');
13452
+ const { reconcileServiceLinks } = await import('./agentCommands-DYoNzX4K.mjs');
13407
13453
  const configPath = getSvampConfigPath(dir, sessionId);
13408
13454
  const config = readSvampConfig(configPath);
13409
13455
  const entries = Array.from(urls.entries());
@@ -13421,7 +13467,7 @@ async function startDaemon(options) {
13421
13467
  }
13422
13468
  }
13423
13469
  async function createExposedTunnel(spec) {
13424
- const { FrpcTunnel } = await import('./frpc-DoUUUoZn.mjs');
13470
+ const { FrpcTunnel } = await import('./frpc-CLQB-GM1.mjs');
13425
13471
  const tunnel = new FrpcTunnel({
13426
13472
  name: spec.name,
13427
13473
  ports: spec.ports,
@@ -13441,14 +13487,14 @@ async function startDaemon(options) {
13441
13487
  return tunnel;
13442
13488
  }
13443
13489
  const tunnelRecreateState = /* @__PURE__ */ new Map();
13444
- const { ServeManager } = await import('./serveManager-DAuIjPuV.mjs');
13490
+ const { ServeManager } = await import('./serveManager-BK5OjhXU.mjs');
13445
13491
  const serveManager = new ServeManager(SVAMP_HOME, (msg) => logger.log(`[SERVE] ${msg}`), hyphaServerUrl);
13446
13492
  ensureAutoInstalledSkills(logger).catch(() => {
13447
13493
  });
13448
13494
  ensureAutoInstalledCommands(logger);
13449
13495
  (async () => {
13450
13496
  try {
13451
- const { beginClaudeVersionReconcile } = await import('./pinnedClaudeCode-ivV7xAp3.mjs');
13497
+ const { beginClaudeVersionReconcile } = await import('./pinnedClaudeCode-DuLXaoGP.mjs');
13452
13498
  beginClaudeVersionReconcile((msg) => logger.log(msg));
13453
13499
  } catch (e) {
13454
13500
  logger.log(`[claude-version] check failed: ${e?.message || e}`);
@@ -14119,6 +14165,10 @@ ${parts.join("\n")}`);
14119
14165
  log: (m) => logger.log(`[Session ${sessionId}] ${m}`)
14120
14166
  }
14121
14167
  );
14168
+ if (loopCancelledDuringVerify(readLoopState(directory, sessionId))) {
14169
+ logger.log(`[Session ${sessionId}] loop was cancelled during verification \u2014 not re-kicking (#0308)`);
14170
+ return;
14171
+ }
14122
14172
  const ledger = ls.ledger;
14123
14173
  const budget = ls.budget;
14124
14174
  const progress_history = ls.progress_history;
@@ -14167,7 +14217,9 @@ ${parts.join("\n")}`);
14167
14217
  max_iterations: ls.max_iterations,
14168
14218
  budget,
14169
14219
  started_at: startedAt,
14170
- holds,
14220
+ // #0319: a PROGRESSING loop resets its hold counter so the evaluator-guided re-kick
14221
+ // mechanism re-engages fresh (it's making headway, not stuck); an auto-resume keeps it.
14222
+ holds: decision.kind === "progress" ? 0 : holds,
14171
14223
  ledger,
14172
14224
  progress_history,
14173
14225
  auto_resumes: nextAuto
@@ -15433,7 +15485,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
15433
15485
  },
15434
15486
  onInboxMessage: (message) => {
15435
15487
  if (trackedSession?.stopped) return;
15436
- const decision = classifyInbound(message, Date.now(), classifyOptsForMessage(sessionId, message, sessionMetadata?.sharing?.owner));
15488
+ const decision = classifyInboundForSession(sessionId, message, sessionMetadata?.sharing?.owner);
15437
15489
  logger.log(`[Session ${sessionId}] Inbox message (urgency: ${message.urgency || "normal"}, hop: ${message.hopCount ?? 0}, from: ${message.from || "unknown"}) \u2192 ${decision.action} (${decision.reason})`);
15438
15490
  if (decision.breakerTripped) {
15439
15491
  logger.error(`[Session ${sessionId}] Inbox circuit breaker TRIPPED \u2014 cross-agent wake rate too high; auto-waking paused.`);
@@ -15529,11 +15581,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
15529
15581
  });
15530
15582
  },
15531
15583
  onIssue: async (params) => {
15532
- const { issueRpc } = await import('./rpc-_rwZwiHD.mjs');
15584
+ const { issueRpc } = await import('./rpc-0HSLhpCb.mjs');
15533
15585
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
15534
15586
  },
15535
15587
  onWorkflow: async (params) => {
15536
- const { workflowRpc } = await import('./rpc-665-sPRQ.mjs');
15588
+ const { workflowRpc } = await import('./rpc-BB-AxQa_.mjs');
15537
15589
  return workflowRpc(params?.cwd || directory, params || {});
15538
15590
  },
15539
15591
  onRipgrep: async (args, cwd) => {
@@ -15942,7 +15994,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
15942
15994
  },
15943
15995
  onInboxMessage: (message) => {
15944
15996
  if (acpStopped) return;
15945
- const decision = classifyInbound(message, Date.now(), classifyOptsForMessage(sessionId, message, sessionMetadata?.sharing?.owner));
15997
+ const decision = classifyInboundForSession(sessionId, message, sessionMetadata?.sharing?.owner);
15946
15998
  logger.log(`[${agentName} Session ${sessionId}] Inbox message (urgency: ${message.urgency || "normal"}, hop: ${message.hopCount ?? 0}, from: ${message.from || "unknown"}) \u2192 ${decision.action} (${decision.reason})`);
15947
15999
  if (decision.breakerTripped) {
15948
16000
  logger.error(`[${agentName} Session ${sessionId}] Inbox circuit breaker TRIPPED \u2014 auto-waking paused.`);
@@ -16069,11 +16121,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
16069
16121
  });
16070
16122
  },
16071
16123
  onIssue: async (params) => {
16072
- const { issueRpc } = await import('./rpc-_rwZwiHD.mjs');
16124
+ const { issueRpc } = await import('./rpc-0HSLhpCb.mjs');
16073
16125
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
16074
16126
  },
16075
16127
  onWorkflow: async (params) => {
16076
- const { workflowRpc } = await import('./rpc-665-sPRQ.mjs');
16128
+ const { workflowRpc } = await import('./rpc-BB-AxQa_.mjs');
16077
16129
  return workflowRpc(params?.cwd || directory, params || {});
16078
16130
  },
16079
16131
  onRipgrep: async (args, cwd) => {
@@ -16835,7 +16887,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
16835
16887
  }
16836
16888
  if (persistedSessions.length > 0) {
16837
16889
  try {
16838
- const { awaitClaudeVersionReady } = await import('./pinnedClaudeCode-ivV7xAp3.mjs');
16890
+ const { awaitClaudeVersionReady } = await import('./pinnedClaudeCode-DuLXaoGP.mjs');
16839
16891
  await awaitClaudeVersionReady();
16840
16892
  } catch {
16841
16893
  }
@@ -17032,7 +17084,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
17032
17084
  const PING_TIMEOUT_MS = 15e3;
17033
17085
  const POST_RECONNECT_GRACE_MS = 2e4;
17034
17086
  const RECONNECT_JITTER_MS = 2500;
17035
- const { WorkflowScheduler } = await import('./scheduler-DjMTCoWS.mjs');
17087
+ const { WorkflowScheduler } = await import('./scheduler-DaFydJPf.mjs');
17036
17088
  const workflowScheduler = new WorkflowScheduler({
17037
17089
  projectRoots: () => {
17038
17090
  const dirs = /* @__PURE__ */ new Set();
@@ -1,4 +1,4 @@
1
- import { n as resolveProjectRoot, H as listWorkflows, I as isWorkflowEnabled, J as workflowCrons, C as runWorkflow, K as cronMatches } from './run-BNxaekWa.mjs';
1
+ import { n as resolveProjectRoot, H as listWorkflows, I as isWorkflowEnabled, J as workflowCrons, C as runWorkflow, K as cronMatches } from './run-hYUl-Fln.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-BkroIJOC.mjs');
57
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.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-BkroIJOC.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.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-BkroIJOC.mjs');
185
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.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-BkroIJOC.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.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-BkroIJOC.mjs');
238
+ const { connectAndGetMachine } = await import('./commands-YPQSZ4Qx.mjs');
239
239
  const { machine, server } = await connectAndGetMachine(machineId);
240
240
  try {
241
241
  const info = await machine.serveInfo();
@@ -4,7 +4,7 @@ import * as fs from 'fs';
4
4
  import * as http from 'http';
5
5
  import * as net from 'net';
6
6
  import * as path from 'path';
7
- import { l as getHyphaServerUrl, S as ServeAuth, m as hasCookieToken } from './run-BNxaekWa.mjs';
7
+ import { l as getHyphaServerUrl, S as ServeAuth, m as hasCookieToken } from './run-hYUl-Fln.mjs';
8
8
  import 'os';
9
9
  import 'fs/promises';
10
10
  import 'url';
@@ -751,7 +751,7 @@ class ServeManager {
751
751
  const mount = this.mounts.get(mountName);
752
752
  const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
753
753
  try {
754
- const { FrpcTunnel } = await import('./frpc-DoUUUoZn.mjs');
754
+ const { FrpcTunnel } = await import('./frpc-CLQB-GM1.mjs');
755
755
  let tunnel;
756
756
  tunnel = new FrpcTunnel({
757
757
  name: tunnelName,
@@ -1,4 +1,4 @@
1
- import { R as READ_ONLY_TOOLS, N as loadMachineContext, O as buildMachineInstructions, P as machineToolsForRole, Q as buildMachineTools } from './run-BNxaekWa.mjs';
1
+ import { R as READ_ONLY_TOOLS, N as loadMachineContext, O as buildMachineInstructions, P as machineToolsForRole, Q as buildMachineTools } from './run-hYUl-Fln.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.252",
3
+ "version": "0.2.253",
4
4
  "description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
5
5
  "author": "Amun AI AB",
6
6
  "license": "SEE LICENSE IN LICENSE",