agent-yes 1.189.1 → 1.191.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 (30) hide show
  1. package/dist/SUPPORTED_CLIS-P3I0D3Ka.js +8 -0
  2. package/dist/{SUPPORTED_CLIS-DcA00P5Z.js → SUPPORTED_CLIS-mUaQHk4M.js} +2 -2
  3. package/dist/{agentShare-D5qYAXeL.js → agentShare-Boa9P2dK.js} +3 -3
  4. package/dist/cli.js +8 -8
  5. package/dist/expose-B3AGhVhM.js +549 -0
  6. package/dist/{forkNested-C8q7E6mp.js → forkNested-C1kKsXi5.js} +1 -1
  7. package/dist/index.js +2 -2
  8. package/dist/{notifyDaemon-BZmlbBqN.js → notifyDaemon-hKT38cBs.js} +3 -3
  9. package/dist/{openBrowser-BO5RVYwL.js → openBrowser-DQVkxCyj.js} +1 -1
  10. package/dist/{remotes-DsTnQhyx.js → remotes-CgT91bMo.js} +2 -2
  11. package/dist/{remotes-BIHNxn1a.js → remotes-WVJBNajZ.js} +1 -1
  12. package/dist/{rustBinary-xhXsfVn-.js → rustBinary-Cu8q2m9s.js} +2 -2
  13. package/dist/{schedule-BUp_RUVP.js → schedule-Bb98iG9W.js} +5 -5
  14. package/dist/{serve-CM9NHaCH.js → serve-DVhbtjR4.js} +51 -15
  15. package/dist/{setup-BE9NyUE3.js → setup-Dj8Grg0K.js} +3 -3
  16. package/dist/{spawnGate-C5nBiUZQ.js → spawnGate-BejtWiMJ.js} +1 -1
  17. package/dist/{spawnGate-Clp9xBPX.js → spawnGate-CA5QD7D4.js} +2 -2
  18. package/dist/{subcommands-BYKJkWNP.js → subcommands-CNCgJ48t.js} +15 -10
  19. package/dist/{subcommands-qe4h_Cvx.js → subcommands-Uerol8Tz.js} +2 -2
  20. package/dist/{tray-DKwVRBwr.js → tray-PMOWFOfk.js} +1 -1
  21. package/dist/{ts-1qx-QhAe.js → ts-BQh1-ljE.js} +2 -2
  22. package/dist/{versionChecker-Do5ex5Wm.js → versionChecker-DhCi7ncH.js} +2 -2
  23. package/dist/{webrtcRemote-BLEbZnbY.js → webrtcRemote-CD5EQ3uX.js} +1 -1
  24. package/dist/{workspaceConfig-DKd6UvVm.js → workspaceConfig-_GtAZtsi.js} +1 -1
  25. package/lab/ui/index.html +239 -3
  26. package/package.json +3 -2
  27. package/ts/expose.ts +314 -0
  28. package/ts/serve.ts +44 -0
  29. package/ts/subcommands.ts +6 -0
  30. package/dist/SUPPORTED_CLIS-D8ocFVqe.js +0 -8
@@ -86,7 +86,7 @@ async function resolveRemoteSpec(spec) {
86
86
  * The bridge lives for the rest of the process (torn down on `process.exit`).
87
87
  */
88
88
  async function resolveWebrtc(link, keyword) {
89
- const { startWebrtcBridge } = await import("./webrtcRemote-BLEbZnbY.js");
89
+ const { startWebrtcBridge } = await import("./webrtcRemote-CD5EQ3uX.js");
90
90
  const bridge = await startWebrtcBridge(link);
91
91
  return {
92
92
  url: bridge.baseUrl,
@@ -173,4 +173,4 @@ async function cmdRemote(rest) {
173
173
 
174
174
  //#endregion
175
175
  export { resolveRemoteSpec as a, readRemotes as i, deleteRemoteAlias as n, writeRemoteAlias as o, parseDirectRemoteSpec as r, cmdRemote as t };
176
- //# sourceMappingURL=remotes-DsTnQhyx.js.map
176
+ //# sourceMappingURL=remotes-CgT91bMo.js.map
@@ -1,5 +1,5 @@
1
1
  import "./e2e-BeKjLhmO.js";
2
2
  import "./webrtcLink-BG0Xc4-W.js";
3
- import { a as resolveRemoteSpec, i as readRemotes, n as deleteRemoteAlias, o as writeRemoteAlias, r as parseDirectRemoteSpec, t as cmdRemote } from "./remotes-DsTnQhyx.js";
3
+ import { a as resolveRemoteSpec, i as readRemotes, n as deleteRemoteAlias, o as writeRemoteAlias, r as parseDirectRemoteSpec, t as cmdRemote } from "./remotes-CgT91bMo.js";
4
4
 
5
5
  export { cmdRemote };
@@ -1,4 +1,4 @@
1
- import { r as getInstalledPackage } from "./versionChecker-Do5ex5Wm.js";
1
+ import { r as getInstalledPackage } from "./versionChecker-DhCi7ncH.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-xhXsfVn-.js.map
228
+ //# sourceMappingURL=rustBinary-Cu8q2m9s.js.map
@@ -1,10 +1,10 @@
1
- import "./ts-1qx-QhAe.js";
1
+ import "./ts-BQh1-ljE.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-Do5ex5Wm.js";
3
+ import "./versionChecker-DhCi7ncH.js";
4
4
  import "./pidStore-BIvsBQ8X.js";
5
5
  import "./globalPidIndex-CoNr7tS8.js";
6
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DcA00P5Z.js";
7
- import { d as resolveSpawnCwd } from "./workspaceConfig-DKd6UvVm.js";
6
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-mUaQHk4M.js";
7
+ import { d as resolveSpawnCwd } from "./workspaceConfig-_GtAZtsi.js";
8
8
  import { createHash } from "node:crypto";
9
9
 
10
10
  //#region ts/oxmgrService.ts
@@ -141,4 +141,4 @@ async function cmdSchedule(rest) {
141
141
 
142
142
  //#endregion
143
143
  export { cmdSchedule };
144
- //# sourceMappingURL=schedule-BUp_RUVP.js.map
144
+ //# sourceMappingURL=schedule-Bb98iG9W.js.map
@@ -1,18 +1,18 @@
1
- import "./ts-1qx-QhAe.js";
1
+ import "./ts-BQh1-ljE.js";
2
2
  import "./logger-CDIsZ-Pp.js";
3
- import { r as getInstalledPackage } from "./versionChecker-Do5ex5Wm.js";
4
- import { t as findSpawnHiddenLauncher } from "./rustBinary-xhXsfVn-.js";
3
+ import { r as getInstalledPackage } from "./versionChecker-DhCi7ncH.js";
4
+ import { t as findSpawnHiddenLauncher } from "./rustBinary-Cu8q2m9s.js";
5
5
  import "./pidStore-BIvsBQ8X.js";
6
6
  import { a as updateGlobalPidStatus } from "./globalPidIndex-CoNr7tS8.js";
7
7
  import { t as pgidForWrapper } from "./reaper-CWF2_ATd.js";
8
8
  import "./configShared-0MnIQ652.js";
9
- import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-DcA00P5Z.js";
10
- import { $ as TYPING_BADGE, D as recentReadEdges, E as readPtysize, H as writeToIpc, I as snapshotStatus, O as renderLogTailLines, S as listRecords, T as readNotes, b as isUserTyping, f as extractNeedsInput, j as resolveOne, k as renderRawLog, l as deriveLiveStatus, o as controlCodeFromName, p as extractTaskCounts, u as extractBadges } from "./subcommands-BYKJkWNP.js";
9
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-mUaQHk4M.js";
10
+ import { $ as TYPING_BADGE, D as recentReadEdges, E as readPtysize, H as writeToIpc, I as snapshotStatus, O as renderLogTailLines, S as listRecords, T as readNotes, b as isUserTyping, f as extractNeedsInput, j as resolveOne, k as renderRawLog, l as deriveLiveStatus, o as controlCodeFromName, p as extractTaskCounts, u as extractBadges } from "./subcommands-CNCgJ48t.js";
11
11
  import "./e2e-BeKjLhmO.js";
12
12
  import "./webrtcLink-BG0Xc4-W.js";
13
- import "./remotes-DsTnQhyx.js";
14
- import { a as getSpawnHook, c as hasProvisionHook, d as resolveSpawnCwd, i as getProvisionRoot, l as hasSpawnHook, r as getProvisionHook, u as isProvisionAllowed } from "./workspaceConfig-DKd6UvVm.js";
15
- import { r as spawnRejectionReason } from "./spawnGate-Clp9xBPX.js";
13
+ import "./remotes-CgT91bMo.js";
14
+ import { a as getSpawnHook, c as hasProvisionHook, d as resolveSpawnCwd, i as getProvisionRoot, l as hasSpawnHook, r as getProvisionHook, u as isProvisionAllowed } from "./workspaceConfig-_GtAZtsi.js";
15
+ import { r as spawnRejectionReason } from "./spawnGate-CA5QD7D4.js";
16
16
  import yargs from "yargs";
17
17
  import { mkdir, open, readFile, stat, unlink, writeFile } from "fs/promises";
18
18
  import { arch, cpus, freemem, homedir, hostname, loadavg, platform, totalmem, uptime, userInfo } from "os";
@@ -515,7 +515,7 @@ async function cmdServeDaemon(sub, args) {
515
515
  if (!webrtcDaemon) return;
516
516
  if (shareLink) {
517
517
  process.stdout.write(`\nshared over WebRTC — open this link (the token is eaten from the URL on open):\n ${shareLink}\n` + (shareLinkMinted ? ` (persistent room — same link across restarts; delete ~/.agent-yes/.share-room to rotate)\n` : ``));
518
- const { offerOpenInBrowser } = await import("./openBrowser-BO5RVYwL.js");
518
+ const { offerOpenInBrowser } = await import("./openBrowser-DQVkxCyj.js");
519
519
  await offerOpenInBrowser(shareLink);
520
520
  } else process.stdout.write("\nthe WebRTC share link carries a secret, so the daemon does NOT log it —\nread it from ~/.agent-yes/.share-link (mode 0600). The room persists in\n~/.agent-yes/.share-room, so the link survives restarts.\n");
521
521
  };
@@ -1851,7 +1851,7 @@ Options:
1851
1851
  const perm = body.perm ?? "r";
1852
1852
  if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
1853
1853
  try {
1854
- const { createScopedShare } = await import("./agentShare-D5qYAXeL.js");
1854
+ const { createScopedShare } = await import("./agentShare-Boa9P2dK.js");
1855
1855
  const share = await createScopedShare({
1856
1856
  agent: body.agent,
1857
1857
  perm,
@@ -1866,15 +1866,48 @@ Options:
1866
1866
  }
1867
1867
  }
1868
1868
  if (req.method === "GET" && p === "/api/shares") {
1869
- const { listShares } = await import("./agentShare-D5qYAXeL.js");
1869
+ const { listShares } = await import("./agentShare-Boa9P2dK.js");
1870
1870
  return Response.json(listShares());
1871
1871
  }
1872
1872
  const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
1873
1873
  if (req.method === "DELETE" && revokeM) {
1874
- const { revokeShare } = await import("./agentShare-D5qYAXeL.js");
1874
+ const { revokeShare } = await import("./agentShare-Boa9P2dK.js");
1875
1875
  const ok = revokeShare(decodeURIComponent(revokeM[1]));
1876
1876
  return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
1877
1877
  }
1878
+ if (req.method === "POST" && p === "/api/expose") {
1879
+ let body;
1880
+ try {
1881
+ body = await req.json();
1882
+ } catch {
1883
+ return new Response("invalid JSON body", { status: 400 });
1884
+ }
1885
+ const port = Number(body.port);
1886
+ if (!Number.isInteger(port) || port < 1 || port > 65535) return new Response("valid port required", { status: 400 });
1887
+ try {
1888
+ const { ensureExposure } = await import("./expose-B3AGhVhM.js");
1889
+ const h = await ensureExposure(port, body.relay);
1890
+ return Response.json({
1891
+ id: h.id,
1892
+ port: h.port,
1893
+ url: h.url,
1894
+ claim: h.mintClaim(),
1895
+ createdAt: h.createdAt
1896
+ });
1897
+ } catch (e) {
1898
+ return new Response(`expose failed: ${e.message}`, { status: 502 });
1899
+ }
1900
+ }
1901
+ if (req.method === "GET" && p === "/api/exposes") {
1902
+ const { listExposures } = await import("./expose-B3AGhVhM.js");
1903
+ return Response.json(listExposures());
1904
+ }
1905
+ const unexposeM = /^\/api\/expose\/(\d+)$/.exec(p);
1906
+ if (req.method === "DELETE" && unexposeM) {
1907
+ const { stopExposure } = await import("./expose-B3AGhVhM.js");
1908
+ const ok = stopExposure(Number(unexposeM[1]));
1909
+ return new Response(ok ? "revoked" : "no such exposure", { status: ok ? 200 : 404 });
1910
+ }
1878
1911
  return new Response("Not Found", { status: 404 });
1879
1912
  };
1880
1913
  const uiDir = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "lab", "ui");
@@ -1912,8 +1945,11 @@ Options:
1912
1945
  if (req.method === "GET" && p === "/r/main.js.map") return serveUiFile("rgui/dist/main.js.map", "application/json");
1913
1946
  if (req.method === "GET" && p === "/room-client.js") return serveUiFile("room-client.js", "text/javascript; charset=utf-8");
1914
1947
  if (req.method === "GET" && p === "/console-logic.js") return serveUiFile("console-logic.js", "text/javascript; charset=utf-8");
1948
+ if (req.method === "GET" && p === "/rtc.js") return serveUiFile("rtc.js", "text/javascript; charset=utf-8");
1915
1949
  if (req.method === "GET" && p === "/e2e.js") return serveUiFile("e2e.js", "text/javascript; charset=utf-8");
1916
1950
  if (req.method === "GET" && p === "/qrcode.js") return serveUiFile("qrcode.js", "text/javascript; charset=utf-8");
1951
+ if (req.method === "GET" && p === "/manifest.webmanifest") return serveUiFile("manifest.webmanifest", "application/manifest+json");
1952
+ if (req.method === "GET" && p === "/icon.svg") return serveUiFile("icon.svg", "image/svg+xml");
1917
1953
  if (req.method === "GET" && p === "/favicon.ico") return new Response(null, { status: 204 });
1918
1954
  return apiFetch(req);
1919
1955
  };
@@ -1977,7 +2013,7 @@ Options:
1977
2013
  const persistNote = explicitUrl ? "\n" : ` (persistent room — same link across restarts; delete ~/.agent-yes/.share-room to rotate)\n\n`;
1978
2014
  process.stdout.write(`${wantHttp ? "\n" : ""}${lead}:\n ${link}\n` + persistNote);
1979
2015
  if (!rotated) {
1980
- const { offerOpenInBrowser } = await import("./openBrowser-BO5RVYwL.js");
2016
+ const { offerOpenInBrowser } = await import("./openBrowser-DQVkxCyj.js");
1981
2017
  await offerOpenInBrowser(link);
1982
2018
  }
1983
2019
  } else {
@@ -2016,7 +2052,7 @@ Options:
2016
2052
  const shutdown = (resolve) => {
2017
2053
  if (heartbeat) clearInterval(heartbeat);
2018
2054
  closeShare?.();
2019
- import("./agentShare-D5qYAXeL.js").then((m) => m.revokeAllShares()).catch(() => {});
2055
+ import("./agentShare-Boa9P2dK.js").then((m) => m.revokeAllShares()).catch(() => {});
2020
2056
  server?.stop();
2021
2057
  resolve();
2022
2058
  };
@@ -2029,4 +2065,4 @@ Options:
2029
2065
 
2030
2066
  //#endregion
2031
2067
  export { cmdServe };
2032
- //# sourceMappingURL=serve-CM9NHaCH.js.map
2068
+ //# sourceMappingURL=serve-DVhbtjR4.js.map
@@ -1,4 +1,4 @@
1
- import { f as setWorkspaceRoot, s as getWorkspaceRoot } from "./workspaceConfig-DKd6UvVm.js";
1
+ import { f as setWorkspaceRoot, s as getWorkspaceRoot } from "./workspaceConfig-_GtAZtsi.js";
2
2
  import { existsSync } from "node:fs";
3
3
  import { stdin, stdout } from "node:process";
4
4
  import { createInterface } from "node:readline/promises";
@@ -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-CM9NHaCH.js");
35
+ const { cmdServe } = await import("./serve-DVhbtjR4.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-BE9NyUE3.js.map
45
+ //# sourceMappingURL=setup-Dj8Grg0K.js.map
@@ -1,5 +1,5 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-CoNr7tS8.js";
3
- import { i as waitForSpawnCapacity, n as spawnGateEnabled, r as spawnRejectionReason, t as memAvailableMb } from "./spawnGate-Clp9xBPX.js";
3
+ import { i as waitForSpawnCapacity, n as spawnGateEnabled, r as spawnRejectionReason, t as memAvailableMb } from "./spawnGate-CA5QD7D4.js";
4
4
 
5
5
  export { waitForSpawnCapacity };
@@ -1,5 +1,5 @@
1
1
  import { i as readGlobalPids } from "./globalPidIndex-CoNr7tS8.js";
2
- import { n as getMinFreeMb, o as getSpawnWaitMs, t as getMaxAgents } from "./workspaceConfig-DKd6UvVm.js";
2
+ import { n as getMinFreeMb, o as getSpawnWaitMs, t as getMaxAgents } from "./workspaceConfig-_GtAZtsi.js";
3
3
  import { readFile } from "fs/promises";
4
4
 
5
5
  //#region ts/spawnGate.ts
@@ -104,4 +104,4 @@ async function waitForSpawnCapacity(opts) {
104
104
 
105
105
  //#endregion
106
106
  export { waitForSpawnCapacity as i, spawnGateEnabled as n, spawnRejectionReason as r, memAvailableMb as t };
107
- //# sourceMappingURL=spawnGate-Clp9xBPX.js.map
107
+ //# sourceMappingURL=spawnGate-CA5QD7D4.js.map
@@ -4,7 +4,7 @@ import { t as agentYesHome } from "./agentYesHome-CtHb5b71.js";
4
4
  import { a as updateGlobalPidStatus, i as readGlobalPids } from "./globalPidIndex-CoNr7tS8.js";
5
5
  import { t as loadSharedCliDefaults } from "./configShared-0MnIQ652.js";
6
6
  import { n as isWebrtcSpec } from "./webrtcLink-BG0Xc4-W.js";
7
- import { a as resolveRemoteSpec, i as readRemotes } from "./remotes-DsTnQhyx.js";
7
+ import { a as resolveRemoteSpec, i as readRemotes } from "./remotes-CgT91bMo.js";
8
8
  import ms from "ms";
9
9
  import yargs from "yargs";
10
10
  import { appendFile, mkdir, open, readFile, readdir, rename, rm, stat, writeFile } from "fs/promises";
@@ -1086,6 +1086,7 @@ const SUBCOMMANDS = new Set([
1086
1086
  "serve",
1087
1087
  "schedule",
1088
1088
  "remote",
1089
+ "expose",
1089
1090
  "reap",
1090
1091
  "help"
1091
1092
  ]);
@@ -1145,21 +1146,25 @@ async function runSubcommand(argv) {
1145
1146
  case "restart": return await cmdRestart(rest);
1146
1147
  case "note": return await cmdNote(rest);
1147
1148
  case "serve": {
1148
- const { cmdServe } = await import("./serve-CM9NHaCH.js");
1149
+ const { cmdServe } = await import("./serve-DVhbtjR4.js");
1149
1150
  return cmdServe(rest);
1150
1151
  }
1151
1152
  case "setup": {
1152
- const { cmdSetup } = await import("./setup-BE9NyUE3.js");
1153
+ const { cmdSetup } = await import("./setup-Dj8Grg0K.js");
1153
1154
  return cmdSetup(rest);
1154
1155
  }
1155
1156
  case "schedule": {
1156
- const { cmdSchedule } = await import("./schedule-BUp_RUVP.js");
1157
+ const { cmdSchedule } = await import("./schedule-Bb98iG9W.js");
1157
1158
  return cmdSchedule(rest);
1158
1159
  }
1159
1160
  case "remote": {
1160
- const { cmdRemote } = await import("./remotes-BIHNxn1a.js");
1161
+ const { cmdRemote } = await import("./remotes-WVJBNajZ.js");
1161
1162
  return cmdRemote(rest);
1162
1163
  }
1164
+ case "expose": {
1165
+ const { cmdExpose } = await import("./expose-B3AGhVhM.js");
1166
+ return cmdExpose(rest);
1167
+ }
1163
1168
  case "reap":
1164
1169
  await (await import("./reaper-jfSmog15.js")).sweep();
1165
1170
  return 0;
@@ -1194,7 +1199,7 @@ async function cmdHelp(managerCommands = true) {
1194
1199
  const setupLine = managerCommands ? ` ay setup guided setup: pick a workspace, share to agent-yes.com\n` : ``;
1195
1200
  const self = process.env.AGENT_YES_PID ? await resolveSender() : null;
1196
1201
  const agentSection = self ? await buildAgentContextSection(self) : "";
1197
- process.stdout.write(agentSection + "ay - agent-yes CLI\n\nManagement:\n ay ls [keyword] list running agents\n ay tail [-f] [-n N] <keyword> last N lines (96), -f to follow\n ay read <keyword> [page opts] paginate: --last/--head N, --range A:B,\n --before-line L [--limit N]\n ay cat <keyword> full log\n ay head <keyword> first N lines\n ay send <keyword> <msg> send a message\n ay key <keyword> <key...> send raw keystrokes (down/up/enter/esc/…) — drives menus\n ay select <keyword> <N> pick option N of a needs_input selection menu\n ay attach <keyword> interactive attach (detach: Ctrl-\\)\n ay stop <keyword> graceful shutdown (/exit for claude/codex)\n ay exit <keyword> [reason] graceful shutdown, recording who/why (= 'ay send <kw> exit')\n ay restart <keyword> [--fresh] stop (if live) + relaunch resuming the session; --fresh replays the prompt\n ay status <keyword> agent status snapshot\n ay result <keyword> [--wait] pull an agent's structured result envelope\n ay result set '<json>' (inside an agent) deposit your result envelope\n ay reap kill process groups leaked by dead agents\n\nRemote:\n" + setupLine + " ay schedule <when> <cli> -- <msg> run an agent on a schedule (HH:MM or cron)\n ay serve [--port N] start HTTP API server (prints token)\n ay serve status show serve daemon/server status\n ay remote add <alias> http://<token>@<host>:<port>\n ay remote ls / rm <alias> manage saved remotes\n ay ls <token>@<host>:<port> connect inline (no alias needed)\n ay send <token>@<host>:<port>:<kw> <msg>\n\nRun an agent:\n ay [claude|codex|gemini|...] [options] -- [prompt]\n ay claude -- \"fix the bug in auth.ts\"\n ay claude --help full agent-runner options\n\nLabs (examples at https://github.com/snomiao/agent-yes/tree/main/lab):\n local-role-play/ designer + builder on one machine\n http-remote/ ay serve remote access demo\n p2p-pairing/ libp2p P2P (needs: cargo build --features swarm)\n");
1202
+ process.stdout.write(agentSection + "ay - agent-yes CLI\n\nManagement:\n ay ls [keyword] list running agents\n ay tail [-f] [-n N] <keyword> last N lines (96), -f to follow\n ay read <keyword> [page opts] paginate: --last/--head N, --range A:B,\n --before-line L [--limit N]\n ay cat <keyword> full log\n ay head <keyword> first N lines\n ay send <keyword> <msg> send a message\n ay key <keyword> <key...> send raw keystrokes (down/up/enter/esc/…) — drives menus\n ay select <keyword> <N> pick option N of a needs_input selection menu\n ay attach <keyword> interactive attach (detach: Ctrl-\\)\n ay stop <keyword> graceful shutdown (/exit for claude/codex)\n ay exit <keyword> [reason] graceful shutdown, recording who/why (= 'ay send <kw> exit')\n ay restart <keyword> [--fresh] stop (if live) + relaunch resuming the session; --fresh replays the prompt\n ay status <keyword> agent status snapshot\n ay result <keyword> [--wait] pull an agent's structured result envelope\n ay result set '<json>' (inside an agent) deposit your result envelope\n ay reap kill process groups leaked by dead agents\n\nRemote:\n" + setupLine + " ay schedule <when> <cli> -- <msg> run an agent on a schedule (HH:MM or cron)\n ay serve [--port N] start HTTP API server (prints token)\n ay serve status show serve daemon/server status\n ay remote add <alias> http://<token>@<host>:<port>\n ay remote ls / rm <alias> manage saved remotes\n ay expose <port> share localhost:<port> at https://<id>.agent-yes.com (private link)\n ay ls <token>@<host>:<port> connect inline (no alias needed)\n ay send <token>@<host>:<port>:<kw> <msg>\n\nRun an agent:\n ay [claude|codex|gemini|...] [options] -- [prompt]\n ay claude -- \"fix the bug in auth.ts\"\n ay claude --help full agent-runner options\n\nLabs (examples at https://github.com/snomiao/agent-yes/tree/main/lab):\n local-role-play/ designer + builder on one machine\n http-remote/ ay serve remote access demo\n p2p-pairing/ libp2p P2P (needs: cargo build --features swarm)\n");
1198
1203
  return 0;
1199
1204
  }
1200
1205
  function matchKeyword(record, keyword) {
@@ -1550,7 +1555,7 @@ async function fetchRemoteRecordsRaw(url, token, opts) {
1550
1555
  let base = url;
1551
1556
  let bearer = token;
1552
1557
  if (isWebrtcSpec(url)) {
1553
- const { startWebrtcBridge } = await import("./webrtcRemote-BLEbZnbY.js");
1558
+ const { startWebrtcBridge } = await import("./webrtcRemote-CD5EQ3uX.js");
1554
1559
  bridge = await startWebrtcBridge(url);
1555
1560
  base = bridge.baseUrl;
1556
1561
  bearer = bridge.token;
@@ -3991,7 +3996,7 @@ async function cmdNotify(rest) {
3991
3996
  }
3992
3997
  const ensure = async () => {
3993
3998
  if (!argv["ensure-daemon"]) return;
3994
- const { ensureDaemon } = await import("./notifyDaemon-BZmlbBqN.js");
3999
+ const { ensureDaemon } = await import("./notifyDaemon-hKT38cBs.js");
3995
4000
  await ensureDaemon().catch(() => null);
3996
4001
  };
3997
4002
  await heartbeatWatcher(parent, selfStartedAt);
@@ -4065,7 +4070,7 @@ async function cmdNotifyCursor(args) {
4065
4070
  }
4066
4071
  async function cmdNotifyd(rest) {
4067
4072
  const sub = rest[0] ?? "status";
4068
- const daemon = await import("./notifyDaemon-BZmlbBqN.js");
4073
+ const daemon = await import("./notifyDaemon-hKT38cBs.js");
4069
4074
  switch (sub) {
4070
4075
  case "run": return daemon.runDaemon();
4071
4076
  case "once": return daemon.runDaemon({ once: true });
@@ -4092,4 +4097,4 @@ async function cmdNotifyd(rest) {
4092
4097
 
4093
4098
  //#endregion
4094
4099
  export { TYPING_BADGE as $, renderRawLogLines as A, waitForLogQuiet as B, matchKeyword as C, recentReadEdges as D, readPtysize as E, runSubcommand as F, hostId as G, writeToIpc as H, snapshotStatus as I, readInbox as J, listInboxParents as K, stdinActivityPath as L, resolveReadWindow as M, resolveResumeArgs as N, renderLogTailLines as O, restartHintLines as P, notifyDir as Q, stopTipForCli as R, listRecords as S, readNotes as T, appendEvent as U, writeKeysPaced as V, gcInboxes as W, daemonLockDir as X, shouldStealLock as Y, daemonLockOwnerPath as Z, isPidAlive as _, cmdHelp as a, isUserTyping as b, deriveLiveState as c, extractMenu as d, extractNeedsInput as f, isExitRequest as g, isAgentStuck as h, backoffWhileTyping as i, resolveOne as j, renderRawLog as k, deriveLiveStatus as l, finalizedLines as m, READ_PAGE_DEFAULT as n, controlCodeFromName as o, extractTaskCounts as p, liveWatchers as q, TYPING_WINDOW_MS as r, cursorAbs as s, GRACEFUL_EXIT_COMMANDS as t, extractBadges as u, isSlashCommand as v, menuSelectKeys as w, lastStdinAt as x, isSubcommand as y, submitAndConfirm as z };
4095
- //# sourceMappingURL=subcommands-BYKJkWNP.js.map
4100
+ //# sourceMappingURL=subcommands-CNCgJ48t.js.map
@@ -1,9 +1,9 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
2
  import "./globalPidIndex-CoNr7tS8.js";
3
3
  import "./configShared-0MnIQ652.js";
4
- import { A as renderRawLogLines, B as waitForLogQuiet, C as matchKeyword, D as recentReadEdges, E as readPtysize, F as runSubcommand, H as writeToIpc, I as snapshotStatus, L as stdinActivityPath, M as resolveReadWindow, N as resolveResumeArgs, O as renderLogTailLines, P as restartHintLines, R as stopTipForCli, S as listRecords, T as readNotes, V as writeKeysPaced, _ 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 resolveOne, k as renderRawLog, 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 submitAndConfirm } from "./subcommands-BYKJkWNP.js";
4
+ import { A as renderRawLogLines, B as waitForLogQuiet, C as matchKeyword, D as recentReadEdges, E as readPtysize, F as runSubcommand, H as writeToIpc, I as snapshotStatus, L as stdinActivityPath, M as resolveReadWindow, N as resolveResumeArgs, O as renderLogTailLines, P as restartHintLines, R as stopTipForCli, S as listRecords, T as readNotes, V as writeKeysPaced, _ 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 resolveOne, k as renderRawLog, 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 submitAndConfirm } from "./subcommands-CNCgJ48t.js";
5
5
  import "./e2e-BeKjLhmO.js";
6
6
  import "./webrtcLink-BG0Xc4-W.js";
7
- import "./remotes-DsTnQhyx.js";
7
+ import "./remotes-CgT91bMo.js";
8
8
 
9
9
  export { cmdHelp, isSubcommand, runSubcommand };
@@ -187,4 +187,4 @@ async function startTray() {
187
187
 
188
188
  //#endregion
189
189
  export { ensureTray, startTray };
190
- //# sourceMappingURL=tray-DKwVRBwr.js.map
190
+ //# sourceMappingURL=tray-PMOWFOfk.js.map
@@ -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-Do5ex5Wm.js";
2
+ import { r as getInstalledPackage } from "./versionChecker-DhCi7ncH.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";
@@ -1824,4 +1824,4 @@ function sleep(ms) {
1824
1824
 
1825
1825
  //#endregion
1826
1826
  export { removeControlCharacters as a, AgentContext as i, agentYes as n, config as r, CLIS_CONFIG as t };
1827
- //# sourceMappingURL=ts-1qx-QhAe.js.map
1827
+ //# sourceMappingURL=ts-BQh1-ljE.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.189.1";
10
+ var version = "1.191.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-Do5ex5Wm.js.map
218
+ //# sourceMappingURL=versionChecker-DhCi7ncH.js.map
@@ -256,4 +256,4 @@ async function startWebrtcBridge(link) {
256
256
 
257
257
  //#endregion
258
258
  export { startWebrtcBridge };
259
- //# sourceMappingURL=webrtcRemote-BLEbZnbY.js.map
259
+ //# sourceMappingURL=webrtcRemote-CD5EQ3uX.js.map
@@ -193,4 +193,4 @@ function resolveSpawnCwd(input) {
193
193
 
194
194
  //#endregion
195
195
  export { getSpawnHook as a, hasProvisionHook as c, resolveSpawnCwd as d, setWorkspaceRoot as f, getProvisionRoot as i, hasSpawnHook as l, getMinFreeMb as n, getSpawnWaitMs as o, getProvisionHook as r, getWorkspaceRoot as s, getMaxAgents as t, isProvisionAllowed as u };
196
- //# sourceMappingURL=workspaceConfig-DKd6UvVm.js.map
196
+ //# sourceMappingURL=workspaceConfig-_GtAZtsi.js.map