agent-yes 1.211.3 → 1.211.4-beta.528.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/dist/{SUPPORTED_CLIS-BppqsQec.js → SUPPORTED_CLIS-Byhbq51v.js} +2 -2
- package/dist/SUPPORTED_CLIS-Cn1DDQzc.js +9 -0
- package/dist/{agentShare-cbONedtw.js → agentShare-DeViZNrO.js} +2 -2
- package/dist/cli.js +4 -4
- package/dist/index.js +2 -2
- package/dist/{notifyDaemon-BkrCKksX.js → notifyDaemon-C0gLq-l0.js} +2 -2
- package/dist/{rustBinary-oYotD-7H.js → rustBinary-CiTN-Fjx.js} +2 -2
- package/dist/{schedule-B-BWbR4a.js → schedule--nBrTMYy.js} +4 -4
- package/dist/{serve-CznlttbS.js → serve-BTkjTRVI.js} +38 -13
- package/dist/{setup-veFN34HB.js → setup-BONqG2dA.js} +2 -2
- package/dist/{subcommands-D-TsalTB.js → subcommands-CFmfjlte.js} +1 -1
- package/dist/{subcommands-DiK7eUJD.js → subcommands-CwZO3MJy.js} +7 -7
- package/dist/{ts-DynoQKte.js → ts-hRBYUxai.js} +2 -2
- package/dist/{versionChecker-B6FXmz4I.js → versionChecker-D-1EfYmX.js} +2 -2
- package/dist/{ws-BdliucQB.js → ws-ToYzhFlv.js} +2 -2
- package/lab/ui/index.html +82 -9
- package/package.json +1 -1
- package/ts/serve.ts +45 -1
- package/dist/SUPPORTED_CLIS-Dxj2Q_b3.js +0 -9
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as CLIS_CONFIG } from "./ts-
|
|
1
|
+
import { t as CLIS_CONFIG } from "./ts-hRBYUxai.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-Byhbq51v.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "./ts-hRBYUxai.js";
|
|
2
|
+
import "./logger-CDIsZ-Pp.js";
|
|
3
|
+
import "./versionChecker-D-1EfYmX.js";
|
|
4
|
+
import "./pidStore-BIvsBQ8X.js";
|
|
5
|
+
import "./globalPidIndex-CoNr7tS8.js";
|
|
6
|
+
import "./messageLog-CxrKJj77.js";
|
|
7
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Byhbq51v.js";
|
|
8
|
+
|
|
9
|
+
export { SUPPORTED_CLIS };
|
|
@@ -2,7 +2,7 @@ import "./logger-CDIsZ-Pp.js";
|
|
|
2
2
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
3
3
|
import "./messageLog-CxrKJj77.js";
|
|
4
4
|
import "./configShared-aKTg-sa5.js";
|
|
5
|
-
import { M as resolveOne } from "./subcommands-
|
|
5
|
+
import { M as resolveOne } from "./subcommands-CwZO3MJy.js";
|
|
6
6
|
import "./e2e-jb0Hp43q.js";
|
|
7
7
|
import "./webrtcLink-B7REGtK2.js";
|
|
8
8
|
import "./remotes-Cim0dBU7.js";
|
|
@@ -229,4 +229,4 @@ function transformEvent(rawEvent, agentId, forwarded) {
|
|
|
229
229
|
|
|
230
230
|
//#endregion
|
|
231
231
|
export { createScopedShare, listShares, revokeAllShares, revokeShare };
|
|
232
|
-
//# sourceMappingURL=agentShare-
|
|
232
|
+
//# sourceMappingURL=agentShare-DeViZNrO.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-D-1EfYmX.js";
|
|
5
|
+
import { n as getRustBinary } from "./rustBinary-CiTN-Fjx.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-CFmfjlte.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-Cn1DDQzc.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-hRBYUxai.js";
|
|
2
2
|
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-
|
|
3
|
+
import "./versionChecker-D-1EfYmX.js";
|
|
4
4
|
import "./pidStore-BIvsBQ8X.js";
|
|
5
5
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
6
6
|
import "./messageLog-CxrKJj77.js";
|
|
@@ -2,7 +2,7 @@ import { n as logger } from "./logger-CDIsZ-Pp.js";
|
|
|
2
2
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
3
3
|
import "./messageLog-CxrKJj77.js";
|
|
4
4
|
import "./configShared-aKTg-sa5.js";
|
|
5
|
-
import { $ as daemonLockOwnerPath, G as gcInboxes, J as listInboxParents, K as hostId, Q as daemonLockDir, S as listRecords, W as appendEvent, X as readInbox, Y as liveWatchers, Z as shouldStealLock, _ as isPidAlive, c as deriveLiveState, et as notifyDir, k as renderLogTailLines } from "./subcommands-
|
|
5
|
+
import { $ as daemonLockOwnerPath, G as gcInboxes, J as listInboxParents, K as hostId, Q as daemonLockDir, S as listRecords, W as appendEvent, X as readInbox, Y as liveWatchers, Z as shouldStealLock, _ as isPidAlive, c as deriveLiveState, et as notifyDir, k as renderLogTailLines } from "./subcommands-CwZO3MJy.js";
|
|
6
6
|
import "./e2e-jb0Hp43q.js";
|
|
7
7
|
import "./webrtcLink-B7REGtK2.js";
|
|
8
8
|
import "./remotes-Cim0dBU7.js";
|
|
@@ -589,4 +589,4 @@ async function ensureDaemon() {
|
|
|
589
589
|
|
|
590
590
|
//#endregion
|
|
591
591
|
export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
|
|
592
|
-
//# sourceMappingURL=notifyDaemon-
|
|
592
|
+
//# sourceMappingURL=notifyDaemon-C0gLq-l0.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
1
|
+
import { r as getInstalledPackage } from "./versionChecker-D-1EfYmX.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-CiTN-Fjx.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import "./ts-
|
|
1
|
+
import "./ts-hRBYUxai.js";
|
|
2
2
|
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-
|
|
3
|
+
import "./versionChecker-D-1EfYmX.js";
|
|
4
4
|
import "./pidStore-BIvsBQ8X.js";
|
|
5
5
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
6
6
|
import "./messageLog-CxrKJj77.js";
|
|
7
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-
|
|
7
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Byhbq51v.js";
|
|
8
8
|
import { d as resolveSpawnCwd } from "./workspaceConfig-CjaRvTjf.js";
|
|
9
9
|
import { n as liveEnv, t as ensureNodeRuntime } from "./nodeRuntime-CwNJuwH5.js";
|
|
10
10
|
import { createHash } from "node:crypto";
|
|
@@ -151,4 +151,4 @@ async function cmdSchedule(rest) {
|
|
|
151
151
|
|
|
152
152
|
//#endregion
|
|
153
153
|
export { cmdSchedule };
|
|
154
|
-
//# sourceMappingURL=schedule
|
|
154
|
+
//# sourceMappingURL=schedule--nBrTMYy.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import "./ts-
|
|
1
|
+
import "./ts-hRBYUxai.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-D-1EfYmX.js";
|
|
4
|
+
import { t as findSpawnHiddenLauncher } from "./rustBinary-CiTN-Fjx.js";
|
|
5
5
|
import { t as agentYesHome$1 } from "./agentYesHome-CtHb5b71.js";
|
|
6
6
|
import "./pidStore-BIvsBQ8X.js";
|
|
7
7
|
import { a as updateGlobalPidStatus } from "./globalPidIndex-CoNr7tS8.js";
|
|
8
8
|
import { r as recordInbox } from "./messageLog-CxrKJj77.js";
|
|
9
9
|
import { t as pgidForWrapper } from "./reaper-BUHCyxdF.js";
|
|
10
10
|
import "./configShared-aKTg-sa5.js";
|
|
11
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-
|
|
12
|
-
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, f as extractNeedsInput, k as renderLogTailLines, l as deriveLiveStatus, o as controlCodeFromName, p as extractTaskCounts, q as isTransientLockMkdirError, tt as TYPING_BADGE, u as extractBadges } from "./subcommands-
|
|
11
|
+
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-Byhbq51v.js";
|
|
12
|
+
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, f as extractNeedsInput, k as renderLogTailLines, l as deriveLiveStatus, o as controlCodeFromName, p as extractTaskCounts, q as isTransientLockMkdirError, tt as TYPING_BADGE, u as extractBadges } from "./subcommands-CwZO3MJy.js";
|
|
13
13
|
import "./e2e-jb0Hp43q.js";
|
|
14
14
|
import "./webrtcLink-B7REGtK2.js";
|
|
15
15
|
import "./remotes-Cim0dBU7.js";
|
|
@@ -1511,7 +1511,23 @@ Options:
|
|
|
1511
1511
|
const PRESENCE_TTL_MS = 12e3;
|
|
1512
1512
|
const negoApplied = /* @__PURE__ */ new Map();
|
|
1513
1513
|
const negoTimers = /* @__PURE__ */ new Map();
|
|
1514
|
+
const negoCapsGoneAt = /* @__PURE__ */ new Map();
|
|
1514
1515
|
const NEGO_DEBOUNCE_MS = 350;
|
|
1516
|
+
const NEGO_WITHDRAW_GRACE_MS = 3e4;
|
|
1517
|
+
const hasRealTty = (pid) => {
|
|
1518
|
+
if (process.platform === "win32") return false;
|
|
1519
|
+
try {
|
|
1520
|
+
const out = execFileSync("ps", [
|
|
1521
|
+
"-o",
|
|
1522
|
+
"tty=",
|
|
1523
|
+
"-p",
|
|
1524
|
+
String(pid)
|
|
1525
|
+
], { timeout: 2e3 }).toString().trim();
|
|
1526
|
+
return out !== "" && !out.includes("?");
|
|
1527
|
+
} catch {
|
|
1528
|
+
return false;
|
|
1529
|
+
}
|
|
1530
|
+
};
|
|
1515
1531
|
const winsizePathFor = (pid) => path.join(process.env.AGENT_YES_HOME ?? path.join(homedir(), ".agent-yes"), "winsize", String(pid));
|
|
1516
1532
|
const liveCapsFor = (pid) => {
|
|
1517
1533
|
const now = Date.now();
|
|
@@ -1526,7 +1542,8 @@ Options:
|
|
|
1526
1542
|
const prev = negoApplied.get(pid);
|
|
1527
1543
|
try {
|
|
1528
1544
|
if (eff) {
|
|
1529
|
-
|
|
1545
|
+
negoCapsGoneAt.delete(pid);
|
|
1546
|
+
if (prev && Math.abs(prev.cols - eff.cols) <= 1 && Math.abs(prev.rows - eff.rows) <= 1) return;
|
|
1530
1547
|
const content = `${eff.cols} ${eff.rows} ${Date.now()}\n`;
|
|
1531
1548
|
await mkdir(path.dirname(file), { recursive: true });
|
|
1532
1549
|
await writeFile(file, content);
|
|
@@ -1536,7 +1553,15 @@ Options:
|
|
|
1536
1553
|
});
|
|
1537
1554
|
} else {
|
|
1538
1555
|
if (!prev) return;
|
|
1556
|
+
if (!hasRealTty(pid)) return;
|
|
1557
|
+
const gone = negoCapsGoneAt.get(pid);
|
|
1558
|
+
if (!gone) {
|
|
1559
|
+
negoCapsGoneAt.set(pid, Date.now());
|
|
1560
|
+
return;
|
|
1561
|
+
}
|
|
1562
|
+
if (Date.now() - gone < NEGO_WITHDRAW_GRACE_MS) return;
|
|
1539
1563
|
negoApplied.delete(pid);
|
|
1564
|
+
negoCapsGoneAt.delete(pid);
|
|
1540
1565
|
try {
|
|
1541
1566
|
if (await readFile(file, "utf-8") !== prev.content) return;
|
|
1542
1567
|
await unlink(file);
|
|
@@ -1868,7 +1893,7 @@ Options:
|
|
|
1868
1893
|
}
|
|
1869
1894
|
});
|
|
1870
1895
|
if (req.method === "GET" && p === "/api/ws") {
|
|
1871
|
-
const ws = await import("./ws-
|
|
1896
|
+
const ws = await import("./ws-ToYzhFlv.js");
|
|
1872
1897
|
try {
|
|
1873
1898
|
await ws.loadProvision();
|
|
1874
1899
|
} catch (e) {
|
|
@@ -1888,7 +1913,7 @@ Options:
|
|
|
1888
1913
|
if (req.method === "GET" && p === "/api/ws/status") {
|
|
1889
1914
|
const dirRaw = url.searchParams.get("path");
|
|
1890
1915
|
if (!dirRaw) return new Response("missing ?path=<workspace dir>", { status: 400 });
|
|
1891
|
-
const ws = await import("./ws-
|
|
1916
|
+
const ws = await import("./ws-ToYzhFlv.js");
|
|
1892
1917
|
let prov;
|
|
1893
1918
|
try {
|
|
1894
1919
|
prov = await ws.loadProvision();
|
|
@@ -2449,7 +2474,7 @@ Options:
|
|
|
2449
2474
|
const perm = body.perm ?? "r";
|
|
2450
2475
|
if (perm !== "r" && perm !== "rw") return new Response(`invalid perm ${perm} (want r or rw)`, { status: 400 });
|
|
2451
2476
|
try {
|
|
2452
|
-
const { createScopedShare } = await import("./agentShare-
|
|
2477
|
+
const { createScopedShare } = await import("./agentShare-DeViZNrO.js");
|
|
2453
2478
|
const share = await createScopedShare({
|
|
2454
2479
|
agent: body.agent,
|
|
2455
2480
|
perm,
|
|
@@ -2464,12 +2489,12 @@ Options:
|
|
|
2464
2489
|
}
|
|
2465
2490
|
}
|
|
2466
2491
|
if (req.method === "GET" && p === "/api/shares") {
|
|
2467
|
-
const { listShares } = await import("./agentShare-
|
|
2492
|
+
const { listShares } = await import("./agentShare-DeViZNrO.js");
|
|
2468
2493
|
return Response.json(listShares());
|
|
2469
2494
|
}
|
|
2470
2495
|
const revokeM = /^\/api\/share\/([^/]+)$/.exec(p);
|
|
2471
2496
|
if (req.method === "DELETE" && revokeM) {
|
|
2472
|
-
const { revokeShare } = await import("./agentShare-
|
|
2497
|
+
const { revokeShare } = await import("./agentShare-DeViZNrO.js");
|
|
2473
2498
|
const ok = revokeShare(decodeURIComponent(revokeM[1]));
|
|
2474
2499
|
return new Response(ok ? "revoked" : "no such share", { status: ok ? 200 : 404 });
|
|
2475
2500
|
}
|
|
@@ -2655,7 +2680,7 @@ Options:
|
|
|
2655
2680
|
const shutdown = (resolve) => {
|
|
2656
2681
|
if (heartbeat) clearInterval(heartbeat);
|
|
2657
2682
|
closeShare?.();
|
|
2658
|
-
import("./agentShare-
|
|
2683
|
+
import("./agentShare-DeViZNrO.js").then((m) => m.revokeAllShares()).catch(() => {});
|
|
2659
2684
|
server?.stop();
|
|
2660
2685
|
Promise.resolve(releaseHostLock?.()).catch(() => {}).then(resolve);
|
|
2661
2686
|
};
|
|
@@ -2668,4 +2693,4 @@ Options:
|
|
|
2668
2693
|
|
|
2669
2694
|
//#endregion
|
|
2670
2695
|
export { cmdServe };
|
|
2671
|
-
//# sourceMappingURL=serve-
|
|
2696
|
+
//# sourceMappingURL=serve-BTkjTRVI.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-BTkjTRVI.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-BONqG2dA.js.map
|
|
@@ -2,7 +2,7 @@ import "./logger-CDIsZ-Pp.js";
|
|
|
2
2
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
3
3
|
import "./messageLog-CxrKJj77.js";
|
|
4
4
|
import "./configShared-aKTg-sa5.js";
|
|
5
|
-
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-
|
|
5
|
+
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-CwZO3MJy.js";
|
|
6
6
|
import "./e2e-jb0Hp43q.js";
|
|
7
7
|
import "./webrtcLink-B7REGtK2.js";
|
|
8
8
|
import "./remotes-Cim0dBU7.js";
|
|
@@ -1237,19 +1237,19 @@ async function runSubcommand(argv) {
|
|
|
1237
1237
|
case "restart": return await cmdRestart(rest);
|
|
1238
1238
|
case "note": return await cmdNote(rest);
|
|
1239
1239
|
case "serve": {
|
|
1240
|
-
const { cmdServe } = await import("./serve-
|
|
1240
|
+
const { cmdServe } = await import("./serve-BTkjTRVI.js");
|
|
1241
1241
|
return cmdServe(rest);
|
|
1242
1242
|
}
|
|
1243
1243
|
case "setup": {
|
|
1244
|
-
const { cmdSetup } = await import("./setup-
|
|
1244
|
+
const { cmdSetup } = await import("./setup-BONqG2dA.js");
|
|
1245
1245
|
return cmdSetup(rest);
|
|
1246
1246
|
}
|
|
1247
1247
|
case "ws": {
|
|
1248
|
-
const { cmdWs } = await import("./ws-
|
|
1248
|
+
const { cmdWs } = await import("./ws-ToYzhFlv.js");
|
|
1249
1249
|
return cmdWs(rest);
|
|
1250
1250
|
}
|
|
1251
1251
|
case "schedule": {
|
|
1252
|
-
const { cmdSchedule } = await import("./schedule
|
|
1252
|
+
const { cmdSchedule } = await import("./schedule--nBrTMYy.js");
|
|
1253
1253
|
return cmdSchedule(rest);
|
|
1254
1254
|
}
|
|
1255
1255
|
case "remote": {
|
|
@@ -4269,7 +4269,7 @@ async function cmdNotify(rest) {
|
|
|
4269
4269
|
}
|
|
4270
4270
|
const ensure = async () => {
|
|
4271
4271
|
if (!argv["ensure-daemon"]) return;
|
|
4272
|
-
const { ensureDaemon } = await import("./notifyDaemon-
|
|
4272
|
+
const { ensureDaemon } = await import("./notifyDaemon-C0gLq-l0.js");
|
|
4273
4273
|
await ensureDaemon().catch(() => null);
|
|
4274
4274
|
};
|
|
4275
4275
|
await heartbeatWatcher(parent, selfStartedAt);
|
|
@@ -4343,7 +4343,7 @@ async function cmdNotifyCursor(args) {
|
|
|
4343
4343
|
}
|
|
4344
4344
|
async function cmdNotifyd(rest) {
|
|
4345
4345
|
const sub = rest[0] ?? "status";
|
|
4346
|
-
const daemon = await import("./notifyDaemon-
|
|
4346
|
+
const daemon = await import("./notifyDaemon-C0gLq-l0.js");
|
|
4347
4347
|
switch (sub) {
|
|
4348
4348
|
case "run": return daemon.runDaemon();
|
|
4349
4349
|
case "once": return daemon.runDaemon({ once: true });
|
|
@@ -4370,4 +4370,4 @@ async function cmdNotifyd(rest) {
|
|
|
4370
4370
|
|
|
4371
4371
|
//#endregion
|
|
4372
4372
|
export { daemonLockOwnerPath 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, listInboxParents as J, hostId as K, snapshotStatus as L, resolveOne as M, resolveReadWindow as N, recentReadEdges as O, resolveResumeArgs as P, daemonLockDir as Q, stdinActivityPath as R, listRecords as S, readNotes as T, writeToIpc as U, waitForLogQuiet as V, appendEvent as W, readInbox as X, liveWatchers as Y, shouldStealLock as Z, isPidAlive as _, cmdHelp as a, isUserTyping as b, deriveLiveState as c, extractMenu as d, notifyDir 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, isTransientLockMkdirError as q, TYPING_WINDOW_MS as r, cursorAbs as s, GRACEFUL_EXIT_COMMANDS as t, TYPING_BADGE as tt, extractBadges as u, isSlashCommand as v, menuSelectKeys as w, lastStdinAt as x, isSubcommand as y, stopTipForCli as z };
|
|
4373
|
-
//# sourceMappingURL=subcommands-
|
|
4373
|
+
//# sourceMappingURL=subcommands-CwZO3MJy.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as logger, t as addTransport } from "./logger-CDIsZ-Pp.js";
|
|
2
|
-
import { r as getInstalledPackage } from "./versionChecker-
|
|
2
|
+
import { r as getInstalledPackage } from "./versionChecker-D-1EfYmX.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";
|
|
@@ -1901,4 +1901,4 @@ function sleep(ms) {
|
|
|
1901
1901
|
|
|
1902
1902
|
//#endregion
|
|
1903
1903
|
export { removeControlCharacters as a, AgentContext as i, agentYes as n, config as r, CLIS_CONFIG as t };
|
|
1904
|
-
//# sourceMappingURL=ts-
|
|
1904
|
+
//# sourceMappingURL=ts-hRBYUxai.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.211.
|
|
10
|
+
var version = "1.211.4-beta.528.1";
|
|
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-D-1EfYmX.js.map
|
|
@@ -2,7 +2,7 @@ import "./logger-CDIsZ-Pp.js";
|
|
|
2
2
|
import "./globalPidIndex-CoNr7tS8.js";
|
|
3
3
|
import "./messageLog-CxrKJj77.js";
|
|
4
4
|
import "./configShared-aKTg-sa5.js";
|
|
5
|
-
import { S as listRecords } from "./subcommands-
|
|
5
|
+
import { S as listRecords } from "./subcommands-CwZO3MJy.js";
|
|
6
6
|
import "./e2e-jb0Hp43q.js";
|
|
7
7
|
import "./webrtcLink-B7REGtK2.js";
|
|
8
8
|
import "./remotes-Cim0dBU7.js";
|
|
@@ -418,4 +418,4 @@ async function cmdWs(args) {
|
|
|
418
418
|
|
|
419
419
|
//#endregion
|
|
420
420
|
export { WS_JSON_SCHEMA, cmdWs, collectWorkspaces, isPathInside, loadProvision, workspaceStatus };
|
|
421
|
-
//# sourceMappingURL=ws-
|
|
421
|
+
//# sourceMappingURL=ws-ToYzhFlv.js.map
|
package/lab/ui/index.html
CHANGED
|
@@ -3952,6 +3952,12 @@
|
|
|
3952
3952
|
}
|
|
3953
3953
|
// In-console P2P preview: an iframe served from /w/p/<src>/<port>/, which
|
|
3954
3954
|
// the Service Worker proxies over the machine's WebRTC tunnel (no relay).
|
|
3955
|
+
// The iframe navigates via location.replace(), NEVER src assignment — an
|
|
3956
|
+
// src= write on an already-loaded iframe pushes a TOP-LEVEL history entry,
|
|
3957
|
+
// so each preview open/close silently stacked entries the back key then
|
|
3958
|
+
// chewed through invisibly (URL never changes). previewUrl mirrors what
|
|
3959
|
+
// the frame shows, since the src attribute stays stale with replace().
|
|
3960
|
+
let previewUrl = "";
|
|
3955
3961
|
function openPreview(src, port) {
|
|
3956
3962
|
// Scope-relative so it works at both /w/ (agent-yes.com) and / (ay serve).
|
|
3957
3963
|
const url = new URL("p/" + encodeURIComponent(src) + "/" + port + "/", location.href)
|
|
@@ -3959,14 +3965,42 @@
|
|
|
3959
3965
|
const frame = $("previewFrame");
|
|
3960
3966
|
if (!frame) return window.open(url, "_blank");
|
|
3961
3967
|
$("previewTitle").textContent = "localhost:" + port;
|
|
3962
|
-
|
|
3963
|
-
|
|
3968
|
+
previewUrl = url;
|
|
3969
|
+
try {
|
|
3970
|
+
frame.contentWindow.location.replace(url);
|
|
3971
|
+
} catch {
|
|
3972
|
+
frame.src = url;
|
|
3973
|
+
}
|
|
3974
|
+
const ov = $("previewOverlay");
|
|
3975
|
+
if (ov.hidden) {
|
|
3976
|
+
ov.hidden = false;
|
|
3977
|
+
// The overlay is a "screen": give it a history entry so the hardware
|
|
3978
|
+
// back key closes it (via popstate) instead of leaving the console.
|
|
3979
|
+
try {
|
|
3980
|
+
history.pushState({ ayPreview: 1 }, "", location.href);
|
|
3981
|
+
} catch {}
|
|
3982
|
+
}
|
|
3964
3983
|
}
|
|
3984
|
+
// UI close (✕ button): unwind our history entry so depth stays in sync
|
|
3985
|
+
// with what's on screen; the popstate handler does the actual teardown.
|
|
3986
|
+
// If the entry is already gone (user arrived here via back), close direct.
|
|
3965
3987
|
function closePreview() {
|
|
3988
|
+
if (history.state && history.state.ayPreview) history.back();
|
|
3989
|
+
else closePreviewNow();
|
|
3990
|
+
}
|
|
3991
|
+
function closePreviewNow() {
|
|
3966
3992
|
const ov = $("previewOverlay");
|
|
3967
3993
|
if (ov) ov.hidden = true;
|
|
3994
|
+
previewUrl = "";
|
|
3968
3995
|
const frame = $("previewFrame");
|
|
3969
|
-
if (frame)
|
|
3996
|
+
if (frame) {
|
|
3997
|
+
// replace(), not src= (see above); also tears down the app + tunnel.
|
|
3998
|
+
try {
|
|
3999
|
+
frame.contentWindow.location.replace("about:blank");
|
|
4000
|
+
} catch {
|
|
4001
|
+
frame.src = "about:blank";
|
|
4002
|
+
}
|
|
4003
|
+
}
|
|
3970
4004
|
}
|
|
3971
4005
|
async function doExpose() {
|
|
3972
4006
|
const tx = exposePendingTx || localTx;
|
|
@@ -4159,12 +4193,14 @@
|
|
|
4159
4193
|
});
|
|
4160
4194
|
$("previewClose")?.addEventListener("click", closePreview);
|
|
4161
4195
|
$("previewReload")?.addEventListener("click", () => {
|
|
4162
|
-
|
|
4163
|
-
|
|
4196
|
+
// reload(), not src re-assignment — src= would push a history entry.
|
|
4197
|
+
try {
|
|
4198
|
+
$("previewFrame")?.contentWindow.location.reload();
|
|
4199
|
+
} catch {}
|
|
4164
4200
|
});
|
|
4165
4201
|
$("previewPop")?.addEventListener("click", () => {
|
|
4166
|
-
|
|
4167
|
-
if (
|
|
4202
|
+
// frame.src stays stale with location.replace() — use the mirror.
|
|
4203
|
+
if (previewUrl) window.open(previewUrl, "_blank");
|
|
4168
4204
|
});
|
|
4169
4205
|
})();
|
|
4170
4206
|
(function shareModalBoot() {
|
|
@@ -5176,7 +5212,17 @@
|
|
|
5176
5212
|
renderList();
|
|
5177
5213
|
// Mobile: flip the single-column layout to the terminal ("detail") pane.
|
|
5178
5214
|
// Done BEFORE term.open below so xterm measures a visible container.
|
|
5179
|
-
|
|
5215
|
+
// Entering detail FROM the list gets a history entry, so the hardware
|
|
5216
|
+
// back key / edge-swipe returns to the list (via popstate → goBackNow)
|
|
5217
|
+
// instead of leaving the site — which showed a blank page in the
|
|
5218
|
+
// installed PWA, whose history starts at the console itself.
|
|
5219
|
+
const app = document.querySelector(".app");
|
|
5220
|
+
if (window.innerWidth <= 720 && !app.classList.contains("show-detail")) {
|
|
5221
|
+
try {
|
|
5222
|
+
history.pushState({ ayDetail: 1 }, "", location.href);
|
|
5223
|
+
} catch {}
|
|
5224
|
+
}
|
|
5225
|
+
app.classList.add("show-detail");
|
|
5180
5226
|
// Shared-view gating (host-enforced; this is UX):
|
|
5181
5227
|
// • view-only (r) → readonly-agent: hide composer/keybar + ALL agent actions.
|
|
5182
5228
|
// • read-write (rw) → steer-agent: keep composer/keybar (can type), but hide
|
|
@@ -5449,7 +5495,28 @@
|
|
|
5449
5495
|
});
|
|
5450
5496
|
// Mobile back: return to the list pane. The tail keeps streaming in the
|
|
5451
5497
|
// background (selection unchanged), so reopening the agent is instant.
|
|
5452
|
-
const
|
|
5498
|
+
const goBackNow = () => document.querySelector(".app").classList.remove("show-detail");
|
|
5499
|
+
// ‹ button / swipe: unwind the detail history entry select() pushed (the
|
|
5500
|
+
// popstate handler below does the flip), so history depth stays in sync
|
|
5501
|
+
// with what's on screen. Without the entry (desktop), flip directly.
|
|
5502
|
+
const goBack = () => {
|
|
5503
|
+
if (history.state && history.state.ayDetail) history.back();
|
|
5504
|
+
else goBackNow();
|
|
5505
|
+
};
|
|
5506
|
+
// Hardware/gesture back: peel the stacked "screens" (preview overlay,
|
|
5507
|
+
// mobile detail pane) off one at a time instead of leaving the site.
|
|
5508
|
+
// openPreview()/select() push the entries this handler consumes.
|
|
5509
|
+
let suppressHash = false;
|
|
5510
|
+
window.addEventListener("popstate", () => {
|
|
5511
|
+
// The back press may also rewind the #room:pid hash (select() rewrites
|
|
5512
|
+
// it in place). That press meant "close this screen", not "jump to the
|
|
5513
|
+
// previously-hashed agent" — eat the hashchange it triggers.
|
|
5514
|
+
suppressHash = true;
|
|
5515
|
+
setTimeout(() => (suppressHash = false), 0);
|
|
5516
|
+
const ov = $("previewOverlay");
|
|
5517
|
+
if (ov && !ov.hidden) return closePreviewNow();
|
|
5518
|
+
if (window.innerWidth <= 720) goBackNow();
|
|
5519
|
+
});
|
|
5453
5520
|
$("rback").addEventListener("click", goBack);
|
|
5454
5521
|
// Swipe-right-from-the-left-edge → back, an alternative to the ‹ button.
|
|
5455
5522
|
// Passive/read-only so it never fights xterm's own scroll or text
|
|
@@ -7110,6 +7177,12 @@
|
|
|
7110
7177
|
// on hashchange and jump to that agent. select() writes the hash via
|
|
7111
7178
|
// history.replaceState (which does NOT fire hashchange), so this never loops.
|
|
7112
7179
|
window.addEventListener("hashchange", () => {
|
|
7180
|
+
// Back-key screen-close (popstate above) may rewind the hash too; that
|
|
7181
|
+
// navigation is not a deep-link jump — swallow exactly one event.
|
|
7182
|
+
if (suppressHash) {
|
|
7183
|
+
suppressHash = false;
|
|
7184
|
+
return;
|
|
7185
|
+
}
|
|
7113
7186
|
const h = decodeURIComponent(location.hash.replace(/^#/, ""));
|
|
7114
7187
|
// Only the #room:pid agent-deep-link form (pid = digits, ≤7 — same bound
|
|
7115
7188
|
// boot() uses to tell a pid from a numeric token). Other forms (#room,
|
package/package.json
CHANGED
package/ts/serve.ts
CHANGED
|
@@ -1881,9 +1881,36 @@ export async function cmdServe(rest: string[]): Promise<number> {
|
|
|
1881
1881
|
// died → TTL), the size is withdrawn: the file is deleted ONLY if its content
|
|
1882
1882
|
// is still our own last write (so `ay attach`'s pushed size is never
|
|
1883
1883
|
// clobbered) and the wrapper falls back to the real tty size.
|
|
1884
|
+
//
|
|
1885
|
+
// Two guards keep the withdraw from CAUSING the churn it exists to undo:
|
|
1886
|
+
// • grace: quick switch-away-and-back (⌘↑/⌘↓ cycling) must not reflow the
|
|
1887
|
+
// TUI twice, so the last negotiated size lingers NEGO_WITHDRAW_GRACE_MS
|
|
1888
|
+
// after the final cap leaves before the file is removed.
|
|
1889
|
+
// • headless agents (console-spawned, `ps -o tty=` says "??") have NO real
|
|
1890
|
+
// terminal to yield to — withdrawing would drop the wrapper to its 80×24
|
|
1891
|
+
// default and visibly shrink every future open. For them the negotiated
|
|
1892
|
+
// size persists until the next viewer arrives.
|
|
1884
1893
|
const negoApplied = new Map<number, { cols: number; rows: number; content: string }>();
|
|
1885
1894
|
const negoTimers = new Map<number, ReturnType<typeof setTimeout>>();
|
|
1895
|
+
const negoCapsGoneAt = new Map<number, number>(); // pid → when the last cap left
|
|
1886
1896
|
const NEGO_DEBOUNCE_MS = 350;
|
|
1897
|
+
const NEGO_WITHDRAW_GRACE_MS = 30_000;
|
|
1898
|
+
// Does the agent have a real controlling terminal? Darwin/Linux `ps` prints
|
|
1899
|
+
// "??"/"?" for none. Errors (ps missing, pid gone) and Windows report
|
|
1900
|
+
// "no tty" — the safe side, since withdrawing is what needs a tty to exist.
|
|
1901
|
+
const hasRealTty = (pid: number): boolean => {
|
|
1902
|
+
if (process.platform === "win32") return false;
|
|
1903
|
+
try {
|
|
1904
|
+
const out = execFileSync("ps", ["-o", "tty=", "-p", String(pid)], {
|
|
1905
|
+
timeout: 2000,
|
|
1906
|
+
})
|
|
1907
|
+
.toString()
|
|
1908
|
+
.trim();
|
|
1909
|
+
return out !== "" && !out.includes("?");
|
|
1910
|
+
} catch {
|
|
1911
|
+
return false;
|
|
1912
|
+
}
|
|
1913
|
+
};
|
|
1887
1914
|
const winsizePathFor = (pid: number) =>
|
|
1888
1915
|
path.join(
|
|
1889
1916
|
process.env.AGENT_YES_HOME ?? path.join(homedir(), ".agent-yes"),
|
|
@@ -1905,14 +1932,31 @@ export async function cmdServe(rest: string[]): Promise<number> {
|
|
|
1905
1932
|
const prev = negoApplied.get(pid);
|
|
1906
1933
|
try {
|
|
1907
1934
|
if (eff) {
|
|
1908
|
-
|
|
1935
|
+
negoCapsGoneAt.delete(pid); // caps are back — cancel any pending withdraw
|
|
1936
|
+
// ±1-cell dead band: a viewer's reported capacity jitters by a row/col
|
|
1937
|
+
// between visits (open-time layout vs steady state), and a 1-cell
|
|
1938
|
+
// SIGWINCH reflow on every re-visit is exactly the churn users notice.
|
|
1939
|
+
if (prev && Math.abs(prev.cols - eff.cols) <= 1 && Math.abs(prev.rows - eff.rows) <= 1)
|
|
1940
|
+
return;
|
|
1909
1941
|
const content = `${eff.cols} ${eff.rows} ${Date.now()}\n`;
|
|
1910
1942
|
await mkdir(path.dirname(file), { recursive: true });
|
|
1911
1943
|
await writeFile(file, content);
|
|
1912
1944
|
negoApplied.set(pid, { ...eff, content });
|
|
1913
1945
|
} else {
|
|
1914
1946
|
if (!prev) return;
|
|
1947
|
+
// Headless agent: nothing to yield to — keep the negotiated size until
|
|
1948
|
+
// the next viewer shows up (the wrapper would otherwise snap to 80×24).
|
|
1949
|
+
if (!hasRealTty(pid)) return;
|
|
1950
|
+
// Grace: hold the size briefly so ⌘-cycling away and back doesn't
|
|
1951
|
+
// reflow the TUI twice. The 5s sweep re-runs this until it expires.
|
|
1952
|
+
const gone = negoCapsGoneAt.get(pid);
|
|
1953
|
+
if (!gone) {
|
|
1954
|
+
negoCapsGoneAt.set(pid, Date.now());
|
|
1955
|
+
return;
|
|
1956
|
+
}
|
|
1957
|
+
if (Date.now() - gone < NEGO_WITHDRAW_GRACE_MS) return;
|
|
1915
1958
|
negoApplied.delete(pid);
|
|
1959
|
+
negoCapsGoneAt.delete(pid);
|
|
1916
1960
|
try {
|
|
1917
1961
|
// withdraw only what we wrote — a different content means ay attach
|
|
1918
1962
|
// (or a direct /api/resize) owns the size now; leave it alone.
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import "./ts-DynoQKte.js";
|
|
2
|
-
import "./logger-CDIsZ-Pp.js";
|
|
3
|
-
import "./versionChecker-B6FXmz4I.js";
|
|
4
|
-
import "./pidStore-BIvsBQ8X.js";
|
|
5
|
-
import "./globalPidIndex-CoNr7tS8.js";
|
|
6
|
-
import "./messageLog-CxrKJj77.js";
|
|
7
|
-
import { t as SUPPORTED_CLIS } from "./SUPPORTED_CLIS-BppqsQec.js";
|
|
8
|
-
|
|
9
|
-
export { SUPPORTED_CLIS };
|