claude-yes 1.159.0 → 1.160.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-BgxylBgz.js → SUPPORTED_CLIS-CGNLS73H.js} +2 -2
- package/dist/SUPPORTED_CLIS-DxuGPe7a.js +8 -0
- package/dist/cli.js +3 -3
- package/dist/index.js +2 -2
- package/dist/{schedule-C2TQqK-3.js → schedule-BT9Wl94O.js} +4 -4
- package/dist/{serve-BDoHFiCk.js → serve-BEZhNxz0.js} +47 -6
- package/dist/{setup-0Q5xhxyC.js → setup-nxc7gwBy.js} +2 -2
- package/dist/{subcommands-Dv7GlNLV.js → subcommands-B9orhMnd.js} +4 -4
- package/dist/{subcommands-Ci-DvV84.js → subcommands-BRid9dC9.js} +1 -1
- package/dist/{ts-BLhio9GS.js → ts-DPZ55Y-i.js} +2 -2
- package/dist/{versionChecker-CNgzuR-j.js → versionChecker-DUr1jc0A.js} +2 -2
- package/package.json +1 -1
- package/ts/openBrowser.ts +1 -3
- package/ts/serve.ts +71 -1
- package/dist/SUPPORTED_CLIS-Ciz2bTb6.js +0 -8
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as CLIS_CONFIG } from "./ts-
|
|
1
|
+
import { t as CLIS_CONFIG } from "./ts-DPZ55Y-i.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-CGNLS73H.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./ts-DPZ55Y-i.js";
|
|
2
|
+
import "./logger-CDIsZ-Pp.js";
|
|
3
|
+
import "./versionChecker-DUr1jc0A.js";
|
|
4
|
+
import "./pidStore-fqXqTKkh.js";
|
|
5
|
+
import "./globalPidIndex-DlmmJlO8.js";
|
|
6
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CGNLS73H.js";
|
|
7
|
+
|
|
8
|
+
export { SUPPORTED_CLIS };
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
import { t as invokedCliName } from "./invokedCli-uqM2YYA7.js";
|
|
3
3
|
import { n as logger } from "./logger-CDIsZ-Pp.js";
|
|
4
|
-
import { i as versionString, n as displayVersion, r as getInstalledPackage, t as checkAndAutoUpdate } from "./versionChecker-
|
|
4
|
+
import { i as versionString, n as displayVersion, r as getInstalledPackage, t as checkAndAutoUpdate } from "./versionChecker-DUr1jc0A.js";
|
|
5
5
|
import { argv } from "process";
|
|
6
6
|
import { execFileSync, spawn } from "child_process";
|
|
7
7
|
import ms from "ms";
|
|
@@ -481,7 +481,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
|
|
|
481
481
|
const rawArg = process.argv[2];
|
|
482
482
|
const managerCommands = !invokedCliName(process.argv);
|
|
483
483
|
const isHelpFlag = rawArg === "-h" || rawArg === "--help";
|
|
484
|
-
const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-
|
|
484
|
+
const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-BRid9dC9.js");
|
|
485
485
|
if (isHelpFlag && process.argv.length === 3) {
|
|
486
486
|
cmdHelp(managerCommands);
|
|
487
487
|
process.exit(0);
|
|
@@ -514,7 +514,7 @@ if (config.useRust) {
|
|
|
514
514
|
}
|
|
515
515
|
}
|
|
516
516
|
if (rustBinary) {
|
|
517
|
-
const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-
|
|
517
|
+
const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-DxuGPe7a.js");
|
|
518
518
|
const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
|
|
519
519
|
if (config.verbose) {
|
|
520
520
|
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-DPZ55Y-i.js";
|
|
2
2
|
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-
|
|
3
|
+
import "./versionChecker-DUr1jc0A.js";
|
|
4
4
|
import "./pidStore-fqXqTKkh.js";
|
|
5
5
|
import "./globalPidIndex-DlmmJlO8.js";
|
|
6
6
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import "./ts-
|
|
1
|
+
import "./ts-DPZ55Y-i.js";
|
|
2
2
|
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-
|
|
3
|
+
import "./versionChecker-DUr1jc0A.js";
|
|
4
4
|
import "./pidStore-fqXqTKkh.js";
|
|
5
5
|
import "./globalPidIndex-DlmmJlO8.js";
|
|
6
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-
|
|
6
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CGNLS73H.js";
|
|
7
7
|
import { o as resolveSpawnCwd } from "./workspaceConfig-B0Q9-q2B.js";
|
|
8
8
|
import { createHash } from "node:crypto";
|
|
9
9
|
|
|
@@ -141,4 +141,4 @@ async function cmdSchedule(rest) {
|
|
|
141
141
|
|
|
142
142
|
//#endregion
|
|
143
143
|
export { cmdSchedule };
|
|
144
|
-
//# sourceMappingURL=schedule-
|
|
144
|
+
//# sourceMappingURL=schedule-BT9Wl94O.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import "./ts-
|
|
1
|
+
import "./ts-DPZ55Y-i.js";
|
|
2
2
|
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
3
|
+
import { r as getInstalledPackage } from "./versionChecker-DUr1jc0A.js";
|
|
4
4
|
import "./pidStore-fqXqTKkh.js";
|
|
5
5
|
import { a as updateGlobalPidStatus } from "./globalPidIndex-DlmmJlO8.js";
|
|
6
6
|
import { t as pgidForWrapper } from "./reaper-C-eWAxIj.js";
|
|
7
7
|
import "./configShared-CEyhl0WH.js";
|
|
8
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-
|
|
8
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CGNLS73H.js";
|
|
9
9
|
import "./e2e-Bfw7qL9O.js";
|
|
10
10
|
import "./webrtcLink-CBZkZ-LT.js";
|
|
11
11
|
import "./remotes-DBCvpp3B.js";
|
|
12
12
|
import { a as isProvisionAllowed, i as hasSpawnHook, n as getSpawnHook, o as resolveSpawnCwd, t as getProvisionRoot } from "./workspaceConfig-B0Q9-q2B.js";
|
|
13
|
-
import { E as writeToIpc, _ as readPtysize, b as resolveOne, c as extractTaskCounts, g as readNotes, i as controlCodeFromName, m as listRecords, o as deriveLiveStatus, v as renderRawLog, w as snapshotStatus } from "./subcommands-
|
|
13
|
+
import { E as writeToIpc, _ as readPtysize, b as resolveOne, c as extractTaskCounts, g as readNotes, i as controlCodeFromName, m as listRecords, o as deriveLiveStatus, v as renderRawLog, w as snapshotStatus } from "./subcommands-B9orhMnd.js";
|
|
14
14
|
import yargs from "yargs";
|
|
15
15
|
import { mkdir, open, readFile, stat, unlink, writeFile } from "fs/promises";
|
|
16
16
|
import { homedir, hostname, userInfo } from "os";
|
|
@@ -100,12 +100,51 @@ const SESSION_PIN_ENV = new Set([
|
|
|
100
100
|
"CLAUDE_CODE_ENTRYPOINT",
|
|
101
101
|
"AGENT_YES_PID"
|
|
102
102
|
]);
|
|
103
|
+
let loginShellEnvCache;
|
|
104
|
+
function loginShellEnv() {
|
|
105
|
+
if (loginShellEnvCache !== void 0) return loginShellEnvCache;
|
|
106
|
+
loginShellEnvCache = null;
|
|
107
|
+
if (process.platform === "win32") return loginShellEnvCache;
|
|
108
|
+
try {
|
|
109
|
+
const shell = process.env.SHELL || "/bin/sh";
|
|
110
|
+
const delim = "_AY_SHELL_ENV_DELIM_";
|
|
111
|
+
const out = Bun.spawnSync([
|
|
112
|
+
shell,
|
|
113
|
+
"-ilc",
|
|
114
|
+
`printf %s "${delim}"; env -0; printf %s "${delim}"`
|
|
115
|
+
], {
|
|
116
|
+
stdin: "ignore",
|
|
117
|
+
stderr: "ignore",
|
|
118
|
+
timeout: 5e3,
|
|
119
|
+
env: process.env
|
|
120
|
+
}).stdout?.toString() ?? "";
|
|
121
|
+
const start = out.indexOf(delim);
|
|
122
|
+
const end = out.lastIndexOf(delim);
|
|
123
|
+
if (start === -1 || end <= start) return loginShellEnvCache;
|
|
124
|
+
const dump = out.slice(start + 20, end);
|
|
125
|
+
const env = {};
|
|
126
|
+
for (const pair of dump.split("\0")) {
|
|
127
|
+
if (!pair) continue;
|
|
128
|
+
const eq = pair.indexOf("=");
|
|
129
|
+
if (eq <= 0) continue;
|
|
130
|
+
env[pair.slice(0, eq)] = pair.slice(eq + 1);
|
|
131
|
+
}
|
|
132
|
+
if (env.PATH) loginShellEnvCache = env;
|
|
133
|
+
} catch {}
|
|
134
|
+
return loginShellEnvCache;
|
|
135
|
+
}
|
|
103
136
|
function freshAgentEnv() {
|
|
137
|
+
const login = loginShellEnv();
|
|
104
138
|
const env = {};
|
|
105
|
-
|
|
139
|
+
const base = login ?? process.env;
|
|
140
|
+
for (const [k, v] of Object.entries(base)) {
|
|
106
141
|
if (v === void 0 || SESSION_PIN_ENV.has(k)) continue;
|
|
107
142
|
env[k] = v;
|
|
108
143
|
}
|
|
144
|
+
if (login) for (const [k, v] of Object.entries(process.env)) {
|
|
145
|
+
if (v === void 0 || SESSION_PIN_ENV.has(k) || k in env) continue;
|
|
146
|
+
env[k] = v;
|
|
147
|
+
}
|
|
109
148
|
return env;
|
|
110
149
|
}
|
|
111
150
|
const DAEMON_NAME = "agent-yes";
|
|
@@ -1175,6 +1214,7 @@ Options:
|
|
|
1175
1214
|
...agentArgv
|
|
1176
1215
|
], {
|
|
1177
1216
|
cwd,
|
|
1217
|
+
detached: true,
|
|
1178
1218
|
env: {
|
|
1179
1219
|
...agentEnv,
|
|
1180
1220
|
AGENT_YES_CWD: cwd,
|
|
@@ -1207,6 +1247,7 @@ Options:
|
|
|
1207
1247
|
}
|
|
1208
1248
|
const child = Bun.spawn(agentArgv, {
|
|
1209
1249
|
cwd,
|
|
1250
|
+
detached: true,
|
|
1210
1251
|
env: agentEnv,
|
|
1211
1252
|
stdin: "ignore",
|
|
1212
1253
|
stdout: "ignore",
|
|
@@ -1348,4 +1389,4 @@ Options:
|
|
|
1348
1389
|
|
|
1349
1390
|
//#endregion
|
|
1350
1391
|
export { cmdServe };
|
|
1351
|
-
//# sourceMappingURL=serve-
|
|
1392
|
+
//# sourceMappingURL=serve-BEZhNxz0.js.map
|
|
@@ -32,7 +32,7 @@ async function cmdSetup(rest) {
|
|
|
32
32
|
if (!existsSync(abs)) process.stderr.write(` note: that directory doesn't exist yet — create it, or agents spawned there will fail\n`);
|
|
33
33
|
if (noShare) return 0;
|
|
34
34
|
process.stdout.write(`\nsharing this machine to agent-yes.com…\n`);
|
|
35
|
-
const { cmdServe } = await import("./serve-
|
|
35
|
+
const { cmdServe } = await import("./serve-BEZhNxz0.js");
|
|
36
36
|
return cmdServe([
|
|
37
37
|
"install",
|
|
38
38
|
"--share",
|
|
@@ -42,4 +42,4 @@ async function cmdSetup(rest) {
|
|
|
42
42
|
|
|
43
43
|
//#endregion
|
|
44
44
|
export { cmdSetup };
|
|
45
|
-
//# sourceMappingURL=setup-
|
|
45
|
+
//# sourceMappingURL=setup-nxc7gwBy.js.map
|
|
@@ -554,15 +554,15 @@ async function runSubcommand(argv) {
|
|
|
554
554
|
case "restart": return await cmdRestart(rest);
|
|
555
555
|
case "note": return await cmdNote(rest);
|
|
556
556
|
case "serve": {
|
|
557
|
-
const { cmdServe } = await import("./serve-
|
|
557
|
+
const { cmdServe } = await import("./serve-BEZhNxz0.js");
|
|
558
558
|
return cmdServe(rest);
|
|
559
559
|
}
|
|
560
560
|
case "setup": {
|
|
561
|
-
const { cmdSetup } = await import("./setup-
|
|
561
|
+
const { cmdSetup } = await import("./setup-nxc7gwBy.js");
|
|
562
562
|
return cmdSetup(rest);
|
|
563
563
|
}
|
|
564
564
|
case "schedule": {
|
|
565
|
-
const { cmdSchedule } = await import("./schedule-
|
|
565
|
+
const { cmdSchedule } = await import("./schedule-BT9Wl94O.js");
|
|
566
566
|
return cmdSchedule(rest);
|
|
567
567
|
}
|
|
568
568
|
case "remote": {
|
|
@@ -2710,4 +2710,4 @@ async function cmdResultSet(rest) {
|
|
|
2710
2710
|
|
|
2711
2711
|
//#endregion
|
|
2712
2712
|
export { runSubcommand as C, writeToIpc as E, resolveResumeArgs as S, stopTipForCli as T, readPtysize as _, cursorAbs as a, resolveOne as b, extractTaskCounts as c, isExitRequest as d, isPidAlive as f, readNotes as g, matchKeyword as h, controlCodeFromName as i, finalizedLines as l, listRecords as m, READ_PAGE_DEFAULT as n, deriveLiveStatus as o, isSubcommand as p, cmdHelp as r, extractNeedsInput as s, GRACEFUL_EXIT_COMMANDS as t, isAgentStuck as u, renderRawLog as v, snapshotStatus as w, resolveReadWindow as x, renderRawLogLines as y };
|
|
2713
|
-
//# sourceMappingURL=subcommands-
|
|
2713
|
+
//# sourceMappingURL=subcommands-B9orhMnd.js.map
|
|
@@ -4,6 +4,6 @@ import "./configShared-CEyhl0WH.js";
|
|
|
4
4
|
import "./e2e-Bfw7qL9O.js";
|
|
5
5
|
import "./webrtcLink-CBZkZ-LT.js";
|
|
6
6
|
import "./remotes-DBCvpp3B.js";
|
|
7
|
-
import { C as runSubcommand, E as writeToIpc, S as resolveResumeArgs, T as stopTipForCli, _ as readPtysize, a as cursorAbs, b as resolveOne, c as extractTaskCounts, d as isExitRequest, f as isPidAlive, g as readNotes, h as matchKeyword, i as controlCodeFromName, l as finalizedLines, m as listRecords, n as READ_PAGE_DEFAULT, o as deriveLiveStatus, p as isSubcommand, r as cmdHelp, s as extractNeedsInput, t as GRACEFUL_EXIT_COMMANDS, u as isAgentStuck, v as renderRawLog, w as snapshotStatus, x as resolveReadWindow, y as renderRawLogLines } from "./subcommands-
|
|
7
|
+
import { C as runSubcommand, E as writeToIpc, S as resolveResumeArgs, T as stopTipForCli, _ as readPtysize, a as cursorAbs, b as resolveOne, c as extractTaskCounts, d as isExitRequest, f as isPidAlive, g as readNotes, h as matchKeyword, i as controlCodeFromName, l as finalizedLines, m as listRecords, n as READ_PAGE_DEFAULT, o as deriveLiveStatus, p as isSubcommand, r as cmdHelp, s as extractNeedsInput, t as GRACEFUL_EXIT_COMMANDS, u as isAgentStuck, v as renderRawLog, w as snapshotStatus, x as resolveReadWindow, y as renderRawLogLines } from "./subcommands-B9orhMnd.js";
|
|
8
8
|
|
|
9
9
|
export { cmdHelp, isSubcommand, runSubcommand };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as logger, t as addTransport } from "./logger-CDIsZ-Pp.js";
|
|
2
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
2
|
+
import { r as getInstalledPackage } from "./versionChecker-DUr1jc0A.js";
|
|
3
3
|
import { t as agentYesHome } from "./agentYesHome-_eJa3DaX.js";
|
|
4
4
|
import { i as shouldUseLock, r as releaseLock, t as acquireLock } from "./runningLock-V4qvXgAw.js";
|
|
5
5
|
import { t as PidStore } from "./pidStore-fqXqTKkh.js";
|
|
@@ -1802,4 +1802,4 @@ function sleep(ms) {
|
|
|
1802
1802
|
|
|
1803
1803
|
//#endregion
|
|
1804
1804
|
export { removeControlCharacters as a, AgentContext as i, agentYes as n, config as r, CLIS_CONFIG as t };
|
|
1805
|
-
//# sourceMappingURL=ts-
|
|
1805
|
+
//# sourceMappingURL=ts-DPZ55Y-i.js.map
|
|
@@ -7,7 +7,7 @@ import { fileURLToPath } from "url";
|
|
|
7
7
|
|
|
8
8
|
//#region package.json
|
|
9
9
|
var name = "claude-yes";
|
|
10
|
-
var version = "1.
|
|
10
|
+
var version = "1.160.0";
|
|
11
11
|
|
|
12
12
|
//#endregion
|
|
13
13
|
//#region ts/versionChecker.ts
|
|
@@ -215,4 +215,4 @@ async function displayVersion() {
|
|
|
215
215
|
|
|
216
216
|
//#endregion
|
|
217
217
|
export { versionString as i, displayVersion as n, getInstalledPackage as r, checkAndAutoUpdate as t };
|
|
218
|
-
//# sourceMappingURL=versionChecker-
|
|
218
|
+
//# sourceMappingURL=versionChecker-DUr1jc0A.js.map
|
package/package.json
CHANGED
package/ts/openBrowser.ts
CHANGED
|
@@ -54,9 +54,7 @@ export async function offerOpenInBrowser(
|
|
|
54
54
|
if (!resolveOpener(url)) return false;
|
|
55
55
|
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
56
56
|
try {
|
|
57
|
-
const answer = (
|
|
58
|
-
await new Promise<string>((resolve) => rl.question(prompt, resolve))
|
|
59
|
-
)
|
|
57
|
+
const answer = (await new Promise<string>((resolve) => rl.question(prompt, resolve)))
|
|
60
58
|
.trim()
|
|
61
59
|
.toLowerCase();
|
|
62
60
|
if (answer !== "" && answer !== "y" && answer !== "yes") return false;
|
package/ts/serve.ts
CHANGED
|
@@ -152,6 +152,52 @@ const SESSION_PIN_ENV = new Set([
|
|
|
152
152
|
"AGENT_YES_PID",
|
|
153
153
|
]);
|
|
154
154
|
|
|
155
|
+
// The login-shell environment, captured once and cached for the daemon's
|
|
156
|
+
// lifetime. `ay serve` is daemonized by oxmgr/launchd/pm2, which start it with a
|
|
157
|
+
// minimal PATH that never sourced the user's ~/.zshrc / ~/.zprofile — so it lacks
|
|
158
|
+
// ~/.bun/bin, ~/.cargo/bin, Homebrew, nvm shims, etc. A console-spawned agent
|
|
159
|
+
// that inherits that env can't find `bun`/`bunx`/etc. (the user reported "bunx:
|
|
160
|
+
// command not found" when spawning a new agent from the web UI). We recover the
|
|
161
|
+
// real environment by running the user's interactive login shell and dumping its
|
|
162
|
+
// env, exactly as a fresh terminal would have it. Returns null on Windows (no
|
|
163
|
+
// rc-file model — the process env is already the right one) or on any failure, so
|
|
164
|
+
// callers fall back to process.env.
|
|
165
|
+
let loginShellEnvCache: Record<string, string> | null | undefined;
|
|
166
|
+
function loginShellEnv(): Record<string, string> | null {
|
|
167
|
+
if (loginShellEnvCache !== undefined) return loginShellEnvCache;
|
|
168
|
+
loginShellEnvCache = null;
|
|
169
|
+
if (process.platform === "win32") return loginShellEnvCache;
|
|
170
|
+
try {
|
|
171
|
+
const shell = process.env.SHELL || "/bin/sh";
|
|
172
|
+
// Delimiters fence off the env dump from any banner/prompt noise the rc files
|
|
173
|
+
// print to stdout; `env -0` is NUL-separated so values with newlines survive.
|
|
174
|
+
const delim = "_AY_SHELL_ENV_DELIM_";
|
|
175
|
+
const res = Bun.spawnSync([shell, "-ilc", `printf %s "${delim}"; env -0; printf %s "${delim}"`], {
|
|
176
|
+
stdin: "ignore",
|
|
177
|
+
stderr: "ignore",
|
|
178
|
+
timeout: 5_000,
|
|
179
|
+
env: process.env as Record<string, string>,
|
|
180
|
+
});
|
|
181
|
+
const out = res.stdout?.toString() ?? "";
|
|
182
|
+
const start = out.indexOf(delim);
|
|
183
|
+
const end = out.lastIndexOf(delim);
|
|
184
|
+
if (start === -1 || end <= start) return loginShellEnvCache;
|
|
185
|
+
const dump = out.slice(start + delim.length, end);
|
|
186
|
+
const env: Record<string, string> = {};
|
|
187
|
+
for (const pair of dump.split("\0")) {
|
|
188
|
+
if (!pair) continue;
|
|
189
|
+
const eq = pair.indexOf("=");
|
|
190
|
+
if (eq <= 0) continue;
|
|
191
|
+
env[pair.slice(0, eq)] = pair.slice(eq + 1);
|
|
192
|
+
}
|
|
193
|
+
// Require a usable result — a PATH carrying ~/.bun/bin is the whole point.
|
|
194
|
+
if (env.PATH) loginShellEnvCache = env;
|
|
195
|
+
} catch {
|
|
196
|
+
// best-effort; fall back to process.env
|
|
197
|
+
}
|
|
198
|
+
return loginShellEnvCache;
|
|
199
|
+
}
|
|
200
|
+
|
|
155
201
|
// Env for a console-spawned agent, minus only the session-pinning vars above. If
|
|
156
202
|
// `ay serve` was launched from inside Claude Code (or any shell carrying these),
|
|
157
203
|
// it would otherwise leak the parent's SSE port / session id into every spawned
|
|
@@ -159,12 +205,26 @@ const SESSION_PIN_ENV = new Set([
|
|
|
159
205
|
// stale port, surfacing as "fail to connect". Dropping them makes each agent a
|
|
160
206
|
// clean top-level session; all config/provider env (CLAUDE_EFFORT, CLAUDE_CODE_*
|
|
161
207
|
// settings) is preserved.
|
|
208
|
+
//
|
|
209
|
+
// The base is the login-shell env (see loginShellEnv) so the agent behaves like
|
|
210
|
+
// one launched from a fresh terminal — PATH and anything ~/.zshrc exports are
|
|
211
|
+
// present. Daemon-only vars that the login shell doesn't define (e.g. provider
|
|
212
|
+
// keys exported when `ay serve` was launched) are layered back on so nothing the
|
|
213
|
+
// daemon was deliberately given is lost; for keys in both, the login shell wins.
|
|
162
214
|
function freshAgentEnv(): Record<string, string> {
|
|
215
|
+
const login = loginShellEnv();
|
|
163
216
|
const env: Record<string, string> = {};
|
|
164
|
-
|
|
217
|
+
const base = login ?? (process.env as Record<string, string>);
|
|
218
|
+
for (const [k, v] of Object.entries(base)) {
|
|
165
219
|
if (v === undefined || SESSION_PIN_ENV.has(k)) continue;
|
|
166
220
|
env[k] = v;
|
|
167
221
|
}
|
|
222
|
+
if (login) {
|
|
223
|
+
for (const [k, v] of Object.entries(process.env)) {
|
|
224
|
+
if (v === undefined || SESSION_PIN_ENV.has(k) || k in env) continue;
|
|
225
|
+
env[k] = v;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
168
228
|
return env;
|
|
169
229
|
}
|
|
170
230
|
|
|
@@ -1703,6 +1763,14 @@ export async function cmdServe(rest: string[]): Promise<number> {
|
|
|
1703
1763
|
const agentArgv = [...ayCmd, cli, ...(prompt ? ["--", prompt] : [])];
|
|
1704
1764
|
// don't leak our Claude Code session into the agent
|
|
1705
1765
|
const agentEnv = freshAgentEnv();
|
|
1766
|
+
// Detach the agent into its OWN session (setsid). When `ay serve` runs WITH a
|
|
1767
|
+
// controlling terminal (started in a shell rather than as a headless daemon),
|
|
1768
|
+
// an undetached child inherits the daemon's session + controlling tty and lands
|
|
1769
|
+
// in a *background* process group. The first terminal op it makes then raises
|
|
1770
|
+
// SIGTTOU/SIGTTIN → the child is STOPPED before emitting any output (console
|
|
1771
|
+
// renders nothing), and the stop hits the whole group — freezing `ay serve`
|
|
1772
|
+
// itself. `detached: true` (setsid) gives the agent a fresh session with no
|
|
1773
|
+
// controlling terminal, immune to both. Matches the restart/openBrowser paths.
|
|
1706
1774
|
try {
|
|
1707
1775
|
const hook = getSpawnHook();
|
|
1708
1776
|
if (hook) {
|
|
@@ -1723,6 +1791,7 @@ export async function cmdServe(rest: string[]): Promise<number> {
|
|
|
1723
1791
|
// after exec would), and bounds our read to the first few KB.
|
|
1724
1792
|
const child = Bun.spawn([shell, "-c", script, "ay-spawn", ...agentArgv], {
|
|
1725
1793
|
cwd,
|
|
1794
|
+
detached: true,
|
|
1726
1795
|
env: { ...agentEnv, AGENT_YES_CWD: cwd, AGENT_YES_CLI: cli },
|
|
1727
1796
|
stdin: "ignore",
|
|
1728
1797
|
stdout: "ignore",
|
|
@@ -1768,6 +1837,7 @@ export async function cmdServe(rest: string[]): Promise<number> {
|
|
|
1768
1837
|
}
|
|
1769
1838
|
const child = Bun.spawn(agentArgv, {
|
|
1770
1839
|
cwd,
|
|
1840
|
+
detached: true,
|
|
1771
1841
|
env: agentEnv,
|
|
1772
1842
|
stdin: "ignore",
|
|
1773
1843
|
stdout: "ignore",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import "./ts-BLhio9GS.js";
|
|
2
|
-
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-CNgzuR-j.js";
|
|
4
|
-
import "./pidStore-fqXqTKkh.js";
|
|
5
|
-
import "./globalPidIndex-DlmmJlO8.js";
|
|
6
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BgxylBgz.js";
|
|
7
|
-
|
|
8
|
-
export { SUPPORTED_CLIS };
|