agent-yes 1.196.2 → 1.196.3
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/dist/{SUPPORTED_CLIS-BuiThZSF.js → SUPPORTED_CLIS-D3knhJ6_.js} +2 -2
- package/dist/SUPPORTED_CLIS-L3rJRumq.js +8 -0
- package/dist/{agentShare-BMZVmm7c.js → agentShare-M6FE9AsI.js} +2 -2
- package/dist/cli.js +4 -4
- package/dist/index.js +2 -2
- package/dist/{notifyDaemon-Cikn_qKr.js → notifyDaemon-DgxP6GAn.js} +2 -2
- package/dist/{rustBinary-Uxkcz3zV.js → rustBinary-C9q17obe.js} +2 -2
- package/dist/{schedule-cvu-t8uo.js → schedule-SisMmURQ.js} +4 -4
- package/dist/{serve-Cp9XGHAg.js → serve-BOrkFR6H.js} +29 -11
- package/dist/{setup-onV23tOF.js → setup-CFbckIlf.js} +2 -2
- package/dist/{subcommands-Dwzo0rx_.js → subcommands-CMX-dej0.js} +6 -6
- package/dist/{subcommands-BReg256R.js → subcommands-DSbYPDt5.js} +1 -1
- package/dist/{ts-ml_9eD1Y.js → ts-Bqa5HjY3.js} +2 -2
- package/dist/{versionChecker-ufJXjxRK.js → versionChecker-ZIgviJ62.js} +2 -2
- package/package.json +1 -1
- package/ts/serve.ts +4 -5
- package/ts/terminalReply.spec.ts +36 -0
- package/ts/terminalReply.ts +17 -0
- package/dist/SUPPORTED_CLIS-BBTAJQVG.js +0 -8
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as CLIS_CONFIG } from "./ts-
|
|
1
|
+
import { t as CLIS_CONFIG } from "./ts-Bqa5HjY3.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-D3knhJ6_.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "./ts-Bqa5HjY3.js";
|
|
2
|
+
import "./logger-CDIsZ-Pp.js";
|
|
3
|
+
import "./versionChecker-ZIgviJ62.js";
|
|
4
|
+
import "./pidStore-BIvsBQ8X.js";
|
|
5
|
+
import "./globalPidIndex-CoNr7tS8.js";
|
|
6
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-D3knhJ6_.js";
|
|
7
|
+
|
|
8
|
+
export { SUPPORTED_CLIS };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./logger-CDIsZ-Pp.js";
|
|
2
2
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
3
3
|
import "./configShared-0MnIQ652.js";
|
|
4
|
-
import { M as resolveOne } from "./subcommands-
|
|
4
|
+
import { M as resolveOne } from "./subcommands-CMX-dej0.js";
|
|
5
5
|
import "./e2e-BeKjLhmO.js";
|
|
6
6
|
import "./webrtcLink-BG0Xc4-W.js";
|
|
7
7
|
import "./remotes-oSmwSYaV.js";
|
|
@@ -228,4 +228,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
|
|
|
228
228
|
|
|
229
229
|
//#endregion
|
|
230
230
|
export { createScopedShare, listShares, revokeAllShares, revokeShare };
|
|
231
|
-
//# sourceMappingURL=agentShare-
|
|
231
|
+
//# sourceMappingURL=agentShare-M6FE9AsI.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-uqM2YYA7.js";
|
|
3
3
|
import { n as logger } from "./logger-CDIsZ-Pp.js";
|
|
4
|
-
import { i as versionString, n as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-
|
|
5
|
-
import { n as getRustBinary } from "./rustBinary-
|
|
4
|
+
import { i as versionString, n as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-ZIgviJ62.js";
|
|
5
|
+
import { n as getRustBinary } from "./rustBinary-C9q17obe.js";
|
|
6
6
|
import { argv } from "process";
|
|
7
7
|
import { spawn } from "child_process";
|
|
8
8
|
import ms from "ms";
|
|
@@ -285,7 +285,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
|
|
|
285
285
|
const rawArg = process.argv[2];
|
|
286
286
|
const managerCommands = !invokedCliName(process.argv);
|
|
287
287
|
const isHelpFlag = rawArg === "-h" || rawArg === "--help";
|
|
288
|
-
const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-
|
|
288
|
+
const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-DSbYPDt5.js");
|
|
289
289
|
if (isHelpFlag && process.argv.length === 3) {
|
|
290
290
|
await cmdHelp(managerCommands);
|
|
291
291
|
process.exit(0);
|
|
@@ -327,7 +327,7 @@ if (config.useRust) {
|
|
|
327
327
|
}
|
|
328
328
|
}
|
|
329
329
|
if (rustBinary) {
|
|
330
|
-
const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-
|
|
330
|
+
const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-L3rJRumq.js");
|
|
331
331
|
const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
|
|
332
332
|
if (config.verbose) {
|
|
333
333
|
console.log(`[rust] Using binary: ${rustBinary}`);
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as removeControlCharacters, i as AgentContext, n as agentYes, r as config, t as CLIS_CONFIG } from "./ts-
|
|
1
|
+
import { a as removeControlCharacters, i as AgentContext, n as agentYes, r as config, t as CLIS_CONFIG } from "./ts-Bqa5HjY3.js";
|
|
2
2
|
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-
|
|
3
|
+
import "./versionChecker-ZIgviJ62.js";
|
|
4
4
|
import "./pidStore-BIvsBQ8X.js";
|
|
5
5
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as logger } from "./logger-CDIsZ-Pp.js";
|
|
2
2
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
3
3
|
import "./configShared-0MnIQ652.js";
|
|
4
|
-
import { $ as notifyDir, G as gcInboxes, J as liveWatchers, K as hostId, Q as daemonLockOwnerPath, S as listRecords, W as appendEvent, X as shouldStealLock, Y as readInbox, Z as daemonLockDir, _ as isPidAlive, c as deriveLiveState, k as renderLogTailLines, q as listInboxParents } from "./subcommands-
|
|
4
|
+
import { $ as notifyDir, G as gcInboxes, J as liveWatchers, K as hostId, Q as daemonLockOwnerPath, S as listRecords, W as appendEvent, X as shouldStealLock, Y as readInbox, Z as daemonLockDir, _ as isPidAlive, c as deriveLiveState, k as renderLogTailLines, q as listInboxParents } from "./subcommands-CMX-dej0.js";
|
|
5
5
|
import "./e2e-BeKjLhmO.js";
|
|
6
6
|
import "./webrtcLink-BG0Xc4-W.js";
|
|
7
7
|
import "./remotes-oSmwSYaV.js";
|
|
@@ -588,4 +588,4 @@ async function ensureDaemon() {
|
|
|
588
588
|
|
|
589
589
|
//#endregion
|
|
590
590
|
export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
|
|
591
|
-
//# sourceMappingURL=notifyDaemon-
|
|
591
|
+
//# sourceMappingURL=notifyDaemon-DgxP6GAn.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
1
|
+
import { r as getInstalledPackage } from "./versionChecker-ZIgviJ62.js";
|
|
2
2
|
import { execFileSync } from "child_process";
|
|
3
3
|
import { existsSync, mkdirSync, unlinkSync } from "fs";
|
|
4
4
|
import { chmod, copyFile } from "fs/promises";
|
|
@@ -225,4 +225,4 @@ async function getRustBinary(options = {}) {
|
|
|
225
225
|
|
|
226
226
|
//#endregion
|
|
227
227
|
export { getRustBinary as n, findSpawnHiddenLauncher as t };
|
|
228
|
-
//# sourceMappingURL=rustBinary-
|
|
228
|
+
//# sourceMappingURL=rustBinary-C9q17obe.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import "./ts-
|
|
1
|
+
import "./ts-Bqa5HjY3.js";
|
|
2
2
|
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-
|
|
3
|
+
import "./versionChecker-ZIgviJ62.js";
|
|
4
4
|
import "./pidStore-BIvsBQ8X.js";
|
|
5
5
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
6
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-
|
|
6
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-D3knhJ6_.js";
|
|
7
7
|
import { d as resolveSpawnCwd } from "./workspaceConfig-_GtAZtsi.js";
|
|
8
8
|
import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-DZRjxpNp.js";
|
|
9
9
|
import { createHash } from "node:crypto";
|
|
@@ -150,4 +150,4 @@ async function cmdSchedule(rest) {
|
|
|
150
150
|
|
|
151
151
|
//#endregion
|
|
152
152
|
export { cmdSchedule };
|
|
153
|
-
//# sourceMappingURL=schedule-
|
|
153
|
+
//# sourceMappingURL=schedule-SisMmURQ.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import "./ts-
|
|
1
|
+
import "./ts-Bqa5HjY3.js";
|
|
2
2
|
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
4
|
-
import { t as findSpawnHiddenLauncher } from "./rustBinary-
|
|
3
|
+
import { r as getInstalledPackage } from "./versionChecker-ZIgviJ62.js";
|
|
4
|
+
import { t as findSpawnHiddenLauncher } from "./rustBinary-C9q17obe.js";
|
|
5
5
|
import "./pidStore-BIvsBQ8X.js";
|
|
6
6
|
import { a as updateGlobalPidStatus } from "./globalPidIndex-CoNr7tS8.js";
|
|
7
7
|
import { t as pgidForWrapper } from "./reaper-CWF2_ATd.js";
|
|
8
8
|
import "./configShared-0MnIQ652.js";
|
|
9
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-
|
|
10
|
-
import { A as renderRawLog, D as recentMessageEdges, E as readPtysize, L as snapshotStatus, M as resolveOne, O as recentReadEdges, S as listRecords, T as readNotes, U as writeToIpc, b as isUserTyping, et as TYPING_BADGE, f as extractNeedsInput, k as renderLogTailLines, l as deriveLiveStatus, o as controlCodeFromName, p as extractTaskCounts, tt as recordInbox, u as extractBadges } from "./subcommands-
|
|
9
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-D3knhJ6_.js";
|
|
10
|
+
import { A as renderRawLog, D as recentMessageEdges, E as readPtysize, L as snapshotStatus, M as resolveOne, O as recentReadEdges, S as listRecords, T as readNotes, U as writeToIpc, b as isUserTyping, et as TYPING_BADGE, f as extractNeedsInput, k as renderLogTailLines, l as deriveLiveStatus, o as controlCodeFromName, p as extractTaskCounts, tt as recordInbox, u as extractBadges } from "./subcommands-CMX-dej0.js";
|
|
11
11
|
import "./e2e-BeKjLhmO.js";
|
|
12
12
|
import "./webrtcLink-BG0Xc4-W.js";
|
|
13
13
|
import "./remotes-oSmwSYaV.js";
|
|
@@ -23,6 +23,25 @@ import { fileURLToPath } from "node:url";
|
|
|
23
23
|
import { randomBytes, timingSafeEqual } from "crypto";
|
|
24
24
|
import { renameSync, watch, writeFileSync } from "node:fs";
|
|
25
25
|
|
|
26
|
+
//#region ts/terminalReply.ts
|
|
27
|
+
/**
|
|
28
|
+
* Is this /api/send payload PURELY terminal auto-reply chatter — the responses
|
|
29
|
+
* a viewer's xterm generates to the agent TUI's protocol queries (Cursor
|
|
30
|
+
* Position Report incl. the DECXCPR `?`-prefixed form, Device Attributes,
|
|
31
|
+
* Device Status Report) — rather than a keystroke?
|
|
32
|
+
*
|
|
33
|
+
* Used by the serve daemon to keep such writes out of `last_stdin_at`, so a
|
|
34
|
+
* redraw/resize (or a TUI polling `ESC[?6n` every render) can't pin the
|
|
35
|
+
* console's stdin-flash + stdin age at "just typed".
|
|
36
|
+
*
|
|
37
|
+
* Anchored over ONE-OR-MORE replies: a burst of queries (e.g. tail replay on
|
|
38
|
+
* viewer attach) is answered in a single onData chunk, so several replies
|
|
39
|
+
* arrive concatenated in one payload. Real typing — including arrow keys like
|
|
40
|
+
* `ESC[A` — never matches any alternative.
|
|
41
|
+
*/
|
|
42
|
+
const isTerminalReply = (s) => /^(?:\x1b\[(?:\??\d+(?:;\d+)*R|\?[\d;]*c|>[\d;]*c|\d*n))+$/.test(s);
|
|
43
|
+
|
|
44
|
+
//#endregion
|
|
26
45
|
//#region ts/serve.ts
|
|
27
46
|
const DEFAULT_PORT = 7432;
|
|
28
47
|
/**
|
|
@@ -1074,7 +1093,6 @@ Options:
|
|
|
1074
1093
|
};
|
|
1075
1094
|
const meaningfulStdinAt = /* @__PURE__ */ new Map();
|
|
1076
1095
|
const anyDaemonWriteAt = /* @__PURE__ */ new Map();
|
|
1077
|
-
const isTerminalReply = (s) => /^\x1b\[(\d+;\d+R|\?[\d;]*c|>[\d;]*c|\d*n)$/.test(s);
|
|
1078
1096
|
const noteStdinWrite = async (pid, fifo, meaningful) => {
|
|
1079
1097
|
const mt = await stat(fifo).then((s) => s.mtimeMs).catch(() => null);
|
|
1080
1098
|
if (mt == null) return;
|
|
@@ -1953,7 +1971,7 @@ Options:
|
|
|
1953
1971
|
const perm = body.perm ?? "r";
|
|
1954
1972
|
if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
|
|
1955
1973
|
try {
|
|
1956
|
-
const { createScopedShare } = await import("./agentShare-
|
|
1974
|
+
const { createScopedShare } = await import("./agentShare-M6FE9AsI.js");
|
|
1957
1975
|
const share = await createScopedShare({
|
|
1958
1976
|
agent: body.agent,
|
|
1959
1977
|
perm,
|
|
@@ -1968,12 +1986,12 @@ Options:
|
|
|
1968
1986
|
}
|
|
1969
1987
|
}
|
|
1970
1988
|
if (req.method === "GET" && p === "/api/shares") {
|
|
1971
|
-
const { listShares } = await import("./agentShare-
|
|
1989
|
+
const { listShares } = await import("./agentShare-M6FE9AsI.js");
|
|
1972
1990
|
return Response.json(listShares());
|
|
1973
1991
|
}
|
|
1974
1992
|
const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
|
|
1975
1993
|
if (req.method === "DELETE" && revokeM) {
|
|
1976
|
-
const { revokeShare } = await import("./agentShare-
|
|
1994
|
+
const { revokeShare } = await import("./agentShare-M6FE9AsI.js");
|
|
1977
1995
|
const ok = revokeShare(decodeURIComponent(revokeM[1]));
|
|
1978
1996
|
return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
|
|
1979
1997
|
}
|
|
@@ -2155,7 +2173,7 @@ Options:
|
|
|
2155
2173
|
const shutdown = (resolve) => {
|
|
2156
2174
|
if (heartbeat) clearInterval(heartbeat);
|
|
2157
2175
|
closeShare?.();
|
|
2158
|
-
import("./agentShare-
|
|
2176
|
+
import("./agentShare-M6FE9AsI.js").then((m) => m.revokeAllShares()).catch(() => {});
|
|
2159
2177
|
server?.stop();
|
|
2160
2178
|
resolve();
|
|
2161
2179
|
};
|
|
@@ -2168,4 +2186,4 @@ Options:
|
|
|
2168
2186
|
|
|
2169
2187
|
//#endregion
|
|
2170
2188
|
export { cmdServe };
|
|
2171
|
-
//# sourceMappingURL=serve-
|
|
2189
|
+
//# sourceMappingURL=serve-BOrkFR6H.js.map
|
|
@@ -32,7 +32,7 @@ async function cmdSetup(rest) {
|
|
|
32
32
|
if (!existsSync(abs)) process.stderr.write(` note: that directory doesn't exist yet — create it, or agents spawned there will fail\n`);
|
|
33
33
|
if (noShare) return 0;
|
|
34
34
|
process.stdout.write(`\nsharing this machine to agent-yes.com…\n`);
|
|
35
|
-
const { cmdServe } = await import("./serve-
|
|
35
|
+
const { cmdServe } = await import("./serve-BOrkFR6H.js");
|
|
36
36
|
return cmdServe([
|
|
37
37
|
"install",
|
|
38
38
|
"--share",
|
|
@@ -42,4 +42,4 @@ async function cmdSetup(rest) {
|
|
|
42
42
|
|
|
43
43
|
//#endregion
|
|
44
44
|
export { cmdSetup };
|
|
45
|
-
//# sourceMappingURL=setup-
|
|
45
|
+
//# sourceMappingURL=setup-CFbckIlf.js.map
|
|
@@ -1271,15 +1271,15 @@ async function runSubcommand(argv) {
|
|
|
1271
1271
|
case "restart": return await cmdRestart(rest);
|
|
1272
1272
|
case "note": return await cmdNote(rest);
|
|
1273
1273
|
case "serve": {
|
|
1274
|
-
const { cmdServe } = await import("./serve-
|
|
1274
|
+
const { cmdServe } = await import("./serve-BOrkFR6H.js");
|
|
1275
1275
|
return cmdServe(rest);
|
|
1276
1276
|
}
|
|
1277
1277
|
case "setup": {
|
|
1278
|
-
const { cmdSetup } = await import("./setup-
|
|
1278
|
+
const { cmdSetup } = await import("./setup-CFbckIlf.js");
|
|
1279
1279
|
return cmdSetup(rest);
|
|
1280
1280
|
}
|
|
1281
1281
|
case "schedule": {
|
|
1282
|
-
const { cmdSchedule } = await import("./schedule-
|
|
1282
|
+
const { cmdSchedule } = await import("./schedule-SisMmURQ.js");
|
|
1283
1283
|
return cmdSchedule(rest);
|
|
1284
1284
|
}
|
|
1285
1285
|
case "remote": {
|
|
@@ -4297,7 +4297,7 @@ async function cmdNotify(rest) {
|
|
|
4297
4297
|
}
|
|
4298
4298
|
const ensure = async () => {
|
|
4299
4299
|
if (!argv["ensure-daemon"]) return;
|
|
4300
|
-
const { ensureDaemon } = await import("./notifyDaemon-
|
|
4300
|
+
const { ensureDaemon } = await import("./notifyDaemon-DgxP6GAn.js");
|
|
4301
4301
|
await ensureDaemon().catch(() => null);
|
|
4302
4302
|
};
|
|
4303
4303
|
await heartbeatWatcher(parent, selfStartedAt);
|
|
@@ -4371,7 +4371,7 @@ async function cmdNotifyCursor(args) {
|
|
|
4371
4371
|
}
|
|
4372
4372
|
async function cmdNotifyd(rest) {
|
|
4373
4373
|
const sub = rest[0] ?? "status";
|
|
4374
|
-
const daemon = await import("./notifyDaemon-
|
|
4374
|
+
const daemon = await import("./notifyDaemon-DgxP6GAn.js");
|
|
4375
4375
|
switch (sub) {
|
|
4376
4376
|
case "run": return daemon.runDaemon();
|
|
4377
4377
|
case "once": return daemon.runDaemon({ once: true });
|
|
@@ -4398,4 +4398,4 @@ async function cmdNotifyd(rest) {
|
|
|
4398
4398
|
|
|
4399
4399
|
//#endregion
|
|
4400
4400
|
export { notifyDir as $, renderRawLog as A, submitAndConfirm as B, matchKeyword as C, recentMessageEdges as D, readPtysize as E, restartHintLines as F, gcInboxes as G, writeKeysPaced as H, runSubcommand as I, liveWatchers as J, hostId as K, snapshotStatus as L, resolveOne as M, resolveReadWindow as N, recentReadEdges as O, resolveResumeArgs as P, daemonLockOwnerPath as Q, stdinActivityPath as R, listRecords as S, readNotes as T, writeToIpc as U, waitForLogQuiet as V, appendEvent as W, shouldStealLock as X, readInbox as Y, daemonLockDir as Z, isPidAlive as _, cmdHelp as a, isUserTyping as b, deriveLiveState as c, extractMenu as d, TYPING_BADGE as et, extractNeedsInput as f, isExitRequest as g, isAgentStuck as h, backoffWhileTyping as i, renderRawLogLines as j, renderLogTailLines as k, deriveLiveStatus as l, finalizedLines as m, READ_PAGE_DEFAULT as n, controlCodeFromName as o, extractTaskCounts as p, listInboxParents as q, TYPING_WINDOW_MS as r, cursorAbs as s, GRACEFUL_EXIT_COMMANDS as t, recordInbox as tt, extractBadges as u, isSlashCommand as v, menuSelectKeys as w, lastStdinAt as x, isSubcommand as y, stopTipForCli as z };
|
|
4401
|
-
//# sourceMappingURL=subcommands-
|
|
4401
|
+
//# sourceMappingURL=subcommands-CMX-dej0.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./logger-CDIsZ-Pp.js";
|
|
2
2
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
3
3
|
import "./configShared-0MnIQ652.js";
|
|
4
|
-
import { A as renderRawLog, B as submitAndConfirm, C as matchKeyword, D as recentMessageEdges, E as readPtysize, F as restartHintLines, H as writeKeysPaced, I as runSubcommand, L as snapshotStatus, M as resolveOne, N as resolveReadWindow, O as recentReadEdges, P as resolveResumeArgs, R as stdinActivityPath, S as listRecords, T as readNotes, U as writeToIpc, V as waitForLogQuiet, _ as isPidAlive, a as cmdHelp, b as isUserTyping, c as deriveLiveState, d as extractMenu, f as extractNeedsInput, g as isExitRequest, h as isAgentStuck, i as backoffWhileTyping, j as renderRawLogLines, k as renderLogTailLines, l as deriveLiveStatus, m as finalizedLines, n as READ_PAGE_DEFAULT, o as controlCodeFromName, p as extractTaskCounts, r as TYPING_WINDOW_MS, s as cursorAbs, t as GRACEFUL_EXIT_COMMANDS, u as extractBadges, v as isSlashCommand, w as menuSelectKeys, x as lastStdinAt, y as isSubcommand, z as stopTipForCli } from "./subcommands-
|
|
4
|
+
import { A as renderRawLog, B as submitAndConfirm, C as matchKeyword, D as recentMessageEdges, E as readPtysize, F as restartHintLines, H as writeKeysPaced, I as runSubcommand, L as snapshotStatus, M as resolveOne, N as resolveReadWindow, O as recentReadEdges, P as resolveResumeArgs, R as stdinActivityPath, S as listRecords, T as readNotes, U as writeToIpc, V as waitForLogQuiet, _ as isPidAlive, a as cmdHelp, b as isUserTyping, c as deriveLiveState, d as extractMenu, f as extractNeedsInput, g as isExitRequest, h as isAgentStuck, i as backoffWhileTyping, j as renderRawLogLines, k as renderLogTailLines, l as deriveLiveStatus, m as finalizedLines, n as READ_PAGE_DEFAULT, o as controlCodeFromName, p as extractTaskCounts, r as TYPING_WINDOW_MS, s as cursorAbs, t as GRACEFUL_EXIT_COMMANDS, u as extractBadges, v as isSlashCommand, w as menuSelectKeys, x as lastStdinAt, y as isSubcommand, z as stopTipForCli } from "./subcommands-CMX-dej0.js";
|
|
5
5
|
import "./e2e-BeKjLhmO.js";
|
|
6
6
|
import "./webrtcLink-BG0Xc4-W.js";
|
|
7
7
|
import "./remotes-oSmwSYaV.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as logger, t as addTransport } from "./logger-CDIsZ-Pp.js";
|
|
2
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
2
|
+
import { r as getInstalledPackage } from "./versionChecker-ZIgviJ62.js";
|
|
3
3
|
import { t as agentYesHome } from "./agentYesHome-CtHb5b71.js";
|
|
4
4
|
import { i as shouldUseLock, r as releaseLock, t as acquireLock } from "./runningLock-CNMl13dC.js";
|
|
5
5
|
import { t as PidStore } from "./pidStore-BIvsBQ8X.js";
|
|
@@ -1824,4 +1824,4 @@ function sleep(ms) {
|
|
|
1824
1824
|
|
|
1825
1825
|
//#endregion
|
|
1826
1826
|
export { removeControlCharacters as a, AgentContext as i, agentYes as n, config as r, CLIS_CONFIG as t };
|
|
1827
|
-
//# sourceMappingURL=ts-
|
|
1827
|
+
//# sourceMappingURL=ts-Bqa5HjY3.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.196.
|
|
10
|
+
var version = "1.196.3";
|
|
11
11
|
|
|
12
12
|
//#endregion
|
|
13
13
|
//#region ts/versionChecker.ts
|
|
@@ -215,4 +215,4 @@ async function displayVersion() {
|
|
|
215
215
|
|
|
216
216
|
//#endregion
|
|
217
217
|
export { versionString as i, displayVersion as n, getInstalledPackage as r, checkAndAutoUpdate as t };
|
|
218
|
-
//# sourceMappingURL=versionChecker-
|
|
218
|
+
//# sourceMappingURL=versionChecker-ZIgviJ62.js.map
|
package/package.json
CHANGED
package/ts/serve.ts
CHANGED
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
type CommonOpts,
|
|
27
27
|
} from "./subcommands.ts";
|
|
28
28
|
import { TYPING_BADGE } from "./badges.ts";
|
|
29
|
+
import { isTerminalReply } from "./terminalReply.ts";
|
|
29
30
|
import { ensureNodeRuntime, liveEnv } from "./nodeRuntime.ts";
|
|
30
31
|
import { type MailParty, recordInbox } from "./messageLog.ts";
|
|
31
32
|
import { updateGlobalPidStatus } from "./globalPidIndex.ts";
|
|
@@ -1565,11 +1566,9 @@ export async function cmdServe(rest: string[]): Promise<number> {
|
|
|
1565
1566
|
// resolveLastStdinAt below and the /api/send handler that stamps these.
|
|
1566
1567
|
const meaningfulStdinAt = new Map<number, number>();
|
|
1567
1568
|
const anyDaemonWriteAt = new Map<number, number>();
|
|
1568
|
-
//
|
|
1569
|
-
//
|
|
1570
|
-
//
|
|
1571
|
-
// real typing (incl. arrow keys like `ESC[A`) never looks like one of these.
|
|
1572
|
-
const isTerminalReply = (s: string) => /^\x1b\[(\d+;\d+R|\?[\d;]*c|>[\d;]*c|\d*n)$/.test(s);
|
|
1569
|
+
// isTerminalReply (ts/terminalReply.ts) spots payloads that are purely such
|
|
1570
|
+
// auto-replies — incl. the DECXCPR `ESC[?r;cR` form and bursts of several
|
|
1571
|
+
// replies concatenated in one chunk — so they never count as meaningful.
|
|
1573
1572
|
// Stamp both maps after a daemon FIFO write, keyed off the FIFO's post-write mtime
|
|
1574
1573
|
// (so `anyDaemonWriteAt` is exactly our write's mtime — an external write bumps it
|
|
1575
1574
|
// strictly higher, which is how resolveLastStdinAt tells them apart with no clock skew).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { isTerminalReply } from "./terminalReply.ts";
|
|
3
|
+
|
|
4
|
+
describe("isTerminalReply", () => {
|
|
5
|
+
it("matches single auto-replies (CPR, DECXCPR, DA1, DA2, DSR)", () => {
|
|
6
|
+
expect(isTerminalReply("\x1b[5;10R")).toBe(true); // CPR (ESC[6n answer)
|
|
7
|
+
expect(isTerminalReply("\x1b[?1;1R")).toBe(true); // DECXCPR (ESC[?6n answer)
|
|
8
|
+
expect(isTerminalReply("\x1b[?1;1;1R")).toBe(true); // DECXCPR with page
|
|
9
|
+
expect(isTerminalReply("\x1b[?1;2c")).toBe(true); // DA1
|
|
10
|
+
expect(isTerminalReply("\x1b[>0;276;0c")).toBe(true); // DA2
|
|
11
|
+
expect(isTerminalReply("\x1b[0n")).toBe(true); // DSR status OK
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it("matches a burst of replies concatenated in one chunk", () => {
|
|
15
|
+
// A viewer attach replays a tail full of queries; xterm answers them all
|
|
16
|
+
// in one onData chunk.
|
|
17
|
+
expect(isTerminalReply("\x1b[?1;1R\x1b[?1;1R\x1b[?1;1R")).toBe(true);
|
|
18
|
+
expect(isTerminalReply("\x1b[1;1R\x1b[?1;2c\x1b[0n")).toBe(true);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("never matches real typing", () => {
|
|
22
|
+
expect(isTerminalReply("hello")).toBe(false);
|
|
23
|
+
expect(isTerminalReply("\r")).toBe(false);
|
|
24
|
+
expect(isTerminalReply("\x1b[A")).toBe(false); // arrow key
|
|
25
|
+
expect(isTerminalReply("\x1b[1;5C")).toBe(false); // ctrl+arrow (no R/c/n final)
|
|
26
|
+
expect(isTerminalReply("\x1b")).toBe(false);
|
|
27
|
+
expect(isTerminalReply("")).toBe(false);
|
|
28
|
+
expect(isTerminalReply("\x1b[R")).toBe(false); // malformed — not a reply xterm emits
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("never matches a chunk that mixes a reply with real input", () => {
|
|
32
|
+
expect(isTerminalReply("\x1b[?1;1Ry")).toBe(false);
|
|
33
|
+
expect(isTerminalReply("y\x1b[?1;1R")).toBe(false);
|
|
34
|
+
expect(isTerminalReply("\x1b[1;1R\r")).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is this /api/send payload PURELY terminal auto-reply chatter — the responses
|
|
3
|
+
* a viewer's xterm generates to the agent TUI's protocol queries (Cursor
|
|
4
|
+
* Position Report incl. the DECXCPR `?`-prefixed form, Device Attributes,
|
|
5
|
+
* Device Status Report) — rather than a keystroke?
|
|
6
|
+
*
|
|
7
|
+
* Used by the serve daemon to keep such writes out of `last_stdin_at`, so a
|
|
8
|
+
* redraw/resize (or a TUI polling `ESC[?6n` every render) can't pin the
|
|
9
|
+
* console's stdin-flash + stdin age at "just typed".
|
|
10
|
+
*
|
|
11
|
+
* Anchored over ONE-OR-MORE replies: a burst of queries (e.g. tail replay on
|
|
12
|
+
* viewer attach) is answered in a single onData chunk, so several replies
|
|
13
|
+
* arrive concatenated in one payload. Real typing — including arrow keys like
|
|
14
|
+
* `ESC[A` — never matches any alternative.
|
|
15
|
+
*/
|
|
16
|
+
export const isTerminalReply = (s: string): boolean =>
|
|
17
|
+
/^(?:\x1b\[(?:\??\d+(?:;\d+)*R|\?[\d;]*c|>[\d;]*c|\d*n))+$/.test(s);
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import "./ts-ml_9eD1Y.js";
|
|
2
|
-
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-ufJXjxRK.js";
|
|
4
|
-
import "./pidStore-BIvsBQ8X.js";
|
|
5
|
-
import "./globalPidIndex-CoNr7tS8.js";
|
|
6
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BuiThZSF.js";
|
|
7
|
-
|
|
8
|
-
export { SUPPORTED_CLIS };
|