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 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
- task_id:
346
- type: integer
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 ID**
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
- The task ID returned by `gemini-subagent` when called with `async: true`.
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
- Example: `34567`
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
- }, KEEPALIVE_INTERVAL);
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
- if (!args.task_id || typeof args.task_id !== 'number') {
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: JSON.stringify({
174
- status: "error",
175
- error: "task_id is required and must be a number (5-digit integer)",
176
- }, null, 2),
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
- const statusResponse = getTaskStatusResponse(args.task_id);
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: JSON.stringify(statusResponse, null, 2),
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
- const validTaskTypes = ['completion-inspector', 'helper-friend', 'manual-tester', 'manual'];
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
- - \`completion-inspector\` - CTO-level code review and verification
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 < 20) {
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:** 20 characters
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"}
@@ -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, type TaskState, type TaskStatus, } from './subagent.tool.js';
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,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC"}
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"}
@@ -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
@@ -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,GAIvB,MAAM,oBAAoB,CAAC"}
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: 'completion-inspector' | 'helper-friend' | 'manual-tester' | 'manual';
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 TaskStatus = 'pending' | 'running' | 'completed' | 'failed';
16
- export interface TaskState {
17
- id: number;
18
- status: TaskStatus;
19
- task_type: string;
20
- progress: number;
21
- result?: string;
22
- error?: string;
23
- started_at: string;
24
- completed_at?: string;
25
- updated_at: string;
26
- }
27
- /**
28
- * Create a new task in pending state
29
- */
30
- export declare function createTask(taskType: string): TaskState;
31
- /**
32
- * Update task status
33
- */
34
- export declare function updateTask(id: number, updates: Partial<TaskState>): TaskState | null;
35
- /**
36
- * Get task by ID
37
- */
38
- export declare function getTask(id: number): TaskState | null;
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;AAWH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,sBAAsB,GAAG,eAAe,GAAG,eAAe,GAAG,QAAQ,CAAC;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAwBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAqBtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,CAMpF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmC5D;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AA6WD;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,KAAK,CAAC;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAuBD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsCjE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAC3E,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACjD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAsCtD;AAiID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,YAAY,EAClB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GACpC,OAAO,CAAC,MAAM,CAAC,CAqDjB"}
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"}