@a2anet/a2a-utils 0.1.0 → 0.3.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 (58) hide show
  1. package/README.md +1412 -2
  2. package/dist/artifacts/data.d.ts +118 -0
  3. package/dist/artifacts/data.d.ts.map +1 -0
  4. package/dist/artifacts/data.js +583 -0
  5. package/dist/artifacts/data.js.map +1 -0
  6. package/dist/artifacts/index.d.ts +33 -0
  7. package/dist/artifacts/index.d.ts.map +1 -0
  8. package/dist/artifacts/index.js +131 -0
  9. package/dist/artifacts/index.js.map +1 -0
  10. package/dist/artifacts/text.d.ts +54 -0
  11. package/dist/artifacts/text.d.ts.map +1 -0
  12. package/dist/artifacts/text.js +151 -0
  13. package/dist/artifacts/text.js.map +1 -0
  14. package/dist/client/a2a-session.d.ts +94 -0
  15. package/dist/client/a2a-session.d.ts.map +1 -0
  16. package/dist/client/a2a-session.js +264 -0
  17. package/dist/client/a2a-session.js.map +1 -0
  18. package/dist/client/a2a-tools.d.ts +152 -0
  19. package/dist/client/a2a-tools.d.ts.map +1 -0
  20. package/dist/client/a2a-tools.js +470 -0
  21. package/dist/client/a2a-tools.js.map +1 -0
  22. package/dist/client/agent-manager.d.ts +94 -0
  23. package/dist/client/agent-manager.d.ts.map +1 -0
  24. package/dist/client/agent-manager.js +243 -0
  25. package/dist/client/agent-manager.js.map +1 -0
  26. package/dist/client/index.d.ts +4 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +7 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/files/file-store.d.ts +24 -0
  31. package/dist/files/file-store.d.ts.map +1 -0
  32. package/dist/files/file-store.js +5 -0
  33. package/dist/files/file-store.js.map +1 -0
  34. package/dist/files/index.d.ts +3 -0
  35. package/dist/files/index.d.ts.map +1 -0
  36. package/dist/files/index.js +5 -0
  37. package/dist/files/index.js.map +1 -0
  38. package/dist/files/local-file-store.d.ts +26 -0
  39. package/dist/files/local-file-store.d.ts.map +1 -0
  40. package/dist/files/local-file-store.js +99 -0
  41. package/dist/files/local-file-store.js.map +1 -0
  42. package/dist/index.d.ts +11 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +14 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/tasks/index.d.ts +2 -0
  47. package/dist/tasks/index.d.ts.map +1 -0
  48. package/dist/tasks/index.js +5 -0
  49. package/dist/tasks/index.js.map +1 -0
  50. package/dist/tasks/json-task-store.d.ts +32 -0
  51. package/dist/tasks/json-task-store.d.ts.map +1 -0
  52. package/dist/tasks/json-task-store.js +66 -0
  53. package/dist/tasks/json-task-store.js.map +1 -0
  54. package/dist/types.d.ts +65 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +23 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +17 -4
@@ -0,0 +1,131 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { DataArtifacts } from "./data.js";
5
+ import { TextArtifacts } from "./text.js";
6
+ /**
7
+ * Minimize artifact list for LLM display.
8
+ *
9
+ * Combines all TextParts within each artifact into a single TextPartForLLM.
10
+ * Handles FileParts by including file metadata and saved paths.
11
+ *
12
+ * @param artifacts - List of artifacts to minimize.
13
+ * @param opts.characterLimit - Character limit above which to minimize.
14
+ * @param opts.minimizedObjectStringLength - Max length for string values in objects.
15
+ * @param opts.savedFilePaths - Mapping of artifactId to saved file paths.
16
+ * When provided, file parts show saved locations.
17
+ * When null, FileWithBytes parts show an error and FileWithUri parts
18
+ * show the raw URI.
19
+ * @param opts.textTip - Tip string for minimized text artifacts. null = no tip.
20
+ * @param opts.dataTip - Tip string for minimized data artifacts. null = no tip.
21
+ *
22
+ * @returns List of ArtifactForLLM objects.
23
+ */
24
+ export function minimizeArtifacts(artifacts, opts) {
25
+ const characterLimit = opts?.characterLimit ?? 50_000;
26
+ const minimizedObjectStringLength = opts?.minimizedObjectStringLength ?? 5_000;
27
+ const savedFilePaths = opts?.savedFilePaths ?? null;
28
+ const textTip = opts?.textTip ?? null;
29
+ const dataTip = opts?.dataTip ?? null;
30
+ const result = [];
31
+ for (const artifact of artifacts) {
32
+ const parts = [];
33
+ // Combine all text parts into one
34
+ const textSegments = [];
35
+ for (const part of artifact.parts) {
36
+ if (part.kind === "text") {
37
+ textSegments.push(part.text);
38
+ }
39
+ }
40
+ if (textSegments.length > 0) {
41
+ const combinedText = textSegments.join("");
42
+ const textMinimized = TextArtifacts.minimize(combinedText, {
43
+ characterLimit,
44
+ tip: textTip,
45
+ });
46
+ parts.push({
47
+ kind: "text",
48
+ ...textMinimized,
49
+ });
50
+ }
51
+ // Each data part stays separate
52
+ for (const part of artifact.parts) {
53
+ if (part.kind === "data") {
54
+ const dataMinimized = DataArtifacts.minimize(part.data, {
55
+ characterLimit,
56
+ minimizedObjectStringLength,
57
+ tip: dataTip,
58
+ });
59
+ parts.push({ kind: "data", data: dataMinimized });
60
+ }
61
+ }
62
+ // Handle file parts
63
+ const artifactSaved = savedFilePaths !== null ? (savedFilePaths[artifact.artifactId] ?? null) : null;
64
+ for (const part of artifact.parts) {
65
+ if (part.kind === "file") {
66
+ const fileObj = part.file;
67
+ const name = fileObj.name ?? null;
68
+ const mimeType = fileObj.mimeType ?? null;
69
+ let filePart;
70
+ if ("bytes" in fileObj) {
71
+ // FileWithBytes
72
+ if (artifactSaved !== null) {
73
+ filePart = {
74
+ kind: "file",
75
+ name,
76
+ mimeType,
77
+ uri: null,
78
+ bytes: { _saved_to: artifactSaved },
79
+ };
80
+ }
81
+ else {
82
+ filePart = {
83
+ kind: "file",
84
+ name,
85
+ mimeType,
86
+ uri: null,
87
+ bytes: {
88
+ _error: "No FileStore configured. Cannot access file bytes.",
89
+ },
90
+ };
91
+ }
92
+ }
93
+ else if ("uri" in fileObj) {
94
+ // FileWithUri
95
+ if (artifactSaved !== null) {
96
+ filePart = {
97
+ kind: "file",
98
+ name,
99
+ mimeType,
100
+ uri: { _saved_to: artifactSaved },
101
+ bytes: null,
102
+ };
103
+ }
104
+ else {
105
+ filePart = {
106
+ kind: "file",
107
+ name,
108
+ mimeType,
109
+ uri: fileObj.uri,
110
+ bytes: null,
111
+ };
112
+ }
113
+ }
114
+ else {
115
+ continue;
116
+ }
117
+ parts.push(filePart);
118
+ }
119
+ }
120
+ result.push({
121
+ artifactId: artifact.artifactId,
122
+ description: artifact.description ?? null,
123
+ name: artifact.name ?? null,
124
+ parts,
125
+ });
126
+ }
127
+ return result;
128
+ }
129
+ export { DataArtifacts } from "./data.js";
130
+ export { TextArtifacts } from "./text.js";
131
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/artifacts/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /** Text artifact operations: viewing and minimization. */
2
+ export declare class TextArtifacts {
3
+ /**
4
+ * View text content with optional line or character range selection.
5
+ *
6
+ * @param text - The text to view.
7
+ * @param opts.lineStart - Starting line number (1-based, inclusive). null = start.
8
+ * @param opts.lineEnd - Ending line number (1-based, inclusive). null = end.
9
+ * @param opts.characterStart - Starting character index (0-based, inclusive). null = start.
10
+ * @param opts.characterEnd - Ending character index (0-based, exclusive). null = end.
11
+ * @param opts.characterLimit - Maximum output size in characters.
12
+ *
13
+ * @returns Filtered text string.
14
+ *
15
+ * @throws Error if both line and character selection are provided,
16
+ * or if parameters are invalid.
17
+ */
18
+ static view(text: string, opts?: {
19
+ lineStart?: number | null;
20
+ lineEnd?: number | null;
21
+ characterStart?: number | null;
22
+ characterEnd?: number | null;
23
+ characterLimit?: number;
24
+ }): string;
25
+ /**
26
+ * Minimize text content for display.
27
+ *
28
+ * If text is <= characterLimit chars, return it in full inside "text" key.
29
+ * If text is > characterLimit chars, show first half and last half with metadata.
30
+ *
31
+ * @param text - The text content to minimize.
32
+ * @param opts.characterLimit - Character limit above which to minimize.
33
+ * @param opts.tip - Tip to include. Defaults to null (no tip); pass a string to include one.
34
+ *
35
+ * @returns Object with "text" key containing readable content and metadata fields.
36
+ */
37
+ static minimize(text: string, opts?: {
38
+ characterLimit?: number;
39
+ tip?: string | null;
40
+ }): Record<string, unknown>;
41
+ /**
42
+ * Parse line range parameters.
43
+ *
44
+ * @param lineStart - Starting line number (1-based, inclusive). null means 1.
45
+ * @param lineEnd - Ending line number (1-based, inclusive). null means totalLines.
46
+ * @param totalLines - Total number of lines.
47
+ *
48
+ * @returns Tuple of [startIndex, endIndex] as 0-based indices.
49
+ *
50
+ * @throws Error if line numbers are invalid.
51
+ */
52
+ private static parseLineRange;
53
+ }
54
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/artifacts/text.ts"],"names":[],"mappings":"AAaA,0DAA0D;AAC1D,qBAAa,aAAa;IACtB;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,IAAI,CACP,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,GACF,MAAM;IAuCT;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,QAAQ,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,GACF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAqD1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CA8BhC"}
@@ -0,0 +1,151 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ /**
5
+ * Text artifact viewing and minimization.
6
+ */
7
+ /** Format a number with comma separators (locale-independent, matching Python's `f"{n:,}"`). */
8
+ function formatNumber(n) {
9
+ return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
10
+ }
11
+ /** Text artifact operations: viewing and minimization. */
12
+ export class TextArtifacts {
13
+ /**
14
+ * View text content with optional line or character range selection.
15
+ *
16
+ * @param text - The text to view.
17
+ * @param opts.lineStart - Starting line number (1-based, inclusive). null = start.
18
+ * @param opts.lineEnd - Ending line number (1-based, inclusive). null = end.
19
+ * @param opts.characterStart - Starting character index (0-based, inclusive). null = start.
20
+ * @param opts.characterEnd - Ending character index (0-based, exclusive). null = end.
21
+ * @param opts.characterLimit - Maximum output size in characters.
22
+ *
23
+ * @returns Filtered text string.
24
+ *
25
+ * @throws Error if both line and character selection are provided,
26
+ * or if parameters are invalid.
27
+ */
28
+ static view(text, opts) {
29
+ const lineStart = opts?.lineStart ?? null;
30
+ const lineEnd = opts?.lineEnd ?? null;
31
+ const characterStart = opts?.characterStart ?? null;
32
+ const characterEnd = opts?.characterEnd ?? null;
33
+ const characterLimit = opts?.characterLimit ?? 50_000;
34
+ const hasLine = lineStart !== null || lineEnd !== null;
35
+ const hasChar = characterStart !== null || characterEnd !== null;
36
+ if (hasLine && hasChar) {
37
+ throw new Error("Cannot use both line and character selection");
38
+ }
39
+ let resultText;
40
+ if (hasChar) {
41
+ const start = characterStart ?? 0;
42
+ const end = characterEnd ?? text.length;
43
+ resultText = text.slice(start, end);
44
+ }
45
+ else if (hasLine) {
46
+ const lines = text.split("\n");
47
+ const totalLines = lines.length;
48
+ const [startIdx, endIdx] = TextArtifacts.parseLineRange(lineStart, lineEnd, totalLines);
49
+ const selectedLines = lines.slice(startIdx, endIdx);
50
+ resultText = selectedLines.join("\n");
51
+ }
52
+ else {
53
+ resultText = text;
54
+ }
55
+ if (resultText.length > characterLimit) {
56
+ throw new Error(`Selected text (${formatNumber(resultText.length)} characters) exceeds the maximum output size of ${formatNumber(characterLimit)} characters. Try selecting a smaller range.`);
57
+ }
58
+ return resultText;
59
+ }
60
+ /**
61
+ * Minimize text content for display.
62
+ *
63
+ * If text is <= characterLimit chars, return it in full inside "text" key.
64
+ * If text is > characterLimit chars, show first half and last half with metadata.
65
+ *
66
+ * @param text - The text content to minimize.
67
+ * @param opts.characterLimit - Character limit above which to minimize.
68
+ * @param opts.tip - Tip to include. Defaults to null (no tip); pass a string to include one.
69
+ *
70
+ * @returns Object with "text" key containing readable content and metadata fields.
71
+ */
72
+ static minimize(text, opts) {
73
+ const characterLimit = opts?.characterLimit ?? 50_000;
74
+ const tip = opts?.tip ?? null;
75
+ if (text.length <= characterLimit) {
76
+ return { text };
77
+ }
78
+ const half = Math.floor(characterLimit / 2);
79
+ const lines = text.split("\n");
80
+ const lineCount = lines.length;
81
+ // Find which line the half char falls on for the start
82
+ let charCount = 0;
83
+ let startEndLine = 1;
84
+ for (let i = 0; i < lines.length; i++) {
85
+ charCount += lines[i].length + 1; // +1 for newline
86
+ if (charCount >= half) {
87
+ startEndLine = i + 1;
88
+ break;
89
+ }
90
+ }
91
+ // Find which line the end section starts on
92
+ charCount = 0;
93
+ let endStartLine = lineCount;
94
+ for (let i = lines.length - 1; i >= 0; i--) {
95
+ charCount += lines[i].length + 1;
96
+ if (charCount >= half) {
97
+ endStartLine = i + 1;
98
+ break;
99
+ }
100
+ }
101
+ const omittedChars = text.length - 2 * half;
102
+ const result = {
103
+ text: `${text.slice(0, half)}\n\n[... ${formatNumber(omittedChars)} characters omitted ...]\n\n${text.slice(-half)}`,
104
+ _total_lines: lineCount,
105
+ _total_characters: text.length,
106
+ _start_line_range: `1-${startEndLine}`,
107
+ _end_line_range: `${endStartLine}-${lineCount}`,
108
+ _start_character_range: `0-${half}`,
109
+ _end_character_range: `${text.length - half}-${text.length}`,
110
+ };
111
+ if (tip !== null) {
112
+ result._tip = tip;
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Parse line range parameters.
118
+ *
119
+ * @param lineStart - Starting line number (1-based, inclusive). null means 1.
120
+ * @param lineEnd - Ending line number (1-based, inclusive). null means totalLines.
121
+ * @param totalLines - Total number of lines.
122
+ *
123
+ * @returns Tuple of [startIndex, endIndex] as 0-based indices.
124
+ *
125
+ * @throws Error if line numbers are invalid.
126
+ */
127
+ static parseLineRange(lineStart, lineEnd, totalLines) {
128
+ let start = lineStart ?? 1;
129
+ let end = lineEnd ?? totalLines;
130
+ // Handle negative line numbers (count from end)
131
+ if (start < 0) {
132
+ start = totalLines + start + 1;
133
+ }
134
+ if (end < 0) {
135
+ end = totalLines + end + 1;
136
+ }
137
+ // Validate range
138
+ if (start < 1) {
139
+ throw new Error(`line_start must be >= 1 (got ${start})`);
140
+ }
141
+ if (end > totalLines) {
142
+ throw new Error(`line_end (${end}) exceeds total lines (${totalLines})`);
143
+ }
144
+ if (start > end) {
145
+ throw new Error(`line_start (${start}) must be <= line_end (${end})`);
146
+ }
147
+ // Convert to 0-based indices
148
+ return [start - 1, end];
149
+ }
150
+ }
151
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/artifacts/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * A2ASession — main interface for interacting with A2A agents.
3
+ */
4
+ import type { Message, Task } from "@a2a-js/sdk";
5
+ import { type TaskStore } from "@a2a-js/sdk/server";
6
+ import type { FileStore } from "../files/file-store.js";
7
+ import type { AgentManager } from "./agent-manager.js";
8
+ /** Main interface for sending messages to A2A agents. */
9
+ export declare class A2ASession {
10
+ readonly agentManager: AgentManager;
11
+ readonly taskStore: TaskStore;
12
+ readonly fileStore: FileStore | null;
13
+ private readonly sendMessageTimeout;
14
+ private readonly getTaskTimeout;
15
+ private readonly getTaskPollInterval;
16
+ constructor(agentManager: AgentManager, opts?: {
17
+ taskStore?: TaskStore;
18
+ fileStore?: FileStore | null;
19
+ sendMessageTimeout?: number;
20
+ getTaskTimeout?: number;
21
+ getTaskPollInterval?: number;
22
+ });
23
+ /**
24
+ * Send a message to an A2A agent.
25
+ *
26
+ * @param agentId - Registered agent identifier.
27
+ * @param message - The message content to send.
28
+ * @param opts.contextId - Optional context ID to continue a conversation.
29
+ * Auto-generated when null.
30
+ * @param opts.taskId - Optional task ID to attach to the message.
31
+ * @param opts.timeout - HTTP timeout in seconds. Defaults to sendMessageTimeout
32
+ * from constructor.
33
+ *
34
+ * @returns Task for task responses, Message for message-only responses.
35
+ *
36
+ * @throws Error if agent is not found.
37
+ */
38
+ sendMessage(agentId: string, message: string, opts?: {
39
+ contextId?: string | null;
40
+ taskId?: string | null;
41
+ timeout?: number | null;
42
+ }): Promise<Task | Message>;
43
+ /**
44
+ * Get the current state of a task, monitoring until terminal/actionable state.
45
+ *
46
+ * If the remote agent supports streaming, uses SSE resubscription for real-time
47
+ * updates. Otherwise, polls at regular intervals.
48
+ *
49
+ * On monitoring timeout, returns the current task state (which may still be
50
+ * non-terminal, e.g. "working"). The only errors from getTask are failed
51
+ * HTTP requests (agent down, network error).
52
+ *
53
+ * @param agentId - Registered agent identifier.
54
+ * @param taskId - Task ID from a previous sendMessage call.
55
+ * @param opts.timeout - Total monitoring timeout in seconds. Defaults to
56
+ * getTaskTimeout from constructor.
57
+ * @param opts.pollInterval - Interval between polls in seconds (used when streaming
58
+ * is not supported). Defaults to getTaskPollInterval from constructor.
59
+ *
60
+ * @returns Task with the current task state. If monitoring times out, the
61
+ * returned task may still be in a non-terminal state.
62
+ *
63
+ * @throws Error if agent is not found.
64
+ */
65
+ getTask(agentId: string, taskId: string, opts?: {
66
+ timeout?: number | null;
67
+ pollInterval?: number | null;
68
+ }): Promise<Task>;
69
+ /**
70
+ * Save file artifacts to the file store if configured.
71
+ *
72
+ * Idempotent: skips artifacts whose files have already been saved.
73
+ */
74
+ private saveFiles;
75
+ /** Monitor a task via SSE resubscription, falling back to a final fetch. */
76
+ private getTaskStreaming;
77
+ /** Monitor a task by polling at regular intervals. */
78
+ private getTaskPolling;
79
+ /** Fetch a task via A2AClient.getTask(). */
80
+ private fetchTask;
81
+ /** Narrow the SDK client to the methods this package relies on. */
82
+ private getSessionClient;
83
+ /** Create an A2AClient with optional custom headers. */
84
+ private createClient;
85
+ /**
86
+ * Resolve agent card and headers.
87
+ *
88
+ * @returns Tuple of [AgentCard, headers_dict].
89
+ *
90
+ * @throws Error if agent cannot be resolved.
91
+ */
92
+ private resolveAgent;
93
+ }
94
+ //# sourceMappingURL=a2a-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-session.d.ts","sourceRoot":"","sources":["../../src/client/a2a-session.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAGR,OAAO,EAEP,IAAI,EAGP,MAAM,aAAa,CAAC;AAErB,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAuBvD,yDAAyD;AACzD,qBAAa,UAAU;IACnB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAGzC,YAAY,EAAE,YAAY,EAC1B,IAAI,CAAC,EAAE;QACH,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;QAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAChC;IAUL;;;;;;;;;;;;;;OAcG;IACG,WAAW,CACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GACF,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;IAwF1B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,OAAO,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,GACF,OAAO,CAAC,IAAI,CAAC;IAkChB;;;;OAIG;YACW,SAAS;IAgBvB,4EAA4E;YAC9D,gBAAgB;IAwC9B,sDAAsD;YACxC,cAAc;IAwB5B,4CAA4C;YAC9B,SAAS;IAevB,mEAAmE;IACnE,OAAO,CAAC,gBAAgB;IAIxB,wDAAwD;IACxD,OAAO,CAAC,YAAY;IAmBpB;;;;;;OAMG;YACW,YAAY;CAS7B"}