svamp-cli 0.2.290 → 0.2.292

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 (28) hide show
  1. package/dist/{adminCommands-BVvpkVsG.mjs → adminCommands-DZDRGNg5.mjs} +1 -1
  2. package/dist/{agentCommands-fY4keaFA.mjs → agentCommands-C8fAJdhs.mjs} +5 -5
  3. package/dist/{auth-SR7v-8nf.mjs → auth-BcmQVP7H.mjs} +1 -1
  4. package/dist/{cli-Re14H3q0.mjs → cli-DqZdmrNJ.mjs} +69 -69
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-Dc9t_OeY.mjs → commands-B3Acrzyp.mjs} +1 -1
  7. package/dist/{commands-CIyv2Qt-.mjs → commands-BKN7en3Q.mjs} +82 -47
  8. package/dist/{commands-BC-T6wDo.mjs → commands-BV6eWyZm.mjs} +2 -2
  9. package/dist/{commands-Bv5EcsN_.mjs → commands-BvOBPesf.mjs} +1 -1
  10. package/dist/{commands-Dwf-ntY-.mjs → commands-CHMIhR_z.mjs} +2 -2
  11. package/dist/{commands-Dd-6WXYJ.mjs → commands-CnQoA3D_.mjs} +7 -7
  12. package/dist/{commands-zagci6-n.mjs → commands-DDYqDSA9.mjs} +1 -1
  13. package/dist/{commands-CBsV6z9K.mjs → commands-b2t_sFjj.mjs} +2 -2
  14. package/dist/{fleet-DlRlerEG.mjs → fleet-BEjbxK8s.mjs} +1 -1
  15. package/dist/{frpc-B8zTErxt.mjs → frpc-F3PT4R-9.mjs} +1 -1
  16. package/dist/{headlessCli-D22LyDyO.mjs → headlessCli-Bkx9H3P2.mjs} +2 -2
  17. package/dist/index.mjs +1 -1
  18. package/dist/{notifyCommands-5PueOg8Q.mjs → notifyCommands-D2pL7Uve.mjs} +1 -1
  19. package/dist/package-8OT2tFxF.mjs +64 -0
  20. package/dist/{rpc-D3Hg4y67.mjs → rpc-DZaN--oa.mjs} +1 -1
  21. package/dist/{rpc-olai-LcU.mjs → rpc-DpWUJeq7.mjs} +1 -1
  22. package/dist/{run-BNiSOlBf.mjs → run-BXpQa5EA.mjs} +102 -16
  23. package/dist/{run-B6V1wuT6.mjs → run-MIZ1GTno.mjs} +1 -1
  24. package/dist/{scheduler--MbVadb0.mjs → scheduler-iPV9ceRR.mjs} +1 -1
  25. package/dist/{serveCommands-BONMg_af.mjs → serveCommands-Bzzb-Cg2.mjs} +5 -5
  26. package/dist/{sideband-Dnuy9-IL.mjs → sideband-mqmkDL0V.mjs} +1 -1
  27. package/package.json +46 -46
  28. package/dist/package-CpmmajAP.mjs +0 -64
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { execSync } from 'node:child_process';
3
3
  import { join } from 'node:path';
4
4
  import os from 'node:os';
5
- import { a3 as ChannelStore, a4 as gatewayBase, a5 as genKey } from './run-BNiSOlBf.mjs';
5
+ import { H as buildOutpostInstall, I as ChannelStore, J as DEFAULT_OUTPOST_DOWNLOAD_BASE, K as setupOutpostChannel } from './run-BXpQa5EA.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -21,24 +21,6 @@ import 'node:fs/promises';
21
21
  import 'node:util';
22
22
  import 'yaml';
23
23
 
24
- const DEFAULT_DOWNLOAD_BASE = "https://github.com/amun-ai/hypha-cloud/releases/latest/download";
25
- function shq(v) {
26
- return `'${String(v).replace(/'/g, `'\\''`)}'`;
27
- }
28
- function psq(v) {
29
- return `'${String(v).replace(/'/g, `''`)}'`;
30
- }
31
- function buildOutpostInstall(params) {
32
- const base = params.serverBase.replace(/\/$/, "");
33
- const dl = (params.downloadBase || DEFAULT_DOWNLOAD_BASE).replace(/\/$/, "");
34
- const session = params.session || params.channel;
35
- const q = `channel=${encodeURIComponent(params.channel)}&token=${encodeURIComponent(params.token)}&session=${encodeURIComponent(session)}&dl=${encodeURIComponent(dl)}`;
36
- const unix = `curl -fsSL ${shq(`${base}/outpost/install.sh?${q}`)} | SVAMP_OUTPOST_SERVER=${shq(base)} SVAMP_OUTPOST_CHANNEL=${shq(params.channel)} SVAMP_OUTPOST_TOKEN=${shq(params.token)} SVAMP_OUTPOST_SESSION=${shq(session)} sh`;
37
- const windows = `$env:SVAMP_OUTPOST_SERVER=${psq(base)}; $env:SVAMP_OUTPOST_CHANNEL=${psq(params.channel)}; $env:SVAMP_OUTPOST_TOKEN=${psq(params.token)}; $env:SVAMP_OUTPOST_SESSION=${psq(session)}; irm ${psq(`${base}/outpost/install.ps1?${q}`)} | iex`;
38
- const direct = `svamp-outpost --server ${shq(base)} --channel ${shq(params.channel)} --token ${shq(params.token)} --session ${shq(session)}`;
39
- return { unix, windows, direct };
40
- }
41
-
42
24
  function loadConfig() {
43
25
  const p = join(os.homedir(), ".svamp", "outpost.json");
44
26
  if (!existsSync(p)) return null;
@@ -76,6 +58,36 @@ function projectDir() {
76
58
  return process.cwd();
77
59
  }
78
60
  }
61
+ function remotesPath() {
62
+ return join(os.homedir(), ".svamp", "outpost-remotes.json");
63
+ }
64
+ function loadRemotes() {
65
+ try {
66
+ return JSON.parse(readFileSync(remotesPath(), "utf8"));
67
+ } catch {
68
+ return {};
69
+ }
70
+ }
71
+ function rememberRemote(channel, id, targeted = false) {
72
+ const all = loadRemotes();
73
+ const ch = all[channel] ||= {};
74
+ const now = (/* @__PURE__ */ new Date()).toISOString();
75
+ ch[id] = { firstSeen: ch[id]?.firstSeen || now, ...targeted ? { lastTargeted: now } : ch[id]?.lastTargeted ? { lastTargeted: ch[id].lastTargeted } : {} };
76
+ try {
77
+ writeFileSync(remotesPath(), JSON.stringify(all, null, 2));
78
+ } catch {
79
+ }
80
+ }
81
+ function forgetRemote(channel, id) {
82
+ const all = loadRemotes();
83
+ if (!all[channel]?.[id]) return false;
84
+ delete all[channel][id];
85
+ try {
86
+ writeFileSync(remotesPath(), JSON.stringify(all, null, 2));
87
+ } catch {
88
+ }
89
+ return true;
90
+ }
79
91
  async function outpostUp(args) {
80
92
  const session = process.env.SVAMP_SESSION_ID;
81
93
  if (!session) {
@@ -89,28 +101,10 @@ async function outpostUp(args) {
89
101
  console.error("Could not resolve workspace/machine (HYPHA_WORKSPACE / daemon.state.json).");
90
102
  process.exit(1);
91
103
  }
92
- const channelsServiceId = `${workspace}/${mid}:channels`;
93
- const gw = gatewayBase(channelsServiceId, serverUrl);
94
- const channelId = `outpost-${session}`;
95
- const store = new ChannelStore(projectDir());
96
- const existing = store.get(channelId);
97
- let token = existing?.identity?.callers?.find((c) => c.name === "outpost")?.key;
98
- if (!token) token = genKey();
99
- const channel = {
100
- id: channelId,
101
- name: `Remote outpost \u2014 ${session}`,
102
- description: "FDE remote machine: a svamp-outpost binary connects here and the agent runs commands on it.",
103
- enabled: true,
104
- bind: { session },
105
- identity: { mode: "per-key", callers: [{ name: "outpost", kind: "agent", key: token }] },
106
- action: { kind: "message" },
107
- reply: { mode: "queue" },
108
- skill: { name: "remote-outpost", description: "Run commands on the connected remote machine." }
109
- };
110
- store.save(channel);
111
- const dl = argVal(args, "--download-base") || envVar("SVAMP_OUTPOST_DL") || "https://static-outpost-bin-08c08c38.svc.hypha.aicell.io";
104
+ const dl = argVal(args, "--download-base") || envVar("SVAMP_OUTPOST_DL") || DEFAULT_OUTPOST_DOWNLOAD_BASE;
105
+ const info = setupOutpostChannel({ session, projectDir: projectDir(), channelsServiceId: `${workspace}/${mid}:channels`, serverUrl, downloadBase: dl });
106
+ const { channelId, token, serverBase: gw, install: gen } = info;
112
107
  saveConfig({ control: "", serverBase: gw, serveBase: dl, token, channel: channelId, session });
113
- const gen = buildOutpostInstall({ serverBase: gw, channel: channelId, token, session, downloadBase: dl });
114
108
  console.log(`\u2713 outpost channel ready for session ${session} (channel "${channelId}", gateway transport)
115
109
  `);
116
110
  console.log("Give this to the person at the remote machine:\n");
@@ -141,11 +135,20 @@ function usage() {
141
135
 
142
136
  svamp outpost up Create this session's outpost channel + print the install command
143
137
 
138
+ svamp outpost list List the outposts (machines) connected to this session
144
139
  svamp outpost status Show connected remotes + counts
145
- svamp outpost exec "<command>" Run a shell command on the connected remote, print its output
140
+ svamp outpost exec [--machine <id>] "<command>"
141
+ Run a shell command on one outpost (--machine <id>) or, with no
142
+ --machine, broadcast to every connected outpost. Output arrives
143
+ as chat messages. Each outpost's id is shown in its connect banner.
144
+ svamp outpost forget <id> Drop a machine id from the local list
146
145
  svamp outpost logs [--json] Show everything the remote(s) have sent back
147
146
  svamp outpost install [--os <os>] Print the install one-liner(s) for the current outpost setup
148
147
 
148
+ With several machines connected, target each by id, e.g.:
149
+ svamp outpost exec --machine build-mac "uname -a"
150
+ svamp outpost exec "hostname" # runs on ALL connected outposts
151
+
149
152
  Reads the relay control endpoint from ~/.svamp/outpost.json (or pass --control <url>).`);
150
153
  }
151
154
  async function outpostCommand(args) {
@@ -178,22 +181,54 @@ async function outpostCommand(args) {
178
181
  }
179
182
  const gateway = !!cfg?.serverBase && /\/services\/[^/]*:channels/.test(cfg.serverBase);
180
183
  if (sub === "exec" && gateway) {
181
- const cmd = args.slice(1).join(" ").trim();
184
+ const target = argVal(args, "--machine") || argVal(args, "-m");
185
+ const cmd = args.slice(1).filter((a, i, arr) => a !== "--machine" && a !== "-m" && arr[i - 1] !== "--machine" && arr[i - 1] !== "-m").join(" ").trim();
182
186
  if (!cmd) {
183
- console.error('usage: svamp outpost exec "<command>"');
187
+ console.error('usage: svamp outpost exec [--machine <id>] "<command>"');
184
188
  process.exit(1);
185
189
  }
186
- const { ChannelOutbox } = await import('./run-BNiSOlBf.mjs').then(function (n) { return n.as; });
190
+ const { ChannelOutbox } = await import('./run-BXpQa5EA.mjs').then(function (n) { return n.at; });
187
191
  const outbox = new ChannelOutbox(projectDir());
188
192
  const id = "x" + Date.now().toString(36);
189
- outbox.append(cfg.channel, { to: "outpost", body: JSON.stringify({ type: "exec", id, cmd }) });
190
- console.log(`Sent to the remote (channel ${cfg.channel}). Its output arrives as a message in this session shortly.`);
193
+ outbox.append(cfg.channel, { to: "outpost", body: JSON.stringify({ type: "exec", id, cmd, target: target || "" }) });
194
+ if (target) rememberRemote(cfg.channel, target, true);
195
+ console.log(target ? `Sent to outpost "${target}" (channel ${cfg.channel}). Its output arrives as a message in this session shortly.` : `Broadcast to all connected outposts (channel ${cfg.channel}). Output from each arrives as a message shortly. Use --machine <id> to target one.`);
196
+ return;
197
+ }
198
+ if (sub === "list" && gateway) {
199
+ const ch = new ChannelStore(projectDir()).get(cfg.channel);
200
+ const calls = (ch?.last_calls || []).filter((c) => c.sender === "outpost");
201
+ const known = loadRemotes()[cfg.channel] || {};
202
+ const ids = Object.keys(known);
203
+ if (!ids.length && !calls.length) {
204
+ console.log(`No outposts known yet on ${cfg.channel}. When one connects it announces itself in this session's chat as \u{1F5A5}\uFE0F outpost "<id>" connected \u2014 then target it with: svamp outpost exec --machine <id> "\u2026"`);
205
+ return;
206
+ }
207
+ console.log(`Outposts addressed from session ${cfg.session || cfg.channel} (each connect banner in chat confirms which are live):`);
208
+ for (const id of ids) {
209
+ const r = known[id];
210
+ console.log(` \u2022 ${id}${r.lastTargeted ? ` (last targeted ${r.lastTargeted})` : " (seen)"}`);
211
+ }
212
+ if (calls.length) console.log(` channel activity: ${calls.length} recent message(s); last at ${calls[0]?.at}`);
213
+ if (!ids.length) console.log(" (no machine ids recorded yet \u2014 the connect banner in chat shows each outpost's id)");
214
+ console.log(" Drop a stale id with: svamp outpost forget <id>");
215
+ return;
216
+ }
217
+ if ((sub === "forget" || sub === "remove") && gateway) {
218
+ const id = args[1];
219
+ if (!id) {
220
+ console.error("usage: svamp outpost forget <machine-id>");
221
+ process.exit(1);
222
+ }
223
+ console.log(forgetRemote(cfg.channel, id) ? `Forgot outpost "${id}".` : `No such outpost "${id}" recorded.`);
191
224
  return;
192
225
  }
193
226
  if (sub === "status" && gateway) {
194
227
  const ch = new ChannelStore(projectDir()).get(cfg.channel);
195
228
  const calls = (ch?.last_calls || []).filter((c) => c.sender === "outpost");
196
- console.log(calls.length ? `outpost active on ${cfg.channel} \u2014 ${calls.length} recent message(s); last at ${calls[0]?.at}` : `no outpost has connected to ${cfg.channel} yet`);
229
+ const ids = Object.keys(loadRemotes()[cfg.channel] || {});
230
+ const who = ids.length ? ` \u2014 known machines: ${ids.join(", ")}` : "";
231
+ console.log(calls.length ? `outpost active on ${cfg.channel} \u2014 ${calls.length} recent message(s); last at ${calls[0]?.at}${who}` : `no outpost has connected to ${cfg.channel} yet`);
197
232
  return;
198
233
  }
199
234
  if (sub === "logs" && gateway) {
@@ -1,8 +1,8 @@
1
1
  import { execSync } from 'node:child_process';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
- import { f as flushAndExit } from './cli-Re14H3q0.mjs';
5
- import { j as resolveProjectRoot, q as searchIssues, o as listIssues, l as resumeIssue, p as pauseIssue, m as addComment, u as updateIssue, k as getIssue, t as isVisibleTo, H as summarize, n as addIssue } from './run-BNiSOlBf.mjs';
4
+ import { f as flushAndExit } from './cli-DqZdmrNJ.mjs';
5
+ import { j as resolveProjectRoot, q as searchIssues, o as listIssues, l as resumeIssue, p as pauseIssue, m as addComment, u as updateIssue, k as getIssue, t as isVisibleTo, L as summarize, n as addIssue } from './run-BXpQa5EA.mjs';
6
6
  import './serviceManager-hlOVxkhW.mjs';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -1,7 +1,7 @@
1
1
  import os from 'os';
2
2
  import fs__default from 'fs';
3
3
  import { resolve, join, relative } from 'path';
4
- import { Q as parseFrontmatter, T as getSkillsServer, U as getSkillsWorkspaceName, V as getSkillsCollectionName, W as fetchWithTimeout, X as searchSkills, Y as SKILLS_DIR, Z as getSkillInfo, _ as downloadSkillFile, $ as listSkillFiles } from './run-BNiSOlBf.mjs';
4
+ import { W as parseFrontmatter, X as getSkillsServer, Y as getSkillsWorkspaceName, Z as getSkillsCollectionName, _ as fetchWithTimeout, $ as searchSkills, a0 as SKILLS_DIR, a1 as getSkillInfo, a2 as downloadSkillFile, a3 as listSkillFiles } from './run-BXpQa5EA.mjs';
5
5
  import 'fs/promises';
6
6
  import 'url';
7
7
  import 'child_process';
@@ -1,8 +1,8 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
- import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-Dc9t_OeY.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-B3Acrzyp.mjs';
4
4
  import { execFileSync } from 'node:child_process';
5
- import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-BNiSOlBf.mjs';
5
+ import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-BXpQa5EA.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -60,7 +60,7 @@ async function serviceExpose(args) {
60
60
  process.exit(1);
61
61
  }
62
62
  if (foreground) {
63
- const { runFrpcTunnel } = await import('./frpc-B8zTErxt.mjs');
63
+ const { runFrpcTunnel } = await import('./frpc-F3PT4R-9.mjs');
64
64
  await runFrpcTunnel(name, ports, void 0, {
65
65
  group,
66
66
  groupKey,
@@ -70,7 +70,7 @@ async function serviceExpose(args) {
70
70
  });
71
71
  return;
72
72
  }
73
- const { connectAndGetMachine } = await import('./commands-Dc9t_OeY.mjs');
73
+ const { connectAndGetMachine } = await import('./commands-B3Acrzyp.mjs');
74
74
  const { server, machine } = await connectAndGetMachine();
75
75
  try {
76
76
  const status = await machine.tunnelStart({
@@ -92,7 +92,7 @@ async function serviceExpose(args) {
92
92
  console.log(` port ${port}: ${url}`);
93
93
  }
94
94
  if (process.env.SVAMP_SESSION_ID) {
95
- const { autoAddSessionLink } = await import('./agentCommands-fY4keaFA.mjs');
95
+ const { autoAddSessionLink } = await import('./agentCommands-C8fAJdhs.mjs');
96
96
  let added = 0;
97
97
  for (const [port, url] of urlEntries) {
98
98
  const label = urlEntries.length > 1 ? `${name}:${port}` : name;
@@ -129,7 +129,7 @@ async function serviceServe(args) {
129
129
  console.log(`Serving ${resolvedDir}`);
130
130
  const servePort = 18080;
131
131
  const http = await import('http');
132
- const { serveStaticMount } = await import('./run-BNiSOlBf.mjs').then(function (n) { return n.ao; });
132
+ const { serveStaticMount } = await import('./run-BXpQa5EA.mjs').then(function (n) { return n.ap; });
133
133
  const server = http.createServer((req, res) => {
134
134
  const u = new URL(req.url || "/", "http://127.0.0.1");
135
135
  let rel = u.pathname;
@@ -140,7 +140,7 @@ async function serviceServe(args) {
140
140
  server.once("error", reject);
141
141
  server.listen(servePort, "127.0.0.1", () => resolve());
142
142
  });
143
- const { runFrpcTunnel } = await import('./frpc-B8zTErxt.mjs');
143
+ const { runFrpcTunnel } = await import('./frpc-F3PT4R-9.mjs');
144
144
  void server;
145
145
  await runFrpcTunnel(name, [servePort]);
146
146
  } catch (err) {
@@ -150,7 +150,7 @@ async function serviceServe(args) {
150
150
  }
151
151
  async function serviceList(_args) {
152
152
  try {
153
- const { connectAndGetMachine } = await import('./commands-Dc9t_OeY.mjs');
153
+ const { connectAndGetMachine } = await import('./commands-B3Acrzyp.mjs');
154
154
  const { server, machine } = await connectAndGetMachine();
155
155
  try {
156
156
  const tunnels = await machine.tunnelList({});
@@ -190,7 +190,7 @@ async function serviceDelete(args) {
190
190
  process.exit(1);
191
191
  }
192
192
  try {
193
- const { connectAndGetMachine } = await import('./commands-Dc9t_OeY.mjs');
193
+ const { connectAndGetMachine } = await import('./commands-B3Acrzyp.mjs');
194
194
  const { server, machine } = await connectAndGetMachine();
195
195
  try {
196
196
  await machine.tunnelStop({ name });
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from 'node:child_process';
2
- import { j as resolveProjectRoot, I as workflowSteps, z as setWorkflowEnabled, E as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, D as listWorkflows, B as saveWorkflow, C as rawWorkflow } from './run-BNiSOlBf.mjs';
2
+ import { j as resolveProjectRoot, M as workflowSteps, z as setWorkflowEnabled, E as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, D as listWorkflows, B as saveWorkflow, C as rawWorkflow } from './run-BXpQa5EA.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  import 'fs';
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands-Dc9t_OeY.mjs';
3
+ import { connectAndGetMachine } from './commands-B3Acrzyp.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-BNiSOlBf.mjs';
8
+ import './run-BXpQa5EA.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';
@@ -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-BNiSOlBf.mjs';
4
+ import { c as connectToHypha } from './run-BXpQa5EA.mjs';
5
5
  import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-BaMR97BE.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
@@ -4,7 +4,7 @@ import { mkdirSync, chmodSync, writeFileSync, unlinkSync, existsSync, readFileSy
4
4
  import { join } from 'path';
5
5
  import { homedir, platform, arch } from 'os';
6
6
  import { randomUUID, createHash } from 'crypto';
7
- import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-BNiSOlBf.mjs';
7
+ import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-BXpQa5EA.mjs';
8
8
  import 'fs/promises';
9
9
  import 'url';
10
10
  import 'node:crypto';
@@ -1,5 +1,5 @@
1
- import { a0 as resolveModel, ai as describeMisconfiguration, aj as buildMachineDeps } from './run-BNiSOlBf.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-Dnuy9-IL.mjs';
1
+ import { a4 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-BXpQa5EA.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-mqmkDL0V.mjs';
3
3
  import { WebSocket } from 'ws';
4
4
  import { execSync, spawn } from 'child_process';
5
5
  import 'os';
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { c as connectToHypha, a as createSessionStore, d as daemonStatus, g as getHyphaServerUrl, r as registerMachineService, s as startDaemon, b as stopDaemon } from './run-BNiSOlBf.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-BXpQa5EA.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { c as connectToHypha, S as SharingNotificationSync, J as parseJwtEmail } from './run-BNiSOlBf.mjs';
1
+ import { c as connectToHypha, S as SharingNotificationSync, N as parseJwtEmail } from './run-BXpQa5EA.mjs';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { existsSync, readFileSync } from 'node:fs';
4
4
  import { join } from 'node:path';
@@ -0,0 +1,64 @@
1
+ var name = "svamp-cli";
2
+ var version = "0.2.292";
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-codex-force-model.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-migrate-children.mjs && npx tsx test/test-outpost-install.mjs && npx tsx test/test-outpost-setup.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-restore-decision.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-stateless-dispatch-limiter.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-artifact-sync-pagination.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 };
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as saveWorkflow, C as rawWorkflow, D as listWorkflows } from './run-BNiSOlBf.mjs';
1
+ import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as saveWorkflow, C as rawWorkflow, D as listWorkflows } from './run-BXpQa5EA.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-BNiSOlBf.mjs';
1
+ import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-BXpQa5EA.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';