svamp-cli 0.2.94 → 0.2.96

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.
@@ -148,7 +148,7 @@ async function sessionBroadcast(action, args) {
148
148
  console.log(`Broadcast sent: ${action}`);
149
149
  }
150
150
  async function connectToMachineService() {
151
- const { connectAndGetMachine } = await import('./commands-fEd97uFk.mjs');
151
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.mjs');
152
152
  return connectAndGetMachine();
153
153
  }
154
154
  async function inboxSend(targetSessionId, opts) {
@@ -165,7 +165,7 @@ async function inboxSend(targetSessionId, opts) {
165
165
  }
166
166
  const { server, machine } = await connectToMachineService();
167
167
  try {
168
- const { resolveSessionId } = await import('./commands-fEd97uFk.mjs');
168
+ const { resolveSessionId } = await import('./commands-BBjsl7xn.mjs');
169
169
  const sessions = await machine.listSessions();
170
170
  const match = resolveSessionId(sessions, targetSessionId);
171
171
  const fullTargetId = match.sessionId;
@@ -1,4 +1,4 @@
1
- import { E as resolveModel } from './run-NLlVMcrd.mjs';
1
+ import { E as resolveModel } from './run-CYromFV_.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-NLlVMcrd.mjs';
1
+ import { e as clearStopMarker, f as stopMarkerExists, s as startDaemon, b as stopDaemon, d as daemonStatus } from './run-CYromFV_.mjs';
2
2
  import { ensureSupervisorViaServiceManager, LAUNCHD_LABEL } from './serviceManager-hlOVxkhW.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
@@ -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-NLlVMcrd.mjs').then(function (n) { return n.Y; });
36
+ const { getLoadedConfig } = await import('./run-CYromFV_.mjs').then(function (n) { return n.Y; });
37
37
  getLoadedConfig();
38
38
  } catch {
39
39
  }
@@ -50,7 +50,7 @@ async function main() {
50
50
  console.error(`svamp daemon restart: ${err.message || err}`);
51
51
  process.exit(1);
52
52
  }
53
- const { restartDaemon } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n._; });
53
+ const { restartDaemon } = await import('./run-CYromFV_.mjs').then(function (n) { return n._; });
54
54
  await restartDaemon();
55
55
  process.exit(0);
56
56
  }
@@ -343,7 +343,7 @@ async function main() {
343
343
  console.error("svamp service: Service commands are not available in sandboxed sessions.");
344
344
  process.exit(1);
345
345
  }
346
- const { handleServiceCommand } = await import('./commands-Crvn1XhO.mjs');
346
+ const { handleServiceCommand } = await import('./commands-C2KJsFpX.mjs');
347
347
  await handleServiceCommand();
348
348
  } else if (subcommand === "serve") {
349
349
  const { isSandboxed: isSandboxedServe } = await import('./sandboxDetect-DNTcbgWD.mjs');
@@ -351,7 +351,7 @@ async function main() {
351
351
  console.error("svamp serve: Serve commands are not available in sandboxed sessions.");
352
352
  process.exit(1);
353
353
  }
354
- const { handleServeCommand } = await import('./serveCommands-BNE_5gzO.mjs');
354
+ const { handleServeCommand } = await import('./serveCommands-B8AsxwVU.mjs');
355
355
  await handleServeCommand();
356
356
  process.exit(0);
357
357
  } else if (subcommand === "process" || subcommand === "proc") {
@@ -360,7 +360,7 @@ async function main() {
360
360
  console.error("svamp process: Process commands are not available in sandboxed sessions.");
361
361
  process.exit(1);
362
362
  }
363
- const { processCommand } = await import('./commands-q6eSqgGo.mjs');
363
+ const { processCommand } = await import('./commands-DDXkBjpY.mjs');
364
364
  let machineId;
365
365
  const processArgs = args.slice(1);
366
366
  const mIdx = processArgs.findIndex((a) => a === "--machine" || a === "-m");
@@ -374,7 +374,7 @@ async function main() {
374
374
  }), machineId);
375
375
  process.exit(0);
376
376
  } else if (subcommand === "routine" || subcommand === "routines") {
377
- const { routineCommand } = await import('./commands-N1FOTq1Y.mjs');
377
+ const { routineCommand } = await import('./commands-Dc5elio9.mjs');
378
378
  await routineCommand(args.slice(1));
379
379
  process.exit(0);
380
380
  } else if (subcommand === "wise-agent" || subcommand === "wise") {
@@ -385,7 +385,7 @@ async function main() {
385
385
  } else if (!subcommand || subcommand === "start") {
386
386
  await handleInteractiveCommand();
387
387
  } else if (subcommand === "--version" || subcommand === "-v") {
388
- const pkg = await import('./package-DXh7VIhg.mjs').catch(() => ({ default: { version: "unknown" } }));
388
+ const pkg = await import('./package-BzvP96zt.mjs').catch(() => ({ default: { version: "unknown" } }));
389
389
  console.log(`svamp version: ${pkg.default.version}`);
390
390
  } else {
391
391
  console.error(`Unknown command: ${subcommand}`);
@@ -394,7 +394,7 @@ async function main() {
394
394
  }
395
395
  }
396
396
  async function handleInteractiveCommand() {
397
- const { runInteractive } = await import('./run-BERXqjjm.mjs');
397
+ const { runInteractive } = await import('./run-CsUDf9pS.mjs');
398
398
  const interactiveArgs = subcommand === "start" ? args.slice(1) : args;
399
399
  let directory = process.cwd();
400
400
  let resumeSessionId;
@@ -439,7 +439,7 @@ async function handleAgentCommand() {
439
439
  return;
440
440
  }
441
441
  if (agentArgs[0] === "list") {
442
- const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.U; });
442
+ const { KNOWN_ACP_AGENTS, KNOWN_MCP_AGENTS: KNOWN_MCP_AGENTS2 } = await import('./run-CYromFV_.mjs').then(function (n) { return n.U; });
443
443
  console.log("Known agents:");
444
444
  for (const [name, config2] of Object.entries(KNOWN_ACP_AGENTS)) {
445
445
  console.log(` ${name.padEnd(12)} ${config2.command} ${config2.args.join(" ")} (ACP)`);
@@ -451,7 +451,7 @@ async function handleAgentCommand() {
451
451
  console.log('Use "svamp agent -- <command> [args]" for a custom ACP agent.');
452
452
  return;
453
453
  }
454
- const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.U; });
454
+ const { resolveAcpAgentConfig, KNOWN_MCP_AGENTS } = await import('./run-CYromFV_.mjs').then(function (n) { return n.U; });
455
455
  let cwd = process.cwd();
456
456
  const filteredArgs = [];
457
457
  for (let i = 0; i < agentArgs.length; i++) {
@@ -475,12 +475,12 @@ async function handleAgentCommand() {
475
475
  console.log(`Starting ${config.agentName} agent in ${cwd}...`);
476
476
  let backend;
477
477
  if (KNOWN_MCP_AGENTS[config.agentName]) {
478
- const { CodexMcpBackend } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.V; });
478
+ const { CodexMcpBackend } = await import('./run-CYromFV_.mjs').then(function (n) { return n.V; });
479
479
  backend = new CodexMcpBackend({ cwd, log: logFn });
480
480
  } else {
481
- const { AcpBackend } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.T; });
482
- const { GeminiTransport } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.W; });
483
- const { DefaultTransport } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.Q; });
481
+ const { AcpBackend } = await import('./run-CYromFV_.mjs').then(function (n) { return n.T; });
482
+ const { GeminiTransport } = await import('./run-CYromFV_.mjs').then(function (n) { return n.W; });
483
+ const { DefaultTransport } = await import('./run-CYromFV_.mjs').then(function (n) { return n.Q; });
484
484
  const transportHandler = config.agentName === "gemini" ? new GeminiTransport() : new DefaultTransport(config.agentName);
485
485
  backend = new AcpBackend({
486
486
  agentName: config.agentName,
@@ -607,7 +607,7 @@ async function handleSessionCommand() {
607
607
  process.exit(1);
608
608
  }
609
609
  }
610
- const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionRalphStart, sessionRalphCancel, sessionRalphStatus, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-fEd97uFk.mjs');
610
+ const { sessionList, sessionWhoami, sessionSpawn, sessionArchive, sessionResume, sessionDelete, sessionInfo, sessionMessages, sessionAttach, sessionMachines, sessionSend, sessionWait, sessionShare, sessionRalphStart, sessionRalphCancel, sessionRalphStatus, sessionInboxSend, sessionInboxList, sessionInboxRead, sessionInboxReply, sessionInboxClear } = await import('./commands-BBjsl7xn.mjs');
611
611
  const parseFlagStr = (flag, shortFlag) => {
612
612
  for (let i = 1; i < sessionArgs.length; i++) {
613
613
  if ((sessionArgs[i] === flag || shortFlag) && i + 1 < sessionArgs.length) {
@@ -675,7 +675,7 @@ async function handleSessionCommand() {
675
675
  allowDomain.push(sessionArgs[++i]);
676
676
  }
677
677
  }
678
- const { parseShareArg } = await import('./commands-fEd97uFk.mjs');
678
+ const { parseShareArg } = await import('./commands-BBjsl7xn.mjs');
679
679
  const shareEntries = share.map((s) => parseShareArg(s));
680
680
  await sessionSpawn(agent, dir, targetMachineId, {
681
681
  message,
@@ -762,7 +762,7 @@ async function handleSessionCommand() {
762
762
  console.error(" Spawns a stateless Claude session in <directory>, sends <prompt>, prints the answer, then deletes the session.");
763
763
  process.exit(1);
764
764
  }
765
- const { sessionQuery } = await import('./commands-fEd97uFk.mjs');
765
+ const { sessionQuery } = await import('./commands-BBjsl7xn.mjs');
766
766
  await sessionQuery(dir, prompt, targetMachineId, {
767
767
  timeout: parseFlagInt("--timeout"),
768
768
  json: hasFlag("--json"),
@@ -795,7 +795,7 @@ async function handleSessionCommand() {
795
795
  console.error("Usage: svamp session approve <session-id> [request-id] [--json]");
796
796
  process.exit(1);
797
797
  }
798
- const { sessionApprove } = await import('./commands-fEd97uFk.mjs');
798
+ const { sessionApprove } = await import('./commands-BBjsl7xn.mjs');
799
799
  const approveReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
800
800
  await sessionApprove(sessionArgs[1], approveReqId, targetMachineId, {
801
801
  json: hasFlag("--json")
@@ -805,7 +805,7 @@ async function handleSessionCommand() {
805
805
  console.error("Usage: svamp session deny <session-id> [request-id] [--json]");
806
806
  process.exit(1);
807
807
  }
808
- const { sessionDeny } = await import('./commands-fEd97uFk.mjs');
808
+ const { sessionDeny } = await import('./commands-BBjsl7xn.mjs');
809
809
  const denyReqId = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
810
810
  await sessionDeny(sessionArgs[1], denyReqId, targetMachineId, {
811
811
  json: hasFlag("--json")
@@ -841,7 +841,7 @@ async function handleSessionCommand() {
841
841
  console.error("Usage: svamp session set-title <title>");
842
842
  process.exit(1);
843
843
  }
844
- const { sessionSetTitle } = await import('./agentCommands-BxnLztnU.mjs');
844
+ const { sessionSetTitle } = await import('./agentCommands-DtAM3cKJ.mjs');
845
845
  await sessionSetTitle(title);
846
846
  } else if (sessionSubcommand === "set-link") {
847
847
  const url = sessionArgs[1];
@@ -850,7 +850,7 @@ async function handleSessionCommand() {
850
850
  process.exit(1);
851
851
  }
852
852
  const label = sessionArgs[2] && !sessionArgs[2].startsWith("--") ? sessionArgs[2] : void 0;
853
- const { sessionSetLink } = await import('./agentCommands-BxnLztnU.mjs');
853
+ const { sessionSetLink } = await import('./agentCommands-DtAM3cKJ.mjs');
854
854
  await sessionSetLink(url, label);
855
855
  } else if (sessionSubcommand === "notify") {
856
856
  const message = sessionArgs[1];
@@ -859,7 +859,7 @@ async function handleSessionCommand() {
859
859
  process.exit(1);
860
860
  }
861
861
  const level = parseFlagStr("--level") || "info";
862
- const { sessionNotify } = await import('./agentCommands-BxnLztnU.mjs');
862
+ const { sessionNotify } = await import('./agentCommands-DtAM3cKJ.mjs');
863
863
  await sessionNotify(message, level);
864
864
  } else if (sessionSubcommand === "broadcast") {
865
865
  const action = sessionArgs[1];
@@ -867,7 +867,7 @@ async function handleSessionCommand() {
867
867
  console.error("Usage: svamp session broadcast <action> [args...]\nActions: open-canvas <url> [label], close-canvas, toast <message>");
868
868
  process.exit(1);
869
869
  }
870
- const { sessionBroadcast } = await import('./agentCommands-BxnLztnU.mjs');
870
+ const { sessionBroadcast } = await import('./agentCommands-DtAM3cKJ.mjs');
871
871
  await sessionBroadcast(action, sessionArgs.slice(2).filter((a) => !a.startsWith("--")));
872
872
  } else if (sessionSubcommand === "inbox") {
873
873
  const inboxSubcmd = sessionArgs[1];
@@ -878,7 +878,7 @@ async function handleSessionCommand() {
878
878
  process.exit(1);
879
879
  }
880
880
  if (agentSessionId) {
881
- const { inboxSend } = await import('./agentCommands-BxnLztnU.mjs');
881
+ const { inboxSend } = await import('./agentCommands-DtAM3cKJ.mjs');
882
882
  await inboxSend(sessionArgs[2], {
883
883
  body: sessionArgs[3],
884
884
  subject: parseFlagStr("--subject"),
@@ -893,7 +893,7 @@ async function handleSessionCommand() {
893
893
  }
894
894
  } else if (inboxSubcmd === "list" || inboxSubcmd === "ls") {
895
895
  if (agentSessionId && !sessionArgs[2]) {
896
- const { inboxList } = await import('./agentCommands-BxnLztnU.mjs');
896
+ const { inboxList } = await import('./agentCommands-DtAM3cKJ.mjs');
897
897
  await inboxList({
898
898
  unread: hasFlag("--unread"),
899
899
  limit: parseFlagInt("--limit"),
@@ -915,7 +915,7 @@ async function handleSessionCommand() {
915
915
  process.exit(1);
916
916
  }
917
917
  if (agentSessionId && !sessionArgs[3]) {
918
- const { inboxList } = await import('./agentCommands-BxnLztnU.mjs');
918
+ const { inboxList } = await import('./agentCommands-DtAM3cKJ.mjs');
919
919
  await sessionInboxRead(agentSessionId, sessionArgs[2], targetMachineId);
920
920
  } else if (sessionArgs[3]) {
921
921
  await sessionInboxRead(sessionArgs[2], sessionArgs[3], targetMachineId);
@@ -925,7 +925,7 @@ async function handleSessionCommand() {
925
925
  }
926
926
  } else if (inboxSubcmd === "reply") {
927
927
  if (agentSessionId && sessionArgs[2] && sessionArgs[3] && !sessionArgs[4]) {
928
- const { inboxReply } = await import('./agentCommands-BxnLztnU.mjs');
928
+ const { inboxReply } = await import('./agentCommands-DtAM3cKJ.mjs');
929
929
  await inboxReply(sessionArgs[2], sessionArgs[3]);
930
930
  } else if (sessionArgs[2] && sessionArgs[3] && sessionArgs[4]) {
931
931
  await sessionInboxReply(sessionArgs[2], sessionArgs[3], sessionArgs[4], targetMachineId);
@@ -961,7 +961,7 @@ async function handleMachineCommand() {
961
961
  return;
962
962
  }
963
963
  if (machineSubcommand === "share") {
964
- const { machineShare } = await import('./commands-fEd97uFk.mjs');
964
+ const { machineShare } = await import('./commands-BBjsl7xn.mjs');
965
965
  let machineId;
966
966
  const shareArgs = [];
967
967
  for (let i = 1; i < machineArgs.length; i++) {
@@ -991,7 +991,7 @@ async function handleMachineCommand() {
991
991
  }
992
992
  await machineShare(machineId, { add, remove, list, configPath, showConfig });
993
993
  } else if (machineSubcommand === "exec") {
994
- const { machineExec } = await import('./commands-fEd97uFk.mjs');
994
+ const { machineExec } = await import('./commands-BBjsl7xn.mjs');
995
995
  let machineId;
996
996
  let cwd;
997
997
  const cmdParts = [];
@@ -1011,7 +1011,7 @@ async function handleMachineCommand() {
1011
1011
  }
1012
1012
  await machineExec(machineId, command, cwd);
1013
1013
  } else if (machineSubcommand === "info") {
1014
- const { machineInfo } = await import('./commands-fEd97uFk.mjs');
1014
+ const { machineInfo } = await import('./commands-BBjsl7xn.mjs');
1015
1015
  let machineId;
1016
1016
  for (let i = 1; i < machineArgs.length; i++) {
1017
1017
  if ((machineArgs[i] === "--machine" || machineArgs[i] === "-m") && i + 1 < machineArgs.length) {
@@ -1031,10 +1031,10 @@ async function handleMachineCommand() {
1031
1031
  level = machineArgs[++i];
1032
1032
  }
1033
1033
  }
1034
- const { machineNotify } = await import('./agentCommands-BxnLztnU.mjs');
1034
+ const { machineNotify } = await import('./agentCommands-DtAM3cKJ.mjs');
1035
1035
  await machineNotify(message, level);
1036
1036
  } else if (machineSubcommand === "ls") {
1037
- const { machineLs } = await import('./commands-fEd97uFk.mjs');
1037
+ const { machineLs } = await import('./commands-BBjsl7xn.mjs');
1038
1038
  let machineId;
1039
1039
  let showHidden = false;
1040
1040
  let path;
@@ -1092,24 +1092,24 @@ Examples:
1092
1092
  };
1093
1093
  const hasFlag = (name) => fleetArgs.includes(`--${name}`);
1094
1094
  if (sub === "status") {
1095
- const { fleetStatus } = await import('./fleet-D4Au0GFM.mjs');
1095
+ const { fleetStatus } = await import('./fleet-58AxJrRl.mjs');
1096
1096
  await fleetStatus();
1097
1097
  } else if (sub === "exec") {
1098
1098
  const command = fleetArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1099
- const { fleetExec } = await import('./fleet-D4Au0GFM.mjs');
1099
+ const { fleetExec } = await import('./fleet-58AxJrRl.mjs');
1100
1100
  await fleetExec(command, { cwd: flag("cwd") });
1101
1101
  } else if (sub === "upgrade-claude") {
1102
- const { fleetUpgradeClaude } = await import('./fleet-D4Au0GFM.mjs');
1102
+ const { fleetUpgradeClaude } = await import('./fleet-58AxJrRl.mjs');
1103
1103
  await fleetUpgradeClaude({ version: flag("version", "-v") });
1104
1104
  } else if (sub === "upgrade-svamp") {
1105
- const { fleetUpgradeSvamp } = await import('./fleet-D4Au0GFM.mjs');
1105
+ const { fleetUpgradeSvamp } = await import('./fleet-58AxJrRl.mjs');
1106
1106
  await fleetUpgradeSvamp({ version: flag("version", "-v"), excludeSelf: hasFlag("exclude-self") });
1107
1107
  } else if (sub === "daemon-restart") {
1108
- const { fleetDaemonRestart } = await import('./fleet-D4Au0GFM.mjs');
1108
+ const { fleetDaemonRestart } = await import('./fleet-58AxJrRl.mjs');
1109
1109
  await fleetDaemonRestart({ graceful: !hasFlag("cleanup") });
1110
1110
  } else if (sub === "push-skill") {
1111
1111
  const name = fleetArgs[1];
1112
- const { fleetPushSkill } = await import('./fleet-D4Au0GFM.mjs');
1112
+ const { fleetPushSkill } = await import('./fleet-58AxJrRl.mjs');
1113
1113
  await fleetPushSkill(name);
1114
1114
  } else {
1115
1115
  console.error(`Unknown fleet subcommand: ${sub}`);
@@ -1125,7 +1125,7 @@ async function handleSkillsCommand() {
1125
1125
  await printSkillsHelp();
1126
1126
  return;
1127
1127
  }
1128
- const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-BRg9BTrv.mjs');
1128
+ const { skillsFind, skillsInstall, skillsList, skillsRemove, skillsPublish } = await import('./commands-CY-W-poR.mjs');
1129
1129
  if (skillsSubcommand === "find" || skillsSubcommand === "search") {
1130
1130
  const query = skillsArgs.slice(1).filter((a) => !a.startsWith("--")).join(" ");
1131
1131
  if (!query) {
@@ -1172,7 +1172,7 @@ async function loginToHypha() {
1172
1172
  process.exit(1);
1173
1173
  }
1174
1174
  const anchor = anchorArg.replace(/\/+$/, "");
1175
- const { loadInstanceConfig } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.Y; });
1175
+ const { loadInstanceConfig } = await import('./run-CYromFV_.mjs').then(function (n) { return n.Y; });
1176
1176
  let cfg = null;
1177
1177
  try {
1178
1178
  cfg = await loadInstanceConfig({ anchor, force: true });
@@ -1283,7 +1283,7 @@ async function logoutFromHypha() {
1283
1283
  } catch {
1284
1284
  }
1285
1285
  try {
1286
- const { clearInstanceConfigCache } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.Y; });
1286
+ const { clearInstanceConfigCache } = await import('./run-CYromFV_.mjs').then(function (n) { return n.Y; });
1287
1287
  clearInstanceConfigCache();
1288
1288
  } catch {
1289
1289
  }
@@ -1614,7 +1614,7 @@ async function applyClaudeAuthFlags(argv) {
1614
1614
  "--use-hypha-proxy, --use-claude-login, and --anthropic-base-url/--anthropic-api-key are mutually exclusive"
1615
1615
  );
1616
1616
  }
1617
- const mod = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.X; });
1617
+ const mod = await import('./run-CYromFV_.mjs').then(function (n) { return n.X; });
1618
1618
  if (hasHypha) {
1619
1619
  let url;
1620
1620
  const hyphaIdx = argv.indexOf("--use-hypha-proxy");
@@ -1668,7 +1668,7 @@ async function applyDaemonShareFlag(argv) {
1668
1668
  }
1669
1669
  }
1670
1670
  if (collected.length === 0) return;
1671
- const { updateEnvFile } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.X; });
1671
+ const { updateEnvFile } = await import('./run-CYromFV_.mjs').then(function (n) { return n.X; });
1672
1672
  const seen = /* @__PURE__ */ new Set();
1673
1673
  const deduped = collected.filter((e) => {
1674
1674
  const k = e.toLowerCase();
@@ -1701,7 +1701,7 @@ async function handleWiseAgentCommand(rest) {
1701
1701
  }
1702
1702
  });
1703
1703
  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(" ");
1704
- const { wiseAskCli } = await import('./commands-fEd97uFk.mjs');
1704
+ const { wiseAskCli } = await import('./commands-BBjsl7xn.mjs');
1705
1705
  await wiseAskCli(machineId, message, sessionId, { json });
1706
1706
  return;
1707
1707
  }
@@ -1713,7 +1713,7 @@ async function handleWiseAgentCommand(rest) {
1713
1713
  }
1714
1714
  return void 0;
1715
1715
  };
1716
- const { runWiseVoiceCli } = await import('./headlessCli-fjO9JxJW.mjs');
1716
+ const { runWiseVoiceCli } = await import('./headlessCli-DevjnmoL.mjs');
1717
1717
  await runWiseVoiceCli({ voice: valueOf(["--voice"]), wakeKeywordPath: valueOf(["--wake"]), model: valueOf(["--model"]) });
1718
1718
  return;
1719
1719
  }
@@ -1755,7 +1755,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1755
1755
  return;
1756
1756
  }
1757
1757
  const authArgs = rest.slice(1);
1758
- const mod = await import('./auth-BicjH8vK.mjs');
1758
+ const mod = await import('./auth-CaUJDK2P.mjs');
1759
1759
  let action;
1760
1760
  try {
1761
1761
  action = mod.parseWiseAgentAuthArgs(authArgs);
@@ -1765,7 +1765,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1765
1765
  return;
1766
1766
  }
1767
1767
  if (action) {
1768
- const { updateEnvFile } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.X; });
1768
+ const { updateEnvFile } = await import('./run-CYromFV_.mjs').then(function (n) { return n.X; });
1769
1769
  const updates = mod.buildWiseAgentEnvUpdates(action);
1770
1770
  updateEnvFile(updates);
1771
1771
  for (const [k, v] of Object.entries(updates)) {
@@ -1779,7 +1779,7 @@ If none is set, hitting a WISE Agent channel returns a clear "not configured" er
1779
1779
  }
1780
1780
  async function handleDaemonAuthCommand(argv) {
1781
1781
  const sub = (argv[0] || "status").toLowerCase();
1782
- const mod = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.X; });
1782
+ const mod = await import('./run-CYromFV_.mjs').then(function (n) { return n.X; });
1783
1783
  if (sub === "--help" || sub === "-h" || sub === "help") {
1784
1784
  console.log(`
1785
1785
  svamp daemon auth \u2014 Configure how Claude subprocesses authenticate
@@ -2082,7 +2082,7 @@ Examples:
2082
2082
  async function printSkillsHelp() {
2083
2083
  let browseUrl = "<HYPHA_SERVER_URL>/<workspace>/artifacts/marketplace (set HYPHA_SERVER_URL)";
2084
2084
  try {
2085
- const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-NLlVMcrd.mjs').then(function (n) { return n.Z; });
2085
+ const { getArtifactBaseUrl, getSkillsCollectionName } = await import('./run-CYromFV_.mjs').then(function (n) { return n.Z; });
2086
2086
  browseUrl = `${getArtifactBaseUrl()}/${getSkillsCollectionName()}`;
2087
2087
  } catch {
2088
2088
  }
@@ -2,7 +2,7 @@ import { existsSync, readFileSync } from 'node:fs';
2
2
  import { execSync } from 'node:child_process';
3
3
  import { basename, resolve, join } from 'node:path';
4
4
  import os from 'node:os';
5
- import { F as normalizeAllowedUser, G as loadSecurityContextConfig, H as resolveSecurityContext, I as buildSecurityContextFromFlags, J as mergeSecurityContexts, c as connectToHypha, K as buildSessionShareUrl, L as computeOutboundHop, M as buildMachineShareUrl } from './run-NLlVMcrd.mjs';
5
+ import { F as normalizeAllowedUser, G as loadSecurityContextConfig, H as resolveSecurityContext, I as buildSecurityContextFromFlags, J as mergeSecurityContexts, c as connectToHypha, K as buildSessionShareUrl, L as computeOutboundHop, M as buildMachineShareUrl } from './run-CYromFV_.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -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-ki1LtiZY.mjs');
61
+ const { runFrpcTunnel } = await import('./frpc-BK-7b-u0.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-fEd97uFk.mjs');
71
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.mjs');
72
72
  const { server, machine } = await connectAndGetMachine();
73
73
  try {
74
74
  const status = await machine.tunnelStart({
@@ -123,7 +123,7 @@ async function serviceServe(args) {
123
123
  };
124
124
  process.on("SIGINT", cleanup);
125
125
  process.on("SIGTERM", cleanup);
126
- const { runFrpcTunnel } = await import('./frpc-ki1LtiZY.mjs');
126
+ const { runFrpcTunnel } = await import('./frpc-BK-7b-u0.mjs');
127
127
  await runFrpcTunnel(name, [caddyPort]);
128
128
  } catch (err) {
129
129
  console.error(`Error serving directory: ${err.message}`);
@@ -132,7 +132,7 @@ async function serviceServe(args) {
132
132
  }
133
133
  async function serviceList(_args) {
134
134
  try {
135
- const { connectAndGetMachine } = await import('./commands-fEd97uFk.mjs');
135
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.mjs');
136
136
  const { server, machine } = await connectAndGetMachine();
137
137
  try {
138
138
  const tunnels = await machine.tunnelList({});
@@ -161,7 +161,7 @@ async function serviceDelete(args) {
161
161
  process.exit(1);
162
162
  }
163
163
  try {
164
- const { connectAndGetMachine } = await import('./commands-fEd97uFk.mjs');
164
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.mjs');
165
165
  const { server, machine } = await connectAndGetMachine();
166
166
  try {
167
167
  await machine.tunnelStop({ name });
@@ -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 { p as parseFrontmatter, n as getSkillsServer, o as getSkillsWorkspaceName, q as getSkillsCollectionName, t as fetchWithTimeout, u as searchSkills, v as SKILLS_DIR, w as getSkillInfo, x as downloadSkillFile, y as listSkillFiles } from './run-NLlVMcrd.mjs';
4
+ import { p as parseFrontmatter, n as getSkillsServer, o as getSkillsWorkspaceName, q as getSkillsCollectionName, t as fetchWithTimeout, u as searchSkills, v as SKILLS_DIR, w as getSkillInfo, x as downloadSkillFile, y as listSkillFiles } from './run-CYromFV_.mjs';
5
5
  import 'fs/promises';
6
6
  import 'url';
7
7
  import 'child_process';
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands-fEd97uFk.mjs';
3
+ import { connectAndGetMachine } from './commands-BBjsl7xn.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-NLlVMcrd.mjs';
8
+ import './run-CYromFV_.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';
@@ -1,6 +1,6 @@
1
1
  import { execFileSync } from 'node:child_process';
2
2
  import { createServer } from 'node:http';
3
- import { R as RoutineStore, m as RoutineRunner } from './run-NLlVMcrd.mjs';
3
+ import { R as RoutineStore, m as RoutineRunner } from './run-CYromFV_.mjs';
4
4
  import 'os';
5
5
  import 'fs/promises';
6
6
  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-NLlVMcrd.mjs';
4
+ import { c as connectToHypha } from './run-CYromFV_.mjs';
5
5
  import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-HydRNEt7.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
@@ -3,7 +3,7 @@ import { mkdirSync, writeFileSync, unlinkSync, existsSync, chmodSync, readFileSy
3
3
  import { join } from 'path';
4
4
  import { homedir, platform, arch } from 'os';
5
5
  import { createHash, randomUUID } from 'crypto';
6
- import { h as getFrpsSubdomainHost, i as getFrpsServerPort, j as getFrpsServerAddr } from './run-NLlVMcrd.mjs';
6
+ import { h as getFrpsSubdomainHost, i as getFrpsServerPort, j as getFrpsServerAddr } from './run-CYromFV_.mjs';
7
7
  import 'fs/promises';
8
8
  import 'url';
9
9
  import 'node:fs';
@@ -1,5 +1,5 @@
1
- import { E as resolveModel, N as describeMisconfiguration, O as buildMachineDeps } from './run-NLlVMcrd.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-BFBWJWur.mjs';
1
+ import { E as resolveModel, N as describeMisconfiguration, O as buildMachineDeps } from './run-CYromFV_.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-7ghx7NPa.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, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, a as registerSessionService, s as startDaemon, b as stopDaemon } from './run-NLlVMcrd.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-CYromFV_.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.94";
2
+ var version = "0.2.96";
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";
@@ -2053,7 +2053,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
2053
2053
  const tunnels = handlers.tunnels;
2054
2054
  if (!tunnels) throw new Error("Tunnel management not available");
2055
2055
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
2056
- const { FrpcTunnel } = await import('./frpc-ki1LtiZY.mjs');
2056
+ const { FrpcTunnel } = await import('./frpc-BK-7b-u0.mjs');
2057
2057
  const tunnel = new FrpcTunnel({
2058
2058
  name: params.name,
2059
2059
  ports: params.ports,
@@ -2210,6 +2210,59 @@ async function registerMachineService(server, machineId, metadata, daemonState,
2210
2210
  return { success: false, error: error instanceof Error ? error.message : "Failed to create token" };
2211
2211
  }
2212
2212
  },
2213
+ // Cheap "subagent" text summary for the WISE voice agent's summarize_session
2214
+ // tool. The browser gathers the (possibly long) text and asks a question; the
2215
+ // call runs SERVER-SIDE with the machine's OpenAI key — never from the browser,
2216
+ // which has no key post-Option-A and hits CORS/"Load failed" calling OpenAI direct.
2217
+ wiseSummarize: async (params, context) => {
2218
+ trackInbound();
2219
+ if (context && (!context.user || context.user.is_anonymous)) {
2220
+ return { success: false, error: "Sign in to use WISE." };
2221
+ }
2222
+ const text = (params?.text || "").trim();
2223
+ if (!text) return { success: true, answer: "(nothing to summarize)" };
2224
+ const resolved = resolveModel({ provider: "openai" }, process.env);
2225
+ const misconfig = describeMisconfiguration(resolved);
2226
+ if (misconfig || !resolved.apiKey) {
2227
+ return { success: false, error: misconfig || "WISE is not configured: no OpenAI API key on this machine." };
2228
+ }
2229
+ const clipped = text.length > 24e3 ? text.slice(-24e3) : text;
2230
+ const model = params.model || "gpt-4o-mini";
2231
+ const base = resolved.baseUrl || "https://api.openai.com";
2232
+ try {
2233
+ const ctrl = new AbortController();
2234
+ const timer = setTimeout(() => ctrl.abort(), 3e4);
2235
+ let resp;
2236
+ try {
2237
+ resp = await fetch(`${base}/v1/chat/completions`, {
2238
+ method: "POST",
2239
+ headers: { "Authorization": `Bearer ${resolved.apiKey}`, "Content-Type": "application/json" },
2240
+ body: JSON.stringify({
2241
+ model,
2242
+ messages: [
2243
+ { role: "system", content: "You are a concise helper. Answer the question about the provided text in 1-3 short sentences. No preamble." },
2244
+ { role: "user", content: `TEXT:
2245
+ ${clipped}
2246
+
2247
+ QUESTION: ${params.question || "Summarize this concisely."}` }
2248
+ ],
2249
+ max_tokens: 300,
2250
+ temperature: 0.2
2251
+ }),
2252
+ signal: ctrl.signal
2253
+ });
2254
+ } finally {
2255
+ clearTimeout(timer);
2256
+ }
2257
+ if (!resp.ok) {
2258
+ return { success: false, error: `Subagent error (${resp.status}): ${(await resp.text().catch(() => "")).slice(0, 200)}` };
2259
+ }
2260
+ const j = await resp.json();
2261
+ return { success: true, answer: j.choices?.[0]?.message?.content?.trim() || "(no answer)" };
2262
+ } catch (error) {
2263
+ return { success: false, error: error instanceof Error ? error.message : "Subagent request failed" };
2264
+ }
2265
+ },
2213
2266
  // Text WISE turn. GLOBAL (machine-manager) by default; pass sessionId to
2214
2267
  // scope to a session. Runs server-side and returns the reply synchronously.
2215
2268
  wiseAsk: async (params, context) => {
@@ -2241,7 +2294,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
2241
2294
  }
2242
2295
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
2243
2296
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
2244
- const { toolsForRole } = await import('./sideband-BFBWJWur.mjs');
2297
+ const { toolsForRole } = await import('./sideband-7ghx7NPa.mjs');
2245
2298
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
2246
2299
  return fmt(r2);
2247
2300
  }
@@ -3822,39 +3875,6 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
3822
3875
  };
3823
3876
  return { store, rpcHandlers };
3824
3877
  }
3825
- async function registerSessionService(server, sessionId, initialMetadata, initialAgentState, callbacks, options) {
3826
- const { store, rpcHandlers } = createSessionStore(
3827
- server,
3828
- sessionId,
3829
- initialMetadata,
3830
- initialAgentState,
3831
- callbacks,
3832
- options
3833
- );
3834
- const serviceDefinition = {
3835
- id: `svamp-session-${sessionId}`,
3836
- name: `Svamp Session ${sessionId.slice(0, 8)}`,
3837
- type: "svamp-session",
3838
- config: { visibility: "unlisted", require_context: true },
3839
- ...rpcHandlers
3840
- };
3841
- const serviceInfo = await server.registerService(serviceDefinition, { overwrite: true });
3842
- console.log(`[HYPHA SESSION] Session service registered: ${serviceInfo.id}`);
3843
- const originalDisconnect = store.disconnect;
3844
- store.disconnect = async () => {
3845
- await originalDisconnect();
3846
- await server.unregisterService(serviceInfo.id);
3847
- };
3848
- store.reregister = async () => {
3849
- try {
3850
- await server.registerService(serviceDefinition, { overwrite: true });
3851
- } catch (e) {
3852
- if (!String(e?.message).includes("already exists")) throw e;
3853
- }
3854
- };
3855
- store.serviceInfo = serviceInfo;
3856
- return store;
3857
- }
3858
3878
 
3859
3879
  const SVAMP_HOME$2 = process.env.SVAMP_HOME || join$1(os.homedir(), ".svamp");
3860
3880
  const num = (key, def) => {
@@ -9977,7 +9997,7 @@ async function startDaemon(options) {
9977
9997
  const list = loadExposedTunnels().filter((t) => t.name !== name);
9978
9998
  saveExposedTunnels(list);
9979
9999
  }
9980
- const { ServeManager } = await import('./serveManager-oYpBlNC6.mjs');
10000
+ const { ServeManager } = await import('./serveManager-CQoaGNgq.mjs');
9981
10001
  const serveManager = new ServeManager(SVAMP_HOME, (msg) => logger.log(`[SERVE] ${msg}`), hyphaServerUrl);
9982
10002
  ensureAutoInstalledSkills(logger).catch(() => {
9983
10003
  });
@@ -12605,7 +12625,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
12605
12625
  const specs = loadExposedTunnels();
12606
12626
  if (specs.length === 0) return;
12607
12627
  logger.log(`[exposed-tunnels] Restoring ${specs.length} tunnel(s) from ${EXPOSED_TUNNELS_FILE}`);
12608
- const { FrpcTunnel } = await import('./frpc-ki1LtiZY.mjs');
12628
+ const { FrpcTunnel } = await import('./frpc-BK-7b-u0.mjs');
12609
12629
  for (const spec of specs) {
12610
12630
  if (tunnels.has(spec.name)) continue;
12611
12631
  try {
@@ -13377,4 +13397,4 @@ var run = /*#__PURE__*/Object.freeze({
13377
13397
  writeStopMarker: writeStopMarker
13378
13398
  });
13379
13399
 
13380
- export { loadMachineContext as A, buildMachineInstructions as B, machineToolsForRole as C, buildMachineTools as D, resolveModel as E, normalizeAllowedUser as F, loadSecurityContextConfig as G, resolveSecurityContext as H, buildSecurityContextFromFlags as I, mergeSecurityContexts as J, buildSessionShareUrl as K, computeOutboundHop as L, buildMachineShareUrl as M, describeMisconfiguration as N, buildMachineDeps as O, generateHookSettings as P, DefaultTransport$1 as Q, RoutineStore as R, ServeAuth as S, acpBackend as T, acpAgentConfig as U, codexMcpBackend as V, GeminiTransport$1 as W, claudeAuth as X, instanceConfig as Y, api as Z, run as _, registerSessionService as a, stopDaemon as b, connectToHypha as c, daemonStatus as d, clearStopMarker as e, stopMarkerExists as f, getHyphaServerUrl$1 as g, getFrpsSubdomainHost as h, getFrpsServerPort as i, getFrpsServerAddr as j, getHyphaServerUrl as k, hasCookieToken as l, RoutineRunner as m, getSkillsServer as n, getSkillsWorkspaceName as o, parseFrontmatter as p, getSkillsCollectionName as q, registerMachineService as r, startDaemon as s, fetchWithTimeout as t, searchSkills as u, SKILLS_DIR as v, getSkillInfo as w, downloadSkillFile as x, listSkillFiles as y, READ_ONLY_TOOLS as z };
13400
+ export { loadMachineContext as A, buildMachineInstructions as B, machineToolsForRole as C, buildMachineTools as D, resolveModel as E, normalizeAllowedUser as F, loadSecurityContextConfig as G, resolveSecurityContext as H, buildSecurityContextFromFlags as I, mergeSecurityContexts as J, buildSessionShareUrl as K, computeOutboundHop as L, buildMachineShareUrl as M, describeMisconfiguration as N, buildMachineDeps as O, generateHookSettings as P, DefaultTransport$1 as Q, RoutineStore as R, ServeAuth as S, acpBackend as T, acpAgentConfig as U, codexMcpBackend as V, GeminiTransport$1 as W, claudeAuth as X, instanceConfig as Y, api as Z, run as _, createSessionStore as a, stopDaemon as b, connectToHypha as c, daemonStatus as d, clearStopMarker as e, stopMarkerExists as f, getHyphaServerUrl$1 as g, getFrpsSubdomainHost as h, getFrpsServerPort as i, getFrpsServerAddr as j, getHyphaServerUrl as k, hasCookieToken as l, RoutineRunner as m, getSkillsServer as n, getSkillsWorkspaceName as o, parseFrontmatter as p, getSkillsCollectionName as q, registerMachineService as r, startDaemon as s, fetchWithTimeout as t, searchSkills as u, SKILLS_DIR as v, getSkillInfo as w, downloadSkillFile as x, listSkillFiles as y, READ_ONLY_TOOLS as z };
@@ -2,7 +2,7 @@ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(im
2
2
  import os from 'node:os';
3
3
  import { resolve, join } from 'node:path';
4
4
  import { existsSync, readFileSync, watch } from 'node:fs';
5
- import { c as connectToHypha, a as registerSessionService, P as generateHookSettings } from './run-NLlVMcrd.mjs';
5
+ import { c as connectToHypha, a as createSessionStore, r as registerMachineService, P as generateHookSettings } from './run-CYromFV_.mjs';
6
6
  import { createServer } from 'node:http';
7
7
  import { spawn } from 'node:child_process';
8
8
  import { createInterface } from 'node:readline';
@@ -612,6 +612,7 @@ async function runInteractive(options) {
612
612
  loadDotEnv();
613
613
  let server = null;
614
614
  let sessionService = null;
615
+ let machineService = null;
615
616
  const serverUrl = process.env.HYPHA_SERVER_URL;
616
617
  const token = process.env.HYPHA_TOKEN;
617
618
  if (serverUrl && token) {
@@ -755,14 +756,46 @@ async function runInteractive(options) {
755
756
  }
756
757
  };
757
758
  try {
758
- sessionService = await registerSessionService(
759
+ const interactiveMachineId = `interactive-${machineId || os.hostname()}-${process.pid}`;
760
+ metadata.machineId = interactiveMachineId;
761
+ const { store, rpcHandlers } = createSessionStore(
759
762
  server,
760
763
  sessionId,
761
764
  metadata,
762
765
  { controlledByUser: true },
763
- callbacks
766
+ callbacks,
767
+ { onSessionEvent: (u) => {
768
+ try {
769
+ machineService?.notifySessionEvent(u);
770
+ } catch {
771
+ }
772
+ } }
764
773
  );
765
- log(`Session service registered: svamp-session-${sessionId}`);
774
+ sessionService = store;
775
+ const machineMeta = {
776
+ host: os.hostname(),
777
+ platform: os.platform(),
778
+ svampVersion: "",
779
+ homeDir: os.homedir(),
780
+ svampHomeDir: SVAMP_HOME,
781
+ svampLibDir: "",
782
+ displayName: `${os.hostname()} (interactive)`
783
+ };
784
+ const daemonState = { status: "running", pid: process.pid, startedAt: Date.now() };
785
+ machineService = await registerMachineService(server, interactiveMachineId, machineMeta, daemonState, {
786
+ getSessionRPCHandlers: (sid) => sid === sessionId ? rpcHandlers : void 0,
787
+ getSessionIds: () => [sessionId],
788
+ getTrackedSessions: () => [{ sessionId, startedBy: "terminal", directory: cwd, active: true, metadata }],
789
+ spawnSession: async () => ({ type: "error", errorMessage: "spawn not supported in interactive mode" }),
790
+ archiveSession: () => false,
791
+ resumeSession: async () => ({ success: false, message: "not supported in interactive mode" }),
792
+ deleteSession: () => false,
793
+ restartSession: async () => ({ success: false, message: "not supported in interactive mode" }),
794
+ requestShutdown: () => {
795
+ process.kill(process.pid, "SIGINT");
796
+ }
797
+ });
798
+ log(`Interactive machine service registered: ${interactiveMachineId} (session ${sessionId})`);
766
799
  } catch (err) {
767
800
  restoreConsoleLogs();
768
801
  console.error(`\x1B[33mNote:\x1B[0m Could not register session on Hypha (${err.message}).`);
@@ -801,6 +834,10 @@ async function runInteractive(options) {
801
834
  await sessionService.disconnect().catch(() => {
802
835
  });
803
836
  }
837
+ if (machineService) {
838
+ await machineService.disconnect().catch(() => {
839
+ });
840
+ }
804
841
  hookSettings?.cleanup();
805
842
  hookServer?.stop();
806
843
  if (server) {
@@ -828,8 +865,8 @@ async function runInteractive(options) {
828
865
  }
829
866
  restoreConsoleLogs();
830
867
  console.log(`\x1B[36mSvamp interactive mode\x1B[0m`);
831
- if (server && sessionService) {
832
- const serviceId = sessionService.serviceInfo?.id || `svamp-session-${sessionId}`;
868
+ if (server && sessionService && machineService) {
869
+ const serviceId = machineService.serviceInfo?.id || "";
833
870
  const slashIdx = serviceId.indexOf("/");
834
871
  const colonIdx = serviceId.indexOf(":");
835
872
  let serviceUrl = "";
@@ -54,7 +54,7 @@ async function handleServeCommand() {
54
54
  }
55
55
  }
56
56
  async function serveAdd(args, machineId) {
57
- const { connectAndGetMachine } = await import('./commands-fEd97uFk.mjs');
57
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.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-fEd97uFk.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.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-fEd97uFk.mjs');
185
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.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-fEd97uFk.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.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-fEd97uFk.mjs');
238
+ const { connectAndGetMachine } = await import('./commands-BBjsl7xn.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 { k as getHyphaServerUrl, S as ServeAuth, l as hasCookieToken } from './run-NLlVMcrd.mjs';
7
+ import { k as getHyphaServerUrl, S as ServeAuth, l as hasCookieToken } from './run-CYromFV_.mjs';
8
8
  import 'os';
9
9
  import 'fs/promises';
10
10
  import 'url';
@@ -712,7 +712,7 @@ class ServeManager {
712
712
  const mount = this.mounts.get(mountName);
713
713
  const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, `static-${subdomainSafe}-${mount.linkToken}`]]) : void 0;
714
714
  try {
715
- const { FrpcTunnel } = await import('./frpc-ki1LtiZY.mjs');
715
+ const { FrpcTunnel } = await import('./frpc-BK-7b-u0.mjs');
716
716
  let tunnel;
717
717
  tunnel = new FrpcTunnel({
718
718
  name: tunnelName,
@@ -1,4 +1,4 @@
1
- import { z as READ_ONLY_TOOLS, A as loadMachineContext, B as buildMachineInstructions, C as machineToolsForRole, D as buildMachineTools } from './run-NLlVMcrd.mjs';
1
+ import { z as READ_ONLY_TOOLS, A as loadMachineContext, B as buildMachineInstructions, C as machineToolsForRole, D as buildMachineTools } from './run-CYromFV_.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.94",
3
+ "version": "0.2.96",
4
4
  "description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
5
5
  "author": "Amun AI AB",
6
6
  "license": "SEE LICENSE IN LICENSE",