svamp-cli 0.2.194 → 0.2.195

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/bin/skills/crew/SKILL.md +24 -1
  2. package/dist/{agentCommands-u3lACoAL.mjs → agentCommands-IdOiOg0f.mjs} +5 -5
  3. package/dist/{auth-CA8v11FJ.mjs → auth-DmrnqTLo.mjs} +1 -1
  4. package/dist/cli.mjs +60 -60
  5. package/dist/{commands-DlKKUqVK.mjs → commands-B3uk2hcj.mjs} +1 -1
  6. package/dist/{commands-DRYKMdYK.mjs → commands-BlTV-jYX.mjs} +5 -3
  7. package/dist/{commands-UDDf7PQt.mjs → commands-CbBOkn_G.mjs} +1 -1
  8. package/dist/{commands-Cj1ipwaC.mjs → commands-DAYpMdgB.mjs} +2 -2
  9. package/dist/{commands-CZD9sTwX.mjs → commands-DHI31wAh.mjs} +1 -1
  10. package/dist/{commands-CqnF0mFt.mjs → commands-DZhCJXnB.mjs} +137 -49
  11. package/dist/{commands-CnOAurhc.mjs → commands-DjT7M2al.mjs} +5 -5
  12. package/dist/{fleet-CPdmiNDX.mjs → fleet-BtwsNKuT.mjs} +1 -1
  13. package/dist/{frpc-CBDwOpZZ.mjs → frpc-WpRu5zE_.mjs} +1 -1
  14. package/dist/{headlessCli-CFj2Gxe0.mjs → headlessCli-Dy049YdV.mjs} +2 -2
  15. package/dist/index.mjs +1 -1
  16. package/dist/{package-C9H0l19h.mjs → package-ARvCEkBY.mjs} +2 -2
  17. package/dist/{rpc-6ftZ30co.mjs → rpc-CvpwmghB.mjs} +1 -1
  18. package/dist/{rpc-BHrZL52o.mjs → rpc-DgV6_G_Q.mjs} +6 -2
  19. package/dist/{run-6hsamvmy.mjs → run-D79u_Ud4.mjs} +1 -1
  20. package/dist/{run-Dn-FEr9q.mjs → run-DiCtjIs5.mjs} +38 -14
  21. package/dist/{scheduler-BtltL3kB.mjs → scheduler-D8Xj2_vB.mjs} +1 -1
  22. package/dist/{serveCommands-DEGssQo6.mjs → serveCommands-Bc9DXaQv.mjs} +5 -5
  23. package/dist/{serveManager-DwO36v9t.mjs → serveManager-C2ykbnxd.mjs} +2 -2
  24. package/dist/{sideband-CjLQLnk1.mjs → sideband-B9uONcBg.mjs} +1 -1
  25. package/package.json +2 -2
@@ -2720,7 +2720,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
2720
2720
  const tunnels = handlers.tunnels;
2721
2721
  if (!tunnels) throw new Error("Tunnel management not available");
2722
2722
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
2723
- const { FrpcTunnel } = await import('./frpc-CBDwOpZZ.mjs');
2723
+ const { FrpcTunnel } = await import('./frpc-WpRu5zE_.mjs');
2724
2724
  const tunnel = new FrpcTunnel({
2725
2725
  name: params.name,
2726
2726
  ports: params.ports,
@@ -3167,7 +3167,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
3167
3167
  }
3168
3168
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
3169
3169
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
3170
- const { toolsForRole } = await import('./sideband-CjLQLnk1.mjs');
3170
+ const { toolsForRole } = await import('./sideband-B9uONcBg.mjs');
3171
3171
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
3172
3172
  return fmt(r2);
3173
3173
  }
@@ -3266,7 +3266,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
3266
3266
  if (r.error || !r.sender) return { error: r.error || "unauthorized" };
3267
3267
  const callId = "call_" + Math.random().toString(16).slice(2, 12);
3268
3268
  const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
3269
- const { queryCore } = await import('./commands-DlKKUqVK.mjs');
3269
+ const { queryCore } = await import('./commands-B3uk2hcj.mjs');
3270
3270
  const timeout = c.reply?.timeout_sec || 120;
3271
3271
  let result;
3272
3272
  try {
@@ -3782,7 +3782,6 @@ function formatInboxMessageXml(msg) {
3782
3782
  if (msg.subject) attrs.push(`subject="${escapeXml(msg.subject)}"`);
3783
3783
  if (msg.urgency) attrs.push(`urgency="${msg.urgency}"`);
3784
3784
  if (msg.replyTo) attrs.push(`reply-to="${escapeXml(msg.replyTo)}"`);
3785
- if (msg.cc && msg.cc.length > 0) attrs.push(`cc="${msg.cc.map(escapeXml).join(",")}"`);
3786
3785
  if (msg.threadId) attrs.push(`thread-id="${escapeXml(msg.threadId)}"`);
3787
3786
  attrs.push(`timestamp="${msg.timestamp}"`);
3788
3787
  return `<svamp-message ${attrs.join(" ")}>
@@ -3942,13 +3941,15 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
3942
3941
  body: m.body,
3943
3942
  timestamp: m.timestamp,
3944
3943
  read: m.read,
3944
+ // `handled` = agent consumed it; drives the "pending" (unread) badge
3945
+ // together with `read` so handled messages don't linger as phantom-unread.
3946
+ ...m.handled ? { handled: true } : {},
3945
3947
  from: m.from,
3946
3948
  fromSession: m.fromSession,
3947
3949
  to: m.to,
3948
3950
  subject: m.subject,
3949
3951
  urgency: m.urgency,
3950
3952
  replyTo: m.replyTo,
3951
- cc: m.cc,
3952
3953
  threadId: m.threadId,
3953
3954
  // Channel provenance so the inbox UI can show who/verified.
3954
3955
  ...m.verified !== void 0 ? { verified: m.verified } : {},
@@ -5063,6 +5064,13 @@ Output ONLY the full revised reply text \u2014 no preamble, no commentary, no su
5063
5064
  syncInboxToMetadata();
5064
5065
  }
5065
5066
  },
5067
+ markInboxHandled: (messageId) => {
5068
+ const msg = inbox.find((m) => m.messageId === messageId);
5069
+ if (msg && !msg.handled) {
5070
+ msg.handled = true;
5071
+ syncInboxToMetadata();
5072
+ }
5073
+ },
5066
5074
  disconnect: async () => {
5067
5075
  const toRemove = [...listeners];
5068
5076
  for (const listener of toRemove) {
@@ -9913,7 +9921,7 @@ function normalizeStatus(s) {
9913
9921
  if (s === "done") return "archived";
9914
9922
  return s === "ready" || s === "in_progress" || s === "archived" ? s : "ready";
9915
9923
  }
9916
- const FIELD_ORDER = ["id", "title", "status", "scope", "labels", "verify", "disposition", "triaged", "branch", "session", "original", "created", "closed"];
9924
+ const FIELD_ORDER = ["id", "title", "status", "scope", "labels", "verify", "disposition", "triaged", "branch", "session", "owner", "original", "created", "closed"];
9917
9925
  function resolveProjectRoot(start = process.cwd()) {
9918
9926
  let dir = start;
9919
9927
  for (let i = 0; i < 40; i++) {
@@ -9970,6 +9978,7 @@ function parseIssue(content) {
9970
9978
  triaged: fm.triaged === true,
9971
9979
  branch: fm.branch ?? null,
9972
9980
  session: fm.session ?? null,
9981
+ owner: fm.owner ?? null,
9973
9982
  original: fm.original ?? null,
9974
9983
  created: String(fm.created ?? (/* @__PURE__ */ new Date()).toISOString()),
9975
9984
  closed: fm.closed ?? null,
@@ -9997,6 +10006,13 @@ function listIssues(projectRoot, opts = {}) {
9997
10006
  if (opts.scope) items = items.filter((i) => i.scope === opts.scope);
9998
10007
  return items.sort((a, b) => Number(a.id) - Number(b.id));
9999
10008
  }
10009
+ function isVisibleTo(issue, session) {
10010
+ if (issue.scope === "session") return issue.session === session || issue.owner === session;
10011
+ if (issue.owner === session) return true;
10012
+ if (issue.session === session) return true;
10013
+ if (!issue.owner && !issue.session) return true;
10014
+ return false;
10015
+ }
10000
10016
  function getIssue(projectRoot, id) {
10001
10017
  const padded = /^\d+$/.test(id) ? id.padStart(4, "0") : id;
10002
10018
  for (const p of [issuePath(projectRoot, padded), issuePath(projectRoot, padded, true)]) {
@@ -10033,6 +10049,7 @@ function addIssue(projectRoot, fields) {
10033
10049
  triaged: fields.triaged ?? false,
10034
10050
  branch: null,
10035
10051
  session: fields.session ?? null,
10052
+ owner: fields.owner ?? null,
10036
10053
  original: fields.original ?? null,
10037
10054
  created: (/* @__PURE__ */ new Date()).toISOString(),
10038
10055
  closed: null,
@@ -11614,7 +11631,7 @@ async function startDaemon(options) {
11614
11631
  saveExposedTunnels(list);
11615
11632
  }
11616
11633
  async function createExposedTunnel(spec) {
11617
- const { FrpcTunnel } = await import('./frpc-CBDwOpZZ.mjs');
11634
+ const { FrpcTunnel } = await import('./frpc-WpRu5zE_.mjs');
11618
11635
  const tunnel = new FrpcTunnel({
11619
11636
  name: spec.name,
11620
11637
  ports: spec.ports,
@@ -11634,7 +11651,7 @@ async function startDaemon(options) {
11634
11651
  return tunnel;
11635
11652
  }
11636
11653
  const tunnelRecreateState = /* @__PURE__ */ new Map();
11637
- const { ServeManager } = await import('./serveManager-DwO36v9t.mjs');
11654
+ const { ServeManager } = await import('./serveManager-C2ykbnxd.mjs');
11638
11655
  const serveManager = new ServeManager(SVAMP_HOME, (msg) => logger.log(`[SERVE] ${msg}`), hyphaServerUrl);
11639
11656
  ensureAutoInstalledSkills(logger).catch(() => {
11640
11657
  });
@@ -13416,6 +13433,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
13416
13433
  }
13417
13434
  if (decision.action === "wake") {
13418
13435
  logger.log(`[Session ${sessionId}] Delivering inbox message to agent`);
13436
+ sessionService.markInboxHandled(message.messageId);
13419
13437
  writeInboundContext(sessionId, { hopCount: message.hopCount ?? 0, threadId: message.threadId || message.messageId });
13420
13438
  sessionService.pushMessage(formatted, "user");
13421
13439
  if (!claudeProcess || claudeProcess.exitCode !== null) {
@@ -13498,11 +13516,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
13498
13516
  });
13499
13517
  },
13500
13518
  onIssue: async (params) => {
13501
- const { issueRpc } = await import('./rpc-BHrZL52o.mjs');
13519
+ const { issueRpc } = await import('./rpc-DgV6_G_Q.mjs');
13502
13520
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner });
13503
13521
  },
13504
13522
  onWorkflow: async (params) => {
13505
- const { workflowRpc } = await import('./rpc-6ftZ30co.mjs');
13523
+ const { workflowRpc } = await import('./rpc-CvpwmghB.mjs');
13506
13524
  return workflowRpc(params?.cwd || directory, params || {});
13507
13525
  },
13508
13526
  onRipgrep: async (args, cwd) => {
@@ -13623,6 +13641,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
13623
13641
  sessionService.updateMetadata(sessionMetadata);
13624
13642
  if (typeof next.inboxHop === "number") {
13625
13643
  writeInboundContext(sessionId, { hopCount: next.inboxHop, threadId: next.inboxThreadId });
13644
+ sessionService.markInboxHandled(next.id);
13626
13645
  }
13627
13646
  logger.log(`[Session ${sessionId}] Processing queued message: "${next.text.slice(0, 50)}..."`);
13628
13647
  sessionWasProcessing = true;
@@ -13898,6 +13917,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
13898
13917
  const wake = decision.action === "wake" && acpBackendReady;
13899
13918
  if (wake) {
13900
13919
  logger.log(`[${agentName} Session ${sessionId}] Delivering inbox message to agent`);
13920
+ sessionService.markInboxHandled(message.messageId);
13901
13921
  writeInboundContext(sessionId, { hopCount: message.hopCount ?? 0, threadId: message.threadId || message.messageId });
13902
13922
  sessionService.pushMessage(formatted, "user");
13903
13923
  sessionMetadata = { ...sessionMetadata, lifecycleState: "running" };
@@ -13928,6 +13948,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
13928
13948
  sessionService.updateMetadata(sessionMetadata);
13929
13949
  if (typeof next.inboxHop === "number") {
13930
13950
  writeInboundContext(sessionId, { hopCount: next.inboxHop, threadId: next.inboxThreadId });
13951
+ sessionService.markInboxHandled(next.id);
13931
13952
  }
13932
13953
  sessionService.pushMessage(next.text, "user");
13933
13954
  sessionService.sendKeepAlive(true);
@@ -13979,6 +14000,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
13979
14000
  const remaining = queue.slice(1);
13980
14001
  sessionMetadata = { ...sessionMetadata, messageQueue: remaining.length > 0 ? remaining : void 0, lifecycleState: "running" };
13981
14002
  sessionService.updateMetadata(sessionMetadata);
14003
+ sessionService.markInboxHandled(next.id);
13982
14004
  logger.log(`[Session ${sessionId}] Processing queued message from metadata update: "${next.text.slice(0, 50)}..."`);
13983
14005
  sessionService.sendKeepAlive(true);
13984
14006
  agentBackend.sendPrompt(sessionId, next.text).catch((err) => {
@@ -14008,11 +14030,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
14008
14030
  });
14009
14031
  },
14010
14032
  onIssue: async (params) => {
14011
- const { issueRpc } = await import('./rpc-BHrZL52o.mjs');
14033
+ const { issueRpc } = await import('./rpc-DgV6_G_Q.mjs');
14012
14034
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner });
14013
14035
  },
14014
14036
  onWorkflow: async (params) => {
14015
- const { workflowRpc } = await import('./rpc-6ftZ30co.mjs');
14037
+ const { workflowRpc } = await import('./rpc-CvpwmghB.mjs');
14016
14038
  return workflowRpc(params?.cwd || directory, params || {});
14017
14039
  },
14018
14040
  onRipgrep: async (args, cwd) => {
@@ -14113,6 +14135,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
14113
14135
  const remaining = queue.slice(1);
14114
14136
  sessionMetadata = { ...sessionMetadata, messageQueue: remaining.length > 0 ? remaining : void 0, lifecycleState: "running" };
14115
14137
  sessionService.updateMetadata(sessionMetadata);
14138
+ sessionService.markInboxHandled(next.id);
14116
14139
  logger.log(`[Session ${sessionId}] Processing queued message (ACP loop activation): "${next.text.slice(0, 50)}..."`);
14117
14140
  sessionService.sendKeepAlive(true);
14118
14141
  agentBackend.sendPrompt(sessionId, next.text).catch((err) => {
@@ -14203,6 +14226,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
14203
14226
  sessionMetadata = { ...sessionMetadata, messageQueue: remaining.length > 0 ? remaining : void 0, lifecycleState: "running" };
14204
14227
  sessionService.updateMetadata(sessionMetadata);
14205
14228
  sessionService.sendKeepAlive(true);
14229
+ sessionService.markInboxHandled(next.id);
14206
14230
  logger.log(`[Session ${sessionId}] Processing queued message: "${next.text.slice(0, 50)}..."`);
14207
14231
  sessionService.pushMessage(next.displayText || next.text, "user");
14208
14232
  agentBackend.sendPrompt(sessionId, next.text).catch((err) => {
@@ -14765,7 +14789,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
14765
14789
  const PING_TIMEOUT_MS = 15e3;
14766
14790
  const POST_RECONNECT_GRACE_MS = 2e4;
14767
14791
  const RECONNECT_JITTER_MS = 2500;
14768
- const { WorkflowScheduler } = await import('./scheduler-BtltL3kB.mjs');
14792
+ const { WorkflowScheduler } = await import('./scheduler-D8Xj2_vB.mjs');
14769
14793
  const workflowScheduler = new WorkflowScheduler({
14770
14794
  projectRoots: () => {
14771
14795
  const dirs = /* @__PURE__ */ new Set();
@@ -15344,4 +15368,4 @@ var run = /*#__PURE__*/Object.freeze({
15344
15368
  writeStopMarker: writeStopMarker
15345
15369
  });
15346
15370
 
15347
- export { buildMachineDeps as $, machineToolsForRole as A, buildMachineTools as B, parseFrontmatter as C, getSkillsServer as D, getSkillsWorkspaceName as E, getSkillsCollectionName as F, fetchWithTimeout as G, searchSkills as H, SKILLS_DIR as I, getSkillInfo as J, downloadSkillFile as K, listSkillFiles as L, resolveModel as M, formatHandle as N, normalizeAllowedUser as O, loadSecurityContextConfig as P, resolveSecurityContext as Q, READ_ONLY_TOOLS as R, ServeAuth as S, buildSecurityContextFromFlags as T, mergeSecurityContexts as U, buildSessionShareUrl as V, computeOutboundHop as W, buildMachineShareUrl as X, parseHandle as Y, handleMatchesMetadata as Z, describeMisconfiguration as _, createSessionStore as a, applyClaudeProxyEnv as a0, composeSessionId as a1, generateFriendlyName as a2, generateHookSettings as a3, claudeAuth as a4, projectInfo as a5, DefaultTransport$1 as a6, acpBackend as a7, acpAgentConfig as a8, codexMcpBackend as a9, GeminiTransport$1 as aa, instanceConfig as ab, api as ac, run as ad, 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, resolveProjectRoot as m, getIssue as n, addComment as o, addIssue as p, listIssues as q, registerMachineService as r, startDaemon as s, searchIssues as t, updateIssue as u, cronMatches as v, summarize as w, shortId as x, loadMachineContext as y, buildMachineInstructions as z };
15371
+ export { describeMisconfiguration as $, buildMachineInstructions as A, machineToolsForRole as B, buildMachineTools as C, parseFrontmatter as D, getSkillsServer as E, getSkillsWorkspaceName as F, getSkillsCollectionName as G, fetchWithTimeout as H, searchSkills as I, SKILLS_DIR as J, getSkillInfo as K, downloadSkillFile as L, listSkillFiles as M, resolveModel as N, formatHandle as O, normalizeAllowedUser as P, loadSecurityContextConfig as Q, READ_ONLY_TOOLS as R, ServeAuth as S, resolveSecurityContext as T, buildSecurityContextFromFlags as U, mergeSecurityContexts as V, buildSessionShareUrl as W, computeOutboundHop as X, buildMachineShareUrl as Y, parseHandle as Z, handleMatchesMetadata as _, createSessionStore as a, buildMachineDeps as a0, applyClaudeProxyEnv as a1, composeSessionId as a2, generateFriendlyName as a3, generateHookSettings as a4, claudeAuth as a5, projectInfo as a6, DefaultTransport$1 as a7, acpBackend as a8, acpAgentConfig as a9, codexMcpBackend as aa, GeminiTransport$1 as ab, instanceConfig as ac, api as ad, run as ae, 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, resolveProjectRoot as m, getIssue as n, addComment as o, addIssue as p, listIssues as q, registerMachineService as r, startDaemon as s, searchIssues as t, updateIssue as u, isVisibleTo as v, cronMatches as w, summarize as x, shortId as y, loadMachineContext as z };
@@ -1,5 +1,5 @@
1
1
  import { spawn } from 'node:child_process';
2
- import { m as resolveProjectRoot, v as cronMatches } from './run-Dn-FEr9q.mjs';
2
+ import { m as resolveProjectRoot, w as cronMatches } from './run-DiCtjIs5.mjs';
3
3
  import { l as listWorkflows, i as isWorkflowEnabled, c as workflowCrons, w as workflowSteps } from './store-DEZ8e-uE.mjs';
4
4
  import 'os';
5
5
  import 'fs/promises';
@@ -54,7 +54,7 @@ async function handleServeCommand() {
54
54
  }
55
55
  }
56
56
  async function serveAdd(args, machineId) {
57
- const { connectAndGetMachine } = await import('./commands-DlKKUqVK.mjs');
57
+ const { connectAndGetMachine } = await import('./commands-B3uk2hcj.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-DlKKUqVK.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-B3uk2hcj.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-DlKKUqVK.mjs');
185
+ const { connectAndGetMachine } = await import('./commands-B3uk2hcj.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-DlKKUqVK.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-B3uk2hcj.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-DlKKUqVK.mjs');
238
+ const { connectAndGetMachine } = await import('./commands-B3uk2hcj.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-Dn-FEr9q.mjs';
7
+ import { k as getHyphaServerUrl, S as ServeAuth, l as hasCookieToken } from './run-DiCtjIs5.mjs';
8
8
  import 'os';
9
9
  import 'fs/promises';
10
10
  import 'url';
@@ -733,7 +733,7 @@ class ServeManager {
733
733
  const mount = this.mounts.get(mountName);
734
734
  const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
735
735
  try {
736
- const { FrpcTunnel } = await import('./frpc-CBDwOpZZ.mjs');
736
+ const { FrpcTunnel } = await import('./frpc-WpRu5zE_.mjs');
737
737
  let tunnel;
738
738
  tunnel = new FrpcTunnel({
739
739
  name: tunnelName,
@@ -1,4 +1,4 @@
1
- import { R as READ_ONLY_TOOLS, y as loadMachineContext, z as buildMachineInstructions, A as machineToolsForRole, B as buildMachineTools } from './run-Dn-FEr9q.mjs';
1
+ import { R as READ_ONLY_TOOLS, z as loadMachineContext, A as buildMachineInstructions, B as machineToolsForRole, C as buildMachineTools } from './run-DiCtjIs5.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.194",
3
+ "version": "0.2.195",
4
4
  "description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
5
5
  "author": "Amun AI AB",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -20,7 +20,7 @@
20
20
  "scripts": {
21
21
  "build": "rm -rf dist bin/skills && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/loop bin/skills/loop && cp -r ../../skills/crew bin/skills/crew && tsc --noEmit && pkgroll",
22
22
  "typecheck": "tsc --noEmit",
23
- "test": "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs",
23
+ "test": "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-loop-activation.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-backend.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs",
24
24
  "test:hypha": "node --no-warnings test/test-hypha-service.mjs",
25
25
  "dev": "tsx src/cli.ts",
26
26
  "dev:daemon": "tsx src/cli.ts daemon start-sync",