svamp-cli 0.2.341 → 0.2.342
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.
- package/dist/{adminCommands-Btl3is3z.mjs → adminCommands-CRTBDZan.mjs} +1 -1
- package/dist/{agentCommands-B7JaByb0.mjs → agentCommands-BuO988tJ.mjs} +5 -5
- package/dist/{auth-pTUm-zt4.mjs → auth--WS0wezs.mjs} +1 -1
- package/dist/{cli-pFCLXDrP.mjs → cli-B24CmIli.mjs} +110 -79
- package/dist/cli.mjs +2 -2
- package/dist/{commands-CMCSUI4A.mjs → commands-BKb1g8Gq.mjs} +2 -2
- package/dist/{commands-CfP6gPZF.mjs → commands-BsKgZ5sQ.mjs} +1 -1
- package/dist/{commands-C1L_R1H6.mjs → commands-C0HQiu-S.mjs} +3 -3
- package/dist/{commands-znQSQbTX.mjs → commands-Cwxy-C5N.mjs} +11 -11
- package/dist/{commands-C4whLEwv.mjs → commands-DDuGBSsz.mjs} +1 -1
- package/dist/{commands-BUkV04q6.mjs → commands-DU4B-4Gh.mjs} +3 -3
- package/dist/{commands-EcIOSJHF.mjs → commands-DXLOKJOj.mjs} +2 -2
- package/dist/{commands-BaxjRuxM.mjs → commands-DXM17M6n.mjs} +3 -3
- package/dist/{fleet-U-WXVbW_.mjs → fleet-BHzlAvnu.mjs} +1 -1
- package/dist/{headlessCli-CptF7_lZ.mjs → headlessCli-C2gvOpOt.mjs} +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{notifyCommands-DitnhzYz.mjs → notifyCommands-0aZUwKQK.mjs} +1 -1
- package/dist/{package-CigJ8nhu.mjs → package-CTbGYaJG.mjs} +2 -2
- package/dist/{rpc-BPT9DJXL.mjs → rpc-B2Lc2BAB.mjs} +1 -1
- package/dist/{rpc-zndUgvJ7.mjs → rpc-rAQQ1q8t.mjs} +1 -1
- package/dist/{run-CrUTBmi4.mjs → run-C7QVfyw4.mjs} +1 -1
- package/dist/{run-LHJh7jLy.mjs → run-CF4kAVPW.mjs} +147 -23
- package/dist/{scheduler-B0h2sfGn.mjs → scheduler-CzF4lOe_.mjs} +1 -1
- package/dist/{serveCommands-DpF0xKvz.mjs → serveCommands-EIEqdaVu.mjs} +10 -10
- package/dist/{sideband-B5n9fNxM.mjs → sideband-BoutiRJi.mjs} +1 -1
- package/package.json +2 -2
|
@@ -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-
|
|
3
|
+
import { connectAndGetMachine, resolveSessionId, createWorktree, connectAndResolveSession } from './commands-DDuGBSsz.mjs';
|
|
4
4
|
import { execFileSync } from 'node:child_process';
|
|
5
|
-
import { ak as withFileLock, u as updateIssue, k as addComment, l as addIssue, e as shortId } from './run-
|
|
6
|
-
import { w as wantsHelp } from './cli-
|
|
5
|
+
import { ak as withFileLock, u as updateIssue, k as addComment, l as addIssue, e as shortId } from './run-CF4kAVPW.mjs';
|
|
6
|
+
import { w as wantsHelp } from './cli-B24CmIli.mjs';
|
|
7
7
|
import 'node:os';
|
|
8
8
|
import 'os';
|
|
9
9
|
import 'fs/promises';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
|
-
import { w as wantsHelp } from './cli-
|
|
3
|
-
import './run-
|
|
2
|
+
import { w as wantsHelp } from './cli-B24CmIli.mjs';
|
|
3
|
+
import './run-CF4kAVPW.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-
|
|
86
|
+
const { runFrpcTunnel } = await import('./run-CF4kAVPW.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-
|
|
96
|
+
const { connectAndGetMachine } = await import('./commands-DDuGBSsz.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-
|
|
118
|
+
const { autoAddSessionLink } = await import('./agentCommands-BuO988tJ.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-
|
|
155
|
-
const { getFreePort } = await import('./run-
|
|
154
|
+
const { serveStaticMount } = await import('./run-CF4kAVPW.mjs').then(function (n) { return n.at; });
|
|
155
|
+
const { getFreePort } = await import('./run-CF4kAVPW.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-
|
|
178
|
+
const { runFrpcTunnel } = await import('./run-CF4kAVPW.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-
|
|
188
|
+
const { connectAndGetMachine } = await import('./commands-DDuGBSsz.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-
|
|
228
|
+
const { connectAndGetMachine } = await import('./commands-DDuGBSsz.mjs');
|
|
229
229
|
const { server, machine } = await connectAndGetMachine();
|
|
230
230
|
try {
|
|
231
231
|
await machine.tunnelStop({ name });
|
|
232
|
-
const { removeSessionLinkByService } = await import('./agentCommands-
|
|
232
|
+
const { removeSessionLinkByService } = await import('./agentCommands-BuO988tJ.mjs');
|
|
233
233
|
removeSessionLinkByService("tunnel", name);
|
|
234
234
|
console.log(`Stopped tunnel '${name}'.`);
|
|
235
235
|
} catch (err) {
|
|
@@ -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 { 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-
|
|
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-CF4kAVPW.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
8
8
|
import 'fs';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { writeFileSync, readFileSync } from 'fs';
|
|
2
2
|
import { resolve } from 'path';
|
|
3
|
-
import { connectAndGetMachine } from './commands-
|
|
4
|
-
import { w as wantsHelp } from './cli-
|
|
3
|
+
import { connectAndGetMachine } from './commands-DDuGBSsz.mjs';
|
|
4
|
+
import { w as wantsHelp } from './cli-B24CmIli.mjs';
|
|
5
5
|
import 'node:fs';
|
|
6
6
|
import 'node:child_process';
|
|
7
7
|
import 'node:path';
|
|
8
8
|
import 'node:os';
|
|
9
|
-
import './run-
|
|
9
|
+
import './run-CF4kAVPW.mjs';
|
|
10
10
|
import 'os';
|
|
11
11
|
import 'fs/promises';
|
|
12
12
|
import 'url';
|
|
@@ -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-
|
|
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-
|
|
3
|
+
import { f as flushAndExit } from './cli-B24CmIli.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-CF4kAVPW.mjs';
|
|
5
5
|
import './serviceManager-hlOVxkhW.mjs';
|
|
6
6
|
import 'os';
|
|
7
7
|
import 'fs/promises';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { connectAndResolveSession } from './commands-
|
|
2
|
-
import { w as wantsHelp } from './cli-
|
|
1
|
+
import { connectAndResolveSession } from './commands-DDuGBSsz.mjs';
|
|
2
|
+
import { w as wantsHelp } from './cli-B24CmIli.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-
|
|
7
|
+
import './run-CF4kAVPW.mjs';
|
|
8
8
|
import 'os';
|
|
9
9
|
import 'fs/promises';
|
|
10
10
|
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 { ah as PINNED_CODEX_VERSION, c as connectToHypha } from './run-
|
|
4
|
+
import { ah as PINNED_CODEX_VERSION, c as connectToHypha } from './run-CF4kAVPW.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 { a4 as resolveModel, al as describeMisconfiguration, am as buildMachineDeps } from './run-
|
|
2
|
-
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-
|
|
1
|
+
import { a4 as resolveModel, al as describeMisconfiguration, am as buildMachineDeps } from './run-CF4kAVPW.mjs';
|
|
2
|
+
import { handleRealtimeEvent, initMachineVoiceSession } from './sideband-BoutiRJi.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-
|
|
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-CF4kAVPW.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, N as parseJwtEmail } from './run-
|
|
1
|
+
import { c as connectToHypha, S as SharingNotificationSync, N as parseJwtEmail } from './run-CF4kAVPW.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.
|
|
2
|
+
var version = "0.2.342";
|
|
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: "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",
|
|
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 && node test/with-timeout.mjs 420 npx tsx test/test-boot-status.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 { 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-
|
|
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-CF4kAVPW.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|
|
@@ -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-
|
|
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-CF4kAVPW.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 { an as applyClaudeProxyEnv, ao as composeSessionId, ap as generateFriendlyName, c as connectToHypha, a as createSessionStore, r as registerMachineService, aq as generateHookSettings } from './run-
|
|
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-CF4kAVPW.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';
|
|
@@ -9251,7 +9251,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
9251
9251
|
}
|
|
9252
9252
|
const deps = buildSessionDeps(rpc, { cwd, ownerEmail: owner });
|
|
9253
9253
|
const sender = { name: context?.user?.email || context?.user?.id || "user", kind: "user", verified: true };
|
|
9254
|
-
const { toolsForRole } = await import('./sideband-
|
|
9254
|
+
const { toolsForRole } = await import('./sideband-BoutiRJi.mjs');
|
|
9255
9255
|
const r2 = await runWiseAgent({ message: params.message, sender, config: { tools: toolsForRole(role2) }, deps, transport, model: resolved.model });
|
|
9256
9256
|
return fmt(r2);
|
|
9257
9257
|
}
|
|
@@ -9383,7 +9383,7 @@ QUESTION: ${params.question || "Summarize this concisely."}` }
|
|
|
9383
9383
|
return { ok: false, call_id: callId, status: "busy", error: "channel is busy (too many concurrent requests) \u2014 retry shortly" };
|
|
9384
9384
|
}
|
|
9385
9385
|
const rendered = renderMessage(c, { sender: r.sender, body: { message: kwargs.message }, callId });
|
|
9386
|
-
const { queryCore } = await import('./commands-
|
|
9386
|
+
const { queryCore } = await import('./commands-DDuGBSsz.mjs');
|
|
9387
9387
|
const timeout = c.reply?.timeout_sec || 120;
|
|
9388
9388
|
let result;
|
|
9389
9389
|
let thrownSessionId;
|
|
@@ -17043,6 +17043,104 @@ function isAuthExpiryError(err) {
|
|
|
17043
17043
|
return /token has expired|invalid or expired|token is expired|expired token|authentication error/i.test(text);
|
|
17044
17044
|
}
|
|
17045
17045
|
|
|
17046
|
+
const BOOT_STATUS_FILENAME = "daemon-boot-status.json";
|
|
17047
|
+
const AUTH_FIX_HINT = "Fix: svamp login <frontend-url> then: svamp daemon restart";
|
|
17048
|
+
function bootStatusPath(svampHome) {
|
|
17049
|
+
return join(svampHome, BOOT_STATUS_FILENAME);
|
|
17050
|
+
}
|
|
17051
|
+
function writeBootStatus(svampHome, status) {
|
|
17052
|
+
try {
|
|
17053
|
+
const p = bootStatusPath(svampHome);
|
|
17054
|
+
const tmp = `${p}.tmp.${process.pid}`;
|
|
17055
|
+
writeFileSync(tmp, JSON.stringify(status), "utf-8");
|
|
17056
|
+
renameSync$1(tmp, p);
|
|
17057
|
+
} catch {
|
|
17058
|
+
}
|
|
17059
|
+
}
|
|
17060
|
+
function readBootStatus(svampHome) {
|
|
17061
|
+
try {
|
|
17062
|
+
const raw = readFileSync$1(bootStatusPath(svampHome), "utf-8");
|
|
17063
|
+
const parsed = JSON.parse(raw);
|
|
17064
|
+
if (parsed && typeof parsed === "object" && typeof parsed.ok === "boolean" && typeof parsed.at === "number") {
|
|
17065
|
+
return parsed;
|
|
17066
|
+
}
|
|
17067
|
+
return null;
|
|
17068
|
+
} catch {
|
|
17069
|
+
return null;
|
|
17070
|
+
}
|
|
17071
|
+
}
|
|
17072
|
+
function clearBootStatus(svampHome) {
|
|
17073
|
+
try {
|
|
17074
|
+
unlinkSync(bootStatusPath(svampHome));
|
|
17075
|
+
} catch {
|
|
17076
|
+
}
|
|
17077
|
+
}
|
|
17078
|
+
function classifyBootFailure(err, opts) {
|
|
17079
|
+
const agoMs = opts?.preflightExpiredAgoMs;
|
|
17080
|
+
if (typeof agoMs === "number" && agoMs >= 0) {
|
|
17081
|
+
const h = Math.floor(agoMs / 36e5);
|
|
17082
|
+
const when = h >= 1 ? `${h}h ago` : "less than an hour ago";
|
|
17083
|
+
return {
|
|
17084
|
+
code: "auth-expired",
|
|
17085
|
+
message: `HYPHA_TOKEN expired ${when} \u2014 the daemon cannot connect to Hypha.`,
|
|
17086
|
+
hint: AUTH_FIX_HINT
|
|
17087
|
+
};
|
|
17088
|
+
}
|
|
17089
|
+
if (isAuthExpiryError(err)) {
|
|
17090
|
+
return {
|
|
17091
|
+
code: "auth-expired",
|
|
17092
|
+
message: "Hypha rejected the HYPHA_TOKEN (expired or invalid) \u2014 the daemon cannot connect.",
|
|
17093
|
+
hint: AUTH_FIX_HINT
|
|
17094
|
+
};
|
|
17095
|
+
}
|
|
17096
|
+
const text = err instanceof Error ? err.message : String(err);
|
|
17097
|
+
if (/timeout connecting to hypha/i.test(text)) {
|
|
17098
|
+
return {
|
|
17099
|
+
code: "connect-timeout",
|
|
17100
|
+
message: `Timed out connecting to the Hypha server. ${text.replace(/\s+/g, " ").slice(0, 160)}`.trim(),
|
|
17101
|
+
hint: "Check network reachability to HYPHA_SERVER_URL, then: svamp daemon restart"
|
|
17102
|
+
};
|
|
17103
|
+
}
|
|
17104
|
+
return {
|
|
17105
|
+
code: "connect-failed",
|
|
17106
|
+
message: `Failed to connect to Hypha: ${text.replace(/\s+/g, " ").slice(0, 200)}`.trim(),
|
|
17107
|
+
hint: "Check the boot log for details, then: svamp daemon restart"
|
|
17108
|
+
};
|
|
17109
|
+
}
|
|
17110
|
+
function describeSupervisorState(args) {
|
|
17111
|
+
const { bootStatus, daemonState, now, bootStatusMaxAgeMs = 15 * 60 * 1e3 } = args;
|
|
17112
|
+
if (bootStatus && bootStatus.ok === false && now - bootStatus.at <= bootStatusMaxAgeMs) {
|
|
17113
|
+
return {
|
|
17114
|
+
kind: "wedged",
|
|
17115
|
+
code: bootStatus.code || "connect-failed",
|
|
17116
|
+
message: bootStatus.message || "The daemon failed to connect to Hypha.",
|
|
17117
|
+
hint: bootStatus.hint || AUTH_FIX_HINT
|
|
17118
|
+
};
|
|
17119
|
+
}
|
|
17120
|
+
if (daemonState && daemonState.hyphaConnected === false) {
|
|
17121
|
+
const reason = daemonState.hyphaDisconnectReason || "";
|
|
17122
|
+
const isAuth = /auth:|expired|invalid/i.test(reason);
|
|
17123
|
+
return {
|
|
17124
|
+
kind: "wedged",
|
|
17125
|
+
code: isAuth ? "auth-expired" : "disconnected",
|
|
17126
|
+
message: `The supervisor is running but the daemon is DISCONNECTED from Hypha${reason ? ` (${reason})` : ""} \u2014 it is offline in the frontend.`,
|
|
17127
|
+
hint: isAuth ? AUTH_FIX_HINT : "Reconnect with: svamp daemon restart"
|
|
17128
|
+
};
|
|
17129
|
+
}
|
|
17130
|
+
return { kind: "healthy" };
|
|
17131
|
+
}
|
|
17132
|
+
|
|
17133
|
+
var bootStatus = /*#__PURE__*/Object.freeze({
|
|
17134
|
+
__proto__: null,
|
|
17135
|
+
AUTH_FIX_HINT: AUTH_FIX_HINT,
|
|
17136
|
+
BOOT_STATUS_FILENAME: BOOT_STATUS_FILENAME,
|
|
17137
|
+
classifyBootFailure: classifyBootFailure,
|
|
17138
|
+
clearBootStatus: clearBootStatus,
|
|
17139
|
+
describeSupervisorState: describeSupervisorState,
|
|
17140
|
+
readBootStatus: readBootStatus,
|
|
17141
|
+
writeBootStatus: writeBootStatus
|
|
17142
|
+
});
|
|
17143
|
+
|
|
17046
17144
|
function getShareBaseUrl() {
|
|
17047
17145
|
return getSvampWebBaseUrl();
|
|
17048
17146
|
}
|
|
@@ -20995,7 +21093,7 @@ async function startDaemon(options) {
|
|
|
20995
21093
|
try {
|
|
20996
21094
|
const dir = loadSessionIndex()[sessionId]?.directory;
|
|
20997
21095
|
if (!dir) return;
|
|
20998
|
-
const { reconcileServiceLinks } = await import('./agentCommands-
|
|
21096
|
+
const { reconcileServiceLinks } = await import('./agentCommands-BuO988tJ.mjs');
|
|
20999
21097
|
const configPath = getSvampConfigPath(dir, sessionId);
|
|
21000
21098
|
const config = readSvampConfig(configPath);
|
|
21001
21099
|
const entries = Array.from(urls.entries());
|
|
@@ -21017,7 +21115,7 @@ async function startDaemon(options) {
|
|
|
21017
21115
|
try {
|
|
21018
21116
|
const dir = loadSessionIndex()[sessionId]?.directory;
|
|
21019
21117
|
if (!dir) return;
|
|
21020
|
-
const { reconcileServiceLinks } = await import('./agentCommands-
|
|
21118
|
+
const { reconcileServiceLinks } = await import('./agentCommands-BuO988tJ.mjs');
|
|
21021
21119
|
const configPath = getSvampConfigPath(dir, sessionId);
|
|
21022
21120
|
const config = readSvampConfig(configPath);
|
|
21023
21121
|
const incoming = [{
|
|
@@ -21038,7 +21136,7 @@ async function startDaemon(options) {
|
|
|
21038
21136
|
try {
|
|
21039
21137
|
const dir = loadSessionIndex()[sessionId]?.directory;
|
|
21040
21138
|
if (!dir) return;
|
|
21041
|
-
const { dropServiceLinks } = await import('./agentCommands-
|
|
21139
|
+
const { dropServiceLinks } = await import('./agentCommands-BuO988tJ.mjs');
|
|
21042
21140
|
const configPath = getSvampConfigPath(dir, sessionId);
|
|
21043
21141
|
const config = readSvampConfig(configPath);
|
|
21044
21142
|
if (dropServiceLinks(config, "serve", mountName)) {
|
|
@@ -21054,7 +21152,7 @@ async function startDaemon(options) {
|
|
|
21054
21152
|
try {
|
|
21055
21153
|
const dir = loadSessionIndex()[sessionId]?.directory;
|
|
21056
21154
|
if (!dir) return;
|
|
21057
|
-
const { dropServiceLinks } = await import('./agentCommands-
|
|
21155
|
+
const { dropServiceLinks } = await import('./agentCommands-BuO988tJ.mjs');
|
|
21058
21156
|
const configPath = getSvampConfigPath(dir, sessionId);
|
|
21059
21157
|
const config = readSvampConfig(configPath);
|
|
21060
21158
|
if (dropServiceLinks(config, "tunnel", tunnelName)) {
|
|
@@ -21071,7 +21169,7 @@ async function startDaemon(options) {
|
|
|
21071
21169
|
let managedLinkSessionsSeeded = false;
|
|
21072
21170
|
async function reconcileAllServiceLinks() {
|
|
21073
21171
|
try {
|
|
21074
|
-
const { reconcileServiceLinksExact, hasManagedServiceLink } = await import('./agentCommands-
|
|
21172
|
+
const { reconcileServiceLinksExact, hasManagedServiceLink } = await import('./agentCommands-BuO988tJ.mjs');
|
|
21075
21173
|
const desiredBySession = /* @__PURE__ */ new Map();
|
|
21076
21174
|
const push = (sessionId, entry) => {
|
|
21077
21175
|
if (!sessionId || !entry.url) return;
|
|
@@ -21194,17 +21292,43 @@ async function startDaemon(options) {
|
|
|
21194
21292
|
})();
|
|
21195
21293
|
preventMachineSleep(logger);
|
|
21196
21294
|
try {
|
|
21295
|
+
const tokenExpiresAt = decodeTokenExpiry(hyphaToken);
|
|
21296
|
+
const bootNow = Date.now();
|
|
21297
|
+
if (isTokenExpired(tokenExpiresAt, bootNow)) {
|
|
21298
|
+
const failure = classifyBootFailure(void 0, {
|
|
21299
|
+
preflightExpiredAgoMs: bootNow - tokenExpiresAt
|
|
21300
|
+
});
|
|
21301
|
+
writeBootStatus(SVAMP_HOME, { ok: false, ...failure, at: bootNow });
|
|
21302
|
+
logger.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550");
|
|
21303
|
+
logger.log(failure.message);
|
|
21304
|
+
logger.log("This is NOT a network fault \u2014 the daemon cannot connect until a new token");
|
|
21305
|
+
logger.log("is issued, so it will not start.");
|
|
21306
|
+
logger.log(` ${failure.hint}`);
|
|
21307
|
+
logger.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550");
|
|
21308
|
+
throw new Error(failure.message);
|
|
21309
|
+
}
|
|
21197
21310
|
logger.log("Connecting to Hypha server...");
|
|
21198
|
-
|
|
21199
|
-
|
|
21200
|
-
|
|
21201
|
-
|
|
21202
|
-
|
|
21203
|
-
|
|
21204
|
-
|
|
21205
|
-
|
|
21206
|
-
|
|
21207
|
-
|
|
21311
|
+
try {
|
|
21312
|
+
server = await connectToHypha({
|
|
21313
|
+
serverUrl: hyphaServerUrl,
|
|
21314
|
+
token: hyphaToken,
|
|
21315
|
+
name: `svamp-machine-${machineId}`,
|
|
21316
|
+
transport: "http",
|
|
21317
|
+
// Use HYPHA_CLIENT_ID if set (server-apps integration), otherwise use machineId.
|
|
21318
|
+
// Using machineId gives a STABLE client_id across reconnections, so the service ID
|
|
21319
|
+
// (workspace/clientId:default) is predictable and can be stored in share bookmarks.
|
|
21320
|
+
clientId: hyphaClientId || machineId
|
|
21321
|
+
});
|
|
21322
|
+
} catch (connectErr) {
|
|
21323
|
+
const failure = classifyBootFailure(connectErr);
|
|
21324
|
+
writeBootStatus(SVAMP_HOME, { ok: false, ...failure, at: Date.now() });
|
|
21325
|
+
logger.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550");
|
|
21326
|
+
logger.log(`Daemon could not connect to Hypha: ${failure.message}`);
|
|
21327
|
+
logger.log(` ${failure.hint}`);
|
|
21328
|
+
logger.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550");
|
|
21329
|
+
throw connectErr;
|
|
21330
|
+
}
|
|
21331
|
+
clearBootStatus(SVAMP_HOME);
|
|
21208
21332
|
logger.log(`Connected to Hypha (workspace: ${server.config.workspace})`);
|
|
21209
21333
|
writeDaemonStateFile({
|
|
21210
21334
|
pid: process.pid,
|
|
@@ -23597,11 +23721,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
23597
23721
|
});
|
|
23598
23722
|
},
|
|
23599
23723
|
onIssue: async (params) => {
|
|
23600
|
-
const { issueRpc } = await import('./rpc-
|
|
23724
|
+
const { issueRpc } = await import('./rpc-B2Lc2BAB.mjs');
|
|
23601
23725
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
23602
23726
|
},
|
|
23603
23727
|
onWorkflow: async (params) => {
|
|
23604
|
-
const { workflowRpc } = await import('./rpc-
|
|
23728
|
+
const { workflowRpc } = await import('./rpc-rAQQ1q8t.mjs');
|
|
23605
23729
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
23606
23730
|
},
|
|
23607
23731
|
onRipgrep: async (args, cwd) => {
|
|
@@ -24324,11 +24448,11 @@ ${capturedError}${buildClaudeErrorHint(capturedError)}`;
|
|
|
24324
24448
|
});
|
|
24325
24449
|
},
|
|
24326
24450
|
onIssue: async (params) => {
|
|
24327
|
-
const { issueRpc } = await import('./rpc-
|
|
24451
|
+
const { issueRpc } = await import('./rpc-B2Lc2BAB.mjs');
|
|
24328
24452
|
return issueRpc(params?.cwd || directory, params || {}, { notifySession: notifyIssueOwner, rekickLoopOwner });
|
|
24329
24453
|
},
|
|
24330
24454
|
onWorkflow: async (params) => {
|
|
24331
|
-
const { workflowRpc } = await import('./rpc-
|
|
24455
|
+
const { workflowRpc } = await import('./rpc-rAQQ1q8t.mjs');
|
|
24332
24456
|
return workflowRpc(params?.cwd || directory, params || {});
|
|
24333
24457
|
},
|
|
24334
24458
|
onRipgrep: async (args, cwd) => {
|
|
@@ -25683,7 +25807,7 @@ ${oracle.output.trim().slice(0, 500)}`, "\u{1F501} Continuing loop");
|
|
|
25683
25807
|
const PING_TIMEOUT_MS = 15e3;
|
|
25684
25808
|
const POST_RECONNECT_GRACE_MS = 2e4;
|
|
25685
25809
|
const RECONNECT_JITTER_MS = 2500;
|
|
25686
|
-
const { WorkflowScheduler } = await import('./scheduler-
|
|
25810
|
+
const { WorkflowScheduler } = await import('./scheduler-CzF4lOe_.mjs');
|
|
25687
25811
|
const workflowProjectRoots = () => {
|
|
25688
25812
|
const dirs = /* @__PURE__ */ new Set();
|
|
25689
25813
|
for (const s of pidToTrackedSession.values()) {
|
|
@@ -26381,4 +26505,4 @@ var run = /*#__PURE__*/Object.freeze({
|
|
|
26381
26505
|
writeStopMarker: writeStopMarker
|
|
26382
26506
|
});
|
|
26383
26507
|
|
|
26384
|
-
export { searchSkills as $, validateCronExpr as A, validateWorkflowName as B, saveWorkflow as C, rawWorkflow as D, listWorkflows as E, isWorkflowEnabled as F, workflowSchedules as G, inZone as H, cronMatches as I, checkVerifyCommand as J, summarize as K, workflowSteps as L, describeNextFire as M, parseJwtEmail as N, computeCollectionConfigUpdate as O, SYSTEM_COLLECTION_CONFIG as P, loadMachineContext as Q, READ_ONLY_TOOLS as R, SharingNotificationSync as S, buildMachineInstructions as T, machineToolsForRole as U, buildMachineTools as V, parseFrontmatter as W, getSkillsServer as X, getSkillsWorkspaceName as Y, getSkillsCollectionName as Z, fetchWithTimeout as _, createSessionStore as a, SKILLS_DIR as a0, getSkillInfo as a1, downloadSkillFile as a2, listSkillFiles as a3, resolveModel as a4, formatHandle as a5, normalizeAllowedUser as a6, loadSecurityContextConfig as a7, resolveSecurityContext as a8, buildSecurityContextFromFlags as a9, codexAppServerBackend as aA, GeminiTransport$1 as aB, KimiTransport$1 as aC, kimiProvider as aD, kimiSetup as aE,
|
|
26508
|
+
export { searchSkills as $, validateCronExpr as A, validateWorkflowName as B, saveWorkflow as C, rawWorkflow as D, listWorkflows as E, isWorkflowEnabled as F, workflowSchedules as G, inZone as H, cronMatches as I, checkVerifyCommand as J, summarize as K, workflowSteps as L, describeNextFire as M, parseJwtEmail as N, computeCollectionConfigUpdate as O, SYSTEM_COLLECTION_CONFIG as P, loadMachineContext as Q, READ_ONLY_TOOLS as R, SharingNotificationSync as S, buildMachineInstructions as T, machineToolsForRole as U, buildMachineTools as V, parseFrontmatter as W, getSkillsServer as X, getSkillsWorkspaceName as Y, getSkillsCollectionName as Z, fetchWithTimeout as _, createSessionStore as a, SKILLS_DIR as a0, getSkillInfo as a1, downloadSkillFile as a2, listSkillFiles as a3, resolveModel as a4, formatHandle as a5, normalizeAllowedUser as a6, loadSecurityContextConfig as a7, resolveSecurityContext as a8, buildSecurityContextFromFlags as a9, codexAppServerBackend as aA, GeminiTransport$1 as aB, KimiTransport$1 as aC, kimiProvider as aD, kimiSetup as aE, bootStatus as aF, api as aG, supervisorLock as aH, run as aI, mergeSecurityContexts as aa, buildSessionShareUrl as ab, computeOutboundHop as ac, registerAwaitingReply as ad, buildMachineShareUrl as ae, parseHandle as af, handleMatchesMetadata as ag, PINNED_CODEX_VERSION as ah, clearStopMarker as ai, stopMarkerExists as aj, withFileLock as ak, describeMisconfiguration as al, buildMachineDeps as am, applyClaudeProxyEnv as an, composeSessionId as ao, generateFriendlyName as ap, generateHookSettings as aq, instanceConfig as ar, frpc as as, staticFileServer as at, claudeAuth as au, codexProvider as av, projectInfo as aw, DefaultTransport$1 as ax, acpBackend as ay, acpAgentConfig as az, stopDaemon as b, connectToHypha as c, daemonStatus as d, shortId as e, resolveProjectRoot as f, getHyphaServerUrl$1 as g, getIssue as h, checkVerifyCommandAsync as i, resumeIssue as j, addComment as k, addIssue as l, listIssues as m, isPendingIssue as n, searchIssues as o, pauseIssue as p, isVisibleTo as q, registerMachineService as r, startDaemon as s, getRun as t, updateIssue as u, listRuns as v, getWorkflow as w, runWorkflow as x, setWorkflowEnabled as y, removeWorkflow as z };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f as resolveProjectRoot, E as listWorkflows, F as isWorkflowEnabled, G as workflowSchedules, H as inZone, x as runWorkflow, I as cronMatches } from './run-
|
|
1
|
+
import { f as resolveProjectRoot, E as listWorkflows, F as isWorkflowEnabled, G as workflowSchedules, H as inZone, x as runWorkflow, I as cronMatches } from './run-CF4kAVPW.mjs';
|
|
2
2
|
import 'os';
|
|
3
3
|
import 'fs/promises';
|
|
4
4
|
import 'fs';
|