@trusty-squire/mcp 1.1.17 → 1.1.18-rc.2

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 (133) hide show
  1. package/assets/chrome-scope-launcher +11 -0
  2. package/dist/bin.js +11 -6
  3. package/dist/bin.js.map +1 -1
  4. package/dist/bot/broker/daemon.d.ts +3 -6
  5. package/dist/bot/broker/daemon.d.ts.map +1 -1
  6. package/dist/bot/broker/daemon.js +25 -46
  7. package/dist/bot/broker/daemon.js.map +1 -1
  8. package/dist/bot/broker/discovery.d.ts +0 -62
  9. package/dist/bot/broker/discovery.d.ts.map +1 -1
  10. package/dist/bot/broker/discovery.js +73 -342
  11. package/dist/bot/broker/discovery.js.map +1 -1
  12. package/dist/bot/broker/mcp-principal.d.ts +18 -0
  13. package/dist/bot/broker/mcp-principal.d.ts.map +1 -0
  14. package/dist/bot/broker/mcp-principal.js +148 -0
  15. package/dist/bot/broker/mcp-principal.js.map +1 -0
  16. package/dist/bot/broker/mcp-socket-path.d.ts +2 -0
  17. package/dist/bot/broker/mcp-socket-path.d.ts.map +1 -0
  18. package/dist/bot/broker/mcp-socket-path.js +14 -0
  19. package/dist/bot/broker/mcp-socket-path.js.map +1 -0
  20. package/dist/bot/broker/mcp-socket.d.ts +8 -0
  21. package/dist/bot/broker/mcp-socket.d.ts.map +1 -0
  22. package/dist/bot/broker/mcp-socket.js +150 -0
  23. package/dist/bot/broker/mcp-socket.js.map +1 -0
  24. package/dist/bot/broker/operator.d.ts.map +1 -1
  25. package/dist/bot/broker/operator.js +8 -0
  26. package/dist/bot/broker/operator.js.map +1 -1
  27. package/dist/bot/broker/runtime.d.ts +2 -3
  28. package/dist/bot/broker/runtime.d.ts.map +1 -1
  29. package/dist/bot/broker/runtime.js +13 -30
  30. package/dist/bot/broker/runtime.js.map +1 -1
  31. package/dist/bot/broker/status.js +1 -1
  32. package/dist/bot/broker/status.js.map +1 -1
  33. package/dist/bot/broker/transport.d.ts +1 -9
  34. package/dist/bot/broker/transport.d.ts.map +1 -1
  35. package/dist/bot/broker/transport.js +8 -56
  36. package/dist/bot/broker/transport.js.map +1 -1
  37. package/dist/bot/browser-launch-marker.d.ts +4 -0
  38. package/dist/bot/browser-launch-marker.d.ts.map +1 -0
  39. package/dist/bot/browser-launch-marker.js +7 -0
  40. package/dist/bot/browser-launch-marker.js.map +1 -0
  41. package/dist/bot/browser-process-owner.d.ts.map +1 -1
  42. package/dist/bot/browser-process-owner.js +98 -38
  43. package/dist/bot/browser-process-owner.js.map +1 -1
  44. package/dist/bot/browser-process-runtime.d.ts +0 -1
  45. package/dist/bot/browser-process-runtime.d.ts.map +1 -1
  46. package/dist/bot/browser-process-runtime.js +22 -35
  47. package/dist/bot/browser-process-runtime.js.map +1 -1
  48. package/dist/bot/browser-scope.d.ts +15 -0
  49. package/dist/bot/browser-scope.d.ts.map +1 -0
  50. package/dist/bot/browser-scope.js +101 -0
  51. package/dist/bot/browser-scope.js.map +1 -0
  52. package/dist/bot/browser.d.ts +3 -0
  53. package/dist/bot/browser.d.ts.map +1 -1
  54. package/dist/bot/browser.js +11 -3
  55. package/dist/bot/browser.js.map +1 -1
  56. package/dist/bot/capture/verification.d.ts +3 -0
  57. package/dist/bot/capture/verification.d.ts.map +1 -1
  58. package/dist/bot/capture/verification.js +42 -11
  59. package/dist/bot/capture/verification.js.map +1 -1
  60. package/dist/bot/drive-snapshot.d.ts.map +1 -1
  61. package/dist/bot/drive-snapshot.js +3 -0
  62. package/dist/bot/drive-snapshot.js.map +1 -1
  63. package/dist/bot/google-login.js +1 -1
  64. package/dist/bot/google-login.js.map +1 -1
  65. package/dist/bot/operate-drive.d.ts +3 -1
  66. package/dist/bot/operate-drive.d.ts.map +1 -1
  67. package/dist/bot/operate-drive.js +39 -11
  68. package/dist/bot/operate-drive.js.map +1 -1
  69. package/dist/bot/owner-process-reaper.d.ts +14 -92
  70. package/dist/bot/owner-process-reaper.d.ts.map +1 -1
  71. package/dist/bot/owner-process-reaper.js +32 -1067
  72. package/dist/bot/owner-process-reaper.js.map +1 -1
  73. package/dist/bot/profile-path.d.ts +11 -0
  74. package/dist/bot/profile-path.d.ts.map +1 -0
  75. package/dist/bot/profile-path.js +33 -0
  76. package/dist/bot/profile-path.js.map +1 -0
  77. package/dist/bot/profile.d.ts +14 -31
  78. package/dist/bot/profile.d.ts.map +1 -1
  79. package/dist/bot/profile.js +61 -298
  80. package/dist/bot/profile.js.map +1 -1
  81. package/dist/bot/provision-session.d.ts.map +1 -1
  82. package/dist/bot/provision-session.js +11 -10
  83. package/dist/bot/provision-session.js.map +1 -1
  84. package/dist/bot/session/lifecycle.d.ts.map +1 -1
  85. package/dist/bot/session/lifecycle.js +32 -47
  86. package/dist/bot/session/lifecycle.js.map +1 -1
  87. package/dist/bot/session/model.d.ts +1 -2
  88. package/dist/bot/session/model.d.ts.map +1 -1
  89. package/dist/bot/session/model.js.map +1 -1
  90. package/dist/browser-busy.d.ts.map +1 -1
  91. package/dist/browser-busy.js +11 -4
  92. package/dist/browser-busy.js.map +1 -1
  93. package/dist/install/connect-report.d.ts +4 -1
  94. package/dist/install/connect-report.d.ts.map +1 -1
  95. package/dist/install/connect-report.js +6 -19
  96. package/dist/install/connect-report.js.map +1 -1
  97. package/dist/relay.d.ts +3 -0
  98. package/dist/relay.d.ts.map +1 -0
  99. package/dist/relay.js +139 -0
  100. package/dist/relay.js.map +1 -0
  101. package/dist/server-instance-registry.d.ts.map +1 -1
  102. package/dist/server-instance-registry.js +0 -7
  103. package/dist/server-instance-registry.js.map +1 -1
  104. package/dist/server.d.ts +1 -1
  105. package/dist/server.d.ts.map +1 -1
  106. package/dist/server.js +8 -10
  107. package/dist/server.js.map +1 -1
  108. package/dist/session-guard.d.ts +1 -0
  109. package/dist/session-guard.d.ts.map +1 -1
  110. package/dist/session-guard.js +8 -0
  111. package/dist/session-guard.js.map +1 -1
  112. package/dist/tools/credential-mutations.d.ts +20 -20
  113. package/dist/tools/index.d.ts +1 -1
  114. package/dist/tools/index.d.ts.map +1 -1
  115. package/dist/tools/index.js +2 -2
  116. package/dist/tools/index.js.map +1 -1
  117. package/dist/tools/inject-card-schema.d.ts +3 -0
  118. package/dist/tools/inject-card-schema.d.ts.map +1 -0
  119. package/dist/tools/inject-card-schema.js +75 -0
  120. package/dist/tools/inject-card-schema.js.map +1 -0
  121. package/dist/tools/provision-drive-schema.d.ts +20 -0
  122. package/dist/tools/provision-drive-schema.d.ts.map +1 -0
  123. package/dist/tools/provision-drive-schema.js +1114 -0
  124. package/dist/tools/provision-drive-schema.js.map +1 -0
  125. package/package.json +1 -1
  126. package/dist/bot/operator-browser-watchdog.d.ts +0 -127
  127. package/dist/bot/operator-browser-watchdog.d.ts.map +0 -1
  128. package/dist/bot/operator-browser-watchdog.js +0 -438
  129. package/dist/bot/operator-browser-watchdog.js.map +0 -1
  130. package/dist/bot/owner-process-reaper-worker.d.ts +0 -2
  131. package/dist/bot/owner-process-reaper-worker.d.ts.map +0 -1
  132. package/dist/bot/owner-process-reaper-worker.js +0 -17
  133. package/dist/bot/owner-process-reaper-worker.js.map +0 -1
@@ -1,37 +1,22 @@
1
1
  import { createHash } from "node:crypto";
2
- import { closeSync, mkdirSync, lstatSync, openSync, readFileSync } from "node:fs";
3
- import { spawn } from "node:child_process";
4
- import { mkdir } from "node:fs/promises";
5
- import { hostname, tmpdir } from "node:os";
2
+ import { spawn, execFileSync } from "node:child_process";
3
+ import { closeSync, lstatSync, openSync, readFileSync } from "node:fs";
4
+ import { hostname } from "node:os";
6
5
  import { dirname, join } from "node:path";
7
6
  import { fileURLToPath } from "node:url";
8
- import { acquireProfileOperationGuard, currentProfileDir, ProfileBusyError, profileOperationLockOwner, profilePathIdentity, processBirthIdentityState, } from "../profile.js";
9
- import { BrokerClient, brokerEndpointHasLiveListener, brokerSpeaksLegacyWire, } from "./transport.js";
7
+ import { mkdirSync } from "node:fs";
8
+ import { currentProfileDir, ProfileBusyError, profilePathIdentity } from "../profile.js";
9
+ import { BrokerClient, brokerSpeaksLegacyWire } from "./transport.js";
10
10
  import { readBrokerAccountBinding } from "./account-binding.js";
11
11
  import { BrokerRefusal } from "./refusal.js";
12
12
  const BROKER_CONNECT_TIMEOUT_MS = 10_000;
13
13
  const BROKER_CONNECT_POLL_MS = 100;
14
- const RECLAIM_TIMINGS = {
15
- termGraceMs: 10_000,
16
- killGraceMs: 5_000,
17
- pollMs: 100,
18
- };
19
- /** Canonical profile discovery is independent of cwd and each client's TMPDIR. */
20
14
  export function defaultBrokerSocket(profileDir = currentProfileDir()) {
21
- const key = createHash("sha256")
22
- .update(profilePathIdentity(profileDir))
23
- .digest("hex")
24
- .slice(0, 32);
15
+ const key = createHash("sha256").update(profilePathIdentity(profileDir)).digest("hex").slice(0, 32);
25
16
  return join("/tmp", `trusty-squire-broker-${process.getuid?.() ?? "local"}-${key}`, "broker.sock");
26
17
  }
27
- /** Where a profile's broker socket lives: the configured override, else the
28
- * derived default. Pure — no directory is created and nothing is asserted, so
29
- * a read-only probe can ask for a path that may not exist. */
30
18
  export function brokerSocketPath(profileDir = currentProfileDir()) {
31
- const configured = process.env.TRUSTY_SQUIRE_BROKER_SOCKET?.trim();
32
- if (configured)
33
- return configured;
34
- return defaultBrokerSocket(profileDir);
19
+ return process.env.TRUSTY_SQUIRE_BROKER_SOCKET?.trim() || defaultBrokerSocket(profileDir);
35
20
  }
36
21
  export function resolveBrokerSocket(profileDir = currentProfileDir()) {
37
22
  const path = brokerSocketPath(profileDir);
@@ -44,266 +29,62 @@ export function resolveBrokerSocket(profileDir = currentProfileDir()) {
44
29
  throw new Error("Broker socket directory must be owned by this user with mode 0700");
45
30
  return path;
46
31
  }
47
- export function brokerElectionRoot(profileDir = currentProfileDir()) {
48
- return join(dirname(profilePathIdentity(profileDir)), ".trusty-squire-broker-leases");
49
- }
50
- export function brokerLaunchRoot(profileDir = currentProfileDir()) {
51
- return join(brokerElectionRoot(profileDir), "launch");
52
- }
53
- async function prepareBrokerElectionRoot(profileDir) {
54
- const root = brokerElectionRoot(profileDir);
55
- await mkdir(root, { recursive: true, mode: 0o700 });
56
- return root;
57
- }
58
- async function brokerElectionIsHeld(profileDir) {
59
- const root = await prepareBrokerElectionRoot(profileDir);
60
- try {
61
- const lease = acquireProfileOperationGuard(profileDir, root);
62
- lease.release();
63
- return false;
64
- }
65
- catch (error) {
66
- if (error instanceof ProfileBusyError)
67
- return true;
68
- throw error;
69
- }
70
- }
71
- /** True when the error means "no live broker socket could be reached at
72
- * all" — no listener (ENOENT), connection refused, or the broker was lost
73
- * mid-handshake. Exported for the ceremony's connect-or-launch decision: a
74
- * genuinely absent broker means "self-launch may serve", while any other
75
- * failure (an identified resident's refusal, a handshake timeout) must
76
- * propagate verbatim instead of being swallowed into a self-launch that
77
- * fail-fasts with the generic profile-busy message. */
78
32
  export function isUnavailable(error) {
79
33
  const code = error.code;
80
34
  return code === "ENOENT" || code === "ECONNREFUSED" || code === "broker_lost";
81
35
  }
82
- /** The refusals that mean another session HAS the browser, as opposed to the
83
- * broker failing at something. `broker_unavailable` is an identified resident
84
- * declining to yield; `profile_busy` is the profile layer itself saying "not
85
- * now". Every other code (a lost connection, a launch timeout, a server-side
86
- * execution failure) is this run breaking, not contention, and a caller told
87
- * to wait for a holder would wait on nothing. */
88
36
  export function isBrowserContentionRefusal(error) {
89
- return (error instanceof BrokerRefusal &&
90
- (error.code === "broker_unavailable" || error.code === "profile_busy"));
91
- }
92
- function isUnauthorizedRefusal(error) {
93
- return error instanceof BrokerRefusal && error.code === "unauthorized";
37
+ return error instanceof BrokerRefusal &&
38
+ (error.code === "broker_unavailable" || error.code === "profile_busy");
94
39
  }
95
40
  const sleep = async (ms) => await new Promise((resolve) => setTimeout(resolve, ms));
96
- /** Best-effort argv corroboration that a lease owner really is a broker
97
- * daemon: the daemon is spawned with a `broker` argv marker in this repo
98
- * (connectOrLaunchBroker's spawn, kept in sync with this check). Returns
99
- * true when the argv cannot be read, because the wire probe and election
100
- * lease already carry the positive identification. */
101
- function processArgvLooksLikeBroker(pid) {
102
- if (process.platform !== "linux")
103
- return true;
104
- try {
105
- const argv = readFileSync(`/proc/${pid}/cmdline`, "utf8")
106
- .split("\0")
107
- .filter((arg) => arg.length > 0);
108
- return argv.includes("broker");
109
- }
110
- catch {
111
- return true;
112
- }
113
- }
114
- function isProcessAlive(pid) {
115
- try {
116
- process.kill(pid, 0);
117
- return true;
118
- }
119
- catch {
120
- return false;
121
- }
122
- }
123
- /** Connected SOCK_STREAM peers on a pathname Unix socket (Linux
124
- * `/proc/net/unix` state 03). Null when the count cannot be observed.
125
- * Reclaim uses this to refuse killing a stale-credential broker that still
126
- * has attached clients. */
127
- function brokerSocketConnectedPeerCount(path) {
128
- if (process.platform !== "linux")
41
+ /** Upgrade only: identify the old daemon from its live Unix listener, rather
42
+ * than reading any of its four recorded ownership files. */
43
+ function legacyBrokerPid(path) {
44
+ if (process.platform === "win32")
129
45
  return null;
130
46
  try {
131
- let n = 0;
132
- for (const line of readFileSync("/proc/net/unix", "utf8").split("\n")) {
133
- if (!line.includes(path))
134
- continue;
135
- const fields = line.trim().split(/\s+/);
136
- // Num: RefCount Protocol Flags Type St Inode Path…
137
- if (fields.length < 8)
47
+ const pids = execFileSync("lsof", ["-t", "-U", "--", path], { encoding: "utf8" })
48
+ .trim().split(/\s+/).map(Number).filter((pid) => Number.isSafeInteger(pid) && pid > 0);
49
+ for (const pid of pids) {
50
+ if (pid === process.pid)
138
51
  continue;
139
- if (fields.slice(7).join(" ") !== path)
140
- continue;
141
- if (fields[5] === "03")
142
- n += 1;
143
- }
144
- return n;
145
- }
146
- catch {
147
- return null;
148
- }
149
- }
150
- /** The profile election lease plus a live broker-argv process on this host
151
- * identify the resident: the daemon holds the election lease for its whole
152
- * life, so the lease owner is the daemon the wire probe proved resident.
153
- * Returns null when any link of that identification is missing. Shared by
154
- * prior-contract and same-contract stale-credential reclaim. */
155
- function residentBrokerPid(profileDir) {
156
- const owner = profileOperationLockOwner(profileDir, brokerElectionRoot(profileDir));
157
- if (owner === null || owner.host !== hostname())
158
- return null;
159
- const { pid, start_time } = owner;
160
- if (!Number.isSafeInteger(pid) || pid <= 0 || pid === process.pid)
161
- return null;
162
- if (!isProcessAlive(pid))
163
- return null;
164
- // A provably-reborn pid means the lease is a dead owner's leftover; the
165
- // ordinary scavenge path owns that case and no signal may be sent.
166
- if (start_time !== null && processBirthIdentityState({ pid, start_time }) === "stale") {
167
- return null;
168
- }
169
- if (!processArgvLooksLikeBroker(pid))
170
- return null;
171
- return pid;
172
- }
173
- /** Wait for the election lease to become acquirable and the socket to have
174
- * no live listener. Acquiring (and releasing) reuses the lease machinery's
175
- * own stale-owner scavenging, which is what clears a SIGKILLed holder's
176
- * leftover lock. */
177
- async function waitForReclaimClear(profileDir, path, deadline, pollMs) {
178
- while (Date.now() < deadline) {
179
- let electionFree = false;
180
- try {
181
- const lease = acquireProfileOperationGuard(profileDir, brokerElectionRoot(profileDir));
182
- lease.release();
183
- electionFree = true;
184
- }
185
- catch (error) {
186
- if (!(error instanceof ProfileBusyError))
187
- throw error;
188
- }
189
- if (electionFree && !(await brokerEndpointHasLiveListener(path)))
190
- return true;
191
- await sleep(pollMs);
192
- }
193
- return false;
194
- }
195
- /** Reclaim the profile from a positively identified resident broker:
196
- * SIGTERM, then a bounded wait for its lease and socket to clear, escalating
197
- * to SIGKILL only if the graceful path does not clear it. Throws a refusal
198
- * that names the pid when reclaim cannot complete. */
199
- async function terminateResidentBroker(profileDir, path, pid, timings, unavailableMessage) {
200
- for (const [signal, graceMs] of [
201
- ["SIGTERM", timings.termGraceMs],
202
- ["SIGKILL", timings.killGraceMs],
203
- ]) {
204
- try {
205
- process.kill(pid, signal);
206
- }
207
- catch {
208
- // Already gone: fall through and let the clear-wait decide.
209
- }
210
- if (await waitForReclaimClear(profileDir, path, Date.now() + graceMs, timings.pollMs)) {
211
- return;
52
+ if (process.platform === "linux") {
53
+ const argv = readFileSync(`/proc/${pid}/cmdline`, "utf8").split("\0");
54
+ if (!argv.includes("broker"))
55
+ continue;
56
+ }
57
+ return pid;
212
58
  }
213
59
  }
214
- throw new BrokerRefusal("broker_unavailable", unavailableMessage(pid));
215
- }
216
- function staleCredentialLiveClientMessage(pid) {
217
- return (`A resident broker (pid ${pid}) still owns this profile with a stale credential ` +
218
- `and an attached client; finish those sessions, or confirm no other client is ` +
219
- `attached and terminate pid ${pid} (TERM), then retry. No operator command was dispatched`);
60
+ catch { /* no old listener */ }
61
+ return null;
220
62
  }
221
- function staleCredentialUnreclaimedMessage(pid) {
222
- return (`A resident broker (pid ${pid}) still owns this profile's browser with a stale ` +
223
- `credential and could not be reclaimed; confirm no other client is attached, ` +
224
- `terminate pid ${pid} (TERM), then retry. No operator command was dispatched`);
225
- }
226
- /** Reclaims a resident prior-contract broker for this profile, if one is
227
- * positively identified: a live daemon that refuses Contract B's `connect`
228
- * but still authenticates the pre-Contract-B `hello` handshake, while
229
- * holding this profile's election lease. A same-contract daemon never
230
- * authenticates `hello` (or is reached only through the ENOENT/unavailable
231
- * path), so it is never a prior-contract reclaim target — stale-credential
232
- * reclaim owns that case separately. Returns whether a reclaim happened;
233
- * throws only when a reclaim was proven possible but could not complete. */
234
- export async function reclaimPriorContractBrokerIfPresent(path, token, connectError, timings = RECLAIM_TIMINGS) {
235
- // The legacy `hello` handshake is authenticated with the pre-Contract-B
236
- // token, so an unenrolled machine cannot positively identify one. There is
237
- // nothing to reclaim there anyway: a prior-contract broker could not have
238
- // started without an enrollment.
239
- if (token === undefined)
240
- return false;
241
- if (!isUnauthorizedRefusal(connectError))
63
+ async function reclaimLegacyBroker(path, options, error) {
64
+ if (!(error instanceof BrokerRefusal) || error.code !== "unauthorized")
242
65
  return false;
243
- if (!(await brokerSpeaksLegacyWire(path, token)))
66
+ const prior = options.agentSessionToken !== undefined &&
67
+ await brokerSpeaksLegacyWire(path, options.agentSessionToken);
68
+ const bound = options.accountId !== undefined &&
69
+ await readBrokerAccountBinding(profilePathIdentity(currentProfileDir())) === options.accountId;
70
+ if (!prior && !bound)
244
71
  return false;
245
- const profileDir = profilePathIdentity(currentProfileDir());
246
- const pid = residentBrokerPid(profileDir);
72
+ const pid = legacyBrokerPid(path);
247
73
  if (pid === null)
248
74
  return false;
249
- await terminateResidentBroker(profileDir, path, pid, timings, (owner) => `A resident broker from an older release (pid ${owner}) still owns this profile's browser and could not be reclaimed; no operator command was dispatched`);
250
- return true;
251
- }
252
- /** Reclaims a resident broker from an older Contract B release, if one is
253
- * positively identified: it refuses the token-less `connect` that this release
254
- * sends (`unauthorized: Authenticate before issuing commands`), it holds this
255
- * profile's election lease with a live, broker-argv-corroborated owner pid on
256
- * this host, and the profile's account binding names the caller's own enrolled
257
- * account. Every release before the token-less handshake gated `connect` on a
258
- * credential, so that refusal is the upgrade signal; the binding is what
259
- * proves the resident is OURS before any signal is sent, and a resident with
260
- * attached clients is never killed.
261
- *
262
- * A broker bound to another account (or carrying no readable binding) is left
263
- * alone and the original refusal propagates. SIGKILL is skipped if a client
264
- * appears after SIGTERM. Returns whether a reclaim happened; throws when the
265
- * resident is identified but must not be (or could not be) reclaimed. */
266
- export async function reclaimStaleCredentialBrokerIfPresent(path, accountId, connectError, timings = RECLAIM_TIMINGS) {
267
- if (!isUnauthorizedRefusal(connectError))
268
- return false;
269
- if (accountId === undefined)
270
- return false;
271
- const profileDir = profilePathIdentity(currentProfileDir());
272
- if ((await readBrokerAccountBinding(profileDir)) !== accountId)
273
- return false;
274
- const pid = residentBrokerPid(profileDir);
275
- if (pid === null)
276
- return false;
277
- // The connect that just rejected us may still appear as a peer for a
278
- // tick after socket.destroy(). Wait it out so an empty stale broker is
279
- // reclaimed instead of being mistaken for an attached client.
280
- const peerDeadline = Date.now() + 250;
281
- let peers = brokerSocketConnectedPeerCount(path) ?? 0;
282
- while (peers > 0 && Date.now() < peerDeadline) {
283
- await sleep(25);
284
- peers = brokerSocketConnectedPeerCount(path) ?? 0;
75
+ try {
76
+ process.kill(pid, "SIGTERM");
285
77
  }
286
- if (peers > 0) {
287
- throw new BrokerRefusal("broker_unavailable", staleCredentialLiveClientMessage(pid));
78
+ catch {
79
+ return true;
288
80
  }
289
- for (const [signal, graceMs] of [
290
- ["SIGTERM", timings.termGraceMs],
291
- ["SIGKILL", timings.killGraceMs],
292
- ]) {
293
- if (signal === "SIGKILL" && (brokerSocketConnectedPeerCount(path) ?? 0) > 0) {
294
- throw new BrokerRefusal("broker_unavailable", staleCredentialLiveClientMessage(pid));
295
- }
296
- try {
297
- process.kill(pid, signal);
298
- }
299
- catch {
300
- // Already gone: fall through and let the clear-wait decide.
301
- }
302
- if (await waitForReclaimClear(profileDir, path, Date.now() + graceMs, timings.pollMs)) {
81
+ const deadline = Date.now() + 10_000;
82
+ while (Date.now() < deadline) {
83
+ if (legacyBrokerPid(path) !== pid)
303
84
  return true;
304
- }
85
+ await sleep(100);
305
86
  }
306
- throw new BrokerRefusal("broker_unavailable", staleCredentialUnreclaimedMessage(pid));
87
+ throw new BrokerRefusal("broker_unavailable", `Older broker pid ${pid} did not release its listener`);
307
88
  }
308
89
  async function waitForBroker(path, failure) {
309
90
  const deadline = Date.now() + BROKER_CONNECT_TIMEOUT_MS;
@@ -318,105 +99,55 @@ async function waitForBroker(path, failure) {
318
99
  if (!isUnavailable(error))
319
100
  throw error;
320
101
  }
321
- await new Promise((resolve) => setTimeout(resolve, BROKER_CONNECT_POLL_MS));
102
+ await sleep(BROKER_CONNECT_POLL_MS);
322
103
  }
323
104
  throw new BrokerRefusal("broker_unavailable", "Broker did not become available within 10 seconds; no operator command was dispatched");
324
105
  }
325
106
  export function brokerEnvironment(env, path) {
326
107
  return { ...env, TRUSTY_SQUIRE_BROKER_SOCKET: path };
327
108
  }
328
- /**
329
- * A daemon claims the profile-operation lease during startup, BEFORE it
330
- * listens, so a lease another process holds kills it there — most often the
331
- * `connect` ceremony, which holds that lease for a whole interactive login.
332
- * Reporting that as a merely unavailable broker sends the caller to restart a
333
- * broker that cannot start, and the advised retry loops until connect ends.
334
- */
335
- function daemonExitRefusal(profileDir, reason) {
336
- const owner = profileOperationLockOwner(profileDir, tmpdir());
337
- if (owner !== null && owner.host === hostname() && owner.pid !== process.pid)
338
- return new BrokerRefusal("profile_busy", `The Chrome profile lease is held by pid ${owner.pid}; no operator command was dispatched`);
339
- return new BrokerRefusal("broker_unavailable", `Broker exited before attachment (${reason}); no operator command was dispatched`);
340
- }
341
109
  export async function connectOrLaunchBroker(path, options = {}) {
342
110
  try {
343
111
  return await BrokerClient.connect(path);
344
112
  }
345
113
  catch (error) {
346
- if (isUnavailable(error)) {
347
- // A socket with no live listener is a dead predecessor's orphan; the new
348
- // broker's own bind reclaims it (probe -> unlink -> bind).
349
- }
350
- else if (await reclaimPriorContractBrokerIfPresent(path, options.agentSessionToken, error)) {
351
- // A reclaimed prior-contract broker freed the profile: fall through to
352
- // the ordinary launch of a current-contract daemon.
353
- }
354
- else if (await reclaimStaleCredentialBrokerIfPresent(path, options.accountId, error)) {
355
- // A reclaimed same-contract broker whose strict open schema predates a
356
- // field this release sends: fall through to a fresh daemon.
357
- }
358
- else {
114
+ if (!isUnavailable(error) && !(await reclaimLegacyBroker(path, options, error)))
359
115
  throw error;
360
- }
361
116
  }
362
- const profileDir = profilePathIdentity(currentProfileDir());
363
- if (await brokerElectionIsHeld(profileDir))
364
- return await waitForBroker(path);
365
- const launchRoot = brokerLaunchRoot(profileDir);
366
- let launchLease;
117
+ // Launches may race. Each daemon claims the same kernel SQLite lock before it
118
+ // touches Chrome or the socket; losers exit while clients attach to winner.
119
+ const logPath = join(dirname(path), "broker.log");
120
+ let logFd;
121
+ try {
122
+ logFd = openSync(logPath, "a", 0o600);
123
+ }
124
+ catch {
125
+ logFd = undefined;
126
+ }
127
+ const child = spawn(process.execPath, [fileURLToPath(new URL("../../bin.js", import.meta.url)), "broker"], {
128
+ detached: true,
129
+ stdio: logFd === undefined ? "ignore" : ["ignore", logFd, logFd],
130
+ env: brokerEnvironment(process.env, path),
131
+ });
132
+ if (logFd !== undefined)
133
+ closeSync(logFd);
134
+ let failure;
135
+ child.once("error", (error) => { failure = error; });
136
+ child.once("exit", (code, signal) => {
137
+ if (code !== 0 && signal !== null)
138
+ return; // Another elected daemon may be serving.
139
+ if (code !== 0 && code !== null)
140
+ return;
141
+ failure = new BrokerRefusal("broker_unavailable", `Broker exited before attachment (${signal ?? code})`);
142
+ });
143
+ child.unref();
367
144
  try {
368
- await mkdir(launchRoot, { recursive: true, mode: 0o700 });
369
- launchLease = acquireProfileOperationGuard(profileDir, launchRoot);
145
+ return await waitForBroker(path, () => failure);
370
146
  }
371
147
  catch (error) {
372
148
  if (error instanceof ProfileBusyError)
373
149
  return await waitForBroker(path);
374
150
  throw error;
375
151
  }
376
- try {
377
- try {
378
- return await BrokerClient.connect(path);
379
- }
380
- catch (error) {
381
- if (!isUnavailable(error))
382
- throw error;
383
- }
384
- if (await brokerElectionIsHeld(profileDir))
385
- return await waitForBroker(path);
386
- // The broker's stderr carries its diagnostic channel (audit unseal lines,
387
- // captcha/handoff diag). "ignore" made every standard deployment mute —
388
- // measured while debugging the Bluesky signup gate (2026-09): the broker
389
- // printed nothing anywhere. The daemon outlives this parent (detached,
390
- // unref'd), so the log must be a real file fd, not a pipe: a pipe dies
391
- // with the parent and the first write afterwards EPIPEs the broker. Best
392
- // effort — a log that cannot be opened must not block the launch.
393
- let brokerLogFd;
394
- try {
395
- brokerLogFd = openSync(join(launchRoot, "broker.log"), "a", 0o600);
396
- }
397
- catch {
398
- brokerLogFd = undefined;
399
- }
400
- const child = spawn(process.execPath, [fileURLToPath(new URL("../../bin.js", import.meta.url)), "broker"], {
401
- detached: true,
402
- stdio: brokerLogFd === undefined ? "ignore" : ["ignore", brokerLogFd, brokerLogFd],
403
- env: brokerEnvironment(process.env, path),
404
- });
405
- // The child dups its own copies of the fd at spawn; release ours.
406
- if (brokerLogFd !== undefined)
407
- closeSync(brokerLogFd);
408
- let failure;
409
- child.once("error", (error) => {
410
- failure = error;
411
- });
412
- child.once("exit", (code, signal) => {
413
- failure = daemonExitRefusal(profileDir, signal ?? code);
414
- });
415
- child.unref();
416
- return await waitForBroker(path, () => failure);
417
- }
418
- finally {
419
- launchLease.release();
420
- }
421
152
  }
422
153
  //# sourceMappingURL=discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/bot/broker/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/bot/broker/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type SessionGuard } from "../../session-guard.js";
2
+ import type { OperatorBroker } from "./operator.js";
3
+ import { type BrokerNotifier } from "./transport.js";
4
+ import type { BrokerPrincipal } from "./authority.js";
5
+ /** One MCP socket owns one principal. No broker wire or browser handle crosses it. */
6
+ export declare class InProcessOperatorPrincipal {
7
+ readonly principal: BrokerPrincipal;
8
+ private readonly operator;
9
+ private readonly guard;
10
+ private readonly sessions;
11
+ private readonly refusedStarts;
12
+ private closed;
13
+ constructor(principal: BrokerPrincipal, operator: OperatorBroker, guard: SessionGuard);
14
+ private account;
15
+ invoke(name: string, originalArgs: Record<string, unknown>, requestId?: `${string}-${string}-${string}-${string}-${string}`, signal?: AbortSignal, notifyUser?: BrokerNotifier): Promise<unknown>;
16
+ disconnect(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=mcp-principal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-principal.d.ts","sourceRoot":"","sources":["../../../src/bot/broker/mcp-principal.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAMtD,sFAAsF;AACtF,qBAAa,0BAA0B;IAMnC,QAAQ,CAAC,SAAS,EAAE,eAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8C;IAC5E,OAAO,CAAC,MAAM,CAAS;gBAGZ,SAAS,EAAE,eAAe,EAClB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,YAAY;YAGxB,OAAO;IAWf,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,SAAS,sDAAe,EACxB,MAAM,CAAC,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,cAAc,GAC1B,OAAO,CAAC,OAAO,CAAC;IAkIb,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAKlC"}