agent-yes 1.299.0-beta.761.1 → 1.299.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 (31) hide show
  1. package/README.md +2 -4
  2. package/dist/{SUPPORTED_CLIS-CmE64b1X.js → SUPPORTED_CLIS-BIlQQJa6.js} +3 -3
  3. package/dist/{SUPPORTED_CLIS-Dyp5ZdxT.js → SUPPORTED_CLIS-Ct9reIJH.js} +2 -2
  4. package/dist/{agentShare-7VJy39yl.js → agentShare-uzFuaLUH.js} +2 -2
  5. package/dist/{callback--goVy2LU.js → callback-BxTZx3xJ.js} +3 -3
  6. package/dist/{callback-C0-X0Eox.js → callback-DRrURxmb.js} +2 -2
  7. package/dist/cli.js +5 -5
  8. package/dist/{cmdPs-DIKfsg29.js → cmdPs-BGIWbeBM.js} +2 -2
  9. package/dist/index.js +2 -2
  10. package/dist/{notifyDaemon-MtH3_Wps.js → notifyDaemon-EEbnpoYp.js} +2 -2
  11. package/dist/{parentPingLoop-DPyNCqSp.js → parentPingLoop-C1XXpKK7.js} +2 -2
  12. package/dist/{rustBinary-BQOPGchd.js → rustBinary--pof-MTj.js} +2 -2
  13. package/dist/{rustBinary-BgqH6ra3.js → rustBinary-B7rq3nuz.js} +2 -2
  14. package/dist/{schedule-Dez5A4_x.js → schedule-BFUe9-Mf.js} +4 -4
  15. package/dist/{serve-D3fnTIE6.js → serve-Q4dnZc5l.js} +18 -18
  16. package/dist/{setup-fi_jBo99.js → setup-aEuGSFjB.js} +2 -2
  17. package/dist/{shareCmd-DHN-IbnS.js → shareCmd-DkITELaM.js} +3 -3
  18. package/dist/{subcommands-BRTr1OLx.js → subcommands-CUWPMI_r.js} +20 -22
  19. package/dist/{subcommands-CJKp1tlZ.js → subcommands-CuRZt3X6.js} +1 -1
  20. package/dist/{terminal-BKjO2ciy.js → terminal-CUn1_oPd.js} +2 -2
  21. package/dist/{trayApp-BfzVSRKH.js → trayApp-BHwAJFzl.js} +2 -2
  22. package/dist/trayApp-ucuB_j5l.js +5 -0
  23. package/dist/{ts-n2-IgXOf.js → ts-oIxnyQbE.js} +3 -3
  24. package/dist/{versionChecker-Cs2CnqlE.js → versionChecker-DOgDaagD.js} +2 -2
  25. package/dist/{widget-DIYlNU6r.js → widget-CuagzQwz.js} +3 -3
  26. package/dist/{ws-DmOf2X43.js → ws-DcJBGzQP.js} +2 -2
  27. package/dist/{ws-DWgoJtRR.js → ws-ID7-zDiJ.js} +2 -2
  28. package/package.json +1 -1
  29. package/ts/subcommands.spec.ts +8 -18
  30. package/ts/subcommands.ts +15 -28
  31. package/dist/trayApp-UvaxgWDd.js +0 -5
package/README.md CHANGED
@@ -164,7 +164,7 @@ claude-yes --exit-on-idle=60s "run all tests and commit current changes"
164
164
  claude-code-execute claude-yes "your task here"
165
165
  ```
166
166
 
167
- ### Inspect and message running agents (`cy ls / tail / send`)
167
+ ### Inspect and message running agents (`cy ls / read / send`)
168
168
 
169
169
  From any terminal you can list and interact with agents that are already
170
170
  running on the machine — both TS- and Rust-spawned ones:
@@ -173,9 +173,7 @@ running on the machine — both TS- and Rust-spawned ones:
173
173
  cy ls # list all running agents
174
174
  cy ls codex # filter (matches pid, cwd, cli, or prompt)
175
175
  cy tail <keyword> # render last 96 lines via @xterm/headless
176
- cy cat <keyword> # full rendered log
177
- ay read <keyword> # same, with pagination (--last/--range/…)
178
- # `read` is `ay`-only: `cy read foo.ts` is a prompt
176
+ cy read <keyword> # full rendered log
179
177
  cy send <keyword> "next: run tests" # append a prompt to that agent's stdin
180
178
  cy send <keyword> "" --code=ctrl-c # send a Ctrl+C
181
179
  cy attach <keyword> # interactive attach (detach: Ctrl-\)
@@ -1,12 +1,12 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Cs2CnqlE.js";
3
- import "./ts-n2-IgXOf.js";
2
+ import "./versionChecker-DOgDaagD.js";
3
+ import "./ts-oIxnyQbE.js";
4
4
  import "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-CRH9L9tn.js";
7
7
  import "./pidStore-DXWqzTSz.js";
8
8
  import "./messageLog-Brx3w6zT.js";
9
9
  import "./todoStore-DF6vxHgV.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Dyp5ZdxT.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Ct9reIJH.js";
11
11
 
12
12
  export { SUPPORTED_CLIS };
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-n2-IgXOf.js";
1
+ import { t as CLIS_CONFIG } from "./ts-oIxnyQbE.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-Dyp5ZdxT.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-Ct9reIJH.js.map
@@ -5,7 +5,7 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import { J as resolveOne } from "./subcommands-BRTr1OLx.js";
8
+ import { J as resolveOne } from "./subcommands-CUWPMI_r.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-DFRyWNMs.js";
11
11
  import "./remotes-DrYe_nfw.js";
@@ -232,4 +232,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
232
232
 
233
233
  //#endregion
234
234
  export { createScopedShare, listShares, revokeAllShares, revokeShare };
235
- //# sourceMappingURL=agentShare-7VJy39yl.js.map
235
+ //# sourceMappingURL=agentShare-uzFuaLUH.js.map
@@ -1,5 +1,5 @@
1
1
  import { t as agentYesHome } from "./agentYesHome-BNtn19J4.js";
2
- import { J as resolveOne } from "./subcommands-BRTr1OLx.js";
2
+ import { J as resolveOne } from "./subcommands-CUWPMI_r.js";
3
3
  import { a as mintCapability, o as parseExpires } from "./callbackCore-Bl2gGcxg.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-D3fnTIE6.js");
75
+ const { resolveLocalServeUrl } = await import("./serve-Q4dnZc5l.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--goVy2LU.js.map
190
+ //# sourceMappingURL=callback-BxTZx3xJ.js.map
@@ -5,11 +5,11 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import "./subcommands-BRTr1OLx.js";
8
+ import "./subcommands-CUWPMI_r.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-DFRyWNMs.js";
11
11
  import "./remotes-DrYe_nfw.js";
12
12
  import "./callbackCore-Bl2gGcxg.js";
13
- import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback--goVy2LU.js";
13
+ import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-BxTZx3xJ.js";
14
14
 
15
15
  export { cmdCallback };
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
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 { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-Cs2CnqlE.js";
5
- import { d as getRustBinary } from "./rustBinary-BQOPGchd.js";
4
+ import { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-DOgDaagD.js";
5
+ import { d as getRustBinary } from "./rustBinary--pof-MTj.js";
6
6
  import { argv } from "process";
7
7
  import { spawn } from "child_process";
8
8
  import ms from "ms";
@@ -295,7 +295,7 @@ 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, isBareManagerInvocation } = await import("./subcommands-CJKp1tlZ.js");
298
+ const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-CuRZt3X6.js");
299
299
  if (isHelpFlag && process.argv.length === 3) {
300
300
  await cmdHelp(managerCommands);
301
301
  process.exit(0);
@@ -309,7 +309,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
309
309
  process.exit(code ?? 0);
310
310
  }
311
311
  {
312
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-CmE64b1X.js");
312
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-BIlQQJa6.js");
313
313
  if (isUnknownManagerToken(rawArg, managerCommands, SUPPORTED_CLIS)) {
314
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`);
315
315
  process.exit(1);
@@ -360,7 +360,7 @@ if (config.useRust) {
360
360
  }
361
361
  }
362
362
  if (rustBinary) {
363
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-CmE64b1X.js");
363
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-BIlQQJa6.js");
364
364
  const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
365
365
  if (config.verbose) {
366
366
  console.log(`[rust] Using binary: ${rustBinary}`);
@@ -5,7 +5,7 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import { F as listRecords, dt as buildAgentForest, ft as flattenForest, h as deriveLiveState } from "./subcommands-BRTr1OLx.js";
8
+ import { F as listRecords, dt as buildAgentForest, ft as flattenForest, h as deriveLiveState } from "./subcommands-CUWPMI_r.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-DFRyWNMs.js";
11
11
  import "./remotes-DrYe_nfw.js";
@@ -330,4 +330,4 @@ function readPpidSync(pid) {
330
330
 
331
331
  //#endregion
332
332
  export { cmdPs };
333
- //# sourceMappingURL=cmdPs-DIKfsg29.js.map
333
+ //# sourceMappingURL=cmdPs-BGIWbeBM.js.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Cs2CnqlE.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-n2-IgXOf.js";
2
+ import "./versionChecker-DOgDaagD.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-oIxnyQbE.js";
4
4
  import { a as renderTree, c as describeBlock, i as renderDigest, l as monitorHint, o as unblockedTasks, r as openBlockers, t as reconcileTodos, u as removeControlCharacters } from "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-CRH9L9tn.js";
@@ -5,7 +5,7 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import { D as isPidAlive, F as listRecords, G as renderLogTailLines, h as deriveLiveState } from "./subcommands-BRTr1OLx.js";
8
+ import { D as isPidAlive, F as listRecords, G as renderLogTailLines, h as deriveLiveState } from "./subcommands-CUWPMI_r.js";
9
9
  import { f as readInbox, g as daemonLockOwnerPath, h as daemonLockDir, i as gcInboxes, l as listInboxParents, m as shouldStealLock, n as appendEvent, s as hostId, u as liveWatchers, x as notifyDir } from "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-DFRyWNMs.js";
11
11
  import "./remotes-DrYe_nfw.js";
@@ -879,4 +879,4 @@ async function ensureDaemon() {
879
879
 
880
880
  //#endregion
881
881
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
882
- //# sourceMappingURL=notifyDaemon-MtH3_Wps.js.map
882
+ //# sourceMappingURL=notifyDaemon-EEbnpoYp.js.map
@@ -338,7 +338,7 @@ async function isParentWatching(parentWrapperPid, parentAgentPid, selfAgentPid,
338
338
  logger.debug("[parent-ping] watcher lookup failed:", error);
339
339
  }
340
340
  try {
341
- const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-CJKp1tlZ.js");
341
+ const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-CuRZt3X6.js");
342
342
  const last = await lastReadAt(`agent:${parentAgentPid}`, selfAgentPid);
343
343
  if (last !== null && now - last <= READ_WINDOW_MS) return true;
344
344
  } catch (error) {
@@ -466,4 +466,4 @@ function startParentPingLoop(opts) {
466
466
 
467
467
  //#endregion
468
468
  export { startParentPingLoop };
469
- //# sourceMappingURL=parentPingLoop-DPyNCqSp.js.map
469
+ //# sourceMappingURL=parentPingLoop-C1XXpKK7.js.map
@@ -1,4 +1,4 @@
1
- import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-Cs2CnqlE.js";
1
+ import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-DOgDaagD.js";
2
2
  import { execFileSync } from "child_process";
3
3
  import { existsSync, mkdirSync, readdirSync, rmSync, statSync, unlinkSync } from "fs";
4
4
  import { chmod, copyFile } from "fs/promises";
@@ -371,4 +371,4 @@ async function getRustBinary(options = {}) {
371
371
 
372
372
  //#endregion
373
373
  export { findSpawnHiddenLauncher as a, getBinDir as c, getRustBinary as d, hasValidMacSignature as f, findRustBinary as i, getBinaryName as l, downloadBinary as n, findTrayLauncher as o, findAyrsBinary as r, gcOldBinaryDirs as s, devBuildInfo as t, getDownloadUrl as u };
374
- //# sourceMappingURL=rustBinary-BQOPGchd.js.map
374
+ //# sourceMappingURL=rustBinary--pof-MTj.js.map
@@ -1,4 +1,4 @@
1
- import "./versionChecker-Cs2CnqlE.js";
2
- import { a as findSpawnHiddenLauncher, c as getBinDir, d as getRustBinary, f as hasValidMacSignature, i as findRustBinary, l as getBinaryName, n as downloadBinary, o as findTrayLauncher, r as findAyrsBinary, s as gcOldBinaryDirs, t as devBuildInfo, u as getDownloadUrl } from "./rustBinary-BQOPGchd.js";
1
+ import "./versionChecker-DOgDaagD.js";
2
+ import { a as findSpawnHiddenLauncher, c as getBinDir, d as getRustBinary, f as hasValidMacSignature, i as findRustBinary, l as getBinaryName, n as downloadBinary, o as findTrayLauncher, r as findAyrsBinary, s as gcOldBinaryDirs, t as devBuildInfo, u as getDownloadUrl } from "./rustBinary--pof-MTj.js";
3
3
 
4
4
  export { findAyrsBinary, gcOldBinaryDirs };
@@ -1,13 +1,13 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Cs2CnqlE.js";
3
- import "./ts-n2-IgXOf.js";
2
+ import "./versionChecker-DOgDaagD.js";
3
+ import "./ts-oIxnyQbE.js";
4
4
  import "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-CRH9L9tn.js";
7
7
  import "./pidStore-DXWqzTSz.js";
8
8
  import "./messageLog-Brx3w6zT.js";
9
9
  import "./todoStore-DF6vxHgV.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Dyp5ZdxT.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Ct9reIJH.js";
11
11
  import { f as resolveSpawnCwd } from "./workspaceConfig-DTvPtr5j.js";
12
12
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-CipjIwfO.js";
13
13
  import { createHash } from "node:crypto";
@@ -154,4 +154,4 @@ async function cmdSchedule(rest) {
154
154
 
155
155
  //#endregion
156
156
  export { cmdSchedule };
157
- //# sourceMappingURL=schedule-Dez5A4_x.js.map
157
+ //# sourceMappingURL=schedule-BFUe9-Mf.js.map
@@ -1,7 +1,7 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import { i as getInstalledPackage } from "./versionChecker-Cs2CnqlE.js";
3
- import { a as findSpawnHiddenLauncher } from "./rustBinary-BQOPGchd.js";
4
- import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-n2-IgXOf.js";
2
+ import { i as getInstalledPackage } from "./versionChecker-DOgDaagD.js";
3
+ import { a as findSpawnHiddenLauncher } from "./rustBinary--pof-MTj.js";
4
+ import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-oIxnyQbE.js";
5
5
  import { t as agentYesHome$1 } from "./agentYesHome-BNtn19J4.js";
6
6
  import { u as removeControlCharacters } from "./todoAutomation-CbVVS4re.js";
7
7
  import "./JsonlStore-BqF7AQ6E.js";
@@ -12,19 +12,19 @@ import { t as pgidForWrapper } from "./reaper-UimuuTfO.js";
12
12
  import "./todoStore-DF6vxHgV.js";
13
13
  import "./e2e-z1xpwSAg.js";
14
14
  import "./configShared-DKTgiz7K.js";
15
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Dyp5ZdxT.js";
16
- import { B as readLogForRender, F as listRecords, G as renderLogTailLines, H as readPtysize, J as resolveOne, K as renderRawLog, M as isUserTyping, O as isSlashCommand, S as extractTaskCounts, U as recentMessageEdges, V as readNotes, W as recentReadEdges, ct as framePaste, et as snapshotStatus, g as deriveLiveStatus, lt as shouldFramePaste, ot as writeToIpc, p as controlCodeFromName, q as renderRawLogLines, st as withIpcLock, u as cliDefaults, ut as TYPING_BADGE, x as extractNeedsInput, y as extractBadges } from "./subcommands-BRTr1OLx.js";
15
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Ct9reIJH.js";
16
+ import { B as readLogForRender, F as listRecords, G as renderLogTailLines, H as readPtysize, J as resolveOne, K as renderRawLog, M as isUserTyping, O as isSlashCommand, S as extractTaskCounts, U as recentMessageEdges, V as readNotes, W as recentReadEdges, ct as framePaste, et as snapshotStatus, g as deriveLiveStatus, lt as shouldFramePaste, ot as writeToIpc, p as controlCodeFromName, q as renderRawLogLines, st as withIpcLock, u as cliDefaults, ut as TYPING_BADGE, x as extractNeedsInput, y as extractBadges } from "./subcommands-CUWPMI_r.js";
17
17
  import { c as isTransientLockMkdirError } from "./notifyStore-2SWKGwZI.js";
18
18
  import { i as toWebrtcUrl, n as isWebrtcSpec } from "./webrtcLink-DFRyWNMs.js";
19
19
  import "./remotes-DrYe_nfw.js";
20
20
  import { i as frameVisitorMessage, s as verifyCapability, t as MAX_CALLBACK_MSG_BYTES } from "./callbackCore-Bl2gGcxg.js";
21
- import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback--goVy2LU.js";
21
+ import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-BxTZx3xJ.js";
22
22
  import { n as sampleTrees } from "./procStats-CyD8h5nx.js";
23
23
  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-DTvPtr5j.js";
24
24
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-CipjIwfO.js";
25
- import { i as importProvisionModule } from "./ws-DmOf2X43.js";
25
+ import { i as importProvisionModule } from "./ws-DcJBGzQP.js";
26
26
  import { r as spawnRejectionReason } from "./spawnGate-YpHopveO.js";
27
- import { i as launchTray } from "./trayApp-BfzVSRKH.js";
27
+ import { i as launchTray } from "./trayApp-BHwAJFzl.js";
28
28
  import yargs from "yargs";
29
29
  import { appendFile, mkdir, open, readFile, readdir, rename, rm, stat, unlink, writeFile } from "fs/promises";
30
30
  import { arch, cpus, freemem, homedir, hostname, loadavg, platform, totalmem, uptime, userInfo } from "os";
@@ -1690,7 +1690,7 @@ Options:
1690
1690
  const { planRustServe } = await import("./serveRust-DDQiZmMf.js");
1691
1691
  const plan = planRustServe(rest);
1692
1692
  if (plan.kind === "rust") {
1693
- const { findAyrsBinary } = await import("./rustBinary-BgqH6ra3.js");
1693
+ const { findAyrsBinary } = await import("./rustBinary-B7rq3nuz.js");
1694
1694
  const ayrs = findAyrsBinary();
1695
1695
  if (ayrs) return runAyrsServe(ayrs, plan.argv);
1696
1696
  process.stderr.write("ay serve: ayrs binary not found — running the TypeScript server (bun run build:rs, or reinstall, to get the Rust daemon)\n");
@@ -2665,7 +2665,7 @@ Options:
2665
2665
  }
2666
2666
  });
2667
2667
  if (req.method === "GET" && p === "/api/ws") {
2668
- const ws = await import("./ws-DWgoJtRR.js");
2668
+ const ws = await import("./ws-ID7-zDiJ.js");
2669
2669
  try {
2670
2670
  await ws.loadProvision();
2671
2671
  } catch (e) {
@@ -2685,7 +2685,7 @@ Options:
2685
2685
  if (req.method === "GET" && p === "/api/ws/status") {
2686
2686
  const dirRaw = url.searchParams.get("path");
2687
2687
  if (!dirRaw) return new Response("missing ?path=<workspace dir>", { status: 400 });
2688
- const ws = await import("./ws-DWgoJtRR.js");
2688
+ const ws = await import("./ws-ID7-zDiJ.js");
2689
2689
  let prov;
2690
2690
  try {
2691
2691
  prov = await ws.loadProvision();
@@ -2707,7 +2707,7 @@ Options:
2707
2707
  }
2708
2708
  }
2709
2709
  if (req.method === "GET" && p === "/api/ws/repos") {
2710
- const ws = await import("./ws-DWgoJtRR.js");
2710
+ const ws = await import("./ws-ID7-zDiJ.js");
2711
2711
  try {
2712
2712
  await ws.loadProvision();
2713
2713
  } catch (e) {
@@ -2788,7 +2788,7 @@ Options:
2788
2788
  const m = /^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/.exec(repoParam);
2789
2789
  if (!m || m[1] === "." || m[1] === ".." || m[2] === "." || m[2] === "..") return new Response("missing/invalid ?repo=<owner>/<repo>", { status: 400 });
2790
2790
  const [, owner, repo] = m;
2791
- const ws = await import("./ws-DWgoJtRR.js");
2791
+ const ws = await import("./ws-ID7-zDiJ.js");
2792
2792
  let prov;
2793
2793
  try {
2794
2794
  prov = await ws.loadProvision();
@@ -3706,7 +3706,7 @@ Options:
3706
3706
  const perm = body.perm ?? "r";
3707
3707
  if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
3708
3708
  try {
3709
- const { createScopedShare } = await import("./agentShare-7VJy39yl.js");
3709
+ const { createScopedShare } = await import("./agentShare-uzFuaLUH.js");
3710
3710
  const share = await createScopedShare({
3711
3711
  agent: body.agent,
3712
3712
  perm,
@@ -3721,12 +3721,12 @@ Options:
3721
3721
  }
3722
3722
  }
3723
3723
  if (req.method === "GET" && p === "/api/shares") {
3724
- const { listShares } = await import("./agentShare-7VJy39yl.js");
3724
+ const { listShares } = await import("./agentShare-uzFuaLUH.js");
3725
3725
  return Response.json(listShares());
3726
3726
  }
3727
3727
  const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
3728
3728
  if (req.method === "DELETE" && revokeM) {
3729
- const { revokeShare } = await import("./agentShare-7VJy39yl.js");
3729
+ const { revokeShare } = await import("./agentShare-uzFuaLUH.js");
3730
3730
  const ok = revokeShare(decodeURIComponent(revokeM[1]));
3731
3731
  return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
3732
3732
  }
@@ -4038,7 +4038,7 @@ Options:
4038
4038
  const shutdown = (resolve) => {
4039
4039
  if (heartbeat) clearInterval(heartbeat);
4040
4040
  closeShare?.();
4041
- import("./agentShare-7VJy39yl.js").then((m) => m.revokeAllShares()).catch(() => {});
4041
+ import("./agentShare-uzFuaLUH.js").then((m) => m.revokeAllShares()).catch(() => {});
4042
4042
  server?.stop();
4043
4043
  Promise.resolve(releaseHostLock?.()).catch(() => {}).then(resolve);
4044
4044
  };
@@ -4051,4 +4051,4 @@ Options:
4051
4051
 
4052
4052
  //#endregion
4053
4053
  export { cmdServe, inspectServeDaemon, loadTokenReadOnly, mintScopedTermToken, resolveDaemonHttpBase, resolveLocalServeUrl };
4054
- //# sourceMappingURL=serve-D3fnTIE6.js.map
4054
+ //# sourceMappingURL=serve-Q4dnZc5l.js.map
@@ -97,7 +97,7 @@ async function cmdSetup(rest) {
97
97
  } catch {}
98
98
  if (noShare) return 0;
99
99
  process.stdout.write(`\nsharing this machine to agent-yes.com…\n`);
100
- const { cmdServe } = await import("./serve-D3fnTIE6.js");
100
+ const { cmdServe } = await import("./serve-Q4dnZc5l.js");
101
101
  return cmdServe([
102
102
  "install",
103
103
  "--share",
@@ -107,4 +107,4 @@ async function cmdSetup(rest) {
107
107
 
108
108
  //#endregion
109
109
  export { cmdSetup };
110
- //# sourceMappingURL=setup-fi_jBo99.js.map
110
+ //# sourceMappingURL=setup-aEuGSFjB.js.map
@@ -243,7 +243,7 @@ shown first and needs a y at a [y/N] prompt.
243
243
  Options:
244
244
  --port N HTTP port (default: ${DEFAULT_SHARE_PORT}, or the daemon's)\n --path /ay tailscale mount path (default: ${DEFAULT_TS_PATH})\n -y, --yes approve the shown commands without prompting\n --json print {mode, url} as JSON\n\nThe URL carries this host's serve token: whoever holds it can read and steer\nevery agent here. Rotate: rm ~/.agent-yes/.serve-token && ay serve install\n`;
245
245
  async function cmdShareStatus(mount) {
246
- const { inspectServeDaemon } = await import("./serve-D3fnTIE6.js");
246
+ const { inspectServeDaemon } = await import("./serve-Q4dnZc5l.js");
247
247
  const [d, ts] = await Promise.all([inspectServeDaemon(), detectTailscale()]);
248
248
  const line = (k, v) => process.stdout.write(`${k.padEnd(11)}${v}\n`);
249
249
  if (d.args === null) {
@@ -287,7 +287,7 @@ async function cmdShare(rest) {
287
287
  process.stderr.write(`ay share: unknown mode '${mode}' — one of ${SHARE_MODES.join(", ")}\n`);
288
288
  return 1;
289
289
  }
290
- const { inspectServeDaemon, cmdServe } = await import("./serve-D3fnTIE6.js");
290
+ const { inspectServeDaemon, cmdServe } = await import("./serve-Q4dnZc5l.js");
291
291
  const [daemon, ts] = await Promise.all([inspectServeDaemon(), detectTailscale()]);
292
292
  const lanIp = pickLanIp(networkInterfaces());
293
293
  if (!mode) {
@@ -412,4 +412,4 @@ async function cmdShare(rest) {
412
412
 
413
413
  //#endregion
414
414
  export { cmdShare };
415
- //# sourceMappingURL=shareCmd-DHN-IbnS.js.map
415
+ //# sourceMappingURL=shareCmd-DkITELaM.js.map
@@ -1419,6 +1419,7 @@ const SUBCOMMANDS = new Set([
1419
1419
  "result",
1420
1420
  "notify",
1421
1421
  "notifyd",
1422
+ "read",
1422
1423
  "cat",
1423
1424
  "tail",
1424
1425
  "head",
@@ -1456,7 +1457,6 @@ const SUBCOMMANDS = new Set([
1456
1457
  const MANAGER_SUBCOMMANDS = new Set([
1457
1458
  "setup",
1458
1459
  "ws",
1459
- "read",
1460
1460
  "share",
1461
1461
  "connect"
1462
1462
  ]);
@@ -1614,9 +1614,8 @@ function isUnreachableWriteErrno(code) {
1614
1614
  /**
1615
1615
  * Whether `name` is a subcommand. `managerCommands` (default true, for the
1616
1616
  * generic `ay`/`agent-yes` entry) additionally admits manager-only commands
1617
- * (`setup`, `ws`, `read`); pass false for a cli-bound alias (cy/claude-yes/…) so
1618
- * those names fall through to running the agent instead — `cy read <file>` is a
1619
- * prompt, `ay read <keyword>` is the log pager.
1617
+ * like `setup`; pass false for a cli-bound alias (cy/claude-yes/…) so those
1618
+ * names fall through to running the agent instead.
1620
1619
  */
1621
1620
  function isSubcommand(name, managerCommands = true) {
1622
1621
  if (!name) return false;
@@ -1686,7 +1685,7 @@ async function runSubcommand(argv) {
1686
1685
  switch (sub) {
1687
1686
  case "ls":
1688
1687
  case "list": return await cmdLs(rest);
1689
- case "ps": return await (await import("./cmdPs-DIKfsg29.js")).cmdPs(rest);
1688
+ case "ps": return await (await import("./cmdPs-BGIWbeBM.js")).cmdPs(rest);
1690
1689
  case "status": return await cmdStatus(rest);
1691
1690
  case "whoami": return await cmdWhoami(rest);
1692
1691
  case "result": return await cmdResult(rest);
@@ -1733,35 +1732,35 @@ async function runSubcommand(argv) {
1733
1732
  return cmdCh(rest);
1734
1733
  }
1735
1734
  case "term": {
1736
- const { cmdTerm } = await import("./terminal-BKjO2ciy.js");
1735
+ const { cmdTerm } = await import("./terminal-CUn1_oPd.js");
1737
1736
  return cmdTerm(rest);
1738
1737
  }
1739
1738
  case "widget": {
1740
- const { cmdWidget } = await import("./widget-DIYlNU6r.js");
1739
+ const { cmdWidget } = await import("./widget-CuagzQwz.js");
1741
1740
  return cmdWidget(rest);
1742
1741
  }
1743
1742
  case "mint": {
1744
- const { cmdMint } = await import("./widget-DIYlNU6r.js");
1743
+ const { cmdMint } = await import("./widget-CuagzQwz.js");
1745
1744
  return cmdMint(rest);
1746
1745
  }
1747
1746
  case "serve": {
1748
- const { cmdServe } = await import("./serve-D3fnTIE6.js");
1747
+ const { cmdServe } = await import("./serve-Q4dnZc5l.js");
1749
1748
  return cmdServe(rest);
1750
1749
  }
1751
1750
  case "tray": {
1752
- const { cmdTray } = await import("./trayApp-UvaxgWDd.js");
1751
+ const { cmdTray } = await import("./trayApp-ucuB_j5l.js");
1753
1752
  return cmdTray(rest);
1754
1753
  }
1755
1754
  case "setup": {
1756
- const { cmdSetup } = await import("./setup-fi_jBo99.js");
1755
+ const { cmdSetup } = await import("./setup-aEuGSFjB.js");
1757
1756
  return cmdSetup(rest);
1758
1757
  }
1759
1758
  case "ws": {
1760
- const { cmdWs } = await import("./ws-DWgoJtRR.js");
1759
+ const { cmdWs } = await import("./ws-ID7-zDiJ.js");
1761
1760
  return cmdWs(rest);
1762
1761
  }
1763
1762
  case "schedule": {
1764
- const { cmdSchedule } = await import("./schedule-Dez5A4_x.js");
1763
+ const { cmdSchedule } = await import("./schedule-BFUe9-Mf.js");
1765
1764
  return cmdSchedule(rest);
1766
1765
  }
1767
1766
  case "remote": {
@@ -1769,7 +1768,7 @@ async function runSubcommand(argv) {
1769
1768
  return cmdRemote(rest);
1770
1769
  }
1771
1770
  case "share": {
1772
- const { cmdShare } = await import("./shareCmd-DHN-IbnS.js");
1771
+ const { cmdShare } = await import("./shareCmd-DkITELaM.js");
1773
1772
  return cmdShare(rest);
1774
1773
  }
1775
1774
  case "connect": {
@@ -1781,7 +1780,7 @@ async function runSubcommand(argv) {
1781
1780
  return cmdExpose(rest);
1782
1781
  }
1783
1782
  case "callback": {
1784
- const { cmdCallback } = await import("./callback-C0-X0Eox.js");
1783
+ const { cmdCallback } = await import("./callback-DRrURxmb.js");
1785
1784
  return cmdCallback(rest);
1786
1785
  }
1787
1786
  case "reap":
@@ -1792,7 +1791,7 @@ async function runSubcommand(argv) {
1792
1791
  return await cmdDsh(rest);
1793
1792
  }
1794
1793
  case "gc": {
1795
- const { gcOldBinaryDirs } = await import("./rustBinary-BgqH6ra3.js");
1794
+ const { gcOldBinaryDirs } = await import("./rustBinary-B7rq3nuz.js");
1796
1795
  const { gcLogs } = await import("./globalPidIndex-DC93JhHQ.js");
1797
1796
  const bins = gcOldBinaryDirs();
1798
1797
  const logs = await gcLogs();
@@ -1851,11 +1850,10 @@ As an agent, you can:
1851
1850
  async function cmdHelp(managerCommands = true) {
1852
1851
  const setupLine = managerCommands ? ` ay setup guided setup: pick a workspace, share to agent-yes.com\n` : ``;
1853
1852
  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" : ``;
1854
- const readAliasNote = managerCommands ? `` : ` (\`ay read\` only — \`cy read …\` is a prompt)\n`;
1855
1853
  const shareAliasNote = managerCommands ? `` : ` (\`ay\` only — \`cy share\`/\`cy connect\` are prompts)\n`;
1856
1854
  const self = process.env.AGENT_YES_PID ? await resolveSender() : null;
1857
1855
  const agentSection = self ? await buildAgentContextSection(self) : "";
1858
- process.stdout.write(agentSection + "ay - agent-yes CLI\n\nManagement:\n ay ls [keyword] list running agents\n ay ps [keyword] per-agent CPU/RSS, rolled up over each\n agent's whole process tree, + box vitals\n ay tail [-f] [-n N] <keyword> last N lines (96), -f to follow\n ay tail <keyword> --until TEXT block until TEXT is printed, then exit 0\n [--timeout 10m] [-q] [--regex] (1 = agent exited without it, 2 = no match,\n [--fail-on TEXT] [--count N] 3 = --fail-on hit first)\n ay read <keyword> [page opts] paginate: --last/--head N, --range A:B,\n --before-line L [--limit N]\n" + readAliasNote + " ay cat <keyword> full log\n ay head <keyword> first N lines\n ay hist [-n 6] [--all] [--json] past agent conversations (claude/codex\n transcripts, incl. exited sessions);\n this cwd unless --all\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 notify watch --unread get notified when sub-agents finish/stuck/crash (writes to inbox)\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 gc reclaim old-version binary cache dirs + stale session logs\n ay dsh-legacy [args...] launch the DeepSeek Harness terminal client (dsh-tui)\n" + wsLines + "\nRemote:\n" + setupLine + " ay share [local|lan|tailscale|webrtc] share this machine: one URL for web console + CLI\n ay connect <share-url> [alias] save another machine's share URL as a remote\n" + shareAliasNote + " 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|...> [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");
1856
+ process.stdout.write(agentSection + "ay - agent-yes CLI\n\nManagement:\n ay ls [keyword] list running agents\n ay ps [keyword] per-agent CPU/RSS, rolled up over each\n agent's whole process tree, + box vitals\n ay tail [-f] [-n N] <keyword> last N lines (96), -f to follow\n ay tail <keyword> --until TEXT block until TEXT is printed, then exit 0\n [--timeout 10m] [-q] [--regex] (1 = agent exited without it, 2 = no match,\n [--fail-on TEXT] [--count N] 3 = --fail-on hit first)\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 hist [-n 6] [--all] [--json] past agent conversations (claude/codex\n transcripts, incl. exited sessions);\n this cwd unless --all\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 notify watch --unread get notified when sub-agents finish/stuck/crash (writes to inbox)\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 gc reclaim old-version binary cache dirs + stale session logs\n ay dsh-legacy [args...] launch the DeepSeek Harness terminal client (dsh-tui)\n" + wsLines + "\nRemote:\n" + setupLine + " ay share [local|lan|tailscale|webrtc] share this machine: one URL for web console + CLI\n ay connect <share-url> [alias] save another machine's share URL as a remote\n" + shareAliasNote + " 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|...> [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");
1859
1857
  return 0;
1860
1858
  }
1861
1859
  function matchKeyword(record, keyword) {
@@ -4895,7 +4893,7 @@ async function cmdAttach(rest) {
4895
4893
  const winsizeDir = path.join(ayHome, "winsize");
4896
4894
  await mkdir(winsizeDir, { recursive: true });
4897
4895
  const winsizePath = path.join(winsizeDir, String(record.pid));
4898
- const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-D3fnTIE6.js");
4896
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-Q4dnZc5l.js");
4899
4897
  const daemonBase = await resolveDaemonHttpBase().catch(() => null);
4900
4898
  const daemonToken = daemonBase ? await loadTokenReadOnly().catch(() => null) ?? "" : "";
4901
4899
  const capViewer = `attach:${process.pid}`;
@@ -5622,7 +5620,7 @@ async function cmdNotify(rest) {
5622
5620
  }
5623
5621
  const ensure = async () => {
5624
5622
  if (!argv["ensure-daemon"]) return;
5625
- const { ensureDaemon } = await import("./notifyDaemon-MtH3_Wps.js");
5623
+ const { ensureDaemon } = await import("./notifyDaemon-EEbnpoYp.js");
5626
5624
  await ensureDaemon().catch(() => null);
5627
5625
  };
5628
5626
  await heartbeatWatcher(parent, selfStartedAt);
@@ -5696,7 +5694,7 @@ async function cmdNotifyCursor(args) {
5696
5694
  }
5697
5695
  async function cmdNotifyd(rest) {
5698
5696
  const sub = rest[0] ?? "status";
5699
- const daemon = await import("./notifyDaemon-MtH3_Wps.js");
5697
+ const daemon = await import("./notifyDaemon-EEbnpoYp.js");
5700
5698
  switch (sub) {
5701
5699
  case "run": return daemon.runDaemon();
5702
5700
  case "once": return daemon.runDaemon({ once: true });
@@ -5723,4 +5721,4 @@ async function cmdNotifyd(rest) {
5723
5721
 
5724
5722
  //#endregion
5725
5723
  export { sendPayloadCapError as $, isUnknownManagerToken as A, readLogForRender as B, finalizedLines as C, isPidAlive as D, isExitRequest as E, listRecords as F, renderLogTailLines as G, readPtysize as H, matchKeyword as I, resolveOne as J, renderRawLog as K, menuSelectKeys as L, isUserTyping as M, lastReadAt as N, isSlashCommand as O, lastStdinAt as P, runSubcommand as Q, probeStdinReachable as R, extractTaskCounts as S, isBareManagerInvocation as T, recentMessageEdges as U, readNotes as V, recentReadEdges as W, resolveResumeArgs as X, resolveReadWindow as Y, restartHintLines as Z, envelopeAttribution as _, SEND_BODY_MAX_CHARS as a, writeKeysPaced as at, extractMenu as b, backoffWhileTyping as c, framePaste as ct, cmdHelp as d, buildAgentForest as dt, snapshotStatus as et, confirmStdinUnreachable as f, flattenForest as ft, deriveLiveStatus as g, deriveLiveState as h, READ_WINDOW_MS as i, waitForLogQuiet as it, isUnreachableWriteErrno as j, isSubcommand as k, buildEnvelope as l, shouldFramePaste as lt, cursorAbs as m, MAX_RENDER_BYTES as n, stopTipForCli as nt, SEND_EXIT_UNREACHABLE as o, writeToIpc as ot, controlCodeFromName as p, renderRawLogLines as q, READ_PAGE_DEFAULT as r, submitAndConfirm as rt, TYPING_WINDOW_MS as s, withIpcLock as st, GRACEFUL_EXIT_COMMANDS as t, stdinActivityPath as tt, cliDefaults as u, TYPING_BADGE as ut, envelopeCostFor as v, isAgentStuck as w, extractNeedsInput as x, extractBadges as y, readAgentPtysize as z };
5726
- //# sourceMappingURL=subcommands-BRTr1OLx.js.map
5724
+ //# sourceMappingURL=subcommands-CUWPMI_r.js.map
@@ -5,7 +5,7 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import { $ as sendPayloadCapError, A as isUnknownManagerToken, B as readLogForRender, C as finalizedLines, D as isPidAlive, E as isExitRequest, F as listRecords, G as renderLogTailLines, H as readPtysize, I as matchKeyword, J as resolveOne, K as renderRawLog, L as menuSelectKeys, M as isUserTyping, N as lastReadAt, O as isSlashCommand, P as lastStdinAt, Q as runSubcommand, R as probeStdinReachable, S as extractTaskCounts, T as isBareManagerInvocation, U as recentMessageEdges, V as readNotes, W as recentReadEdges, X as resolveResumeArgs, Y as resolveReadWindow, Z as restartHintLines, _ as envelopeAttribution, a as SEND_BODY_MAX_CHARS, at as writeKeysPaced, b as extractMenu, c as backoffWhileTyping, d as cmdHelp, et as snapshotStatus, f as confirmStdinUnreachable, g as deriveLiveStatus, h as deriveLiveState, i as READ_WINDOW_MS, it as waitForLogQuiet, j as isUnreachableWriteErrno, k as isSubcommand, l as buildEnvelope, m as cursorAbs, n as MAX_RENDER_BYTES, nt as stopTipForCli, o as SEND_EXIT_UNREACHABLE, ot as writeToIpc, p as controlCodeFromName, q as renderRawLogLines, r as READ_PAGE_DEFAULT, rt as submitAndConfirm, s as TYPING_WINDOW_MS, t as GRACEFUL_EXIT_COMMANDS, tt as stdinActivityPath, u as cliDefaults, v as envelopeCostFor, w as isAgentStuck, x as extractNeedsInput, y as extractBadges, z as readAgentPtysize } from "./subcommands-BRTr1OLx.js";
8
+ import { $ as sendPayloadCapError, A as isUnknownManagerToken, B as readLogForRender, C as finalizedLines, D as isPidAlive, E as isExitRequest, F as listRecords, G as renderLogTailLines, H as readPtysize, I as matchKeyword, J as resolveOne, K as renderRawLog, L as menuSelectKeys, M as isUserTyping, N as lastReadAt, O as isSlashCommand, P as lastStdinAt, Q as runSubcommand, R as probeStdinReachable, S as extractTaskCounts, T as isBareManagerInvocation, U as recentMessageEdges, V as readNotes, W as recentReadEdges, X as resolveResumeArgs, Y as resolveReadWindow, Z as restartHintLines, _ as envelopeAttribution, a as SEND_BODY_MAX_CHARS, at as writeKeysPaced, b as extractMenu, c as backoffWhileTyping, d as cmdHelp, et as snapshotStatus, f as confirmStdinUnreachable, g as deriveLiveStatus, h as deriveLiveState, i as READ_WINDOW_MS, it as waitForLogQuiet, j as isUnreachableWriteErrno, k as isSubcommand, l as buildEnvelope, m as cursorAbs, n as MAX_RENDER_BYTES, nt as stopTipForCli, o as SEND_EXIT_UNREACHABLE, ot as writeToIpc, p as controlCodeFromName, q as renderRawLogLines, r as READ_PAGE_DEFAULT, rt as submitAndConfirm, s as TYPING_WINDOW_MS, t as GRACEFUL_EXIT_COMMANDS, tt as stdinActivityPath, u as cliDefaults, v as envelopeCostFor, w as isAgentStuck, x as extractNeedsInput, y as extractBadges, z as readAgentPtysize } from "./subcommands-CUWPMI_r.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-DFRyWNMs.js";
11
11
  import "./remotes-DrYe_nfw.js";
@@ -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-D3fnTIE6.js");
101
+ const { mintScopedTermToken } = await import("./serve-Q4dnZc5l.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-BKjO2ciy.js.map
138
+ //# sourceMappingURL=terminal-CUn1_oPd.js.map
@@ -1,4 +1,4 @@
1
- import { o as findTrayLauncher } from "./rustBinary-BQOPGchd.js";
1
+ import { o as findTrayLauncher } from "./rustBinary--pof-MTj.js";
2
2
  import { t as agentYesHome } from "./agentYesHome-BNtn19J4.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-BfzVSRKH.js.map
100
+ //# sourceMappingURL=trayApp-BHwAJFzl.js.map
@@ -0,0 +1,5 @@
1
+ import "./versionChecker-DOgDaagD.js";
2
+ import "./rustBinary--pof-MTj.js";
3
+ import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-BHwAJFzl.js";
4
+
5
+ export { cmdTray };
@@ -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 { i as getInstalledPackage } from "./versionChecker-Cs2CnqlE.js";
3
+ import { i as getInstalledPackage } from "./versionChecker-DOgDaagD.js";
4
4
  import { t as agentYesHome } from "./agentYesHome-BNtn19J4.js";
5
5
  import { u as removeControlCharacters } from "./todoAutomation-CbVVS4re.js";
6
6
  import { i as shouldUseLock, r as releaseLock, t as acquireLock } from "./runningLock-BOIPD_Vs.js";
@@ -2086,7 +2086,7 @@ async function agentYes({ cli, cliArgs = [], skipPermissions = false, prompt, ro
2086
2086
  }, 100);
2087
2087
  const cleanupHeartbeat = () => clearInterval(heartbeatInterval);
2088
2088
  shell.onExit(cleanupHeartbeat);
2089
- const { startParentPingLoop } = await import("./parentPingLoop-DPyNCqSp.js");
2089
+ const { startParentPingLoop } = await import("./parentPingLoop-C1XXpKK7.js");
2090
2090
  const parentPingLoop = startParentPingLoop({
2091
2091
  parentPid,
2092
2092
  selfWrapperPid: process.pid,
@@ -2349,4 +2349,4 @@ function sleep(ms) {
2349
2349
 
2350
2350
  //#endregion
2351
2351
  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 };
2352
- //# sourceMappingURL=ts-n2-IgXOf.js.map
2352
+ //# sourceMappingURL=ts-oIxnyQbE.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.299.0-beta.761.1";
10
+ var version = "1.299.0";
11
11
 
12
12
  //#endregion
13
13
  //#region ts/versionChecker.ts
@@ -285,4 +285,4 @@ async function displayVersion() {
285
285
 
286
286
  //#endregion
287
287
  export { versionString as a, getInstalledPackage as i, compareVersions as n, displayVersion as r, checkAndAutoUpdate as t };
288
- //# sourceMappingURL=versionChecker-Cs2CnqlE.js.map
288
+ //# sourceMappingURL=versionChecker-DOgDaagD.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-D3fnTIE6.js");
31
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-Q4dnZc5l.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-D3fnTIE6.js");
189
+ const { mintScopedTermToken } = await import("./serve-Q4dnZc5l.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-DIYlNU6r.js.map
205
+ //# sourceMappingURL=widget-CuagzQwz.js.map
@@ -1,4 +1,4 @@
1
- import { F as listRecords } from "./subcommands-BRTr1OLx.js";
1
+ import { F as listRecords } from "./subcommands-CUWPMI_r.js";
2
2
  import { a as getProvisionRoot } from "./workspaceConfig-DTvPtr5j.js";
3
3
  import { existsSync } from "fs";
4
4
  import { lstat, opendir } from "fs/promises";
@@ -424,4 +424,4 @@ async function cmdWs(args) {
424
424
 
425
425
  //#endregion
426
426
  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 };
427
- //# sourceMappingURL=ws-DmOf2X43.js.map
427
+ //# sourceMappingURL=ws-DcJBGzQP.js.map
@@ -5,10 +5,10 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import "./subcommands-BRTr1OLx.js";
8
+ import "./subcommands-CUWPMI_r.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-DFRyWNMs.js";
11
11
  import "./remotes-DrYe_nfw.js";
12
- 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-DmOf2X43.js";
12
+ 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-DcJBGzQP.js";
13
13
 
14
14
  export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, walkWorkspaces, workspaceStatus };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-yes",
3
- "version": "1.299.0-beta.761.1",
3
+ "version": "1.299.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",
@@ -200,19 +200,14 @@ describe("subcommands.isSubcommand", () => {
200
200
  expect(isSubcommand("send", false)).toBe(true);
201
201
  });
202
202
 
203
- it("gates the prompt-word verbs so `cy read …` / `cy connect …` are prompt text", async () => {
203
+ it("gates `share` / `connect` on the manager entry — they are prompt words", async () => {
204
204
  const { isSubcommand } = await loadModule();
205
- // `read` / `share` / `connect` are ordinary English verbs: `cy read ts/cli.ts
206
- // and explain it` and `cy connect the frontend to the API` must reach claude.
207
- // The commands live on the manager entry (`ay read`, `ay share`, `ay connect`).
208
- for (const sub of ["read", "share", "connect"]) {
205
+ // `cy connect the frontend to the API` / `cy share this design` must reach
206
+ // the agent; the commands live on `ay share` / `ay connect`.
207
+ for (const sub of ["share", "connect"]) {
209
208
  expect(isSubcommand(sub, true)).toBe(true);
210
209
  expect(isSubcommand(sub, false)).toBe(false);
211
210
  }
212
- // Their siblings are not prompt openers, so they stay universal.
213
- expect(isSubcommand("cat", false)).toBe(true);
214
- expect(isSubcommand("tail", false)).toBe(true);
215
- expect(isSubcommand("head", false)).toBe(true);
216
211
  });
217
212
  });
218
213
 
@@ -310,18 +305,13 @@ describe("subcommands.cmdHelp", () => {
310
305
  expect(await capture()).toContain("ay notify watch --unread"); // Management entry
311
306
  });
312
307
 
313
- it("labels the ay-only lines for cli-bound aliases", async () => {
314
- // `read` / `share` / `connect` stay listed (pagination flags are worth
315
- // knowing; `ay share` is how the console is reached at all) but must not read
316
- // as invokable through `cy`, where those words are prompt text.
308
+ it("labels `ay share` / `ay connect` as ay-only for cli-bound aliases", async () => {
309
+ // Both lines stay listed (sharing is how the console is reached at all) but
310
+ // must not read as invokable through `cy`, where those words are prompt text.
317
311
  const alias = await capture(false);
318
- expect(alias).toContain("ay read <keyword>");
319
- expect(alias).toContain("`cy read …` is a prompt");
320
312
  expect(alias).toContain("ay share");
321
313
  expect(alias).toContain("`cy share`/`cy connect` are prompts");
322
- const manager = await capture(true);
323
- expect(manager).not.toContain("is a prompt");
324
- expect(manager).not.toContain("are prompts");
314
+ expect(await capture(true)).not.toContain("are prompts");
325
315
  });
326
316
 
327
317
  it("stays plain for a human shell (no AGENT_YES_PID)", async () => {
package/ts/subcommands.ts CHANGED
@@ -627,6 +627,7 @@ const SUBCOMMANDS = new Set([
627
627
  "result",
628
628
  "notify",
629
629
  "notifyd",
630
+ "read",
630
631
  "cat",
631
632
  "tail",
632
633
  "head",
@@ -665,21 +666,15 @@ const SUBCOMMANDS = new Set([
665
666
  // Subcommands recognised ONLY on the GENERIC manager entry (`ay` / `agent-yes`).
666
667
  // A cli-bound alias like `cy` (= claude-yes = "agent-yes claude") must NOT treat
667
668
  // these as subcommands — it falls straight through to running the agent with that
668
- // text. Two reasons a name lands here:
669
- // - host management: `cy setup …` / `cy ws …` should prompt claude, not share
670
- // the machine over WebRTC (#67).
671
- // - it is an ordinary English verb people start prompts with: `cy read ts/cli.ts
672
- // and explain it` / `cy connect the frontend to the API` must reach claude.
673
- // The commands stay reachable on the manager entry (`ay read`, `ay share`,
674
- // `ay connect`); `cy cat` / `cy tail` / `cy head` / `cy ls` are unchanged —
675
- // nobody opens a prompt with those.
676
- // Kept one name per line so both runtimes' copies stay easy to keep in sync.
669
+ // text. Two reasons a name lands here: it manages the host, or it is an ordinary
670
+ // English verb people open prompts with (`cy connect the frontend to the API`
671
+ // must reach claude). Kept one per line so the two runtimes' copies of this list
672
+ // stay easy to keep in sync.
677
673
  const MANAGER_SUBCOMMANDS = new Set([
678
674
  // manage this host
679
675
  "setup",
680
676
  "ws",
681
- // prompt-word verbs
682
- "read",
677
+ // prompt-word verbs: reachable as `ay share` / `ay connect`
683
678
  "share",
684
679
  "connect",
685
680
  ]);
@@ -911,9 +906,8 @@ export function isUnreachableWriteErrno(code: string | undefined): boolean {
911
906
  /**
912
907
  * Whether `name` is a subcommand. `managerCommands` (default true, for the
913
908
  * generic `ay`/`agent-yes` entry) additionally admits manager-only commands
914
- * (`setup`, `ws`, `read`); pass false for a cli-bound alias (cy/claude-yes/…) so
915
- * those names fall through to running the agent instead — `cy read <file>` is a
916
- * prompt, `ay read <keyword>` is the log pager.
909
+ * like `setup`; pass false for a cli-bound alias (cy/claude-yes/…) so those
910
+ * names fall through to running the agent instead.
917
911
  */
918
912
  export function isSubcommand(name: string | undefined, managerCommands = true): boolean {
919
913
  if (!name) return false;
@@ -997,10 +991,9 @@ async function writeStdoutFlushed(text: string): Promise<void> {
997
991
  */
998
992
  export async function runSubcommand(argv: string[]): Promise<number | null> {
999
993
  const sub = argv[2];
1000
- // Manager-only subcommands (setup / ws / read) aren't subcommands for a
1001
- // cli-bound alias like `cy` — they fall through to running the agent with that
1002
- // word as prompt text. Computed once from argv so it holds regardless of
1003
- // caller, and reused to hide manager-only help.
994
+ // Manager-only subcommands (setup) aren't subcommands for a cli-bound alias
995
+ // like `cy` — they fall through to running the agent. Computed once from argv
996
+ // so it holds regardless of caller, and reused to hide manager-only help.
1004
997
  const managerCommands = !invokedCliName(argv);
1005
998
  if (!isSubcommand(sub, managerCommands)) return null;
1006
999
 
@@ -1277,15 +1270,10 @@ export async function cmdHelp(managerCommands = true): Promise<number> {
1277
1270
  ? ` ay ws ls [--status] list <owner>/<repo>/tree/<branch> workspaces\n` +
1278
1271
  ` ay ws new <owner>/<repo>[@branch] clone/refresh a workspace (ay ws help for more)\n`
1279
1272
  : ``;
1280
- // `read` is manager-entry-only too, but for the opposite reason: it's a word
1281
- // people open prompts with, so `cy read …` runs the agent. Unlike setup/ws the
1282
- // line stays visible (pagination is worth knowing about) — just labelled, so
1283
- // nobody types `cy read <pid>` and gets a claude session instead of a log.
1284
- const readAliasNote = managerCommands
1285
- ? ``
1286
- : ` (\`ay read\` only — \`cy read …\` is a prompt)\n`;
1287
- // Same for `share` / `connect`: prompt words, but `ay share` is how the web
1288
- // console is reached at all, so label the lines rather than hide the feature.
1273
+ // `share` / `connect` are manager-entry-only for the other reason in
1274
+ // MANAGER_SUBCOMMANDS: they are prompt words, so `cy share …` runs the agent.
1275
+ // Both lines stay visible (`ay share` is how you reach the console at all) —
1276
+ // just labelled, so nobody types `cy connect <url>` and starts a session.
1289
1277
  const shareAliasNote = managerCommands
1290
1278
  ? ``
1291
1279
  : ` (\`ay\` only — \`cy share\`/\`cy connect\` are prompts)\n`;
@@ -1307,7 +1295,6 @@ export async function cmdHelp(managerCommands = true): Promise<number> {
1307
1295
  ` [--fail-on TEXT] [--count N] 3 = --fail-on hit first)\n` +
1308
1296
  ` ay read <keyword> [page opts] paginate: --last/--head N, --range A:B,\n` +
1309
1297
  ` --before-line L [--limit N]\n` +
1310
- readAliasNote +
1311
1298
  ` ay cat <keyword> full log\n` +
1312
1299
  ` ay head <keyword> first N lines\n` +
1313
1300
  ` ay hist [-n 6] [--all] [--json] past agent conversations (claude/codex\n` +
@@ -1,5 +0,0 @@
1
- import "./versionChecker-Cs2CnqlE.js";
2
- import "./rustBinary-BQOPGchd.js";
3
- import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-BfzVSRKH.js";
4
-
5
- export { cmdTray };