svamp-cli 0.2.340 → 0.2.341

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 (26) hide show
  1. package/dist/{adminCommands-K1oo5Zxr.mjs → adminCommands-Btl3is3z.mjs} +1 -1
  2. package/dist/{agentCommands-ChVM6K3a.mjs → agentCommands-B7JaByb0.mjs} +5 -5
  3. package/dist/{auth-D3lxMSjT.mjs → auth-pTUm-zt4.mjs} +1 -1
  4. package/dist/{cli-DS4Xb1_k.mjs → cli-pFCLXDrP.mjs} +104 -81
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-i4sJJo_T.mjs → commands-BUkV04q6.mjs} +3 -3
  7. package/dist/{commands-B--vQWTy.mjs → commands-BaxjRuxM.mjs} +3 -3
  8. package/dist/{commands-CTusBMbx.mjs → commands-C1L_R1H6.mjs} +3 -3
  9. package/dist/{commands-Daivh0OQ.mjs → commands-C4whLEwv.mjs} +12 -17
  10. package/dist/{commands-CQ37lyCn.mjs → commands-CMCSUI4A.mjs} +2 -2
  11. package/dist/{commands-CENM3waA.mjs → commands-CfP6gPZF.mjs} +1 -1
  12. package/dist/{commands-CIfNXKBb.mjs → commands-EcIOSJHF.mjs} +3 -3
  13. package/dist/{commands-oblvzodh.mjs → commands-znQSQbTX.mjs} +11 -11
  14. package/dist/{fleet-C4R6E2Hp.mjs → fleet-U-WXVbW_.mjs} +1 -1
  15. package/dist/{headlessCli-CTp95z2R.mjs → headlessCli-CptF7_lZ.mjs} +2 -2
  16. package/dist/index.mjs +1 -1
  17. package/dist/{notifyCommands-CYQ80UQK.mjs → notifyCommands-DitnhzYz.mjs} +1 -1
  18. package/dist/{package-4ZZ-NyHo.mjs → package-CigJ8nhu.mjs} +3 -3
  19. package/dist/{rpc-Hzx79dRT.mjs → rpc-BPT9DJXL.mjs} +4 -4
  20. package/dist/{rpc-C_4D0N6G.mjs → rpc-zndUgvJ7.mjs} +1 -1
  21. package/dist/{run-DQnBdAxD.mjs → run-CrUTBmi4.mjs} +1 -1
  22. package/dist/{run-zvn6DVUS.mjs → run-LHJh7jLy.mjs} +15276 -15005
  23. package/dist/{scheduler-BiHJvgws.mjs → scheduler-B0h2sfGn.mjs} +1 -1
  24. package/dist/{serveCommands-CQMkfTEw.mjs → serveCommands-DpF0xKvz.mjs} +31 -16
  25. package/dist/{sideband-BskNkJLx.mjs → sideband-B5n9fNxM.mjs} +1 -1
  26. package/package.json +4 -4
@@ -1,10 +1,10 @@
1
- import { connectAndResolveSession } from './commands-Daivh0OQ.mjs';
2
- import { w as wantsHelp } from './cli-DS4Xb1_k.mjs';
1
+ import { connectAndResolveSession } from './commands-C4whLEwv.mjs';
2
+ import { w as wantsHelp } from './cli-pFCLXDrP.mjs';
3
3
  import 'node:fs';
4
4
  import 'node:child_process';
5
5
  import 'node:path';
6
6
  import 'node:os';
7
- import './run-zvn6DVUS.mjs';
7
+ import './run-LHJh7jLy.mjs';
8
8
  import 'os';
9
9
  import 'fs/promises';
10
10
  import 'fs';
@@ -1,9 +1,9 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { join, resolve } from 'node:path';
3
- import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-Daivh0OQ.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-C4whLEwv.mjs';
4
4
  import { execFileSync } from 'node:child_process';
5
- import { aj as withFileLock, u as updateIssue, k as addComment, l as addIssue, e as shortId } from './run-zvn6DVUS.mjs';
6
- import { w as wantsHelp } from './cli-DS4Xb1_k.mjs';
5
+ import { ak as withFileLock, u as updateIssue, k as addComment, l as addIssue, e as shortId } from './run-LHJh7jLy.mjs';
6
+ import { w as wantsHelp } from './cli-pFCLXDrP.mjs';
7
7
  import 'node:os';
8
8
  import 'os';
9
9
  import 'fs/promises';
@@ -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 { a4 as formatHandle, a5 as normalizeAllowedUser, a6 as loadSecurityContextConfig, a7 as resolveSecurityContext, a8 as buildSecurityContextFromFlags, a9 as mergeSecurityContexts, c as connectToHypha, aa as buildSessionShareUrl, ab as computeOutboundHop, e as shortId, ac as registerAwaitingReply, ad as buildMachineShareUrl, ae as parseHandle, af as handleMatchesMetadata } from './run-zvn6DVUS.mjs';
5
+ import { a5 as formatHandle, a6 as normalizeAllowedUser, a7 as loadSecurityContextConfig, a8 as resolveSecurityContext, a9 as buildSecurityContextFromFlags, aa as mergeSecurityContexts, c as connectToHypha, ab as buildSessionShareUrl, ac as computeOutboundHop, e as shortId, ad as registerAwaitingReply, ae as buildMachineShareUrl, af as parseHandle, ag as handleMatchesMetadata } from './run-LHJh7jLy.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  import 'fs';
@@ -1104,15 +1104,10 @@ function parseShareArg(arg) {
1104
1104
  const parts = arg.split(":");
1105
1105
  const email = parts[0];
1106
1106
  const suppliedRole = parts[1];
1107
- if (suppliedRole) {
1108
- if (!["view", "interact", "admin"].includes(suppliedRole)) {
1109
- throw new Error(`Invalid role "${suppliedRole}" in --share ${arg}. Per-user roles are deprecated; omit the :role suffix.`);
1110
- }
1111
- if (suppliedRole !== "admin") {
1112
- console.warn(`Note: per-user role "${suppliedRole}" is deprecated. Added users have full (owner-equivalent) access.`);
1113
- }
1107
+ if (suppliedRole && !["view", "interact", "admin"].includes(suppliedRole)) {
1108
+ throw new Error(`Invalid role "${suppliedRole}" in --share ${arg}. Valid roles: view, interact, admin.`);
1114
1109
  }
1115
- return { email, role: "admin" };
1110
+ return { email, role: suppliedRole || "admin" };
1116
1111
  }
1117
1112
  async function sessionSpawn(agent, directory, machineId, opts) {
1118
1113
  const { server, machine } = await connectAndGetMachine(machineId);
@@ -1124,7 +1119,7 @@ async function sessionSpawn(agent, directory, machineId, opts) {
1124
1119
  owner: "",
1125
1120
  // will be auto-set by machine service from Hypha context
1126
1121
  allowedUsers: opts.share.map(
1127
- (s) => normalizeAllowedUser({ email: s.email, addedBy: "cli" }, "cli")
1122
+ (s) => normalizeAllowedUser({ email: s.email, role: s.role, addedBy: "cli" }, "cli")
1128
1123
  )
1129
1124
  };
1130
1125
  }
@@ -1194,7 +1189,7 @@ async function sessionSpawn(agent, directory, machineId, opts) {
1194
1189
  console.log(`Security context: ${JSON.stringify(securityContext, null, 2)}`);
1195
1190
  }
1196
1191
  if (sharing) {
1197
- console.log(`Sharing with: ${sharing.allowedUsers.map((u) => u.email).join(", ")} (full access)`);
1192
+ console.log(`Sharing with: ${sharing.allowedUsers.map((u) => `${u.email} (${u.role})`).join(", ")}`);
1198
1193
  }
1199
1194
  const result = await machine.spawnSession({
1200
1195
  directory,
@@ -2190,7 +2185,7 @@ Share link: ${buildSessionShareUrl({
2190
2185
  return;
2191
2186
  }
2192
2187
  if (opts.add) {
2193
- const { email } = parseShareArg(opts.add);
2188
+ const { email, role } = parseShareArg(opts.add);
2194
2189
  const metaResult = await svc.getMetadata();
2195
2190
  let sharing = metaResult.metadata?.sharing || {
2196
2191
  enabled: true,
@@ -2201,14 +2196,14 @@ Share link: ${buildSessionShareUrl({
2201
2196
  sharing.allowedUsers = sharing.allowedUsers.filter(
2202
2197
  (u) => u.email.toLowerCase() !== email.toLowerCase()
2203
2198
  );
2204
- sharing.allowedUsers.push(normalizeAllowedUser({ email, addedBy: "cli" }, "cli"));
2199
+ sharing.allowedUsers.push(normalizeAllowedUser({ email, role, addedBy: "cli" }, "cli"));
2205
2200
  await svc.updateSharing(sharing);
2206
2201
  const shareUrl = buildSessionShareUrl({
2207
2202
  sessionId: fullId,
2208
2203
  workspace: server.config?.workspace,
2209
2204
  machineServiceId: machine.id || `${server.config?.workspace}/${server.config?.client_id}:default`
2210
2205
  });
2211
- console.log(`Shared session ${fullId.slice(0, 8)} with ${email} (full access).`);
2206
+ console.log(`Shared session ${fullId.slice(0, 8)} with ${email} (${role} access).`);
2212
2207
  console.log(`Share link: ${shareUrl}`);
2213
2208
  return;
2214
2209
  }
@@ -2325,7 +2320,7 @@ Isolation: ${iso.available.length > 0 ? iso.available.join(", ") : "none availab
2325
2320
  return;
2326
2321
  }
2327
2322
  if (opts.add) {
2328
- const { email } = parseShareArg(opts.add);
2323
+ const { email, role } = parseShareArg(opts.add);
2329
2324
  const info = await machine.getMachineInfo();
2330
2325
  let sharing = info.metadata?.sharing || {
2331
2326
  enabled: true,
@@ -2336,13 +2331,13 @@ Isolation: ${iso.available.length > 0 ? iso.available.join(", ") : "none availab
2336
2331
  sharing.allowedUsers = sharing.allowedUsers.filter(
2337
2332
  (u) => u.email.toLowerCase() !== email.toLowerCase()
2338
2333
  );
2339
- sharing.allowedUsers.push(normalizeAllowedUser({ email, addedBy: "cli" }, "cli"));
2334
+ sharing.allowedUsers.push(normalizeAllowedUser({ email, role, addedBy: "cli" }, "cli"));
2340
2335
  await machine.updateSharing(sharing);
2341
2336
  const shareUrl = buildMachineShareUrl({
2342
2337
  machineId: info.machineId,
2343
2338
  workspace: server.config?.workspace
2344
2339
  });
2345
- console.log(`Shared machine with ${email} (full access).`);
2340
+ console.log(`Shared machine with ${email} (${role} access).`);
2346
2341
  console.log(`Share link: ${shareUrl}`);
2347
2342
  return;
2348
2343
  }
@@ -1,6 +1,6 @@
1
1
  import { spawnSync } from 'node:child_process';
2
- import { f as resolveProjectRoot, K as workflowSteps, y as setWorkflowEnabled, F as isWorkflowEnabled, z as removeWorkflow, w as getWorkflow, E as listWorkflows, A as validateCronExpr, C as saveWorkflow, D as rawWorkflow, L as describeNextFire } from './run-zvn6DVUS.mjs';
3
- import { w as wantsHelp } from './cli-DS4Xb1_k.mjs';
2
+ import { f as resolveProjectRoot, L as workflowSteps, y as setWorkflowEnabled, F as isWorkflowEnabled, z as removeWorkflow, w as getWorkflow, E as listWorkflows, A as validateCronExpr, C as saveWorkflow, D as rawWorkflow, M as describeNextFire } from './run-LHJh7jLy.mjs';
3
+ import { w as wantsHelp } from './cli-pFCLXDrP.mjs';
4
4
  import 'os';
5
5
  import 'fs/promises';
6
6
  import 'fs';
@@ -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 { V as parseFrontmatter, W as getSkillsServer, X as getSkillsWorkspaceName, Y as getSkillsCollectionName, Z as fetchWithTimeout, _ as searchSkills, $ as SKILLS_DIR, a0 as getSkillInfo, a1 as downloadSkillFile, a2 as listSkillFiles } from './run-zvn6DVUS.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-LHJh7jLy.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
- import { f as flushAndExit } from './cli-DS4Xb1_k.mjs';
4
- import { f as resolveProjectRoot, o as searchIssues, m as listIssues, n as isPendingIssue, j as resumeIssue, p as pauseIssue, k as addComment, u as updateIssue, h as getIssue, i as checkVerifyCommand, q as isVisibleTo, J as summarize, l as addIssue } from './run-zvn6DVUS.mjs';
3
+ import { f as flushAndExit } from './cli-pFCLXDrP.mjs';
4
+ import { f as resolveProjectRoot, o as searchIssues, m as listIssues, n as isPendingIssue, j as resumeIssue, p as pauseIssue, k as addComment, u as updateIssue, h as getIssue, J as checkVerifyCommand, q as isVisibleTo, K as summarize, l as addIssue } from './run-LHJh7jLy.mjs';
5
5
  import './serviceManager-hlOVxkhW.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
@@ -347,7 +347,7 @@ the user explicitly reserved): re-run with \`--blocked "<the specific blocker>"\
347
347
  );
348
348
  process.exit(1);
349
349
  }
350
- const updated = pauseIssue(root, id, question ? { text: question, options } : void 0);
350
+ const updated = pauseIssue(root, id, question ? { text: question, options } : void 0, blocked || void 0);
351
351
  if (!updated) {
352
352
  console.error(`Issue not found: ${id}`);
353
353
  process.exit(1);
@@ -1,6 +1,6 @@
1
1
  import * as path from 'path';
2
- import { w as wantsHelp } from './cli-DS4Xb1_k.mjs';
3
- import './run-zvn6DVUS.mjs';
2
+ import { w as wantsHelp } from './cli-pFCLXDrP.mjs';
3
+ import './run-LHJh7jLy.mjs';
4
4
  import 'os';
5
5
  import 'fs/promises';
6
6
  import 'fs';
@@ -83,7 +83,7 @@ async function serviceExpose(args) {
83
83
  process.exit(1);
84
84
  }
85
85
  if (foreground) {
86
- const { runFrpcTunnel } = await import('./run-zvn6DVUS.mjs').then(function (n) { return n.ar; });
86
+ const { runFrpcTunnel } = await import('./run-LHJh7jLy.mjs').then(function (n) { return n.as; });
87
87
  await runFrpcTunnel(name, ports, void 0, {
88
88
  group,
89
89
  groupKey,
@@ -93,7 +93,7 @@ async function serviceExpose(args) {
93
93
  });
94
94
  return;
95
95
  }
96
- const { connectAndGetMachine } = await import('./commands-Daivh0OQ.mjs');
96
+ const { connectAndGetMachine } = await import('./commands-C4whLEwv.mjs');
97
97
  const { server, machine } = await connectAndGetMachine();
98
98
  try {
99
99
  const status = await machine.tunnelStart({
@@ -115,7 +115,7 @@ async function serviceExpose(args) {
115
115
  console.log(` port ${port}: ${url}`);
116
116
  }
117
117
  if (process.env.SVAMP_SESSION_ID) {
118
- const { autoAddSessionLink } = await import('./agentCommands-ChVM6K3a.mjs');
118
+ const { autoAddSessionLink } = await import('./agentCommands-B7JaByb0.mjs');
119
119
  let added = 0;
120
120
  for (const [port, url] of urlEntries) {
121
121
  const label = urlEntries.length > 1 ? `${name}:${port}` : name;
@@ -151,8 +151,8 @@ async function serviceServe(args) {
151
151
  const resolvedDir = path.resolve(directory);
152
152
  console.log(`Serving ${resolvedDir}`);
153
153
  const http = await import('http');
154
- const { serveStaticMount } = await import('./run-zvn6DVUS.mjs').then(function (n) { return n.as; });
155
- const { getFreePort } = await import('./run-zvn6DVUS.mjs').then(function (n) { return n.ar; });
154
+ const { serveStaticMount } = await import('./run-LHJh7jLy.mjs').then(function (n) { return n.at; });
155
+ const { getFreePort } = await import('./run-LHJh7jLy.mjs').then(function (n) { return n.as; });
156
156
  const server = http.createServer((req, res) => {
157
157
  const u = new URL(req.url || "/", "http://127.0.0.1");
158
158
  let rel = u.pathname;
@@ -175,7 +175,7 @@ async function serviceServe(args) {
175
175
  resolve(18080);
176
176
  });
177
177
  });
178
- const { runFrpcTunnel } = await import('./run-zvn6DVUS.mjs').then(function (n) { return n.ar; });
178
+ const { runFrpcTunnel } = await import('./run-LHJh7jLy.mjs').then(function (n) { return n.as; });
179
179
  void server;
180
180
  await runFrpcTunnel(name, [servePort]);
181
181
  } catch (err) {
@@ -185,7 +185,7 @@ async function serviceServe(args) {
185
185
  }
186
186
  async function serviceList(_args) {
187
187
  try {
188
- const { connectAndGetMachine } = await import('./commands-Daivh0OQ.mjs');
188
+ const { connectAndGetMachine } = await import('./commands-C4whLEwv.mjs');
189
189
  const { server, machine } = await connectAndGetMachine();
190
190
  try {
191
191
  const tunnels = await machine.tunnelList({});
@@ -225,11 +225,11 @@ async function serviceDelete(args) {
225
225
  process.exit(1);
226
226
  }
227
227
  try {
228
- const { connectAndGetMachine } = await import('./commands-Daivh0OQ.mjs');
228
+ const { connectAndGetMachine } = await import('./commands-C4whLEwv.mjs');
229
229
  const { server, machine } = await connectAndGetMachine();
230
230
  try {
231
231
  await machine.tunnelStop({ name });
232
- const { removeSessionLinkByService } = await import('./agentCommands-ChVM6K3a.mjs');
232
+ const { removeSessionLinkByService } = await import('./agentCommands-B7JaByb0.mjs');
233
233
  removeSessionLinkByService("tunnel", name);
234
234
  console.log(`Stopped tunnel '${name}'.`);
235
235
  } catch (err) {
@@ -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 { ag as PINNED_CODEX_VERSION, c as connectToHypha } from './run-zvn6DVUS.mjs';
4
+ import { ah as PINNED_CODEX_VERSION, c as connectToHypha } from './run-LHJh7jLy.mjs';
5
5
  import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-LCVY4Otm.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
@@ -1,5 +1,5 @@
1
- import { a3 as resolveModel, ak as describeMisconfiguration, al as buildMachineDeps } from './run-zvn6DVUS.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-BskNkJLx.mjs';
1
+ import { a4 as resolveModel, al as describeMisconfiguration, am as buildMachineDeps } from './run-LHJh7jLy.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-B5n9fNxM.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-zvn6DVUS.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-LHJh7jLy.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, M as parseJwtEmail } from './run-zvn6DVUS.mjs';
1
+ import { c as connectToHypha, S as SharingNotificationSync, N as parseJwtEmail } from './run-LHJh7jLy.mjs';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { existsSync, readFileSync } from 'node:fs';
4
4
  import { join } from 'node:path';
@@ -1,5 +1,5 @@
1
1
  var name = "svamp-cli";
2
- var version = "0.2.340";
2
+ var version = "0.2.341";
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,11 +19,11 @@ 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: "node test/with-timeout.mjs 420 npx tsx test/test-context-window.mjs && node test/with-timeout.mjs 420 npx tsx test/test-ratelimit-retry.mjs && node test/with-timeout.mjs 420 npx tsx test/test-completed-requests.mjs && node test/with-timeout.mjs 420 npx tsx test/test-reconnect-health.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-fleet-version-parse.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-instance-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-authorize.mjs && node test/with-timeout.mjs 420 npx tsx test/test-normalize-allowed-user.mjs && node test/with-timeout.mjs 420 npx tsx test/test-share-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-update-sharing-normalization.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-sync.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-resolve.mjs && node test/with-timeout.mjs 420 npx tsx test/test-staged-homes-sweep.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cli-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-security-context.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stdin-delivery.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wrap-command.mjs && node test/with-timeout.mjs 420 npx tsx test/test-credential-staging.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-accounts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-force-model.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-oauth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-btw-proxy-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-output-formatters.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-user-events.mjs && node test/with-timeout.mjs 420 npx tsx test/test-migrate-children.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-install.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-setup.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-pairing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-coordinator.mjs && node test/with-timeout.mjs 420 npx tsx test/e2e-outpost-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-auto-topic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-project-info.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-types.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-update-handlers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-scanner.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hypha-client.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-settings.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-daemon-persistence.mjs && node test/with-timeout.mjs 420 npx tsx test/test-detect-isolation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-disable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-session-visibility.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-access-fallback.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-role-map.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-codex.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-hypha-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-kimi.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-receive-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-dns-shadowing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-request-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-app-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-kimi-provider.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-backend.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-bridge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-listener-backoff.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-identity-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-console.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-messages.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-send-query.mjs && node test/with-timeout.mjs 420 npx tsx test/test-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-grouping.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-list-directory.mjs && node test/with-timeout.mjs 420 npx tsx test/test-service-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor-lock.mjs && node test/with-timeout.mjs 420 node test/test-supervisor-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-clear-detection.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compact-detect.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-consolidation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-cross-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-close-gate.mjs && node test/with-timeout.mjs 420 npx tsx test/test-loop-verify.mjs && node test/with-timeout.mjs 420 npx tsx test/test-restore-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-pause.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-scheduler.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cron.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-idle.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-link-subdomain.mjs && node test/with-timeout.mjs 420 npx tsx test/test-short-id.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transcript-edit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-edit-history.mjs && node test/with-timeout.mjs 420 npx tsx test/test-friendly-name.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-dispatch.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sandbox-cli.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-manager.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-files-gateway.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-ws-upgrade.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-static-file-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-stability.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-e2e.mjs --unit-only && node test/with-timeout.mjs 420 npx tsx test/test-frpc-status.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-orphan-reap.mjs && node test/with-timeout.mjs 420 node test/pinnedClaudeCode.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-version-recheck.mjs && node test/with-timeout.mjs 420 node test/fleet.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-file.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channels-service.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hotreload-seam.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload-live.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-core.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-async-reply.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outbox-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-binding.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-store-lock.mjs && npx tsx test/test-channel-lost-update.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stateless-dispatch-limiter.mjs && node test/with-timeout.mjs 420 npx tsx test/test-shared-session-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-http.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-upload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-file-access.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-voice.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-headless.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-merge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-verdict-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-standalone.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-links.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-loop-pause-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-sync-pagination.mjs && node test/with-timeout.mjs 420 npx tsx test/test-graceful-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-flush-exit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0807-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0814-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-prune.mjs && node test/with-timeout.mjs 420 node test/test-message-count-cache.mjs && node test/with-timeout.mjs 420 node test/test-serve-link-gate.mjs && node test/with-timeout.mjs 420 node test/test-security-context-unenforceable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-id-resolution.mjs && node test/with-timeout.mjs 420 npx tsx test/test-help-flag-never-acts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-with-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-queue-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compaction-backstop.mjs && tsx test/test-launchpad-reconcile.mjs && tsx test/test-file-lock-failopen.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-format.mjs && npx tsx test/test-deploy-manifests.mjs && npx tsx test/test-kimi-default-model-1169.mjs && npx tsx test/test-loop-dormant-runtime-1170.mjs && npx tsx test/test-skill-install-atomic.mjs",
22
+ test: "node test/with-timeout.mjs 420 npx tsx test/test-context-window.mjs && node test/with-timeout.mjs 420 npx tsx test/test-ratelimit-retry.mjs && node test/with-timeout.mjs 420 npx tsx test/test-completed-requests.mjs && node test/with-timeout.mjs 420 npx tsx test/test-reconnect-health.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-fleet-version-parse.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-instance-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-authorize.mjs && node test/with-timeout.mjs 420 npx tsx test/test-normalize-allowed-user.mjs && node test/with-timeout.mjs 420 npx tsx test/test-share-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-update-sharing-normalization.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-sync.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sharing-notify-resolve.mjs && node test/with-timeout.mjs 420 npx tsx test/test-staged-homes-sweep.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cli-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-security-context.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stdin-delivery.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-config.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wrap-command.mjs && node test/with-timeout.mjs 420 npx tsx test/test-credential-staging.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-accounts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-force-model.mjs && node test/with-timeout.mjs 420 npx tsx test/test-backend-oauth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-btw-proxy-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-output-formatters.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-user-events.mjs && node test/with-timeout.mjs 420 npx tsx test/test-migrate-children.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-install.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-setup.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-pairing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outpost-coordinator.mjs && node test/with-timeout.mjs 420 npx tsx test/e2e-outpost-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-auto-topic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-project-info.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-types.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transport.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-update-handlers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-scanner.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hypha-client.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-settings.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-daemon-persistence.mjs && node test/with-timeout.mjs 420 npx tsx test/test-detect-isolation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-isolation-disable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-service-logic.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-session-visibility.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-access-fallback.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-role-map.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-helpers.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-codex.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-hypha-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-pinned-kimi.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-receive-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-dns-shadowing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-request-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-app-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-kimi-provider.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-backend.mjs && node test/with-timeout.mjs 420 npx tsx test/test-acp-bridge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-listener-backoff.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-identity-env.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hook-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-interactive-console.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-messages.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-send-query.mjs && node test/with-timeout.mjs 420 npx tsx test/test-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-agent-grouping.mjs && node test/with-timeout.mjs 420 npx tsx test/test-machine-list-directory.mjs && node test/with-timeout.mjs 420 npx tsx test/test-service-commands.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor.mjs && node test/with-timeout.mjs 420 npx tsx test/test-supervisor-lock.mjs && node test/with-timeout.mjs 420 node test/test-supervisor-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-clear-detection.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compact-detect.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-consolidation.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox.mjs && node test/with-timeout.mjs 420 npx tsx test/test-inbox-cross-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-store-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-close-gate.mjs && node test/with-timeout.mjs 420 npx tsx test/test-loop-verify.mjs && node test/with-timeout.mjs 420 npx tsx test/test-restore-decision.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-rpc.mjs && npx tsx test/test-verify-gate-async.mjs && npx tsx test/test-process-env-redaction.mjs && npx tsx test/test-provisioner-pin-published.mjs && npx tsx test/test-pinned-nono.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-pause.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-store.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-scheduler.mjs && node test/with-timeout.mjs 420 npx tsx test/test-cron.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-runs-lock.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-idle.mjs && node test/with-timeout.mjs 420 npx tsx test/test-workflow-reconcile.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-link-subdomain.mjs &&node test/with-timeout.mjs 420 npx tsx test/test-frpc-footprint.mjs && npx tsx test/test-serve-regenerate-url.mjs && node test/with-timeout.mjs 420 npx tsx test/test-short-id.mjs && node test/with-timeout.mjs 420 npx tsx test/test-transcript-edit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-edit-history.mjs && node test/with-timeout.mjs 420 npx tsx test/test-friendly-name.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-rpc-dispatch.mjs && node test/with-timeout.mjs 420 npx tsx test/test-sandbox-cli.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-manager.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-files-gateway.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-ws-upgrade.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-static-file-server.mjs && node test/with-timeout.mjs 420 npx tsx test/test-serve-stability.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-e2e.mjs --unit-only && node test/with-timeout.mjs 420 npx tsx test/test-frpc-status.mjs && node test/with-timeout.mjs 420 npx tsx test/test-frpc-orphan-reap.mjs && node test/with-timeout.mjs 420 node test/pinnedClaudeCode.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-claude-version-recheck.mjs && node test/with-timeout.mjs 420 node test/fleet.test.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-file.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-rpc.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-agent.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channels-service.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hotreload-seam.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-hot-reload-live.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-core.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-async-reply.mjs && node test/with-timeout.mjs 420 npx tsx test/test-outbox-reload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-binding.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-store-lock.mjs && npx tsx test/test-channel-lost-update.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-stateless-dispatch-limiter.mjs && node test/with-timeout.mjs 420 npx tsx test/test-shared-session-identity.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-agent-auth.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-http.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-upload.mjs && node test/with-timeout.mjs 420 npx tsx test/test-channel-file-access.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-voice.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-headless.mjs && node test/with-timeout.mjs 420 npx tsx test/test-wise-machine.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-merge.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-verdict-routing.mjs && node test/with-timeout.mjs 420 npx tsx test/test-crew-standalone.mjs && node test/with-timeout.mjs 420 npx tsx test/test-session-links.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-loop-pause-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-guard.mjs && node test/with-timeout.mjs 420 npx tsx test/test-artifact-sync-pagination.mjs && node test/with-timeout.mjs 420 npx tsx test/test-graceful-restart.mjs && node test/with-timeout.mjs 420 npx tsx test/test-flush-exit.mjs && node test/with-timeout.mjs 420 npx tsx test/test-codex-skills.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0807-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-nightly-0814-fixes.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-prune.mjs && node test/with-timeout.mjs 420 node test/test-message-count-cache.mjs && node test/with-timeout.mjs 420 node test/test-serve-link-gate.mjs && node test/with-timeout.mjs 420 node test/test-security-context-unenforceable.mjs && node test/with-timeout.mjs 420 npx tsx test/test-issue-id-resolution.mjs && node test/with-timeout.mjs 420 npx tsx test/test-help-flag-never-acts.mjs && node test/with-timeout.mjs 420 npx tsx test/test-with-timeout.mjs && node test/with-timeout.mjs 420 npx tsx test/test-message-queue-cap.mjs && node test/with-timeout.mjs 420 npx tsx test/test-compaction-backstop.mjs && tsx test/test-launchpad-reconcile.mjs && tsx test/test-file-lock-failopen.mjs && node test/with-timeout.mjs 420 npx tsx test/test-log-format.mjs && npx tsx test/test-deploy-manifests.mjs && npx tsx test/test-kimi-default-model-1169.mjs && npx tsx test/test-loop-dormant-runtime-1170.mjs && npx tsx test/test-skill-install-atomic.mjs && node test/test-version-unpublished.mjs && node test/test-pin-holds.mjs && node test/test-hypha-token-renewal.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",
26
- "test:e2e": "node --no-warnings test/e2e-session-tests.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/e2e-serve-iframe-login.mjs && npx tsx test/test-archive-preserves-claude-file.mjs && npx tsx test/test-daemon-e2e.mjs && npx tsx test/test-hypha-service.mjs && npx tsx test/test-permission-e2e.mjs && npx tsx test/test-serve-e2e.mjs && npx tsx test/test-session-archive-resume.mjs && npx tsx test/test-session-rpc-e2e.mjs && npx tsx test/test-skills-integration.mjs && npx tsx test/test-wm-refresh.mjs && npx tsx test/e2e-session-files-gateway.mjs && npx tsx test/e2e-dns-production-hosts.mjs && node test/with-timeout.mjs 600 npx tsx test/test-rev-lock-contention.mjs",
26
+ "test:e2e": "node --no-warnings test/e2e-session-tests.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/e2e-serve-iframe-login.mjs && npx tsx test/test-archive-preserves-claude-file.mjs && npx tsx test/test-daemon-e2e.mjs && npx tsx test/test-hypha-service.mjs && npx tsx test/test-permission-e2e.mjs && npx tsx test/test-serve-e2e.mjs && npx tsx test/test-session-archive-resume.mjs && npx tsx test/test-session-rpc-e2e.mjs && npx tsx test/test-skills-integration.mjs && npx tsx test/test-wm-refresh.mjs && npx tsx test/e2e-session-files-gateway.mjs && npx tsx test/e2e-dns-production-hosts.mjs && node test/with-timeout.mjs 600 npx tsx test/test-rev-lock-contention.mjs && npx tsx test/test-embed-headers.mjs",
27
27
  "test:frpc": "npx tsx test/test-frpc-e2e.mjs",
28
28
  prepublishOnly: "node ../../scripts/bump-cli-version.mjs --check && yarn build && yarn test"
29
29
  };
@@ -1,4 +1,4 @@
1
- import { f as resolveProjectRoot, u as updateIssue, h as getIssue, i as checkVerifyCommand, j as resumeIssue, p as pauseIssue, k as addComment, l as addIssue, m as listIssues, n as isPendingIssue, o as searchIssues, q as isVisibleTo } from './run-zvn6DVUS.mjs';
1
+ import { f as resolveProjectRoot, u as updateIssue, h as getIssue, i as checkVerifyCommandAsync, j as resumeIssue, p as pauseIssue, k as addComment, l as addIssue, m as listIssues, n as isPendingIssue, o as searchIssues, q as isVisibleTo } from './run-LHJh7jLy.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -61,7 +61,7 @@ const STATUS_MAP = {
61
61
  archive: "archived",
62
62
  backlog: "ready"
63
63
  };
64
- function issueRpc(cwd, params, deps = {}) {
64
+ async function issueRpc(cwd, params, deps = {}) {
65
65
  const root = resolveProjectRoot(cwd || process.cwd());
66
66
  const op = params.op;
67
67
  switch (op) {
@@ -122,7 +122,7 @@ function issueRpc(cwd, params, deps = {}) {
122
122
  }
123
123
  case "pause": {
124
124
  const question = params.question ? { text: String(params.question), options: Array.isArray(params.options) ? params.options.map(String) : [] } : void 0;
125
- const updated = pauseIssue(root, String(params.id), question);
125
+ const updated = pauseIssue(root, String(params.id), question, params.blocked ? String(params.blocked) : void 0);
126
126
  if (!updated) throw new Error(`Issue not found: ${params.id}`);
127
127
  if (question) notifyOwnerOnFollowUp(updated, `needs your input: ${question.text}`, params.session || null, deps);
128
128
  return updated;
@@ -139,7 +139,7 @@ function issueRpc(cwd, params, deps = {}) {
139
139
  if (!status) throw new Error(`issue status: unknown status "${params.status}"`);
140
140
  if ((params.status === "close" || params.status === "done") && !params.force) {
141
141
  const cur = getIssue(root, String(params.id));
142
- const res = checkVerifyCommand(root, cur);
142
+ const res = await checkVerifyCommandAsync(root, cur);
143
143
  if (!res.ok) {
144
144
  throw new Error(
145
145
  `Refusing to close #${params.id}: its verify-cmd failed \u2014 the fix is not verified.
@@ -1,4 +1,4 @@
1
- import { f as resolveProjectRoot, t as getRun, v as listRuns, w as getWorkflow, x as runWorkflow, y as setWorkflowEnabled, z as removeWorkflow, A as validateCronExpr, B as validateWorkflowName, C as saveWorkflow, D as rawWorkflow, E as listWorkflows } from './run-zvn6DVUS.mjs';
1
+ import { f as resolveProjectRoot, t as getRun, v as listRuns, w as getWorkflow, x as runWorkflow, y as setWorkflowEnabled, z as removeWorkflow, A as validateCronExpr, B as validateWorkflowName, C as saveWorkflow, D as rawWorkflow, E as listWorkflows } from './run-LHJh7jLy.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 { am as applyClaudeProxyEnv, an as composeSessionId, ao as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ap as generateHookSettings } from './run-zvn6DVUS.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { an as applyClaudeProxyEnv, ao as composeSessionId, ap as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, aq as generateHookSettings } from './run-LHJh7jLy.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';