research-powerpack-mcp 3.3.0 → 3.3.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.
Files changed (63) hide show
  1. package/dist/clients/reddit.d.ts +5 -5
  2. package/dist/clients/reddit.d.ts.map +1 -1
  3. package/dist/clients/reddit.js +29 -10
  4. package/dist/clients/reddit.js.map +1 -1
  5. package/dist/clients/research.d.ts +12 -2
  6. package/dist/clients/research.d.ts.map +1 -1
  7. package/dist/clients/research.js +109 -37
  8. package/dist/clients/research.js.map +1 -1
  9. package/dist/clients/scraper.d.ts +4 -3
  10. package/dist/clients/scraper.d.ts.map +1 -1
  11. package/dist/clients/search.d.ts +3 -2
  12. package/dist/clients/search.d.ts.map +1 -1
  13. package/dist/config/index.d.ts +4 -3
  14. package/dist/config/index.d.ts.map +1 -1
  15. package/dist/config/index.js +37 -5
  16. package/dist/config/index.js.map +1 -1
  17. package/dist/index.js +57 -22
  18. package/dist/index.js.map +1 -1
  19. package/dist/schemas/deep-research.d.ts +1 -37
  20. package/dist/schemas/deep-research.d.ts.map +1 -1
  21. package/dist/schemas/deep-research.js +205 -40
  22. package/dist/schemas/deep-research.js.map +1 -1
  23. package/dist/schemas/scrape-links.d.ts +1 -7
  24. package/dist/schemas/scrape-links.d.ts.map +1 -1
  25. package/dist/schemas/scrape-links.js +17 -9
  26. package/dist/schemas/scrape-links.js.map +1 -1
  27. package/dist/schemas/web-search.d.ts +2 -4
  28. package/dist/schemas/web-search.d.ts.map +1 -1
  29. package/dist/schemas/web-search.js +15 -6
  30. package/dist/schemas/web-search.js.map +1 -1
  31. package/dist/services/llm-processor.d.ts +0 -10
  32. package/dist/services/llm-processor.d.ts.map +1 -1
  33. package/dist/services/llm-processor.js +2 -1
  34. package/dist/services/llm-processor.js.map +1 -1
  35. package/dist/services/markdown-cleaner.d.ts +4 -0
  36. package/dist/services/markdown-cleaner.d.ts.map +1 -1
  37. package/dist/services/markdown-cleaner.js +26 -13
  38. package/dist/services/markdown-cleaner.js.map +1 -1
  39. package/dist/tools/definitions.d.ts.map +1 -1
  40. package/dist/tools/definitions.js +40 -2
  41. package/dist/tools/definitions.js.map +1 -1
  42. package/dist/tools/reddit.d.ts +3 -1
  43. package/dist/tools/reddit.d.ts.map +1 -1
  44. package/dist/tools/reddit.js +68 -48
  45. package/dist/tools/reddit.js.map +1 -1
  46. package/dist/tools/scrape.js.map +1 -1
  47. package/dist/tools/search.d.ts +1 -0
  48. package/dist/tools/search.d.ts.map +1 -1
  49. package/dist/tools/search.js +11 -3
  50. package/dist/tools/search.js.map +1 -1
  51. package/dist/utils/errors.d.ts +31 -40
  52. package/dist/utils/errors.d.ts.map +1 -1
  53. package/dist/utils/errors.js +84 -10
  54. package/dist/utils/errors.js.map +1 -1
  55. package/dist/utils/url-aggregator.d.ts +5 -4
  56. package/dist/utils/url-aggregator.d.ts.map +1 -1
  57. package/dist/utils/url-aggregator.js +30 -3
  58. package/dist/utils/url-aggregator.js.map +1 -1
  59. package/dist/version.d.ts +19 -12
  60. package/dist/version.d.ts.map +1 -1
  61. package/dist/version.js +22 -14
  62. package/dist/version.js.map +1 -1
  63. package/package.json +1 -1
@@ -3,8 +3,37 @@
3
3
  * All environment variables, constants, and LLM config in one place
4
4
  */
5
5
  import { VERSION, PACKAGE_NAME, PACKAGE_DESCRIPTION } from '../version.js';
6
- // Re-export version utilities for convenience
7
- export { VERSION, PACKAGE_NAME, PACKAGE_DESCRIPTION } from '../version.js';
6
+ // Import version utilities (not re-exported - use directly from version.ts if needed externally)
7
+ // ============================================================================
8
+ // Safe Integer Parsing Helper
9
+ // ============================================================================
10
+ /**
11
+ * Safely parse an integer from environment variable with bounds checking
12
+ * @param value - The string value to parse (from process.env)
13
+ * @param defaultVal - Default value if parsing fails or value is undefined
14
+ * @param min - Minimum allowed value (clamped if below)
15
+ * @param max - Maximum allowed value (clamped if above)
16
+ * @returns Parsed integer within bounds, or default value
17
+ */
18
+ function safeParseInt(value, defaultVal, min, max) {
19
+ if (!value) {
20
+ return defaultVal;
21
+ }
22
+ const parsed = parseInt(value, 10);
23
+ if (isNaN(parsed)) {
24
+ console.warn(`[Config] Invalid number "${value}", using default ${defaultVal}`);
25
+ return defaultVal;
26
+ }
27
+ if (parsed < min) {
28
+ console.warn(`[Config] Value ${parsed} below minimum ${min}, clamping to ${min}`);
29
+ return min;
30
+ }
31
+ if (parsed > max) {
32
+ console.warn(`[Config] Value ${parsed} above maximum ${max}, clamping to ${max}`);
33
+ return max;
34
+ }
35
+ return parsed;
36
+ }
8
37
  export function parseEnv() {
9
38
  return {
10
39
  SCRAPER_API_KEY: process.env.SCRAPEDO_API_KEY || '',
@@ -18,11 +47,14 @@ export function parseEnv() {
18
47
  // ============================================================================
19
48
  export const RESEARCH = {
20
49
  BASE_URL: process.env.OPENROUTER_BASE_URL || 'https://openrouter.ai/api/v1',
21
- MODEL: process.env.RESEARCH_MODEL || 'perplexity/sonar-deep-research',
50
+ MODEL: process.env.RESEARCH_MODEL || 'x-ai/grok-4-fast',
51
+ FALLBACK_MODEL: process.env.RESEARCH_FALLBACK_MODEL || 'google/gemini-2.5-flash',
22
52
  API_KEY: process.env.OPENROUTER_API_KEY || '',
23
- TIMEOUT_MS: parseInt(process.env.API_TIMEOUT_MS || '1800000', 10),
53
+ // Timeout: min 1s, max 1hr, default 30min
54
+ TIMEOUT_MS: safeParseInt(process.env.API_TIMEOUT_MS, 1800000, 1000, 3600000),
24
55
  REASONING_EFFORT: process.env.DEFAULT_REASONING_EFFORT || 'high',
25
- MAX_URLS: parseInt(process.env.DEFAULT_MAX_URLS || '100', 10),
56
+ // Max URLs in search results: min 10, max 200, default 100
57
+ MAX_URLS: safeParseInt(process.env.DEFAULT_MAX_URLS, 100, 10, 200),
26
58
  };
27
59
  // ============================================================================
28
60
  // MCP Server Configuration
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
7
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
- import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
8
+ import { CallToolRequestSchema, ListToolsRequestSchema, McpError, ErrorCode as McpErrorCode } from '@modelcontextprotocol/sdk/types.js';
9
9
  import { TOOLS } from './tools/definitions.js';
10
10
  import { handleSearchReddit, handleGetRedditPosts } from './tools/reddit.js';
11
11
  import { handleDeepResearch } from './tools/research.js';
@@ -14,7 +14,7 @@ import { handleWebSearch } from './tools/search.js';
14
14
  import { deepResearchParamsSchema } from './schemas/deep-research.js';
15
15
  import { scrapeLinksParamsSchema } from './schemas/scrape-links.js';
16
16
  import { webSearchParamsSchema } from './schemas/web-search.js';
17
- import { classifyError } from './utils/errors.js';
17
+ import { classifyError, createToolErrorFromStructured } from './utils/errors.js';
18
18
  import { parseEnv, SERVER, getCapabilities, getMissingEnvMessage } from './config/index.js';
19
19
  // ============================================================================
20
20
  // Capability Detection (no ENV required - tools fail gracefully when called)
@@ -138,9 +138,18 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
138
138
  }
139
139
  return { content: [{ type: 'text', text: content }] };
140
140
  }
141
- return { content: [{ type: 'text', text: `⚠️ **Unknown tool:** \`${name}\`\n\nAvailable tools: search_reddit, get_reddit_post, deep_research, scrape_links, web_search` }], isError: true };
141
+ /**
142
+ * Protocol Error: Unknown tool requested
143
+ * Per MCP spec, use McpError for protocol-level errors (tool not found, invalid params)
144
+ * vs isError:true for tool execution failures (network, API, timeout)
145
+ */
146
+ throw new McpError(McpErrorCode.MethodNotFound, `Method not found: ${name}. Available tools: search_reddit, get_reddit_post, deep_research, scrape_links, web_search`);
142
147
  }
143
148
  catch (error) {
149
+ // McpError should propagate to client as protocol error
150
+ if (error instanceof McpError) {
151
+ throw error;
152
+ }
144
153
  // Classify the error for helpful messaging
145
154
  const structuredError = classifyError(error);
146
155
  // Log for debugging
@@ -149,36 +158,62 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
149
158
  message: structuredError.message,
150
159
  retryable: structuredError.retryable,
151
160
  });
152
- // Format user-friendly error message
153
- const retryHint = structuredError.retryable ? '\n\n💡 This error may be temporary. Try again in a moment.' : '';
154
- const errorText = `## ❌ Error\n\n**${structuredError.code}:** ${structuredError.message}${retryHint}\n\nPlease check your input parameters and try again.`;
155
- // ALWAYS return a valid response - never let the server crash
156
- return { content: [{ type: 'text', text: errorText }], isError: true };
161
+ // Create standardized error response with errorCode for client programmatic handling
162
+ // This response includes: content (markdown), isError: true, errorCode, and retryAfter (for rate limits)
163
+ return createToolErrorFromStructured(structuredError);
157
164
  }
158
165
  });
159
166
  // ============================================================================
160
- // Global Error Handlers - Prevent server crashes
167
+ // Global Error Handlers - MUST EXIT on fatal errors per Node.js best practices
168
+ // See: https://nodejs.org/api/process.html#warning-using-uncaughtexception-correctly
161
169
  // ============================================================================
162
- // Handle uncaught exceptions
170
+ // Track shutdown state to prevent double shutdown
171
+ let isShuttingDown = false;
172
+ /**
173
+ * Graceful shutdown handler - closes server and exits
174
+ * @param exitCode - Exit code (0 for clean shutdown, 1 for error)
175
+ */
176
+ async function gracefulShutdown(exitCode) {
177
+ if (isShuttingDown)
178
+ return;
179
+ isShuttingDown = true;
180
+ try {
181
+ await server.close();
182
+ console.error(`[MCP Server] Server closed at ${new Date().toISOString()}`);
183
+ }
184
+ catch (closeError) {
185
+ console.error('[MCP Server] Error closing server:', closeError);
186
+ }
187
+ finally {
188
+ process.exit(exitCode);
189
+ }
190
+ }
191
+ // Handle uncaught exceptions - MUST EXIT per Node.js docs
192
+ // The VM is in an unstable state after uncaught exception
163
193
  process.on('uncaughtException', (error) => {
164
- console.error('[MCP Server] Uncaught exception (server continues):', error.message);
165
- // Don't exit - the server should continue running
194
+ console.error(`[MCP Server] FATAL uncaughtException at ${new Date().toISOString()}:`);
195
+ console.error(` Message: ${error.message}`);
196
+ console.error(` Stack: ${error.stack}`);
197
+ gracefulShutdown(1);
166
198
  });
167
- // Handle unhandled promise rejections
199
+ // Handle unhandled promise rejections - MUST EXIT (Node v15+ behavior)
200
+ // Suppressing this risks memory leaks and corrupted state
168
201
  process.on('unhandledRejection', (reason) => {
169
202
  const error = classifyError(reason);
170
- console.error('[MCP Server] Unhandled rejection (server continues):', error.message);
171
- // Don't exit - the server should continue running
203
+ console.error(`[MCP Server] FATAL unhandledRejection at ${new Date().toISOString()}:`);
204
+ console.error(` Message: ${error.message}`);
205
+ console.error(` Code: ${error.code}`);
206
+ gracefulShutdown(1);
172
207
  });
173
- // Handle SIGTERM gracefully
208
+ // Handle SIGTERM gracefully (Docker/Kubernetes stop signal)
174
209
  process.on('SIGTERM', () => {
175
- console.error('[MCP Server] Received SIGTERM, shutting down gracefully');
176
- process.exit(0);
210
+ console.error(`[MCP Server] Received SIGTERM at ${new Date().toISOString()}, shutting down gracefully`);
211
+ gracefulShutdown(0);
177
212
  });
178
- // Handle SIGINT gracefully (Ctrl+C)
179
- process.on('SIGINT', () => {
180
- console.error('[MCP Server] Received SIGINT, shutting down gracefully');
181
- process.exit(0);
213
+ // Handle SIGINT gracefully (Ctrl+C) - use once() to prevent double-fire
214
+ process.once('SIGINT', () => {
215
+ console.error(`[MCP Server] Received SIGINT at ${new Date().toISOString()}, shutting down gracefully`);
216
+ gracefulShutdown(0);
182
217
  });
183
218
  // ============================================================================
184
219
  // Start Server
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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"}
@@ -1,44 +1,8 @@
1
1
  /**
2
2
  * Deep research schema - batch research with dynamic token allocation
3
+ * Enhanced with comprehensive prompting for bugs, programming questions, and general research
3
4
  */
4
5
  import { z } from 'zod';
5
- export declare const deepResearchParamsShape: {
6
- questions: z.ZodArray<z.ZodObject<{
7
- question: z.ZodString;
8
- file_attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
9
- path: z.ZodString;
10
- start_line: z.ZodOptional<z.ZodNumber>;
11
- end_line: z.ZodOptional<z.ZodNumber>;
12
- description: z.ZodOptional<z.ZodString>;
13
- }, "strip", z.ZodTypeAny, {
14
- path: string;
15
- start_line?: number | undefined;
16
- end_line?: number | undefined;
17
- description?: string | undefined;
18
- }, {
19
- path: string;
20
- start_line?: number | undefined;
21
- end_line?: number | undefined;
22
- description?: string | undefined;
23
- }>, "many">>;
24
- }, "strip", z.ZodTypeAny, {
25
- question: string;
26
- file_attachments?: {
27
- path: string;
28
- start_line?: number | undefined;
29
- end_line?: number | undefined;
30
- description?: string | undefined;
31
- }[] | undefined;
32
- }, {
33
- question: string;
34
- file_attachments?: {
35
- path: string;
36
- start_line?: number | undefined;
37
- end_line?: number | undefined;
38
- description?: string | undefined;
39
- }[] | undefined;
40
- }>, "many">;
41
- };
42
6
  export declare const deepResearchParamsSchema: z.ZodObject<{
43
7
  questions: z.ZodArray<z.ZodObject<{
44
8
  question: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"deep-research.d.ts","sourceRoot":"","sources":["../../src/schemas/deep-research.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoBxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCnC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAoC,CAAC;AAC1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"deep-research.d.ts","sourceRoot":"","sources":["../../src/schemas/deep-research.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4OxB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAoC,CAAC;AAC1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -1,59 +1,224 @@
1
1
  /**
2
2
  * Deep research schema - batch research with dynamic token allocation
3
+ * Enhanced with comprehensive prompting for bugs, programming questions, and general research
3
4
  */
4
5
  import { z } from 'zod';
6
+ // File attachment schema with comprehensive descriptions to guide LLM usage
7
+ const fileAttachmentSchema = z.object({
8
+ path: z
9
+ .string({ required_error: 'deep_research: File path is required' })
10
+ .min(1, { message: 'deep_research: File path cannot be empty' })
11
+ .describe(`**[REQUIRED] Absolute file path to attach.**
12
+
13
+ ⚠️ **YOU MUST USE ABSOLUTE PATHS** - e.g., "/Users/john/project/src/utils/auth.ts" NOT "src/utils/auth.ts"
14
+
15
+ The file will be read from the filesystem and included as context for the research question. This is CRITICAL for:
16
+ - Bug investigations (attach the failing code)
17
+ - Code reviews (attach the code to review)
18
+ - Refactoring questions (attach current implementation)
19
+ - Architecture decisions (attach relevant modules)
20
+ - Performance issues (attach the slow code path)
21
+
22
+ **IMPORTANT:** Always use the full absolute path as shown in your IDE or terminal.`),
23
+ start_line: z
24
+ .number({ invalid_type_error: 'deep_research: start_line must be a number' })
25
+ .int({ message: 'deep_research: start_line must be an integer' })
26
+ .positive({ message: 'deep_research: start_line must be a positive integer (1-indexed)' })
27
+ .optional()
28
+ .describe(`**[OPTIONAL] Start line number (1-indexed).**
29
+
30
+ Use this to focus on a specific section of a large file. If omitted, reads from line 1.
31
+ Example: start_line=50 with end_line=100 reads lines 50-100 only.`),
32
+ end_line: z
33
+ .number({ invalid_type_error: 'deep_research: end_line must be a number' })
34
+ .int({ message: 'deep_research: end_line must be an integer' })
35
+ .positive({ message: 'deep_research: end_line must be a positive integer (1-indexed)' })
36
+ .optional()
37
+ .describe(`**[OPTIONAL] End line number (1-indexed).**
38
+
39
+ Use this to limit the scope to relevant code sections. If omitted, reads to end of file.
40
+ For large files (>500 lines), consider specifying a range to focus the research.`),
41
+ description: z
42
+ .string()
43
+ .optional()
44
+ .describe(`**[HIGHLY RECOMMENDED] Comprehensive description of why this file is attached and what to focus on.**
45
+
46
+ ⚠️ **THIS IS CRITICAL FOR EFFECTIVE RESEARCH.** Write a detailed description explaining:
47
+
48
+ 1. **What this file is:** "This is the main authentication middleware that handles JWT validation"
49
+ 2. **Why it's relevant:** "The bug occurs when tokens expire during long-running requests"
50
+ 3. **What to focus on:** "Pay attention to the refreshToken() function on lines 45-80"
51
+ 4. **Known issues/context:** "We suspect the race condition happens in the async validation"
52
+ 5. **Related files:** "This interacts with /src/services/token-service.ts for token refresh"
53
+
54
+ **GOOD EXAMPLE:**
55
+ "This is our Redis caching layer (cache-service.ts). The bug manifests as stale data being returned after cache invalidation. Focus on the invalidatePattern() method (lines 120-150) and how it interacts with the pub/sub mechanism. We're using Redis Cluster and suspect the issue is related to cross-node invalidation timing."
56
+
57
+ **BAD EXAMPLE:**
58
+ "cache file" ← Too vague, research will be unfocused`),
59
+ });
60
+ // Research question schema with structured template guidance
5
61
  const researchQuestionSchema = z.object({
6
62
  question: z
7
- .string()
8
- .min(10, 'Research question must be at least 10 characters')
9
- .describe('A specific research question with context, scope, and what you need answered.'),
63
+ .string({ required_error: 'deep_research: Question is required' })
64
+ .min(10, { message: 'deep_research: Question must be at least 10 characters' })
65
+ .describe(`**[REQUIRED] Your research question - MUST follow this structured template:**
66
+
67
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
68
+ 📋 **STRUCTURED QUESTION TEMPLATE** (You MUST use this format)
69
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
70
+
71
+ **1. 🎯 WHAT I NEED:**
72
+ [Clearly state what you're trying to achieve, solve, or understand]
73
+
74
+ **2. 🤔 WHY I'M RESEARCHING THIS:**
75
+ [Explain the context - what decision does this inform? What problem are you solving?]
76
+
77
+ **3. 📚 WHAT I ALREADY KNOW:**
78
+ [Share your current understanding so research fills gaps, not repeats basics]
79
+
80
+ **4. 🔧 HOW I PLAN TO USE THIS:**
81
+ [Describe the practical application - implementation, debugging, architecture, etc.]
82
+
83
+ **5. ❓ SPECIFIC QUESTIONS (2-5):**
84
+ - Question 1: [Specific, pointed question]
85
+ - Question 2: [Another specific question]
86
+ - Question 3: [etc.]
87
+
88
+ **6. 🌐 PRIORITY SOURCES (optional):**
89
+ [Sites/docs to prioritize: "Prefer official React docs, GitHub issues, Stack Overflow"]
90
+
91
+ **7. ⚡ PRIORITY INFO (optional):**
92
+ [What matters most: "Focus on performance implications" or "Prioritize security best practices"]
93
+
94
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
95
+
96
+ **EXAMPLE FOR BUG INVESTIGATION:**
97
+ "🎯 WHAT I NEED: Debug why our WebSocket connections drop after exactly 60 seconds of inactivity.
98
+
99
+ 🤔 WHY: Production users are losing real-time updates, causing data sync issues and support tickets.
100
+
101
+ 📚 WHAT I KNOW: We use Socket.io v4.6 with Redis adapter. The 60s timeout suggests a proxy/load balancer issue, but we've checked nginx configs.
102
+
103
+ 🔧 HOW I'LL USE THIS: Implement the fix in our connection-manager.ts (attached) and update our deployment configs.
104
+
105
+ ❓ SPECIFIC QUESTIONS:
106
+ 1. What are common causes of exactly 60-second WebSocket timeouts?
107
+ 2. How should Socket.io heartbeat/ping intervals be configured to prevent this?
108
+ 3. Are there AWS ALB-specific settings we need to consider?
109
+ 4. How do other production apps handle WebSocket keep-alive?
110
+
111
+ 🌐 PRIORITY: Socket.io official docs, AWS documentation, GitHub issues with similar problems
112
+
113
+ ⚡ FOCUS: Production-ready solutions, not development workarounds"
114
+
115
+ **EXAMPLE FOR ARCHITECTURE RESEARCH:**
116
+ "🎯 WHAT I NEED: Best practices for implementing CQRS pattern with Event Sourcing in Node.js/TypeScript.
117
+
118
+ 🤔 WHY: Our monolithic API is hitting scaling limits. We need to separate read/write paths for our order processing system.
119
+
120
+ 📚 WHAT I KNOW: Familiar with basic event-driven architecture, used RabbitMQ before. New to full CQRS/ES implementation.
121
+
122
+ 🔧 HOW I'LL USE THIS: Design the new order-service architecture, select appropriate libraries, plan migration strategy.
123
+
124
+ ❓ SPECIFIC QUESTIONS:
125
+ 1. What are the recommended Node.js libraries for CQRS/ES? (Pros/cons of each)
126
+ 2. How should we handle eventual consistency in read models?
127
+ 3. What's the best event store for our scale (~10k events/day)?
128
+ 4. How do we handle schema evolution for events over time?
129
+ 5. What are common pitfalls teams encounter when adopting CQRS/ES?
130
+
131
+ 🌐 PRIORITY: Microsoft docs (they coined CQRS), Martin Fowler, real-world case studies
132
+
133
+ ⚡ FOCUS: Production patterns, not theoretical explanations. Include code examples."`),
10
134
  file_attachments: z
11
- .array(z.object({
12
- path: z.string().describe('File path (absolute or relative)'),
13
- start_line: z.number().int().positive().optional().describe('Start line (1-indexed)'),
14
- end_line: z.number().int().positive().optional().describe('End line (1-indexed)'),
15
- description: z.string().optional().describe('What to focus on'),
16
- }))
135
+ .array(fileAttachmentSchema)
17
136
  .optional()
18
- .describe('Optional file attachments for this specific question'),
19
- });
20
- export const deepResearchParamsShape = {
21
- questions: z
22
- .array(researchQuestionSchema)
23
- .min(1, 'At least one research question required, but you should keep it around 6-7 at each round')
24
- .max(10, 'Maximum 10 research questions per batch')
25
- .describe(`**BATCH RESEARCH (1-10 questions) with dynamic token allocation.**
137
+ .describe(`**[CRITICAL FOR BUGS/CODE QUESTIONS] File attachments to include as research context.**
26
138
 
27
- **TOKEN BUDGET:** 32,000 tokens distributed across all questions:
28
- - 1 question: 32,000 tokens (maximum depth)
29
- - 2-3 questions: ~10-16K tokens/question (deep dive, recommended for related topics)
30
- - 5-7 questions: ~4-6K tokens/question (balanced breadth, ideal for domain exploration)
31
- - 8-10 questions: ~3-4K tokens/question (quick multi-topic scan)
139
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
140
+ ⚠️ **YOU MUST ATTACH FILES WHEN:**
141
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
32
142
 
33
- **EACH QUESTION SHOULD INCLUDE:**
34
- 1. **Topic & Why:** What you're researching and what decision it informs
35
- 2. **Your Understanding:** What you know (so it fills gaps, not repeats)
36
- 3. **Scope:** Depth needed, format preferred, examples wanted
37
- 4. **Specific Questions:** 2-5 pointed questions you need answered
38
-
39
- **BEST PRACTICES:**
40
- - Use 2-3 questions for deep dives on related topics (recommended)
41
- - Use 5-7 questions for broad research across a domain
42
- - Use 8-10 questions for rapid multi-topic scanning
43
- - Group related questions together for coherent research
44
- - More questions = broader coverage but less depth per topic
45
-
46
- **EXAMPLE:**
143
+ **MANDATORY file attachment scenarios:**
144
+ - 🐛 **Bug investigation** Attach the buggy code file(s)
145
+ - 🔍 **Code review** Attach the code to be reviewed
146
+ - ♻️ **Refactoring** Attach current implementation
147
+ - 🏗️ **Architecture questions about YOUR code** Attach relevant modules
148
+ - ⚡ **Performance issues** → Attach the slow code paths
149
+ - 🔒 **Security review** → Attach the security-sensitive code
150
+ - 🧪 **Testing questions** Attach both the code AND test files
151
+ - 🔗 **Integration issues** Attach files from both sides of the integration
152
+
153
+ **File attachments NOT needed for:**
154
+ - General concept questions ("What is CQRS?")
155
+ - Technology comparisons ("React vs Vue")
156
+ - Best practices research (unless about your specific code)
157
+ - Documentation lookups
158
+
159
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
160
+ 📎 **HOW TO ATTACH FILES:**
161
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
162
+
163
+ **Each attachment requires:**
164
+ 1. \`path\` (REQUIRED): **Absolute path** like "/Users/dev/project/src/auth.ts"
165
+ 2. \`start_line\` (optional): Focus on specific section
166
+ 3. \`end_line\` (optional): Limit scope for large files
167
+ 4. \`description\` (HIGHLY RECOMMENDED): Explain what this file is and why it matters
168
+
169
+ **EXAMPLE - Bug with multiple related files:**
47
170
  \`\`\`json
48
171
  {
49
- "questions": [
50
- { "question": "What are best practices for MCP server authentication in TypeScript? Cover OAuth2, API keys, session management. Include code examples." },
51
- { "question": "How do production MCP servers handle rate limiting and error recovery? Looking for patterns from Anthropic, Microsoft, and community servers." }
172
+ "question": "🎯 WHAT I NEED: Fix the race condition in our order processing...",
173
+ "file_attachments": [
174
+ {
175
+ "path": "/Users/dev/ecommerce/src/services/order-processor.ts",
176
+ "description": "Main order processing service. The race condition occurs in processOrder() when two requests hit simultaneously. Lines 45-120 contain the critical section."
177
+ },
178
+ {
179
+ "path": "/Users/dev/ecommerce/src/repositories/inventory-repo.ts",
180
+ "start_line": 30,
181
+ "end_line": 80,
182
+ "description": "Inventory repository - the decrementStock() method (lines 30-80) is called by order-processor and we suspect it's not properly locked."
183
+ },
184
+ {
185
+ "path": "/Users/dev/ecommerce/src/utils/db-transaction.ts",
186
+ "description": "Our transaction wrapper utility. Need to verify if it properly handles concurrent transactions."
187
+ }
52
188
  ]
53
189
  }
54
190
  \`\`\`
55
191
 
56
- Aim for 2-5 questions for optimal balance. Each question runs in parallel.`),
192
+ **Attach as many files as needed for complete context - there is no limit!**`),
193
+ });
194
+ // Shape object for external consumers who need individual field schemas
195
+ const deepResearchParamsShape = {
196
+ questions: z
197
+ .array(researchQuestionSchema, {
198
+ required_error: 'deep_research: Questions array is required',
199
+ invalid_type_error: 'deep_research: Questions must be an array'
200
+ })
201
+ .min(1, { message: 'deep_research: At least 1 question is required (recommend 2-7 for optimal depth)' })
202
+ .max(10, { message: 'deep_research: Maximum 10 questions allowed per batch' })
203
+ .describe(`**Batch deep research (2-10 questions) with dynamic token allocation.**
204
+
205
+ **TOKEN BUDGET:** 32,000 tokens distributed across all questions:
206
+ - 2 questions: 16,000 tokens/question (deep dive)
207
+ - 5 questions: 6,400 tokens/question (balanced)
208
+ - 10 questions: 3,200 tokens/question (rapid multi-topic)
209
+
210
+ **WHEN TO USE:**
211
+ - Need multi-perspective analysis on related topics
212
+ - Researching a domain from multiple angles
213
+ - Validating understanding across different aspects
214
+ - Comparing approaches/technologies side-by-side
215
+
216
+ **EACH QUESTION SHOULD INCLUDE:**
217
+ - Topic & context (what decision it informs)
218
+ - Your current understanding (to fill gaps)
219
+ - Specific sub-questions (2-5 per topic)
220
+
221
+ **USE:** Maximize question count for comprehensive coverage. All questions run in parallel. Group related questions for coherent research.`),
57
222
  };
58
223
  export const deepResearchParamsSchema = z.object(deepResearchParamsShape);
59
224
  //# sourceMappingURL=deep-research.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deep-research.js","sourceRoot":"","sources":["../../src/schemas/deep-research.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,EAAE,EAAE,kDAAkD,CAAC;SAC3D,QAAQ,CAAC,+EAA+E,CAAC;IAC5F,gBAAgB,EAAE,CAAC;SAChB,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACrF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACjF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAChE,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,sBAAsB,CAAC;SAC7B,GAAG,CAAC,CAAC,EAAE,0FAA0F,CAAC;SAClG,GAAG,CAAC,EAAE,EAAE,yCAAyC,CAAC;SAClD,QAAQ,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2EA+BqE,CACtE;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"deep-research.js","sourceRoot":"","sources":["../../src/schemas/deep-research.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,4EAA4E;AAC5E,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC;SACJ,MAAM,CAAC,EAAE,cAAc,EAAE,sCAAsC,EAAE,CAAC;SAClE,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC;SAC/D,QAAQ,CACP;;;;;;;;;;;mFAW6E,CAC9E;IACH,UAAU,EAAE,CAAC;SACV,MAAM,CAAC,EAAE,kBAAkB,EAAE,4CAA4C,EAAE,CAAC;SAC5E,GAAG,CAAC,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;SAChE,QAAQ,CAAC,EAAE,OAAO,EAAE,kEAAkE,EAAE,CAAC;SACzF,QAAQ,EAAE;SACV,QAAQ,CACP;;;kEAG4D,CAC7D;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC,EAAE,kBAAkB,EAAE,0CAA0C,EAAE,CAAC;SAC1E,GAAG,CAAC,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;SAC9D,QAAQ,CAAC,EAAE,OAAO,EAAE,gEAAgE,EAAE,CAAC;SACvF,QAAQ,EAAE;SACV,QAAQ,CACP;;;iFAG2E,CAC5E;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP;;;;;;;;;;;;;;qDAc+C,CAChD;CACJ,CAAC,CAAC;AAEH,6DAA6D;AAC7D,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC,EAAE,cAAc,EAAE,qCAAqC,EAAE,CAAC;SACjE,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,wDAAwD,EAAE,CAAC;SAC9E,QAAQ,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFAoE8E,CAC/E;IACH,gBAAgB,EAAE,CAAC;SAChB,KAAK,CAAC,oBAAoB,CAAC;SAC3B,QAAQ,EAAE;SACV,QAAQ,CACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAuDuE,CACxE;CACJ,CAAC,CAAC;AAEH,wEAAwE;AACxE,MAAM,uBAAuB,GAAG;IAC9B,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,sBAAsB,EAAE;QAC7B,cAAc,EAAE,4CAA4C;QAC5D,kBAAkB,EAAE,2CAA2C;KAChE,CAAC;SACD,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,kFAAkF,EAAE,CAAC;SACvG,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC;SAC7E,QAAQ,CACP;;;;;;;;;;;;;;;;;;2IAkBqI,CACtI;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC"}
@@ -1,12 +1,6 @@
1
1
  import { z } from 'zod';
2
- export declare const scrapeLinksParamsShape: {
3
- urls: z.ZodArray<z.ZodString, "many">;
4
- timeout: z.ZodDefault<z.ZodNumber>;
5
- use_llm: z.ZodDefault<z.ZodBoolean>;
6
- what_to_extract: z.ZodOptional<z.ZodString>;
7
- };
8
2
  export declare const scrapeLinksParamsSchema: z.ZodObject<{
9
- urls: z.ZodArray<z.ZodString, "many">;
3
+ urls: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
10
4
  timeout: z.ZodDefault<z.ZodNumber>;
11
5
  use_llm: z.ZodDefault<z.ZodBoolean>;
12
6
  what_to_extract: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"scrape-links.d.ts","sourceRoot":"","sources":["../../src/schemas/scrape-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,sBAAsB;;;;;CAqBlC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAAmC,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAGxE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH"}
1
+ {"version":3,"file":"scrape-links.d.ts","sourceRoot":"","sources":["../../src/schemas/scrape-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsCxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAAmC,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAGxE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH"}