agent-yes 1.142.0 → 1.143.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/README.md CHANGED
@@ -136,6 +136,20 @@ gemini-yes -- debug this code
136
136
  # Use Auggie directly
137
137
  auggie-yes -- analyze code patterns
138
138
 
139
+ # Use GLM (Z.AI) directly — runs Claude Code against Z.AI's
140
+ # Anthropic-compatible endpoint. Set ZAI_API_KEY first
141
+ # (https://z.ai/manage-apikey/apikey-list).
142
+ ZAI_API_KEY=... glm-yes -- help me with this code
143
+
144
+ # Use OpenRouter directly — runs Claude Code against OpenRouter's
145
+ # Anthropic-compatible endpoint. Set OPENROUTER_API_KEY first
146
+ # (https://openrouter.ai/keys).
147
+ OPENROUTER_API_KEY=... openrouter-yes -- help me with this code
148
+
149
+ # Use Pi directly — minimal multi-provider coding agent
150
+ # (https://github.com/earendil-works/pi)
151
+ pi-yes -- refactor this module
152
+
139
153
  claude-yes "help me with this code"
140
154
  claude-yes "optimize performance"
141
155
  ```
@@ -94,6 +94,11 @@
94
94
  "type": "string",
95
95
  "description": "Actual binary name if different from CLI name (e.g., 'cursor-agent' for cursor)"
96
96
  },
97
+ "env": {
98
+ "type": "object",
99
+ "additionalProperties": { "type": "string" },
100
+ "description": "Environment variables injected into the spawned agent process (e.g. GLM points the `claude` binary at Z.AI). Values support ${VAR} expansion against the launching environment; an entry whose variable is unset is skipped so it can't blank out an inherited value."
101
+ },
97
102
  "defaultArgs": {
98
103
  "type": "array",
99
104
  "items": { "type": "string" },
@@ -76,6 +76,191 @@ clis:
76
76
  bunx: true
77
77
  defaultArgs: []
78
78
 
79
+ # GLM (Z.AI) — runs the `claude` binary against Z.AI's Anthropic-compatible
80
+ # endpoint, so it inherits every claude marker (ready/working/enter/autoRetry…)
81
+ # while talking to GLM models. Set ZAI_API_KEY (from
82
+ # https://z.ai/manage-apikey/apikey-list) before launching. Override the model
83
+ # via ~/.claude/settings.json (ANTHROPIC_DEFAULT_*_MODEL) or by exporting the
84
+ # same env vars; unset → Z.AI's default (GLM-4.7). See
85
+ # https://docs.z.ai/devpack/tool/claude
86
+ glm:
87
+ binary: claude
88
+ # ${VAR} entries expand against the launching environment at spawn time; an
89
+ # entry whose variable is unset is skipped (so it can't blank out an
90
+ # inherited value). Static values are passed through verbatim.
91
+ env:
92
+ ANTHROPIC_BASE_URL: https://api.z.ai/api/anthropic
93
+ ANTHROPIC_AUTH_TOKEN: ${ZAI_API_KEY}
94
+ API_TIMEOUT_MS: "3000000"
95
+ promptArg: last-arg
96
+ systemPrompt: --append-system-prompt
97
+ yesArgs:
98
+ - --dangerously-skip-permissions
99
+ install:
100
+ powershell: 'powershell -Command "irm https://claude.ai/install.ps1 | iex"'
101
+ bash: "curl -fsSL https://claude.ai/install.sh | bash"
102
+ npm: "npm i -g @anthropic-ai/claude-code@latest"
103
+ ready:
104
+ - '\? for shortcuts'
105
+ - ' Try "'
106
+ - '^\? for shortcuts'
107
+ - "^>[ ]"
108
+ - "──────────+"
109
+ working:
110
+ - esc to interrupt
111
+ - to run in background
112
+ needsInput:
113
+ - pattern: '❯ ?\d+\.'
114
+ flags: m
115
+ typingRespond:
116
+ "1\n":
117
+ - '│ Do you want to use this API key\?'
118
+ enter:
119
+ - pattern: ' > 1\. Yes, I trust this folder'
120
+ flags: m
121
+ - pattern: '❯ ?1\. ?Dark mode ?✔'
122
+ flags: m
123
+ - pattern: '❯ ?1\. ?Auto \(match terminal\)'
124
+ flags: m
125
+ - pattern: '❯ ?1\. ?Yes'
126
+ flags: m
127
+ - pattern: '^.{0,4} ?1\. ?Dark mode ?✔'
128
+ flags: m
129
+ - pattern: '^.{0,4} ?1\. ?Auto \(match terminal\)'
130
+ flags: m
131
+ - pattern: '^.{0,4} ?1\. ?Yes'
132
+ flags: m
133
+ - pattern: Press Enter to continue
134
+ flags: m
135
+ fatal:
136
+ - "^error: unknown option"
137
+ autoRetry:
138
+ - pattern: "API Error.*Overloaded"
139
+ flags: i
140
+ - Overloaded
141
+ - pattern: 'API Error.{0,4}5\d\d'
142
+ flags: i
143
+ - Claude usage limit reached
144
+ - hit your usage limit
145
+ - pattern: "rate.?limit"
146
+ flags: i
147
+ - pattern: "session limit"
148
+ flags: i
149
+ restoreArgs:
150
+ - --continue
151
+ restartWithoutContinueArg:
152
+ - No conversation found to continue
153
+ exitCommands:
154
+ - /exit
155
+ bunx: true
156
+ defaultArgs: []
157
+
158
+ # OpenRouter — runs the `claude` binary against OpenRouter's Anthropic-compatible
159
+ # endpoint, inheriting every claude marker while routing to OpenRouter models.
160
+ # Set OPENROUTER_API_KEY (from https://openrouter.ai/keys). ANTHROPIC_API_KEY is
161
+ # pinned to "" so Claude Code doesn't fall back to a first-party Anthropic
162
+ # account. The native skin targets Anthropic models by default; pick another via
163
+ # ~/.claude/settings.json (ANTHROPIC_DEFAULT_*_MODEL = an OpenRouter slug like
164
+ # "anthropic/claude-sonnet-4"). See
165
+ # https://openrouter.ai/docs/cookbook/coding-agents/claude-code-integration
166
+ openrouter:
167
+ binary: claude
168
+ env:
169
+ ANTHROPIC_BASE_URL: https://openrouter.ai/api
170
+ ANTHROPIC_AUTH_TOKEN: ${OPENROUTER_API_KEY}
171
+ ANTHROPIC_API_KEY: ""
172
+ promptArg: last-arg
173
+ systemPrompt: --append-system-prompt
174
+ yesArgs:
175
+ - --dangerously-skip-permissions
176
+ install:
177
+ powershell: 'powershell -Command "irm https://claude.ai/install.ps1 | iex"'
178
+ bash: "curl -fsSL https://claude.ai/install.sh | bash"
179
+ npm: "npm i -g @anthropic-ai/claude-code@latest"
180
+ ready:
181
+ - '\? for shortcuts'
182
+ - ' Try "'
183
+ - '^\? for shortcuts'
184
+ - "^>[ ]"
185
+ - "──────────+"
186
+ working:
187
+ - esc to interrupt
188
+ - to run in background
189
+ needsInput:
190
+ - pattern: '❯ ?\d+\.'
191
+ flags: m
192
+ typingRespond:
193
+ "1\n":
194
+ - '│ Do you want to use this API key\?'
195
+ enter:
196
+ - pattern: ' > 1\. Yes, I trust this folder'
197
+ flags: m
198
+ - pattern: '❯ ?1\. ?Dark mode ?✔'
199
+ flags: m
200
+ - pattern: '❯ ?1\. ?Auto \(match terminal\)'
201
+ flags: m
202
+ - pattern: '❯ ?1\. ?Yes'
203
+ flags: m
204
+ - pattern: '^.{0,4} ?1\. ?Dark mode ?✔'
205
+ flags: m
206
+ - pattern: '^.{0,4} ?1\. ?Auto \(match terminal\)'
207
+ flags: m
208
+ - pattern: '^.{0,4} ?1\. ?Yes'
209
+ flags: m
210
+ - pattern: Press Enter to continue
211
+ flags: m
212
+ fatal:
213
+ - "^error: unknown option"
214
+ autoRetry:
215
+ - pattern: "API Error.*Overloaded"
216
+ flags: i
217
+ - Overloaded
218
+ - pattern: 'API Error.{0,4}5\d\d'
219
+ flags: i
220
+ - Claude usage limit reached
221
+ - hit your usage limit
222
+ - pattern: "rate.?limit"
223
+ flags: i
224
+ - pattern: "session limit"
225
+ flags: i
226
+ restoreArgs:
227
+ - --continue
228
+ restartWithoutContinueArg:
229
+ - No conversation found to continue
230
+ exitCommands:
231
+ - /exit
232
+ bunx: true
233
+ defaultArgs: []
234
+
235
+ # Pi — minimal multi-provider coding agent (https://github.com/earendil-works/pi).
236
+ # Interactive TUI: a bordered input box with a footer status line showing the
237
+ # context-usage gauge (e.g. "0.0%/272k") + model. Pi has NO tool-permission
238
+ # popups by design (run it in a container), so there's no "yolo" flag to map
239
+ # `-y` to — yesArgs is intentionally omitted. Pass the provider/model via
240
+ # PI_* env vars or --provider/--model; default provider is google.
241
+ pi:
242
+ binary: pi
243
+ promptArg: last-arg
244
+ systemPrompt: --append-system-prompt
245
+ help: https://github.com/earendil-works/pi
246
+ install:
247
+ npm: "npm install -g --ignore-scripts @earendil-works/pi-coding-agent"
248
+ # The footer context-usage gauge is re-rendered every time pi returns to the
249
+ # prompt, so it doubles as the "ready for input" marker. Idle detection also
250
+ # requires output quiescence, so a streaming response (gauge still updating)
251
+ # is not mis-read as idle.
252
+ ready:
253
+ - '%/\d+k'
254
+ - clear/exit
255
+ - "──────────+"
256
+ fatal:
257
+ - "^error: unknown option"
258
+ restoreArgs:
259
+ - --continue
260
+ exitCommands:
261
+ - /quit
262
+ defaultArgs: []
263
+
79
264
  gemini:
80
265
  install:
81
266
  npm: "npm install -g @google/gemini-cli@latest"
@@ -0,0 +1,8 @@
1
+ import "./ts-CV4m7CUC.js";
2
+ import "./logger-CDIsZ-Pp.js";
3
+ import "./versionChecker-DatX-QMn.js";
4
+ import "./pidStore-fqXqTKkh.js";
5
+ import "./globalPidIndex-DlmmJlO8.js";
6
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DdzFdshj.js";
7
+
8
+ export { SUPPORTED_CLIS };
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-DkAVuuIK.js";
1
+ import { t as CLIS_CONFIG } from "./ts-CV4m7CUC.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-C03sKqhu.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-DdzFdshj.js.map
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  import { t as invokedCliName } from "./invokedCli-zdFbz1ST.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-Dl2LrFFo.js";
4
+ import { i as versionString, n as displayVersion, r as getInstalledPackage, t as checkAndAutoUpdate } from "./versionChecker-DatX-QMn.js";
5
5
  import { argv } from "process";
6
6
  import { execFileSync, spawn } from "child_process";
7
7
  import ms from "ms";
@@ -480,7 +480,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
480
480
  const rawArg = process.argv[2];
481
481
  const managerCommands = !invokedCliName(process.argv);
482
482
  const isHelpFlag = rawArg === "-h" || rawArg === "--help";
483
- const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-DyhY1zTt.js");
483
+ const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-BtCnrZmr.js");
484
484
  if (isHelpFlag && process.argv.length === 3) {
485
485
  cmdHelp(managerCommands);
486
486
  process.exit(0);
@@ -513,7 +513,7 @@ if (config.useRust) {
513
513
  }
514
514
  }
515
515
  if (rustBinary) {
516
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-BKX1tigt.js");
516
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-CPLtBfWE.js");
517
517
  const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
518
518
  if (config.verbose) {
519
519
  console.log(`[rust] Using binary: ${rustBinary}`);
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bun
2
+ import { existsSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..");
6
+ if (typeof Bun !== "undefined" && existsSync(join(root, ".git"))) {
7
+ await import("../ts/cli.ts");
8
+ } else {
9
+ await import("./cli.js");
10
+ }
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-DkAVuuIK.js";
1
+ import { a as removeControlCharacters, i as AgentContext, n as agentYes, r as config, t as CLIS_CONFIG } from "./ts-CV4m7CUC.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-Dl2LrFFo.js";
3
+ import "./versionChecker-DatX-QMn.js";
4
4
  import "./pidStore-fqXqTKkh.js";
5
5
  import "./globalPidIndex-DlmmJlO8.js";
6
6
 
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bun
2
+ import { existsSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..");
6
+ if (typeof Bun !== "undefined" && existsSync(join(root, ".git"))) {
7
+ await import("../ts/cli.ts");
8
+ } else {
9
+ await import("./cli.js");
10
+ }
package/dist/pi-yes.js ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bun
2
+ import { existsSync } from "node:fs";
3
+ import { join, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..");
6
+ if (typeof Bun !== "undefined" && existsSync(join(root, ".git"))) {
7
+ await import("../ts/cli.ts");
8
+ } else {
9
+ await import("./cli.js");
10
+ }
@@ -1,9 +1,9 @@
1
- import "./ts-DkAVuuIK.js";
1
+ import "./ts-CV4m7CUC.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-Dl2LrFFo.js";
3
+ import "./versionChecker-DatX-QMn.js";
4
4
  import "./pidStore-fqXqTKkh.js";
5
5
  import "./globalPidIndex-DlmmJlO8.js";
6
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-C03sKqhu.js";
6
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DdzFdshj.js";
7
7
  import { n as resolveSpawnCwd } from "./workspaceConfig-BCOqRBEW.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-BB_gXj7p.js.map
144
+ //# sourceMappingURL=schedule-C8QKzvq-.js.map
@@ -1,13 +1,13 @@
1
- import "./ts-DkAVuuIK.js";
1
+ import "./ts-CV4m7CUC.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import { r as getInstalledPackage } from "./versionChecker-Dl2LrFFo.js";
3
+ import { r as getInstalledPackage } from "./versionChecker-DatX-QMn.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-C1C04bbq.js";
8
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-C03sKqhu.js";
8
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DdzFdshj.js";
9
9
  import "./remotes-PKKjfTI1.js";
10
- import { S as snapshotStatus, _ as renderRawLog, c as extractTaskCounts, g as readNotes, i as controlCodeFromName, m as listRecords, o as deriveLiveStatus, w as writeToIpc, y as resolveOne } from "./subcommands-OKH2CsBu.js";
10
+ import { S as snapshotStatus, _ as renderRawLog, c as extractTaskCounts, g as readNotes, i as controlCodeFromName, m as listRecords, o as deriveLiveStatus, w as writeToIpc, y as resolveOne } from "./subcommands-BthznoYM.js";
11
11
  import yargs from "yargs";
12
12
  import { mkdir, open, readFile, stat, writeFile } from "fs/promises";
13
13
  import { homedir, hostname, userInfo } from "os";
@@ -77,7 +77,8 @@ const SESSION_PIN_ENV = new Set([
77
77
  "CLAUDE_CODE_SSE_PORT",
78
78
  "CLAUDE_CODE_SESSION_ID",
79
79
  "CLAUDE_CODE_CHILD_SESSION",
80
- "CLAUDE_CODE_ENTRYPOINT"
80
+ "CLAUDE_CODE_ENTRYPOINT",
81
+ "AGENT_YES_PID"
81
82
  ]);
82
83
  function freshAgentEnv() {
83
84
  const env = {};
@@ -499,6 +500,7 @@ Options:
499
500
  const hint = stray.includes("share") ? " (did you mean --share?)" : "";
500
501
  process.stderr.write(`ay serve: ignoring unknown argument${stray.length > 1 ? "s" : ""}: ${stray.join(" ")}${hint}\n`);
501
502
  }
503
+ delete process.env.AGENT_YES_PID;
502
504
  const port = argv.port ?? DEFAULT_PORT;
503
505
  const host = argv.host ?? "127.0.0.1";
504
506
  const tokenFlag = typeof argv.token === "string" ? argv.token : void 0;
@@ -1175,4 +1177,4 @@ Options:
1175
1177
 
1176
1178
  //#endregion
1177
1179
  export { cmdServe };
1178
- //# sourceMappingURL=serve-B8tHXvH2.js.map
1180
+ //# sourceMappingURL=serve-Bathp8Fu.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-B8tHXvH2.js");
35
+ const { cmdServe } = await import("./serve-Bathp8Fu.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-DKF0uPs6.js.map
45
+ //# sourceMappingURL=setup-ygcLSFBT.js.map
@@ -2,6 +2,6 @@ import "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-DlmmJlO8.js";
3
3
  import "./configShared-C1C04bbq.js";
4
4
  import "./remotes-PKKjfTI1.js";
5
- import { C as stopTipForCli, S as snapshotStatus, _ as renderRawLog, a as cursorAbs, b as resolveReadWindow, 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 renderRawLogLines, w as writeToIpc, x as runSubcommand, y as resolveOne } from "./subcommands-OKH2CsBu.js";
5
+ import { C as stopTipForCli, S as snapshotStatus, _ as renderRawLog, a as cursorAbs, b as resolveReadWindow, 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 renderRawLogLines, w as writeToIpc, x as runSubcommand, y as resolveOne } from "./subcommands-BthznoYM.js";
6
6
 
7
7
  export { cmdHelp, isSubcommand, runSubcommand };
@@ -553,15 +553,15 @@ async function runSubcommand(argv) {
553
553
  case "restart": return await cmdRestart(rest);
554
554
  case "note": return await cmdNote(rest);
555
555
  case "serve": {
556
- const { cmdServe } = await import("./serve-B8tHXvH2.js");
556
+ const { cmdServe } = await import("./serve-Bathp8Fu.js");
557
557
  return cmdServe(rest);
558
558
  }
559
559
  case "setup": {
560
- const { cmdSetup } = await import("./setup-DKF0uPs6.js");
560
+ const { cmdSetup } = await import("./setup-ygcLSFBT.js");
561
561
  return cmdSetup(rest);
562
562
  }
563
563
  case "schedule": {
564
- const { cmdSchedule } = await import("./schedule-BB_gXj7p.js");
564
+ const { cmdSchedule } = await import("./schedule-C8QKzvq-.js");
565
565
  return cmdSchedule(rest);
566
566
  }
567
567
  case "remote": {
@@ -2581,4 +2581,4 @@ async function cmdResultSet(rest) {
2581
2581
 
2582
2582
  //#endregion
2583
2583
  export { stopTipForCli as C, snapshotStatus as S, renderRawLog as _, cursorAbs as a, resolveReadWindow 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, renderRawLogLines as v, writeToIpc as w, runSubcommand as x, resolveOne as y };
2584
- //# sourceMappingURL=subcommands-OKH2CsBu.js.map
2584
+ //# sourceMappingURL=subcommands-BthznoYM.js.map
@@ -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-Dl2LrFFo.js";
2
+ import { r as getInstalledPackage } from "./versionChecker-DatX-QMn.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";
@@ -1216,6 +1216,16 @@ async function agentYes({ cli, cliArgs = [], skipPermissions = false, prompt, ro
1216
1216
  const inheritedAyPid = Number(ptyEnv.AGENT_YES_PID);
1217
1217
  const parentPid = Number.isInteger(inheritedAyPid) && inheritedAyPid > 0 ? inheritedAyPid : void 0;
1218
1218
  ptyEnv.AGENT_YES_PID = String(process.pid);
1219
+ if (cliConf?.env) for (const [key, raw] of Object.entries(cliConf.env)) {
1220
+ let unresolved = false;
1221
+ const value = raw.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_, name) => {
1222
+ const v = ptyEnv[name];
1223
+ if (v === void 0 || v === "") unresolved = true;
1224
+ return v ?? "";
1225
+ });
1226
+ if (unresolved) continue;
1227
+ ptyEnv[key] = value;
1228
+ }
1219
1229
  const ptyOptions = {
1220
1230
  name: "xterm-color",
1221
1231
  ...getTerminalDimensions(),
@@ -1788,4 +1798,4 @@ function sleep(ms) {
1788
1798
 
1789
1799
  //#endregion
1790
1800
  export { removeControlCharacters as a, AgentContext as i, agentYes as n, config as r, CLIS_CONFIG as t };
1791
- //# sourceMappingURL=ts-DkAVuuIK.js.map
1801
+ //# sourceMappingURL=ts-CV4m7CUC.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.142.0";
10
+ var version = "1.143.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-Dl2LrFFo.js.map
218
+ //# sourceMappingURL=versionChecker-DatX-QMn.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-yes",
3
- "version": "1.142.0",
3
+ "version": "1.143.0",
4
4
  "description": "A wrapper tool that automates interactions with various AI CLI tools by automatically handling common prompts and responses.",
5
5
  "keywords": [
6
6
  "ai",
@@ -39,9 +39,12 @@
39
39
  "cursor-yes": "./dist/cursor-yes.js",
40
40
  "cy": "./dist/cy.js",
41
41
  "gemini-yes": "./dist/gemini-yes.js",
42
+ "glm-yes": "./dist/glm-yes.js",
42
43
  "grok-yes": "./dist/grok-yes.js",
43
44
  "opencode-yes": "./dist/opencode-yes.js",
44
- "qwen-yes": "./dist/qwen-yes.js"
45
+ "qwen-yes": "./dist/qwen-yes.js",
46
+ "pi-yes": "./dist/pi-yes.js",
47
+ "openrouter-yes": "./dist/openrouter-yes.js"
45
48
  },
46
49
  "directories": {
47
50
  "doc": "docs"
@@ -4,6 +4,9 @@ import { buildRustArgs } from "./buildRustArgs";
4
4
 
5
5
  const SUPPORTED_CLIS = [
6
6
  "claude",
7
+ "glm",
8
+ "openrouter",
9
+ "pi",
7
10
  "gemini",
8
11
  "codex",
9
12
  "copilot",
package/ts/index.ts CHANGED
@@ -43,6 +43,10 @@ export type AgentCliConfig = {
43
43
  | { powershell?: string; bash?: string; npm?: string; unix?: string; windows?: string }; // hint user for install command if not installed
44
44
  version?: string; // hint user for version command to check if installed
45
45
  binary?: string; // actual binary name if different from cli, e.g. cursor -> cursor-agent
46
+ // Env vars injected into the spawned agent (e.g. glm points `claude` at Z.AI).
47
+ // Values support ${VAR} expansion against the launching env; an entry whose
48
+ // variable is unset is skipped so it can't blank out an inherited value.
49
+ env?: Record<string, string>;
46
50
  defaultArgs?: string[]; // function to ensure certain args are present
47
51
  yesArgs?: string[]; // appended when `-y`/--yes is passed: the per-CLI "yolo" flag (claude: --dangerously-skip-permissions; codex: --dangerously-bypass-approvals-and-sandbox)
48
52
  help?: string; // documentation/help URL for the CLI
@@ -369,6 +373,21 @@ export default async function agentYes({
369
373
  const parentPid =
370
374
  Number.isInteger(inheritedAyPid) && inheritedAyPid > 0 ? inheritedAyPid : undefined;
371
375
  ptyEnv.AGENT_YES_PID = String(process.pid);
376
+ // Inject per-CLI env (e.g. glm → Z.AI endpoint). Expand ${VAR} against the
377
+ // launching env; skip entries whose vars are unset so we never blank out an
378
+ // inherited value (e.g. ANTHROPIC_AUTH_TOKEN when ZAI_API_KEY isn't exported).
379
+ if (cliConf?.env) {
380
+ for (const [key, raw] of Object.entries(cliConf.env)) {
381
+ let unresolved = false;
382
+ const value = raw.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_, name) => {
383
+ const v = ptyEnv[name];
384
+ if (v === undefined || v === "") unresolved = true;
385
+ return v ?? "";
386
+ });
387
+ if (unresolved) continue;
388
+ ptyEnv[key] = value;
389
+ }
390
+ }
372
391
  const ptyOptions = {
373
392
  name: "xterm-color",
374
393
  ...getTerminalDimensions(),
package/ts/serve.ts CHANGED
@@ -111,6 +111,13 @@ const SESSION_PIN_ENV = new Set([
111
111
  "CLAUDE_CODE_SESSION_ID",
112
112
  "CLAUDE_CODE_CHILD_SESSION",
113
113
  "CLAUDE_CODE_ENTRYPOINT",
114
+ // The agent-yes wrapper pid of the agent that launched `ay serve`. A daemon
115
+ // started from inside an agent's shell carries that agent's AGENT_YES_PID for
116
+ // its whole lifetime; without stripping it, every console-spawned agent would
117
+ // inherit it and be recorded with parent_pid = that stale agent, mis-rooting
118
+ // the whole subagent tree under an unrelated agent. Dropping it makes console
119
+ // spawns clean top-level agents (parent_pid = None).
120
+ "AGENT_YES_PID",
114
121
  ]);
115
122
 
116
123
  // Env for a console-spawned agent, minus only the session-pinning vars above. If
@@ -731,6 +738,14 @@ export async function cmdServe(rest: string[]): Promise<number> {
731
738
  );
732
739
  }
733
740
 
741
+ // Drop the AGENT_YES_PID we may have inherited from the shell/agent that
742
+ // launched us. A serve daemon outlives that agent, but the env var sticks for
743
+ // our whole lifetime; if left in place, freshAgentEnv() aside, any descendant
744
+ // we spawn would be recorded with parent_pid = that long-dead agent, mis-rooting
745
+ // the subagent tree. Clearing it once at startup makes console spawns clean
746
+ // top-level agents regardless of the spawn path.
747
+ delete process.env.AGENT_YES_PID;
748
+
734
749
  const port = (argv.port as number) ?? DEFAULT_PORT;
735
750
  const host = (argv.host as string) ?? "127.0.0.1";
736
751
  const tokenFlag = typeof argv.token === "string" ? argv.token : undefined;
@@ -1,8 +0,0 @@
1
- import "./ts-DkAVuuIK.js";
2
- import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-Dl2LrFFo.js";
4
- import "./pidStore-fqXqTKkh.js";
5
- import "./globalPidIndex-DlmmJlO8.js";
6
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-C03sKqhu.js";
7
-
8
- export { SUPPORTED_CLIS };