@trusty-squire/mcp 1.1.13-rc.9 → 1.1.13
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/README.md +136 -64
- package/assets/login/vnc-input.js +9 -0
- package/assets/login/vnc.html +214 -202
- package/assets/screencaps/connect-walkthrough.png +0 -0
- package/assets/screencaps/connect-walkthrough.svg +1 -1
- package/dist/api-client.d.ts +26 -3
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +19 -31
- package/dist/api-client.js.map +1 -1
- package/dist/bin.js +2 -3
- package/dist/bin.js.map +1 -1
- package/dist/bot/browser.d.ts +85 -80
- package/dist/bot/browser.d.ts.map +1 -1
- package/dist/bot/browser.js +1314 -1570
- package/dist/bot/browser.js.map +1 -1
- package/dist/bot/compact-observation-v2.d.ts +167 -0
- package/dist/bot/compact-observation-v2.d.ts.map +1 -0
- package/dist/bot/compact-observation-v2.js +1038 -0
- package/dist/bot/compact-observation-v2.js.map +1 -0
- package/dist/bot/credential-shape.d.ts +2 -0
- package/dist/bot/credential-shape.d.ts.map +1 -1
- package/dist/bot/credential-shape.js +21 -8
- package/dist/bot/credential-shape.js.map +1 -1
- package/dist/bot/element-fingerprint.d.ts +9 -0
- package/dist/bot/element-fingerprint.d.ts.map +1 -0
- package/dist/bot/element-fingerprint.js +147 -0
- package/dist/bot/element-fingerprint.js.map +1 -0
- package/dist/bot/email-verification.d.ts +7 -1
- package/dist/bot/email-verification.d.ts.map +1 -1
- package/dist/bot/email-verification.js +48 -14
- package/dist/bot/email-verification.js.map +1 -1
- package/dist/bot/google-login.d.ts +28 -52
- package/dist/bot/google-login.d.ts.map +1 -1
- package/dist/bot/google-login.js +246 -1119
- package/dist/bot/google-login.js.map +1 -1
- package/dist/bot/install-completion.d.ts +1 -2
- package/dist/bot/install-completion.d.ts.map +1 -1
- package/dist/bot/install-completion.js +1 -2
- package/dist/bot/install-completion.js.map +1 -1
- package/dist/bot/login-state.d.ts +13 -7
- package/dist/bot/login-state.d.ts.map +1 -1
- package/dist/bot/login-state.js +50 -114
- package/dist/bot/login-state.js.map +1 -1
- package/dist/bot/oauth-providers.d.ts +1 -1
- package/dist/bot/oauth-providers.d.ts.map +1 -1
- package/dist/bot/oauth-providers.js +3 -3
- package/dist/bot/oauth-providers.js.map +1 -1
- package/dist/bot/oauth-scope.d.ts +4 -0
- package/dist/bot/oauth-scope.d.ts.map +1 -0
- package/dist/bot/oauth-scope.js +58 -0
- package/dist/bot/oauth-scope.js.map +1 -0
- package/dist/bot/operator-browser-watchdog.d.ts +18 -6
- package/dist/bot/operator-browser-watchdog.d.ts.map +1 -1
- package/dist/bot/operator-browser-watchdog.js +91 -37
- package/dist/bot/operator-browser-watchdog.js.map +1 -1
- package/dist/bot/owner-process-reaper-worker.d.ts +2 -0
- package/dist/bot/owner-process-reaper-worker.d.ts.map +1 -0
- package/dist/bot/owner-process-reaper-worker.js +17 -0
- package/dist/bot/owner-process-reaper-worker.js.map +1 -0
- package/dist/bot/owner-process-reaper.d.ts +103 -0
- package/dist/bot/owner-process-reaper.d.ts.map +1 -0
- package/dist/bot/owner-process-reaper.js +1058 -0
- package/dist/bot/owner-process-reaper.js.map +1 -0
- package/dist/bot/pay-operator.d.ts +7 -1
- package/dist/bot/pay-operator.d.ts.map +1 -1
- package/dist/bot/pay-operator.js +269 -103
- package/dist/bot/pay-operator.js.map +1 -1
- package/dist/bot/profile.d.ts +10 -1
- package/dist/bot/profile.d.ts.map +1 -1
- package/dist/bot/profile.js +137 -11
- package/dist/bot/profile.js.map +1 -1
- package/dist/bot/promote-to-skill.js +1 -1
- package/dist/bot/promote-to-skill.js.map +1 -1
- package/dist/bot/provision-session.d.ts +57 -186
- package/dist/bot/provision-session.d.ts.map +1 -1
- package/dist/bot/provision-session.js +1976 -1812
- package/dist/bot/provision-session.js.map +1 -1
- package/dist/bot/remote-login-display.d.ts +61 -0
- package/dist/bot/remote-login-display.d.ts.map +1 -0
- package/dist/bot/remote-login-display.js +765 -0
- package/dist/bot/remote-login-display.js.map +1 -0
- package/dist/bot/session/hosts.d.ts +8 -0
- package/dist/bot/session/hosts.d.ts.map +1 -0
- package/dist/bot/session/hosts.js +36 -0
- package/dist/bot/session/hosts.js.map +1 -0
- package/dist/bot/session/lifecycle.d.ts +56 -0
- package/dist/bot/session/lifecycle.d.ts.map +1 -0
- package/dist/bot/session/lifecycle.js +962 -0
- package/dist/bot/session/lifecycle.js.map +1 -0
- package/dist/bot/session/model.d.ts +175 -0
- package/dist/bot/session/model.d.ts.map +1 -0
- package/dist/bot/session/model.js +77 -0
- package/dist/bot/session/model.js.map +1 -0
- package/dist/install/cli.d.ts +29 -9
- package/dist/install/cli.d.ts.map +1 -1
- package/dist/install/cli.js +243 -322
- package/dist/install/cli.js.map +1 -1
- package/dist/install/interactive.d.ts +1 -0
- package/dist/install/interactive.d.ts.map +1 -1
- package/dist/install/interactive.js +19 -5
- package/dist/install/interactive.js.map +1 -1
- package/dist/install/ui.d.ts.map +1 -1
- package/dist/install/ui.js +3 -15
- package/dist/install/ui.js.map +1 -1
- package/dist/operator-env.js +1 -1
- package/dist/operator-env.js.map +1 -1
- package/dist/server-instance-registry.d.ts +103 -0
- package/dist/server-instance-registry.d.ts.map +1 -0
- package/dist/server-instance-registry.js +392 -0
- package/dist/server-instance-registry.js.map +1 -0
- package/dist/server.d.ts +15 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +164 -62
- package/dist/server.js.map +1 -1
- package/dist/session-guard.d.ts +28 -0
- package/dist/session-guard.d.ts.map +1 -0
- package/dist/session-guard.js +84 -0
- package/dist/session-guard.js.map +1 -0
- package/dist/session.d.ts +57 -13
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +246 -127
- package/dist/session.js.map +1 -1
- package/dist/tools/audit-log.d.ts +16 -2
- package/dist/tools/audit-log.d.ts.map +1 -1
- package/dist/tools/audit-log.js +223 -13
- package/dist/tools/audit-log.js.map +1 -1
- package/dist/tools/audit-rollup.d.ts +80 -0
- package/dist/tools/audit-rollup.d.ts.map +1 -0
- package/dist/tools/audit-rollup.js +0 -0
- package/dist/tools/audit-rollup.js.map +1 -0
- package/dist/tools/fetch-credential.d.ts +37 -0
- package/dist/tools/fetch-credential.d.ts.map +1 -0
- package/dist/tools/fetch-credential.js +153 -0
- package/dist/tools/fetch-credential.js.map +1 -0
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/operate-pay.d.ts +4 -4
- package/dist/tools/operate-pay.d.ts.map +1 -1
- package/dist/tools/operate-pay.js +151 -96
- package/dist/tools/operate-pay.js.map +1 -1
- package/dist/tools/provision-drive.d.ts +47 -39
- package/dist/tools/provision-drive.d.ts.map +1 -1
- package/dist/tools/provision-drive.js +268 -164
- package/dist/tools/provision-drive.js.map +1 -1
- package/dist/tools/use-credential.d.ts.map +1 -1
- package/dist/tools/use-credential.js +3 -2
- package/dist/tools/use-credential.js.map +1 -1
- package/package.json +4 -6
- package/dist/bot/operator-direct-identity.d.ts +0 -26
- package/dist/bot/operator-direct-identity.d.ts.map +0 -1
- package/dist/bot/operator-direct-identity.js +0 -120
- package/dist/bot/operator-direct-identity.js.map +0 -1
- package/dist/bot/operator-profile-pool.d.ts +0 -97
- package/dist/bot/operator-profile-pool.d.ts.map +0 -1
- package/dist/bot/operator-profile-pool.js +0 -855
- package/dist/bot/operator-profile-pool.js.map +0 -1
- package/dist/bot/xvfb.d.ts +0 -13
- package/dist/bot/xvfb.d.ts.map +0 -1
- package/dist/bot/xvfb.js +0 -146
- package/dist/bot/xvfb.js.map +0 -1
package/dist/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// MCP server: reads
|
|
1
|
+
// MCP server: reads its account's session from the session file, sets up an ApiClient
|
|
2
2
|
// against the configured API base URL, and exposes the registered tools
|
|
3
3
|
// over stdio.
|
|
4
4
|
//
|
|
@@ -16,9 +16,11 @@ import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprot
|
|
|
16
16
|
import { ApiClient } from "./api-client.js";
|
|
17
17
|
import { setSelfManagedChromeTerminationSignalExitEnabled } from "./bot/browser.js";
|
|
18
18
|
import { cancelActiveLoginBrowsers } from "./bot/google-login.js";
|
|
19
|
+
import { startOwnerProcessReaper } from "./bot/owner-process-reaper.js";
|
|
19
20
|
import { activeSessionCount, closeAllProvisionSessions, withProvisionSessionCall, } from "./bot/provision-session.js";
|
|
21
|
+
import { heartbeatIntervalMs, idleCheckIntervalMs, idleTimeoutMs, idleTimeoutWithSessionMs, reapStaleServerInstances, registerServerInstance, } from "./server-instance-registry.js";
|
|
20
22
|
import { buildToolRegistry, findTool } from "./tools/index.js";
|
|
21
|
-
import {
|
|
23
|
+
import { createSessionGuard, setServingAccountId } from "./session-guard.js";
|
|
22
24
|
import { VERSION } from "./version.js";
|
|
23
25
|
const SERVER_NAME = "trusty-squire";
|
|
24
26
|
const DEFAULT_REGISTRY_BASE = process.env.ADAPTER_REGISTRY_URL ?? "https://registry.trustysquire.ai";
|
|
@@ -30,39 +32,18 @@ const DEFAULT_REGISTRY_BASE = process.env.ADAPTER_REGISTRY_URL ?? "https://regis
|
|
|
30
32
|
// from a host like that will ever arrive, so this is a time bound, not an
|
|
31
33
|
// event.
|
|
32
34
|
//
|
|
33
|
-
// It also has to cover a server that still holds an open provision session
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
// provably dead — a live-but-abandoned zombie server is, by that design, a
|
|
37
|
-
// "genuine concurrent run" the pool must never touch. So a background
|
|
38
|
-
// pool-level reaper cannot free an active session's Chrome on its own; only
|
|
39
|
-
// the owning server exiting (which runs closeAllProvisionSessions, which
|
|
40
|
-
// calls browser.close() on the leased Chrome — already timeout-capped down
|
|
41
|
-
// to a SIGKILL reap, see browser.ts's closeWithProfileGuard) can. Hence two
|
|
35
|
+
// It also has to cover a server that still holds an open provision session.
|
|
36
|
+
// Its browser is owned by that server, so only the owning server's bounded
|
|
37
|
+
// terminal teardown can close Chrome and destroy its private profile. Hence two
|
|
42
38
|
// bounds: a short one when idle with no session (routine), and a longer one
|
|
43
39
|
// when a session is still open — wide enough that no real in-flight flow
|
|
44
|
-
// (operate_pay
|
|
45
|
-
// bounded in the minutes) should ever cross it, so crossing it is a reliable
|
|
40
|
+
// (operate_pay's approval wait is bounded to one minute; post-submit outcome
|
|
41
|
+
// checks are bounded in the minutes) should ever cross it, so crossing it is a reliable
|
|
46
42
|
// abandoned-session signal, not a false kill of live work.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const raw = process.env[name];
|
|
52
|
-
if (raw === undefined)
|
|
53
|
-
return fallback;
|
|
54
|
-
const parsed = Number(raw);
|
|
55
|
-
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
56
|
-
}
|
|
57
|
-
function idleTimeoutMs() {
|
|
58
|
-
return envMs("TRUSTY_SQUIRE_SERVER_IDLE_TIMEOUT_MS", DEFAULT_IDLE_TIMEOUT_MS);
|
|
59
|
-
}
|
|
60
|
-
function idleTimeoutWithSessionMs() {
|
|
61
|
-
return envMs("TRUSTY_SQUIRE_SERVER_IDLE_TIMEOUT_WITH_SESSION_MS", DEFAULT_IDLE_TIMEOUT_WITH_SESSION_MS);
|
|
62
|
-
}
|
|
63
|
-
function idleCheckIntervalMs() {
|
|
64
|
-
return envMs("TRUSTY_SQUIRE_SERVER_IDLE_CHECK_INTERVAL_MS", DEFAULT_IDLE_CHECK_INTERVAL_MS);
|
|
65
|
-
}
|
|
43
|
+
//
|
|
44
|
+
// The bounds themselves live in server-instance-registry.ts, because the
|
|
45
|
+
// startup reaper there applies the same policy from the outside to a prior
|
|
46
|
+
// instance that failed to apply it to itself.
|
|
66
47
|
// Exported for unit testing; kept pure so the branches (recent activity,
|
|
67
48
|
// no-session idle, session-open idle) don't need a live process/interval.
|
|
68
49
|
export function shouldIdleExit(now, lastActivityAt, sessionCount, timeoutMs, timeoutWithSessionMs) {
|
|
@@ -72,12 +53,13 @@ export function shouldIdleExit(now, lastActivityAt, sessionCount, timeoutMs, tim
|
|
|
72
53
|
// Injected into the model's system prompt every turn (≤2KB). Teaches
|
|
73
54
|
// the routing between store / use / request so the agent reaches for
|
|
74
55
|
// the right credential tool without the user spelling it out.
|
|
75
|
-
const SERVER_INSTRUCTIONS = `This is Trusty Squire — it drives a real browser through signup, provisioning,
|
|
56
|
+
export const SERVER_INSTRUCTIONS = `This is Trusty Squire — it drives a real browser through signup, provisioning,
|
|
76
57
|
and checkout flows on the user's behalf (\`operate_start\`/\`operate_observe\`/
|
|
77
58
|
\`operate_act\`/\`operate_pay\`/\`operate_finish\`, plus recipe replay), and backs it
|
|
78
59
|
with a write-only credential vault.
|
|
79
60
|
The user's secrets (API keys, tokens, passwords) live in the vault encrypted;
|
|
80
|
-
they are NOT in the conversation context
|
|
61
|
+
they are NOT in the conversation context. Reading one back is possible but
|
|
62
|
+
costly — see fetch_credential below.
|
|
81
63
|
Routing rules for THIS server's vault tools:
|
|
82
64
|
|
|
83
65
|
- User pastes a secret-shaped value (sk-…, ghp_…, AKIA…, eyJ…) into chat
|
|
@@ -95,10 +77,44 @@ Routing rules for THIS server's vault tools:
|
|
|
95
77
|
with the returned approval_id only after the user signs the exact mutation.
|
|
96
78
|
- Rotating a secret value = call store_credential again with the new value (it
|
|
97
79
|
overwrites). edit_credential cannot read or change secret fields.
|
|
98
|
-
-
|
|
99
|
-
user
|
|
100
|
-
|
|
101
|
-
|
|
80
|
+
- The raw value reaches you ONLY via fetch_credential, and only after the
|
|
81
|
+
user signs a passkey approval. It then lives in your transcript forever,
|
|
82
|
+
so use it only when the plaintext must land somewhere you control (a
|
|
83
|
+
GitHub Actions secret, a .env, a config file) with no server-side
|
|
84
|
+
injection path. For calling an API, use_credential is always the answer.`;
|
|
85
|
+
export function createServerCallAdmission() {
|
|
86
|
+
let accepting = true;
|
|
87
|
+
let inFlight = 0;
|
|
88
|
+
let drain;
|
|
89
|
+
let finishDrain;
|
|
90
|
+
return {
|
|
91
|
+
started: () => {
|
|
92
|
+
if (!accepting)
|
|
93
|
+
return false;
|
|
94
|
+
inFlight += 1;
|
|
95
|
+
return true;
|
|
96
|
+
},
|
|
97
|
+
finished: () => {
|
|
98
|
+
inFlight -= 1;
|
|
99
|
+
if (inFlight === 0) {
|
|
100
|
+
finishDrain?.();
|
|
101
|
+
finishDrain = undefined;
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
closeAndDrain: () => {
|
|
105
|
+
accepting = false;
|
|
106
|
+
if (inFlight === 0)
|
|
107
|
+
return Promise.resolve();
|
|
108
|
+
drain ??= new Promise((resolveDrain) => {
|
|
109
|
+
finishDrain = resolveDrain;
|
|
110
|
+
});
|
|
111
|
+
return drain;
|
|
112
|
+
},
|
|
113
|
+
inFlightCount: () => inFlight,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export async function buildServer(api, callLifecycle, loadPublishedAccountSession, sessionGuard) {
|
|
117
|
+
let activeApi = api;
|
|
102
118
|
const tools = buildToolRegistry();
|
|
103
119
|
const server = new Server({ name: SERVER_NAME, version: VERSION }, { capabilities: { tools: {} }, instructions: SERVER_INSTRUCTIONS });
|
|
104
120
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
@@ -129,13 +145,33 @@ export async function buildServer(api) {
|
|
|
129
145
|
.map((i) => (i.path.length > 0 ? `${i.path.join(".")}: ${i.message}` : i.message))
|
|
130
146
|
.join("; ")}`);
|
|
131
147
|
}
|
|
132
|
-
|
|
148
|
+
// Which account is this server serving? Sessions are stored per account, so
|
|
149
|
+
// a `connect` under a different account no longer overwrites this one — but
|
|
150
|
+
// this server must still refuse rather than fall back to another account's
|
|
151
|
+
// scope if its own entry is gone.
|
|
152
|
+
if (sessionGuard !== undefined) {
|
|
153
|
+
const report = await sessionGuard.inspect();
|
|
154
|
+
if (report.problem !== null) {
|
|
155
|
+
return errorContent(report.problem.code, report.problem.message);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// The install ceremony publishes the agent token after the operator may
|
|
159
|
+
// already have launched this stdio server. Retry the canonical session
|
|
160
|
+
// read only while unauthenticated; once bound, keep the in-memory client
|
|
161
|
+
// for the rest of this server lifetime.
|
|
162
|
+
if (activeApi === null && loadPublishedAccountSession !== undefined) {
|
|
163
|
+
activeApi = await loadPublishedAccountSession();
|
|
164
|
+
}
|
|
165
|
+
if (activeApi === null) {
|
|
133
166
|
return errorContent("reconnect_required", `This install is from before single-tier auth and isn't bound to an account. ` +
|
|
134
167
|
`Run \`npx @trusty-squire/mcp connect\` to reconnect.`);
|
|
135
168
|
}
|
|
169
|
+
if (callLifecycle !== undefined && !callLifecycle.started()) {
|
|
170
|
+
return errorContent("server_unavailable", "server is shutting down");
|
|
171
|
+
}
|
|
136
172
|
try {
|
|
137
|
-
|
|
138
|
-
const invoke = async () => await tool.handler(parsed.data,
|
|
173
|
+
activeApi.setRequestingAgent(server.getClientVersion()?.name ?? "unknown-agent");
|
|
174
|
+
const invoke = async () => await tool.handler(parsed.data, activeApi, {
|
|
139
175
|
notifyUser: async (message, data) => {
|
|
140
176
|
await server.sendLoggingMessage({
|
|
141
177
|
level: "notice",
|
|
@@ -145,8 +181,8 @@ export async function buildServer(api) {
|
|
|
145
181
|
},
|
|
146
182
|
});
|
|
147
183
|
// Tool handlers await independently. A finish must therefore close the
|
|
148
|
-
// admission gate and drain calls that already entered before it
|
|
149
|
-
//
|
|
184
|
+
// admission gate and drain calls that already entered before it snapshots
|
|
185
|
+
// eligible state and closes the browser. `operate_finish*` owns that transition.
|
|
150
186
|
const sessionId = typeof parsed.data.session_id === "string" ? parsed.data.session_id : undefined;
|
|
151
187
|
const result = sessionId !== undefined && !/^operate_finish(?:_task)?$/.test(tool.name)
|
|
152
188
|
? await withProvisionSessionCall(sessionId, async () => await invoke())
|
|
@@ -163,6 +199,9 @@ export async function buildServer(api) {
|
|
|
163
199
|
})
|
|
164
200
|
: errorContent(malformedAction ? "invalid_arguments" : "tool_execution_failed", message);
|
|
165
201
|
}
|
|
202
|
+
finally {
|
|
203
|
+
callLifecycle?.finished();
|
|
204
|
+
}
|
|
166
205
|
});
|
|
167
206
|
return server;
|
|
168
207
|
}
|
|
@@ -186,15 +225,25 @@ function toolResultContent(result) {
|
|
|
186
225
|
const { image, ...meta } = result;
|
|
187
226
|
return {
|
|
188
227
|
content: [
|
|
189
|
-
{ type: "text", text:
|
|
228
|
+
{ type: "text", text: compactToolResultText(meta) },
|
|
190
229
|
{ type: "image", data: image.data_base64, mimeType: image.mime_type },
|
|
191
230
|
],
|
|
192
231
|
};
|
|
193
232
|
}
|
|
194
233
|
return {
|
|
195
|
-
content: [{ type: "text", text:
|
|
234
|
+
content: [{ type: "text", text: compactToolResultText(result) }],
|
|
196
235
|
};
|
|
197
236
|
}
|
|
237
|
+
/** Compact V2 is a model wire protocol; indentation adds no information. */
|
|
238
|
+
export function compactToolResultText(result) {
|
|
239
|
+
if (typeof result === "object" &&
|
|
240
|
+
result !== null &&
|
|
241
|
+
"format" in result &&
|
|
242
|
+
result.format === "compact-v2") {
|
|
243
|
+
return JSON.stringify(result);
|
|
244
|
+
}
|
|
245
|
+
return JSON.stringify(result, null, 2);
|
|
246
|
+
}
|
|
198
247
|
function errorContent(code, message, guidance) {
|
|
199
248
|
return {
|
|
200
249
|
isError: true,
|
|
@@ -214,8 +263,8 @@ function errorContent(code, message, guidance) {
|
|
|
214
263
|
// kill the process, which turns one bad operate_* call into "MCP server
|
|
215
264
|
// unreachable" for the host agent. Log the escape and keep serving: the
|
|
216
265
|
// in-flight call fails on its own (its awaited promise threw or timed out),
|
|
217
|
-
// session/browser state is self-contained and
|
|
218
|
-
//
|
|
266
|
+
// session/browser state is self-contained and bounded by its watchdog and
|
|
267
|
+
// terminal teardown, and no security gate depends on process death — a crash
|
|
219
268
|
// leaves any half-done page action in exactly the same state, minus the
|
|
220
269
|
// transport. Installed only for `mcp server`; the CLI keeps fail-fast.
|
|
221
270
|
export function installServerProcessGuards() {
|
|
@@ -232,27 +281,60 @@ export function installServerProcessGuards() {
|
|
|
232
281
|
export async function runServer() {
|
|
233
282
|
installServerProcessGuards();
|
|
234
283
|
setSelfManagedChromeTerminationSignalExitEnabled(false);
|
|
284
|
+
// The detached Linux watchdog survives SIGKILL/parent death. It asynchronously
|
|
285
|
+
// sweeps strict process-only manifests, then tracks exact local browser and
|
|
286
|
+
// session-helper identities for launches owned by this server.
|
|
287
|
+
startOwnerProcessReaper();
|
|
288
|
+
// Reconnects leave the superseded instance behind: a live box carried a
|
|
289
|
+
// superseded server beside its replacement plus two orphaned to init for
|
|
290
|
+
// ~31 hours, each keeping a browser tree resident. Reap prior instances of
|
|
291
|
+
// OUR agent identity that are orphaned or past their own idle bound, before
|
|
292
|
+
// serving — never by process name, never one still serving a client. Purely
|
|
293
|
+
// housekeeping, so a failure here must not stop the server from starting.
|
|
294
|
+
try {
|
|
295
|
+
await reapStaleServerInstances();
|
|
296
|
+
}
|
|
297
|
+
catch (err) {
|
|
298
|
+
process.stderr.write(`[trusty-squire] stale server reap failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
299
|
+
}
|
|
235
300
|
// Startup breadcrumb on stderr (which lands in the host agent's MCP
|
|
236
301
|
// log). A silent no-op was the worst part of the entrypoint-guard
|
|
237
302
|
// bug — this line makes "did the server actually start?" answerable
|
|
238
303
|
// at a glance.
|
|
239
304
|
process.stderr.write(`[trusty-squire] server v${VERSION} starting\n`);
|
|
240
|
-
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
305
|
+
// Owns this server's answer to "which account am I serving?".
|
|
306
|
+
const sessionGuard = createSessionGuard();
|
|
307
|
+
const loadPublishedAccountSession = async () => {
|
|
308
|
+
try {
|
|
309
|
+
const session = await sessionGuard.bind();
|
|
310
|
+
setServingAccountId(sessionGuard.boundAccountId());
|
|
311
|
+
// Single-tier: every session is account-bound. A session with just a
|
|
312
|
+
// machine_token (pre-collapse install) yields api=null, and every
|
|
313
|
+
// tool call returns the re-install instruction.
|
|
314
|
+
if (session === null || session.agent_session_token === undefined)
|
|
315
|
+
return null;
|
|
316
|
+
return new ApiClient({
|
|
317
|
+
apiBaseUrl: session.api_base_url,
|
|
318
|
+
registryBaseUrl: DEFAULT_REGISTRY_BASE,
|
|
319
|
+
agentSessionToken: session.agent_session_token,
|
|
320
|
+
agentIdentity: process.env.TRUSTY_SQUIRE_AGENT_IDENTITY ?? "unknown",
|
|
321
|
+
...(session.account_id !== undefined ? { accountId: session.account_id } : {}),
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
// A failed session read must remain fail-closed; the next tool call can
|
|
326
|
+
// retry after a transient session-storage problem clears.
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
const api = await loadPublishedAccountSession();
|
|
331
|
+
const callAdmission = createServerCallAdmission();
|
|
332
|
+
const server = await buildServer(api, callAdmission, loadPublishedAccountSession, sessionGuard);
|
|
255
333
|
const transport = new StdioServerTransport();
|
|
334
|
+
// Publishes what a later launch of this identity needs to tell "still
|
|
335
|
+
// serving a client" from "wedged": last inbound message, open sessions,
|
|
336
|
+
// in-flight calls. Without it every prior instance looks equally idle.
|
|
337
|
+
const instance = registerServerInstance();
|
|
256
338
|
// A stdio client can disappear without sending a signal (for example when
|
|
257
339
|
// its parent agent exits). Chrome keeps Node's event loop alive in that
|
|
258
340
|
// case, so close every active provisioning browser and explicitly exit.
|
|
@@ -260,22 +342,29 @@ export async function runServer() {
|
|
|
260
342
|
// idle backstop below racing together cannot run teardown twice.
|
|
261
343
|
let shutdown;
|
|
262
344
|
let idleTimer;
|
|
345
|
+
let heartbeatTimer;
|
|
263
346
|
const requestShutdown = () => {
|
|
264
347
|
if (shutdown !== undefined)
|
|
265
348
|
return;
|
|
349
|
+
const admittedCallsDrained = callAdmission.closeAndDrain();
|
|
266
350
|
shutdown = (async () => {
|
|
267
351
|
process.stdin.removeListener("end", requestShutdown);
|
|
268
352
|
process.stdin.removeListener("close", requestShutdown);
|
|
353
|
+
process.removeListener("SIGHUP", requestShutdown);
|
|
269
354
|
process.removeListener("SIGTERM", requestShutdown);
|
|
270
355
|
process.removeListener("SIGINT", requestShutdown);
|
|
271
356
|
if (idleTimer !== undefined)
|
|
272
357
|
clearInterval(idleTimer);
|
|
358
|
+
if (heartbeatTimer !== undefined)
|
|
359
|
+
clearInterval(heartbeatTimer);
|
|
360
|
+
instance?.release();
|
|
273
361
|
try {
|
|
274
362
|
// The OAuth-bootstrap login Chrome (google-login) is tracked apart
|
|
275
363
|
// from provision sessions — drain it too so it cannot outlive the
|
|
276
364
|
// server. Its own signal handlers stand down in server mode (see
|
|
277
365
|
// registerHeadlessRigCleanup), leaving this coordinator as the one
|
|
278
366
|
// exit owner.
|
|
367
|
+
await admittedCallsDrained;
|
|
279
368
|
await cancelActiveLoginBrowsers();
|
|
280
369
|
await closeAllProvisionSessions();
|
|
281
370
|
await server.close();
|
|
@@ -296,6 +385,7 @@ export async function runServer() {
|
|
|
296
385
|
transport.onclose = requestShutdown;
|
|
297
386
|
process.stdin.once("end", requestShutdown);
|
|
298
387
|
process.stdin.once("close", requestShutdown);
|
|
388
|
+
process.once("SIGHUP", requestShutdown);
|
|
299
389
|
process.once("SIGTERM", requestShutdown);
|
|
300
390
|
process.once("SIGINT", requestShutdown);
|
|
301
391
|
// Protocol.connect chains transport.onmessage the same way it chains
|
|
@@ -318,6 +408,18 @@ export async function runServer() {
|
|
|
318
408
|
requestShutdown();
|
|
319
409
|
}, idleCheckIntervalMs());
|
|
320
410
|
idleTimer.unref();
|
|
411
|
+
if (instance !== null) {
|
|
412
|
+
heartbeatTimer = setInterval(() => {
|
|
413
|
+
if (shutdown !== undefined)
|
|
414
|
+
return;
|
|
415
|
+
instance.heartbeat({
|
|
416
|
+
lastActivityAt,
|
|
417
|
+
activeSessions: activeSessionCount(),
|
|
418
|
+
inFlightCalls: callAdmission.inFlightCount(),
|
|
419
|
+
});
|
|
420
|
+
}, heartbeatIntervalMs());
|
|
421
|
+
heartbeatTimer.unref();
|
|
422
|
+
}
|
|
321
423
|
await server.connect(transport);
|
|
322
424
|
}
|
|
323
425
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type SessionData, type SessionStore } from "./session.js";
|
|
2
|
+
export interface SessionStateProblem {
|
|
3
|
+
code: "account_session_missing";
|
|
4
|
+
message: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SessionGuardReport {
|
|
7
|
+
/** Non-null means the read cannot be trusted; surface it as a tool error. */
|
|
8
|
+
problem: SessionStateProblem | null;
|
|
9
|
+
}
|
|
10
|
+
export interface SessionGuard {
|
|
11
|
+
/** Read this server's account entry, adopting an account on first success. */
|
|
12
|
+
bind(): Promise<SessionData | null>;
|
|
13
|
+
/** Per-tool-call check; never throws. */
|
|
14
|
+
inspect(): Promise<SessionGuardReport>;
|
|
15
|
+
/** The account this server is serving, once bound. */
|
|
16
|
+
boundAccountId(): string | null;
|
|
17
|
+
}
|
|
18
|
+
export declare function setServingAccountId(accountId: string | null): void;
|
|
19
|
+
export declare function servingAccountId(): string | undefined;
|
|
20
|
+
export declare function createSessionGuard(options?: {
|
|
21
|
+
openStorage?: () => Promise<SessionStore>;
|
|
22
|
+
self?: {
|
|
23
|
+
pid: number;
|
|
24
|
+
version: string;
|
|
25
|
+
};
|
|
26
|
+
accountId?: string | undefined;
|
|
27
|
+
}): SessionGuard;
|
|
28
|
+
//# sourceMappingURL=session-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-guard.d.ts","sourceRoot":"","sources":["../src/session-guard.ts"],"names":[],"mappings":"AAcA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACpC,yCAAyC;IACzC,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvC,sDAAsD;IACtD,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;CACjC;AAaD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAElE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD;AAOD,wBAAgB,kBAAkB,CAChC,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,GACL,YAAY,CAiDd"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// A server's account-scoped view of the session store.
|
|
2
|
+
//
|
|
3
|
+
// The store keeps one entry per account, so a `connect` under a second account
|
|
4
|
+
// no longer overwrites the first account's binding. What remains is telling the
|
|
5
|
+
// server WHICH account it is: it binds one at startup and reads only that
|
|
6
|
+
// entry, so it can never fall back to another account's scope, and it says so
|
|
7
|
+
// loudly if its own entry is removed.
|
|
8
|
+
//
|
|
9
|
+
// The account a server binds comes from TRUSTY_SQUIRE_ACCOUNT_ID — `connect`
|
|
10
|
+
// writes it into the host agent's MCP config env, so an already-running server
|
|
11
|
+
// keeps the account it was launched for even after a later connect installs a
|
|
12
|
+
// different one. Without that env (a config written before this existed) it
|
|
13
|
+
// falls back to the store's most recently connected account.
|
|
14
|
+
import { AccountSessionMissingError, openSessionStorage, } from "./session.js";
|
|
15
|
+
import { VERSION } from "./version.js";
|
|
16
|
+
// The account THIS process is acting for, published by whoever owns the guard.
|
|
17
|
+
//
|
|
18
|
+
// Tools must read it from here and must NEVER fall back to the store's
|
|
19
|
+
// current-account pointer: a server launched from a pre-pin config binds by
|
|
20
|
+
// fallback, and re-resolving later would hand it whichever account connected
|
|
21
|
+
// most recently — the original "acting as an account it never bound to"
|
|
22
|
+
// defect. The launch env is a different thing and is a legitimate source: it
|
|
23
|
+
// is the pinned value the guard itself starts from, and operator/CI paths
|
|
24
|
+
// (skill CLI, direct registry publishes) run with no guard at all.
|
|
25
|
+
let servingAccount = null;
|
|
26
|
+
export function setServingAccountId(accountId) {
|
|
27
|
+
servingAccount = accountId;
|
|
28
|
+
}
|
|
29
|
+
export function servingAccountId() {
|
|
30
|
+
if (servingAccount !== null)
|
|
31
|
+
return servingAccount;
|
|
32
|
+
return accountFromEnv();
|
|
33
|
+
}
|
|
34
|
+
function accountFromEnv() {
|
|
35
|
+
const id = (process.env.TRUSTY_SQUIRE_ACCOUNT_ID ?? "").trim();
|
|
36
|
+
return id.length > 0 ? id : undefined;
|
|
37
|
+
}
|
|
38
|
+
export function createSessionGuard(options = {}) {
|
|
39
|
+
const openStorage = options.openStorage ?? (async () => await openSessionStorage());
|
|
40
|
+
const self = options.self ?? { pid: process.pid, version: VERSION };
|
|
41
|
+
const configured = "accountId" in options ? options.accountId : accountFromEnv();
|
|
42
|
+
let bound = configured ?? null;
|
|
43
|
+
// Only an account this server has actually served can go missing. Before
|
|
44
|
+
// that, a read that comes back empty is "not installed yet" — the install
|
|
45
|
+
// ceremony can still publish while this server is already running — and the
|
|
46
|
+
// existing unauthenticated path owns that message.
|
|
47
|
+
let served = false;
|
|
48
|
+
const readOwn = async (storage) => bound === null ? await storage.read() : await storage.read(bound);
|
|
49
|
+
return {
|
|
50
|
+
async bind() {
|
|
51
|
+
const storage = await openStorage();
|
|
52
|
+
const data = await readOwn(storage);
|
|
53
|
+
if (data !== null &&
|
|
54
|
+
data.agent_session_token !== undefined &&
|
|
55
|
+
data.account_id !== undefined) {
|
|
56
|
+
bound = data.account_id;
|
|
57
|
+
served = true;
|
|
58
|
+
}
|
|
59
|
+
return data;
|
|
60
|
+
},
|
|
61
|
+
async inspect() {
|
|
62
|
+
if (bound === null || !served)
|
|
63
|
+
return { problem: null };
|
|
64
|
+
let storage;
|
|
65
|
+
let data;
|
|
66
|
+
try {
|
|
67
|
+
storage = await openStorage();
|
|
68
|
+
data = await storage.read(bound);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// A transient read failure is not evidence the account is gone. Stay
|
|
72
|
+
// quiet and let the existing unauthenticated path report it.
|
|
73
|
+
return { problem: null };
|
|
74
|
+
}
|
|
75
|
+
if (data !== null)
|
|
76
|
+
return { problem: null };
|
|
77
|
+
const available = await storage.listAccounts().catch(() => []);
|
|
78
|
+
const error = new AccountSessionMissingError(bound, available, self);
|
|
79
|
+
return { problem: { code: error.code, message: error.message } };
|
|
80
|
+
},
|
|
81
|
+
boundAccountId: () => bound,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=session-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-guard.js","sourceRoot":"","sources":["../src/session-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -8,21 +8,65 @@ export interface SessionData {
|
|
|
8
8
|
consent_skillify_telemetry?: boolean;
|
|
9
9
|
consent_operator_inbox_otp?: boolean;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Slot for an entry whose claim has not landed yet, so it has no account to be
|
|
13
|
+
* keyed by. A real account_id is a ULID, so this can never collide with one.
|
|
14
|
+
*/
|
|
15
|
+
export declare const UNBOUND_ACCOUNT_KEY = "__unbound__";
|
|
16
|
+
export declare function accountKey(data: SessionData): string;
|
|
17
|
+
/**
|
|
18
|
+
* The account entry a server bound to is gone — logged out, or erased by hand.
|
|
19
|
+
* Loud rather than an empty read, because an empty read reports "not installed"
|
|
20
|
+
* for a machine that is installed, just not under this account any more.
|
|
21
|
+
*/
|
|
22
|
+
export declare class AccountSessionMissingError extends Error {
|
|
23
|
+
readonly accountId: string;
|
|
24
|
+
readonly available: string[];
|
|
25
|
+
readonly code = "account_session_missing";
|
|
26
|
+
constructor(accountId: string, available: string[], self?: {
|
|
27
|
+
pid: number;
|
|
28
|
+
version: string;
|
|
29
|
+
});
|
|
16
30
|
}
|
|
17
|
-
export declare
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
private readonly filePath;
|
|
31
|
+
export declare class SessionStore {
|
|
32
|
+
/** The current-account pointer and pre-per-account compatibility mirror. */
|
|
33
|
+
readonly path: string;
|
|
34
|
+
private readonly dir;
|
|
22
35
|
constructor(filePath?: string);
|
|
23
|
-
|
|
36
|
+
private get sessionsDir();
|
|
37
|
+
private accountFile;
|
|
38
|
+
private readJson;
|
|
39
|
+
/**
|
|
40
|
+
* The legacy flat pointer/mirror. Also the pre-per-account file, which is
|
|
41
|
+
* why a read falls back to it: an install that predates `sessions/` has its
|
|
42
|
+
* only copy here, and reading must not require migrating it first.
|
|
43
|
+
*/
|
|
44
|
+
private readPointer;
|
|
45
|
+
private writeAtomic;
|
|
46
|
+
private writeAtomicIfMissing;
|
|
47
|
+
/** Every account installed on this machine. */
|
|
48
|
+
listAccounts(): Promise<string[]>;
|
|
49
|
+
/** The account the most recent connect bound, for a reader that has no own. */
|
|
50
|
+
currentAccountId(): Promise<string | null>;
|
|
51
|
+
/**
|
|
52
|
+
* One account's entry. With `accountId`, ONLY that account's file — a caller
|
|
53
|
+
* bound to an account never silently reads another's. Without it, the account
|
|
54
|
+
* the most recent connect bound.
|
|
55
|
+
*/
|
|
56
|
+
read(accountId?: string): Promise<SessionData | null>;
|
|
57
|
+
/**
|
|
58
|
+
* Upsert ONE account's entry. Structurally cannot touch another account's:
|
|
59
|
+
* it writes that account's own file, then refreshes the pointer/mirror.
|
|
60
|
+
*/
|
|
24
61
|
write(data: SessionData): Promise<void>;
|
|
25
|
-
|
|
26
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Remove ONE account's entry (the current one by default). Other accounts'
|
|
64
|
+
* files are untouched; the pointer moves to a survivor, or is deleted when
|
|
65
|
+
* nothing is left.
|
|
66
|
+
*/
|
|
67
|
+
clear(accountId?: string): Promise<void>;
|
|
27
68
|
}
|
|
69
|
+
export declare function openSessionStorage(options?: {
|
|
70
|
+
filePath?: string;
|
|
71
|
+
}): Promise<SessionStore>;
|
|
28
72
|
//# sourceMappingURL=session.d.ts.map
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AA6CA,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG/B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AAEjD,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAGpD;AAED;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IAGjD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE;IAH9B,QAAQ,CAAC,IAAI,6BAA6B;gBAE/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EAAE,EAC5B,IAAI,GAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAA2C;CAalF;AAqBD,qBAAa,YAAY;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAKjB,QAAQ,CAAC,EAAE,MAAM;IAK7B,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,CAAC,WAAW;YAIL,QAAQ;IAStB;;;;OAIG;YACW,WAAW;YAIX,WAAW;YAiBX,oBAAoB;IAkBlC,+CAA+C;IACzC,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBvC,+EAA+E;IACzE,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOhD;;;;OAIG;IACG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAe3D;;;OAGG;IACG,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7C;;;;OAIG;IACG,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAoC/C;AAED,wBAAsB,kBAAkB,CACtC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,YAAY,CAAC,CAEvB"}
|