agent-comms 9.1.3 → 10.0.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 (54) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +12 -0
  4. package/dist/bridges/user/web/bridge-port-range.d.ts +9 -3
  5. package/dist/bridges/user/web/bridge-port-range.d.ts.map +1 -1
  6. package/dist/bridges/user/web/bridge-port-range.js +17 -4
  7. package/dist/bridges/user/web/bridge-port-range.js.map +1 -1
  8. package/dist/bridges/user/web/dist/bundle.js +1 -1
  9. package/dist/bridges/user/web/dist/mesh-worker.js +4 -4
  10. package/dist/bridges/user/web/dist/sw.js +1 -1
  11. package/dist/bridges/user/web/pairing-handshake.d.ts +17 -0
  12. package/dist/bridges/user/web/pairing-handshake.d.ts.map +1 -0
  13. package/dist/bridges/user/web/pairing-handshake.js +121 -0
  14. package/dist/bridges/user/web/pairing-handshake.js.map +1 -0
  15. package/dist/bridges/user/web/pairing-protocol.d.ts +64 -0
  16. package/dist/bridges/user/web/pairing-protocol.d.ts.map +1 -0
  17. package/dist/bridges/user/web/pairing-protocol.js +65 -0
  18. package/dist/bridges/user/web/pairing-protocol.js.map +1 -0
  19. package/dist/bridges/user/web/server.d.ts +6 -0
  20. package/dist/bridges/user/web/server.d.ts.map +1 -1
  21. package/dist/bridges/user/web/server.js +91 -60
  22. package/dist/bridges/user/web/server.js.map +1 -1
  23. package/dist/bridges/user/web/web-access.d.ts +9 -1
  24. package/dist/bridges/user/web/web-access.d.ts.map +1 -1
  25. package/dist/bridges/user/web/web-access.js +32 -7
  26. package/dist/bridges/user/web/web-access.js.map +1 -1
  27. package/dist/bridges/user/web/web-listen.d.ts +11 -0
  28. package/dist/bridges/user/web/web-listen.d.ts.map +1 -0
  29. package/dist/bridges/user/web/web-listen.js +53 -0
  30. package/dist/bridges/user/web/web-listen.js.map +1 -0
  31. package/dist/bridges/user/web/web-pairing-exchange.d.ts +68 -0
  32. package/dist/bridges/user/web/web-pairing-exchange.d.ts.map +1 -0
  33. package/dist/bridges/user/web/web-pairing-exchange.js +201 -0
  34. package/dist/bridges/user/web/web-pairing-exchange.js.map +1 -0
  35. package/dist/bridges/user/web/web-pairing.d.ts +58 -0
  36. package/dist/bridges/user/web/web-pairing.d.ts.map +1 -0
  37. package/dist/bridges/user/web/web-pairing.js +215 -0
  38. package/dist/bridges/user/web/web-pairing.js.map +1 -0
  39. package/dist/cli-main.d.ts.map +1 -1
  40. package/dist/cli-main.js +12 -1
  41. package/dist/cli-main.js.map +1 -1
  42. package/package.json +1 -1
  43. package/src/bridges/user/web/bridge-port-range.ts +24 -4
  44. package/src/bridges/user/web/dist/bundle.js +1 -1
  45. package/src/bridges/user/web/dist/mesh-worker.js +4 -4
  46. package/src/bridges/user/web/dist/sw.js +1 -1
  47. package/src/bridges/user/web/pairing-handshake.ts +170 -0
  48. package/src/bridges/user/web/pairing-protocol.ts +122 -0
  49. package/src/bridges/user/web/server.ts +137 -69
  50. package/src/bridges/user/web/web-access.ts +40 -6
  51. package/src/bridges/user/web/web-listen.ts +68 -0
  52. package/src/bridges/user/web/web-pairing-exchange.ts +292 -0
  53. package/src/bridges/user/web/web-pairing.ts +273 -0
  54. package/src/cli-main.ts +14 -1
@@ -0,0 +1,201 @@
1
+ /**
2
+ * The bridge's half of the proof exchange that admits the hosted dashboard (web-pairing.ts describes the design): the keyed proof, the single-use tickets a completed exchange issues, and the handler of one `/ws/hello` socket.
3
+ *
4
+ * A listener that does not hold the secret is told nothing and given nothing by this module beyond a nonce: the bridge's proof is keyed with the secret, and the dashboard's proof is checked before any ticket is issued.
5
+ */
6
+ import * as crypto from "node:crypto";
7
+ import { NONCE_BYTES, isHelloAuth, isHelloRequest, parseHelloMessage, proofInput, } from "./pairing-protocol.js";
8
+ /** How long a ticket admits a mesh socket after it is issued. The dashboard opens the socket at once, so a few seconds is far above the real delay and keeps an unused ticket from being worth holding. */
9
+ export const TICKET_LIFETIME_MS = 10_000;
10
+ /** The most tickets that wait to be used at once: a bridge has one dashboard, so a few is generous, and a client that asks for more is refused rather than served. */
11
+ export const MAX_PENDING_TICKETS = 16;
12
+ /** How long one exchange may take from its first byte to the ticket, which is a few small frames over loopback. */
13
+ export const HELLO_TIMEOUT_MS = 5000;
14
+ /** The most exchanges in progress at once. */
15
+ export const MAX_HELLO_SOCKETS = 16;
16
+ /** The largest message of the exchange: a JSON object of at most two 64-character hex values. */
17
+ export const MAX_HELLO_MESSAGE_BYTES = 1024;
18
+ /** WebSocket close code for a message that breaks the endpoint's policy, used for every refusal so none says which check failed. */
19
+ const CLOSE_POLICY_VIOLATION = 1008;
20
+ const CLOSE_NORMAL = 1000;
21
+ /** The proof a party holding `secret` gives over this exchange, as hex. */
22
+ export function computeProof(secret, transcript) {
23
+ return crypto
24
+ .createHmac("sha256", Buffer.from(secret, "hex"))
25
+ .update(proofInput(transcript))
26
+ .digest("hex");
27
+ }
28
+ /** Whether `presented` is the proof for this exchange under `secret`, compared in constant time. */
29
+ export function proofMatches(presented, secret, transcript) {
30
+ const expected = Buffer.from(computeProof(secret, transcript), "hex");
31
+ const given = Buffer.from(presented, "hex");
32
+ return (given.length === expected.length && crypto.timingSafeEqual(given, expected));
33
+ }
34
+ /** A ticket book over a secret store: a ticket issued under a secret that has since been replaced is never accepted. */
35
+ export function createTicketBook(secret, now = Date.now) {
36
+ const pending = new Map();
37
+ const prune = () => {
38
+ const current = now();
39
+ for (const [ticket, entry] of pending) {
40
+ if (entry.expires <= current)
41
+ pending.delete(ticket);
42
+ }
43
+ };
44
+ return {
45
+ issue: () => {
46
+ prune();
47
+ if (pending.size >= MAX_PENDING_TICKETS)
48
+ return undefined;
49
+ secret.current();
50
+ const ticket = crypto.randomBytes(NONCE_BYTES).toString("hex");
51
+ pending.set(ticket, {
52
+ expires: now() + TICKET_LIFETIME_MS,
53
+ generation: secret.generation(),
54
+ });
55
+ return ticket;
56
+ },
57
+ consume: (presented) => {
58
+ if (presented === undefined)
59
+ return false;
60
+ prune();
61
+ const entry = pending.get(presented);
62
+ if (entry === undefined)
63
+ return false;
64
+ pending.delete(presented);
65
+ secret.current();
66
+ return entry.generation === secret.generation();
67
+ },
68
+ };
69
+ }
70
+ /** The text of one WebSocket message as `ws` hands it over. */
71
+ function textOf(data) {
72
+ if (data instanceof ArrayBuffer)
73
+ return Buffer.from(data).toString();
74
+ if (Buffer.isBuffer(data))
75
+ return data.toString();
76
+ return Buffer.concat([...data]).toString();
77
+ }
78
+ function newNonce() {
79
+ return crypto.randomBytes(NONCE_BYTES).toString("hex");
80
+ }
81
+ /**
82
+ * Runs the bridge's half of the exchange on one `/ws/hello` socket: answers the dashboard's nonce with the bridge's own and a proof, checks the dashboard's proof, and on success sends one ticket and closes. Any other message, a message of the wrong form, a wrong proof, a secret that was replaced meanwhile or silence past the timeout closes the socket with the same status and no explanation.
83
+ */
84
+ export function serveHello(socket, options) {
85
+ let stage = "hello";
86
+ let exchange;
87
+ const timer = {};
88
+ const refuse = () => {
89
+ stage = "done";
90
+ clearTimeout(timer.handle);
91
+ socket.close(CLOSE_POLICY_VIOLATION);
92
+ };
93
+ timer.handle = setTimeout(refuse, options.timeoutMs ?? HELLO_TIMEOUT_MS);
94
+ timer.handle.unref();
95
+ socket.on("close", () => {
96
+ stage = "done";
97
+ clearTimeout(timer.handle);
98
+ });
99
+ // A socket error is that connection's alone; the close that follows ends the exchange.
100
+ socket.on("error", () => {
101
+ socket.terminate();
102
+ });
103
+ socket.on("message", (data, isBinary) => {
104
+ if (isBinary || stage === "done") {
105
+ refuse();
106
+ return;
107
+ }
108
+ const message = parseHelloMessage(textOf(data));
109
+ if (stage === "hello") {
110
+ if (!isHelloRequest(message)) {
111
+ refuse();
112
+ return;
113
+ }
114
+ const secret = options.secret.current();
115
+ const bridgeNonce = newNonce();
116
+ const port = options.port();
117
+ exchange = {
118
+ secret,
119
+ clientNonce: message.nonce,
120
+ bridgeNonce,
121
+ generation: options.secret.generation(),
122
+ };
123
+ const reply = {
124
+ type: "hello-ok",
125
+ nonce: bridgeNonce,
126
+ proof: computeProof(secret, {
127
+ role: "bridge",
128
+ clientNonce: message.nonce,
129
+ bridgeNonce,
130
+ port,
131
+ }),
132
+ };
133
+ stage = "auth";
134
+ socket.send(JSON.stringify(reply));
135
+ return;
136
+ }
137
+ if (!isHelloAuth(message) || exchange === undefined) {
138
+ refuse();
139
+ return;
140
+ }
141
+ const { secret, clientNonce, bridgeNonce, generation } = exchange;
142
+ const proven = proofMatches(message.proof, secret, {
143
+ role: "client",
144
+ clientNonce,
145
+ bridgeNonce,
146
+ port: options.port(),
147
+ });
148
+ options.secret.current();
149
+ if (!proven || options.secret.generation() !== generation) {
150
+ refuse();
151
+ return;
152
+ }
153
+ const ticket = options.tickets.issue();
154
+ if (ticket === undefined) {
155
+ refuse();
156
+ return;
157
+ }
158
+ stage = "done";
159
+ clearTimeout(timer.handle);
160
+ const reply = { type: "ticket", ticket };
161
+ socket.send(JSON.stringify(reply), () => {
162
+ socket.close(CLOSE_NORMAL);
163
+ });
164
+ });
165
+ }
166
+ /** How often the server looks for sockets admitted under a secret that has been replaced, as a backstop to the watch on the secret file: a file system need not report every change, and the watch can fail to start. A rotation is otherwise acted on at once. */
167
+ export const ROTATION_SWEEP_MS = 1000;
168
+ /** WebSocket close code a socket gets when the secret it was admitted under is gone. */
169
+ const CLOSE_REVOKED = 1008;
170
+ export function createHostedSocketGuard(secret) {
171
+ const admitted = new Map();
172
+ const revoked = (generation) => {
173
+ secret.current();
174
+ return secret.generation() !== generation;
175
+ };
176
+ const check = (socket) => {
177
+ const generation = admitted.get(socket);
178
+ if (generation === undefined)
179
+ return true;
180
+ if (!revoked(generation))
181
+ return true;
182
+ admitted.delete(socket);
183
+ socket.close(CLOSE_REVOKED);
184
+ return false;
185
+ };
186
+ return {
187
+ track: (socket) => {
188
+ secret.current();
189
+ admitted.set(socket, secret.generation());
190
+ socket.on("close", () => {
191
+ admitted.delete(socket);
192
+ });
193
+ },
194
+ check,
195
+ sweep: () => {
196
+ for (const socket of [...admitted.keys()])
197
+ check(socket);
198
+ },
199
+ };
200
+ }
201
+ //# sourceMappingURL=web-pairing-exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-pairing-exchange.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/web-pairing-exchange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * The per-install pairing secret that admits the hosted dashboard (web-access.ts).
3
+ *
4
+ * The hosted dashboard's origin is shared by every page published under the same account, so an origin check alone cannot say which page is calling, and a listener on a port of the range cannot be told from the bridge by the handshake alone. Both directions are therefore authenticated by a secret this module keeps: a random value the bridge generated, held in an owner-only file beside the bridge's other state, shown to a person only on the bridge's own loopback pairing page and handed from there to the dashboard in a URL fragment, which no server receives and no log records.
5
+ *
6
+ * Design, in one place:
7
+ * - Generation: 32 bytes from the platform's cryptographic random source, written as 64 lower-case hex characters, with owner-only permissions in an owner-only directory. A file that is missing is created exclusively, so two bridges starting together settle on one secret. A file that does not hold exactly that form, or whose mode or owner is not the owner-only one it was written with, is replaced by a fresh secret, which un-pairs every browser: the safe direction.
8
+ * - The secret never crosses a socket. The dashboard opens `/ws/hello` on a port and sends a fresh nonce; the bridge answers with its own nonce and a proof, an HMAC-SHA-256 keyed with the secret over the role, both nonces and the port; the dashboard checks that proof (so a listener that does not hold the secret is not taken for the bridge, and receives nothing but a nonce) and only then sends its own proof, over the nonces in the same order under the other role. The bridge checks it and answers with a single-use ticket that lives a few seconds, which the dashboard offers as a subprotocol, `agent-comms-ticket.<ticket>`, on the mesh socket. The server answers every such upgrade with the fixed subprotocol `agent-comms`, so the ticket is never echoed.
9
+ * - Comparison: constant time (`timingSafeEqual`) over fixed-length values.
10
+ * - Revocation: `rotatePairingSecret` writes a new secret. The running bridge reads the file again whenever its inode, modification time or size changes, so a rotation refuses every later ticket and proof without a restart, and the server closes every socket it admitted under the old secret the moment the file is reported replaced (watchPairingSecret), with a periodic check as the backstop (server.ts).
11
+ * - Pairing: once per browser profile, by a step that proves the person is at this machine: the pairing page is served only to a client on this machine that carries no hosted-dashboard Origin, so a page on the hosted origin cannot fetch or frame it, and it hands the secret over only when the person presses its button, by opening the hosted dashboard at an exact, fixed address with the secret in the fragment. The dashboard stores it in its own storage, removes the fragment from the address, and uses it only as the key of the proof.
12
+ * - Limit: the dashboard keeps the secret in the storage of its own origin, which every page of that origin can read. The secret separates a page that was never paired in this browser from one that was; it cannot separate pages that share the dashboard's storage. A separation between pages of one origin needs the dashboard on an origin of its own.
13
+ */
14
+ /** The route the bridge serves its pairing page at. */
15
+ export declare const PAIRING_PAGE_PATH = "/pair";
16
+ /** The file the secret lives in, beside the bridge's other persistent state. */
17
+ export declare function pairingSecretFile(dir?: string): string;
18
+ /**
19
+ * Replaces the secret with a fresh one, so every browser that was paired has to pair again and every socket admitted under the old one is closed. Returns nothing: the secret is shown only by the pairing page.
20
+ */
21
+ export declare function rotatePairingSecret(dir?: string): void;
22
+ /** The secret a running bridge proves possession of. */
23
+ export interface PairingSecretStore {
24
+ /** The current secret. Read again when the file changed, so a rotation by another process is seen at once. */
25
+ current: () => string;
26
+ /** A number that changes whenever `current` has returned a different secret from the one before. Read after `current`, so a holder of an earlier secret can tell it has been replaced. */
27
+ generation: () => number;
28
+ }
29
+ /**
30
+ * Opens the pairing secret at `options.dir` (default: the bridge's data directory), creating it when it does not exist or is unusable. `onReplaced` is told when an existing file had to be replaced, so the operator hears that browsers must pair again.
31
+ */
32
+ export declare function openPairingSecret(options?: Readonly<{
33
+ dir?: string | undefined;
34
+ onReplaced?: (file: string) => void;
35
+ }>): PairingSecretStore;
36
+ /**
37
+ * Calls `onChange` as soon as the operating system reports a change to the directory holding the secret file, so that a rotation made by another process is acted on at once and not at the next poll. Returns the function that stops watching. A watch that cannot be started, or that fails later, is reported to `onError` and the caller's periodic check still ends what a rotation revokes: the platform does not promise every change is reported (a network file system may report none).
38
+ */
39
+ export declare function watchPairingSecret(options: Readonly<{
40
+ dir?: string | undefined;
41
+ onChange: () => void;
42
+ onError: (error: Error) => void;
43
+ }>): () => void;
44
+ /** The ticket a mesh upgrade presents in an offered ticket subprotocol, or undefined when it presents none. */
45
+ export declare function presentedTicket(headers: Readonly<Record<string, string | readonly string[] | undefined>>): string | undefined;
46
+ /**
47
+ * Which subprotocol a WebSocket server selects: the fixed mesh subprotocol when the client offers it, and none otherwise (a client that offers no protocols, as a page served by the bridge itself does not, gets none). The offered secret is never selected.
48
+ */
49
+ export declare function selectMeshSubprotocol(protocols: ReadonlySet<string>): string | false;
50
+ /** The address the pairing page sends the person to: the hosted dashboard, with the secret in the fragment. */
51
+ export declare function dashboardPairingUrl(secret: string): string;
52
+ /**
53
+ * The pairing page. It carries the secret only inside a link that opens the dashboard at its fixed address, and a person has to press it. It tells no one anything on its own and may not be framed.
54
+ */
55
+ export declare function pairingPageHtml(secret: string): string;
56
+ /** Headers for the pairing page: not framed, not cached, not sent as a referrer, and not run as script. */
57
+ export declare const PAIRING_PAGE_HEADERS: Readonly<Record<string, string>>;
58
+ //# sourceMappingURL=web-pairing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-pairing.d.ts","sourceRoot":"","sources":["../../../../src/bridges/user/web/web-pairing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAkBH,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAWzC,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AA+BD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAEtD;AAaD,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,8GAA8G;IAC9G,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,0LAA0L;IAC1L,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,QAAQ,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,CAAC,GACD,kBAAkB,CA2DpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC,CAAC,GACD,MAAM,IAAI,CAmBZ;AAeD,+GAA+G;AAC/G,wBAAgB,eAAe,CAC7B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GACxE,MAAM,GAAG,SAAS,CASpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,MAAM,GAAG,KAAK,CAEhB;AAED,+GAA+G;AAC/G,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBtD;AAED,2GAA2G;AAC3G,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOjE,CAAC"}
@@ -0,0 +1,215 @@
1
+ /**
2
+ * The per-install pairing secret that admits the hosted dashboard (web-access.ts).
3
+ *
4
+ * The hosted dashboard's origin is shared by every page published under the same account, so an origin check alone cannot say which page is calling, and a listener on a port of the range cannot be told from the bridge by the handshake alone. Both directions are therefore authenticated by a secret this module keeps: a random value the bridge generated, held in an owner-only file beside the bridge's other state, shown to a person only on the bridge's own loopback pairing page and handed from there to the dashboard in a URL fragment, which no server receives and no log records.
5
+ *
6
+ * Design, in one place:
7
+ * - Generation: 32 bytes from the platform's cryptographic random source, written as 64 lower-case hex characters, with owner-only permissions in an owner-only directory. A file that is missing is created exclusively, so two bridges starting together settle on one secret. A file that does not hold exactly that form, or whose mode or owner is not the owner-only one it was written with, is replaced by a fresh secret, which un-pairs every browser: the safe direction.
8
+ * - The secret never crosses a socket. The dashboard opens `/ws/hello` on a port and sends a fresh nonce; the bridge answers with its own nonce and a proof, an HMAC-SHA-256 keyed with the secret over the role, both nonces and the port; the dashboard checks that proof (so a listener that does not hold the secret is not taken for the bridge, and receives nothing but a nonce) and only then sends its own proof, over the nonces in the same order under the other role. The bridge checks it and answers with a single-use ticket that lives a few seconds, which the dashboard offers as a subprotocol, `agent-comms-ticket.<ticket>`, on the mesh socket. The server answers every such upgrade with the fixed subprotocol `agent-comms`, so the ticket is never echoed.
9
+ * - Comparison: constant time (`timingSafeEqual`) over fixed-length values.
10
+ * - Revocation: `rotatePairingSecret` writes a new secret. The running bridge reads the file again whenever its inode, modification time or size changes, so a rotation refuses every later ticket and proof without a restart, and the server closes every socket it admitted under the old secret the moment the file is reported replaced (watchPairingSecret), with a periodic check as the backstop (server.ts).
11
+ * - Pairing: once per browser profile, by a step that proves the person is at this machine: the pairing page is served only to a client on this machine that carries no hosted-dashboard Origin, so a page on the hosted origin cannot fetch or frame it, and it hands the secret over only when the person presses its button, by opening the hosted dashboard at an exact, fixed address with the secret in the fragment. The dashboard stores it in its own storage, removes the fragment from the address, and uses it only as the key of the proof.
12
+ * - Limit: the dashboard keeps the secret in the storage of its own origin, which every page of that origin can read. The secret separates a page that was never paired in this browser from one that was; it cannot separate pages that share the dashboard's storage. A separation between pages of one origin needs the dashboard on an origin of its own.
13
+ */
14
+ import * as crypto from "node:crypto";
15
+ import * as fs from "node:fs";
16
+ import * as path from "node:path";
17
+ import { resolveDataDir } from "../../../core/data-directory.js";
18
+ import { createFileExclusive, writeFileAtomic, } from "../../../core/atomic-file.js";
19
+ import { HOSTED_DASHBOARD_URL } from "./hosted-dashboard.js";
20
+ import { MESH_SUBPROTOCOL, PAIRING_FRAGMENT_PARAM, PAIRING_SECRET_PATTERN, TICKET_SUBPROTOCOL_PREFIX, } from "./pairing-protocol.js";
21
+ /** The route the bridge serves its pairing page at. */
22
+ export const PAIRING_PAGE_PATH = "/pair";
23
+ /** Random bytes in a secret: 256 bits. */
24
+ const PAIRING_SECRET_BYTES = 32;
25
+ /** Owner-only file and directory modes, as for every other file holding a credential. */
26
+ const SECRET_FILE_MODE = 0o600;
27
+ const SECRET_DIR_MODE = 0o700;
28
+ /** The mode bits that give a group or anyone else access. */
29
+ const GROUP_AND_OTHER_BITS = 0o077;
30
+ /** The file the secret lives in, beside the bridge's other persistent state. */
31
+ export function pairingSecretFile(dir) {
32
+ return path.join(resolveDataDir({ dir }), "web-pairing-secret");
33
+ }
34
+ function newSecret() {
35
+ return crypto.randomBytes(PAIRING_SECRET_BYTES).toString("hex");
36
+ }
37
+ /** Whether a file or directory is owned by this user and closed to everyone else. Always true where the platform has no such ownership (Windows). */
38
+ function isOwnerOnly(stat) {
39
+ const uid = process.getuid?.();
40
+ if (uid === undefined)
41
+ return true;
42
+ return stat.uid === uid && (stat.mode & GROUP_AND_OTHER_BITS) === 0;
43
+ }
44
+ /** Creates the directory owner-only, and closes an existing one of this user's that was left open to others. A directory that belongs to someone else is not this bridge's to keep a secret in. */
45
+ function ensureSecretDir(dir) {
46
+ fs.mkdirSync(dir, { recursive: true, mode: SECRET_DIR_MODE });
47
+ const stat = fs.statSync(dir);
48
+ if (isOwnerOnly(stat))
49
+ return;
50
+ if (stat.uid !== process.getuid?.()) {
51
+ throw new Error(`${dir} does not belong to this user, so the pairing secret is not kept in it`);
52
+ }
53
+ fs.chmodSync(dir, SECRET_DIR_MODE);
54
+ }
55
+ function writeSecret(file, secret) {
56
+ ensureSecretDir(path.dirname(file));
57
+ writeFileAtomic(file, `${secret}\n`, SECRET_FILE_MODE);
58
+ }
59
+ /**
60
+ * Replaces the secret with a fresh one, so every browser that was paired has to pair again and every socket admitted under the old one is closed. Returns nothing: the secret is shown only by the pairing page.
61
+ */
62
+ export function rotatePairingSecret(dir) {
63
+ writeSecret(pairingSecretFile(dir), newSecret());
64
+ }
65
+ /** Reads the secret a file holds, or undefined when the file is missing, does not hold the expected form, or is open to anyone but its owner (a secret that anyone else could have read is not kept). */
66
+ function readSecret(file) {
67
+ try {
68
+ if (!isOwnerOnly(fs.statSync(file)))
69
+ return undefined;
70
+ const text = fs.readFileSync(file, "utf-8").trim();
71
+ return PAIRING_SECRET_PATTERN.test(text) ? text : undefined;
72
+ }
73
+ catch {
74
+ return undefined;
75
+ }
76
+ }
77
+ /**
78
+ * Opens the pairing secret at `options.dir` (default: the bridge's data directory), creating it when it does not exist or is unusable. `onReplaced` is told when an existing file had to be replaced, so the operator hears that browsers must pair again.
79
+ */
80
+ export function openPairingSecret(options) {
81
+ const file = pairingSecretFile(options?.dir);
82
+ let cached;
83
+ let generation = 0;
84
+ const stampOf = () => {
85
+ try {
86
+ const stat = fs.statSync(file);
87
+ // Every write replaces the file, so its inode changes with its content: two rotations within one clock tick and of one size are still told apart.
88
+ return `${String(stat.ino)}:${String(stat.mtimeMs)}:${String(stat.size)}`;
89
+ }
90
+ catch {
91
+ return undefined;
92
+ }
93
+ };
94
+ const load = () => {
95
+ // Whether a file was there is read before the file is, so a file another bridge creates in between is not mistaken for an unusable one and replaced.
96
+ const existed = fs.existsSync(file);
97
+ const existing = readSecret(file);
98
+ if (existing !== undefined) {
99
+ return { secret: existing, stamp: stampOf() ?? "" };
100
+ }
101
+ const secret = newSecret();
102
+ if (existed) {
103
+ writeSecret(file, secret);
104
+ options?.onReplaced?.(file);
105
+ return { secret, stamp: stampOf() ?? "" };
106
+ }
107
+ ensureSecretDir(path.dirname(file));
108
+ // Created exclusively, so a bridge that starts at the same moment settles on this secret or the other's and not two.
109
+ if (createFileExclusive(file, `${secret}\n`, SECRET_FILE_MODE)) {
110
+ return { secret, stamp: stampOf() ?? "" };
111
+ }
112
+ const winner = readSecret(file);
113
+ if (winner === undefined) {
114
+ writeSecret(file, secret);
115
+ return { secret, stamp: stampOf() ?? "" };
116
+ }
117
+ return { secret: winner, stamp: stampOf() ?? "" };
118
+ };
119
+ return {
120
+ current: () => {
121
+ const stamp = stampOf();
122
+ if (cached === undefined ||
123
+ stamp === undefined ||
124
+ stamp !== cached.stamp) {
125
+ const loaded = load();
126
+ if (cached !== undefined && loaded.secret !== cached.secret) {
127
+ generation += 1;
128
+ }
129
+ cached = loaded;
130
+ }
131
+ return cached.secret;
132
+ },
133
+ generation: () => generation,
134
+ };
135
+ }
136
+ /**
137
+ * Calls `onChange` as soon as the operating system reports a change to the directory holding the secret file, so that a rotation made by another process is acted on at once and not at the next poll. Returns the function that stops watching. A watch that cannot be started, or that fails later, is reported to `onError` and the caller's periodic check still ends what a rotation revokes: the platform does not promise every change is reported (a network file system may report none).
138
+ */
139
+ export function watchPairingSecret(options) {
140
+ const file = pairingSecretFile(options.dir);
141
+ const name = path.basename(file);
142
+ try {
143
+ const watcher = fs.watch(path.dirname(file), { persistent: false }, (_event, changed) => {
144
+ if (changed === null || changed === name)
145
+ options.onChange();
146
+ });
147
+ watcher.on("error", options.onError);
148
+ return () => {
149
+ watcher.close();
150
+ };
151
+ }
152
+ catch (error) {
153
+ options.onError(error instanceof Error ? error : new Error(String(error)));
154
+ return () => undefined;
155
+ }
156
+ }
157
+ /** The offered subprotocols of an upgrade, as the `Sec-WebSocket-Protocol` header lists them. */
158
+ function offeredSubprotocols(header) {
159
+ const value = typeof header === "string" ? header : header?.join(",");
160
+ return value === undefined
161
+ ? []
162
+ : value
163
+ .split(",")
164
+ .map((entry) => entry.trim())
165
+ .filter((entry) => entry !== "");
166
+ }
167
+ /** The ticket a mesh upgrade presents in an offered ticket subprotocol, or undefined when it presents none. */
168
+ export function presentedTicket(headers) {
169
+ for (const protocol of offeredSubprotocols(headers["sec-websocket-protocol"])) {
170
+ if (protocol.startsWith(TICKET_SUBPROTOCOL_PREFIX)) {
171
+ return protocol.slice(TICKET_SUBPROTOCOL_PREFIX.length);
172
+ }
173
+ }
174
+ return undefined;
175
+ }
176
+ /**
177
+ * Which subprotocol a WebSocket server selects: the fixed mesh subprotocol when the client offers it, and none otherwise (a client that offers no protocols, as a page served by the bridge itself does not, gets none). The offered secret is never selected.
178
+ */
179
+ export function selectMeshSubprotocol(protocols) {
180
+ return protocols.has(MESH_SUBPROTOCOL) ? MESH_SUBPROTOCOL : false;
181
+ }
182
+ /** The address the pairing page sends the person to: the hosted dashboard, with the secret in the fragment. */
183
+ export function dashboardPairingUrl(secret) {
184
+ return `${HOSTED_DASHBOARD_URL}#${PAIRING_FRAGMENT_PARAM}=${secret}`;
185
+ }
186
+ /**
187
+ * The pairing page. It carries the secret only inside a link that opens the dashboard at its fixed address, and a person has to press it. It tells no one anything on its own and may not be framed.
188
+ */
189
+ export function pairingPageHtml(secret) {
190
+ return `<!doctype html>
191
+ <html lang="en">
192
+ <head>
193
+ <meta charset="utf-8">
194
+ <meta name="viewport" content="width=device-width, initial-scale=1">
195
+ <meta name="referrer" content="no-referrer">
196
+ <title>Pair the hosted dashboard</title>
197
+ </head>
198
+ <body>
199
+ <h1>Pair the hosted dashboard</h1>
200
+ <p>This browser is on the machine running the bridge. Pairing lets the hosted dashboard at ${HOSTED_DASHBOARD_URL} talk to this bridge from this browser profile.</p>
201
+ <p>Only pair a browser you use yourself. The link below hands the dashboard a secret; run <code>agent-comms pairing rotate</code> to revoke every pairing.</p>
202
+ <p><a rel="noopener noreferrer" href="${dashboardPairingUrl(secret)}">Pair this browser</a></p>
203
+ </body>
204
+ </html>
205
+ `;
206
+ }
207
+ /** Headers for the pairing page: not framed, not cached, not sent as a referrer, and not run as script. */
208
+ export const PAIRING_PAGE_HEADERS = {
209
+ "Content-Type": "text/html; charset=utf-8",
210
+ "Cache-Control": "no-store",
211
+ "Referrer-Policy": "no-referrer",
212
+ "X-Frame-Options": "DENY",
213
+ "Content-Security-Policy": "default-src 'none'; style-src 'none'; frame-ancestors 'none'; base-uri 'none'; form-action 'none'",
214
+ };
215
+ //# sourceMappingURL=web-pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-pairing.js","sourceRoot":"","sources":["../../../../src/bridges/user/web/web-pairing.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAmKxD,2IAA2I;AAC3I,MAAM,WAAW,UAAU;IACzB,yFAAyF;IACzF,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,sMAAsM;IACtM,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,wFAAwF;IACxF,MAAM,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;CACjD;AAED,iHAAiH;AACjH,wBAAgB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAqExD"}
1
+ {"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAoKxD,2IAA2I;AAC3I,MAAM,WAAW,UAAU;IACzB,yFAAyF;IACzF,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,sMAAsM;IACtM,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,wFAAwF;IACxF,MAAM,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;CACjD;AAED,iHAAiH;AACjH,wBAAgB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAiFxD"}
package/dist/cli-main.js CHANGED
@@ -34,6 +34,7 @@ import { runCli } from "./bridges/user/cli.js";
34
34
  import { readHiddenLine, runAccountCommand } from "./account-cli.js";
35
35
  import { openMachineAccountStore } from "./account-join-cli.js";
36
36
  import { UnusableIdentityRecordError } from "./core/issuer-identity-file.js";
37
+ import { rotatePairingSecret } from "./bridges/user/web/web-pairing.js";
37
38
  // ---------------------------------------------------------------------------
38
39
  // Zod schemas for config files
39
40
  // ---------------------------------------------------------------------------
@@ -212,8 +213,18 @@ export function main(options) {
212
213
  });
213
214
  break;
214
215
  }
216
+ case "pairing": {
217
+ if (resolvedArgs[1] !== "rotate" || resolvedArgs.length > 2) {
218
+ console.error("Usage: agent-comms pairing rotate");
219
+ process.exit(1);
220
+ }
221
+ rotatePairingSecret();
222
+ console.log("The pairing secret has been replaced. A running bridge ends the hosted dashboard's open connections within a second, and every browser paired with the hosted dashboard must pair again, from each running bridge's /pair page.");
223
+ process.exit(0);
224
+ break;
225
+ }
215
226
  default:
216
- console.log("Usage: agent-comms [setup|status|remove|bridge <id>|chat|send|dm|rooms|agents|read|account <export|import|invite|join>]");
227
+ console.log("Usage: agent-comms [setup|status|remove|bridge <id>|chat|send|dm|rooms|agents|read|account <export|import|invite|join>|pairing rotate]");
217
228
  console.log("With no subcommand: setup when stdin is a terminal, the MCP server when it is not.");
218
229
  process.exit(1);
219
230
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agent-comms",
3
3
  "description": "Cross-harness communication mesh for LLM agents — rooms, DMs, presence, and real-time push delivery over TCP",
4
- "version": "9.1.3",
4
+ "version": "10.0.0",
5
5
  "bin": {
6
6
  "agent-comms": "dist/cli.js"
7
7
  },