@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.
- package/assets/chrome-scope-launcher +11 -0
- package/dist/bin.js +11 -6
- package/dist/bin.js.map +1 -1
- package/dist/bot/broker/daemon.d.ts +3 -6
- package/dist/bot/broker/daemon.d.ts.map +1 -1
- package/dist/bot/broker/daemon.js +25 -46
- package/dist/bot/broker/daemon.js.map +1 -1
- package/dist/bot/broker/discovery.d.ts +0 -62
- package/dist/bot/broker/discovery.d.ts.map +1 -1
- package/dist/bot/broker/discovery.js +73 -342
- package/dist/bot/broker/discovery.js.map +1 -1
- package/dist/bot/broker/mcp-principal.d.ts +18 -0
- package/dist/bot/broker/mcp-principal.d.ts.map +1 -0
- package/dist/bot/broker/mcp-principal.js +148 -0
- package/dist/bot/broker/mcp-principal.js.map +1 -0
- package/dist/bot/broker/mcp-socket-path.d.ts +2 -0
- package/dist/bot/broker/mcp-socket-path.d.ts.map +1 -0
- package/dist/bot/broker/mcp-socket-path.js +14 -0
- package/dist/bot/broker/mcp-socket-path.js.map +1 -0
- package/dist/bot/broker/mcp-socket.d.ts +8 -0
- package/dist/bot/broker/mcp-socket.d.ts.map +1 -0
- package/dist/bot/broker/mcp-socket.js +150 -0
- package/dist/bot/broker/mcp-socket.js.map +1 -0
- package/dist/bot/broker/operator.d.ts.map +1 -1
- package/dist/bot/broker/operator.js +8 -0
- package/dist/bot/broker/operator.js.map +1 -1
- package/dist/bot/broker/runtime.d.ts +2 -3
- package/dist/bot/broker/runtime.d.ts.map +1 -1
- package/dist/bot/broker/runtime.js +13 -30
- package/dist/bot/broker/runtime.js.map +1 -1
- package/dist/bot/broker/status.js +1 -1
- package/dist/bot/broker/status.js.map +1 -1
- package/dist/bot/broker/transport.d.ts +1 -9
- package/dist/bot/broker/transport.d.ts.map +1 -1
- package/dist/bot/broker/transport.js +8 -56
- package/dist/bot/broker/transport.js.map +1 -1
- package/dist/bot/browser-launch-marker.d.ts +4 -0
- package/dist/bot/browser-launch-marker.d.ts.map +1 -0
- package/dist/bot/browser-launch-marker.js +7 -0
- package/dist/bot/browser-launch-marker.js.map +1 -0
- package/dist/bot/browser-process-owner.d.ts.map +1 -1
- package/dist/bot/browser-process-owner.js +98 -38
- package/dist/bot/browser-process-owner.js.map +1 -1
- package/dist/bot/browser-process-runtime.d.ts +0 -1
- package/dist/bot/browser-process-runtime.d.ts.map +1 -1
- package/dist/bot/browser-process-runtime.js +22 -35
- package/dist/bot/browser-process-runtime.js.map +1 -1
- package/dist/bot/browser-scope.d.ts +15 -0
- package/dist/bot/browser-scope.d.ts.map +1 -0
- package/dist/bot/browser-scope.js +101 -0
- package/dist/bot/browser-scope.js.map +1 -0
- package/dist/bot/browser.d.ts +3 -0
- package/dist/bot/browser.d.ts.map +1 -1
- package/dist/bot/browser.js +11 -3
- package/dist/bot/browser.js.map +1 -1
- package/dist/bot/capture/verification.d.ts +3 -0
- package/dist/bot/capture/verification.d.ts.map +1 -1
- package/dist/bot/capture/verification.js +42 -11
- package/dist/bot/capture/verification.js.map +1 -1
- package/dist/bot/drive-snapshot.d.ts.map +1 -1
- package/dist/bot/drive-snapshot.js +3 -0
- package/dist/bot/drive-snapshot.js.map +1 -1
- package/dist/bot/google-login.js +1 -1
- package/dist/bot/google-login.js.map +1 -1
- package/dist/bot/operate-drive.d.ts +3 -1
- package/dist/bot/operate-drive.d.ts.map +1 -1
- package/dist/bot/operate-drive.js +39 -11
- package/dist/bot/operate-drive.js.map +1 -1
- package/dist/bot/owner-process-reaper.d.ts +14 -92
- package/dist/bot/owner-process-reaper.d.ts.map +1 -1
- package/dist/bot/owner-process-reaper.js +32 -1067
- package/dist/bot/owner-process-reaper.js.map +1 -1
- package/dist/bot/profile-path.d.ts +11 -0
- package/dist/bot/profile-path.d.ts.map +1 -0
- package/dist/bot/profile-path.js +33 -0
- package/dist/bot/profile-path.js.map +1 -0
- package/dist/bot/profile.d.ts +14 -31
- package/dist/bot/profile.d.ts.map +1 -1
- package/dist/bot/profile.js +61 -298
- package/dist/bot/profile.js.map +1 -1
- package/dist/bot/provision-session.d.ts.map +1 -1
- package/dist/bot/provision-session.js +11 -10
- package/dist/bot/provision-session.js.map +1 -1
- package/dist/bot/session/lifecycle.d.ts.map +1 -1
- package/dist/bot/session/lifecycle.js +32 -47
- package/dist/bot/session/lifecycle.js.map +1 -1
- package/dist/bot/session/model.d.ts +1 -2
- package/dist/bot/session/model.d.ts.map +1 -1
- package/dist/bot/session/model.js.map +1 -1
- package/dist/browser-busy.d.ts.map +1 -1
- package/dist/browser-busy.js +11 -4
- package/dist/browser-busy.js.map +1 -1
- package/dist/install/connect-report.d.ts +4 -1
- package/dist/install/connect-report.d.ts.map +1 -1
- package/dist/install/connect-report.js +6 -19
- package/dist/install/connect-report.js.map +1 -1
- package/dist/relay.d.ts +3 -0
- package/dist/relay.d.ts.map +1 -0
- package/dist/relay.js +139 -0
- package/dist/relay.js.map +1 -0
- package/dist/server-instance-registry.d.ts.map +1 -1
- package/dist/server-instance-registry.js +0 -7
- package/dist/server-instance-registry.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -10
- package/dist/server.js.map +1 -1
- package/dist/session-guard.d.ts +1 -0
- package/dist/session-guard.d.ts.map +1 -1
- package/dist/session-guard.js +8 -0
- package/dist/session-guard.js.map +1 -1
- package/dist/tools/credential-mutations.d.ts +20 -20
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inject-card-schema.d.ts +3 -0
- package/dist/tools/inject-card-schema.d.ts.map +1 -0
- package/dist/tools/inject-card-schema.js +75 -0
- package/dist/tools/inject-card-schema.js.map +1 -0
- package/dist/tools/provision-drive-schema.d.ts +20 -0
- package/dist/tools/provision-drive-schema.d.ts.map +1 -0
- package/dist/tools/provision-drive-schema.js +1114 -0
- package/dist/tools/provision-drive-schema.js.map +1 -0
- package/package.json +1 -1
- package/dist/bot/operator-browser-watchdog.d.ts +0 -127
- package/dist/bot/operator-browser-watchdog.d.ts.map +0 -1
- package/dist/bot/operator-browser-watchdog.js +0 -438
- package/dist/bot/operator-browser-watchdog.js.map +0 -1
- package/dist/bot/owner-process-reaper-worker.d.ts +0 -2
- package/dist/bot/owner-process-reaper-worker.d.ts.map +0 -1
- package/dist/bot/owner-process-reaper-worker.js +0 -17
- package/dist/bot/owner-process-reaper-worker.js.map +0 -1
|
@@ -1,37 +1,22 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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 {
|
|
9
|
-
import {
|
|
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
|
-
|
|
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
|
|
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
|
-
/**
|
|
97
|
-
*
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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 (
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
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
|
|
222
|
-
|
|
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
|
-
|
|
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
|
|
246
|
-
const pid = residentBrokerPid(profileDir);
|
|
72
|
+
const pid = legacyBrokerPid(path);
|
|
247
73
|
if (pid === null)
|
|
248
74
|
return false;
|
|
249
|
-
|
|
250
|
-
|
|
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
|
-
|
|
287
|
-
|
|
78
|
+
catch {
|
|
79
|
+
return true;
|
|
288
80
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
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",
|
|
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
|
|
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
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,MAAM,UAAU,mBAAmB,CAAC,UAAU,GAAG,iBAAiB,EAAE;IAClE,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpG,OAAO,IAAI,CAAC,MAAM,EAAE,wBAAwB,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,OAAO,IAAI,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAU,GAAG,iBAAiB,EAAE;IAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAU,GAAG,iBAAiB,EAAE;IAClE,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,mBAAmB,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE;QACrF,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;IACnD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,aAAa,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,OAAO,KAAK,YAAY,aAAa;QACnC,CAAC,KAAK,CAAC,IAAI,KAAK,oBAAoB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,KAAK,GAAG,KAAK,EAAE,EAAU,EAAiB,EAAE,CAChD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAE1D;4DAC4D;AAC5D,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;aAC9E,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QACzF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG;gBAAE,SAAS;YAClC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,SAAS;YACzC,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAA6B,EAAE,KAAc;IAC5F,IAAI,CAAC,CAAC,KAAK,YAAY,aAAa,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IACrF,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,KAAK,SAAS;QACnD,MAAM,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS;QAC3C,MAAM,wBAAwB,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC;IACjG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC/B,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;IACrC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,+BAA+B,CAAC,CAAC;AACxG,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,OAAiC;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,yBAAyB,CAAC;IACxD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,aAAa,GAAG,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,aAAa,KAAK,SAAS;YAAE,MAAM,aAAa,CAAC;QACrD,IAAI,CAAC;YAAC,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAChD,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;QAAC,CAAC;QACzD,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,uFAAuF,CAAC,CAAC;AACzI,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAsB,EAAE,IAAY;IACpE,OAAO,EAAE,GAAG,GAAG,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAAC;AACvD,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY,EAAE,UAAgC,EAAE;IAC1F,IAAI,CAAC;QAAC,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAChD,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAAE,MAAM,KAAK,CAAC;IAC/F,CAAC;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IAClD,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC;QAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,KAAK,GAAG,SAAS,CAAC;IAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE;QACzG,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;QAChE,GAAG,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;KAC1C,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,SAAS;QAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,OAA0B,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAClC,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,CAAC,yCAAyC;QACpF,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QACxC,OAAO,GAAG,IAAI,aAAa,CAAC,oBAAoB,EAAE,oCAAoC,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,IAAI,CAAC;QAAC,OAAO,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACxD,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,gBAAgB;YAAE,OAAO,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|