agent-yes 1.294.0 → 1.294.1-beta.750.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 (31) hide show
  1. package/dist/{SUPPORTED_CLIS-CPXyE9Tg.js → SUPPORTED_CLIS-BmFucl40.js} +3 -3
  2. package/dist/{SUPPORTED_CLIS-BxxxYx1J.js → SUPPORTED_CLIS-CNaOWQr6.js} +2 -2
  3. package/dist/{agentShare-BXg5zEtW.js → agentShare-DpJrxWI4.js} +2 -2
  4. package/dist/{callback-TqS7f7-H.js → callback-CnzT3sMS.js} +2 -2
  5. package/dist/{callback-MneknqcS.js → callback-D6FLQ5IG.js} +3 -3
  6. package/dist/cli.js +5 -5
  7. package/dist/{cmdPs-BwDyVmFi.js → cmdPs-CCb6aiqJ.js} +2 -2
  8. package/dist/index.js +2 -2
  9. package/dist/{notifyDaemon-lY7jeQcF.js → notifyDaemon-CudyV-xk.js} +2 -2
  10. package/dist/{parentPingLoop-BNk9bmkL.js → parentPingLoop-DGmjbTGW.js} +2 -2
  11. package/dist/{rustBinary-Wh9kNpga.js → rustBinary-BDWTBHNk.js} +2 -2
  12. package/dist/{rustBinary-DsxZnwXj.js → rustBinary-D9LImHwC.js} +2 -2
  13. package/dist/{schedule-yMAymlHZ.js → schedule-73un4lz8.js} +4 -4
  14. package/dist/{serve-Cn6LTsO5.js → serve-HzPmrkoQ.js} +40 -18
  15. package/dist/{setup-DAKtsxiB.js → setup-D8HSFVS-.js} +2 -2
  16. package/dist/{subcommands-CyhuIreR.js → subcommands-CJaf5iJ8.js} +15 -15
  17. package/dist/{subcommands-CE0EOwno.js → subcommands-DPKTGX1I.js} +1 -1
  18. package/dist/{terminal-D7G7Ngnj.js → terminal-CjP9waBm.js} +2 -2
  19. package/dist/{trayApp-C77uhW1i.js → trayApp-ClgnrIyz.js} +2 -2
  20. package/dist/trayApp-D8mtC2nX.js +5 -0
  21. package/dist/{ts-DYKrhLtc.js → ts-D--BjWeq.js} +3 -3
  22. package/dist/{versionChecker-CqaWZAm0.js → versionChecker-DQtvrPml.js} +2 -2
  23. package/dist/{widget-D2sc3bde.js → widget-CAGGIsmN.js} +3 -3
  24. package/dist/{ws-ClgsUOJu.js → ws-BOHUpXom.js} +2 -2
  25. package/dist/{ws-Dsu27GmE.js → ws-iBBgfNlr.js} +2 -2
  26. package/lab/ui/console-logic.js +73 -7
  27. package/lab/ui/index.html +17 -9
  28. package/package.json +1 -1
  29. package/ts/serve.spec.ts +26 -3
  30. package/ts/serve.ts +31 -0
  31. package/dist/trayApp-i6201tMp.js +0 -5
@@ -1,12 +1,12 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CqaWZAm0.js";
3
- import "./ts-DYKrhLtc.js";
2
+ import "./versionChecker-DQtvrPml.js";
3
+ import "./ts-D--BjWeq.js";
4
4
  import "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-CRH9L9tn.js";
7
7
  import "./pidStore-DXWqzTSz.js";
8
8
  import "./messageLog-Brx3w6zT.js";
9
9
  import "./todoStore-DF6vxHgV.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BxxxYx1J.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CNaOWQr6.js";
11
11
 
12
12
  export { SUPPORTED_CLIS };
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts-DYKrhLtc.js";
1
+ import { t as CLIS_CONFIG } from "./ts-D--BjWeq.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-BxxxYx1J.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-CNaOWQr6.js.map
@@ -5,7 +5,7 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import { J as resolveOne } from "./subcommands-CyhuIreR.js";
8
+ import { J as resolveOne } from "./subcommands-CJaf5iJ8.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
11
  import "./remotes-5P__pAXA.js";
@@ -232,4 +232,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
232
232
 
233
233
  //#endregion
234
234
  export { createScopedShare, listShares, revokeAllShares, revokeShare };
235
- //# sourceMappingURL=agentShare-BXg5zEtW.js.map
235
+ //# sourceMappingURL=agentShare-DpJrxWI4.js.map
@@ -5,11 +5,11 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import "./subcommands-CyhuIreR.js";
8
+ import "./subcommands-CJaf5iJ8.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
11
  import "./remotes-5P__pAXA.js";
12
12
  import "./callbackCore-Bl2gGcxg.js";
13
- import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-MneknqcS.js";
13
+ import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-D6FLQ5IG.js";
14
14
 
15
15
  export { cmdCallback };
@@ -1,5 +1,5 @@
1
1
  import { t as agentYesHome } from "./agentYesHome-BNtn19J4.js";
2
- import { J as resolveOne } from "./subcommands-CyhuIreR.js";
2
+ import { J as resolveOne } from "./subcommands-CJaf5iJ8.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-Cn6LTsO5.js");
75
+ const { resolveLocalServeUrl } = await import("./serve-HzPmrkoQ.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-MneknqcS.js.map
190
+ //# sourceMappingURL=callback-D6FLQ5IG.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-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-CqaWZAm0.js";
5
- import { d as getRustBinary } from "./rustBinary-Wh9kNpga.js";
4
+ import { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-DQtvrPml.js";
5
+ import { d as getRustBinary } from "./rustBinary-BDWTBHNk.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-CE0EOwno.js");
298
+ const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-DPKTGX1I.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-CPXyE9Tg.js");
312
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-BmFucl40.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-CPXyE9Tg.js");
363
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-BmFucl40.js");
364
364
  const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
365
365
  if (config.verbose) {
366
366
  console.log(`[rust] Using binary: ${rustBinary}`);
@@ -5,7 +5,7 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import { F as listRecords, dt as buildAgentForest, ft as flattenForest, h as deriveLiveState } from "./subcommands-CyhuIreR.js";
8
+ import { F as listRecords, dt as buildAgentForest, ft as flattenForest, h as deriveLiveState } from "./subcommands-CJaf5iJ8.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
11
  import "./remotes-5P__pAXA.js";
@@ -330,4 +330,4 @@ function readPpidSync(pid) {
330
330
 
331
331
  //#endregion
332
332
  export { cmdPs };
333
- //# sourceMappingURL=cmdPs-BwDyVmFi.js.map
333
+ //# sourceMappingURL=cmdPs-CCb6aiqJ.js.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CqaWZAm0.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-DYKrhLtc.js";
2
+ import "./versionChecker-DQtvrPml.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-D--BjWeq.js";
4
4
  import { a as renderTree, c as describeBlock, i as renderDigest, l as monitorHint, o as unblockedTasks, r as openBlockers, t as reconcileTodos, u as removeControlCharacters } from "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-CRH9L9tn.js";
@@ -5,7 +5,7 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import { D as isPidAlive, F as listRecords, G as renderLogTailLines, h as deriveLiveState } from "./subcommands-CyhuIreR.js";
8
+ import { D as isPidAlive, F as listRecords, G as renderLogTailLines, h as deriveLiveState } from "./subcommands-CJaf5iJ8.js";
9
9
  import { f as readInbox, g as daemonLockOwnerPath, h as daemonLockDir, i as gcInboxes, l as listInboxParents, m as shouldStealLock, n as appendEvent, s as hostId, u as liveWatchers, x as notifyDir } from "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
11
  import "./remotes-5P__pAXA.js";
@@ -879,4 +879,4 @@ async function ensureDaemon() {
879
879
 
880
880
  //#endregion
881
881
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
882
- //# sourceMappingURL=notifyDaemon-lY7jeQcF.js.map
882
+ //# sourceMappingURL=notifyDaemon-CudyV-xk.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-CE0EOwno.js");
341
+ const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-DPKTGX1I.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-BNk9bmkL.js.map
469
+ //# sourceMappingURL=parentPingLoop-DGmjbTGW.js.map
@@ -1,4 +1,4 @@
1
- import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-CqaWZAm0.js";
1
+ import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-DQtvrPml.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";
@@ -344,4 +344,4 @@ async function getRustBinary(options = {}) {
344
344
 
345
345
  //#endregion
346
346
  export { findSpawnHiddenLauncher as a, getBinDir as c, getRustBinary as d, findRustBinary as i, getBinaryName as l, downloadBinary as n, findTrayLauncher as o, findAyrsBinary as r, gcOldBinaryDirs as s, devBuildInfo as t, getDownloadUrl as u };
347
- //# sourceMappingURL=rustBinary-Wh9kNpga.js.map
347
+ //# sourceMappingURL=rustBinary-BDWTBHNk.js.map
@@ -1,4 +1,4 @@
1
- import "./versionChecker-CqaWZAm0.js";
2
- import { a as findSpawnHiddenLauncher, c as getBinDir, d as getRustBinary, i as findRustBinary, l as getBinaryName, n as downloadBinary, o as findTrayLauncher, r as findAyrsBinary, s as gcOldBinaryDirs, t as devBuildInfo, u as getDownloadUrl } from "./rustBinary-Wh9kNpga.js";
1
+ import "./versionChecker-DQtvrPml.js";
2
+ import { a as findSpawnHiddenLauncher, c as getBinDir, d as getRustBinary, i as findRustBinary, l as getBinaryName, n as downloadBinary, o as findTrayLauncher, r as findAyrsBinary, s as gcOldBinaryDirs, t as devBuildInfo, u as getDownloadUrl } from "./rustBinary-BDWTBHNk.js";
3
3
 
4
4
  export { findAyrsBinary, gcOldBinaryDirs };
@@ -1,13 +1,13 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CqaWZAm0.js";
3
- import "./ts-DYKrhLtc.js";
2
+ import "./versionChecker-DQtvrPml.js";
3
+ import "./ts-D--BjWeq.js";
4
4
  import "./todoAutomation-CbVVS4re.js";
5
5
  import "./JsonlStore-BqF7AQ6E.js";
6
6
  import "./globalPidIndex-CRH9L9tn.js";
7
7
  import "./pidStore-DXWqzTSz.js";
8
8
  import "./messageLog-Brx3w6zT.js";
9
9
  import "./todoStore-DF6vxHgV.js";
10
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BxxxYx1J.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CNaOWQr6.js";
11
11
  import { f as resolveSpawnCwd } from "./workspaceConfig-DTvPtr5j.js";
12
12
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-CipjIwfO.js";
13
13
  import { createHash } from "node:crypto";
@@ -154,4 +154,4 @@ async function cmdSchedule(rest) {
154
154
 
155
155
  //#endregion
156
156
  export { cmdSchedule };
157
- //# sourceMappingURL=schedule-yMAymlHZ.js.map
157
+ //# sourceMappingURL=schedule-73un4lz8.js.map
@@ -1,7 +1,7 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import { i as getInstalledPackage } from "./versionChecker-CqaWZAm0.js";
3
- import { a as findSpawnHiddenLauncher } from "./rustBinary-Wh9kNpga.js";
4
- import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-DYKrhLtc.js";
2
+ import { i as getInstalledPackage } from "./versionChecker-DQtvrPml.js";
3
+ import { a as findSpawnHiddenLauncher } from "./rustBinary-BDWTBHNk.js";
4
+ import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-D--BjWeq.js";
5
5
  import { t as agentYesHome$1 } from "./agentYesHome-BNtn19J4.js";
6
6
  import { u as removeControlCharacters } from "./todoAutomation-CbVVS4re.js";
7
7
  import "./JsonlStore-BqF7AQ6E.js";
@@ -12,19 +12,19 @@ import { t as pgidForWrapper } from "./reaper-UimuuTfO.js";
12
12
  import "./todoStore-DF6vxHgV.js";
13
13
  import "./e2e-z1xpwSAg.js";
14
14
  import "./configShared-DKTgiz7K.js";
15
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BxxxYx1J.js";
16
- import { B as readLogForRender, F as listRecords, G as renderLogTailLines, H as readPtysize, J as resolveOne, K as renderRawLog, M as isUserTyping, O as isSlashCommand, S as extractTaskCounts, U as recentMessageEdges, V as readNotes, W as recentReadEdges, ct as framePaste, et as snapshotStatus, g as deriveLiveStatus, lt as shouldFramePaste, ot as writeToIpc, p as controlCodeFromName, q as renderRawLogLines, st as withIpcLock, u as cliDefaults, ut as TYPING_BADGE, x as extractNeedsInput, y as extractBadges } from "./subcommands-CyhuIreR.js";
15
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CNaOWQr6.js";
16
+ import { B as readLogForRender, F as listRecords, G as renderLogTailLines, H as readPtysize, J as resolveOne, K as renderRawLog, M as isUserTyping, O as isSlashCommand, S as extractTaskCounts, U as recentMessageEdges, V as readNotes, W as recentReadEdges, ct as framePaste, et as snapshotStatus, g as deriveLiveStatus, lt as shouldFramePaste, ot as writeToIpc, p as controlCodeFromName, q as renderRawLogLines, st as withIpcLock, u as cliDefaults, ut as TYPING_BADGE, x as extractNeedsInput, y as extractBadges } from "./subcommands-CJaf5iJ8.js";
17
17
  import { c as isTransientLockMkdirError } from "./notifyStore-2SWKGwZI.js";
18
18
  import { i as toWebrtcUrl, n as isWebrtcSpec } from "./webrtcLink-CnQf9pmu.js";
19
19
  import "./remotes-5P__pAXA.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-MneknqcS.js";
21
+ import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-D6FLQ5IG.js";
22
22
  import { n as sampleTrees } from "./procStats-CyD8h5nx.js";
23
23
  import { a as getProvisionRoot, d as isProvisionAllowed, f as resolveSpawnCwd, i as getProvisionHook, l as hasProvisionHook, o as getSpawnHook, t as allowsSkipPermissions, u as hasSpawnHook } from "./workspaceConfig-DTvPtr5j.js";
24
24
  import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-CipjIwfO.js";
25
- import { i as importProvisionModule } from "./ws-ClgsUOJu.js";
25
+ import { i as importProvisionModule } from "./ws-BOHUpXom.js";
26
26
  import { r as spawnRejectionReason } from "./spawnGate-YpHopveO.js";
27
- import { i as launchTray } from "./trayApp-C77uhW1i.js";
27
+ import { i as launchTray } from "./trayApp-ClgnrIyz.js";
28
28
  import yargs from "yargs";
29
29
  import { appendFile, mkdir, open, readFile, readdir, rename, rm, stat, unlink, writeFile } from "fs/promises";
30
30
  import { arch, cpus, freemem, homedir, hostname, loadavg, platform, totalmem, uptime, userInfo } from "os";
@@ -1516,6 +1516,22 @@ async function cmdServeDaemon(sub, args) {
1516
1516
  }).exited ?? 1;
1517
1517
  return 1;
1518
1518
  }
1519
+ /**
1520
+ * Content type for a `/vendor/<name>` console asset, or null when `name` is not
1521
+ * one we ship. The set is the exact list index.html loads (see lab/ui/vendor/
1522
+ * and #317): a request for anything else — a traversal attempt, a stray file
1523
+ * in the directory — is a 404, never a read.
1524
+ */
1525
+ function vendorAssetType(name) {
1526
+ switch (name) {
1527
+ case "xterm.min.css": return "text/css; charset=utf-8";
1528
+ case "xterm.min.js":
1529
+ case "addon-fit.min.js":
1530
+ case "addon-web-links.min.js":
1531
+ case "addon-clipboard.min.js": return "text/javascript; charset=utf-8";
1532
+ default: return null;
1533
+ }
1534
+ }
1519
1535
  function shareLinkStatus(shareLink, installed, webrtcish) {
1520
1536
  if (!shareLink) return {
1521
1537
  link: null,
@@ -1655,7 +1671,7 @@ Options:
1655
1671
  const { planRustServe } = await import("./serveRust-DDQiZmMf.js");
1656
1672
  const plan = planRustServe(rest);
1657
1673
  if (plan.kind === "rust") {
1658
- const { findAyrsBinary } = await import("./rustBinary-DsxZnwXj.js");
1674
+ const { findAyrsBinary } = await import("./rustBinary-D9LImHwC.js");
1659
1675
  const ayrs = findAyrsBinary();
1660
1676
  if (ayrs) return runAyrsServe(ayrs, plan.argv);
1661
1677
  process.stderr.write("ay serve: ayrs binary not found — running the TypeScript server (bun run build:rs, or reinstall, to get the Rust daemon)\n");
@@ -2630,7 +2646,7 @@ Options:
2630
2646
  }
2631
2647
  });
2632
2648
  if (req.method === "GET" && p === "/api/ws") {
2633
- const ws = await import("./ws-Dsu27GmE.js");
2649
+ const ws = await import("./ws-iBBgfNlr.js");
2634
2650
  try {
2635
2651
  await ws.loadProvision();
2636
2652
  } catch (e) {
@@ -2650,7 +2666,7 @@ Options:
2650
2666
  if (req.method === "GET" && p === "/api/ws/status") {
2651
2667
  const dirRaw = url.searchParams.get("path");
2652
2668
  if (!dirRaw) return new Response("missing ?path=<workspace dir>", { status: 400 });
2653
- const ws = await import("./ws-Dsu27GmE.js");
2669
+ const ws = await import("./ws-iBBgfNlr.js");
2654
2670
  let prov;
2655
2671
  try {
2656
2672
  prov = await ws.loadProvision();
@@ -2672,7 +2688,7 @@ Options:
2672
2688
  }
2673
2689
  }
2674
2690
  if (req.method === "GET" && p === "/api/ws/repos") {
2675
- const ws = await import("./ws-Dsu27GmE.js");
2691
+ const ws = await import("./ws-iBBgfNlr.js");
2676
2692
  try {
2677
2693
  await ws.loadProvision();
2678
2694
  } catch (e) {
@@ -2753,7 +2769,7 @@ Options:
2753
2769
  const m = /^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/.exec(repoParam);
2754
2770
  if (!m || m[1] === "." || m[1] === ".." || m[2] === "." || m[2] === "..") return new Response("missing/invalid ?repo=<owner>/<repo>", { status: 400 });
2755
2771
  const [, owner, repo] = m;
2756
- const ws = await import("./ws-Dsu27GmE.js");
2772
+ const ws = await import("./ws-iBBgfNlr.js");
2757
2773
  let prov;
2758
2774
  try {
2759
2775
  prov = await ws.loadProvision();
@@ -3671,7 +3687,7 @@ Options:
3671
3687
  const perm = body.perm ?? "r";
3672
3688
  if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
3673
3689
  try {
3674
- const { createScopedShare } = await import("./agentShare-BXg5zEtW.js");
3690
+ const { createScopedShare } = await import("./agentShare-DpJrxWI4.js");
3675
3691
  const share = await createScopedShare({
3676
3692
  agent: body.agent,
3677
3693
  perm,
@@ -3686,12 +3702,12 @@ Options:
3686
3702
  }
3687
3703
  }
3688
3704
  if (req.method === "GET" && p === "/api/shares") {
3689
- const { listShares } = await import("./agentShare-BXg5zEtW.js");
3705
+ const { listShares } = await import("./agentShare-DpJrxWI4.js");
3690
3706
  return Response.json(listShares());
3691
3707
  }
3692
3708
  const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
3693
3709
  if (req.method === "DELETE" && revokeM) {
3694
- const { revokeShare } = await import("./agentShare-BXg5zEtW.js");
3710
+ const { revokeShare } = await import("./agentShare-DpJrxWI4.js");
3695
3711
  const ok = revokeShare(decodeURIComponent(revokeM[1]));
3696
3712
  return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
3697
3713
  }
@@ -3843,6 +3859,12 @@ Options:
3843
3859
  if (req.method === "GET" && p === "/sw.js") return serveUiFile("sw.js", "text/javascript; charset=utf-8");
3844
3860
  if (req.method === "GET" && p === "/manifest.webmanifest") return serveUiFile("manifest.webmanifest", "application/manifest+json");
3845
3861
  if (req.method === "GET" && p === "/icon.svg") return serveUiFile("icon.svg", "image/svg+xml");
3862
+ if (req.method === "GET" && p.startsWith("/vendor/")) {
3863
+ const name = p.slice(8);
3864
+ const type = vendorAssetType(name);
3865
+ if (type) return serveUiFile(`vendor/${name}`, type);
3866
+ return new Response("not found", { status: 404 });
3867
+ }
3846
3868
  if (req.method === "GET" && p === "/favicon.ico") return new Response(null, { status: 204 });
3847
3869
  if (p.startsWith("/cb/")) return handleCallback(req, p);
3848
3870
  return withTermCors(req, await apiFetch(req, srv));
@@ -3997,7 +4019,7 @@ Options:
3997
4019
  const shutdown = (resolve) => {
3998
4020
  if (heartbeat) clearInterval(heartbeat);
3999
4021
  closeShare?.();
4000
- import("./agentShare-BXg5zEtW.js").then((m) => m.revokeAllShares()).catch(() => {});
4022
+ import("./agentShare-DpJrxWI4.js").then((m) => m.revokeAllShares()).catch(() => {});
4001
4023
  server?.stop();
4002
4024
  Promise.resolve(releaseHostLock?.()).catch(() => {}).then(resolve);
4003
4025
  };
@@ -4010,4 +4032,4 @@ Options:
4010
4032
 
4011
4033
  //#endregion
4012
4034
  export { cmdServe, loadTokenReadOnly, mintScopedTermToken, resolveDaemonHttpBase, resolveLocalServeUrl };
4013
- //# sourceMappingURL=serve-Cn6LTsO5.js.map
4035
+ //# sourceMappingURL=serve-HzPmrkoQ.js.map
@@ -97,7 +97,7 @@ async function cmdSetup(rest) {
97
97
  } catch {}
98
98
  if (noShare) return 0;
99
99
  process.stdout.write(`\nsharing this machine to agent-yes.com…\n`);
100
- const { cmdServe } = await import("./serve-Cn6LTsO5.js");
100
+ const { cmdServe } = await import("./serve-HzPmrkoQ.js");
101
101
  return cmdServe([
102
102
  "install",
103
103
  "--share",
@@ -107,4 +107,4 @@ async function cmdSetup(rest) {
107
107
 
108
108
  //#endregion
109
109
  export { cmdSetup };
110
- //# sourceMappingURL=setup-DAKtsxiB.js.map
110
+ //# sourceMappingURL=setup-D8HSFVS-.js.map
@@ -1546,7 +1546,7 @@ async function runSubcommand(argv) {
1546
1546
  switch (sub) {
1547
1547
  case "ls":
1548
1548
  case "list": return await cmdLs(rest);
1549
- case "ps": return await (await import("./cmdPs-BwDyVmFi.js")).cmdPs(rest);
1549
+ case "ps": return await (await import("./cmdPs-CCb6aiqJ.js")).cmdPs(rest);
1550
1550
  case "status": return await cmdStatus(rest);
1551
1551
  case "whoami": return await cmdWhoami(rest);
1552
1552
  case "result": return await cmdResult(rest);
@@ -1593,35 +1593,35 @@ async function runSubcommand(argv) {
1593
1593
  return cmdCh(rest);
1594
1594
  }
1595
1595
  case "term": {
1596
- const { cmdTerm } = await import("./terminal-D7G7Ngnj.js");
1596
+ const { cmdTerm } = await import("./terminal-CjP9waBm.js");
1597
1597
  return cmdTerm(rest);
1598
1598
  }
1599
1599
  case "widget": {
1600
- const { cmdWidget } = await import("./widget-D2sc3bde.js");
1600
+ const { cmdWidget } = await import("./widget-CAGGIsmN.js");
1601
1601
  return cmdWidget(rest);
1602
1602
  }
1603
1603
  case "mint": {
1604
- const { cmdMint } = await import("./widget-D2sc3bde.js");
1604
+ const { cmdMint } = await import("./widget-CAGGIsmN.js");
1605
1605
  return cmdMint(rest);
1606
1606
  }
1607
1607
  case "serve": {
1608
- const { cmdServe } = await import("./serve-Cn6LTsO5.js");
1608
+ const { cmdServe } = await import("./serve-HzPmrkoQ.js");
1609
1609
  return cmdServe(rest);
1610
1610
  }
1611
1611
  case "tray": {
1612
- const { cmdTray } = await import("./trayApp-i6201tMp.js");
1612
+ const { cmdTray } = await import("./trayApp-D8mtC2nX.js");
1613
1613
  return cmdTray(rest);
1614
1614
  }
1615
1615
  case "setup": {
1616
- const { cmdSetup } = await import("./setup-DAKtsxiB.js");
1616
+ const { cmdSetup } = await import("./setup-D8HSFVS-.js");
1617
1617
  return cmdSetup(rest);
1618
1618
  }
1619
1619
  case "ws": {
1620
- const { cmdWs } = await import("./ws-Dsu27GmE.js");
1620
+ const { cmdWs } = await import("./ws-iBBgfNlr.js");
1621
1621
  return cmdWs(rest);
1622
1622
  }
1623
1623
  case "schedule": {
1624
- const { cmdSchedule } = await import("./schedule-yMAymlHZ.js");
1624
+ const { cmdSchedule } = await import("./schedule-73un4lz8.js");
1625
1625
  return cmdSchedule(rest);
1626
1626
  }
1627
1627
  case "remote": {
@@ -1633,7 +1633,7 @@ async function runSubcommand(argv) {
1633
1633
  return cmdExpose(rest);
1634
1634
  }
1635
1635
  case "callback": {
1636
- const { cmdCallback } = await import("./callback-TqS7f7-H.js");
1636
+ const { cmdCallback } = await import("./callback-CnzT3sMS.js");
1637
1637
  return cmdCallback(rest);
1638
1638
  }
1639
1639
  case "reap":
@@ -1644,7 +1644,7 @@ async function runSubcommand(argv) {
1644
1644
  return await cmdDsh(rest);
1645
1645
  }
1646
1646
  case "gc": {
1647
- const { gcOldBinaryDirs } = await import("./rustBinary-DsxZnwXj.js");
1647
+ const { gcOldBinaryDirs } = await import("./rustBinary-D9LImHwC.js");
1648
1648
  const { gcLogs } = await import("./globalPidIndex-DC93JhHQ.js");
1649
1649
  const bins = gcOldBinaryDirs();
1650
1650
  const logs = await gcLogs();
@@ -4351,7 +4351,7 @@ async function cmdAttach(rest) {
4351
4351
  const winsizeDir = path.join(ayHome, "winsize");
4352
4352
  await mkdir(winsizeDir, { recursive: true });
4353
4353
  const winsizePath = path.join(winsizeDir, String(record.pid));
4354
- const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-Cn6LTsO5.js");
4354
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-HzPmrkoQ.js");
4355
4355
  const daemonBase = await resolveDaemonHttpBase().catch(() => null);
4356
4356
  const daemonToken = daemonBase ? await loadTokenReadOnly().catch(() => null) ?? "" : "";
4357
4357
  const capViewer = `attach:${process.pid}`;
@@ -5078,7 +5078,7 @@ async function cmdNotify(rest) {
5078
5078
  }
5079
5079
  const ensure = async () => {
5080
5080
  if (!argv["ensure-daemon"]) return;
5081
- const { ensureDaemon } = await import("./notifyDaemon-lY7jeQcF.js");
5081
+ const { ensureDaemon } = await import("./notifyDaemon-CudyV-xk.js");
5082
5082
  await ensureDaemon().catch(() => null);
5083
5083
  };
5084
5084
  await heartbeatWatcher(parent, selfStartedAt);
@@ -5152,7 +5152,7 @@ async function cmdNotifyCursor(args) {
5152
5152
  }
5153
5153
  async function cmdNotifyd(rest) {
5154
5154
  const sub = rest[0] ?? "status";
5155
- const daemon = await import("./notifyDaemon-lY7jeQcF.js");
5155
+ const daemon = await import("./notifyDaemon-CudyV-xk.js");
5156
5156
  switch (sub) {
5157
5157
  case "run": return daemon.runDaemon();
5158
5158
  case "once": return daemon.runDaemon({ once: true });
@@ -5179,4 +5179,4 @@ async function cmdNotifyd(rest) {
5179
5179
 
5180
5180
  //#endregion
5181
5181
  export { sendPayloadCapError as $, isUnknownManagerToken as A, readLogForRender as B, finalizedLines as C, isPidAlive as D, isExitRequest as E, listRecords as F, renderLogTailLines as G, readPtysize as H, matchKeyword as I, resolveOne as J, renderRawLog as K, menuSelectKeys as L, isUserTyping as M, lastReadAt as N, isSlashCommand as O, lastStdinAt as P, runSubcommand as Q, probeStdinReachable as R, extractTaskCounts as S, isBareManagerInvocation as T, recentMessageEdges as U, readNotes as V, recentReadEdges as W, resolveResumeArgs as X, resolveReadWindow as Y, restartHintLines as Z, envelopeAttribution as _, SEND_BODY_MAX_CHARS as a, writeKeysPaced as at, extractMenu as b, backoffWhileTyping as c, framePaste as ct, cmdHelp as d, buildAgentForest as dt, snapshotStatus as et, confirmStdinUnreachable as f, flattenForest as ft, deriveLiveStatus as g, deriveLiveState as h, READ_WINDOW_MS as i, waitForLogQuiet as it, isUnreachableWriteErrno as j, isSubcommand as k, buildEnvelope as l, shouldFramePaste as lt, cursorAbs as m, MAX_RENDER_BYTES as n, stopTipForCli as nt, SEND_EXIT_UNREACHABLE as o, writeToIpc as ot, controlCodeFromName as p, renderRawLogLines as q, READ_PAGE_DEFAULT as r, submitAndConfirm as rt, TYPING_WINDOW_MS as s, withIpcLock as st, GRACEFUL_EXIT_COMMANDS as t, stdinActivityPath as tt, cliDefaults as u, TYPING_BADGE as ut, envelopeCostFor as v, isAgentStuck as w, extractNeedsInput as x, extractBadges as y, readAgentPtysize as z };
5182
- //# sourceMappingURL=subcommands-CyhuIreR.js.map
5182
+ //# sourceMappingURL=subcommands-CJaf5iJ8.js.map
@@ -5,7 +5,7 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import { $ as sendPayloadCapError, A as isUnknownManagerToken, B as readLogForRender, C as finalizedLines, D as isPidAlive, E as isExitRequest, F as listRecords, G as renderLogTailLines, H as readPtysize, I as matchKeyword, J as resolveOne, K as renderRawLog, L as menuSelectKeys, M as isUserTyping, N as lastReadAt, O as isSlashCommand, P as lastStdinAt, Q as runSubcommand, R as probeStdinReachable, S as extractTaskCounts, T as isBareManagerInvocation, U as recentMessageEdges, V as readNotes, W as recentReadEdges, X as resolveResumeArgs, Y as resolveReadWindow, Z as restartHintLines, _ as envelopeAttribution, a as SEND_BODY_MAX_CHARS, at as writeKeysPaced, b as extractMenu, c as backoffWhileTyping, d as cmdHelp, et as snapshotStatus, f as confirmStdinUnreachable, g as deriveLiveStatus, h as deriveLiveState, i as READ_WINDOW_MS, it as waitForLogQuiet, j as isUnreachableWriteErrno, k as isSubcommand, l as buildEnvelope, m as cursorAbs, n as MAX_RENDER_BYTES, nt as stopTipForCli, o as SEND_EXIT_UNREACHABLE, ot as writeToIpc, p as controlCodeFromName, q as renderRawLogLines, r as READ_PAGE_DEFAULT, rt as submitAndConfirm, s as TYPING_WINDOW_MS, t as GRACEFUL_EXIT_COMMANDS, tt as stdinActivityPath, u as cliDefaults, v as envelopeCostFor, w as isAgentStuck, x as extractNeedsInput, y as extractBadges, z as readAgentPtysize } from "./subcommands-CyhuIreR.js";
8
+ import { $ as sendPayloadCapError, A as isUnknownManagerToken, B as readLogForRender, C as finalizedLines, D as isPidAlive, E as isExitRequest, F as listRecords, G as renderLogTailLines, H as readPtysize, I as matchKeyword, J as resolveOne, K as renderRawLog, L as menuSelectKeys, M as isUserTyping, N as lastReadAt, O as isSlashCommand, P as lastStdinAt, Q as runSubcommand, R as probeStdinReachable, S as extractTaskCounts, T as isBareManagerInvocation, U as recentMessageEdges, V as readNotes, W as recentReadEdges, X as resolveResumeArgs, Y as resolveReadWindow, Z as restartHintLines, _ as envelopeAttribution, a as SEND_BODY_MAX_CHARS, at as writeKeysPaced, b as extractMenu, c as backoffWhileTyping, d as cmdHelp, et as snapshotStatus, f as confirmStdinUnreachable, g as deriveLiveStatus, h as deriveLiveState, i as READ_WINDOW_MS, it as waitForLogQuiet, j as isUnreachableWriteErrno, k as isSubcommand, l as buildEnvelope, m as cursorAbs, n as MAX_RENDER_BYTES, nt as stopTipForCli, o as SEND_EXIT_UNREACHABLE, ot as writeToIpc, p as controlCodeFromName, q as renderRawLogLines, r as READ_PAGE_DEFAULT, rt as submitAndConfirm, s as TYPING_WINDOW_MS, t as GRACEFUL_EXIT_COMMANDS, tt as stdinActivityPath, u as cliDefaults, v as envelopeCostFor, w as isAgentStuck, x as extractNeedsInput, y as extractBadges, z as readAgentPtysize } from "./subcommands-CJaf5iJ8.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
11
  import "./remotes-5P__pAXA.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-Cn6LTsO5.js");
101
+ const { mintScopedTermToken } = await import("./serve-HzPmrkoQ.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-D7G7Ngnj.js.map
138
+ //# sourceMappingURL=terminal-CjP9waBm.js.map
@@ -1,4 +1,4 @@
1
- import { o as findTrayLauncher } from "./rustBinary-Wh9kNpga.js";
1
+ import { o as findTrayLauncher } from "./rustBinary-BDWTBHNk.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-C77uhW1i.js.map
100
+ //# sourceMappingURL=trayApp-ClgnrIyz.js.map
@@ -0,0 +1,5 @@
1
+ import "./versionChecker-DQtvrPml.js";
2
+ import "./rustBinary-BDWTBHNk.js";
3
+ import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-ClgnrIyz.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-CqaWZAm0.js";
3
+ import { i as getInstalledPackage } from "./versionChecker-DQtvrPml.js";
4
4
  import { t as agentYesHome } from "./agentYesHome-BNtn19J4.js";
5
5
  import { u as removeControlCharacters } from "./todoAutomation-CbVVS4re.js";
6
6
  import { i as shouldUseLock, r as releaseLock, t as acquireLock } from "./runningLock-BOIPD_Vs.js";
@@ -2086,7 +2086,7 @@ async function agentYes({ cli, cliArgs = [], skipPermissions = false, prompt, ro
2086
2086
  }, 100);
2087
2087
  const cleanupHeartbeat = () => clearInterval(heartbeatInterval);
2088
2088
  shell.onExit(cleanupHeartbeat);
2089
- const { startParentPingLoop } = await import("./parentPingLoop-BNk9bmkL.js");
2089
+ const { startParentPingLoop } = await import("./parentPingLoop-DGmjbTGW.js");
2090
2090
  const parentPingLoop = startParentPingLoop({
2091
2091
  parentPid,
2092
2092
  selfWrapperPid: process.pid,
@@ -2349,4 +2349,4 @@ function sleep(ms) {
2349
2349
 
2350
2350
  //#endregion
2351
2351
  export { hasTodoStore as a, permissionBadge as c, answerAsk as i, AgentContext as l, agentYes as n, listAsks as o, config as r, listAsksForProject as s, CLIS_CONFIG as t, CLAUDE_SESSION_PIN_ENV as u };
2352
- //# sourceMappingURL=ts-DYKrhLtc.js.map
2352
+ //# sourceMappingURL=ts-D--BjWeq.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.294.0";
10
+ var version = "1.294.1-beta.750.1";
11
11
 
12
12
  //#endregion
13
13
  //#region ts/versionChecker.ts
@@ -285,4 +285,4 @@ async function displayVersion() {
285
285
 
286
286
  //#endregion
287
287
  export { versionString as a, getInstalledPackage as i, compareVersions as n, displayVersion as r, checkAndAutoUpdate as t };
288
- //# sourceMappingURL=versionChecker-CqaWZAm0.js.map
288
+ //# sourceMappingURL=versionChecker-DQtvrPml.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-Cn6LTsO5.js");
31
+ const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-HzPmrkoQ.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-Cn6LTsO5.js");
189
+ const { mintScopedTermToken } = await import("./serve-HzPmrkoQ.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-D2sc3bde.js.map
205
+ //# sourceMappingURL=widget-CAGGIsmN.js.map
@@ -1,4 +1,4 @@
1
- import { F as listRecords } from "./subcommands-CyhuIreR.js";
1
+ import { F as listRecords } from "./subcommands-CJaf5iJ8.js";
2
2
  import { a as getProvisionRoot } from "./workspaceConfig-DTvPtr5j.js";
3
3
  import { existsSync } from "fs";
4
4
  import { lstat, opendir } from "fs/promises";
@@ -424,4 +424,4 @@ async function cmdWs(args) {
424
424
 
425
425
  //#endregion
426
426
  export { isPathInside as a, walkWorkspaces as c, importProvisionModule as i, workspaceStatus as l, cmdWs as n, loadProvision as o, collectWorkspaces as r, resolveOperand as s, WS_JSON_SCHEMA as t };
427
- //# sourceMappingURL=ws-ClgsUOJu.js.map
427
+ //# sourceMappingURL=ws-BOHUpXom.js.map
@@ -5,10 +5,10 @@ import "./pidStore-DXWqzTSz.js";
5
5
  import "./messageLog-Brx3w6zT.js";
6
6
  import "./e2e-z1xpwSAg.js";
7
7
  import "./configShared-DKTgiz7K.js";
8
- import "./subcommands-CyhuIreR.js";
8
+ import "./subcommands-CJaf5iJ8.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
11
  import "./remotes-5P__pAXA.js";
12
- import { a as isPathInside, c as walkWorkspaces, i as importProvisionModule, l as workspaceStatus, n as cmdWs, o as loadProvision, r as collectWorkspaces, s as resolveOperand, t as WS_JSON_SCHEMA } from "./ws-ClgsUOJu.js";
12
+ import { a as isPathInside, c as walkWorkspaces, i as importProvisionModule, l as workspaceStatus, n as cmdWs, o as loadProvision, r as collectWorkspaces, s as resolveOperand, t as WS_JSON_SCHEMA } from "./ws-BOHUpXom.js";
13
13
 
14
14
  export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, walkWorkspaces, workspaceStatus };
@@ -170,19 +170,27 @@ export function identContext(entries) {
170
170
  return { uniform, anyDevice };
171
171
  }
172
172
 
173
+ // Per-field clip for the compact identity. Was 3, which turned every row into
174
+ // an unreadable "sno/age/mai" — three-letter stubs distinguish nothing a human
175
+ // can name, and the field-blanking below already removes what is uniform, so
176
+ // what survives is exactly the part worth reading. 12 fits the common repo and
177
+ // branch names whole ("agent-yes", "CapsLockX", "main") and still bounds a
178
+ // long feature-branch name so the title column keeps its room.
179
+ export const IDENT_CAP = 12;
180
+
173
181
  // Build an agent's compact identity against a precomputed identContext. Each
174
182
  // field is clipped to `cap` chars (compact one-liner) and BLANKED when uniform
175
183
  // across the list — but the separators (@ : / /) are kept so the string stays
176
- // machine-parseable: e.g. all on one device → "@:age/mai", a mixed-device list →
177
- // "sno@tak:age/mai". A purely local list (no devices anywhere) falls back to the
178
- // legacy "own/rep/bra" with no device prefix.
184
+ // machine-parseable: e.g. all on one device → "@:agent-yes/main", a mixed-device
185
+ // list → "sno@taka:agent-yes/main". A purely local list (no devices anywhere)
186
+ // falls back to the legacy "owner/repo/branch" with no device prefix.
179
187
  //
180
188
  // `parent` is this row's tree parent entry (a subagent's superagent), when it
181
189
  // has one. A field that matches the parent's is ALSO blanked: the nesting
182
190
  // already conveys it, so a subagent in the same worktree as its parent shows
183
191
  // only what differs — often just the submodule leaf (e.g. "//→bot"), or nothing
184
192
  // at all (hidden by hasIdent) when it's the very same checkout.
185
- export function compactIdent(e, ctx, cap = 3, parent = null) {
193
+ export function compactIdent(e, ctx, cap = IDENT_CAP, parent = null) {
186
194
  const m = identFields(e);
187
195
  const p = parent ? identFields(parent) : null;
188
196
  const clip = (s) => (cap && s.length > cap ? s.slice(0, cap) : s);
@@ -375,7 +383,66 @@ export function age(e, now = Date.now()) {
375
383
  const s = Math.max(0, (now - at) / 1000);
376
384
  if (s < 60) return Math.floor(s) + "s";
377
385
  if (s < 3600) return Math.floor(s / 60) + "m";
378
- return Math.floor(s / 3600) + "h";
386
+ // Hours stop being a unit anyone converts in their head after a couple of
387
+ // days: "2196h" is a row that has been dead for three months, and the column
388
+ // exists so the eye can rank rows by recency. Days from 48h, weeks from 14d.
389
+ if (s < 48 * 3600) return Math.floor(s / 3600) + "h";
390
+ if (s < 14 * 86400) return Math.floor(s / 86400) + "d";
391
+ return Math.floor(s / (7 * 86400)) + "w";
392
+ }
393
+
394
+ // The gist of a spawn prompt for a one-line label: the `<ay-msg …>` provenance
395
+ // envelope (which a spawned agent's prompt carries, see rs/src/pid_store.rs
396
+ // wrap_spawn_prompt) is dropped so the header never becomes the title, then
397
+ // the first non-blank line, clipped.
398
+ export function promptGist(prompt, max = 120) {
399
+ let s = String(prompt || "").trim();
400
+ const m = /^<ay-msg [^\n]*>\n([\s\S]*?)\n<\/ay-msg [^\n]*>$/.exec(s);
401
+ if (m) s = m[1];
402
+ s = (s.split("\n").find((l) => l.trim()) || "").trim();
403
+ return s.length > max ? s.slice(0, max - 1) + "…" : s;
404
+ }
405
+
406
+ // One-line label for a row: what the agent is ABOUT, not what its footer says
407
+ // this second. The CLI's own terminal title first (Claude Code sets it to the
408
+ // conversation topic); then the operator's `ay note`; then the spawn prompt's
409
+ // gist; and only then the transient status line. That last one used to be the
410
+ // SECOND choice, so every agent without a title was labelled by whatever its
411
+ // footer said when the list was drawn — "Cogitated for 1m 15s · done 9:15 PM",
412
+ // "Remote Control not started here · …" — which says nothing about the task and
413
+ // changes under the reader's eyes.
414
+ //
415
+ // `remembered` is the last non-transient title this page saw for the agent
416
+ // (Claude alternates topic ↔ status in the title, so the topic was on screen a
417
+ // moment ago); it outranks the prompt gist because it is the CLI's own, newer
418
+ // summary of the conversation, and a human-launched session has no prompt.
419
+ export function rowTitle(e, remembered = "") {
420
+ const title = (e.title || "").trim();
421
+ return (
422
+ (isTransientTitle(title) ? "" : title) ||
423
+ (e.note || "").trim() ||
424
+ String(remembered || "").trim() ||
425
+ promptGist(e.prompt) ||
426
+ title ||
427
+ (e.status_text || "").trim()
428
+ );
429
+ }
430
+
431
+ // Claude Code writes its terminal title from two different things: the
432
+ // conversation topic ("✳ Agy install") and, while it works or right after, its
433
+ // own status line — a spinner with a timer ("✽ Fiddle-faddling… (6m 50s · ↓
434
+ // 11.8k token)"), a completion stamp ("✻ Cogitated for 1m 15s · done 9:15 PM"),
435
+ // or the last assistant message ("● Remote Control not started here · …").
436
+ // The latter say nothing about the task and change under the reader's eyes, so
437
+ // rowTitle only lets them win when nothing better exists. Recognised by shape,
438
+ // not by verb list — the verbs are random.
439
+ export function isTransientTitle(t) {
440
+ const s = String(t || "");
441
+ return (
442
+ /·\s*done\b/.test(s) || // "… for 1m 15s · done 9:15 PM"
443
+ /…\s*\(\d+[smh]/.test(s) || // "Verb… (6m 50s · …)"
444
+ /^[✳✻✽]?\s*●\s/.test(s) // "● <assistant message>"
445
+ );
379
446
  }
380
447
 
381
448
  // Filter predicate: every space-separated token must match. A `key:value` token
@@ -642,8 +709,7 @@ export function layeredRows(entries) {
642
709
  for (const [src, pe] of peerGroups) {
643
710
  const agentNodes = agentForestNodes(pe).map(toAgentNode);
644
711
  const host = pe[0]?._host || "";
645
- const label =
646
- host && labelCounts.get(host) > 1 ? `${host} (${String(src).slice(-6)})` : host;
712
+ const label = host && labelCounts.get(host) > 1 ? `${host} (${String(src).slice(-6)})` : host;
647
713
  if (multiPeer && label)
648
714
  underRoom.push({ kind: "peer", label, room: rid, host, src, children: agentNodes });
649
715
  else underRoom.push(...agentNodes); // single/unlabelled peer hidden
package/lab/ui/index.html CHANGED
@@ -2205,13 +2205,13 @@
2205
2205
  </div>
2206
2206
  <div class="install" title="click to copy">
2207
2207
  install:
2208
- <code class="copy" id="setup-sh">curl -fsSL https://agent-yes.com/setup.sh | sh</code>
2209
- <span class="winhint"
2210
- >·&nbsp;Windows:
2211
- <code class="copy" id="setup-ps"
2212
- >powershell -c "irm https://agent-yes.com/setup.ps1 | iex"</code
2213
- ></span
2214
- >
2208
+ <code class="copy" id="setup-sh">curl -fsSL https://agent-yes.com/setup.sh | sh</code>
2209
+ <span class="winhint"
2210
+ >·&nbsp;Windows:
2211
+ <code class="copy" id="setup-ps"
2212
+ >powershell -c "irm https://agent-yes.com/setup.ps1 | iex"</code
2213
+ ></span
2214
+ >
2215
2215
  </div>
2216
2216
  </div>
2217
2217
  <div class="ibox">
@@ -2579,6 +2579,9 @@
2579
2579
  nextIndex,
2580
2580
  identContext,
2581
2581
  compactIdent,
2582
+ IDENT_CAP,
2583
+ rowTitle,
2584
+ isTransientTitle,
2582
2585
  fullIdent,
2583
2586
  hasIdent,
2584
2587
  deviceCount,
@@ -6155,6 +6158,8 @@ my.translate = async (text, lang) => {
6155
6158
  }
6156
6159
  return `<div class="ioheat"><svg width="${w}" height="${h}" viewBox="0 0 ${w} ${h}" preserveAspectRatio="none" shape-rendering="crispEdges" style="position:absolute;inset:0;width:100%;height:100%">${cells.join("")}</svg></div>`;
6157
6160
  }
6161
+ // Last non-transient (topic) title seen per agent key — see rowTitle.
6162
+ const topicTitles = new Map();
6158
6163
  function renderList() {
6159
6164
  // The graph view (/r/) only exists on the hosted origin — a local
6160
6165
  // `ay serve --http` console (served at /) has no /r/ route, so the
@@ -6195,8 +6200,11 @@ my.translate = async (text, lang) => {
6195
6200
  .map((r) => {
6196
6201
  if (r.kind !== "agent") return headerHtml(r);
6197
6202
  const e = r.entry;
6198
- const t = e.title || e.status_text || e.prompt || "";
6199
- const id = compactIdent(e, ctx, 3, r.parentEntry);
6203
+ // Remember the agent's last topic title so a status-line title
6204
+ // (spinner / done" stamp) doesn't replace it on the next draw.
6205
+ if (e.title && !isTransientTitle(e.title)) topicTitles.set(e._key, e.title);
6206
+ const t = rowTitle(e, topicTitles.get(e._key));
6207
+ const id = compactIdent(e, ctx, IDENT_CAP, r.parentEntry);
6200
6208
  const cli = cliLabel(e);
6201
6209
  return `<div class="row crow ${e._key === sel ? "sel" : ""}${rowFlags(e)}" data-key="${esc(e._key)}">${rowIoHeat(e)}
6202
6210
  ${r.branch ? `<span class="tbranch">${esc(r.branch)}</span>` : ""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-yes",
3
- "version": "1.294.0",
3
+ "version": "1.294.1-beta.750.1",
4
4
  "description": "A wrapper tool that automates interactions with various AI CLI tools by automatically handling common prompts and responses.",
5
5
  "keywords": [
6
6
  "ai",
package/ts/serve.spec.ts CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  parseGitUrl,
9
9
  portlessConsoleUrl,
10
10
  shareLinkStatus,
11
+ vendorAssetType,
11
12
  } from "./serve.ts";
12
13
 
13
14
  describe("portlessConsoleUrl", () => {
@@ -197,11 +198,33 @@ describe("oxmgrCmd", () => {
197
198
  expect(oxmgrCmd([String.raw`C:\x\ay.exe`, "serve", "--share"])).toBe(
198
199
  String.raw`"C:\x\ay.exe" serve --share`,
199
200
  );
200
- expect(oxmgrCmd(["/usr/bin/bun", "/x/a b/ay", "serve"])).toBe(
201
- '/usr/bin/bun "/x/a b/ay" serve',
202
- );
201
+ expect(oxmgrCmd(["/usr/bin/bun", "/x/a b/ay", "serve"])).toBe('/usr/bin/bun "/x/a b/ay" serve');
203
202
  });
204
203
  it("escapes an embedded double quote inside a quoted arg", () => {
205
204
  expect(oxmgrCmd(['say "hi"'])).toBe(String.raw`"say \"hi\""`);
206
205
  });
207
206
  });
207
+
208
+ // The console self-hosts xterm from ./vendor/ (#317), but the TS daemon's
209
+ // static allowlist never routed /vendor/*, so those render-blocking scripts
210
+ // fell through to the token-gated API and came back 401 — the terminal pane
211
+ // sat on "connecting…" with `Terminal is not defined`. Exactly the shipped
212
+ // files are served; anything else (a traversal, a stray file) is a 404.
213
+ describe("vendorAssetType", () => {
214
+ it("types the pinned xterm builds the page loads", () => {
215
+ expect(vendorAssetType("xterm.min.css")).toBe("text/css; charset=utf-8");
216
+ for (const js of [
217
+ "xterm.min.js",
218
+ "addon-fit.min.js",
219
+ "addon-web-links.min.js",
220
+ "addon-clipboard.min.js",
221
+ ]) {
222
+ expect(vendorAssetType(js)).toBe("text/javascript; charset=utf-8");
223
+ }
224
+ });
225
+ it("refuses anything that is not a shipped vendor asset", () => {
226
+ expect(vendorAssetType("../index.html")).toBeNull();
227
+ expect(vendorAssetType("xterm.min.js.map")).toBeNull();
228
+ expect(vendorAssetType("")).toBeNull();
229
+ });
230
+ });
package/ts/serve.ts CHANGED
@@ -1534,6 +1534,26 @@ async function cmdServeDaemon(sub: string, args: string[]): Promise<number> {
1534
1534
  return 1;
1535
1535
  }
1536
1536
 
1537
+ /**
1538
+ * Content type for a `/vendor/<name>` console asset, or null when `name` is not
1539
+ * one we ship. The set is the exact list index.html loads (see lab/ui/vendor/
1540
+ * and #317): a request for anything else — a traversal attempt, a stray file
1541
+ * in the directory — is a 404, never a read.
1542
+ */
1543
+ export function vendorAssetType(name: string): string | null {
1544
+ switch (name) {
1545
+ case "xterm.min.css":
1546
+ return "text/css; charset=utf-8";
1547
+ case "xterm.min.js":
1548
+ case "addon-fit.min.js":
1549
+ case "addon-web-links.min.js":
1550
+ case "addon-clipboard.min.js":
1551
+ return "text/javascript; charset=utf-8";
1552
+ default:
1553
+ return null;
1554
+ }
1555
+ }
1556
+
1537
1557
  // How `ay serve status` should report the persisted share link. The link file
1538
1558
  // outlives the daemon config that minted it: `ay serve install` (no --share)
1539
1559
  // over an older --share install leaves ~/.agent-yes/.share-link in place while
@@ -5018,6 +5038,17 @@ export async function cmdServe(rest: string[]): Promise<number> {
5018
5038
  if (req.method === "GET" && p === "/manifest.webmanifest")
5019
5039
  return serveUiFile("manifest.webmanifest", "application/manifest+json");
5020
5040
  if (req.method === "GET" && p === "/icon.svg") return serveUiFile("icon.svg", "image/svg+xml");
5041
+ // Self-hosted xterm (lab/ui/vendor/*, #317). The page loads these
5042
+ // same-origin and render-blocking, so a 401 here — which is what the
5043
+ // token-gated API fallthrough returned — leaves the terminal pane on
5044
+ // "connecting…" forever with `Terminal is not defined`. Allowlisted by
5045
+ // basename (no directory walk): the CSS and the pinned xterm builds only.
5046
+ if (req.method === "GET" && p.startsWith("/vendor/")) {
5047
+ const name = p.slice("/vendor/".length);
5048
+ const type = vendorAssetType(name);
5049
+ if (type) return serveUiFile(`vendor/${name}`, type);
5050
+ return new Response("not found", { status: 404 });
5051
+ }
5021
5052
  if (req.method === "GET" && p === "/favicon.ico") return new Response(null, { status: 204 });
5022
5053
  if (p.startsWith("/cb/")) return handleCallback(req, p);
5023
5054
  // CORS-open the embeddable terminal routes (tail/size/send) so a cross-origin
@@ -1,5 +0,0 @@
1
- import "./versionChecker-CqaWZAm0.js";
2
- import "./rustBinary-Wh9kNpga.js";
3
- import { a as trayHiddenMarker, i as launchTray, n as hasDesktop, r as isTrayHidden, t as cmdTray } from "./trayApp-C77uhW1i.js";
4
-
5
- export { cmdTray };