agent-yes 1.275.0 → 1.276.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/{SUPPORTED_CLIS-CBBBtJ4_.js → SUPPORTED_CLIS-D-hylNcp.js} +3 -3
  2. package/dist/{SUPPORTED_CLIS-DHk85zfy.js → SUPPORTED_CLIS-G5YhpzKV.js} +2 -2
  3. package/dist/{agentShare-CaSaTksu.js → agentShare-BmQZ96CJ.js} +2 -2
  4. package/dist/{callback-DpzzyOsY.js → callback-B2oH6mCo.js} +3 -3
  5. package/dist/{callback-Se8JJTZ9.js → callback-BEgUEMY3.js} +2 -2
  6. package/dist/cli.js +5 -5
  7. package/dist/{cmdPs-C6BKjicc.js → cmdPs-E6fcHruY.js} +2 -2
  8. package/dist/index.js +2 -2
  9. package/dist/{notifyDaemon-ej83JK7y.js → notifyDaemon-D_x5ow8y.js} +2 -2
  10. package/dist/{parentPingLoop-ke06LhOS.js → parentPingLoop-DP2y906e.js} +2 -2
  11. package/dist/{rustBinary-BWXier75.js → rustBinary-BwgA8XyI.js} +2 -2
  12. package/dist/{rustBinary-D5xxABSh.js → rustBinary-bXjmCsim.js} +2 -2
  13. package/dist/{schedule-CSB8FTTu.js → schedule-CdEUIaEV.js} +4 -4
  14. package/dist/{serve-B6aYKTLs.js → serve-CvLw3YZx.js} +17 -17
  15. package/dist/{setup-MM_Sn30Q.js → setup-BRyFMtpv.js} +2 -2
  16. package/dist/{subcommands-Em1Mjajb.js → subcommands-BtRA2slB.js} +15 -15
  17. package/dist/{subcommands-DAqYMqVx.js → subcommands-CqBONdKo.js} +1 -1
  18. package/dist/{terminal-Bg1GFfRw.js → terminal-8jfLRLtF.js} +2 -2
  19. package/dist/trayApp-CUuEodHT.js +5 -0
  20. package/dist/{trayApp-ChDq575c.js → trayApp-CnJiwYjb.js} +2 -2
  21. package/dist/{ts-CUI0pmYw.js → ts-CEtUijwR.js} +3 -3
  22. package/dist/{versionChecker-B7eWJMXy.js → versionChecker-CL6Dvn--.js} +2 -2
  23. package/dist/{widget-vCVi9QYk.js → widget-DvSx4hyW.js} +3 -3
  24. package/dist/{ws-MQ5iyIWn.js → ws-B830G79O.js} +2 -2
  25. package/dist/{ws-D2An6-fY.js → ws-XngU-GGe.js} +2 -2
  26. package/lab/ui/index.html +140 -0
  27. package/package.json +1 -1
  28. package/dist/trayApp-Dieq8pPs.js +0 -5
@@ -1,12 +1,12 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-B7eWJMXy.js";
3
- import "./ts-CUI0pmYw.js";
2
+ import "./versionChecker-CL6Dvn--.js";
3
+ import "./ts-CEtUijwR.js";
4
4
  import "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-DoaKEUkO.js";
7
7
  import "./pidStore-B73xnAeT.js";
8
8
  import "./messageLog-DdjBNqgt.js";
9
9
  import "./todoStore-DF6vxHgV.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DHk85zfy.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-G5YhpzKV.js";
11
11
 
12
12
  export { SUPPORTED_CLIS };
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-CUI0pmYw.js";
1
+ import { t as CLIS_CONFIG } from "./ts-CEtUijwR.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-DHk85zfy.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-G5YhpzKV.js.map
@@ -3,7 +3,7 @@ import "./globalPidIndex-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import { z as resolveOne } from "./subcommands-Em1Mjajb.js";
6
+ import { z as resolveOne } from "./subcommands-BtRA2slB.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
9
  import "./remotes-Cdlaj7AP.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-CaSaTksu.js.map
233
+ //# sourceMappingURL=agentShare-BmQZ96CJ.js.map
@@ -1,5 +1,5 @@
1
1
  import { t as agentYesHome } from "./agentYesHome-BNtn19J4.js";
2
- import { z as resolveOne } from "./subcommands-Em1Mjajb.js";
2
+ import { z as resolveOne } from "./subcommands-BtRA2slB.js";
3
3
  import { a as mintCapability, o as parseExpires } from "./callbackCore-Bl2gGcxg.js";
4
4
  import { randomBytes } from "node:crypto";
5
5
  import { chmodSync, readFileSync, renameSync, writeFileSync } from "node:fs";
@@ -72,7 +72,7 @@ async function resolveBase(flag) {
72
72
  if (flag) return flag;
73
73
  if (process.env.AGENT_YES_CALLBACK_BASE) return process.env.AGENT_YES_CALLBACK_BASE;
74
74
  try {
75
- const { resolveLocalServeUrl } = await import("./serve-B6aYKTLs.js");
75
+ const { resolveLocalServeUrl } = await import("./serve-CvLw3YZx.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-DpzzyOsY.js.map
190
+ //# sourceMappingURL=callback-B2oH6mCo.js.map
@@ -3,11 +3,11 @@ 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-Em1Mjajb.js";
6
+ import "./subcommands-BtRA2slB.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
9
  import "./remotes-Cdlaj7AP.js";
10
10
  import "./callbackCore-Bl2gGcxg.js";
11
- import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-DpzzyOsY.js";
11
+ import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-B2oH6mCo.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-zdFbz1ST.js";
3
3
  import { n as logger } from "./logger-CDIsZ-Pp.js";
4
- import { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-B7eWJMXy.js";
5
- import { l as getRustBinary } from "./rustBinary-BWXier75.js";
4
+ import { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-CL6Dvn--.js";
5
+ import { l as getRustBinary } from "./rustBinary-BwgA8XyI.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-DAqYMqVx.js");
298
+ const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-CqBONdKo.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-CBBBtJ4_.js");
312
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-D-hylNcp.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-CBBBtJ4_.js");
363
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-D-hylNcp.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-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import { $ as buildAgentForest, D as listRecords, et as flattenForest, u as deriveLiveState } from "./subcommands-Em1Mjajb.js";
6
+ import { $ as buildAgentForest, D as listRecords, et as flattenForest, u as deriveLiveState } from "./subcommands-BtRA2slB.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
9
  import "./remotes-Cdlaj7AP.js";
@@ -574,4 +574,4 @@ function readPpidSync(pid) {
574
574
 
575
575
  //#endregion
576
576
  export { cmdPs };
577
- //# sourceMappingURL=cmdPs-C6BKjicc.js.map
577
+ //# sourceMappingURL=cmdPs-E6fcHruY.js.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-B7eWJMXy.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-CUI0pmYw.js";
2
+ import "./versionChecker-CL6Dvn--.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-CEtUijwR.js";
4
4
  import { a as renderTree, c as describeBlock, i as renderDigest, l as monitorHint, o as unblockedTasks, r as openBlockers, t as reconcileTodos, u as removeControlCharacters } from "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-DoaKEUkO.js";
@@ -3,7 +3,7 @@ import "./globalPidIndex-DoaKEUkO.js";
3
3
  import "./messageLog-DdjBNqgt.js";
4
4
  import "./e2e-z1xpwSAg.js";
5
5
  import "./configShared-DKTgiz7K.js";
6
- import { D as listRecords, I as renderLogTailLines, b as isPidAlive, u as deriveLiveState } from "./subcommands-Em1Mjajb.js";
6
+ import { D as listRecords, I as renderLogTailLines, b as isPidAlive, u as deriveLiveState } from "./subcommands-BtRA2slB.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-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
9
  import "./remotes-Cdlaj7AP.js";
@@ -863,4 +863,4 @@ async function ensureDaemon() {
863
863
 
864
864
  //#endregion
865
865
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
866
- //# sourceMappingURL=notifyDaemon-ej83JK7y.js.map
866
+ //# sourceMappingURL=notifyDaemon-D_x5ow8y.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-DAqYMqVx.js");
341
+ const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-CqBONdKo.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-ke06LhOS.js.map
469
+ //# sourceMappingURL=parentPingLoop-DP2y906e.js.map
@@ -1,4 +1,4 @@
1
- import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-B7eWJMXy.js";
1
+ import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-CL6Dvn--.js";
2
2
  import { execFileSync } from "child_process";
3
3
  import { existsSync, mkdirSync, readdirSync, rmSync, statSync, unlinkSync } from "fs";
4
4
  import { chmod, copyFile } from "fs/promises";
@@ -310,4 +310,4 @@ async function getRustBinary(options = {}) {
310
310
 
311
311
  //#endregion
312
312
  export { gcOldBinaryDirs as a, getDownloadUrl as c, findTrayLauncher as i, getRustBinary as l, findRustBinary as n, getBinDir as o, findSpawnHiddenLauncher as r, getBinaryName as s, downloadBinary as t };
313
- //# sourceMappingURL=rustBinary-BWXier75.js.map
313
+ //# sourceMappingURL=rustBinary-BwgA8XyI.js.map
@@ -1,4 +1,4 @@
1
- import "./versionChecker-B7eWJMXy.js";
2
- import { a as gcOldBinaryDirs, c as getDownloadUrl, i as findTrayLauncher, l as getRustBinary, n as findRustBinary, o as getBinDir, r as findSpawnHiddenLauncher, s as getBinaryName, t as downloadBinary } from "./rustBinary-BWXier75.js";
1
+ import "./versionChecker-CL6Dvn--.js";
2
+ import { a as gcOldBinaryDirs, c as getDownloadUrl, i as findTrayLauncher, l as getRustBinary, n as findRustBinary, o as getBinDir, r as findSpawnHiddenLauncher, s as getBinaryName, t as downloadBinary } from "./rustBinary-BwgA8XyI.js";
3
3
 
4
4
  export { gcOldBinaryDirs };
@@ -1,13 +1,13 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-B7eWJMXy.js";
3
- import "./ts-CUI0pmYw.js";
2
+ import "./versionChecker-CL6Dvn--.js";
3
+ import "./ts-CEtUijwR.js";
4
4
  import "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-DoaKEUkO.js";
7
7
  import "./pidStore-B73xnAeT.js";
8
8
  import "./messageLog-DdjBNqgt.js";
9
9
  import "./todoStore-DF6vxHgV.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DHk85zfy.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-G5YhpzKV.js";
11
11
  import { f as resolveSpawnCwd } from "./workspaceConfig-DctWuxUP.js";
12
12
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-C_LtZrpR.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-CSB8FTTu.js.map
157
+ //# sourceMappingURL=schedule-CdEUIaEV.js.map
@@ -1,7 +1,7 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import { i as getInstalledPackage } from "./versionChecker-B7eWJMXy.js";
3
- import { r as findSpawnHiddenLauncher } from "./rustBinary-BWXier75.js";
4
- import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-CUI0pmYw.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";
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-DHk85zfy.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-Em1Mjajb.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";
17
17
  import { c as isTransientLockMkdirError } from "./notifyStore-2SWKGwZI.js";
18
18
  import "./webrtcLink-DLaJfTcB.js";
19
19
  import "./remotes-Cdlaj7AP.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-DpzzyOsY.js";
21
+ import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-B2oH6mCo.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-DctWuxUP.js";
23
23
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-C_LtZrpR.js";
24
- import { i as importProvisionModule } from "./ws-MQ5iyIWn.js";
24
+ import { i as importProvisionModule } from "./ws-B830G79O.js";
25
25
  import { r as spawnRejectionReason } from "./spawnGate-DtC_ffme.js";
26
- import { i as launchTray } from "./trayApp-ChDq575c.js";
26
+ import { i as launchTray } from "./trayApp-CnJiwYjb.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-D2An6-fY.js");
2439
+ const ws = await import("./ws-XngU-GGe.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-D2An6-fY.js");
2459
+ const ws = await import("./ws-XngU-GGe.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-D2An6-fY.js");
2481
+ const ws = await import("./ws-XngU-GGe.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-D2An6-fY.js");
2562
+ const ws = await import("./ws-XngU-GGe.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-CaSaTksu.js");
3473
+ const { createScopedShare } = await import("./agentShare-BmQZ96CJ.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-CaSaTksu.js");
3488
+ const { listShares } = await import("./agentShare-BmQZ96CJ.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-CaSaTksu.js");
3493
+ const { revokeShare } = await import("./agentShare-BmQZ96CJ.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-CaSaTksu.js").then((m) => m.revokeAllShares()).catch(() => {});
3798
+ import("./agentShare-BmQZ96CJ.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-B6aYKTLs.js.map
3811
+ //# sourceMappingURL=serve-CvLw3YZx.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-B6aYKTLs.js");
43
+ const { cmdServe } = await import("./serve-CvLw3YZx.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-MM_Sn30Q.js.map
53
+ //# sourceMappingURL=setup-BRyFMtpv.js.map
@@ -904,7 +904,7 @@ async function runSubcommand(argv) {
904
904
  switch (sub) {
905
905
  case "ls":
906
906
  case "list": return await cmdLs(rest);
907
- case "ps": return await (await import("./cmdPs-C6BKjicc.js")).cmdPs(rest);
907
+ case "ps": return await (await import("./cmdPs-E6fcHruY.js")).cmdPs(rest);
908
908
  case "status": return await cmdStatus(rest);
909
909
  case "whoami": return await cmdWhoami(rest);
910
910
  case "result": return await cmdResult(rest);
@@ -951,35 +951,35 @@ async function runSubcommand(argv) {
951
951
  return cmdCh(rest);
952
952
  }
953
953
  case "term": {
954
- const { cmdTerm } = await import("./terminal-Bg1GFfRw.js");
954
+ const { cmdTerm } = await import("./terminal-8jfLRLtF.js");
955
955
  return cmdTerm(rest);
956
956
  }
957
957
  case "widget": {
958
- const { cmdWidget } = await import("./widget-vCVi9QYk.js");
958
+ const { cmdWidget } = await import("./widget-DvSx4hyW.js");
959
959
  return cmdWidget(rest);
960
960
  }
961
961
  case "mint": {
962
- const { cmdMint } = await import("./widget-vCVi9QYk.js");
962
+ const { cmdMint } = await import("./widget-DvSx4hyW.js");
963
963
  return cmdMint(rest);
964
964
  }
965
965
  case "serve": {
966
- const { cmdServe } = await import("./serve-B6aYKTLs.js");
966
+ const { cmdServe } = await import("./serve-CvLw3YZx.js");
967
967
  return cmdServe(rest);
968
968
  }
969
969
  case "tray": {
970
- const { cmdTray } = await import("./trayApp-Dieq8pPs.js");
970
+ const { cmdTray } = await import("./trayApp-CUuEodHT.js");
971
971
  return cmdTray(rest);
972
972
  }
973
973
  case "setup": {
974
- const { cmdSetup } = await import("./setup-MM_Sn30Q.js");
974
+ const { cmdSetup } = await import("./setup-BRyFMtpv.js");
975
975
  return cmdSetup(rest);
976
976
  }
977
977
  case "ws": {
978
- const { cmdWs } = await import("./ws-D2An6-fY.js");
978
+ const { cmdWs } = await import("./ws-XngU-GGe.js");
979
979
  return cmdWs(rest);
980
980
  }
981
981
  case "schedule": {
982
- const { cmdSchedule } = await import("./schedule-CSB8FTTu.js");
982
+ const { cmdSchedule } = await import("./schedule-CdEUIaEV.js");
983
983
  return cmdSchedule(rest);
984
984
  }
985
985
  case "remote": {
@@ -991,14 +991,14 @@ async function runSubcommand(argv) {
991
991
  return cmdExpose(rest);
992
992
  }
993
993
  case "callback": {
994
- const { cmdCallback } = await import("./callback-Se8JJTZ9.js");
994
+ const { cmdCallback } = await import("./callback-BEgUEMY3.js");
995
995
  return cmdCallback(rest);
996
996
  }
997
997
  case "reap":
998
998
  await (await import("./reaper-BDMiMfwK.js")).sweep();
999
999
  return 0;
1000
1000
  case "gc": {
1001
- const { gcOldBinaryDirs } = await import("./rustBinary-D5xxABSh.js");
1001
+ const { gcOldBinaryDirs } = await import("./rustBinary-bXjmCsim.js");
1002
1002
  const res = gcOldBinaryDirs();
1003
1003
  if (res.removed.length === 0) process.stdout.write("no old agent-yes binary cache dirs to remove\n");
1004
1004
  else {
@@ -3474,7 +3474,7 @@ async function cmdAttach(rest) {
3474
3474
  const winsizeDir = path.join(ayHome, "winsize");
3475
3475
  await mkdir(winsizeDir, { recursive: true });
3476
3476
  const winsizePath = path.join(winsizeDir, String(record.pid));
3477
- const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-B6aYKTLs.js");
3477
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-CvLw3YZx.js");
3478
3478
  const daemonBase = await resolveDaemonHttpBase().catch(() => null);
3479
3479
  const daemonToken = daemonBase ? await loadTokenReadOnly().catch(() => null) ?? "" : "";
3480
3480
  const capViewer = `attach:${process.pid}`;
@@ -4192,7 +4192,7 @@ async function cmdNotify(rest) {
4192
4192
  }
4193
4193
  const ensure = async () => {
4194
4194
  if (!argv["ensure-daemon"]) return;
4195
- const { ensureDaemon } = await import("./notifyDaemon-ej83JK7y.js");
4195
+ const { ensureDaemon } = await import("./notifyDaemon-D_x5ow8y.js");
4196
4196
  await ensureDaemon().catch(() => null);
4197
4197
  };
4198
4198
  await heartbeatWatcher(parent, selfStartedAt);
@@ -4266,7 +4266,7 @@ async function cmdNotifyCursor(args) {
4266
4266
  }
4267
4267
  async function cmdNotifyd(rest) {
4268
4268
  const sub = rest[0] ?? "status";
4269
- const daemon = await import("./notifyDaemon-ej83JK7y.js");
4269
+ const daemon = await import("./notifyDaemon-D_x5ow8y.js");
4270
4270
  switch (sub) {
4271
4271
  case "run": return daemon.runDaemon();
4272
4272
  case "once": return daemon.runDaemon({ once: true });
@@ -4293,4 +4293,4 @@ async function cmdNotifyd(rest) {
4293
4293
 
4294
4294
  //#endregion
4295
4295
  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-Em1Mjajb.js.map
4296
+ //# sourceMappingURL=subcommands-BtRA2slB.js.map
@@ -3,7 +3,7 @@ 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-Em1Mjajb.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";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
9
  import "./remotes-Cdlaj7AP.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-B6aYKTLs.js");
101
+ const { mintScopedTermToken } = await import("./serve-CvLw3YZx.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-Bg1GFfRw.js.map
138
+ //# sourceMappingURL=terminal-8jfLRLtF.js.map
@@ -0,0 +1,5 @@
1
+ import "./versionChecker-CL6Dvn--.js";
2
+ import "./rustBinary-BwgA8XyI.js";
3
+ import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-CnJiwYjb.js";
4
+
5
+ export { cmdTray };
@@ -1,4 +1,4 @@
1
- import { i as findTrayLauncher } from "./rustBinary-BWXier75.js";
1
+ import { i as findTrayLauncher } from "./rustBinary-BwgA8XyI.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-ChDq575c.js.map
100
+ //# sourceMappingURL=trayApp-CnJiwYjb.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin, r as __exportAll } from "./chunk-cZBX9HZv.js";
2
2
  import { n as logger, t as addTransport } from "./logger-CDIsZ-Pp.js";
3
- import { i as getInstalledPackage } from "./versionChecker-B7eWJMXy.js";
3
+ import { i as getInstalledPackage } from "./versionChecker-CL6Dvn--.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";
@@ -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-ke06LhOS.js");
2074
+ const { startParentPingLoop } = await import("./parentPingLoop-DP2y906e.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-CUI0pmYw.js.map
2337
+ //# sourceMappingURL=ts-CEtUijwR.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.275.0";
10
+ var version = "1.276.0";
11
11
 
12
12
  //#endregion
13
13
  //#region ts/versionChecker.ts
@@ -215,4 +215,4 @@ async function displayVersion() {
215
215
 
216
216
  //#endregion
217
217
  export { versionString as a, getInstalledPackage as i, compareVersions as n, displayVersion as r, checkAndAutoUpdate as t };
218
- //# sourceMappingURL=versionChecker-B7eWJMXy.js.map
218
+ //# sourceMappingURL=versionChecker-CL6Dvn--.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-B6aYKTLs.js");
31
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-CvLw3YZx.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-B6aYKTLs.js");
189
+ const { mintScopedTermToken } = await import("./serve-CvLw3YZx.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-vCVi9QYk.js.map
205
+ //# sourceMappingURL=widget-DvSx4hyW.js.map
@@ -1,4 +1,4 @@
1
- import { D as listRecords } from "./subcommands-Em1Mjajb.js";
1
+ import { D as listRecords } from "./subcommands-BtRA2slB.js";
2
2
  import { a as getProvisionRoot } from "./workspaceConfig-DctWuxUP.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-MQ5iyIWn.js.map
427
+ //# sourceMappingURL=ws-B830G79O.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-Em1Mjajb.js";
6
+ import "./subcommands-BtRA2slB.js";
7
7
  import "./notifyStore-2SWKGwZI.js";
8
8
  import "./webrtcLink-DLaJfTcB.js";
9
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-MQ5iyIWn.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";
11
11
 
12
12
  export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, walkWorkspaces, workspaceStatus };
package/lab/ui/index.html CHANGED
@@ -1963,6 +1963,81 @@
1963
1963
  display: flex;
1964
1964
  }
1965
1965
  }
1966
+ /* Menu entries that only do anything in the single-column phone layout —
1967
+ shown there, hidden everywhere else so they're never a dead control. */
1968
+ .rmenuphone {
1969
+ display: none;
1970
+ }
1971
+ @media (max-width: 720px) {
1972
+ .rmenuphone {
1973
+ display: flex;
1974
+ }
1975
+ }
1976
+ /* ---- "islands" mode: edge-to-edge terminal under floating glass bars ----
1977
+ Opt-in (⋯ → Edge-to-edge, or ?islands=1). Mobile only.
1978
+
1979
+ The header stops eating layout height: .log is pulled up by --headH so
1980
+ the xterm grid starts at the very top of the pane and its scrollback
1981
+ renders BEHIND a blurred, translucent .rhead. The grid only GROWS here —
1982
+ the buffer stays bottom-anchored, so every line that was visible before
1983
+ is still visible, and the rows we gained are older scrollback that now
1984
+ lives under the glass. Nothing the user could read gets taken away.
1985
+
1986
+ The bottom bars deliberately do NOT get the same treatment, and that is
1987
+ geometry rather than an unfinished edge: xterm repaints a fixed grid, so
1988
+ the last grid row is always the live CLI input line. Bleeding the grid
1989
+ under the key bar would put that input line behind it at scroll-bottom —
1990
+ exactly the "terminal becomes unreachable" failure this feature has to
1991
+ avoid. So the key bar and composer keep reserving their height in normal
1992
+ flow (which is also what makes fit.fit() and fit.proposeDimensions() —
1993
+ both measure the CONTENT box — keep the negotiated PTY clear of them),
1994
+ and only pick up the glass styling.
1995
+
1996
+ Everything here is a paint-level change plus one negative margin, so the
1997
+ non-islands layout is byte-for-byte what it was. */
1998
+ @media (max-width: 720px) {
1999
+ /* z-index (not just source order) is what puts the bars over the grid:
2000
+ .log is already position:relative, so without this it would paint on
2001
+ top of the header it is supposed to slide under. */
2002
+ .app.islands .rhead,
2003
+ .app.islands .keybar,
2004
+ .app.islands .composer {
2005
+ position: relative;
2006
+ z-index: 12;
2007
+ backdrop-filter: blur(18px) saturate(150%);
2008
+ -webkit-backdrop-filter: blur(18px) saturate(150%);
2009
+ }
2010
+ .app.islands .rhead {
2011
+ /* --headH is measured from #rhead by JS (see islandsBoot) — it moves
2012
+ with the safe-area inset, the cwd line and long-title wrapping, so a
2013
+ hard-coded height would clip or gap on half the devices. */
2014
+ background: color-mix(in srgb, var(--bg) 55%, transparent);
2015
+ border-bottom: 1px solid color-mix(in srgb, var(--line) 60%, transparent);
2016
+ }
2017
+ .app.islands .keybar,
2018
+ .app.islands .composer {
2019
+ background: color-mix(in srgb, var(--panel) 55%, transparent);
2020
+ }
2021
+ /* the two bars read as ONE island, so only the top one keeps a rule */
2022
+ .app.islands .composer {
2023
+ border-top: 0;
2024
+ }
2025
+ .app.islands .keybar {
2026
+ border-top: 1px solid color-mix(in srgb, var(--line) 60%, transparent);
2027
+ }
2028
+ /* the whole trick, in one line: bleed the terminal up under the header.
2029
+ A negative margin on a flex item feeds back into flex sizing, so .log
2030
+ ends up exactly --headH taller as well as --headH higher. */
2031
+ .app.islands .log {
2032
+ margin-top: calc(-1 * var(--headH, 0px));
2033
+ }
2034
+ /* The jump-to-latest pill is anchored to .log, which now starts above
2035
+ the header — its own bottom offset is unaffected, but the peer-selection
2036
+ overlay (.peer-overlay, inset:0 on .log) maps peer coords proportionally
2037
+ across a box that is now taller than the peer's, so its "roughly here"
2038
+ hint drifts by up to --headH in islands mode. It was already documented
2039
+ as approximate; this makes it slightly more so. */
2040
+ }
1966
2041
  /* Terminal right-click context menu: Copy the selection or fire a
1967
2042
  customizable quick command (e.g. /fork [selection]). Positioned at the
1968
2043
  cursor via inline top/left; clamped into the viewport by JS after mount. */
@@ -2205,6 +2280,9 @@
2205
2280
  <label class="rmenuitem"
2206
2281
  ><input type="checkbox" id="perfToggle" /> <span>Perf HUD</span></label
2207
2282
  >
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
2285
+ >
2208
2286
  <div class="rmenusep"></div>
2209
2287
  <button class="rmenuitem rmenuact" id="shareAgent" type="button">
2210
2288
  👁 Share (view-only)
@@ -5452,6 +5530,7 @@ my.translate = async (text, lang) => {
5452
5530
  });
5453
5531
  }
5454
5532
  if (cb) cb.addEventListener("change", () => setPerfHud(cb.checked));
5533
+ $("islandsToggle")?.addEventListener("change", (ev) => applyIslands(ev.target.checked));
5455
5534
  $("shareAgent")?.addEventListener("click", () => (closePanel(), shareAgent("r")));
5456
5535
  $("shareAgentRW")?.addEventListener("click", () => (closePanel(), shareAgent("rw")));
5457
5536
  $("stopAgent")?.addEventListener("click", () => (closePanel(), stopAgent(false)));
@@ -5936,6 +6015,15 @@ my.translate = async (text, lang) => {
5936
6015
  // autoPidExplicit distinguishes the two: an explicit link opens the agent
5937
6016
  // even on mobile (it's a deliberate "take me here"), whereas a merely
5938
6017
  // restored selection only re-highlights the row on a phone — see loadList.
6018
+ // ?islands=1 / =0 — read and persisted HERE, before the ?pid= handler just
6019
+ // below replaceState()s the query string away. islandsBoot runs hundreds of
6020
+ // lines later, by which point location.search would be empty on a ?pid= link.
6021
+ const ISLANDS_KEY = "ay.islands";
6022
+ try {
6023
+ const q = new URLSearchParams(location.search).get("islands");
6024
+ if (q === "1" || q === "0") localStorage.setItem(ISLANDS_KEY, q);
6025
+ } catch {}
6026
+
5939
6027
  let autoPid = new URLSearchParams(location.search).get("pid");
5940
6028
  let autoPidExplicit = !!autoPid;
5941
6029
  if (autoPid) {
@@ -6775,6 +6863,58 @@ my.translate = async (text, lang) => {
6775
6863
  vv.addEventListener("scroll", onVV);
6776
6864
  onVV();
6777
6865
  }
6866
+ // ── "islands" mode: run the terminal edge-to-edge under a glass title bar ──
6867
+ // The CSS (search "islands mode") does the painting; all this owns is the
6868
+ // one number the CSS can't compute, --headH, and the flag that turns it on.
6869
+ //
6870
+ // It stays OFF by default on purpose: the negative margin makes the pane
6871
+ // taller, which grows the grid, which the presence loop reports as capacity
6872
+ // and the host turns into a taller PTY — a change every viewer of that agent
6873
+ // feels. That's fine when it's asked for and rude when it isn't, so it takes
6874
+ // an explicit opt-in (⋯ menu, or ?islands=1 / ?islands=0 to flip and persist).
6875
+ let islandsOn = false;
6876
+ function measureIslands() {
6877
+ // Returns true when the reserved header height actually moved — callers
6878
+ // use that to avoid a refit (and its presence post) on every observer tick.
6879
+ const app = document.querySelector(".app");
6880
+ if (!app) return false;
6881
+ const rh = $("rhead");
6882
+ // offsetParent is null while #rhead is display:none (no agent selected),
6883
+ // which is also exactly when there is no header to hide under.
6884
+ const h = islandsOn && rh && rh.offsetParent ? Math.round(rh.offsetHeight) : 0;
6885
+ const next = h + "px";
6886
+ if (app.style.getPropertyValue("--headH") === next) return false;
6887
+ app.style.setProperty("--headH", next);
6888
+ return true;
6889
+ }
6890
+ function applyIslands(on) {
6891
+ islandsOn = !!on;
6892
+ const app = document.querySelector(".app");
6893
+ if (app) app.classList.toggle("islands", islandsOn);
6894
+ const cb = $("islandsToggle");
6895
+ if (cb) cb.checked = islandsOn;
6896
+ try {
6897
+ localStorage.setItem(ISLANDS_KEY, islandsOn ? "1" : "0");
6898
+ } catch {}
6899
+ measureIslands();
6900
+ refitPane(); // the pane changed height either way — renegotiate the grid
6901
+ }
6902
+ (function islandsBoot() {
6903
+ let want = null;
6904
+ try {
6905
+ want = localStorage.getItem(ISLANDS_KEY); // ?islands= already landed here
6906
+ } catch {}
6907
+ applyIslands(want === "1");
6908
+ // The header grows and shrinks on its own (title wrap, cwd line, the
6909
+ // read-only badge appearing, safe-area on rotate), so poll it with an
6910
+ // observer rather than measuring once at boot.
6911
+ const rh = $("rhead");
6912
+ if (rh && window.ResizeObserver) {
6913
+ new ResizeObserver(() => {
6914
+ if (measureIslands()) refitPane();
6915
+ }).observe(rh);
6916
+ }
6917
+ })();
6778
6918
  // ── mobile two-finger gestures on the terminal: pan = scroll, pinch = zoom ──
6779
6919
  // One finger now SELECTS (see touchSelBoot), so scrolling moves to two
6780
6920
  // fingers. The two are discriminated by what actually changes once the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-yes",
3
- "version": "1.275.0",
3
+ "version": "1.276.0",
4
4
  "description": "A wrapper tool that automates interactions with various AI CLI tools by automatically handling common prompts and responses.",
5
5
  "keywords": [
6
6
  "ai",
@@ -1,5 +0,0 @@
1
- import "./versionChecker-B7eWJMXy.js";
2
- import "./rustBinary-BWXier75.js";
3
- import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-ChDq575c.js";
4
-
5
- export { cmdTray };