svamp-cli 0.2.309 → 0.2.310

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 (29) hide show
  1. package/dist/{adminCommands-BTLHQXmA.mjs → adminCommands-BcH3OlSL.mjs} +1 -1
  2. package/dist/{agentCommands-DdNUACV8.mjs → agentCommands-9GHpj3mp.mjs} +5 -5
  3. package/dist/{auth-Bn8TbaOP.mjs → auth-CuN-K8i9.mjs} +1 -1
  4. package/dist/{cli-BaDWWDiz.mjs → cli-Co_GXbrT.mjs} +70 -70
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-C2u988x1.mjs → commands-B0cRa6cc.mjs} +2 -2
  7. package/dist/{commands-BTN9XxVx.mjs → commands-D-RsuMqs.mjs} +1 -1
  8. package/dist/{commands-DPvy0iVT.mjs → commands-DBiIsRQ_.mjs} +1 -1
  9. package/dist/{commands-r86haNJD.mjs → commands-DiuHHJ6r.mjs} +2 -2
  10. package/dist/{commands-DGbLwT_h.mjs → commands-DrVsg0Q1.mjs} +8 -8
  11. package/dist/{commands-BPgxgkXW.mjs → commands-DuLlH97k.mjs} +2 -2
  12. package/dist/{commands-2uOorIjB.mjs → commands-Dx4S6f_G.mjs} +1 -1
  13. package/dist/{commands-Bb0oF3eZ.mjs → commands-Eo0kocpm.mjs} +2 -2
  14. package/dist/{fleet-CeLE0t97.mjs → fleet-CFpET-T5.mjs} +2 -2
  15. package/dist/{frpc-Cv6J2Mex.mjs → frpc-DxIjZ8o_.mjs} +1 -1
  16. package/dist/{headlessCli-BXc9Fvzb.mjs → headlessCli-BIY-YePw.mjs} +2 -2
  17. package/dist/index.mjs +1 -1
  18. package/dist/{notifyCommands-iVnI_Lb2.mjs → notifyCommands-DldLQlDU.mjs} +1 -1
  19. package/dist/package-BKmrvBsb.mjs +64 -0
  20. package/dist/{pinnedClaudeCode-C6MSkqS9.mjs → pinnedClaudeCode-zDzkOTi2.mjs} +1 -1
  21. package/dist/{rpc-BwxwusfB.mjs → rpc-BVw8Tv9l.mjs} +1 -1
  22. package/dist/{rpc-CkcBAtcs.mjs → rpc-D7_Gj0Kt.mjs} +1 -1
  23. package/dist/{run-DLG-_xa7.mjs → run-CqO23ro_.mjs} +68 -42
  24. package/dist/{run-2Stz5l7J.mjs → run-DLk7NGih.mjs} +1 -1
  25. package/dist/{scheduler-CurN4UtP.mjs → scheduler-q7Refevo.mjs} +1 -1
  26. package/dist/{serveCommands-CtVZhR-V.mjs → serveCommands-BJjvhDxp.mjs} +19 -12
  27. package/dist/{sideband-C_3PVGh-.mjs → sideband-Dv3qNlQN.mjs} +1 -1
  28. package/package.json +2 -2
  29. package/dist/package-CeseSmYI.mjs +0 -64
@@ -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-Cv6J2Mex.mjs');
63
+ const { runFrpcTunnel } = await import('./frpc-DxIjZ8o_.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-BTN9XxVx.mjs');
73
+ const { connectAndGetMachine } = await import('./commands-D-RsuMqs.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-DdNUACV8.mjs');
95
+ const { autoAddSessionLink } = await import('./agentCommands-9GHpj3mp.mjs');
96
96
  let added = 0;
97
97
  for (const [port, url] of urlEntries) {
98
98
  const label = urlEntries.length > 1 ? `${name}:${port}` : name;
@@ -128,8 +128,8 @@ async function serviceServe(args) {
128
128
  const resolvedDir = path.resolve(directory);
129
129
  console.log(`Serving ${resolvedDir}`);
130
130
  const http = await import('http');
131
- const { serveStaticMount } = await import('./run-DLG-_xa7.mjs').then(function (n) { return n.ap; });
132
- const { getFreePort } = await import('./frpc-Cv6J2Mex.mjs');
131
+ const { serveStaticMount } = await import('./run-CqO23ro_.mjs').then(function (n) { return n.ap; });
132
+ const { getFreePort } = await import('./frpc-DxIjZ8o_.mjs');
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;
@@ -152,7 +152,7 @@ async function serviceServe(args) {
152
152
  resolve(18080);
153
153
  });
154
154
  });
155
- const { runFrpcTunnel } = await import('./frpc-Cv6J2Mex.mjs');
155
+ const { runFrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
156
156
  void server;
157
157
  await runFrpcTunnel(name, [servePort]);
158
158
  } catch (err) {
@@ -162,7 +162,7 @@ async function serviceServe(args) {
162
162
  }
163
163
  async function serviceList(_args) {
164
164
  try {
165
- const { connectAndGetMachine } = await import('./commands-BTN9XxVx.mjs');
165
+ const { connectAndGetMachine } = await import('./commands-D-RsuMqs.mjs');
166
166
  const { server, machine } = await connectAndGetMachine();
167
167
  try {
168
168
  const tunnels = await machine.tunnelList({});
@@ -202,7 +202,7 @@ async function serviceDelete(args) {
202
202
  process.exit(1);
203
203
  }
204
204
  try {
205
- const { connectAndGetMachine } = await import('./commands-BTN9XxVx.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-D-RsuMqs.mjs');
206
206
  const { server, machine } = await connectAndGetMachine();
207
207
  try {
208
208
  await machine.tunnelStop({ name });
@@ -1,9 +1,9 @@
1
- import { connectAndResolveSession } from './commands-BTN9XxVx.mjs';
1
+ import { connectAndResolveSession } from './commands-D-RsuMqs.mjs';
2
2
  import 'node:fs';
3
3
  import 'node:child_process';
4
4
  import 'node:path';
5
5
  import 'node:os';
6
- import './run-DLG-_xa7.mjs';
6
+ import './run-CqO23ro_.mjs';
7
7
  import 'os';
8
8
  import 'fs/promises';
9
9
  import 'fs';
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from 'node:child_process';
2
- import { j as resolveProjectRoot, K as workflowSteps, z as setWorkflowEnabled, F as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, E as listWorkflows, C as saveWorkflow, D as rawWorkflow } from './run-DLG-_xa7.mjs';
2
+ import { j as resolveProjectRoot, K as workflowSteps, z as setWorkflowEnabled, F as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, E as listWorkflows, C as saveWorkflow, D as rawWorkflow } from './run-CqO23ro_.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  import 'fs';
@@ -1,8 +1,8 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { join, resolve } from 'node:path';
3
- import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-BTN9XxVx.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-D-RsuMqs.mjs';
4
4
  import { execFileSync } from 'node:child_process';
5
- import { ai as withFileLock, u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-DLG-_xa7.mjs';
5
+ import { ai as withFileLock, u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-CqO23ro_.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -1,8 +1,8 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import os from 'node:os';
4
- import { U as PINNED_CODEX_VERSION, c as connectToHypha } from './run-DLG-_xa7.mjs';
5
- import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-C6MSkqS9.mjs';
4
+ import { U as PINNED_CODEX_VERSION, c as connectToHypha } from './run-CqO23ro_.mjs';
5
+ import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-zDzkOTi2.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -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-DLG-_xa7.mjs';
7
+ import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-CqO23ro_.mjs';
8
8
  import 'fs/promises';
9
9
  import 'url';
10
10
  import 'node:crypto';
@@ -1,5 +1,5 @@
1
- import { a3 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-DLG-_xa7.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-C_3PVGh-.mjs';
1
+ import { a3 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-CqO23ro_.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-Dv3qNlQN.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-DLG-_xa7.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-CqO23ro_.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, L as parseJwtEmail } from './run-DLG-_xa7.mjs';
1
+ import { c as connectToHypha, S as SharingNotificationSync, L as parseJwtEmail } from './run-CqO23ro_.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.310";
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-sharing-notify-resolve.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-outpost-pairing.mjs && npx tsx test/test-outpost-coordinator.mjs && npx tsx test/e2e-outpost-transport.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-machine-session-visibility.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-session-rpc-role-map.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-pinned-codex.mjs && npx tsx test/test-codex-request-timeout.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-listener-backoff.mjs && npx tsx test/test-session-identity-env.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-store-lock.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-runs-lock.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-workflow-reconcile.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-store-lock.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 && npx tsx test/test-codex-skills.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,7 +1,7 @@
1
1
  import { spawn, exec as exec$1 } from 'node:child_process';
2
2
  import { promisify } from 'node:util';
3
3
 
4
- const PINNED_CLAUDE_CODE_VERSION = "2.1.221";
4
+ const PINNED_CLAUDE_CODE_VERSION = "2.1.222";
5
5
  const exec = promisify(exec$1);
6
6
  let _reconcile = null;
7
7
  function beginClaudeVersionReconcile(log) {
@@ -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 validateWorkflowName, C as saveWorkflow, D as rawWorkflow, E as listWorkflows } from './run-DLG-_xa7.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 validateWorkflowName, C as saveWorkflow, D as rawWorkflow, E as listWorkflows } from './run-CqO23ro_.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-DLG-_xa7.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-CqO23ro_.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -2379,10 +2379,8 @@ class ServeManager {
2379
2379
  */
2380
2380
  listMounts(sessionId) {
2381
2381
  const all = Array.from(this.mounts.values());
2382
- if (sessionId) {
2383
- return all.filter((m) => m.sessionId === sessionId);
2384
- }
2385
- return all;
2382
+ const filtered = sessionId ? all.filter((m) => m.sessionId === sessionId) : all;
2383
+ return filtered.map((m) => ({ ...m, url: this.getMountUrl(m.name) || void 0 }));
2386
2384
  }
2387
2385
  /** #0649: look up a single mount by name (for ownership checks before remove/replace). */
2388
2386
  getMount(name) {
@@ -2393,10 +2391,8 @@ class ServeManager {
2393
2391
  */
2394
2392
  getInfo() {
2395
2393
  const running = this.proxyServer != null;
2396
- const firstMount = this.mounts.values().next().value;
2397
- const firstUrl = firstMount ? this.getMountUrl(firstMount.name) : null;
2398
2394
  return {
2399
- url: firstUrl,
2395
+ url: null,
2400
2396
  port: running ? this.port : 0,
2401
2397
  authProxyPort: running ? this.port : 0,
2402
2398
  running,
@@ -3151,7 +3147,7 @@ Connection: close\r
3151
3147
  const mount = this.mounts.get(mountName);
3152
3148
  const subdomainOverride = mount?.access === "link" && mount.linkToken ? /* @__PURE__ */ new Map([[this.port, buildLinkSubdomain(subdomainSafe, mount.linkToken)]]) : void 0;
3153
3149
  try {
3154
- const { FrpcTunnel } = await import('./frpc-Cv6J2Mex.mjs');
3150
+ const { FrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
3155
3151
  let tunnel;
3156
3152
  tunnel = new FrpcTunnel({
3157
3153
  name: tunnelName,
@@ -4093,7 +4089,8 @@ function inZone(date, tz) {
4093
4089
  o[x.type] = x.value;
4094
4090
  return o;
4095
4091
  }, {});
4096
- return new Date(+p.year, +p.month - 1, +p.day, +(p.hour === "24" ? 0 : p.hour), +p.minute);
4092
+ const midnight24 = p.hour === "24";
4093
+ return new Date(+p.year, +p.month - 1, +p.day + (midnight24 ? 1 : 0), midnight24 ? 0 : +p.hour, +p.minute);
4097
4094
  } catch {
4098
4095
  return date;
4099
4096
  }
@@ -4926,10 +4923,16 @@ class ChannelOutbox {
4926
4923
  this.emitter.on(channelId, onReply);
4927
4924
  });
4928
4925
  }
4929
- /** Push subscription for SSE: calls onReply for each new reply addressed to `to`. */
4930
- subscribe(channelId, to, onReply) {
4926
+ /**
4927
+ * Push subscription for SSE: calls onReply for each new matching reply.
4928
+ * Same key rule as since()/wait(): correlationId-first (knowing the unguessable reply
4929
+ * key proves ownership of that conversation), identity (`to`) only as the fallback.
4930
+ * Without this, several callers sharing a `to` (e.g. caller-supplied/'anonymous'
4931
+ * senders) would receive each other's replies — the cross-caller leak class of #0786.
4932
+ */
4933
+ subscribe(channelId, to, onReply, correlationId) {
4931
4934
  const handler = (r) => {
4932
- if (r.to === to) onReply(r);
4935
+ if (correlationId ? r.correlationId === correlationId : r.to === to) onReply(r);
4933
4936
  };
4934
4937
  this.emitter.on(channelId, handler);
4935
4938
  return () => this.emitter.off(channelId, handler);
@@ -5020,6 +5023,17 @@ const SESSION_VIEW_METHODS = /* @__PURE__ */ new Set([
5020
5023
  "reregister",
5021
5024
  "recordMeetingActivity"
5022
5025
  ]);
5026
+ const MACHINE_MEMBER_READABLE = /* @__PURE__ */ new Set([
5027
+ "getMetadata",
5028
+ "getAgentState",
5029
+ "getActivityState",
5030
+ "getMessages",
5031
+ "getLatestMessages",
5032
+ "getMessageCount",
5033
+ "getSharing",
5034
+ "listChannels",
5035
+ "registerListener"
5036
+ ]);
5023
5037
  function sessionMethodMinRole(method) {
5024
5038
  const mapped = SESSION_METHOD_MIN_ROLE[method];
5025
5039
  if (mapped) return mapped;
@@ -5362,11 +5376,12 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5362
5376
  const rpc = handlers.getSessionRPCHandlers?.(sid);
5363
5377
  if (!rpc) continue;
5364
5378
  if (!hasMachineAccess && !await hasExplicitSessionAccess(rpc, "view", context)) continue;
5379
+ const readCtx = hasMachineAccess ? void 0 : context;
5365
5380
  try {
5366
5381
  const [metaResult, stateResult, activity] = await Promise.all([
5367
- rpc.getMetadata(context),
5368
- rpc.getAgentState(context),
5369
- rpc.getActivityState(context).catch(() => ({
5382
+ rpc.getMetadata(readCtx),
5383
+ rpc.getAgentState(readCtx),
5384
+ rpc.getActivityState(readCtx).catch(() => ({
5370
5385
  active: false,
5371
5386
  thinking: false,
5372
5387
  time: Date.now()
@@ -5382,7 +5397,10 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5382
5397
  thinking: activity.thinking ?? false,
5383
5398
  activeAt: activity.time || Date.now()
5384
5399
  });
5385
- } catch {
5400
+ } catch (err) {
5401
+ console.debug(
5402
+ `[HYPHA MACHINE] getSessions: skipped session ${sid} (${hasMachineAccess ? "machine-access" : "session-shared"}): ${err?.message ?? err}`
5403
+ );
5386
5404
  }
5387
5405
  }
5388
5406
  return sessions;
@@ -5402,8 +5420,10 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5402
5420
  throw new Error(`Session ${sessionId} not found on this machine`);
5403
5421
  }
5404
5422
  const requiredRole = sessionMethodMinRole(method);
5423
+ let machineAuthorized = false;
5405
5424
  try {
5406
5425
  authorizeRequest(context, currentMetadata.sharing, requiredRole);
5426
+ machineAuthorized = true;
5407
5427
  } catch (machineErr) {
5408
5428
  if (!await hasExplicitSessionAccess(rpc, requiredRole, context)) throw machineErr;
5409
5429
  }
@@ -5411,9 +5431,10 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5411
5431
  if (typeof handler !== "function") {
5412
5432
  throw new Error(`Unknown session method: ${method}`);
5413
5433
  }
5434
+ const dispatchCtx = machineAuthorized && MACHINE_MEMBER_READABLE.has(method) ? void 0 : context;
5414
5435
  const paramNames = getParamNames(handler);
5415
5436
  const callArgs = paramNames.map(
5416
- (name) => name === "context" ? context : kwargs?.[name] ?? void 0
5437
+ (name) => name === "context" ? dispatchCtx : kwargs?.[name] ?? void 0
5417
5438
  );
5418
5439
  return await handler(...callArgs);
5419
5440
  },
@@ -5427,14 +5448,16 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5427
5448
  if (!rpc) {
5428
5449
  throw new Error(`Session ${sessionId} not found on this machine`);
5429
5450
  }
5451
+ let machineAuthorized = false;
5430
5452
  try {
5431
5453
  authorizeRequest(context, currentMetadata.sharing, "view");
5454
+ machineAuthorized = true;
5432
5455
  } catch (machineErr) {
5433
5456
  if (!await hasExplicitSessionAccess(rpc, "view", context)) {
5434
5457
  throw machineErr;
5435
5458
  }
5436
5459
  }
5437
- return await rpc.registerListener(callback, context);
5460
+ return await rpc.registerListener(callback, machineAuthorized ? void 0 : context);
5438
5461
  },
5439
5462
  // Spawn a new session
5440
5463
  spawnSession: async (options, context) => {
@@ -5810,9 +5833,11 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5810
5833
  const { exec } = await import('child_process');
5811
5834
  const { homedir } = await import('os');
5812
5835
  return new Promise((resolve) => {
5813
- exec(command, { cwd: cwd || homedir(), timeout: 3e4, maxBuffer: 1024 * 1024 }, (err, stdout, stderr) => {
5836
+ exec(command, { cwd: cwd || homedir(), timeout: 3e4, maxBuffer: 16 * 1024 * 1024 }, (err, stdout, stderr) => {
5814
5837
  if (err) {
5815
- resolve({ success: false, stdout: stdout || "", stderr: stderr || err.message, exitCode: err.code ?? 1 });
5838
+ const enobufs = err.code === "ENOBUFS";
5839
+ const errText = enobufs ? `output exceeded the 16 MB buffer and was truncated (the command may have completed): ${stderr || err.message}` : stderr || err.message;
5840
+ resolve({ success: false, stdout: stdout || "", stderr: errText, exitCode: err.code ?? 1 });
5816
5841
  } else {
5817
5842
  resolve({ success: true, stdout, stderr: stderr || "", exitCode: 0 });
5818
5843
  }
@@ -5823,6 +5848,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5823
5848
  /** Start a new terminal PTY session. Returns { sessionId, cols, rows }. */
5824
5849
  terminalStart: async (params = {}, context) => {
5825
5850
  authorizeRequest(context, currentMetadata.sharing, "admin");
5851
+ const terminalClient = context?.from;
5826
5852
  const pty = await getPtyModule();
5827
5853
  const { homedir: getHomedir } = await import('os');
5828
5854
  const cols = params.cols || 80;
@@ -5877,7 +5903,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5877
5903
  server.emit({
5878
5904
  type: "svamp:terminal-output",
5879
5905
  data: { type: "output", content: batch, sessionId },
5880
- to: "*"
5906
+ to: terminalClient ?? "*"
5881
5907
  });
5882
5908
  } catch {
5883
5909
  }
@@ -5896,7 +5922,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
5896
5922
  server.emit({
5897
5923
  type: "svamp:terminal-output",
5898
5924
  data: { type: "exit", content: "", sessionId, exitCode, signal },
5899
- to: "*"
5925
+ to: terminalClient ?? "*"
5900
5926
  });
5901
5927
  } catch {
5902
5928
  }
@@ -6254,7 +6280,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
6254
6280
  const tunnels = handlers.tunnels;
6255
6281
  if (!tunnels) throw new Error("Tunnel management not available");
6256
6282
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
6257
- const { FrpcTunnel } = await import('./frpc-Cv6J2Mex.mjs');
6283
+ const { FrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
6258
6284
  const tunnel = new FrpcTunnel({
6259
6285
  name: params.name,
6260
6286
  ports: params.ports,
@@ -6421,8 +6447,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
6421
6447
  const info = sm.getInfo();
6422
6448
  const isAdmin = serveCallerTrusted(context);
6423
6449
  const mounts = (info.mounts || []).map((m) => sanitizeMountForRole(m, isAdmin));
6424
- const topUrl = isAdmin ? info.url : mounts[0]?.url ?? null;
6425
- return { ...info, url: topUrl, mounts };
6450
+ return { ...info, url: null, mounts };
6426
6451
  },
6427
6452
  /**
6428
6453
  * Aggregate frpc tunnel health for all serve mounts.
@@ -6748,7 +6773,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6748
6773
  }
6749
6774
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
6750
6775
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
6751
- const { toolsForRole } = await import('./sideband-C_3PVGh-.mjs');
6776
+ const { toolsForRole } = await import('./sideband-Dv3qNlQN.mjs');
6752
6777
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
6753
6778
  return fmt(r2);
6754
6779
  }
@@ -6853,7 +6878,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
6853
6878
  return { ok: false, call_id: callId, status: "busy", error: "channel is busy (too many concurrent requests) \u2014 retry shortly" };
6854
6879
  }
6855
6880
  const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
6856
- const { queryCore } = await import('./commands-BTN9XxVx.mjs');
6881
+ const { queryCore } = await import('./commands-D-RsuMqs.mjs');
6857
6882
  const timeout = c.reply?.timeout_sec || 120;
6858
6883
  let result;
6859
6884
  try {
@@ -8891,7 +8916,7 @@ function createSessionStore(server, sessionId, initialMetadata, initialAgentStat
8891
8916
  const ownerCtx = ownerEmail ? { user: { email: ownerEmail, id: ownerEmail } } : void 0;
8892
8917
  try {
8893
8918
  if (c.system && c.action?.kind !== "agent") {
8894
- const role = ownerEmail && r.sender.name.toLowerCase() === ownerEmail.toLowerCase() ? "owner" : "collaborator";
8919
+ const role = r.sender.verified && ownerEmail && r.sender.name.toLowerCase() === ownerEmail.toLowerCase() ? "owner" : "collaborator";
8895
8920
  const envelope = renderMessage(c, {
8896
8921
  sender: r.sender,
8897
8922
  body: { message: params.message },
@@ -15219,6 +15244,7 @@ function runsFile(projectRoot, workflow) {
15219
15244
  const safe = workflow.replace(/[^\w.-]+/g, "_");
15220
15245
  return join$1(runsDir(projectRoot), `${safe}.jsonl`);
15221
15246
  }
15247
+ let _runSeq = 0;
15222
15248
  function shortRunId(seed) {
15223
15249
  let h = 2166136261;
15224
15250
  for (let i = 0; i < seed.length; i++) {
@@ -15444,7 +15470,7 @@ async function runWorkflowInner(projectRoot, wf, opts) {
15444
15470
  });
15445
15471
  const exec = opts.execStep || defaultExecStep;
15446
15472
  const start = now();
15447
- const id = shortRunId(`${wf.name}:${start.iso}:${start.ms}`);
15473
+ const id = shortRunId(`${wf.name}:${start.iso}:${start.ms}:${_runSeq++}`);
15448
15474
  const env = wf.session ? { ...process.env, SVAMP_SESSION_ID: wf.session } : process.env;
15449
15475
  const run = {
15450
15476
  id,
@@ -17206,7 +17232,7 @@ function createSvampConfigChecker(directory, sessionId, getMetadata, setMetadata
17206
17232
  const gaveUpCfg = readLoopJson(directory, sessionId, "loop.config.json") || {};
17207
17233
  const curMax = typeof gaveUpCfg.max_iterations === "number" ? gaveUpCfg.max_iterations : iter;
17208
17234
  const nextMax = Math.max(curMax * 2, iter + 10);
17209
- const msg = s.phase === "done" ? `\u{1F501} Loop complete \u2705 \u2014 finished after ${iter} iteration${plural}.` : `\u{1F501} Loop paused \u{1F6D1} \u2014 did NOT finish after ${iter} iteration${plural}${s.gave_up_reason ? ` (${s.gave_up_reason})` : ""}. Resume & extend with: svamp session loop-resume ${sessionId} --max ${nextMax}`;
17235
+ const msg = s.phase === "done" ? `\u{1F501} Loop complete \u2705 \u2014 finished after ${iter} iteration${plural}.` : `\u{1F501} Loop paused \u{1F6D1} \u2014 did NOT finish after ${iter} iteration${plural}${s.gave_up_reason ? ` (${s.gave_up_reason})` : ""}. Resume & extend with: svamp session loop-extend ${sessionId} --reason "<why more turns are needed>" --turns ${Math.max(10, nextMax - iter)}`;
17210
17236
  sessionService.pushMessage(
17211
17237
  s.phase === "gave_up" ? { type: "message", message: msg, level: "warning" } : { type: "message", message: msg },
17212
17238
  "event"
@@ -17275,7 +17301,7 @@ function createSvampConfigChecker(directory, sessionId, getMetadata, setMetadata
17275
17301
  maxExtensions
17276
17302
  });
17277
17303
  if (!grant.granted) {
17278
- sessionService.pushMessage({ type: "message", message: `\u{1F6D1} Extension refused \u2014 this loop already used all ${grant.max} allowed extension${grant.max === 1 ? "" : "s"} (${grant.used}/${grant.max}). A hard cap is a hard cap; do the remaining work or raise the limit manually: svamp session loop-resume ${sessionId} --max <N>`, level: "warning" }, "event");
17304
+ sessionService.pushMessage({ type: "message", message: `\u{1F6D1} Extension refused \u2014 this loop already used all ${grant.max} allowed extension${grant.max === 1 ? "" : "s"} (${grant.used}/${grant.max}). A hard cap is a hard cap; do the remaining work or raise the limit manually: svamp session loop-extend ${sessionId} --reason "<why>" --turns <N>`, level: "warning" }, "event");
17279
17305
  logger.log(`[svampConfig] loop-extend refused (bounded ${grant.used}/${grant.max})`);
17280
17306
  } else {
17281
17307
  const wasStopped = existing.active === false || existing.phase === "done" || existing.phase === "gave_up" || existing.phase === "cancelled";
@@ -17829,7 +17855,7 @@ async function startDaemon(options) {
17829
17855
  try {
17830
17856
  const dir = loadSessionIndex()[sessionId]?.directory;
17831
17857
  if (!dir) return;
17832
- const { reconcileServiceLinks } = await import('./agentCommands-DdNUACV8.mjs');
17858
+ const { reconcileServiceLinks } = await import('./agentCommands-9GHpj3mp.mjs');
17833
17859
  const configPath = getSvampConfigPath(dir, sessionId);
17834
17860
  const config = readSvampConfig(configPath);
17835
17861
  const entries = Array.from(urls.entries());
@@ -17847,7 +17873,7 @@ async function startDaemon(options) {
17847
17873
  }
17848
17874
  }
17849
17875
  async function createExposedTunnel(spec) {
17850
- const { FrpcTunnel } = await import('./frpc-Cv6J2Mex.mjs');
17876
+ const { FrpcTunnel } = await import('./frpc-DxIjZ8o_.mjs');
17851
17877
  const tunnel = new FrpcTunnel({
17852
17878
  name: spec.name,
17853
17879
  ports: spec.ports,
@@ -17875,7 +17901,7 @@ async function startDaemon(options) {
17875
17901
  ensureAutoInstalledCommands(logger);
17876
17902
  (async () => {
17877
17903
  try {
17878
- const { beginClaudeVersionReconcile } = await import('./pinnedClaudeCode-C6MSkqS9.mjs');
17904
+ const { beginClaudeVersionReconcile } = await import('./pinnedClaudeCode-zDzkOTi2.mjs');
17879
17905
  beginClaudeVersionReconcile((msg) => logger.log(msg));
17880
17906
  } catch (e) {
17881
17907
  logger.log(`[claude-version] check failed: ${e?.message || e}`);
@@ -19194,7 +19220,7 @@ ${parts.join("\n")}`);
19194
19220
  auto_resumes: prog.auto_resumes
19195
19221
  });
19196
19222
  const extNote = summarizeExtensions(ls.extensions, maxExt);
19197
- const resumeHint = iterStop ? `Extend with a reason: svamp session loop-extend ${sessionId} --reason "<why>" \xB7 or set a new cap: svamp session loop-resume ${sessionId} --max <N>` : `Raise the cost cap to resume (--max won't \u2014 it only raises the iteration cap): svamp session loop ${sessionId} --max-runtime-sec <N> and/or --max-tokens-per-hour <N>`;
19223
+ const resumeHint = iterStop ? `Extend with a reason: svamp session loop-extend ${sessionId} --reason "<why>" [--turns <N>]` : `Raise the cost cap to resume (--max won't \u2014 it only raises the iteration cap): svamp session loop ${sessionId} --max-runtime-sec <N> and/or --max-tokens-per-hour <N>`;
19198
19224
  const detail = `${budgetCheck.reason} (hard ${iterStop ? "iteration ceiling" : "cost ceiling"} \u2014 will not auto-resume)${extNote ? ` [${extNote}]` : ""}. ${resumeHint}`;
19199
19225
  sessionService.pushMessage({ type: "message", message: `\u{1F6D1} Loop stopped \u2014 ${detail}`, level: "warning" }, "event");
19200
19226
  checkSvampConfig?.();
@@ -20081,11 +20107,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
20081
20107
  });
20082
20108
  },
20083
20109
  onIssue: async (params) => {
20084
- const { issueRpc } = await import('./rpc-CkcBAtcs.mjs');
20110
+ const { issueRpc } = await import('./rpc-D7_Gj0Kt.mjs');
20085
20111
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
20086
20112
  },
20087
20113
  onWorkflow: async (params) => {
20088
- const { workflowRpc } = await import('./rpc-BwxwusfB.mjs');
20114
+ const { workflowRpc } = await import('./rpc-BVw8Tv9l.mjs');
20089
20115
  return workflowRpc(params?.cwd || directory, params || {});
20090
20116
  },
20091
20117
  onRipgrep: async (args, cwd) => {
@@ -20755,11 +20781,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
20755
20781
  });
20756
20782
  },
20757
20783
  onIssue: async (params) => {
20758
- const { issueRpc } = await import('./rpc-CkcBAtcs.mjs');
20784
+ const { issueRpc } = await import('./rpc-D7_Gj0Kt.mjs');
20759
20785
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
20760
20786
  },
20761
20787
  onWorkflow: async (params) => {
20762
- const { workflowRpc } = await import('./rpc-BwxwusfB.mjs');
20788
+ const { workflowRpc } = await import('./rpc-BVw8Tv9l.mjs');
20763
20789
  return workflowRpc(params?.cwd || directory, params || {});
20764
20790
  },
20765
20791
  onRipgrep: async (args, cwd) => {
@@ -21089,7 +21115,7 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
21089
21115
  const iterStop = !isCostCeiling(budgetCheck.kind);
21090
21116
  writeGoalLoopState(directory, sessionId, { ...ls, active: false, phase: "gave_up", completed_at: now, gave_up_reason: `resource budget exhausted \u2014 ${budgetCheck.reason}`, ledger });
21091
21117
  const acpExtNote = summarizeExtensions(ls.extensions, acpMaxExt);
21092
- const acpResumeHint = iterStop ? `Extend with a reason: svamp session loop-extend ${sessionId} --reason "<why>" \xB7 or set a new cap: svamp session loop-resume ${sessionId} --max <N>` : `Raise the cost cap to resume (--max won't \u2014 it only raises the iteration cap): svamp session loop ${sessionId} --max-runtime-sec <N> and/or --max-tokens-per-hour <N>`;
21118
+ const acpResumeHint = iterStop ? `Extend with a reason: svamp session loop-extend ${sessionId} --reason "<why>" [--turns <N>]` : `Raise the cost cap to resume (--max won't \u2014 it only raises the iteration cap): svamp session loop ${sessionId} --max-runtime-sec <N> and/or --max-tokens-per-hour <N>`;
21093
21119
  sessionService.pushMessage({ type: "message", message: `\u{1F6D1} Loop stopped \u2014 ${budgetCheck.reason} (hard ${iterStop ? "iteration ceiling" : "cost ceiling"} \u2014 will not auto-resume)${acpExtNote ? ` [${acpExtNote}]` : ""}. ${acpResumeHint}`, level: "warning" }, "event");
21094
21120
  checkSvampConfig?.();
21095
21121
  return;
@@ -21717,7 +21743,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
21717
21743
  }
21718
21744
  if (persistedSessions.length > 0) {
21719
21745
  try {
21720
- const { awaitClaudeVersionReady } = await import('./pinnedClaudeCode-C6MSkqS9.mjs');
21746
+ const { awaitClaudeVersionReady } = await import('./pinnedClaudeCode-zDzkOTi2.mjs');
21721
21747
  await awaitClaudeVersionReady();
21722
21748
  } catch {
21723
21749
  }
@@ -21922,7 +21948,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
21922
21948
  const PING_TIMEOUT_MS = 15e3;
21923
21949
  const POST_RECONNECT_GRACE_MS = 2e4;
21924
21950
  const RECONNECT_JITTER_MS = 2500;
21925
- const { WorkflowScheduler } = await import('./scheduler-CurN4UtP.mjs');
21951
+ const { WorkflowScheduler } = await import('./scheduler-q7Refevo.mjs');
21926
21952
  const workflowProjectRoots = () => {
21927
21953
  const dirs = /* @__PURE__ */ new Set();
21928
21954
  for (const s of pidToTrackedSession.values()) {
@@ -1,4 +1,4 @@
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-DLG-_xa7.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-CqO23ro_.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, E as listWorkflows, F as isWorkflowEnabled, G as workflowSchedules, H as inZone, y as runWorkflow, I as cronMatches } from './run-DLG-_xa7.mjs';
1
+ import { j as resolveProjectRoot, E as listWorkflows, F as isWorkflowEnabled, G as workflowSchedules, H as inZone, y as runWorkflow, I as cronMatches } from './run-CqO23ro_.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';