@xiuper/cli 0.0.2 → 1.0.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 (57) hide show
  1. package/dist/jsMain/typescript/agents/acp/AcpAgentServer.d.ts +18 -0
  2. package/dist/jsMain/typescript/agents/acp/AcpAgentServer.d.ts.map +1 -0
  3. package/dist/jsMain/typescript/agents/acp/AcpAgentServer.js +255 -0
  4. package/dist/jsMain/typescript/agents/acp/AcpAgentServer.js.map +1 -0
  5. package/dist/jsMain/typescript/agents/acp/AcpClientConnection.d.ts +96 -0
  6. package/dist/jsMain/typescript/agents/acp/AcpClientConnection.d.ts.map +1 -0
  7. package/dist/jsMain/typescript/agents/acp/AcpClientConnection.js +356 -0
  8. package/dist/jsMain/typescript/agents/acp/AcpClientConnection.js.map +1 -0
  9. package/dist/jsMain/typescript/agents/acp/index.d.ts +10 -0
  10. package/dist/jsMain/typescript/agents/acp/index.d.ts.map +1 -0
  11. package/dist/jsMain/typescript/agents/acp/index.js +10 -0
  12. package/dist/jsMain/typescript/agents/acp/index.js.map +1 -0
  13. package/dist/jsMain/typescript/agents/render/BaseRenderer.d.ts +39 -5
  14. package/dist/jsMain/typescript/agents/render/BaseRenderer.d.ts.map +1 -1
  15. package/dist/jsMain/typescript/agents/render/BaseRenderer.js +85 -0
  16. package/dist/jsMain/typescript/agents/render/BaseRenderer.js.map +1 -1
  17. package/dist/jsMain/typescript/agents/render/CliRenderer.d.ts +9 -4
  18. package/dist/jsMain/typescript/agents/render/CliRenderer.d.ts.map +1 -1
  19. package/dist/jsMain/typescript/agents/render/CliRenderer.js +65 -4
  20. package/dist/jsMain/typescript/agents/render/CliRenderer.js.map +1 -1
  21. package/dist/jsMain/typescript/agents/render/ServerRenderer.d.ts.map +1 -1
  22. package/dist/jsMain/typescript/agents/render/ServerRenderer.js +4 -1
  23. package/dist/jsMain/typescript/agents/render/ServerRenderer.js.map +1 -1
  24. package/dist/jsMain/typescript/config/ConfigManager.d.ts.map +1 -1
  25. package/dist/jsMain/typescript/config/ConfigManager.js +4 -2
  26. package/dist/jsMain/typescript/config/ConfigManager.js.map +1 -1
  27. package/dist/jsMain/typescript/index.js +60 -2
  28. package/dist/jsMain/typescript/index.js.map +1 -1
  29. package/dist/jsMain/typescript/modes/AgentMode.d.ts.map +1 -1
  30. package/dist/jsMain/typescript/modes/AgentMode.js +2 -0
  31. package/dist/jsMain/typescript/modes/AgentMode.js.map +1 -1
  32. package/dist/jsMain/typescript/modes/ChatMode.d.ts.map +1 -1
  33. package/dist/jsMain/typescript/modes/ChatMode.js +2 -0
  34. package/dist/jsMain/typescript/modes/ChatMode.js.map +1 -1
  35. package/dist/jsMain/typescript/modes/CodexMode.d.ts +39 -0
  36. package/dist/jsMain/typescript/modes/CodexMode.d.ts.map +1 -0
  37. package/dist/jsMain/typescript/modes/CodexMode.js +285 -0
  38. package/dist/jsMain/typescript/modes/CodexMode.js.map +1 -0
  39. package/dist/jsMain/typescript/modes/index.d.ts +1 -0
  40. package/dist/jsMain/typescript/modes/index.d.ts.map +1 -1
  41. package/dist/jsMain/typescript/modes/index.js +1 -0
  42. package/dist/jsMain/typescript/modes/index.js.map +1 -1
  43. package/dist/jsMain/typescript/processors/ModeCommandProcessor.d.ts.map +1 -1
  44. package/dist/jsMain/typescript/processors/ModeCommandProcessor.js +18 -1
  45. package/dist/jsMain/typescript/processors/ModeCommandProcessor.js.map +1 -1
  46. package/dist/jsMain/typescript/processors/SkillCommandProcessor.d.ts +31 -0
  47. package/dist/jsMain/typescript/processors/SkillCommandProcessor.d.ts.map +1 -0
  48. package/dist/jsMain/typescript/processors/SkillCommandProcessor.js +153 -0
  49. package/dist/jsMain/typescript/processors/SkillCommandProcessor.js.map +1 -0
  50. package/dist/jsMain/typescript/processors/SlashCommandProcessor.d.ts +12 -0
  51. package/dist/jsMain/typescript/processors/SlashCommandProcessor.d.ts.map +1 -1
  52. package/dist/jsMain/typescript/processors/SlashCommandProcessor.js +40 -0
  53. package/dist/jsMain/typescript/processors/SlashCommandProcessor.js.map +1 -1
  54. package/dist/jsMain/typescript/ui/App.d.ts.map +1 -1
  55. package/dist/jsMain/typescript/ui/App.js +3 -1
  56. package/dist/jsMain/typescript/ui/App.js.map +1 -1
  57. package/package.json +4 -3
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ACP Agent Server for the JS/Node.js CLI.
3
+ *
4
+ * This exposes our CodingAgent as an ACP-compliant agent that can be connected to
5
+ * by any ACP client (e.g., JetBrains IDEA, VSCode, Zed, or other editors).
6
+ *
7
+ * Communication happens over STDIO using JSON-RPC (newline-delimited JSON).
8
+ *
9
+ * Usage:
10
+ * xiuper acp
11
+ * # Now other editors can connect to this agent via its stdin/stdout
12
+ */
13
+ /**
14
+ * Start the ACP agent server on stdin/stdout.
15
+ * This is the entry point for `xiuper acp` command.
16
+ */
17
+ export declare function startAcpAgentServer(): Promise<void>;
18
+ //# sourceMappingURL=AcpAgentServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpAgentServer.d.ts","sourceRoot":"","sources":["../../../../../src/jsMain/typescript/agents/acp/AcpAgentServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA4TH;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBzD"}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * ACP Agent Server for the JS/Node.js CLI.
3
+ *
4
+ * This exposes our CodingAgent as an ACP-compliant agent that can be connected to
5
+ * by any ACP client (e.g., JetBrains IDEA, VSCode, Zed, or other editors).
6
+ *
7
+ * Communication happens over STDIO using JSON-RPC (newline-delimited JSON).
8
+ *
9
+ * Usage:
10
+ * xiuper acp
11
+ * # Now other editors can connect to this agent via its stdin/stdout
12
+ */
13
+ import * as acp from '@agentclientprotocol/sdk';
14
+ import { Readable, Writable } from 'node:stream';
15
+ import { ConfigManager } from '../../config/ConfigManager.js';
16
+ import mppCore from '@xiuper/mpp-core';
17
+ const { cc: KotlinCC } = mppCore;
18
+ /**
19
+ * ACP Agent implementation that wraps our CodingAgent.
20
+ */
21
+ class AutoDevAcpAgent {
22
+ connection;
23
+ sessions = new Map();
24
+ constructor(connection) {
25
+ this.connection = connection;
26
+ }
27
+ async initialize(params) {
28
+ console.error('[ACP Agent] Client connected:', params.clientInfo?.name);
29
+ return {
30
+ protocolVersion: acp.PROTOCOL_VERSION,
31
+ agentCapabilities: {
32
+ loadSession: false,
33
+ promptCapabilities: {},
34
+ },
35
+ agentInfo: {
36
+ name: 'autodev-xiuper',
37
+ version: '3.0.0',
38
+ title: 'AutoDev Xiuper (ACP Agent)',
39
+ },
40
+ };
41
+ }
42
+ async newSession(params) {
43
+ const sessionId = `autodev-${Date.now()}`;
44
+ const cwd = params.cwd || process.cwd();
45
+ console.error(`[ACP Agent] New session: ${sessionId} (cwd=${cwd})`);
46
+ // Load config
47
+ const config = await ConfigManager.load();
48
+ const activeConfig = config.getActiveConfig();
49
+ if (!activeConfig) {
50
+ throw new Error('No active LLM configuration found. Please configure your LLM provider first.');
51
+ }
52
+ // Create LLM service
53
+ const llmService = new KotlinCC.unitmesh.llm.JsKoogLLMService(new KotlinCC.unitmesh.llm.JsModelConfig(activeConfig.provider, activeConfig.model, activeConfig.apiKey || '', activeConfig.temperature || 0.7, activeConfig.maxTokens || 8192, activeConfig.baseUrl || ''));
54
+ // Load MCP servers if configured
55
+ const mcpServers = config.getMcpServers();
56
+ const enabledMcpServers = {};
57
+ for (const [name, serverConfig] of Object.entries(mcpServers)) {
58
+ if (serverConfig.enabled) {
59
+ enabledMcpServers[name] = {
60
+ command: serverConfig.command,
61
+ args: serverConfig.args || [],
62
+ env: serverConfig.env || {},
63
+ };
64
+ }
65
+ }
66
+ // Create a renderer that sends updates via ACP
67
+ const renderer = new AcpSessionRenderer(this.connection, sessionId);
68
+ // Create CodingAgent
69
+ const agent = new KotlinCC.unitmesh.agent.JsCodingAgent(cwd, llmService, 10, // maxIterations
70
+ renderer, Object.keys(enabledMcpServers).length > 0 ? enabledMcpServers : null, null // toolConfig
71
+ );
72
+ this.sessions.set(sessionId, {
73
+ sessionId,
74
+ cwd,
75
+ agent,
76
+ abortController: new AbortController(),
77
+ });
78
+ return { sessionId };
79
+ }
80
+ async prompt(params) {
81
+ const session = this.sessions.get(params.sessionId);
82
+ if (!session) {
83
+ throw acp.RequestError.invalidParams(`Unknown session: ${params.sessionId}`);
84
+ }
85
+ // Extract text from content blocks
86
+ const textParts = [];
87
+ for (const block of params.prompt) {
88
+ if (block.type === 'text') {
89
+ textParts.push(block.text);
90
+ }
91
+ }
92
+ const promptText = textParts.join('\n');
93
+ console.error(`[ACP Agent] Prompt in session ${params.sessionId}: ${promptText.substring(0, 100)}...`);
94
+ try {
95
+ // Create task and execute
96
+ const task = new KotlinCC.unitmesh.agent.JsAgentTask(promptText, session.cwd);
97
+ const result = await session.agent.executeTask(task);
98
+ return {
99
+ stopReason: result.success ? 'end_turn' : 'end_turn',
100
+ };
101
+ }
102
+ catch (error) {
103
+ console.error('[ACP Agent] Prompt error:', error);
104
+ // Send error as agent message
105
+ await this.connection.sessionUpdate({
106
+ sessionId: params.sessionId,
107
+ update: {
108
+ sessionUpdate: 'agent_message_chunk',
109
+ content: {
110
+ type: 'text',
111
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
112
+ },
113
+ },
114
+ });
115
+ return { stopReason: 'end_turn' };
116
+ }
117
+ }
118
+ async cancel(params) {
119
+ const session = this.sessions.get(params.sessionId);
120
+ if (session) {
121
+ session.abortController.abort();
122
+ console.error(`[ACP Agent] Session cancelled: ${params.sessionId}`);
123
+ }
124
+ }
125
+ // Optional methods - not needed for basic operation
126
+ async authenticate(params) {
127
+ throw acp.RequestError.methodNotFound('authenticate');
128
+ }
129
+ }
130
+ /**
131
+ * Renderer that sends all output as ACP session updates.
132
+ * This bridges our internal renderer to the ACP protocol.
133
+ */
134
+ class AcpSessionRenderer {
135
+ __doNotUseOrImplementIt = {};
136
+ connection;
137
+ sessionId;
138
+ toolCallCounter = 0;
139
+ constructor(connection, sessionId) {
140
+ this.connection = connection;
141
+ this.sessionId = sessionId;
142
+ }
143
+ renderIterationHeader(current, max) {
144
+ // Send as thought
145
+ this.sendThought(`Iteration ${current}/${max}`);
146
+ }
147
+ renderLLMResponseStart() {
148
+ // No-op, chunks will follow
149
+ }
150
+ renderLLMResponseChunk(chunk) {
151
+ if (chunk) {
152
+ this.sendTextChunk(chunk);
153
+ }
154
+ }
155
+ renderLLMResponseEnd() {
156
+ // No-op
157
+ }
158
+ renderThinkingChunk(chunk, isStart, isEnd) {
159
+ if (chunk) {
160
+ this.sendThought(chunk);
161
+ }
162
+ }
163
+ renderToolCall(toolName, paramsStr) {
164
+ this.toolCallCounter++;
165
+ this.sendToolCall(toolName, 'in_progress', paramsStr);
166
+ }
167
+ renderToolCallWithParams(toolName, params) {
168
+ this.toolCallCounter++;
169
+ const paramsStr = Object.entries(params)
170
+ .map(([k, v]) => `${k}=${v}`)
171
+ .join(', ');
172
+ this.sendToolCall(toolName, 'in_progress', paramsStr);
173
+ }
174
+ renderToolResult(toolName, success, output, fullOutput, metadata) {
175
+ this.sendToolCall(toolName, success ? 'completed' : 'errored', undefined, output || fullOutput || undefined);
176
+ }
177
+ renderTaskComplete(executionTimeMs, toolsUsedCount) {
178
+ this.sendTextChunk(`\nTask completed in ${executionTimeMs || 0}ms using ${toolsUsedCount || 0} tools.`);
179
+ }
180
+ renderFinalResult(success, message, iterations) {
181
+ // Final result is implicit in the prompt response
182
+ }
183
+ renderError(message) {
184
+ this.sendTextChunk(`\nError: ${message}`);
185
+ }
186
+ renderRepeatWarning(toolName, count) {
187
+ this.sendThought(`Warning: Tool '${toolName}' called ${count} times consecutively`);
188
+ }
189
+ renderRecoveryAdvice(recoveryAdvice) {
190
+ this.sendTextChunk(`\nRecovery advice: ${recoveryAdvice}`);
191
+ }
192
+ renderUserConfirmationRequest(toolName, params) {
193
+ // Auto-approve in ACP mode
194
+ }
195
+ renderPlanSummary(summary) {
196
+ // Could emit plan update here if needed
197
+ }
198
+ renderAgentSketchBlock(agentName, language, code, metadata) {
199
+ this.sendTextChunk(`\n\`\`\`${language}\n${code}\n\`\`\`\n`);
200
+ }
201
+ addLiveTerminal(sessionId, command, workingDirectory, ptyHandle) {
202
+ // No-op in ACP mode
203
+ }
204
+ // -- Private helpers --
205
+ sendTextChunk(text) {
206
+ this.connection.sessionUpdate({
207
+ sessionId: this.sessionId,
208
+ update: {
209
+ sessionUpdate: 'agent_message_chunk',
210
+ content: { type: 'text', text },
211
+ },
212
+ }).catch(err => console.error('[ACP Renderer] Failed to send text chunk:', err));
213
+ }
214
+ sendThought(text) {
215
+ this.connection.sessionUpdate({
216
+ sessionId: this.sessionId,
217
+ update: {
218
+ sessionUpdate: 'agent_thought_chunk',
219
+ content: { type: 'text', text },
220
+ },
221
+ }).catch(err => console.error('[ACP Renderer] Failed to send thought:', err));
222
+ }
223
+ sendToolCall(title, status, input, output) {
224
+ this.connection.sessionUpdate({
225
+ sessionId: this.sessionId,
226
+ update: {
227
+ sessionUpdate: 'tool_call',
228
+ toolCallId: `tc-${this.toolCallCounter}`,
229
+ title,
230
+ status,
231
+ kind: 'other',
232
+ ...(input ? { rawInput: input } : {}),
233
+ ...(output ? { rawOutput: output } : {}),
234
+ },
235
+ }).catch(err => console.error('[ACP Renderer] Failed to send tool call:', err));
236
+ }
237
+ }
238
+ /**
239
+ * Start the ACP agent server on stdin/stdout.
240
+ * This is the entry point for `xiuper acp` command.
241
+ */
242
+ export async function startAcpAgentServer() {
243
+ console.error('[ACP Agent] Starting AutoDev Xiuper ACP Agent Server...');
244
+ // For ACP ndJsonStream: first param is output (where we write), second is input (where we read)
245
+ // We write JSON responses to stdout, read JSON requests from stdin
246
+ const output = Writable.toWeb(process.stdout);
247
+ const input = Readable.toWeb(process.stdin);
248
+ const stream = acp.ndJsonStream(output, input);
249
+ const connection = new acp.AgentSideConnection((conn) => new AutoDevAcpAgent(conn), stream);
250
+ console.error('[ACP Agent] Server started. Waiting for client connections on stdio...');
251
+ // Wait for the connection to close
252
+ await connection.closed;
253
+ console.error('[ACP Agent] Connection closed.');
254
+ }
255
+ //# sourceMappingURL=AcpAgentServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpAgentServer.js","sourceRoot":"","sources":["../../../../../src/jsMain/typescript/agents/acp/AcpAgentServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * ACP Client Connection for the JS/Node.js CLI.
3
+ *
4
+ * This allows our CLI to connect to external ACP agents (e.g., Claude CLI, Gemini CLI, Codex)
5
+ * and interact with them through the standardized ACP protocol.
6
+ *
7
+ * Features:
8
+ * - Process lifecycle management with graceful shutdown
9
+ * - fs capabilities (readTextFile/writeTextFile) for agent file access
10
+ * - Terminal capability for agent shell execution
11
+ * - Session reuse for multi-turn prompts
12
+ * - Tool call deduplication (ACP streams many IN_PROGRESS updates)
13
+ *
14
+ * Usage:
15
+ * const client = new AcpClientConnection('codex', ['--acp']);
16
+ * await client.connect('/path/to/project');
17
+ * const result = await client.prompt('Fix the bug in main.ts');
18
+ * // Multi-turn: send another prompt in the same session
19
+ * const result2 = await client.prompt('Now add tests');
20
+ * await client.disconnect();
21
+ */
22
+ /**
23
+ * Callback interface for receiving ACP session updates.
24
+ */
25
+ export interface AcpClientCallbacks {
26
+ onTextChunk?: (text: string) => void;
27
+ onThoughtChunk?: (text: string) => void;
28
+ onToolCall?: (title: string, status: string, input?: string, output?: string) => void;
29
+ onPlanUpdate?: (entries: Array<{
30
+ content: string;
31
+ status: string;
32
+ }>) => void;
33
+ onModeUpdate?: (modeId: string) => void;
34
+ onError?: (message: string) => void;
35
+ /** Called when permission is requested. Return true to approve, false to deny. */
36
+ onPermissionRequest?: (toolTitle: string, options: string[]) => Promise<boolean>;
37
+ }
38
+ /**
39
+ * Configuration for ACP client capabilities.
40
+ */
41
+ export interface AcpClientCapabilities {
42
+ /** Enable fs.readTextFile and fs.writeTextFile for the agent */
43
+ fs?: boolean;
44
+ /** Enable terminal operations for the agent */
45
+ terminal?: boolean;
46
+ }
47
+ /**
48
+ * ACP Client that connects to an external ACP agent process.
49
+ *
50
+ * Supports process reuse, multi-turn prompts, and tool call dedup.
51
+ */
52
+ export declare class AcpClientConnection {
53
+ private command;
54
+ private args;
55
+ private env;
56
+ private clientCapabilities;
57
+ private connection;
58
+ private agentProcess;
59
+ private callbacks;
60
+ private currentSessionId;
61
+ private currentCwd;
62
+ private promptCount;
63
+ constructor(command: string, args?: string[], env?: Record<string, string>, capabilities?: AcpClientCapabilities);
64
+ /**
65
+ * Set callbacks for receiving updates from the agent.
66
+ */
67
+ setCallbacks(callbacks: AcpClientCallbacks): void;
68
+ /**
69
+ * Connect to the ACP agent: spawn the process, initialize protocol, create session.
70
+ */
71
+ connect(cwd: string): Promise<void>;
72
+ /**
73
+ * Send a prompt to the agent and wait for completion.
74
+ * Supports multi-turn: call this multiple times within the same session.
75
+ */
76
+ prompt(text: string): Promise<{
77
+ stopReason: string;
78
+ }>;
79
+ /**
80
+ * Cancel the current prompt.
81
+ */
82
+ cancel(): Promise<void>;
83
+ /**
84
+ * Disconnect from the agent and clean up the process.
85
+ */
86
+ disconnect(): Promise<void>;
87
+ /**
88
+ * Check if the client is connected and the process is alive.
89
+ */
90
+ get isConnected(): boolean;
91
+ /**
92
+ * Get the number of prompts sent in the current session.
93
+ */
94
+ get currentPromptCount(): number;
95
+ }
96
+ //# sourceMappingURL=AcpClientConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcpClientConnection.d.ts","sourceRoot":"","sources":["../../../../../src/jsMain/typescript/agents/acp/AcpClientConnection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtF,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC7E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClF;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,GAAG,CAAyB;IACpC,OAAO,CAAC,kBAAkB,CAAwB;IAClD,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAK;gBAGtB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAChC,YAAY,GAAE,qBAAoD;IAQpE;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;IAIjD;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgFzC;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA2B3D;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCjC;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAOzB;IAED;;OAEG;IACH,IAAI,kBAAkB,IAAI,MAAM,CAE/B;CACF"}