@agnt5/sdk 0.2.1

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 (126) hide show
  1. package/README.md +183 -0
  2. package/dist/__tests__/integration/helpers.d.ts +41 -0
  3. package/dist/__tests__/integration/helpers.d.ts.map +1 -0
  4. package/dist/__tests__/integration/helpers.js +78 -0
  5. package/dist/__tests__/integration/helpers.js.map +1 -0
  6. package/dist/agent.d.ts +260 -0
  7. package/dist/agent.d.ts.map +1 -0
  8. package/dist/agent.js +493 -0
  9. package/dist/agent.js.map +1 -0
  10. package/dist/async-context.d.ts +57 -0
  11. package/dist/async-context.d.ts.map +1 -0
  12. package/dist/async-context.js +52 -0
  13. package/dist/async-context.js.map +1 -0
  14. package/dist/batch.d.ts +116 -0
  15. package/dist/batch.d.ts.map +1 -0
  16. package/dist/batch.js +98 -0
  17. package/dist/batch.js.map +1 -0
  18. package/dist/chat.d.ts +137 -0
  19. package/dist/chat.d.ts.map +1 -0
  20. package/dist/chat.js +278 -0
  21. package/dist/chat.js.map +1 -0
  22. package/dist/client.d.ts +394 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +757 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/context.d.ts +47 -0
  27. package/dist/context.d.ts.map +1 -0
  28. package/dist/context.js +244 -0
  29. package/dist/context.js.map +1 -0
  30. package/dist/errors.d.ts +148 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +201 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/eval.d.ts +242 -0
  35. package/dist/eval.d.ts.map +1 -0
  36. package/dist/eval.js +452 -0
  37. package/dist/eval.js.map +1 -0
  38. package/dist/event-emitter.d.ts +28 -0
  39. package/dist/event-emitter.d.ts.map +1 -0
  40. package/dist/event-emitter.js +79 -0
  41. package/dist/event-emitter.js.map +1 -0
  42. package/dist/events.d.ts +285 -0
  43. package/dist/events.d.ts.map +1 -0
  44. package/dist/events.js +256 -0
  45. package/dist/events.js.map +1 -0
  46. package/dist/function.d.ts +61 -0
  47. package/dist/function.d.ts.map +1 -0
  48. package/dist/function.js +78 -0
  49. package/dist/function.js.map +1 -0
  50. package/dist/index.d.ts +67 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +80 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/lm.d.ts +301 -0
  55. package/dist/lm.d.ts.map +1 -0
  56. package/dist/lm.js +283 -0
  57. package/dist/lm.js.map +1 -0
  58. package/dist/logging.d.ts +68 -0
  59. package/dist/logging.d.ts.map +1 -0
  60. package/dist/logging.js +165 -0
  61. package/dist/logging.js.map +1 -0
  62. package/dist/mcp-server.d.ts +98 -0
  63. package/dist/mcp-server.d.ts.map +1 -0
  64. package/dist/mcp-server.js +307 -0
  65. package/dist/mcp-server.js.map +1 -0
  66. package/dist/mcp.d.ts +73 -0
  67. package/dist/mcp.d.ts.map +1 -0
  68. package/dist/mcp.js +224 -0
  69. package/dist/mcp.js.map +1 -0
  70. package/dist/memory.d.ts +234 -0
  71. package/dist/memory.d.ts.map +1 -0
  72. package/dist/memory.js +609 -0
  73. package/dist/memory.js.map +1 -0
  74. package/dist/platform-adapters.d.ts +121 -0
  75. package/dist/platform-adapters.d.ts.map +1 -0
  76. package/dist/platform-adapters.js +174 -0
  77. package/dist/platform-adapters.js.map +1 -0
  78. package/dist/platform-context.d.ts +55 -0
  79. package/dist/platform-context.d.ts.map +1 -0
  80. package/dist/platform-context.js +196 -0
  81. package/dist/platform-context.js.map +1 -0
  82. package/dist/retry-utils.d.ts +169 -0
  83. package/dist/retry-utils.d.ts.map +1 -0
  84. package/dist/retry-utils.js +304 -0
  85. package/dist/retry-utils.js.map +1 -0
  86. package/dist/sandbox.d.ts +103 -0
  87. package/dist/sandbox.d.ts.map +1 -0
  88. package/dist/sandbox.js +168 -0
  89. package/dist/sandbox.js.map +1 -0
  90. package/dist/schema-utils.d.ts +250 -0
  91. package/dist/schema-utils.d.ts.map +1 -0
  92. package/dist/schema-utils.js +444 -0
  93. package/dist/schema-utils.js.map +1 -0
  94. package/dist/scorer.d.ts +130 -0
  95. package/dist/scorer.d.ts.map +1 -0
  96. package/dist/scorer.js +211 -0
  97. package/dist/scorer.js.map +1 -0
  98. package/dist/state.d.ts +92 -0
  99. package/dist/state.d.ts.map +1 -0
  100. package/dist/state.js +151 -0
  101. package/dist/state.js.map +1 -0
  102. package/dist/tool.d.ts +120 -0
  103. package/dist/tool.d.ts.map +1 -0
  104. package/dist/tool.js +215 -0
  105. package/dist/tool.js.map +1 -0
  106. package/dist/tracing.d.ts +82 -0
  107. package/dist/tracing.d.ts.map +1 -0
  108. package/dist/tracing.js +206 -0
  109. package/dist/tracing.js.map +1 -0
  110. package/dist/types.d.ts +139 -0
  111. package/dist/types.d.ts.map +1 -0
  112. package/dist/types.js +2 -0
  113. package/dist/types.js.map +1 -0
  114. package/dist/worker.d.ts +111 -0
  115. package/dist/worker.d.ts.map +1 -0
  116. package/dist/worker.js +944 -0
  117. package/dist/worker.js.map +1 -0
  118. package/dist/workflow-utils.d.ts +257 -0
  119. package/dist/workflow-utils.d.ts.map +1 -0
  120. package/dist/workflow-utils.js +370 -0
  121. package/dist/workflow-utils.js.map +1 -0
  122. package/dist/workflow.d.ts +78 -0
  123. package/dist/workflow.d.ts.map +1 -0
  124. package/dist/workflow.js +138 -0
  125. package/dist/workflow.js.map +1 -0
  126. package/package.json +86 -0
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Sandbox — secure code execution and file I/O.
3
+ *
4
+ * Wraps the native Rust sandbox bindings, supporting both remote (HTTP)
5
+ * and embedded (WASM) backends. The backend is selected automatically
6
+ * based on available configuration.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { Sandbox } from '@agnt5/sdk';
11
+ *
12
+ * const sandbox = new Sandbox({ endpoint: 'http://localhost:8080' });
13
+ * const result = await sandbox.executeCode('console.log("hello")', 'javascript');
14
+ * console.log(result.stdout); // "hello"
15
+ * ```
16
+ */
17
+ import { createRequire } from 'node:module';
18
+ import { dirname, join } from 'node:path';
19
+ import { fileURLToPath } from 'node:url';
20
+ // ── Native binding loader ──────────────────────────────────────
21
+ let _native = null;
22
+ function loadNative() {
23
+ if (_native)
24
+ return _native;
25
+ const __filename = fileURLToPath(import.meta.url);
26
+ const __dirname = dirname(__filename);
27
+ const require = createRequire(import.meta.url);
28
+ const paths = [
29
+ join(__dirname, '../../native/agnt5-sdk-native.darwin-arm64.node'),
30
+ join(__dirname, '../native/agnt5-sdk-native.darwin-arm64.node'),
31
+ join(__dirname, '../../native/agnt5-sdk-native.linux-x64-gnu.node'),
32
+ join(__dirname, '../native/agnt5-sdk-native.linux-x64-gnu.node'),
33
+ join(__dirname, '../../native/agnt5-sdk-native.linux-x64.node'),
34
+ join(__dirname, '../native/agnt5-sdk-native.linux-x64.node'),
35
+ ];
36
+ for (const p of paths) {
37
+ try {
38
+ _native = require(p);
39
+ return _native;
40
+ }
41
+ catch {
42
+ continue;
43
+ }
44
+ }
45
+ throw new Error('Could not find native sandbox bindings');
46
+ }
47
+ // ── NAPI → TS field mapping helpers ────────────────────────────
48
+ function mapExecuteResult(r) {
49
+ return {
50
+ stdout: r.stdout,
51
+ stderr: r.stderr,
52
+ exitCode: r.exit_code ?? r.exitCode,
53
+ executionTimeMs: r.execution_time_ms ?? r.executionTimeMs,
54
+ error: r.error ?? undefined,
55
+ };
56
+ }
57
+ function mapWriteResult(r) {
58
+ return {
59
+ success: r.success,
60
+ path: r.path,
61
+ size: r.size,
62
+ error: r.error ?? undefined,
63
+ };
64
+ }
65
+ function mapReadResult(r) {
66
+ return {
67
+ path: r.path,
68
+ content: r.content,
69
+ size: r.size,
70
+ isDir: r.is_dir ?? r.isDir,
71
+ error: r.error ?? undefined,
72
+ };
73
+ }
74
+ function mapFileInfo(f) {
75
+ return {
76
+ name: f.name,
77
+ path: f.path,
78
+ size: f.size,
79
+ isDir: f.is_dir ?? f.isDir,
80
+ mode: f.mode,
81
+ modTime: f.mod_time ?? f.modTime,
82
+ };
83
+ }
84
+ function mapListResult(r) {
85
+ return {
86
+ path: r.path,
87
+ total: r.total,
88
+ files: (r.files ?? []).map(mapFileInfo),
89
+ error: r.error ?? undefined,
90
+ };
91
+ }
92
+ function mapHealthResult(r) {
93
+ return {
94
+ status: r.status,
95
+ sandboxId: r.sandbox_id ?? r.sandboxId,
96
+ uptimeMs: r.uptime_ms ?? r.uptimeMs,
97
+ backendKind: r.backend_kind ?? r.backendKind,
98
+ error: r.error ?? undefined,
99
+ };
100
+ }
101
+ function mapCapabilities(c) {
102
+ return {
103
+ languages: c.languages,
104
+ supportsCommands: c.supports_commands ?? c.supportsCommands,
105
+ supportsGit: c.supports_git ?? c.supportsGit,
106
+ supportsPreviewUrl: c.supports_preview_url ?? c.supportsPreviewUrl,
107
+ supportsStreaming: c.supports_streaming ?? c.supportsStreaming,
108
+ supportsSnapshots: c.supports_snapshots ?? c.supportsSnapshots,
109
+ hasNetworkAccess: c.has_network_access ?? c.hasNetworkAccess,
110
+ };
111
+ }
112
+ // ── Sandbox class ──────────────────────────────────────────────
113
+ export class Sandbox {
114
+ constructor(options) {
115
+ const native = loadNative();
116
+ const nativeOpts = options
117
+ ? {
118
+ backend: options.backend,
119
+ endpoint: options.endpoint ?? process.env.AGNT5_SANDBOX_ENDPOINT,
120
+ sandbox_id: options.sandboxId,
121
+ api_key: options.apiKey,
122
+ bearer_token: options.bearerToken,
123
+ timeout_secs: options.timeoutSecs,
124
+ quickjs_wasm_path: options.quickjsWasmPath,
125
+ }
126
+ : undefined;
127
+ this.inner = new native.Sandbox(nativeOpts);
128
+ }
129
+ /** Active backend type ("remote" or "wasm"). */
130
+ get backend() {
131
+ return this.inner.backend;
132
+ }
133
+ /** Execute code in a sandboxed environment. */
134
+ async executeCode(code, language, timeoutMs) {
135
+ const r = await this.inner.executeCode(code, language, timeoutMs);
136
+ return mapExecuteResult(r);
137
+ }
138
+ /** Write a file into the sandbox workspace. */
139
+ async writeFile(path, content) {
140
+ const buf = typeof content === 'string' ? Buffer.from(content) : content;
141
+ const r = await this.inner.writeFile(path, buf);
142
+ return mapWriteResult(r);
143
+ }
144
+ /** Read a file from the sandbox workspace. */
145
+ async readFile(path) {
146
+ const r = await this.inner.readFile(path);
147
+ return mapReadResult(r);
148
+ }
149
+ /** Delete a file or directory from the sandbox workspace. */
150
+ async deleteFile(path, recursive) {
151
+ return this.inner.deleteFile(path, recursive);
152
+ }
153
+ /** List files in the sandbox workspace. */
154
+ async listFiles(path, recursive) {
155
+ const r = await this.inner.listFiles(path, recursive);
156
+ return mapListResult(r);
157
+ }
158
+ /** Check sandbox health and status. */
159
+ async health() {
160
+ const r = await this.inner.health();
161
+ return mapHealthResult(r);
162
+ }
163
+ /** Query sandbox capabilities (languages, features). */
164
+ capabilities() {
165
+ return mapCapabilities(this.inner.capabilities());
166
+ }
167
+ }
168
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Schema conversion utilities for structured output support.
3
+ *
4
+ * This module provides utilities to convert TypeScript schemas (Zod, TypeBox, or manual)
5
+ * to JSON Schema format for LLM structured output generation, function signatures,
6
+ * and tool definitions.
7
+ */
8
+ import type { JSONSchema } from './types.js';
9
+ /**
10
+ * Schema format types supported by the SDK
11
+ */
12
+ export type SchemaFormat = 'zod' | 'typebox' | 'raw';
13
+ /**
14
+ * Options for schema conversion
15
+ */
16
+ export interface SchemaConversionOptions {
17
+ /** Include descriptions in the schema */
18
+ includeDescriptions?: boolean;
19
+ /** Strict mode (additionalProperties: false) */
20
+ strict?: boolean;
21
+ }
22
+ /**
23
+ * Auto-detect format type and convert to JSON schema.
24
+ *
25
+ * @param schema - Zod schema, TypeBox schema, or JSON schema object
26
+ * @param options - Conversion options
27
+ * @returns Tuple of [format_type, json_schema]
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * import { z } from 'zod';
32
+ * import { detectFormatType } from '@agnt5/sdk';
33
+ *
34
+ * const UserSchema = z.object({
35
+ * name: z.string(),
36
+ * age: z.number(),
37
+ * });
38
+ *
39
+ * const [format, schema] = detectFormatType(UserSchema);
40
+ * // format: 'zod'
41
+ * // schema: { type: 'object', properties: { ... }, required: ['name', 'age'] }
42
+ * ```
43
+ */
44
+ export declare function detectFormatType(schema: any, options?: SchemaConversionOptions): [SchemaFormat, JSONSchema];
45
+ /**
46
+ * Check if value is a Zod schema
47
+ */
48
+ export declare function isZodSchema(value: any): boolean;
49
+ /**
50
+ * Check if value is a TypeBox schema
51
+ */
52
+ export declare function isTypeBoxSchema(value: any): boolean;
53
+ /**
54
+ * Check if value is a raw JSON schema
55
+ */
56
+ export declare function isJsonSchema(value: any): boolean;
57
+ /**
58
+ * Convert Zod schema to JSON Schema.
59
+ *
60
+ * @param schema - Zod schema
61
+ * @param options - Conversion options
62
+ * @returns JSON Schema object
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * import { z } from 'zod';
67
+ *
68
+ * const schema = z.object({
69
+ * name: z.string().describe('User name'),
70
+ * age: z.number().int().positive(),
71
+ * email: z.string().email().optional(),
72
+ * });
73
+ *
74
+ * const jsonSchema = zodToJsonSchema(schema);
75
+ * ```
76
+ */
77
+ export declare function zodToJsonSchema(schema: any, options?: SchemaConversionOptions): JSONSchema;
78
+ /**
79
+ * Convert TypeBox schema to JSON Schema.
80
+ *
81
+ * TypeBox schemas are already JSON Schema compatible, so this is mostly a pass-through.
82
+ *
83
+ * @param schema - TypeBox schema
84
+ * @param options - Conversion options
85
+ * @returns JSON Schema object
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * import { Type } from '@sinclair/typebox';
90
+ *
91
+ * const schema = Type.Object({
92
+ * name: Type.String(),
93
+ * age: Type.Number(),
94
+ * });
95
+ *
96
+ * const jsonSchema = typeBoxToJsonSchema(schema);
97
+ * ```
98
+ */
99
+ export declare function typeBoxToJsonSchema(schema: any, options?: SchemaConversionOptions): JSONSchema;
100
+ /**
101
+ * Convert basic TypeScript types to JSON Schema types.
102
+ *
103
+ * This is a utility for manual schema generation when you don't want to use Zod or TypeBox.
104
+ *
105
+ * @param typeName - TypeScript type name ('string', 'number', 'boolean', etc.)
106
+ * @param options - Additional schema options
107
+ * @returns JSON Schema type definition
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * const stringSchema = typeToSchema('string', { description: 'User name' });
112
+ * // { type: 'string', description: 'User name' }
113
+ *
114
+ * const arraySchema = typeToSchema('array', { items: { type: 'number' } });
115
+ * // { type: 'array', items: { type: 'number' } }
116
+ * ```
117
+ */
118
+ export declare function typeToSchema(typeName: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object' | 'null', options?: Partial<JSONSchema>): JSONSchema;
119
+ /**
120
+ * Create an object schema from property definitions.
121
+ *
122
+ * @param properties - Object property definitions
123
+ * @param required - Array of required property names
124
+ * @param options - Additional schema options
125
+ * @returns JSON Schema object definition
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * const userSchema = createObjectSchema({
130
+ * name: { type: 'string', description: 'User name' },
131
+ * age: { type: 'number', minimum: 0 },
132
+ * email: { type: 'string', format: 'email' },
133
+ * }, ['name', 'age']);
134
+ * ```
135
+ */
136
+ export declare function createObjectSchema(properties: Record<string, JSONSchema>, required?: string[], options?: Partial<JSONSchema>): JSONSchema;
137
+ /**
138
+ * Create an array schema with item type.
139
+ *
140
+ * @param items - Schema for array items
141
+ * @param options - Additional schema options
142
+ * @returns JSON Schema array definition
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * const numbersSchema = createArraySchema({ type: 'number' });
147
+ * const usersSchema = createArraySchema({
148
+ * type: 'object',
149
+ * properties: {
150
+ * name: { type: 'string' },
151
+ * age: { type: 'number' },
152
+ * },
153
+ * });
154
+ * ```
155
+ */
156
+ export declare function createArraySchema(items: JSONSchema, options?: Partial<JSONSchema>): JSONSchema;
157
+ /**
158
+ * Create an enum schema.
159
+ *
160
+ * @param values - Allowed enum values
161
+ * @param options - Additional schema options
162
+ * @returns JSON Schema enum definition
163
+ *
164
+ * @example
165
+ * ```typescript
166
+ * const statusSchema = createEnumSchema(['pending', 'active', 'completed']);
167
+ * const roleSchema = createEnumSchema(['admin', 'user', 'guest'], {
168
+ * description: 'User role',
169
+ * });
170
+ * ```
171
+ */
172
+ export declare function createEnumSchema(values: any[], options?: Partial<JSONSchema>): JSONSchema;
173
+ /**
174
+ * Create a union schema (anyOf).
175
+ *
176
+ * @param schemas - Array of possible schemas
177
+ * @param options - Additional schema options
178
+ * @returns JSON Schema union definition
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * const stringOrNumber = createUnionSchema([
183
+ * { type: 'string' },
184
+ * { type: 'number' },
185
+ * ]);
186
+ * ```
187
+ */
188
+ export declare function createUnionSchema(schemas: JSONSchema[], options?: Partial<JSONSchema>): JSONSchema;
189
+ /**
190
+ * Make a schema optional (allows null).
191
+ *
192
+ * @param schema - Base schema
193
+ * @returns Schema that allows the base type or null
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * const optionalString = makeOptional({ type: 'string' });
198
+ * // { anyOf: [{ type: 'string' }, { type: 'null' }] }
199
+ * ```
200
+ */
201
+ export declare function makeOptional(schema: JSONSchema): JSONSchema;
202
+ /**
203
+ * Merge multiple schemas into one (allOf).
204
+ *
205
+ * @param schemas - Array of schemas to merge
206
+ * @returns Merged schema
207
+ *
208
+ * @example
209
+ * ```typescript
210
+ * const baseSchema = { type: 'object', properties: { id: { type: 'string' } } };
211
+ * const extraSchema = { properties: { name: { type: 'string' } } };
212
+ * const merged = mergeSchemas([baseSchema, extraSchema]);
213
+ * ```
214
+ */
215
+ export declare function mergeSchemas(schemas: JSONSchema[]): JSONSchema;
216
+ /**
217
+ * Validate a value against a JSON schema.
218
+ *
219
+ * This is a basic validator. For production use, consider using a dedicated library like Ajv.
220
+ *
221
+ * @param value - Value to validate
222
+ * @param schema - JSON Schema to validate against
223
+ * @returns True if valid, false otherwise
224
+ *
225
+ * @example
226
+ * ```typescript
227
+ * const schema = { type: 'object', properties: { name: { type: 'string' } } };
228
+ * validateSchema({ name: 'Alice' }, schema); // true
229
+ * validateSchema({ name: 123 }, schema); // false
230
+ * ```
231
+ */
232
+ export declare function validateSchema(value: any, schema: JSONSchema): boolean;
233
+ /**
234
+ * Extract description from JSDoc comment.
235
+ *
236
+ * @param func - Function to extract description from
237
+ * @returns Description string or undefined
238
+ *
239
+ * @example
240
+ * ```typescript
241
+ * /​**
242
+ * * This is a greeting function
243
+ * *​/
244
+ * function greet(name: string) { ... }
245
+ *
246
+ * extractFunctionDescription(greet); // 'This is a greeting function'
247
+ * ```
248
+ */
249
+ export declare function extractFunctionDescription(func: Function): string | undefined;
250
+ //# sourceMappingURL=schema-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-utils.d.ts","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,yCAAyC;IACzC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,GAAG,EACX,OAAO,GAAE,uBAA4B,GACpC,CAAC,YAAY,EAAE,UAAU,CAAC,CAmB5B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAG/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAGnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAEhD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,uBAA4B,GAAG,UAAU,CAoB9F;AAoED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,uBAA4B,GAAG,UAAU,CAclG;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EACnF,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,UAAU,CAKZ;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACtC,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAChC,UAAU,CAOZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAMlG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAM7F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,UAAU,CAKtG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAI3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,CAI9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAetE;AA2BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAQ7E"}