@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
@@ -14,9 +14,18 @@ declare class Logger {
14
14
  warn(message: string, context?: Record<string, unknown>): void;
15
15
  error(message: string, context?: Record<string, unknown>): void;
16
16
  /**
17
- * Log tool execution with timing
18
- */
17
+ * Log tool execution with timing
18
+ */
19
19
  tool(toolName: string, args: Record<string, unknown>, startTime?: number): void;
20
+ /**
21
+ * Security audit logging - always logged regardless of level
22
+ * Use for security-relevant events like SSRF blocks, rate limits, auth failures
23
+ */
24
+ audit(event: string, context: Record<string, unknown>): void;
25
+ /**
26
+ * Performance metric logging
27
+ */
28
+ metric(name: string, value: number, unit: string, context?: Record<string, unknown>): void;
20
29
  }
21
30
  export declare const logger: Logger;
22
31
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS3D,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;IAEF,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,GAAG;IAcX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;CAIhF;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS3D,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;IAEF,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,GAAG;IAcX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI/D;;KAEC;IACD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAK/E;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAe5D;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAO3F;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -44,12 +44,40 @@ class Logger {
44
44
  this.log('error', message, context);
45
45
  }
46
46
  /**
47
- * Log tool execution with timing
48
- */
47
+ * Log tool execution with timing
48
+ */
49
49
  tool(toolName, args, startTime) {
50
50
  const duration = startTime ? `${Date.now() - startTime}ms` : undefined;
51
51
  this.info(`Tool: ${toolName}`, { args, duration });
52
52
  }
53
+ /**
54
+ * Security audit logging - always logged regardless of level
55
+ * Use for security-relevant events like SSRF blocks, rate limits, auth failures
56
+ */
57
+ audit(event, context) {
58
+ const entry = {
59
+ timestamp: new Date().toISOString(),
60
+ level: 'warn',
61
+ message: `[AUDIT] ${event}`,
62
+ context: {
63
+ ...context,
64
+ auditType: 'security',
65
+ pid: process.pid
66
+ }
67
+ };
68
+ // Security audits always log regardless of level
69
+ console.error(this.formatEntry(entry));
70
+ }
71
+ /**
72
+ * Performance metric logging
73
+ */
74
+ metric(name, value, unit, context) {
75
+ this.debug(`Metric: ${name}`, {
76
+ value,
77
+ unit,
78
+ ...context
79
+ });
80
+ }
53
81
  }
54
82
  // Singleton instance
55
83
  export const logger = new Logger();
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,MAAM;IACF,KAAK,GAAa,MAAM,CAAC;IAChB,aAAa,GAA6B;QACzD,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;KACT,CAAC;IAEF,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrE,CAAC;IAEO,WAAW,CAAC,KAAe;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,KAAK,CAAC,SAAS,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7F,CAAC;IAEO,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,OAAiC;QAC7E,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO;QAEnC,MAAM,KAAK,GAAa;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,OAAO;YACP,OAAO;SACR,CAAC;QAEF,qEAAqE;QACrE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAiC;QACtD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAiC;QACtD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,QAAgB,EAAE,IAA6B,EAAE,SAAkB;QACtE,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,SAAS,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;CACF;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAEnC,iCAAiC;AACjC,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAc,CAAC;IAC5E,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface SafeFetchOptions {
2
+ /** Hosts explicitly allowed. If empty, no host is allowed. */
3
+ allowedHosts: string[];
4
+ /** Request timeout in milliseconds. Default: 8000. */
5
+ timeoutMs?: number;
6
+ /** Maximum response size in bytes. Default: 2 MB. */
7
+ maxBytes?: number;
8
+ /** Additional fetch init options. */
9
+ fetchOptions?: RequestInit;
10
+ }
11
+ export declare function safeFetch(urlString: string, options: SafeFetchOptions): Promise<Response>;
12
+ //# sourceMappingURL=safeFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeFetch.d.ts","sourceRoot":"","sources":["../../src/utils/safeFetch.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,YAAY,CAAC,EAAE,WAAW,CAAC;CAC5B;AA4CD,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwE/F"}
@@ -0,0 +1,107 @@
1
+ import dns from 'dns';
2
+ import { URL } from 'url';
3
+ const PRIVATE_HOSTS = new Set([
4
+ 'localhost',
5
+ '127.0.0.1',
6
+ '0.0.0.0',
7
+ '::1'
8
+ ]);
9
+ const PRIVATE_IP_PATTERNS = [
10
+ /^10\./,
11
+ /^172\.(1[6-9]|2\d|3[0-1])\./,
12
+ /^192\.168\./,
13
+ /^127\./,
14
+ /^169\.254\./,
15
+ /^0\./,
16
+ /^::1$/,
17
+ /^fc00:/i,
18
+ /^fe80:/i
19
+ ];
20
+ function isPrivateIp(host) {
21
+ if (PRIVATE_HOSTS.has(host))
22
+ return true;
23
+ return PRIVATE_IP_PATTERNS.some((rx) => rx.test(host));
24
+ }
25
+ function hostAllowed(host, allowedHosts) {
26
+ if (allowedHosts.length === 0)
27
+ return false;
28
+ const lower = host.toLowerCase();
29
+ return allowedHosts.some((h) => {
30
+ const target = h.toLowerCase();
31
+ return lower === target || lower.endsWith(`.${target}`);
32
+ });
33
+ }
34
+ async function resolveAll(host) {
35
+ try {
36
+ const records = await dns.promises.lookup(host, { all: true });
37
+ return records.map((r) => r.address);
38
+ }
39
+ catch {
40
+ return [];
41
+ }
42
+ }
43
+ export async function safeFetch(urlString, options) {
44
+ const { allowedHosts, timeoutMs = 8000, maxBytes = 2 * 1024 * 1024, fetchOptions = {} } = options;
45
+ let parsed;
46
+ try {
47
+ parsed = new URL(urlString);
48
+ }
49
+ catch {
50
+ throw new Error('Invalid URL');
51
+ }
52
+ if (!['http:', 'https:'].includes(parsed.protocol)) {
53
+ throw new Error(`Protocol not allowed: ${parsed.protocol}`);
54
+ }
55
+ if (!hostAllowed(parsed.hostname, allowedHosts)) {
56
+ throw new Error(`Host not in allowlist: ${parsed.hostname}`);
57
+ }
58
+ const addresses = await resolveAll(parsed.hostname);
59
+ if (addresses.length === 0) {
60
+ throw new Error('Could not resolve host');
61
+ }
62
+ for (const addr of addresses) {
63
+ if (isPrivateIp(addr)) {
64
+ throw new Error('Target resolves to private or loopback address');
65
+ }
66
+ }
67
+ const controller = new AbortController();
68
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
69
+ const response = await fetch(urlString, {
70
+ redirect: 'manual',
71
+ ...fetchOptions,
72
+ signal: controller.signal,
73
+ }).finally(() => clearTimeout(timer));
74
+ // Reject redirects to avoid SSRF via Location
75
+ if (response.status >= 300 && response.status < 400) {
76
+ const location = response.headers.get('location') || 'unknown';
77
+ throw new Error(`Redirects are blocked (got ${location})`);
78
+ }
79
+ // Enforce size limit by reading stream manually
80
+ const reader = response.body?.getReader();
81
+ if (!reader) {
82
+ return response;
83
+ }
84
+ let bytesRead = 0;
85
+ const chunks = [];
86
+ while (true) {
87
+ const { done, value } = await reader.read();
88
+ if (done)
89
+ break;
90
+ if (value) {
91
+ bytesRead += value.byteLength;
92
+ if (bytesRead > maxBytes) {
93
+ reader.cancel();
94
+ throw new Error(`Response exceeds limit (${maxBytes} bytes)`);
95
+ }
96
+ chunks.push(value);
97
+ }
98
+ }
99
+ const body = Buffer.concat(chunks);
100
+ const res = new Response(body, {
101
+ status: response.status,
102
+ statusText: response.statusText,
103
+ headers: response.headers,
104
+ });
105
+ return res;
106
+ }
107
+ //# sourceMappingURL=safeFetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeFetch.js","sourceRoot":"","sources":["../../src/utils/safeFetch.ts"],"names":[],"mappings":"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"}
@@ -91,8 +91,8 @@ export declare const DocsInputSchema: z.ZodObject<{
91
91
  query?: string | undefined;
92
92
  urls?: string[] | undefined;
93
93
  }, {
94
- url?: string | undefined;
95
94
  action?: "search" | "list" | "get" | "fetch" | "remove" | "suggest" | undefined;
95
+ url?: string | undefined;
96
96
  query?: string | undefined;
97
97
  urls?: string[] | undefined;
98
98
  }>;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Validation Module
3
+ * Centralized input validation for MCP handlers
4
+ * @version 3.6.0
5
+ */
6
+ export { ProjectTypeSchema, SeveritySchema, FilePathSchema, UrlSchema, SafeStringSchema, IdentifierSchema, SetupInputSchema, RulesInputSchema, KnowledgeInputSchema, ReviewInputSchema, ContextInputSchema, DocsInputSchema, CursorInputSchema, ConfigInputSchema, CustomRuleInputSchema, GenerateInputSchema, HealthInputSchema, AnalyzeCodeInputSchema, GetRulesInputSchema, validate, validateOrThrow, withValidation, validateHandlerInput, sanitizeForDisplay, sanitizeForPrompt, sanitizePath, sanitizeIdentifier, HANDLER_SCHEMAS } from './schemas.js';
7
+ export type { ProjectType, Severity, SetupInput, RulesInput, KnowledgeInput, ReviewInput, ContextInput, DocsInput, CursorInput, ConfigInput, CustomRuleInput, GenerateInput, HealthInput, AnalyzeCodeInput, GetRulesInput, ValidationResult } from './schemas.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAGhB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EAGjB,sBAAsB,EACtB,mBAAmB,EAGnB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,oBAAoB,EAGpB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAGlB,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAEV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EACjB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Validation Module
3
+ * Centralized input validation for MCP handlers
4
+ * @version 3.6.0
5
+ */
6
+ export {
7
+ // Common schemas
8
+ ProjectTypeSchema, SeveritySchema, FilePathSchema, UrlSchema, SafeStringSchema, IdentifierSchema,
9
+ // Handler input schemas
10
+ SetupInputSchema, RulesInputSchema, KnowledgeInputSchema, ReviewInputSchema, ContextInputSchema, DocsInputSchema, CursorInputSchema, ConfigInputSchema, CustomRuleInputSchema, GenerateInputSchema, HealthInputSchema,
11
+ // Tool input schemas
12
+ AnalyzeCodeInputSchema, GetRulesInputSchema,
13
+ // Validation utilities
14
+ validate, validateOrThrow, withValidation, validateHandlerInput,
15
+ // Sanitization utilities
16
+ sanitizeForDisplay, sanitizeForPrompt, sanitizePath, sanitizeIdentifier,
17
+ // Schema registry
18
+ HANDLER_SCHEMAS } from './schemas.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO;AACL,iBAAiB;AACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,gBAAgB;AAEhB,wBAAwB;AACxB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB;AAEjB,qBAAqB;AACrB,sBAAsB,EACtB,mBAAmB;AAEnB,uBAAuB;AACvB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,oBAAoB;AAEpB,yBAAyB;AACzB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB;AAElB,kBAAkB;AAClB,eAAe,EAChB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Zod Validation Schemas
3
+ * Centralized input validation for all MCP handlers
4
+ * @version 3.6.0
5
+ */
6
+ import { z } from 'zod';
7
+ /** Project type enum */
8
+ export declare const ProjectTypeSchema: z.ZodEnum<["react-typescript", "react-node", "vue-node", "nextjs", "nestjs", "express", "rails", "laravel", "golang", "rust", "python-fastapi", "python-django", "python-flask", "custom"]>;
9
+ export type ProjectType = z.infer<typeof ProjectTypeSchema>;
10
+ /** Severity level enum */
11
+ export declare const SeveritySchema: z.ZodEnum<["error", "warning", "info", "suggestion"]>;
12
+ export type Severity = z.infer<typeof SeveritySchema>;
13
+ /** File path validation */
14
+ export declare const FilePathSchema: z.ZodEffects<z.ZodString, string, string>;
15
+ /** URL validation */
16
+ export declare const UrlSchema: z.ZodString;
17
+ /** Safe string (no special chars that could cause issues) */
18
+ export declare const SafeStringSchema: z.ZodEffects<z.ZodString, string, string>;
19
+ /** Identifier (alphanumeric + dash/underscore) */
20
+ export declare const IdentifierSchema: z.ZodString;
21
+ /** setup handler input */
22
+ export declare const SetupInputSchema: z.ZodObject<{
23
+ type: z.ZodOptional<z.ZodEnum<["react-typescript", "react-node", "vue-node", "nextjs", "nestjs", "express", "rails", "laravel", "golang", "rust", "python-fastapi", "python-django", "python-flask", "custom"]>>;
24
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
25
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
26
+ type: z.ZodOptional<z.ZodEnum<["react-typescript", "react-node", "vue-node", "nextjs", "nestjs", "express", "rails", "laravel", "golang", "rust", "python-fastapi", "python-django", "python-flask", "custom"]>>;
27
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
28
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
29
+ type: z.ZodOptional<z.ZodEnum<["react-typescript", "react-node", "vue-node", "nextjs", "nestjs", "express", "rails", "laravel", "golang", "rust", "python-fastapi", "python-django", "python-flask", "custom"]>>;
30
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
31
+ }, z.ZodTypeAny, "passthrough">>;
32
+ export type SetupInput = z.infer<typeof SetupInputSchema>;
33
+ /** rules handler input */
34
+ export declare const RulesInputSchema: z.ZodObject<{
35
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get", "select"]>>>;
36
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
37
+ ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
38
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture", "testing"]>>;
39
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
40
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get", "select"]>>>;
41
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
42
+ ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
43
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture", "testing"]>>;
44
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
45
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get", "select"]>>>;
46
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
47
+ ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
48
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture", "testing"]>>;
49
+ }, z.ZodTypeAny, "passthrough">>;
50
+ export type RulesInput = z.infer<typeof RulesInputSchema>;
51
+ /** knowledge handler input */
52
+ export declare const KnowledgeInputSchema: z.ZodObject<{
53
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get"]>>>;
54
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
55
+ category: z.ZodOptional<z.ZodEnum<["patterns", "common-issues", "architecture", "workflows"]>>;
56
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
57
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get"]>>>;
58
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
59
+ category: z.ZodOptional<z.ZodEnum<["patterns", "common-issues", "architecture", "workflows"]>>;
60
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
61
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["list", "search", "get"]>>>;
62
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
63
+ category: z.ZodOptional<z.ZodEnum<["patterns", "common-issues", "architecture", "workflows"]>>;
64
+ }, z.ZodTypeAny, "passthrough">>;
65
+ export type KnowledgeInput = z.infer<typeof KnowledgeInputSchema>;
66
+ /** review handler input */
67
+ export declare const ReviewInputSchema: z.ZodObject<{
68
+ file: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
69
+ url: z.ZodOptional<z.ZodString>;
70
+ project: z.ZodOptional<z.ZodBoolean>;
71
+ focus: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "security", "performance", "architecture", "coding-standards"]>>>;
72
+ incremental: z.ZodOptional<z.ZodBoolean>;
73
+ maxDepth: z.ZodOptional<z.ZodNumber>;
74
+ maxFiles: z.ZodOptional<z.ZodNumber>;
75
+ useCache: z.ZodOptional<z.ZodBoolean>;
76
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
77
+ file: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
78
+ url: z.ZodOptional<z.ZodString>;
79
+ project: z.ZodOptional<z.ZodBoolean>;
80
+ focus: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "security", "performance", "architecture", "coding-standards"]>>>;
81
+ incremental: z.ZodOptional<z.ZodBoolean>;
82
+ maxDepth: z.ZodOptional<z.ZodNumber>;
83
+ maxFiles: z.ZodOptional<z.ZodNumber>;
84
+ useCache: z.ZodOptional<z.ZodBoolean>;
85
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
86
+ file: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
87
+ url: z.ZodOptional<z.ZodString>;
88
+ project: z.ZodOptional<z.ZodBoolean>;
89
+ focus: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "security", "performance", "architecture", "coding-standards"]>>>;
90
+ incremental: z.ZodOptional<z.ZodBoolean>;
91
+ maxDepth: z.ZodOptional<z.ZodNumber>;
92
+ maxFiles: z.ZodOptional<z.ZodNumber>;
93
+ useCache: z.ZodOptional<z.ZodBoolean>;
94
+ }, z.ZodTypeAny, "passthrough">>;
95
+ export type ReviewInput = z.infer<typeof ReviewInputSchema>;
96
+ /** context handler input */
97
+ export declare const ContextInputSchema: z.ZodObject<{
98
+ full: z.ZodOptional<z.ZodBoolean>;
99
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
100
+ full: z.ZodOptional<z.ZodBoolean>;
101
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
102
+ full: z.ZodOptional<z.ZodBoolean>;
103
+ }, z.ZodTypeAny, "passthrough">>;
104
+ export type ContextInput = z.infer<typeof ContextInputSchema>;
105
+ /** docs handler input */
106
+ export declare const DocsInputSchema: z.ZodObject<{
107
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["fetch", "search", "list", "get", "remove", "suggest"]>>>;
108
+ url: z.ZodOptional<z.ZodString>;
109
+ urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
110
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
111
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
112
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["fetch", "search", "list", "get", "remove", "suggest"]>>>;
113
+ url: z.ZodOptional<z.ZodString>;
114
+ urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
115
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
116
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
117
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["fetch", "search", "list", "get", "remove", "suggest"]>>>;
118
+ url: z.ZodOptional<z.ZodString>;
119
+ urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
120
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
121
+ }, z.ZodTypeAny, "passthrough">>;
122
+ export type DocsInput = z.infer<typeof DocsInputSchema>;
123
+ /** cursor handler input */
124
+ export declare const CursorInputSchema: z.ZodObject<{
125
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["browse", "search", "popular", "import", "categories"]>>>;
126
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
127
+ slug: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
128
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
129
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["browse", "search", "popular", "import", "categories"]>>>;
130
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
131
+ slug: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
132
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
133
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["browse", "search", "popular", "import", "categories"]>>>;
134
+ query: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
135
+ slug: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
136
+ }, z.ZodTypeAny, "passthrough">>;
137
+ export type CursorInput = z.infer<typeof CursorInputSchema>;
138
+ /** config handler input */
139
+ export declare const ConfigInputSchema: z.ZodObject<{
140
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["save", "load", "list", "delete", "export", "import"]>>>;
141
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
142
+ id: z.ZodOptional<z.ZodString>;
143
+ json: z.ZodOptional<z.ZodString>;
144
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
145
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["save", "load", "list", "delete", "export", "import"]>>>;
146
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
147
+ id: z.ZodOptional<z.ZodString>;
148
+ json: z.ZodOptional<z.ZodString>;
149
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
150
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["save", "load", "list", "delete", "export", "import"]>>>;
151
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
152
+ id: z.ZodOptional<z.ZodString>;
153
+ json: z.ZodOptional<z.ZodString>;
154
+ }, z.ZodTypeAny, "passthrough">>;
155
+ export type ConfigInput = z.infer<typeof ConfigInputSchema>;
156
+ /** custom-rule handler input */
157
+ export declare const CustomRuleInputSchema: z.ZodObject<{
158
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["create", "update", "delete", "list", "export", "import"]>>>;
159
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
160
+ content: z.ZodOptional<z.ZodString>;
161
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture"]>>;
162
+ id: z.ZodOptional<z.ZodString>;
163
+ json: z.ZodOptional<z.ZodString>;
164
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
165
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["create", "update", "delete", "list", "export", "import"]>>>;
166
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
167
+ content: z.ZodOptional<z.ZodString>;
168
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture"]>>;
169
+ id: z.ZodOptional<z.ZodString>;
170
+ json: z.ZodOptional<z.ZodString>;
171
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
172
+ action: z.ZodDefault<z.ZodOptional<z.ZodEnum<["create", "update", "delete", "list", "export", "import"]>>>;
173
+ name: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
174
+ content: z.ZodOptional<z.ZodString>;
175
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "coding-standards", "architecture"]>>;
176
+ id: z.ZodOptional<z.ZodString>;
177
+ json: z.ZodOptional<z.ZodString>;
178
+ }, z.ZodTypeAny, "passthrough">>;
179
+ export type CustomRuleInput = z.infer<typeof CustomRuleInputSchema>;
180
+ /** generate handler input */
181
+ export declare const GenerateInputSchema: z.ZodObject<{
182
+ type: z.ZodEnum<["component", "hook", "service", "test", "api", "model", "util"]>;
183
+ name: z.ZodString;
184
+ options: z.ZodOptional<z.ZodObject<{
185
+ typescript: z.ZodOptional<z.ZodBoolean>;
186
+ withTests: z.ZodOptional<z.ZodBoolean>;
187
+ withStyles: z.ZodOptional<z.ZodBoolean>;
188
+ framework: z.ZodOptional<z.ZodString>;
189
+ scanProject: z.ZodOptional<z.ZodBoolean>;
190
+ }, "strip", z.ZodTypeAny, {
191
+ typescript?: boolean | undefined;
192
+ withTests?: boolean | undefined;
193
+ withStyles?: boolean | undefined;
194
+ framework?: string | undefined;
195
+ scanProject?: boolean | undefined;
196
+ }, {
197
+ typescript?: boolean | undefined;
198
+ withTests?: boolean | undefined;
199
+ withStyles?: boolean | undefined;
200
+ framework?: string | undefined;
201
+ scanProject?: boolean | undefined;
202
+ }>>;
203
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
204
+ type: z.ZodEnum<["component", "hook", "service", "test", "api", "model", "util"]>;
205
+ name: z.ZodString;
206
+ options: z.ZodOptional<z.ZodObject<{
207
+ typescript: z.ZodOptional<z.ZodBoolean>;
208
+ withTests: z.ZodOptional<z.ZodBoolean>;
209
+ withStyles: z.ZodOptional<z.ZodBoolean>;
210
+ framework: z.ZodOptional<z.ZodString>;
211
+ scanProject: z.ZodOptional<z.ZodBoolean>;
212
+ }, "strip", z.ZodTypeAny, {
213
+ typescript?: boolean | undefined;
214
+ withTests?: boolean | undefined;
215
+ withStyles?: boolean | undefined;
216
+ framework?: string | undefined;
217
+ scanProject?: boolean | undefined;
218
+ }, {
219
+ typescript?: boolean | undefined;
220
+ withTests?: boolean | undefined;
221
+ withStyles?: boolean | undefined;
222
+ framework?: string | undefined;
223
+ scanProject?: boolean | undefined;
224
+ }>>;
225
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
226
+ type: z.ZodEnum<["component", "hook", "service", "test", "api", "model", "util"]>;
227
+ name: z.ZodString;
228
+ options: z.ZodOptional<z.ZodObject<{
229
+ typescript: z.ZodOptional<z.ZodBoolean>;
230
+ withTests: z.ZodOptional<z.ZodBoolean>;
231
+ withStyles: z.ZodOptional<z.ZodBoolean>;
232
+ framework: z.ZodOptional<z.ZodString>;
233
+ scanProject: z.ZodOptional<z.ZodBoolean>;
234
+ }, "strip", z.ZodTypeAny, {
235
+ typescript?: boolean | undefined;
236
+ withTests?: boolean | undefined;
237
+ withStyles?: boolean | undefined;
238
+ framework?: string | undefined;
239
+ scanProject?: boolean | undefined;
240
+ }, {
241
+ typescript?: boolean | undefined;
242
+ withTests?: boolean | undefined;
243
+ withStyles?: boolean | undefined;
244
+ framework?: string | undefined;
245
+ scanProject?: boolean | undefined;
246
+ }>>;
247
+ }, z.ZodTypeAny, "passthrough">>;
248
+ export type GenerateInput = z.infer<typeof GenerateInputSchema>;
249
+ /** health handler input */
250
+ export declare const HealthInputSchema: z.ZodObject<{
251
+ detailed: z.ZodOptional<z.ZodBoolean>;
252
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
253
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
254
+ detailed: z.ZodOptional<z.ZodBoolean>;
255
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
256
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
257
+ detailed: z.ZodOptional<z.ZodBoolean>;
258
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
259
+ }, z.ZodTypeAny, "passthrough">>;
260
+ export type HealthInput = z.infer<typeof HealthInputSchema>;
261
+ /** help handler input */
262
+ export declare const HelpInputSchema: z.ZodObject<{
263
+ topic: z.ZodDefault<z.ZodOptional<z.ZodEnum<["setup", "rules", "review", "cursor", "docs", "config", "generate", "health", "all"]>>>;
264
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
265
+ topic: z.ZodDefault<z.ZodOptional<z.ZodEnum<["setup", "rules", "review", "cursor", "docs", "config", "generate", "health", "all"]>>>;
266
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
267
+ topic: z.ZodDefault<z.ZodOptional<z.ZodEnum<["setup", "rules", "review", "cursor", "docs", "config", "generate", "health", "all"]>>>;
268
+ }, z.ZodTypeAny, "passthrough">>;
269
+ export type HelpInput = z.infer<typeof HelpInputSchema>;
270
+ /** analyze_code tool input */
271
+ export declare const AnalyzeCodeInputSchema: z.ZodObject<{
272
+ code: z.ZodString;
273
+ language: z.ZodOptional<z.ZodString>;
274
+ filePath: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
275
+ categories: z.ZodOptional<z.ZodArray<z.ZodEnum<["security", "performance", "best-practices", "maintainability", "architecture"]>, "many">>;
276
+ }, "strict", z.ZodTypeAny, {
277
+ code: string;
278
+ categories?: ("best-practices" | "security" | "performance" | "architecture" | "maintainability")[] | undefined;
279
+ language?: string | undefined;
280
+ filePath?: string | undefined;
281
+ }, {
282
+ code: string;
283
+ categories?: ("best-practices" | "security" | "performance" | "architecture" | "maintainability")[] | undefined;
284
+ language?: string | undefined;
285
+ filePath?: string | undefined;
286
+ }>;
287
+ export type AnalyzeCodeInput = z.infer<typeof AnalyzeCodeInputSchema>;
288
+ /** get_rules tool input */
289
+ export declare const GetRulesInputSchema: z.ZodObject<{
290
+ language: z.ZodOptional<z.ZodString>;
291
+ category: z.ZodOptional<z.ZodEnum<["security", "performance", "best-practices", "maintainability", "architecture"]>>;
292
+ enabled: z.ZodOptional<z.ZodBoolean>;
293
+ }, "strict", z.ZodTypeAny, {
294
+ category?: "best-practices" | "security" | "performance" | "architecture" | "maintainability" | undefined;
295
+ enabled?: boolean | undefined;
296
+ language?: string | undefined;
297
+ }, {
298
+ category?: "best-practices" | "security" | "performance" | "architecture" | "maintainability" | undefined;
299
+ enabled?: boolean | undefined;
300
+ language?: string | undefined;
301
+ }>;
302
+ export type GetRulesInput = z.infer<typeof GetRulesInputSchema>;
303
+ /** Result type for validation */
304
+ export type ValidationResult<T> = {
305
+ success: true;
306
+ data: T;
307
+ } | {
308
+ success: false;
309
+ error: string;
310
+ details?: z.ZodIssue[];
311
+ };
312
+ /**
313
+ * Validate input against a schema
314
+ */
315
+ export declare function validate<T>(schema: z.ZodSchema<T>, input: unknown): ValidationResult<T>;
316
+ /**
317
+ * Validate and throw on failure
318
+ */
319
+ export declare function validateOrThrow<T>(schema: z.ZodSchema<T>, input: unknown, context?: string): T;
320
+ /**
321
+ * Create a validated handler wrapper
322
+ */
323
+ export declare function withValidation<TInput, TOutput>(schema: z.ZodSchema<TInput>, handler: (input: TInput) => Promise<TOutput>): (input: unknown) => Promise<TOutput>;
324
+ /**
325
+ * Sanitize string for safe display
326
+ */
327
+ export declare function sanitizeForDisplay(input: string, maxLength?: number): string;
328
+ /**
329
+ * Sanitize arbitrary content before sending to a prompt/LLM.
330
+ * Removes control/directional chars and script/style blocks, and enforces length.
331
+ */
332
+ export declare function sanitizeForPrompt(input: string, maxLength?: number): string;
333
+ /**
334
+ * Sanitize file path
335
+ */
336
+ export declare function sanitizePath(input: string): string;
337
+ /**
338
+ * Sanitize identifier
339
+ */
340
+ export declare function sanitizeIdentifier(input: string): string;
341
+ export declare const HANDLER_SCHEMAS: Record<string, z.ZodSchema>;
342
+ /**
343
+ * Validate handler input by handler name
344
+ */
345
+ export declare function validateHandlerInput(handlerName: string, input: unknown): ValidationResult<unknown>;
346
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/validation/schemas.ts"],"names":[],"mappings":"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"}