svamp-cli 0.2.291 → 0.2.293

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-DuA0IQ8B.mjs → adminCommands-BScS0gcw.mjs} +1 -1
  2. package/dist/{agentCommands-CoPsnzwK.mjs → agentCommands-Ct_y-kUT.mjs} +5 -5
  3. package/dist/{auth-Dj_Pcii4.mjs → auth-larVCkSe.mjs} +1 -1
  4. package/dist/{cli-CuzIOUig.mjs → cli-CFNupfRe.mjs} +69 -69
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-B9puiDBS.mjs → commands-1FEhmtlI.mjs} +5 -41
  7. package/dist/{commands-kahqMkYE.mjs → commands-Ba3H8r0_.mjs} +7 -7
  8. package/dist/{commands-eBqn9KgI.mjs → commands-BeHqLet1.mjs} +1 -1
  9. package/dist/{commands-B-VYM4sA.mjs → commands-BuYofggg.mjs} +1 -1
  10. package/dist/{commands-Bfgme-kK.mjs → commands-DioFG-T8.mjs} +2 -2
  11. package/dist/{commands-Cx8mEjjt.mjs → commands-S9ugb6eO.mjs} +2 -2
  12. package/dist/{commands-DwQIShcm.mjs → commands-sLeyJvvR.mjs} +2 -2
  13. package/dist/{commands-DSI9ZUTG.mjs → commands-spXLzJrp.mjs} +1 -1
  14. package/dist/{fleet-CqbZhBG2.mjs → fleet-BDH5YnGz.mjs} +1 -1
  15. package/dist/{frpc-BeGCyERl.mjs → frpc-D_Z7ezPz.mjs} +1 -1
  16. package/dist/{headlessCli-CJiHG0gu.mjs → headlessCli-fqWKn6GX.mjs} +2 -2
  17. package/dist/index.mjs +1 -1
  18. package/dist/{notifyCommands-CXjWSZHe.mjs → notifyCommands-BFKffk8w.mjs} +1 -1
  19. package/dist/package-DVTZQWn9.mjs +64 -0
  20. package/dist/{rpc-1Ic_yDzC.mjs → rpc-BnQ5dQm_.mjs} +1 -1
  21. package/dist/{rpc-DiG_DaMK.mjs → rpc-DAnM-lOr.mjs} +1 -1
  22. package/dist/{run-DZJuuuAu.mjs → run-Cv0X_muz.mjs} +1 -1
  23. package/dist/{run-CKLU1B02.mjs → run-P_rX5hRP.mjs} +104 -12
  24. package/dist/{scheduler-C5Gk_hYP.mjs → scheduler-DdfPXpWh.mjs} +1 -1
  25. package/dist/{serveCommands-Dipn0QHs.mjs → serveCommands-I-wRHtX4.mjs} +5 -5
  26. package/dist/{sideband-BCMGW33d.mjs → sideband-BhOX0Gs4.mjs} +1 -1
  27. package/package.json +46 -46
  28. package/dist/package-C0aVCX6O.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-CKLU1B02.mjs';
5
+ import { H as buildOutpostInstall, I as ChannelStore, J as DEFAULT_OUTPOST_DOWNLOAD_BASE, K as setupOutpostChannel } from './run-P_rX5hRP.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;
@@ -119,28 +101,10 @@ async function outpostUp(args) {
119
101
  console.error("Could not resolve workspace/machine (HYPHA_WORKSPACE / daemon.state.json).");
120
102
  process.exit(1);
121
103
  }
122
- const channelsServiceId = `${workspace}/${mid}:channels`;
123
- const gw = gatewayBase(channelsServiceId, serverUrl);
124
- const channelId = `outpost-${session}`;
125
- const store = new ChannelStore(projectDir());
126
- const existing = store.get(channelId);
127
- let token = existing?.identity?.callers?.find((c) => c.name === "outpost")?.key;
128
- if (!token) token = genKey();
129
- const channel = {
130
- id: channelId,
131
- name: `Remote outpost \u2014 ${session}`,
132
- description: "FDE remote machine: a svamp-outpost binary connects here and the agent runs commands on it.",
133
- enabled: true,
134
- bind: { session },
135
- identity: { mode: "per-key", callers: [{ name: "outpost", kind: "agent", key: token }] },
136
- action: { kind: "message" },
137
- reply: { mode: "queue" },
138
- skill: { name: "remote-outpost", description: "Run commands on the connected remote machine." }
139
- };
140
- store.save(channel);
141
- 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;
142
107
  saveConfig({ control: "", serverBase: gw, serveBase: dl, token, channel: channelId, session });
143
- const gen = buildOutpostInstall({ serverBase: gw, channel: channelId, token, session, downloadBase: dl });
144
108
  console.log(`\u2713 outpost channel ready for session ${session} (channel "${channelId}", gateway transport)
145
109
  `);
146
110
  console.log("Give this to the person at the remote machine:\n");
@@ -223,7 +187,7 @@ async function outpostCommand(args) {
223
187
  console.error('usage: svamp outpost exec [--machine <id>] "<command>"');
224
188
  process.exit(1);
225
189
  }
226
- const { ChannelOutbox } = await import('./run-CKLU1B02.mjs').then(function (n) { return n.as; });
190
+ const { ChannelOutbox } = await import('./run-P_rX5hRP.mjs').then(function (n) { return n.at; });
227
191
  const outbox = new ChannelOutbox(projectDir());
228
192
  const id = "x" + Date.now().toString(36);
229
193
  outbox.append(cfg.channel, { to: "outpost", body: JSON.stringify({ type: "exec", id, cmd, target: target || "" }) });
@@ -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-BeGCyERl.mjs');
63
+ const { runFrpcTunnel } = await import('./frpc-D_Z7ezPz.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-B-VYM4sA.mjs');
73
+ const { connectAndGetMachine } = await import('./commands-BuYofggg.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-CoPsnzwK.mjs');
95
+ const { autoAddSessionLink } = await import('./agentCommands-Ct_y-kUT.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-CKLU1B02.mjs').then(function (n) { return n.ao; });
132
+ const { serveStaticMount } = await import('./run-P_rX5hRP.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-BeGCyERl.mjs');
143
+ const { runFrpcTunnel } = await import('./frpc-D_Z7ezPz.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-B-VYM4sA.mjs');
153
+ const { connectAndGetMachine } = await import('./commands-BuYofggg.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-B-VYM4sA.mjs');
193
+ const { connectAndGetMachine } = await import('./commands-BuYofggg.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-CKLU1B02.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-P_rX5hRP.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  import 'fs';
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { execSync, execFileSync } from 'node:child_process';
3
3
  import { basename, resolve, join, isAbsolute } from 'node:path';
4
4
  import os from 'node:os';
5
- import { a6 as formatHandle, a7 as normalizeAllowedUser, a8 as loadSecurityContextConfig, a9 as resolveSecurityContext, aa as buildSecurityContextFromFlags, ab as mergeSecurityContexts, c as connectToHypha, ac as buildSessionShareUrl, ad as computeOutboundHop, i as shortId, ae as registerAwaitingReply, af as buildMachineShareUrl, ag as parseHandle, ah as handleMatchesMetadata } from './run-CKLU1B02.mjs';
5
+ import { a7 as formatHandle, a8 as normalizeAllowedUser, a9 as loadSecurityContextConfig, aa as resolveSecurityContext, ab as buildSecurityContextFromFlags, ac as mergeSecurityContexts, c as connectToHypha, ad as buildSessionShareUrl, ae as computeOutboundHop, i as shortId, af as registerAwaitingReply, ag as buildMachineShareUrl, ah as parseHandle, ai as handleMatchesMetadata } from './run-P_rX5hRP.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -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-CuzIOUig.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-CKLU1B02.mjs';
4
+ import { f as flushAndExit } from './cli-CFNupfRe.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-P_rX5hRP.mjs';
6
6
  import './serviceManager-hlOVxkhW.mjs';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -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-B-VYM4sA.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-BuYofggg.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-CKLU1B02.mjs';
5
+ import { u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-P_rX5hRP.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands-B-VYM4sA.mjs';
3
+ import { connectAndGetMachine } from './commands-BuYofggg.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-CKLU1B02.mjs';
8
+ import './run-P_rX5hRP.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';
@@ -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-CKLU1B02.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-P_rX5hRP.mjs';
5
5
  import 'fs/promises';
6
6
  import 'url';
7
7
  import 'child_process';
@@ -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-CKLU1B02.mjs';
4
+ import { c as connectToHypha } from './run-P_rX5hRP.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-CKLU1B02.mjs';
7
+ import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-P_rX5hRP.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-CKLU1B02.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-BCMGW33d.mjs';
1
+ import { a4 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-P_rX5hRP.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-BhOX0Gs4.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-CKLU1B02.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-P_rX5hRP.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-CKLU1B02.mjs';
1
+ import { c as connectToHypha, S as SharingNotificationSync, N as parseJwtEmail } from './run-P_rX5hRP.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.293";
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, 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-CKLU1B02.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-P_rX5hRP.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -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-CKLU1B02.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-P_rX5hRP.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ak as applyClaudeProxyEnv, al as composeSessionId, am as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, an as generateHookSettings } from './run-CKLU1B02.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { al as applyClaudeProxyEnv, am as composeSessionId, an as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ao as generateHookSettings } from './run-P_rX5hRP.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';
@@ -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-BeGCyERl.mjs');
2976
+ const { FrpcTunnel } = await import('./frpc-D_Z7ezPz.mjs');
2977
2977
  let tunnel;
2978
2978
  tunnel = new FrpcTunnel({
2979
2979
  name: tunnelName,
@@ -5869,7 +5869,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5869
5869
  const tunnels = handlers.tunnels;
5870
5870
  if (!tunnels) throw new Error("Tunnel management not available");
5871
5871
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
5872
- const { FrpcTunnel } = await import('./frpc-BeGCyERl.mjs');
5872
+ const { FrpcTunnel } = await import('./frpc-D_Z7ezPz.mjs');
5873
5873
  const tunnel = new FrpcTunnel({
5874
5874
  name: params.name,
5875
5875
  ports: params.ports,
@@ -6345,7 +6345,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6345
6345
  }
6346
6346
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
6347
6347
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
6348
- const { toolsForRole } = await import('./sideband-BCMGW33d.mjs');
6348
+ const { toolsForRole } = await import('./sideband-BhOX0Gs4.mjs');
6349
6349
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
6350
6350
  return fmt(r2);
6351
6351
  }
@@ -6450,7 +6450,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6450
6450
  return { ok: false, call_id: callId, status: "busy", error: "channel is busy (too many concurrent requests) \u2014 retry shortly" };
6451
6451
  }
6452
6452
  const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
6453
- const { queryCore } = await import('./commands-B-VYM4sA.mjs');
6453
+ const { queryCore } = await import('./commands-BuYofggg.mjs');
6454
6454
  const timeout = c.reply?.timeout_sec || 120;
6455
6455
  let result;
6456
6456
  try {
@@ -6901,6 +6901,65 @@ function isRetryableRateLimit(text, apiErrorStatus) {
6901
6901
  return networkTransient;
6902
6902
  }
6903
6903
 
6904
+ const DEFAULT_DOWNLOAD_BASE = "https://github.com/amun-ai/hypha-cloud/releases/latest/download";
6905
+ function shq(v) {
6906
+ return `'${String(v).replace(/'/g, `'\\''`)}'`;
6907
+ }
6908
+ function psq(v) {
6909
+ return `'${String(v).replace(/'/g, `''`)}'`;
6910
+ }
6911
+ function buildOutpostInstall(params) {
6912
+ const base = params.serverBase.replace(/\/$/, "");
6913
+ const dl = (params.downloadBase || DEFAULT_DOWNLOAD_BASE).replace(/\/$/, "");
6914
+ const session = params.session || params.channel;
6915
+ const unix = `curl -fsSL ${shq(`${dl}/install.sh`)} | SVAMP_OUTPOST_SERVER=${shq(base)} SVAMP_OUTPOST_CHANNEL=${shq(params.channel)} SVAMP_OUTPOST_TOKEN=${shq(params.token)} SVAMP_OUTPOST_SESSION=${shq(session)} SVAMP_OUTPOST_DL=${shq(dl)} sh`;
6916
+ 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)}; $env:SVAMP_OUTPOST_DL=${psq(dl)}; irm ${psq(`${dl}/install.ps1`)} | iex`;
6917
+ const direct = `svamp-outpost --server ${shq(base)} --channel ${shq(params.channel)} --token ${shq(params.token)} --session ${shq(session)}`;
6918
+ return { unix, windows, direct };
6919
+ }
6920
+
6921
+ const DEFAULT_OUTPOST_DOWNLOAD_BASE = "https://static-outpost-bin-08c08c38.svc.hypha.aicell.io";
6922
+ const OUTPOST_BINARIES = [
6923
+ { label: "macOS (Apple Silicon)", file: "svamp-outpost-darwin-arm64" },
6924
+ { label: "macOS (Intel)", file: "svamp-outpost-darwin-amd64" },
6925
+ { label: "Linux (x86-64)", file: "svamp-outpost-linux-amd64" },
6926
+ { label: "Linux (arm64)", file: "svamp-outpost-linux-arm64" },
6927
+ { label: "Windows (x86-64)", file: "svamp-outpost-windows-amd64.exe" }
6928
+ ];
6929
+ function setupOutpostChannel(params) {
6930
+ const serverUrl = params.serverUrl || "https://hypha.aicell.io";
6931
+ const downloadBase = (params.downloadBase || DEFAULT_OUTPOST_DOWNLOAD_BASE).replace(/\/$/, "");
6932
+ const serverBase = gatewayBase(params.channelsServiceId, serverUrl);
6933
+ const channelId = `outpost-${params.session}`;
6934
+ const store = new ChannelStore(params.projectDir);
6935
+ const existing = store.get(channelId);
6936
+ let token = existing?.identity?.callers?.find((c) => c.name === "outpost")?.key;
6937
+ if (!token) token = genKey();
6938
+ const channel = {
6939
+ id: channelId,
6940
+ name: `Remote outpost \u2014 ${params.session}`,
6941
+ description: "FDE remote machine: a svamp-outpost binary connects here and the agent runs commands on it.",
6942
+ enabled: true,
6943
+ bind: { session: params.session },
6944
+ identity: { mode: "per-key", callers: [{ name: "outpost", kind: "agent", key: token }] },
6945
+ action: { kind: "message" },
6946
+ reply: { mode: "queue" },
6947
+ skill: { name: "remote-outpost", description: "Run commands on the connected remote machine." }
6948
+ };
6949
+ store.save(channel);
6950
+ const install = buildOutpostInstall({ serverBase, channel: channelId, token, session: params.session, downloadBase });
6951
+ const connectedCount = (store.get(channelId)?.last_calls || []).filter((c) => c.sender === "outpost").length;
6952
+ return {
6953
+ channelId,
6954
+ token,
6955
+ serverBase,
6956
+ downloadBase,
6957
+ install,
6958
+ binaries: OUTPOST_BINARIES.map((b) => ({ label: b.label, url: `${downloadBase}/${b.file}` })),
6959
+ connectedCount
6960
+ };
6961
+ }
6962
+
6904
6963
  const PARTICIPANTS_CHANNEL_ID = "sys-participants";
6905
6964
  function channelPublicView(c) {
6906
6965
  const u = c.upload;
@@ -7599,6 +7658,10 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
7599
7658
  authorizeRequest(context, metadata.sharing, "view");
7600
7659
  return { channels: channelStore.list().filter((c) => !c.system) };
7601
7660
  },
7661
+ // FDE outpost (#0589/#0593): idempotently ensure this session's outpost channel + return the
7662
+ // install one-liners and per-OS download links for the "Connect a remote machine" UI. Admin-gated
7663
+ // because the returned command carries a channel-scoped COMMAND-EXECUTION token — only the machine
7664
+ // admin/owner should onboard a remotely-controllable machine. Mirrors the CLI `svamp outpost up`.
7602
7665
  saveChannel: async (channel, context) => {
7603
7666
  authorizeRequest(context, metadata.sharing, "admin");
7604
7667
  try {
@@ -7636,6 +7699,28 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
7636
7699
  syncChannelsToMetadata();
7637
7700
  return { success: !!caller, caller };
7638
7701
  },
7702
+ // FDE outpost (#0589): provision (idempotently) this session's outpost channel and return the
7703
+ // install one-liners + direct binary download links + a best-effort connected count. The app's
7704
+ // "Connect a remote machine" panel calls this; it reuses the SAME setupOutpostChannel core as
7705
+ // `svamp outpost up`, so the channel shape + install command never drift. Admin-gated: the
7706
+ // returned token is a capability to run commands on whatever machine connects.
7707
+ outpostConnectInfo: async (params, context) => {
7708
+ authorizeRequest(context, metadata.sharing, "admin");
7709
+ if (!channelsServiceId) return { error: "the channels service is not available on this machine" };
7710
+ try {
7711
+ const info = setupOutpostChannel({
7712
+ session: sessionId,
7713
+ projectDir: metadata.path || process.cwd(),
7714
+ channelsServiceId,
7715
+ serverUrl: channelsBaseUrl,
7716
+ downloadBase: params?.downloadBase || process.env.SVAMP_OUTPOST_DL
7717
+ });
7718
+ syncChannelsToMetadata();
7719
+ return { ok: true, ...info };
7720
+ } catch (e) {
7721
+ return { error: e?.message || String(e) };
7722
+ }
7723
+ },
7639
7724
  getChannelSkill: async (id, context) => {
7640
7725
  authorizeRequest(context, metadata.sharing, "view");
7641
7726
  const c = channelStore.get(id);
@@ -16274,7 +16359,7 @@ async function startDaemon(options) {
16274
16359
  try {
16275
16360
  const dir = loadSessionIndex()[sessionId]?.directory;
16276
16361
  if (!dir) return;
16277
- const { reconcileServiceLinks } = await import('./agentCommands-CoPsnzwK.mjs');
16362
+ const { reconcileServiceLinks } = await import('./agentCommands-Ct_y-kUT.mjs');
16278
16363
  const configPath = getSvampConfigPath(dir, sessionId);
16279
16364
  const config = readSvampConfig(configPath);
16280
16365
  const entries = Array.from(urls.entries());
@@ -16292,7 +16377,7 @@ async function startDaemon(options) {
16292
16377
  }
16293
16378
  }
16294
16379
  async function createExposedTunnel(spec) {
16295
- const { FrpcTunnel } = await import('./frpc-BeGCyERl.mjs');
16380
+ const { FrpcTunnel } = await import('./frpc-D_Z7ezPz.mjs');
16296
16381
  const tunnel = new FrpcTunnel({
16297
16382
  name: spec.name,
16298
16383
  ports: spec.ports,
@@ -18508,11 +18593,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
18508
18593
  });
18509
18594
  },
18510
18595
  onIssue: async (params) => {
18511
- const { issueRpc } = await import('./rpc-1Ic_yDzC.mjs');
18596
+ const { issueRpc } = await import('./rpc-BnQ5dQm_.mjs');
18512
18597
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
18513
18598
  },
18514
18599
  onWorkflow: async (params) => {
18515
- const { workflowRpc } = await import('./rpc-DiG_DaMK.mjs');
18600
+ const { workflowRpc } = await import('./rpc-DAnM-lOr.mjs');
18516
18601
  return workflowRpc(params?.cwd || directory, params || {});
18517
18602
  },
18518
18603
  onRipgrep: async (args, cwd) => {
@@ -19125,11 +19210,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
19125
19210
  });
19126
19211
  },
19127
19212
  onIssue: async (params) => {
19128
- const { issueRpc } = await import('./rpc-1Ic_yDzC.mjs');
19213
+ const { issueRpc } = await import('./rpc-BnQ5dQm_.mjs');
19129
19214
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
19130
19215
  },
19131
19216
  onWorkflow: async (params) => {
19132
- const { workflowRpc } = await import('./rpc-DiG_DaMK.mjs');
19217
+ const { workflowRpc } = await import('./rpc-DAnM-lOr.mjs');
19133
19218
  return workflowRpc(params?.cwd || directory, params || {});
19134
19219
  },
19135
19220
  onRipgrep: async (args, cwd) => {
@@ -19306,6 +19391,13 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
19306
19391
  }
19307
19392
  }
19308
19393
  const codexModel = codexForcedModel() || options2.model || agentConfig?.default_model || provider.model || void 0;
19394
+ if (codexModel && (provider.apiBase || codexForcedModel())) {
19395
+ sessionMetadata.models = [{ code: codexModel, value: codexModel, description: "Configured on this machine" }];
19396
+ try {
19397
+ sessionService.updateMetadata(sessionMetadata);
19398
+ } catch {
19399
+ }
19400
+ }
19309
19401
  const codexPerm = codexPermissionSettings(currentPermissionMode);
19310
19402
  logger.log(`[Agent Session ${sessionId}] Codex backend: app-server (model=${codexModel ?? "default"}${provider.apiBase ? `, provider=${provider.apiBase}` : ""}${accountDesc ? `, account=${accountDesc}` : ""}, mode=${currentPermissionMode} \u2192 approval=${codexPerm.approvalPolicy}/sandbox=${codexPerm.sandbox})`);
19311
19403
  if (acpResumeThreadId) logger.log(`[Agent Session ${sessionId}] Resuming Codex thread ${acpResumeThreadId} (restart recovery)`);
@@ -20249,7 +20341,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
20249
20341
  const PING_TIMEOUT_MS = 15e3;
20250
20342
  const POST_RECONNECT_GRACE_MS = 2e4;
20251
20343
  const RECONNECT_JITTER_MS = 2500;
20252
- const { WorkflowScheduler } = await import('./scheduler-C5Gk_hYP.mjs');
20344
+ const { WorkflowScheduler } = await import('./scheduler-DdfPXpWh.mjs');
20253
20345
  const workflowScheduler = new WorkflowScheduler({
20254
20346
  projectRoots: () => {
20255
20347
  const dirs = /* @__PURE__ */ new Set();
@@ -20872,4 +20964,4 @@ var run = /*#__PURE__*/Object.freeze({
20872
20964
  writeStopMarker: writeStopMarker
20873
20965
  });
20874
20966
 
20875
- export { listSkillFiles 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, computeCollectionConfigUpdate as K, SYSTEM_COLLECTION_CONFIG as L, loadMachineContext as M, buildMachineInstructions as N, machineToolsForRole as O, buildMachineTools as P, parseFrontmatter as Q, READ_ONLY_TOOLS as R, SharingNotificationSync as S, getSkillsServer as T, getSkillsWorkspaceName as U, getSkillsCollectionName as V, fetchWithTimeout as W, searchSkills as X, SKILLS_DIR as Y, getSkillInfo as Z, downloadSkillFile as _, createSessionStore as a, resolveModel as a0, clearStopMarker as a1, stopMarkerExists as a2, ChannelStore as a3, gatewayBase as a4, genKey as a5, formatHandle as a6, normalizeAllowedUser as a7, loadSecurityContextConfig as a8, resolveSecurityContext as a9, run as aA, buildSecurityContextFromFlags as aa, mergeSecurityContexts as ab, buildSessionShareUrl as ac, computeOutboundHop as ad, registerAwaitingReply as ae, buildMachineShareUrl as af, parseHandle as ag, handleMatchesMetadata as ah, describeMisconfiguration as ai, buildMachineDeps as aj, applyClaudeProxyEnv as ak, composeSessionId as al, generateFriendlyName as am, generateHookSettings as an, staticFileServer as ao, instanceConfig as ap, claudeAuth as aq, codexProvider as ar, outbox as as, projectInfo as at, DefaultTransport$1 as au, acpBackend as av, acpAgentConfig as aw, codexAppServerBackend as ax, GeminiTransport$1 as ay, api as az, 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 };
20967
+ export { searchSkills as $, removeWorkflow as A, saveWorkflow as B, rawWorkflow as C, listWorkflows as D, isWorkflowEnabled as E, workflowCrons as F, cronMatches as G, buildOutpostInstall as H, ChannelStore as I, DEFAULT_OUTPOST_DOWNLOAD_BASE as J, setupOutpostChannel as K, summarize as L, workflowSteps as M, parseJwtEmail as N, computeCollectionConfigUpdate as O, SYSTEM_COLLECTION_CONFIG as P, loadMachineContext as Q, READ_ONLY_TOOLS as R, SharingNotificationSync as S, buildMachineInstructions as T, machineToolsForRole as U, buildMachineTools as V, parseFrontmatter as W, getSkillsServer as X, getSkillsWorkspaceName as Y, getSkillsCollectionName as Z, fetchWithTimeout as _, createSessionStore as a, SKILLS_DIR as a0, getSkillInfo as a1, downloadSkillFile as a2, listSkillFiles as a3, resolveModel as a4, clearStopMarker as a5, stopMarkerExists as a6, formatHandle as a7, normalizeAllowedUser as a8, loadSecurityContextConfig as a9, api as aA, run as aB, resolveSecurityContext as aa, buildSecurityContextFromFlags as ab, mergeSecurityContexts as ac, buildSessionShareUrl as ad, computeOutboundHop as ae, registerAwaitingReply as af, buildMachineShareUrl as ag, parseHandle as ah, handleMatchesMetadata as ai, describeMisconfiguration as aj, buildMachineDeps as ak, applyClaudeProxyEnv as al, composeSessionId as am, generateFriendlyName as an, generateHookSettings as ao, staticFileServer as ap, instanceConfig as aq, claudeAuth as ar, codexProvider as as, outbox as at, projectInfo as au, DefaultTransport$1 as av, acpBackend as aw, acpAgentConfig as ax, codexAppServerBackend as ay, GeminiTransport$1 as az, 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 { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-CKLU1B02.mjs';
1
+ import { j as resolveProjectRoot, D as listWorkflows, E as isWorkflowEnabled, F as workflowCrons, y as runWorkflow, G as cronMatches } from './run-P_rX5hRP.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-B-VYM4sA.mjs');
57
+ const { connectAndGetMachine } = await import('./commands-BuYofggg.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-B-VYM4sA.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-BuYofggg.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-B-VYM4sA.mjs');
185
+ const { connectAndGetMachine } = await import('./commands-BuYofggg.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-B-VYM4sA.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-BuYofggg.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-B-VYM4sA.mjs');
238
+ const { connectAndGetMachine } = await import('./commands-BuYofggg.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, M as loadMachineContext, N as buildMachineInstructions, O as machineToolsForRole, P as buildMachineTools } from './run-CKLU1B02.mjs';
1
+ import { R as READ_ONLY_TOOLS, Q as loadMachineContext, T as buildMachineInstructions, U as machineToolsForRole, V as buildMachineTools } from './run-P_rX5hRP.mjs';
2
2
  import 'node:child_process';
3
3
  import 'os';
4
4
  import 'fs/promises';