agent-yes 1.270.0 → 1.270.1

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 (33) hide show
  1. package/dist/{SUPPORTED_CLIS-CKSGAXU2.js → SUPPORTED_CLIS-CgEHfg6k.js} +3 -3
  2. package/dist/{SUPPORTED_CLIS-K8SJONKh.js → SUPPORTED_CLIS-DAFB-6GC.js} +2 -2
  3. package/dist/{agentShare-Bd_izceZ.js → agentShare-2HyVIGun.js} +2 -2
  4. package/dist/{callback-BzjvgSKW.js → callback-Ceiao4dV.js} +3 -3
  5. package/dist/{callback-CyVGDM79.js → callback-DVCbzswC.js} +2 -2
  6. package/dist/cli.js +5 -5
  7. package/dist/{cmdPs-DsQ4S4xC.js → cmdPs-guXwE1CD.js} +2 -2
  8. package/dist/index.js +2 -2
  9. package/dist/{notifyDaemon-DNiNjH0X.js → notifyDaemon-CFO6_oZh.js} +2 -2
  10. package/dist/{parentPingLoop-Rs-zWOGx.js → parentPingLoop-BH4qu3JD.js} +2 -2
  11. package/dist/{rustBinary-CMLEDNy3.js → rustBinary-DzkW66Lm.js} +2 -2
  12. package/dist/{schedule-BcIE0U8C.js → schedule-CJj1MU1L.js} +4 -4
  13. package/dist/{serve-DNBCDODA.js → serve-DjXJihRj.js} +17 -17
  14. package/dist/{setup-CWA2Mx20.js → setup-BvzHgiZZ.js} +2 -2
  15. package/dist/{subcommands-C3uTfRW6.js → subcommands-B3yYhAG5.js} +14 -14
  16. package/dist/{subcommands-Bere7-T-.js → subcommands-DDJ9sWow.js} +1 -1
  17. package/dist/{terminal-34MSuLSw.js → terminal-BW1__Nur.js} +2 -2
  18. package/dist/{trayApp-DkH-AcmQ.js → trayApp-BfkcZXlu.js} +2 -2
  19. package/dist/trayApp-BhDs3NHt.js +5 -0
  20. package/dist/{ts-BC_vHtnq.js → ts-Q3AxCJqf.js} +3 -3
  21. package/dist/{versionChecker-Coz0GEUH.js → versionChecker-CtFlXAFh.js} +2 -2
  22. package/dist/{widget-DQkXJjpQ.js → widget-Bj1cFjqo.js} +3 -3
  23. package/dist/{ws-CRJGGKkK.js → ws-DwgqQn6O.js} +2 -2
  24. package/dist/{ws-Cfcw-Cgl.js → ws-sD4KNCh_.js} +2 -2
  25. package/lab/ui/lab/build.ts +12 -0
  26. package/lab/ui/lab/index.md +1 -1
  27. package/lab/ui/lab/posts/2026-06-15-e2ee-share-links.html +0 -9
  28. package/lab/ui/lab/posts/2026-07-22-ay-callback.html +0 -9
  29. package/lab/ui/lab/posts/2026-08-11-an-address-space-for-agents.md +3 -2
  30. package/lab/ui/lab/posts/2026-08-11-no-daemon-owns-your-agents.md +10 -5
  31. package/lab/ui/lab/posts/2026-08-11-the-terminal-is-the-api.md +5 -2
  32. package/package.json +1 -1
  33. package/dist/trayApp-4ltzmET7.js +0 -5
@@ -1,12 +1,12 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Coz0GEUH.js";
3
- import "./ts-BC_vHtnq.js";
2
+ import "./versionChecker-CtFlXAFh.js";
3
+ import "./ts-Q3AxCJqf.js";
4
4
  import "./todoAutomation-BETGOik9.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
9
  import "./todoStore-Wk8U4zJ8.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-K8SJONKh.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DAFB-6GC.js";
11
11
 
12
12
  export { SUPPORTED_CLIS };
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-BC_vHtnq.js";
1
+ import { t as CLIS_CONFIG } from "./ts-Q3AxCJqf.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-K8SJONKh.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-DAFB-6GC.js.map
@@ -3,7 +3,7 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-OLfcNxiv.js";
5
5
  import "./configShared-DYxlvrH0.js";
6
- import { B as resolveOne } from "./subcommands-C3uTfRW6.js";
6
+ import { B as resolveOne } from "./subcommands-B3yYhAG5.js";
7
7
  import "./notifyStore-Dus2D1XA.js";
8
8
  import "./webrtcLink-B72AQ2eb.js";
9
9
  import "./remotes-IzQHupeo.js";
@@ -230,4 +230,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
230
230
 
231
231
  //#endregion
232
232
  export { createScopedShare, listShares, revokeAllShares, revokeShare };
233
- //# sourceMappingURL=agentShare-Bd_izceZ.js.map
233
+ //# sourceMappingURL=agentShare-2HyVIGun.js.map
@@ -1,5 +1,5 @@
1
1
  import { t as agentYesHome } from "./agentYesHome-CtmsY6I-.js";
2
- import { B as resolveOne } from "./subcommands-C3uTfRW6.js";
2
+ import { B as resolveOne } from "./subcommands-B3yYhAG5.js";
3
3
  import { a as mintCapability, o as parseExpires } from "./callbackCore-Bbe7rpN2.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-DNBCDODA.js");
75
+ const { resolveLocalServeUrl } = await import("./serve-DjXJihRj.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-BzjvgSKW.js.map
190
+ //# sourceMappingURL=callback-Ceiao4dV.js.map
@@ -3,11 +3,11 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-OLfcNxiv.js";
5
5
  import "./configShared-DYxlvrH0.js";
6
- import "./subcommands-C3uTfRW6.js";
6
+ import "./subcommands-B3yYhAG5.js";
7
7
  import "./notifyStore-Dus2D1XA.js";
8
8
  import "./webrtcLink-B72AQ2eb.js";
9
9
  import "./remotes-IzQHupeo.js";
10
10
  import "./callbackCore-Bbe7rpN2.js";
11
- import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-BzjvgSKW.js";
11
+ import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-Ceiao4dV.js";
12
12
 
13
13
  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-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-Coz0GEUH.js";
5
- import { r as getRustBinary } from "./rustBinary-CMLEDNy3.js";
4
+ import { i as versionString, n as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-CtFlXAFh.js";
5
+ import { r as getRustBinary } from "./rustBinary-DzkW66Lm.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-Bere7-T-.js");
298
+ const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-DDJ9sWow.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-CKSGAXU2.js");
312
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-CgEHfg6k.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-CKSGAXU2.js");
363
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-CgEHfg6k.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}`);
@@ -3,7 +3,7 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-OLfcNxiv.js";
5
5
  import "./configShared-DYxlvrH0.js";
6
- import { O as listRecords, d as deriveLiveState, et as buildAgentForest, tt as flattenForest } from "./subcommands-C3uTfRW6.js";
6
+ import { O as listRecords, d as deriveLiveState, et as buildAgentForest, tt as flattenForest } from "./subcommands-B3yYhAG5.js";
7
7
  import "./notifyStore-Dus2D1XA.js";
8
8
  import "./webrtcLink-B72AQ2eb.js";
9
9
  import "./remotes-IzQHupeo.js";
@@ -574,4 +574,4 @@ function readPpidSync(pid) {
574
574
 
575
575
  //#endregion
576
576
  export { cmdPs };
577
- //# sourceMappingURL=cmdPs-DsQ4S4xC.js.map
577
+ //# sourceMappingURL=cmdPs-guXwE1CD.js.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Coz0GEUH.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-BC_vHtnq.js";
2
+ import "./versionChecker-CtFlXAFh.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-Q3AxCJqf.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-BETGOik9.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-OLfcNxiv.js";
5
5
  import "./configShared-DYxlvrH0.js";
6
- import { L as renderLogTailLines, O as listRecords, d as deriveLiveState, x as isPidAlive } from "./subcommands-C3uTfRW6.js";
6
+ import { L as renderLogTailLines, O as listRecords, d as deriveLiveState, x as isPidAlive } from "./subcommands-B3yYhAG5.js";
7
7
  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-Dus2D1XA.js";
8
8
  import "./webrtcLink-B72AQ2eb.js";
9
9
  import "./remotes-IzQHupeo.js";
@@ -863,4 +863,4 @@ async function ensureDaemon() {
863
863
 
864
864
  //#endregion
865
865
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
866
- //# sourceMappingURL=notifyDaemon-DNiNjH0X.js.map
866
+ //# sourceMappingURL=notifyDaemon-CFO6_oZh.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-Bere7-T-.js");
341
+ const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-DDJ9sWow.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-Rs-zWOGx.js.map
469
+ //# sourceMappingURL=parentPingLoop-BH4qu3JD.js.map
@@ -1,4 +1,4 @@
1
- import { r as getInstalledPackage } from "./versionChecker-Coz0GEUH.js";
1
+ import { r as getInstalledPackage } from "./versionChecker-CtFlXAFh.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-CMLEDNy3.js.map
246
+ //# sourceMappingURL=rustBinary-DzkW66Lm.js.map
@@ -1,13 +1,13 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-Coz0GEUH.js";
3
- import "./ts-BC_vHtnq.js";
2
+ import "./versionChecker-CtFlXAFh.js";
3
+ import "./ts-Q3AxCJqf.js";
4
4
  import "./todoAutomation-BETGOik9.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
9
  import "./todoStore-Wk8U4zJ8.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-K8SJONKh.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DAFB-6GC.js";
11
11
  import { f as resolveSpawnCwd } from "./workspaceConfig-EK7XNsgR.js";
12
12
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-CKc1BN5J.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-BcIE0U8C.js.map
157
+ //# sourceMappingURL=schedule-CJj1MU1L.js.map
@@ -1,7 +1,7 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import { r as getInstalledPackage } from "./versionChecker-Coz0GEUH.js";
3
- import { t as findSpawnHiddenLauncher } from "./rustBinary-CMLEDNy3.js";
4
- import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-BC_vHtnq.js";
2
+ import { r as getInstalledPackage } from "./versionChecker-CtFlXAFh.js";
3
+ import { t as findSpawnHiddenLauncher } from "./rustBinary-DzkW66Lm.js";
4
+ import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-Q3AxCJqf.js";
5
5
  import { t as agentYesHome$1 } from "./agentYesHome-CtmsY6I-.js";
6
6
  import { u as removeControlCharacters } from "./todoAutomation-BETGOik9.js";
7
7
  import "./JsonlStore-CPGIR0Wy.js";
@@ -12,18 +12,18 @@ import { t as pgidForWrapper } from "./reaper-C4BvNylH.js";
12
12
  import "./todoStore-Wk8U4zJ8.js";
13
13
  import "./e2e-OLfcNxiv.js";
14
14
  import "./configShared-DYxlvrH0.js";
15
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-K8SJONKh.js";
16
- import { $ as TYPING_BADGE, B as resolveOne, F as recentMessageEdges, G as snapshotStatus, I as recentReadEdges, L as renderLogTailLines, M as readLogForRender, N as readNotes, O as listRecords, P as readPtysize, Q as withIpcLock, R as renderRawLog, T as isUserTyping, Z as writeToIpc, f as deriveLiveStatus, g as extractTaskCounts, h as extractNeedsInput, l as controlCodeFromName, p as extractBadges, z as renderRawLogLines } from "./subcommands-C3uTfRW6.js";
15
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DAFB-6GC.js";
16
+ import { $ as TYPING_BADGE, B as resolveOne, F as recentMessageEdges, G as snapshotStatus, I as recentReadEdges, L as renderLogTailLines, M as readLogForRender, N as readNotes, O as listRecords, P as readPtysize, Q as withIpcLock, R as renderRawLog, T as isUserTyping, Z as writeToIpc, f as deriveLiveStatus, g as extractTaskCounts, h as extractNeedsInput, l as controlCodeFromName, p as extractBadges, z as renderRawLogLines } from "./subcommands-B3yYhAG5.js";
17
17
  import { c as isTransientLockMkdirError } from "./notifyStore-Dus2D1XA.js";
18
18
  import "./webrtcLink-B72AQ2eb.js";
19
19
  import "./remotes-IzQHupeo.js";
20
20
  import { i as frameVisitorMessage, s as verifyCapability, t as MAX_CALLBACK_MSG_BYTES } from "./callbackCore-Bbe7rpN2.js";
21
- import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-BzjvgSKW.js";
21
+ import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-Ceiao4dV.js";
22
22
  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-EK7XNsgR.js";
23
23
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-CKc1BN5J.js";
24
- import { i as importProvisionModule } from "./ws-Cfcw-Cgl.js";
24
+ import { i as importProvisionModule } from "./ws-sD4KNCh_.js";
25
25
  import { r as spawnRejectionReason } from "./spawnGate-CS3oFdJ9.js";
26
- import { i as launchTray } from "./trayApp-DkH-AcmQ.js";
26
+ import { i as launchTray } from "./trayApp-BfkcZXlu.js";
27
27
  import yargs from "yargs";
28
28
  import { appendFile, mkdir, open, readFile, readdir, rename, rm, stat, unlink, writeFile } from "fs/promises";
29
29
  import { arch, cpus, freemem, homedir, hostname, loadavg, platform, totalmem, uptime, userInfo } from "os";
@@ -2436,7 +2436,7 @@ Options:
2436
2436
  }
2437
2437
  });
2438
2438
  if (req.method === "GET" && p === "/api/ws") {
2439
- const ws = await import("./ws-CRJGGKkK.js");
2439
+ const ws = await import("./ws-DwgqQn6O.js");
2440
2440
  try {
2441
2441
  await ws.loadProvision();
2442
2442
  } catch (e) {
@@ -2456,7 +2456,7 @@ Options:
2456
2456
  if (req.method === "GET" && p === "/api/ws/status") {
2457
2457
  const dirRaw = url.searchParams.get("path");
2458
2458
  if (!dirRaw) return new Response("missing ?path=<workspace dir>", { status: 400 });
2459
- const ws = await import("./ws-CRJGGKkK.js");
2459
+ const ws = await import("./ws-DwgqQn6O.js");
2460
2460
  let prov;
2461
2461
  try {
2462
2462
  prov = await ws.loadProvision();
@@ -2478,7 +2478,7 @@ Options:
2478
2478
  }
2479
2479
  }
2480
2480
  if (req.method === "GET" && p === "/api/ws/repos") {
2481
- const ws = await import("./ws-CRJGGKkK.js");
2481
+ const ws = await import("./ws-DwgqQn6O.js");
2482
2482
  try {
2483
2483
  await ws.loadProvision();
2484
2484
  } catch (e) {
@@ -2559,7 +2559,7 @@ Options:
2559
2559
  const m = /^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/.exec(repoParam);
2560
2560
  if (!m || m[1] === "." || m[1] === ".." || m[2] === "." || m[2] === "..") return new Response("missing/invalid ?repo=<owner>/<repo>", { status: 400 });
2561
2561
  const [, owner, repo] = m;
2562
- const ws = await import("./ws-CRJGGKkK.js");
2562
+ const ws = await import("./ws-DwgqQn6O.js");
2563
2563
  let prov;
2564
2564
  try {
2565
2565
  prov = await ws.loadProvision();
@@ -3470,7 +3470,7 @@ Options:
3470
3470
  const perm = body.perm ?? "r";
3471
3471
  if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
3472
3472
  try {
3473
- const { createScopedShare } = await import("./agentShare-Bd_izceZ.js");
3473
+ const { createScopedShare } = await import("./agentShare-2HyVIGun.js");
3474
3474
  const share = await createScopedShare({
3475
3475
  agent: body.agent,
3476
3476
  perm,
@@ -3485,12 +3485,12 @@ Options:
3485
3485
  }
3486
3486
  }
3487
3487
  if (req.method === "GET" && p === "/api/shares") {
3488
- const { listShares } = await import("./agentShare-Bd_izceZ.js");
3488
+ const { listShares } = await import("./agentShare-2HyVIGun.js");
3489
3489
  return Response.json(listShares());
3490
3490
  }
3491
3491
  const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
3492
3492
  if (req.method === "DELETE" && revokeM) {
3493
- const { revokeShare } = await import("./agentShare-Bd_izceZ.js");
3493
+ const { revokeShare } = await import("./agentShare-2HyVIGun.js");
3494
3494
  const ok = revokeShare(decodeURIComponent(revokeM[1]));
3495
3495
  return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
3496
3496
  }
@@ -3795,7 +3795,7 @@ Options:
3795
3795
  const shutdown = (resolve) => {
3796
3796
  if (heartbeat) clearInterval(heartbeat);
3797
3797
  closeShare?.();
3798
- import("./agentShare-Bd_izceZ.js").then((m) => m.revokeAllShares()).catch(() => {});
3798
+ import("./agentShare-2HyVIGun.js").then((m) => m.revokeAllShares()).catch(() => {});
3799
3799
  server?.stop();
3800
3800
  Promise.resolve(releaseHostLock?.()).catch(() => {}).then(resolve);
3801
3801
  };
@@ -3808,4 +3808,4 @@ Options:
3808
3808
 
3809
3809
  //#endregion
3810
3810
  export { cmdServe, loadTokenReadOnly, mintScopedTermToken, resolveDaemonHttpBase, resolveLocalServeUrl };
3811
- //# sourceMappingURL=serve-DNBCDODA.js.map
3811
+ //# sourceMappingURL=serve-DjXJihRj.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-DNBCDODA.js");
43
+ const { cmdServe } = await import("./serve-DjXJihRj.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-CWA2Mx20.js.map
53
+ //# sourceMappingURL=setup-BvzHgiZZ.js.map
@@ -907,7 +907,7 @@ async function runSubcommand(argv) {
907
907
  switch (sub) {
908
908
  case "ls":
909
909
  case "list": return await cmdLs(rest);
910
- case "ps": return await (await import("./cmdPs-DsQ4S4xC.js")).cmdPs(rest);
910
+ case "ps": return await (await import("./cmdPs-guXwE1CD.js")).cmdPs(rest);
911
911
  case "status": return await cmdStatus(rest);
912
912
  case "whoami": return await cmdWhoami(rest);
913
913
  case "result": return await cmdResult(rest);
@@ -954,35 +954,35 @@ async function runSubcommand(argv) {
954
954
  return cmdCh(rest);
955
955
  }
956
956
  case "term": {
957
- const { cmdTerm } = await import("./terminal-34MSuLSw.js");
957
+ const { cmdTerm } = await import("./terminal-BW1__Nur.js");
958
958
  return cmdTerm(rest);
959
959
  }
960
960
  case "widget": {
961
- const { cmdWidget } = await import("./widget-DQkXJjpQ.js");
961
+ const { cmdWidget } = await import("./widget-Bj1cFjqo.js");
962
962
  return cmdWidget(rest);
963
963
  }
964
964
  case "mint": {
965
- const { cmdMint } = await import("./widget-DQkXJjpQ.js");
965
+ const { cmdMint } = await import("./widget-Bj1cFjqo.js");
966
966
  return cmdMint(rest);
967
967
  }
968
968
  case "serve": {
969
- const { cmdServe } = await import("./serve-DNBCDODA.js");
969
+ const { cmdServe } = await import("./serve-DjXJihRj.js");
970
970
  return cmdServe(rest);
971
971
  }
972
972
  case "tray": {
973
- const { cmdTray } = await import("./trayApp-4ltzmET7.js");
973
+ const { cmdTray } = await import("./trayApp-BhDs3NHt.js");
974
974
  return cmdTray(rest);
975
975
  }
976
976
  case "setup": {
977
- const { cmdSetup } = await import("./setup-CWA2Mx20.js");
977
+ const { cmdSetup } = await import("./setup-BvzHgiZZ.js");
978
978
  return cmdSetup(rest);
979
979
  }
980
980
  case "ws": {
981
- const { cmdWs } = await import("./ws-CRJGGKkK.js");
981
+ const { cmdWs } = await import("./ws-DwgqQn6O.js");
982
982
  return cmdWs(rest);
983
983
  }
984
984
  case "schedule": {
985
- const { cmdSchedule } = await import("./schedule-BcIE0U8C.js");
985
+ const { cmdSchedule } = await import("./schedule-CJj1MU1L.js");
986
986
  return cmdSchedule(rest);
987
987
  }
988
988
  case "remote": {
@@ -994,7 +994,7 @@ async function runSubcommand(argv) {
994
994
  return cmdExpose(rest);
995
995
  }
996
996
  case "callback": {
997
- const { cmdCallback } = await import("./callback-CyVGDM79.js");
997
+ const { cmdCallback } = await import("./callback-DVCbzswC.js");
998
998
  return cmdCallback(rest);
999
999
  }
1000
1000
  case "reap":
@@ -3500,7 +3500,7 @@ async function cmdAttach(rest) {
3500
3500
  const winsizeDir = path.join(ayHome, "winsize");
3501
3501
  await mkdir(winsizeDir, { recursive: true });
3502
3502
  const winsizePath = path.join(winsizeDir, String(record.pid));
3503
- const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-DNBCDODA.js");
3503
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-DjXJihRj.js");
3504
3504
  const daemonBase = await resolveDaemonHttpBase().catch(() => null);
3505
3505
  const daemonToken = daemonBase ? await loadTokenReadOnly().catch(() => null) ?? "" : "";
3506
3506
  const capViewer = `attach:${process.pid}`;
@@ -4210,7 +4210,7 @@ async function cmdNotify(rest) {
4210
4210
  }
4211
4211
  const ensure = async () => {
4212
4212
  if (!argv["ensure-daemon"]) return;
4213
- const { ensureDaemon } = await import("./notifyDaemon-DNiNjH0X.js");
4213
+ const { ensureDaemon } = await import("./notifyDaemon-CFO6_oZh.js");
4214
4214
  await ensureDaemon().catch(() => null);
4215
4215
  };
4216
4216
  await heartbeatWatcher(parent, selfStartedAt);
@@ -4284,7 +4284,7 @@ async function cmdNotifyCursor(args) {
4284
4284
  }
4285
4285
  async function cmdNotifyd(rest) {
4286
4286
  const sub = rest[0] ?? "status";
4287
- const daemon = await import("./notifyDaemon-DNiNjH0X.js");
4287
+ const daemon = await import("./notifyDaemon-CFO6_oZh.js");
4288
4288
  switch (sub) {
4289
4289
  case "run": return daemon.runDaemon();
4290
4290
  case "once": return daemon.runDaemon({ once: true });
@@ -4311,4 +4311,4 @@ async function cmdNotifyd(rest) {
4311
4311
 
4312
4312
  //#endregion
4313
4313
  export { TYPING_BADGE as $, menuSelectKeys as A, resolveOne as B, isSubcommand as C, lastStdinAt as D, lastReadAt as E, recentMessageEdges as F, snapshotStatus as G, resolveResumeArgs as H, recentReadEdges as I, submitAndConfirm as J, stdinActivityPath as K, renderLogTailLines as L, readLogForRender as M, readNotes as N, listRecords as O, readPtysize as P, withIpcLock as Q, renderRawLog as R, isSlashCommand as S, isUserTyping as T, restartHintLines as U, resolveReadWindow as V, runSubcommand as W, writeKeysPaced as X, waitForLogQuiet as Y, writeToIpc as Z, finalizedLines as _, TYPING_WINDOW_MS as a, isExitRequest as b, cmdHelp as c, deriveLiveState as d, buildAgentForest as et, deriveLiveStatus as f, extractTaskCounts as g, extractNeedsInput as h, READ_WINDOW_MS as i, readAgentPtysize as j, matchKeyword as k, controlCodeFromName as l, extractMenu as m, MAX_RENDER_BYTES as n, backoffWhileTyping as o, extractBadges as p, stopTipForCli as q, READ_PAGE_DEFAULT as r, cmdDeepseek as s, GRACEFUL_EXIT_COMMANDS as t, flattenForest as tt, cursorAbs as u, isAgentStuck as v, isUnknownManagerToken as w, isPidAlive as x, isBareManagerInvocation as y, renderRawLogLines as z };
4314
- //# sourceMappingURL=subcommands-C3uTfRW6.js.map
4314
+ //# sourceMappingURL=subcommands-B3yYhAG5.js.map
@@ -3,7 +3,7 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-OLfcNxiv.js";
5
5
  import "./configShared-DYxlvrH0.js";
6
- import { A as menuSelectKeys, B as resolveOne, C as isSubcommand, D as lastStdinAt, E as lastReadAt, F as recentMessageEdges, G as snapshotStatus, H as resolveResumeArgs, I as recentReadEdges, J as submitAndConfirm, K as stdinActivityPath, L as renderLogTailLines, M as readLogForRender, N as readNotes, O as listRecords, P as readPtysize, R as renderRawLog, S as isSlashCommand, T as isUserTyping, U as restartHintLines, V as resolveReadWindow, W as runSubcommand, X as writeKeysPaced, Y as waitForLogQuiet, Z as writeToIpc, _ as finalizedLines, a as TYPING_WINDOW_MS, b as isExitRequest, c as cmdHelp, d as deriveLiveState, f as deriveLiveStatus, g as extractTaskCounts, h as extractNeedsInput, i as READ_WINDOW_MS, j as readAgentPtysize, k as matchKeyword, l as controlCodeFromName, m as extractMenu, n as MAX_RENDER_BYTES, o as backoffWhileTyping, p as extractBadges, q as stopTipForCli, r as READ_PAGE_DEFAULT, s as cmdDeepseek, t as GRACEFUL_EXIT_COMMANDS, u as cursorAbs, v as isAgentStuck, w as isUnknownManagerToken, x as isPidAlive, y as isBareManagerInvocation, z as renderRawLogLines } from "./subcommands-C3uTfRW6.js";
6
+ import { A as menuSelectKeys, B as resolveOne, C as isSubcommand, D as lastStdinAt, E as lastReadAt, F as recentMessageEdges, G as snapshotStatus, H as resolveResumeArgs, I as recentReadEdges, J as submitAndConfirm, K as stdinActivityPath, L as renderLogTailLines, M as readLogForRender, N as readNotes, O as listRecords, P as readPtysize, R as renderRawLog, S as isSlashCommand, T as isUserTyping, U as restartHintLines, V as resolveReadWindow, W as runSubcommand, X as writeKeysPaced, Y as waitForLogQuiet, Z as writeToIpc, _ as finalizedLines, a as TYPING_WINDOW_MS, b as isExitRequest, c as cmdHelp, d as deriveLiveState, f as deriveLiveStatus, g as extractTaskCounts, h as extractNeedsInput, i as READ_WINDOW_MS, j as readAgentPtysize, k as matchKeyword, l as controlCodeFromName, m as extractMenu, n as MAX_RENDER_BYTES, o as backoffWhileTyping, p as extractBadges, q as stopTipForCli, r as READ_PAGE_DEFAULT, s as cmdDeepseek, t as GRACEFUL_EXIT_COMMANDS, u as cursorAbs, v as isAgentStuck, w as isUnknownManagerToken, x as isPidAlive, y as isBareManagerInvocation, z as renderRawLogLines } from "./subcommands-B3yYhAG5.js";
7
7
  import "./notifyStore-Dus2D1XA.js";
8
8
  import "./webrtcLink-B72AQ2eb.js";
9
9
  import "./remotes-IzQHupeo.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-DNBCDODA.js");
101
+ const { mintScopedTermToken } = await import("./serve-DjXJihRj.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-34MSuLSw.js.map
138
+ //# sourceMappingURL=terminal-BW1__Nur.js.map
@@ -1,4 +1,4 @@
1
- import { n as findTrayLauncher } from "./rustBinary-CMLEDNy3.js";
1
+ import { n as findTrayLauncher } from "./rustBinary-DzkW66Lm.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-DkH-AcmQ.js.map
100
+ //# sourceMappingURL=trayApp-BfkcZXlu.js.map
@@ -0,0 +1,5 @@
1
+ import "./versionChecker-CtFlXAFh.js";
2
+ import "./rustBinary-DzkW66Lm.js";
3
+ import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-BfkcZXlu.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 { r as getInstalledPackage } from "./versionChecker-Coz0GEUH.js";
3
+ import { r as getInstalledPackage } from "./versionChecker-CtFlXAFh.js";
4
4
  import { t as agentYesHome } from "./agentYesHome-CtmsY6I-.js";
5
5
  import { u as removeControlCharacters } from "./todoAutomation-BETGOik9.js";
6
6
  import { i as shouldUseLock, r as releaseLock, t as acquireLock } from "./runningLock-DBoONoM-.js";
@@ -2074,7 +2074,7 @@ async function agentYes({ cli, cliArgs = [], skipPermissions = false, prompt, ro
2074
2074
  }, 100);
2075
2075
  const cleanupHeartbeat = () => clearInterval(heartbeatInterval);
2076
2076
  shell.onExit(cleanupHeartbeat);
2077
- const { startParentPingLoop } = await import("./parentPingLoop-Rs-zWOGx.js");
2077
+ const { startParentPingLoop } = await import("./parentPingLoop-BH4qu3JD.js");
2078
2078
  const parentPingLoop = startParentPingLoop({
2079
2079
  parentPid,
2080
2080
  selfWrapperPid: process.pid,
@@ -2338,4 +2338,4 @@ function sleep(ms) {
2338
2338
 
2339
2339
  //#endregion
2340
2340
  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 };
2341
- //# sourceMappingURL=ts-BC_vHtnq.js.map
2341
+ //# sourceMappingURL=ts-Q3AxCJqf.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.270.0";
10
+ var version = "1.270.1";
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-Coz0GEUH.js.map
218
+ //# sourceMappingURL=versionChecker-CtFlXAFh.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-DNBCDODA.js");
31
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-DjXJihRj.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-DNBCDODA.js");
189
+ const { mintScopedTermToken } = await import("./serve-DjXJihRj.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-DQkXJjpQ.js.map
205
+ //# sourceMappingURL=widget-Bj1cFjqo.js.map
@@ -3,10 +3,10 @@ import "./globalPidIndex-Dq4KY2IV.js";
3
3
  import "./messageLog-BYFwioFY.js";
4
4
  import "./e2e-OLfcNxiv.js";
5
5
  import "./configShared-DYxlvrH0.js";
6
- import "./subcommands-C3uTfRW6.js";
6
+ import "./subcommands-B3yYhAG5.js";
7
7
  import "./notifyStore-Dus2D1XA.js";
8
8
  import "./webrtcLink-B72AQ2eb.js";
9
9
  import "./remotes-IzQHupeo.js";
10
- 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-Cfcw-Cgl.js";
10
+ 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-sD4KNCh_.js";
11
11
 
12
12
  export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, walkWorkspaces, workspaceStatus };
@@ -1,4 +1,4 @@
1
- import { O as listRecords } from "./subcommands-C3uTfRW6.js";
1
+ import { O as listRecords } from "./subcommands-B3yYhAG5.js";
2
2
  import { a as getProvisionRoot } from "./workspaceConfig-EK7XNsgR.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-Cfcw-Cgl.js.map
427
+ //# sourceMappingURL=ws-sD4KNCh_.js.map
@@ -162,6 +162,12 @@ function markdown(src: string): string {
162
162
  while (i < lines.length && lines[i]!.trim()) {
163
163
  const cur = lines[i]!;
164
164
  if (bullet.test(cur)) items.push(cur.replace(bullet, ""));
165
+ // A non-bullet line is a lazy continuation of the previous item — UNLESS
166
+ // it opens another block. Without this stop-set a fenced code block or
167
+ // heading written straight after a list (no blank line) is swallowed into
168
+ // the last <li> and then mangled by the inline pass. Same set as the
169
+ // paragraph loop below.
170
+ else if (/^(```|#{1,4}\s|\||>\s|<[a-zA-Z/!])/.test(cur)) break;
165
171
  else if (items.length) items[items.length - 1] += ` ${cur.trim()}`;
166
172
  else break;
167
173
  i++;
@@ -241,6 +247,12 @@ padding:16px 18px;margin:12px 0;color:inherit}
241
247
  footer{color:var(--muted);font-size:.9em;margin-top:52px;border-top:1px solid var(--border);
242
248
  padding-top:20px}
243
249
  .up{display:inline-block;margin:36px 0 0}
250
+ .note{border-left:3px solid var(--accent);background:var(--card);padding:10px 16px;
251
+ border-radius:0 8px 8px 0;margin:18px 0}
252
+ .ok{color:var(--green)}
253
+ .no{color:var(--red)}
254
+ h2 a.anchor{color:var(--muted);text-decoration:none;margin-left:6px;opacity:0}
255
+ h2:hover a.anchor{opacity:1}
244
256
  `.trim();
245
257
 
246
258
  const NAV = `
@@ -52,7 +52,7 @@ The system reads cleanly top-down, and the
52
52
  | --- | --- |
53
53
  | **① Agent core** | The PTY wrapper. Spawns any agent CLI, matches ready / enter / fatal patterns, restarts on crash, resumes sessions, propagates terminal size. Rust is the primary binary; TypeScript is the reference implementation. |
54
54
  | **② Local fabric** | `pids.jsonl` (every agent, both runtimes), a FIFO per pid for stdin, a raw PTY log per agent for stdout. Files, not a daemon. |
55
- | **③ Exposure** | One transport-agnostic handler, `apiFetch(req) → Response`. HTTP, WebRTC and port tunnels are all just callers. |
55
+ | **③ Exposure** | One transport-agnostic handler, `apiFetch(req) → Response`. HTTP and the WebRTC bridge are both just callers; port tunnels and libp2p peers fold in next. |
56
56
  | **④ Trust & discovery** | Signaling that is a rendezvous only, an HKDF key split so the relay never holds a key, and signed capability tokens that carry their own scope. |
57
57
  | **⑤ Reach surfaces** | The browser console, the CLI on another box, embeddable widgets, a system tray, peers. |
58
58
 
@@ -148,12 +148,3 @@ e2e keys = HKDF(S, "ay/ay-e2e-1/key/…") → never leave your machine or bro
148
148
  browser's local storage until it ages out. Forward secrecy / rekeying, and the separate
149
149
  codehost transport, are future work.
150
150
  </p>
151
- <style>
152
- /* Post-local styles carried over from the original standalone page. */
153
- h2 a.anchor{color:var(--muted);text-decoration:none;margin-left:6px;opacity:0}
154
- h2:hover a.anchor{opacity:1}
155
- .note{border-left:3px solid var(--accent);background:var(--card);padding:10px 16px;
156
- border-radius:0 8px 8px 0;margin:18px 0}
157
- .ok{color:var(--green)}
158
- .no{color:var(--red)}
159
- </style>
@@ -160,15 +160,6 @@ $ ay callback --expires 7d --title "Ask the report bot"</code></pre>
160
160
  Paste the printed snippet at the end of anything your agent publishes. Ship the report; keep
161
161
  the conversation.
162
162
  </p>
163
- <style>
164
- /* Post-local styles carried over from the original standalone page. */
165
- h2 a.anchor{color:var(--muted);text-decoration:none;margin-left:6px;opacity:0}
166
- h2:hover a.anchor{opacity:1}
167
- .note{border-left:3px solid var(--accent);background:var(--card);padding:10px 16px;
168
- border-radius:0 8px 8px 0;margin:18px 0}
169
- .ok{color:var(--green)}
170
- .no{color:var(--red)}
171
- </style>
172
163
  <style>
173
164
  /* Inert demo replica of the widget the snippet renders. */
174
165
  .demo{position:relative;background:var(--card);border:1px dashed var(--border);
@@ -109,10 +109,11 @@ Not a bigger console. The measure is whether these become boring:
109
109
  - Ask a fleet a question and get an answer that survives every process that participated in it.
110
110
  - Have an agent publish something a person can reply to, in the place they read it.
111
111
  - Reconstruct, a week later, who asked for a change and who checked it.
112
- - Lose any single machine, daemon, or console and lose no work.
112
+ - Lose any daemon or console and lose no work.
113
113
 
114
114
  The last one already holds — it is what the [local fabric](./2026-08-11-no-daemon-owns-your-agents)
115
- buys. The other four are the project.
115
+ buys. The other four are the project, and so is the one not on the list: the fabric is per-machine
116
+ files, so losing a *machine* still loses its agents, its logs and its task store.
116
117
 
117
118
  <p class="note">Start at the beginning: <a href="./2026-08-11-the-terminal-is-the-api">the terminal
118
119
  is the API</a> — why one small edit forced all of this.</p>
@@ -17,7 +17,9 @@ share no parent. Nothing sits above them.
17
17
 
18
18
  That means the web console, `ay serve`, is a **stateless observer**. It reads a file to discover
19
19
  agents, tails files to render them, and writes a pipe to talk to them. Restart it, upgrade it,
20
- crash it, kill it with `SIGKILL` — no agent is disturbed, because no agent was ever its child.
20
+ crash it, kill it with `SIGKILL` — no agent is disturbed, because every agent runs in its own
21
+ session. Even the ones the console itself spawns are detached at birth, so none of them is ever
22
+ in `ay serve`'s session or process group.
21
23
 
22
24
  The comparison worth making is with the obvious design: a daemon that spawns and supervises
23
25
  everything. That design is easier to write and gives you an in-memory registry for free. It also
@@ -66,7 +68,8 @@ is. Everything below is live today, from any terminal, against agents started by
66
68
  | **Provision** | `ay ws` (clone or refresh `<owner>/<repo>/tree/<branch>` workspaces), `ay setup`, `ay reap` |
67
69
 
68
70
  The pattern repeats: each of those is a small program over the same three files, which is why they
69
- compose. `ay ls --json` piped into `ay tail` is a fleet dashboard. `ay ls --watch` is a single
71
+ compose. Looping the pids from `ay ls --json` into a per-pid `ay tail` is a fleet dashboard.
72
+ `ay ls --watch` is a single
70
73
  NDJSON stream of state changes across every matched agent — one watcher for an entire fan-out,
71
74
  rather than N pollers.
72
75
 
@@ -94,13 +97,15 @@ Above the fabric there is exactly one handler:
94
97
  apiFetch(req: Request) → Response
95
98
  ```
96
99
 
97
- `ay serve`'s HTTP listener calls it. The WebRTC bridge calls it in-process. The port-exposure
98
- tunnel calls it. None of them is a control plane; they are pipes into the same function. Adding a
100
+ `ay serve`'s HTTP listener calls it. The WebRTC bridge calls it in-process. Neither is a control
101
+ plane; they are pipes into the same function. (The port-exposure tunnel sits on the other side of
102
+ that line — it is *started* through the handler, by `POST /api/expose`, and then proxies raw bytes
103
+ to a local port. A consumer, not a caller.) Adding a
99
104
  transport — a relay, a peer mesh, something not invented yet — means writing a caller, not a second
100
105
  system with its own notion of what an agent is.
101
106
 
102
107
  This is why a share link and a LAN URL and a localhost port all produce an identical console: they
103
- are the same handler reached three ways.
108
+ are the same handler reached two ways.
104
109
 
105
110
  ## Where files are hard
106
111
 
@@ -53,6 +53,9 @@ clis:
53
53
  someagent:
54
54
  promptArg: last-arg
55
55
  yesArgs: [--dangerously-skip-permissions]
56
+ enter: # a prompt to answer — press Enter on it
57
+ - "Do you want to proceed\\?"
58
+ - "Yes, and don't ask again"
56
59
  ready: # parked at a prompt, safe to type
57
60
  - '\? for shortcuts'
58
61
  - "^>[ ]"
@@ -65,8 +68,8 @@ clis:
65
68
  wedgeTimeoutSecs: 1800
66
69
  ```
67
70
 
68
- From those four states — `ready`, `working`, `needsInput`, `fatal` — you get auto-answering, but
69
- you also get something more valuable: **a machine-readable liveness signal for a program that was
71
+ The `enter:` list is what actually presses the key. The four *screen states* — `ready`, `working`,
72
+ `needsInput`, `fatal` buy something less obvious and more valuable: **a machine-readable liveness signal for a program that was
70
73
  never designed to emit one.** `ay ls` can tell you an agent is `needs_input` rather than `active`
71
74
  because the pattern set says so. That single classification is what later makes notifications,
72
75
  watchdogs, task automation and the web console possible.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-yes",
3
- "version": "1.270.0",
3
+ "version": "1.270.1",
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",
@@ -1,5 +0,0 @@
1
- import "./versionChecker-Coz0GEUH.js";
2
- import "./rustBinary-CMLEDNy3.js";
3
- import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-DkH-AcmQ.js";
4
-
5
- export { cmdTray };