svamp-cli 0.2.262 → 0.2.264

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/{agentCommands-Da1IvglZ.mjs → agentCommands-BZPDL-1B.mjs} +5 -5
  2. package/dist/{auth-0oP68YeR.mjs → auth-Dv8z9Dg0.mjs} +1 -1
  3. package/dist/cli-CNorTj26.mjs +2460 -0
  4. package/dist/cli.mjs +3 -2438
  5. package/dist/{commands-CijMDYaV.mjs → commands-BmpHRl5s.mjs} +1 -1
  6. package/dist/{commands-B8iRZu9B.mjs → commands-CSNOKRVn.mjs} +2 -2
  7. package/dist/{commands-uXRdAqOg.mjs → commands-DNyzbWPw.mjs} +6 -6
  8. package/dist/{commands-DvsieDv9.mjs → commands-D_YqjDY4.mjs} +4 -2
  9. package/dist/{commands-BO0qy2Y0.mjs → commands-Dg_nTA2I.mjs} +2 -2
  10. package/dist/{commands-QXKWC_Ft.mjs → commands-DuPRCS2G.mjs} +1 -1
  11. package/dist/{commands-CRJ6c4Ea.mjs → commands-Kk7AH5dR.mjs} +1 -1
  12. package/dist/{fleet-BAWJhQsC.mjs → fleet-DkFOlkxS.mjs} +1 -1
  13. package/dist/{frpc-B7han0nb.mjs → frpc-DmaWRu0M.mjs} +1 -1
  14. package/dist/{headlessCli-qwpjuvFV.mjs → headlessCli-DFsJaJ2p.mjs} +2 -2
  15. package/dist/index.mjs +1 -1
  16. package/dist/{package-BejWpjWo.mjs → package-Cz5Z0buw.mjs} +2 -2
  17. package/dist/{rpc-DmHEcy9B.mjs → rpc-Db3BR76v.mjs} +1 -1
  18. package/dist/{rpc-1svTrXB4.mjs → rpc-DswYjrCh.mjs} +1 -1
  19. package/dist/{run-B7I_RGWW.mjs → run-C3qTQEDV.mjs} +1 -1
  20. package/dist/{run-BPaC3cDA.mjs → run-kkeXP2d_.mjs} +107 -44
  21. package/dist/{scheduler-oOaKoCTW.mjs → scheduler-DhKDP3hC.mjs} +1 -1
  22. package/dist/{serveCommands-CIF6ecFk.mjs → serveCommands-BVJR3K9P.mjs} +5 -5
  23. package/dist/{serveManager-BiNjVxjK.mjs → serveManager-a_dIQuK4.mjs} +2 -2
  24. package/dist/{sideband-COSN23AN.mjs → sideband-CIJUNKUA.mjs} +1 -1
  25. package/package.json +2 -2
@@ -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 { T as parseFrontmatter, U as getSkillsServer, V as getSkillsWorkspaceName, W as getSkillsCollectionName, X as fetchWithTimeout, Y as searchSkills, Z as SKILLS_DIR, _ as getSkillInfo, $ as downloadSkillFile, a0 as listSkillFiles } from './run-BPaC3cDA.mjs';
4
+ import { P as parseFrontmatter, Q as getSkillsServer, T as getSkillsWorkspaceName, U as getSkillsCollectionName, V as fetchWithTimeout, W as searchSkills, X as SKILLS_DIR, Y as getSkillInfo, Z as downloadSkillFile, _ as listSkillFiles } from './run-kkeXP2d_.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-QXKWC_Ft.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-DuPRCS2G.mjs';
4
4
  import { execSync } from 'node:child_process';
5
- import { u as updateIssue, t as addComment, v as addIssue, k as shortId } from './run-BPaC3cDA.mjs';
5
+ import { u as updateIssue, o as addComment, q as addIssue, i as shortId } from './run-kkeXP2d_.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -58,7 +58,7 @@ async function serviceExpose(args) {
58
58
  process.exit(1);
59
59
  }
60
60
  if (foreground) {
61
- const { runFrpcTunnel } = await import('./frpc-B7han0nb.mjs');
61
+ const { runFrpcTunnel } = await import('./frpc-DmaWRu0M.mjs');
62
62
  await runFrpcTunnel(name, ports, void 0, {
63
63
  group,
64
64
  groupKey,
@@ -68,7 +68,7 @@ async function serviceExpose(args) {
68
68
  });
69
69
  return;
70
70
  }
71
- const { connectAndGetMachine } = await import('./commands-QXKWC_Ft.mjs');
71
+ const { connectAndGetMachine } = await import('./commands-DuPRCS2G.mjs');
72
72
  const { server, machine } = await connectAndGetMachine();
73
73
  try {
74
74
  const status = await machine.tunnelStart({
@@ -90,7 +90,7 @@ async function serviceExpose(args) {
90
90
  console.log(` port ${port}: ${url}`);
91
91
  }
92
92
  if (process.env.SVAMP_SESSION_ID) {
93
- const { autoAddSessionLink } = await import('./agentCommands-Da1IvglZ.mjs');
93
+ const { autoAddSessionLink } = await import('./agentCommands-BZPDL-1B.mjs');
94
94
  let added = 0;
95
95
  for (const [port, url] of urlEntries) {
96
96
  const label = urlEntries.length > 1 ? `${name}:${port}` : name;
@@ -138,7 +138,7 @@ async function serviceServe(args) {
138
138
  server.once("error", reject);
139
139
  server.listen(servePort, "127.0.0.1", () => resolve());
140
140
  });
141
- const { runFrpcTunnel } = await import('./frpc-B7han0nb.mjs');
141
+ const { runFrpcTunnel } = await import('./frpc-DmaWRu0M.mjs');
142
142
  void server;
143
143
  await runFrpcTunnel(name, [servePort]);
144
144
  } catch (err) {
@@ -148,7 +148,7 @@ async function serviceServe(args) {
148
148
  }
149
149
  async function serviceList(_args) {
150
150
  try {
151
- const { connectAndGetMachine } = await import('./commands-QXKWC_Ft.mjs');
151
+ const { connectAndGetMachine } = await import('./commands-DuPRCS2G.mjs');
152
152
  const { server, machine } = await connectAndGetMachine();
153
153
  try {
154
154
  const tunnels = await machine.tunnelList({});
@@ -188,7 +188,7 @@ async function serviceDelete(args) {
188
188
  process.exit(1);
189
189
  }
190
190
  try {
191
- const { connectAndGetMachine } = await import('./commands-QXKWC_Ft.mjs');
191
+ const { connectAndGetMachine } = await import('./commands-DuPRCS2G.mjs');
192
192
  const { server, machine } = await connectAndGetMachine();
193
193
  try {
194
194
  await machine.tunnelStop({ name });
@@ -1,7 +1,9 @@
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 { n as resolveProjectRoot, x as searchIssues, w as listIssues, p as resumeIssue, q as pauseIssue, t as addComment, u as updateIssue, o as getIssue, y as isVisibleTo, L as summarize, v as addIssue } from './run-BPaC3cDA.mjs';
4
+ import { f as flushAndExit } from './cli-CNorTj26.mjs';
5
+ import { l as resolveProjectRoot, v as searchIssues, t as listIssues, n as resumeIssue, p as pauseIssue, o as addComment, u as updateIssue, m as getIssue, w as isVisibleTo, J as summarize, q as addIssue } from './run-kkeXP2d_.mjs';
6
+ import './serviceManager-hlOVxkhW.mjs';
5
7
  import 'os';
6
8
  import 'fs/promises';
7
9
  import 'fs';
@@ -366,7 +368,7 @@ the user explicitly reserved): re-run with \`--blocked "<the specific blocker>"\
366
368
  const pending = listIssues(root).filter(inScope).filter((i) => i.status === "ready" || i.status === "in_progress");
367
369
  if (json) console.log(JSON.stringify(pending));
368
370
  else out(pending.length ? `${pending.length} pending: ${pending.map((i) => "#" + i.id).join(" ")}` : "No pending issues.");
369
- process.exit(pending.length ? 1 : 0);
371
+ await flushAndExit(pending.length ? 1 : 0);
370
372
  break;
371
373
  }
372
374
  case "search": {
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands-QXKWC_Ft.mjs';
3
+ import { connectAndGetMachine } from './commands-DuPRCS2G.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-BPaC3cDA.mjs';
8
+ import './run-kkeXP2d_.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { execSync } from 'node:child_process';
3
3
  import { basename, resolve, join, isAbsolute } from 'node:path';
4
4
  import os from 'node:os';
5
- import { a2 as formatHandle, a3 as normalizeAllowedUser, a4 as loadSecurityContextConfig, a5 as resolveSecurityContext, a6 as buildSecurityContextFromFlags, a7 as mergeSecurityContexts, c as connectToHypha, a8 as buildSessionShareUrl, a9 as computeOutboundHop, k as shortId, aa as registerAwaitingReply, ab as buildMachineShareUrl, ac as parseHandle, ad as handleMatchesMetadata } from './run-BPaC3cDA.mjs';
5
+ import { a2 as formatHandle, a3 as normalizeAllowedUser, a4 as loadSecurityContextConfig, a5 as resolveSecurityContext, a6 as buildSecurityContextFromFlags, a7 as mergeSecurityContexts, c as connectToHypha, a8 as buildSessionShareUrl, a9 as computeOutboundHop, i as shortId, aa as registerAwaitingReply, ab as buildMachineShareUrl, ac as parseHandle, ad as handleMatchesMetadata } from './run-kkeXP2d_.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from 'node:child_process';
2
- import { n as resolveProjectRoot, M as workflowSteps, D as setWorkflowEnabled, I as isWorkflowEnabled, E as removeWorkflow, B as getWorkflow, H as listWorkflows, F as saveWorkflow, G as rawWorkflow } from './run-BPaC3cDA.mjs';
2
+ import { l as resolveProjectRoot, K as workflowSteps, B as setWorkflowEnabled, G as isWorkflowEnabled, C as removeWorkflow, z as getWorkflow, F as listWorkflows, D as saveWorkflow, E as rawWorkflow } from './run-kkeXP2d_.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  import 'fs';
@@ -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-BPaC3cDA.mjs';
4
+ import { c as connectToHypha } from './run-kkeXP2d_.mjs';
5
5
  import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-B9O-hKxm.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 { h as getFrpsSubdomainHost, i as getFrpsServerPort, j as getFrpsServerAddr } from './run-BPaC3cDA.mjs';
7
+ import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-kkeXP2d_.mjs';
8
8
  import 'fs/promises';
9
9
  import 'url';
10
10
  import 'node:crypto';
@@ -1,5 +1,5 @@
1
- import { a1 as resolveModel, ae as describeMisconfiguration, af as buildMachineDeps } from './run-BPaC3cDA.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-COSN23AN.mjs';
1
+ import { $ as resolveModel, ae as describeMisconfiguration, af as buildMachineDeps } from './run-kkeXP2d_.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-CIJUNKUA.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-BPaC3cDA.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-kkeXP2d_.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,5 +1,5 @@
1
1
  var name = "svamp-cli";
2
- var version = "0.2.262";
2
+ var version = "0.2.264";
3
3
  var description = "Svamp CLI — AI workspace daemon on Hypha Cloud";
4
4
  var author = "Amun AI AB";
5
5
  var license = "SEE LICENSE IN LICENSE";
@@ -19,7 +19,7 @@ var exports$1 = {
19
19
  var scripts = {
20
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
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-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-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-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs",
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-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-codex-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-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs",
23
23
  "test:hypha": "node --no-warnings test/test-hypha-service.mjs",
24
24
  dev: "tsx src/cli.ts",
25
25
  "dev:daemon": "tsx src/cli.ts daemon start-sync",
@@ -1,4 +1,4 @@
1
- import { n as resolveProjectRoot, z as getRun, A as listRuns, B as getWorkflow, C as runWorkflow, D as setWorkflowEnabled, E as removeWorkflow, F as saveWorkflow, G as rawWorkflow, H as listWorkflows } from './run-BPaC3cDA.mjs';
1
+ import { l as resolveProjectRoot, x as getRun, y as listRuns, z as getWorkflow, A as runWorkflow, B as setWorkflowEnabled, C as removeWorkflow, D as saveWorkflow, E as rawWorkflow, F as listWorkflows } from './run-kkeXP2d_.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { n as resolveProjectRoot, u as updateIssue, o as getIssue, p as resumeIssue, q as pauseIssue, t as addComment, v as addIssue, w as listIssues, x as searchIssues, y as isVisibleTo } from './run-BPaC3cDA.mjs';
1
+ import { l as resolveProjectRoot, u as updateIssue, m as getIssue, n as resumeIssue, p as pauseIssue, o as addComment, q as addIssue, t as listIssues, v as searchIssues, w as isVisibleTo } from './run-kkeXP2d_.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 { ag as applyClaudeProxyEnv, ah as composeSessionId, ai as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, aj as generateHookSettings } from './run-BPaC3cDA.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { ag as applyClaudeProxyEnv, ah as composeSessionId, ai as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, aj as generateHookSettings } from './run-kkeXP2d_.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';
@@ -253,6 +253,34 @@ function mergeSecurityContexts(base, override) {
253
253
  merged.allowedDirectories = mergeArrays(base.allowedDirectories, override.allowedDirectories);
254
254
  return merged;
255
255
  }
256
+ function clampSecurityContextToCeiling(ceiling, requested) {
257
+ if (!ceiling) return void 0;
258
+ if (!requested) return ceiling;
259
+ const merged = {};
260
+ merged.role = ceiling.role;
261
+ merged.denyAllNetwork = (ceiling.denyAllNetwork ?? false) || (requested.denyAllNetwork ?? false);
262
+ const cf = ceiling.filesystem;
263
+ const rf = requested.filesystem;
264
+ if (cf || rf) {
265
+ merged.filesystem = {
266
+ // Grants: ceiling only (caller cannot widen writable paths).
267
+ allowWrite: cf?.allowWrite ? dedup(cf.allowWrite) : void 0,
268
+ // Denials: union (caller may add more).
269
+ denyRead: mergeArrays(cf?.denyRead, rf?.denyRead),
270
+ denyWrite: mergeArrays(cf?.denyWrite, rf?.denyWrite)
271
+ };
272
+ }
273
+ const cn = ceiling.network;
274
+ const rn = requested.network;
275
+ if (cn || rn) {
276
+ merged.network = {
277
+ allowedDomains: cn?.allowedDomains ? dedup(cn.allowedDomains) : void 0,
278
+ deniedDomains: mergeArrays(cn?.deniedDomains, rn?.deniedDomains)
279
+ };
280
+ }
281
+ merged.allowedDirectories = ceiling.allowedDirectories ? dedup(ceiling.allowedDirectories) : void 0;
282
+ return merged;
283
+ }
256
284
  function resolveSecurityContext(config, userEmail) {
257
285
  if (!config) return void 0;
258
286
  const defaultCtx = config.default;
@@ -2356,7 +2384,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
2356
2384
  if (machineCtx) {
2357
2385
  options = {
2358
2386
  ...options,
2359
- securityContext: mergeSecurityContexts(machineCtx, options.securityContext)
2387
+ securityContext: isSharedUser ? clampSecurityContextToCeiling(machineCtx, options.securityContext) : mergeSecurityContexts(machineCtx, options.securityContext)
2360
2388
  };
2361
2389
  }
2362
2390
  }
@@ -3013,7 +3041,7 @@ async function registerMachineService(server, machineId, metadata, daemonState,
3013
3041
  const tunnels = handlers.tunnels;
3014
3042
  if (!tunnels) throw new Error("Tunnel management not available");
3015
3043
  if (tunnels.has(params.name)) throw new Error(`Tunnel '${params.name}' already running`);
3016
- const { FrpcTunnel } = await import('./frpc-B7han0nb.mjs');
3044
+ const { FrpcTunnel } = await import('./frpc-DmaWRu0M.mjs');
3017
3045
  const tunnel = new FrpcTunnel({
3018
3046
  name: params.name,
3019
3047
  ports: params.ports,
@@ -3480,7 +3508,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
3480
3508
  }
3481
3509
  const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
3482
3510
  const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
3483
- const { toolsForRole } = await import('./sideband-COSN23AN.mjs');
3511
+ const { toolsForRole } = await import('./sideband-CIJUNKUA.mjs');
3484
3512
  const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
3485
3513
  return fmt(r2);
3486
3514
  }
@@ -3579,7 +3607,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
3579
3607
  if (r.error || !r.sender) return { error: r.error || "unauthorized" };
3580
3608
  const callId = "call_" + Math.random().toString(16).slice(2, 12);
3581
3609
  const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
3582
- const { queryCore } = await import('./commands-QXKWC_Ft.mjs');
3610
+ const { queryCore } = await import('./commands-DuPRCS2G.mjs');
3583
3611
  const timeout = c.reply?.timeout_sec || 120;
3584
3612
  let result;
3585
3613
  try {
@@ -8118,7 +8146,6 @@ var acpAgentConfig = /*#__PURE__*/Object.freeze({
8118
8146
  function bridgeAcpToSession(backend, sessionService, getMetadata, setMetadata, log, onTurnEnd, getModelLabel) {
8119
8147
  let pendingText = "";
8120
8148
  let turnText = "";
8121
- let flushTimer = null;
8122
8149
  let bridgeStopped = false;
8123
8150
  const pushAssistant = (content) => {
8124
8151
  const model = getModelLabel?.() || "agent";
@@ -8126,28 +8153,21 @@ function bridgeAcpToSession(backend, sessionService, getMetadata, setMetadata, l
8126
8153
  };
8127
8154
  function flushText() {
8128
8155
  if (pendingText) {
8156
+ turnText += pendingText;
8129
8157
  pushAssistant([{ type: "text", text: pendingText }]);
8130
8158
  pendingText = "";
8131
8159
  }
8132
- if (flushTimer) {
8133
- clearTimeout(flushTimer);
8134
- flushTimer = null;
8135
- }
8136
8160
  }
8137
8161
  backend.onMessage((msg) => {
8138
8162
  if (bridgeStopped) return;
8139
8163
  switch (msg.type) {
8140
8164
  case "model-output": {
8141
- if (msg.textDelta) {
8142
- pendingText += msg.textDelta;
8143
- turnText += msg.textDelta;
8144
- if (!flushTimer) {
8145
- flushTimer = setTimeout(flushText, 100);
8146
- }
8147
- } else if (msg.fullText) {
8165
+ if (msg.fullText) {
8166
+ pendingText = "";
8148
8167
  turnText += msg.fullText;
8149
- flushText();
8150
8168
  pushAssistant([{ type: "text", text: msg.fullText }]);
8169
+ } else if (msg.textDelta) {
8170
+ pendingText += msg.textDelta;
8151
8171
  }
8152
8172
  break;
8153
8173
  }
@@ -8258,10 +8278,6 @@ function bridgeAcpToSession(backend, sessionService, getMetadata, setMetadata, l
8258
8278
  });
8259
8279
  return () => {
8260
8280
  bridgeStopped = true;
8261
- if (flushTimer) {
8262
- clearTimeout(flushTimer);
8263
- flushTimer = null;
8264
- }
8265
8281
  pendingText = "";
8266
8282
  };
8267
8283
  }
@@ -8704,6 +8720,23 @@ function mapDecisionToWire(d) {
8704
8720
  }
8705
8721
  }
8706
8722
 
8723
+ function codexPermissionSettings(mode) {
8724
+ switch (mode) {
8725
+ case "yolo":
8726
+ case "bypassPermissions":
8727
+ case "danger-full-access":
8728
+ return { approvalPolicy: "never", sandbox: "danger-full-access" };
8729
+ case "safe-yolo":
8730
+ case "acceptEdits":
8731
+ return { approvalPolicy: "on-failure", sandbox: "workspace-write" };
8732
+ case "read-only":
8733
+ case "plan":
8734
+ return { approvalPolicy: "on-request", sandbox: "read-only" };
8735
+ case "default":
8736
+ default:
8737
+ return { approvalPolicy: "on-request", sandbox: "workspace-write" };
8738
+ }
8739
+ }
8707
8740
  const CODEX_PROVIDER_KEY_ENV = "SVAMP_CODEX_API_KEY";
8708
8741
  const PROVIDER_NAME = "svamp";
8709
8742
  function resolveCodexProvider(env = process.env) {
@@ -8740,6 +8773,7 @@ var codexProvider = /*#__PURE__*/Object.freeze({
8740
8773
  __proto__: null,
8741
8774
  CODEX_PROVIDER_KEY_ENV: CODEX_PROVIDER_KEY_ENV,
8742
8775
  buildCodexProviderArgs: buildCodexProviderArgs,
8776
+ codexPermissionSettings: codexPermissionSettings,
8743
8777
  hasCustomProvider: hasCustomProvider,
8744
8778
  resolveCodexProvider: resolveCodexProvider
8745
8779
  });
@@ -8752,6 +8786,8 @@ class CodexAppServerBackend {
8752
8786
  const provider = opts.provider ?? resolveCodexProvider();
8753
8787
  const { configArgs, env: providerEnv, model: providerModel } = buildCodexProviderArgs(provider);
8754
8788
  this.model = opts.model ?? providerModel;
8789
+ this.approvalPolicy = opts.approvalPolicy;
8790
+ this.sandbox = opts.sandbox;
8755
8791
  this.client = new CodexAppServerClient({
8756
8792
  cwd: opts.cwd,
8757
8793
  env: { ...opts.env ?? {}, ...providerEnv },
@@ -8768,6 +8804,11 @@ class CodexAppServerBackend {
8768
8804
  sessionId = randomUUID();
8769
8805
  log;
8770
8806
  model;
8807
+ // #0438: codex's own approval policy + sandbox, derived from the svamp permission mode. Mutable
8808
+ // so a mid-session switchMode takes effect on the next turn. yolo → 'never' + 'danger-full-access'
8809
+ // so codex NEVER prompts for writes (and never times out waiting on a prompt).
8810
+ approvalPolicy;
8811
+ sandbox;
8771
8812
  started = false;
8772
8813
  // Approval promises keyed by callId, resolved by respondToPermission().
8773
8814
  pendingApprovals = /* @__PURE__ */ new Map();
@@ -8791,9 +8832,9 @@ class CodexAppServerBackend {
8791
8832
  if (avail === false) throw new Error("Installed Codex is too old for app-server \u2014 upgrade to >= 0.100 (`npm i -g @openai/codex@latest`).");
8792
8833
  await this.client.start();
8793
8834
  if (this.opts.resumeThreadId) {
8794
- await this.client.resumeThread({ threadId: this.opts.resumeThreadId, model: this.model, approvalPolicy: this.opts.approvalPolicy, sandbox: this.opts.sandbox });
8835
+ await this.client.resumeThread({ threadId: this.opts.resumeThreadId, model: this.model, approvalPolicy: this.approvalPolicy, sandbox: this.sandbox });
8795
8836
  } else {
8796
- const r = await this.client.startThread({ model: this.model, approvalPolicy: this.opts.approvalPolicy, sandbox: this.opts.sandbox });
8837
+ const r = await this.client.startThread({ model: this.model, approvalPolicy: this.approvalPolicy, sandbox: this.sandbox });
8797
8838
  this.model = this.model ?? r.model;
8798
8839
  }
8799
8840
  this.started = true;
@@ -8810,7 +8851,7 @@ class CodexAppServerBackend {
8810
8851
  resolveTurn = res;
8811
8852
  });
8812
8853
  try {
8813
- await this.client.sendTurnAndWait(prompt, { model: this.model, approvalPolicy: this.opts.approvalPolicy, sandbox: this.opts.sandbox });
8854
+ await this.client.sendTurnAndWait(prompt, { model: this.model, approvalPolicy: this.approvalPolicy, sandbox: this.sandbox });
8814
8855
  } catch (err) {
8815
8856
  this.emit({ type: "status", status: "error", detail: err instanceof Error ? err.message : String(err) });
8816
8857
  } finally {
@@ -8861,6 +8902,12 @@ class CodexAppServerBackend {
8861
8902
  setModel(model) {
8862
8903
  this.model = model;
8863
8904
  }
8905
+ /** #0438: update codex's approval policy + sandbox (from a svamp permission-mode switch). Takes
8906
+ * effect on the next turn (and next thread start). yolo → 'never' + 'danger-full-access'. */
8907
+ setPermission(approvalPolicy, sandbox) {
8908
+ this.approvalPolicy = approvalPolicy;
8909
+ this.sandbox = sandbox;
8910
+ }
8864
8911
  /** The model label for assistant-message parity with Claude (frontend schema requires a non-empty `model`). */
8865
8912
  getModel() {
8866
8913
  return this.model || "codex";
@@ -8911,10 +8958,7 @@ class CodexAppServerBackend {
8911
8958
  break;
8912
8959
  }
8913
8960
  case "agent_message": {
8914
- if (this.streamedThisMessage) {
8915
- this.streamedThisMessage = false;
8916
- break;
8917
- }
8961
+ this.streamedThisMessage = false;
8918
8962
  const text = mapCodexEventToText(event);
8919
8963
  if (text) this.emit({ type: "model-output", fullText: text });
8920
8964
  break;
@@ -12000,17 +12044,31 @@ function resolveEvaluatorModel(envValue) {
12000
12044
  function parseEvaluatorVerdict(text) {
12001
12045
  if (!text) return null;
12002
12046
  const candidates = [];
12003
- let depth = 0, start = -1;
12047
+ let depth = 0, start = -1, inStr = false, esc = false;
12004
12048
  for (let i = 0; i < text.length; i++) {
12005
12049
  const c = text[i];
12006
- if (c === "{") {
12050
+ if (inStr) {
12051
+ if (esc) {
12052
+ esc = false;
12053
+ } else if (c === "\\") {
12054
+ esc = true;
12055
+ } else if (c === '"') {
12056
+ inStr = false;
12057
+ }
12058
+ continue;
12059
+ }
12060
+ if (c === '"') {
12061
+ inStr = true;
12062
+ } else if (c === "{") {
12007
12063
  if (depth === 0) start = i;
12008
12064
  depth++;
12009
12065
  } else if (c === "}") {
12010
- depth--;
12011
- if (depth === 0 && start >= 0) {
12012
- candidates.push(text.slice(start, i + 1));
12013
- start = -1;
12066
+ if (depth > 0) {
12067
+ depth--;
12068
+ if (depth === 0 && start >= 0) {
12069
+ candidates.push(text.slice(start, i + 1));
12070
+ start = -1;
12071
+ }
12014
12072
  }
12015
12073
  }
12016
12074
  }
@@ -13882,7 +13940,7 @@ async function startDaemon(options) {
13882
13940
  try {
13883
13941
  const dir = loadSessionIndex()[sessionId]?.directory;
13884
13942
  if (!dir) return;
13885
- const { reconcileServiceLinks } = await import('./agentCommands-Da1IvglZ.mjs');
13943
+ const { reconcileServiceLinks } = await import('./agentCommands-BZPDL-1B.mjs');
13886
13944
  const configPath = getSvampConfigPath(dir, sessionId);
13887
13945
  const config = readSvampConfig(configPath);
13888
13946
  const entries = Array.from(urls.entries());
@@ -13900,7 +13958,7 @@ async function startDaemon(options) {
13900
13958
  }
13901
13959
  }
13902
13960
  async function createExposedTunnel(spec) {
13903
- const { FrpcTunnel } = await import('./frpc-B7han0nb.mjs');
13961
+ const { FrpcTunnel } = await import('./frpc-DmaWRu0M.mjs');
13904
13962
  const tunnel = new FrpcTunnel({
13905
13963
  name: spec.name,
13906
13964
  ports: spec.ports,
@@ -13921,7 +13979,7 @@ async function startDaemon(options) {
13921
13979
  }
13922
13980
  const tunnelRecreateState = /* @__PURE__ */ new Map();
13923
13981
  const tunnelRecreateInFlight = /* @__PURE__ */ new Set();
13924
- const { ServeManager } = await import('./serveManager-BiNjVxjK.mjs');
13982
+ const { ServeManager } = await import('./serveManager-a_dIQuK4.mjs');
13925
13983
  const serveManager = new ServeManager(SVAMP_HOME, (msg) => logger.log(`[SERVE] ${msg}`), hyphaServerUrl);
13926
13984
  ensureAutoInstalledSkills(logger).catch(() => {
13927
13985
  });
@@ -16043,11 +16101,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
16043
16101
  });
16044
16102
  },
16045
16103
  onIssue: async (params) => {
16046
- const { issueRpc } = await import('./rpc-1svTrXB4.mjs');
16104
+ const { issueRpc } = await import('./rpc-DswYjrCh.mjs');
16047
16105
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
16048
16106
  },
16049
16107
  onWorkflow: async (params) => {
16050
- const { workflowRpc } = await import('./rpc-DmHEcy9B.mjs');
16108
+ const { workflowRpc } = await import('./rpc-Db3BR76v.mjs');
16051
16109
  return workflowRpc(params?.cwd || directory, params || {});
16052
16110
  },
16053
16111
  onRipgrep: async (args, cwd) => {
@@ -16441,6 +16499,8 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
16441
16499
  if (currentPermissionMode === mode) return;
16442
16500
  logger.log(`[${agentName} Session ${sessionId}] Switch mode: ${mode}`);
16443
16501
  currentPermissionMode = mode;
16502
+ const cp = codexPermissionSettings(mode);
16503
+ agentBackend.setPermission?.(cp.approvalPolicy, cp.sandbox);
16444
16504
  },
16445
16505
  onRestartClaude: async () => {
16446
16506
  logger.log(`[${agentName} Session ${sessionId}] Restart agent requested`);
@@ -16603,11 +16663,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
16603
16663
  });
16604
16664
  },
16605
16665
  onIssue: async (params) => {
16606
- const { issueRpc } = await import('./rpc-1svTrXB4.mjs');
16666
+ const { issueRpc } = await import('./rpc-DswYjrCh.mjs');
16607
16667
  return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
16608
16668
  },
16609
16669
  onWorkflow: async (params) => {
16610
- const { workflowRpc } = await import('./rpc-DmHEcy9B.mjs');
16670
+ const { workflowRpc } = await import('./rpc-Db3BR76v.mjs');
16611
16671
  return workflowRpc(params?.cwd || directory, params || {});
16612
16672
  },
16613
16673
  onRipgrep: async (args, cwd) => {
@@ -16760,7 +16820,8 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
16760
16820
  if (avail === false) throw new Error("Installed Codex is too old for app-server \u2014 upgrade to >= 0.100 (`npm i -g @openai/codex@latest`).");
16761
16821
  const provider = resolveCodexProvider();
16762
16822
  const codexModel = options2.model || agentConfig?.default_model || provider.model || void 0;
16763
- logger.log(`[Agent Session ${sessionId}] Codex backend: app-server (model=${codexModel ?? "default"}${provider.apiBase ? `, provider=${provider.apiBase}` : ""})`);
16823
+ const codexPerm = codexPermissionSettings(currentPermissionMode);
16824
+ logger.log(`[Agent Session ${sessionId}] Codex backend: app-server (model=${codexModel ?? "default"}${provider.apiBase ? `, provider=${provider.apiBase}` : ""}, mode=${currentPermissionMode} \u2192 approval=${codexPerm.approvalPolicy}/sandbox=${codexPerm.sandbox})`);
16764
16825
  if (acpResumeThreadId) logger.log(`[Agent Session ${sessionId}] Resuming Codex thread ${acpResumeThreadId} (restart recovery)`);
16765
16826
  agentBackend = new CodexAppServerBackend({
16766
16827
  cwd: directory,
@@ -16769,6 +16830,8 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
16769
16830
  env: options2.environmentVariables,
16770
16831
  log: logger.log,
16771
16832
  isolationConfig: agentIsoConfig,
16833
+ approvalPolicy: codexPerm.approvalPolicy,
16834
+ sandbox: codexPerm.sandbox,
16772
16835
  // #0412 P2: resume the persisted thread across a daemon restart (context intact).
16773
16836
  resumeThreadId: acpResumeThreadId
16774
16837
  });
@@ -17615,7 +17678,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
17615
17678
  const PING_TIMEOUT_MS = 15e3;
17616
17679
  const POST_RECONNECT_GRACE_MS = 2e4;
17617
17680
  const RECONNECT_JITTER_MS = 2500;
17618
- const { WorkflowScheduler } = await import('./scheduler-oOaKoCTW.mjs');
17681
+ const { WorkflowScheduler } = await import('./scheduler-DhKDP3hC.mjs');
17619
17682
  const workflowScheduler = new WorkflowScheduler({
17620
17683
  projectRoots: () => {
17621
17684
  const dirs = /* @__PURE__ */ new Set();
@@ -18226,4 +18289,4 @@ var run = /*#__PURE__*/Object.freeze({
18226
18289
  writeStopMarker: writeStopMarker
18227
18290
  });
18228
18291
 
18229
- export { downloadSkillFile as $, listRuns as A, getWorkflow as B, runWorkflow as C, setWorkflowEnabled as D, removeWorkflow as E, saveWorkflow as F, rawWorkflow as G, listWorkflows as H, isWorkflowEnabled as I, workflowCrons as J, cronMatches as K, summarize as L, workflowSteps as M, loadMachineContext as N, buildMachineInstructions as O, machineToolsForRole as P, buildMachineTools as Q, READ_ONLY_TOOLS as R, ServeAuth as S, parseFrontmatter as T, getSkillsServer as U, getSkillsWorkspaceName as V, getSkillsCollectionName as W, fetchWithTimeout as X, searchSkills as Y, SKILLS_DIR as Z, getSkillInfo as _, createSessionStore as a, listSkillFiles as a0, resolveModel as a1, formatHandle as a2, normalizeAllowedUser as a3, loadSecurityContextConfig as a4, resolveSecurityContext as a5, buildSecurityContextFromFlags as a6, mergeSecurityContexts as a7, buildSessionShareUrl as a8, computeOutboundHop as a9, registerAwaitingReply as aa, buildMachineShareUrl as ab, parseHandle as ac, handleMatchesMetadata as ad, describeMisconfiguration as ae, buildMachineDeps as af, applyClaudeProxyEnv as ag, composeSessionId as ah, generateFriendlyName as ai, generateHookSettings as aj, claudeAuth as ak, projectInfo as al, DefaultTransport$1 as am, acpBackend as an, acpAgentConfig as ao, codexProvider as ap, codexAppServerBackend as aq, GeminiTransport$1 as ar, instanceConfig as as, api as at, run as au, stopDaemon as b, connectToHypha as c, daemonStatus as d, clearStopMarker as e, stopMarkerExists as f, getHyphaServerUrl$1 as g, getFrpsSubdomainHost as h, getFrpsServerPort as i, getFrpsServerAddr as j, shortId as k, getHyphaServerUrl as l, hasCookieToken as m, resolveProjectRoot as n, getIssue as o, resumeIssue as p, pauseIssue as q, registerMachineService as r, startDaemon as s, addComment as t, updateIssue as u, addIssue as v, listIssues as w, searchIssues as x, isVisibleTo as y, getRun as z };
18292
+ export { resolveModel as $, runWorkflow as A, setWorkflowEnabled as B, removeWorkflow as C, saveWorkflow as D, rawWorkflow as E, listWorkflows as F, isWorkflowEnabled as G, workflowCrons as H, cronMatches as I, summarize as J, workflowSteps as K, loadMachineContext as L, buildMachineInstructions as M, machineToolsForRole as N, buildMachineTools as O, parseFrontmatter as P, getSkillsServer as Q, READ_ONLY_TOOLS as R, ServeAuth as S, getSkillsWorkspaceName as T, getSkillsCollectionName as U, fetchWithTimeout as V, searchSkills as W, SKILLS_DIR as X, getSkillInfo as Y, downloadSkillFile as Z, listSkillFiles as _, createSessionStore as a, clearStopMarker as a0, stopMarkerExists as a1, formatHandle as a2, normalizeAllowedUser as a3, loadSecurityContextConfig as a4, resolveSecurityContext as a5, buildSecurityContextFromFlags as a6, mergeSecurityContexts as a7, buildSessionShareUrl as a8, computeOutboundHop as a9, registerAwaitingReply as aa, buildMachineShareUrl as ab, parseHandle as ac, handleMatchesMetadata as ad, describeMisconfiguration as ae, buildMachineDeps as af, applyClaudeProxyEnv as ag, composeSessionId as ah, generateFriendlyName as ai, generateHookSettings as aj, claudeAuth as ak, projectInfo as al, DefaultTransport$1 as am, acpBackend as an, acpAgentConfig as ao, codexProvider as ap, codexAppServerBackend as aq, GeminiTransport$1 as ar, instanceConfig as as, api as at, run as au, stopDaemon as b, connectToHypha as c, daemonStatus as d, getFrpsSubdomainHost as e, getFrpsServerPort as f, getHyphaServerUrl$1 as g, getFrpsServerAddr as h, shortId as i, getHyphaServerUrl as j, hasCookieToken as k, resolveProjectRoot as l, getIssue as m, resumeIssue as n, addComment as o, pauseIssue as p, addIssue as q, registerMachineService as r, startDaemon as s, listIssues as t, updateIssue as u, searchIssues as v, isVisibleTo as w, getRun as x, listRuns as y, getWorkflow as z };
@@ -1,4 +1,4 @@
1
- import { n as resolveProjectRoot, H as listWorkflows, I as isWorkflowEnabled, J as workflowCrons, C as runWorkflow, K as cronMatches } from './run-BPaC3cDA.mjs';
1
+ import { l as resolveProjectRoot, F as listWorkflows, G as isWorkflowEnabled, H as workflowCrons, A as runWorkflow, I as cronMatches } from './run-kkeXP2d_.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';