agent-yes 1.300.3 → 1.300.4

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 (58) hide show
  1. package/dist/{SUPPORTED_CLIS-CWJr4TJH.js → SUPPORTED_CLIS-BIg_X-jE.js} +2 -2
  2. package/dist/{SUPPORTED_CLIS-ChSO8FiS.js → SUPPORTED_CLIS-D7lOxOnw.js} +3 -3
  3. package/dist/{agentShare-NkW0b0mg.js → agentShare-BfHUZgk4.js} +4 -4
  4. package/dist/{callback-CjlaFXp1.js → callback-COR0F2eB.js} +3 -3
  5. package/dist/{callback-B8CUyag4.js → callback-yWhCmi4k.js} +3 -3
  6. package/dist/{channels-aYwLMbFV.js → channels-rhxQArqN.js} +2 -2
  7. package/dist/cli.js +5 -5
  8. package/dist/{cmdPs-C8DIl8V6.js → cmdPs-B3jTE4f3.js} +3 -3
  9. package/dist/index.js +2 -2
  10. package/dist/{notifyDaemon-DWIfzEE7.js → notifyDaemon-BIo7Nkk2.js} +3 -3
  11. package/dist/{parentPingLoop-Bh3KuFcW.js → parentPingLoop-9T4Pzp6c.js} +2 -2
  12. package/dist/{remotes-B4v0Nowo.js → remotes-B4CNXwDS.js} +2 -2
  13. package/dist/{remotes-DnMQWaqQ.js → remotes-CQTEY8Gt.js} +1 -1
  14. package/dist/{rustBinary-gI_r3g9K.js → rustBinary-CJXUPUWd.js} +48 -5
  15. package/dist/rustBinary-FhGG3Yfl.js +4 -0
  16. package/dist/{schedule-DryC--yx.js → schedule-DmijwnTA.js} +4 -4
  17. package/dist/{serve-DVoYVgBo.js → serve-F5tXYO0-.js} +99 -32
  18. package/dist/{serveRust-DDQiZmMf.js → serveRust-BAawe83i.js} +16 -2
  19. package/dist/{setup--1zRHaGW.js → setup-mCb1JbTX.js} +2 -2
  20. package/dist/{share-C9oGvjXT.js → share-CLataFnI.js} +18 -12
  21. package/dist/share-nmgSIjYP.js +4 -0
  22. package/dist/{shareCmd-BI3hRWGO.js → shareCmd-aOKimJeT.js} +25 -7
  23. package/dist/{subcommands-BviFOQZE.js → subcommands-DRq0MgSm.js} +2 -2
  24. package/dist/{subcommands-UWLkF5pq.js → subcommands-Ddo2TYZs.js} +404 -77
  25. package/dist/{terminal-DviH1E3C.js → terminal-DEXrWOa9.js} +2 -2
  26. package/dist/trayApp-0RVjo43f.js +5 -0
  27. package/dist/{trayApp-PJrwfyDs.js → trayApp-BUXx7cES.js} +2 -2
  28. package/dist/{ts--JmSY117.js → ts-CRbycTni.js} +5 -5
  29. package/dist/{versionChecker-CCGSbjio.js → versionChecker-DeQEhRGB.js} +2 -2
  30. package/dist/{webrtcRemote-Cd4vTrgv.js → webrtcRemote-Cy5kB8aR.js} +115 -14
  31. package/dist/{widget-DgBDIGRQ.js → widget-DneXqnL8.js} +3 -3
  32. package/dist/{ws-DnBg8-g-.js → ws-DPw1lVTi.js} +3 -3
  33. package/dist/{ws-dc7MP054.js → ws-Dr-0Ckq7.js} +2 -2
  34. package/package.json +1 -1
  35. package/ts/remoteCache.bun.spec.ts +191 -0
  36. package/ts/remoteCache.spec.ts +191 -0
  37. package/ts/remoteCache.ts +193 -0
  38. package/ts/rustBinary.bun.spec.ts +39 -2
  39. package/ts/rustBinary.spec.ts +53 -2
  40. package/ts/rustBinary.ts +61 -3
  41. package/ts/serve.spec.ts +103 -0
  42. package/ts/serve.ts +100 -15
  43. package/ts/serveRust.spec.ts +24 -1
  44. package/ts/serveRust.ts +19 -0
  45. package/ts/share.bun.spec.ts +54 -2
  46. package/ts/share.spec.ts +54 -2
  47. package/ts/share.ts +40 -15
  48. package/ts/shareCmd.ts +33 -2
  49. package/ts/strayServe.ts +1 -0
  50. package/ts/subcommands.spec.ts +36 -3
  51. package/ts/subcommands.ts +384 -98
  52. package/ts/webrtcRemote.ts +66 -20
  53. package/ts/webrtcSignal.bun.spec.ts +120 -0
  54. package/ts/webrtcSignal.spec.ts +120 -0
  55. package/ts/webrtcSignal.ts +143 -0
  56. package/dist/rustBinary-BNmAJEBb.js +0 -4
  57. package/dist/share-Bmnd_qT0.js +0 -4
  58. package/dist/trayApp-BDIb8fOj.js +0 -5
@@ -121,7 +121,21 @@ function planRustServe(rest, env = process.env) {
121
121
  argv
122
122
  };
123
123
  }
124
+ /**
125
+ * Which runtime a daemon registered with these `ay serve` args actually runs —
126
+ * and therefore which persisted room file holds the room it hosts
127
+ * (`.share-room` for TypeScript, `.share-room-ayrs` for ayrs; see share.ts).
128
+ *
129
+ * Mirrors cmdServe exactly: an argv that planRustServe delegates runs under
130
+ * ayrs whenever the binary exists, and falls back to TypeScript otherwise. Any
131
+ * link we print for a daemon must be derived through this, or `ay share` hands
132
+ * out a link to a room nobody serves. `hasAyrs` is injected so the decision
133
+ * stays a pure function for tests.
134
+ */
135
+ function daemonShareRuntime(args, hasAyrs, env = process.env) {
136
+ return planRustServe(args, env).kind === "rust" && hasAyrs() ? "rust" : "ts";
137
+ }
124
138
 
125
139
  //#endregion
126
- export { planRustServe };
127
- //# sourceMappingURL=serveRust-DDQiZmMf.js.map
140
+ export { daemonShareRuntime, planRustServe };
141
+ //# sourceMappingURL=serveRust-BAawe83i.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-DVoYVgBo.js");
100
+ const { cmdServe } = await import("./serve-F5tXYO0-.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--1zRHaGW.js.map
110
+ //# sourceMappingURL=setup-mCb1JbTX.js.map
@@ -69,20 +69,26 @@ async function getIceServers() {
69
69
  return STUN;
70
70
  }
71
71
  }
72
- function shareRoomPath() {
72
+ function shareRoomFileName(runtime) {
73
+ return runtime === "rust" ? ".share-room-ayrs" : ".share-room";
74
+ }
75
+ function shareRoomPath(runtime = "ts") {
73
76
  const home = process.env.AGENT_YES_HOME ?? path.join(homedir(), ".agent-yes");
74
- return path.join(home, ".share-room");
77
+ return path.join(home, shareRoomFileName(runtime));
75
78
  }
76
- async function loadOrCreateShareRoom(sighost = DEFAULT_SIGHOST) {
79
+ async function readShareRoom(runtime = "ts") {
77
80
  try {
78
- const url = (await readFile(shareRoomPath(), "utf-8")).trim();
79
- if (url.startsWith("webrtc://")) {
80
- if (parseShareUrl(url).token.startsWith(MARKER)) return url;
81
- }
81
+ const url = (await readFile(shareRoomPath(runtime), "utf-8")).trim();
82
+ if (url.startsWith("webrtc://") && parseShareUrl(url).token.startsWith(MARKER)) return url;
82
83
  } catch {}
84
+ return null;
85
+ }
86
+ async function loadOrCreateShareRoom(sighost = DEFAULT_SIGHOST, runtime = "ts") {
87
+ const existing = await readShareRoom(runtime);
88
+ if (existing) return existing;
83
89
  const url = `webrtc://${"r" + randomBytes(6).toString("hex")}:${MARKER}${randomBytes(32).toString("hex")}@${sighost}`;
84
- await mkdir(path.dirname(shareRoomPath()), { recursive: true });
85
- await writeFile(shareRoomPath(), url, { mode: 384 });
90
+ await mkdir(path.dirname(shareRoomPath(runtime)), { recursive: true });
91
+ await writeFile(shareRoomPath(runtime), url, { mode: 384 });
86
92
  return url;
87
93
  }
88
94
  function parseShareUrl(s) {
@@ -104,7 +110,7 @@ function formatRoomLink(room, S, host) {
104
110
  function shareLinkFromRoomUrl(url) {
105
111
  const { room, token, host } = parseShareUrl(url);
106
112
  const { s, v2 } = parseSecret(token);
107
- if (!v2) throw new Error("refusing to derive a link for an unencrypted room — delete ~/.agent-yes/.share-room to rotate to an encrypted link");
113
+ if (!v2) throw new Error("refusing to derive a link for an unencrypted room — delete the persisted room file (~/.agent-yes/.share-room, or .share-room-ayrs for the Rust daemon) to rotate to an encrypted link");
108
114
  return formatShareLink(room, s, host);
109
115
  }
110
116
  async function linkFromBunCache() {
@@ -635,5 +641,5 @@ async function startShare(opts) {
635
641
  }
636
642
 
637
643
  //#endregion
638
- export { shareLinkFromRoomUrl as a, loadOrCreateShareRoom as i, getIceServers as n, startShare as o, importRTC as r, formatRoomLink as t };
639
- //# sourceMappingURL=share-C9oGvjXT.js.map
644
+ export { readShareRoom as a, shareRoomPath as c, loadOrCreateShareRoom as i, startShare as l, getIceServers as n, shareLinkFromRoomUrl as o, importRTC as r, shareRoomFileName as s, formatRoomLink as t };
645
+ //# sourceMappingURL=share-CLataFnI.js.map
@@ -0,0 +1,4 @@
1
+ import "./e2e-z1xpwSAg.js";
2
+ import { a as readShareRoom, c as shareRoomPath, i as loadOrCreateShareRoom, l as startShare, n as getIceServers, o as shareLinkFromRoomUrl, r as importRTC, s as shareRoomFileName, t as formatRoomLink } from "./share-CLataFnI.js";
3
+
4
+ export { getIceServers, importRTC, loadOrCreateShareRoom, readShareRoom, shareLinkFromRoomUrl, shareRoomFileName, startShare };
@@ -242,8 +242,23 @@ shown first and needs a y at a [y/N] prompt.
242
242
 
243
243
  Options:
244
244
  --port N HTTP port (default: ${DEFAULT_SHARE_PORT}, or the daemon's)\n --path /ay tailscale mount path (default: ${DEFAULT_TS_PATH})\n -y, --yes approve the shown commands without prompting\n --json print {mode, url} as JSON\n\nThe URL carries this host's serve token: whoever holds it can read and steer\nevery agent here. Rotate: rm ~/.agent-yes/.serve-token && ay serve install\n`;
245
+ async function shareRuntimeOf(args) {
246
+ const { daemonShareRuntime } = await import("./serveRust-BAawe83i.js");
247
+ const { findAyrsBinary } = await import("./rustBinary-FhGG3Yfl.js");
248
+ return daemonShareRuntime(args ?? [], () => !!findAyrsBinary());
249
+ }
250
+ async function daemonShareLink(args) {
251
+ const { readShareRoom, shareLinkFromRoomUrl } = await import("./share-nmgSIjYP.js");
252
+ const room = await readShareRoom(await shareRuntimeOf(args));
253
+ if (!room) return null;
254
+ try {
255
+ return shareLinkFromRoomUrl(room);
256
+ } catch {
257
+ return null;
258
+ }
259
+ }
245
260
  async function cmdShareStatus(mount) {
246
- const { inspectServeDaemon } = await import("./serve-DVoYVgBo.js");
261
+ const { inspectServeDaemon } = await import("./serve-F5tXYO0-.js");
247
262
  const [d, ts] = await Promise.all([inspectServeDaemon(), detectTailscale()]);
248
263
  const line = (k, v) => process.stdout.write(`${k.padEnd(11)}${v}\n`);
249
264
  if (d.args === null) {
@@ -254,7 +269,10 @@ async function cmdShareStatus(mount) {
254
269
  const webrtc = hasFlag(d.args, "--webrtc") || hasFlag(d.args, "--share");
255
270
  line("http:", d.port ? d.httpUp ? `up on 127.0.0.1:${d.port}` : `DOWN (127.0.0.1:${d.port})` : "off");
256
271
  if (d.consoleUrl) line("portless:", d.httpUp ? d.consoleUrl.replace(/#.*/, "") : "DOWN");
257
- line("webrtc:", webrtc ? "on (agent-yes.com room)" : "off");
272
+ if (webrtc) {
273
+ const link = await daemonShareLink(d.args);
274
+ line("webrtc:", link ? `on — ${link}` : "on (room not minted yet — run `ay share webrtc`)");
275
+ } else line("webrtc:", "off");
258
276
  if (!ts) {
259
277
  line("tailscale:", Bun.which("tailscale") ? "not running" : "not installed");
260
278
  return d.httpUp || webrtc ? 0 : 1;
@@ -287,7 +305,7 @@ async function cmdShare(rest) {
287
305
  process.stderr.write(`ay share: unknown mode '${mode}' — one of ${SHARE_MODES.join(", ")}\n`);
288
306
  return 1;
289
307
  }
290
- const { inspectServeDaemon, cmdServe } = await import("./serve-DVoYVgBo.js");
308
+ const { inspectServeDaemon, cmdServe } = await import("./serve-F5tXYO0-.js");
291
309
  const [daemon, ts] = await Promise.all([inspectServeDaemon(), detectTailscale()]);
292
310
  const lanIp = pickLanIp(networkInterfaces());
293
311
  if (!mode) {
@@ -378,8 +396,8 @@ async function cmdShare(rest) {
378
396
  let url;
379
397
  const port = state.port ?? (portArg ? Number(portArg) : DEFAULT_SHARE_PORT);
380
398
  if (mode === "webrtc") {
381
- const { loadOrCreateShareRoom, shareLinkFromRoomUrl } = await import("./share-Bmnd_qT0.js");
382
- url = shareLinkFromRoomUrl(await loadOrCreateShareRoom());
399
+ const { loadOrCreateShareRoom, shareLinkFromRoomUrl } = await import("./share-nmgSIjYP.js");
400
+ url = shareLinkFromRoomUrl(await loadOrCreateShareRoom(void 0, await shareRuntimeOf(state.args)));
383
401
  } else if (mode === "portless") url = state.consoleUrl ?? httpShareUrl("https://agent-yes.localhost", state.token);
384
402
  else if (mode === "local") url = httpShareUrl(`http://127.0.0.1:${port}`, state.token);
385
403
  else if (mode === "lan") url = httpShareUrl(`http://${lanIp}:${port}`, state.token);
@@ -411,5 +429,5 @@ async function cmdShare(rest) {
411
429
  }
412
430
 
413
431
  //#endregion
414
- export { cmdShare };
415
- //# sourceMappingURL=shareCmd-BI3hRWGO.js.map
432
+ export { cmdShare, daemonShareLink };
433
+ //# sourceMappingURL=shareCmd-aOKimJeT.js.map
@@ -5,9 +5,9 @@ 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 renderLogTailLines, A as isAgentStuck, B as lastStdinAt, C as extractBadges, D as finalizedLines, E as extractTaskCounts, F as isSubcommand, G as probeStdinReachable, H as matchKeyword, I as isUnknownManagerToken, J as readLogForRender, K as readAgentPtysize, L as isUnreachableWriteErrno, M as isExitRequest, N as isPidAlive, O as inspectSubmission, P as isSlashCommand, Q as recentReadEdges, R as isUserTyping, S as envelopeCostFor, T as extractNeedsInput, U as menuSelectKeys, V as listRecords, W as ownedCollapsedPaste, X as readPtysize, Y as readNotes, Z as recentMessageEdges, _ as cwdLabel, a as READ_WINDOW_MS, at as restartHintLines, b as drainerLauncher, c as SEND_EXIT_UNREACHABLE, ct as snapshotStatus, d as buildEnvelope, dt as submitAndConfirm, et as renderRawLog, f as cliDefaults, ft as waitForLogQuiet, g as cursorAbs, h as controlCodeFromName, i as READ_PAGE_DEFAULT, it as resolveResumeArgs, j as isBareManagerInvocation, k as isAgentIdShaped, l as TYPING_WINDOW_MS, lt as stdinActivityPath, m as confirmStdinUnreachable, mt as writeToIpc, n as GRACEFUL_EXIT_COMMANDS, nt as resolveOne, o as SEND_BODY_MAX_CHARS, ot as runSubcommand, p as cmdHelp, pt as writeKeysPaced, q as readComposerState, r as MAX_RENDER_BYTES, rt as resolveReadWindow, s as SEND_EXIT_QUEUED, st as sendPayloadCapError, t as COMPOSER_WINDOWS, tt as renderRawLogLines, u as backoffWhileTyping, ut as stopTipForCli, v as deriveLiveState, w as extractMenu, x as envelopeAttribution, y as deriveLiveStatus, z as lastReadAt } from "./subcommands-UWLkF5pq.js";
8
+ import { $ as renderLogTailLines, A as isAgentStuck, B as lastStdinAt, C as extractBadges, D as finalizedLines, E as extractTaskCounts, F as isSubcommand, G as probeStdinReachable, H as matchKeyword, I as isUnknownManagerToken, J as readLogForRender, K as readAgentPtysize, L as isUnreachableWriteErrno, M as isExitRequest, N as isPidAlive, O as inspectSubmission, P as isSlashCommand, Q as recentReadEdges, R as isUserTyping, S as envelopeCostFor, T as extractNeedsInput, U as menuSelectKeys, V as listRecords, W as ownedCollapsedPaste, X as readPtysize, Y as readNotes, Z as recentMessageEdges, _ as cwdLabel, a as READ_WINDOW_MS, at as restartHintLines, b as drainerLauncher, c as SEND_EXIT_UNREACHABLE, ct as snapshotStatus, d as buildEnvelope, dt as submitAndConfirm, et as renderRawLog, f as cliDefaults, ft as waitForLogQuiet, g as cursorAbs, h as controlCodeFromName, i as READ_PAGE_DEFAULT, it as resolveResumeArgs, j as isBareManagerInvocation, k as isAgentIdShaped, l as TYPING_WINDOW_MS, lt as stdinActivityPath, m as confirmStdinUnreachable, mt as writeToIpc, n as GRACEFUL_EXIT_COMMANDS, nt as resolveOne, o as SEND_BODY_MAX_CHARS, ot as runSubcommand, p as cmdHelp, pt as writeKeysPaced, q as readComposerState, r as MAX_RENDER_BYTES, rt as resolveReadWindow, s as SEND_EXIT_QUEUED, st as sendPayloadCapError, t as COMPOSER_WINDOWS, tt as renderRawLogLines, u as backoffWhileTyping, ut as stopTipForCli, v as deriveLiveState, w as extractMenu, x as envelopeAttribution, y as deriveLiveStatus, z as lastReadAt } from "./subcommands-Ddo2TYZs.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-DFRyWNMs.js";
11
- import "./remotes-B4v0Nowo.js";
11
+ import "./remotes-B4CNXwDS.js";
12
12
 
13
13
  export { READ_WINDOW_MS, cmdHelp, isBareManagerInvocation, isSubcommand, isUnknownManagerToken, lastReadAt, runSubcommand };