svamp-cli 0.2.276 → 0.2.277

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 (27) hide show
  1. package/dist/{agentCommands-DYduijxc.mjs → agentCommands-DN7hb_oL.mjs} +5 -5
  2. package/dist/{auth-DF4dUys9.mjs → auth-Ci70oWRc.mjs} +1 -1
  3. package/dist/{cli-BrZuHfQa.mjs → cli-Cgzvydbh.mjs} +95 -63
  4. package/dist/cli.mjs +2 -2
  5. package/dist/{commands-DINv6746.mjs → commands-BryGjm3r.mjs} +1 -1
  6. package/dist/{commands-DLlgY23R.mjs → commands-CT7m_PBV.mjs} +1 -1
  7. package/dist/{commands-clA49kHW.mjs → commands-CWVq7FHR.mjs} +7 -7
  8. package/dist/{commands-Cxn4Cmts.mjs → commands-Cc2BZW1I.mjs} +8 -7
  9. package/dist/{commands-7WZLaYv2.mjs → commands-CgQ3wXOd.mjs} +2 -2
  10. package/dist/{commands-DvD1mdMU.mjs → commands-Dx-uU1hc.mjs} +2 -2
  11. package/dist/{commands-BjkRYbLw.mjs → commands-KWZkSbXH.mjs} +2 -2
  12. package/dist/{fleet-xyz1ik_N.mjs → fleet-w3MI6ljI.mjs} +2 -2
  13. package/dist/{frpc-BkGcc69x.mjs → frpc-DnxvF_Mx.mjs} +1 -1
  14. package/dist/{headlessCli-Je1q_pDw.mjs → headlessCli-CqxD6lTs.mjs} +2 -2
  15. package/dist/index.mjs +1 -1
  16. package/dist/notifyCommands-D8tYXxPA.mjs +128 -0
  17. package/dist/package-D5iaKvt5.mjs +64 -0
  18. package/dist/{pinnedClaudeCode-D8Tbz32G.mjs → pinnedClaudeCode-BaMR97BE.mjs} +1 -1
  19. package/dist/{rpc-CBa5WaBD.mjs → rpc-BKDKqllr.mjs} +1 -3
  20. package/dist/{rpc-HiJYPcOU.mjs → rpc-BvXiNu-z.mjs} +1 -1
  21. package/dist/{run-DjThStDG.mjs → run-CzXwL-ig.mjs} +98 -22
  22. package/dist/{run-BRHMebDp.mjs → run-pAWQPn46.mjs} +1 -1
  23. package/dist/{scheduler-D1JpZ5m8.mjs → scheduler-D-25wsin.mjs} +1 -1
  24. package/dist/{serveCommands-D-3LtTUy.mjs → serveCommands-DIckIiqD.mjs} +5 -5
  25. package/dist/{sideband-DdcXgJHf.mjs → sideband-Bk0GhfIX.mjs} +1 -1
  26. package/package.json +2 -2
  27. package/dist/package-D3rksT8O.mjs +0 -64
@@ -2973,7 +2973,7 @@ Connection: close\r
2973
2973
  const mount = this.mounts.get(mountName);
2974
2974
  const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
2975
2975
  try {
2976
- const { FrpcTunnel } = await import('./frpc-BkGcc69x.mjs');
2976
+ const { FrpcTunnel } = await import('./frpc-DnxvF_Mx.mjs');
2977
2977
  let tunnel;
2978
2978
  tunnel = new FrpcTunnel({
2979
2979
  name: tunnelName,
@@ -5816,7 +5816,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5816
5816
  const tunnels = handlers.tunnels;
5817
5817
  if (!tunnels) throw new Error("Tunnel management not available");
5818
5818
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
5819
- const { FrpcTunnel } = await import('./frpc-BkGcc69x.mjs');
5819
+ const { FrpcTunnel } = await import('./frpc-DnxvF_Mx.mjs');
5820
5820
  const tunnel = new FrpcTunnel({
5821
5821
  name: params.name,
5822
5822
  ports: params.ports,
@@ -6292,7 +6292,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6292
6292
  }
6293
6293
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
6294
6294
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
6295
- const { toolsForRole } = await import('./sideband-DdcXgJHf.mjs');
6295
+ const { toolsForRole } = await import('./sideband-Bk0GhfIX.mjs');
6296
6296
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
6297
6297
  return fmt(r2);
6298
6298
  }
@@ -6391,7 +6391,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6391
6391
  if (r.error || !r.sender) return { error: r.error || "unauthorized" };
6392
6392
  const callId = "call_" + Math.random().toString(16).slice(2, 12);
6393
6393
  const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
6394
- const { queryCore } = await import('./commands-DINv6746.mjs');
6394
+ const { queryCore } = await import('./commands-BryGjm3r.mjs');
6395
6395
  const timeout = c.reply?.timeout_sec || 120;
6396
6396
  let result;
6397
6397
  try {
@@ -6824,11 +6824,10 @@ function computeRetryDelayMs(attempt, cfg = getRateLimitRetryConfig(), rng = Mat
6824
6824
  }
6825
6825
  function isRetryableRateLimit(text, apiErrorStatus) {
6826
6826
  const t = (text || "").toLowerCase();
6827
- const hardLimit = t.includes("quota") || // The Hypha LLM proxy emits a 429 "Daily spending limit reached Resets
6828
- // at 00:00 UTC. Contact the admin to raise your limit." That is a hard cap
6829
- // that resets at a fixed time / needs human action — NOT a transient
6830
- // upstream throttle. Retrying it 10× just delays surfacing the real error.
6831
- t.includes("spending limit") || t.includes("credit") || t.includes("balance") || t.includes("billing") || t.includes("payment") || t.includes("subscription") || t.includes("1m-context") || t.includes("1m context") || t.includes("insufficient") || t.includes("usage limit") && !t.includes("not your usage limit");
6827
+ const strongHardLimit = t.includes("quota") || t.includes("spending limit") || t.includes("payment") || t.includes("subscription") || t.includes("1m-context") || t.includes("1m context") || t.includes("insufficient") || t.includes("usage limit") && !t.includes("not your usage limit");
6828
+ const serverFaultSignal = typeof apiErrorStatus === "number" && apiErrorStatus >= 500 && apiErrorStatus <= 599 || /\b(500|502|503|504|520|521|522|523|524|529)\b/.test(t);
6829
+ const weakBillingLimit = !serverFaultSignal && (t.includes("credit") || t.includes("balance") || t.includes("billing"));
6830
+ const hardLimit = strongHardLimit || weakBillingLimit;
6832
6831
  if (hardLimit) return false;
6833
6832
  const authIssue = apiErrorStatus === 401 || apiErrorStatus === 403 || t.includes("unauthorized") || t.includes("invalid api key") || t.includes("authentication") || t.includes("forbidden");
6834
6833
  if (authIssue) return false;
@@ -9664,6 +9663,52 @@ class SharingNotificationSync {
9664
9663
  this.log(`[USER EVENT] Failed to publish ${event.type} for ${event.recipientEmail}: ${err.message}`);
9665
9664
  }
9666
9665
  }
9666
+ /**
9667
+ * List user events addressed to `recipientEmail` (the bell inbox), newest first, excluding
9668
+ * expired ones. Reuses the global svamp-user-events collection — cross-workspace by design.
9669
+ * Mirrors the webapp's fetchUserEvents so the CLI reads the same source of truth.
9670
+ */
9671
+ async listUserEvents(recipientEmail) {
9672
+ if (!this.initialized || !this.eventCollectionId) return [];
9673
+ const normalized = recipientEmail.toLowerCase();
9674
+ try {
9675
+ const children = await this.artifactManager.list({
9676
+ parent_id: this.eventCollectionId,
9677
+ _rkwargs: true
9678
+ });
9679
+ if (!Array.isArray(children)) return [];
9680
+ const now = Date.now();
9681
+ return children.map((c) => c?.manifest).filter((m) => !!m && typeof m.recipientEmail === "string" && m.recipientEmail.toLowerCase() === normalized && (!m.expiresAt || m.expiresAt > now)).sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));
9682
+ } catch (err) {
9683
+ this.log(`[USER EVENT] listUserEvents failed for ${recipientEmail}: ${err.message}`);
9684
+ return [];
9685
+ }
9686
+ }
9687
+ /**
9688
+ * Acknowledge (dismiss) a user event by deleting its artifact. The alias is derived from the
9689
+ * event id + recipient email, so only the recipient's own event is removed. Returns true if a
9690
+ * matching event was deleted.
9691
+ */
9692
+ async ackUserEvent(eventId, recipientEmail) {
9693
+ if (!this.initialized || !this.eventCollectionId) return false;
9694
+ const normalized = recipientEmail.toLowerCase();
9695
+ try {
9696
+ const children = await this.artifactManager.list({ parent_id: this.eventCollectionId, _rkwargs: true });
9697
+ if (!Array.isArray(children)) return false;
9698
+ const short = eventId.slice(0, 8);
9699
+ const match = children.find((c) => {
9700
+ const m = c?.manifest;
9701
+ return m && typeof m.id === "string" && (m.id === eventId || m.id.slice(0, 8) === short) && typeof m.recipientEmail === "string" && m.recipientEmail.toLowerCase() === normalized;
9702
+ });
9703
+ if (!match) return false;
9704
+ await this.artifactManager.delete({ artifact_id: match.id, _rkwargs: true });
9705
+ this.log(`[USER EVENT] Acked ${eventId.slice(0, 8)} for ${recipientEmail}`);
9706
+ return true;
9707
+ } catch (err) {
9708
+ this.log(`[USER EVENT] ackUserEvent failed for ${recipientEmail}: ${err.message}`);
9709
+ return false;
9710
+ }
9711
+ }
9667
9712
  // ── Sharing config diff + sync ───────────────────────────────────
9668
9713
  async syncSharing(sessionId, oldSharing, newSharing, context) {
9669
9714
  if (!this.initialized) return;
@@ -11487,7 +11532,13 @@ class CodexAppServerBackend {
11487
11532
  if (avail === false) throw new Error("Installed Codex is too old for app-server \u2014 upgrade to >= 0.100 (`npm i -g @openai/codex@latest`).");
11488
11533
  await this.client.start();
11489
11534
  if (this.opts.resumeThreadId) {
11490
- await this.client.resumeThread({ threadId: this.opts.resumeThreadId, model: this.model, approvalPolicy: this.approvalPolicy, sandbox: this.sandbox });
11535
+ try {
11536
+ await this.client.resumeThread({ threadId: this.opts.resumeThreadId, model: this.model, approvalPolicy: this.approvalPolicy, sandbox: this.sandbox });
11537
+ } catch (err) {
11538
+ this.log(`[Codex] resumeThread(${this.opts.resumeThreadId}) failed (${err?.message ?? err}) \u2014 starting a fresh thread instead (context lost, session preserved)`);
11539
+ const r = await this.client.startThread({ model: this.model, approvalPolicy: this.approvalPolicy, sandbox: this.sandbox });
11540
+ this.model = this.model ?? r.model;
11541
+ }
11491
11542
  } else {
11492
11543
  const r = await this.client.startThread({ model: this.model, approvalPolicy: this.approvalPolicy, sandbox: this.sandbox });
11493
11544
  this.model = this.model ?? r.model;
@@ -16133,7 +16184,7 @@ async function startDaemon(options) {
16133
16184
  try {
16134
16185
  const dir = loadSessionIndex()[sessionId]?.directory;
16135
16186
  if (!dir) return;
16136
- const { reconcileServiceLinks } = await import('./agentCommands-DYduijxc.mjs');
16187
+ const { reconcileServiceLinks } = await import('./agentCommands-DN7hb_oL.mjs');
16137
16188
  const configPath = getSvampConfigPath(dir, sessionId);
16138
16189
  const config = readSvampConfig(configPath);
16139
16190
  const entries = Array.from(urls.entries());
@@ -16151,7 +16202,7 @@ async function startDaemon(options) {
16151
16202
  }
16152
16203
  }
16153
16204
  async function createExposedTunnel(spec) {
16154
- const { FrpcTunnel } = await import('./frpc-BkGcc69x.mjs');
16205
+ const { FrpcTunnel } = await import('./frpc-DnxvF_Mx.mjs');
16155
16206
  const tunnel = new FrpcTunnel({
16156
16207
  name: spec.name,
16157
16208
  ports: spec.ports,
@@ -16179,7 +16230,7 @@ async function startDaemon(options) {
16179
16230
  ensureAutoInstalledCommands(logger);
16180
16231
  (async () => {
16181
16232
  try {
16182
- const { beginClaudeVersionReconcile } = await import('./pinnedClaudeCode-D8Tbz32G.mjs');
16233
+ const { beginClaudeVersionReconcile } = await import('./pinnedClaudeCode-BaMR97BE.mjs');
16183
16234
  beginClaudeVersionReconcile((msg) => logger.log(msg));
16184
16235
  } catch (e) {
16185
16236
  logger.log(`[claude-version] check failed: ${e?.message || e}`);
@@ -18367,11 +18418,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18367
18418
  });
18368
18419
  },
18369
18420
  onIssue: async (params) => {
18370
- const { issueRpc } = await import('./rpc-HiJYPcOU.mjs');
18421
+ const { issueRpc } = await import('./rpc-BvXiNu-z.mjs');
18371
18422
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
18372
18423
  },
18373
18424
  onWorkflow: async (params) => {
18374
- const { workflowRpc } = await import('./rpc-CBa5WaBD.mjs');
18425
+ const { workflowRpc } = await import('./rpc-BKDKqllr.mjs');
18375
18426
  return workflowRpc(params?.cwd || directory, params || {});
18376
18427
  },
18377
18428
  onRipgrep: async (args, cwd) => {
@@ -18983,11 +19034,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18983
19034
  });
18984
19035
  },
18985
19036
  onIssue: async (params) => {
18986
- const { issueRpc } = await import('./rpc-HiJYPcOU.mjs');
19037
+ const { issueRpc } = await import('./rpc-BvXiNu-z.mjs');
18987
19038
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
18988
19039
  },
18989
19040
  onWorkflow: async (params) => {
18990
- const { workflowRpc } = await import('./rpc-CBa5WaBD.mjs');
19041
+ const { workflowRpc } = await import('./rpc-BKDKqllr.mjs');
18991
19042
  return workflowRpc(params?.cwd || directory, params || {});
18992
19043
  },
18993
19044
  onRipgrep: async (args, cwd) => {
@@ -19489,7 +19540,11 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
19489
19540
  "event"
19490
19541
  );
19491
19542
  sessionService.sendSessionEnd();
19492
- deleteSession(sessionId);
19543
+ if (!acpPersisted) {
19544
+ deleteSession(sessionId);
19545
+ } else {
19546
+ logger.log(`[Agent Session ${sessionId}] start failed on restore \u2014 preserving persisted session for a later retry (not deleting)`);
19547
+ }
19493
19548
  });
19494
19549
  return {
19495
19550
  type: "success",
@@ -19631,13 +19686,16 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
19631
19686
  logger.log(`Restored machine metadata (sharing=${!!persistedMachineMeta.sharing}, securityContextConfig=${!!persistedMachineMeta.securityContextConfig}, injectPlatformGuidance=${persistedMachineMeta.injectPlatformGuidance})`);
19632
19687
  }
19633
19688
  let seededSharing = persistedMachineMeta?.sharing;
19689
+ let seedShareNotify = null;
19634
19690
  const seedEmails = parseDaemonShareEmails(process.env[DAEMON_SHARE_EMAILS_ENV]);
19635
19691
  if (seedEmails.length > 0) {
19636
19692
  const ownerEmail = parseJwtEmail(process.env.HYPHA_TOKEN || "") || void 0;
19693
+ const preSeedSharing = seededSharing;
19637
19694
  const result = applyDaemonShareSeed(seededSharing, seedEmails, ownerEmail);
19638
19695
  seededSharing = result.sharing;
19639
19696
  if (result.addedEmails.length > 0) {
19640
19697
  logger.log(`Seeded machine sharing with ${result.addedEmails.length} user(s): ${result.addedEmails.join(", ")}`);
19698
+ if (seededSharing) seedShareNotify = { oldSharing: preSeedSharing, newSharing: seededSharing, added: result.addedEmails };
19641
19699
  } else {
19642
19700
  logger.log(`Daemon --share seed: no new users (all already in allowedUsers).`);
19643
19701
  }
@@ -19674,7 +19732,25 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
19674
19732
  startedAt: Date.now()
19675
19733
  };
19676
19734
  const sharingNotificationSync = new SharingNotificationSync(server, logger.log);
19677
- sharingNotificationSync.init().catch(() => {
19735
+ const seedNotifyWorkspace = server.config.workspace;
19736
+ const seedNotifyClientId = server.config.client_id;
19737
+ sharingNotificationSync.init().then(() => {
19738
+ if (seedShareNotify) {
19739
+ sharingNotificationSync.syncSharing(
19740
+ `machine-${machineId}`,
19741
+ seedShareNotify.oldSharing,
19742
+ seedShareNotify.newSharing,
19743
+ {
19744
+ machineId,
19745
+ machineServiceId: `${seedNotifyWorkspace}/${seedNotifyClientId}:default`,
19746
+ ownerWorkspace: seedNotifyWorkspace,
19747
+ ownerEmail: seedShareNotify.newSharing.owner || "",
19748
+ label: process.env.SVAMP_DISPLAY_NAME || machineId,
19749
+ shareType: "machine"
19750
+ }
19751
+ ).catch((e) => logger.log(`[share-seed] notify failed: ${e?.message || e}`));
19752
+ }
19753
+ }).catch(() => {
19678
19754
  });
19679
19755
  const buildMachineHandlers = () => ({
19680
19756
  spawnSession,
@@ -19880,7 +19956,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
19880
19956
  }
19881
19957
  if (persistedSessions.length > 0) {
19882
19958
  try {
19883
- const { awaitClaudeVersionReady } = await import('./pinnedClaudeCode-D8Tbz32G.mjs');
19959
+ const { awaitClaudeVersionReady } = await import('./pinnedClaudeCode-BaMR97BE.mjs');
19884
19960
  await awaitClaudeVersionReady();
19885
19961
  } catch {
19886
19962
  }
@@ -20077,7 +20153,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
20077
20153
  const PING_TIMEOUT_MS = 15e3;
20078
20154
  const POST_RECONNECT_GRACE_MS = 2e4;
20079
20155
  const RECONNECT_JITTER_MS = 2500;
20080
- const { WorkflowScheduler } = await import('./scheduler-D1JpZ5m8.mjs');
20156
+ const { WorkflowScheduler } = await import('./scheduler-D-25wsin.mjs');
20081
20157
  const workflowScheduler = new WorkflowScheduler({
20082
20158
  projectRoots: () => {
20083
20159
  const dirs = /* @__PURE__ */ new Set();
@@ -20700,4 +20776,4 @@ var run = /*#__PURE__*/Object.freeze({
20700
20776
  writeStopMarker: writeStopMarker
20701
20777
  });
20702
20778
 
20703
- export { formatHandle as $, removeWorkflow as A, saveWorkflow as B, rawWorkflow as C, listWorkflows as D, isWorkflowEnabled as E, workflowCrons as F, cronMatches as G, summarize as H, workflowSteps as I, loadMachineContext as J, buildMachineInstructions as K, machineToolsForRole as L, buildMachineTools as M, parseFrontmatter as N, getSkillsServer as O, getSkillsWorkspaceName as P, getSkillsCollectionName as Q, READ_ONLY_TOOLS as R, fetchWithTimeout as S, searchSkills as T, SKILLS_DIR as U, getSkillInfo as V, downloadSkillFile as W, listSkillFiles as X, resolveModel as Y, clearStopMarker as Z, stopMarkerExists as _, createSessionStore as a, normalizeAllowedUser as a0, loadSecurityContextConfig as a1, resolveSecurityContext as a2, buildSecurityContextFromFlags as a3, mergeSecurityContexts as a4, buildSessionShareUrl as a5, computeOutboundHop as a6, registerAwaitingReply as a7, buildMachineShareUrl as a8, parseHandle as a9, handleMatchesMetadata as aa, describeMisconfiguration as ab, buildMachineDeps as ac, applyClaudeProxyEnv as ad, composeSessionId as ae, generateFriendlyName as af, generateHookSettings as ag, staticFileServer as ah, instanceConfig as ai, claudeAuth as aj, codexProvider as ak, projectInfo as al, DefaultTransport$1 as am, acpBackend as an, acpAgentConfig as ao, codexAppServerBackend as ap, GeminiTransport$1 as aq, api as ar, run as as, stopDaemon as b, connectToHypha as c, daemonStatus as d, getFrpsSubdomainHost as e, getFrpsServerPort as f, getHyphaServerUrl$1 as g, getFrpsServerAddr as h, shortId as i, resolveProjectRoot as j, getIssue as k, resumeIssue as l, addComment as m, addIssue as n, listIssues as o, pauseIssue as p, searchIssues as q, registerMachineService as r, startDaemon as s, isVisibleTo as t, updateIssue as u, getRun as v, listRuns as w, getWorkflow as x, runWorkflow as y, setWorkflowEnabled as z };
20779
+ export { clearStopMarker as $, removeWorkflow as A, saveWorkflow as B, rawWorkflow as C, listWorkflows as D, isWorkflowEnabled as E, workflowCrons as F, cronMatches as G, summarize as H, workflowSteps as I, parseJwtEmail as J, loadMachineContext as K, buildMachineInstructions as L, machineToolsForRole as M, buildMachineTools as N, parseFrontmatter as O, getSkillsServer as P, getSkillsWorkspaceName as Q, READ_ONLY_TOOLS as R, SharingNotificationSync as S, getSkillsCollectionName as T, fetchWithTimeout as U, searchSkills as V, SKILLS_DIR as W, getSkillInfo as X, downloadSkillFile as Y, listSkillFiles as Z, resolveModel as _, createSessionStore as a, stopMarkerExists as a0, formatHandle as a1, normalizeAllowedUser as a2, loadSecurityContextConfig as a3, resolveSecurityContext as a4, buildSecurityContextFromFlags as a5, mergeSecurityContexts as a6, buildSessionShareUrl as a7, computeOutboundHop as a8, registerAwaitingReply as a9, buildMachineShareUrl as aa, parseHandle as ab, handleMatchesMetadata as ac, describeMisconfiguration as ad, buildMachineDeps as ae, applyClaudeProxyEnv as af, composeSessionId as ag, generateFriendlyName as ah, generateHookSettings as ai, staticFileServer as aj, instanceConfig as ak, claudeAuth as al, codexProvider as am, projectInfo as an, DefaultTransport$1 as ao, acpBackend as ap, acpAgentConfig as aq, codexAppServerBackend as ar, GeminiTransport$1 as as, api as at, run as au, stopDaemon as b, connectToHypha as c, daemonStatus as d, getFrpsSubdomainHost as e, getFrpsServerPort as f, getHyphaServerUrl$1 as g, getFrpsServerAddr as h, shortId as i, resolveProjectRoot as j, getIssue as k, resumeIssue as l, addComment as m, addIssue as n, listIssues as o, pauseIssue as p, searchIssues as q, registerMachineService as r, startDaemon as s, isVisibleTo as t, updateIssue as u, getRun as v, listRuns as w, getWorkflow as x, runWorkflow as y, setWorkflowEnabled as z };
@@ -1,4 +1,4 @@
1
- import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ad as applyClaudeProxyEnv, ae as composeSessionId, af as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ag as generateHookSettings } from './run-DjThStDG.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { af as applyClaudeProxyEnv, ag as composeSessionId, ah as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ai as generateHookSettings } from './run-CzXwL-ig.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';
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-DjThStDG.mjs';
1
+ import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-CzXwL-ig.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-DINv6746.mjs');
57
+ const { connectAndGetMachine } = await import('./commands-BryGjm3r.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-DINv6746.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-BryGjm3r.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-DINv6746.mjs');
185
+ const { connectAndGetMachine } = await import('./commands-BryGjm3r.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-DINv6746.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-BryGjm3r.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-DINv6746.mjs');
238
+ const { connectAndGetMachine } = await import('./commands-BryGjm3r.mjs');
239
239
  const { machine, server } = await connectAndGetMachine(machineId);
240
240
  try {
241
241
  const info = await machine.serveInfo();
@@ -1,4 +1,4 @@
1
- import { R as READ_ONLY_TOOLS, J as loadMachineContext, K as buildMachineInstructions, L as machineToolsForRole, M as buildMachineTools } from './run-DjThStDG.mjs';
1
+ import { R as READ_ONLY_TOOLS, K as loadMachineContext, L as buildMachineInstructions, M as machineToolsForRole, N as buildMachineTools } from './run-CzXwL-ig.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.276",
3
+ "version": "0.2.277",
4
4
  "description": "Svamp CLI — AI workspace daemon on Hypha Cloud",
5
5
  "author": "Amun AI AB",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -20,7 +20,7 @@
20
20
  "scripts": {
21
21
  "build": "rm -rf dist bin/skills bin/commands && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/crew bin/skills/crew && cp -r ../../commands bin/commands && tsc --noEmit && pkgroll",
22
22
  "typecheck": "tsc --noEmit",
23
- "test": "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-inbox-reconcile.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-isolation-disable.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-compact-detect.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs",
23
+ "test": "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-user-events.mjs && npx tsx test/test-inbox-reconcile.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-isolation-disable.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-compact-detect.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs",
24
24
  "test:hypha": "node --no-warnings test/test-hypha-service.mjs",
25
25
  "dev": "tsx src/cli.ts",
26
26
  "dev:daemon": "tsx src/cli.ts daemon start-sync",
@@ -1,64 +0,0 @@
1
- var name = "svamp-cli";
2
- var version = "0.2.276";
3
- var description = "Svamp CLI — AI workspace daemon on Hypha Cloud";
4
- var author = "Amun AI AB";
5
- var license = "SEE LICENSE IN LICENSE";
6
- var type = "module";
7
- var bin = {
8
- svamp: "./bin/svamp.mjs"
9
- };
10
- var files = [
11
- "dist",
12
- "bin"
13
- ];
14
- var main = "./dist/index.mjs";
15
- var exports$1 = {
16
- ".": "./dist/index.mjs",
17
- "./cli": "./dist/cli.mjs"
18
- };
19
- var scripts = {
20
- build: "rm -rf dist bin/skills bin/commands && mkdir -p bin/skills && cp -r ../../skills/artifact bin/skills/artifact && cp -r ../../skills/crew bin/skills/crew && cp -r ../../commands bin/commands && tsc --noEmit && pkgroll",
21
- typecheck: "tsc --noEmit",
22
- test: "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-inbox-reconcile.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-isolation-disable.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-compact-detect.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs",
23
- "test:hypha": "node --no-warnings test/test-hypha-service.mjs",
24
- dev: "tsx src/cli.ts",
25
- "dev:daemon": "tsx src/cli.ts daemon start-sync",
26
- "test:e2e": "node --no-warnings test/e2e-session-tests.mjs",
27
- "test:frpc": "npx tsx test/test-frpc-e2e.mjs",
28
- prepublishOnly: "yarn build"
29
- };
30
- var dependencies = {
31
- "@agentclientprotocol/sdk": "^0.14.1",
32
- "@modelcontextprotocol/sdk": "^1.25.3",
33
- "hypha-rpc": "0.21.42",
34
- "node-pty": "1.2.0-beta.11",
35
- ws: "^8.18.0",
36
- yaml: "^2.8.2",
37
- zod: "^3.24.4"
38
- };
39
- var devDependencies = {
40
- "@types/node": ">=20",
41
- "@types/ws": "^8.5.14",
42
- pkgroll: "^2.14.2",
43
- tsx: "^4.20.6",
44
- typescript: "5.9.3"
45
- };
46
- var packageManager = "yarn@1.22.22";
47
- var _package = {
48
- name: name,
49
- version: version,
50
- description: description,
51
- author: author,
52
- license: license,
53
- type: type,
54
- bin: bin,
55
- files: files,
56
- main: main,
57
- exports: exports$1,
58
- scripts: scripts,
59
- dependencies: dependencies,
60
- devDependencies: devDependencies,
61
- packageManager: packageManager
62
- };
63
-
64
- export { author, bin, _package as default, dependencies, description, devDependencies, exports$1 as exports, files, license, main, name, packageManager, scripts, type, version };