gemini-helper-friend 2.0.1 → 2.0.3
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/README.md +1 -11
- package/dist/config/yaml/subagents.yaml +22 -5
- package/dist/index.js +127 -18
- package/dist/index.js.map +1 -1
- package/dist/tools/cleanup.d.ts +13 -0
- package/dist/tools/cleanup.d.ts.map +1 -0
- package/dist/tools/cleanup.js +55 -0
- package/dist/tools/cleanup.js.map +1 -0
- package/dist/tools/constants.d.ts +46 -0
- package/dist/tools/constants.d.ts.map +1 -0
- package/dist/tools/constants.js +73 -0
- package/dist/tools/constants.js.map +1 -0
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/subagent.tool.d.ts +6 -26
- package/dist/tools/subagent.tool.d.ts.map +1 -1
- package/dist/tools/subagent.tool.js +296 -108
- package/dist/tools/subagent.tool.js.map +1 -1
- package/dist/tools/task-store.d.ts +49 -0
- package/dist/tools/task-store.d.ts.map +1 -0
- package/dist/tools/task-store.js +191 -0
- package/dist/tools/task-store.js.map +1 -0
- package/package.json +3 -1
- package/src/config/yaml/subagents.yaml +22 -5
package/README.md
CHANGED
|
@@ -39,16 +39,6 @@ Add to your MCP client config (e.g., Claude Desktop):
|
|
|
39
39
|
### macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
40
40
|
### Windows: `%APPDATA%/Claude/claude_desktop_config.json`
|
|
41
41
|
|
|
42
|
-
```json
|
|
43
|
-
{
|
|
44
|
-
"mcpServers": {
|
|
45
|
-
"gemini-helper-friend": {
|
|
46
|
-
"command": "gemini-helper-friend"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
42
|
Or use npx (no installation required):
|
|
53
43
|
|
|
54
44
|
```json
|
|
@@ -56,7 +46,7 @@ Or use npx (no installation required):
|
|
|
56
46
|
"mcpServers": {
|
|
57
47
|
"gemini-helper-friend": {
|
|
58
48
|
"command": "npx",
|
|
59
|
-
"args": ["-y", "gemini-helper-friend-mcp"]
|
|
49
|
+
"args": ["-y", "gemini-helper-friend-mcp@latest"]
|
|
60
50
|
}
|
|
61
51
|
}
|
|
62
52
|
}
|
|
@@ -342,15 +342,32 @@ tools:
|
|
|
342
342
|
```
|
|
343
343
|
|
|
344
344
|
parameters:
|
|
345
|
-
|
|
346
|
-
type:
|
|
345
|
+
task_ids:
|
|
346
|
+
type: array
|
|
347
347
|
required: true
|
|
348
|
+
items:
|
|
349
|
+
type: integer
|
|
350
|
+
validation:
|
|
351
|
+
minItems: 1
|
|
348
352
|
description: |
|
|
349
|
-
**[REQUIRED] 5-digit task
|
|
353
|
+
**[REQUIRED] Array of 5-digit task IDs**
|
|
354
|
+
|
|
355
|
+
Pass one or more task IDs returned by `gemini-subagent` when called with `async: true`.
|
|
356
|
+
|
|
357
|
+
**Examples:**
|
|
358
|
+
- Single task: `[34567]`
|
|
359
|
+
- Multiple tasks: `[34567, 34568, 34569]`
|
|
350
360
|
|
|
351
|
-
|
|
361
|
+
**Smart Behavior:**
|
|
362
|
+
- Completed/failed tasks are shown FIRST with full results
|
|
363
|
+
- Running/pending tasks are listed in header/footer as "Waiting Tasks"
|
|
364
|
+
- Only call this with task IDs you haven't received results for yet
|
|
365
|
+
- Already-completed task results are displayed immediately (no re-fetching)
|
|
352
366
|
|
|
353
|
-
|
|
367
|
+
**Output Format:**
|
|
368
|
+
- Header: `Waiting Tasks: 10003, 10004` (if any incomplete)
|
|
369
|
+
- Each completed task: `# Task ID: 0001` H1 heading with result
|
|
370
|
+
- Footer: Same waiting tasks list
|
|
354
371
|
|
|
355
372
|
**Pro tip:** If your client supports notifications, you'll see completed
|
|
356
373
|
tasks appear in the resources list automatically!
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
8
8
|
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, SubscribeRequestSchema, UnsubscribeRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
9
9
|
import { generateMcpTools, getMetadata } from "./config/index.js";
|
|
10
10
|
import { executeSubagent, executeSubagentAsync, getTaskStatusResponse, getCompletedTasksAsResources, getTaskResourceContent, } from "./tools/index.js";
|
|
11
|
+
import { KEEPALIVE_INTERVAL_MS, VALID_TASK_TYPES, MIN_PROMPT_LENGTH, isValidTaskType } from "./tools/constants.js";
|
|
11
12
|
const metadata = getMetadata();
|
|
12
13
|
const server = new Server({
|
|
13
14
|
name: metadata.name,
|
|
@@ -23,7 +24,6 @@ const server = new Server({
|
|
|
23
24
|
},
|
|
24
25
|
},
|
|
25
26
|
});
|
|
26
|
-
const KEEPALIVE_INTERVAL = 25000;
|
|
27
27
|
let isProcessing = false;
|
|
28
28
|
let latestOutput = "";
|
|
29
29
|
// ============================================================================
|
|
@@ -68,7 +68,7 @@ function startProgressUpdates(progressToken) {
|
|
|
68
68
|
else {
|
|
69
69
|
clearInterval(interval);
|
|
70
70
|
}
|
|
71
|
-
},
|
|
71
|
+
}, KEEPALIVE_INTERVAL_MS);
|
|
72
72
|
return { interval, progressToken };
|
|
73
73
|
}
|
|
74
74
|
function stopProgressUpdates(data, success) {
|
|
@@ -162,27 +162,140 @@ server.setRequestHandler(ListToolsRequestSchema, async (_request) => {
|
|
|
162
162
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
163
163
|
const toolName = request.params.name;
|
|
164
164
|
// ========================================================================
|
|
165
|
-
// TOOL: check_subagent_task - Query async task status
|
|
165
|
+
// TOOL: check_subagent_task - Query async task status (batch mode)
|
|
166
166
|
// ========================================================================
|
|
167
167
|
if (toolName === "check_subagent_task") {
|
|
168
168
|
const args = request.params.arguments;
|
|
169
|
-
|
|
169
|
+
// Validate task_ids array
|
|
170
|
+
if (!args.task_ids || !Array.isArray(args.task_ids) || args.task_ids.length === 0) {
|
|
170
171
|
return {
|
|
171
172
|
content: [{
|
|
172
173
|
type: "text",
|
|
173
|
-
text:
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
text: `## ❌ Invalid Parameters
|
|
175
|
+
|
|
176
|
+
**Error:** \`task_ids\` is required and must be a non-empty array of integers.
|
|
177
|
+
|
|
178
|
+
**Example:**
|
|
179
|
+
\`\`\`json
|
|
180
|
+
{ "task_ids": [34567, 34568, 34569] }
|
|
181
|
+
\`\`\``,
|
|
177
182
|
}],
|
|
178
183
|
isError: true,
|
|
179
184
|
};
|
|
180
185
|
}
|
|
181
|
-
|
|
186
|
+
// Validate all IDs are numbers
|
|
187
|
+
const invalidIds = args.task_ids.filter(id => typeof id !== 'number' || !Number.isInteger(id));
|
|
188
|
+
if (invalidIds.length > 0) {
|
|
189
|
+
return {
|
|
190
|
+
content: [{
|
|
191
|
+
type: "text",
|
|
192
|
+
text: `## ❌ Invalid Task IDs
|
|
193
|
+
|
|
194
|
+
**Error:** All task IDs must be integers. Invalid values: ${invalidIds.join(', ')}`,
|
|
195
|
+
}],
|
|
196
|
+
isError: true,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// Get status for all tasks
|
|
200
|
+
const results = args.task_ids.map(id => ({
|
|
201
|
+
id,
|
|
202
|
+
response: getTaskStatusResponse(id),
|
|
203
|
+
}));
|
|
204
|
+
// Categorize tasks
|
|
205
|
+
const completed = [];
|
|
206
|
+
const failed = [];
|
|
207
|
+
const waiting = [];
|
|
208
|
+
for (const r of results) {
|
|
209
|
+
const status = r.response.status;
|
|
210
|
+
if (status === 'completed') {
|
|
211
|
+
completed.push(r);
|
|
212
|
+
}
|
|
213
|
+
else if (status === 'failed') {
|
|
214
|
+
failed.push(r);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// running, pending, not_found
|
|
218
|
+
waiting.push(r);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Build markdown output
|
|
222
|
+
const output = [];
|
|
223
|
+
// Format task ID as 4-digit padded string
|
|
224
|
+
const formatTaskId = (id) => String(id).padStart(5, '0');
|
|
225
|
+
// Header with waiting tasks (if any)
|
|
226
|
+
if (waiting.length > 0) {
|
|
227
|
+
const waitingIds = waiting.map(w => formatTaskId(w.id)).join(', ');
|
|
228
|
+
output.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
229
|
+
output.push(`**Waiting Tasks:** ${waitingIds}`);
|
|
230
|
+
output.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
231
|
+
output.push('');
|
|
232
|
+
}
|
|
233
|
+
// Completed tasks first (with full results)
|
|
234
|
+
for (const task of completed) {
|
|
235
|
+
const r = task.response;
|
|
236
|
+
output.push(`# Task ID: ${formatTaskId(task.id)}`);
|
|
237
|
+
output.push('');
|
|
238
|
+
output.push(`✅ **Status:** completed`);
|
|
239
|
+
output.push(`**Task Type:** ${r.task_type}`);
|
|
240
|
+
if (r.duration_seconds) {
|
|
241
|
+
output.push(`**Duration:** ${r.duration_seconds} seconds`);
|
|
242
|
+
}
|
|
243
|
+
output.push('');
|
|
244
|
+
output.push('## Result');
|
|
245
|
+
output.push('');
|
|
246
|
+
output.push(String(r.result || 'No result content'));
|
|
247
|
+
output.push('');
|
|
248
|
+
output.push('---');
|
|
249
|
+
output.push('');
|
|
250
|
+
}
|
|
251
|
+
// Failed tasks (with errors)
|
|
252
|
+
for (const task of failed) {
|
|
253
|
+
const r = task.response;
|
|
254
|
+
output.push(`# Task ID: ${formatTaskId(task.id)}`);
|
|
255
|
+
output.push('');
|
|
256
|
+
output.push(`❌ **Status:** failed`);
|
|
257
|
+
output.push(`**Task Type:** ${r.task_type}`);
|
|
258
|
+
output.push('');
|
|
259
|
+
output.push('## Error');
|
|
260
|
+
output.push('');
|
|
261
|
+
output.push(String(r.error || 'Unknown error'));
|
|
262
|
+
output.push('');
|
|
263
|
+
output.push('---');
|
|
264
|
+
output.push('');
|
|
265
|
+
}
|
|
266
|
+
// Waiting tasks info (brief, no full details since not ready)
|
|
267
|
+
if (waiting.length > 0) {
|
|
268
|
+
output.push(`## ⏳ Waiting Tasks`);
|
|
269
|
+
output.push('');
|
|
270
|
+
output.push('The following tasks are still processing. Call `check_subagent_task` again with only these IDs:');
|
|
271
|
+
output.push('');
|
|
272
|
+
output.push('```json');
|
|
273
|
+
output.push(`{ "task_ids": [${waiting.map(w => w.id).join(', ')}] }`);
|
|
274
|
+
output.push('```');
|
|
275
|
+
output.push('');
|
|
276
|
+
for (const task of waiting) {
|
|
277
|
+
const r = task.response;
|
|
278
|
+
const status = r.status;
|
|
279
|
+
const statusEmoji = status === 'running' ? '🔄' : status === 'pending' ? '⏸️' : '❓';
|
|
280
|
+
output.push(`- **${formatTaskId(task.id)}**: ${statusEmoji} ${status}${r.progress ? ` (${r.progress}%)` : ''}`);
|
|
281
|
+
}
|
|
282
|
+
output.push('');
|
|
283
|
+
}
|
|
284
|
+
// Footer with waiting tasks (if any)
|
|
285
|
+
if (waiting.length > 0) {
|
|
286
|
+
const waitingIds = waiting.map(w => formatTaskId(w.id)).join(', ');
|
|
287
|
+
output.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
288
|
+
output.push(`**Waiting Tasks:** ${waitingIds}`);
|
|
289
|
+
output.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
290
|
+
}
|
|
291
|
+
// If all tasks are done (no waiting), add summary
|
|
292
|
+
if (waiting.length === 0 && (completed.length > 0 || failed.length > 0)) {
|
|
293
|
+
output.push(`✨ **All ${results.length} task(s) complete!** No waiting tasks.`);
|
|
294
|
+
}
|
|
182
295
|
return {
|
|
183
296
|
content: [{
|
|
184
297
|
type: "text",
|
|
185
|
-
text:
|
|
298
|
+
text: output.join('\n'),
|
|
186
299
|
}],
|
|
187
300
|
isError: false,
|
|
188
301
|
};
|
|
@@ -197,8 +310,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
197
310
|
// ========================================================================
|
|
198
311
|
// SERVER-SIDE VALIDATION - Reject invalid requests immediately
|
|
199
312
|
// ========================================================================
|
|
200
|
-
|
|
201
|
-
if (!args.task_type || !validTaskTypes.includes(args.task_type)) {
|
|
313
|
+
if (!args.task_type || !isValidTaskType(args.task_type)) {
|
|
202
314
|
return {
|
|
203
315
|
content: [{
|
|
204
316
|
type: "text",
|
|
@@ -207,10 +319,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
207
319
|
**Provided:** \`${args.task_type || '(missing)'}\`
|
|
208
320
|
|
|
209
321
|
**Valid values:**
|
|
210
|
-
|
|
211
|
-
- \`helper-friend\` - Research companion for deep analysis
|
|
212
|
-
- \`manual-tester\` - QA engineer with real browser testing
|
|
213
|
-
- \`manual\` - General-purpose executor for any task
|
|
322
|
+
${VALID_TASK_TYPES.map(t => `- \`${t}\``).join('\n')}
|
|
214
323
|
|
|
215
324
|
Please provide exactly one of these task_type values.`,
|
|
216
325
|
}],
|
|
@@ -231,14 +340,14 @@ ${args.task_type === 'completion-inspector' ? '- Original task requirements\n- A
|
|
|
231
340
|
isError: true,
|
|
232
341
|
};
|
|
233
342
|
}
|
|
234
|
-
if (args.prompt.length <
|
|
343
|
+
if (args.prompt.length < MIN_PROMPT_LENGTH) {
|
|
235
344
|
return {
|
|
236
345
|
content: [{
|
|
237
346
|
type: "text",
|
|
238
347
|
text: `## ❌ Prompt too short
|
|
239
348
|
|
|
240
349
|
**Provided length:** ${args.prompt.length} characters
|
|
241
|
-
**Minimum required:**
|
|
350
|
+
**Minimum required:** ${MIN_PROMPT_LENGTH} characters
|
|
242
351
|
|
|
243
352
|
Please provide a more detailed prompt describing your task. Short prompts lack context for effective execution.`,
|
|
244
353
|
}],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cleanup utilities for orphaned temp files and processes
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Clean up orphaned temp files from crashed monitors or tasks
|
|
6
|
+
* Should be called on server startup
|
|
7
|
+
*/
|
|
8
|
+
export declare function cleanupOrphanedTempFiles(): number;
|
|
9
|
+
/**
|
|
10
|
+
* Validate PID is a positive integer
|
|
11
|
+
*/
|
|
12
|
+
export declare function isValidPid(pid: number | undefined): pid is number;
|
|
13
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/tools/cleanup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAsCjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,MAAM,CAEjE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cleanup utilities for orphaned temp files and processes
|
|
3
|
+
*/
|
|
4
|
+
import { readdirSync, unlinkSync } from 'fs';
|
|
5
|
+
import { tmpdir } from 'os';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { STDOUT_FILE_PREFIX, MONITOR_FILE_PREFIX } from './constants.js';
|
|
8
|
+
/**
|
|
9
|
+
* Clean up orphaned temp files from crashed monitors or tasks
|
|
10
|
+
* Should be called on server startup
|
|
11
|
+
*/
|
|
12
|
+
export function cleanupOrphanedTempFiles() {
|
|
13
|
+
let cleaned = 0;
|
|
14
|
+
try {
|
|
15
|
+
const tempDir = tmpdir();
|
|
16
|
+
const files = readdirSync(tempDir);
|
|
17
|
+
for (const file of files) {
|
|
18
|
+
// Clean up task output files
|
|
19
|
+
if (file.startsWith(STDOUT_FILE_PREFIX) &&
|
|
20
|
+
(file.endsWith('-stdout.txt') || file.endsWith('-stderr.txt'))) {
|
|
21
|
+
try {
|
|
22
|
+
unlinkSync(join(tempDir, file));
|
|
23
|
+
cleaned++;
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
// File may be in use or already deleted
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Clean up monitor scripts
|
|
30
|
+
if (file.startsWith(MONITOR_FILE_PREFIX) && file.endsWith('.js')) {
|
|
31
|
+
try {
|
|
32
|
+
unlinkSync(join(tempDir, file));
|
|
33
|
+
cleaned++;
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
// File may be in use or already deleted
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (cleaned > 0) {
|
|
41
|
+
console.error(`[Cleanup] Removed ${cleaned} orphaned temp files`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error('[Cleanup] Error during temp file cleanup:', error);
|
|
46
|
+
}
|
|
47
|
+
return cleaned;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validate PID is a positive integer
|
|
51
|
+
*/
|
|
52
|
+
export function isValidPid(pid) {
|
|
53
|
+
return typeof pid === 'number' && pid > 0 && Number.isInteger(pid);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/tools/cleanup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEzE;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,6BAA6B;YAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;gBACnC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC;oBACH,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;oBAChC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,wCAAwC;gBAC1C,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC;oBACH,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;oBAChC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,wCAAwC;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,sBAAsB,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAuB;IAChD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the Gemini MCP Tool
|
|
3
|
+
* Centralizes magic numbers, timing values, and configuration defaults
|
|
4
|
+
*/
|
|
5
|
+
/** Minimum task ID (5-digit IDs start here) */
|
|
6
|
+
export declare const TASK_ID_MIN = 10000;
|
|
7
|
+
/** Maximum task ID before wrapping around */
|
|
8
|
+
export declare const TASK_ID_MAX = 99999;
|
|
9
|
+
/** How often to send keepalive/progress notifications (25 seconds) */
|
|
10
|
+
export declare const KEEPALIVE_INTERVAL_MS = 25000;
|
|
11
|
+
/** How often the monitor polls for process completion (3 seconds) */
|
|
12
|
+
export declare const MONITOR_POLL_INTERVAL_MS = 3000;
|
|
13
|
+
/** Task expiry time - tasks older than this are cleaned up (1 hour) */
|
|
14
|
+
export declare const TASK_EXPIRY_MS: number;
|
|
15
|
+
/** Maximum time to wait for a task before timeout (30 minutes) */
|
|
16
|
+
export declare const TASK_TIMEOUT_MS: number;
|
|
17
|
+
/** Interval for periodic cleanup of expired tasks (10 minutes) */
|
|
18
|
+
export declare const CLEANUP_INTERVAL_MS: number;
|
|
19
|
+
/** Valid task type values - single source of truth */
|
|
20
|
+
export declare const VALID_TASK_TYPES: readonly ["completion-inspector", "helper-friend", "manual-tester", "manual"];
|
|
21
|
+
/** Type derived from the valid task types array */
|
|
22
|
+
export type TaskType = typeof VALID_TASK_TYPES[number];
|
|
23
|
+
/** Check if a string is a valid task type */
|
|
24
|
+
export declare function isValidTaskType(value: unknown): value is TaskType;
|
|
25
|
+
/**
|
|
26
|
+
* Model fallback chain - tries in order until one succeeds
|
|
27
|
+
* gemini-2.5-flash is proven fast and reliable
|
|
28
|
+
*/
|
|
29
|
+
export declare const MODEL_FALLBACK_CHAIN: readonly ["gemini-2.5-flash", "gemini-2.5-pro", "gemini-2.0-flash"];
|
|
30
|
+
/** Prefix for stdout temp files */
|
|
31
|
+
export declare const STDOUT_FILE_PREFIX = "mcp-task-";
|
|
32
|
+
/** Prefix for monitor script temp files */
|
|
33
|
+
export declare const MONITOR_FILE_PREFIX = "mcp-monitor-";
|
|
34
|
+
/** Database directory name (relative to project root) */
|
|
35
|
+
export declare const DATA_DIR_NAME = ".mcp-data";
|
|
36
|
+
/** Database file name */
|
|
37
|
+
export declare const DB_FILE_NAME = "tasks.db";
|
|
38
|
+
/** Minimum prompt length to accept */
|
|
39
|
+
export declare const MIN_PROMPT_LENGTH = 20;
|
|
40
|
+
/** Maximum result length to store in database (prevent bloat) */
|
|
41
|
+
export declare const MAX_RESULT_LENGTH = 100000;
|
|
42
|
+
/** Maximum error message length to store */
|
|
43
|
+
export declare const MAX_ERROR_LENGTH = 500;
|
|
44
|
+
/** Maximum length for truncated error details in formatted errors */
|
|
45
|
+
export declare const MAX_ERROR_DETAIL_LENGTH = 500;
|
|
46
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/tools/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,+CAA+C;AAC/C,eAAO,MAAM,WAAW,QAAQ,CAAC;AAEjC,6CAA6C;AAC7C,eAAO,MAAM,WAAW,QAAQ,CAAC;AAMjC,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,uEAAuE;AACvE,eAAO,MAAM,cAAc,QAAiB,CAAC;AAE7C,kEAAkE;AAClE,eAAO,MAAM,eAAe,QAAiB,CAAC;AAE9C,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,QAAiB,CAAC;AAMlD,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,+EAKnB,CAAC;AAEX,mDAAmD;AACnD,MAAM,MAAM,QAAQ,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEvD,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAEjE;AAMD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,qEAIvB,CAAC;AAMX,mCAAmC;AACnC,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAE9C,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD,yDAAyD;AACzD,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC,yBAAyB;AACzB,eAAO,MAAM,YAAY,aAAa,CAAC;AAMvC,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,MAAM,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the Gemini MCP Tool
|
|
3
|
+
* Centralizes magic numbers, timing values, and configuration defaults
|
|
4
|
+
*/
|
|
5
|
+
// =============================================================================
|
|
6
|
+
// TASK ID CONFIGURATION
|
|
7
|
+
// =============================================================================
|
|
8
|
+
/** Minimum task ID (5-digit IDs start here) */
|
|
9
|
+
export const TASK_ID_MIN = 10000;
|
|
10
|
+
/** Maximum task ID before wrapping around */
|
|
11
|
+
export const TASK_ID_MAX = 99999;
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// TIMING CONSTANTS (in milliseconds)
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/** How often to send keepalive/progress notifications (25 seconds) */
|
|
16
|
+
export const KEEPALIVE_INTERVAL_MS = 25000;
|
|
17
|
+
/** How often the monitor polls for process completion (3 seconds) */
|
|
18
|
+
export const MONITOR_POLL_INTERVAL_MS = 3000;
|
|
19
|
+
/** Task expiry time - tasks older than this are cleaned up (1 hour) */
|
|
20
|
+
export const TASK_EXPIRY_MS = 60 * 60 * 1000;
|
|
21
|
+
/** Maximum time to wait for a task before timeout (30 minutes) */
|
|
22
|
+
export const TASK_TIMEOUT_MS = 30 * 60 * 1000;
|
|
23
|
+
/** Interval for periodic cleanup of expired tasks (10 minutes) */
|
|
24
|
+
export const CLEANUP_INTERVAL_MS = 10 * 60 * 1000;
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// TASK TYPES
|
|
27
|
+
// =============================================================================
|
|
28
|
+
/** Valid task type values - single source of truth */
|
|
29
|
+
export const VALID_TASK_TYPES = [
|
|
30
|
+
'completion-inspector',
|
|
31
|
+
'helper-friend',
|
|
32
|
+
'manual-tester',
|
|
33
|
+
'manual',
|
|
34
|
+
];
|
|
35
|
+
/** Check if a string is a valid task type */
|
|
36
|
+
export function isValidTaskType(value) {
|
|
37
|
+
return typeof value === 'string' && VALID_TASK_TYPES.includes(value);
|
|
38
|
+
}
|
|
39
|
+
// =============================================================================
|
|
40
|
+
// MODEL CONFIGURATION
|
|
41
|
+
// =============================================================================
|
|
42
|
+
/**
|
|
43
|
+
* Model fallback chain - tries in order until one succeeds
|
|
44
|
+
* gemini-2.5-flash is proven fast and reliable
|
|
45
|
+
*/
|
|
46
|
+
export const MODEL_FALLBACK_CHAIN = [
|
|
47
|
+
'gemini-2.5-flash', // Primary: fast, reliable, tested
|
|
48
|
+
'gemini-2.5-pro', // Fallback: more capable
|
|
49
|
+
'gemini-2.0-flash', // Fallback: older but stable
|
|
50
|
+
];
|
|
51
|
+
// =============================================================================
|
|
52
|
+
// FILE PATTERNS
|
|
53
|
+
// =============================================================================
|
|
54
|
+
/** Prefix for stdout temp files */
|
|
55
|
+
export const STDOUT_FILE_PREFIX = 'mcp-task-';
|
|
56
|
+
/** Prefix for monitor script temp files */
|
|
57
|
+
export const MONITOR_FILE_PREFIX = 'mcp-monitor-';
|
|
58
|
+
/** Database directory name (relative to project root) */
|
|
59
|
+
export const DATA_DIR_NAME = '.mcp-data';
|
|
60
|
+
/** Database file name */
|
|
61
|
+
export const DB_FILE_NAME = 'tasks.db';
|
|
62
|
+
// =============================================================================
|
|
63
|
+
// VALIDATION LIMITS
|
|
64
|
+
// =============================================================================
|
|
65
|
+
/** Minimum prompt length to accept */
|
|
66
|
+
export const MIN_PROMPT_LENGTH = 20;
|
|
67
|
+
/** Maximum result length to store in database (prevent bloat) */
|
|
68
|
+
export const MAX_RESULT_LENGTH = 100000;
|
|
69
|
+
/** Maximum error message length to store */
|
|
70
|
+
export const MAX_ERROR_LENGTH = 500;
|
|
71
|
+
/** Maximum length for truncated error details in formatted errors */
|
|
72
|
+
export const MAX_ERROR_DETAIL_LENGTH = 500;
|
|
73
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/tools/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAEjC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;AAEjC,gFAAgF;AAChF,qCAAqC;AACrC,gFAAgF;AAEhF,sEAAsE;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C,qEAAqE;AACrE,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7C,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAElD,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,sBAAsB;IACtB,eAAe;IACf,eAAe;IACf,QAAQ;CACA,CAAC;AAKX,6CAA6C;AAC7C,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAiB,CAAC,CAAC;AACnF,CAAC;AAED,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,kBAAkB,EAAO,kCAAkC;IAC3D,gBAAgB,EAAS,yBAAyB;IAClD,kBAAkB,EAAO,6BAA6B;CAC9C,CAAC;AAEX,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,mCAAmC;AACnC,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAE9C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAElD,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AAEzC,yBAAyB;AACzB,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,sCAAsC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,iEAAiE;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,qEAAqE;AACrE,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tools module - exports subagent tools and task management
|
|
3
3
|
*/
|
|
4
|
-
export { executeSubagent, executeSubagentAsync, getTaskStatusResponse, getCompletedTasksAsResources, getTaskResourceContent, type SubagentArgs,
|
|
4
|
+
export { executeSubagent, executeSubagentAsync, getTaskStatusResponse, getCompletedTasksAsResources, getTaskResourceContent, type SubagentArgs, } from './subagent.tool.js';
|
|
5
|
+
export { cleanupOrphanedTempFiles, isValidPid } from './cleanup.js';
|
|
6
|
+
export { type TaskState, type TaskStatus } from './subagent.tool.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +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,
|
|
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,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -2,4 +2,5 @@
|
|
|
2
2
|
* Tools module - exports subagent tools and task management
|
|
3
3
|
*/
|
|
4
4
|
export { executeSubagent, executeSubagentAsync, getTaskStatusResponse, getCompletedTasksAsResources, getTaskResourceContent, } from './subagent.tool.js';
|
|
5
|
+
export { cleanupOrphanedTempFiles, isValidPid } from './cleanup.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +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,
|
|
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,GAEvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* Gemini Subagent Tool - Single consolidated tool with task type enum
|
|
3
3
|
* Loads task-specific instructions from YAML and merges with user prompt
|
|
4
4
|
*/
|
|
5
|
+
import { type TaskState, type TaskStatus } from './task-store.js';
|
|
6
|
+
import { type TaskType } from './constants.js';
|
|
5
7
|
export interface SubagentArgs {
|
|
6
|
-
task_type:
|
|
8
|
+
task_type: TaskType;
|
|
7
9
|
prompt: string;
|
|
8
10
|
model?: string;
|
|
9
11
|
sandbox?: boolean;
|
|
@@ -12,30 +14,7 @@ export interface SubagentArgs {
|
|
|
12
14
|
include_instructions?: boolean;
|
|
13
15
|
async?: boolean;
|
|
14
16
|
}
|
|
15
|
-
export type
|
|
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;
|
|
17
|
+
export type { TaskState, TaskStatus };
|
|
39
18
|
/**
|
|
40
19
|
* Get task status response for check_subagent_task tool
|
|
41
20
|
*/
|
|
@@ -66,10 +45,11 @@ export declare function executeSubagentAsync(args: SubagentArgs, onTaskProgress?
|
|
|
66
45
|
task_id: number;
|
|
67
46
|
status: string;
|
|
68
47
|
message: string;
|
|
48
|
+
pid?: number;
|
|
69
49
|
};
|
|
70
50
|
/**
|
|
71
51
|
* Execute Gemini CLI with subagent task (blocking mode)
|
|
72
52
|
* Uses model fallback chain: tries models in sequence until one succeeds
|
|
73
53
|
*/
|
|
74
|
-
export declare function executeSubagent(args: SubagentArgs, onProgress?: (output: string) => void): Promise<string>;
|
|
54
|
+
export declare function executeSubagent(args: SubagentArgs, onProgress?: (output: string) => void, onProcessSpawn?: (pid: number) => void): Promise<string>;
|
|
75
55
|
//# sourceMappingURL=subagent.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.tool.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"subagent.tool.d.ts","sourceRoot":"","sources":["../../src/tools/subagent.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAUL,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,QAAQ,CAAC;IACpB,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;AAOD,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAEtC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAuC5D;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,CAcD;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,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAkGpE;AAoVD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,YAAY,EAClB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EACrC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,MAAM,CAAC,CAqDjB"}
|