gemini-helper-friend 2.0.1 → 2.0.2
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/dist/index.js +6 -10
- 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 +293 -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/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) {
|
|
@@ -197,8 +197,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
197
197
|
// ========================================================================
|
|
198
198
|
// SERVER-SIDE VALIDATION - Reject invalid requests immediately
|
|
199
199
|
// ========================================================================
|
|
200
|
-
|
|
201
|
-
if (!args.task_type || !validTaskTypes.includes(args.task_type)) {
|
|
200
|
+
if (!args.task_type || !isValidTaskType(args.task_type)) {
|
|
202
201
|
return {
|
|
203
202
|
content: [{
|
|
204
203
|
type: "text",
|
|
@@ -207,10 +206,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
207
206
|
**Provided:** \`${args.task_type || '(missing)'}\`
|
|
208
207
|
|
|
209
208
|
**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
|
|
209
|
+
${VALID_TASK_TYPES.map(t => `- \`${t}\``).join('\n')}
|
|
214
210
|
|
|
215
211
|
Please provide exactly one of these task_type values.`,
|
|
216
212
|
}],
|
|
@@ -231,14 +227,14 @@ ${args.task_type === 'completion-inspector' ? '- Original task requirements\n- A
|
|
|
231
227
|
isError: true,
|
|
232
228
|
};
|
|
233
229
|
}
|
|
234
|
-
if (args.prompt.length <
|
|
230
|
+
if (args.prompt.length < MIN_PROMPT_LENGTH) {
|
|
235
231
|
return {
|
|
236
232
|
content: [{
|
|
237
233
|
type: "text",
|
|
238
234
|
text: `## ❌ Prompt too short
|
|
239
235
|
|
|
240
236
|
**Provided length:** ${args.prompt.length} characters
|
|
241
|
-
**Minimum required:**
|
|
237
|
+
**Minimum required:** ${MIN_PROMPT_LENGTH} characters
|
|
242
238
|
|
|
243
239
|
Please provide a more detailed prompt describing your task. Short prompts lack context for effective execution.`,
|
|
244
240
|
}],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,GAUzB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,GAEvB,MAAM,kBAAkB,CAAC;
|
|
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;AAgVD;;;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"}
|
|
@@ -2,73 +2,22 @@
|
|
|
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 { readFileSync } from 'fs';
|
|
5
|
+
import { readFileSync, writeFileSync, openSync, closeSync } from 'fs';
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
7
|
import { dirname, join } from 'path';
|
|
8
8
|
import { parse as parseYaml } from 'yaml';
|
|
9
9
|
import { spawn } from 'child_process';
|
|
10
|
+
import { tmpdir } from 'os';
|
|
11
|
+
import { createTask, updateTask, getTask, getCompletedTasks, } from './task-store.js';
|
|
12
|
+
import { MODEL_FALLBACK_CHAIN, MONITOR_POLL_INTERVAL_MS, TASK_TIMEOUT_MS, STDOUT_FILE_PREFIX, MONITOR_FILE_PREFIX, DATA_DIR_NAME, DB_FILE_NAME, MAX_ERROR_LENGTH, } from './constants.js';
|
|
13
|
+
import { isValidPid } from './cleanup.js';
|
|
10
14
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
15
|
const __dirname = dirname(__filename);
|
|
12
|
-
// In-memory task store (Map keyed by 5-digit task ID)
|
|
13
|
-
const taskStore = new Map();
|
|
14
|
-
// Task expiry: 1 hour (in milliseconds)
|
|
15
|
-
const TASK_EXPIRY_MS = 60 * 60 * 1000;
|
|
16
|
-
// ID counter (generates 5-digit IDs: 10000-99999)
|
|
17
|
-
let taskIdCounter = 10000;
|
|
18
|
-
/**
|
|
19
|
-
* Generate unique 5-digit task ID
|
|
20
|
-
*/
|
|
21
|
-
function generateTaskId() {
|
|
22
|
-
const id = taskIdCounter;
|
|
23
|
-
taskIdCounter++;
|
|
24
|
-
// Wrap around if we exceed 99999
|
|
25
|
-
if (taskIdCounter > 99999) {
|
|
26
|
-
taskIdCounter = 10000;
|
|
27
|
-
}
|
|
28
|
-
return id;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Create a new task in pending state
|
|
32
|
-
*/
|
|
33
|
-
export function createTask(taskType) {
|
|
34
|
-
const id = generateTaskId();
|
|
35
|
-
const now = new Date().toISOString();
|
|
36
|
-
const task = {
|
|
37
|
-
id,
|
|
38
|
-
status: 'pending',
|
|
39
|
-
task_type: taskType,
|
|
40
|
-
progress: 0,
|
|
41
|
-
started_at: now,
|
|
42
|
-
updated_at: now,
|
|
43
|
-
};
|
|
44
|
-
taskStore.set(id, task);
|
|
45
|
-
// Schedule cleanup after expiry
|
|
46
|
-
setTimeout(() => {
|
|
47
|
-
taskStore.delete(id);
|
|
48
|
-
}, TASK_EXPIRY_MS);
|
|
49
|
-
return task;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Update task status
|
|
53
|
-
*/
|
|
54
|
-
export function updateTask(id, updates) {
|
|
55
|
-
const task = taskStore.get(id);
|
|
56
|
-
if (!task)
|
|
57
|
-
return null;
|
|
58
|
-
Object.assign(task, updates, { updated_at: new Date().toISOString() });
|
|
59
|
-
return task;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Get task by ID
|
|
63
|
-
*/
|
|
64
|
-
export function getTask(id) {
|
|
65
|
-
return taskStore.get(id) || null;
|
|
66
|
-
}
|
|
67
16
|
/**
|
|
68
17
|
* Get task status response for check_subagent_task tool
|
|
69
18
|
*/
|
|
70
19
|
export function getTaskStatusResponse(taskId) {
|
|
71
|
-
const task =
|
|
20
|
+
const task = getTask(taskId);
|
|
72
21
|
if (!task) {
|
|
73
22
|
return {
|
|
74
23
|
task_id: taskId,
|
|
@@ -82,6 +31,9 @@ export function getTaskStatusResponse(taskId) {
|
|
|
82
31
|
task_type: task.task_type,
|
|
83
32
|
started_at: task.started_at,
|
|
84
33
|
};
|
|
34
|
+
if (task.pid) {
|
|
35
|
+
response.pid = task.pid;
|
|
36
|
+
}
|
|
85
37
|
if (task.status === 'running') {
|
|
86
38
|
response.progress = task.progress;
|
|
87
39
|
}
|
|
@@ -354,21 +306,18 @@ function buildFinalPrompt(taskType, userPrompt, includeInstructions) {
|
|
|
354
306
|
* Get all completed/failed tasks as MCP resources
|
|
355
307
|
*/
|
|
356
308
|
export function getCompletedTasksAsResources() {
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
return resources;
|
|
309
|
+
const tasks = getCompletedTasks();
|
|
310
|
+
return tasks.map(task => {
|
|
311
|
+
const statusEmoji = task.status === 'completed' ? '✅' : '❌';
|
|
312
|
+
return {
|
|
313
|
+
uri: `task://${task.id}`,
|
|
314
|
+
name: `${statusEmoji} Task ${task.id} - ${task.task_type}`,
|
|
315
|
+
description: task.status === 'completed'
|
|
316
|
+
? `🎉 Task ${task.id} is READY! Result available for ${task.task_type} task.`
|
|
317
|
+
: `⚠️ Task ${task.id} FAILED: ${task.error?.slice(0, 100)}`,
|
|
318
|
+
mimeType: 'text/markdown',
|
|
319
|
+
};
|
|
320
|
+
});
|
|
372
321
|
}
|
|
373
322
|
/**
|
|
374
323
|
* Get task result content by resource URI
|
|
@@ -379,7 +328,7 @@ export function getTaskResourceContent(uri) {
|
|
|
379
328
|
if (!match)
|
|
380
329
|
return null;
|
|
381
330
|
const taskId = parseInt(match[1], 10);
|
|
382
|
-
const task =
|
|
331
|
+
const task = getTask(taskId);
|
|
383
332
|
if (!task)
|
|
384
333
|
return null;
|
|
385
334
|
if (task.status === 'completed') {
|
|
@@ -414,53 +363,283 @@ ${task.error}`;
|
|
|
414
363
|
*/
|
|
415
364
|
export function executeSubagentAsync(args, onTaskProgress, onTaskComplete) {
|
|
416
365
|
const task = createTask(args.task_type);
|
|
366
|
+
console.error(`[TaskStore] Created task ${task.id} for ${args.task_type}`);
|
|
417
367
|
// Update to running state
|
|
418
368
|
updateTask(task.id, { status: 'running', progress: 0 });
|
|
419
|
-
//
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
369
|
+
// CRITICAL FIX: Spawn detached background process that survives parent exit
|
|
370
|
+
// The process will update the database when it completes
|
|
371
|
+
const config = loadSubagentConfig();
|
|
372
|
+
const settings = config.settings;
|
|
373
|
+
const taskConfig = config.task_types[args.task_type];
|
|
374
|
+
if (!taskConfig) {
|
|
375
|
+
throw new Error(`Invalid task_type: ${args.task_type}. Must be: completion-inspector, helper-friend, manual-tester, or manual`);
|
|
376
|
+
}
|
|
377
|
+
const includeInstructions = args.include_instructions ?? settings.defaults.append_instructions;
|
|
378
|
+
const finalPrompt = buildFinalPrompt(args.task_type, args.prompt, includeInstructions);
|
|
379
|
+
// Build CLI arguments
|
|
380
|
+
const cliArgs = [];
|
|
381
|
+
if (args.approval_mode) {
|
|
382
|
+
cliArgs.push(settings.cli.flags.approval_mode, args.approval_mode);
|
|
383
|
+
}
|
|
384
|
+
else if (settings.defaults.yolo_mode) {
|
|
385
|
+
cliArgs.push(settings.cli.flags.yolo);
|
|
386
|
+
}
|
|
387
|
+
// Use first model from fallback chain if no model specified
|
|
388
|
+
const model = args.model || MODEL_FALLBACK_CHAIN[0];
|
|
389
|
+
cliArgs.push(settings.cli.flags.model, model);
|
|
390
|
+
if (args.sandbox) {
|
|
391
|
+
cliArgs.push(settings.cli.flags.sandbox);
|
|
392
|
+
}
|
|
393
|
+
if (args.include_directories) {
|
|
394
|
+
cliArgs.push(settings.cli.flags.include_directories, args.include_directories);
|
|
395
|
+
}
|
|
396
|
+
cliArgs.push(settings.cli.flags.output_format, 'json');
|
|
397
|
+
cliArgs.push(finalPrompt);
|
|
398
|
+
// Create temp files to capture stdout/stderr (since we need detached process)
|
|
399
|
+
const stdoutPath = join(tmpdir(), `${STDOUT_FILE_PREFIX}${task.id}-stdout.txt`);
|
|
400
|
+
const stderrPath = join(tmpdir(), `${STDOUT_FILE_PREFIX}${task.id}-stderr.txt`);
|
|
401
|
+
// Open files for writing - these file descriptors survive parent exit
|
|
402
|
+
const stdoutFd = openSync(stdoutPath, 'w');
|
|
403
|
+
const stderrFd = openSync(stderrPath, 'w');
|
|
404
|
+
// Spawn DETACHED process that survives parent exit
|
|
405
|
+
// Use file descriptors to capture output even after parent exits
|
|
406
|
+
const child = spawn(settings.cli.command, cliArgs, {
|
|
407
|
+
env: process.env,
|
|
408
|
+
shell: false,
|
|
409
|
+
stdio: ['ignore', stdoutFd, stderrFd], // Redirect to files
|
|
410
|
+
detached: true, // Process survives parent exit
|
|
411
|
+
});
|
|
412
|
+
// Close file descriptors in parent (child has its own copy)
|
|
413
|
+
closeSync(stdoutFd);
|
|
414
|
+
closeSync(stderrFd);
|
|
415
|
+
// Unref so parent can exit
|
|
416
|
+
child.unref();
|
|
417
|
+
const spawnedPid = child.pid;
|
|
418
|
+
// Validate PID before proceeding
|
|
419
|
+
if (!isValidPid(spawnedPid)) {
|
|
439
420
|
updateTask(task.id, {
|
|
440
421
|
status: 'failed',
|
|
441
|
-
error:
|
|
422
|
+
error: 'Failed to spawn process - invalid PID received'
|
|
442
423
|
});
|
|
443
|
-
|
|
444
|
-
|
|
424
|
+
return {
|
|
425
|
+
task_id: task.id,
|
|
426
|
+
status: 'failed',
|
|
427
|
+
message: `Task ${task.id} failed to spawn - invalid PID`,
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
updateTask(task.id, { pid: spawnedPid });
|
|
431
|
+
console.error(`[TaskStore] Task ${task.id} spawned DETACHED process PID ${spawnedPid}`);
|
|
432
|
+
console.error(`[TaskStore] Output will be captured to: ${stdoutPath}`);
|
|
433
|
+
// Start a background monitor that checks if process completed
|
|
434
|
+
// Pass output file paths so monitor can read results
|
|
435
|
+
startBackgroundMonitor(task.id, spawnedPid, stdoutPath, stderrPath, onTaskComplete);
|
|
445
436
|
return {
|
|
446
437
|
task_id: task.id,
|
|
447
438
|
status: 'running',
|
|
448
|
-
message: `Task ${task.id} started. You will receive a notification when ready, or use check_subagent_task tool to poll status.`,
|
|
439
|
+
message: `Task ${task.id} started in DETACHED mode (PID: ${spawnedPid}). You will receive a notification when ready, or use check_subagent_task tool to poll status.`,
|
|
440
|
+
pid: spawnedPid,
|
|
449
441
|
};
|
|
450
442
|
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
443
|
+
/**
|
|
444
|
+
* Background monitor that checks if detached process completed
|
|
445
|
+
* Runs independently of MCP server lifecycle
|
|
446
|
+
* Reads output files and stores result in database
|
|
447
|
+
*/
|
|
448
|
+
function startBackgroundMonitor(taskId, pid, stdoutPath, stderrPath, onTaskComplete) {
|
|
449
|
+
if (!pid)
|
|
450
|
+
return;
|
|
451
|
+
// Get absolute path to database (resolve from dist directory to project root)
|
|
452
|
+
const dbAbsolutePath = join(__dirname, '../..', DATA_DIR_NAME, DB_FILE_NAME);
|
|
453
|
+
// Spawn a detached monitor process that polls the PID and reads output files
|
|
454
|
+
const monitorScript = `
|
|
455
|
+
const Database = require('better-sqlite3');
|
|
456
|
+
const fs = require('fs');
|
|
457
|
+
|
|
458
|
+
const taskId = ${taskId};
|
|
459
|
+
const pid = ${pid};
|
|
460
|
+
const dbPath = '${dbAbsolutePath.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}';
|
|
461
|
+
const stdoutPath = '${stdoutPath.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}';
|
|
462
|
+
const stderrPath = '${stderrPath.replace(/\\/g, '\\\\').replace(/'/g, "\\'")}';
|
|
463
|
+
const POLL_INTERVAL = ${MONITOR_POLL_INTERVAL_MS};
|
|
464
|
+
const TIMEOUT_MS = ${TASK_TIMEOUT_MS};
|
|
465
|
+
const MAX_ERROR_LEN = ${MAX_ERROR_LENGTH};
|
|
466
|
+
const MAX_RESULT_LEN = 100000;
|
|
467
|
+
|
|
468
|
+
// Validate PID is a positive integer
|
|
469
|
+
if (!pid || pid <= 0 || !Number.isInteger(pid)) {
|
|
470
|
+
console.error('[Monitor] Invalid PID: ' + pid + ' - exiting');
|
|
471
|
+
process.exit(1);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
console.error('[Monitor] Starting monitor for task ' + taskId + ' PID ' + pid);
|
|
475
|
+
console.error('[Monitor] Database path: ' + dbPath);
|
|
476
|
+
console.error('[Monitor] Stdout path: ' + stdoutPath);
|
|
477
|
+
|
|
478
|
+
// Poll at configured interval to check if process still exists
|
|
479
|
+
const checkInterval = setInterval(() => {
|
|
480
|
+
try {
|
|
481
|
+
// Check if process exists (throws if not)
|
|
482
|
+
process.kill(pid, 0);
|
|
483
|
+
// Still running - silent poll (reduce log noise)
|
|
484
|
+
} catch (error) {
|
|
485
|
+
// Process no longer exists - it completed or failed
|
|
486
|
+
clearInterval(checkInterval);
|
|
487
|
+
|
|
488
|
+
console.error('[Monitor] Task ' + taskId + ' PID ' + pid + ' exited - reading output');
|
|
489
|
+
|
|
490
|
+
// Read output files
|
|
491
|
+
let stdout = '';
|
|
492
|
+
let stderr = '';
|
|
493
|
+
let result = null;
|
|
494
|
+
let taskStatus = 'completed';
|
|
495
|
+
let taskError = null;
|
|
496
|
+
|
|
497
|
+
try {
|
|
498
|
+
stdout = fs.readFileSync(stdoutPath, 'utf8');
|
|
499
|
+
console.error('[Monitor] Read ' + stdout.length + ' bytes from stdout');
|
|
500
|
+
} catch (e) {
|
|
501
|
+
console.error('[Monitor] Could not read stdout:', e.message);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
try {
|
|
505
|
+
stderr = fs.readFileSync(stderrPath, 'utf8');
|
|
506
|
+
if (stderr) console.error('[Monitor] Stderr: ' + stderr.slice(0, 200));
|
|
507
|
+
} catch (e) {
|
|
508
|
+
// Ignore stderr read errors
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// Parse JSON output from Gemini CLI with robust error handling
|
|
512
|
+
if (stdout) {
|
|
513
|
+
let parsed = false;
|
|
514
|
+
|
|
515
|
+
// Strategy 1: Try parsing entire stdout as JSON
|
|
516
|
+
try {
|
|
517
|
+
const json = JSON.parse(stdout.trim());
|
|
518
|
+
if (json.response !== undefined) {
|
|
519
|
+
result = json.response || 'Task completed successfully.';
|
|
520
|
+
|
|
521
|
+
// Add stats if available
|
|
522
|
+
if (json.stats && json.stats.models) {
|
|
523
|
+
const modelNames = Object.keys(json.stats.models);
|
|
524
|
+
const totalTokens = modelNames.reduce((sum, m) => {
|
|
525
|
+
return sum + (json.stats.models[m]?.tokens?.total || 0);
|
|
526
|
+
}, 0);
|
|
527
|
+
result += '\\n\\n---\\n**Stats:** ' + totalTokens + ' tokens | Models: ' + modelNames.join(', ');
|
|
528
|
+
}
|
|
529
|
+
parsed = true;
|
|
530
|
+
}
|
|
531
|
+
} catch (e) {
|
|
532
|
+
// Strategy 2: Find last complete JSON object (scan from end)
|
|
533
|
+
const lines = stdout.split('\\n');
|
|
534
|
+
for (let i = lines.length - 1; i >= 0 && !parsed; i--) {
|
|
535
|
+
const line = lines[i].trim();
|
|
536
|
+
if (line.startsWith('{')) {
|
|
537
|
+
try {
|
|
538
|
+
const json = JSON.parse(line);
|
|
539
|
+
if (json.response !== undefined) {
|
|
540
|
+
result = json.response || 'Task completed successfully.';
|
|
541
|
+
if (json.stats && json.stats.models) {
|
|
542
|
+
const modelNames = Object.keys(json.stats.models);
|
|
543
|
+
const totalTokens = modelNames.reduce((sum, m) => {
|
|
544
|
+
return sum + (json.stats.models[m]?.tokens?.total || 0);
|
|
545
|
+
}, 0);
|
|
546
|
+
result += '\\n\\n---\\n**Stats:** ' + totalTokens + ' tokens | Models: ' + modelNames.join(', ');
|
|
547
|
+
}
|
|
548
|
+
parsed = true;
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
} catch (lineErr) {
|
|
552
|
+
// Try next line
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
// Strategy 3: Use raw output if JSON parsing failed
|
|
559
|
+
if (!parsed) {
|
|
560
|
+
result = stdout.trim() || 'Task completed (no JSON output captured).';
|
|
561
|
+
}
|
|
562
|
+
} else {
|
|
563
|
+
result = 'Task completed but no output was captured.';
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
// Limit result length to prevent database bloat
|
|
567
|
+
if (result && result.length > MAX_RESULT_LEN) {
|
|
568
|
+
result = result.slice(0, MAX_RESULT_LEN) + '\\n\\n[Output truncated - exceeded ' + MAX_RESULT_LEN + ' characters]';
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// Check for errors in stderr
|
|
572
|
+
if (stderr && (stderr.includes('Error') || stderr.includes('error') || stderr.includes('FAILED'))) {
|
|
573
|
+
taskStatus = 'failed';
|
|
574
|
+
taskError = stderr.slice(0, MAX_ERROR_LEN);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
// Update database with result
|
|
578
|
+
try {
|
|
579
|
+
const db = new Database(dbPath);
|
|
580
|
+
const stmt = db.prepare(\`
|
|
581
|
+
UPDATE tasks
|
|
582
|
+
SET status = ?, progress = ?, result = ?, error = ?, completed_at = ?, updated_at = ?
|
|
583
|
+
WHERE id = ?
|
|
584
|
+
\`);
|
|
585
|
+
stmt.run(taskStatus, 100, result, taskError, new Date().toISOString(), new Date().toISOString(), taskId);
|
|
586
|
+
db.close();
|
|
587
|
+
console.error('[Monitor] Task ' + taskId + ' marked as ' + taskStatus + ' with result (' + (result?.length || 0) + ' chars)');
|
|
588
|
+
} catch (dbError) {
|
|
589
|
+
console.error('[Monitor] Database update failed:', dbError.message);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
// Cleanup temp files
|
|
593
|
+
try { fs.unlinkSync(stdoutPath); } catch (e) {}
|
|
594
|
+
try { fs.unlinkSync(stderrPath); } catch (e) {}
|
|
595
|
+
|
|
596
|
+
process.exit(0);
|
|
597
|
+
}
|
|
598
|
+
}, POLL_INTERVAL);
|
|
599
|
+
|
|
600
|
+
// Timeout after configured duration
|
|
601
|
+
setTimeout(() => {
|
|
602
|
+
clearInterval(checkInterval);
|
|
603
|
+
console.error('[Monitor] Task ' + taskId + ' timeout after ' + (TIMEOUT_MS / 60000) + ' minutes');
|
|
604
|
+
try {
|
|
605
|
+
const db = new Database(dbPath);
|
|
606
|
+
const stmt = db.prepare(\`
|
|
607
|
+
UPDATE tasks
|
|
608
|
+
SET status = ?, error = ?, updated_at = ?
|
|
609
|
+
WHERE id = ?
|
|
610
|
+
\`);
|
|
611
|
+
stmt.run('failed', 'Task timeout after ' + (TIMEOUT_MS / 60000) + ' minutes', new Date().toISOString(), taskId);
|
|
612
|
+
db.close();
|
|
613
|
+
} catch (dbError) {
|
|
614
|
+
console.error('[Monitor] Database update failed:', dbError.message);
|
|
615
|
+
}
|
|
616
|
+
process.exit(0);
|
|
617
|
+
}, TIMEOUT_MS);
|
|
618
|
+
`;
|
|
619
|
+
// Write monitor script to temp file
|
|
620
|
+
const monitorPath = join(tmpdir(), `${MONITOR_FILE_PREFIX}${taskId}.js`);
|
|
621
|
+
writeFileSync(monitorPath, monitorScript);
|
|
622
|
+
// Get node_modules path for the monitor to find better-sqlite3
|
|
623
|
+
const nodeModulesPath = join(__dirname, '../../node_modules');
|
|
624
|
+
// Spawn detached monitor with NODE_PATH set
|
|
625
|
+
const monitor = spawn('node', [monitorPath], {
|
|
626
|
+
detached: true,
|
|
627
|
+
stdio: 'ignore',
|
|
628
|
+
env: {
|
|
629
|
+
...process.env,
|
|
630
|
+
NODE_PATH: nodeModulesPath,
|
|
631
|
+
},
|
|
632
|
+
});
|
|
633
|
+
monitor.unref();
|
|
634
|
+
console.error(`[TaskStore] Started background monitor for task ${taskId} (monitor PID: ${monitor.pid})`);
|
|
635
|
+
}
|
|
636
|
+
// Model fallback chain imported from constants.ts
|
|
458
637
|
/**
|
|
459
638
|
* Execute Gemini CLI with a specific model
|
|
460
639
|
* Uses modern syntax: gemini --yolo --model <model> --output-format json "prompt"
|
|
461
640
|
* Note: --prompt flag is deprecated, use positional argument instead
|
|
462
641
|
*/
|
|
463
|
-
function executeWithModel(model, settings, taskConfig, finalPrompt, options, onProgress) {
|
|
642
|
+
function executeWithModel(model, settings, taskConfig, finalPrompt, options, onProgress, onProcessSpawn) {
|
|
464
643
|
const cliArgs = [];
|
|
465
644
|
// Auto-approve mode (--yolo or --approval-mode)
|
|
466
645
|
if (options.approval_mode) {
|
|
@@ -491,7 +670,13 @@ function executeWithModel(model, settings, taskConfig, finalPrompt, options, onP
|
|
|
491
670
|
env: process.env,
|
|
492
671
|
shell: false,
|
|
493
672
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
673
|
+
detached: false,
|
|
494
674
|
});
|
|
675
|
+
// Report PID immediately after spawn
|
|
676
|
+
if (child.pid) {
|
|
677
|
+
console.error(`[Gemini CLI] Spawned process PID ${child.pid} for model ${model}`);
|
|
678
|
+
onProcessSpawn?.(child.pid);
|
|
679
|
+
}
|
|
495
680
|
child.stdout.on('data', (data) => {
|
|
496
681
|
const chunk = data.toString();
|
|
497
682
|
stdout += chunk;
|
|
@@ -553,7 +738,7 @@ function executeWithModel(model, settings, taskConfig, finalPrompt, options, onP
|
|
|
553
738
|
* Execute Gemini CLI with subagent task (blocking mode)
|
|
554
739
|
* Uses model fallback chain: tries models in sequence until one succeeds
|
|
555
740
|
*/
|
|
556
|
-
export async function executeSubagent(args, onProgress) {
|
|
741
|
+
export async function executeSubagent(args, onProgress, onProcessSpawn) {
|
|
557
742
|
const config = loadSubagentConfig();
|
|
558
743
|
const settings = config.settings;
|
|
559
744
|
const taskConfig = config.task_types[args.task_type];
|
|
@@ -570,14 +755,14 @@ export async function executeSubagent(args, onProgress) {
|
|
|
570
755
|
// If user specified a model, use only that model (no fallback)
|
|
571
756
|
if (args.model) {
|
|
572
757
|
// Error is already well-formatted by executeWithModel, just re-throw
|
|
573
|
-
return await executeWithModel(args.model, settings, taskConfig, finalPrompt, execOptions, onProgress);
|
|
758
|
+
return await executeWithModel(args.model, settings, taskConfig, finalPrompt, execOptions, onProgress, onProcessSpawn);
|
|
574
759
|
}
|
|
575
760
|
// Use fallback chain
|
|
576
761
|
const errors = [];
|
|
577
762
|
for (const model of MODEL_FALLBACK_CHAIN) {
|
|
578
763
|
try {
|
|
579
764
|
onProgress?.(`🔄 Trying model: ${model}...\n`);
|
|
580
|
-
return await executeWithModel(model, settings, taskConfig, finalPrompt, execOptions, onProgress);
|
|
765
|
+
return await executeWithModel(model, settings, taskConfig, finalPrompt, execOptions, onProgress, onProcessSpawn);
|
|
581
766
|
}
|
|
582
767
|
catch (error) {
|
|
583
768
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.tool.js","sourceRoot":"","sources":["../../src/tools/subagent.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AA+BtC,sDAAsD;AACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE/C,wCAAwC;AACxC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC,kDAAkD;AAClD,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B;;GAEG;AACH,SAAS,cAAc;IACrB,MAAM,EAAE,GAAG,aAAa,CAAC;IACzB,aAAa,EAAE,CAAC;IAChB,iCAAiC;IACjC,IAAI,aAAa,GAAG,KAAK,EAAE,CAAC;QAC1B,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,IAAI,GAAc;QACtB,EAAE;QACF,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;KAChB,CAAC;IAEF,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAExB,gCAAgC;IAChC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,EAAE,cAAc,CAAC,CAAC;IAEnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU,EAAE,OAA2B;IAChE,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,QAAQ,MAAM,gEAAgE;SACtF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAA4B;QACxC,OAAO,EAAE,IAAI,CAAC,EAAE;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAa,CAAC,CAAC,OAAO,EAAE,CAAC;QACvD,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AA6ED,IAAI,YAAY,GAA0B,IAAI,CAAC;AAE/C,SAAS,kBAAkB;IACzB,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnD,YAAY,GAAG,SAAS,CAAC,WAAW,CAAmB,CAAC;IACxD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAqB;IACnD,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5E,uEAAuE;IACvE,IAAI,YAAY,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACvD,YAAY,CAAC,QAAQ,CAAC,2CAA2C,CAAC,EAAE,CAAC;QACvE,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,4EAA4E;YACrF,UAAU,EAAE,qFAAqF;YACjG,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClF,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,uBAAuB,YAAY,EAAE;YAC9C,UAAU,EAAE,6CAA6C;YACzD,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1E,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,yBAAyB,YAAY,EAAE;YAChD,UAAU,EAAE,iEAAiE;YAC7E,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3E,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,sBAAsB,YAAY,EAAE;YAC7C,UAAU,EAAE,4CAA4C;YACxD,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,IAAI,YAAY,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACzD,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,qBAAqB,YAAY,EAAE;YAC5C,UAAU,EAAE,2EAA2E;YACvF,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,YAAY;QACrB,UAAU,EAAE,wCAAwC;QACpD,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAkB;IAC3C,OAAO;;oBAEW,KAAK,CAAC,IAAI;;eAEf,KAAK,CAAC,OAAO;;qBAEP,KAAK,CAAC,UAAU;;iBAEpB,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAY,EAAE,OAAe,EAAE,UAAkB;IAC3E,MAAM,SAAS,GAAI,KAA+B,CAAC,IAAI,CAAC;IAExD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO;;mBAEQ,OAAO;;sBAEJ,UAAU;;;;4BAIJ,OAAO;;;0CAGO,CAAC;IACzC,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO;;2CAEgC,OAAO;;sBAE5B,UAAU;;;8CAGc,OAAO;6BACxB,OAAO;;4CAEQ,CAAC;IAC3C,CAAC;IAED,OAAO;;aAEI,KAAK,CAAC,OAAO;YACd,SAAS,IAAI,SAAS;;sBAEZ,UAAU;;;;kBAId,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAc,EAAE,KAAa,EAAE,UAAkB;IAC1E,MAAM,UAAU,GAA2B;QACzC,SAAS,EAAE,0DAA0D;QACrE,SAAS,EAAE,8DAA8D;QACzE,QAAQ,EAAE,6CAA6C;QACvD,SAAS,EAAE,iDAAiD;KAC7D,CAAC;IAEF,OAAO;;gBAEO,MAAM;eACP,KAAK;sBACE,UAAU;;qBAEX,UAAU,CAAC,MAAM,CAAC,IAAI,qCAAqC;;;;;;;2CAOrC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,KAAyD,EACzD,KAAa,EACb,UAAkB;IAElB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC;IAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAE7B,IAAI,UAAU,GAAG,qCAAqC,CAAC;IACvD,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAClF,UAAU,GAAG,2DAA2D,CAAC;IAC3E,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClF,UAAU,GAAG,8DAA8D,CAAC;QAC5E,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;SAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAChF,UAAU,GAAG,sDAAsD,CAAC;QACpE,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,OAAO;;oBAEW,SAAS;kBACX,SAAS,IAAI,KAAK;eACrB,KAAK;sBACE,UAAU;;eAEjB,YAAY;;qBAEN,UAAU;;iBAEd,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,IAAmB,EACnB,MAAc,EACd,MAAc,EACd,KAAa,EACb,UAAkB;IAElB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IAE5B,uCAAuC;IACvC,MAAM,YAAY,GAA4D;QAC5E,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,iCAAiC,EAAE;QAC9E,CAAC,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,UAAU,EAAE,0BAA0B,EAAE;QACjF,GAAG,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,wBAAwB,EAAE;QAChF,GAAG,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,oBAAoB,EAAE;QACvE,GAAG,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,oBAAoB,EAAE;QAC3E,GAAG,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,yBAAyB,EAAE;QAC/E,GAAG,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,UAAU,EAAE,oBAAoB,EAAE;QAC7E,GAAG,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,wBAAwB,EAAE;KAC/E,CAAC;IAEF,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;IAEhG,uCAAuC;IACvC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,MAAM,EAAE,CAAC;QACX,8CAA8C;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC/B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC3F,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7B,WAAW,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,gCAAgC;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO;;mBAEU,QAAQ,OAAO,IAAI,CAAC,OAAO;eAC/B,KAAK;sBACE,UAAU;;;;EAI9B,WAAW,IAAI,0BAA0B;;;qBAGtB,IAAI,CAAC,UAAU;;;mBAGjB,MAAM,CAAC,MAAM;mBACb,MAAM,CAAC,MAAM;;iBAEf,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3F,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,YAAoB;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAC;IAC1E,OAAO,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,QAAgB,EAChB,UAAkB,EAClB,mBAA4B;IAE5B,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,0EAA0E,CAAC,CAAC;IAC5H,CAAC;IAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3D,OAAO,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAM1C,MAAM,SAAS,GAKV,EAAE,CAAC;IAER,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5D,SAAS,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,UAAU,EAAE,EAAE;gBACnB,IAAI,EAAE,GAAG,WAAW,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;gBACrD,WAAW,EAAE,IAAI,CAAC,MAAM,KAAK,WAAW;oBACtC,CAAC,CAAC,WAAW,EAAE,mCAAmC,IAAI,CAAC,SAAS,QAAQ;oBACxE,CAAC,CAAC,WAAW,EAAE,YAAY,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;gBACxD,QAAQ,EAAE,eAAe;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,gDAAgD;IAChD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,YAAY,MAAM;;iBAEZ,IAAI,CAAC,SAAS;eAChB,IAAI,CAAC,UAAU;iBACb,IAAI,CAAC,YAAY;;;;;;EAMhC,IAAI,CAAC,MAAM,EAAE,CAAC;IACd,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,YAAY,MAAM;;iBAEZ,IAAI,CAAC,SAAS;eAChB,IAAI,CAAC,UAAU;;;;;;EAM5B,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAkB,EAClB,cAA2E,EAC3E,cAAkD;IAElD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAExC,0BAA0B;IAC1B,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAExD,0CAA0C;IAC1C,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;QAC/B,oDAAoD;QACpD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAC/C,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;SACC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACrB,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE;YAClB,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,GAAG;YACb,MAAM;YACN,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACvC,CAAC,CAAC;QACH,MAAM,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC;SACD,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE;YAClB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,MAAM,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEL,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,EAAE;QAChB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,uGAAuG;KAChI,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,oBAAoB,GAAG;IAC3B,wBAAwB;IACxB,sBAAsB;IACtB,cAAc;IACd,kBAAkB;CACnB,CAAC;AAEF;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,KAAa,EACb,QAAoC,EACpC,UAAoC,EACpC,WAAmB,EACnB,OAAoF,EACpF,UAAqC;IAErC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,gDAAgD;IAChD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;SAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE9C,4BAA4B;IAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpF,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEvD,yDAAyD;IACzD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE;YACjD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC;YAChB,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,+DAA+D;QAC/D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,kCAAkC;YAClC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC9D,OAAO;YACT,CAAC;YAED,eAAe;YACf,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAuB,CAAC;oBAErE,sDAAsD;oBACtD,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;wBACvB,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACvE,OAAO;oBACT,CAAC;oBAED,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,IAAI,8BAA8B,CAAC;oBAEzE,0BAA0B;oBAC1B,IAAI,SAAS,GAAG,EAAE,CAAC;oBACnB,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;wBAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC1D,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;4BAC/C,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;wBACrE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACN,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC;wBAC7D,SAAS,GAAG,uBAAuB,WAAW,aAAa,SAAS,yBAAyB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBACrH,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;4BAC5B,SAAS,IAAI,eAAe,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;wBACvE,CAAC;oBACH,CAAC;oBAED,OAAO,CAAC,MAAM,UAAU,CAAC,YAAY,2BAA2B,KAAK,SAAS,QAAQ,GAAG,SAAS,EAAE,CAAC,CAAC;gBACxG,CAAC;gBAAC,MAAM,CAAC;oBACP,iEAAiE;oBACjE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,8BAA8B,CAAC;oBAC/D,OAAO,CAAC,MAAM,UAAU,CAAC,YAAY,2BAA2B,KAAK,SAAS,MAAM,EAAE,CAAC,CAAC;gBAC1F,CAAC;gBACD,OAAO;YACT,CAAC;YAED,gDAAgD;YAChD,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAkB,EAClB,UAAqC;IAErC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,0EAA0E,CAAC,CAAC;IAClI,CAAC;IAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/F,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAEvF,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;KAC9C,CAAC;IAEF,+DAA+D;IAC/D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,qEAAqE;QACrE,OAAO,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACxG,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,UAAU,EAAE,CAAC,oBAAoB,KAAK,OAAO,CAAC,CAAC;YAC/C,OAAO,MAAM,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACnG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACnD,UAAU,EAAE,CAAC,MAAM,KAAK,2BAA2B,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,MAAM,IAAI,KAAK,CAAC;;wBAEM,oBAAoB,CAAC,MAAM;;;EAGjD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;8DAQwB,CAAC,CAAC;AAChE,CAAC"}
|
|
1
|
+
{"version":3,"file":"subagent.tool.js","sourceRoot":"","sources":["../../src/tools/subagent.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite-based persistent task store
|
|
3
|
+
* Replaces in-memory Map to support async task persistence across MCP sessions
|
|
4
|
+
*/
|
|
5
|
+
import { type TaskType } from './constants.js';
|
|
6
|
+
export type TaskStatus = 'pending' | 'running' | 'completed' | 'failed';
|
|
7
|
+
export interface TaskState {
|
|
8
|
+
id: number;
|
|
9
|
+
status: TaskStatus;
|
|
10
|
+
task_type: TaskType;
|
|
11
|
+
progress: number;
|
|
12
|
+
result?: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
started_at: string;
|
|
15
|
+
completed_at?: string;
|
|
16
|
+
updated_at: string;
|
|
17
|
+
pid?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate unique 5-digit task ID
|
|
21
|
+
* Wraps around from TASK_ID_MAX back to TASK_ID_MIN
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateTaskId(): number;
|
|
24
|
+
/**
|
|
25
|
+
* Create a new task in pending state
|
|
26
|
+
*/
|
|
27
|
+
export declare function createTask(taskType: TaskType): TaskState;
|
|
28
|
+
/**
|
|
29
|
+
* Update task status
|
|
30
|
+
*/
|
|
31
|
+
export declare function updateTask(id: number, updates: Partial<TaskState>): TaskState | null;
|
|
32
|
+
/**
|
|
33
|
+
* Get task by ID
|
|
34
|
+
*/
|
|
35
|
+
export declare function getTask(id: number): TaskState | null;
|
|
36
|
+
/**
|
|
37
|
+
* Get all completed or failed tasks
|
|
38
|
+
*/
|
|
39
|
+
export declare function getCompletedTasks(): TaskState[];
|
|
40
|
+
/**
|
|
41
|
+
* Delete expired tasks (older than 1 hour)
|
|
42
|
+
* Call this periodically to clean up old tasks
|
|
43
|
+
*/
|
|
44
|
+
export declare function cleanupExpiredTasks(): number;
|
|
45
|
+
/**
|
|
46
|
+
* Close database connection (call on shutdown)
|
|
47
|
+
*/
|
|
48
|
+
export declare function closeDatabase(): void;
|
|
49
|
+
//# sourceMappingURL=task-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../src/tools/task-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAOL,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;AAMxB,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,QAAQ,CAAC;IACpB,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;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAqGD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAqBxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,CAmBpF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAgBpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,EAAE,CAe/C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite-based persistent task store
|
|
3
|
+
* Replaces in-memory Map to support async task persistence across MCP sessions
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import { dirname } from 'path';
|
|
9
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
10
|
+
import { TASK_ID_MIN, TASK_ID_MAX, TASK_EXPIRY_MS, CLEANUP_INTERVAL_MS, DATA_DIR_NAME, DB_FILE_NAME, } from './constants.js';
|
|
11
|
+
import { cleanupOrphanedTempFiles } from './cleanup.js';
|
|
12
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
+
const __dirname = dirname(__filename);
|
|
14
|
+
// Database path - store in project root/.mcp-data directory
|
|
15
|
+
const DATA_DIR = join(__dirname, '../..', DATA_DIR_NAME);
|
|
16
|
+
const DB_PATH = join(DATA_DIR, DB_FILE_NAME);
|
|
17
|
+
// Ensure data directory exists
|
|
18
|
+
if (!existsSync(DATA_DIR)) {
|
|
19
|
+
mkdirSync(DATA_DIR, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
// Initialize database
|
|
22
|
+
const db = new Database(DB_PATH);
|
|
23
|
+
// Enable WAL mode for better concurrency
|
|
24
|
+
db.pragma('journal_mode = WAL');
|
|
25
|
+
// Create tasks table
|
|
26
|
+
db.exec(`
|
|
27
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
28
|
+
id INTEGER PRIMARY KEY,
|
|
29
|
+
status TEXT NOT NULL,
|
|
30
|
+
task_type TEXT NOT NULL,
|
|
31
|
+
progress INTEGER NOT NULL DEFAULT 0,
|
|
32
|
+
result TEXT,
|
|
33
|
+
error TEXT,
|
|
34
|
+
started_at TEXT NOT NULL,
|
|
35
|
+
completed_at TEXT,
|
|
36
|
+
updated_at TEXT NOT NULL,
|
|
37
|
+
pid INTEGER
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_started_at ON tasks(started_at);
|
|
42
|
+
`);
|
|
43
|
+
// Migration: Add pid column if it doesn't exist (for existing databases)
|
|
44
|
+
try {
|
|
45
|
+
db.exec(`ALTER TABLE tasks ADD COLUMN pid INTEGER;`);
|
|
46
|
+
console.error('[TaskStore] Migration: Added pid column to existing database');
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// Column already exists or other error - safe to ignore
|
|
50
|
+
if (!error.message?.includes('duplicate column')) {
|
|
51
|
+
console.error('[TaskStore] Migration note:', error.message);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Prepared statements for better performance
|
|
55
|
+
const insertTaskStmt = db.prepare(`
|
|
56
|
+
INSERT INTO tasks (id, status, task_type, progress, started_at, updated_at)
|
|
57
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
58
|
+
`);
|
|
59
|
+
const updateTaskStmt = db.prepare(`
|
|
60
|
+
UPDATE tasks
|
|
61
|
+
SET status = ?, progress = ?, result = ?, error = ?, completed_at = ?, updated_at = ?, pid = ?
|
|
62
|
+
WHERE id = ?
|
|
63
|
+
`);
|
|
64
|
+
const getTaskStmt = db.prepare(`
|
|
65
|
+
SELECT * FROM tasks WHERE id = ?
|
|
66
|
+
`);
|
|
67
|
+
const getCompletedTasksStmt = db.prepare(`
|
|
68
|
+
SELECT * FROM tasks WHERE status IN ('completed', 'failed')
|
|
69
|
+
ORDER BY completed_at DESC
|
|
70
|
+
`);
|
|
71
|
+
const deleteTaskStmt = db.prepare(`
|
|
72
|
+
DELETE FROM tasks WHERE id = ?
|
|
73
|
+
`);
|
|
74
|
+
const deleteExpiredTasksStmt = db.prepare(`
|
|
75
|
+
DELETE FROM tasks
|
|
76
|
+
WHERE datetime(started_at, '+1 hour') < datetime('now')
|
|
77
|
+
`);
|
|
78
|
+
// ID counter - get max ID from database on startup
|
|
79
|
+
let taskIdCounter = TASK_ID_MIN;
|
|
80
|
+
const maxIdRow = db.prepare('SELECT MAX(id) as max_id FROM tasks').get();
|
|
81
|
+
if (maxIdRow.max_id && maxIdRow.max_id >= taskIdCounter) {
|
|
82
|
+
taskIdCounter = maxIdRow.max_id + 1;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Generate unique 5-digit task ID
|
|
86
|
+
* Wraps around from TASK_ID_MAX back to TASK_ID_MIN
|
|
87
|
+
*/
|
|
88
|
+
export function generateTaskId() {
|
|
89
|
+
const id = taskIdCounter;
|
|
90
|
+
taskIdCounter++;
|
|
91
|
+
if (taskIdCounter > TASK_ID_MAX) {
|
|
92
|
+
taskIdCounter = TASK_ID_MIN;
|
|
93
|
+
}
|
|
94
|
+
return id;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create a new task in pending state
|
|
98
|
+
*/
|
|
99
|
+
export function createTask(taskType) {
|
|
100
|
+
const id = generateTaskId();
|
|
101
|
+
const now = new Date().toISOString();
|
|
102
|
+
const task = {
|
|
103
|
+
id,
|
|
104
|
+
status: 'pending',
|
|
105
|
+
task_type: taskType,
|
|
106
|
+
progress: 0,
|
|
107
|
+
started_at: now,
|
|
108
|
+
updated_at: now,
|
|
109
|
+
};
|
|
110
|
+
insertTaskStmt.run(id, task.status, task.task_type, task.progress, task.started_at, task.updated_at);
|
|
111
|
+
// Schedule cleanup after expiry (note: this only works if process stays alive)
|
|
112
|
+
setTimeout(() => {
|
|
113
|
+
deleteTaskStmt.run(id);
|
|
114
|
+
}, TASK_EXPIRY_MS);
|
|
115
|
+
return task;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Update task status
|
|
119
|
+
*/
|
|
120
|
+
export function updateTask(id, updates) {
|
|
121
|
+
const task = getTask(id);
|
|
122
|
+
if (!task)
|
|
123
|
+
return null;
|
|
124
|
+
// Merge updates
|
|
125
|
+
const updatedTask = { ...task, ...updates, updated_at: new Date().toISOString() };
|
|
126
|
+
updateTaskStmt.run(updatedTask.status, updatedTask.progress, updatedTask.result || null, updatedTask.error || null, updatedTask.completed_at || null, updatedTask.updated_at, updatedTask.pid || null, id);
|
|
127
|
+
return updatedTask;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get task by ID
|
|
131
|
+
*/
|
|
132
|
+
export function getTask(id) {
|
|
133
|
+
const row = getTaskStmt.get(id);
|
|
134
|
+
if (!row)
|
|
135
|
+
return null;
|
|
136
|
+
return {
|
|
137
|
+
id: row.id,
|
|
138
|
+
status: row.status,
|
|
139
|
+
task_type: row.task_type,
|
|
140
|
+
progress: row.progress,
|
|
141
|
+
result: row.result || undefined,
|
|
142
|
+
error: row.error || undefined,
|
|
143
|
+
started_at: row.started_at,
|
|
144
|
+
completed_at: row.completed_at || undefined,
|
|
145
|
+
updated_at: row.updated_at,
|
|
146
|
+
pid: row.pid || undefined,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get all completed or failed tasks
|
|
151
|
+
*/
|
|
152
|
+
export function getCompletedTasks() {
|
|
153
|
+
const rows = getCompletedTasksStmt.all();
|
|
154
|
+
return rows.map(row => ({
|
|
155
|
+
id: row.id,
|
|
156
|
+
status: row.status,
|
|
157
|
+
task_type: row.task_type,
|
|
158
|
+
progress: row.progress,
|
|
159
|
+
result: row.result || undefined,
|
|
160
|
+
error: row.error || undefined,
|
|
161
|
+
started_at: row.started_at,
|
|
162
|
+
completed_at: row.completed_at || undefined,
|
|
163
|
+
updated_at: row.updated_at,
|
|
164
|
+
pid: row.pid || undefined,
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Delete expired tasks (older than 1 hour)
|
|
169
|
+
* Call this periodically to clean up old tasks
|
|
170
|
+
*/
|
|
171
|
+
export function cleanupExpiredTasks() {
|
|
172
|
+
const result = deleteExpiredTasksStmt.run();
|
|
173
|
+
return result.changes;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Close database connection (call on shutdown)
|
|
177
|
+
*/
|
|
178
|
+
export function closeDatabase() {
|
|
179
|
+
db.close();
|
|
180
|
+
}
|
|
181
|
+
// Cleanup expired tasks and orphaned temp files on startup
|
|
182
|
+
cleanupExpiredTasks();
|
|
183
|
+
cleanupOrphanedTempFiles();
|
|
184
|
+
// Periodic cleanup at configured interval
|
|
185
|
+
setInterval(() => {
|
|
186
|
+
const deleted = cleanupExpiredTasks();
|
|
187
|
+
if (deleted > 0) {
|
|
188
|
+
console.error(`[TaskStore] Cleaned up ${deleted} expired tasks`);
|
|
189
|
+
}
|
|
190
|
+
}, CLEANUP_INTERVAL_MS);
|
|
191
|
+
//# sourceMappingURL=task-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-store.js","sourceRoot":"","sources":["../../src/tools/task-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gemini-helper-friend",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Your autonomous AI helper that works on your codebase using Gemini CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -48,6 +48,8 @@
|
|
|
48
48
|
],
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
51
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
52
|
+
"better-sqlite3": "^12.5.0",
|
|
51
53
|
"yaml": "^2.3.4",
|
|
52
54
|
"zod": "^3.25.76",
|
|
53
55
|
"zod-to-json-schema": "^3.24.6"
|