agent-yes 1.264.1 → 1.265.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.
Files changed (29) hide show
  1. package/README.md +4 -0
  2. package/dist/{SUPPORTED_CLIS-DomptnZ-.js → SUPPORTED_CLIS-C1gQ4uGn.js} +3 -3
  3. package/dist/{SUPPORTED_CLIS-CV5uxVvX.js → SUPPORTED_CLIS-DsMN-Qhx.js} +2 -2
  4. package/dist/{agentShare-CHRTvfRh.js → agentShare-C17BL1b_.js} +2 -2
  5. package/dist/{callback-CS3l1QUW.js → callback-DpQpd3oT.js} +2 -2
  6. package/dist/{callback-BrPjYuo7.js → callback-Nf4lDypu.js} +3 -3
  7. package/dist/cli.js +9 -5
  8. package/dist/index.js +2 -2
  9. package/dist/{notifyDaemon-BA9zzkaG.js → notifyDaemon-D5BjmH-_.js} +2 -2
  10. package/dist/{rustBinary-CZ3FKZ6a.js → rustBinary-Cz69Ey52.js} +2 -2
  11. package/dist/{schedule-C2weMqho.js → schedule-BuACJcy-.js} +4 -4
  12. package/dist/{serve-w_9JSvGA.js → serve-CQYt24Hc.js} +17 -17
  13. package/dist/{setup-wmP3Fnkf.js → setup-Cde6gwt9.js} +2 -2
  14. package/dist/{subcommands-BeKCBpSs.js → subcommands-BYfDH4SQ.js} +30 -15
  15. package/dist/subcommands-D37Ynyj-.js +10 -0
  16. package/dist/{terminal-C9NPlQhn.js → terminal-ZdVfflLy.js} +2 -2
  17. package/dist/trayApp-C2duKfsY.js +5 -0
  18. package/dist/{trayApp-CAFoAL_Q.js → trayApp-zMbgujQq.js} +2 -2
  19. package/dist/{ts-CbfV7ga2.js → ts-DVIq8h5j.js} +2 -2
  20. package/dist/{versionChecker-Dfndv7d_.js → versionChecker-DUEHsTJE.js} +2 -2
  21. package/dist/{widget-CeT_S3Ve.js → widget-DCZczYo6.js} +3 -3
  22. package/dist/{ws-CEEUxYmI.js → ws-BX-u3JDN.js} +2 -2
  23. package/dist/{ws-CrbZ7lrE.js → ws-BmiW-eii.js} +2 -2
  24. package/package.json +1 -1
  25. package/ts/cli.ts +9 -1
  26. package/ts/subcommands.spec.ts +21 -1
  27. package/ts/subcommands.ts +19 -2
  28. package/dist/subcommands--6uZuaZw.js +0 -10
  29. package/dist/trayApp-DwL6U2Sn.js +0 -5
package/README.md CHANGED
@@ -26,6 +26,10 @@ bun add -g agent-yes # or: npm install -g agent-yes
26
26
 
27
27
  Then: `ay claude` (run an agent with auto-yes) · `ay serve --share` (web console + shareable link) · live console at https://agent-yes.com
28
28
 
29
+ `ay` on its own prints the command list — `ay` **is** agent-yes, the fleet manager, so
30
+ starting an agent names a CLI (`ay claude`, `ay codex`, …). `cy` remains the one-word
31
+ shortcut that launches claude with no arguments.
32
+
29
33
  For the local web console, install [Portless](https://portless.sh/) once with `npm install -g portless`, then run `ay serve`. It assigns a free internal port and serves the console at `https://agent-yes.localhost/`. `ay serve --port N` remains available for a fixed-port API listener.
30
34
 
31
35
  ## Features
@@ -1,11 +1,11 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Dfndv7d_.js";
3
- import "./ts-CbfV7ga2.js";
2
+ import "./versionChecker-DUEHsTJE.js";
3
+ import "./ts-DVIq8h5j.js";
4
4
  import "./todoAutomation-BQRW614S.js";
5
5
  import "./JsonlStore-CPGIR0Wy.js";
6
6
  import "./globalPidIndex-Dq4KY2IV.js";
7
7
  import "./pidStore-DJqSZPJi.js";
8
8
  import "./messageLog-BYFwioFY.js";
9
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CV5uxVvX.js";
9
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DsMN-Qhx.js";
10
10
 
11
11
  export { SUPPORTED_CLIS };
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-CbfV7ga2.js";
1
+ import { t as CLIS_CONFIG } from "./ts-DVIq8h5j.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-CV5uxVvX.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-DsMN-Qhx.js.map
@@ -3,7 +3,7 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-CUMZC53I.js";
5
5
  import "./configShared-DtHMBCl7.js";
6
- import { L as resolveOne } from "./subcommands-BeKCBpSs.js";
6
+ import { R as resolveOne } from "./subcommands-BYfDH4SQ.js";
7
7
  import "./webrtcLink-CS4D-3G1.js";
8
8
  import "./remotes-Cn-wszbK.js";
9
9
  import { a as startShare } from "./share-B-e_9WBx.js";
@@ -229,4 +229,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
229
229
 
230
230
  //#endregion
231
231
  export { createScopedShare, listShares, revokeAllShares, revokeShare };
232
- //# sourceMappingURL=agentShare-CHRTvfRh.js.map
232
+ //# sourceMappingURL=agentShare-C17BL1b_.js.map
@@ -3,10 +3,10 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-CUMZC53I.js";
5
5
  import "./configShared-DtHMBCl7.js";
6
- import "./subcommands-BeKCBpSs.js";
6
+ import "./subcommands-BYfDH4SQ.js";
7
7
  import "./webrtcLink-CS4D-3G1.js";
8
8
  import "./remotes-Cn-wszbK.js";
9
9
  import "./callbackCore-Cg3Ye0ZS.js";
10
- import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-BrPjYuo7.js";
10
+ import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-Nf4lDypu.js";
11
11
 
12
12
  export { cmdCallback };
@@ -1,5 +1,5 @@
1
1
  import { t as agentYesHome } from "./agentYesHome-CtmsY6I-.js";
2
- import { L as resolveOne } from "./subcommands-BeKCBpSs.js";
2
+ import { R as resolveOne } from "./subcommands-BYfDH4SQ.js";
3
3
  import { a as mintCapability, o as parseExpires } from "./callbackCore-Cg3Ye0ZS.js";
4
4
  import { randomBytes } from "node:crypto";
5
5
  import { chmodSync, readFileSync, renameSync, writeFileSync } from "node:fs";
@@ -72,7 +72,7 @@ async function resolveBase(flag) {
72
72
  if (flag) return flag;
73
73
  if (process.env.AGENT_YES_CALLBACK_BASE) return process.env.AGENT_YES_CALLBACK_BASE;
74
74
  try {
75
- const { resolveLocalServeUrl } = await import("./serve-w_9JSvGA.js");
75
+ const { resolveLocalServeUrl } = await import("./serve-CQYt24Hc.js");
76
76
  const url = await resolveLocalServeUrl();
77
77
  if (url) return url;
78
78
  } catch {}
@@ -187,4 +187,4 @@ async function cmdCallback(rest) {
187
187
 
188
188
  //#endregion
189
189
  export { loadOrCreateCallbackSecret as i, isCallbackRevoked as n, loadCallbackSecretReadOnly as r, cmdCallback as t };
190
- //# sourceMappingURL=callback-BrPjYuo7.js.map
190
+ //# sourceMappingURL=callback-Nf4lDypu.js.map
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
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, t as checkAndAutoUpdate } from "./versionChecker-Dfndv7d_.js";
5
- import { r as getRustBinary } from "./rustBinary-CZ3FKZ6a.js";
4
+ import { i as versionString, n as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-DUEHsTJE.js";
5
+ import { r as getRustBinary } from "./rustBinary-Cz69Ey52.js";
6
6
  import { argv } from "process";
7
7
  import { spawn } from "child_process";
8
8
  import ms from "ms";
@@ -295,17 +295,21 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
295
295
  const rawArg = process.argv[2];
296
296
  const managerCommands = !invokedCliName(process.argv);
297
297
  const isHelpFlag = rawArg === "-h" || rawArg === "--help";
298
- const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken } = await import("./subcommands--6uZuaZw.js");
298
+ const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-D37Ynyj-.js");
299
299
  if (isHelpFlag && process.argv.length === 3) {
300
300
  await cmdHelp(managerCommands);
301
301
  process.exit(0);
302
302
  }
303
+ if (isBareManagerInvocation(process.argv, managerCommands)) {
304
+ await cmdHelp(managerCommands);
305
+ process.exit(0);
306
+ }
303
307
  if (isSubcommand(rawArg, managerCommands)) {
304
308
  const code = await runSubcommand(process.argv);
305
309
  process.exit(code ?? 0);
306
310
  }
307
311
  {
308
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-DomptnZ-.js");
312
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-C1gQ4uGn.js");
309
313
  if (isUnknownManagerToken(rawArg, managerCommands, SUPPORTED_CLIS)) {
310
314
  process.stderr.write(`ay: unknown subcommand or CLI '${rawArg}'.\n See 'ay help' for subcommands. To run an agent, name a CLI:\n 'ay <cli> …' (e.g. 'ay claude …') or 'ay --cli <cli> …'.\n`);
311
315
  process.exit(1);
@@ -356,7 +360,7 @@ if (config.useRust) {
356
360
  }
357
361
  }
358
362
  if (rustBinary) {
359
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-DomptnZ-.js");
363
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-C1gQ4uGn.js");
360
364
  const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
361
365
  if (config.verbose) {
362
366
  console.log(`[rust] Using binary: ${rustBinary}`);
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Dfndv7d_.js";
3
- import { a as hasTodoStore, i as answerAsk, l as AgentContext, n as agentYes, o as listAsks, r as config, s as listAsksForProject, t as CLIS_CONFIG } from "./ts-CbfV7ga2.js";
2
+ import "./versionChecker-DUEHsTJE.js";
3
+ import { a as hasTodoStore, i as answerAsk, l as AgentContext, n as agentYes, o as listAsks, r as config, s as listAsksForProject, t as CLIS_CONFIG } from "./ts-DVIq8h5j.js";
4
4
  import { _ as isKnownKind, a as renderTree, b as statesOf, c as monitorHint, d as openStore, f as DONE_STATE, g as initialState, h as canTransition, i as renderDigest, l as CycleError, m as ORPHANED_STATE, o as unblockedTasks, p as LIFECYCLES, r as openBlockers, s as describeBlock, t as reconcileTodos, u as TodoStore, v as nextStates, x as removeControlCharacters, y as requiredGate } from "./todoAutomation-BQRW614S.js";
5
5
  import "./JsonlStore-CPGIR0Wy.js";
6
6
  import "./globalPidIndex-Dq4KY2IV.js";
@@ -3,7 +3,7 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-CUMZC53I.js";
5
5
  import "./configShared-DtHMBCl7.js";
6
- import { $ as listInboxParents, P as renderLogTailLines, T as listRecords, X as gcInboxes, Y as appendEvent, Z as hostId, at as notifyDir, et as liveWatchers, it as daemonLockOwnerPath, nt as shouldStealLock, rt as daemonLockDir, tt as readInbox, u as deriveLiveState, y as isPidAlive } from "./subcommands-BeKCBpSs.js";
6
+ import { E as listRecords, F as renderLogTailLines, Q as hostId, X as appendEvent, Z as gcInboxes, at as daemonLockOwnerPath, b as isPidAlive, et as listInboxParents, it as daemonLockDir, nt as readInbox, ot as notifyDir, rt as shouldStealLock, tt as liveWatchers, u as deriveLiveState } from "./subcommands-BYfDH4SQ.js";
7
7
  import "./webrtcLink-CS4D-3G1.js";
8
8
  import "./remotes-Cn-wszbK.js";
9
9
  import { mkdir, readFile, rename, rm, stat, writeFile } from "fs/promises";
@@ -836,4 +836,4 @@ async function ensureDaemon() {
836
836
 
837
837
  //#endregion
838
838
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
839
- //# sourceMappingURL=notifyDaemon-BA9zzkaG.js.map
839
+ //# sourceMappingURL=notifyDaemon-D5BjmH-_.js.map
@@ -1,4 +1,4 @@
1
- import { r as getInstalledPackage } from "./versionChecker-Dfndv7d_.js";
1
+ import { r as getInstalledPackage } from "./versionChecker-DUEHsTJE.js";
2
2
  import { execFileSync } from "child_process";
3
3
  import { existsSync, mkdirSync, unlinkSync } from "fs";
4
4
  import { chmod, copyFile } from "fs/promises";
@@ -243,4 +243,4 @@ async function getRustBinary(options = {}) {
243
243
 
244
244
  //#endregion
245
245
  export { findTrayLauncher as n, getRustBinary as r, findSpawnHiddenLauncher as t };
246
- //# sourceMappingURL=rustBinary-CZ3FKZ6a.js.map
246
+ //# sourceMappingURL=rustBinary-Cz69Ey52.js.map
@@ -1,12 +1,12 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Dfndv7d_.js";
3
- import "./ts-CbfV7ga2.js";
2
+ import "./versionChecker-DUEHsTJE.js";
3
+ import "./ts-DVIq8h5j.js";
4
4
  import "./todoAutomation-BQRW614S.js";
5
5
  import "./JsonlStore-CPGIR0Wy.js";
6
6
  import "./globalPidIndex-Dq4KY2IV.js";
7
7
  import "./pidStore-DJqSZPJi.js";
8
8
  import "./messageLog-BYFwioFY.js";
9
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CV5uxVvX.js";
9
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DsMN-Qhx.js";
10
10
  import { f as resolveSpawnCwd } from "./workspaceConfig-Bxuk_MOq.js";
11
11
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-vhOBffJ3.js";
12
12
  import { createHash } from "node:crypto";
@@ -153,4 +153,4 @@ async function cmdSchedule(rest) {
153
153
 
154
154
  //#endregion
155
155
  export { cmdSchedule };
156
- //# sourceMappingURL=schedule-C2weMqho.js.map
156
+ //# sourceMappingURL=schedule-BuACJcy-.js.map
@@ -1,7 +1,7 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import { r as getInstalledPackage } from "./versionChecker-Dfndv7d_.js";
3
- import { t as findSpawnHiddenLauncher } from "./rustBinary-CZ3FKZ6a.js";
4
- import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-CbfV7ga2.js";
2
+ import { r as getInstalledPackage } from "./versionChecker-DUEHsTJE.js";
3
+ import { t as findSpawnHiddenLauncher } from "./rustBinary-Cz69Ey52.js";
4
+ import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-DVIq8h5j.js";
5
5
  import { t as agentYesHome$1 } from "./agentYesHome-CtmsY6I-.js";
6
6
  import { x as removeControlCharacters } from "./todoAutomation-BQRW614S.js";
7
7
  import "./JsonlStore-CPGIR0Wy.js";
@@ -11,17 +11,17 @@ import { r as recordInbox } from "./messageLog-BYFwioFY.js";
11
11
  import { t as pgidForWrapper } from "./reaper-C4BvNylH.js";
12
12
  import "./e2e-CUMZC53I.js";
13
13
  import "./configShared-DtHMBCl7.js";
14
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CV5uxVvX.js";
15
- import { A as readNotes, C as isUserTyping, F as renderRawLog, H as snapshotStatus, I as renderRawLogLines, J as writeToIpc, L as resolveOne, M as recentMessageEdges, N as recentReadEdges, P as renderLogTailLines, Q as isTransientLockMkdirError, T as listRecords, c as controlCodeFromName, d as deriveLiveStatus, f as extractBadges, h as extractTaskCounts, j as readPtysize, k as readLogForRender, m as extractNeedsInput, ot as TYPING_BADGE } from "./subcommands-BeKCBpSs.js";
14
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DsMN-Qhx.js";
15
+ import { $ as isTransientLockMkdirError, A as readLogForRender, E as listRecords, F as renderLogTailLines, I as renderRawLog, L as renderRawLogLines, M as readPtysize, N as recentMessageEdges, P as recentReadEdges, R as resolveOne, U as snapshotStatus, Y as writeToIpc, c as controlCodeFromName, d as deriveLiveStatus, f as extractBadges, h as extractTaskCounts, j as readNotes, m as extractNeedsInput, st as TYPING_BADGE, w as isUserTyping } from "./subcommands-BYfDH4SQ.js";
16
16
  import "./webrtcLink-CS4D-3G1.js";
17
17
  import "./remotes-Cn-wszbK.js";
18
18
  import { i as frameVisitorMessage, s as verifyCapability, t as MAX_CALLBACK_MSG_BYTES } from "./callbackCore-Cg3Ye0ZS.js";
19
- import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-BrPjYuo7.js";
19
+ import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-Nf4lDypu.js";
20
20
  import { a as getProvisionRoot, d as isProvisionAllowed, f as resolveSpawnCwd, i as getProvisionHook, l as hasProvisionHook, o as getSpawnHook, t as allowsSkipPermissions, u as hasSpawnHook } from "./workspaceConfig-Bxuk_MOq.js";
21
21
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-vhOBffJ3.js";
22
- import { i as importProvisionModule } from "./ws-CrbZ7lrE.js";
22
+ import { i as importProvisionModule } from "./ws-BmiW-eii.js";
23
23
  import { r as spawnRejectionReason } from "./spawnGate-D0E1uRP7.js";
24
- import { i as launchTray } from "./trayApp-CAFoAL_Q.js";
24
+ import { i as launchTray } from "./trayApp-zMbgujQq.js";
25
25
  import yargs from "yargs";
26
26
  import { appendFile, mkdir, open, readFile, readdir, rename, rm, stat, unlink, writeFile } from "fs/promises";
27
27
  import { arch, cpus, freemem, homedir, hostname, loadavg, platform, totalmem, uptime, userInfo } from "os";
@@ -2434,7 +2434,7 @@ Options:
2434
2434
  }
2435
2435
  });
2436
2436
  if (req.method === "GET" && p === "/api/ws") {
2437
- const ws = await import("./ws-CEEUxYmI.js");
2437
+ const ws = await import("./ws-BX-u3JDN.js");
2438
2438
  try {
2439
2439
  await ws.loadProvision();
2440
2440
  } catch (e) {
@@ -2454,7 +2454,7 @@ Options:
2454
2454
  if (req.method === "GET" && p === "/api/ws/status") {
2455
2455
  const dirRaw = url.searchParams.get("path");
2456
2456
  if (!dirRaw) return new Response("missing ?path=<workspace dir>", { status: 400 });
2457
- const ws = await import("./ws-CEEUxYmI.js");
2457
+ const ws = await import("./ws-BX-u3JDN.js");
2458
2458
  let prov;
2459
2459
  try {
2460
2460
  prov = await ws.loadProvision();
@@ -2476,7 +2476,7 @@ Options:
2476
2476
  }
2477
2477
  }
2478
2478
  if (req.method === "GET" && p === "/api/ws/repos") {
2479
- const ws = await import("./ws-CEEUxYmI.js");
2479
+ const ws = await import("./ws-BX-u3JDN.js");
2480
2480
  try {
2481
2481
  await ws.loadProvision();
2482
2482
  } catch (e) {
@@ -2557,7 +2557,7 @@ Options:
2557
2557
  const m = /^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/.exec(repoParam);
2558
2558
  if (!m || m[1] === "." || m[1] === ".." || m[2] === "." || m[2] === "..") return new Response("missing/invalid ?repo=<owner>/<repo>", { status: 400 });
2559
2559
  const [, owner, repo] = m;
2560
- const ws = await import("./ws-CEEUxYmI.js");
2560
+ const ws = await import("./ws-BX-u3JDN.js");
2561
2561
  let prov;
2562
2562
  try {
2563
2563
  prov = await ws.loadProvision();
@@ -3465,7 +3465,7 @@ Options:
3465
3465
  const perm = body.perm ?? "r";
3466
3466
  if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
3467
3467
  try {
3468
- const { createScopedShare } = await import("./agentShare-CHRTvfRh.js");
3468
+ const { createScopedShare } = await import("./agentShare-C17BL1b_.js");
3469
3469
  const share = await createScopedShare({
3470
3470
  agent: body.agent,
3471
3471
  perm,
@@ -3480,12 +3480,12 @@ Options:
3480
3480
  }
3481
3481
  }
3482
3482
  if (req.method === "GET" && p === "/api/shares") {
3483
- const { listShares } = await import("./agentShare-CHRTvfRh.js");
3483
+ const { listShares } = await import("./agentShare-C17BL1b_.js");
3484
3484
  return Response.json(listShares());
3485
3485
  }
3486
3486
  const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
3487
3487
  if (req.method === "DELETE" && revokeM) {
3488
- const { revokeShare } = await import("./agentShare-CHRTvfRh.js");
3488
+ const { revokeShare } = await import("./agentShare-C17BL1b_.js");
3489
3489
  const ok = revokeShare(decodeURIComponent(revokeM[1]));
3490
3490
  return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
3491
3491
  }
@@ -3787,7 +3787,7 @@ Options:
3787
3787
  const shutdown = (resolve) => {
3788
3788
  if (heartbeat) clearInterval(heartbeat);
3789
3789
  closeShare?.();
3790
- import("./agentShare-CHRTvfRh.js").then((m) => m.revokeAllShares()).catch(() => {});
3790
+ import("./agentShare-C17BL1b_.js").then((m) => m.revokeAllShares()).catch(() => {});
3791
3791
  server?.stop();
3792
3792
  Promise.resolve(releaseHostLock?.()).catch(() => {}).then(resolve);
3793
3793
  };
@@ -3800,4 +3800,4 @@ Options:
3800
3800
 
3801
3801
  //#endregion
3802
3802
  export { cmdServe, loadTokenReadOnly, mintScopedTermToken, resolveDaemonHttpBase, resolveLocalServeUrl };
3803
- //# sourceMappingURL=serve-w_9JSvGA.js.map
3803
+ //# sourceMappingURL=serve-CQYt24Hc.js.map
@@ -40,7 +40,7 @@ async function cmdSetup(rest) {
40
40
  } catch {}
41
41
  if (noShare) return 0;
42
42
  process.stdout.write(`\nsharing this machine to agent-yes.com…\n`);
43
- const { cmdServe } = await import("./serve-w_9JSvGA.js");
43
+ const { cmdServe } = await import("./serve-CQYt24Hc.js");
44
44
  return cmdServe([
45
45
  "install",
46
46
  "--share",
@@ -50,4 +50,4 @@ async function cmdSetup(rest) {
50
50
 
51
51
  //#endregion
52
52
  export { cmdSetup };
53
- //# sourceMappingURL=setup-wmP3Fnkf.js.map
53
+ //# sourceMappingURL=setup-Cde6gwt9.js.map
@@ -1469,6 +1469,21 @@ function isUnknownManagerToken(rawArg, managerCommands, supportedClis) {
1469
1469
  return !supportedClis.includes(rawArg);
1470
1470
  }
1471
1471
  /**
1472
+ * True for a completely bare MANAGER invocation — `ay` / `agent-yes` with no
1473
+ * args at all. `ay` means agent-yes (the fleet manager), so it prints help
1474
+ * instead of silently launching an agent; naming a CLI is what launches one
1475
+ * (`ay claude`), and `cy` stays the zero-argument way to start claude.
1476
+ *
1477
+ * Never fires for a cli-bound alias (managerCommands=false): bare `cy` /
1478
+ * `claude-yes` / `codex-yes` must keep spawning their agent.
1479
+ *
1480
+ * `argv` is process.argv, so length 2 = [runtime, script] with no user args;
1481
+ * a flags-only run like `ay --continue` still launches (it asked for a run).
1482
+ */
1483
+ function isBareManagerInvocation(argv, managerCommands) {
1484
+ return managerCommands && argv.length <= 2;
1485
+ }
1486
+ /**
1472
1487
  * Write to stdout and wait until it has actually been handed off.
1473
1488
  *
1474
1489
  * The CLI ends with `process.exit()`, which DISCARDS bytes still sitting in the
@@ -1533,35 +1548,35 @@ async function runSubcommand(argv) {
1533
1548
  return cmdCh(rest);
1534
1549
  }
1535
1550
  case "term": {
1536
- const { cmdTerm } = await import("./terminal-C9NPlQhn.js");
1551
+ const { cmdTerm } = await import("./terminal-ZdVfflLy.js");
1537
1552
  return cmdTerm(rest);
1538
1553
  }
1539
1554
  case "widget": {
1540
- const { cmdWidget } = await import("./widget-CeT_S3Ve.js");
1555
+ const { cmdWidget } = await import("./widget-DCZczYo6.js");
1541
1556
  return cmdWidget(rest);
1542
1557
  }
1543
1558
  case "mint": {
1544
- const { cmdMint } = await import("./widget-CeT_S3Ve.js");
1559
+ const { cmdMint } = await import("./widget-DCZczYo6.js");
1545
1560
  return cmdMint(rest);
1546
1561
  }
1547
1562
  case "serve": {
1548
- const { cmdServe } = await import("./serve-w_9JSvGA.js");
1563
+ const { cmdServe } = await import("./serve-CQYt24Hc.js");
1549
1564
  return cmdServe(rest);
1550
1565
  }
1551
1566
  case "tray": {
1552
- const { cmdTray } = await import("./trayApp-DwL6U2Sn.js");
1567
+ const { cmdTray } = await import("./trayApp-C2duKfsY.js");
1553
1568
  return cmdTray(rest);
1554
1569
  }
1555
1570
  case "setup": {
1556
- const { cmdSetup } = await import("./setup-wmP3Fnkf.js");
1571
+ const { cmdSetup } = await import("./setup-Cde6gwt9.js");
1557
1572
  return cmdSetup(rest);
1558
1573
  }
1559
1574
  case "ws": {
1560
- const { cmdWs } = await import("./ws-CEEUxYmI.js");
1575
+ const { cmdWs } = await import("./ws-BX-u3JDN.js");
1561
1576
  return cmdWs(rest);
1562
1577
  }
1563
1578
  case "schedule": {
1564
- const { cmdSchedule } = await import("./schedule-C2weMqho.js");
1579
+ const { cmdSchedule } = await import("./schedule-BuACJcy-.js");
1565
1580
  return cmdSchedule(rest);
1566
1581
  }
1567
1582
  case "remote": {
@@ -1573,7 +1588,7 @@ async function runSubcommand(argv) {
1573
1588
  return cmdExpose(rest);
1574
1589
  }
1575
1590
  case "callback": {
1576
- const { cmdCallback } = await import("./callback-CS3l1QUW.js");
1591
+ const { cmdCallback } = await import("./callback-DpQpd3oT.js");
1577
1592
  return cmdCallback(rest);
1578
1593
  }
1579
1594
  case "reap":
@@ -1644,7 +1659,7 @@ async function cmdHelp(managerCommands = true) {
1644
1659
  const wsLines = managerCommands ? " ay ws ls [--status] list <owner>/<repo>/tree/<branch> workspaces\n ay ws new <owner>/<repo>[@branch] clone/refresh a workspace (ay ws help for more)\n" : ``;
1645
1660
  const self = process.env.AGENT_YES_PID ? await resolveSender() : null;
1646
1661
  const agentSection = self ? await buildAgentContextSection(self) : "";
1647
- process.stdout.write(agentSection + "ay - agent-yes CLI\n\nManagement:\n ay ls [keyword] list running agents\n ay tail [-f] [-n N] <keyword> last N lines (96), -f to follow\n ay read <keyword> [page opts] paginate: --last/--head N, --range A:B,\n --before-line L [--limit N]\n ay cat <keyword> full log\n ay head <keyword> first N lines\n ay send <keyword> <msg> send a message (keyword '.' = agent in this cwd)\n ay msgs [keyword] [--in|--out] inter-agent message log (sent + received)\n ay ch mk|join|send|read|tail <topic> local-first E2E channels: AI ↔ humans on a topic (ay ch help)\n ay term embed <pid> <script> to embed a live read-only agent terminal in a page (ay term help)\n ay widget ls | read selection|dom read an opted-in page widget's context (selection/DOM) (ay widget help)\n ay mint <target> --caps ... mint a scoped, short-TTL capability token (embeddable in a page)\n ay key <keyword> <key...> send raw keystrokes (down/up/enter/esc/…) — drives menus\n ay select <keyword> <N> pick option N of a needs_input selection menu\n ay attach <keyword> interactive attach (detach: Ctrl-\\)\n ay stop <keyword> graceful shutdown (/exit for claude/codex)\n ay exit <keyword> [reason] graceful shutdown, recording who/why (= 'ay send <kw> exit')\n ay restart <keyword> [--fresh] stop (if live) + relaunch resuming the session; --fresh replays the prompt\n ay status <keyword> agent status snapshot\n ay whoami [--json] (inside an agent) your own registry identity + reply address\n ay result <keyword> [--wait] pull an agent's structured result envelope\n ay result set '<json>' (inside an agent) deposit your result envelope\n ay reap kill process groups leaked by dead agents\n ay deepseek|ds [-- <codex args>] run codex via the local DeepSeek adapter (DEEPSEEK_API_KEY)\n" + wsLines + "\nRemote:\n" + setupLine + " ay schedule <when> <cli> -- <msg> run an agent on a schedule (HH:MM or cron)\n ay serve [--port N] start HTTP API server (prints token)\n ay serve status show serve daemon/server status\n ay remote add <alias> http://<token>@<host>:<port>\n ay remote ls / rm <alias> manage saved remotes\n ay expose <port> share localhost:<port> at https://<id>.agent-yes.com (private link)\n ay callback --expires 7d mint an embeddable message-me widget for one agent\n ay ls <token>@<host>:<port> connect inline (no alias needed)\n ay send <token>@<host>:<port>:<kw> <msg>\n\nRun an agent:\n ay [claude|codex|gemini|...] [options] -- [prompt]\n ay claude -- \"fix the bug in auth.ts\"\n ay claude --help full agent-runner options\n\nLabs (examples at https://github.com/snomiao/agent-yes/tree/main/lab):\n local-role-play/ designer + builder on one machine\n http-remote/ ay serve remote access demo\n p2p-pairing/ libp2p P2P (needs: cargo build --features swarm)\n");
1662
+ process.stdout.write(agentSection + "ay - agent-yes CLI\n\nManagement:\n ay ls [keyword] list running agents\n ay tail [-f] [-n N] <keyword> last N lines (96), -f to follow\n ay read <keyword> [page opts] paginate: --last/--head N, --range A:B,\n --before-line L [--limit N]\n ay cat <keyword> full log\n ay head <keyword> first N lines\n ay send <keyword> <msg> send a message (keyword '.' = agent in this cwd)\n ay msgs [keyword] [--in|--out] inter-agent message log (sent + received)\n ay ch mk|join|send|read|tail <topic> local-first E2E channels: AI ↔ humans on a topic (ay ch help)\n ay term embed <pid> <script> to embed a live read-only agent terminal in a page (ay term help)\n ay widget ls | read selection|dom read an opted-in page widget's context (selection/DOM) (ay widget help)\n ay mint <target> --caps ... mint a scoped, short-TTL capability token (embeddable in a page)\n ay key <keyword> <key...> send raw keystrokes (down/up/enter/esc/…) — drives menus\n ay select <keyword> <N> pick option N of a needs_input selection menu\n ay attach <keyword> interactive attach (detach: Ctrl-\\)\n ay stop <keyword> graceful shutdown (/exit for claude/codex)\n ay exit <keyword> [reason] graceful shutdown, recording who/why (= 'ay send <kw> exit')\n ay restart <keyword> [--fresh] stop (if live) + relaunch resuming the session; --fresh replays the prompt\n ay status <keyword> agent status snapshot\n ay whoami [--json] (inside an agent) your own registry identity + reply address\n ay result <keyword> [--wait] pull an agent's structured result envelope\n ay result set '<json>' (inside an agent) deposit your result envelope\n ay reap kill process groups leaked by dead agents\n ay deepseek|ds [-- <codex args>] run codex via the local DeepSeek adapter (DEEPSEEK_API_KEY)\n" + wsLines + "\nRemote:\n" + setupLine + " ay schedule <when> <cli> -- <msg> run an agent on a schedule (HH:MM or cron)\n ay serve [--port N] start HTTP API server (prints token)\n ay serve status show serve daemon/server status\n ay remote add <alias> http://<token>@<host>:<port>\n ay remote ls / rm <alias> manage saved remotes\n ay expose <port> share localhost:<port> at https://<id>.agent-yes.com (private link)\n ay callback --expires 7d mint an embeddable message-me widget for one agent\n ay ls <token>@<host>:<port> connect inline (no alias needed)\n ay send <token>@<host>:<port>:<kw> <msg>\n\nRun an agent (naming a CLI is what launches one — bare 'ay' shows this help):\n ay <claude|codex|gemini|...> [options] -- [prompt]\n ay claude -- \"fix the bug in auth.ts\"\n cy [options] -- [prompt] shortcut for 'ay claude' (bare 'cy' starts claude)\n ay claude --help full agent-runner options\n\nLabs (examples at https://github.com/snomiao/agent-yes/tree/main/lab):\n local-role-play/ designer + builder on one machine\n http-remote/ ay serve remote access demo\n p2p-pairing/ libp2p P2P (needs: cargo build --features swarm)\n");
1648
1663
  return 0;
1649
1664
  }
1650
1665
  function matchKeyword(record, keyword) {
@@ -4061,7 +4076,7 @@ async function cmdAttach(rest) {
4061
4076
  const winsizeDir = path.join(ayHome, "winsize");
4062
4077
  await mkdir(winsizeDir, { recursive: true });
4063
4078
  const winsizePath = path.join(winsizeDir, String(record.pid));
4064
- const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-w_9JSvGA.js");
4079
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-CQYt24Hc.js");
4065
4080
  const daemonBase = await resolveDaemonHttpBase().catch(() => null);
4066
4081
  const daemonToken = daemonBase ? await loadTokenReadOnly().catch(() => null) ?? "" : "";
4067
4082
  const capViewer = `attach:${process.pid}`;
@@ -4771,7 +4786,7 @@ async function cmdNotify(rest) {
4771
4786
  }
4772
4787
  const ensure = async () => {
4773
4788
  if (!argv["ensure-daemon"]) return;
4774
- const { ensureDaemon } = await import("./notifyDaemon-BA9zzkaG.js");
4789
+ const { ensureDaemon } = await import("./notifyDaemon-D5BjmH-_.js");
4775
4790
  await ensureDaemon().catch(() => null);
4776
4791
  };
4777
4792
  await heartbeatWatcher(parent, selfStartedAt);
@@ -4845,7 +4860,7 @@ async function cmdNotifyCursor(args) {
4845
4860
  }
4846
4861
  async function cmdNotifyd(rest) {
4847
4862
  const sub = rest[0] ?? "status";
4848
- const daemon = await import("./notifyDaemon-BA9zzkaG.js");
4863
+ const daemon = await import("./notifyDaemon-D5BjmH-_.js");
4849
4864
  switch (sub) {
4850
4865
  case "run": return daemon.runDaemon();
4851
4866
  case "once": return daemon.runDaemon({ once: true });
@@ -4871,5 +4886,5 @@ async function cmdNotifyd(rest) {
4871
4886
  }
4872
4887
 
4873
4888
  //#endregion
4874
- export { listInboxParents as $, readNotes as A, restartHintLines as B, isUserTyping as C, menuSelectKeys as D, matchKeyword as E, renderRawLog as F, submitAndConfirm as G, snapshotStatus as H, renderRawLogLines as I, writeToIpc as J, waitForLogQuiet as K, resolveOne as L, recentMessageEdges as M, recentReadEdges as N, readAgentPtysize as O, renderLogTailLines as P, isTransientLockMkdirError as Q, resolveReadWindow as R, isUnknownManagerToken as S, listRecords as T, stdinActivityPath as U, runSubcommand as V, stopTipForCli as W, gcInboxes as X, appendEvent as Y, hostId as Z, isAgentStuck as _, backoffWhileTyping as a, notifyDir as at, isSlashCommand as b, controlCodeFromName as c, deriveLiveStatus as d, liveWatchers as et, extractBadges as f, finalizedLines as g, extractTaskCounts as h, TYPING_WINDOW_MS as i, daemonLockOwnerPath as it, readPtysize as j, readLogForRender as k, cursorAbs as l, extractNeedsInput as m, MAX_RENDER_BYTES as n, shouldStealLock as nt, cmdDeepseek as o, TYPING_BADGE as ot, extractMenu as p, writeKeysPaced as q, READ_PAGE_DEFAULT as r, daemonLockDir as rt, cmdHelp as s, GRACEFUL_EXIT_COMMANDS as t, readInbox as tt, deriveLiveState as u, isExitRequest as v, lastStdinAt as w, isSubcommand as x, isPidAlive as y, resolveResumeArgs as z };
4875
- //# sourceMappingURL=subcommands-BeKCBpSs.js.map
4889
+ export { isTransientLockMkdirError as $, readLogForRender as A, resolveResumeArgs as B, isUnknownManagerToken as C, matchKeyword as D, listRecords as E, renderLogTailLines as F, stopTipForCli as G, runSubcommand as H, renderRawLog as I, writeKeysPaced as J, submitAndConfirm as K, renderRawLogLines as L, readPtysize as M, recentMessageEdges as N, menuSelectKeys as O, recentReadEdges as P, hostId as Q, resolveOne as R, isSubcommand as S, lastStdinAt as T, snapshotStatus as U, restartHintLines as V, stdinActivityPath as W, appendEvent as X, writeToIpc as Y, gcInboxes as Z, isAgentStuck as _, backoffWhileTyping as a, daemonLockOwnerPath as at, isPidAlive as b, controlCodeFromName as c, deriveLiveStatus as d, listInboxParents as et, extractBadges as f, finalizedLines as g, extractTaskCounts as h, TYPING_WINDOW_MS as i, daemonLockDir as it, readNotes as j, readAgentPtysize as k, cursorAbs as l, extractNeedsInput as m, MAX_RENDER_BYTES as n, readInbox as nt, cmdDeepseek as o, notifyDir as ot, extractMenu as p, waitForLogQuiet as q, READ_PAGE_DEFAULT as r, shouldStealLock as rt, cmdHelp as s, TYPING_BADGE as st, GRACEFUL_EXIT_COMMANDS as t, liveWatchers as tt, deriveLiveState as u, isBareManagerInvocation as v, isUserTyping as w, isSlashCommand as x, isExitRequest as y, resolveReadWindow as z };
4890
+ //# sourceMappingURL=subcommands-BYfDH4SQ.js.map
@@ -0,0 +1,10 @@
1
+ import "./logger-CDIsZ-Pp.js";
2
+ import "./globalPidIndex-Dq4KY2IV.js";
3
+ import "./messageLog-BYFwioFY.js";
4
+ import "./e2e-CUMZC53I.js";
5
+ import "./configShared-DtHMBCl7.js";
6
+ import { A as readLogForRender, B as resolveResumeArgs, C as isUnknownManagerToken, D as matchKeyword, E as listRecords, F as renderLogTailLines, G as stopTipForCli, H as runSubcommand, I as renderRawLog, J as writeKeysPaced, K as submitAndConfirm, L as renderRawLogLines, M as readPtysize, N as recentMessageEdges, O as menuSelectKeys, P as recentReadEdges, R as resolveOne, S as isSubcommand, T as lastStdinAt, U as snapshotStatus, V as restartHintLines, W as stdinActivityPath, Y as writeToIpc, _ as isAgentStuck, a as backoffWhileTyping, b as isPidAlive, c as controlCodeFromName, d as deriveLiveStatus, f as extractBadges, g as finalizedLines, h as extractTaskCounts, i as TYPING_WINDOW_MS, j as readNotes, k as readAgentPtysize, l as cursorAbs, m as extractNeedsInput, n as MAX_RENDER_BYTES, o as cmdDeepseek, p as extractMenu, q as waitForLogQuiet, r as READ_PAGE_DEFAULT, s as cmdHelp, t as GRACEFUL_EXIT_COMMANDS, u as deriveLiveState, v as isBareManagerInvocation, w as isUserTyping, x as isSlashCommand, y as isExitRequest, z as resolveReadWindow } from "./subcommands-BYfDH4SQ.js";
7
+ import "./webrtcLink-CS4D-3G1.js";
8
+ import "./remotes-Cn-wszbK.js";
9
+
10
+ export { cmdHelp, isBareManagerInvocation, isSubcommand, isUnknownManagerToken, runSubcommand };
@@ -98,7 +98,7 @@ async function cmdTermMint(args) {
98
98
  if (flags.ro && flags.interactive) throw new Error("--ro and --interactive are mutually exclusive");
99
99
  const ttlSec = parseTtlSec(typeof flags.ttl === "string" ? flags.ttl : "15m");
100
100
  const canSend = flags.interactive === true;
101
- const { mintScopedTermToken } = await import("./serve-w_9JSvGA.js");
101
+ const { mintScopedTermToken } = await import("./serve-CQYt24Hc.js");
102
102
  const r = await mintScopedTermToken(pid, {
103
103
  ttlSec,
104
104
  canSend
@@ -135,4 +135,4 @@ async function cmdTerm(args) {
135
135
 
136
136
  //#endregion
137
137
  export { cmdTerm };
138
- //# sourceMappingURL=terminal-C9NPlQhn.js.map
138
+ //# sourceMappingURL=terminal-ZdVfflLy.js.map
@@ -0,0 +1,5 @@
1
+ import "./versionChecker-DUEHsTJE.js";
2
+ import "./rustBinary-Cz69Ey52.js";
3
+ import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-zMbgujQq.js";
4
+
5
+ export { cmdTray };
@@ -1,4 +1,4 @@
1
- import { n as findTrayLauncher } from "./rustBinary-CZ3FKZ6a.js";
1
+ import { n as findTrayLauncher } from "./rustBinary-Cz69Ey52.js";
2
2
  import { t as agentYesHome } from "./agentYesHome-CtmsY6I-.js";
3
3
  import { existsSync } from "node:fs";
4
4
  import path from "node:path";
@@ -97,4 +97,4 @@ async function cmdTray(args) {
97
97
 
98
98
  //#endregion
99
99
  export { trayHiddenMarker as a, launchTray as i, hasDesktop as n, isTrayHidden as r, cmdTray as t };
100
- //# sourceMappingURL=trayApp-CAFoAL_Q.js.map
100
+ //# sourceMappingURL=trayApp-zMbgujQq.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin, r as __exportAll } from "./chunk-cZBX9HZv.js";
2
2
  import { n as logger, t as addTransport } from "./logger-CDIsZ-Pp.js";
3
- import { r as getInstalledPackage } from "./versionChecker-Dfndv7d_.js";
3
+ import { r as getInstalledPackage } from "./versionChecker-DUEHsTJE.js";
4
4
  import { t as agentYesHome } from "./agentYesHome-CtmsY6I-.js";
5
5
  import { d as openStore, p as LIFECYCLES, x as removeControlCharacters } from "./todoAutomation-BQRW614S.js";
6
6
  import { i as shouldUseLock, r as releaseLock, t as acquireLock } from "./runningLock-DBoONoM-.js";
@@ -2299,4 +2299,4 @@ function sleep(ms) {
2299
2299
 
2300
2300
  //#endregion
2301
2301
  export { hasTodoStore as a, permissionBadge as c, answerAsk as i, AgentContext as l, agentYes as n, listAsks as o, config as r, listAsksForProject as s, CLIS_CONFIG as t, CLAUDE_SESSION_PIN_ENV as u };
2302
- //# sourceMappingURL=ts-CbfV7ga2.js.map
2302
+ //# sourceMappingURL=ts-DVIq8h5j.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.264.1";
10
+ var version = "1.265.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-Dfndv7d_.js.map
218
+ //# sourceMappingURL=versionChecker-DUEHsTJE.js.map
@@ -28,7 +28,7 @@ function parseFlags(args, known) {
28
28
  }
29
29
  /** Resolve the local daemon base URL + token (flags override discovery). */
30
30
  async function daemonTarget(flags) {
31
- const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-w_9JSvGA.js");
31
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-CQYt24Hc.js");
32
32
  const base = typeof flags.base === "string" ? flags.base : await resolveDaemonHttpBase();
33
33
  if (!base) throw new Error("no running ay serve daemon found — start `ay serve` or pass --base <url> (e.g. http://127.0.0.1:PORT)");
34
34
  const token = typeof flags.token === "string" ? flags.token : await loadTokenReadOnly() ?? "";
@@ -186,7 +186,7 @@ async function cmdMint(args) {
186
186
  const bad = caps.filter((c) => !KNOWN_CAPS.has(c));
187
187
  if (bad.length) throw new Error(`unknown cap(s): ${bad.join(", ")} (valid: ${[...KNOWN_CAPS].join(", ")})`);
188
188
  const ttlSec = parseTtlSec(typeof flags.ttl === "string" ? flags.ttl : "15m");
189
- const { mintScopedTermToken } = await import("./serve-w_9JSvGA.js");
189
+ const { mintScopedTermToken } = await import("./serve-CQYt24Hc.js");
190
190
  const r = await mintScopedTermToken(target, {
191
191
  ttlSec,
192
192
  caps
@@ -202,4 +202,4 @@ async function cmdMint(args) {
202
202
 
203
203
  //#endregion
204
204
  export { cmdMint, cmdWidget };
205
- //# sourceMappingURL=widget-CeT_S3Ve.js.map
205
+ //# sourceMappingURL=widget-DCZczYo6.js.map
@@ -3,9 +3,9 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-CUMZC53I.js";
5
5
  import "./configShared-DtHMBCl7.js";
6
- import "./subcommands-BeKCBpSs.js";
6
+ import "./subcommands-BYfDH4SQ.js";
7
7
  import "./webrtcLink-CS4D-3G1.js";
8
8
  import "./remotes-Cn-wszbK.js";
9
- import { a as isPathInside, c as walkWorkspaces, i as importProvisionModule, l as workspaceStatus, n as cmdWs, o as loadProvision, r as collectWorkspaces, s as resolveOperand, t as WS_JSON_SCHEMA } from "./ws-CrbZ7lrE.js";
9
+ import { a as isPathInside, c as walkWorkspaces, i as importProvisionModule, l as workspaceStatus, n as cmdWs, o as loadProvision, r as collectWorkspaces, s as resolveOperand, t as WS_JSON_SCHEMA } from "./ws-BmiW-eii.js";
10
10
 
11
11
  export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, walkWorkspaces, workspaceStatus };
@@ -1,4 +1,4 @@
1
- import { T as listRecords } from "./subcommands-BeKCBpSs.js";
1
+ import { E as listRecords } from "./subcommands-BYfDH4SQ.js";
2
2
  import { a as getProvisionRoot } from "./workspaceConfig-Bxuk_MOq.js";
3
3
  import { existsSync } from "fs";
4
4
  import { lstat, opendir } from "fs/promises";
@@ -426,4 +426,4 @@ async function cmdWs(args) {
426
426
 
427
427
  //#endregion
428
428
  export { isPathInside as a, walkWorkspaces as c, importProvisionModule as i, workspaceStatus as l, cmdWs as n, loadProvision as o, collectWorkspaces as r, resolveOperand as s, WS_JSON_SCHEMA as t };
429
- //# sourceMappingURL=ws-CrbZ7lrE.js.map
429
+ //# sourceMappingURL=ws-BmiW-eii.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-yes",
3
- "version": "1.264.1",
3
+ "version": "1.265.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/cli.ts CHANGED
@@ -28,12 +28,20 @@ import { buildRustArgs } from "./buildRustArgs.ts";
28
28
  const managerCommands = !invokedCliName(process.argv);
29
29
  // Intercept bare -h/--help so we show TS subcommands, not just Rust agent-runner options.
30
30
  const isHelpFlag = rawArg === "-h" || rawArg === "--help";
31
- const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken } =
31
+ const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } =
32
32
  await import("./subcommands.ts");
33
33
  if (isHelpFlag && process.argv.length === 3) {
34
34
  await cmdHelp(managerCommands);
35
35
  process.exit(0);
36
36
  }
37
+ // Bare `ay` / `agent-yes`: show help. `ay` is the fleet manager, so a
38
+ // zero-argument run is someone asking "what can this do?", not "launch an
39
+ // agent" — launching names a CLI (`ay claude …`), and `cy` remains the
40
+ // no-argument shortcut for claude. Mirrored in rs/src/cli.rs.
41
+ if (isBareManagerInvocation(process.argv, managerCommands)) {
42
+ await cmdHelp(managerCommands);
43
+ process.exit(0);
44
+ }
37
45
  if (isSubcommand(rawArg, managerCommands)) {
38
46
  const code = await runSubcommand(process.argv);
39
47
  process.exit(code ?? 0);
@@ -162,6 +162,24 @@ describe("subcommands.isUnknownManagerToken (footgun guard)", () => {
162
162
  });
163
163
  });
164
164
 
165
+ describe("subcommands.isBareManagerInvocation", () => {
166
+ it("fires for a bare manager entry (`ay` with no args) → help, not a spawn", async () => {
167
+ const { isBareManagerInvocation } = await loadModule();
168
+ expect(isBareManagerInvocation(["bun", "/x/dist/agent-yes.js"], true)).toBe(true);
169
+ });
170
+ it("never fires for a cli-bound alias (bare `cy` still spawns claude)", async () => {
171
+ const { isBareManagerInvocation } = await loadModule();
172
+ expect(isBareManagerInvocation(["bun", "/x/dist/cy.js"], false)).toBe(false);
173
+ });
174
+ it("does not fire once any arg is present, including a flags-only run", async () => {
175
+ const { isBareManagerInvocation } = await loadModule();
176
+ // `ay claude`, `ay ls`, `ay --continue` each asked for something specific.
177
+ expect(isBareManagerInvocation(["bun", "/x/agent-yes.js", "claude"], true)).toBe(false);
178
+ expect(isBareManagerInvocation(["bun", "/x/agent-yes.js", "ls"], true)).toBe(false);
179
+ expect(isBareManagerInvocation(["bun", "/x/agent-yes.js", "--continue"], true)).toBe(false);
180
+ });
181
+ });
182
+
165
183
  describe("subcommands.cmdHelp", () => {
166
184
  const capture = async (managerCommands?: boolean) => {
167
185
  const { cmdHelp } = await loadModule();
@@ -2746,7 +2764,9 @@ describe("subcommands.cmdSend double-envelope warning", () => {
2746
2764
  const buf = Buffer.alloc(8192);
2747
2765
  const n = fs.readSync(rdwrFd, buf, 0, buf.length, null);
2748
2766
  const received = buf.subarray(0, n).toString();
2749
- expect(received).toMatch(/^<ay-msg [0-9a-f]{8} from claude [A-Za-z0-9._-]+@[A-Za-z0-9._-]+:\/repo\/beta#900001 — /);
2767
+ expect(received).toMatch(
2768
+ /^<ay-msg [0-9a-f]{8} from claude [A-Za-z0-9._-]+@[A-Za-z0-9._-]+:\/repo\/beta#900001 — /,
2769
+ );
2750
2770
  expect(received).toContain("<ay-msg deadbeef");
2751
2771
  fs.closeSync(rdwrFd);
2752
2772
  } finally {
package/ts/subcommands.ts CHANGED
@@ -512,6 +512,22 @@ export function isUnknownManagerToken(
512
512
  return !supportedClis.includes(rawArg);
513
513
  }
514
514
 
515
+ /**
516
+ * True for a completely bare MANAGER invocation — `ay` / `agent-yes` with no
517
+ * args at all. `ay` means agent-yes (the fleet manager), so it prints help
518
+ * instead of silently launching an agent; naming a CLI is what launches one
519
+ * (`ay claude`), and `cy` stays the zero-argument way to start claude.
520
+ *
521
+ * Never fires for a cli-bound alias (managerCommands=false): bare `cy` /
522
+ * `claude-yes` / `codex-yes` must keep spawning their agent.
523
+ *
524
+ * `argv` is process.argv, so length 2 = [runtime, script] with no user args;
525
+ * a flags-only run like `ay --continue` still launches (it asked for a run).
526
+ */
527
+ export function isBareManagerInvocation(argv: string[], managerCommands: boolean): boolean {
528
+ return managerCommands && argv.length <= 2;
529
+ }
530
+
515
531
  /**
516
532
  * Write to stdout and wait until it has actually been handed off.
517
533
  *
@@ -839,9 +855,10 @@ export async function cmdHelp(managerCommands = true): Promise<number> {
839
855
  ` ay ls <token>@<host>:<port> connect inline (no alias needed)\n` +
840
856
  ` ay send <token>@<host>:<port>:<kw> <msg>\n` +
841
857
  `\n` +
842
- `Run an agent:\n` +
843
- ` ay [claude|codex|gemini|...] [options] -- [prompt]\n` +
858
+ `Run an agent (naming a CLI is what launches one — bare 'ay' shows this help):\n` +
859
+ ` ay <claude|codex|gemini|...> [options] -- [prompt]\n` +
844
860
  ` ay claude -- "fix the bug in auth.ts"\n` +
861
+ ` cy [options] -- [prompt] shortcut for 'ay claude' (bare 'cy' starts claude)\n` +
845
862
  ` ay claude --help full agent-runner options\n` +
846
863
  `\n` +
847
864
  `Labs (examples at https://github.com/snomiao/agent-yes/tree/main/lab):\n` +
@@ -1,10 +0,0 @@
1
- import "./logger-CDIsZ-Pp.js";
2
- import "./globalPidIndex-Dq4KY2IV.js";
3
- import "./messageLog-BYFwioFY.js";
4
- import "./e2e-CUMZC53I.js";
5
- import "./configShared-DtHMBCl7.js";
6
- import { A as readNotes, B as restartHintLines, C as isUserTyping, D as menuSelectKeys, E as matchKeyword, F as renderRawLog, G as submitAndConfirm, H as snapshotStatus, I as renderRawLogLines, J as writeToIpc, K as waitForLogQuiet, L as resolveOne, M as recentMessageEdges, N as recentReadEdges, O as readAgentPtysize, P as renderLogTailLines, R as resolveReadWindow, S as isUnknownManagerToken, T as listRecords, U as stdinActivityPath, V as runSubcommand, W as stopTipForCli, _ as isAgentStuck, a as backoffWhileTyping, b as isSlashCommand, c as controlCodeFromName, d as deriveLiveStatus, f as extractBadges, g as finalizedLines, h as extractTaskCounts, i as TYPING_WINDOW_MS, j as readPtysize, k as readLogForRender, l as cursorAbs, m as extractNeedsInput, n as MAX_RENDER_BYTES, o as cmdDeepseek, p as extractMenu, q as writeKeysPaced, r as READ_PAGE_DEFAULT, s as cmdHelp, t as GRACEFUL_EXIT_COMMANDS, u as deriveLiveState, v as isExitRequest, w as lastStdinAt, x as isSubcommand, y as isPidAlive, z as resolveResumeArgs } from "./subcommands-BeKCBpSs.js";
7
- import "./webrtcLink-CS4D-3G1.js";
8
- import "./remotes-Cn-wszbK.js";
9
-
10
- export { cmdHelp, isSubcommand, isUnknownManagerToken, runSubcommand };
@@ -1,5 +0,0 @@
1
- import "./versionChecker-Dfndv7d_.js";
2
- import "./rustBinary-CZ3FKZ6a.js";
3
- import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-CAFoAL_Q.js";
4
-
5
- export { cmdTray };