agent-yes 1.292.0 → 1.293.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 (40) hide show
  1. package/README.md +2 -0
  2. package/dist/{SUPPORTED_CLIS-BfM59Xpj.js → SUPPORTED_CLIS-CB98L1zH.js} +2 -2
  3. package/dist/{SUPPORTED_CLIS-BDLK4Ezp.js → SUPPORTED_CLIS-rDJ9wt_4.js} +3 -3
  4. package/dist/{agentShare-BU4Mkg55.js → agentShare-DAKBVsJX.js} +3 -3
  5. package/dist/{callback-Bw5PmAIq.js → callback-BXGJ2Lao.js} +3 -3
  6. package/dist/{callback-7gzaW-65.js → callback-CsUXaJ-G.js} +3 -3
  7. package/dist/cli.js +7 -7
  8. package/dist/{cmdPs-DHYXWzXx.js → cmdPs-BPiWShcv.js} +3 -3
  9. package/dist/index.js +2 -2
  10. package/dist/{notifyDaemon-DLqQeAti.js → notifyDaemon-B_0fzPev.js} +3 -3
  11. package/dist/{parentPingLoop-H6V7_qIA.js → parentPingLoop-BRhzqYJ-.js} +2 -2
  12. package/dist/{remotes-tmKwrr20.js → remotes-5P__pAXA.js} +2 -2
  13. package/dist/{remotes-wPL0JtBs.js → remotes-CY69MeQB.js} +1 -1
  14. package/dist/{rustBinary-CK3xoBVr.js → rustBinary-BOZV2IrF.js} +21 -3
  15. package/dist/rustBinary-ByeLQphl.js +4 -0
  16. package/dist/{schedule-CVeX3FUy.js → schedule-D_ZH65el.js} +4 -4
  17. package/dist/{serve-Cek2eJS-.js → serve-CplhD9SY.js} +59 -18
  18. package/dist/serveRust-DDQiZmMf.js +127 -0
  19. package/dist/{setup-ERJSELGI.js → setup-CYFWwZAl.js} +3 -3
  20. package/dist/{subcommands-O-CiI-D5.js → subcommands-CZZ-l7le.js} +19 -19
  21. package/dist/{subcommands-CSAgQgag.js → subcommands-bVPnXbfj.js} +2 -2
  22. package/dist/{systemPathLink-BVdk48Vz.js → systemPathLink-VV-Vm6y2.js} +1 -1
  23. package/dist/{terminal-CPxIAJy_.js → terminal-BufLgBpW.js} +2 -2
  24. package/dist/{todoCli-DSQXAcwA.js → todoCli-BDttv8mk.js} +1 -1
  25. package/dist/{tray-CIt9mCKZ.js → tray-DWWsVS7Y.js} +1 -1
  26. package/dist/{trayApp-xQpwYUxK.js → trayApp-BfUc_4-h.js} +2 -2
  27. package/dist/trayApp-CfVKFhYn.js +5 -0
  28. package/dist/{ts--tcZ9vtp.js → ts-CPqeQSS8.js} +3 -3
  29. package/dist/{versionChecker-CLOLbs5d.js → versionChecker-CqLkSVM1.js} +2 -2
  30. package/dist/{webrtcRemote-yvMYsij3.js → webrtcRemote-0RGrSwqd.js} +1 -1
  31. package/dist/{widget-B2YAkIhz.js → widget-DTq1SAWM.js} +3 -3
  32. package/dist/{ws-DRO7LfQQ.js → ws-BxmJb-CE.js} +2 -2
  33. package/dist/{ws-BZdG-J-R.js → ws-CJompjqD.js} +3 -3
  34. package/package.json +1 -1
  35. package/ts/rustBinary.ts +22 -0
  36. package/ts/serve.ts +51 -0
  37. package/ts/serveRust.spec.ts +85 -0
  38. package/ts/serveRust.ts +114 -0
  39. package/dist/rustBinary-D9wbtLuv.js +0 -4
  40. package/dist/trayApp-oPSkAWLK.js +0 -5
package/README.md CHANGED
@@ -32,6 +32,8 @@ shortcut that launches claude with no arguments.
32
32
 
33
33
  For the local web console, install [Portless](https://portless.sh/) once with `npm install -g portless`, then run `ay serve`. It assigns a free internal port and serves the console at `https://agent-yes.localhost/`. `ay serve --port N` remains available for a fixed-port API listener.
34
34
 
35
+ Like `ay <cli>`, `ay serve` runs the Rust daemon (`ayrs serve`) by default for the flags it supports — `--webrtc [webrtc://url]`, `--port N`, `--sighost H`. The bare `ay serve` (Portless), `--share`, and the `install`/`status`/`logs` subcommands still run the TypeScript server; `--no-rust` (or `AGENT_YES_NO_RUST=1`) forces it for everything.
36
+
35
37
  ## Features
36
38
 
37
39
  - **Multi-CLI Support**: Works with Claude, Codex, Copilot, and Cursor CLI tools
@@ -1,8 +1,8 @@
1
- import { t as CLIS_CONFIG } from "./ts--tcZ9vtp.js";
1
+ import { t as CLIS_CONFIG } from "./ts-CPqeQSS8.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-BfM59Xpj.js.map
8
+ //# sourceMappingURL=SUPPORTED_CLIS-CB98L1zH.js.map
@@ -1,12 +1,12 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CLOLbs5d.js";
3
- import "./ts--tcZ9vtp.js";
2
+ import "./versionChecker-CqLkSVM1.js";
3
+ import "./ts-CPqeQSS8.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-BfM59Xpj.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CB98L1zH.js";
11
11
 
12
12
  export { SUPPORTED_CLIS };
@@ -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 { J as resolveOne } from "./subcommands-O-CiI-D5.js";
8
+ import { J as resolveOne } from "./subcommands-CZZ-l7le.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
- import "./remotes-tmKwrr20.js";
11
+ import "./remotes-5P__pAXA.js";
12
12
  import { o as startShare } from "./share-C9oGvjXT.js";
13
13
 
14
14
  //#region ts/agentShare.ts
@@ -232,4 +232,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
232
232
 
233
233
  //#endregion
234
234
  export { createScopedShare, listShares, revokeAllShares, revokeShare };
235
- //# sourceMappingURL=agentShare-BU4Mkg55.js.map
235
+ //# sourceMappingURL=agentShare-DAKBVsJX.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-O-CiI-D5.js";
8
+ import "./subcommands-CZZ-l7le.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
- import "./remotes-tmKwrr20.js";
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-7gzaW-65.js";
13
+ import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-CsUXaJ-G.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-O-CiI-D5.js";
2
+ import { J as resolveOne } from "./subcommands-CZZ-l7le.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-Cek2eJS-.js");
75
+ const { resolveLocalServeUrl } = await import("./serve-CplhD9SY.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-7gzaW-65.js.map
190
+ //# sourceMappingURL=callback-CsUXaJ-G.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-CLOLbs5d.js";
5
- import { u as getRustBinary } from "./rustBinary-CK3xoBVr.js";
4
+ import { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-CqLkSVM1.js";
5
+ import { d as getRustBinary } from "./rustBinary-BOZV2IrF.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-CSAgQgag.js");
298
+ const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-bVPnXbfj.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-BDLK4Ezp.js");
312
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-rDJ9wt_4.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);
@@ -328,12 +328,12 @@ await checkAndAutoUpdate();
328
328
  logger.info(versionString());
329
329
  const config = parseCliArgs(process.argv);
330
330
  if (config.tray) {
331
- const { startTray } = await import("./tray-CIt9mCKZ.js");
331
+ const { startTray } = await import("./tray-DWWsVS7Y.js");
332
332
  await startTray();
333
333
  await new Promise(() => {});
334
334
  }
335
335
  {
336
- const { ensureTray } = await import("./tray-CIt9mCKZ.js");
336
+ const { ensureTray } = await import("./tray-DWWsVS7Y.js");
337
337
  ensureTray();
338
338
  }
339
339
  if (!config.showVersion && !config.appendPrompt && !config.tray) {
@@ -360,7 +360,7 @@ if (config.useRust) {
360
360
  }
361
361
  }
362
362
  if (rustBinary) {
363
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-BDLK4Ezp.js");
363
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-rDJ9wt_4.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,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 { F as listRecords, dt as buildAgentForest, ft as flattenForest, h as deriveLiveState } from "./subcommands-O-CiI-D5.js";
8
+ import { F as listRecords, dt as buildAgentForest, ft as flattenForest, h as deriveLiveState } from "./subcommands-CZZ-l7le.js";
9
9
  import "./notifyStore-2SWKGwZI.js";
10
10
  import "./webrtcLink-CnQf9pmu.js";
11
- import "./remotes-tmKwrr20.js";
11
+ import "./remotes-5P__pAXA.js";
12
12
  import { i as systemStats, n as sampleTrees, r as snapshotProcs, t as humanBytes } from "./procStats-CyD8h5nx.js";
13
13
  import yargs from "yargs";
14
14
  import { readFileSync } from "node:fs";
@@ -330,4 +330,4 @@ function readPpidSync(pid) {
330
330
 
331
331
  //#endregion
332
332
  export { cmdPs };
333
- //# sourceMappingURL=cmdPs-DHYXWzXx.js.map
333
+ //# sourceMappingURL=cmdPs-BPiWShcv.js.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CLOLbs5d.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--tcZ9vtp.js";
2
+ import "./versionChecker-CqLkSVM1.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-CPqeQSS8.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,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 { D as isPidAlive, F as listRecords, G as renderLogTailLines, h as deriveLiveState } from "./subcommands-O-CiI-D5.js";
8
+ import { D as isPidAlive, F as listRecords, G as renderLogTailLines, h as deriveLiveState } from "./subcommands-CZZ-l7le.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
- import "./remotes-tmKwrr20.js";
11
+ import "./remotes-5P__pAXA.js";
12
12
  import { mkdir, readFile, rename, rm, stat, writeFile } from "fs/promises";
13
13
  import { randomUUID } from "node:crypto";
14
14
  import { execFile, execFileSync } from "node:child_process";
@@ -879,4 +879,4 @@ async function ensureDaemon() {
879
879
 
880
880
  //#endregion
881
881
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
882
- //# sourceMappingURL=notifyDaemon-DLqQeAti.js.map
882
+ //# sourceMappingURL=notifyDaemon-B_0fzPev.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-CSAgQgag.js");
341
+ const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-bVPnXbfj.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-H6V7_qIA.js.map
469
+ //# sourceMappingURL=parentPingLoop-BRhzqYJ-.js.map
@@ -93,7 +93,7 @@ async function resolveRemoteSpec(spec) {
93
93
  * The bridge lives for the rest of the process (torn down on `process.exit`).
94
94
  */
95
95
  async function resolveWebrtc(link, keyword, label) {
96
- const { startWebrtcBridge } = await import("./webrtcRemote-yvMYsij3.js");
96
+ const { startWebrtcBridge } = await import("./webrtcRemote-0RGrSwqd.js");
97
97
  const bridge = await startWebrtcBridge(link);
98
98
  return {
99
99
  url: bridge.baseUrl,
@@ -181,4 +181,4 @@ async function cmdRemote(rest) {
181
181
 
182
182
  //#endregion
183
183
  export { resolveRemoteSpec as a, readRemotes as i, deleteRemoteAlias as n, writeRemoteAlias as o, parseDirectRemoteSpec as r, cmdRemote as t };
184
- //# sourceMappingURL=remotes-tmKwrr20.js.map
184
+ //# sourceMappingURL=remotes-5P__pAXA.js.map
@@ -1,5 +1,5 @@
1
1
  import "./e2e-z1xpwSAg.js";
2
2
  import "./webrtcLink-CnQf9pmu.js";
3
- import { a as resolveRemoteSpec, i as readRemotes, n as deleteRemoteAlias, o as writeRemoteAlias, r as parseDirectRemoteSpec, t as cmdRemote } from "./remotes-tmKwrr20.js";
3
+ import { a as resolveRemoteSpec, i as readRemotes, n as deleteRemoteAlias, o as writeRemoteAlias, r as parseDirectRemoteSpec, t as cmdRemote } from "./remotes-5P__pAXA.js";
4
4
 
5
5
  export { cmdRemote };
@@ -1,4 +1,4 @@
1
- import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-CLOLbs5d.js";
1
+ import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-CqLkSVM1.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";
@@ -157,6 +157,24 @@ function findTrayLauncher() {
157
157
  for (const p of searchPaths) if (p && existsSync(p)) return p;
158
158
  }
159
159
  /**
160
+ * Locate the `ayrs` binary (the Rust `serve` daemon). Same install shapes as
161
+ * the agent runtime — a dev `rs/target` build, the downloaded release bin dir
162
+ * (CI ships ayrs in every platform bundle since #473), or `~/.cargo/bin` on
163
+ * PATH after `bun run build:rs`. Undefined when absent (an older release, or a
164
+ * platform whose bundle predates it) — callers fall back to the TS server.
165
+ */
166
+ function findAyrsBinary() {
167
+ const exe = process.platform === "win32" ? "ayrs.exe" : "ayrs";
168
+ const dir = import.meta.dirname ?? import.meta.dir;
169
+ const searchPaths = [
170
+ path.resolve(dir, `../rs/target/release/${exe}`),
171
+ path.resolve(dir, `../rs/target/debug/${exe}`),
172
+ path.join(getBinDir(), exe),
173
+ Bun.which("ayrs") ?? ""
174
+ ];
175
+ for (const p of searchPaths) if (p && existsSync(p)) return p;
176
+ }
177
+ /**
160
178
  * Get GitHub release download URL for the binary
161
179
  */
162
180
  function getDownloadUrl(version = "latest") {
@@ -325,5 +343,5 @@ async function getRustBinary(options = {}) {
325
343
  }
326
344
 
327
345
  //#endregion
328
- export { findTrayLauncher as a, getBinaryName as c, findSpawnHiddenLauncher as i, getDownloadUrl as l, downloadBinary as n, gcOldBinaryDirs as o, findRustBinary as r, getBinDir as s, devBuildInfo as t, getRustBinary as u };
329
- //# sourceMappingURL=rustBinary-CK3xoBVr.js.map
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-BOZV2IrF.js.map
@@ -0,0 +1,4 @@
1
+ import "./versionChecker-CqLkSVM1.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-BOZV2IrF.js";
3
+
4
+ export { findAyrsBinary, gcOldBinaryDirs };
@@ -1,13 +1,13 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import "./versionChecker-CLOLbs5d.js";
3
- import "./ts--tcZ9vtp.js";
2
+ import "./versionChecker-CqLkSVM1.js";
3
+ import "./ts-CPqeQSS8.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-BfM59Xpj.js";
10
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CB98L1zH.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-CVeX3FUy.js.map
157
+ //# sourceMappingURL=schedule-D_ZH65el.js.map
@@ -1,7 +1,7 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import { i as getInstalledPackage } from "./versionChecker-CLOLbs5d.js";
3
- import { i as findSpawnHiddenLauncher } from "./rustBinary-CK3xoBVr.js";
4
- import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts--tcZ9vtp.js";
2
+ import { i as getInstalledPackage } from "./versionChecker-CqLkSVM1.js";
3
+ import { a as findSpawnHiddenLauncher } from "./rustBinary-BOZV2IrF.js";
4
+ import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-CPqeQSS8.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-BfM59Xpj.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-O-CiI-D5.js";
15
+ import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-CB98L1zH.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-CZZ-l7le.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
- import "./remotes-tmKwrr20.js";
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-7gzaW-65.js";
21
+ import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-CsUXaJ-G.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-DRO7LfQQ.js";
25
+ import { i as importProvisionModule } from "./ws-BxmJb-CE.js";
26
26
  import { r as spawnRejectionReason } from "./spawnGate-YpHopveO.js";
27
- import { i as launchTray } from "./trayApp-xQpwYUxK.js";
27
+ import { i as launchTray } from "./trayApp-BfUc_4-h.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";
@@ -1590,6 +1590,32 @@ async function cmdServeStatus(args) {
1590
1590
  }
1591
1591
  return 0;
1592
1592
  }
1593
+ async function runAyrsServe(ayrs, argv) {
1594
+ const child = Bun.spawn([ayrs, ...argv], {
1595
+ stdio: [
1596
+ "inherit",
1597
+ "inherit",
1598
+ "inherit"
1599
+ ],
1600
+ env: process.env,
1601
+ cwd: process.cwd()
1602
+ });
1603
+ const forward = (sig) => () => {
1604
+ try {
1605
+ child.kill(sig);
1606
+ } catch {}
1607
+ };
1608
+ const onInt = forward("SIGINT");
1609
+ const onTerm = forward("SIGTERM");
1610
+ process.on("SIGINT", onInt);
1611
+ process.on("SIGTERM", onTerm);
1612
+ try {
1613
+ return await child.exited;
1614
+ } finally {
1615
+ process.off("SIGINT", onInt);
1616
+ process.off("SIGTERM", onTerm);
1617
+ }
1618
+ }
1593
1619
  async function cmdServe(rest) {
1594
1620
  if (rest.includes("-h") || rest.includes("--help")) {
1595
1621
  process.stdout.write(`Usage: ay serve [options]
@@ -1607,6 +1633,11 @@ Modes (default: --http):
1607
1633
  (stable link across restarts; delete the file to rotate).
1608
1634
  --share [URL] Legacy alias for --http --webrtc
1609
1635
 
1636
+ Runtime: like \`ay <cli>\`, the Rust daemon (ayrs serve) runs by default for
1637
+ the flags it supports — --webrtc [webrtc://url], --port N, --sighost H.
1638
+ Everything else (bare \`ay serve\`, --share/--http/--host/--tls-*, the
1639
+ subcommands) runs the TypeScript server. --no-rust forces TypeScript.
1640
+
1610
1641
  Options:
1611
1642
  --port N Bypass Portless and listen on a fixed HTTP port
1612
1643
  --host HOST Interface to bind (default: 127.0.0.1; use 0.0.0.0 to expose)
@@ -1617,6 +1648,16 @@ Options:
1617
1648
  ${portlessConsoleUrl()}\n --allow-spawn Deprecated no-op — the console can always spawn agents\n --tls-cert FILE TLS certificate PEM\n --tls-key FILE TLS private key PEM\n\nSubcommands:\n ay serve install install as background daemon (oxmgr; pm2 fallback on Windows without the winfix build)\n ay serve status show daemon/server status (add --json for scripts)\n ay serve uninstall remove daemon\n ay serve logs view daemon logs\n\nOnce running, connect from another machine:\n ay ls <token>@<host>:<port>\n ay remote add <alias> http://<token>@<host>:<port>\n`);
1618
1649
  return 0;
1619
1650
  }
1651
+ {
1652
+ const { planRustServe } = await import("./serveRust-DDQiZmMf.js");
1653
+ const plan = planRustServe(rest);
1654
+ if (plan.kind === "rust") {
1655
+ const { findAyrsBinary } = await import("./rustBinary-ByeLQphl.js");
1656
+ const ayrs = findAyrsBinary();
1657
+ if (ayrs) return runAyrsServe(ayrs, plan.argv);
1658
+ 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");
1659
+ } else rest = plan.rest;
1660
+ }
1620
1661
  const sub = rest[0];
1621
1662
  if (sub === "status") return cmdServeStatus(rest.slice(1));
1622
1663
  if (sub === "start" || sub === "stop") return cmdServeStartStop(sub);
@@ -2586,7 +2627,7 @@ Options:
2586
2627
  }
2587
2628
  });
2588
2629
  if (req.method === "GET" && p === "/api/ws") {
2589
- const ws = await import("./ws-BZdG-J-R.js");
2630
+ const ws = await import("./ws-CJompjqD.js");
2590
2631
  try {
2591
2632
  await ws.loadProvision();
2592
2633
  } catch (e) {
@@ -2606,7 +2647,7 @@ Options:
2606
2647
  if (req.method === "GET" && p === "/api/ws/status") {
2607
2648
  const dirRaw = url.searchParams.get("path");
2608
2649
  if (!dirRaw) return new Response("missing ?path=<workspace dir>", { status: 400 });
2609
- const ws = await import("./ws-BZdG-J-R.js");
2650
+ const ws = await import("./ws-CJompjqD.js");
2610
2651
  let prov;
2611
2652
  try {
2612
2653
  prov = await ws.loadProvision();
@@ -2628,7 +2669,7 @@ Options:
2628
2669
  }
2629
2670
  }
2630
2671
  if (req.method === "GET" && p === "/api/ws/repos") {
2631
- const ws = await import("./ws-BZdG-J-R.js");
2672
+ const ws = await import("./ws-CJompjqD.js");
2632
2673
  try {
2633
2674
  await ws.loadProvision();
2634
2675
  } catch (e) {
@@ -2709,7 +2750,7 @@ Options:
2709
2750
  const m = /^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/.exec(repoParam);
2710
2751
  if (!m || m[1] === "." || m[1] === ".." || m[2] === "." || m[2] === "..") return new Response("missing/invalid ?repo=<owner>/<repo>", { status: 400 });
2711
2752
  const [, owner, repo] = m;
2712
- const ws = await import("./ws-BZdG-J-R.js");
2753
+ const ws = await import("./ws-CJompjqD.js");
2713
2754
  let prov;
2714
2755
  try {
2715
2756
  prov = await ws.loadProvision();
@@ -3627,7 +3668,7 @@ Options:
3627
3668
  const perm = body.perm ?? "r";
3628
3669
  if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
3629
3670
  try {
3630
- const { createScopedShare } = await import("./agentShare-BU4Mkg55.js");
3671
+ const { createScopedShare } = await import("./agentShare-DAKBVsJX.js");
3631
3672
  const share = await createScopedShare({
3632
3673
  agent: body.agent,
3633
3674
  perm,
@@ -3642,12 +3683,12 @@ Options:
3642
3683
  }
3643
3684
  }
3644
3685
  if (req.method === "GET" && p === "/api/shares") {
3645
- const { listShares } = await import("./agentShare-BU4Mkg55.js");
3686
+ const { listShares } = await import("./agentShare-DAKBVsJX.js");
3646
3687
  return Response.json(listShares());
3647
3688
  }
3648
3689
  const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
3649
3690
  if (req.method === "DELETE" && revokeM) {
3650
- const { revokeShare } = await import("./agentShare-BU4Mkg55.js");
3691
+ const { revokeShare } = await import("./agentShare-DAKBVsJX.js");
3651
3692
  const ok = revokeShare(decodeURIComponent(revokeM[1]));
3652
3693
  return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
3653
3694
  }
@@ -3953,7 +3994,7 @@ Options:
3953
3994
  const shutdown = (resolve) => {
3954
3995
  if (heartbeat) clearInterval(heartbeat);
3955
3996
  closeShare?.();
3956
- import("./agentShare-BU4Mkg55.js").then((m) => m.revokeAllShares()).catch(() => {});
3997
+ import("./agentShare-DAKBVsJX.js").then((m) => m.revokeAllShares()).catch(() => {});
3957
3998
  server?.stop();
3958
3999
  Promise.resolve(releaseHostLock?.()).catch(() => {}).then(resolve);
3959
4000
  };
@@ -3966,4 +4007,4 @@ Options:
3966
4007
 
3967
4008
  //#endregion
3968
4009
  export { cmdServe, loadTokenReadOnly, mintScopedTermToken, resolveDaemonHttpBase, resolveLocalServeUrl };
3969
- //# sourceMappingURL=serve-Cek2eJS-.js.map
4010
+ //# sourceMappingURL=serve-CplhD9SY.js.map
@@ -0,0 +1,127 @@
1
+ //#region ts/serveRust.ts
2
+ /**
3
+ * `ay serve` → `ayrs serve` delegation.
4
+ *
5
+ * Mirrors how `ay <cli>` runs the Rust agent runtime by default and only falls
6
+ * back to TypeScript on `--no-rust`: the Rust serve daemon (`ayrs`) becomes the
7
+ * default for every invocation it can express, and the TypeScript server keeps
8
+ * everything it can't (yet). The decision is a pure function of the argv so the
9
+ * contract is testable and the fallback reason is explicit — a silent fallback
10
+ * would leave an operator unsure which daemon they are looking at.
11
+ *
12
+ * What delegates today — exactly the flags `ayrs serve` accepts:
13
+ * --webrtc (bare: load/mint the persisted room)
14
+ * --webrtc <url> / --webrtc=<url> (a webrtc:// room url)
15
+ * --port <n> / --port=<n> (loopback HTTP console; 0 = free port)
16
+ * --sighost <host> / --sighost=<host>
17
+ *
18
+ * What stays on TypeScript, with the reason printed:
19
+ * - `--no-rust` / AGENT_YES_NO_RUST=1 (explicit opt-out)
20
+ * - the bare `ay serve` (Portless HTTPS on agent-yes.localhost has no ayrs
21
+ * equivalent — `--port` is a plain loopback listener)
22
+ * - the daemon subcommands (install/uninstall/status/logs/start/stop/
23
+ * healthcheck) and -d/--daemon: ayrs has its own OS-supervisor install and
24
+ * the two must not manage each other's registration
25
+ * - --share (http+webrtc over Portless), --http, --host, --token, --tls-*,
26
+ * --local, https room links (ayrs pins rooms by webrtc:// url only)
27
+ */
28
+ /** Subcommands `ay serve` dispatches before flag parsing — never delegated. */
29
+ const SERVE_SUBCOMMANDS = new Set([
30
+ "install",
31
+ "uninstall",
32
+ "status",
33
+ "logs",
34
+ "start",
35
+ "stop",
36
+ "healthcheck"
37
+ ]);
38
+ /**
39
+ * Decide whether `rest` (the argv after `serve`) can run as `ayrs serve`.
40
+ * Returns the ayrs argv (without the program) or the TS fallback with its
41
+ * reason and the argv the TS path should parse (`--no-rust` stripped).
42
+ */
43
+ function planRustServe(rest, env = process.env) {
44
+ const stripped = rest.filter((a) => a !== "--no-rust");
45
+ if (stripped.length !== rest.length) return {
46
+ kind: "ts",
47
+ reason: "--no-rust",
48
+ rest: stripped
49
+ };
50
+ if (env.AGENT_YES_NO_RUST === "1") return {
51
+ kind: "ts",
52
+ reason: "AGENT_YES_NO_RUST=1",
53
+ rest
54
+ };
55
+ if (rest.length === 0) return {
56
+ kind: "ts",
57
+ reason: "bare `ay serve` (Portless HTTPS console)",
58
+ rest
59
+ };
60
+ const first = rest[0];
61
+ if (SERVE_SUBCOMMANDS.has(first)) return {
62
+ kind: "ts",
63
+ reason: `\`ay serve ${first}\``,
64
+ rest
65
+ };
66
+ const argv = ["serve"];
67
+ for (let i = 0; i < rest.length; i++) {
68
+ const a = rest[i];
69
+ const eq = a.indexOf("=");
70
+ const name = eq === -1 ? a : a.slice(0, eq);
71
+ const inline = eq === -1 ? void 0 : a.slice(eq + 1);
72
+ const next = rest[i + 1];
73
+ const takeNext = () => {
74
+ if (inline !== void 0) return inline;
75
+ if (next !== void 0 && !next.startsWith("-")) {
76
+ i++;
77
+ return next;
78
+ }
79
+ };
80
+ switch (name) {
81
+ case "--webrtc": {
82
+ const v = takeNext();
83
+ if (v === void 0) argv.push("--webrtc");
84
+ else if (v.startsWith("webrtc://")) argv.push("--webrtc", v);
85
+ else return {
86
+ kind: "ts",
87
+ reason: `--webrtc ${v} (ayrs takes webrtc:// urls only)`,
88
+ rest
89
+ };
90
+ break;
91
+ }
92
+ case "--port": {
93
+ const v = takeNext();
94
+ if (v === void 0 || !/^\d+$/.test(v)) return {
95
+ kind: "ts",
96
+ reason: `--port ${v ?? "(missing)"}`,
97
+ rest
98
+ };
99
+ argv.push("--port", v);
100
+ break;
101
+ }
102
+ case "--sighost": {
103
+ const v = takeNext();
104
+ if (v === void 0) return {
105
+ kind: "ts",
106
+ reason: "--sighost (missing value)",
107
+ rest
108
+ };
109
+ argv.push("--sighost", v);
110
+ break;
111
+ }
112
+ default: return {
113
+ kind: "ts",
114
+ reason: a,
115
+ rest
116
+ };
117
+ }
118
+ }
119
+ return {
120
+ kind: "rust",
121
+ argv
122
+ };
123
+ }
124
+
125
+ //#endregion
126
+ export { planRustServe };
127
+ //# sourceMappingURL=serveRust-DDQiZmMf.js.map
@@ -88,7 +88,7 @@ async function cmdSetup(rest) {
88
88
  process.stdout.write(`workspace root: ${abs}\n`);
89
89
  if (!existsSync(abs)) process.stderr.write(` note: that directory doesn't exist yet — create it, or agents spawned there will fail\n`);
90
90
  try {
91
- const { linkBunBinsToSystemPath } = await import("./systemPathLink-BVdk48Vz.js");
91
+ const { linkBunBinsToSystemPath } = await import("./systemPathLink-VV-Vm6y2.js");
92
92
  const r = linkBunBinsToSystemPath();
93
93
  if (r && (r.linked.length || r.refreshed.length)) {
94
94
  const n = r.linked.length + r.refreshed.length;
@@ -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-Cek2eJS-.js");
100
+ const { cmdServe } = await import("./serve-CplhD9SY.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-ERJSELGI.js.map
110
+ //# sourceMappingURL=setup-CYFWwZAl.js.map