managed-deepagents 0.6.2-dev.8 → 0.7.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 (99) hide show
  1. package/README.md +34 -16
  2. package/dist/agent-auth.d.ts +167 -0
  3. package/dist/agent-auth.d.ts.map +1 -0
  4. package/dist/agent-auth.js +520 -0
  5. package/dist/agent-auth.js.map +1 -0
  6. package/dist/channels/manifest.d.ts +4 -0
  7. package/dist/channels/manifest.d.ts.map +1 -1
  8. package/dist/channels/response-format.d.ts +1 -1
  9. package/dist/channels/response-format.d.ts.map +1 -1
  10. package/dist/channels/response-format.js +1 -1
  11. package/dist/channels/response-format.js.map +1 -1
  12. package/dist/channels/trigger/http.d.ts +8 -0
  13. package/dist/channels/trigger/http.d.ts.map +1 -1
  14. package/dist/channels/trigger/http.js +56 -6
  15. package/dist/channels/trigger/http.js.map +1 -1
  16. package/dist/channels/trigger/identity-context.d.ts +47 -0
  17. package/dist/channels/trigger/identity-context.d.ts.map +1 -0
  18. package/dist/channels/trigger/identity-context.js +171 -0
  19. package/dist/channels/trigger/identity-context.js.map +1 -0
  20. package/dist/channels/trigger/types.d.ts +10 -0
  21. package/dist/channels/trigger/types.d.ts.map +1 -1
  22. package/dist/channels/trigger/types.js +5 -0
  23. package/dist/channels/trigger/types.js.map +1 -1
  24. package/dist/connection-authorization.d.ts +17 -0
  25. package/dist/connection-authorization.d.ts.map +1 -0
  26. package/dist/connection-authorization.js +46 -0
  27. package/dist/connection-authorization.js.map +1 -0
  28. package/dist/connections.d.ts +98 -0
  29. package/dist/connections.d.ts.map +1 -0
  30. package/dist/connections.js +339 -0
  31. package/dist/connections.js.map +1 -0
  32. package/dist/connectors/mcp/index.d.ts +36 -95
  33. package/dist/connectors/mcp/index.d.ts.map +1 -1
  34. package/dist/connectors/mcp/index.js +266 -57
  35. package/dist/connectors/mcp/index.js.map +1 -1
  36. package/dist/connectors/mcp/schema.d.ts +17 -0
  37. package/dist/connectors/mcp/schema.d.ts.map +1 -0
  38. package/dist/connectors/mcp/schema.js +122 -0
  39. package/dist/connectors/mcp/schema.js.map +1 -0
  40. package/dist/connectors/mcp/types.d.ts +81 -0
  41. package/dist/connectors/mcp/types.d.ts.map +1 -0
  42. package/dist/connectors/mcp/types.js +2 -0
  43. package/dist/connectors/mcp/types.js.map +1 -0
  44. package/dist/connectors/tool-selection.d.ts +10 -19
  45. package/dist/connectors/tool-selection.d.ts.map +1 -1
  46. package/dist/connectors/tool-selection.js +33 -59
  47. package/dist/connectors/tool-selection.js.map +1 -1
  48. package/dist/credential-gate.d.ts +28 -0
  49. package/dist/credential-gate.d.ts.map +1 -0
  50. package/dist/credential-gate.js +179 -0
  51. package/dist/credential-gate.js.map +1 -0
  52. package/dist/extension.d.ts +3 -3
  53. package/dist/extension.js +2 -2
  54. package/dist/identity/index.d.ts +1 -1
  55. package/dist/identity/index.d.ts.map +1 -1
  56. package/dist/identity/index.js.map +1 -1
  57. package/dist/identity/types.d.ts +102 -5
  58. package/dist/identity/types.d.ts.map +1 -1
  59. package/dist/index.d.ts +9 -34
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +3 -6
  62. package/dist/index.js.map +1 -1
  63. package/dist/ingress/index.d.ts +10 -2
  64. package/dist/ingress/index.d.ts.map +1 -1
  65. package/dist/ingress/index.js +18 -9
  66. package/dist/ingress/index.js.map +1 -1
  67. package/dist/namespaces.d.ts +12 -29
  68. package/dist/namespaces.d.ts.map +1 -1
  69. package/dist/namespaces.js +26 -9
  70. package/dist/namespaces.js.map +1 -1
  71. package/dist/runtime/auth.d.ts +76 -5
  72. package/dist/runtime/auth.d.ts.map +1 -1
  73. package/dist/runtime/auth.js +114 -6
  74. package/dist/runtime/auth.js.map +1 -1
  75. package/dist/runtime/http.d.ts +1 -1
  76. package/dist/runtime/http.d.ts.map +1 -1
  77. package/dist/runtime/http.js.map +1 -1
  78. package/dist/runtime/identity-runtime.d.ts +65 -5
  79. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  80. package/dist/runtime/identity-runtime.js +164 -0
  81. package/dist/runtime/identity-runtime.js.map +1 -1
  82. package/dist/runtime/index.d.ts.map +1 -1
  83. package/dist/runtime/index.js +13 -8
  84. package/dist/runtime/index.js.map +1 -1
  85. package/dist/runtime/managed-middleware.d.ts +2 -2
  86. package/dist/runtime/managed-middleware.js +6 -6
  87. package/dist/runtime/managed-tools.d.ts +19 -15
  88. package/dist/runtime/managed-tools.d.ts.map +1 -1
  89. package/dist/runtime/managed-tools.js +14 -13
  90. package/dist/runtime/managed-tools.js.map +1 -1
  91. package/dist/runtime/types.d.ts +2 -2
  92. package/dist/runtime/validated-token.d.ts.map +1 -1
  93. package/dist/runtime/validated-token.js +23 -0
  94. package/dist/runtime/validated-token.js.map +1 -1
  95. package/package.json +8 -8
  96. package/dist/connectors/mcp/load.d.ts +0 -12
  97. package/dist/connectors/mcp/load.d.ts.map +0 -1
  98. package/dist/connectors/mcp/load.js +0 -122
  99. package/dist/connectors/mcp/load.js.map +0 -1
@@ -0,0 +1,520 @@
1
+ /**
2
+ * Agent Auth client used by `credentials.get` and the pre-run credential gate.
3
+ *
4
+ * Talks to the shipped Agent Auth APIs (credentials + oauth-authorization-sessions),
5
+ * not the aspirational `credentials/mint` endpoint.
6
+ */
7
+ import { fetchWithTimeout } from "./runtime/http.js";
8
+ export const AGENT_AUTH_TIMEOUT_MS = 10_000;
9
+ export const AGENT_AUTH_PROVIDER_PAGE_SIZE = 100;
10
+ export const AGENT_AUTH_MAX_PROVIDER_PAGES = 20;
11
+ /** Query string for listing credentials filtered by owner and kind. */
12
+ export function agentAuthCredentialQuery(options) {
13
+ const params = new URLSearchParams({
14
+ owner_type: options.ownerType,
15
+ owner_id: options.ownerId,
16
+ kind: options.kind,
17
+ });
18
+ if (options.pageSize !== undefined) {
19
+ params.set("page_size", String(options.pageSize));
20
+ }
21
+ if (options.cursor) {
22
+ params.set("cursor", options.cursor);
23
+ }
24
+ return params.toString();
25
+ }
26
+ export function agentAuthHeaders(config) {
27
+ const headers = {
28
+ accept: "application/json",
29
+ "content-type": "application/json",
30
+ "x-langsmith-product": "mda",
31
+ };
32
+ const apiKey = config.apiKey?.trim();
33
+ if (apiKey) {
34
+ headers["x-api-key"] = apiKey;
35
+ }
36
+ const workspaceId = config.workspaceId?.trim();
37
+ if (workspaceId) {
38
+ headers["x-tenant-id"] = workspaceId;
39
+ }
40
+ return headers;
41
+ }
42
+ /** One Agent Auth HTTP call: no redirects, bounded timeout, JSON body. */
43
+ export async function requestAgentAuthJson(options) {
44
+ const response = await fetchWithTimeout(options.url, {
45
+ ...options.init,
46
+ redirect: "error",
47
+ headers: agentAuthHeaders(options.config),
48
+ }, options.timeoutMs, options.fetchImpl);
49
+ const decoded = await response.json().catch(() => ({}));
50
+ return {
51
+ ok: response.ok,
52
+ status: response.status,
53
+ body: decoded && typeof decoded === "object"
54
+ ? decoded
55
+ : {},
56
+ };
57
+ }
58
+ /** Per-process cache so one gate turn does not re-resolve the same identity. */
59
+ const principalResolveCache = new Map();
60
+ function principalResolveCacheKey(context, identity) {
61
+ const origin = context.baseUrl.replace(/\/$/u, "");
62
+ const workspace = context.workspaceId?.trim() ?? "";
63
+ return `${origin}\0${workspace}\0${identity.provider}\0${identity.issuer}\0${identity.subject}`;
64
+ }
65
+ /** Drop cached principal resolutions. Test-only. */
66
+ export function clearPrincipalResolveCacheForTests() {
67
+ principalResolveCache.clear();
68
+ }
69
+ export class CredentialAuthorizationRequiredError extends Error {
70
+ slugs;
71
+ name = "CredentialAuthorizationRequiredError";
72
+ constructor(slugs) {
73
+ super(`the caller has not connected: ${slugs.join(", ")}. ` +
74
+ "The authorization interrupt resumed without a usable credential.");
75
+ this.slugs = slugs;
76
+ }
77
+ }
78
+ export class AgentAuthUnknownProviderError extends Error {
79
+ slug;
80
+ name = "AgentAuthUnknownProviderError";
81
+ constructor(slug) {
82
+ super(`Agent Auth has no OAuth provider registered for slug "${slug}". ` +
83
+ "Register the provider or fix the credential slug.");
84
+ this.slug = slug;
85
+ }
86
+ }
87
+ export const AGENT_AUTH_PROBLEM_HINT_MAX_CHARS = 200;
88
+ /**
89
+ * The problem+json fields Agent Auth reserves for the caller: `detail` names
90
+ * the failure and `remedy` names the fix. Nothing else from a response body is
91
+ * read, because the rest can quote secret material.
92
+ *
93
+ * Both are collapsed to one line and truncated so a long or multi-line body
94
+ * cannot reshape an error message.
95
+ */
96
+ export function agentAuthProblemHint(body) {
97
+ const seen = new Set();
98
+ for (const field of ["detail", "remedy"]) {
99
+ const value = body?.[field];
100
+ if (typeof value !== "string")
101
+ continue;
102
+ const text = value.replace(/\s+/gu, " ").trim();
103
+ if (text)
104
+ seen.add(text);
105
+ }
106
+ if (seen.size === 0)
107
+ return undefined;
108
+ const hint = [...seen].join(" ");
109
+ const chars = [...hint];
110
+ return chars.length > AGENT_AUTH_PROBLEM_HINT_MAX_CHARS
111
+ ? `${chars.slice(0, AGENT_AUTH_PROBLEM_HINT_MAX_CHARS).join("")}...`
112
+ : hint;
113
+ }
114
+ /**
115
+ * Agent Auth could not answer. Callers pass a fixed message; the only part of
116
+ * a response body that reaches it is the allow-listed problem+json hint, since
117
+ * an arbitrary body can quote secret material.
118
+ */
119
+ export class CredentialStoreError extends Error {
120
+ status;
121
+ name = "CredentialStoreError";
122
+ constructor(message, status, problem) {
123
+ const withStatus = status === undefined ? message : `${message} (status ${status})`;
124
+ const hint = agentAuthProblemHint(problem);
125
+ super(hint === undefined ? withStatus : `${withStatus}: ${hint}`);
126
+ this.status = status;
127
+ }
128
+ }
129
+ /** Each runtime quotes the slug its own way: `JSON.stringify` here, `repr()` in PyPI. */
130
+ const MISSING_WORKSPACE_CONNECTION = /workspace connection ['"]([A-Za-z0-9][A-Za-z0-9._-]*)['"] is not configured/u;
131
+ /** The error for a declared slug that has no workspace connection row. */
132
+ export function missingWorkspaceConnectionError(slug) {
133
+ return new CredentialStoreError(`workspace connection ${JSON.stringify(slug)} is not configured`);
134
+ }
135
+ /**
136
+ * Read the slug back out of a missing-connection message.
137
+ *
138
+ * A run that fails in the gate reaches a channel as a plain string, so this is
139
+ * the only way back to the slug. It must move with the message it parses.
140
+ */
141
+ export function missingWorkspaceConnectionSlug(text) {
142
+ return MISSING_WORKSPACE_CONNECTION.exec(text)?.[1];
143
+ }
144
+ /**
145
+ * Bound Agent Auth HTTP client. One instance per caller/run; headers, origin,
146
+ * and the request timeout stay on the instance rather than each call site.
147
+ */
148
+ export class AgentAuth {
149
+ context;
150
+ #fetchImpl;
151
+ #timeoutMs;
152
+ constructor(context, fetchImpl = fetch, timeoutMs = AGENT_AUTH_TIMEOUT_MS) {
153
+ this.context = context;
154
+ this.#fetchImpl = fetchImpl;
155
+ this.#timeoutMs = timeoutMs;
156
+ }
157
+ /**
158
+ * Resolve a verified external identity to an Agent Auth principal UUID.
159
+ *
160
+ * `POST /v1/agent-auth/principals` with `{ provider, issuer, subject }`.
161
+ * Results are cached per process for the same origin, workspace, and triple.
162
+ */
163
+ async resolvePrincipal(identity) {
164
+ const provider = identity.provider.trim();
165
+ const issuer = identity.issuer.trim();
166
+ const subject = identity.subject.trim();
167
+ if (!provider || !issuer || !subject) {
168
+ throw new CredentialStoreError("Agent Auth principal resolve requires provider, issuer, and subject");
169
+ }
170
+ const key = principalResolveCacheKey(this.context, {
171
+ provider,
172
+ issuer,
173
+ subject,
174
+ });
175
+ const cached = principalResolveCache.get(key);
176
+ if (cached) {
177
+ return await cached;
178
+ }
179
+ const pending = this.#resolvePrincipalUncached({
180
+ provider,
181
+ issuer,
182
+ subject,
183
+ });
184
+ principalResolveCache.set(key, pending);
185
+ try {
186
+ return await pending;
187
+ }
188
+ catch (error) {
189
+ principalResolveCache.delete(key);
190
+ throw error;
191
+ }
192
+ }
193
+ async #resolvePrincipalUncached(identity) {
194
+ const { ok, status, body } = await this.#request("/v1/agent-auth/principals", {
195
+ method: "POST",
196
+ body: JSON.stringify({
197
+ provider: identity.provider,
198
+ issuer: identity.issuer,
199
+ subject: identity.subject,
200
+ }),
201
+ });
202
+ if (!ok) {
203
+ throw new CredentialStoreError("Agent Auth resolve principal failed", status, body);
204
+ }
205
+ const principal = body.principal;
206
+ const id = principal && typeof principal === "object"
207
+ ? String(principal.id ?? "").trim()
208
+ : "";
209
+ if (!id) {
210
+ throw new CredentialStoreError("Agent Auth resolve principal returned no principal id");
211
+ }
212
+ return id;
213
+ }
214
+ /** List workspace connections and return the row for `slug`, if any. */
215
+ async findWorkspaceConnection(slug) {
216
+ if (!this.context.workspaceId?.trim()) {
217
+ throw new CredentialStoreError("connections are not configured: LANGSMITH_WORKSPACE_ID is not set");
218
+ }
219
+ let cursor;
220
+ for (let page = 0; page < AGENT_AUTH_MAX_PROVIDER_PAGES; page += 1) {
221
+ const params = new URLSearchParams({
222
+ page_size: String(AGENT_AUTH_PROVIDER_PAGE_SIZE),
223
+ });
224
+ if (cursor) {
225
+ params.set("cursor", cursor);
226
+ }
227
+ const { ok, status, body } = await this.#request(`/v1/agent-auth/connections?${params.toString()}`, { method: "GET" });
228
+ if (!ok) {
229
+ throw new CredentialStoreError("Agent Auth list connections failed", status, body);
230
+ }
231
+ const items = Array.isArray(body.items) ? body.items : [];
232
+ const match = items.find((item) => !!item &&
233
+ typeof item === "object" &&
234
+ String(item.slug) === slug);
235
+ if (match) {
236
+ const connectionId = String(match.id ?? match.connection_id ?? match.credential_id ?? "");
237
+ const kind = connectionCredentialKind(match);
238
+ const ownerPolicy = typeof match.owner_policy === "string" ? match.owner_policy : "";
239
+ if (!connectionId || !kind) {
240
+ throw new CredentialStoreError("Agent Auth connection row missing id or kind");
241
+ }
242
+ return { connectionId, kind, ownerPolicy };
243
+ }
244
+ const next = body.next_cursor;
245
+ if (typeof next !== "string" || !next || next === cursor) {
246
+ return undefined;
247
+ }
248
+ cursor = next;
249
+ }
250
+ throw new CredentialStoreError("Agent Auth connection list returned too many pages");
251
+ }
252
+ /** Workspace credential id for an agent-owned opaque secret grant. */
253
+ async findWorkspaceCredentialId(slug) {
254
+ const connection = await this.findWorkspaceConnection(slug);
255
+ if (!connection) {
256
+ return undefined;
257
+ }
258
+ return await this.findSecretCredentialId(connection, slug);
259
+ }
260
+ /**
261
+ * Resolve the credential id for a secret connection row.
262
+ *
263
+ * Agent-owned connection declarations scope the credential to this
264
+ * deployment. Workspace-owned credentials are deliberately not visible to
265
+ * deployments.
266
+ */
267
+ async findSecretCredentialId(connection, slug) {
268
+ if (connection.kind !== "secret") {
269
+ return undefined;
270
+ }
271
+ const agentId = this.context.agentId?.trim();
272
+ if (!agentId) {
273
+ throw new CredentialStoreError("connections are not configured: LANGSMITH_HOST_PROJECT_ID is not set");
274
+ }
275
+ const fromAgent = await this.#credentialIdForOwner(connection.connectionId, "agent", agentId);
276
+ if (fromAgent) {
277
+ return fromAgent;
278
+ }
279
+ const listedAgent = await this.findCredentialId({
280
+ ownerType: "agent",
281
+ ownerId: agentId,
282
+ kind: "secret",
283
+ slug,
284
+ });
285
+ return listedAgent;
286
+ }
287
+ /**
288
+ * Read credential_id from GET /connections/{id}?credential_owner_*.
289
+ *
290
+ * Deployments authenticate with `LANGSMITH_API_KEY` (the minted
291
+ * service-account key). User and workspace owners additionally require
292
+ * workspace management permission.
293
+ */
294
+ async #credentialIdForOwner(connectionId, ownerType, ownerId) {
295
+ const params = new URLSearchParams({
296
+ credential_owner_type: ownerType,
297
+ credential_owner_id: ownerId,
298
+ });
299
+ const { ok, status, body } = await this.#request(`/v1/agent-auth/connections/${encodeURIComponent(connectionId)}?${params.toString()}`, { method: "GET" });
300
+ if (status === 404) {
301
+ return undefined;
302
+ }
303
+ if (!ok) {
304
+ throw new CredentialStoreError(status === 403
305
+ ? "Agent Auth get connection for owner failed (forbidden)"
306
+ : "Agent Auth get connection for owner failed", status, body);
307
+ }
308
+ return connectionCredentialId(body);
309
+ }
310
+ /** Read a caller-owned opaque secret grant for a workspace connection slug. */
311
+ async readUserSecret(slug) {
312
+ const connection = await this.findWorkspaceConnection(slug);
313
+ if (!connection) {
314
+ return undefined;
315
+ }
316
+ return await this.readUserSecretForConnection(connection);
317
+ }
318
+ /** Read a caller-owned opaque secret when the connection row is already loaded. */
319
+ async readUserSecretForConnection(connection) {
320
+ if (connection.kind !== "secret") {
321
+ return undefined;
322
+ }
323
+ const credentialId = await this.#credentialIdForOwner(connection.connectionId, "user", this.context.principalId);
324
+ if (!credentialId) {
325
+ return undefined;
326
+ }
327
+ return await this.readSecret(credentialId);
328
+ }
329
+ /** Read this deployment's OAuth grant for a workspace connection. */
330
+ async readAgentAccessTokenForConnection(connection) {
331
+ const agentId = this.context.agentId?.trim();
332
+ if (!agentId) {
333
+ throw new CredentialStoreError("connections are not configured: LANGSMITH_HOST_PROJECT_ID is not set");
334
+ }
335
+ return await this.#readAccessTokenForOwner(connection, "agent", agentId);
336
+ }
337
+ /**
338
+ * Read the caller's OAuth access token for a slug without starting a session.
339
+ *
340
+ * Reads never mint, so a caller can be probed repeatedly — on every replay of
341
+ * an interrupted node, for instance — without leaving authorization sessions
342
+ * behind.
343
+ *
344
+ * @returns The access token, or `undefined` when the caller must connect.
345
+ */
346
+ async readUserAccessToken(slug) {
347
+ const connection = await this.findWorkspaceConnection(slug);
348
+ if (!connection) {
349
+ return undefined;
350
+ }
351
+ return await this.readUserAccessTokenForConnection(connection);
352
+ }
353
+ /** Read a caller OAuth token when the connection row is already loaded. */
354
+ async readUserAccessTokenForConnection(connection) {
355
+ return await this.#readAccessTokenForOwner(connection, "user", this.context.principalId);
356
+ }
357
+ async #readAccessTokenForOwner(connection, ownerType, ownerId) {
358
+ if (connection.kind !== "oauth2") {
359
+ return undefined;
360
+ }
361
+ const credentialId = await this.#credentialIdForOwner(connection.connectionId, ownerType, ownerId);
362
+ if (!credentialId)
363
+ return undefined;
364
+ return await this.#fetchAccessToken(credentialId);
365
+ }
366
+ /**
367
+ * Start an OAuth authorization session for a slug the caller has not granted.
368
+ *
369
+ * @returns The pending session, including the user-facing connect URL.
370
+ */
371
+ async startAuthorizationSession(slug) {
372
+ const connection = await this.findWorkspaceConnection(slug);
373
+ if (!connection) {
374
+ throw missingWorkspaceConnectionError(slug);
375
+ }
376
+ if (connection.kind !== "oauth2") {
377
+ throw new CredentialStoreError(`connection ${JSON.stringify(slug)} is not an OAuth connection`);
378
+ }
379
+ const { ok, status, body } = await this.#request("/v1/agent-auth/oauth-authorization-sessions", {
380
+ method: "POST",
381
+ body: JSON.stringify({
382
+ connection_id: connection.connectionId,
383
+ owner_type: "user",
384
+ owner_id: this.context.principalId,
385
+ }),
386
+ });
387
+ if (!ok) {
388
+ throw new CredentialStoreError("Agent Auth create oauth-authorization-session failed", status, body);
389
+ }
390
+ const authId = String(body.id ?? "");
391
+ const connectUrl = String(body.verification_url ?? "");
392
+ if (!authId || !connectUrl) {
393
+ throw new CredentialStoreError("Agent Auth oauth-authorization-session missing id or verification_url");
394
+ }
395
+ return { slug, connectUrl, authId };
396
+ }
397
+ /** oauth-providers has no slug filter, so the match is made across pages. */
398
+ async resolveOAuthProviderId(slug) {
399
+ let cursor;
400
+ for (let page = 0; page < AGENT_AUTH_MAX_PROVIDER_PAGES; page += 1) {
401
+ const params = new URLSearchParams({
402
+ page_size: String(AGENT_AUTH_PROVIDER_PAGE_SIZE),
403
+ });
404
+ if (cursor)
405
+ params.set("cursor", cursor);
406
+ const { ok, status, body } = await this.#request(`/v1/agent-auth/oauth-providers?${params.toString()}`, { method: "GET" });
407
+ if (!ok) {
408
+ throw new CredentialStoreError("Agent Auth list oauth-providers failed", status, body);
409
+ }
410
+ const items = Array.isArray(body.items) ? body.items : [];
411
+ const match = items.find((item) => !!item &&
412
+ typeof item === "object" &&
413
+ String(item.slug) === slug);
414
+ if (match?.id) {
415
+ return String(match.id);
416
+ }
417
+ const next = body.next_cursor;
418
+ if (typeof next !== "string" || !next || next === cursor) {
419
+ throw new AgentAuthUnknownProviderError(slug);
420
+ }
421
+ cursor = next;
422
+ }
423
+ throw new CredentialStoreError("Agent Auth oauth-provider list returned too many pages");
424
+ }
425
+ /** The credential key is `credential_id`, never `id`. */
426
+ async findCredentialId(options) {
427
+ let cursor;
428
+ for (let page = 0; page < AGENT_AUTH_MAX_PROVIDER_PAGES; page += 1) {
429
+ const { ok, status, body } = await this.#request(`/v1/agent-auth/credentials?${agentAuthCredentialQuery({
430
+ ownerType: options.ownerType,
431
+ ownerId: options.ownerId,
432
+ kind: options.kind,
433
+ pageSize: AGENT_AUTH_PROVIDER_PAGE_SIZE,
434
+ cursor,
435
+ })}`, { method: "GET" });
436
+ if (!ok) {
437
+ throw new CredentialStoreError("Agent Auth list credentials failed", status, body);
438
+ }
439
+ const items = Array.isArray(body.items) ? body.items : [];
440
+ const match = items.find((item) => !!item &&
441
+ typeof item === "object" &&
442
+ String(item.slug) === options.slug);
443
+ const id = match?.credential_id;
444
+ if (typeof id === "string" && id) {
445
+ return id;
446
+ }
447
+ const next = body.next_cursor;
448
+ if (typeof next !== "string" || !next || next === cursor) {
449
+ return undefined;
450
+ }
451
+ cursor = next;
452
+ }
453
+ throw new CredentialStoreError("Agent Auth credential list returned too many pages");
454
+ }
455
+ /** @returns The secret, or `undefined` when Agent Auth has no value (404). */
456
+ async readSecret(credentialId) {
457
+ const { ok, status, body } = await this.#request(`/v1/agent-auth/credentials/${encodeURIComponent(credentialId)}/secret`, { method: "GET" });
458
+ if (status === 404) {
459
+ return undefined;
460
+ }
461
+ if (!ok) {
462
+ throw new CredentialStoreError("Agent Auth get secret failed", status, body);
463
+ }
464
+ const secret = body.secret;
465
+ return typeof secret === "string" && secret.length > 0 ? secret : undefined;
466
+ }
467
+ async #fetchAccessToken(credentialId) {
468
+ const { ok, status, body } = await this.#request(`/v1/agent-auth/credentials/${encodeURIComponent(credentialId)}/oauth2`, { method: "GET" });
469
+ if (isAuthorizationRequired(status, body)) {
470
+ return undefined;
471
+ }
472
+ if (!ok) {
473
+ throw new CredentialStoreError("Agent Auth get oauth2 failed", status, body);
474
+ }
475
+ const oauth2 = body.oauth2 && typeof body.oauth2 === "object"
476
+ ? body.oauth2
477
+ : body;
478
+ const token = oauth2.access_token;
479
+ return typeof token === "string" && token ? token : undefined;
480
+ }
481
+ async #request(path, init = {}) {
482
+ return await requestAgentAuthJson({
483
+ url: `${this.context.baseUrl}${path}`,
484
+ init,
485
+ config: this.context,
486
+ timeoutMs: this.#timeoutMs,
487
+ fetchImpl: this.#fetchImpl,
488
+ });
489
+ }
490
+ }
491
+ /** Agent Auth answers 409 when a stored grant has lapsed and needs re-auth. */
492
+ function isAuthorizationRequired(status, body) {
493
+ if (status !== 409) {
494
+ return false;
495
+ }
496
+ const detail = String(body.detail ?? body.title ?? body.error ?? "").toLowerCase();
497
+ return (body.error === "authorization_required" ||
498
+ detail.includes("authorization is required") ||
499
+ detail.includes("oauth authorization"));
500
+ }
501
+ /** Prefer nested `credential.kind`; accept legacy top-level `kind`. */
502
+ function connectionCredentialKind(item) {
503
+ const credential = item.credential;
504
+ if (credential && typeof credential === "object") {
505
+ const kind = credential.kind;
506
+ if (typeof kind === "string" && kind) {
507
+ return kind;
508
+ }
509
+ }
510
+ return typeof item.kind === "string" ? item.kind : "";
511
+ }
512
+ function connectionCredentialId(body) {
513
+ const credential = body.credential;
514
+ if (!credential || typeof credential !== "object") {
515
+ return undefined;
516
+ }
517
+ const id = credential.credential_id;
518
+ return typeof id === "string" && id ? id : undefined;
519
+ }
520
+ //# sourceMappingURL=agent-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-auth.js","sourceRoot":"","sources":["../src/agent-auth.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,10 @@ export interface ChannelManifest {
31
31
  requiredPermissions: readonly string[];
32
32
  /** Env vars deploy must ensure when this channel is present. */
33
33
  requiredEnv: readonly string[];
34
+ /** User-owned connection slugs that must exist in the workspace vault. */
35
+ userConnections?: readonly string[];
36
+ /** Agent-owned connection slugs referenced by this connector. */
37
+ agentConnections?: readonly string[];
34
38
  /** Opaque-to-core provider config (Slack filters/conversation, …). */
35
39
  providerConfig: JsonObject;
36
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/channels/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,gEAAgE;IAChE,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,sEAAsE;IACtE,cAAc,EAAE,UAAU,CAAC;CAC5B"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/channels/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,gEAAgE;IAChE,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,sEAAsE;IACtE,cAAc,EAAE,UAAU,CAAC;CAC5B"}
@@ -1,5 +1,5 @@
1
1
  import { createMiddleware } from "langchain";
2
2
  export declare const CHANNEL_RESPONSE_FORMAT_MIDDLEWARE_NAME = "mda-channel-response-format";
3
- export declare const SLACK_MRKDWN_INSTRUCTIONS = "Your final response will be posted to Slack. Format it using Slack mrkdwn.";
3
+ export declare const SLACK_MRKDWN_INSTRUCTIONS = "Your final response is automatically posted to Slack. Reply directly to the user using Slack-compatible mrkdwn. Do not make a tool call or search for a Slack tool to send the response.";
4
4
  export declare function createChannelResponseFormatMiddleware(): ReturnType<typeof createMiddleware>;
5
5
  //# sourceMappingURL=response-format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-format.d.ts","sourceRoot":"","sources":["../../src/channels/response-format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAOhE,eAAO,MAAM,uCAAuC,gCACrB,CAAC;AAEhC,eAAO,MAAM,yBAAyB,+EACwC,CAAC;AAkC/E,wBAAgB,qCAAqC,IAAI,UAAU,CACjE,OAAO,gBAAgB,CACxB,CAWA"}
1
+ {"version":3,"file":"response-format.d.ts","sourceRoot":"","sources":["../../src/channels/response-format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAOhE,eAAO,MAAM,uCAAuC,gCACrB,CAAC;AAEhC,eAAO,MAAM,yBAAyB,6LACsJ,CAAC;AAkC7L,wBAAgB,qCAAqC,IAAI,UAAU,CACjE,OAAO,gBAAgB,CACxB,CAWA"}
@@ -2,7 +2,7 @@ import { SystemMessage } from "@langchain/core/messages";
2
2
  import { createMiddleware } from "langchain";
3
3
  import { resolveRuntimeConfigurable, } from "../runtime/identity-runtime.js";
4
4
  export const CHANNEL_RESPONSE_FORMAT_MIDDLEWARE_NAME = "mda-channel-response-format";
5
- export const SLACK_MRKDWN_INSTRUCTIONS = "Your final response will be posted to Slack. Format it using Slack mrkdwn.";
5
+ export const SLACK_MRKDWN_INSTRUCTIONS = "Your final response is automatically posted to Slack. Reply directly to the user using Slack-compatible mrkdwn. Do not make a tool call or search for a Slack tool to send the response.";
6
6
  function sourceProvider(request) {
7
7
  const configurable = resolveRuntimeConfigurable(request.runtime);
8
8
  const user = configurable?.langgraph_auth_user;
@@ -1 +1 @@
1
- {"version":3,"file":"response-format.js","sourceRoot":"","sources":["../../src/channels/response-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAEhE,OAAO,EACL,0BAA0B,GAE3B,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,MAAM,uCAAuC,GAClD,6BAA6B,CAAC;AAEhC,MAAM,CAAC,MAAM,yBAAyB,GACpC,4EAA4E,CAAC;AAI/E,SAAS,cAAc,CAAC,OAAqB;IAC3C,MAAM,YAAY,GAAG,0BAA0B,CAC7C,OAAO,CAAC,OAAuC,CAChD,CAAC;IACF,MAAM,IAAI,GAAG,YAAY,EAAE,mBAAmB,CAAC;IAC/C,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QACrC,CAAC,CAAE,IAA0C,CAAC,mBAAmB;QACjE,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqB;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IACxE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAqB;IAC1D,OAAO;QACL,GAAG,OAAO;QACV,aAAa,EAAE,IAAI,aAAa,CAAC;YAC/B,OAAO,EAAE;gBACP,GAAG,mBAAmB,CAAC,OAAO,CAAC;gBAC/B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE;aAClD;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC;IAGnD,OAAO,gBAAgB,CAAC;QACtB,IAAI,EAAE,uCAAuC;QAC7C,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO;YAClC,OAAO,OAAO,CACZ,cAAc,CAAC,OAAO,CAAC,KAAK,OAAO;gBACjC,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,OAAO,CACZ,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"response-format.js","sourceRoot":"","sources":["../../src/channels/response-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAEhE,OAAO,EACL,0BAA0B,GAE3B,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,MAAM,uCAAuC,GAClD,6BAA6B,CAAC;AAEhC,MAAM,CAAC,MAAM,yBAAyB,GACpC,0LAA0L,CAAC;AAI7L,SAAS,cAAc,CAAC,OAAqB;IAC3C,MAAM,YAAY,GAAG,0BAA0B,CAC7C,OAAO,CAAC,OAAuC,CAChD,CAAC;IACF,MAAM,IAAI,GAAG,YAAY,EAAE,mBAAmB,CAAC;IAC/C,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QACrC,CAAC,CAAE,IAA0C,CAAC,mBAAmB;QACjE,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqB;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IACxE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAqB;IAC1D,OAAO;QACL,GAAG,OAAO;QACV,aAAa,EAAE,IAAI,aAAa,CAAC;YAC/B,OAAO,EAAE;gBACP,GAAG,mBAAmB,CAAC,OAAO,CAAC;gBAC/B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE;aAClD;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC;IAGnD,OAAO,gBAAgB,CAAC;QACtB,IAAI,EAAE,uCAAuC;QAC7C,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO;YAClC,OAAO,OAAO,CACZ,cAAc,CAAC,OAAO,CAAC,KAAK,OAAO;gBACjC,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,OAAO,CACZ,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { type ObservedIngressRun, type StartedIngressRun } from "../../ingress/index.js";
2
2
  import { type TriggerClientLike } from "./client.js";
3
+ import { type IdentityContextVerifyOptions } from "./identity-context.js";
3
4
  import { type TriggerChannelResume } from "./types.js";
4
5
  export { TRIGGER_SERVICE_KEY_HEADER } from "./types.js";
5
6
  export declare const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
@@ -9,10 +10,14 @@ type StartAgent = (input: {
9
10
  messages: Record<string, unknown>[];
10
11
  sourceProvider: string;
11
12
  sourceThreadKey: string;
13
+ userId: string;
12
14
  }) => Promise<StartedIngressRun>;
13
15
  type ObserveAgent = (input: {
14
16
  threadId: string;
15
17
  runId: string;
18
+ sourceProvider: string;
19
+ sourceThreadKey: string;
20
+ userId: string;
16
21
  }) => Promise<ObservedIngressRun>;
17
22
  type ResumeAgent = (input: {
18
23
  threadId: string;
@@ -20,6 +25,7 @@ type ResumeAgent = (input: {
20
25
  resume: TriggerChannelResume;
21
26
  sourceProvider: string;
22
27
  sourceThreadKey: string;
28
+ userId: string;
23
29
  }) => Promise<StartedIngressRun>;
24
30
  export interface TriggerChannelHttpOptions {
25
31
  sourceProvider: string;
@@ -30,6 +36,8 @@ export interface TriggerChannelHttpOptions {
30
36
  resumeAgent?: ResumeAgent;
31
37
  observeAgent?: ObserveAgent;
32
38
  triggerClient?: TriggerClientLike;
39
+ /** Override identity-context JWKS verify (unit tests). */
40
+ identityContext?: IdentityContextVerifyOptions;
33
41
  }
34
42
  /** Validate one Trigger message, start its run, and enqueue observation. */
35
43
  export declare function handleTriggerChannelEventRequest(request: Request, options: TriggerChannelHttpOptions): Promise<Response>;
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"AAMA,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjC,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAElC,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjC,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,4EAA4E;AAC5E,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,QAAQ,CAAC,CAgGnB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"AAOA,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,4BAA4B,EAClC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAKL,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjC,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAElC,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjC,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,0DAA0D;IAC1D,eAAe,CAAC,EAAE,4BAA4B,CAAC;CAChD;AAkBD,4EAA4E;AAC5E,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,QAAQ,CAAC,CAyInB"}