agent-yes 1.276.0 → 1.277.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 (76) hide show
  1. package/README.md +10 -9
  2. package/agent-yes.config.schema.json +4 -1
  3. package/default.config.yaml +49 -0
  4. package/dist/{SUPPORTED_CLIS-G5YhpzKV.js → SUPPORTED_CLIS-DMA2T-LF.js} +2 -2
  5. package/dist/{SUPPORTED_CLIS-D-hylNcp.js → SUPPORTED_CLIS-DzVEFVKI.js} +3 -3
  6. package/dist/{agentShare-BmQZ96CJ.js → agentShare-DqT9USG5.js} +3 -3
  7. package/dist/{callback-BEgUEMY3.js → callback-D60U9zFd.js} +3 -3
  8. package/dist/{callback-B2oH6mCo.js → callback-PKIAkhNq.js} +3 -3
  9. package/dist/cli.js +11 -11
  10. package/dist/cmdDsh-BySPA9hP.js +45 -0
  11. package/dist/{cmdPs-E6fcHruY.js → cmdPs-BeUkjSOH.js} +3 -3
  12. package/dist/{cwdConflictWarn-CqN5pJ-7.js → cwdConflictWarn-DIPD6HH5.js} +1 -1
  13. package/dist/{cwdPassthroughHint-DxdqgwEN.js → cwdPassthroughHint-C0tfZlgZ.js} +1 -1
  14. package/dist/dsh-legacy-yes.js +10 -0
  15. package/dist/dsh-tui-yes.js +10 -0
  16. package/dist/dsh-yes.js +10 -0
  17. package/dist/{expose-DTxYWQeW.js → expose-Ds9aUFsq.js} +1 -1
  18. package/dist/{forkNested-CZAvQj0y.js → forkNested-Dt5XP8ZH.js} +1 -1
  19. package/dist/{hist-QkZZBp-y.js → hist-DSYaJEd3.js} +1 -1
  20. package/dist/index.js +2 -2
  21. package/dist/{initMsg-DAwRS89d.js → initMsg-CeF4QNOM.js} +1 -1
  22. package/dist/{initMsg-C8ISz_C7.js → initMsg-DejbYYjX.js} +1 -1
  23. package/dist/{nodeRuntime-C_LtZrpR.js → nodeRuntime-_zeWDISM.js} +1 -1
  24. package/dist/{notifyDaemon-D_x5ow8y.js → notifyDaemon-Bw70QCkC.js} +3 -3
  25. package/dist/{openBrowser-B50Lhaob.js → openBrowser-BNP8xByu.js} +1 -1
  26. package/dist/{parentLink-svMgYhEi.js → parentLink-Bv8ihRcu.js} +1 -1
  27. package/dist/{parentLink-i817PzXK.js → parentLink-HWunrH1s.js} +1 -1
  28. package/dist/{parentPingLoop-DP2y906e.js → parentPingLoop-DJAPbp6D.js} +4 -4
  29. package/dist/{remotes-gAI6-nv9.js → remotes-BlHTR9ow.js} +1 -1
  30. package/dist/{remotes-Cdlaj7AP.js → remotes-b6reVXzo.js} +2 -2
  31. package/dist/{rustBinary-BwgA8XyI.js → rustBinary-CxtSgRSg.js} +2 -2
  32. package/dist/{rustBinary-bXjmCsim.js → rustBinary-DQHcq1Wr.js} +2 -2
  33. package/dist/{schedule-CdEUIaEV.js → schedule-BI7-Pa2F.js} +6 -6
  34. package/dist/{serve-CvLw3YZx.js → serve-Bfxc3VWQ.js} +26 -26
  35. package/dist/{setup-BRyFMtpv.js → setup-Cp31FALW.js} +4 -4
  36. package/dist/{spawnGate-DtC_ffme.js → spawnGate-B2hA_2NQ.js} +2 -2
  37. package/dist/{spawnGate-CdewnL8m.js → spawnGate-FLwTAPW6.js} +1 -1
  38. package/dist/{subcommands-CqBONdKo.js → subcommands-CjgHXjZd.js} +2 -2
  39. package/dist/{subcommands-BtRA2slB.js → subcommands-Cohq91Dx.js} +27 -22
  40. package/dist/{systemPathLink-Df_pstm2.js → systemPathLink-Dl2gJqeg.js} +1 -1
  41. package/dist/{terminal-8jfLRLtF.js → terminal-8ipst6Wf.js} +2 -2
  42. package/dist/{todoCli-Cf0EHvfy.js → todoCli-MWrejmdM.js} +1 -1
  43. package/dist/{tray-BeIs4ffu.js → tray-BhPVpP_r.js} +1 -1
  44. package/dist/{trayApp-CnJiwYjb.js → trayApp-CL_iZpnR.js} +2 -2
  45. package/dist/trayApp-DaekNsVe.js +5 -0
  46. package/dist/{ts-CEtUijwR.js → ts-RBN1OMQ_.js} +5 -5
  47. package/dist/{versionChecker-CL6Dvn--.js → versionChecker-F_WiFsVg.js} +2 -2
  48. package/dist/{webrtcRemote-CIbq5Hdt.js → webrtcRemote-H9Hok0_R.js} +1 -1
  49. package/dist/{widget-DvSx4hyW.js → widget-DTramHv8.js} +3 -3
  50. package/dist/{workspaceConfig-DctWuxUP.js → workspaceConfig-D6QndOCz.js} +1 -1
  51. package/dist/{ws-XngU-GGe.js → ws-dgltfu3A.js} +3 -3
  52. package/dist/{ws-B830G79O.js → ws-sf8JPYPq.js} +3 -3
  53. package/lab/ui/index.html +2 -1
  54. package/lab/ui/lab/build.ts +5 -4
  55. package/lab/ui/lab/index.md +14 -14
  56. package/lab/ui/lab/posts/2026-06-15-e2ee-share-links.html +128 -132
  57. package/lab/ui/lab/posts/2026-07-22-ay-callback.html +214 -167
  58. package/lab/ui/lab/posts/2026-08-11-an-address-space-for-agents.md +9 -9
  59. package/lab/ui/lab/posts/2026-08-11-no-daemon-owns-your-agents.md +13 -13
  60. package/lab/ui/lab/posts/2026-08-11-slack-term-safe-writes.md +26 -26
  61. package/lab/ui/lab/posts/2026-08-11-the-terminal-is-the-api.md +10 -10
  62. package/lab/ui/landing.html +2 -1
  63. package/package.json +4 -1
  64. package/ts/buildRustArgs.spec.ts +3 -0
  65. package/ts/cmdDsh.spec.ts +90 -0
  66. package/ts/cmdDsh.ts +62 -0
  67. package/ts/histStore.spec.ts +8 -4
  68. package/ts/histStore.ts +2 -7
  69. package/ts/identity.spec.ts +4 -1
  70. package/ts/initMsg.spec.ts +12 -2
  71. package/ts/invokedCli.spec.ts +1 -0
  72. package/ts/postbuild.ts +11 -8
  73. package/ts/subcommands.ts +6 -0
  74. package/ts/systemPathLink.spec.ts +12 -2
  75. package/ts/systemPathLink.ts +5 -1
  76. package/dist/trayApp-CUuEodHT.js +0 -5
@@ -1,7 +1,7 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import { i as getInstalledPackage } from "./versionChecker-CL6Dvn--.js";
3
- import { r as findSpawnHiddenLauncher } from "./rustBinary-BwgA8XyI.js";
4
- import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-CEtUijwR.js";
2
+ import { i as getInstalledPackage } from "./versionChecker-F_WiFsVg.js";
3
+ import { r as findSpawnHiddenLauncher } from "./rustBinary-CxtSgRSg.js";
4
+ import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-RBN1OMQ_.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,18 +12,18 @@ 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-G5YhpzKV.js";
16
- import { D as listRecords, F as recentReadEdges, I as renderLogTailLines, L as renderRawLog, M as readNotes, N as readPtysize, P as recentMessageEdges, Q as TYPING_BADGE, R as renderRawLogLines, W as snapshotStatus, X as writeToIpc, Z as withIpcLock, c as controlCodeFromName, d as deriveLiveStatus, f as extractBadges, h as extractTaskCounts, j as readLogForRender, m as extractNeedsInput, w as isUserTyping, z as resolveOne } from "./subcommands-BtRA2slB.js";
15
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DMA2T-LF.js";
16
+ import { D as listRecords, F as recentReadEdges, I as renderLogTailLines, L as renderRawLog, M as readNotes, N as readPtysize, P as recentMessageEdges, Q as TYPING_BADGE, R as renderRawLogLines, W as snapshotStatus, X as writeToIpc, Z as withIpcLock, c as controlCodeFromName, d as deriveLiveStatus, f as extractBadges, h as extractTaskCounts, j as readLogForRender, m as extractNeedsInput, w as isUserTyping, z as resolveOne } from "./subcommands-Cohq91Dx.js";
17
17
  import { c as isTransientLockMkdirError } from "./notifyStore-2SWKGwZI.js";
18
18
  import "./webrtcLink-DLaJfTcB.js";
19
- import "./remotes-Cdlaj7AP.js";
19
+ import "./remotes-b6reVXzo.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-B2oH6mCo.js";
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-DctWuxUP.js";
23
- import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-C_LtZrpR.js";
24
- import { i as importProvisionModule } from "./ws-B830G79O.js";
25
- import { r as spawnRejectionReason } from "./spawnGate-DtC_ffme.js";
26
- import { i as launchTray } from "./trayApp-CnJiwYjb.js";
21
+ import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-PKIAkhNq.js";
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-D6QndOCz.js";
23
+ import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-_zeWDISM.js";
24
+ import { i as importProvisionModule } from "./ws-sf8JPYPq.js";
25
+ import { r as spawnRejectionReason } from "./spawnGate-B2hA_2NQ.js";
26
+ import { i as launchTray } from "./trayApp-CL_iZpnR.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";
@@ -1279,7 +1279,7 @@ async function cmdServeDaemon(sub, args) {
1279
1279
  if (!webrtcDaemon) return;
1280
1280
  if (shareLink) {
1281
1281
  process.stdout.write(`\nshared over WebRTC — open this link (the token is eaten from the URL on open):\n ${shareLink}\n` + (shareLinkMinted ? ` (persistent room — same link across restarts; delete ~/.agent-yes/.share-room to rotate)\n` : ``));
1282
- const { offerOpenInBrowser } = await import("./openBrowser-B50Lhaob.js");
1282
+ const { offerOpenInBrowser } = await import("./openBrowser-BNP8xByu.js");
1283
1283
  await offerOpenInBrowser(shareLink);
1284
1284
  } else process.stdout.write("\nthe WebRTC share link carries a secret, so the daemon does NOT log it —\nread it from ~/.agent-yes/.share-link (mode 0600). The room persists in\n~/.agent-yes/.share-room, so the link survives restarts.\n");
1285
1285
  };
@@ -2436,7 +2436,7 @@ Options:
2436
2436
  }
2437
2437
  });
2438
2438
  if (req.method === "GET" && p === "/api/ws") {
2439
- const ws = await import("./ws-XngU-GGe.js");
2439
+ const ws = await import("./ws-dgltfu3A.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-XngU-GGe.js");
2459
+ const ws = await import("./ws-dgltfu3A.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-XngU-GGe.js");
2481
+ const ws = await import("./ws-dgltfu3A.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-XngU-GGe.js");
2562
+ const ws = await import("./ws-dgltfu3A.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-BmQZ96CJ.js");
3473
+ const { createScopedShare } = await import("./agentShare-DqT9USG5.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-BmQZ96CJ.js");
3488
+ const { listShares } = await import("./agentShare-DqT9USG5.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-BmQZ96CJ.js");
3493
+ const { revokeShare } = await import("./agentShare-DqT9USG5.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
  }
@@ -3504,7 +3504,7 @@ Options:
3504
3504
  const port = Number(body.port);
3505
3505
  if (!Number.isInteger(port) || port < 1 || port > 65535) return new Response("valid port required", { status: 400 });
3506
3506
  try {
3507
- const { ensureExposure } = await import("./expose-DTxYWQeW.js");
3507
+ const { ensureExposure } = await import("./expose-Ds9aUFsq.js");
3508
3508
  const h = await ensureExposure(port, body.relay);
3509
3509
  return Response.json({
3510
3510
  id: h.id,
@@ -3518,12 +3518,12 @@ Options:
3518
3518
  }
3519
3519
  }
3520
3520
  if (req.method === "GET" && p === "/api/exposes") {
3521
- const { listExposures } = await import("./expose-DTxYWQeW.js");
3521
+ const { listExposures } = await import("./expose-Ds9aUFsq.js");
3522
3522
  return Response.json(listExposures());
3523
3523
  }
3524
3524
  const unexposeM = /^\/api\/expose\/(\d+)$/.exec(p);
3525
3525
  if (req.method === "DELETE" && unexposeM) {
3526
- const { stopExposure } = await import("./expose-DTxYWQeW.js");
3526
+ const { stopExposure } = await import("./expose-Ds9aUFsq.js");
3527
3527
  const ok = stopExposure(Number(unexposeM[1]));
3528
3528
  return new Response(ok ? "revoked" : "no such exposure", { status: ok ? 200 : 404 });
3529
3529
  }
@@ -3753,7 +3753,7 @@ Options:
3753
3753
  const persistNote = explicitUrl ? "\n" : ` (persistent room — same link across restarts; delete ~/.agent-yes/.share-room to rotate)\n\n`;
3754
3754
  process.stdout.write(`${wantHttp ? "\n" : ""}${lead}:\n ${link}\n` + persistNote);
3755
3755
  if (!rotated) {
3756
- const { offerOpenInBrowser } = await import("./openBrowser-B50Lhaob.js");
3756
+ const { offerOpenInBrowser } = await import("./openBrowser-BNP8xByu.js");
3757
3757
  await offerOpenInBrowser(link);
3758
3758
  }
3759
3759
  } else {
@@ -3795,7 +3795,7 @@ Options:
3795
3795
  const shutdown = (resolve) => {
3796
3796
  if (heartbeat) clearInterval(heartbeat);
3797
3797
  closeShare?.();
3798
- import("./agentShare-BmQZ96CJ.js").then((m) => m.revokeAllShares()).catch(() => {});
3798
+ import("./agentShare-DqT9USG5.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-CvLw3YZx.js.map
3811
+ //# sourceMappingURL=serve-Bfxc3VWQ.js.map
@@ -1,4 +1,4 @@
1
- import { c as getWorkspaceRoot, p as setWorkspaceRoot } from "./workspaceConfig-DctWuxUP.js";
1
+ import { c as getWorkspaceRoot, p as setWorkspaceRoot } from "./workspaceConfig-D6QndOCz.js";
2
2
  import { existsSync } from "node:fs";
3
3
  import { stdin, stdout } from "node:process";
4
4
  import { createInterface } from "node:readline/promises";
@@ -31,7 +31,7 @@ async function cmdSetup(rest) {
31
31
  process.stdout.write(`workspace root: ${abs}\n`);
32
32
  if (!existsSync(abs)) process.stderr.write(` note: that directory doesn't exist yet — create it, or agents spawned there will fail\n`);
33
33
  try {
34
- const { linkBunBinsToSystemPath } = await import("./systemPathLink-Df_pstm2.js");
34
+ const { linkBunBinsToSystemPath } = await import("./systemPathLink-Dl2gJqeg.js");
35
35
  const r = linkBunBinsToSystemPath();
36
36
  if (r && (r.linked.length || r.refreshed.length)) {
37
37
  const n = r.linked.length + r.refreshed.length;
@@ -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-CvLw3YZx.js");
43
+ const { cmdServe } = await import("./serve-Bfxc3VWQ.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-BRyFMtpv.js.map
53
+ //# sourceMappingURL=setup-Cp31FALW.js.map
@@ -1,5 +1,5 @@
1
1
  import { i as readGlobalPids } from "./globalPidIndex-DoaKEUkO.js";
2
- import { n as getMaxAgents, r as getMinFreeMb, s as getSpawnWaitMs } from "./workspaceConfig-DctWuxUP.js";
2
+ import { n as getMaxAgents, r as getMinFreeMb, s as getSpawnWaitMs } from "./workspaceConfig-D6QndOCz.js";
3
3
  import { readFile } from "fs/promises";
4
4
 
5
5
  //#region ts/spawnGate.ts
@@ -104,4 +104,4 @@ async function waitForSpawnCapacity(opts) {
104
104
 
105
105
  //#endregion
106
106
  export { waitForSpawnCapacity as i, spawnGateEnabled as n, spawnRejectionReason as r, memAvailableMb as t };
107
- //# sourceMappingURL=spawnGate-DtC_ffme.js.map
107
+ //# sourceMappingURL=spawnGate-B2hA_2NQ.js.map
@@ -1,5 +1,5 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-DoaKEUkO.js";
3
- import { i as waitForSpawnCapacity, n as spawnGateEnabled, r as spawnRejectionReason, t as memAvailableMb } from "./spawnGate-DtC_ffme.js";
3
+ import { i as waitForSpawnCapacity, n as spawnGateEnabled, r as spawnRejectionReason, t as memAvailableMb } from "./spawnGate-B2hA_2NQ.js";
4
4
 
5
5
  export { waitForSpawnCapacity };
@@ -3,9 +3,9 @@ import "./globalPidIndex-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import { A as readAgentPtysize, B as resolveReadWindow, C as isUnknownManagerToken, D as listRecords, E as lastStdinAt, F as recentReadEdges, G as stdinActivityPath, H as restartHintLines, I as renderLogTailLines, J as waitForLogQuiet, K as stopTipForCli, L as renderRawLog, M as readNotes, N as readPtysize, O as matchKeyword, P as recentMessageEdges, R as renderRawLogLines, S as isSubcommand, T as lastReadAt, U as runSubcommand, V as resolveResumeArgs, W as snapshotStatus, X as writeToIpc, Y as writeKeysPaced, _ as isAgentStuck, a as TYPING_WINDOW_MS, b as isPidAlive, c as controlCodeFromName, d as deriveLiveStatus, f as extractBadges, g as finalizedLines, h as extractTaskCounts, i as READ_WINDOW_MS, j as readLogForRender, k as menuSelectKeys, l as cursorAbs, m as extractNeedsInput, n as MAX_RENDER_BYTES, o as backoffWhileTyping, p as extractMenu, q as submitAndConfirm, r as READ_PAGE_DEFAULT, s as cmdHelp, t as GRACEFUL_EXIT_COMMANDS, u as deriveLiveState, v as isBareManagerInvocation, w as isUserTyping, x as isSlashCommand, y as isExitRequest, z as resolveOne } from "./subcommands-BtRA2slB.js";
6
+ import { A as readAgentPtysize, B as resolveReadWindow, C as isUnknownManagerToken, D as listRecords, E as lastStdinAt, F as recentReadEdges, G as stdinActivityPath, H as restartHintLines, I as renderLogTailLines, J as waitForLogQuiet, K as stopTipForCli, L as renderRawLog, M as readNotes, N as readPtysize, O as matchKeyword, P as recentMessageEdges, R as renderRawLogLines, S as isSubcommand, T as lastReadAt, U as runSubcommand, V as resolveResumeArgs, W as snapshotStatus, X as writeToIpc, Y as writeKeysPaced, _ as isAgentStuck, a as TYPING_WINDOW_MS, b as isPidAlive, c as controlCodeFromName, d as deriveLiveStatus, f as extractBadges, g as finalizedLines, h as extractTaskCounts, i as READ_WINDOW_MS, j as readLogForRender, k as menuSelectKeys, l as cursorAbs, m as extractNeedsInput, n as MAX_RENDER_BYTES, o as backoffWhileTyping, p as extractMenu, q as submitAndConfirm, r as READ_PAGE_DEFAULT, s as cmdHelp, t as GRACEFUL_EXIT_COMMANDS, u as deriveLiveState, v as isBareManagerInvocation, w as isUserTyping, x as isSlashCommand, y as isExitRequest, z as resolveOne } from "./subcommands-Cohq91Dx.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
- import "./remotes-Cdlaj7AP.js";
9
+ import "./remotes-b6reVXzo.js";
10
10
 
11
11
  export { READ_WINDOW_MS, cmdHelp, isBareManagerInvocation, isSubcommand, isUnknownManagerToken, lastReadAt, runSubcommand };
@@ -7,7 +7,7 @@ import { t as formatIdentity } from "./identity-CKRuYUFi.js";
7
7
  import { n as isWorkingScreen, r as parseMenu, t as classifyNeedsInput } from "./needsInput-BHopZGM8.js";
8
8
  import { S as postmortemStartedAt, _ as filterSinceSeq, a as getCursor, b as maxSeq, f as readInbox, o as heartbeatWatcher, p as setCursor, r as clearWatcher, s as hostId, v as filterSinceTs, y as filterUnread } from "./notifyStore-2SWKGwZI.js";
9
9
  import { n as isWebrtcSpec } from "./webrtcLink-DLaJfTcB.js";
10
- import { a as resolveRemoteSpec, i as readRemotes } from "./remotes-Cdlaj7AP.js";
10
+ import { a as resolveRemoteSpec, i as readRemotes } from "./remotes-b6reVXzo.js";
11
11
  import ms from "ms";
12
12
  import yargs from "yargs";
13
13
  import { appendFile, mkdir, open, readFile, stat, writeFile } from "fs/promises";
@@ -814,6 +814,7 @@ const SUBCOMMANDS = new Set([
814
814
  "callback",
815
815
  "reap",
816
816
  "gc",
817
+ "dsh-legacy",
817
818
  "help"
818
819
  ]);
819
820
  const MANAGER_SUBCOMMANDS = new Set(["setup", "ws"]);
@@ -904,7 +905,7 @@ async function runSubcommand(argv) {
904
905
  switch (sub) {
905
906
  case "ls":
906
907
  case "list": return await cmdLs(rest);
907
- case "ps": return await (await import("./cmdPs-E6fcHruY.js")).cmdPs(rest);
908
+ case "ps": return await (await import("./cmdPs-BeUkjSOH.js")).cmdPs(rest);
908
909
  case "status": return await cmdStatus(rest);
909
910
  case "whoami": return await cmdWhoami(rest);
910
911
  case "result": return await cmdResult(rest);
@@ -915,7 +916,7 @@ async function runSubcommand(argv) {
915
916
  case "tail": return await cmdRead(rest, { mode: "tail" });
916
917
  case "head": return await cmdRead(rest, { mode: "head" });
917
918
  case "hist":
918
- case "history": return await (await import("./hist-QkZZBp-y.js")).cmdHist(rest);
919
+ case "history": return await (await import("./hist-DSYaJEd3.js")).cmdHist(rest);
919
920
  case "send": return await cmdSend(rest);
920
921
  case "msgs": return await cmdMsgs(rest);
921
922
  case "key": return await cmdKey(rest);
@@ -942,7 +943,7 @@ async function runSubcommand(argv) {
942
943
  return sub === "ask" ? await runAskSubcommand(rest, deps) : await runAnswerSubcommand(rest, deps);
943
944
  }
944
945
  case "todo": {
945
- const { runTodoSubcommand } = await import("./todoCli-Cf0EHvfy.js");
946
+ const { runTodoSubcommand } = await import("./todoCli-MWrejmdM.js");
946
947
  return runTodoSubcommand(rest);
947
948
  }
948
949
  case "ch":
@@ -951,54 +952,58 @@ async function runSubcommand(argv) {
951
952
  return cmdCh(rest);
952
953
  }
953
954
  case "term": {
954
- const { cmdTerm } = await import("./terminal-8jfLRLtF.js");
955
+ const { cmdTerm } = await import("./terminal-8ipst6Wf.js");
955
956
  return cmdTerm(rest);
956
957
  }
957
958
  case "widget": {
958
- const { cmdWidget } = await import("./widget-DvSx4hyW.js");
959
+ const { cmdWidget } = await import("./widget-DTramHv8.js");
959
960
  return cmdWidget(rest);
960
961
  }
961
962
  case "mint": {
962
- const { cmdMint } = await import("./widget-DvSx4hyW.js");
963
+ const { cmdMint } = await import("./widget-DTramHv8.js");
963
964
  return cmdMint(rest);
964
965
  }
965
966
  case "serve": {
966
- const { cmdServe } = await import("./serve-CvLw3YZx.js");
967
+ const { cmdServe } = await import("./serve-Bfxc3VWQ.js");
967
968
  return cmdServe(rest);
968
969
  }
969
970
  case "tray": {
970
- const { cmdTray } = await import("./trayApp-CUuEodHT.js");
971
+ const { cmdTray } = await import("./trayApp-DaekNsVe.js");
971
972
  return cmdTray(rest);
972
973
  }
973
974
  case "setup": {
974
- const { cmdSetup } = await import("./setup-BRyFMtpv.js");
975
+ const { cmdSetup } = await import("./setup-Cp31FALW.js");
975
976
  return cmdSetup(rest);
976
977
  }
977
978
  case "ws": {
978
- const { cmdWs } = await import("./ws-XngU-GGe.js");
979
+ const { cmdWs } = await import("./ws-dgltfu3A.js");
979
980
  return cmdWs(rest);
980
981
  }
981
982
  case "schedule": {
982
- const { cmdSchedule } = await import("./schedule-CdEUIaEV.js");
983
+ const { cmdSchedule } = await import("./schedule-BI7-Pa2F.js");
983
984
  return cmdSchedule(rest);
984
985
  }
985
986
  case "remote": {
986
- const { cmdRemote } = await import("./remotes-gAI6-nv9.js");
987
+ const { cmdRemote } = await import("./remotes-BlHTR9ow.js");
987
988
  return cmdRemote(rest);
988
989
  }
989
990
  case "expose": {
990
- const { cmdExpose } = await import("./expose-DTxYWQeW.js");
991
+ const { cmdExpose } = await import("./expose-Ds9aUFsq.js");
991
992
  return cmdExpose(rest);
992
993
  }
993
994
  case "callback": {
994
- const { cmdCallback } = await import("./callback-BEgUEMY3.js");
995
+ const { cmdCallback } = await import("./callback-D60U9zFd.js");
995
996
  return cmdCallback(rest);
996
997
  }
997
998
  case "reap":
998
999
  await (await import("./reaper-BDMiMfwK.js")).sweep();
999
1000
  return 0;
1001
+ case "dsh-legacy": {
1002
+ const { cmdDsh } = await import("./cmdDsh-BySPA9hP.js");
1003
+ return await cmdDsh(rest);
1004
+ }
1000
1005
  case "gc": {
1001
- const { gcOldBinaryDirs } = await import("./rustBinary-bXjmCsim.js");
1006
+ const { gcOldBinaryDirs } = await import("./rustBinary-DQHcq1Wr.js");
1002
1007
  const res = gcOldBinaryDirs();
1003
1008
  if (res.removed.length === 0) process.stdout.write("no old agent-yes binary cache dirs to remove\n");
1004
1009
  else {
@@ -1052,7 +1057,7 @@ async function cmdHelp(managerCommands = true) {
1052
1057
  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" : ``;
1053
1058
  const self = process.env.AGENT_YES_PID ? await resolveSender() : null;
1054
1059
  const agentSection = self ? await buildAgentContextSection(self) : "";
1055
- 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 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 remove old-version binary cache dirs and report freed space\n" + wsLines + "\nRemote:\n" + setupLine + " ay schedule <when> <cli> -- <msg> run an agent on a schedule (HH:MM or cron)\n ay serve [--port N] start HTTP API server (prints token)\n ay serve status show serve daemon/server status\n ay remote add <alias> http://<token>@<host>:<port>\n ay remote ls / rm <alias> manage saved remotes\n ay expose <port> share localhost:<port> at https://<id>.agent-yes.com (private link)\n ay callback --expires 7d mint an embeddable message-me widget for one agent\n ay ls <token>@<host>:<port> connect inline (no alias needed)\n ay send <token>@<host>:<port>:<kw> <msg>\n\nRun an agent (naming a CLI is what launches one — bare 'ay' shows this help):\n ay <claude|codex|...> [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");
1060
+ 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 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 remove old-version binary cache dirs and report freed space\n ay dsh-legacy [args...] launch the DeepSeek Harness terminal client (dsh-tui)\n" + wsLines + "\nRemote:\n" + setupLine + " ay schedule <when> <cli> -- <msg> run an agent on a schedule (HH:MM or cron)\n ay serve [--port N] start HTTP API server (prints token)\n ay serve status show serve daemon/server status\n ay remote add <alias> http://<token>@<host>:<port>\n ay remote ls / rm <alias> manage saved remotes\n ay expose <port> share localhost:<port> at https://<id>.agent-yes.com (private link)\n ay callback --expires 7d mint an embeddable message-me widget for one agent\n ay ls <token>@<host>:<port> connect inline (no alias needed)\n ay send <token>@<host>:<port>:<kw> <msg>\n\nRun an agent (naming a CLI is what launches one — bare 'ay' shows this help):\n ay <claude|codex|...> [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");
1056
1061
  return 0;
1057
1062
  }
1058
1063
  function matchKeyword(record, keyword) {
@@ -1432,7 +1437,7 @@ async function fetchRemoteRecordsRaw(url, token, opts) {
1432
1437
  let base = url;
1433
1438
  let bearer = token;
1434
1439
  if (isWebrtcSpec(url)) {
1435
- const { startWebrtcBridge } = await import("./webrtcRemote-CIbq5Hdt.js");
1440
+ const { startWebrtcBridge } = await import("./webrtcRemote-H9Hok0_R.js");
1436
1441
  bridge = await startWebrtcBridge(url);
1437
1442
  base = bridge.baseUrl;
1438
1443
  bearer = bridge.token;
@@ -3474,7 +3479,7 @@ async function cmdAttach(rest) {
3474
3479
  const winsizeDir = path.join(ayHome, "winsize");
3475
3480
  await mkdir(winsizeDir, { recursive: true });
3476
3481
  const winsizePath = path.join(winsizeDir, String(record.pid));
3477
- const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-CvLw3YZx.js");
3482
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-Bfxc3VWQ.js");
3478
3483
  const daemonBase = await resolveDaemonHttpBase().catch(() => null);
3479
3484
  const daemonToken = daemonBase ? await loadTokenReadOnly().catch(() => null) ?? "" : "";
3480
3485
  const capViewer = `attach:${process.pid}`;
@@ -4192,7 +4197,7 @@ async function cmdNotify(rest) {
4192
4197
  }
4193
4198
  const ensure = async () => {
4194
4199
  if (!argv["ensure-daemon"]) return;
4195
- const { ensureDaemon } = await import("./notifyDaemon-D_x5ow8y.js");
4200
+ const { ensureDaemon } = await import("./notifyDaemon-Bw70QCkC.js");
4196
4201
  await ensureDaemon().catch(() => null);
4197
4202
  };
4198
4203
  await heartbeatWatcher(parent, selfStartedAt);
@@ -4266,7 +4271,7 @@ async function cmdNotifyCursor(args) {
4266
4271
  }
4267
4272
  async function cmdNotifyd(rest) {
4268
4273
  const sub = rest[0] ?? "status";
4269
- const daemon = await import("./notifyDaemon-D_x5ow8y.js");
4274
+ const daemon = await import("./notifyDaemon-Bw70QCkC.js");
4270
4275
  switch (sub) {
4271
4276
  case "run": return daemon.runDaemon();
4272
4277
  case "once": return daemon.runDaemon({ once: true });
@@ -4293,4 +4298,4 @@ async function cmdNotifyd(rest) {
4293
4298
 
4294
4299
  //#endregion
4295
4300
  export { buildAgentForest as $, readAgentPtysize as A, resolveReadWindow as B, isUnknownManagerToken as C, listRecords as D, lastStdinAt as E, recentReadEdges as F, stdinActivityPath as G, restartHintLines as H, renderLogTailLines as I, waitForLogQuiet as J, stopTipForCli as K, renderRawLog as L, readNotes as M, readPtysize as N, matchKeyword as O, recentMessageEdges as P, TYPING_BADGE as Q, renderRawLogLines as R, isSubcommand as S, lastReadAt as T, runSubcommand as U, resolveResumeArgs as V, snapshotStatus as W, writeToIpc as X, writeKeysPaced as Y, withIpcLock as Z, isAgentStuck as _, TYPING_WINDOW_MS as a, isPidAlive as b, controlCodeFromName as c, deriveLiveStatus as d, flattenForest as et, extractBadges as f, finalizedLines as g, extractTaskCounts as h, READ_WINDOW_MS as i, readLogForRender as j, menuSelectKeys as k, cursorAbs as l, extractNeedsInput as m, MAX_RENDER_BYTES as n, backoffWhileTyping as o, extractMenu as p, submitAndConfirm as q, READ_PAGE_DEFAULT as r, cmdHelp as s, GRACEFUL_EXIT_COMMANDS as t, deriveLiveState as u, isBareManagerInvocation as v, isUserTyping as w, isSlashCommand as x, isExitRequest as y, resolveOne as z };
4296
- //# sourceMappingURL=subcommands-BtRA2slB.js.map
4301
+ //# sourceMappingURL=subcommands-Cohq91Dx.js.map
@@ -88,4 +88,4 @@ function linkBunBinsToSystemPath(opts) {
88
88
 
89
89
  //#endregion
90
90
  export { linkBunBinsToSystemPath };
91
- //# sourceMappingURL=systemPathLink-Df_pstm2.js.map
91
+ //# sourceMappingURL=systemPathLink-Dl2gJqeg.js.map
@@ -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-CvLw3YZx.js");
101
+ const { mintScopedTermToken } = await import("./serve-Bfxc3VWQ.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-8jfLRLtF.js.map
138
+ //# sourceMappingURL=terminal-8ipst6Wf.js.map
@@ -583,4 +583,4 @@ async function runTodoSubcommand(rest0) {
583
583
 
584
584
  //#endregion
585
585
  export { runTodoSubcommand };
586
- //# sourceMappingURL=todoCli-Cf0EHvfy.js.map
586
+ //# sourceMappingURL=todoCli-MWrejmdM.js.map
@@ -187,4 +187,4 @@ async function startTray() {
187
187
 
188
188
  //#endregion
189
189
  export { ensureTray, startTray };
190
- //# sourceMappingURL=tray-BeIs4ffu.js.map
190
+ //# sourceMappingURL=tray-BhPVpP_r.js.map
@@ -1,4 +1,4 @@
1
- import { i as findTrayLauncher } from "./rustBinary-BwgA8XyI.js";
1
+ import { i as findTrayLauncher } from "./rustBinary-CxtSgRSg.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-CnJiwYjb.js.map
100
+ //# sourceMappingURL=trayApp-CL_iZpnR.js.map
@@ -0,0 +1,5 @@
1
+ import "./versionChecker-F_WiFsVg.js";
2
+ import "./rustBinary-CxtSgRSg.js";
3
+ import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-CL_iZpnR.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-CL6Dvn--.js";
3
+ import { i as getInstalledPackage } from "./versionChecker-F_WiFsVg.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";
@@ -1599,10 +1599,10 @@ async function agentYes({ cli, cliArgs = [], skipPermissions = false, prompt, ro
1599
1599
  })();
1600
1600
  const originalPrompt = prompt;
1601
1601
  if (prompt && inheritedParentPid) try {
1602
- const { resolveSpawner } = await import("./parentLink-i817PzXK.js");
1602
+ const { resolveSpawner } = await import("./parentLink-HWunrH1s.js");
1603
1603
  const spawner = await resolveSpawner(inheritedParentPid);
1604
1604
  if (spawner) {
1605
- const { buildInitMsg } = await import("./initMsg-DAwRS89d.js");
1605
+ const { buildInitMsg } = await import("./initMsg-CeF4QNOM.js");
1606
1606
  const { formatIdentity } = await import("./identity-DFr3dfTO.js");
1607
1607
  const identity = formatIdentity({
1608
1608
  cwd: spawner.cwd,
@@ -2071,7 +2071,7 @@ async function agentYes({ cli, cliArgs = [], skipPermissions = false, prompt, ro
2071
2071
  }, 100);
2072
2072
  const cleanupHeartbeat = () => clearInterval(heartbeatInterval);
2073
2073
  shell.onExit(cleanupHeartbeat);
2074
- const { startParentPingLoop } = await import("./parentPingLoop-DP2y906e.js");
2074
+ const { startParentPingLoop } = await import("./parentPingLoop-DJAPbp6D.js");
2075
2075
  const parentPingLoop = startParentPingLoop({
2076
2076
  parentPid,
2077
2077
  selfWrapperPid: process.pid,
@@ -2334,4 +2334,4 @@ function sleep(ms) {
2334
2334
 
2335
2335
  //#endregion
2336
2336
  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 };
2337
- //# sourceMappingURL=ts-CEtUijwR.js.map
2337
+ //# sourceMappingURL=ts-RBN1OMQ_.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.276.0";
10
+ var version = "1.277.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 a, getInstalledPackage as i, compareVersions as n, displayVersion as r, checkAndAutoUpdate as t };
218
- //# sourceMappingURL=versionChecker-CL6Dvn--.js.map
218
+ //# sourceMappingURL=versionChecker-F_WiFsVg.js.map
@@ -256,4 +256,4 @@ async function startWebrtcBridge(link) {
256
256
 
257
257
  //#endregion
258
258
  export { startWebrtcBridge };
259
- //# sourceMappingURL=webrtcRemote-CIbq5Hdt.js.map
259
+ //# sourceMappingURL=webrtcRemote-H9Hok0_R.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-CvLw3YZx.js");
31
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-Bfxc3VWQ.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-CvLw3YZx.js");
189
+ const { mintScopedTermToken } = await import("./serve-Bfxc3VWQ.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-DvSx4hyW.js.map
205
+ //# sourceMappingURL=widget-DTramHv8.js.map
@@ -215,4 +215,4 @@ function allowsSkipPermissions() {
215
215
 
216
216
  //#endregion
217
217
  export { getProvisionRoot as a, getWorkspaceRoot as c, isProvisionAllowed as d, resolveSpawnCwd as f, getProvisionHook as i, hasProvisionHook as l, getMaxAgents as n, getSpawnHook as o, setWorkspaceRoot as p, getMinFreeMb as r, getSpawnWaitMs as s, allowsSkipPermissions as t, hasSpawnHook as u };
218
- //# sourceMappingURL=workspaceConfig-DctWuxUP.js.map
218
+ //# sourceMappingURL=workspaceConfig-D6QndOCz.js.map
@@ -3,10 +3,10 @@ import "./globalPidIndex-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import "./subcommands-BtRA2slB.js";
6
+ import "./subcommands-Cohq91Dx.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
- import "./remotes-Cdlaj7AP.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-B830G79O.js";
9
+ import "./remotes-b6reVXzo.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-sf8JPYPq.js";
11
11
 
12
12
  export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, walkWorkspaces, workspaceStatus };
@@ -1,5 +1,5 @@
1
- import { D as listRecords } from "./subcommands-BtRA2slB.js";
2
- import { a as getProvisionRoot } from "./workspaceConfig-DctWuxUP.js";
1
+ import { D as listRecords } from "./subcommands-Cohq91Dx.js";
2
+ import { a as getProvisionRoot } from "./workspaceConfig-D6QndOCz.js";
3
3
  import { existsSync } from "fs";
4
4
  import { lstat, opendir } from "fs/promises";
5
5
  import path from "path";
@@ -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-B830G79O.js.map
427
+ //# sourceMappingURL=ws-sf8JPYPq.js.map
package/lab/ui/index.html CHANGED
@@ -2281,7 +2281,8 @@
2281
2281
  ><input type="checkbox" id="perfToggle" /> <span>Perf HUD</span></label
2282
2282
  >
2283
2283
  <label class="rmenuitem rmenuphone" title="let the terminal run under the title bar"
2284
- ><input type="checkbox" id="islandsToggle" /> <span>Edge-to-edge (beta)</span></label
2284
+ ><input type="checkbox" id="islandsToggle" />
2285
+ <span>Edge-to-edge (beta)</span></label
2285
2286
  >
2286
2287
  <div class="rmenusep"></div>
2287
2288
  <button class="rmenuitem rmenuact" id="shareAgent" type="button">
@@ -143,7 +143,9 @@ function markdown(src: string): string {
143
143
  const tr = body
144
144
  .map((r) => `<tr>${r.map((c) => `<td>${inline(escapeHtml(c))}</td>`).join("")}</tr>`)
145
145
  .join("");
146
- out.push(`<div class="tw"><table><thead><tr>${th}</tr></thead><tbody>${tr}</tbody></table></div>`);
146
+ out.push(
147
+ `<div class="tw"><table><thead><tr>${th}</tr></thead><tbody>${tr}</tbody></table></div>`,
148
+ );
147
149
  continue;
148
150
  }
149
151
 
@@ -377,9 +379,8 @@ ${p.body}
377
379
  }
378
380
 
379
381
  const { meta, rest } = frontMatter(readFileSync(join(HERE, "index.md"), "utf8"));
380
- const body = markdown(rest).replace(
381
- /<p>&lt;!--posts--&gt;<\/p>|<!--posts-->/,
382
- () => postList(posts),
382
+ const body = markdown(rest).replace(/<p>&lt;!--posts--&gt;<\/p>|<!--posts-->/, () =>
383
+ postList(posts),
383
384
  );
384
385
  writeFileSync(
385
386
  join(outDir, "index.html"),