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.
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-BLhio9GS.js";
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-BgxylBgz.js.map
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-CNgzuR-j.js";
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-Ci-DvV84.js");
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-Ciz2bTb6.js");
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-BLhio9GS.js";
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-CNgzuR-j.js";
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-BLhio9GS.js";
1
+ import "./ts-DPZ55Y-i.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-CNgzuR-j.js";
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-BgxylBgz.js";
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-C2TQqK-3.js.map
144
+ //# sourceMappingURL=schedule-BT9Wl94O.js.map
@@ -1,16 +1,16 @@
1
- import "./ts-BLhio9GS.js";
1
+ import "./ts-DPZ55Y-i.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import { r as getInstalledPackage } from "./versionChecker-CNgzuR-j.js";
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-BgxylBgz.js";
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-Dv7GlNLV.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-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
- for (const [k, v] of Object.entries(process.env)) {
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-BDoHFiCk.js.map
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-BDoHFiCk.js");
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-0Q5xhxyC.js.map
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-BDoHFiCk.js");
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-0Q5xhxyC.js");
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-C2TQqK-3.js");
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-Dv7GlNLV.js.map
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-Dv7GlNLV.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-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-CNgzuR-j.js";
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-BLhio9GS.js.map
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.159.0";
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-CNgzuR-j.js.map
218
+ //# sourceMappingURL=versionChecker-DUr1jc0A.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-yes",
3
- "version": "1.159.0",
3
+ "version": "1.160.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",
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
- for (const [k, v] of Object.entries(process.env)) {
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 };