agent-yes 1.236.0 → 1.237.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/{JsonlStore-CWOA3aDH.js → JsonlStore-CPGIR0Wy.js} +1 -1
  2. package/dist/SUPPORTED_CLIS-C0RwjYrz.js +11 -0
  3. package/dist/{SUPPORTED_CLIS-C7bkkXue.js → SUPPORTED_CLIS-CDrJz9Xo.js} +2 -2
  4. package/dist/{agent-yes.config-BhjzWavn.js → agent-yes.config-DPtMM0S-.js} +2 -2
  5. package/dist/{agentShare-BxAaZ-UR.js → agentShare-Cl_J3dfx.js} +9 -9
  6. package/dist/{agentYesHome-CtHb5b71.js → agentYesHome-CtmsY6I-.js} +1 -1
  7. package/dist/browser-B3dOptjL.js +311 -0
  8. package/dist/browser-BRMyG4JA.js +13514 -0
  9. package/dist/callback-CFbkvqTh.js +12 -0
  10. package/dist/{callback-B1AWp2tC.js → callback-D0_AeyN1.js} +6 -6
  11. package/dist/{callbackCore-CcbVa8r2.js → callbackCore-CvmGSvrj.js} +1 -1
  12. package/dist/{callbackCore-Me97qn68.js → callbackCore-DAYcemCC.js} +1 -1
  13. package/dist/{channels-Lsot9pyU.js → channels-BiGUYTuz.js} +2 -2
  14. package/dist/{channels-DHXLnU4r.js → channels-CMNMFJlY.js} +6 -6
  15. package/dist/channels.js +6 -310
  16. package/dist/chunk-cZBX9HZv.js +20 -0
  17. package/dist/cli.js +11 -11
  18. package/dist/{configShared-BXz2vi4Q.js → configShared-9wVlbPyC.js} +1 -1
  19. package/dist/{cwdConflictWarn-ArYYtOGy.js → cwdConflictWarn-DWHWlBxS.js} +2 -2
  20. package/dist/{cwdDeprecation-BGX20-Fe.js → cwdDeprecation-Cd8Ykm2t.js} +1 -1
  21. package/dist/{e2e-CYlKpfxa.js → e2e-CEIdJGZ7.js} +1 -1
  22. package/dist/{expose-ByT4ef7C.js → expose-DROTwbyU.js} +1 -1
  23. package/dist/{forkNested-Bai0Q7BL.js → forkNested-DqPisz9d.js} +2 -2
  24. package/dist/{globalPidIndex-Ca4sTr1b.js → globalPidIndex-D9DOSd-c.js} +1 -1
  25. package/dist/index.js +7 -7
  26. package/dist/{messageLog-zVGWLX7w.js → messageLog-C-YIzhRj.js} +1 -1
  27. package/dist/{nodeRuntime-fVRbz6w6.js → nodeRuntime-Bf88NPqj.js} +2 -2
  28. package/dist/{notifyDaemon-Cxb0-5a0.js → notifyDaemon-D_8TRVHt.js} +8 -8
  29. package/dist/{openBrowser-DL-EO8Hi.js → openBrowser-ChLcPELv.js} +1 -1
  30. package/dist/{peer-68ZwnxLs.js → peer-B5JKF4BP.js} +3 -3
  31. package/dist/peer-D5lr1Afv.js +4 -0
  32. package/dist/{pidStore-Hjba3K6Q.js → pidStore-6EZd5DUv.js} +4 -4
  33. package/dist/pidStore-bCVS2Ldt.js +6 -0
  34. package/dist/{reaper-iQXyufgp.js → reaper-DP49VCKx.js} +2 -2
  35. package/dist/{reaper-pJpMYKmj.js → reaper-IhkB_RO0.js} +1 -1
  36. package/dist/{remotes-CF1LJLxY.js → remotes-BClMgQZW.js} +3 -3
  37. package/dist/{remotes-BDdfhL6N.js → remotes-Bem6WIyU.js} +3 -3
  38. package/dist/{runningLock-BFk3Mo8K.js → runningLock-DBoONoM-.js} +1 -1
  39. package/dist/{rustBinary-CFSG7it2.js → rustBinary-Bb9qJZ5w.js} +2 -2
  40. package/dist/{schedule-CXHdiUHa.js → schedule-B8Erb3y6.js} +11 -11
  41. package/dist/{serve-DEEwIlVV.js → serve-QejbNTr-.js} +187 -43
  42. package/dist/{setup-QfDtv5tw.js → setup-Dzi5Cc3g.js} +3 -3
  43. package/dist/{share-CDER9qNq.js → share--aHaPSjt.js} +2 -2
  44. package/dist/{share-D4K0JnHg.js → share-B9u8-I3y.js} +2 -2
  45. package/dist/{spawnGate-PwzImpOw.js → spawnGate-Bo_LFgt9.js} +3 -3
  46. package/dist/spawnGate-CuWCd2im.js +5 -0
  47. package/dist/{store-BXJERNbW.js → store-Ck0XRn-K.js} +1 -1
  48. package/dist/{subcommands-_Ci82sb1.js → subcommands-DFr-5FOL.js} +26 -21
  49. package/dist/{subcommands-m2DRpvHt.js → subcommands-ymJWO2iv.js} +7 -7
  50. package/dist/terminal-vNeFNLT8.js +138 -0
  51. package/dist/terminal.js +3 -0
  52. package/dist/{todoAutomation-x6guaQXc.js → todoAutomation-Buo457VO.js} +2 -2
  53. package/dist/{todoCli-CAMVVz9u.js → todoCli-CNNR9Czu.js} +4 -4
  54. package/dist/{tray-CF8xRQqt.js → tray-D5qFaqlS.js} +2 -2
  55. package/dist/{ts-D1FDmhc-.js → ts-Dd1FK7sR.js} +11 -28
  56. package/dist/{versionChecker-DJEtU1JU.js → versionChecker-XfEBINhH.js} +2 -2
  57. package/dist/{webrtcLink-CEYNs0pt.js → webrtcLink-VQhWmKOw.js} +2 -2
  58. package/dist/{webrtcRemote-CNC_bMH6.js → webrtcRemote-DJDtCTpj.js} +3 -3
  59. package/dist/widgets.js +7 -0
  60. package/dist/{workspaceConfig-CuGjX2_R.js → workspaceConfig-B7HaQ-MI.js} +2 -2
  61. package/dist/{ws-C7B4xWQl.js → ws-Dun8gGiV.js} +9 -9
  62. package/package.json +13 -1
  63. package/ts/serve.ts +144 -5
  64. package/ts/subcommands.ts +6 -0
  65. package/ts/termToken.spec.ts +44 -0
  66. package/ts/termToken.ts +85 -0
  67. package/ts/terminal/browser.ts +607 -0
  68. package/ts/terminal.spec.ts +50 -0
  69. package/ts/terminal.ts +245 -0
  70. package/ts/widgets.ts +14 -0
  71. package/dist/SUPPORTED_CLIS-BDXbzEWF.js +0 -11
  72. package/dist/callback-Dtk0wMsl.js +0 -12
  73. package/dist/peer-CX4qQx5U.js +0 -4
  74. package/dist/pidStore-Cp3HekUh.js +0 -6
  75. package/dist/spawnGate-C21TL4f2.js +0 -5
@@ -0,0 +1,12 @@
1
+ import "./logger-CDIsZ-Pp.js";
2
+ import "./globalPidIndex-D9DOSd-c.js";
3
+ import "./messageLog-C-YIzhRj.js";
4
+ import "./e2e-CEIdJGZ7.js";
5
+ import "./configShared-9wVlbPyC.js";
6
+ import "./subcommands-DFr-5FOL.js";
7
+ import "./webrtcLink-VQhWmKOw.js";
8
+ import "./remotes-Bem6WIyU.js";
9
+ import "./callbackCore-DAYcemCC.js";
10
+ import { i as loadOrCreateCallbackSecret, n as isCallbackRevoked, r as loadCallbackSecretReadOnly, t as cmdCallback } from "./callback-D0_AeyN1.js";
11
+
12
+ export { cmdCallback };
@@ -1,6 +1,6 @@
1
- import { t as agentYesHome } from "./agentYesHome-CtHb5b71.js";
2
- import { N as resolveOne } from "./subcommands-_Ci82sb1.js";
3
- import { a as mintCapability, o as parseExpires } from "./callbackCore-Me97qn68.js";
1
+ import { t as agentYesHome } from "./agentYesHome-CtmsY6I-.js";
2
+ import { N as resolveOne } from "./subcommands-DFr-5FOL.js";
3
+ import { a as mintCapability, o as parseExpires } from "./callbackCore-DAYcemCC.js";
4
4
  import { randomBytes } from "node:crypto";
5
5
  import { mkdir, readFile, writeFile } from "node:fs/promises";
6
6
  import path from "node:path";
@@ -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-DEEwIlVV.js");
75
+ const { resolveLocalServeUrl } = await import("./serve-QejbNTr-.js");
76
76
  const url = await resolveLocalServeUrl();
77
77
  if (url) return url;
78
78
  } catch {}
@@ -170,7 +170,7 @@ async function cmdCallback(rest) {
170
170
  createdAt: Date.now()
171
171
  };
172
172
  saveStore(all);
173
- const { buildSnippet } = await import("./callbackCore-CcbVa8r2.js");
173
+ const { buildSnippet } = await import("./callbackCore-CvmGSvrj.js");
174
174
  w(`callback ${id} → ${record.cli} #${record.pid} @ ${record.cwd}`);
175
175
  w(`expires: ${new Date(exp).toISOString()} (${expiresSpec})`);
176
176
  w(`endpoint: ${base.replace(/\/+$/, "")}/cb/${cap}`);
@@ -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-B1AWp2tC.js.map
190
+ //# sourceMappingURL=callback-D0_AeyN1.js.map
@@ -1,3 +1,3 @@
1
- import { a as mintCapability, i as frameVisitorMessage, n as MAX_EXPIRES_MS, o as parseExpires, r as buildSnippet, s as verifyCapability, t as MAX_CALLBACK_MSG_BYTES } from "./callbackCore-Me97qn68.js";
1
+ import { a as mintCapability, i as frameVisitorMessage, n as MAX_EXPIRES_MS, o as parseExpires, r as buildSnippet, s as verifyCapability, t as MAX_CALLBACK_MSG_BYTES } from "./callbackCore-DAYcemCC.js";
2
2
 
3
3
  export { buildSnippet };
@@ -140,4 +140,4 @@ function buildSnippet(opts) {
140
140
 
141
141
  //#endregion
142
142
  export { mintCapability as a, frameVisitorMessage as i, MAX_EXPIRES_MS as n, parseExpires as o, buildSnippet as r, verifyCapability as s, MAX_CALLBACK_MSG_BYTES as t };
143
- //# sourceMappingURL=callbackCore-Me97qn68.js.map
143
+ //# sourceMappingURL=callbackCore-DAYcemCC.js.map
@@ -1,4 +1,4 @@
1
- import { m as validateS, u as parseSecret } from "./e2e-CYlKpfxa.js";
1
+ import { m as validateS, u as parseSecret } from "./e2e-CEIdJGZ7.js";
2
2
 
3
3
  //#region ts/channels/link.ts
4
4
  const CH_DEFAULT_SIGHOST = "s.agent-yes.com";
@@ -134,4 +134,4 @@ function formatUntrustedInbound(op, opts) {
134
134
 
135
135
  //#endregion
136
136
  export { CH_DEFAULT_SIGHOST as a, formatChannelLink as c, parseChannelLink as d, secretFromTopic as f, parseCmd as i, formatChannelWebLink as l, isActionableCmd as n, deriveChannelId as o, isEphemeral as r, deriveRoom as s, formatUntrustedInbound as t, isChannelLink as u };
137
- //# sourceMappingURL=channels-Lsot9pyU.js.map
137
+ //# sourceMappingURL=channels-BiGUYTuz.js.map
@@ -1,6 +1,6 @@
1
- import "./e2e-CYlKpfxa.js";
2
- import { c as formatChannelLink, d as parseChannelLink, f as secretFromTopic, l as formatChannelWebLink, o as deriveChannelId, s as deriveRoom, u as isChannelLink } from "./channels-Lsot9pyU.js";
3
- import { a as renderThread, c as makeOp, f as hlcSend, n as maxHlc, o as sortOps, r as mergeOps, s as isValidOp } from "./store-BXJERNbW.js";
1
+ import "./e2e-CEIdJGZ7.js";
2
+ import { c as formatChannelLink, d as parseChannelLink, f as secretFromTopic, l as formatChannelWebLink, o as deriveChannelId, s as deriveRoom, u as isChannelLink } from "./channels-BiGUYTuz.js";
3
+ import { a as renderThread, c as makeOp, f as hlcSend, n as maxHlc, o as sortOps, r as mergeOps, s as isValidOp } from "./store-Ck0XRn-K.js";
4
4
  import { appendFile, chmod, mkdir, readFile, rm, writeFile } from "fs/promises";
5
5
  import os from "os";
6
6
  import path from "path";
@@ -386,8 +386,8 @@ function printOp(op) {
386
386
  * `extraStdin` (pipe mode) drives it. Returns the started peer + a stop fn.
387
387
  */
388
388
  async function runMesh(cwd, entry, opts) {
389
- const { ChannelPeer } = await import("./peer-CX4qQx5U.js");
390
- const { importRTC, getIceServers } = await import("./share-CDER9qNq.js");
389
+ const { ChannelPeer } = await import("./peer-D5lr1Afv.js");
390
+ const { importRTC, getIceServers } = await import("./share--aHaPSjt.js");
391
391
  const rtc = await importRTC();
392
392
  const seen = new Set((await readOps(cwd, entry.channelId)).map((o) => o.id));
393
393
  const peer = new ChannelPeer({
@@ -567,4 +567,4 @@ async function cmdCh(args) {
567
567
 
568
568
  //#endregion
569
569
  export { cmdCh };
570
- //# sourceMappingURL=channels-DHXLnU4r.js.map
570
+ //# sourceMappingURL=channels-CMNMFJlY.js.map
package/dist/channels.js CHANGED
@@ -1,311 +1,7 @@
1
- import { d as randomHex } from "./e2e-CYlKpfxa.js";
2
- import { a as CH_DEFAULT_SIGHOST, c as formatChannelLink, d as parseChannelLink, f as secretFromTopic, i as parseCmd, l as formatChannelWebLink, n as isActionableCmd, o as deriveChannelId, r as isEphemeral, s as deriveRoom, t as formatUntrustedInbound, u as isChannelLink } from "./channels-Lsot9pyU.js";
3
- import { a as renderThread, c as makeOp, d as formatHlc, f as hlcSend, i as opsMissing, l as opId, n as maxHlc, o as sortOps, p as parseHlc, r as mergeOps, s as isValidOp, t as haveVector, u as compareHlc } from "./store-BXJERNbW.js";
4
- import { t as ChannelPeer } from "./peer-68ZwnxLs.js";
1
+ import "./e2e-CEIdJGZ7.js";
2
+ import { a as CH_DEFAULT_SIGHOST, c as formatChannelLink, d as parseChannelLink, f as secretFromTopic, i as parseCmd, l as formatChannelWebLink, n as isActionableCmd, o as deriveChannelId, r as isEphemeral, s as deriveRoom, t as formatUntrustedInbound, u as isChannelLink } from "./channels-BiGUYTuz.js";
3
+ import { a as renderThread, c as makeOp, d as formatHlc, f as hlcSend, i as opsMissing, l as opId, n as maxHlc, o as sortOps, p as parseHlc, r as mergeOps, s as isValidOp, t as haveVector, u as compareHlc } from "./store-Ck0XRn-K.js";
4
+ import "./peer-B5JKF4BP.js";
5
+ import { t as AyChannel } from "./browser-B3dOptjL.js";
5
6
 
6
- //#region ts/channels/store.browser.ts
7
- const PREFIX = "ay29ch:";
8
- var LocalStorageStore = class {
9
- key;
10
- constructor(channelId, storage = globalThis.localStorage) {
11
- this.storage = storage;
12
- this.key = PREFIX + channelId;
13
- }
14
- read() {
15
- try {
16
- const raw = this.storage.getItem(this.key);
17
- if (!raw) return [];
18
- const arr = JSON.parse(raw);
19
- return sortOps((Array.isArray(arr) ? arr : []).filter(isValidOp));
20
- } catch {
21
- return [];
22
- }
23
- }
24
- all() {
25
- return Promise.resolve(this.read());
26
- }
27
- append(ops) {
28
- const { merged, added } = mergeOps(this.read(), ops.filter(isValidOp));
29
- if (added.length) this.storage.setItem(this.key, JSON.stringify(merged));
30
- return Promise.resolve(added);
31
- }
32
- };
33
-
34
- //#endregion
35
- //#region ts/channels/browser.ts
36
- var AyChannel = class AyChannel {
37
- room;
38
- sighost;
39
- s;
40
- channelId = "";
41
- name;
42
- role;
43
- author = "";
44
- store;
45
- peer;
46
- listeners = /* @__PURE__ */ new Map();
47
- started = false;
48
- peers = 0;
49
- /**
50
- * Build a channel whose identity is DERIVED from a topic string (e.g. the page
51
- * URL) — same topic ⇒ same room, no invite needed. Public to anyone with the
52
- * topic (see secretFromTopic). This is what the page bookmarklet uses.
53
- */
54
- static async fromTopic(topic, opts) {
55
- const s = await secretFromTopic(topic);
56
- const sighost = opts?.sighost ?? "s.agent-yes.com";
57
- return new AyChannel({
58
- room: await deriveRoom(s),
59
- sighost,
60
- s,
61
- name: opts?.name,
62
- role: opts?.role
63
- });
64
- }
65
- constructor(info) {
66
- const o = typeof info === "string" ? { link: info } : info;
67
- const link = o.link ? parseChannelLink(o.link) : null;
68
- this.room = o.room ?? link?.room ?? "";
69
- this.sighost = o.sighost ?? link?.sighost ?? "s.agent-yes.com";
70
- this.s = o.s ?? link?.s ?? "";
71
- if (!this.room || !this.s) throw new Error("AyChannel: need a link or {room, s}");
72
- this.name = o.name ?? "guest";
73
- this.role = o.role ?? "human";
74
- if (o.author) this.author = o.author;
75
- }
76
- /** Derive identity, open the LocalStorage replica, and join the mesh. */
77
- async start() {
78
- if (this.started) return;
79
- this.started = true;
80
- this.channelId = await deriveChannelId(this.s);
81
- this.store = new LocalStorageStore(this.channelId);
82
- this.loadIdentity();
83
- this.peer = new ChannelPeer({
84
- room: this.room,
85
- sighost: this.sighost,
86
- s: this.s,
87
- rtc: globalThis.RTCPeerConnection,
88
- WebSocketImpl: globalThis.WebSocket,
89
- store: this.store,
90
- onOp: () => this.emit("message", void 0),
91
- onPeers: (n) => {
92
- this.peers = n;
93
- this.emit("peers", n);
94
- }
95
- });
96
- await this.peer.start();
97
- this.emit("ready", void 0);
98
- }
99
- /** Identity is stable per channel across reloads (a returning tab keeps its author id). */
100
- loadIdentity() {
101
- const key = `ay29ch-id:${this.channelId}`;
102
- let saved = null;
103
- try {
104
- saved = JSON.parse(localStorage.getItem(key) || "null");
105
- } catch {}
106
- this.author ||= saved?.author || randomHex(8);
107
- if (saved?.name && this.name === "guest") this.name = saved.name;
108
- if (saved?.role && this.role === "human") this.role = saved.role;
109
- try {
110
- localStorage.setItem(key, JSON.stringify({
111
- author: this.author,
112
- name: this.name,
113
- role: this.role
114
- }));
115
- } catch {}
116
- }
117
- /** The rendered thread (folded messages, ordered). */
118
- async messages() {
119
- return renderThread(await (this.store?.all() ?? Promise.resolve([])));
120
- }
121
- /** The current confirmed-peer count (presence). */
122
- peerCount() {
123
- return this.peers;
124
- }
125
- /** Post a message: persist locally + broadcast to the mesh. */
126
- async send(text) {
127
- if (!this.store || !this.peer) throw new Error("AyChannel: call start() first");
128
- const t = text.trim();
129
- if (!t) return;
130
- const hlc = hlcSend(maxHlc(await this.store.all()), Date.now(), this.author);
131
- const op = makeOp({
132
- author: this.author,
133
- name: this.name,
134
- role: this.role,
135
- hlc,
136
- kind: "msg",
137
- body: t
138
- });
139
- await this.peer.publish(op);
140
- this.emit("message", void 0);
141
- }
142
- on(evt, cb) {
143
- (this.listeners.get(evt) ?? this.listeners.set(evt, /* @__PURE__ */ new Set()).get(evt)).add(cb);
144
- return this;
145
- }
146
- off(evt, cb) {
147
- this.listeners.get(evt)?.delete(cb);
148
- return this;
149
- }
150
- emit(evt, arg) {
151
- for (const cb of this.listeners.get(evt) ?? []) try {
152
- cb(arg);
153
- } catch {}
154
- }
155
- close() {
156
- this.peer?.close();
157
- this.widget?.remove();
158
- }
159
- widget;
160
- labelKey() {
161
- return `ay29ch-label:${this.room}`;
162
- }
163
- defaultLabel() {
164
- return this.room ? this.room.slice(0, 14) : "Channel";
165
- }
166
- loadLabel() {
167
- try {
168
- return localStorage.getItem(this.labelKey()) || this.defaultLabel();
169
- } catch {
170
- return this.defaultLabel();
171
- }
172
- }
173
- saveLabel(v) {
174
- try {
175
- localStorage.setItem(this.labelKey(), v.trim() || this.defaultLabel());
176
- } catch {}
177
- }
178
- /** Door icon → prompt for another channel (topic or invite link) and switch to it. */
179
- async joinAnother(parent) {
180
- const g = globalThis;
181
- const input = g.prompt?.("Join a channel — topic or invite link:", "");
182
- if (!input) return;
183
- const isLink = input.startsWith("ay://") || input.includes("#ch=");
184
- let next;
185
- try {
186
- next = isLink ? new AyChannel({
187
- link: input,
188
- name: this.name,
189
- role: this.role
190
- }) : await AyChannel.fromTopic(input, {
191
- sighost: this.sighost,
192
- name: this.name,
193
- role: this.role
194
- });
195
- } catch (e) {
196
- g.alert?.("Could not join: " + (e?.message || e));
197
- return;
198
- }
199
- this.close();
200
- await next.start();
201
- next.mount(parent, { open: true });
202
- }
203
- /**
204
- * Render the floating chat window. With no target it mounts a fixed-position
205
- * bubble in the corner; pass an element to embed it there. Auto-calls start().
206
- */
207
- mount(target, opts) {
208
- if (this.widget) return this.widget;
209
- const doc = globalThis.document;
210
- const host = doc.createElement("div");
211
- host.setAttribute("data-aychannel", this.channelId || this.room);
212
- const root = host.attachShadow({ mode: "open" });
213
- root.innerHTML = WIDGET_HTML;
214
- this.widget = host;
215
- (target ?? doc.body).appendChild(host);
216
- const list = root.getElementById("list");
217
- const input = root.getElementById("input");
218
- const form = root.getElementById("form");
219
- const badge = root.getElementById("peers");
220
- const panel = root.getElementById("panel");
221
- const toggle = root.getElementById("toggle");
222
- const chname = root.getElementById("chname");
223
- const door = root.getElementById("door");
224
- const parent = target ?? doc.body;
225
- chname.value = this.loadLabel();
226
- chname.addEventListener("change", () => this.saveLabel(chname.value));
227
- door.addEventListener("click", () => void this.joinAnother(parent));
228
- const esc = (s) => s.replace(/[&<>"]/g, (c) => ({
229
- "&": "&amp;",
230
- "<": "&lt;",
231
- ">": "&gt;",
232
- "\"": "&quot;"
233
- })[c]);
234
- const render = async () => {
235
- list.innerHTML = (await this.messages()).map((m) => {
236
- const mine = m.author === this.author;
237
- const time = new Date(m.ms).toLocaleTimeString([], {
238
- hour: "2-digit",
239
- minute: "2-digit"
240
- });
241
- const body = m.deleted ? "<i>message deleted</i>" : esc(m.text);
242
- return `<div class="msg ${mine ? "mine" : ""} ${m.role}"><div class="meta">${esc(m.name)} · ${time}</div><div class="body">${body}</div></div>`;
243
- }).join("");
244
- list.scrollTop = list.scrollHeight;
245
- };
246
- form.addEventListener("submit", (e) => {
247
- e.preventDefault();
248
- const text = input.value;
249
- input.value = "";
250
- this.send(text);
251
- });
252
- toggle.addEventListener("click", () => panel.classList.toggle("open"));
253
- if (opts?.open) panel.classList.add("open");
254
- this.on("message", () => void render());
255
- this.on("peers", () => badge.textContent = String(this.peers));
256
- (async () => {
257
- if (!this.started) await this.start();
258
- await render();
259
- badge.textContent = String(this.peers);
260
- })();
261
- return host;
262
- }
263
- };
264
- const WIDGET_HTML = `
265
- <style>
266
- :host { all: initial; }
267
- * { box-sizing: border-box; font-family: system-ui, -apple-system, sans-serif; }
268
- #toggle {
269
- position: fixed; right: 20px; bottom: 20px; z-index: 2147483000;
270
- width: 52px; height: 52px; border-radius: 50%; border: none; cursor: pointer;
271
- background: #4f46e5; color: #fff; font-size: 22px; box-shadow: 0 4px 16px rgba(0,0,0,.3);
272
- }
273
- #panel {
274
- position: fixed; right: 20px; bottom: 84px; z-index: 2147483000;
275
- width: min(360px, 92vw); height: min(520px, 70vh); display: none;
276
- flex-direction: column; background: #1b1d24; color: #e6e6ea; border-radius: 14px;
277
- box-shadow: 0 12px 40px rgba(0,0,0,.45); overflow: hidden; border: 1px solid #2c2f3a;
278
- }
279
- #panel.open { display: flex; }
280
- header { padding: 10px 12px; background: #23262f; display: flex; align-items: center; gap: 6px; }
281
- header .chname { flex: 1; min-width: 0; background: transparent; border: none; color: #e6e6ea; font-weight: 600; font-size: 14px; padding: 3px 5px; border-radius: 6px; }
282
- header .chname:focus { outline: none; background: #2c2f3a; }
283
- header .door { background: transparent; border: none; cursor: pointer; font-size: 15px; padding: 2px 4px; opacity: .75; }
284
- header .door:hover { opacity: 1; }
285
- header .peers { font-size: 12px; opacity: .8; background: #4f46e5; border-radius: 10px; padding: 1px 8px; }
286
- #list { flex: 1; overflow-y: auto; padding: 12px; display: flex; flex-direction: column; gap: 8px; }
287
- .msg { max-width: 82%; }
288
- .msg .meta { font-size: 11px; opacity: .6; margin-bottom: 2px; }
289
- .msg .body { background: #2c2f3a; padding: 7px 10px; border-radius: 10px; font-size: 13px; line-height: 1.35; white-space: pre-wrap; word-break: break-word; }
290
- .msg.agent .body { border-left: 3px solid #10b981; }
291
- .msg.mine { align-self: flex-end; text-align: right; }
292
- .msg.mine .body { background: #4f46e5; color: #fff; }
293
- #form { display: flex; gap: 6px; padding: 10px; border-top: 1px solid #2c2f3a; }
294
- #input { flex: 1; background: #23262f; border: 1px solid #363a46; color: #e6e6ea; border-radius: 8px; padding: 8px 10px; font-size: 13px; }
295
- #form button { background: #4f46e5; color: #fff; border: none; border-radius: 8px; padding: 0 14px; cursor: pointer; font-size: 13px; }
296
- </style>
297
- <button id="toggle" title="Chat">💬</button>
298
- <section id="panel">
299
- <header>
300
- <input id="chname" class="chname" spellcheck="false" title="Channel name (editable)" />
301
- <button id="door" class="door" title="Join another channel">🚪</button>
302
- <span class="peers" id="peers" title="peers online">0</span>
303
- </header>
304
- <div id="list"></div>
305
- <form id="form"><input id="input" placeholder="Message…" autocomplete="off" /><button type="submit">Send</button></form>
306
- </section>
307
- `;
308
-
309
- //#endregion
310
- export { AyChannel, AyChannel as default, CH_DEFAULT_SIGHOST, compareHlc, deriveChannelId, deriveRoom, formatChannelLink, formatChannelWebLink, formatHlc, formatUntrustedInbound, haveVector, hlcSend, isActionableCmd, isChannelLink, isEphemeral, isValidOp, makeOp, maxHlc, mergeOps, opId, opsMissing, parseChannelLink, parseCmd, parseHlc, renderThread, secretFromTopic, sortOps };
311
- //# sourceMappingURL=channels.js.map
7
+ export { AyChannel, AyChannel as default, CH_DEFAULT_SIGHOST, compareHlc, deriveChannelId, deriveRoom, formatChannelLink, formatChannelWebLink, formatHlc, formatUntrustedInbound, haveVector, hlcSend, isActionableCmd, isChannelLink, isEphemeral, isValidOp, makeOp, maxHlc, mergeOps, opId, opsMissing, parseChannelLink, parseCmd, parseHlc, renderThread, secretFromTopic, sortOps };
@@ -0,0 +1,20 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
4
+ var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
5
+ var __exportAll = (all, no_symbols) => {
6
+ let target = {};
7
+ for (var name in all) {
8
+ __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ }
13
+ if (!no_symbols) {
14
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
15
+ }
16
+ return target;
17
+ };
18
+
19
+ //#endregion
20
+ export { __esmMin as n, __exportAll as r, __commonJSMin as t };
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-DJEtU1JU.js";
5
- import { n as getRustBinary } from "./rustBinary-CFSG7it2.js";
4
+ import { i as versionString, n as displayVersion, t as checkAndAutoUpdate } from "./versionChecker-XfEBINhH.js";
5
+ import { n as getRustBinary } from "./rustBinary-Bb9qJZ5w.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-m2DRpvHt.js");
288
+ const { isSubcommand, runSubcommand, cmdHelp } = await import("./subcommands-ymJWO2iv.js");
289
289
  if (isHelpFlag && process.argv.length === 3) {
290
290
  await cmdHelp(managerCommands);
291
291
  process.exit(0);
@@ -296,7 +296,7 @@ function buildRustArgs(argv, cliFromScript, supportedClis) {
296
296
  }
297
297
  }
298
298
  {
299
- const { detectCwdDeprecation, SUPPRESS_CWD_WARN_ENV } = await import("./cwdDeprecation-BGX20-Fe.js");
299
+ const { detectCwdDeprecation, SUPPRESS_CWD_WARN_ENV } = await import("./cwdDeprecation-Cd8Ykm2t.js");
300
300
  const dep = detectCwdDeprecation(process.argv);
301
301
  if (dep) {
302
302
  console.warn(dep.message);
@@ -307,16 +307,16 @@ await checkAndAutoUpdate();
307
307
  logger.info(versionString());
308
308
  const config = parseCliArgs(process.argv);
309
309
  if (config.tray) {
310
- const { startTray } = await import("./tray-CF8xRQqt.js");
310
+ const { startTray } = await import("./tray-D5qFaqlS.js");
311
311
  await startTray();
312
312
  await new Promise(() => {});
313
313
  }
314
314
  {
315
- const { ensureTray } = await import("./tray-CF8xRQqt.js");
315
+ const { ensureTray } = await import("./tray-D5qFaqlS.js");
316
316
  ensureTray();
317
317
  }
318
318
  if (!config.showVersion && !config.appendPrompt && !config.tray) {
319
- const { waitForSpawnCapacity } = await import("./spawnGate-C21TL4f2.js");
319
+ const { waitForSpawnCapacity } = await import("./spawnGate-CuWCd2im.js");
320
320
  await waitForSpawnCapacity({
321
321
  onWait: (reason, waitedMs) => {
322
322
  if (config.verbose || waitedMs === 0) console.error(`[agent-yes] spawn gate: ${reason} — waiting…`);
@@ -325,7 +325,7 @@ if (!config.showVersion && !config.appendPrompt && !config.tray) {
325
325
  });
326
326
  }
327
327
  if (!config.showVersion && !config.appendPrompt && !config.tray) {
328
- const { warnIfCwdOccupied } = await import("./cwdConflictWarn-ArYYtOGy.js");
328
+ const { warnIfCwdOccupied } = await import("./cwdConflictWarn-DWHWlBxS.js");
329
329
  await warnIfCwdOccupied(process.argv);
330
330
  }
331
331
  if (config.useRust) {
@@ -339,14 +339,14 @@ if (config.useRust) {
339
339
  }
340
340
  }
341
341
  if (rustBinary) {
342
- const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-BDXbzEWF.js");
342
+ const { SUPPORTED_CLIS } = await import("./SUPPORTED_CLIS-C0RwjYrz.js");
343
343
  const rustArgs = buildRustArgs(process.argv, config.cli, SUPPORTED_CLIS);
344
344
  if (config.verbose) {
345
345
  console.log(`[rust] Using binary: ${rustBinary}`);
346
346
  console.log(`[rust] Args: ${rustArgs.join(" ")}`);
347
347
  }
348
348
  const attach = config.attach || process.env.AGENT_YES_ATTACH === "1";
349
- const { shouldForkNested, buildSpawnTutorial, waitForFifo } = await import("./forkNested-Bai0Q7BL.js");
349
+ const { shouldForkNested, buildSpawnTutorial, waitForFifo } = await import("./forkNested-DqPisz9d.js");
350
350
  if (shouldForkNested({
351
351
  isTTY: Boolean(process.stdout.isTTY),
352
352
  ayPid: process.env.AGENT_YES_PID,
@@ -404,7 +404,7 @@ if (config.showVersion) {
404
404
  process.exit(0);
405
405
  }
406
406
  if (config.appendPrompt) {
407
- const { PidStore } = await import("./pidStore-Cp3HekUh.js");
407
+ const { PidStore } = await import("./pidStore-bCVS2Ldt.js");
408
408
  const ipcPath = await PidStore.findActiveFifo(process.cwd());
409
409
  if (!ipcPath) {
410
410
  console.error("No active agent with IPC found in current directory.");
@@ -69,4 +69,4 @@ async function loadSharedCliDefaults(fromUrl = import.meta.url) {
69
69
 
70
70
  //#endregion
71
71
  export { normalizeAgentYesConfig as n, loadSharedCliDefaults as t };
72
- //# sourceMappingURL=configShared-BXz2vi4Q.js.map
72
+ //# sourceMappingURL=configShared-9wVlbPyC.js.map
@@ -1,5 +1,5 @@
1
1
  import "./logger-CDIsZ-Pp.js";
2
- import { i as readGlobalPids } from "./globalPidIndex-Ca4sTr1b.js";
2
+ import { i as readGlobalPids } from "./globalPidIndex-D9DOSd-c.js";
3
3
  import path from "path";
4
4
 
5
5
  //#region ts/cwdConflictWarn.ts
@@ -61,4 +61,4 @@ async function warnIfCwdOccupied(rawArgv) {
61
61
 
62
62
  //#endregion
63
63
  export { warnIfCwdOccupied };
64
- //# sourceMappingURL=cwdConflictWarn-ArYYtOGy.js.map
64
+ //# sourceMappingURL=cwdConflictWarn-DWHWlBxS.js.map
@@ -75,4 +75,4 @@ function detectCwdDeprecation(argv) {
75
75
 
76
76
  //#endregion
77
77
  export { SUPPRESS_CWD_WARN_ENV, detectCwdDeprecation };
78
- //# sourceMappingURL=cwdDeprecation-BGX20-Fe.js.map
78
+ //# sourceMappingURL=cwdDeprecation-Cd8Ykm2t.js.map
@@ -172,4 +172,4 @@ function randomHex(n) {
172
172
 
173
173
  //#endregion
174
174
  export { computeTranscriptHash as a, open as c, randomHex as d, seal as f, MAX_CHUNK as i, packEnvelope as l, validateS as m, FLAG_CONFIRM as n, deriveAuthToken as o, unpackEnvelope as p, MARKER as r, deriveDirKeys as s, CONFIRM_TIMEOUT_MS as t, parseSecret as u };
175
- //# sourceMappingURL=e2e-CYlKpfxa.js.map
175
+ //# sourceMappingURL=e2e-CEIdJGZ7.js.map
@@ -546,4 +546,4 @@ async function cmdExpose(args) {
546
546
 
547
547
  //#endregion
548
548
  export { cmdExpose, ensureExposure, listExposures, stopExposure };
549
- //# sourceMappingURL=expose-ByT4ef7C.js.map
549
+ //# sourceMappingURL=expose-DROTwbyU.js.map
@@ -1,4 +1,4 @@
1
- import { t as agentYesHome } from "./agentYesHome-CtHb5b71.js";
1
+ import { t as agentYesHome } from "./agentYesHome-CtmsY6I-.js";
2
2
  import { existsSync } from "fs";
3
3
  import path from "path";
4
4
 
@@ -56,4 +56,4 @@ async function waitForFifo(pid, timeoutMs = 2e3, aborted) {
56
56
 
57
57
  //#endregion
58
58
  export { buildSpawnTutorial, shouldForkNested, waitForFifo };
59
- //# sourceMappingURL=forkNested-Bai0Q7BL.js.map
59
+ //# sourceMappingURL=forkNested-DqPisz9d.js.map
@@ -188,4 +188,4 @@ async function pruneOldLogs(maxAgeMs = retentionMs()) {
188
188
 
189
189
  //#endregion
190
190
  export { updateGlobalPidStatus as a, readGlobalPids as i, maybeCompactGlobalPids as n, pruneOldLogs as r, appendGlobalPid as t };
191
- //# sourceMappingURL=globalPidIndex-Ca4sTr1b.js.map
191
+ //# sourceMappingURL=globalPidIndex-D9DOSd-c.js.map
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
- import { a as hasTodoStore, c as AgentContext, i as answerAsk, n as agentYes, o as listAsks, r as config, s as listAsksForProject, t as CLIS_CONFIG } from "./ts-D1FDmhc-.js";
2
1
  import "./logger-CDIsZ-Pp.js";
3
- import "./versionChecker-DJEtU1JU.js";
4
- import { _ as isKnownKind, a as renderTree, b as statesOf, c as monitorHint, d as openStore, f as DONE_STATE, g as initialState, h as canTransition, i as renderDigest, l as CycleError, m as ORPHANED_STATE, o as unblockedTasks, p as LIFECYCLES, r as openBlockers, s as describeBlock, t as reconcileTodos, u as TodoStore, v as nextStates, x as removeControlCharacters, y as requiredGate } from "./todoAutomation-x6guaQXc.js";
5
- import "./JsonlStore-CWOA3aDH.js";
6
- import "./globalPidIndex-Ca4sTr1b.js";
7
- import "./pidStore-Hjba3K6Q.js";
8
- import "./messageLog-zVGWLX7w.js";
2
+ import "./versionChecker-XfEBINhH.js";
3
+ import { a as hasTodoStore, c as AgentContext, i as answerAsk, n as agentYes, o as listAsks, r as config, s as listAsksForProject, t as CLIS_CONFIG } from "./ts-Dd1FK7sR.js";
4
+ import { _ as isKnownKind, a as renderTree, b as statesOf, c as monitorHint, d as openStore, f as DONE_STATE, g as initialState, h as canTransition, i as renderDigest, l as CycleError, m as ORPHANED_STATE, o as unblockedTasks, p as LIFECYCLES, r as openBlockers, s as describeBlock, t as reconcileTodos, u as TodoStore, v as nextStates, x as removeControlCharacters, y as requiredGate } from "./todoAutomation-Buo457VO.js";
5
+ import "./JsonlStore-CPGIR0Wy.js";
6
+ import "./globalPidIndex-D9DOSd-c.js";
7
+ import "./pidStore-6EZd5DUv.js";
8
+ import "./messageLog-C-YIzhRj.js";
9
9
 
10
10
  export { AgentContext, CLIS_CONFIG, CycleError, DONE_STATE, LIFECYCLES, ORPHANED_STATE, TodoStore, answerAsk, canTransition, config, agentYes as default, describeBlock, hasTodoStore, initialState, isKnownKind, listAsks, listAsksForProject, monitorHint, nextStates, openBlockers, openStore, reconcileTodos, removeControlCharacters, renderDigest, renderTree, requiredGate, statesOf, unblockedTasks };
@@ -91,4 +91,4 @@ async function readMailbox(cwd, box) {
91
91
 
92
92
  //#endregion
93
93
  export { recordOutbox as a, recordMessage as i, readMailbox as n, recordInbox as r, partyMatches as t };
94
- //# sourceMappingURL=messageLog-zVGWLX7w.js.map
94
+ //# sourceMappingURL=messageLog-C-YIzhRj.js.map
@@ -1,4 +1,4 @@
1
- import { t as agentYesHome } from "./agentYesHome-CtHb5b71.js";
1
+ import { t as agentYesHome } from "./agentYesHome-CtmsY6I-.js";
2
2
  import { chmod, mkdir, readFile, writeFile } from "fs/promises";
3
3
  import path from "path";
4
4
 
@@ -53,4 +53,4 @@ async function ensureNodeRuntime(which = Bun.which) {
53
53
 
54
54
  //#endregion
55
55
  export { liveEnv as n, ensureNodeRuntime as t };
56
- //# sourceMappingURL=nodeRuntime-fVRbz6w6.js.map
56
+ //# sourceMappingURL=nodeRuntime-Bf88NPqj.js.map
@@ -1,11 +1,11 @@
1
1
  import { n as logger } from "./logger-CDIsZ-Pp.js";
2
- import "./globalPidIndex-Ca4sTr1b.js";
3
- import "./messageLog-zVGWLX7w.js";
4
- import "./e2e-CYlKpfxa.js";
5
- import "./configShared-BXz2vi4Q.js";
6
- import { $ as daemonLockDir, A as renderLogTailLines, G as appendEvent, K as gcInboxes, Q as shouldStealLock, S as listRecords, X as liveWatchers, Y as listInboxParents, Z as readInbox, _ as isPidAlive, c as deriveLiveState, et as daemonLockOwnerPath, q as hostId, tt as notifyDir } from "./subcommands-_Ci82sb1.js";
7
- import "./webrtcLink-CEYNs0pt.js";
8
- import "./remotes-BDdfhL6N.js";
2
+ import "./globalPidIndex-D9DOSd-c.js";
3
+ import "./messageLog-C-YIzhRj.js";
4
+ import "./e2e-CEIdJGZ7.js";
5
+ import "./configShared-9wVlbPyC.js";
6
+ import { $ as daemonLockDir, A as renderLogTailLines, G as appendEvent, K as gcInboxes, Q as shouldStealLock, S as listRecords, X as liveWatchers, Y as listInboxParents, Z as readInbox, _ as isPidAlive, c as deriveLiveState, et as daemonLockOwnerPath, q as hostId, tt as notifyDir } from "./subcommands-DFr-5FOL.js";
7
+ import "./webrtcLink-VQhWmKOw.js";
8
+ import "./remotes-Bem6WIyU.js";
9
9
  import { mkdir, readFile, rename, rm, stat, writeFile } from "fs/promises";
10
10
  import { randomUUID } from "node:crypto";
11
11
  import { execFile } from "node:child_process";
@@ -589,4 +589,4 @@ async function ensureDaemon() {
589
589
 
590
590
  //#endregion
591
591
  export { daemonStatus, ensureDaemon, requestDaemonStop, runDaemon };
592
- //# sourceMappingURL=notifyDaemon-Cxb0-5a0.js.map
592
+ //# sourceMappingURL=notifyDaemon-D_8TRVHt.js.map