agent-yes 1.119.0 → 1.120.0
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/{SUPPORTED_CLIS-By1zXrJN.js → SUPPORTED_CLIS-BD8zWc7O.js} +2 -2
- package/dist/SUPPORTED_CLIS-CoYWGWbP.js +8 -0
- package/dist/cli.js +3 -3
- package/dist/index.js +2 -2
- package/dist/{serve-DQ6V7e1I.js → serve-6RqphTG0.js} +17 -15
- package/dist/{setup-B6Fus6JD.js → setup-B5TPF2MV.js} +2 -2
- package/dist/{share-DmT_gDbf.js → share-B7J79Wq9.js} +22 -12
- package/dist/{subcommands-B0WN8evc.js → subcommands-BVcos4UW.js} +1 -1
- package/dist/{subcommands-B3Y6r5Wd.js → subcommands-CCgzXvQ-.js} +3 -3
- package/dist/{ts-CU-rtV2g.js → ts-C78N0K4F.js} +2 -2
- package/dist/{versionChecker-Bx0n92RQ.js → versionChecker-CYZtJKMG.js} +2 -2
- package/package.json +1 -1
- package/ts/serve.ts +26 -12
- package/ts/share.ts +31 -16
- package/dist/SUPPORTED_CLIS-Cv8SOkyd.js +0 -8
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as CLIS_CONFIG } from "./ts-
|
|
1
|
+
import { t as CLIS_CONFIG } from "./ts-C78N0K4F.js";
|
|
2
2
|
|
|
3
3
|
//#region ts/SUPPORTED_CLIS.ts
|
|
4
4
|
const SUPPORTED_CLIS = Object.keys(CLIS_CONFIG);
|
|
5
5
|
|
|
6
6
|
//#endregion
|
|
7
7
|
export { SUPPORTED_CLIS as t };
|
|
8
|
-
//# sourceMappingURL=SUPPORTED_CLIS-
|
|
8
|
+
//# sourceMappingURL=SUPPORTED_CLIS-BD8zWc7O.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./ts-C78N0K4F.js";
|
|
2
|
+
import "./logger-B9h0djqx.js";
|
|
3
|
+
import "./versionChecker-CYZtJKMG.js";
|
|
4
|
+
import "./pidStore-B5vBu8Px.js";
|
|
5
|
+
import "./globalPidIndex-gZuTvTBs.js";
|
|
6
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BD8zWc7O.js";
|
|
7
|
+
|
|
8
|
+
export { SUPPORTED_CLIS };
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
import { n as logger } from "./logger-B9h0djqx.js";
|
|
3
|
-
import { i as versionString, n as displayVersion, r as getInstalledPackage, t as checkAndAutoUpdate } from "./versionChecker-
|
|
3
|
+
import { i as versionString, n as displayVersion, r as getInstalledPackage, t as checkAndAutoUpdate } from "./versionChecker-CYZtJKMG.js";
|
|
4
4
|
import { argv } from "process";
|
|
5
5
|
import { execFileSync, spawn } from "child_process";
|
|
6
6
|
import ms from "ms";
|
|
@@ -482,7 +482,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
|
|
|
482
482
|
{
|
|
483
483
|
const rawArg = process.argv[2];
|
|
484
484
|
const isHelpFlag = rawArg === "-h" || rawArg === "--help";
|
|
485
|
-
const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-
|
|
485
|
+
const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-BVcos4UW.js");
|
|
486
486
|
if (isHelpFlag && process.argv.length === 3) {
|
|
487
487
|
cmdHelp();
|
|
488
488
|
process.exit(0);
|
|
@@ -515,7 +515,7 @@ if (config.useRust) {
|
|
|
515
515
|
}
|
|
516
516
|
}
|
|
517
517
|
if (rustBinary) {
|
|
518
|
-
const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-
|
|
518
|
+
const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-CoYWGWbP.js");
|
|
519
519
|
const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
|
|
520
520
|
if (config.verbose) {
|
|
521
521
|
console.log(`[rust] Using binary: ${rustBinary}`);
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as removeControlCharacters, i as AgentContext, n as agentYes, r as config, t as CLIS_CONFIG } from "./ts-
|
|
1
|
+
import { a as removeControlCharacters, i as AgentContext, n as agentYes, r as config, t as CLIS_CONFIG } from "./ts-C78N0K4F.js";
|
|
2
2
|
import "./logger-B9h0djqx.js";
|
|
3
|
-
import "./versionChecker-
|
|
3
|
+
import "./versionChecker-CYZtJKMG.js";
|
|
4
4
|
import "./pidStore-B5vBu8Px.js";
|
|
5
5
|
import "./globalPidIndex-gZuTvTBs.js";
|
|
6
6
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import "./ts-
|
|
1
|
+
import "./ts-C78N0K4F.js";
|
|
2
2
|
import "./logger-B9h0djqx.js";
|
|
3
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
3
|
+
import { r as getInstalledPackage } from "./versionChecker-CYZtJKMG.js";
|
|
4
4
|
import "./pidStore-B5vBu8Px.js";
|
|
5
5
|
import "./globalPidIndex-gZuTvTBs.js";
|
|
6
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-
|
|
6
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BD8zWc7O.js";
|
|
7
7
|
import "./remotes-BufkGk0e.js";
|
|
8
|
-
import { c as listRecords, d as renderRawLog, f as resolveOne, g as writeToIpc, m as snapshotStatus, r as controlCodeFromName, u as readNotes } from "./subcommands-
|
|
8
|
+
import { c as listRecords, d as renderRawLog, f as resolveOne, g as writeToIpc, m as snapshotStatus, r as controlCodeFromName, u as readNotes } from "./subcommands-CCgzXvQ-.js";
|
|
9
9
|
import yargs from "yargs";
|
|
10
10
|
import { mkdir, open, readFile, writeFile } from "fs/promises";
|
|
11
11
|
import { homedir, hostname, userInfo } from "os";
|
|
@@ -103,16 +103,18 @@ function ayServeArgv(args) {
|
|
|
103
103
|
}
|
|
104
104
|
async function ensureBootAutostart(mgr) {
|
|
105
105
|
try {
|
|
106
|
-
|
|
106
|
+
if (mgr.id !== "oxmgr") return await spawnExit([mgr.bin, "save"]) === 0;
|
|
107
|
+
const installed = await spawnExit([
|
|
107
108
|
mgr.bin,
|
|
108
109
|
"service",
|
|
109
110
|
"install"
|
|
110
|
-
]
|
|
111
|
-
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
|
|
115
|
-
]
|
|
111
|
+
]) === 0;
|
|
112
|
+
if (installed && process.platform === "linux") await spawnExit([
|
|
113
|
+
"loginctl",
|
|
114
|
+
"enable-linger",
|
|
115
|
+
userInfo().username
|
|
116
|
+
]);
|
|
117
|
+
return installed;
|
|
116
118
|
} catch {
|
|
117
119
|
return false;
|
|
118
120
|
}
|
|
@@ -237,8 +239,8 @@ async function cmdServeDaemon(sub, args) {
|
|
|
237
239
|
const webrtcish = effArgs.some((a) => a.startsWith("--webrtc") || a.startsWith("--share"));
|
|
238
240
|
const httpish = effArgs.some((a) => a.startsWith("--http") || a.startsWith("--share")) || !effArgs.some((a) => a.startsWith("--webrtc"));
|
|
239
241
|
process.stdout.write(`\n${priorArgs !== null ? `rolled '${DAEMON_NAME}' forward to` : `installed '${DAEMON_NAME}' as a daemon via ${mgr.id} —`} v${current}\n`);
|
|
240
|
-
if (mgr.id === "oxmgr") process.stdout.write(onBoot ? `start-on-boot: enabled (
|
|
241
|
-
else process.stdout.write(onBoot ? `start-on-
|
|
242
|
+
if (mgr.id === "oxmgr") process.stdout.write(onBoot ? `start-on-boot: enabled (systemd --user + linger, starts at boot)\n` : `start-on-boot: not registered — needs a user systemd session; run \`oxmgr service install\` to enable\n`);
|
|
243
|
+
else process.stdout.write(onBoot ? `start-on-login: enabled (pm2 list saved; run \`pm2 startup\` once if logon resurrect is not yet installed)\n` : `start-on-login: \`pm2 save\` failed — run it manually to persist across logins\n`);
|
|
242
244
|
process.stdout.write(`token: ${token}\n\n`);
|
|
243
245
|
if (httpish) {
|
|
244
246
|
process.stdout.write(` ay ls ${token}@<host>:${port}\n`);
|
|
@@ -820,7 +822,7 @@ Options:
|
|
|
820
822
|
const webrtcVal = argv.webrtc ?? argv.share;
|
|
821
823
|
const explicitUrl = typeof webrtcVal === "string" && webrtcVal.startsWith("webrtc://") ? webrtcVal : void 0;
|
|
822
824
|
try {
|
|
823
|
-
const { startShare, loadOrCreateShareRoom } = await import("./share-
|
|
825
|
+
const { startShare, loadOrCreateShareRoom } = await import("./share-B7J79Wq9.js");
|
|
824
826
|
const { link, close } = await startShare({
|
|
825
827
|
url: explicitUrl ?? await loadOrCreateShareRoom(),
|
|
826
828
|
localFetch: apiFetch,
|
|
@@ -851,4 +853,4 @@ Options:
|
|
|
851
853
|
|
|
852
854
|
//#endregion
|
|
853
855
|
export { cmdServe };
|
|
854
|
-
//# sourceMappingURL=serve-
|
|
856
|
+
//# sourceMappingURL=serve-6RqphTG0.js.map
|
|
@@ -69,7 +69,7 @@ async function cmdSetup(rest) {
|
|
|
69
69
|
if (!existsSync$1(abs)) process.stderr.write(` note: that directory doesn't exist yet — create it, or agents spawned there will fail\n`);
|
|
70
70
|
if (noShare) return 0;
|
|
71
71
|
process.stdout.write(`\nsharing this machine to agent-yes.com…\n`);
|
|
72
|
-
const { cmdServe } = await import("./serve-
|
|
72
|
+
const { cmdServe } = await import("./serve-6RqphTG0.js");
|
|
73
73
|
return cmdServe([
|
|
74
74
|
"install",
|
|
75
75
|
"--share",
|
|
@@ -79,4 +79,4 @@ async function cmdSetup(rest) {
|
|
|
79
79
|
|
|
80
80
|
//#endregion
|
|
81
81
|
export { cmdSetup };
|
|
82
|
-
//# sourceMappingURL=setup-
|
|
82
|
+
//# sourceMappingURL=setup-B5TPF2MV.js.map
|
|
@@ -47,37 +47,47 @@ async function linkFromBunCache() {
|
|
|
47
47
|
if (!existsSync(link)) symlinkSync(bin, link);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
async function
|
|
50
|
+
async function ndPackageDir() {
|
|
51
51
|
try {
|
|
52
52
|
const path = (await import("path")).default;
|
|
53
53
|
const { createRequire } = await import("module");
|
|
54
54
|
const require = createRequire(import.meta.url);
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
return path.dirname(require.resolve("node-datachannel/package.json"));
|
|
56
|
+
} catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function ensureAddon(ndDir) {
|
|
61
|
+
const { existsSync } = await import("fs");
|
|
62
|
+
const path = (await import("path")).default;
|
|
63
|
+
if (existsSync(path.join(ndDir, "build", "Release", "node_datachannel.node"))) return;
|
|
64
|
+
try {
|
|
65
|
+
const { createRequire } = await import("module");
|
|
66
|
+
const binJs = createRequire(import.meta.url).resolve("prebuild-install/bin.js", { paths: [ndDir] });
|
|
57
67
|
const { spawnSync } = await import("child_process");
|
|
58
68
|
process.stderr.write("fetching node-datachannel prebuilt binary (one-time)…\n");
|
|
59
|
-
|
|
69
|
+
spawnSync(process.execPath, [
|
|
60
70
|
binJs,
|
|
61
71
|
"-r",
|
|
62
72
|
"napi"
|
|
63
73
|
], {
|
|
64
74
|
cwd: ndDir,
|
|
65
75
|
stdio: "ignore"
|
|
66
|
-
})
|
|
67
|
-
} catch {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
76
|
+
});
|
|
77
|
+
} catch {}
|
|
70
78
|
}
|
|
71
79
|
async function importRTC() {
|
|
80
|
+
const ndDir = await ndPackageDir();
|
|
81
|
+
if (ndDir) await ensureAddon(ndDir);
|
|
72
82
|
try {
|
|
73
83
|
return (await import("node-datachannel/polyfill")).RTCPeerConnection;
|
|
74
84
|
} catch (firstErr) {
|
|
75
85
|
await linkFromBunCache().catch(() => {});
|
|
76
86
|
try {
|
|
77
87
|
return (await import("node-datachannel/polyfill")).RTCPeerConnection;
|
|
78
|
-
} catch {
|
|
79
|
-
|
|
80
|
-
|
|
88
|
+
} catch {
|
|
89
|
+
throw firstErr;
|
|
90
|
+
}
|
|
81
91
|
}
|
|
82
92
|
}
|
|
83
93
|
/** Start the share bridge. Resolves once signaling is connected; runs until the
|
|
@@ -241,4 +251,4 @@ async function startShare(opts) {
|
|
|
241
251
|
|
|
242
252
|
//#endregion
|
|
243
253
|
export { loadOrCreateShareRoom, startShare };
|
|
244
|
-
//# sourceMappingURL=share-
|
|
254
|
+
//# sourceMappingURL=share-B7J79Wq9.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./logger-B9h0djqx.js";
|
|
2
2
|
import "./globalPidIndex-gZuTvTBs.js";
|
|
3
3
|
import "./remotes-BufkGk0e.js";
|
|
4
|
-
import { a as finalizedLines, c as listRecords, d as renderRawLog, f as resolveOne, g as writeToIpc, h as stopTipForCli, i as cursorAbs, l as matchKeyword, m as snapshotStatus, n as cmdHelp, o as isPidAlive, p as runSubcommand, r as controlCodeFromName, s as isSubcommand, t as GRACEFUL_EXIT_COMMANDS, u as readNotes } from "./subcommands-
|
|
4
|
+
import { a as finalizedLines, c as listRecords, d as renderRawLog, f as resolveOne, g as writeToIpc, h as stopTipForCli, i as cursorAbs, l as matchKeyword, m as snapshotStatus, n as cmdHelp, o as isPidAlive, p as runSubcommand, r as controlCodeFromName, s as isSubcommand, t as GRACEFUL_EXIT_COMMANDS, u as readNotes } from "./subcommands-CCgzXvQ-.js";
|
|
5
5
|
|
|
6
6
|
export { cmdHelp, isSubcommand, runSubcommand };
|
|
@@ -231,11 +231,11 @@ async function runSubcommand(argv) {
|
|
|
231
231
|
case "restart": return await cmdRestart(rest);
|
|
232
232
|
case "note": return await cmdNote(rest);
|
|
233
233
|
case "serve": {
|
|
234
|
-
const { cmdServe } = await import("./serve-
|
|
234
|
+
const { cmdServe } = await import("./serve-6RqphTG0.js");
|
|
235
235
|
return cmdServe(rest);
|
|
236
236
|
}
|
|
237
237
|
case "setup": {
|
|
238
|
-
const { cmdSetup } = await import("./setup-
|
|
238
|
+
const { cmdSetup } = await import("./setup-B5TPF2MV.js");
|
|
239
239
|
return cmdSetup(rest);
|
|
240
240
|
}
|
|
241
241
|
case "remote": {
|
|
@@ -1680,4 +1680,4 @@ async function cmdStatus(rest) {
|
|
|
1680
1680
|
|
|
1681
1681
|
//#endregion
|
|
1682
1682
|
export { finalizedLines as a, listRecords as c, renderRawLog as d, resolveOne as f, writeToIpc as g, stopTipForCli as h, cursorAbs as i, matchKeyword as l, snapshotStatus as m, cmdHelp as n, isPidAlive as o, runSubcommand as p, controlCodeFromName as r, isSubcommand as s, GRACEFUL_EXIT_COMMANDS as t, readNotes as u };
|
|
1683
|
-
//# sourceMappingURL=subcommands-
|
|
1683
|
+
//# sourceMappingURL=subcommands-CCgzXvQ-.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as logger, t as addTransport } from "./logger-B9h0djqx.js";
|
|
2
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
2
|
+
import { r as getInstalledPackage } from "./versionChecker-CYZtJKMG.js";
|
|
3
3
|
import { t as agentYesHome } from "./agentYesHome-BvaUOzCV.js";
|
|
4
4
|
import { i as shouldUseLock, r as releaseLock, t as acquireLock } from "./runningLock-CJxsoGdb.js";
|
|
5
5
|
import { t as PidStore } from "./pidStore-B5vBu8Px.js";
|
|
@@ -1715,4 +1715,4 @@ function sleep(ms) {
|
|
|
1715
1715
|
|
|
1716
1716
|
//#endregion
|
|
1717
1717
|
export { removeControlCharacters as a, AgentContext as i, agentYes as n, config as r, CLIS_CONFIG as t };
|
|
1718
|
-
//# sourceMappingURL=ts-
|
|
1718
|
+
//# sourceMappingURL=ts-C78N0K4F.js.map
|
|
@@ -7,7 +7,7 @@ import { fileURLToPath } from "url";
|
|
|
7
7
|
|
|
8
8
|
//#region package.json
|
|
9
9
|
var name = "agent-yes";
|
|
10
|
-
var version = "1.
|
|
10
|
+
var version = "1.120.0";
|
|
11
11
|
|
|
12
12
|
//#endregion
|
|
13
13
|
//#region ts/versionChecker.ts
|
|
@@ -221,4 +221,4 @@ async function displayVersion() {
|
|
|
221
221
|
|
|
222
222
|
//#endregion
|
|
223
223
|
export { versionString as i, displayVersion as n, getInstalledPackage as r, checkAndAutoUpdate as t };
|
|
224
|
-
//# sourceMappingURL=versionChecker-
|
|
224
|
+
//# sourceMappingURL=versionChecker-CYZtJKMG.js.map
|
package/package.json
CHANGED
package/ts/serve.ts
CHANGED
|
@@ -133,18 +133,32 @@ function ayServeArgv(args: string[]): string[] {
|
|
|
133
133
|
return [...launcher, "serve", ...args];
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
// Register the daemon
|
|
137
|
-
//
|
|
138
|
-
// `oxmgr service install
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
//
|
|
136
|
+
// Register the daemon to come up automatically. The *scope* is per-platform by
|
|
137
|
+
// design: Linux → at system boot (before login); Windows → at user login.
|
|
138
|
+
// - Linux (oxmgr): `oxmgr service install` wires a systemd **--user** unit,
|
|
139
|
+
// which on its own only starts after the user logs in. To make it start at
|
|
140
|
+
// boot without requiring root (no system-scope unit, no sudo), we also
|
|
141
|
+
// `loginctl enable-linger`, which keeps the user's systemd instance — and
|
|
142
|
+
// thus our service — running from boot. Best-effort; linger failing just
|
|
143
|
+
// downgrades us to login-scope.
|
|
144
|
+
// - Windows (pm2): `pm2 save` persists the process list so the once-installed
|
|
145
|
+
// `pm2 startup` logon hook resurrects it at user login.
|
|
146
|
+
// Idempotent and best-effort: returns false on failure without aborting the
|
|
147
|
+
// install — the process is still crash-managed, just not boot/login-persistent.
|
|
142
148
|
async function ensureBootAutostart(mgr: DaemonManager): Promise<boolean> {
|
|
143
149
|
try {
|
|
150
|
+
if (mgr.id !== "oxmgr") {
|
|
151
|
+
// pm2 (Windows): logon-scoped resurrect via the saved process list.
|
|
152
|
+
return (await spawnExit([mgr.bin, "save"])) === 0;
|
|
153
|
+
}
|
|
144
154
|
// oxmgr's --system defaults to "auto" (launchd/systemd/Task Scheduler); it's
|
|
145
155
|
// a `service`-level flag, so it goes before the subcommand, not after.
|
|
146
|
-
const
|
|
147
|
-
|
|
156
|
+
const installed = (await spawnExit([mgr.bin, "service", "install"])) === 0;
|
|
157
|
+
if (installed && process.platform === "linux") {
|
|
158
|
+
// Upgrade login-scope → boot-scope: linger starts the user manager at boot.
|
|
159
|
+
await spawnExit(["loginctl", "enable-linger", userInfo().username]);
|
|
160
|
+
}
|
|
161
|
+
return installed;
|
|
148
162
|
} catch {
|
|
149
163
|
return false;
|
|
150
164
|
}
|
|
@@ -281,14 +295,14 @@ async function cmdServeDaemon(sub: string, args: string[]): Promise<number> {
|
|
|
281
295
|
if (mgr.id === "oxmgr")
|
|
282
296
|
process.stdout.write(
|
|
283
297
|
onBoot
|
|
284
|
-
? `start-on-boot: enabled (
|
|
285
|
-
: `start-on-boot: not registered — run \`oxmgr service install\` to enable\n`,
|
|
298
|
+
? `start-on-boot: enabled (systemd --user + linger, starts at boot)\n`
|
|
299
|
+
: `start-on-boot: not registered — needs a user systemd session; run \`oxmgr service install\` to enable\n`,
|
|
286
300
|
);
|
|
287
301
|
else
|
|
288
302
|
process.stdout.write(
|
|
289
303
|
onBoot
|
|
290
|
-
? `start-on-
|
|
291
|
-
: `start-on-
|
|
304
|
+
? `start-on-login: enabled (pm2 list saved; run \`pm2 startup\` once if logon resurrect is not yet installed)\n`
|
|
305
|
+
: `start-on-login: \`pm2 save\` failed — run it manually to persist across logins\n`,
|
|
292
306
|
);
|
|
293
307
|
process.stdout.write(`token: ${token}\n\n`);
|
|
294
308
|
if (httpish) {
|
package/ts/share.ts
CHANGED
|
@@ -79,44 +79,59 @@ async function linkFromBunCache(): Promise<void> {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
// Resolve node-datachannel's package dir — where its loader expects the native
|
|
83
|
+
// addon at build/Release/node_datachannel.node. null if it can't be resolved.
|
|
84
|
+
async function ndPackageDir(): Promise<string | null> {
|
|
85
|
+
try {
|
|
86
|
+
const path = (await import("path")).default;
|
|
87
|
+
const { createRequire } = await import("module");
|
|
88
|
+
const require = createRequire(import.meta.url);
|
|
89
|
+
return path.dirname(require.resolve("node-datachannel/package.json"));
|
|
90
|
+
} catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
82
95
|
// `bunx agent-yes` / `bun add -g agent-yes` skip node-datachannel's install
|
|
83
96
|
// script (bun only honors trustedDependencies from the *root* package, and there
|
|
84
|
-
// agent-yes is a dependency), so the prebuilt .node is never downloaded
|
|
85
|
-
//
|
|
86
|
-
// prebuild-install
|
|
87
|
-
//
|
|
88
|
-
|
|
97
|
+
// agent-yes is a dependency), so the prebuilt .node is never downloaded. Fetch it
|
|
98
|
+
// with the prebuild-install CLI from node-datachannel's own dependency tree — the
|
|
99
|
+
// exact `prebuild-install -r napi` its install script would have run. Must run
|
|
100
|
+
// BEFORE the first import: Bun caches a failed dynamic import, so downloading
|
|
101
|
+
// after a miss wouldn't take effect until the process restarts.
|
|
102
|
+
async function ensureAddon(ndDir: string): Promise<void> {
|
|
103
|
+
const { existsSync } = await import("fs");
|
|
104
|
+
const path = (await import("path")).default;
|
|
105
|
+
if (existsSync(path.join(ndDir, "build", "Release", "node_datachannel.node"))) return;
|
|
89
106
|
try {
|
|
90
|
-
const path = (await import("path")).default;
|
|
91
107
|
const { createRequire } = await import("module");
|
|
92
108
|
const require = createRequire(import.meta.url);
|
|
93
|
-
const ndDir = path.dirname(require.resolve("node-datachannel/package.json"));
|
|
94
109
|
const binJs = require.resolve("prebuild-install/bin.js", { paths: [ndDir] });
|
|
95
110
|
const { spawnSync } = await import("child_process");
|
|
96
111
|
process.stderr.write("fetching node-datachannel prebuilt binary (one-time)…\n");
|
|
97
112
|
// process.execPath is bun (or node) — both execute the prebuild-install CLI.
|
|
98
|
-
|
|
99
|
-
return res.status === 0;
|
|
113
|
+
spawnSync(process.execPath, [binJs, "-r", "napi"], { cwd: ndDir, stdio: "ignore" });
|
|
100
114
|
} catch {
|
|
101
|
-
|
|
115
|
+
/* best effort — the import below surfaces a clear error if it's still missing */
|
|
102
116
|
}
|
|
103
117
|
}
|
|
104
118
|
|
|
105
119
|
async function importRTC(): Promise<any> {
|
|
120
|
+
// Ensure the native addon is on disk before the first import — a failed
|
|
121
|
+
// dynamic import is cached by Bun, so post-import healing can't recover it.
|
|
122
|
+
const ndDir = await ndPackageDir();
|
|
123
|
+
if (ndDir) await ensureAddon(ndDir);
|
|
106
124
|
try {
|
|
107
125
|
return (await import("node-datachannel/polyfill")).RTCPeerConnection;
|
|
108
126
|
} catch (firstErr) {
|
|
109
|
-
//
|
|
127
|
+
// Fallback for linked/global installs: the binary lives in the resolved pkg
|
|
128
|
+
// but Bun's cache copy lacks it — symlink it across, then retry once.
|
|
110
129
|
await linkFromBunCache().catch(() => {});
|
|
111
130
|
try {
|
|
112
131
|
return (await import("node-datachannel/polyfill")).RTCPeerConnection;
|
|
113
132
|
} catch {
|
|
114
|
-
|
|
133
|
+
throw firstErr;
|
|
115
134
|
}
|
|
116
|
-
// Heal 2: the prebuilt binary was never downloaded — fetch it, then retry.
|
|
117
|
-
if (await fetchPrebuiltAddon())
|
|
118
|
-
return (await import("node-datachannel/polyfill")).RTCPeerConnection;
|
|
119
|
-
throw firstErr;
|
|
120
135
|
}
|
|
121
136
|
}
|
|
122
137
|
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import "./ts-CU-rtV2g.js";
|
|
2
|
-
import "./logger-B9h0djqx.js";
|
|
3
|
-
import "./versionChecker-Bx0n92RQ.js";
|
|
4
|
-
import "./pidStore-B5vBu8Px.js";
|
|
5
|
-
import "./globalPidIndex-gZuTvTBs.js";
|
|
6
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-By1zXrJN.js";
|
|
7
|
-
|
|
8
|
-
export { SUPPORTED_CLIS };
|