gemini-helper-friend 2.0.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 (64) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +216 -0
  3. package/dist/config/index.d.ts +6 -0
  4. package/dist/config/index.d.ts.map +1 -0
  5. package/dist/config/index.js +6 -0
  6. package/dist/config/index.js.map +1 -0
  7. package/dist/config/loader.d.ts +22 -0
  8. package/dist/config/loader.d.ts.map +1 -0
  9. package/dist/config/loader.js +193 -0
  10. package/dist/config/loader.js.map +1 -0
  11. package/dist/config/templates/completion-inspector.mdx +648 -0
  12. package/dist/config/templates/helper-friend.mdx +763 -0
  13. package/dist/config/templates/manual-tester.mdx +950 -0
  14. package/dist/config/types.d.ts +90 -0
  15. package/dist/config/types.d.ts.map +1 -0
  16. package/dist/config/types.js +6 -0
  17. package/dist/config/types.js.map +1 -0
  18. package/dist/config/yaml/subagents.yaml +449 -0
  19. package/dist/config/yaml/tools.yaml +0 -0
  20. package/dist/constants.d.ts +2 -0
  21. package/dist/constants.d.ts.map +1 -0
  22. package/dist/constants.js +2 -0
  23. package/dist/constants.js.map +1 -0
  24. package/dist/index.d.ts +7 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +253 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/tools/agentic-task.tool.d.ts +2 -0
  29. package/dist/tools/agentic-task.tool.d.ts.map +1 -0
  30. package/dist/tools/agentic-task.tool.js +2 -0
  31. package/dist/tools/agentic-task.tool.js.map +1 -0
  32. package/dist/tools/extension-manager.tool.d.ts +2 -0
  33. package/dist/tools/extension-manager.tool.d.ts.map +1 -0
  34. package/dist/tools/extension-manager.tool.js +2 -0
  35. package/dist/tools/extension-manager.tool.js.map +1 -0
  36. package/dist/tools/gemini-task.tool.d.ts +2 -0
  37. package/dist/tools/gemini-task.tool.d.ts.map +1 -0
  38. package/dist/tools/gemini-task.tool.js +2 -0
  39. package/dist/tools/gemini-task.tool.js.map +1 -0
  40. package/dist/tools/index.d.ts +5 -0
  41. package/dist/tools/index.d.ts.map +1 -0
  42. package/dist/tools/index.js +5 -0
  43. package/dist/tools/index.js.map +1 -0
  44. package/dist/tools/session-manager.tool.d.ts +2 -0
  45. package/dist/tools/session-manager.tool.d.ts.map +1 -0
  46. package/dist/tools/session-manager.tool.js +2 -0
  47. package/dist/tools/session-manager.tool.js.map +1 -0
  48. package/dist/tools/structured-query.tool.d.ts +2 -0
  49. package/dist/tools/structured-query.tool.d.ts.map +1 -0
  50. package/dist/tools/structured-query.tool.js +2 -0
  51. package/dist/tools/structured-query.tool.js.map +1 -0
  52. package/dist/tools/subagent.tool.d.ts +75 -0
  53. package/dist/tools/subagent.tool.d.ts.map +1 -0
  54. package/dist/tools/subagent.tool.js +604 -0
  55. package/dist/tools/subagent.tool.js.map +1 -0
  56. package/dist/utils/geminiExecutor.d.ts +2 -0
  57. package/dist/utils/geminiExecutor.d.ts.map +1 -0
  58. package/dist/utils/geminiExecutor.js +2 -0
  59. package/dist/utils/geminiExecutor.js.map +1 -0
  60. package/package.json +62 -0
  61. package/src/config/templates/completion-inspector.mdx +648 -0
  62. package/src/config/templates/helper-friend.mdx +763 -0
  63. package/src/config/templates/manual-tester.mdx +950 -0
  64. package/src/config/yaml/subagents.yaml +449 -0
package/dist/index.js ADDED
@@ -0,0 +1,253 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Gemini Helper Friend MCP
4
+ * Your autonomous AI assistant that works on your codebase using Gemini CLI
5
+ */
6
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
7
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
9
+ import { generateMcpTools, getMetadata } from "./config/index.js";
10
+ import { executeSubagent, executeSubagentAsync, getTaskStatusResponse, getCompletedTasksAsResources, getTaskResourceContent, } from "./tools/index.js";
11
+ const metadata = getMetadata();
12
+ const server = new Server({
13
+ name: metadata.name,
14
+ version: "2.0.0",
15
+ }, {
16
+ capabilities: {
17
+ tools: {
18
+ listChanged: true, // Support tool list change notifications
19
+ },
20
+ resources: {
21
+ subscribe: true, // Support resource subscriptions
22
+ listChanged: true, // Support resource list change notifications
23
+ },
24
+ },
25
+ });
26
+ const KEEPALIVE_INTERVAL = 25000;
27
+ let isProcessing = false;
28
+ let latestOutput = "";
29
+ async function sendProgressNotification(progressToken, progress, message) {
30
+ if (!progressToken)
31
+ return;
32
+ try {
33
+ await server.notification({
34
+ method: "notifications/progress",
35
+ params: { progressToken, progress, message },
36
+ });
37
+ }
38
+ catch {
39
+ // Ignore notification errors
40
+ }
41
+ }
42
+ function startProgressUpdates(progressToken) {
43
+ isProcessing = true;
44
+ latestOutput = "";
45
+ const messages = [
46
+ "🤖 Gemini Helper Friend is working on your task...",
47
+ "📊 Analyzing files and gathering insights...",
48
+ "✨ Processing with Gemini CLI (YOLO mode)...",
49
+ "🔍 Still working... complex tasks take time...",
50
+ ];
51
+ let idx = 0;
52
+ let progress = 0;
53
+ if (progressToken) {
54
+ sendProgressNotification(progressToken, 0, "🚀 Starting task...");
55
+ }
56
+ const interval = setInterval(() => {
57
+ if (isProcessing && progressToken) {
58
+ progress += 1;
59
+ const msg = messages[idx % messages.length];
60
+ const preview = latestOutput.slice(-100).trim();
61
+ sendProgressNotification(progressToken, progress, preview ? `${msg}\n📝 ...${preview}` : msg);
62
+ idx++;
63
+ }
64
+ else {
65
+ clearInterval(interval);
66
+ }
67
+ }, KEEPALIVE_INTERVAL);
68
+ return { interval, progressToken };
69
+ }
70
+ function stopProgressUpdates(data, success) {
71
+ isProcessing = false;
72
+ clearInterval(data.interval);
73
+ if (data.progressToken) {
74
+ sendProgressNotification(data.progressToken, 100, success ? "✅ Task completed!" : "❌ Task failed");
75
+ }
76
+ }
77
+ // ============================================================================
78
+ // NOTIFICATION HELPER - Send resource list changed notification
79
+ // ============================================================================
80
+ async function sendResourceListChangedNotification() {
81
+ try {
82
+ await server.notification({
83
+ method: "notifications/resources/list_changed",
84
+ });
85
+ }
86
+ catch {
87
+ // Ignore notification errors (client may not support)
88
+ }
89
+ }
90
+ async function sendTaskCompletionNotification(taskId) {
91
+ try {
92
+ await server.notification({
93
+ method: "notifications/resources/updated",
94
+ params: { uri: `task://${taskId}` },
95
+ });
96
+ }
97
+ catch {
98
+ // Ignore notification errors
99
+ }
100
+ }
101
+ // ============================================================================
102
+ // RESOURCES - Completed tasks exposed as readable resources
103
+ // ============================================================================
104
+ // resources/list - Return completed tasks as resources
105
+ server.setRequestHandler(ListResourcesRequestSchema, async (_request) => {
106
+ const completedTasks = getCompletedTasksAsResources();
107
+ return { resources: completedTasks };
108
+ });
109
+ // resources/read - Read a specific task result
110
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
111
+ const uri = request.params.uri;
112
+ const content = getTaskResourceContent(uri);
113
+ if (!content) {
114
+ throw new Error(`Resource not found: ${uri}`);
115
+ }
116
+ return {
117
+ contents: [{
118
+ uri,
119
+ mimeType: "text/markdown",
120
+ text: content,
121
+ }],
122
+ };
123
+ });
124
+ // ============================================================================
125
+ // TOOLS
126
+ // ============================================================================
127
+ // tools/list - Return tools from YAML config
128
+ server.setRequestHandler(ListToolsRequestSchema, async (_request) => {
129
+ const tools = generateMcpTools();
130
+ return { tools: tools };
131
+ });
132
+ // tools/call - Execute tools (gemini-subagent or check_subagent_task)
133
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
134
+ const toolName = request.params.name;
135
+ // ========================================================================
136
+ // TOOL: check_subagent_task - Query async task status
137
+ // ========================================================================
138
+ if (toolName === "check_subagent_task") {
139
+ const args = request.params.arguments;
140
+ if (!args.task_id || typeof args.task_id !== 'number') {
141
+ return {
142
+ content: [{
143
+ type: "text",
144
+ text: JSON.stringify({
145
+ status: "error",
146
+ error: "task_id is required and must be a number (5-digit integer)",
147
+ }, null, 2),
148
+ }],
149
+ isError: true,
150
+ };
151
+ }
152
+ const statusResponse = getTaskStatusResponse(args.task_id);
153
+ return {
154
+ content: [{
155
+ type: "text",
156
+ text: JSON.stringify(statusResponse, null, 2),
157
+ }],
158
+ isError: false,
159
+ };
160
+ }
161
+ // ========================================================================
162
+ // TOOL: gemini-subagent - Execute subagent (async or sync)
163
+ // ========================================================================
164
+ if (toolName !== "gemini-subagent") {
165
+ throw new Error(`Unknown tool: ${toolName}`);
166
+ }
167
+ const args = (request.params.arguments || {});
168
+ // Default async=true; explicit false for sync/blocking mode
169
+ const isAsync = args.async !== false;
170
+ // ========================================================================
171
+ // ASYNC MODE (default): Return task ID immediately
172
+ // ========================================================================
173
+ if (isAsync) {
174
+ const progressToken = request.params._meta?.progressToken;
175
+ const asyncResult = executeSubagentAsync(args,
176
+ // Progress callback
177
+ (taskId, progress, output) => {
178
+ if (progressToken) {
179
+ sendProgressNotification(progressToken, progress, `Task ${taskId}: ${output.slice(-100)}`);
180
+ }
181
+ },
182
+ // Completion callback - send MCP notifications
183
+ async (taskId) => {
184
+ await sendResourceListChangedNotification();
185
+ await sendTaskCompletionNotification(taskId);
186
+ });
187
+ return {
188
+ content: [{
189
+ type: "text",
190
+ text: `## 🚀 Async Task Started
191
+
192
+ **Task ID:** \`${asyncResult.task_id}\`
193
+ **Status:** ${asyncResult.status}
194
+
195
+ ${asyncResult.message}
196
+
197
+ ---
198
+
199
+ ### ⚠️ IMPORTANT - This is NOT the result!
200
+
201
+ The task is running in the background. To get the actual result:
202
+
203
+ 1. **Wait a moment** (task complexity varies)
204
+ 2. **Call \`check_subagent_task\`** with:
205
+ \`\`\`json
206
+ { "task_id": ${asyncResult.task_id} }
207
+ \`\`\`
208
+ 3. **Check the status** in the response:
209
+ - \`running\` → Wait and check again
210
+ - \`completed\` → Result is in the response
211
+ - \`failed\` → Error message in the response
212
+
213
+ **Do NOT assume the task is complete until you verify with \`check_subagent_task\`!**`,
214
+ }],
215
+ isError: false,
216
+ };
217
+ }
218
+ // ========================================================================
219
+ // SYNC MODE (async=false): Block and wait for result
220
+ // ========================================================================
221
+ const progressToken = request.params._meta?.progressToken;
222
+ const progressData = startProgressUpdates(progressToken);
223
+ try {
224
+ const result = await executeSubagent(args, (output) => {
225
+ latestOutput = output;
226
+ });
227
+ stopProgressUpdates(progressData, true);
228
+ return {
229
+ content: [{ type: "text", text: result }],
230
+ isError: false,
231
+ };
232
+ }
233
+ catch (error) {
234
+ stopProgressUpdates(progressData, false);
235
+ const errorMessage = error instanceof Error ? error.message : String(error);
236
+ return {
237
+ content: [{ type: "text", text: errorMessage }],
238
+ isError: true,
239
+ };
240
+ }
241
+ });
242
+ // Start server
243
+ async function main() {
244
+ console.error(`[${metadata.displayName}] Starting...`);
245
+ const transport = new StdioServerTransport();
246
+ await server.connect(transport);
247
+ console.error(`[${metadata.displayName}] Ready on stdio`);
248
+ }
249
+ main().catch((error) => {
250
+ console.error("Fatal error:", error);
251
+ process.exit(1);
252
+ });
253
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agentic-task.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentic-task.tool.d.ts","sourceRoot":"","sources":["../../src/tools/agentic-task.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agentic-task.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentic-task.tool.js","sourceRoot":"","sources":["../../src/tools/agentic-task.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extension-manager.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-manager.tool.d.ts","sourceRoot":"","sources":["../../src/tools/extension-manager.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extension-manager.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-manager.tool.js","sourceRoot":"","sources":["../../src/tools/extension-manager.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gemini-task.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-task.tool.d.ts","sourceRoot":"","sources":["../../src/tools/gemini-task.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gemini-task.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-task.tool.js","sourceRoot":"","sources":["../../src/tools/gemini-task.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tools module - exports subagent tools and task management
3
+ */
4
+ export { executeSubagent, executeSubagentAsync, getTaskStatusResponse, getCompletedTasksAsResources, getTaskResourceContent, type SubagentArgs, type TaskState, type TaskStatus, } from './subagent.tool.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tools module - exports subagent tools and task management
3
+ */
4
+ export { executeSubagent, executeSubagentAsync, getTaskStatusResponse, getCompletedTasksAsResources, getTaskResourceContent, } from './subagent.tool.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-manager.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.tool.d.ts","sourceRoot":"","sources":["../../src/tools/session-manager.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-manager.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.tool.js","sourceRoot":"","sources":["../../src/tools/session-manager.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=structured-query.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-query.tool.d.ts","sourceRoot":"","sources":["../../src/tools/structured-query.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=structured-query.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-query.tool.js","sourceRoot":"","sources":["../../src/tools/structured-query.tool.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Gemini Subagent Tool - Single consolidated tool with task type enum
3
+ * Loads task-specific instructions from YAML and merges with user prompt
4
+ */
5
+ export interface SubagentArgs {
6
+ task_type: 'completion-inspector' | 'helper-friend' | 'manual-tester';
7
+ prompt: string;
8
+ model?: string;
9
+ sandbox?: boolean;
10
+ approval_mode?: string;
11
+ include_directories?: string;
12
+ include_instructions?: boolean;
13
+ async?: boolean;
14
+ }
15
+ export type TaskStatus = 'pending' | 'running' | 'completed' | 'failed';
16
+ export interface TaskState {
17
+ id: number;
18
+ status: TaskStatus;
19
+ task_type: string;
20
+ progress: number;
21
+ result?: string;
22
+ error?: string;
23
+ started_at: string;
24
+ completed_at?: string;
25
+ updated_at: string;
26
+ }
27
+ /**
28
+ * Create a new task in pending state
29
+ */
30
+ export declare function createTask(taskType: string): TaskState;
31
+ /**
32
+ * Update task status
33
+ */
34
+ export declare function updateTask(id: number, updates: Partial<TaskState>): TaskState | null;
35
+ /**
36
+ * Get task by ID
37
+ */
38
+ export declare function getTask(id: number): TaskState | null;
39
+ /**
40
+ * Get task status response for check_subagent_task tool
41
+ */
42
+ export declare function getTaskStatusResponse(taskId: number): object;
43
+ export interface GeminiError {
44
+ code: string;
45
+ message: string;
46
+ suggestion: string;
47
+ retryable: boolean;
48
+ }
49
+ /**
50
+ * Get all completed/failed tasks as MCP resources
51
+ */
52
+ export declare function getCompletedTasksAsResources(): Array<{
53
+ uri: string;
54
+ name: string;
55
+ description: string;
56
+ mimeType: string;
57
+ }>;
58
+ /**
59
+ * Get task result content by resource URI
60
+ */
61
+ export declare function getTaskResourceContent(uri: string): string | null;
62
+ /**
63
+ * Execute subagent in async mode - returns task ID immediately, runs in background
64
+ */
65
+ export declare function executeSubagentAsync(args: SubagentArgs, onTaskProgress?: (taskId: number, progress: number, output: string) => void, onTaskComplete?: (taskId: number) => Promise<void>): {
66
+ task_id: number;
67
+ status: string;
68
+ message: string;
69
+ };
70
+ /**
71
+ * Execute Gemini CLI with subagent task (blocking mode)
72
+ * Uses model fallback chain: tries models in sequence until one succeeds
73
+ */
74
+ export declare function executeSubagent(args: SubagentArgs, onProgress?: (output: string) => void): Promise<string>;
75
+ //# sourceMappingURL=subagent.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent.tool.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,sBAAsB,GAAG,eAAe,GAAG,eAAe,CAAC;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAwBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAqBtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,CAMpF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmC5D;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AA6WD;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,KAAK,CAAC;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAuBD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsCjE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAC3E,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACjD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAsCtD;AAiID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,YAAY,EAClB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GACpC,OAAO,CAAC,MAAM,CAAC,CAqDjB"}