agent-yes 1.299.0 → 1.299.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.
- package/README.md +4 -2
- package/dist/{SUPPORTED_CLIS-BIlQQJa6.js → SUPPORTED_CLIS-MftynU62.js} +3 -3
- package/dist/{SUPPORTED_CLIS-Ct9reIJH.js → SUPPORTED_CLIS-YZvIGQvw.js} +2 -2
- package/dist/{agentShare-uzFuaLUH.js → agentShare-dKQQSOD7.js} +2 -2
- package/dist/{callback-DRrURxmb.js → callback-BEbbWLKe.js} +2 -2
- package/dist/{callback-BxTZx3xJ.js → callback-DWxTSlly.js} +3 -3
- package/dist/cli.js +5 -5
- package/dist/{cmdPs-BGIWbeBM.js → cmdPs-D7HWttUU.js} +2 -2
- package/dist/index.js +2 -2
- package/dist/{notifyDaemon-EEbnpoYp.js → notifyDaemon-B0aU7koS.js} +2 -2
- package/dist/{parentPingLoop-C1XXpKK7.js → parentPingLoop-DSiOXQeU.js} +2 -2
- package/dist/{rustBinary--pof-MTj.js → rustBinary-CKuufNRn.js} +2 -2
- package/dist/{rustBinary-B7rq3nuz.js → rustBinary-DgRg5H6V.js} +2 -2
- package/dist/{schedule-BFUe9-Mf.js → schedule-BStFx0_s.js} +4 -4
- package/dist/{serve-Q4dnZc5l.js → serve-Cis4oJM-.js} +18 -18
- package/dist/{setup-aEuGSFjB.js → setup-B0sg4AV1.js} +2 -2
- package/dist/{shareCmd-DkITELaM.js → shareCmd-DKIvwe0I.js} +3 -3
- package/dist/{subcommands-CUWPMI_r.js → subcommands-CvL_1Nt9.js} +22 -20
- package/dist/{subcommands-CuRZt3X6.js → subcommands-DioyG80q.js} +1 -1
- package/dist/{terminal-CUn1_oPd.js → terminal-DqsAuqhw.js} +2 -2
- package/dist/trayApp-C6C7-TSh.js +5 -0
- package/dist/{trayApp-BHwAJFzl.js → trayApp-Dayj9Frx.js} +2 -2
- package/dist/{ts-oIxnyQbE.js → ts-C2osm4MO.js} +3 -3
- package/dist/{versionChecker-DOgDaagD.js → versionChecker-BmXwOe40.js} +2 -2
- package/dist/{widget-CuagzQwz.js → widget-D5tsB-oi.js} +3 -3
- package/dist/{ws-ID7-zDiJ.js → ws-B4jdOeB2.js} +2 -2
- package/dist/{ws-DcJBGzQP.js → ws-mz7VJJwO.js} +2 -2
- package/package.json +1 -1
- package/ts/subcommands.spec.ts +18 -8
- package/ts/subcommands.ts +28 -15
- package/dist/trayApp-ucuB_j5l.js +0 -5
package/README.md
CHANGED
|
@@ -164,7 +164,7 @@ claude-yes --exit-on-idle=60s "run all tests and commit current changes"
|
|
|
164
164
|
claude-code-execute claude-yes "your task here"
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
-
### Inspect and message running agents (`cy ls /
|
|
167
|
+
### Inspect and message running agents (`cy ls / tail / send`)
|
|
168
168
|
|
|
169
169
|
From any terminal you can list and interact with agents that are already
|
|
170
170
|
running on the machine — both TS- and Rust-spawned ones:
|
|
@@ -173,7 +173,9 @@ running on the machine — both TS- and Rust-spawned ones:
|
|
|
173
173
|
cy ls # list all running agents
|
|
174
174
|
cy ls codex # filter (matches pid, cwd, cli, or prompt)
|
|
175
175
|
cy tail <keyword> # render last 96 lines via @xterm/headless
|
|
176
|
-
cy
|
|
176
|
+
cy cat <keyword> # full rendered log
|
|
177
|
+
ay read <keyword> # same, with pagination (--last/--range/…)
|
|
178
|
+
# `read` is `ay`-only: `cy read foo.ts` is a prompt
|
|
177
179
|
cy send <keyword> "next: run tests" # append a prompt to that agent's stdin
|
|
178
180
|
cy send <keyword> "" --code=ctrl-c # send a Ctrl+C
|
|
179
181
|
cy attach <keyword> # interactive attach (detach: Ctrl-\)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import "./logger-CDIsZ-Pp.js";
|
|
2
|
-
import "./versionChecker-
|
|
3
|
-
import "./ts-
|
|
2
|
+
import "./versionChecker-BmXwOe40.js";
|
|
3
|
+
import "./ts-C2osm4MO.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-
|
|
10
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-YZvIGQvw.js";
|
|
11
11
|
|
|
12
12
|
export { SUPPORTED_CLIS };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as CLIS_CONFIG } from "./ts-
|
|
1
|
+
import { t as CLIS_CONFIG } from "./ts-C2osm4MO.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-
|
|
8
|
+
//# sourceMappingURL=SUPPORTED_CLIS-YZvIGQvw.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-
|
|
8
|
+
import { J as resolveOne } from "./subcommands-CvL_1Nt9.js";
|
|
9
9
|
import "./notifyStore-2SWKGwZI.js";
|
|
10
10
|
import "./webrtcLink-DFRyWNMs.js";
|
|
11
11
|
import "./remotes-DrYe_nfw.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-
|
|
235
|
+
//# sourceMappingURL=agentShare-dKQQSOD7.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-
|
|
8
|
+
import "./subcommands-CvL_1Nt9.js";
|
|
9
9
|
import "./notifyStore-2SWKGwZI.js";
|
|
10
10
|
import "./webrtcLink-DFRyWNMs.js";
|
|
11
11
|
import "./remotes-DrYe_nfw.js";
|
|
12
12
|
import "./callbackCore-Bl2gGcxg.js";
|
|
13
|
-
import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-
|
|
13
|
+
import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-DWxTSlly.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-
|
|
2
|
+
import { J as resolveOne } from "./subcommands-CvL_1Nt9.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-
|
|
75
|
+
const { resolveLocalServeUrl } = await import("./serve-Cis4oJM-.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-
|
|
190
|
+
//# sourceMappingURL=callback-DWxTSlly.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-
|
|
5
|
-
import { d as getRustBinary } from "./rustBinary
|
|
4
|
+
import { a as versionString, r as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-BmXwOe40.js";
|
|
5
|
+
import { d as getRustBinary } from "./rustBinary-CKuufNRn.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-
|
|
298
|
+
const { isSubcommand, runSubcommand, cmdHelp, isUnknownManagerToken, isBareManagerInvocation } = await import("./subcommands-DioyG80q.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-
|
|
312
|
+
const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-MftynU62.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-
|
|
363
|
+
const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-MftynU62.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-
|
|
8
|
+
import { F as listRecords, dt as buildAgentForest, ft as flattenForest, h as deriveLiveState } from "./subcommands-CvL_1Nt9.js";
|
|
9
9
|
import "./notifyStore-2SWKGwZI.js";
|
|
10
10
|
import "./webrtcLink-DFRyWNMs.js";
|
|
11
11
|
import "./remotes-DrYe_nfw.js";
|
|
@@ -330,4 +330,4 @@ function readPpidSync(pid) {
|
|
|
330
330
|
|
|
331
331
|
//#endregion
|
|
332
332
|
export { cmdPs };
|
|
333
|
-
//# sourceMappingURL=cmdPs-
|
|
333
|
+
//# sourceMappingURL=cmdPs-D7HWttUU.js.map
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./logger-CDIsZ-Pp.js";
|
|
2
|
-
import "./versionChecker-
|
|
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-
|
|
2
|
+
import "./versionChecker-BmXwOe40.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-C2osm4MO.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-
|
|
8
|
+
import { D as isPidAlive, F as listRecords, G as renderLogTailLines, h as deriveLiveState } from "./subcommands-CvL_1Nt9.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-DFRyWNMs.js";
|
|
11
11
|
import "./remotes-DrYe_nfw.js";
|
|
@@ -879,4 +879,4 @@ async function ensureDaemon() {
|
|
|
879
879
|
|
|
880
880
|
//#endregion
|
|
881
881
|
export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
|
|
882
|
-
//# sourceMappingURL=notifyDaemon-
|
|
882
|
+
//# sourceMappingURL=notifyDaemon-B0aU7koS.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-
|
|
341
|
+
const { lastReadAt, READ_WINDOW_MS } = await import("./subcommands-DioyG80q.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-
|
|
469
|
+
//# sourceMappingURL=parentPingLoop-DSiOXQeU.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-
|
|
1
|
+
import { i as getInstalledPackage, n as compareVersions } from "./versionChecker-BmXwOe40.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";
|
|
@@ -371,4 +371,4 @@ async function getRustBinary(options = {}) {
|
|
|
371
371
|
|
|
372
372
|
//#endregion
|
|
373
373
|
export { findSpawnHiddenLauncher as a, getBinDir as c, getRustBinary as d, hasValidMacSignature as f, findRustBinary as i, getBinaryName as l, downloadBinary as n, findTrayLauncher as o, findAyrsBinary as r, gcOldBinaryDirs as s, devBuildInfo as t, getDownloadUrl as u };
|
|
374
|
-
//# sourceMappingURL=rustBinary
|
|
374
|
+
//# sourceMappingURL=rustBinary-CKuufNRn.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./versionChecker-
|
|
2
|
-
import { a as findSpawnHiddenLauncher, c as getBinDir, d as getRustBinary, f as hasValidMacSignature, 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
|
|
1
|
+
import "./versionChecker-BmXwOe40.js";
|
|
2
|
+
import { a as findSpawnHiddenLauncher, c as getBinDir, d as getRustBinary, f as hasValidMacSignature, 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-CKuufNRn.js";
|
|
3
3
|
|
|
4
4
|
export { findAyrsBinary, gcOldBinaryDirs };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import "./logger-CDIsZ-Pp.js";
|
|
2
|
-
import "./versionChecker-
|
|
3
|
-
import "./ts-
|
|
2
|
+
import "./versionChecker-BmXwOe40.js";
|
|
3
|
+
import "./ts-C2osm4MO.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-
|
|
10
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-YZvIGQvw.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-
|
|
157
|
+
//# sourceMappingURL=schedule-BStFx0_s.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./logger-CDIsZ-Pp.js";
|
|
2
|
-
import { i as getInstalledPackage } from "./versionChecker-
|
|
3
|
-
import { a as findSpawnHiddenLauncher } from "./rustBinary
|
|
4
|
-
import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-
|
|
2
|
+
import { i as getInstalledPackage } from "./versionChecker-BmXwOe40.js";
|
|
3
|
+
import { a as findSpawnHiddenLauncher } from "./rustBinary-CKuufNRn.js";
|
|
4
|
+
import { c as permissionBadge, i as answerAsk, o as listAsks, u as CLAUDE_SESSION_PIN_ENV } from "./ts-C2osm4MO.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-
|
|
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-
|
|
15
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-YZvIGQvw.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-CvL_1Nt9.js";
|
|
17
17
|
import { c as isTransientLockMkdirError } from "./notifyStore-2SWKGwZI.js";
|
|
18
18
|
import { i as toWebrtcUrl, n as isWebrtcSpec } from "./webrtcLink-DFRyWNMs.js";
|
|
19
19
|
import "./remotes-DrYe_nfw.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-
|
|
21
|
+
import { n as isCallbackRevoked, r as loadCallbackSecretReadOnly } from "./callback-DWxTSlly.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-
|
|
25
|
+
import { i as importProvisionModule } from "./ws-mz7VJJwO.js";
|
|
26
26
|
import { r as spawnRejectionReason } from "./spawnGate-YpHopveO.js";
|
|
27
|
-
import { i as launchTray } from "./trayApp-
|
|
27
|
+
import { i as launchTray } from "./trayApp-Dayj9Frx.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";
|
|
@@ -1690,7 +1690,7 @@ Options:
|
|
|
1690
1690
|
const { planRustServe } = await import("./serveRust-DDQiZmMf.js");
|
|
1691
1691
|
const plan = planRustServe(rest);
|
|
1692
1692
|
if (plan.kind === "rust") {
|
|
1693
|
-
const { findAyrsBinary } = await import("./rustBinary-
|
|
1693
|
+
const { findAyrsBinary } = await import("./rustBinary-DgRg5H6V.js");
|
|
1694
1694
|
const ayrs = findAyrsBinary();
|
|
1695
1695
|
if (ayrs) return runAyrsServe(ayrs, plan.argv);
|
|
1696
1696
|
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");
|
|
@@ -2665,7 +2665,7 @@ Options:
|
|
|
2665
2665
|
}
|
|
2666
2666
|
});
|
|
2667
2667
|
if (req.method === "GET" && p === "/api/ws") {
|
|
2668
|
-
const ws = await import("./ws-
|
|
2668
|
+
const ws = await import("./ws-B4jdOeB2.js");
|
|
2669
2669
|
try {
|
|
2670
2670
|
await ws.loadProvision();
|
|
2671
2671
|
} catch (e) {
|
|
@@ -2685,7 +2685,7 @@ Options:
|
|
|
2685
2685
|
if (req.method === "GET" && p === "/api/ws/status") {
|
|
2686
2686
|
const dirRaw = url.searchParams.get("path");
|
|
2687
2687
|
if (!dirRaw) return new Response("missing ?path=<workspace dir>", { status: 400 });
|
|
2688
|
-
const ws = await import("./ws-
|
|
2688
|
+
const ws = await import("./ws-B4jdOeB2.js");
|
|
2689
2689
|
let prov;
|
|
2690
2690
|
try {
|
|
2691
2691
|
prov = await ws.loadProvision();
|
|
@@ -2707,7 +2707,7 @@ Options:
|
|
|
2707
2707
|
}
|
|
2708
2708
|
}
|
|
2709
2709
|
if (req.method === "GET" && p === "/api/ws/repos") {
|
|
2710
|
-
const ws = await import("./ws-
|
|
2710
|
+
const ws = await import("./ws-B4jdOeB2.js");
|
|
2711
2711
|
try {
|
|
2712
2712
|
await ws.loadProvision();
|
|
2713
2713
|
} catch (e) {
|
|
@@ -2788,7 +2788,7 @@ Options:
|
|
|
2788
2788
|
const m = /^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/.exec(repoParam);
|
|
2789
2789
|
if (!m || m[1] === "." || m[1] === ".." || m[2] === "." || m[2] === "..") return new Response("missing/invalid ?repo=<owner>/<repo>", { status: 400 });
|
|
2790
2790
|
const [, owner, repo] = m;
|
|
2791
|
-
const ws = await import("./ws-
|
|
2791
|
+
const ws = await import("./ws-B4jdOeB2.js");
|
|
2792
2792
|
let prov;
|
|
2793
2793
|
try {
|
|
2794
2794
|
prov = await ws.loadProvision();
|
|
@@ -3706,7 +3706,7 @@ Options:
|
|
|
3706
3706
|
const perm = body.perm ?? "r";
|
|
3707
3707
|
if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
|
|
3708
3708
|
try {
|
|
3709
|
-
const { createScopedShare } = await import("./agentShare-
|
|
3709
|
+
const { createScopedShare } = await import("./agentShare-dKQQSOD7.js");
|
|
3710
3710
|
const share = await createScopedShare({
|
|
3711
3711
|
agent: body.agent,
|
|
3712
3712
|
perm,
|
|
@@ -3721,12 +3721,12 @@ Options:
|
|
|
3721
3721
|
}
|
|
3722
3722
|
}
|
|
3723
3723
|
if (req.method === "GET" && p === "/api/shares") {
|
|
3724
|
-
const { listShares } = await import("./agentShare-
|
|
3724
|
+
const { listShares } = await import("./agentShare-dKQQSOD7.js");
|
|
3725
3725
|
return Response.json(listShares());
|
|
3726
3726
|
}
|
|
3727
3727
|
const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
|
|
3728
3728
|
if (req.method === "DELETE" && revokeM) {
|
|
3729
|
-
const { revokeShare } = await import("./agentShare-
|
|
3729
|
+
const { revokeShare } = await import("./agentShare-dKQQSOD7.js");
|
|
3730
3730
|
const ok = revokeShare(decodeURIComponent(revokeM[1]));
|
|
3731
3731
|
return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
|
|
3732
3732
|
}
|
|
@@ -4038,7 +4038,7 @@ Options:
|
|
|
4038
4038
|
const shutdown = (resolve) => {
|
|
4039
4039
|
if (heartbeat) clearInterval(heartbeat);
|
|
4040
4040
|
closeShare?.();
|
|
4041
|
-
import("./agentShare-
|
|
4041
|
+
import("./agentShare-dKQQSOD7.js").then((m) => m.revokeAllShares()).catch(() => {});
|
|
4042
4042
|
server?.stop();
|
|
4043
4043
|
Promise.resolve(releaseHostLock?.()).catch(() => {}).then(resolve);
|
|
4044
4044
|
};
|
|
@@ -4051,4 +4051,4 @@ Options:
|
|
|
4051
4051
|
|
|
4052
4052
|
//#endregion
|
|
4053
4053
|
export { cmdServe, inspectServeDaemon, loadTokenReadOnly, mintScopedTermToken, resolveDaemonHttpBase, resolveLocalServeUrl };
|
|
4054
|
-
//# sourceMappingURL=serve-
|
|
4054
|
+
//# sourceMappingURL=serve-Cis4oJM-.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-
|
|
100
|
+
const { cmdServe } = await import("./serve-Cis4oJM-.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-
|
|
110
|
+
//# sourceMappingURL=setup-B0sg4AV1.js.map
|
|
@@ -243,7 +243,7 @@ shown first and needs a y at a [y/N] prompt.
|
|
|
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
245
|
async function cmdShareStatus(mount) {
|
|
246
|
-
const { inspectServeDaemon } = await import("./serve-
|
|
246
|
+
const { inspectServeDaemon } = await import("./serve-Cis4oJM-.js");
|
|
247
247
|
const [d, ts] = await Promise.all([inspectServeDaemon(), detectTailscale()]);
|
|
248
248
|
const line = (k, v) => process.stdout.write(`${k.padEnd(11)}${v}\n`);
|
|
249
249
|
if (d.args === null) {
|
|
@@ -287,7 +287,7 @@ async function cmdShare(rest) {
|
|
|
287
287
|
process.stderr.write(`ay share: unknown mode '${mode}' — one of ${SHARE_MODES.join(", ")}\n`);
|
|
288
288
|
return 1;
|
|
289
289
|
}
|
|
290
|
-
const { inspectServeDaemon, cmdServe } = await import("./serve-
|
|
290
|
+
const { inspectServeDaemon, cmdServe } = await import("./serve-Cis4oJM-.js");
|
|
291
291
|
const [daemon, ts] = await Promise.all([inspectServeDaemon(), detectTailscale()]);
|
|
292
292
|
const lanIp = pickLanIp(networkInterfaces());
|
|
293
293
|
if (!mode) {
|
|
@@ -412,4 +412,4 @@ async function cmdShare(rest) {
|
|
|
412
412
|
|
|
413
413
|
//#endregion
|
|
414
414
|
export { cmdShare };
|
|
415
|
-
//# sourceMappingURL=shareCmd-
|
|
415
|
+
//# sourceMappingURL=shareCmd-DKIvwe0I.js.map
|
|
@@ -1419,7 +1419,6 @@ const SUBCOMMANDS = new Set([
|
|
|
1419
1419
|
"result",
|
|
1420
1420
|
"notify",
|
|
1421
1421
|
"notifyd",
|
|
1422
|
-
"read",
|
|
1423
1422
|
"cat",
|
|
1424
1423
|
"tail",
|
|
1425
1424
|
"head",
|
|
@@ -1457,6 +1456,7 @@ const SUBCOMMANDS = new Set([
|
|
|
1457
1456
|
const MANAGER_SUBCOMMANDS = new Set([
|
|
1458
1457
|
"setup",
|
|
1459
1458
|
"ws",
|
|
1459
|
+
"read",
|
|
1460
1460
|
"share",
|
|
1461
1461
|
"connect"
|
|
1462
1462
|
]);
|
|
@@ -1614,8 +1614,9 @@ function isUnreachableWriteErrno(code) {
|
|
|
1614
1614
|
/**
|
|
1615
1615
|
* Whether `name` is a subcommand. `managerCommands` (default true, for the
|
|
1616
1616
|
* generic `ay`/`agent-yes` entry) additionally admits manager-only commands
|
|
1617
|
-
*
|
|
1618
|
-
* names fall through to running the agent instead
|
|
1617
|
+
* (`setup`, `ws`, `read`); pass false for a cli-bound alias (cy/claude-yes/…) so
|
|
1618
|
+
* those names fall through to running the agent instead — `cy read <file>` is a
|
|
1619
|
+
* prompt, `ay read <keyword>` is the log pager.
|
|
1619
1620
|
*/
|
|
1620
1621
|
function isSubcommand(name, managerCommands = true) {
|
|
1621
1622
|
if (!name) return false;
|
|
@@ -1685,7 +1686,7 @@ async function runSubcommand(argv) {
|
|
|
1685
1686
|
switch (sub) {
|
|
1686
1687
|
case "ls":
|
|
1687
1688
|
case "list": return await cmdLs(rest);
|
|
1688
|
-
case "ps": return await (await import("./cmdPs-
|
|
1689
|
+
case "ps": return await (await import("./cmdPs-D7HWttUU.js")).cmdPs(rest);
|
|
1689
1690
|
case "status": return await cmdStatus(rest);
|
|
1690
1691
|
case "whoami": return await cmdWhoami(rest);
|
|
1691
1692
|
case "result": return await cmdResult(rest);
|
|
@@ -1732,35 +1733,35 @@ async function runSubcommand(argv) {
|
|
|
1732
1733
|
return cmdCh(rest);
|
|
1733
1734
|
}
|
|
1734
1735
|
case "term": {
|
|
1735
|
-
const { cmdTerm } = await import("./terminal-
|
|
1736
|
+
const { cmdTerm } = await import("./terminal-DqsAuqhw.js");
|
|
1736
1737
|
return cmdTerm(rest);
|
|
1737
1738
|
}
|
|
1738
1739
|
case "widget": {
|
|
1739
|
-
const { cmdWidget } = await import("./widget-
|
|
1740
|
+
const { cmdWidget } = await import("./widget-D5tsB-oi.js");
|
|
1740
1741
|
return cmdWidget(rest);
|
|
1741
1742
|
}
|
|
1742
1743
|
case "mint": {
|
|
1743
|
-
const { cmdMint } = await import("./widget-
|
|
1744
|
+
const { cmdMint } = await import("./widget-D5tsB-oi.js");
|
|
1744
1745
|
return cmdMint(rest);
|
|
1745
1746
|
}
|
|
1746
1747
|
case "serve": {
|
|
1747
|
-
const { cmdServe } = await import("./serve-
|
|
1748
|
+
const { cmdServe } = await import("./serve-Cis4oJM-.js");
|
|
1748
1749
|
return cmdServe(rest);
|
|
1749
1750
|
}
|
|
1750
1751
|
case "tray": {
|
|
1751
|
-
const { cmdTray } = await import("./trayApp-
|
|
1752
|
+
const { cmdTray } = await import("./trayApp-C6C7-TSh.js");
|
|
1752
1753
|
return cmdTray(rest);
|
|
1753
1754
|
}
|
|
1754
1755
|
case "setup": {
|
|
1755
|
-
const { cmdSetup } = await import("./setup-
|
|
1756
|
+
const { cmdSetup } = await import("./setup-B0sg4AV1.js");
|
|
1756
1757
|
return cmdSetup(rest);
|
|
1757
1758
|
}
|
|
1758
1759
|
case "ws": {
|
|
1759
|
-
const { cmdWs } = await import("./ws-
|
|
1760
|
+
const { cmdWs } = await import("./ws-B4jdOeB2.js");
|
|
1760
1761
|
return cmdWs(rest);
|
|
1761
1762
|
}
|
|
1762
1763
|
case "schedule": {
|
|
1763
|
-
const { cmdSchedule } = await import("./schedule-
|
|
1764
|
+
const { cmdSchedule } = await import("./schedule-BStFx0_s.js");
|
|
1764
1765
|
return cmdSchedule(rest);
|
|
1765
1766
|
}
|
|
1766
1767
|
case "remote": {
|
|
@@ -1768,7 +1769,7 @@ async function runSubcommand(argv) {
|
|
|
1768
1769
|
return cmdRemote(rest);
|
|
1769
1770
|
}
|
|
1770
1771
|
case "share": {
|
|
1771
|
-
const { cmdShare } = await import("./shareCmd-
|
|
1772
|
+
const { cmdShare } = await import("./shareCmd-DKIvwe0I.js");
|
|
1772
1773
|
return cmdShare(rest);
|
|
1773
1774
|
}
|
|
1774
1775
|
case "connect": {
|
|
@@ -1780,7 +1781,7 @@ async function runSubcommand(argv) {
|
|
|
1780
1781
|
return cmdExpose(rest);
|
|
1781
1782
|
}
|
|
1782
1783
|
case "callback": {
|
|
1783
|
-
const { cmdCallback } = await import("./callback-
|
|
1784
|
+
const { cmdCallback } = await import("./callback-BEbbWLKe.js");
|
|
1784
1785
|
return cmdCallback(rest);
|
|
1785
1786
|
}
|
|
1786
1787
|
case "reap":
|
|
@@ -1791,7 +1792,7 @@ async function runSubcommand(argv) {
|
|
|
1791
1792
|
return await cmdDsh(rest);
|
|
1792
1793
|
}
|
|
1793
1794
|
case "gc": {
|
|
1794
|
-
const { gcOldBinaryDirs } = await import("./rustBinary-
|
|
1795
|
+
const { gcOldBinaryDirs } = await import("./rustBinary-DgRg5H6V.js");
|
|
1795
1796
|
const { gcLogs } = await import("./globalPidIndex-DC93JhHQ.js");
|
|
1796
1797
|
const bins = gcOldBinaryDirs();
|
|
1797
1798
|
const logs = await gcLogs();
|
|
@@ -1850,10 +1851,11 @@ As an agent, you can:
|
|
|
1850
1851
|
async function cmdHelp(managerCommands = true) {
|
|
1851
1852
|
const setupLine = managerCommands ? ` ay setup guided setup: pick a workspace, share to agent-yes.com\n` : ``;
|
|
1852
1853
|
const wsLines = managerCommands ? " ay ws ls [--status] list <owner>/<repo>/tree/<branch> workspaces\n ay ws new <owner>/<repo>[@branch] clone/refresh a workspace (ay ws help for more)\n" : ``;
|
|
1854
|
+
const readAliasNote = managerCommands ? `` : ` (\`ay read\` only — \`cy read …\` is a prompt)\n`;
|
|
1853
1855
|
const shareAliasNote = managerCommands ? `` : ` (\`ay\` only — \`cy share\`/\`cy connect\` are prompts)\n`;
|
|
1854
1856
|
const self = process.env.AGENT_YES_PID ? await resolveSender() : null;
|
|
1855
1857
|
const agentSection = self ? await buildAgentContextSection(self) : "";
|
|
1856
|
-
process.stdout.write(agentSection + "ay - agent-yes CLI\n\nManagement:\n ay ls [keyword] list running agents\n ay ps [keyword] per-agent CPU/RSS, rolled up over each\n agent's whole process tree, + box vitals\n ay tail [-f] [-n N] <keyword> last N lines (96), -f to follow\n ay tail <keyword> --until TEXT block until TEXT is printed, then exit 0\n [--timeout 10m] [-q] [--regex] (1 = agent exited without it, 2 = no match,\n [--fail-on TEXT] [--count N] 3 = --fail-on hit first)\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 hist [-n 6] [--all] [--json] past agent conversations (claude/codex\n transcripts, incl. exited sessions);\n this cwd unless --all\n ay send <keyword> <msg> send a message (keyword '.' = agent in this cwd)\n ay msgs [keyword] [--in|--out] inter-agent message log (sent + received)\n ay ch mk|join|send|read|tail <topic> local-first E2E channels: AI ↔ humans on a topic (ay ch help)\n ay term embed <pid> <script> to embed a live read-only agent terminal in a page (ay term help)\n ay widget ls | read selection|dom read an opted-in page widget's context (selection/DOM) (ay widget help)\n ay mint <target> --caps ... mint a scoped, short-TTL capability token (embeddable in a page)\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 notify watch --unread get notified when sub-agents finish/stuck/crash (writes to inbox)\n ay whoami [--json] (inside an agent) your own registry identity + reply address\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 ay gc reclaim old-version binary cache dirs + stale session logs\n ay dsh-legacy [args...] launch the DeepSeek Harness terminal client (dsh-tui)\n" + wsLines + "\nRemote:\n" + setupLine + " ay share [local|lan|tailscale|webrtc] share this machine: one URL for web console + CLI\n ay connect <share-url> [alias] save another machine's share URL as a remote\n" + shareAliasNote + " 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 callback --expires 7d mint an embeddable message-me widget for one agent\n ay ls <token>@<host>:<port> connect inline (no alias needed)\n ay send <token>@<host>:<port>:<kw> <msg>\n\nRun an agent (naming a CLI is what launches one — bare 'ay' shows this help):\n ay <claude|codex|...> [options] -- [prompt]\n ay claude -- \"fix the bug in auth.ts\"\n cy [options] -- [prompt] shortcut for 'ay claude' (bare 'cy' starts claude)\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");
|
|
1858
|
+
process.stdout.write(agentSection + "ay - agent-yes CLI\n\nManagement:\n ay ls [keyword] list running agents\n ay ps [keyword] per-agent CPU/RSS, rolled up over each\n agent's whole process tree, + box vitals\n ay tail [-f] [-n N] <keyword> last N lines (96), -f to follow\n ay tail <keyword> --until TEXT block until TEXT is printed, then exit 0\n [--timeout 10m] [-q] [--regex] (1 = agent exited without it, 2 = no match,\n [--fail-on TEXT] [--count N] 3 = --fail-on hit first)\n ay read <keyword> [page opts] paginate: --last/--head N, --range A:B,\n --before-line L [--limit N]\n" + readAliasNote + " ay cat <keyword> full log\n ay head <keyword> first N lines\n ay hist [-n 6] [--all] [--json] past agent conversations (claude/codex\n transcripts, incl. exited sessions);\n this cwd unless --all\n ay send <keyword> <msg> send a message (keyword '.' = agent in this cwd)\n ay msgs [keyword] [--in|--out] inter-agent message log (sent + received)\n ay ch mk|join|send|read|tail <topic> local-first E2E channels: AI ↔ humans on a topic (ay ch help)\n ay term embed <pid> <script> to embed a live read-only agent terminal in a page (ay term help)\n ay widget ls | read selection|dom read an opted-in page widget's context (selection/DOM) (ay widget help)\n ay mint <target> --caps ... mint a scoped, short-TTL capability token (embeddable in a page)\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 notify watch --unread get notified when sub-agents finish/stuck/crash (writes to inbox)\n ay whoami [--json] (inside an agent) your own registry identity + reply address\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 ay gc reclaim old-version binary cache dirs + stale session logs\n ay dsh-legacy [args...] launch the DeepSeek Harness terminal client (dsh-tui)\n" + wsLines + "\nRemote:\n" + setupLine + " ay share [local|lan|tailscale|webrtc] share this machine: one URL for web console + CLI\n ay connect <share-url> [alias] save another machine's share URL as a remote\n" + shareAliasNote + " 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 callback --expires 7d mint an embeddable message-me widget for one agent\n ay ls <token>@<host>:<port> connect inline (no alias needed)\n ay send <token>@<host>:<port>:<kw> <msg>\n\nRun an agent (naming a CLI is what launches one — bare 'ay' shows this help):\n ay <claude|codex|...> [options] -- [prompt]\n ay claude -- \"fix the bug in auth.ts\"\n cy [options] -- [prompt] shortcut for 'ay claude' (bare 'cy' starts claude)\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");
|
|
1857
1859
|
return 0;
|
|
1858
1860
|
}
|
|
1859
1861
|
function matchKeyword(record, keyword) {
|
|
@@ -4893,7 +4895,7 @@ async function cmdAttach(rest) {
|
|
|
4893
4895
|
const winsizeDir = path.join(ayHome, "winsize");
|
|
4894
4896
|
await mkdir(winsizeDir, { recursive: true });
|
|
4895
4897
|
const winsizePath = path.join(winsizeDir, String(record.pid));
|
|
4896
|
-
const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-
|
|
4898
|
+
const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-Cis4oJM-.js");
|
|
4897
4899
|
const daemonBase = await resolveDaemonHttpBase().catch(() => null);
|
|
4898
4900
|
const daemonToken = daemonBase ? await loadTokenReadOnly().catch(() => null) ?? "" : "";
|
|
4899
4901
|
const capViewer = `attach:${process.pid}`;
|
|
@@ -5620,7 +5622,7 @@ async function cmdNotify(rest) {
|
|
|
5620
5622
|
}
|
|
5621
5623
|
const ensure = async () => {
|
|
5622
5624
|
if (!argv["ensure-daemon"]) return;
|
|
5623
|
-
const { ensureDaemon } = await import("./notifyDaemon-
|
|
5625
|
+
const { ensureDaemon } = await import("./notifyDaemon-B0aU7koS.js");
|
|
5624
5626
|
await ensureDaemon().catch(() => null);
|
|
5625
5627
|
};
|
|
5626
5628
|
await heartbeatWatcher(parent, selfStartedAt);
|
|
@@ -5694,7 +5696,7 @@ async function cmdNotifyCursor(args) {
|
|
|
5694
5696
|
}
|
|
5695
5697
|
async function cmdNotifyd(rest) {
|
|
5696
5698
|
const sub = rest[0] ?? "status";
|
|
5697
|
-
const daemon = await import("./notifyDaemon-
|
|
5699
|
+
const daemon = await import("./notifyDaemon-B0aU7koS.js");
|
|
5698
5700
|
switch (sub) {
|
|
5699
5701
|
case "run": return daemon.runDaemon();
|
|
5700
5702
|
case "once": return daemon.runDaemon({ once: true });
|
|
@@ -5721,4 +5723,4 @@ async function cmdNotifyd(rest) {
|
|
|
5721
5723
|
|
|
5722
5724
|
//#endregion
|
|
5723
5725
|
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 };
|
|
5724
|
-
//# sourceMappingURL=subcommands-
|
|
5726
|
+
//# sourceMappingURL=subcommands-CvL_1Nt9.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-
|
|
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-CvL_1Nt9.js";
|
|
9
9
|
import "./notifyStore-2SWKGwZI.js";
|
|
10
10
|
import "./webrtcLink-DFRyWNMs.js";
|
|
11
11
|
import "./remotes-DrYe_nfw.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-
|
|
101
|
+
const { mintScopedTermToken } = await import("./serve-Cis4oJM-.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-
|
|
138
|
+
//# sourceMappingURL=terminal-DqsAuqhw.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as findTrayLauncher } from "./rustBinary
|
|
1
|
+
import { o as findTrayLauncher } from "./rustBinary-CKuufNRn.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-
|
|
100
|
+
//# sourceMappingURL=trayApp-Dayj9Frx.js.map
|
|
@@ -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-
|
|
3
|
+
import { i as getInstalledPackage } from "./versionChecker-BmXwOe40.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-
|
|
2089
|
+
const { startParentPingLoop } = await import("./parentPingLoop-DSiOXQeU.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-
|
|
2352
|
+
//# sourceMappingURL=ts-C2osm4MO.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.299.
|
|
10
|
+
var version = "1.299.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-
|
|
288
|
+
//# sourceMappingURL=versionChecker-BmXwOe40.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-
|
|
31
|
+
const { resolveDaemonHttpBase, loadTokenReadOnly } = await import("./serve-Cis4oJM-.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-
|
|
189
|
+
const { mintScopedTermToken } = await import("./serve-Cis4oJM-.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-
|
|
205
|
+
//# sourceMappingURL=widget-D5tsB-oi.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-
|
|
8
|
+
import "./subcommands-CvL_1Nt9.js";
|
|
9
9
|
import "./notifyStore-2SWKGwZI.js";
|
|
10
10
|
import "./webrtcLink-DFRyWNMs.js";
|
|
11
11
|
import "./remotes-DrYe_nfw.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-
|
|
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-mz7VJJwO.js";
|
|
13
13
|
|
|
14
14
|
export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, walkWorkspaces, workspaceStatus };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as listRecords } from "./subcommands-
|
|
1
|
+
import { F as listRecords } from "./subcommands-CvL_1Nt9.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-
|
|
427
|
+
//# sourceMappingURL=ws-mz7VJJwO.js.map
|
package/package.json
CHANGED
package/ts/subcommands.spec.ts
CHANGED
|
@@ -200,14 +200,19 @@ describe("subcommands.isSubcommand", () => {
|
|
|
200
200
|
expect(isSubcommand("send", false)).toBe(true);
|
|
201
201
|
});
|
|
202
202
|
|
|
203
|
-
it("gates
|
|
203
|
+
it("gates the prompt-word verbs so `cy read …` / `cy connect …` are prompt text", async () => {
|
|
204
204
|
const { isSubcommand } = await loadModule();
|
|
205
|
-
// `
|
|
206
|
-
//
|
|
207
|
-
|
|
205
|
+
// `read` / `share` / `connect` are ordinary English verbs: `cy read ts/cli.ts
|
|
206
|
+
// and explain it` and `cy connect the frontend to the API` must reach claude.
|
|
207
|
+
// The commands live on the manager entry (`ay read`, `ay share`, `ay connect`).
|
|
208
|
+
for (const sub of ["read", "share", "connect"]) {
|
|
208
209
|
expect(isSubcommand(sub, true)).toBe(true);
|
|
209
210
|
expect(isSubcommand(sub, false)).toBe(false);
|
|
210
211
|
}
|
|
212
|
+
// Their siblings are not prompt openers, so they stay universal.
|
|
213
|
+
expect(isSubcommand("cat", false)).toBe(true);
|
|
214
|
+
expect(isSubcommand("tail", false)).toBe(true);
|
|
215
|
+
expect(isSubcommand("head", false)).toBe(true);
|
|
211
216
|
});
|
|
212
217
|
});
|
|
213
218
|
|
|
@@ -305,13 +310,18 @@ describe("subcommands.cmdHelp", () => {
|
|
|
305
310
|
expect(await capture()).toContain("ay notify watch --unread"); // Management entry
|
|
306
311
|
});
|
|
307
312
|
|
|
308
|
-
it("labels
|
|
309
|
-
//
|
|
310
|
-
//
|
|
313
|
+
it("labels the ay-only lines for cli-bound aliases", async () => {
|
|
314
|
+
// `read` / `share` / `connect` stay listed (pagination flags are worth
|
|
315
|
+
// knowing; `ay share` is how the console is reached at all) but must not read
|
|
316
|
+
// as invokable through `cy`, where those words are prompt text.
|
|
311
317
|
const alias = await capture(false);
|
|
318
|
+
expect(alias).toContain("ay read <keyword>");
|
|
319
|
+
expect(alias).toContain("`cy read …` is a prompt");
|
|
312
320
|
expect(alias).toContain("ay share");
|
|
313
321
|
expect(alias).toContain("`cy share`/`cy connect` are prompts");
|
|
314
|
-
|
|
322
|
+
const manager = await capture(true);
|
|
323
|
+
expect(manager).not.toContain("is a prompt");
|
|
324
|
+
expect(manager).not.toContain("are prompts");
|
|
315
325
|
});
|
|
316
326
|
|
|
317
327
|
it("stays plain for a human shell (no AGENT_YES_PID)", async () => {
|
package/ts/subcommands.ts
CHANGED
|
@@ -627,7 +627,6 @@ const SUBCOMMANDS = new Set([
|
|
|
627
627
|
"result",
|
|
628
628
|
"notify",
|
|
629
629
|
"notifyd",
|
|
630
|
-
"read",
|
|
631
630
|
"cat",
|
|
632
631
|
"tail",
|
|
633
632
|
"head",
|
|
@@ -666,15 +665,21 @@ const SUBCOMMANDS = new Set([
|
|
|
666
665
|
// Subcommands recognised ONLY on the GENERIC manager entry (`ay` / `agent-yes`).
|
|
667
666
|
// A cli-bound alias like `cy` (= claude-yes = "agent-yes claude") must NOT treat
|
|
668
667
|
// these as subcommands — it falls straight through to running the agent with that
|
|
669
|
-
// text. Two reasons a name lands here:
|
|
670
|
-
//
|
|
671
|
-
//
|
|
672
|
-
//
|
|
668
|
+
// text. Two reasons a name lands here:
|
|
669
|
+
// - host management: `cy setup …` / `cy ws …` should prompt claude, not share
|
|
670
|
+
// the machine over WebRTC (#67).
|
|
671
|
+
// - it is an ordinary English verb people start prompts with: `cy read ts/cli.ts
|
|
672
|
+
// and explain it` / `cy connect the frontend to the API` must reach claude.
|
|
673
|
+
// The commands stay reachable on the manager entry (`ay read`, `ay share`,
|
|
674
|
+
// `ay connect`); `cy cat` / `cy tail` / `cy head` / `cy ls` are unchanged —
|
|
675
|
+
// nobody opens a prompt with those.
|
|
676
|
+
// Kept one name per line so both runtimes' copies stay easy to keep in sync.
|
|
673
677
|
const MANAGER_SUBCOMMANDS = new Set([
|
|
674
678
|
// manage this host
|
|
675
679
|
"setup",
|
|
676
680
|
"ws",
|
|
677
|
-
// prompt-word verbs
|
|
681
|
+
// prompt-word verbs
|
|
682
|
+
"read",
|
|
678
683
|
"share",
|
|
679
684
|
"connect",
|
|
680
685
|
]);
|
|
@@ -906,8 +911,9 @@ export function isUnreachableWriteErrno(code: string | undefined): boolean {
|
|
|
906
911
|
/**
|
|
907
912
|
* Whether `name` is a subcommand. `managerCommands` (default true, for the
|
|
908
913
|
* generic `ay`/`agent-yes` entry) additionally admits manager-only commands
|
|
909
|
-
*
|
|
910
|
-
* names fall through to running the agent instead
|
|
914
|
+
* (`setup`, `ws`, `read`); pass false for a cli-bound alias (cy/claude-yes/…) so
|
|
915
|
+
* those names fall through to running the agent instead — `cy read <file>` is a
|
|
916
|
+
* prompt, `ay read <keyword>` is the log pager.
|
|
911
917
|
*/
|
|
912
918
|
export function isSubcommand(name: string | undefined, managerCommands = true): boolean {
|
|
913
919
|
if (!name) return false;
|
|
@@ -991,9 +997,10 @@ async function writeStdoutFlushed(text: string): Promise<void> {
|
|
|
991
997
|
*/
|
|
992
998
|
export async function runSubcommand(argv: string[]): Promise<number | null> {
|
|
993
999
|
const sub = argv[2];
|
|
994
|
-
// Manager-only subcommands (setup) aren't subcommands for a
|
|
995
|
-
// like `cy` — they fall through to running the agent
|
|
996
|
-
//
|
|
1000
|
+
// Manager-only subcommands (setup / ws / read) aren't subcommands for a
|
|
1001
|
+
// cli-bound alias like `cy` — they fall through to running the agent with that
|
|
1002
|
+
// word as prompt text. Computed once from argv so it holds regardless of
|
|
1003
|
+
// caller, and reused to hide manager-only help.
|
|
997
1004
|
const managerCommands = !invokedCliName(argv);
|
|
998
1005
|
if (!isSubcommand(sub, managerCommands)) return null;
|
|
999
1006
|
|
|
@@ -1270,10 +1277,15 @@ export async function cmdHelp(managerCommands = true): Promise<number> {
|
|
|
1270
1277
|
? ` ay ws ls [--status] list <owner>/<repo>/tree/<branch> workspaces\n` +
|
|
1271
1278
|
` ay ws new <owner>/<repo>[@branch] clone/refresh a workspace (ay ws help for more)\n`
|
|
1272
1279
|
: ``;
|
|
1273
|
-
// `
|
|
1274
|
-
//
|
|
1275
|
-
//
|
|
1276
|
-
//
|
|
1280
|
+
// `read` is manager-entry-only too, but for the opposite reason: it's a word
|
|
1281
|
+
// people open prompts with, so `cy read …` runs the agent. Unlike setup/ws the
|
|
1282
|
+
// line stays visible (pagination is worth knowing about) — just labelled, so
|
|
1283
|
+
// nobody types `cy read <pid>` and gets a claude session instead of a log.
|
|
1284
|
+
const readAliasNote = managerCommands
|
|
1285
|
+
? ``
|
|
1286
|
+
: ` (\`ay read\` only — \`cy read …\` is a prompt)\n`;
|
|
1287
|
+
// Same for `share` / `connect`: prompt words, but `ay share` is how the web
|
|
1288
|
+
// console is reached at all, so label the lines rather than hide the feature.
|
|
1277
1289
|
const shareAliasNote = managerCommands
|
|
1278
1290
|
? ``
|
|
1279
1291
|
: ` (\`ay\` only — \`cy share\`/\`cy connect\` are prompts)\n`;
|
|
@@ -1295,6 +1307,7 @@ export async function cmdHelp(managerCommands = true): Promise<number> {
|
|
|
1295
1307
|
` [--fail-on TEXT] [--count N] 3 = --fail-on hit first)\n` +
|
|
1296
1308
|
` ay read <keyword> [page opts] paginate: --last/--head N, --range A:B,\n` +
|
|
1297
1309
|
` --before-line L [--limit N]\n` +
|
|
1310
|
+
readAliasNote +
|
|
1298
1311
|
` ay cat <keyword> full log\n` +
|
|
1299
1312
|
` ay head <keyword> first N lines\n` +
|
|
1300
1313
|
` ay hist [-n 6] [--all] [--json] past agent conversations (claude/codex\n` +
|
package/dist/trayApp-ucuB_j5l.js
DELETED