agent-yes 1.207.0 → 1.209.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.
@@ -98,6 +98,14 @@ clis:
98
98
  # `\s+`/`\s*` tolerate wraps inside the phrase.
99
99
  - pattern: 'API Error:[\s\S]{0,40}Connection\s+closed\s+mid-\s*response'
100
100
  flags: i
101
+ # "API Error: Stream idle timeout - no chunks received." — the streamed
102
+ # response went idle (no chunks arrived within the client's window) and the
103
+ # client gave up. Same transient/server-side class as the stalled/closed
104
+ # cases above, so retry with backoff. Same "API Error:" chrome anchor keeps
105
+ # an agent merely *discussing* it from self-triggering; `[\s\S]{0,40}` spans
106
+ # the prefix→phrase gap across a line-wrap and `\s+` tolerates wraps.
107
+ - pattern: 'API Error:[\s\S]{0,40}Stream\s+idle\s+timeout'
108
+ flags: i
101
109
  # Any 5xx API error (e.g. "API Error: 529 Overloaded", "API Error: 503 …",
102
110
  # or a 529 rendered as a raw JSON error blob) is server-side + transient —
103
111
  # retry with backoff regardless of the wording. Anchored to "API Error" so
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-DZWZvbLM.js";
1
+ import { t as CLIS_CONFIG } from "./ts-CtJYkOVO.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-B1CDJwYn.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-BpUR991B.js.map
@@ -0,0 +1,9 @@
1
+ import "./ts-CtJYkOVO.js";
2
+ import "./logger-CDIsZ-Pp.js";
3
+ import "./versionChecker-C9Q1qyKO.js";
4
+ import "./pidStore-BIvsBQ8X.js";
5
+ import "./globalPidIndex-CoNr7tS8.js";
6
+ import "./messageLog-CxrKJj77.js";
7
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BpUR991B.js";
8
+
9
+ export { SUPPORTED_CLIS };
@@ -2,7 +2,7 @@ import "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-CoNr7tS8.js";
3
3
  import "./messageLog-CxrKJj77.js";
4
4
  import "./configShared-aKTg-sa5.js";
5
- import { M as resolveOne } from "./subcommands-6AQ8egRn.js";
5
+ import { M as resolveOne } from "./subcommands-BBJOPSTV.js";
6
6
  import "./e2e-jb0Hp43q.js";
7
7
  import "./webrtcLink-B7REGtK2.js";
8
8
  import "./remotes-Cim0dBU7.js";
@@ -229,4 +229,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
229
229
 
230
230
  //#endregion
231
231
  export { createScopedShare, listShares, revokeAllShares, revokeShare };
232
- //# sourceMappingURL=agentShare-DdEbHtAn.js.map
232
+ //# sourceMappingURL=agentShare-Bbm1buCh.js.map
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env bun
2
2
  import { t as invokedCliName } from "./invokedCli-uqM2YYA7.js";
3
3
  import { n as logger } from "./logger-CDIsZ-Pp.js";
4
- import { i as versionString, n as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-C2CV9VOX.js";
5
- import { n as getRustBinary } from "./rustBinary-CuBIr-zX.js";
4
+ import { i as versionString, n as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-C9Q1qyKO.js";
5
+ import { n as getRustBinary } from "./rustBinary-D1akhp-t.js";
6
6
  import { argv } from "process";
7
7
  import { spawn } from "child_process";
8
8
  import ms from "ms";
@@ -285,7 +285,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
285
285
  const rawArg = process.argv[2];
286
286
  const managerCommands = !invokedCliName(process.argv);
287
287
  const isHelpFlag = rawArg === "-h" || rawArg === "--help";
288
- const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-CeRH9-_h.js");
288
+ const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-BpmSru_8.js");
289
289
  if (isHelpFlag && process.argv.length === 3) {
290
290
  await cmdHelp(managerCommands);
291
291
  process.exit(0);
@@ -327,7 +327,7 @@ if (config.useRust) {
327
327
  }
328
328
  }
329
329
  if (rustBinary) {
330
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-vH8hvcZr.js");
330
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-CzaheLtQ.js");
331
331
  const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
332
332
  if (config.verbose) {
333
333
  console.log(`[rust] Using binary: ${rustBinary}`);
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { a as removeControlCharacters, i as AgentContext, n as agentYes, r as config, t as CLIS_CONFIG } from "./ts-DZWZvbLM.js";
1
+ import { a as removeControlCharacters, i as AgentContext, n as agentYes, r as config, t as CLIS_CONFIG } from "./ts-CtJYkOVO.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-C2CV9VOX.js";
3
+ import "./versionChecker-C9Q1qyKO.js";
4
4
  import "./pidStore-BIvsBQ8X.js";
5
5
  import "./globalPidIndex-CoNr7tS8.js";
6
6
  import "./messageLog-CxrKJj77.js";
@@ -2,7 +2,7 @@ import { n as logger } from "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-CoNr7tS8.js";
3
3
  import "./messageLog-CxrKJj77.js";
4
4
  import "./configShared-aKTg-sa5.js";
5
- import { $ as daemonLockOwnerPath, G as gcInboxes, J as listInboxParents, K as hostId, Q as daemonLockDir, S as listRecords, W as appendEvent, X as readInbox, Y as liveWatchers, Z as shouldStealLock, _ as isPidAlive, c as deriveLiveState, et as notifyDir, k as renderLogTailLines } from "./subcommands-6AQ8egRn.js";
5
+ import { $ as daemonLockOwnerPath, G as gcInboxes, J as listInboxParents, K as hostId, Q as daemonLockDir, S as listRecords, W as appendEvent, X as readInbox, Y as liveWatchers, Z as shouldStealLock, _ as isPidAlive, c as deriveLiveState, et as notifyDir, k as renderLogTailLines } from "./subcommands-BBJOPSTV.js";
6
6
  import "./e2e-jb0Hp43q.js";
7
7
  import "./webrtcLink-B7REGtK2.js";
8
8
  import "./remotes-Cim0dBU7.js";
@@ -589,4 +589,4 @@ async function ensureDaemon() {
589
589
 
590
590
  //#endregion
591
591
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
592
- //# sourceMappingURL=notifyDaemon-DivHVzZx.js.map
592
+ //# sourceMappingURL=notifyDaemon-CuGUVybF.js.map
@@ -1,4 +1,4 @@
1
- import { r as getInstalledPackage } from "./versionChecker-C2CV9VOX.js";
1
+ import { r as getInstalledPackage } from "./versionChecker-C9Q1qyKO.js";
2
2
  import { execFileSync } from "child_process";
3
3
  import { existsSync, mkdirSync, unlinkSync } from "fs";
4
4
  import { chmod, copyFile } from "fs/promises";
@@ -225,4 +225,4 @@ async function getRustBinary(options = {}) {
225
225
 
226
226
  //#endregion
227
227
  export { getRustBinary as n, findSpawnHiddenLauncher as t };
228
- //# sourceMappingURL=rustBinary-CuBIr-zX.js.map
228
+ //# sourceMappingURL=rustBinary-D1akhp-t.js.map
@@ -1,10 +1,10 @@
1
- import "./ts-DZWZvbLM.js";
1
+ import "./ts-CtJYkOVO.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-C2CV9VOX.js";
3
+ import "./versionChecker-C9Q1qyKO.js";
4
4
  import "./pidStore-BIvsBQ8X.js";
5
5
  import "./globalPidIndex-CoNr7tS8.js";
6
6
  import "./messageLog-CxrKJj77.js";
7
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-B1CDJwYn.js";
7
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BpUR991B.js";
8
8
  import { d as resolveSpawnCwd } from "./workspaceConfig-CjaRvTjf.js";
9
9
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-CwNJuwH5.js";
10
10
  import { createHash } from "node:crypto";
@@ -151,4 +151,4 @@ async function cmdSchedule(rest) {
151
151
 
152
152
  //#endregion
153
153
  export { cmdSchedule };
154
- //# sourceMappingURL=schedule-Bg_CDt2j.js.map
154
+ //# sourceMappingURL=schedule-GpXGrnVP.js.map
@@ -1,15 +1,15 @@
1
- import "./ts-DZWZvbLM.js";
1
+ import "./ts-CtJYkOVO.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import { r as getInstalledPackage } from "./versionChecker-C2CV9VOX.js";
4
- import { t as findSpawnHiddenLauncher } from "./rustBinary-CuBIr-zX.js";
3
+ import { r as getInstalledPackage } from "./versionChecker-C9Q1qyKO.js";
4
+ import { t as findSpawnHiddenLauncher } from "./rustBinary-D1akhp-t.js";
5
5
  import { t as agentYesHome$1 } from "./agentYesHome-CtHb5b71.js";
6
6
  import "./pidStore-BIvsBQ8X.js";
7
7
  import { a as updateGlobalPidStatus } from "./globalPidIndex-CoNr7tS8.js";
8
8
  import { r as recordInbox } from "./messageLog-CxrKJj77.js";
9
9
  import { t as pgidForWrapper } from "./reaper-BUHCyxdF.js";
10
10
  import "./configShared-aKTg-sa5.js";
11
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-B1CDJwYn.js";
12
- import { A as renderRawLog, D as recentMessageEdges, E as readPtysize, L as snapshotStatus, M as resolveOne, O as recentReadEdges, S as listRecords, T as readNotes, U as writeToIpc, b as isUserTyping, f as extractNeedsInput, k as renderLogTailLines, l as deriveLiveStatus, o as controlCodeFromName, p as extractTaskCounts, q as isTransientLockMkdirError, tt as TYPING_BADGE, u as extractBadges } from "./subcommands-6AQ8egRn.js";
11
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BpUR991B.js";
12
+ import { A as renderRawLog, D as recentMessageEdges, E as readPtysize, L as snapshotStatus, M as resolveOne, O as recentReadEdges, S as listRecords, T as readNotes, U as writeToIpc, b as isUserTyping, f as extractNeedsInput, k as renderLogTailLines, l as deriveLiveStatus, o as controlCodeFromName, p as extractTaskCounts, q as isTransientLockMkdirError, tt as TYPING_BADGE, u as extractBadges } from "./subcommands-BBJOPSTV.js";
13
13
  import "./e2e-jb0Hp43q.js";
14
14
  import "./webrtcLink-B7REGtK2.js";
15
15
  import "./remotes-Cim0dBU7.js";
@@ -1868,7 +1868,7 @@ Options:
1868
1868
  }
1869
1869
  });
1870
1870
  if (req.method === "GET" && p === "/api/ws") {
1871
- const ws = await import("./ws-CGNmxCPD.js");
1871
+ const ws = await import("./ws-8BZZijYd.js");
1872
1872
  try {
1873
1873
  await ws.loadProvision();
1874
1874
  } catch (e) {
@@ -1888,7 +1888,7 @@ Options:
1888
1888
  if (req.method === "GET" && p === "/api/ws/status") {
1889
1889
  const dirRaw = url.searchParams.get("path");
1890
1890
  if (!dirRaw) return new Response("missing ?path=<workspace dir>", { status: 400 });
1891
- const ws = await import("./ws-CGNmxCPD.js");
1891
+ const ws = await import("./ws-8BZZijYd.js");
1892
1892
  let prov;
1893
1893
  try {
1894
1894
  prov = await ws.loadProvision();
@@ -2449,7 +2449,7 @@ Options:
2449
2449
  const perm = body.perm ?? "r";
2450
2450
  if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
2451
2451
  try {
2452
- const { createScopedShare } = await import("./agentShare-DdEbHtAn.js");
2452
+ const { createScopedShare } = await import("./agentShare-Bbm1buCh.js");
2453
2453
  const share = await createScopedShare({
2454
2454
  agent: body.agent,
2455
2455
  perm,
@@ -2464,12 +2464,12 @@ Options:
2464
2464
  }
2465
2465
  }
2466
2466
  if (req.method === "GET" && p === "/api/shares") {
2467
- const { listShares } = await import("./agentShare-DdEbHtAn.js");
2467
+ const { listShares } = await import("./agentShare-Bbm1buCh.js");
2468
2468
  return Response.json(listShares());
2469
2469
  }
2470
2470
  const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
2471
2471
  if (req.method === "DELETE" && revokeM) {
2472
- const { revokeShare } = await import("./agentShare-DdEbHtAn.js");
2472
+ const { revokeShare } = await import("./agentShare-Bbm1buCh.js");
2473
2473
  const ok = revokeShare(decodeURIComponent(revokeM[1]));
2474
2474
  return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
2475
2475
  }
@@ -2655,7 +2655,7 @@ Options:
2655
2655
  const shutdown = (resolve) => {
2656
2656
  if (heartbeat) clearInterval(heartbeat);
2657
2657
  closeShare?.();
2658
- import("./agentShare-DdEbHtAn.js").then((m) => m.revokeAllShares()).catch(() => {});
2658
+ import("./agentShare-Bbm1buCh.js").then((m) => m.revokeAllShares()).catch(() => {});
2659
2659
  server?.stop();
2660
2660
  Promise.resolve(releaseHostLock?.()).catch(() => {}).then(resolve);
2661
2661
  };
@@ -2668,4 +2668,4 @@ Options:
2668
2668
 
2669
2669
  //#endregion
2670
2670
  export { cmdServe };
2671
- //# sourceMappingURL=serve-B-ZCy67S.js.map
2671
+ //# sourceMappingURL=serve-DXqNeB3C.js.map
@@ -32,7 +32,7 @@ async function cmdSetup(rest) {
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
  if (noShare) return 0;
34
34
  process.stdout.write(`\nsharing this machine to agent-yes.com…\n`);
35
- const { cmdServe } = await import("./serve-B-ZCy67S.js");
35
+ const { cmdServe } = await import("./serve-DXqNeB3C.js");
36
36
  return cmdServe([
37
37
  "install",
38
38
  "--share",
@@ -42,4 +42,4 @@ async function cmdSetup(rest) {
42
42
 
43
43
  //#endregion
44
44
  export { cmdSetup };
45
- //# sourceMappingURL=setup-D6UBzk4-.js.map
45
+ //# sourceMappingURL=setup-D7d3G-2r.js.map
@@ -1237,19 +1237,19 @@ async function runSubcommand(argv) {
1237
1237
  case "restart": return await cmdRestart(rest);
1238
1238
  case "note": return await cmdNote(rest);
1239
1239
  case "serve": {
1240
- const { cmdServe } = await import("./serve-B-ZCy67S.js");
1240
+ const { cmdServe } = await import("./serve-DXqNeB3C.js");
1241
1241
  return cmdServe(rest);
1242
1242
  }
1243
1243
  case "setup": {
1244
- const { cmdSetup } = await import("./setup-D6UBzk4-.js");
1244
+ const { cmdSetup } = await import("./setup-D7d3G-2r.js");
1245
1245
  return cmdSetup(rest);
1246
1246
  }
1247
1247
  case "ws": {
1248
- const { cmdWs } = await import("./ws-CGNmxCPD.js");
1248
+ const { cmdWs } = await import("./ws-8BZZijYd.js");
1249
1249
  return cmdWs(rest);
1250
1250
  }
1251
1251
  case "schedule": {
1252
- const { cmdSchedule } = await import("./schedule-Bg_CDt2j.js");
1252
+ const { cmdSchedule } = await import("./schedule-GpXGrnVP.js");
1253
1253
  return cmdSchedule(rest);
1254
1254
  }
1255
1255
  case "remote": {
@@ -4269,7 +4269,7 @@ async function cmdNotify(rest) {
4269
4269
  }
4270
4270
  const ensure = async () => {
4271
4271
  if (!argv["ensure-daemon"]) return;
4272
- const { ensureDaemon } = await import("./notifyDaemon-DivHVzZx.js");
4272
+ const { ensureDaemon } = await import("./notifyDaemon-CuGUVybF.js");
4273
4273
  await ensureDaemon().catch(() => null);
4274
4274
  };
4275
4275
  await heartbeatWatcher(parent, selfStartedAt);
@@ -4343,7 +4343,7 @@ async function cmdNotifyCursor(args) {
4343
4343
  }
4344
4344
  async function cmdNotifyd(rest) {
4345
4345
  const sub = rest[0] ?? "status";
4346
- const daemon = await import("./notifyDaemon-DivHVzZx.js");
4346
+ const daemon = await import("./notifyDaemon-CuGUVybF.js");
4347
4347
  switch (sub) {
4348
4348
  case "run": return daemon.runDaemon();
4349
4349
  case "once": return daemon.runDaemon({ once: true });
@@ -4370,4 +4370,4 @@ async function cmdNotifyd(rest) {
4370
4370
 
4371
4371
  //#endregion
4372
4372
  export { daemonLockOwnerPath as $, renderRawLog as A, submitAndConfirm as B, matchKeyword as C, recentMessageEdges as D, readPtysize as E, restartHintLines as F, gcInboxes as G, writeKeysPaced as H, runSubcommand as I, listInboxParents as J, hostId as K, snapshotStatus as L, resolveOne as M, resolveReadWindow as N, recentReadEdges as O, resolveResumeArgs as P, daemonLockDir as Q, stdinActivityPath as R, listRecords as S, readNotes as T, writeToIpc as U, waitForLogQuiet as V, appendEvent as W, readInbox as X, liveWatchers as Y, shouldStealLock as Z, isPidAlive as _, cmdHelp as a, isUserTyping as b, deriveLiveState as c, extractMenu as d, notifyDir as et, extractNeedsInput as f, isExitRequest as g, isAgentStuck as h, backoffWhileTyping as i, renderRawLogLines as j, renderLogTailLines as k, deriveLiveStatus as l, finalizedLines as m, READ_PAGE_DEFAULT as n, controlCodeFromName as o, extractTaskCounts as p, isTransientLockMkdirError as q, TYPING_WINDOW_MS as r, cursorAbs as s, GRACEFUL_EXIT_COMMANDS as t, TYPING_BADGE as tt, extractBadges as u, isSlashCommand as v, menuSelectKeys as w, lastStdinAt as x, isSubcommand as y, stopTipForCli as z };
4373
- //# sourceMappingURL=subcommands-6AQ8egRn.js.map
4373
+ //# sourceMappingURL=subcommands-BBJOPSTV.js.map
@@ -2,7 +2,7 @@ import "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-CoNr7tS8.js";
3
3
  import "./messageLog-CxrKJj77.js";
4
4
  import "./configShared-aKTg-sa5.js";
5
- import { A as renderRawLog, B as submitAndConfirm, C as matchKeyword, D as recentMessageEdges, E as readPtysize, F as restartHintLines, H as writeKeysPaced, I as runSubcommand, L as snapshotStatus, M as resolveOne, N as resolveReadWindow, O as recentReadEdges, P as resolveResumeArgs, R as stdinActivityPath, S as listRecords, T as readNotes, U as writeToIpc, V as waitForLogQuiet, _ as isPidAlive, a as cmdHelp, b as isUserTyping, c as deriveLiveState, d as extractMenu, f as extractNeedsInput, g as isExitRequest, h as isAgentStuck, i as backoffWhileTyping, j as renderRawLogLines, k as renderLogTailLines, l as deriveLiveStatus, m as finalizedLines, n as READ_PAGE_DEFAULT, o as controlCodeFromName, p as extractTaskCounts, r as TYPING_WINDOW_MS, s as cursorAbs, t as GRACEFUL_EXIT_COMMANDS, u as extractBadges, v as isSlashCommand, w as menuSelectKeys, x as lastStdinAt, y as isSubcommand, z as stopTipForCli } from "./subcommands-6AQ8egRn.js";
5
+ import { A as renderRawLog, B as submitAndConfirm, C as matchKeyword, D as recentMessageEdges, E as readPtysize, F as restartHintLines, H as writeKeysPaced, I as runSubcommand, L as snapshotStatus, M as resolveOne, N as resolveReadWindow, O as recentReadEdges, P as resolveResumeArgs, R as stdinActivityPath, S as listRecords, T as readNotes, U as writeToIpc, V as waitForLogQuiet, _ as isPidAlive, a as cmdHelp, b as isUserTyping, c as deriveLiveState, d as extractMenu, f as extractNeedsInput, g as isExitRequest, h as isAgentStuck, i as backoffWhileTyping, j as renderRawLogLines, k as renderLogTailLines, l as deriveLiveStatus, m as finalizedLines, n as READ_PAGE_DEFAULT, o as controlCodeFromName, p as extractTaskCounts, r as TYPING_WINDOW_MS, s as cursorAbs, t as GRACEFUL_EXIT_COMMANDS, u as extractBadges, v as isSlashCommand, w as menuSelectKeys, x as lastStdinAt, y as isSubcommand, z as stopTipForCli } from "./subcommands-BBJOPSTV.js";
6
6
  import "./e2e-jb0Hp43q.js";
7
7
  import "./webrtcLink-B7REGtK2.js";
8
8
  import "./remotes-Cim0dBU7.js";
@@ -1,5 +1,5 @@
1
1
  import { n as logger, t as addTransport } from "./logger-CDIsZ-Pp.js";
2
- import { r as getInstalledPackage } from "./versionChecker-C2CV9VOX.js";
2
+ import { r as getInstalledPackage } from "./versionChecker-C9Q1qyKO.js";
3
3
  import { t as agentYesHome } from "./agentYesHome-CtHb5b71.js";
4
4
  import { i as shouldUseLock, r as releaseLock, t as acquireLock } from "./runningLock-CNMl13dC.js";
5
5
  import { t as PidStore } from "./pidStore-BIvsBQ8X.js";
@@ -1901,4 +1901,4 @@ function sleep(ms) {
1901
1901
 
1902
1902
  //#endregion
1903
1903
  export { removeControlCharacters as a, AgentContext as i, agentYes as n, config as r, CLIS_CONFIG as t };
1904
- //# sourceMappingURL=ts-DZWZvbLM.js.map
1904
+ //# sourceMappingURL=ts-CtJYkOVO.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.207.0";
10
+ var version = "1.209.0";
11
11
 
12
12
  //#endregion
13
13
  //#region ts/versionChecker.ts
@@ -215,4 +215,4 @@ async function displayVersion() {
215
215
 
216
216
  //#endregion
217
217
  export { versionString as i, displayVersion as n, getInstalledPackage as r, checkAndAutoUpdate as t };
218
- //# sourceMappingURL=versionChecker-C2CV9VOX.js.map
218
+ //# sourceMappingURL=versionChecker-C9Q1qyKO.js.map
@@ -2,7 +2,7 @@ import "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-CoNr7tS8.js";
3
3
  import "./messageLog-CxrKJj77.js";
4
4
  import "./configShared-aKTg-sa5.js";
5
- import { S as listRecords } from "./subcommands-6AQ8egRn.js";
5
+ import { S as listRecords } from "./subcommands-BBJOPSTV.js";
6
6
  import "./e2e-jb0Hp43q.js";
7
7
  import "./webrtcLink-B7REGtK2.js";
8
8
  import "./remotes-Cim0dBU7.js";
@@ -418,4 +418,4 @@ async function cmdWs(args) {
418
418
 
419
419
  //#endregion
420
420
  export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, workspaceStatus };
421
- //# sourceMappingURL=ws-CGNmxCPD.js.map
421
+ //# sourceMappingURL=ws-8BZZijYd.js.map
package/lab/ui/index.html CHANGED
@@ -695,14 +695,14 @@
695
695
  align-items: center;
696
696
  gap: 8px;
697
697
  }
698
- /* Peers badge beside the agent counter how many other humans are in the
699
- fleet right now. Yellow ("here") when a peer shares the agent you have
700
- open, muted otherwise. Hidden entirely when you're alone. */
701
- .peers {
702
- color: var(--muted);
698
+ /* The single consolidated fleet summary: "N/M agents · R rooms · 👤 P".
699
+ Rooms/peers segments appear only when there's more than one room / any
700
+ peer, so a solo fleet just reads "N/M agents". Turns yellow ("here") when
701
+ another peer is watching the agent you have open. */
702
+ .count {
703
703
  cursor: default;
704
704
  }
705
- .peers.here {
705
+ .count.here {
706
706
  color: var(--peer);
707
707
  }
708
708
  .connbadge {
@@ -1851,20 +1851,11 @@
1851
1851
  </div>
1852
1852
  <div class="meta">
1853
1853
  <span class="metaleft">
1854
- <span id="count"></span>
1855
- <span id="peers" class="peers" hidden></span>
1854
+ <span id="count" class="count"></span>
1856
1855
  </span>
1857
1856
  <span class="metaright">
1858
1857
  <button id="foldbtn" class="viewbtn" title="fold subagent trees">⊞ subs</button>
1859
1858
  <button id="sortbtn" class="viewbtn" title="cycle sort order">⇅ state</button>
1860
- <button
1861
- id="viewbtn"
1862
- class="viewbtn"
1863
- title="toggle compact list"
1864
- aria-label="Toggle compact list view"
1865
- >
1866
-
1867
- </button>
1868
1859
  <button id="portsbtn" class="viewbtn" title="manage exposed localhost ports">
1869
1860
  ⇄ ports
1870
1861
  </button>
@@ -2192,6 +2183,7 @@
2192
2183
  // row keeps pulsing to. See advanceStdinFlashes/focusSummary (console-logic).
2193
2184
  let focusByKey = new Map();
2194
2185
  let peerTotal = 0;
2186
+ let shownAgentCount = 0; // agents matching the current filter (for the summary badge)
2195
2187
  const stdinSeen = new Map();
2196
2188
  const flashUntil = new Map();
2197
2189
  const STDIN_FLASH_MS = 1200;
@@ -3361,29 +3353,34 @@
3361
3353
  const sum = focusSummary(recs);
3362
3354
  focusByKey = sum.byKey;
3363
3355
  peerTotal = sum.total;
3364
- paintPeersBadge();
3356
+ updateSummary();
3365
3357
  renderList();
3366
3358
  }
3367
- // "N peers" badge beside the agent counter. Yellow when a peer shares the
3368
- // agent you have open ("same agent"); its tooltip breaks the count down by
3369
- // agent so you can see who's where. Hidden when you're the only one here.
3370
- function paintPeersBadge() {
3371
- const el = $("peers");
3359
+ // The ONE consolidated fleet summary in the header, replacing the separate
3360
+ // agent-count and "N peers" badges: "<shown>/<total> agents" plus, only when
3361
+ // relevant, R rooms" (multi-room fleets) and 👤 P" (other humans here).
3362
+ // Yellow ("here") when a peer shares the agent you have open; the tooltip
3363
+ // breaks the peer count down by agent so you can see who's where. Called both
3364
+ // from renderList (agent list changed) and on presence updates (peers).
3365
+ function updateSummary() {
3366
+ const el = $("count");
3372
3367
  if (!el) return;
3373
- if (!peerTotal) {
3374
- el.hidden = true;
3368
+ const rooms = new Set(entries.filter((e) => e._room).map((e) => e._room)).size;
3369
+ let s = `${shownAgentCount} / ${entries.length} agents`;
3370
+ if (rooms > 1) s += ` · ${rooms} rooms`;
3371
+ if (peerTotal > 0) s += ` · 👤 ${peerTotal}`;
3372
+ el.textContent = s;
3373
+ el.classList.toggle("here", !!(sel && focusByKey.get(sel)));
3374
+ if (peerTotal > 0) {
3375
+ const lines = [...focusByKey.entries()].map(([k, n]) => {
3376
+ const e = entries.find((x) => x._key === k);
3377
+ const name = e ? e.title || cliLabel(e) || ident(e) || `pid ${e.pid}` : k;
3378
+ return ` ${n} on ${name}`;
3379
+ });
3380
+ el.title = "peers watching agents in this fleet:\n" + lines.join("\n");
3381
+ } else {
3375
3382
  el.removeAttribute("title");
3376
- return;
3377
3383
  }
3378
- el.hidden = false;
3379
- el.textContent = `👤 ${peerTotal} peer${peerTotal === 1 ? "" : "s"}`;
3380
- el.classList.toggle("here", !!(sel && focusByKey.get(sel)));
3381
- const lines = [...focusByKey.entries()].map(([k, n]) => {
3382
- const e = entries.find((x) => x._key === k);
3383
- const name = e ? e.title || cliLabel(e) || ident(e) || `pid ${e.pid}` : k;
3384
- return ` ${n} on ${name}`;
3385
- });
3386
- el.title = "peers watching agents in this fleet:\n" + lines.join("\n");
3387
3384
  }
3388
3385
  // 3s heartbeat (< the host's 12s TTL): refresh our presence + read others',
3389
3386
  // and follow the canonical grid size (resize+scale, never reflow) so all
@@ -4704,8 +4701,9 @@
4704
4701
  s.streaming = false;
4705
4702
  }
4706
4703
 
4707
- // Compact list: one line per agent (dot + cli + title), persisted per device.
4708
- let compactList = localStorage.getItem("ay.compactList") === "1";
4704
+ // Compact list is now the ONLY list view (one line per agent: dot + cli +
4705
+ // title). The toggle button was removed — compact is always on.
4706
+ const compactList = true;
4709
4707
 
4710
4708
  // Fold subagent trees: hide nested (sub)agent rows and roll each root's
4711
4709
  // hidden descendants into a summary chip. Folded BY DEFAULT (only "0" opts
@@ -4894,11 +4892,10 @@
4894
4892
  const rows = foldSubs
4895
4893
  ? fullRows.filter((r) => !(r.kind === "agent" && r.parentEntry))
4896
4894
  : fullRows;
4897
- $("count").textContent = `${agentRows.length} / ${entries.length} agents`;
4898
- paintPeersBadge(); // keep the peers badge in step with sel / the entry list
4895
+ shownAgentCount = agentRows.length;
4896
+ updateSummary(); // one consolidated "agents · rooms · peers" badge
4899
4897
  $("foldbtn").textContent = foldSubs ? "⊞ subs" : "⊟ subs";
4900
4898
  $("foldbtn").classList.toggle("on", !foldSubs);
4901
- $("viewbtn").classList.toggle("on", compactList);
4902
4899
  // Show the active sort mode on the button so it's self-documenting; the
4903
4900
  // default ("state") is also highlighted to hint it's the implicit order.
4904
4901
  $("sortbtn").textContent = `⇅ ${sortMode}`;
@@ -5035,25 +5032,22 @@
5035
5032
  // the new mtime, so a silent `ay send` still trips the flash within ~1s.
5036
5033
  const until = Date.now() + STDIN_FLASH_MS;
5037
5034
  for (const k of advanceStdinFlashes(entries, stdinSeen)) flashUntil.set(k, until);
5038
- // Badge: total agents + how many rooms are live. Red only when nothing
5039
- // at all is reachable (no source answered).
5040
- // Count ROOMS, not machines a codehost room with three machines is still
5041
- // one room, and it can be connecting before any machine has appeared.
5035
+ // Connection-status badge ONLY (dot + state). The agent/room/peer COUNTS
5036
+ // live in one place now the #count summary on the left — so this badge no
5037
+ // longer repeats them; it just shows liveness and stays the rooms-manager
5038
+ // click target (see its title). Red only when nothing is reachable.
5042
5039
  const roomSrcs = srcs.filter((s) => s.id !== LOCAL);
5043
- const liveRooms = new Set(roomSrcs.filter((s) => s.live).map((s) => s.room || s.id)).size;
5044
5040
  const anyLive = srcs.some((s) => s.live);
5045
5041
  const connecting =
5046
5042
  roomSrcs.some((s) => !s.tried) || [...chRooms.values()].some((r) => !r.tried);
5047
5043
  const roomCount = roomSrcs.length || chRooms.size;
5048
- const n = entries.length;
5049
5044
  if (!srcs.length && !chRooms.size) {
5050
5045
  setConn("● no fleet", "var(--muted)");
5051
5046
  } else if (!anyLive) {
5052
5047
  if (connecting) setConn("● connecting…", "var(--amber)");
5053
5048
  else setConn(roomCount ? "● rooms offline" : "● ay serve down", "var(--red)");
5054
5049
  } else {
5055
- const roomBit = liveRooms ? ` · ${liveRooms} room${liveRooms === 1 ? "" : "s"}` : "";
5056
- setConn(`● ${n} agent${n === 1 ? "" : "s"}${roomBit}`, "var(--green)");
5050
+ setConn(" live", "var(--green)");
5057
5051
  }
5058
5052
  renderRoomsIfOpen();
5059
5053
  renderList();
@@ -5456,11 +5450,6 @@
5456
5450
  } catch {}
5457
5451
  renderList();
5458
5452
  });
5459
- $("viewbtn").addEventListener("click", () => {
5460
- compactList = !compactList;
5461
- localStorage.setItem("ay.compactList", compactList ? "1" : "0");
5462
- renderList();
5463
- });
5464
5453
  // Fold / unfold every subagent tree (global toggle, persisted per device).
5465
5454
  $("foldbtn").addEventListener("click", () => {
5466
5455
  foldSubs = !foldSubs;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-yes",
3
- "version": "1.207.0",
3
+ "version": "1.209.0",
4
4
  "description": "A wrapper tool that automates interactions with various AI CLI tools by automatically handling common prompts and responses.",
5
5
  "keywords": [
6
6
  "ai",
package/ts/serve.ts CHANGED
@@ -1885,7 +1885,11 @@ export async function cmdServe(rest: string[]): Promise<number> {
1885
1885
  const negoTimers = new Map<number, ReturnType<typeof setTimeout>>();
1886
1886
  const NEGO_DEBOUNCE_MS = 350;
1887
1887
  const winsizePathFor = (pid: number) =>
1888
- path.join(process.env.AGENT_YES_HOME ?? path.join(homedir(), ".agent-yes"), "winsize", String(pid));
1888
+ path.join(
1889
+ process.env.AGENT_YES_HOME ?? path.join(homedir(), ".agent-yes"),
1890
+ "winsize",
1891
+ String(pid),
1892
+ );
1889
1893
  const liveCapsFor = (pid: number): SizeCap[] => {
1890
1894
  const now = Date.now();
1891
1895
  const caps: SizeCap[] = [];
@@ -1,10 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import {
3
- NEGO_FLOOR_COLS,
4
- NEGO_FLOOR_ROWS,
5
- negotiateSize,
6
- sanitizeCap,
7
- } from "./sizeNego.ts";
2
+ import { NEGO_FLOOR_COLS, NEGO_FLOOR_ROWS, negotiateSize, sanitizeCap } from "./sizeNego.ts";
8
3
 
9
4
  describe("sanitizeCap", () => {
10
5
  it("accepts a normal viewer capacity", () => {
@@ -1,9 +0,0 @@
1
- import "./ts-DZWZvbLM.js";
2
- import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-C2CV9VOX.js";
4
- import "./pidStore-BIvsBQ8X.js";
5
- import "./globalPidIndex-CoNr7tS8.js";
6
- import "./messageLog-CxrKJj77.js";
7
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-B1CDJwYn.js";
8
-
9
- export { SUPPORTED_CLIS };