svamp-cli 0.2.313 → 0.2.314

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 (27) hide show
  1. package/dist/{adminCommands-DINkkchF.mjs → adminCommands-DCttALYO.mjs} +1 -1
  2. package/dist/{agentCommands-CqHUKyRM.mjs → agentCommands-BUsSOz5M.mjs} +5 -5
  3. package/dist/{auth-fmYi12gU.mjs → auth-D5yTcsy2.mjs} +1 -1
  4. package/dist/{cli-C0K7bTFQ.mjs → cli-ahWO_ULm.mjs} +207 -73
  5. package/dist/cli.mjs +2 -2
  6. package/dist/{commands-BlSsMfW6.mjs → commands-BSHZGcCC.mjs} +8 -8
  7. package/dist/{commands-DxwqcKtb.mjs → commands-CJmKY6Qo.mjs} +2 -2
  8. package/dist/{commands-c57jjMV-.mjs → commands-Ce7MP6Ut.mjs} +2 -2
  9. package/dist/{commands-B2KHp8-n.mjs → commands-Cl-TIip1.mjs} +2 -2
  10. package/dist/{commands-DMG7VDBo.mjs → commands-CuinsdU0.mjs} +1 -1
  11. package/dist/{commands-CE9x3OVJ.mjs → commands-ZML4FIzg.mjs} +1 -1
  12. package/dist/{commands-lt3_KA5S.mjs → commands-bS4ErsEr.mjs} +2 -2
  13. package/dist/{commands-BspIWEyi.mjs → commands-r4QVEq12.mjs} +1 -1
  14. package/dist/{fleet-DX-cpu52.mjs → fleet-CSwFR8B0.mjs} +41 -2
  15. package/dist/{frpc-B5LHRKTD.mjs → frpc-CpuE7d3Y.mjs} +1 -1
  16. package/dist/{headlessCli-BE4CanO7.mjs → headlessCli-Dg-awx4h.mjs} +2 -2
  17. package/dist/index.mjs +1 -1
  18. package/dist/{notifyCommands-Deh2F41t.mjs → notifyCommands-Dlm4RafU.mjs} +1 -1
  19. package/dist/{package-C9HRV5XP.mjs → package-DO2e6EnU.mjs} +2 -2
  20. package/dist/{rpc-BxOm5nyE.mjs → rpc-BN7kFhGk.mjs} +1 -1
  21. package/dist/{rpc-DOl276lO.mjs → rpc-CLTPF1K6.mjs} +1 -1
  22. package/dist/{run-CDZ1g-Fa.mjs → run-B6-6GYde.mjs} +1 -1
  23. package/dist/{run-DI8N2DhV.mjs → run-Y3YLx8x7.mjs} +265 -18
  24. package/dist/{scheduler-C0WXBdL_.mjs → scheduler-CWlkmpMz.mjs} +1 -1
  25. package/dist/{serveCommands-DChM4ubY.mjs → serveCommands-mnocpHcO.mjs} +5 -5
  26. package/dist/{sideband-BdHdwflN.mjs → sideband-c4lkIKWJ.mjs} +1 -1
  27. package/package.json +2 -2
package/dist/cli.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import './run-DI8N2DhV.mjs';
1
+ import './run-Y3YLx8x7.mjs';
2
2
  import './serviceManager-hlOVxkhW.mjs';
3
- import './cli-C0K7bTFQ.mjs';
3
+ import './cli-ahWO_ULm.mjs';
4
4
  import 'os';
5
5
  import 'fs/promises';
6
6
  import 'fs';
@@ -60,7 +60,7 @@ async function serviceExpose(args) {
60
60
  process.exit(1);
61
61
  }
62
62
  if (foreground) {
63
- const { runFrpcTunnel } = await import('./frpc-B5LHRKTD.mjs');
63
+ const { runFrpcTunnel } = await import('./frpc-CpuE7d3Y.mjs');
64
64
  await runFrpcTunnel(name, ports, void 0, {
65
65
  group,
66
66
  groupKey,
@@ -70,7 +70,7 @@ async function serviceExpose(args) {
70
70
  });
71
71
  return;
72
72
  }
73
- const { connectAndGetMachine } = await import('./commands-BspIWEyi.mjs');
73
+ const { connectAndGetMachine } = await import('./commands-r4QVEq12.mjs');
74
74
  const { server, machine } = await connectAndGetMachine();
75
75
  try {
76
76
  const status = await machine.tunnelStart({
@@ -92,7 +92,7 @@ async function serviceExpose(args) {
92
92
  console.log(` port ${port}: ${url}`);
93
93
  }
94
94
  if (process.env.SVAMP_SESSION_ID) {
95
- const { autoAddSessionLink } = await import('./agentCommands-CqHUKyRM.mjs');
95
+ const { autoAddSessionLink } = await import('./agentCommands-BUsSOz5M.mjs');
96
96
  let added = 0;
97
97
  for (const [port, url] of urlEntries) {
98
98
  const label = urlEntries.length > 1 ? `${name}:${port}` : name;
@@ -128,8 +128,8 @@ async function serviceServe(args) {
128
128
  const resolvedDir = path.resolve(directory);
129
129
  console.log(`Serving ${resolvedDir}`);
130
130
  const http = await import('http');
131
- const { serveStaticMount } = await import('./run-DI8N2DhV.mjs').then(function (n) { return n.ap; });
132
- const { getFreePort } = await import('./frpc-B5LHRKTD.mjs');
131
+ const { serveStaticMount } = await import('./run-Y3YLx8x7.mjs').then(function (n) { return n.ap; });
132
+ const { getFreePort } = await import('./frpc-CpuE7d3Y.mjs');
133
133
  const server = http.createServer((req, res) => {
134
134
  const u = new URL(req.url || "/", "http://127.0.0.1");
135
135
  let rel = u.pathname;
@@ -152,7 +152,7 @@ async function serviceServe(args) {
152
152
  resolve(18080);
153
153
  });
154
154
  });
155
- const { runFrpcTunnel } = await import('./frpc-B5LHRKTD.mjs');
155
+ const { runFrpcTunnel } = await import('./frpc-CpuE7d3Y.mjs');
156
156
  void server;
157
157
  await runFrpcTunnel(name, [servePort]);
158
158
  } catch (err) {
@@ -162,7 +162,7 @@ async function serviceServe(args) {
162
162
  }
163
163
  async function serviceList(_args) {
164
164
  try {
165
- const { connectAndGetMachine } = await import('./commands-BspIWEyi.mjs');
165
+ const { connectAndGetMachine } = await import('./commands-r4QVEq12.mjs');
166
166
  const { server, machine } = await connectAndGetMachine();
167
167
  try {
168
168
  const tunnels = await machine.tunnelList({});
@@ -202,7 +202,7 @@ async function serviceDelete(args) {
202
202
  process.exit(1);
203
203
  }
204
204
  try {
205
- const { connectAndGetMachine } = await import('./commands-BspIWEyi.mjs');
205
+ const { connectAndGetMachine } = await import('./commands-r4QVEq12.mjs');
206
206
  const { server, machine } = await connectAndGetMachine();
207
207
  try {
208
208
  await machine.tunnelStop({ name });
@@ -1,9 +1,9 @@
1
- import { connectAndResolveSession } from './commands-BspIWEyi.mjs';
1
+ import { connectAndResolveSession } from './commands-r4QVEq12.mjs';
2
2
  import 'node:fs';
3
3
  import 'node:child_process';
4
4
  import 'node:path';
5
5
  import 'node:os';
6
- import './run-DI8N2DhV.mjs';
6
+ import './run-Y3YLx8x7.mjs';
7
7
  import 'os';
8
8
  import 'fs/promises';
9
9
  import 'fs';
@@ -1,8 +1,8 @@
1
1
  import { execSync } from 'node:child_process';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
- import { f as flushAndExit } from './cli-C0K7bTFQ.mjs';
5
- import { j as resolveProjectRoot, q as searchIssues, o as listIssues, l as resumeIssue, p as pauseIssue, m as addComment, u as updateIssue, k as getIssue, t as isVisibleTo, J as summarize, n as addIssue } from './run-DI8N2DhV.mjs';
4
+ import { f as flushAndExit } from './cli-ahWO_ULm.mjs';
5
+ import { j as resolveProjectRoot, q as searchIssues, o as listIssues, l as resumeIssue, p as pauseIssue, m as addComment, u as updateIssue, k as getIssue, t as isVisibleTo, J as summarize, n as addIssue } from './run-Y3YLx8x7.mjs';
6
6
  import './serviceManager-hlOVxkhW.mjs';
7
7
  import 'os';
8
8
  import 'fs/promises';
@@ -1,11 +1,11 @@
1
1
  import { writeFileSync, readFileSync } from 'fs';
2
2
  import { resolve } from 'path';
3
- import { connectAndGetMachine } from './commands-BspIWEyi.mjs';
3
+ import { connectAndGetMachine } from './commands-r4QVEq12.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-DI8N2DhV.mjs';
8
+ import './run-Y3YLx8x7.mjs';
9
9
  import 'os';
10
10
  import 'fs/promises';
11
11
  import 'url';
@@ -1,5 +1,5 @@
1
1
  import { spawnSync } from 'node:child_process';
2
- import { j as resolveProjectRoot, K as workflowSteps, z as setWorkflowEnabled, F as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, E as listWorkflows, C as saveWorkflow, D as rawWorkflow } from './run-DI8N2DhV.mjs';
2
+ import { j as resolveProjectRoot, K as workflowSteps, z as setWorkflowEnabled, F as isWorkflowEnabled, A as removeWorkflow, x as getWorkflow, E as listWorkflows, C as saveWorkflow, D as rawWorkflow } from './run-Y3YLx8x7.mjs';
3
3
  import 'os';
4
4
  import 'fs/promises';
5
5
  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-DI8N2DhV.mjs';
4
+ import { U as parseFrontmatter, V as getSkillsServer, W as getSkillsWorkspaceName, X as getSkillsCollectionName, Y as fetchWithTimeout, Z as searchSkills, _ as SKILLS_DIR, $ as getSkillInfo, a0 as downloadSkillFile, a1 as listSkillFiles } from './run-Y3YLx8x7.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 { join, resolve } from 'node:path';
3
- import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-BspIWEyi.mjs';
3
+ import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-r4QVEq12.mjs';
4
4
  import { execFileSync } from 'node:child_process';
5
- import { ai as withFileLock, u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-DI8N2DhV.mjs';
5
+ import { ai as withFileLock, u as updateIssue, m as addComment, n as addIssue, i as shortId } from './run-Y3YLx8x7.mjs';
6
6
  import 'node:os';
7
7
  import 'os';
8
8
  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 { a6 as formatHandle, a7 as normalizeAllowedUser, a8 as loadSecurityContextConfig, a9 as resolveSecurityContext, aa as buildSecurityContextFromFlags, ab as mergeSecurityContexts, c as connectToHypha, ac as buildSessionShareUrl, ad as computeOutboundHop, i as shortId, ae as registerAwaitingReply, af as buildMachineShareUrl, ag as parseHandle, ah as handleMatchesMetadata } from './run-DI8N2DhV.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, i as shortId, ad as registerAwaitingReply, ae as buildMachineShareUrl, af as parseHandle, ag as handleMatchesMetadata } from './run-Y3YLx8x7.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
8
8
  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 { U as PINNED_CODEX_VERSION, c as connectToHypha } from './run-DI8N2DhV.mjs';
4
+ import { ah as PINNED_CODEX_VERSION, c as connectToHypha } from './run-Y3YLx8x7.mjs';
5
5
  import { PINNED_CLAUDE_CODE_VERSION } from './pinnedClaudeCode-mM9Q6Q2G.mjs';
6
6
  import 'os';
7
7
  import 'fs/promises';
@@ -22,6 +22,9 @@ import 'node:readline';
22
22
  import 'node:fs/promises';
23
23
  import 'yaml';
24
24
 
25
+ const KIMI_NPM_PACKAGE = "@moonshot-ai/kimi-code";
26
+ const PINNED_KIMI_VERSION = "0.34.0";
27
+
25
28
  const SVAMP_HOME = process.env.SVAMP_HOME || join(os.homedir(), ".svamp");
26
29
  const DAEMON_STATE_FILE = join(SVAMP_HOME, "daemon.state.json");
27
30
  const ENV_FILE = join(SVAMP_HOME, ".env");
@@ -282,6 +285,42 @@ ${rows.length - failures}/${rows.length} machines on codex ${version}.`);
282
285
  await server.disconnect();
283
286
  }
284
287
  }
288
+ async function fleetUpgradeKimi(opts) {
289
+ const version = opts?.version || PINNED_KIMI_VERSION;
290
+ const { server, machines } = await discoverMachines();
291
+ if (machines.length === 0) {
292
+ console.log("No machines found.");
293
+ await server.disconnect();
294
+ return;
295
+ }
296
+ console.log(`Reconciling Kimi to ${version} on ${machines.length} machine(s)...
297
+ `);
298
+ console.log(`Note: Kimi is a global npm package (${KIMI_NPM_PACKAGE}); machines that never use it can ignore this.`);
299
+ console.log(` ${version} is the pinned build tested against svamp's \`kimi acp\` ACP transport.
300
+ `);
301
+ try {
302
+ printHeader(["MACHINE ID", "LABEL", "STATE", "DETAIL"], [20, 24, 6, 60]);
303
+ const cmd = `bash -lc 'npm install -g ${KIMI_NPM_PACKAGE}@${version} 2>&1 | tail -5'`;
304
+ const rows = await fanOut(machines, async (m) => await m.rpc.bash(cmd, void 0));
305
+ let failures = 0;
306
+ for (const r of rows) {
307
+ if (!r.ok) {
308
+ printResultRow(r.machine, "FAIL", r.error || "");
309
+ failures += 1;
310
+ continue;
311
+ }
312
+ const ok = r.result.exitCode === 0;
313
+ const detail = (r.result.stdout?.trim().split("\n").slice(-1)[0] || r.result.stderr?.trim().slice(-200) || "").replace(/\s+/g, " ");
314
+ printResultRow(r.machine, ok ? "OK" : "FAIL", detail);
315
+ if (!ok) failures += 1;
316
+ }
317
+ console.log(`
318
+ ${rows.length - failures}/${rows.length} machines on kimi ${version}.`);
319
+ if (failures > 0) process.exitCode = 1;
320
+ } finally {
321
+ await server.disconnect();
322
+ }
323
+ }
285
324
  async function fleetUpgradeSvamp(opts) {
286
325
  const version = opts?.version || "latest";
287
326
  const { server, machines } = await discoverMachines();
@@ -397,4 +436,4 @@ ${rows.length - failures}/${rows.length} updated.`);
397
436
  }
398
437
  }
399
438
 
400
- export { fleetDaemonRestart, fleetExec, fleetPushSkill, fleetStatus, fleetUpgradeClaude, fleetUpgradeCodex, fleetUpgradeSvamp, partitionSelf };
439
+ export { fleetDaemonRestart, fleetExec, fleetPushSkill, fleetStatus, fleetUpgradeClaude, fleetUpgradeCodex, fleetUpgradeKimi, fleetUpgradeSvamp, partitionSelf };
@@ -4,7 +4,7 @@ import { mkdirSync, chmodSync, writeFileSync, unlinkSync, existsSync, readFileSy
4
4
  import { join } from 'path';
5
5
  import { homedir, platform, arch } from 'os';
6
6
  import { randomUUID, createHash } from 'crypto';
7
- import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-DI8N2DhV.mjs';
7
+ import { e as getFrpsSubdomainHost, f as getFrpsServerPort, h as getFrpsServerAddr } from './run-Y3YLx8x7.mjs';
8
8
  import 'fs/promises';
9
9
  import 'url';
10
10
  import 'node:crypto';
@@ -1,5 +1,5 @@
1
- import { a3 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-DI8N2DhV.mjs';
2
- import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-BdHdwflN.mjs';
1
+ import { a2 as resolveModel, aj as describeMisconfiguration, ak as buildMachineDeps } from './run-Y3YLx8x7.mjs';
2
+ import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-c4lkIKWJ.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-DI8N2DhV.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-Y3YLx8x7.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { c as connectToHypha, S as SharingNotificationSync, L as parseJwtEmail } from './run-DI8N2DhV.mjs';
1
+ import { c as connectToHypha, S as SharingNotificationSync, L as parseJwtEmail } from './run-Y3YLx8x7.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.313";
2
+ var version = "0.2.314";
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-sharing-notify-resolve.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-stdin-delivery.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-codex-force-model.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-user-events.mjs && npx tsx test/test-migrate-children.mjs && npx tsx test/test-outpost-install.mjs && npx tsx test/test-outpost-setup.mjs && npx tsx test/test-outpost-pairing.mjs && npx tsx test/test-outpost-coordinator.mjs && npx tsx test/e2e-outpost-transport.mjs && npx tsx test/test-inbox-reconcile.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-isolation-disable.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-machine-session-visibility.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-session-rpc-role-map.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-pinned-codex.mjs && npx tsx test/test-codex-request-timeout.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-listener-backoff.mjs && npx tsx test/test-session-identity-env.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-compact-detect.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-store-lock.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-restore-decision.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-runs-lock.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-workflow-reconcile.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-store-lock.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-stateless-dispatch-limiter.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-artifact-sync-pagination.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs && npx tsx test/test-codex-skills.mjs",
22
+ test: "npx tsx test/test-context-window.mjs && npx tsx test/test-ratelimit-retry.mjs && npx tsx test/test-instance-config.mjs && npx tsx test/test-authorize.mjs && npx tsx test/test-normalize-allowed-user.mjs && npx tsx test/test-share-url.mjs && npx tsx test/test-update-sharing-normalization.mjs && npx tsx test/test-sharing-notify-sync.mjs && npx tsx test/test-sharing-notify-resolve.mjs && npx tsx test/test-staged-homes-sweep.mjs && npx tsx test/test-session-helpers.mjs && npx tsx test/test-cli-routing.mjs && npx tsx test/test-security-context.mjs && npx tsx test/test-isolation-decision.mjs && npx tsx test/test-message-helpers.mjs && npx tsx test/test-stdin-delivery.mjs && npx tsx test/test-agent-config.mjs && npx tsx test/test-wrap-command.mjs && npx tsx test/test-credential-staging.mjs && npx tsx test/test-claude-auth.mjs && npx tsx test/test-backend-accounts.mjs && npx tsx test/test-codex-force-model.mjs && npx tsx test/test-backend-oauth.mjs && npx tsx test/test-btw-proxy-env.mjs && npx tsx test/test-output-formatters.mjs && npx tsx test/test-inbox-guard.mjs && npx tsx test/test-user-events.mjs && npx tsx test/test-migrate-children.mjs && npx tsx test/test-outpost-install.mjs && npx tsx test/test-outpost-setup.mjs && npx tsx test/test-outpost-pairing.mjs && npx tsx test/test-outpost-coordinator.mjs && npx tsx test/e2e-outpost-transport.mjs && npx tsx test/test-inbox-reconcile.mjs && npx tsx test/test-auto-topic.mjs && npx tsx test/test-project-info.mjs && npx tsx test/test-agent-types.mjs && npx tsx test/test-transport.mjs && npx tsx test/test-session-update-handlers.mjs && npx tsx test/test-session-scanner.mjs && npx tsx test/test-hypha-client.mjs && npx tsx test/test-hook-settings.mjs && npx tsx test/test-session-service-logic.mjs && npx tsx test/test-daemon-persistence.mjs && npx tsx test/test-detect-isolation.mjs && npx tsx test/test-isolation-disable.mjs && npx tsx test/test-machine-service-logic.mjs && npx tsx test/test-machine-session-visibility.mjs && npx tsx test/test-session-access-fallback.mjs && npx tsx test/test-session-rpc-role-map.mjs && npx tsx test/test-interactive-helpers.mjs && npx tsx test/test-pinned-codex.mjs && npx tsx test/test-codex-request-timeout.mjs && npx tsx test/test-codex-app-server.mjs && npx tsx test/e2e-codex-midturn-steer.mjs && npx tsx test/test-kimi-provider.mjs && npx tsx test/test-acp-backend.mjs && npx tsx test/test-acp-bridge.mjs && npx tsx test/test-listener-backoff.mjs && npx tsx test/test-session-identity-env.mjs && npx tsx test/test-hook-server.mjs && npx tsx test/test-session-commands.mjs && npx tsx test/test-interactive-console.mjs && npx tsx test/test-session-messages.mjs && npx tsx test/test-session-send-query.mjs && npx tsx test/test-skills.mjs && npx tsx test/test-agent-grouping.mjs && npx tsx test/test-machine-list-directory.mjs && npx tsx test/test-service-commands.mjs && npx tsx test/test-supervisor.mjs && npx tsx test/test-supervisor-lock.mjs && node test/test-supervisor-restart.mjs && npx tsx test/test-clear-detection.mjs && npx tsx test/test-compact-detect.mjs && npx tsx test/test-session-consolidation.mjs && npx tsx test/test-inbox-store.mjs && npx tsx test/test-inbox.mjs && npx tsx test/test-inbox-cross-machine.mjs && npx tsx test/test-issue-store.mjs && npx tsx test/test-issue-store-lock.mjs && npx tsx test/test-issue-close-gate.mjs && npx tsx test/test-loop-verify.mjs && npx tsx test/test-restore-decision.mjs && npx tsx test/test-issue-rpc.mjs && npx tsx test/test-issue-pause.mjs && npx tsx test/test-workflow-store.mjs && npx tsx test/test-workflow-rpc.mjs && npx tsx test/test-workflow-scheduler.mjs && npx tsx test/test-cron.mjs && npx tsx test/test-workflow-runs.mjs && npx tsx test/test-workflow-runs-lock.mjs && npx tsx test/test-workflow-idle.mjs && npx tsx test/test-workflow-reconcile.mjs && npx tsx test/test-serve-link-subdomain.mjs && npx tsx test/test-short-id.mjs && npx tsx test/test-transcript-edit.mjs && npx tsx test/test-edit-history.mjs && npx tsx test/test-friendly-name.mjs && npx tsx test/test-session-rpc-dispatch.mjs && npx tsx test/test-sandbox-cli.mjs && npx tsx test/test-serve-manager.mjs && npx tsx test/test-serve-ws-upgrade.mjs && npx tsx test/test-serve-auth.mjs && npx tsx test/test-static-file-server.mjs && npx tsx test/test-serve-stability.mjs && npx tsx test/test-frpc-e2e.mjs --unit-only && npx tsx test/test-frpc-status.mjs && node test/pinnedClaudeCode.test.mjs && node test/fleet.test.mjs && npx tsx test/test-session-file.mjs && npx tsx test/test-channel-rpc.mjs && npx tsx test/test-wise-agent.mjs && npx tsx test/test-channel-agent.mjs && npx tsx test/test-channels-service.mjs && npx tsx test/test-hotreload-seam.mjs && npx tsx test/test-hot-reload.mjs && npx tsx test/test-hot-reload-live.mjs && npx tsx test/test-session-core.mjs && npx tsx test/test-channel-async-reply.mjs && npx tsx test/test-outbox-reload.mjs && npx tsx test/test-channel-binding.mjs && npx tsx test/test-channel-store-lock.mjs && npx tsx test/test-channel-identity.mjs && npx tsx test/test-stateless-dispatch-limiter.mjs && npx tsx test/test-shared-session-identity.mjs && npx tsx test/test-wise-agent-auth.mjs && npx tsx test/test-channel-http.mjs && npx tsx test/test-channel-upload.mjs && npx tsx test/test-wise-voice.mjs && npx tsx test/test-wise-headless.mjs && npx tsx test/test-wise-machine.mjs && npx tsx test/test-crew-merge.mjs && npx tsx test/test-crew-verdict-routing.mjs && npx tsx test/test-crew-standalone.mjs && npx tsx test/test-session-links.mjs && npx tsx test/test-issue-loop-pause-guard.mjs && npx tsx test/test-artifact-guard.mjs && npx tsx test/test-artifact-sync-pagination.mjs && npx tsx test/test-graceful-restart.mjs && npx tsx test/test-flush-exit.mjs && npx tsx test/test-codex-skills.mjs",
23
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 { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as validateWorkflowName, C as saveWorkflow, D as rawWorkflow, E as listWorkflows } from './run-DI8N2DhV.mjs';
1
+ import { j as resolveProjectRoot, v as getRun, w as listRuns, x as getWorkflow, y as runWorkflow, z as setWorkflowEnabled, A as removeWorkflow, B as validateWorkflowName, C as saveWorkflow, D as rawWorkflow, E as listWorkflows } from './run-Y3YLx8x7.mjs';
2
2
  import 'os';
3
3
  import 'fs/promises';
4
4
  import 'fs';
@@ -1,4 +1,4 @@
1
- import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-DI8N2DhV.mjs';
1
+ import { j as resolveProjectRoot, u as updateIssue, k as getIssue, l as resumeIssue, p as pauseIssue, m as addComment, n as addIssue, o as listIssues, q as searchIssues, t as isVisibleTo } from './run-Y3YLx8x7.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 { al as applyClaudeProxyEnv, am as composeSessionId, an as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ao as generateHookSettings } from './run-DI8N2DhV.mjs';
1
+ import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import { al as applyClaudeProxyEnv, am as composeSessionId, an as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, ao as generateHookSettings } from './run-Y3YLx8x7.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';