@mcp-native/a2ui 0.1.0 → 0.2.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 (72) hide show
  1. package/README.md +74 -13
  2. package/dist/binding.d.ts +33 -0
  3. package/dist/binding.d.ts.map +1 -0
  4. package/dist/binding.js +83 -0
  5. package/dist/binding.js.map +1 -0
  6. package/dist/errors.d.ts +7 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +13 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/index.d.ts +9 -12
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7 -13
  13. package/dist/index.js.map +1 -1
  14. package/dist/mime.d.ts +6 -0
  15. package/dist/mime.d.ts.map +1 -0
  16. package/dist/mime.js +2 -0
  17. package/dist/mime.js.map +1 -0
  18. package/dist/schema-revision.d.ts +3 -0
  19. package/dist/schema-revision.d.ts.map +1 -0
  20. package/dist/schema-revision.js +3 -0
  21. package/dist/schema-revision.js.map +1 -0
  22. package/dist/v1/format-string.d.ts +8 -0
  23. package/dist/v1/format-string.d.ts.map +1 -0
  24. package/dist/v1/format-string.js +377 -0
  25. package/dist/v1/format-string.js.map +1 -0
  26. package/dist/v1/index.d.ts +9 -0
  27. package/dist/v1/index.d.ts.map +1 -0
  28. package/dist/v1/index.js +6 -0
  29. package/dist/v1/index.js.map +1 -0
  30. package/dist/v1/parse.d.ts +12 -0
  31. package/dist/v1/parse.d.ts.map +1 -0
  32. package/dist/v1/parse.js +96 -0
  33. package/dist/v1/parse.js.map +1 -0
  34. package/dist/v1/resolve.d.ts +19 -0
  35. package/dist/v1/resolve.d.ts.map +1 -0
  36. package/dist/v1/resolve.js +112 -0
  37. package/dist/v1/resolve.js.map +1 -0
  38. package/dist/v1/schemas.d.ts +7 -0
  39. package/dist/v1/schemas.d.ts.map +1 -0
  40. package/dist/v1/schemas.js +92 -0
  41. package/dist/v1/schemas.js.map +1 -0
  42. package/dist/v1/store.d.ts +21 -0
  43. package/dist/v1/store.d.ts.map +1 -0
  44. package/dist/v1/store.js +301 -0
  45. package/dist/v1/store.js.map +1 -0
  46. package/dist/v1/types.d.ts +58 -0
  47. package/dist/v1/types.d.ts.map +1 -0
  48. package/dist/v1/types.js +10 -0
  49. package/dist/v1/types.js.map +1 -0
  50. package/dist/v1/validate.d.ts +26 -0
  51. package/dist/v1/validate.d.ts.map +1 -0
  52. package/dist/v1/validate.js +434 -0
  53. package/dist/v1/validate.js.map +1 -0
  54. package/dist/v1/vendor/agent_to_renderer.json +216 -0
  55. package/dist/v1/vendor/catalog.json +1346 -0
  56. package/dist/v1/vendor/common_types.json +395 -0
  57. package/package.json +5 -2
  58. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/CHECKSUMS.sha256 +13 -0
  59. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/PROVENANCE.md +12 -0
  60. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/catalogs/basic/catalog.json +1346 -0
  61. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_capabilities.json +26 -0
  62. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer.json +216 -0
  63. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer_list.json +10 -0
  64. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer_list_wrapper.json +14 -0
  65. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/catalog_definition.json +267 -0
  66. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/common_types.json +395 -0
  67. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_capabilities.json +29 -0
  68. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_data_model.json +22 -0
  69. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent.json +161 -0
  70. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent_list.json +10 -0
  71. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent_list_wrapper.json +14 -0
  72. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/sample.json +22 -0
@@ -0,0 +1,377 @@
1
+ import { JSON_MAX_DEPTH, JSON_MAX_VALUES } from "@mcp-native/core";
2
+ import { A2uiParseError } from "../errors.js";
3
+ const IDENTIFIER = /^[\p{XID_Start}_][\p{XID_Continue}]*$/u;
4
+ const JSON_NUMBER = /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/;
5
+ /** Parses the expression language embedded in one pinned-catalog formatString value. */
6
+ export function parseA2uiV1FormatString(source, path) {
7
+ const parser = new FormatStringParser(path);
8
+ return parser.parse(source);
9
+ }
10
+ class FormatStringParser {
11
+ #path;
12
+ #expressionCount = 0;
13
+ constructor(path) {
14
+ this.#path = path;
15
+ }
16
+ parse(source) {
17
+ const expressions = [];
18
+ for (let index = 0; index < source.length; index += 1) {
19
+ if (source[index] !== "$" || source[index + 1] !== "{" || isEscaped(source, index)) {
20
+ continue;
21
+ }
22
+ const interpolation = this.#readInterpolation(source, index);
23
+ expressions.push(this.#parseExpression(interpolation.content, interpolation.offset, 1));
24
+ index = interpolation.end - 1;
25
+ }
26
+ return {
27
+ expressionCount: this.#expressionCount,
28
+ expressions,
29
+ };
30
+ }
31
+ #parseExpression(source, offset, depth) {
32
+ this.#expressionCount += 1;
33
+ if (this.#expressionCount > JSON_MAX_VALUES) {
34
+ this.#fail(`exceeds maximum of ${JSON_MAX_VALUES} interpolation expressions`, offset);
35
+ }
36
+ if (depth > JSON_MAX_DEPTH) {
37
+ this.#fail(`exceeds maximum expression depth of ${JSON_MAX_DEPTH}`, offset);
38
+ }
39
+ const expression = source.trim();
40
+ if (expression.length === 0) {
41
+ this.#fail("contains an empty interpolation expression", offset);
42
+ }
43
+ if (expression.startsWith("${")) {
44
+ const interpolation = this.#readInterpolation(expression, 0);
45
+ if (expression.slice(interpolation.end).trim().length !== 0) {
46
+ this.#fail("contains trailing content after a nested expression", offset);
47
+ }
48
+ return this.#parseExpression(interpolation.content, offset + interpolation.offset, depth + 1);
49
+ }
50
+ if (expression[0] === '"' || expression[0] === "'") {
51
+ return parseQuotedLiteral(expression, this.#path, offset);
52
+ }
53
+ if (expression === "true") {
54
+ return true;
55
+ }
56
+ if (expression === "false") {
57
+ return false;
58
+ }
59
+ if (expression === "null") {
60
+ return null;
61
+ }
62
+ if (JSON_NUMBER.test(expression)) {
63
+ const value = Number(expression);
64
+ if (!Number.isFinite(value)) {
65
+ this.#fail("contains a non-finite numeric literal", offset);
66
+ }
67
+ return value;
68
+ }
69
+ const openParenthesis = findFirstParenthesis(expression);
70
+ if (openParenthesis === -1) {
71
+ return { path: expression };
72
+ }
73
+ const functionName = expression.slice(0, openParenthesis).trim();
74
+ if (!isFunctionIdentifier(functionName)) {
75
+ return { path: expression };
76
+ }
77
+ const closeParenthesis = findClosingParenthesis(expression, openParenthesis, this.#path);
78
+ if (expression.slice(closeParenthesis + 1).trim().length !== 0) {
79
+ this.#fail("contains trailing content after a function call", offset);
80
+ }
81
+ const args = this.#parseArguments(expression.slice(openParenthesis + 1, closeParenthesis), offset + openParenthesis + 1, depth);
82
+ return {
83
+ call: functionName,
84
+ ...(Object.keys(args).length === 0 ? {} : { args }),
85
+ };
86
+ }
87
+ #parseArguments(source, offset, depth) {
88
+ const args = {};
89
+ if (source.trim().length === 0) {
90
+ return args;
91
+ }
92
+ for (const segment of splitTopLevel(source, ",", this.#path)) {
93
+ const separator = findTopLevelCharacter(segment.value, ":", this.#path);
94
+ if (separator === -1) {
95
+ this.#fail("requires every function argument to be named", offset + segment.offset);
96
+ }
97
+ const name = segment.value.slice(0, separator).trim();
98
+ if (!IDENTIFIER.test(name)) {
99
+ this.#fail(`contains invalid argument name ${JSON.stringify(name)}`, offset + segment.offset);
100
+ }
101
+ if (Object.hasOwn(args, name)) {
102
+ this.#fail(`contains duplicate argument ${JSON.stringify(name)}`, offset + segment.offset);
103
+ }
104
+ const valueSource = segment.value.slice(separator + 1).trim();
105
+ if (valueSource.length === 0) {
106
+ this.#fail(`contains an empty value for argument ${JSON.stringify(name)}`, offset + segment.offset);
107
+ }
108
+ defineJsonProperty(args, name, this.#parseArgumentValue(valueSource, offset + segment.offset + separator + 1, depth + 1));
109
+ }
110
+ return args;
111
+ }
112
+ #parseArgumentValue(source, offset, depth) {
113
+ if (source.startsWith("${")) {
114
+ const interpolation = this.#readInterpolation(source, 0);
115
+ if (source.slice(interpolation.end).trim().length !== 0) {
116
+ this.#fail("contains trailing content after a nested expression", offset);
117
+ }
118
+ return this.#parseExpression(interpolation.content, offset + interpolation.offset, depth);
119
+ }
120
+ if (source[0] === '"' || source[0] === "'") {
121
+ return parseQuotedLiteral(source, this.#path, offset);
122
+ }
123
+ if (source === "true") {
124
+ return true;
125
+ }
126
+ if (source === "false") {
127
+ return false;
128
+ }
129
+ if (JSON_NUMBER.test(source)) {
130
+ const value = Number(source);
131
+ if (!Number.isFinite(value)) {
132
+ this.#fail("contains a non-finite numeric literal", offset);
133
+ }
134
+ return value;
135
+ }
136
+ this.#fail(`contains unsupported argument literal ${JSON.stringify(source)}`, offset);
137
+ }
138
+ #readInterpolation(source, start) {
139
+ let nesting = 1;
140
+ let quote;
141
+ let escaped = false;
142
+ for (let index = start + 2; index < source.length; index += 1) {
143
+ const character = source[index];
144
+ if (quote !== undefined) {
145
+ if (escaped) {
146
+ escaped = false;
147
+ }
148
+ else if (character === "\\") {
149
+ escaped = true;
150
+ }
151
+ else if (character === quote) {
152
+ quote = undefined;
153
+ }
154
+ continue;
155
+ }
156
+ if (character === '"' || character === "'") {
157
+ quote = character;
158
+ continue;
159
+ }
160
+ if (character === "$" && source[index + 1] === "{" && !isEscaped(source, index)) {
161
+ nesting += 1;
162
+ index += 1;
163
+ continue;
164
+ }
165
+ if (character === "}") {
166
+ nesting -= 1;
167
+ if (nesting === 0) {
168
+ return {
169
+ content: source.slice(start + 2, index),
170
+ end: index + 1,
171
+ offset: start + 2,
172
+ };
173
+ }
174
+ }
175
+ }
176
+ this.#fail("contains an unterminated interpolation expression", start);
177
+ }
178
+ #fail(message, offset) {
179
+ throw new A2uiParseError(`A2UI formatString at ${this.#path} ${message} near offset ${offset}`);
180
+ }
181
+ }
182
+ function findFirstParenthesis(source) {
183
+ for (let index = 0; index < source.length; index += 1) {
184
+ if (source[index] === "(") {
185
+ return index;
186
+ }
187
+ }
188
+ return -1;
189
+ }
190
+ function findClosingParenthesis(source, open, path) {
191
+ let depth = 1;
192
+ let quote;
193
+ let escaped = false;
194
+ for (let index = open + 1; index < source.length; index += 1) {
195
+ const character = source[index];
196
+ if (quote !== undefined) {
197
+ if (escaped) {
198
+ escaped = false;
199
+ }
200
+ else if (character === "\\") {
201
+ escaped = true;
202
+ }
203
+ else if (character === quote) {
204
+ quote = undefined;
205
+ }
206
+ continue;
207
+ }
208
+ if (character === '"' || character === "'") {
209
+ quote = character;
210
+ }
211
+ else if (character === "(") {
212
+ depth += 1;
213
+ }
214
+ else if (character === ")") {
215
+ depth -= 1;
216
+ if (depth === 0) {
217
+ return index;
218
+ }
219
+ }
220
+ }
221
+ throw new A2uiParseError(`A2UI formatString at ${path} contains an unclosed function call`);
222
+ }
223
+ function splitTopLevel(source, separator, path) {
224
+ const segments = [];
225
+ let start = 0;
226
+ walkTopLevel(source, path, (character, index, isTopLevel) => {
227
+ if (isTopLevel && character === separator) {
228
+ segments.push({ offset: start, value: source.slice(start, index) });
229
+ start = index + 1;
230
+ }
231
+ });
232
+ segments.push({ offset: start, value: source.slice(start) });
233
+ return segments;
234
+ }
235
+ function findTopLevelCharacter(source, target, path) {
236
+ let result = -1;
237
+ walkTopLevel(source, path, (character, index, isTopLevel) => {
238
+ if (result === -1 && isTopLevel && character === target) {
239
+ result = index;
240
+ }
241
+ });
242
+ return result;
243
+ }
244
+ function walkTopLevel(source, path, visit) {
245
+ let interpolationDepth = 0;
246
+ let parenthesisDepth = 0;
247
+ let quote;
248
+ let escaped = false;
249
+ for (let index = 0; index < source.length; index += 1) {
250
+ const character = source[index];
251
+ if (quote !== undefined) {
252
+ if (escaped) {
253
+ escaped = false;
254
+ }
255
+ else if (character === "\\") {
256
+ escaped = true;
257
+ }
258
+ else if (character === quote) {
259
+ quote = undefined;
260
+ }
261
+ visit(character, index, false);
262
+ continue;
263
+ }
264
+ if (character === '"' || character === "'") {
265
+ quote = character;
266
+ visit(character, index, false);
267
+ continue;
268
+ }
269
+ if (character === "$" && source[index + 1] === "{") {
270
+ interpolationDepth += 1;
271
+ visit(character, index, false);
272
+ index += 1;
273
+ continue;
274
+ }
275
+ if (character === "}" && interpolationDepth > 0) {
276
+ interpolationDepth -= 1;
277
+ visit(character, index, false);
278
+ continue;
279
+ }
280
+ if (character === "(" && interpolationDepth === 0) {
281
+ parenthesisDepth += 1;
282
+ }
283
+ else if (character === ")" && interpolationDepth === 0) {
284
+ parenthesisDepth -= 1;
285
+ if (parenthesisDepth < 0) {
286
+ throw new A2uiParseError(`A2UI formatString at ${path} contains an unmatched ")"`);
287
+ }
288
+ }
289
+ visit(character, index, interpolationDepth === 0 && parenthesisDepth === 0);
290
+ }
291
+ if (quote !== undefined || interpolationDepth !== 0 || parenthesisDepth !== 0) {
292
+ throw new A2uiParseError(`A2UI formatString at ${path} contains unbalanced argument syntax`);
293
+ }
294
+ }
295
+ function parseQuotedLiteral(source, path, offset) {
296
+ const quote = source[0];
297
+ let result = "";
298
+ for (let index = 1; index < source.length; index += 1) {
299
+ const character = source[index];
300
+ if (character === quote) {
301
+ if (source.slice(index + 1).trim().length !== 0) {
302
+ throw new A2uiParseError(`A2UI formatString at ${path} contains trailing quoted-literal content near offset ${offset}`);
303
+ }
304
+ return result;
305
+ }
306
+ if (character.charCodeAt(0) < 0x20) {
307
+ throw new A2uiParseError(`A2UI formatString at ${path} contains a control character near offset ${offset + index}`);
308
+ }
309
+ if (character !== "\\") {
310
+ result += character;
311
+ continue;
312
+ }
313
+ const escaped = source[index + 1];
314
+ if (escaped === undefined) {
315
+ break;
316
+ }
317
+ index += 1;
318
+ switch (escaped) {
319
+ case "\\":
320
+ case "/":
321
+ result += escaped;
322
+ break;
323
+ case '"':
324
+ result += '"';
325
+ break;
326
+ case "'":
327
+ result += "'";
328
+ break;
329
+ case "b":
330
+ result += "\b";
331
+ break;
332
+ case "f":
333
+ result += "\f";
334
+ break;
335
+ case "n":
336
+ result += "\n";
337
+ break;
338
+ case "r":
339
+ result += "\r";
340
+ break;
341
+ case "t":
342
+ result += "\t";
343
+ break;
344
+ case "u": {
345
+ const digits = source.slice(index + 1, index + 5);
346
+ if (!/^[0-9a-fA-F]{4}$/.test(digits)) {
347
+ throw new A2uiParseError(`A2UI formatString at ${path} contains an invalid Unicode escape near offset ${offset + index}`);
348
+ }
349
+ result += String.fromCharCode(Number.parseInt(digits, 16));
350
+ index += 4;
351
+ break;
352
+ }
353
+ default:
354
+ throw new A2uiParseError(`A2UI formatString at ${path} contains unsupported escape ${JSON.stringify(`\\${escaped}`)} near offset ${offset + index}`);
355
+ }
356
+ }
357
+ throw new A2uiParseError(`A2UI formatString at ${path} contains an unterminated quoted literal near offset ${offset}`);
358
+ }
359
+ function isFunctionIdentifier(value) {
360
+ return value === "@index" || IDENTIFIER.test(value);
361
+ }
362
+ function isEscaped(source, index) {
363
+ let backslashes = 0;
364
+ for (let cursor = index - 1; cursor >= 0 && source[cursor] === "\\"; cursor -= 1) {
365
+ backslashes += 1;
366
+ }
367
+ return backslashes % 2 === 1;
368
+ }
369
+ function defineJsonProperty(object, key, value) {
370
+ Object.defineProperty(object, key, {
371
+ configurable: true,
372
+ enumerable: true,
373
+ value,
374
+ writable: true,
375
+ });
376
+ }
377
+ //# sourceMappingURL=format-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-string.js","sourceRoot":"","sources":["../../src/v1/format-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAa9C,MAAM,UAAU,GAAG,wCAAwC,CAAC;AAC5D,MAAM,WAAW,GAAG,wDAAwD,CAAC;AAE7E,wFAAwF;AACxF,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,IAAY;IAClE,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,kBAAkB;IACb,KAAK,CAAS;IACvB,gBAAgB,GAAG,CAAC,CAAC;IAErB,YAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAc;QAClB,MAAM,WAAW,GAAgB,EAAE,CAAC;QACpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACtD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;gBACnF,SAAS;YACX,CAAC;YACD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC7D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACxF,KAAK,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QAC5D,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,gBAAgB,GAAG,eAAe,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,sBAAsB,eAAe,4BAA4B,EAAE,MAAM,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,uCAAuC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,4CAA4C,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,KAAK,CAAC,qDAAqD,EAAE,MAAM,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnD,OAAO,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,eAAe,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzF,IAAI,UAAU,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,KAAK,CAAC,iDAAiD,EAAE,MAAM,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAC/B,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,EAAE,gBAAgB,CAAC,EACvD,MAAM,GAAG,eAAe,GAAG,CAAC,EAC5B,KAAK,CACN,CAAC;QACF,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QAC3D,MAAM,IAAI,GAA8B,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACxE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,8CAA8C,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CACR,kCAAkC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EACxD,MAAM,GAAG,OAAO,CAAC,MAAM,CACxB,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7F,CAAC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CACR,wCAAwC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAC9D,MAAM,GAAG,OAAO,CAAC,MAAM,CACxB,CAAC;YACJ,CAAC;YACD,kBAAkB,CAChB,IAAI,EACJ,IAAI,EACJ,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAC1F,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QAC/D,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,KAAK,CAAC,qDAAqD,EAAE,MAAM,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3C,OAAO,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,yCAAyC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACxF,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,KAAa;QAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,KAA4B,CAAC;QACjC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,GAAG,KAAK,CAAC;gBAClB,CAAC;qBAAM,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBAC9B,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;qBAAM,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;oBAC/B,KAAK,GAAG,SAAS,CAAC;gBACpB,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBAC3C,KAAK,GAAG,SAAS,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,IAAI,SAAS,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;gBAChF,OAAO,IAAI,CAAC,CAAC;gBACb,KAAK,IAAI,CAAC,CAAC;gBACX,SAAS;YACX,CAAC;YACD,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;oBAClB,OAAO;wBACL,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC;wBACvC,GAAG,EAAE,KAAK,GAAG,CAAC;wBACd,MAAM,EAAE,KAAK,GAAG,CAAC;qBAClB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,MAAc;QACnC,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,CAAC,KAAK,IAAI,OAAO,gBAAgB,MAAM,EAAE,CAAC,CAAC;IAClG,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,MAAc;IAC1C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc,EAAE,IAAY,EAAE,IAAY;IACxE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAA4B,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;iBAAM,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBAC/B,KAAK,GAAG,SAAS,CAAC;YACpB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC3C,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,qCAAqC,CAAC,CAAC;AAC9F,CAAC;AAOD,SAAS,aAAa,CAAC,MAAc,EAAE,SAAiB,EAAE,IAAY;IACpE,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QAC1D,IAAI,UAAU,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACpE,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc,EAAE,MAAc,EAAE,IAAY;IACzE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QAC1D,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,UAAU,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACxD,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,MAAc,EACd,IAAY,EACZ,KAAsE;IAEtE,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,KAA4B,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;iBAAM,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC9B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBAC/B,KAAK,GAAG,SAAS,CAAC;YACpB,CAAC;YACD,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC3C,KAAK,GAAG,SAAS,CAAC;YAClB,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnD,kBAAkB,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAChD,kBAAkB,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,IAAI,kBAAkB,KAAK,CAAC,EAAE,CAAC;YAClD,gBAAgB,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,IAAI,kBAAkB,KAAK,CAAC,EAAE,CAAC;YACzD,gBAAgB,IAAI,CAAC,CAAC;YACtB,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,4BAA4B,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QACD,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,kBAAkB,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,kBAAkB,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,sCAAsC,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,IAAY,EAAE,MAAc;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;IACzB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAE,CAAC;QACjC,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,cAAc,CACtB,wBAAwB,IAAI,yDAAyD,MAAM,EAAE,CAC9F,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,cAAc,CACtB,wBAAwB,IAAI,6CAA6C,MAAM,GAAG,KAAK,EAAE,CAC1F,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,SAAS,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM;QACR,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;QACX,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC;YACV,KAAK,GAAG;gBACN,MAAM,IAAI,OAAO,CAAC;gBAClB,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,GAAG,CAAC;gBACd,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,GAAG,CAAC;gBACd,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,IAAI,CAAC;gBACf,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,IAAI,CAAC;gBACf,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,IAAI,CAAC;gBACf,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,IAAI,CAAC;gBACf,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,IAAI,CAAC;gBACf,MAAM;YACR,KAAK,GAAG,EAAE,CAAC;gBACT,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,cAAc,CACtB,wBAAwB,IAAI,mDAAmD,MAAM,GAAG,KAAK,EAAE,CAChG,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3D,KAAK,IAAI,CAAC,CAAC;gBACX,MAAM;YACR,CAAC;YACD;gBACE,MAAM,IAAI,cAAc,CACtB,wBAAwB,IAAI,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC,gBAAgB,MAAM,GAAG,KAAK,EAAE,CAC3H,CAAC;QACN,CAAC;IACH,CAAC;IACD,MAAM,IAAI,cAAc,CACtB,wBAAwB,IAAI,wDAAwD,MAAM,EAAE,CAC7F,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,KAAa;IAC9C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACjF,WAAW,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAiC,EACjC,GAAW,EACX,KAAgB;IAEhB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;QACjC,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,KAAK;QACL,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { A2UI_V1_MAX_COMPONENTS, A2UI_V1_MAX_ENVELOPES, A2UI_V1_MAX_SURFACES, A2UI_V1_MAX_SOURCE_LENGTH, A2UI_V1_PROTOCOL_VERSION, } from "./types.js";
2
+ export type { A2uiV1Component, A2uiV1CreateSurfaceEnvelope, A2uiV1DeleteSurfaceEnvelope, A2uiV1Envelope, A2uiV1EnvelopeKind, A2uiV1SurfaceState, A2uiV1UpdateComponentsEnvelope, A2uiV1UpdateDataModelEnvelope, } from "./types.js";
3
+ export { parseA2uiV1Envelope, parseA2uiV1Jsonl } from "./parse.js";
4
+ export { A2uiSurfaceStore } from "./store.js";
5
+ export { resolveA2uiV1JsonlFromToolResult } from "./resolve.js";
6
+ export type { ResolvedA2uiV1JsonlResource } from "./resolve.js";
7
+ export { A2UI_V1_BASIC_CATALOG_ID, A2UI_V1_BASIC_COMPONENT_NAMES, A2UI_V1_BASIC_FUNCTION_NAMES, A2UI_V1_SYSTEM_FUNCTION_NAMES, createA2uiV1BasicCatalogPolicy, validateA2uiV1SurfaceState, } from "./validate.js";
8
+ export type { A2uiV1BasicCatalogPolicyOptions, A2uiV1SurfaceValidationPolicy } from "./validate.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,eAAe,EACf,2BAA2B,EAC3B,2BAA2B,EAC3B,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { A2UI_V1_MAX_COMPONENTS, A2UI_V1_MAX_ENVELOPES, A2UI_V1_MAX_SURFACES, A2UI_V1_MAX_SOURCE_LENGTH, A2UI_V1_PROTOCOL_VERSION, } from "./types.js";
2
+ export { parseA2uiV1Envelope, parseA2uiV1Jsonl } from "./parse.js";
3
+ export { A2uiSurfaceStore } from "./store.js";
4
+ export { resolveA2uiV1JsonlFromToolResult } from "./resolve.js";
5
+ export { A2UI_V1_BASIC_CATALOG_ID, A2UI_V1_BASIC_COMPONENT_NAMES, A2UI_V1_BASIC_FUNCTION_NAMES, A2UI_V1_SYSTEM_FUNCTION_NAMES, createA2uiV1BasicCatalogPolicy, validateA2uiV1SurfaceState, } from "./validate.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAWpB,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { A2uiV1Envelope } from "./types.js";
2
+ /**
3
+ * Validates one official A2UI v1.0 agent-to-renderer lifecycle envelope.
4
+ * Function-call envelopes are rejected in this milestone.
5
+ */
6
+ export declare function parseA2uiV1Envelope(input: string | unknown): A2uiV1Envelope;
7
+ /**
8
+ * Parses a UTF-8 JSONL batch of agent-to-renderer envelopes.
9
+ * Empty lines are skipped. Any invalid line rejects the entire batch.
10
+ */
11
+ export declare function parseA2uiV1Jsonl(text: string): readonly A2uiV1Envelope[];
12
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/v1/parse.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,YAAY,CAAC;AAgBrE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,CA0D3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAiCxE"}
@@ -0,0 +1,96 @@
1
+ import { parseJsonValue } from "@mcp-native/core";
2
+ import { A2uiParseError } from "../errors.js";
3
+ import { formatAjvErrors, getA2uiV1EnvelopeValidator } from "./schemas.js";
4
+ import { A2UI_V1_MAX_ENVELOPES, A2UI_V1_MAX_SOURCE_LENGTH, A2UI_V1_PROTOCOL_VERSION, } from "./types.js";
5
+ const LIFECYCLE_KEYS = [
6
+ "createSurface",
7
+ "updateComponents",
8
+ "updateDataModel",
9
+ "deleteSurface",
10
+ ];
11
+ const UNSUPPORTED_KEYS = ["callRendererFunction", "agentFunctionResponse"];
12
+ /**
13
+ * Validates one official A2UI v1.0 agent-to-renderer lifecycle envelope.
14
+ * Function-call envelopes are rejected in this milestone.
15
+ */
16
+ export function parseA2uiV1Envelope(input) {
17
+ let value = input;
18
+ if (typeof input === "string") {
19
+ if (input.length > A2UI_V1_MAX_SOURCE_LENGTH) {
20
+ throw new A2uiParseError(`A2UI v1 envelope exceeds maximum length of ${A2UI_V1_MAX_SOURCE_LENGTH}`);
21
+ }
22
+ try {
23
+ value = JSON.parse(input);
24
+ }
25
+ catch (error) {
26
+ const message = error instanceof Error ? error.message : "unknown JSON error";
27
+ throw new A2uiParseError(`Invalid JSON: ${message}`, { cause: error });
28
+ }
29
+ }
30
+ let reconstructed;
31
+ try {
32
+ reconstructed = parseJsonValue(value, "envelope");
33
+ }
34
+ catch (error) {
35
+ const message = error instanceof Error ? error.message : "Invalid JSON envelope";
36
+ throw new A2uiParseError(message, { cause: error });
37
+ }
38
+ if (reconstructed === null || typeof reconstructed !== "object" || Array.isArray(reconstructed)) {
39
+ throw new A2uiParseError("Expected an object at envelope");
40
+ }
41
+ const envelopeObject = reconstructed;
42
+ const keys = Object.keys(envelopeObject).filter((key) => key !== "version");
43
+ for (const key of UNSUPPORTED_KEYS) {
44
+ if (Object.hasOwn(envelopeObject, key)) {
45
+ throw new A2uiParseError(`Unsupported A2UI v1 envelope message ${JSON.stringify(key)}; only lifecycle messages are implemented`);
46
+ }
47
+ }
48
+ if (keys.length !== 1 || !isLifecycleKey(keys[0])) {
49
+ throw new A2uiParseError("Expected exactly one of createSurface, updateComponents, updateDataModel, or deleteSurface");
50
+ }
51
+ if (envelopeObject.version !== A2UI_V1_PROTOCOL_VERSION) {
52
+ throw new A2uiParseError(`Unsupported A2UI protocol version: ${JSON.stringify(envelopeObject.version)}`);
53
+ }
54
+ const validate = getA2uiV1EnvelopeValidator();
55
+ if (!validate(envelopeObject)) {
56
+ throw new A2uiParseError(`A2UI v1 schema validation failed: ${formatAjvErrors(validate)}`);
57
+ }
58
+ return envelopeObject;
59
+ }
60
+ /**
61
+ * Parses a UTF-8 JSONL batch of agent-to-renderer envelopes.
62
+ * Empty lines are skipped. Any invalid line rejects the entire batch.
63
+ */
64
+ export function parseA2uiV1Jsonl(text) {
65
+ if (typeof text !== "string") {
66
+ throw new A2uiParseError("Expected a string JSONL body");
67
+ }
68
+ if (text.length > A2UI_V1_MAX_SOURCE_LENGTH) {
69
+ throw new A2uiParseError(`A2UI v1 JSONL source exceeds maximum length of ${A2UI_V1_MAX_SOURCE_LENGTH}`);
70
+ }
71
+ const envelopes = [];
72
+ const lines = text.split(/\r?\n/);
73
+ for (let index = 0; index < lines.length; index += 1) {
74
+ const line = lines[index];
75
+ if (line === undefined || line.trim().length === 0) {
76
+ continue;
77
+ }
78
+ if (envelopes.length >= A2UI_V1_MAX_ENVELOPES) {
79
+ throw new A2uiParseError(`A2UI v1 JSONL exceeds maximum of ${A2UI_V1_MAX_ENVELOPES} envelopes`);
80
+ }
81
+ try {
82
+ envelopes.push(parseA2uiV1Envelope(line));
83
+ }
84
+ catch (error) {
85
+ const message = error instanceof Error ? error.message : "Invalid envelope";
86
+ throw new A2uiParseError(`Invalid A2UI v1 JSONL at line ${index + 1}: ${message}`, {
87
+ cause: error,
88
+ });
89
+ }
90
+ }
91
+ return envelopes;
92
+ }
93
+ function isLifecycleKey(value) {
94
+ return value !== undefined && LIFECYCLE_KEYS.includes(value);
95
+ }
96
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/v1/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { McpToolCallResult } from "@mcp-native/core";
2
+ import type { A2uiMcpBindingNegotiation } from "../binding.js";
3
+ import { A2UI_MIME_TYPE, type A2uiResourceReader } from "../mime.js";
4
+ import type { A2uiV1Envelope } from "./types.js";
5
+ export interface ResolvedA2uiV1JsonlResource {
6
+ readonly uri: string;
7
+ readonly mimeType: typeof A2UI_MIME_TYPE;
8
+ readonly envelopes: readonly A2uiV1Envelope[];
9
+ }
10
+ /**
11
+ * Resolves the single A2UI resource link in a successful tool result and parses
12
+ * its text body as an ordered v1 JSONL envelope batch. Does not invoke the
13
+ * custom `0.1` surface parser.
14
+ *
15
+ * Callers must only use this after mutual binding negotiation; MIME type alone
16
+ * does not grant the transport.
17
+ */
18
+ export declare function resolveA2uiV1JsonlFromToolResult(reader: A2uiResourceReader, toolResult: McpToolCallResult, negotiation: A2uiMcpBindingNegotiation): Promise<ResolvedA2uiV1JsonlResource>;
19
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/v1/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqC,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG7F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,cAAc,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,iBAAiB,EAC7B,WAAW,EAAE,yBAAyB,GACrC,OAAO,CAAC,2BAA2B,CAAC,CAyCtC"}