@stackguide/mcp-server 3.3.0 → 3.8.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 (137) hide show
  1. package/README.md +259 -10
  2. package/dist/config/persistence.d.ts +16 -0
  3. package/dist/config/persistence.d.ts.map +1 -1
  4. package/dist/config/persistence.js +53 -0
  5. package/dist/config/persistence.js.map +1 -1
  6. package/dist/handlers/config.d.ts +1 -8
  7. package/dist/handlers/config.d.ts.map +1 -1
  8. package/dist/handlers/config.js +7 -1
  9. package/dist/handlers/config.js.map +1 -1
  10. package/dist/handlers/context.d.ts +1 -5
  11. package/dist/handlers/context.d.ts.map +1 -1
  12. package/dist/handlers/context.js +7 -1
  13. package/dist/handlers/context.js.map +1 -1
  14. package/dist/handlers/cursor.d.ts +1 -7
  15. package/dist/handlers/cursor.d.ts.map +1 -1
  16. package/dist/handlers/cursor.js +7 -1
  17. package/dist/handlers/cursor.js.map +1 -1
  18. package/dist/handlers/custom-rule.d.ts +1 -11
  19. package/dist/handlers/custom-rule.d.ts.map +1 -1
  20. package/dist/handlers/custom-rule.js +7 -1
  21. package/dist/handlers/custom-rule.js.map +1 -1
  22. package/dist/handlers/docs.d.ts +1 -8
  23. package/dist/handlers/docs.d.ts.map +1 -1
  24. package/dist/handlers/docs.js +7 -1
  25. package/dist/handlers/docs.js.map +1 -1
  26. package/dist/handlers/generate.d.ts +1 -13
  27. package/dist/handlers/generate.d.ts.map +1 -1
  28. package/dist/handlers/generate.js +6 -3
  29. package/dist/handlers/generate.js.map +1 -1
  30. package/dist/handlers/health.d.ts +1 -8
  31. package/dist/handlers/health.d.ts.map +1 -1
  32. package/dist/handlers/health.js +11 -3
  33. package/dist/handlers/health.js.map +1 -1
  34. package/dist/handlers/help.d.ts +1 -5
  35. package/dist/handlers/help.d.ts.map +1 -1
  36. package/dist/handlers/help.js +7 -1
  37. package/dist/handlers/help.js.map +1 -1
  38. package/dist/handlers/knowledge.d.ts +1 -8
  39. package/dist/handlers/knowledge.d.ts.map +1 -1
  40. package/dist/handlers/knowledge.js +7 -1
  41. package/dist/handlers/knowledge.js.map +1 -1
  42. package/dist/handlers/prompts.d.ts +31 -0
  43. package/dist/handlers/prompts.d.ts.map +1 -0
  44. package/dist/handlers/prompts.js +236 -0
  45. package/dist/handlers/prompts.js.map +1 -0
  46. package/dist/handlers/resources.d.ts +27 -0
  47. package/dist/handlers/resources.d.ts.map +1 -0
  48. package/dist/handlers/resources.js +210 -0
  49. package/dist/handlers/resources.js.map +1 -0
  50. package/dist/handlers/review.d.ts.map +1 -1
  51. package/dist/handlers/review.js +45 -4
  52. package/dist/handlers/review.js.map +1 -1
  53. package/dist/handlers/rules.d.ts +1 -9
  54. package/dist/handlers/rules.d.ts.map +1 -1
  55. package/dist/handlers/rules.js +7 -1
  56. package/dist/handlers/rules.js.map +1 -1
  57. package/dist/index.d.ts +4 -2
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +29 -419
  60. package/dist/index.js.map +1 -1
  61. package/dist/router/index.d.ts +69 -0
  62. package/dist/router/index.d.ts.map +1 -0
  63. package/dist/router/index.js +151 -0
  64. package/dist/router/index.js.map +1 -0
  65. package/dist/services/ast/analyzer.d.ts +55 -0
  66. package/dist/services/ast/analyzer.d.ts.map +1 -0
  67. package/dist/services/ast/analyzer.js +268 -0
  68. package/dist/services/ast/analyzer.js.map +1 -0
  69. package/dist/services/ast/index.d.ts +10 -0
  70. package/dist/services/ast/index.d.ts.map +1 -0
  71. package/dist/services/ast/index.js +12 -0
  72. package/dist/services/ast/index.js.map +1 -0
  73. package/dist/services/ast/rules.d.ts +13 -0
  74. package/dist/services/ast/rules.d.ts.map +1 -0
  75. package/dist/services/ast/rules.js +358 -0
  76. package/dist/services/ast/rules.js.map +1 -0
  77. package/dist/services/ast/treeSitterParser.d.ts +54 -0
  78. package/dist/services/ast/treeSitterParser.d.ts.map +1 -0
  79. package/dist/services/ast/treeSitterParser.js +394 -0
  80. package/dist/services/ast/treeSitterParser.js.map +1 -0
  81. package/dist/services/ast/types.d.ts +167 -0
  82. package/dist/services/ast/types.d.ts.map +1 -0
  83. package/dist/services/ast/types.js +35 -0
  84. package/dist/services/ast/types.js.map +1 -0
  85. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  86. package/dist/services/codeAnalyzer.js +43 -3
  87. package/dist/services/codeAnalyzer.js.map +1 -1
  88. package/dist/services/httpClient.d.ts +45 -0
  89. package/dist/services/httpClient.d.ts.map +1 -0
  90. package/dist/services/httpClient.js +309 -0
  91. package/dist/services/httpClient.js.map +1 -0
  92. package/dist/services/intelligence/projectFs.d.ts +11 -0
  93. package/dist/services/intelligence/projectFs.d.ts.map +1 -0
  94. package/dist/services/intelligence/projectFs.js +30 -0
  95. package/dist/services/intelligence/projectFs.js.map +1 -0
  96. package/dist/services/projectFs.d.ts +85 -0
  97. package/dist/services/projectFs.d.ts.map +1 -0
  98. package/dist/services/projectFs.js +287 -0
  99. package/dist/services/projectFs.js.map +1 -0
  100. package/dist/services/rulesEngine.d.ts +255 -0
  101. package/dist/services/rulesEngine.d.ts.map +1 -0
  102. package/dist/services/rulesEngine.js +523 -0
  103. package/dist/services/rulesEngine.js.map +1 -0
  104. package/dist/services/webDocumentation.d.ts +11 -0
  105. package/dist/services/webDocumentation.d.ts.map +1 -1
  106. package/dist/services/webDocumentation.js +231 -27
  107. package/dist/services/webDocumentation.js.map +1 -1
  108. package/dist/storage/index.d.ts +7 -0
  109. package/dist/storage/index.d.ts.map +1 -0
  110. package/dist/storage/index.js +7 -0
  111. package/dist/storage/index.js.map +1 -0
  112. package/dist/storage/sqlite.d.ts +92 -0
  113. package/dist/storage/sqlite.d.ts.map +1 -0
  114. package/dist/storage/sqlite.js +471 -0
  115. package/dist/storage/sqlite.js.map +1 -0
  116. package/dist/storage/types.d.ts +147 -0
  117. package/dist/storage/types.d.ts.map +1 -0
  118. package/dist/storage/types.js +13 -0
  119. package/dist/storage/types.js.map +1 -0
  120. package/dist/utils/logger.d.ts +11 -2
  121. package/dist/utils/logger.d.ts.map +1 -1
  122. package/dist/utils/logger.js +30 -2
  123. package/dist/utils/logger.js.map +1 -1
  124. package/dist/utils/safeFetch.d.ts +12 -0
  125. package/dist/utils/safeFetch.d.ts.map +1 -0
  126. package/dist/utils/safeFetch.js +107 -0
  127. package/dist/utils/safeFetch.js.map +1 -0
  128. package/dist/utils/validation.d.ts +1 -1
  129. package/dist/validation/index.d.ts +8 -0
  130. package/dist/validation/index.d.ts.map +1 -0
  131. package/dist/validation/index.js +19 -0
  132. package/dist/validation/index.js.map +1 -0
  133. package/dist/validation/schemas.d.ts +346 -0
  134. package/dist/validation/schemas.d.ts.map +1 -0
  135. package/dist/validation/schemas.js +256 -0
  136. package/dist/validation/schemas.js.map +1 -0
  137. package/package.json +9 -2
package/README.md CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  Dynamic context loading for AI coding assistants. Works with **Cursor** and **GitHub Copilot**.
4
4
 
5
- ## Quick Start
5
+ [![Version](https://img.shields.io/badge/version-3.7.0-blue.svg)](https://github.com/stackguide/mcp-server)
6
+ [![Tests](https://img.shields.io/badge/tests-659%20passing-green.svg)](./tests)
7
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)
8
+
9
+ ## 🚀 Quick Start
6
10
 
7
11
  **Cursor** (`.cursor/mcp.json`):
8
12
  ```json
@@ -18,18 +22,19 @@ Dynamic context loading for AI coding assistants. Works with **Cursor** and **Gi
18
22
 
19
23
  **VS Code** (`.vscode/mcp.json`): Same config as above.
20
24
 
21
- ## Usage
25
+ ## 💬 Usage
22
26
 
23
27
  Just talk naturally:
24
28
 
25
29
  - *"Set up my project"* → Auto-configures with interactive wizard
26
- - *"Review my code"* → Analyzes with Quick Fix suggestions
30
+ - *"Review my code"* → Analyzes with AST-powered Quick Fixes
27
31
  - *"Generate a component"* → Creates boilerplate code
28
32
  - *"Check project health"* → Returns health score (A-F)
29
- - *"Analyze my project"* → **NEW!** Auto-configuration intelligence
33
+ - *"Analyze my project"* → Auto-configuration intelligence
30
34
  - *"Browse React rules"* → Shows community rules
35
+ - *"Configure rules"* → **NEW!** Customize analysis rules
31
36
 
32
- ## Tools (13 total)
37
+ ## 🛠️ Tools (13 total)
33
38
 
34
39
  ### Core Tools
35
40
  | Tool | Description | Example |
@@ -108,6 +113,149 @@ Setup now provides tailored recommendations:
108
113
  }
109
114
  ```
110
115
 
116
+ ## 🆕 New in v3.7.0: Configurable Rules Engine
117
+
118
+ ### Custom Rules CRUD
119
+ Create, update, delete, and manage custom rules with full persistence:
120
+
121
+ ```bash
122
+ # Create custom rule
123
+ rules action:"create" rule:{"id":"MY-001", "name":"Custom Rule", "description":"...", "severity":"warning", "pattern":"console\\.log"}
124
+
125
+ # Update rule
126
+ rules action:"update" ruleId:"MY-001" updates:{"severity":"error"}
127
+
128
+ # Delete rule
129
+ rules action:"delete" ruleId:"MY-001"
130
+
131
+ # List all rules (builtin + custom)
132
+ rules action:"list" category:"security"
133
+
134
+ # Import/Export rules
135
+ rules action:"export" format:"json"
136
+ rules action:"import" rules:[...]
137
+ ```
138
+
139
+ ### Rule Overrides
140
+ Override builtin rule behavior without modifying them:
141
+
142
+ ```bash
143
+ # Disable a rule
144
+ rules action:"override" ruleId:"TS-SEC001" override:{"enabled":false}
145
+
146
+ # Change severity
147
+ rules action:"override" ruleId:"TS-PERF002" override:{"severity":"error"}
148
+
149
+ # Custom message
150
+ rules action:"override" ruleId:"TS-BP001" override:{"customMessage":"Use arrow functions in this project"}
151
+
152
+ # File-specific overrides
153
+ rules action:"override" ruleId:"TS-SEC002" override:{"filePatterns":["!**/tests/**"]}
154
+
155
+ # Remove override
156
+ rules action:"clearOverride" ruleId:"TS-SEC001"
157
+ ```
158
+
159
+ ### Rule Settings
160
+ Configure global rule behavior:
161
+
162
+ ```bash
163
+ # Get current settings
164
+ rules action:"settings"
165
+
166
+ # Update settings
167
+ rules action:"updateSettings" settings:{"enableBuiltin":true, "enableCustom":true, "defaultSeverity":"warning"}
168
+ ```
169
+
170
+ ---
171
+
172
+ ## 🆕 New in v3.6.0: Input Validation (Zod)
173
+
174
+ All tool inputs are now validated with Zod schemas:
175
+
176
+ - **Type-safe inputs**: All parameters are validated against schemas
177
+ - **Helpful error messages**: Clear validation errors with path information
178
+ - **Path sanitization**: Prevents path traversal attacks
179
+ - **Automatic sanitization**: Sensitive data is masked in logs
180
+
181
+ ```typescript
182
+ // Example validation error
183
+ {
184
+ "success": false,
185
+ "error": "Validation failed",
186
+ "issues": [
187
+ { "path": ["file"], "message": "Required" },
188
+ { "path": ["focus"], "message": "Invalid enum value. Expected 'security' | 'performance' | 'best-practices'" }
189
+ ]
190
+ }
191
+ ```
192
+
193
+ ---
194
+
195
+ ## 🆕 New in v3.5.0: AST-Powered Analysis (Tree-sitter)
196
+
197
+ ### Real Semantic Code Analysis
198
+ Code review now uses tree-sitter for accurate AST-based analysis:
199
+
200
+ ```bash
201
+ review file:"src/index.ts" focus:"security"
202
+ ```
203
+
204
+ **Supported Languages**: TypeScript, JavaScript, Python, Go, Rust
205
+
206
+ **Analysis Categories**:
207
+ - 🔒 **Security**: eval detection, SQL injection, XSS, hardcoded secrets
208
+ - ⚡ **Performance**: nested loops, inefficient operations
209
+ - ✨ **Best Practices**: any usage, console.log in production, unused vars
210
+ - 🏗️ **Maintainability**: function complexity, file length
211
+
212
+ **Code Metrics**:
213
+ ```json
214
+ {
215
+ "metrics": {
216
+ "linesOfCode": 150,
217
+ "functions": 12,
218
+ "classes": 3,
219
+ "imports": 8,
220
+ "exports": 5,
221
+ "complexity": 24,
222
+ "maxNesting": 4
223
+ }
224
+ }
225
+ ```
226
+
227
+ ---
228
+
229
+ ## 🆕 New in v3.4.0: Architecture Improvements
230
+
231
+ ### SQLite Persistence
232
+ All configuration now persists across sessions:
233
+
234
+ ```bash
235
+ config action:"save" name:"my-project"
236
+ config action:"load" name:"my-project"
237
+ config action:"list"
238
+ config action:"delete" name:"my-project"
239
+ ```
240
+
241
+ ### Real Filesystem Access
242
+ Analyze actual project files:
243
+
244
+ ```bash
245
+ analyze action:"full" path:"./src"
246
+ health detailed:true
247
+ ```
248
+
249
+ ### HTTP Client with Caching
250
+ Rate-limited API calls with automatic caching:
251
+
252
+ ```bash
253
+ docs action:"fetch" url:"https://react.dev/reference/react"
254
+ cursor action:"browse" query:"nextjs"
255
+ ```
256
+
257
+ ---
258
+
111
259
  ## New in v3.3.0: Auto-Configuration Intelligence 🧠
112
260
 
113
261
  ### Project Intelligence Analysis
@@ -159,11 +307,11 @@ Setup now includes quick intelligence analysis:
159
307
  }
160
308
  ```
161
309
 
162
- ## Supported Stacks
310
+ ## 📋 Supported Stacks
163
311
 
164
312
  `python-django` · `python-fastapi` · `python-flask` · `react-node` · `react-typescript` · `vue-node` · `nextjs` · `express` · `nestjs` · `laravel` · `rails` · `golang` · `rust`
165
313
 
166
- ## Examples
314
+ ## 📖 Examples
167
315
 
168
316
  ```bash
169
317
  # Auto-setup with wizard
@@ -172,21 +320,122 @@ setup
172
320
  # Generate React component
173
321
  generate type:"component" name:"Dashboard"
174
322
 
175
- # Review with Quick Fixes
323
+ # Review with AST-powered Quick Fixes
176
324
  review file:"src/App.tsx" focus:"performance"
177
325
 
178
326
  # Check project health
179
327
  health
180
328
 
181
- # NEW: Analyze project intelligence
329
+ # Analyze project intelligence
182
330
  analyze action:"full"
183
331
  analyze action:"generate" configType:"prettier"
184
332
 
185
333
  # Browse and import community rules
186
334
  cursor action:"popular"
187
335
  cursor action:"import" slug:"typescript-best-practices"
336
+
337
+ # Configure rules
338
+ rules action:"list" category:"security"
339
+ rules action:"create" rule:{"id":"MY-001", "name":"No TODO", "pattern":"TODO", "severity":"info"}
340
+ rules action:"override" ruleId:"TS-SEC001" override:{"severity":"error"}
341
+ ```
342
+
343
+ ## 🏗️ Architecture
344
+
345
+ ```
346
+ ┌─────────────────────────────────────────────────────────┐
347
+ │ MCP Server │
348
+ ├─────────────────────────────────────────────────────────┤
349
+ │ Router (handler registration + validation) │
350
+ ├─────────────────────────────────────────────────────────┤
351
+ │ Handlers (setup, review, generate, health, etc.) │
352
+ ├─────────────────────────────────────────────────────────┤
353
+ │ Services Layer │
354
+ │ ├── AST Analysis (tree-sitter multi-language) │
355
+ │ ├── Rules Engine (builtin + custom + overrides) │
356
+ │ ├── Code Analyzer (semantic analysis) │
357
+ │ ├── Rule Manager (data loading) │
358
+ │ └── Auto Detect (project type detection) │
359
+ ├─────────────────────────────────────────────────────────┤
360
+ │ Infrastructure │
361
+ │ ├── Validation (Zod schemas) │
362
+ │ ├── Persistence (SQLite storage) │
363
+ │ ├── ProjectFs (filesystem abstraction) │
364
+ │ └── HttpClient (rate-limited + cached) │
365
+ └─────────────────────────────────────────────────────────┘
366
+ ```
367
+
368
+ ## 🧪 Testing
369
+
370
+ ```bash
371
+ # Run all tests
372
+ npm test
373
+
374
+ # With coverage
375
+ npm run test:coverage
376
+
377
+ # Watch mode
378
+ npm run test:watch
188
379
  ```
189
380
 
190
- ## License
381
+ **Test Statistics**: 659 tests across 35 test files
382
+
383
+ ## 📚 API Reference
384
+
385
+ ### Tool Parameters
386
+
387
+ #### `setup`
388
+ | Parameter | Type | Description |
389
+ |-----------|------|-------------|
390
+ | `type` | string | Project type (optional, auto-detected) |
391
+ | `path` | string | Project path (default: current dir) |
392
+
393
+ #### `review`
394
+ | Parameter | Type | Description |
395
+ |-----------|------|-------------|
396
+ | `file` | string | **Required**. File path to review |
397
+ | `content` | string | File content (optional, read from file) |
398
+ | `focus` | string | `security` \| `performance` \| `best-practices` |
399
+ | `detailed` | boolean | Include code metrics |
400
+
401
+ #### `generate`
402
+ | Parameter | Type | Description |
403
+ |-----------|------|-------------|
404
+ | `type` | string | **Required**. `component` \| `hook` \| `service` \| `test` \| `api` \| `model` \| `util` |
405
+ | `name` | string | **Required**. Name for generated code |
406
+ | `options` | object | Framework-specific options |
407
+
408
+ #### `rules`
409
+ | Parameter | Type | Description |
410
+ |-----------|------|-------------|
411
+ | `action` | string | **Required**. `list` \| `search` \| `get` \| `create` \| `update` \| `delete` \| `override` \| `clearOverride` \| `settings` \| `import` \| `export` |
412
+ | `ruleId` | string | Rule ID (for get/update/delete/override) |
413
+ | `rule` | object | Rule definition (for create) |
414
+ | `override` | object | Override settings |
415
+ | `category` | string | Filter by category |
416
+
417
+ #### `health`
418
+ | Parameter | Type | Description |
419
+ |-----------|------|-------------|
420
+ | `detailed` | boolean | Include category breakdown |
421
+ | `path` | string | Project path |
422
+
423
+ #### `analyze`
424
+ | Parameter | Type | Description |
425
+ |-----------|------|-------------|
426
+ | `action` | string | **Required**. `full` \| `structure` \| `config` \| `dependencies` \| `generate` \| `apply` |
427
+ | `path` | string | Project path |
428
+ | `configType` | string | For generate: `eslint` \| `prettier` \| `tsconfig` |
429
+
430
+ ## 🤝 Contributing
431
+
432
+ 1. Fork the repository
433
+ 2. Create your feature branch (`git checkout -b feature/amazing`)
434
+ 3. Run tests (`npm test`)
435
+ 4. Commit your changes (`git commit -m 'Add amazing feature'`)
436
+ 5. Push to the branch (`git push origin feature/amazing`)
437
+ 6. Open a Pull Request
438
+
439
+ ## 📄 License
191
440
 
192
441
  MIT
@@ -12,4 +12,20 @@ export declare function updateSelectedKnowledge(configId: string, knowledgeIds:
12
12
  export declare function exportConfiguration(id: string): string | null;
13
13
  export declare function importConfiguration(jsonString: string): UserConfiguration | null;
14
14
  export declare function getConfigPath(): string;
15
+ /**
16
+ * Get a value from generic storage
17
+ */
18
+ export declare function getStorageValue<T>(key: string): T | null;
19
+ /**
20
+ * Set a value in generic storage
21
+ */
22
+ export declare function setStorageValue<T>(key: string, value: T): void;
23
+ /**
24
+ * Delete a value from generic storage
25
+ */
26
+ export declare function deleteStorageValue(key: string): boolean;
27
+ /**
28
+ * Check if a key exists in storage
29
+ */
30
+ export declare function hasStorageValue(key: string): boolean;
15
31
  //# sourceMappingURL=persistence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/config/persistence.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAgDlE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,EACxB,aAAa,GAAE,MAAM,EAAO,EAC5B,iBAAiB,GAAE,MAAM,EAAO,GAC/B,iBAAiB,CAmBnB;AAGD,wBAAgB,oBAAoB,IAAI,iBAAiB,EAAE,CAG1D;AAGD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAGzE;AAGD,wBAAgB,sBAAsB,IAAI,iBAAiB,GAAG,IAAI,CAIjE;AAGD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAW3E;AAGD,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAC5D,iBAAiB,GAAG,IAAI,CAc1B;AAGD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAcvD;AAGD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAgBnF;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAGhF;AAGD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAGzF;AAGD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAGD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAoBhF;AAQD,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/config/persistence.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAgDlE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,WAAW,EACxB,aAAa,GAAE,MAAM,EAAO,EAC5B,iBAAiB,GAAE,MAAM,EAAO,GAC/B,iBAAiB,CAmBnB;AAGD,wBAAgB,oBAAoB,IAAI,iBAAiB,EAAE,CAG1D;AAGD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAGzE;AAGD,wBAAgB,sBAAsB,IAAI,iBAAiB,GAAG,IAAI,CAIjE;AAGD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAW3E;AAGD,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAC5D,iBAAiB,GAAG,IAAI,CAc1B;AAGD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAcvD;AAGD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAgBnF;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAGhF;AAGD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAGzF;AAGD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAGD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAoBhF;AAQD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAgCD;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAGxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAI9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGpD"}
@@ -168,4 +168,57 @@ function generateId() {
168
168
  export function getConfigPath() {
169
169
  return CONFIG_DIR;
170
170
  }
171
+ // ============================================================================
172
+ // Generic Storage Functions
173
+ // ============================================================================
174
+ const GENERIC_STORAGE_FILE = join(CONFIG_DIR, 'storage.json');
175
+ function getGenericStorage() {
176
+ ensureConfigDir();
177
+ if (!existsSync(GENERIC_STORAGE_FILE)) {
178
+ return {};
179
+ }
180
+ try {
181
+ const data = readFileSync(GENERIC_STORAGE_FILE, 'utf-8');
182
+ return JSON.parse(data);
183
+ }
184
+ catch {
185
+ return {};
186
+ }
187
+ }
188
+ function saveGenericStorage(storage) {
189
+ ensureConfigDir();
190
+ writeFileSync(GENERIC_STORAGE_FILE, JSON.stringify(storage, null, 2));
191
+ }
192
+ /**
193
+ * Get a value from generic storage
194
+ */
195
+ export function getStorageValue(key) {
196
+ const storage = getGenericStorage();
197
+ return storage[key] ?? null;
198
+ }
199
+ /**
200
+ * Set a value in generic storage
201
+ */
202
+ export function setStorageValue(key, value) {
203
+ const storage = getGenericStorage();
204
+ storage[key] = value;
205
+ saveGenericStorage(storage);
206
+ }
207
+ /**
208
+ * Delete a value from generic storage
209
+ */
210
+ export function deleteStorageValue(key) {
211
+ const storage = getGenericStorage();
212
+ const exists = key in storage;
213
+ delete storage[key];
214
+ saveGenericStorage(storage);
215
+ return exists;
216
+ }
217
+ /**
218
+ * Check if a key exists in storage
219
+ */
220
+ export function hasStorageValue(key) {
221
+ const storage = getGenericStorage();
222
+ return key in storage;
223
+ }
171
224
  //# sourceMappingURL=persistence.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/config/persistence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/config/persistence.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,5 @@
2
2
  * Config handler - save, load, and manage configurations
3
3
  */
4
4
  import { ServerState, ToolResponse } from './types.js';
5
- interface ConfigArgs {
6
- action?: 'save' | 'load' | 'list' | 'delete' | 'export' | 'import';
7
- name?: string;
8
- id?: string;
9
- json?: string;
10
- }
11
- export declare function handleConfig(args: ConfigArgs, state: ServerState): Promise<ToolResponse>;
12
- export {};
5
+ export declare function handleConfig(args: unknown, state: ServerState): Promise<ToolResponse>;
13
6
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/handlers/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAGnF,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CA0FvB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/handlers/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAInF,wBAAsB,YAAY,CAChC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CAgGvB"}
@@ -6,8 +6,14 @@ import * as rulesProvider from '../resources/rulesProvider.js';
6
6
  import * as knowledgeProvider from '../resources/knowledgeProvider.js';
7
7
  import { jsonResponse, textResponse } from './types.js';
8
8
  import { logger } from '../utils/logger.js';
9
+ import { ConfigInputSchema, validate } from '../validation/schemas.js';
9
10
  export async function handleConfig(args, state) {
10
- const { action = 'list', name, id, json } = args;
11
+ // Validate input
12
+ const validation = validate(ConfigInputSchema, args || {});
13
+ if (!validation.success) {
14
+ return textResponse(`Validation error: ${validation.error}`);
15
+ }
16
+ const { action = 'list', name, id, json } = validation.data;
11
17
  logger.debug('Config action', { action, name, id });
12
18
  switch (action) {
13
19
  case 'save': {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/handlers/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/handlers/config.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,5 @@
2
2
  * Context handler - shows current configuration and loaded rules/knowledge
3
3
  */
4
4
  import { ServerState, ToolResponse } from './types.js';
5
- interface ContextArgs {
6
- full?: boolean;
7
- }
8
- export declare function handleContext(args: ContextArgs, state: ServerState): Promise<ToolResponse>;
9
- export {};
5
+ export declare function handleContext(args: unknown, state: ServerState): Promise<ToolResponse>;
10
6
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/handlers/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAGnF,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CAuCvB"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/handlers/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAInF,wBAAsB,aAAa,CACjC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CA6CvB"}
@@ -4,8 +4,14 @@
4
4
  import { SUPPORTED_PROJECTS } from '../config/types.js';
5
5
  import { jsonResponse, textResponse } from './types.js';
6
6
  import { logger } from '../utils/logger.js';
7
+ import { ContextInputSchema, validate } from '../validation/schemas.js';
7
8
  export async function handleContext(args, state) {
8
- const { full = false } = args;
9
+ // Validate input
10
+ const validation = validate(ContextInputSchema, args || {});
11
+ if (!validation.success) {
12
+ return textResponse(`Validation error: ${validation.error}`);
13
+ }
14
+ const { full = false } = validation.data;
9
15
  logger.debug('Context requested', { full });
10
16
  if (!state.activeProjectType) {
11
17
  return jsonResponse({
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handlers/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAA6B,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAM5C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAiB,EACjB,KAAkB;IAElB,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IAE9B,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC;YAClB,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,6CAA6C;SACpD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE5D,IAAI,IAAI,EAAE,CAAC;QACT,sBAAsB;QACtB,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACtC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,MAAM,gBAAgB,GAAG,KAAK,CAAC,eAAe;aAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACtC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,OAAO,YAAY,CACjB,KAAK,OAAO,CAAC,IAAI,yBAAyB,YAAY,qBAAqB,gBAAgB,EAAE,CAC9F,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,KAAK,CAAC,iBAAiB;QACpC,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrF,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7F,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM;QACpC,cAAc,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM;KAC7C,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handlers/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAA6B,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAa,EACb,KAAkB;IAElB,iBAAiB;IACjB,MAAM,UAAU,GAAG,QAAQ,CAAC,kBAAkB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,qBAAqB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;IAEzC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC;YAClB,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,6CAA6C;SACpD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE5D,IAAI,IAAI,EAAE,CAAC;QACT,sBAAsB;QACtB,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACtC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,MAAM,gBAAgB,GAAG,KAAK,CAAC,eAAe;aAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACtC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,OAAO,YAAY,CACjB,KAAK,OAAO,CAAC,IAAI,yBAAyB,YAAY,qBAAqB,gBAAgB,EAAE,CAC9F,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;QAClB,WAAW,EAAE,KAAK,CAAC,iBAAiB;QACpC,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrF,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7F,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM;QACpC,cAAc,EAAE,KAAK,CAAC,eAAe,CAAC,MAAM;KAC7C,CAAC,CAAC;AACL,CAAC"}
@@ -2,11 +2,5 @@
2
2
  * Cursor Directory handler - browse and import community rules
3
3
  */
4
4
  import { ServerState, ToolResponse } from './types.js';
5
- interface CursorArgs {
6
- action?: 'browse' | 'search' | 'popular' | 'import' | 'categories';
7
- query?: string;
8
- slug?: string;
9
- }
10
- export declare function handleCursor(args: CursorArgs, state: ServerState): Promise<ToolResponse>;
11
- export {};
5
+ export declare function handleCursor(args: unknown, state: ServerState): Promise<ToolResponse>;
12
6
  //# sourceMappingURL=cursor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/handlers/cursor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAGnF,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CA8DvB"}
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/handlers/cursor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAInF,wBAAsB,YAAY,CAChC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CAoEvB"}
@@ -5,8 +5,14 @@ import * as cursorDirectory from '../services/cursorDirectory.js';
5
5
  import * as ruleManager from '../services/ruleManager.js';
6
6
  import { jsonResponse, textResponse } from './types.js';
7
7
  import { logger } from '../utils/logger.js';
8
+ import { CursorInputSchema, validate } from '../validation/schemas.js';
8
9
  export async function handleCursor(args, state) {
9
- const { action = 'categories', query, slug } = args;
10
+ // Validate input
11
+ const validation = validate(CursorInputSchema, args || {});
12
+ if (!validation.success) {
13
+ return textResponse(`Validation error: ${validation.error}`);
14
+ }
15
+ const { action = 'categories', query, slug } = validation.data;
10
16
  logger.debug('Cursor action', { action, query, slug });
11
17
  switch (action) {
12
18
  case 'categories': {
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/handlers/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/handlers/cursor.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,6 @@
1
1
  /**
2
2
  * Custom Rule handler - create, update, delete custom rules
3
3
  */
4
- import { RuleCategory } from '../config/types.js';
5
4
  import { ServerState, ToolResponse } from './types.js';
6
- interface CustomRuleArgs {
7
- action?: 'create' | 'update' | 'delete' | 'list' | 'export' | 'import';
8
- name?: string;
9
- content?: string;
10
- category?: RuleCategory;
11
- id?: string;
12
- json?: string;
13
- }
14
- export declare function handleCustomRule(args: CustomRuleArgs, state: ServerState): Promise<ToolResponse>;
15
- export {};
5
+ export declare function handleCustomRule(args: unknown, state: ServerState): Promise<ToolResponse>;
16
6
  //# sourceMappingURL=custom-rule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-rule.d.ts","sourceRoot":"","sources":["../../src/handlers/custom-rule.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAGnF,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CA4EvB"}
1
+ {"version":3,"file":"custom-rule.d.ts","sourceRoot":"","sources":["../../src/handlers/custom-rule.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,YAAY,EAA8B,MAAM,YAAY,CAAC;AAInF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CAkFvB"}
@@ -4,8 +4,14 @@
4
4
  import * as ruleManager from '../services/ruleManager.js';
5
5
  import { jsonResponse, textResponse } from './types.js';
6
6
  import { logger } from '../utils/logger.js';
7
+ import { CustomRuleInputSchema, validate } from '../validation/schemas.js';
7
8
  export async function handleCustomRule(args, state) {
8
- const { action = 'list', name, content, category, id, json } = args;
9
+ // Validate input
10
+ const validation = validate(CustomRuleInputSchema, args || {});
11
+ if (!validation.success) {
12
+ return textResponse(`Validation error: ${validation.error}`);
13
+ }
14
+ const { action = 'list', name, content, category, id, json } = validation.data;
9
15
  const pt = state.activeProjectType || 'react-typescript';
10
16
  logger.debug('Custom rule action', { action, name, id });
11
17
  switch (action) {