agent-embassy 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/CONTRIBUTING.md +122 -0
  3. package/LICENSE +21 -0
  4. package/README.md +185 -0
  5. package/README.zh-CN.md +185 -0
  6. package/SECURITY.md +224 -0
  7. package/assets/live-dashboard/app.css +1610 -0
  8. package/assets/mark-seal.svg +7 -0
  9. package/assets/mark.svg +7 -0
  10. package/assets/social-preview.png +0 -0
  11. package/assets/vendor/react/LICENSE +21 -0
  12. package/assets/vendor/react/react-dom.production.min.js +267 -0
  13. package/assets/vendor/react/react.production.min.js +31 -0
  14. package/dist/src/errors.d.ts +5 -0
  15. package/dist/src/errors.js +11 -0
  16. package/dist/src/errors.js.map +1 -0
  17. package/dist/src/gateway/claude-compatibility-scratch.d.ts +18 -0
  18. package/dist/src/gateway/claude-compatibility-scratch.js +158 -0
  19. package/dist/src/gateway/claude-compatibility-scratch.js.map +1 -0
  20. package/dist/src/gateway/claude-helper-client.d.ts +43 -0
  21. package/dist/src/gateway/claude-helper-client.js +212 -0
  22. package/dist/src/gateway/claude-helper-client.js.map +1 -0
  23. package/dist/src/gateway/claude-helper-protocol.d.ts +172 -0
  24. package/dist/src/gateway/claude-helper-protocol.js +373 -0
  25. package/dist/src/gateway/claude-helper-protocol.js.map +1 -0
  26. package/dist/src/gateway/claude-helper-supervisor.d.ts +74 -0
  27. package/dist/src/gateway/claude-helper-supervisor.js +497 -0
  28. package/dist/src/gateway/claude-helper-supervisor.js.map +1 -0
  29. package/dist/src/gateway/claude-helper.d.ts +1 -0
  30. package/dist/src/gateway/claude-helper.js +269 -0
  31. package/dist/src/gateway/claude-helper.js.map +1 -0
  32. package/dist/src/gateway/claude-peer.d.ts +273 -0
  33. package/dist/src/gateway/claude-peer.js +2359 -0
  34. package/dist/src/gateway/claude-peer.js.map +1 -0
  35. package/dist/src/gateway/claude-runtime.d.ts +40 -0
  36. package/dist/src/gateway/claude-runtime.js +302 -0
  37. package/dist/src/gateway/claude-runtime.js.map +1 -0
  38. package/dist/src/gateway/cli-copy.d.ts +8 -0
  39. package/dist/src/gateway/cli-copy.en.d.ts +13 -0
  40. package/dist/src/gateway/cli-copy.en.js +43 -0
  41. package/dist/src/gateway/cli-copy.en.js.map +1 -0
  42. package/dist/src/gateway/cli-copy.js +19 -0
  43. package/dist/src/gateway/cli-copy.js.map +1 -0
  44. package/dist/src/gateway/cli-copy.zh-CN.d.ts +13 -0
  45. package/dist/src/gateway/cli-copy.zh-CN.js +43 -0
  46. package/dist/src/gateway/cli-copy.zh-CN.js.map +1 -0
  47. package/dist/src/gateway/cli.d.ts +44 -0
  48. package/dist/src/gateway/cli.js +969 -0
  49. package/dist/src/gateway/cli.js.map +1 -0
  50. package/dist/src/gateway/codex-app-server.d.ts +310 -0
  51. package/dist/src/gateway/codex-app-server.js +1746 -0
  52. package/dist/src/gateway/codex-app-server.js.map +1 -0
  53. package/dist/src/gateway/codex-local-transport.d.ts +81 -0
  54. package/dist/src/gateway/codex-local-transport.js +617 -0
  55. package/dist/src/gateway/codex-local-transport.js.map +1 -0
  56. package/dist/src/gateway/codex-registration-generation.d.ts +5 -0
  57. package/dist/src/gateway/codex-registration-generation.js +19 -0
  58. package/dist/src/gateway/codex-registration-generation.js.map +1 -0
  59. package/dist/src/gateway/codex-registration-succession.d.ts +209 -0
  60. package/dist/src/gateway/codex-registration-succession.js +588 -0
  61. package/dist/src/gateway/codex-registration-succession.js.map +1 -0
  62. package/dist/src/gateway/compatibility.d.ts +70 -0
  63. package/dist/src/gateway/compatibility.js +252 -0
  64. package/dist/src/gateway/compatibility.js.map +1 -0
  65. package/dist/src/gateway/config.d.ts +24 -0
  66. package/dist/src/gateway/config.js +130 -0
  67. package/dist/src/gateway/config.js.map +1 -0
  68. package/dist/src/gateway/control.d.ts +308 -0
  69. package/dist/src/gateway/control.js +1573 -0
  70. package/dist/src/gateway/control.js.map +1 -0
  71. package/dist/src/gateway/dashboard-copy.d.ts +7 -0
  72. package/dist/src/gateway/dashboard-copy.en.d.ts +506 -0
  73. package/dist/src/gateway/dashboard-copy.en.js +507 -0
  74. package/dist/src/gateway/dashboard-copy.en.js.map +1 -0
  75. package/dist/src/gateway/dashboard-copy.js +516 -0
  76. package/dist/src/gateway/dashboard-copy.js.map +1 -0
  77. package/dist/src/gateway/dashboard-copy.zh-CN.d.ts +506 -0
  78. package/dist/src/gateway/dashboard-copy.zh-CN.js +507 -0
  79. package/dist/src/gateway/dashboard-copy.zh-CN.js.map +1 -0
  80. package/dist/src/gateway/dashboard-model.d.ts +207 -0
  81. package/dist/src/gateway/dashboard-model.js +720 -0
  82. package/dist/src/gateway/dashboard-model.js.map +1 -0
  83. package/dist/src/gateway/dashboard.d.ts +26 -0
  84. package/dist/src/gateway/dashboard.js +941 -0
  85. package/dist/src/gateway/dashboard.js.map +1 -0
  86. package/dist/src/gateway/delivery-machine.d.ts +235 -0
  87. package/dist/src/gateway/delivery-machine.js +540 -0
  88. package/dist/src/gateway/delivery-machine.js.map +1 -0
  89. package/dist/src/gateway/instance-lease.d.ts +21 -0
  90. package/dist/src/gateway/instance-lease.js +549 -0
  91. package/dist/src/gateway/instance-lease.js.map +1 -0
  92. package/dist/src/gateway/live-dashboard-app/app.js +2914 -0
  93. package/dist/src/gateway/live-dashboard-assets.d.ts +10 -0
  94. package/dist/src/gateway/live-dashboard-assets.js +73 -0
  95. package/dist/src/gateway/live-dashboard-assets.js.map +1 -0
  96. package/dist/src/gateway/live-dashboard-bootstrap.d.ts +36 -0
  97. package/dist/src/gateway/live-dashboard-bootstrap.js +176 -0
  98. package/dist/src/gateway/live-dashboard-bootstrap.js.map +1 -0
  99. package/dist/src/gateway/live-dashboard-command.d.ts +54 -0
  100. package/dist/src/gateway/live-dashboard-command.js +324 -0
  101. package/dist/src/gateway/live-dashboard-command.js.map +1 -0
  102. package/dist/src/gateway/live-dashboard-http.d.ts +41 -0
  103. package/dist/src/gateway/live-dashboard-http.js +445 -0
  104. package/dist/src/gateway/live-dashboard-http.js.map +1 -0
  105. package/dist/src/gateway/live-dashboard-protocol.d.ts +38 -0
  106. package/dist/src/gateway/live-dashboard-protocol.js +156 -0
  107. package/dist/src/gateway/live-dashboard-protocol.js.map +1 -0
  108. package/dist/src/gateway/live-dashboard-server.d.ts +33 -0
  109. package/dist/src/gateway/live-dashboard-server.js +130 -0
  110. package/dist/src/gateway/live-dashboard-server.js.map +1 -0
  111. package/dist/src/gateway/live-dashboard-stream.d.ts +46 -0
  112. package/dist/src/gateway/live-dashboard-stream.js +233 -0
  113. package/dist/src/gateway/live-dashboard-stream.js.map +1 -0
  114. package/dist/src/gateway/live-dashboard.d.ts +31 -0
  115. package/dist/src/gateway/live-dashboard.js +190 -0
  116. package/dist/src/gateway/live-dashboard.js.map +1 -0
  117. package/dist/src/gateway/locale.d.ts +4 -0
  118. package/dist/src/gateway/locale.js +10 -0
  119. package/dist/src/gateway/locale.js.map +1 -0
  120. package/dist/src/gateway/progress-watch-machine.d.ts +97 -0
  121. package/dist/src/gateway/progress-watch-machine.js +172 -0
  122. package/dist/src/gateway/progress-watch-machine.js.map +1 -0
  123. package/dist/src/gateway/providers.d.ts +287 -0
  124. package/dist/src/gateway/providers.js +2451 -0
  125. package/dist/src/gateway/providers.js.map +1 -0
  126. package/dist/src/gateway/server.d.ts +57 -0
  127. package/dist/src/gateway/server.js +264 -0
  128. package/dist/src/gateway/server.js.map +1 -0
  129. package/dist/src/gateway/service.d.ts +449 -0
  130. package/dist/src/gateway/service.js +4831 -0
  131. package/dist/src/gateway/service.js.map +1 -0
  132. package/dist/src/gateway/store.d.ts +340 -0
  133. package/dist/src/gateway/store.js +4047 -0
  134. package/dist/src/gateway/store.js.map +1 -0
  135. package/dist/src/gateway/types.d.ts +514 -0
  136. package/dist/src/gateway/types.js +414 -0
  137. package/dist/src/gateway/types.js.map +1 -0
  138. package/dist/src/mutex.d.ts +4 -0
  139. package/dist/src/mutex.js +23 -0
  140. package/dist/src/mutex.js.map +1 -0
  141. package/docs/DESIGN.md +134 -0
  142. package/docs/GATEWAY-ARCHITECTURE.md +858 -0
  143. package/package.json +80 -0
  144. package/skills/embassy-peer/SKILL.md +198 -0
  145. package/skills/embassy-peer/agents/openai.yaml +4 -0
@@ -0,0 +1,617 @@
1
+ import { createHash } from "node:crypto";
2
+ import { spawn as nodeSpawn, } from "node:child_process";
3
+ import { constants as fsConstants } from "node:fs";
4
+ import { access, lstat, realpath, stat, } from "node:fs/promises";
5
+ import { userInfo } from "node:os";
6
+ import path from "node:path";
7
+ import { Duplex } from "node:stream";
8
+ import { CODEX_APP_SERVER_WRITABLE_VERSIONS, WebSocketDuplexTransport, } from "./codex-app-server.js";
9
+ import { sharesCompatibilityMajor, } from "./compatibility.js";
10
+ const APP_SERVER_CONTROL_DIRECTORY = "app-server-control";
11
+ const APP_SERVER_CONTROL_SOCKET = "app-server-control.sock";
12
+ const DEFAULT_MAX_STDERR_BYTES = 64 * 1024;
13
+ const DEFAULT_SPAWN_TIMEOUT_MS = 5_000;
14
+ const DEFAULT_GRACEFUL_EXIT_MS = 2_000;
15
+ const DEFAULT_SIGNAL_TIMEOUT_MS = 750;
16
+ const VERSION_PATTERN = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
17
+ const HOST_PATTERN = /^[a-z0-9](?:[a-z0-9.-]{0,61}[a-z0-9])?$/;
18
+ export class LocalCodexTransportError extends Error {
19
+ code;
20
+ constructor(code) {
21
+ super(code);
22
+ this.name = "LocalCodexTransportError";
23
+ this.code = code;
24
+ }
25
+ }
26
+ function positiveInteger(value, fallback) {
27
+ const candidate = value ?? fallback;
28
+ if (!Number.isSafeInteger(candidate) || candidate <= 0) {
29
+ throw new LocalCodexTransportError("INVALID_CONFIGURATION");
30
+ }
31
+ return candidate;
32
+ }
33
+ export function validateLocalCodexHome(suppliedHome, loginHome) {
34
+ const valid = (value) => value.length > 0 &&
35
+ value.length <= 4_096 &&
36
+ !value.includes("\0") &&
37
+ path.isAbsolute(value) &&
38
+ path.normalize(value) === value &&
39
+ path.parse(value).root !== value;
40
+ if (!valid(suppliedHome ?? "") || !valid(loginHome) || suppliedHome !== loginHome) {
41
+ throw new LocalCodexTransportError("HOME_INVALID");
42
+ }
43
+ return loginHome;
44
+ }
45
+ export function buildLocalCodexProxyEnvironment(home, source) {
46
+ const environment = {
47
+ CODEX_HOME: path.join(home, ".codex"),
48
+ HOME: home,
49
+ LC_ALL: "C",
50
+ PATH: "/usr/bin:/bin:/usr/sbin:/sbin",
51
+ };
52
+ for (const key of ["USER", "LOGNAME"]) {
53
+ const value = source[key];
54
+ if (value !== undefined &&
55
+ value.length > 0 &&
56
+ value.length <= 256 &&
57
+ !value.includes("\0") &&
58
+ !/[\r\n]/.test(value)) {
59
+ environment[key] = value;
60
+ }
61
+ }
62
+ return environment;
63
+ }
64
+ function assertOwnedPrivate(metadata, exactMode) {
65
+ const uid = process.getuid?.();
66
+ if ((uid !== undefined && metadata.uid !== uid) ||
67
+ (exactMode === undefined
68
+ ? (metadata.mode & 0o022) !== 0
69
+ : (metadata.mode & 0o777) !== exactMode)) {
70
+ throw new LocalCodexTransportError("MANAGED_CODEX_INVALID");
71
+ }
72
+ }
73
+ function managedCodexTargetTriple(target) {
74
+ if (target.platform !== "darwin")
75
+ return undefined;
76
+ if (target.architecture === "arm64")
77
+ return "aarch64-apple-darwin";
78
+ if (target.architecture === "x64")
79
+ return "x86_64-apple-darwin";
80
+ return undefined;
81
+ }
82
+ async function resolveObservedManagedLocalCodexInstallation(home, certifiedVersion, runtimeTarget) {
83
+ const currentLink = path.join(home, ".codex", "packages", "standalone", "current");
84
+ let releaseLeaf;
85
+ try {
86
+ releaseLeaf = path.basename(await realpath(currentLink));
87
+ }
88
+ catch {
89
+ throw new LocalCodexTransportError("MANAGED_CODEX_UNAVAILABLE");
90
+ }
91
+ const targetTriple = managedCodexTargetTriple(runtimeTarget);
92
+ const observedVersion = targetTriple !== undefined && releaseLeaf.endsWith(`-${targetTriple}`)
93
+ ? releaseLeaf.slice(0, -1 - targetTriple.length)
94
+ : releaseLeaf;
95
+ if (!sharesCompatibilityMajor(certifiedVersion, observedVersion)) {
96
+ throw new LocalCodexTransportError("APP_SERVER_VERSION_MISMATCH");
97
+ }
98
+ return await resolveManagedLocalCodexInstallation(home, observedVersion, runtimeTarget);
99
+ }
100
+ export async function resolveManagedLocalCodexInstallation(home, appServerVersion, runtimeTarget = {
101
+ platform: process.platform,
102
+ architecture: process.arch,
103
+ }) {
104
+ if (!VERSION_PATTERN.test(appServerVersion)) {
105
+ throw new LocalCodexTransportError("INVALID_CONFIGURATION");
106
+ }
107
+ const standalone = path.join(home, ".codex", "packages", "standalone");
108
+ const currentLink = path.join(standalone, "current");
109
+ const releasesDirectory = path.join(standalone, "releases");
110
+ const currentBinary = path.join(currentLink, "codex");
111
+ let resolvedReleases;
112
+ let resolvedCurrent;
113
+ let resolvedBinary;
114
+ try {
115
+ const releasesMetadata = await lstat(releasesDirectory);
116
+ const currentMetadata = await lstat(currentLink);
117
+ if (!releasesMetadata.isDirectory() || !currentMetadata.isSymbolicLink()) {
118
+ throw new LocalCodexTransportError("MANAGED_CODEX_INVALID");
119
+ }
120
+ assertOwnedPrivate(releasesMetadata, undefined);
121
+ if (typeof process.getuid === "function" &&
122
+ currentMetadata.uid !== process.getuid()) {
123
+ throw new LocalCodexTransportError("MANAGED_CODEX_INVALID");
124
+ }
125
+ resolvedReleases = await realpath(releasesDirectory);
126
+ resolvedCurrent = await realpath(currentLink);
127
+ resolvedBinary = await realpath(currentBinary);
128
+ }
129
+ catch (error) {
130
+ if (error instanceof LocalCodexTransportError)
131
+ throw error;
132
+ throw new LocalCodexTransportError("MANAGED_CODEX_UNAVAILABLE");
133
+ }
134
+ const releasesPrefix = `${resolvedReleases}${path.sep}`;
135
+ const currentPrefix = `${resolvedCurrent}${path.sep}`;
136
+ if (!resolvedCurrent.startsWith(releasesPrefix) ||
137
+ path.dirname(resolvedCurrent) !== resolvedReleases ||
138
+ !resolvedBinary.startsWith(currentPrefix)) {
139
+ throw new LocalCodexTransportError("MANAGED_CODEX_INVALID");
140
+ }
141
+ // Managed packages use either the version alone or the version plus the
142
+ // exact target triple for this runtime. Never accept a caller-invented
143
+ // suffix or a binary for a different architecture.
144
+ const targetTriple = managedCodexTargetTriple(runtimeTarget);
145
+ const allowedReleaseLeaves = new Set([
146
+ appServerVersion,
147
+ ...(targetTriple === undefined
148
+ ? []
149
+ : [`${appServerVersion}-${targetTriple}`]),
150
+ ]);
151
+ const releaseLeaf = path.basename(resolvedCurrent);
152
+ if (!allowedReleaseLeaves.has(releaseLeaf)) {
153
+ throw new LocalCodexTransportError("APP_SERVER_VERSION_MISMATCH");
154
+ }
155
+ let binaryMetadata;
156
+ try {
157
+ const releaseMetadata = await lstat(resolvedCurrent);
158
+ if (releaseMetadata.isSymbolicLink() || !releaseMetadata.isDirectory()) {
159
+ throw new LocalCodexTransportError("MANAGED_CODEX_INVALID");
160
+ }
161
+ assertOwnedPrivate(releaseMetadata, undefined);
162
+ binaryMetadata = await stat(resolvedBinary);
163
+ if (!binaryMetadata.isFile()) {
164
+ throw new LocalCodexTransportError("MANAGED_CODEX_INVALID");
165
+ }
166
+ assertOwnedPrivate(binaryMetadata, undefined);
167
+ await access(resolvedBinary, fsConstants.X_OK);
168
+ }
169
+ catch (error) {
170
+ if (error instanceof LocalCodexTransportError)
171
+ throw error;
172
+ throw new LocalCodexTransportError("MANAGED_CODEX_INVALID");
173
+ }
174
+ const controlDirectory = path.join(home, ".codex", APP_SERVER_CONTROL_DIRECTORY);
175
+ const controlSocketPath = path.join(controlDirectory, APP_SERVER_CONTROL_SOCKET);
176
+ let socketMetadata;
177
+ try {
178
+ const directoryMetadata = await lstat(controlDirectory);
179
+ socketMetadata = await lstat(controlSocketPath);
180
+ if (directoryMetadata.isSymbolicLink() ||
181
+ !directoryMetadata.isDirectory() ||
182
+ socketMetadata.isSymbolicLink() ||
183
+ !socketMetadata.isSocket()) {
184
+ throw new LocalCodexTransportError("LOCAL_APP_SERVER_ENDPOINT_UNSAFE");
185
+ }
186
+ assertOwnedPrivate(directoryMetadata, 0o700);
187
+ assertOwnedPrivate(socketMetadata, 0o600);
188
+ }
189
+ catch (error) {
190
+ if (error instanceof LocalCodexTransportError) {
191
+ if (error.code === "MANAGED_CODEX_INVALID") {
192
+ throw new LocalCodexTransportError("LOCAL_APP_SERVER_ENDPOINT_UNSAFE");
193
+ }
194
+ throw error;
195
+ }
196
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
197
+ throw new LocalCodexTransportError("LOCAL_APP_SERVER_NOT_RUNNING");
198
+ }
199
+ throw new LocalCodexTransportError("LOCAL_APP_SERVER_ENDPOINT_UNSAFE");
200
+ }
201
+ const endpointGeneration = `local_${createHash("sha256")
202
+ .update(appServerVersion)
203
+ .update("\0")
204
+ .update(releaseLeaf)
205
+ .update("\0")
206
+ .update(String(binaryMetadata.dev))
207
+ .update(":")
208
+ .update(String(binaryMetadata.ino))
209
+ .update(":")
210
+ .update(String(binaryMetadata.size))
211
+ .update(":")
212
+ .update(String(binaryMetadata.birthtimeMs))
213
+ .update(":")
214
+ .update(String(binaryMetadata.ctimeMs))
215
+ .update("\0")
216
+ .update(String(socketMetadata.dev))
217
+ .update(":")
218
+ .update(String(socketMetadata.ino))
219
+ .update(":")
220
+ .update(String(socketMetadata.birthtimeMs))
221
+ .update(":")
222
+ .update(String(socketMetadata.ctimeMs))
223
+ .digest("hex")
224
+ .slice(0, 32)}`;
225
+ return {
226
+ appServerVersion,
227
+ binaryPath: resolvedBinary,
228
+ controlSocketPath,
229
+ endpointGeneration,
230
+ home,
231
+ };
232
+ }
233
+ class ChildProxyDuplex extends Duplex {
234
+ child;
235
+ constructor(child) {
236
+ super();
237
+ this.child = child;
238
+ this.on("error", () => undefined);
239
+ child.stdout.pause();
240
+ child.stdout.on("data", (chunk) => {
241
+ if (!this.push(chunk))
242
+ child.stdout.pause();
243
+ });
244
+ child.stdout.on("end", () => this.push(null));
245
+ child.stdout.on("error", () => this.destroy(new LocalCodexTransportError("TRANSPORT_CONNECT_FAILED")));
246
+ child.stdin.on("error", () => this.destroy(new LocalCodexTransportError("TRANSPORT_CONNECT_FAILED")));
247
+ child.on("error", () => this.destroy(new LocalCodexTransportError("SPAWN_FAILED")));
248
+ }
249
+ _read() {
250
+ this.child.stdout.resume();
251
+ }
252
+ _write(chunk, encoding, callback) {
253
+ if (!this.child.stdin.writable) {
254
+ callback(new LocalCodexTransportError("TRANSPORT_CONNECT_FAILED"));
255
+ return;
256
+ }
257
+ this.child.stdin.write(chunk, encoding, callback);
258
+ }
259
+ _final(callback) {
260
+ this.child.stdin.end(callback);
261
+ }
262
+ _destroy(error, callback) {
263
+ this.child.stdin.destroy();
264
+ this.child.stdout.destroy();
265
+ callback(error);
266
+ }
267
+ setKeepAlive() {
268
+ return this;
269
+ }
270
+ setNoDelay() {
271
+ return this;
272
+ }
273
+ setTimeout(_timeout, callback) {
274
+ if (callback)
275
+ this.once("timeout", callback);
276
+ return this;
277
+ }
278
+ }
279
+ function waitForSpawn(child, timeoutMs) {
280
+ return new Promise((resolve, reject) => {
281
+ let settled = false;
282
+ const finish = (error) => {
283
+ if (settled)
284
+ return;
285
+ settled = true;
286
+ clearTimeout(timer);
287
+ child.off("spawn", onSpawn);
288
+ child.off("error", onError);
289
+ if (error)
290
+ reject(error);
291
+ else
292
+ resolve();
293
+ };
294
+ const onSpawn = () => finish();
295
+ const onError = () => finish(new LocalCodexTransportError("SPAWN_FAILED"));
296
+ const timer = setTimeout(() => finish(new LocalCodexTransportError("SPAWN_TIMEOUT")), timeoutMs);
297
+ child.once("spawn", onSpawn);
298
+ child.once("error", onError);
299
+ });
300
+ }
301
+ function groupExists(processGroupId, killProcess) {
302
+ try {
303
+ killProcess(-processGroupId, 0);
304
+ return true;
305
+ }
306
+ catch (error) {
307
+ return !(error instanceof Error && "code" in error && error.code === "ESRCH");
308
+ }
309
+ }
310
+ async function waitForGroupGone(processGroupId, timeoutMs, killProcess, sleep) {
311
+ const deadline = Date.now() + timeoutMs;
312
+ while (groupExists(processGroupId, killProcess)) {
313
+ if (Date.now() >= deadline)
314
+ return false;
315
+ await sleep(25);
316
+ }
317
+ return true;
318
+ }
319
+ function waitForChildClose(child, timeoutMs) {
320
+ if (child.exitCode !== null || child.signalCode !== null) {
321
+ return Promise.resolve(true);
322
+ }
323
+ return new Promise((resolve) => {
324
+ let settled = false;
325
+ const finish = (closed) => {
326
+ if (settled)
327
+ return;
328
+ settled = true;
329
+ clearTimeout(timer);
330
+ child.off("close", onClose);
331
+ resolve(closed);
332
+ };
333
+ const onClose = () => finish(true);
334
+ const timer = setTimeout(() => finish(false), timeoutMs);
335
+ child.once("close", onClose);
336
+ });
337
+ }
338
+ export async function terminateOwnedLocalProxy(child, processGroupId, options) {
339
+ if (child.pid !== processGroupId ||
340
+ processGroupId <= 1 ||
341
+ processGroupId === process.pid) {
342
+ return false;
343
+ }
344
+ const killProcess = options.killProcess ?? process.kill.bind(process);
345
+ const sleep = options.sleep ??
346
+ ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
347
+ child.stdin.end();
348
+ let groupGone = await waitForGroupGone(processGroupId, options.gracefulExitMs, killProcess, sleep);
349
+ if (!groupGone) {
350
+ try {
351
+ killProcess(-processGroupId, "SIGTERM");
352
+ }
353
+ catch (error) {
354
+ if (!(error instanceof Error && "code" in error && error.code === "ESRCH")) {
355
+ return false;
356
+ }
357
+ }
358
+ groupGone = await waitForGroupGone(processGroupId, options.signalTimeoutMs, killProcess, sleep);
359
+ }
360
+ if (!groupGone) {
361
+ try {
362
+ killProcess(-processGroupId, "SIGKILL");
363
+ }
364
+ catch (error) {
365
+ if (!(error instanceof Error && "code" in error && error.code === "ESRCH")) {
366
+ return false;
367
+ }
368
+ }
369
+ groupGone = await waitForGroupGone(processGroupId, options.signalTimeoutMs, killProcess, sleep);
370
+ }
371
+ const childClosed = await waitForChildClose(child, options.signalTimeoutMs);
372
+ return groupGone && childClosed;
373
+ }
374
+ class OwnedTransport {
375
+ delegate;
376
+ child;
377
+ stream;
378
+ cleanup;
379
+ onFinished;
380
+ closePromise;
381
+ cleanupConfirmed = false;
382
+ constructor(delegate, child, stream, cleanup, onFinished) {
383
+ this.delegate = delegate;
384
+ this.child = child;
385
+ this.stream = stream;
386
+ this.cleanup = cleanup;
387
+ this.onFinished = onFinished;
388
+ delegate.onClose(() => {
389
+ void this.close().catch(() => undefined);
390
+ });
391
+ delegate.onError(() => {
392
+ void this.close().catch(() => undefined);
393
+ });
394
+ }
395
+ send(payload) {
396
+ return this.delegate.send(payload);
397
+ }
398
+ onMessage(listener) {
399
+ return this.delegate.onMessage(listener);
400
+ }
401
+ onClose(listener) {
402
+ return this.delegate.onClose(listener);
403
+ }
404
+ onError(listener) {
405
+ return this.delegate.onError(listener);
406
+ }
407
+ close() {
408
+ // Defer closeOnce until after closePromise is assigned so a synchronous
409
+ // delegate close callback cannot re-enter cleanup.
410
+ this.closePromise ??= Promise.resolve().then(() => this.closeOnce());
411
+ return this.closePromise;
412
+ }
413
+ failClosed() {
414
+ this.stream.destroy(new LocalCodexTransportError("PROXY_STDERR_LIMIT"));
415
+ void this.close();
416
+ }
417
+ async closeOnce() {
418
+ try {
419
+ await this.delegate.close().catch(() => undefined);
420
+ this.stream.end();
421
+ this.cleanupConfirmed = await this.cleanup();
422
+ if (!this.cleanupConfirmed) {
423
+ throw new LocalCodexTransportError("CLEANUP_FAILED");
424
+ }
425
+ }
426
+ finally {
427
+ this.child.stderr.destroy();
428
+ this.onFinished(this.cleanupConfirmed);
429
+ }
430
+ }
431
+ }
432
+ class Factory {
433
+ installation;
434
+ options;
435
+ dependencies;
436
+ protocol = "codex-app-server";
437
+ protocolVersion;
438
+ schemaCompatibility;
439
+ writeCompatibility;
440
+ endpointGeneration;
441
+ appServerVersion;
442
+ compatibilityPolicy;
443
+ hostId;
444
+ writableReady;
445
+ closed = false;
446
+ active = new Set();
447
+ constructor(installation, options, dependencies) {
448
+ this.installation = installation;
449
+ this.options = options;
450
+ this.dependencies = dependencies;
451
+ this.endpointGeneration = installation.endpointGeneration;
452
+ this.appServerVersion = installation.appServerVersion;
453
+ this.compatibilityPolicy = options.compatibilityPolicy ?? "strict";
454
+ this.protocolVersion = installation.appServerVersion;
455
+ this.hostId = options.hostId ?? "this-mac";
456
+ this.writableReady = options.writableProtocolAttested === true;
457
+ const compatibility = {
458
+ appServerVersion: this.appServerVersion,
459
+ endpointGeneration: this.endpointGeneration,
460
+ protocol: "app-server-v2-stable",
461
+ ...(CODEX_APP_SERVER_WRITABLE_VERSIONS.includes(this.appServerVersion)
462
+ ? {}
463
+ : { observedSchemaCandidate: true }),
464
+ steering: {
465
+ method: "turn/steer",
466
+ requestSchema: "expected-turn-id-text-v1",
467
+ deliveryBoundary: "next-tool-call-boundary",
468
+ },
469
+ };
470
+ this.schemaCompatibility =
471
+ compatibility;
472
+ this.writeCompatibility = this.writableReady
473
+ ? compatibility
474
+ : null;
475
+ }
476
+ async connectTransport() {
477
+ if (this.closed)
478
+ throw new LocalCodexTransportError("FACTORY_CLOSED");
479
+ const current = await resolveManagedLocalCodexInstallation(this.installation.home, this.installation.appServerVersion);
480
+ if (current.endpointGeneration !== this.installation.endpointGeneration ||
481
+ current.binaryPath !== this.installation.binaryPath) {
482
+ throw new LocalCodexTransportError("ENDPOINT_GENERATION_CHANGED");
483
+ }
484
+ let child;
485
+ try {
486
+ child = this.dependencies.spawn(this.installation.binaryPath, ["app-server", "proxy"], {
487
+ cwd: path.parse(this.installation.home).root,
488
+ detached: true,
489
+ env: buildLocalCodexProxyEnvironment(this.installation.home, this.options.environment ?? process.env),
490
+ shell: false,
491
+ stdio: ["pipe", "pipe", "pipe"],
492
+ });
493
+ }
494
+ catch {
495
+ throw new LocalCodexTransportError("SPAWN_FAILED");
496
+ }
497
+ const processGroupId = child.pid;
498
+ if (processGroupId === undefined ||
499
+ processGroupId <= 1 ||
500
+ processGroupId === process.pid) {
501
+ child.kill("SIGKILL");
502
+ throw new LocalCodexTransportError("SPAWN_FAILED");
503
+ }
504
+ const stream = new ChildProxyDuplex(child);
505
+ let stderrBytes = 0;
506
+ let owned;
507
+ let stderrExceeded = false;
508
+ child.stderr.on("data", (chunk) => {
509
+ stderrBytes += chunk.length;
510
+ if (!stderrExceeded && stderrBytes > this.options.maxStderrBytes) {
511
+ stderrExceeded = true;
512
+ if (owned)
513
+ owned.failClosed();
514
+ else
515
+ stream.destroy(new LocalCodexTransportError("PROXY_STDERR_LIMIT"));
516
+ }
517
+ });
518
+ const cleanup = () => terminateOwnedLocalProxy(child, processGroupId, {
519
+ gracefulExitMs: this.options.gracefulExitMs,
520
+ killProcess: this.dependencies.killProcess,
521
+ signalTimeoutMs: this.options.signalTimeoutMs,
522
+ sleep: this.dependencies.sleep,
523
+ });
524
+ let connectedTransport;
525
+ try {
526
+ await waitForSpawn(child, this.options.spawnTimeoutMs);
527
+ if (stderrExceeded) {
528
+ throw new LocalCodexTransportError("PROXY_STDERR_LIMIT");
529
+ }
530
+ connectedTransport = await this.dependencies.connectWebSocket(stream, this.options.webSocket ?? {});
531
+ if (stderrExceeded) {
532
+ throw new LocalCodexTransportError("PROXY_STDERR_LIMIT");
533
+ }
534
+ // The managed release or already-running App Server endpoint may be
535
+ // replaced while the proxy handshake is in flight. Re-attest after the
536
+ // handshake and never return a transport bound across generations.
537
+ const postHandshake = await resolveManagedLocalCodexInstallation(this.installation.home, this.installation.appServerVersion);
538
+ if (postHandshake.endpointGeneration !==
539
+ this.installation.endpointGeneration ||
540
+ postHandshake.binaryPath !== this.installation.binaryPath) {
541
+ throw new LocalCodexTransportError("ENDPOINT_GENERATION_CHANGED");
542
+ }
543
+ if (stderrExceeded) {
544
+ throw new LocalCodexTransportError("PROXY_STDERR_LIMIT");
545
+ }
546
+ owned = new OwnedTransport(connectedTransport, child, stream, cleanup, (cleanupConfirmed) => {
547
+ if (owned && cleanupConfirmed)
548
+ this.active.delete(owned);
549
+ });
550
+ this.active.add(owned);
551
+ return owned;
552
+ }
553
+ catch (error) {
554
+ await connectedTransport?.close().catch(() => undefined);
555
+ stream.destroy();
556
+ const cleaned = await cleanup();
557
+ child.stderr.destroy();
558
+ if (!cleaned)
559
+ throw new LocalCodexTransportError("CLEANUP_FAILED");
560
+ if (error instanceof LocalCodexTransportError)
561
+ throw error;
562
+ throw new LocalCodexTransportError("TRANSPORT_CONNECT_FAILED");
563
+ }
564
+ }
565
+ async close() {
566
+ if (this.closed)
567
+ return;
568
+ this.closed = true;
569
+ const results = await Promise.allSettled([...this.active].map((transport) => transport.close()));
570
+ if (results.some((result) => result.status === "rejected")) {
571
+ throw new LocalCodexTransportError("CLEANUP_FAILED");
572
+ }
573
+ }
574
+ }
575
+ export async function createLocalCodexTransportFactory(options, dependencies = {}) {
576
+ if (!VERSION_PATTERN.test(options.appServerVersion) ||
577
+ !HOST_PATTERN.test(options.hostId ?? "this-mac")) {
578
+ throw new LocalCodexTransportError("INVALID_CONFIGURATION");
579
+ }
580
+ const source = options.environment ?? process.env;
581
+ const loginHome = (dependencies.loginHome ?? (() => userInfo().homedir))();
582
+ const home = validateLocalCodexHome(source.HOME, loginHome);
583
+ const runtimeTarget = {
584
+ platform: process.platform,
585
+ architecture: process.arch,
586
+ };
587
+ let installation;
588
+ try {
589
+ installation = await resolveManagedLocalCodexInstallation(home, options.appServerVersion, runtimeTarget);
590
+ }
591
+ catch (error) {
592
+ if (options.compatibilityPolicy !== "observed" ||
593
+ !(error instanceof LocalCodexTransportError) ||
594
+ error.code !== "APP_SERVER_VERSION_MISMATCH") {
595
+ throw error;
596
+ }
597
+ installation = await resolveObservedManagedLocalCodexInstallation(home, options.appServerVersion, runtimeTarget);
598
+ }
599
+ const normalizedOptions = {
600
+ ...options,
601
+ gracefulExitMs: positiveInteger(options.gracefulExitMs, DEFAULT_GRACEFUL_EXIT_MS),
602
+ maxStderrBytes: positiveInteger(options.maxStderrBytes, DEFAULT_MAX_STDERR_BYTES),
603
+ signalTimeoutMs: positiveInteger(options.signalTimeoutMs, DEFAULT_SIGNAL_TIMEOUT_MS),
604
+ spawnTimeoutMs: positiveInteger(options.spawnTimeoutMs, DEFAULT_SPAWN_TIMEOUT_MS),
605
+ };
606
+ const normalizedDependencies = {
607
+ connectWebSocket: dependencies.connectWebSocket ?? WebSocketDuplexTransport.connect,
608
+ killProcess: dependencies.killProcess ?? process.kill.bind(process),
609
+ loginHome: dependencies.loginHome ?? (() => userInfo().homedir),
610
+ sleep: dependencies.sleep ??
611
+ ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds))),
612
+ spawn: dependencies.spawn ??
613
+ ((command, args, spawnOptions) => nodeSpawn(command, [...args], spawnOptions)),
614
+ };
615
+ return new Factory(installation, normalizedOptions, normalizedDependencies);
616
+ }
617
+ //# sourceMappingURL=codex-local-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-local-transport.js","sourceRoot":"","sources":["../../../src/gateway/codex-local-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,KAAK,IAAI,SAAS,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,IAAI,GACL,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,kCAAkC,EAClC,wBAAwB,GAKzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AAC1D,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAC5D,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AACvC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AACtC,MAAM,eAAe,GAAG,qCAAqC,CAAC;AAC9D,MAAM,YAAY,GAAG,yCAAyC,CAAC;AAkB/D,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,CAA+B;IAE5C,YAAY,IAAkC;QAC5C,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAoGD,SAAS,eAAe,CAAC,KAAyB,EAAE,QAAgB;IAClE,MAAM,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,YAAgC,EAChC,SAAiB;IAEjB,MAAM,KAAK,GAAG,CAAC,KAAa,EAAW,EAAE,CACvC,KAAK,CAAC,MAAM,GAAG,CAAC;QAChB,KAAK,CAAC,MAAM,IAAI,KAAK;QACrB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAClF,MAAM,IAAI,wBAAwB,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,IAAY,EACZ,MAAyB;IAEzB,MAAM,WAAW,GAAsB;QACrC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QACrC,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,+BAA+B;KACtC,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAU,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IACE,KAAK,KAAK,SAAS;YACnB,KAAK,CAAC,MAAM,GAAG,CAAC;YAChB,KAAK,CAAC,MAAM,IAAI,GAAG;YACnB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EACrB,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAuC,EACvC,SAA6B;IAE7B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC/B,IACE,CAAC,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC;QAC3C,CAAC,SAAS,KAAK,SAAS;YACtB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,SAAS,CAAC,EAC1C,CAAC;QACD,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAiC;IAEjC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACnD,IAAI,MAAM,CAAC,YAAY,KAAK,OAAO;QAAE,OAAO,sBAAsB,CAAC;IACnE,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK;QAAE,OAAO,qBAAqB,CAAC;IAChE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,4CAA4C,CACzD,IAAY,EACZ,gBAAwB,EACxB,aAAwC;IAExC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAC3B,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,SAAS,CACV,CAAC;IACF,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,wBAAwB,CAAC,2BAA2B,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,YAAY,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,eAAe,GACnB,YAAY,KAAK,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;QACpE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;QAChD,CAAC,CAAC,WAAW,CAAC;IAClB,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,EAAE,eAAe,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,wBAAwB,CAAC,6BAA6B,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,oCAAoC,CAC/C,IAAI,EACJ,eAAe,EACf,aAAa,CACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,IAAY,EACZ,gBAAwB,EACxB,gBAA2C;IACzC,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,YAAY,EAAE,OAAO,CAAC,IAAI;CAC3B;IAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,gBAAwB,CAAC;IAC7B,IAAI,eAAuB,CAAC;IAC5B,IAAI,cAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACxD,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC;YACzE,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;QAC9D,CAAC;QACD,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAChD,IACE,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;YACpC,eAAe,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EACxC,CAAC;YACD,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;QAC9D,CAAC;QACD,gBAAgB,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACrD,eAAe,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9C,cAAc,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,wBAAwB;YAAE,MAAM,KAAK,CAAC;QAC3D,MAAM,IAAI,wBAAwB,CAAC,2BAA2B,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,cAAc,GAAG,GAAG,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxD,MAAM,aAAa,GAAG,GAAG,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtD,IACE,CAAC,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,gBAAgB;QAClD,CAAC,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,EACzC,CAAC;QACD,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IAC9D,CAAC;IACD,wEAAwE;IACxE,uEAAuE;IACvE,mDAAmD;IACnD,MAAM,YAAY,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;QACnC,gBAAgB;QAChB,GAAG,CAAC,YAAY,KAAK,SAAS;YAC5B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,GAAG,gBAAgB,IAAI,YAAY,EAAE,CAAC,CAAC;KAC7C,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,wBAAwB,CAAC,6BAA6B,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,cAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;YACvE,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;QAC9D,CAAC;QACD,kBAAkB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QAC/C,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;QAC9D,CAAC;QACD,kBAAkB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,wBAAwB;YAAE,MAAM,KAAK,CAAC;QAC3D,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,IAAI,EACJ,QAAQ,EACR,4BAA4B,CAC7B,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CACjC,gBAAgB,EAChB,yBAAyB,CAC1B,CAAC;IACF,IAAI,cAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxD,cAAc,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChD,IACE,iBAAiB,CAAC,cAAc,EAAE;YAClC,CAAC,iBAAiB,CAAC,WAAW,EAAE;YAChC,cAAc,CAAC,cAAc,EAAE;YAC/B,CAAC,cAAc,CAAC,QAAQ,EAAE,EAC1B,CAAC;YACD,MAAM,IAAI,wBAAwB,CAAC,kCAAkC,CAAC,CAAC;QACzE,CAAC;QACD,kBAAkB,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAC7C,kBAAkB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBAC3C,MAAM,IAAI,wBAAwB,CAAC,kCAAkC,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzE,MAAM,IAAI,wBAAwB,CAAC,8BAA8B,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,IAAI,wBAAwB,CAAC,kCAAkC,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,kBAAkB,GAAG,SAAS,UAAU,CAAC,QAAQ,CAAC;SACrD,MAAM,CAAC,gBAAgB,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,WAAW,CAAC;SACnB,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAClC,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAClC,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SACnC,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;SAC1C,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SACtC,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAClC,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAClC,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;SAC1C,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SACtC,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAClB,OAAO;QACL,gBAAgB;QAChB,UAAU,EAAE,cAAc;QAC1B,iBAAiB;QACjB,kBAAkB;QAClB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,gBAAiB,SAAQ,MAAM;IACN;IAA7B,YAA6B,KAAiB;QAC5C,KAAK,EAAE,CAAC;QADmB,UAAK,GAAL,KAAK,CAAY;QAE5C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC,0BAA0B,CAAC,CAAC,CACvE,CAAC;QACF,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC,0BAA0B,CAAC,CAAC,CACvE,CAAC;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CACrB,IAAI,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC,cAAc,CAAC,CAAC,CAC3D,CAAC;IACJ,CAAC;IAEQ,KAAK;QACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAEQ,MAAM,CACb,KAAsB,EACtB,QAAwB,EACxB,QAAwC;QAExC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,wBAAwB,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEQ,MAAM,CAAC,QAAwC;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAEQ,QAAQ,CACf,KAAmB,EACnB,QAAwC;QAExC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5B,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,QAAgB,EAAE,QAAqB;QAChD,IAAI,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAAiB,EAAE,SAAiB;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,KAAgC,EAAE,EAAE;YAClD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5B,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;gBACpB,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,wBAAwB,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,wBAAwB,CAAC,eAAe,CAAC,CAAC,EAC3D,SAAS,CACV,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,cAAsB,EAAE,WAAwB;IACnE,IAAI,CAAC;QACH,WAAW,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,CACN,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CACpE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,cAAsB,EACtB,SAAiB,EACjB,WAAwB,EACxB,KAA8C;IAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiB,EAAE,SAAiB;IAC7D,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAAe,EAAE,EAAE;YACjC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAiB,EACjB,cAAsB,EACtB,OAKC;IAED,IACE,KAAK,CAAC,GAAG,KAAK,cAAc;QAC5B,cAAc,IAAI,CAAC;QACnB,cAAc,KAAK,OAAO,CAAC,GAAG,EAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,KAAK,GACT,OAAO,CAAC,KAAK;QACb,CAAC,CAAC,YAAoB,EAAE,EAAE,CACxB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IACvE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAClB,IAAI,SAAS,GAAG,MAAM,gBAAgB,CACpC,cAAc,EACd,OAAO,CAAC,cAAc,EACtB,WAAW,EACX,KAAK,CACN,CAAC;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC;YACH,WAAW,CAAC,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;gBAC3E,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,SAAS,GAAG,MAAM,gBAAgB,CAChC,cAAc,EACd,OAAO,CAAC,eAAe,EACvB,WAAW,EACX,KAAK,CACN,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC;YACH,WAAW,CAAC,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;gBAC3E,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,SAAS,GAAG,MAAM,gBAAgB,CAChC,cAAc,EACd,OAAO,CAAC,eAAe,EACvB,WAAW,EACX,KAAK,CACN,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5E,OAAO,SAAS,IAAI,WAAW,CAAC;AAClC,CAAC;AAED,MAAM,cAAc;IAKC;IACA;IACA;IACA;IACA;IARX,YAAY,CAA4B;IAChD,gBAAgB,GAAG,KAAK,CAAC;IAEzB,YACmB,QAAiC,EACjC,KAAiB,EACjB,MAAwB,EACxB,OAA+B,EAC/B,UAA+C;QAJ/C,aAAQ,GAAR,QAAQ,CAAyB;QACjC,UAAK,GAAL,KAAK,CAAY;QACjB,WAAM,GAAN,MAAM,CAAkB;QACxB,YAAO,GAAP,OAAO,CAAwB;QAC/B,eAAU,GAAV,UAAU,CAAqC;QAEhE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;YACpB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;YACpB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,SAAS,CAAC,QAAmC;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,QAAoB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,QAAoB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,wEAAwE;QACxE,mDAAmD;QACnD,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,UAAU;QACR,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACxE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,MAAM,IAAI,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO;IAcQ;IACA;IAUA;IAxBV,QAAQ,GAAG,kBAA2B,CAAC;IACvC,eAAe,CAAS;IACxB,mBAAmB,CAA2C;IAC9D,kBAAkB,CAAiD;IACnE,kBAAkB,CAAS;IAC3B,gBAAgB,CAAS;IACzB,mBAAmB,CAAsB;IACzC,MAAM,CAAS;IACf,aAAa,CAAU;IACxB,MAAM,GAAG,KAAK,CAAC;IACN,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,YACmB,YAA2C,EAC3C,OASkB,EAClB,YAAuD;QAXvD,iBAAY,GAAZ,YAAY,CAA+B;QAC3C,YAAO,GAAP,OAAO,CASW;QAClB,iBAAY,GAAZ,YAAY,CAA2C;QAExE,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC;QAC1D,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,gBAAgB,CAAC;QACtD,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,QAAQ,CAAC;QACnE,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,gBAAgB,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,wBAAwB,KAAK,IAAI,CAAC;QAC/D,MAAM,aAAa,GAAG;YACpB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,QAAQ,EAAE,sBAA+B;YACzC,GAAG,CAAC,kCAAkC,CAAC,QAAQ,CAC7C,IAAI,CAAC,gBAAuE,CAC7E;gBACC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,uBAAuB,EAAE,IAAa,EAAE,CAAC;YAC/C,QAAQ,EAAE;gBACR,MAAM,EAAE,YAAqB;gBAC7B,aAAa,EAAE,0BAAmC;gBAClD,gBAAgB,EAAE,yBAAkC;aACrD;SACF,CAAC;QACF,IAAI,CAAC,mBAAmB;YACtB,aAAyD,CAAC;QAC5D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa;YAC1C,CAAC,CAAE,aAAyD;YAC5D,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,MAAM,oCAAoC,CACxD,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACnC,CAAC;QACF,IACE,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC,YAAY,CAAC,kBAAkB;YACnE,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,CAAC,UAAU,EACnD,CAAC;YACD,MAAM,IAAI,wBAAwB,CAAC,6BAA6B,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,KAAiB,CAAC;QACtB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAC7B,IAAI,CAAC,YAAY,CAAC,UAAU,EAC5B,CAAC,YAAY,EAAE,OAAO,CAAC,EACvB;gBACE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI;gBAC5C,QAAQ,EAAE,IAAI;gBACd,GAAG,EAAE,+BAA+B,CAClC,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CACxC;gBACD,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,wBAAwB,CAAC,cAAc,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC;QACjC,IACE,cAAc,KAAK,SAAS;YAC5B,cAAc,IAAI,CAAC;YACnB,cAAc,KAAK,OAAO,CAAC,GAAG,EAC9B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,IAAI,wBAAwB,CAAC,cAAc,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,KAAiC,CAAC;QACtC,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBACjE,cAAc,GAAG,IAAI,CAAC;gBACtB,IAAI,KAAK;oBAAE,KAAK,CAAC,UAAU,EAAE,CAAC;;oBACzB,MAAM,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE;YAC9C,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;YAC3C,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW;YAC1C,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;YAC7C,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;SAC/B,CAAC,CAAC;QACL,IAAI,kBAAuD,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACvD,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;YAC3D,CAAC;YACD,kBAAkB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAC3D,MAAM,EACN,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAC7B,CAAC;YACF,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;YAC3D,CAAC;YACD,oEAAoE;YACpE,uEAAuE;YACvE,mEAAmE;YACnE,MAAM,aAAa,GAAG,MAAM,oCAAoC,CAC9D,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACnC,CAAC;YACF,IACE,aAAa,CAAC,kBAAkB;gBAC9B,IAAI,CAAC,YAAY,CAAC,kBAAkB;gBACtC,aAAa,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,CAAC,UAAU,EACzD,CAAC;gBACD,MAAM,IAAI,wBAAwB,CAAC,6BAA6B,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,wBAAwB,CAAC,oBAAoB,CAAC,CAAC;YAC3D,CAAC;YACD,KAAK,GAAG,IAAI,cAAc,CACxB,kBAAkB,EAClB,KAAK,EACL,MAAM,EACN,OAAO,EACP,CAAC,gBAAgB,EAAE,EAAE;gBACnB,IAAI,KAAK,IAAI,gBAAgB;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,CAAC,CACF,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAC;YAChC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;YACnE,IAAI,KAAK,YAAY,wBAAwB;gBAAE,MAAM,KAAK,CAAC;YAC3D,MAAM,IAAI,wBAAwB,CAAC,0BAA0B,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CACvD,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,OAA0C,EAC1C,eAAgD,EAAE;IAElD,IACE,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC/C,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,EAChD,CAAC;QACD,MAAM,IAAI,wBAAwB,CAAC,uBAAuB,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IAClD,MAAM,SAAS,GAAG,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,IAAI;KAC3B,CAAC;IACF,IAAI,YAA2C,CAAC;IAChD,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,oCAAoC,CACvD,IAAI,EACJ,OAAO,CAAC,gBAAgB,EACxB,aAAa,CACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,OAAO,CAAC,mBAAmB,KAAK,UAAU;YAC1C,CAAC,CAAC,KAAK,YAAY,wBAAwB,CAAC;YAC5C,KAAK,CAAC,IAAI,KAAK,6BAA6B,EAC5C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,YAAY,GAAG,MAAM,4CAA4C,CAC/D,IAAI,EACJ,OAAO,CAAC,gBAAgB,EACxB,aAAa,CACd,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG;QACxB,GAAG,OAAO;QACV,cAAc,EAAE,eAAe,CAC7B,OAAO,CAAC,cAAc,EACtB,wBAAwB,CACzB;QACD,cAAc,EAAE,eAAe,CAC7B,OAAO,CAAC,cAAc,EACtB,wBAAwB,CACzB;QACD,eAAe,EAAE,eAAe,CAC9B,OAAO,CAAC,eAAe,EACvB,yBAAyB,CAC1B;QACD,cAAc,EAAE,eAAe,CAC7B,OAAO,CAAC,cAAc,EACtB,wBAAwB,CACzB;KACF,CAAC;IACF,MAAM,sBAAsB,GAA8C;QACxE,gBAAgB,EACd,YAAY,CAAC,gBAAgB,IAAI,wBAAwB,CAAC,OAAO;QACnE,WAAW,EAAE,YAAY,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACnE,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QAC/D,KAAK,EACH,YAAY,CAAC,KAAK;YAClB,CAAC,CAAC,YAAY,EAAE,EAAE,CAChB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACtE,KAAK,EACH,YAAY,CAAC,KAAK;YAClB,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAC/B,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,YAAY,CAAmC,CAAC;KACnF,CAAC;IACF,OAAO,IAAI,OAAO,CAChB,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,CACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Closed grammar for opaque Codex listener and succession generations. */
2
+ export declare function isCodexRegistrationGeneration(value: unknown): value is string;
3
+ export declare function assertCodexRegistrationGeneration(value: unknown, label?: string): asserts value is string;
4
+ /** A fresh 128-bit token that is safe in the closed generation grammar. */
5
+ export declare function createCodexRegistrationGeneration(): string;