@opencontextprotocol/agent 0.1.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.
- package/LICENSE +21 -0
- package/README.md +198 -0
- package/dist/src/agent.d.ts +112 -0
- package/dist/src/agent.d.ts.map +1 -0
- package/dist/src/agent.js +358 -0
- package/dist/src/agent.js.map +1 -0
- package/dist/src/context.d.ts +108 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +196 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/errors.d.ts +40 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +63 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/headers.d.ts +63 -0
- package/dist/src/headers.d.ts.map +1 -0
- package/dist/src/headers.js +238 -0
- package/dist/src/headers.js.map +1 -0
- package/dist/src/http_client.d.ts +82 -0
- package/dist/src/http_client.d.ts.map +1 -0
- package/dist/src/http_client.js +181 -0
- package/dist/src/http_client.js.map +1 -0
- package/dist/src/index.d.ts +25 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +35 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/registry.d.ts +52 -0
- package/dist/src/registry.d.ts.map +1 -0
- package/dist/src/registry.js +164 -0
- package/dist/src/registry.js.map +1 -0
- package/dist/src/schema_discovery.d.ts +149 -0
- package/dist/src/schema_discovery.d.ts.map +1 -0
- package/dist/src/schema_discovery.js +707 -0
- package/dist/src/schema_discovery.js.map +1 -0
- package/dist/src/schemas/ocp-context.json +138 -0
- package/dist/src/storage.d.ts +110 -0
- package/dist/src/storage.d.ts.map +1 -0
- package/dist/src/storage.js +399 -0
- package/dist/src/storage.js.map +1 -0
- package/dist/src/validation.d.ts +169 -0
- package/dist/src/validation.d.ts.map +1 -0
- package/dist/src/validation.js +92 -0
- package/dist/src/validation.js.map +1 -0
- package/dist/tests/agent.test.d.ts +5 -0
- package/dist/tests/agent.test.d.ts.map +1 -0
- package/dist/tests/agent.test.js +536 -0
- package/dist/tests/agent.test.js.map +1 -0
- package/dist/tests/context.test.d.ts +5 -0
- package/dist/tests/context.test.d.ts.map +1 -0
- package/dist/tests/context.test.js +285 -0
- package/dist/tests/context.test.js.map +1 -0
- package/dist/tests/headers.test.d.ts +5 -0
- package/dist/tests/headers.test.d.ts.map +1 -0
- package/dist/tests/headers.test.js +356 -0
- package/dist/tests/headers.test.js.map +1 -0
- package/dist/tests/http_client.test.d.ts +5 -0
- package/dist/tests/http_client.test.d.ts.map +1 -0
- package/dist/tests/http_client.test.js +373 -0
- package/dist/tests/http_client.test.js.map +1 -0
- package/dist/tests/registry.test.d.ts +5 -0
- package/dist/tests/registry.test.d.ts.map +1 -0
- package/dist/tests/registry.test.js +232 -0
- package/dist/tests/registry.test.js.map +1 -0
- package/dist/tests/schema_discovery.test.d.ts +5 -0
- package/dist/tests/schema_discovery.test.d.ts.map +1 -0
- package/dist/tests/schema_discovery.test.js +1074 -0
- package/dist/tests/schema_discovery.test.js.map +1 -0
- package/dist/tests/storage.test.d.ts +5 -0
- package/dist/tests/storage.test.d.ts.map +1 -0
- package/dist/tests/storage.test.js +414 -0
- package/dist/tests/storage.test.js.map +1 -0
- package/dist/tests/validation.test.d.ts +5 -0
- package/dist/tests/validation.test.d.ts.map +1 -0
- package/dist/tests/validation.test.js +254 -0
- package/dist/tests/validation.test.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OCP Registry Client
|
|
3
|
+
*
|
|
4
|
+
* Client for accessing pre-discovered API specifications from the OCP registry.
|
|
5
|
+
*/
|
|
6
|
+
import { RegistryUnavailable, APINotFound } from './errors.js';
|
|
7
|
+
const DEFAULT_REGISTRY_URL = 'https://opencontextprotocol.io/api/v1';
|
|
8
|
+
const DEFAULT_TIMEOUT = 10000;
|
|
9
|
+
const SEARCH_TIMEOUT = 5000;
|
|
10
|
+
const DEFAULT_PER_PAGE = 10;
|
|
11
|
+
const MAX_SUGGESTIONS = 3;
|
|
12
|
+
const DEFAULT_API_VERSION = '1.0.0';
|
|
13
|
+
/**
|
|
14
|
+
* OCP Registry Client
|
|
15
|
+
*
|
|
16
|
+
* Access pre-discovered API specifications from the OCP community registry.
|
|
17
|
+
*/
|
|
18
|
+
export class OCPRegistry {
|
|
19
|
+
/**
|
|
20
|
+
* Initialize registry client.
|
|
21
|
+
*
|
|
22
|
+
* @param registryUrl - Registry URL (defaults to OCP_REGISTRY_URL env var or registry.ocp.dev)
|
|
23
|
+
*/
|
|
24
|
+
constructor(registryUrl) {
|
|
25
|
+
this.registryUrl = (registryUrl || process.env.OCP_REGISTRY_URL || DEFAULT_REGISTRY_URL).replace(/\/$/, '');
|
|
26
|
+
// Validate URL format
|
|
27
|
+
if (!this.registryUrl.startsWith('http://') && !this.registryUrl.startsWith('https://')) {
|
|
28
|
+
throw new Error(`Invalid registry URL: ${this.registryUrl}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get API specification from registry.
|
|
33
|
+
*
|
|
34
|
+
* @param name - API name in registry
|
|
35
|
+
* @param baseUrl - Optional override for API base URL
|
|
36
|
+
* @returns API specification with tools
|
|
37
|
+
* @throws RegistryUnavailable if registry is unreachable
|
|
38
|
+
* @throws APINotFound if API is not found in registry
|
|
39
|
+
*/
|
|
40
|
+
async getApiSpec(name, baseUrl) {
|
|
41
|
+
try {
|
|
42
|
+
const response = await fetch(`${this.registryUrl}/registry/${name}`, {
|
|
43
|
+
timeout: DEFAULT_TIMEOUT
|
|
44
|
+
});
|
|
45
|
+
if (response.status === 404) {
|
|
46
|
+
const suggestions = await this._getSuggestions(name);
|
|
47
|
+
throw new APINotFound(name, suggestions);
|
|
48
|
+
}
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
throw new RegistryUnavailable(this.registryUrl, `${response.statusText}`);
|
|
51
|
+
}
|
|
52
|
+
const entry = await response.json();
|
|
53
|
+
return await this._entryToSpec(entry, baseUrl);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error instanceof APINotFound || error instanceof RegistryUnavailable) {
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
if (error instanceof TypeError && error.message.includes('fetch')) {
|
|
60
|
+
throw new RegistryUnavailable(this.registryUrl, `Could not connect to registry`);
|
|
61
|
+
}
|
|
62
|
+
throw new RegistryUnavailable(this.registryUrl, String(error));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Search for APIs in the registry.
|
|
67
|
+
*
|
|
68
|
+
* @param query - Search query string
|
|
69
|
+
* @returns List of API names matching query
|
|
70
|
+
*/
|
|
71
|
+
async searchApis(query) {
|
|
72
|
+
try {
|
|
73
|
+
const params = new URLSearchParams({
|
|
74
|
+
q: query,
|
|
75
|
+
per_page: DEFAULT_PER_PAGE.toString()
|
|
76
|
+
});
|
|
77
|
+
const url = `${this.registryUrl}/search?${params.toString()}`;
|
|
78
|
+
const response = await fetch(url, {
|
|
79
|
+
timeout: SEARCH_TIMEOUT
|
|
80
|
+
});
|
|
81
|
+
if (!response.ok) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const searchResults = await response.json();
|
|
85
|
+
return (searchResults.results || []).map(r => r.name);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// If search fails, return empty list (non-critical)
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* List all APIs in the registry.
|
|
94
|
+
*
|
|
95
|
+
* @returns List of API names
|
|
96
|
+
*/
|
|
97
|
+
async listApis() {
|
|
98
|
+
try {
|
|
99
|
+
const response = await fetch(`${this.registryUrl}/registry`, {
|
|
100
|
+
timeout: DEFAULT_TIMEOUT
|
|
101
|
+
});
|
|
102
|
+
if (!response.ok) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
const apis = await response.json();
|
|
106
|
+
return apis.map(api => api.name);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// If list fails, return empty list (non-critical)
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Convert registry entry to API spec.
|
|
115
|
+
*/
|
|
116
|
+
async _entryToSpec(entry, baseUrlOverride) {
|
|
117
|
+
// Use override base_url if provided, otherwise use registry's base_url
|
|
118
|
+
const baseUrl = baseUrlOverride || entry.base_url || '';
|
|
119
|
+
// Convert tools from registry format to OCPTool objects
|
|
120
|
+
const tools = [];
|
|
121
|
+
if (entry.tools) {
|
|
122
|
+
for (const toolDict of entry.tools) {
|
|
123
|
+
const tool = {
|
|
124
|
+
name: toolDict.name,
|
|
125
|
+
description: toolDict.description,
|
|
126
|
+
method: toolDict.method,
|
|
127
|
+
path: toolDict.path,
|
|
128
|
+
parameters: toolDict.parameters || {},
|
|
129
|
+
response_schema: toolDict.response_schema || {},
|
|
130
|
+
operation_id: toolDict.operation_id,
|
|
131
|
+
tags: toolDict.tags || []
|
|
132
|
+
};
|
|
133
|
+
tools.push(tool);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Create OCPAPISpec (matching dataclass field order)
|
|
137
|
+
return {
|
|
138
|
+
base_url: baseUrl,
|
|
139
|
+
title: entry.display_name || entry.name,
|
|
140
|
+
version: DEFAULT_API_VERSION, // Registry doesn't store version
|
|
141
|
+
description: entry.description || '',
|
|
142
|
+
tools,
|
|
143
|
+
raw_spec: entry // Store the original registry entry
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get API name suggestions for error messages.
|
|
148
|
+
*/
|
|
149
|
+
async _getSuggestions(apiName) {
|
|
150
|
+
try {
|
|
151
|
+
// Try exact search first
|
|
152
|
+
let suggestions = await this.searchApis(apiName);
|
|
153
|
+
// If no results, try partial matches
|
|
154
|
+
if (suggestions.length === 0 && apiName.length > 2) {
|
|
155
|
+
suggestions = await this.searchApis(apiName.slice(0, 3));
|
|
156
|
+
}
|
|
157
|
+
return suggestions.slice(0, MAX_SUGGESTIONS);
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return [];
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OCP Schema Discovery
|
|
3
|
+
*
|
|
4
|
+
* Automatic OpenAPI schema discovery and tool extraction for OCP agents.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Tool definition extracted from OpenAPI operation
|
|
8
|
+
*/
|
|
9
|
+
export interface OCPTool {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
method: string;
|
|
13
|
+
path: string;
|
|
14
|
+
parameters: Record<string, any>;
|
|
15
|
+
response_schema?: Record<string, any>;
|
|
16
|
+
operation_id?: string;
|
|
17
|
+
tags?: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Complete API specification with tools
|
|
21
|
+
*/
|
|
22
|
+
export interface OCPAPISpec {
|
|
23
|
+
base_url: string;
|
|
24
|
+
title: string;
|
|
25
|
+
version: string;
|
|
26
|
+
description: string;
|
|
27
|
+
tools: OCPTool[];
|
|
28
|
+
raw_spec: Record<string, any>;
|
|
29
|
+
name?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* OCP Schema Discovery Client
|
|
33
|
+
*
|
|
34
|
+
* Discovers and parses OpenAPI specifications to extract available tools.
|
|
35
|
+
*/
|
|
36
|
+
export declare class OCPSchemaDiscovery {
|
|
37
|
+
private cache;
|
|
38
|
+
private _specVersion?;
|
|
39
|
+
constructor();
|
|
40
|
+
/**
|
|
41
|
+
* Discover API from OpenAPI specification.
|
|
42
|
+
*
|
|
43
|
+
* @param specPath - URL or file path to OpenAPI specification (JSON or YAML)
|
|
44
|
+
* @param baseUrl - Optional override for API base URL
|
|
45
|
+
* @param includeResources - Optional list of resource names to filter tools by (case-insensitive, first resource segment matching)
|
|
46
|
+
* @param pathPrefix - Optional path prefix to strip before filtering (e.g., '/v1', '/api/v2')
|
|
47
|
+
* @returns API specification with extracted tools
|
|
48
|
+
*/
|
|
49
|
+
discoverApi(specPath: string, baseUrl?: string, includeResources?: string[], pathPrefix?: string): Promise<OCPAPISpec>;
|
|
50
|
+
/**
|
|
51
|
+
* Normalize cache key: URLs as-is, file paths to absolute.
|
|
52
|
+
*/
|
|
53
|
+
private _normalizeCacheKey;
|
|
54
|
+
/**
|
|
55
|
+
* Fetch OpenAPI spec from URL or local file.
|
|
56
|
+
*/
|
|
57
|
+
private _fetchSpec;
|
|
58
|
+
/**
|
|
59
|
+
* Fetch OpenAPI specification from URL without resolving $refs.
|
|
60
|
+
* References are resolved lazily during tool creation.
|
|
61
|
+
*/
|
|
62
|
+
private _fetchFromUrl;
|
|
63
|
+
/**
|
|
64
|
+
* Load OpenAPI specification from local JSON or YAML file.
|
|
65
|
+
*/
|
|
66
|
+
private _fetchFromFile;
|
|
67
|
+
/**
|
|
68
|
+
* Detect OpenAPI/Swagger version from spec.
|
|
69
|
+
*
|
|
70
|
+
* @returns Version string: 'swagger_2', 'openapi_3.0', 'openapi_3.1', 'openapi_3.2'
|
|
71
|
+
*/
|
|
72
|
+
private _detectSpecVersion;
|
|
73
|
+
/**
|
|
74
|
+
* Recursively resolve $ref references in OpenAPI spec with polymorphic keyword handling.
|
|
75
|
+
*
|
|
76
|
+
* @param obj - Current object being processed (object, array, or primitive)
|
|
77
|
+
* @param root - Root spec document for looking up references
|
|
78
|
+
* @param resolutionStack - Stack of refs currently being resolved (for circular detection)
|
|
79
|
+
* @param memo - Memoization cache to store resolved references
|
|
80
|
+
* @param insidePolymorphicKeyword - True if currently inside anyOf/oneOf/allOf
|
|
81
|
+
* @returns Object with all resolvable $refs replaced by their definitions
|
|
82
|
+
*/
|
|
83
|
+
private _resolveRefs;
|
|
84
|
+
/**
|
|
85
|
+
* Look up a reference path in the spec document.
|
|
86
|
+
*
|
|
87
|
+
* @param root - Root spec document
|
|
88
|
+
* @param refPath - Reference path like '#/components/schemas/User'
|
|
89
|
+
* @returns The referenced object, or null if not found
|
|
90
|
+
*/
|
|
91
|
+
private _lookupRef;
|
|
92
|
+
/**
|
|
93
|
+
* Parse OpenAPI specification and extract tools with lazy $ref resolution.
|
|
94
|
+
*/
|
|
95
|
+
private _parseOpenApiSpec;
|
|
96
|
+
/**
|
|
97
|
+
* Extract base URL from spec (version-aware).
|
|
98
|
+
*/
|
|
99
|
+
private _extractBaseUrl;
|
|
100
|
+
/**
|
|
101
|
+
* Create tool definition from OpenAPI operation.
|
|
102
|
+
*/
|
|
103
|
+
private _createToolFromOperation;
|
|
104
|
+
/**
|
|
105
|
+
* Normalize tool name to camelCase, removing special characters.
|
|
106
|
+
*/
|
|
107
|
+
private _normalizeToolName;
|
|
108
|
+
/**
|
|
109
|
+
* Check if a normalized tool name is valid.
|
|
110
|
+
*/
|
|
111
|
+
private _isValidToolName;
|
|
112
|
+
/**
|
|
113
|
+
* Parse OpenAPI parameters with lazy $ref resolution.
|
|
114
|
+
*/
|
|
115
|
+
private _parseParameters;
|
|
116
|
+
/**
|
|
117
|
+
* Parse OpenAPI 3.x request body with lazy $ref resolution.
|
|
118
|
+
*/
|
|
119
|
+
private _parseOpenApi3RequestBody;
|
|
120
|
+
/**
|
|
121
|
+
* Parse Swagger 2.0 body parameter into parameters.
|
|
122
|
+
*/
|
|
123
|
+
private _parseSwagger2BodyParameter;
|
|
124
|
+
/**
|
|
125
|
+
* Parse OpenAPI responses with lazy $ref resolution (version-aware).
|
|
126
|
+
*/
|
|
127
|
+
private _parseResponses;
|
|
128
|
+
/**
|
|
129
|
+
* Get tools filtered by tag.
|
|
130
|
+
*/
|
|
131
|
+
getToolsByTag(apiSpec: OCPAPISpec, tag: string): OCPTool[];
|
|
132
|
+
/**
|
|
133
|
+
* Filter tools to only include those whose first resource segment matches includeResources.
|
|
134
|
+
*/
|
|
135
|
+
private _filterToolsByResources;
|
|
136
|
+
/**
|
|
137
|
+
* Search tools by name or description.
|
|
138
|
+
*/
|
|
139
|
+
searchTools(apiSpec: OCPAPISpec, query: string): OCPTool[];
|
|
140
|
+
/**
|
|
141
|
+
* Generate human-readable tool documentation.
|
|
142
|
+
*/
|
|
143
|
+
generateToolDocumentation(tool: OCPTool): string;
|
|
144
|
+
/**
|
|
145
|
+
* Clear the discovery cache.
|
|
146
|
+
*/
|
|
147
|
+
clearCache(): void;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=schema_discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema_discovery.d.ts","sourceRoot":"","sources":["../../src/schema_discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,YAAY,CAAC,CAAS;;IAM9B;;;;;;;;OAQG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsC5H;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;YACW,UAAU;IAQxB;;;OAGG;YACW,aAAa;IAiB3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAuDtB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IAsIpB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAqBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6CzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8EhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgDjC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAyCnC;;OAEG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE;IAM1D;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE;IAS1D;;OAEG;IACH,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IA2BhD;;OAEG;IACH,UAAU,IAAI,IAAI;CAGrB"}
|