@viberlabs/opencode 1.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.md +25 -0
- package/README.md +178 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +322 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/index.d.ts +6 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/integration/index.js +7 -0
- package/dist/integration/index.js.map +1 -0
- package/package.json +33 -0
- package/src/__tests__/client.test.d.ts +5 -0
- package/src/__tests__/client.test.d.ts.map +1 -0
- package/src/__tests__/client.test.js +155 -0
- package/src/__tests__/client.test.js.map +1 -0
- package/src/__tests__/client.test.ts +169 -0
- package/src/index.d.ts +56 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +322 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +353 -0
- package/src/integration/index.d.ts +6 -0
- package/src/integration/index.d.ts.map +1 -0
- package/src/integration/index.js +7 -0
- package/src/integration/index.js.map +1 -0
- package/src/integration/index.ts +6 -0
- package/tsconfig.json +14 -0
- package/vitest.config.ts +20 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @vitest-environment node
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const vitest_1 = require("vitest");
|
|
7
|
+
const index_1 = require("../index");
|
|
8
|
+
(0, vitest_1.describe)('OpenCodeClient', () => {
|
|
9
|
+
(0, vitest_1.describe)('constructor', () => {
|
|
10
|
+
(0, vitest_1.it)('should initialize with config', () => {
|
|
11
|
+
const client = new index_1.OpenCodeClient({
|
|
12
|
+
baseUrl: 'http://localhost:51262',
|
|
13
|
+
username: 'test',
|
|
14
|
+
password: 'test-password',
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.expect)(client).toBeDefined();
|
|
17
|
+
});
|
|
18
|
+
(0, vitest_1.it)('should initialize without base URL', () => {
|
|
19
|
+
const client = new index_1.OpenCodeClient({
|
|
20
|
+
username: 'test',
|
|
21
|
+
password: 'test-password',
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.expect)(client).toBeDefined();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.describe)('healthCheck', () => {
|
|
27
|
+
(0, vitest_1.it)('should return health status', async () => {
|
|
28
|
+
const client = new index_1.OpenCodeClient({
|
|
29
|
+
baseUrl: 'http://localhost:51262',
|
|
30
|
+
username: 'test',
|
|
31
|
+
password: 'test-password',
|
|
32
|
+
});
|
|
33
|
+
try {
|
|
34
|
+
const health = await client.healthCheck();
|
|
35
|
+
(0, vitest_1.expect)(health).toHaveProperty('status');
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// Expected if no OpenCode server running
|
|
39
|
+
(0, vitest_1.expect)(error).toBeDefined();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.describe)('createSession', () => {
|
|
44
|
+
(0, vitest_1.it)('should create a session with title', async () => {
|
|
45
|
+
const client = new index_1.OpenCodeClient({
|
|
46
|
+
baseUrl: 'http://localhost:51262',
|
|
47
|
+
username: 'test',
|
|
48
|
+
password: 'test-password',
|
|
49
|
+
});
|
|
50
|
+
try {
|
|
51
|
+
const sessionId = await client.createSession('Test Session');
|
|
52
|
+
(0, vitest_1.expect)(typeof sessionId).toBe('string');
|
|
53
|
+
(0, vitest_1.expect)(sessionId).toBeTruthy();
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// Expected if no OpenCode server running
|
|
57
|
+
(0, vitest_1.expect)(error).toBeDefined();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
(0, vitest_1.describe)('sendMessage', () => {
|
|
62
|
+
(0, vitest_1.it)('should send message to session', async () => {
|
|
63
|
+
const client = new index_1.OpenCodeClient({
|
|
64
|
+
baseUrl: 'http://localhost:51262',
|
|
65
|
+
username: 'test',
|
|
66
|
+
password: 'test-password',
|
|
67
|
+
});
|
|
68
|
+
try {
|
|
69
|
+
const sessionId = await client.createSession('Test');
|
|
70
|
+
const response = await client.sendMessage(sessionId, 'Hello, world!', 'qwen/qwen3-coder:480b');
|
|
71
|
+
(0, vitest_1.expect)(response).toHaveProperty('messageId');
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
// Expected if no OpenCode server running
|
|
75
|
+
(0, vitest_1.expect)(error).toBeDefined();
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.describe)('sendMessageAsync', () => {
|
|
80
|
+
(0, vitest_1.it)('should send message asynchronously', async () => {
|
|
81
|
+
const client = new index_1.OpenCodeClient({
|
|
82
|
+
baseUrl: 'http://localhost:51262',
|
|
83
|
+
username: 'test',
|
|
84
|
+
password: 'test-password',
|
|
85
|
+
});
|
|
86
|
+
try {
|
|
87
|
+
const sessionId = await client.createSession('Test');
|
|
88
|
+
await client.sendMessageAsync(sessionId, 'Async message', 'qwen/qwen3-coder:480b');
|
|
89
|
+
// Should not throw
|
|
90
|
+
(0, vitest_1.expect)(true).toBe(true);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
// Expected if no OpenCode server running
|
|
94
|
+
(0, vitest_1.expect)(error).toBeDefined();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
(0, vitest_1.describe)('getSession', () => {
|
|
99
|
+
(0, vitest_1.it)('should retrieve session by ID', async () => {
|
|
100
|
+
const client = new index_1.OpenCodeClient({
|
|
101
|
+
baseUrl: 'http://localhost:51262',
|
|
102
|
+
username: 'test',
|
|
103
|
+
password: 'test-password',
|
|
104
|
+
});
|
|
105
|
+
try {
|
|
106
|
+
const sessionId = await client.createSession('Test');
|
|
107
|
+
const session = await client.getSession(sessionId);
|
|
108
|
+
(0, vitest_1.expect)(session).toHaveProperty('id');
|
|
109
|
+
(0, vitest_1.expect)(session).toHaveProperty('title');
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
// Expected if no OpenCode server running
|
|
113
|
+
(0, vitest_1.expect)(error).toBeDefined();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
(0, vitest_1.describe)('getMessages', () => {
|
|
118
|
+
(0, vitest_1.it)('should retrieve messages for session', async () => {
|
|
119
|
+
const client = new index_1.OpenCodeClient({
|
|
120
|
+
baseUrl: 'http://localhost:51262',
|
|
121
|
+
username: 'test',
|
|
122
|
+
password: 'test-password',
|
|
123
|
+
});
|
|
124
|
+
try {
|
|
125
|
+
const sessionId = await client.createSession('Test');
|
|
126
|
+
const messages = await client.getMessages(sessionId);
|
|
127
|
+
(0, vitest_1.expect)(Array.isArray(messages)).toBe(true);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
// Expected if no OpenCode server running
|
|
131
|
+
(0, vitest_1.expect)(error).toBeDefined();
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
(0, vitest_1.describe)('abortSession', () => {
|
|
136
|
+
(0, vitest_1.it)('should abort session', async () => {
|
|
137
|
+
const client = new index_1.OpenCodeClient({
|
|
138
|
+
baseUrl: 'http://localhost:51262',
|
|
139
|
+
username: 'test',
|
|
140
|
+
password: 'test-password',
|
|
141
|
+
});
|
|
142
|
+
try {
|
|
143
|
+
const sessionId = await client.createSession('Test');
|
|
144
|
+
await client.sendMessageAsync(sessionId, 'Long running task', 'qwen/qwen3-coder:480b');
|
|
145
|
+
const aborted = await client.abortSession(sessionId);
|
|
146
|
+
(0, vitest_1.expect)(typeof aborted).toBe('boolean');
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
// Expected if no OpenCode server running
|
|
150
|
+
(0, vitest_1.expect)(error).toBeDefined();
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vitest-environment node
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { describe, it, expect } from 'vitest';
|
|
6
|
+
import { OpenCodeClient } from '../index';
|
|
7
|
+
|
|
8
|
+
describe('OpenCodeClient', () => {
|
|
9
|
+
describe('constructor', () => {
|
|
10
|
+
it('should initialize with config', () => {
|
|
11
|
+
const client = new OpenCodeClient({
|
|
12
|
+
baseUrl: 'http://localhost:51262',
|
|
13
|
+
username: 'test',
|
|
14
|
+
password: 'test-password',
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
expect(client).toBeDefined();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('should initialize without base URL', () => {
|
|
21
|
+
const client = new OpenCodeClient({
|
|
22
|
+
username: 'test',
|
|
23
|
+
password: 'test-password',
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
expect(client).toBeDefined();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe('healthCheck', () => {
|
|
31
|
+
it('should return health status', async () => {
|
|
32
|
+
const client = new OpenCodeClient({
|
|
33
|
+
baseUrl: 'http://localhost:51262',
|
|
34
|
+
username: 'test',
|
|
35
|
+
password: 'test-password',
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
const health = await client.healthCheck();
|
|
40
|
+
expect(health).toHaveProperty('status');
|
|
41
|
+
} catch (error) {
|
|
42
|
+
// Expected if no OpenCode server running
|
|
43
|
+
expect(error).toBeDefined();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
describe('createSession', () => {
|
|
49
|
+
it('should create a session with title', async () => {
|
|
50
|
+
const client = new OpenCodeClient({
|
|
51
|
+
baseUrl: 'http://localhost:51262',
|
|
52
|
+
username: 'test',
|
|
53
|
+
password: 'test-password',
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
try {
|
|
57
|
+
const sessionId = await client.createSession('Test Session');
|
|
58
|
+
expect(typeof sessionId).toBe('string');
|
|
59
|
+
expect(sessionId).toBeTruthy();
|
|
60
|
+
} catch (error) {
|
|
61
|
+
// Expected if no OpenCode server running
|
|
62
|
+
expect(error).toBeDefined();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe('sendMessage', () => {
|
|
68
|
+
it('should send message to session', async () => {
|
|
69
|
+
const client = new OpenCodeClient({
|
|
70
|
+
baseUrl: 'http://localhost:51262',
|
|
71
|
+
username: 'test',
|
|
72
|
+
password: 'test-password',
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
const sessionId = await client.createSession('Test');
|
|
77
|
+
const response = await client.sendMessage(sessionId, 'Hello, world!', 'qwen/qwen3-coder:480b');
|
|
78
|
+
|
|
79
|
+
expect(response).toHaveProperty('messageId');
|
|
80
|
+
} catch (error) {
|
|
81
|
+
// Expected if no OpenCode server running
|
|
82
|
+
expect(error).toBeDefined();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
describe('sendMessageAsync', () => {
|
|
88
|
+
it('should send message asynchronously', async () => {
|
|
89
|
+
const client = new OpenCodeClient({
|
|
90
|
+
baseUrl: 'http://localhost:51262',
|
|
91
|
+
username: 'test',
|
|
92
|
+
password: 'test-password',
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
const sessionId = await client.createSession('Test');
|
|
97
|
+
await client.sendMessageAsync(sessionId, 'Async message', 'qwen/qwen3-coder:480b');
|
|
98
|
+
|
|
99
|
+
// Should not throw
|
|
100
|
+
expect(true).toBe(true);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
// Expected if no OpenCode server running
|
|
103
|
+
expect(error).toBeDefined();
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
describe('getSession', () => {
|
|
109
|
+
it('should retrieve session by ID', async () => {
|
|
110
|
+
const client = new OpenCodeClient({
|
|
111
|
+
baseUrl: 'http://localhost:51262',
|
|
112
|
+
username: 'test',
|
|
113
|
+
password: 'test-password',
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
const sessionId = await client.createSession('Test');
|
|
118
|
+
const session = await client.getSession(sessionId);
|
|
119
|
+
|
|
120
|
+
expect(session).toHaveProperty('id');
|
|
121
|
+
expect(session).toHaveProperty('title');
|
|
122
|
+
} catch (error) {
|
|
123
|
+
// Expected if no OpenCode server running
|
|
124
|
+
expect(error).toBeDefined();
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
describe('getMessages', () => {
|
|
130
|
+
it('should retrieve messages for session', async () => {
|
|
131
|
+
const client = new OpenCodeClient({
|
|
132
|
+
baseUrl: 'http://localhost:51262',
|
|
133
|
+
username: 'test',
|
|
134
|
+
password: 'test-password',
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
try {
|
|
138
|
+
const sessionId = await client.createSession('Test');
|
|
139
|
+
const messages = await client.getMessages(sessionId);
|
|
140
|
+
|
|
141
|
+
expect(Array.isArray(messages)).toBe(true);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
// Expected if no OpenCode server running
|
|
144
|
+
expect(error).toBeDefined();
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
describe('abortSession', () => {
|
|
150
|
+
it('should abort session', async () => {
|
|
151
|
+
const client = new OpenCodeClient({
|
|
152
|
+
baseUrl: 'http://localhost:51262',
|
|
153
|
+
username: 'test',
|
|
154
|
+
password: 'test-password',
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
const sessionId = await client.createSession('Test');
|
|
159
|
+
await client.sendMessageAsync(sessionId, 'Long running task', 'qwen/qwen3-coder:480b');
|
|
160
|
+
|
|
161
|
+
const aborted = await client.abortSession(sessionId);
|
|
162
|
+
expect(typeof aborted).toBe('boolean');
|
|
163
|
+
} catch (error) {
|
|
164
|
+
// Expected if no OpenCode server running
|
|
165
|
+
expect(error).toBeDefined();
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
});
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @viberlabs/opencode
|
|
3
|
+
* OpenCode HTTP client and SSE stream for real-time agent progress
|
|
4
|
+
*/
|
|
5
|
+
export declare function discoverOpenCodePort(): Promise<number | null>;
|
|
6
|
+
export declare function getOpenCodeBaseUrl(explicitPort?: number): Promise<string>;
|
|
7
|
+
export interface OpenCodeConfig {
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
port?: number;
|
|
10
|
+
username: string;
|
|
11
|
+
password?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface OpenCodeMessage {
|
|
14
|
+
messageId: string;
|
|
15
|
+
content: string;
|
|
16
|
+
}
|
|
17
|
+
export interface OpenCodeSession {
|
|
18
|
+
id: string;
|
|
19
|
+
title: string;
|
|
20
|
+
status: string;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
messageCount?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface LogEvent {
|
|
25
|
+
id: string;
|
|
26
|
+
type: "status" | "thought" | "tool_call" | "text" | "error";
|
|
27
|
+
content: string;
|
|
28
|
+
timestamp: string;
|
|
29
|
+
}
|
|
30
|
+
export declare class OpenCodeClient {
|
|
31
|
+
private config;
|
|
32
|
+
constructor(config: OpenCodeConfig);
|
|
33
|
+
static create(config?: Partial<OpenCodeConfig>): Promise<OpenCodeClient>;
|
|
34
|
+
private getAuthHeader;
|
|
35
|
+
healthCheck(): Promise<{
|
|
36
|
+
status: string;
|
|
37
|
+
version?: string;
|
|
38
|
+
}>;
|
|
39
|
+
createSession(title: string): Promise<string>;
|
|
40
|
+
getSession(sessionId: string): Promise<OpenCodeSession>;
|
|
41
|
+
sendMessage(sessionId: string, prompt: string, model?: string): Promise<OpenCodeMessage>;
|
|
42
|
+
sendMessageAsync(sessionId: string, prompt: string, model?: string): Promise<void>;
|
|
43
|
+
getMessages(sessionId: string): Promise<any[]>;
|
|
44
|
+
abortSession(sessionId: string): Promise<void>;
|
|
45
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
export declare class OpenCodeLogStream {
|
|
48
|
+
private url;
|
|
49
|
+
private authHeader;
|
|
50
|
+
private es;
|
|
51
|
+
constructor(baseUrl: string, sessionId: string, authHeader: string);
|
|
52
|
+
connect(onEvent: (event: LogEvent) => void): Promise<void>;
|
|
53
|
+
private mapType;
|
|
54
|
+
disconnect(): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8BH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQnE;AAED,wBAAsB,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe/E;AAMD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AA4DD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc;WAIrB,MAAM,CAAC,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAKlF,OAAO,CAAC,aAAa;IAKf,WAAW,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAiB5D,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB7C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAevD,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAgC,GACtC,OAAO,CAAC,eAAe,CAAC;IAqBrB,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAgC,GACtC,OAAO,CAAC,IAAI,CAAC;IAeV,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAS9C,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOtD;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,EAAE,CAA0B;gBAExB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAK5D,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BhE,OAAO,CAAC,OAAO;IAQf,UAAU,IAAI,IAAI;CAMnB"}
|