@gulibs/safe-coder 0.0.25 → 0.0.27

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 (188) hide show
  1. package/README.md +682 -902
  2. package/dist/cache/cache-manager.d.ts +71 -0
  3. package/dist/cache/cache-manager.d.ts.map +1 -0
  4. package/dist/cache/cache-manager.js +244 -0
  5. package/dist/cache/cache-manager.js.map +1 -0
  6. package/dist/executor/cli-executor.d.ts +106 -0
  7. package/dist/executor/cli-executor.d.ts.map +1 -0
  8. package/dist/executor/cli-executor.js +133 -0
  9. package/dist/executor/cli-executor.js.map +1 -0
  10. package/dist/executor/dependency-checker.d.ts +23 -0
  11. package/dist/executor/dependency-checker.d.ts.map +1 -0
  12. package/dist/executor/dependency-checker.js +62 -0
  13. package/dist/executor/dependency-checker.js.map +1 -0
  14. package/dist/index.js +3 -4
  15. package/dist/index.js.map +1 -1
  16. package/dist/processor/content-processor.d.ts +76 -0
  17. package/dist/processor/content-processor.d.ts.map +1 -0
  18. package/dist/processor/content-processor.js +182 -0
  19. package/dist/processor/content-processor.js.map +1 -0
  20. package/dist/processor/guide-generator.d.ts +68 -0
  21. package/dist/processor/guide-generator.d.ts.map +1 -0
  22. package/dist/processor/guide-generator.js +189 -0
  23. package/dist/processor/guide-generator.js.map +1 -0
  24. package/dist/server/safe-coder-mcp.d.ts +18 -0
  25. package/dist/server/safe-coder-mcp.d.ts.map +1 -0
  26. package/dist/server/safe-coder-mcp.js +164 -0
  27. package/dist/server/safe-coder-mcp.js.map +1 -0
  28. package/dist/tools/cache-tools.d.ts +42 -0
  29. package/dist/tools/cache-tools.d.ts.map +1 -0
  30. package/dist/tools/cache-tools.js +70 -0
  31. package/dist/tools/cache-tools.js.map +1 -0
  32. package/dist/tools/crawl-documentation.d.ts +57 -0
  33. package/dist/tools/crawl-documentation.d.ts.map +1 -0
  34. package/dist/tools/crawl-documentation.js +96 -0
  35. package/dist/tools/crawl-documentation.js.map +1 -0
  36. package/dist/tools/index.d.ts +4 -0
  37. package/dist/tools/index.d.ts.map +1 -0
  38. package/dist/tools/index.js +4 -0
  39. package/dist/tools/index.js.map +1 -0
  40. package/dist/tools/save-skill.d.ts +49 -0
  41. package/dist/tools/save-skill.d.ts.map +1 -0
  42. package/dist/tools/save-skill.js +207 -0
  43. package/dist/tools/save-skill.js.map +1 -0
  44. package/package.json +18 -22
  45. package/dist/documentation/browser-doc-browser.d.ts +0 -41
  46. package/dist/documentation/browser-doc-browser.d.ts.map +0 -1
  47. package/dist/documentation/browser-doc-browser.js +0 -357
  48. package/dist/documentation/browser-doc-browser.js.map +0 -1
  49. package/dist/documentation/cache.d.ts +0 -13
  50. package/dist/documentation/cache.d.ts.map +0 -1
  51. package/dist/documentation/cache.js +0 -48
  52. package/dist/documentation/cache.js.map +0 -1
  53. package/dist/documentation/checkpoint-manager.d.ts +0 -38
  54. package/dist/documentation/checkpoint-manager.d.ts.map +0 -1
  55. package/dist/documentation/checkpoint-manager.js +0 -101
  56. package/dist/documentation/checkpoint-manager.js.map +0 -1
  57. package/dist/documentation/doc-crawler.d.ts +0 -185
  58. package/dist/documentation/doc-crawler.d.ts.map +0 -1
  59. package/dist/documentation/doc-crawler.js +0 -1162
  60. package/dist/documentation/doc-crawler.js.map +0 -1
  61. package/dist/documentation/github-client.d.ts +0 -13
  62. package/dist/documentation/github-client.d.ts.map +0 -1
  63. package/dist/documentation/github-client.js +0 -90
  64. package/dist/documentation/github-client.js.map +0 -1
  65. package/dist/documentation/http-fetcher.d.ts +0 -8
  66. package/dist/documentation/http-fetcher.d.ts.map +0 -1
  67. package/dist/documentation/http-fetcher.js +0 -31
  68. package/dist/documentation/http-fetcher.js.map +0 -1
  69. package/dist/documentation/index.d.ts +0 -16
  70. package/dist/documentation/index.d.ts.map +0 -1
  71. package/dist/documentation/index.js +0 -159
  72. package/dist/documentation/index.js.map +0 -1
  73. package/dist/documentation/llms-txt/detector.d.ts +0 -31
  74. package/dist/documentation/llms-txt/detector.d.ts.map +0 -1
  75. package/dist/documentation/llms-txt/detector.js +0 -77
  76. package/dist/documentation/llms-txt/detector.js.map +0 -1
  77. package/dist/documentation/llms-txt/downloader.d.ts +0 -30
  78. package/dist/documentation/llms-txt/downloader.d.ts.map +0 -1
  79. package/dist/documentation/llms-txt/downloader.js +0 -84
  80. package/dist/documentation/llms-txt/downloader.js.map +0 -1
  81. package/dist/documentation/llms-txt/index.d.ts +0 -4
  82. package/dist/documentation/llms-txt/index.d.ts.map +0 -1
  83. package/dist/documentation/llms-txt/index.js +0 -4
  84. package/dist/documentation/llms-txt/index.js.map +0 -1
  85. package/dist/documentation/llms-txt/parser.d.ts +0 -43
  86. package/dist/documentation/llms-txt/parser.d.ts.map +0 -1
  87. package/dist/documentation/llms-txt/parser.js +0 -177
  88. package/dist/documentation/llms-txt/parser.js.map +0 -1
  89. package/dist/documentation/normalizer.d.ts +0 -6
  90. package/dist/documentation/normalizer.d.ts.map +0 -1
  91. package/dist/documentation/normalizer.js +0 -38
  92. package/dist/documentation/normalizer.js.map +0 -1
  93. package/dist/documentation/npm-client.d.ts +0 -19
  94. package/dist/documentation/npm-client.d.ts.map +0 -1
  95. package/dist/documentation/npm-client.js +0 -182
  96. package/dist/documentation/npm-client.js.map +0 -1
  97. package/dist/documentation/skill-generator.d.ts +0 -108
  98. package/dist/documentation/skill-generator.d.ts.map +0 -1
  99. package/dist/documentation/skill-generator.js +0 -642
  100. package/dist/documentation/skill-generator.js.map +0 -1
  101. package/dist/documentation/web-doc-browser.d.ts +0 -67
  102. package/dist/documentation/web-doc-browser.d.ts.map +0 -1
  103. package/dist/documentation/web-doc-browser.js +0 -555
  104. package/dist/documentation/web-doc-browser.js.map +0 -1
  105. package/dist/errors/api-validator.d.ts +0 -9
  106. package/dist/errors/api-validator.d.ts.map +0 -1
  107. package/dist/errors/api-validator.js +0 -57
  108. package/dist/errors/api-validator.js.map +0 -1
  109. package/dist/errors/contextual-analysis.d.ts +0 -14
  110. package/dist/errors/contextual-analysis.d.ts.map +0 -1
  111. package/dist/errors/contextual-analysis.js +0 -173
  112. package/dist/errors/contextual-analysis.js.map +0 -1
  113. package/dist/errors/cross-file-analyzer.d.ts +0 -16
  114. package/dist/errors/cross-file-analyzer.d.ts.map +0 -1
  115. package/dist/errors/cross-file-analyzer.js +0 -172
  116. package/dist/errors/cross-file-analyzer.js.map +0 -1
  117. package/dist/errors/eslint-integration.d.ts +0 -9
  118. package/dist/errors/eslint-integration.d.ts.map +0 -1
  119. package/dist/errors/eslint-integration.js +0 -131
  120. package/dist/errors/eslint-integration.js.map +0 -1
  121. package/dist/errors/framework-detector.d.ts +0 -10
  122. package/dist/errors/framework-detector.d.ts.map +0 -1
  123. package/dist/errors/framework-detector.js +0 -126
  124. package/dist/errors/framework-detector.js.map +0 -1
  125. package/dist/errors/index.d.ts +0 -18
  126. package/dist/errors/index.d.ts.map +0 -1
  127. package/dist/errors/index.js +0 -134
  128. package/dist/errors/index.js.map +0 -1
  129. package/dist/errors/pattern-matcher.d.ts +0 -25
  130. package/dist/errors/pattern-matcher.d.ts.map +0 -1
  131. package/dist/errors/pattern-matcher.js +0 -44
  132. package/dist/errors/pattern-matcher.js.map +0 -1
  133. package/dist/errors/patterns.d.ts +0 -11
  134. package/dist/errors/patterns.d.ts.map +0 -1
  135. package/dist/errors/patterns.js +0 -351
  136. package/dist/errors/patterns.js.map +0 -1
  137. package/dist/errors/performance-detector.d.ts +0 -11
  138. package/dist/errors/performance-detector.d.ts.map +0 -1
  139. package/dist/errors/performance-detector.js +0 -119
  140. package/dist/errors/performance-detector.js.map +0 -1
  141. package/dist/errors/runtime-detector.d.ts +0 -7
  142. package/dist/errors/runtime-detector.d.ts.map +0 -1
  143. package/dist/errors/runtime-detector.js +0 -86
  144. package/dist/errors/runtime-detector.js.map +0 -1
  145. package/dist/errors/security-detector.d.ts +0 -6
  146. package/dist/errors/security-detector.d.ts.map +0 -1
  147. package/dist/errors/security-detector.js +0 -75
  148. package/dist/errors/security-detector.js.map +0 -1
  149. package/dist/errors/typescript-integration.d.ts +0 -6
  150. package/dist/errors/typescript-integration.d.ts.map +0 -1
  151. package/dist/errors/typescript-integration.js +0 -46
  152. package/dist/errors/typescript-integration.js.map +0 -1
  153. package/dist/server/mcp-server.d.ts +0 -14
  154. package/dist/server/mcp-server.d.ts.map +0 -1
  155. package/dist/server/mcp-server.js +0 -776
  156. package/dist/server/mcp-server.js.map +0 -1
  157. package/dist/types/documentation.d.ts +0 -26
  158. package/dist/types/documentation.d.ts.map +0 -1
  159. package/dist/types/documentation.js +0 -2
  160. package/dist/types/documentation.js.map +0 -1
  161. package/dist/utils/config.d.ts +0 -21
  162. package/dist/utils/config.d.ts.map +0 -1
  163. package/dist/utils/config.js +0 -34
  164. package/dist/utils/config.js.map +0 -1
  165. package/dist/utils/http-client.d.ts +0 -17
  166. package/dist/utils/http-client.d.ts.map +0 -1
  167. package/dist/utils/http-client.js +0 -62
  168. package/dist/utils/http-client.js.map +0 -1
  169. package/dist/utils/logger.d.ts +0 -36
  170. package/dist/utils/logger.d.ts.map +0 -1
  171. package/dist/utils/logger.js +0 -128
  172. package/dist/utils/logger.js.map +0 -1
  173. package/dist/utils/rate-limiter.d.ts +0 -9
  174. package/dist/utils/rate-limiter.d.ts.map +0 -1
  175. package/dist/utils/rate-limiter.js +0 -26
  176. package/dist/utils/rate-limiter.js.map +0 -1
  177. package/dist/validation/auto-fix.d.ts +0 -15
  178. package/dist/validation/auto-fix.d.ts.map +0 -1
  179. package/dist/validation/auto-fix.js +0 -49
  180. package/dist/validation/auto-fix.js.map +0 -1
  181. package/dist/validation/index.d.ts +0 -21
  182. package/dist/validation/index.d.ts.map +0 -1
  183. package/dist/validation/index.js +0 -45
  184. package/dist/validation/index.js.map +0 -1
  185. package/dist/validation/resolution-db.d.ts +0 -15
  186. package/dist/validation/resolution-db.d.ts.map +0 -1
  187. package/dist/validation/resolution-db.js +0 -62
  188. package/dist/validation/resolution-db.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-checker.js","sourceRoot":"","sources":["../../src/executor/dependency-checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9C,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE;aACvC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,OAAO;;;;;;;;;;;;;;;KAeN,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,0BAA0B,EAAE;gBACnD,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;aAClC,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
package/dist/index.js CHANGED
@@ -1,18 +1,17 @@
1
1
  #!/usr/bin/env node
2
- import { SafeCoderMCPServer } from './server/mcp-server.js';
3
- import { logger } from './utils/logger.js';
2
+ import { SafeCoderMCPServer } from './server/safe-coder-mcp.js';
4
3
  async function main() {
5
4
  try {
6
5
  const server = new SafeCoderMCPServer();
7
6
  await server.run();
8
7
  }
9
8
  catch (error) {
10
- logger.error('Fatal error starting server', {}, error instanceof Error ? error : new Error(String(error)));
9
+ console.error('Fatal error starting server:', error);
11
10
  process.exit(1);
12
11
  }
13
12
  }
14
13
  main().catch((error) => {
15
- logger.error('Unhandled error', {}, error instanceof Error ? error : new Error(String(error)));
14
+ console.error('Unhandled error:', error);
16
15
  process.exit(1);
17
16
  });
18
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,76 @@
1
+ import type { CrawlResult } from '../executor/cli-executor.js';
2
+ /**
3
+ * Processed content with additional analysis
4
+ */
5
+ export interface ProcessedContent extends CrawlResult {
6
+ pages: ProcessedPage[];
7
+ analysis: ContentAnalysis;
8
+ }
9
+ /**
10
+ * Processed page with extracted insights
11
+ */
12
+ export interface ProcessedPage {
13
+ url: string;
14
+ title: string;
15
+ content: string;
16
+ category?: string;
17
+ wordCount: number;
18
+ codeBlocks: number;
19
+ headings: string[];
20
+ keyPoints: string[];
21
+ codePatterns: CodePattern[];
22
+ }
23
+ /**
24
+ * Code pattern identified in content
25
+ */
26
+ export interface CodePattern {
27
+ type: string;
28
+ description: string;
29
+ example: string;
30
+ frequency: number;
31
+ }
32
+ /**
33
+ * Content analysis summary
34
+ */
35
+ export interface ContentAnalysis {
36
+ totalWords: number;
37
+ totalCodeBlocks: number;
38
+ categories: Record<string, number>;
39
+ difficulty: 'beginner' | 'intermediate' | 'advanced';
40
+ mainTopics: string[];
41
+ technicalDensity: number;
42
+ }
43
+ /**
44
+ * Content processor that enhances CLI output with additional analysis
45
+ */
46
+ export declare class ContentProcessor {
47
+ /**
48
+ * Process raw crawl result from CLI
49
+ */
50
+ process(raw: CrawlResult): Promise<ProcessedContent>;
51
+ /**
52
+ * Process a single page
53
+ */
54
+ private processPage;
55
+ /**
56
+ * Extract key points from content
57
+ */
58
+ private extractKeyPoints;
59
+ /**
60
+ * Identify code patterns in content
61
+ */
62
+ private identifyCodePatterns;
63
+ /**
64
+ * Analyze overall content
65
+ */
66
+ private analyzeContent;
67
+ /**
68
+ * Extract main topics from headings
69
+ */
70
+ private extractMainTopics;
71
+ /**
72
+ * Estimate difficulty level
73
+ */
74
+ private estimateDifficulty;
75
+ }
76
+ //# sourceMappingURL=content-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-processor.d.ts","sourceRoot":"","sources":["../../src/processor/content-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,UAAU,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgB1D;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsD5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAkCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAoD3B"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Content processor that enhances CLI output with additional analysis
3
+ */
4
+ export class ContentProcessor {
5
+ /**
6
+ * Process raw crawl result from CLI
7
+ */
8
+ async process(raw) {
9
+ // Process each page
10
+ const processedPages = raw.pages.map(page => this.processPage(page));
11
+ // Generate analysis
12
+ const analysis = this.analyzeContent(processedPages);
13
+ return {
14
+ ...raw,
15
+ pages: processedPages,
16
+ analysis,
17
+ };
18
+ }
19
+ /**
20
+ * Process a single page
21
+ */
22
+ processPage(page) {
23
+ return {
24
+ ...page,
25
+ keyPoints: this.extractKeyPoints(page.content),
26
+ codePatterns: this.identifyCodePatterns(page.content),
27
+ };
28
+ }
29
+ /**
30
+ * Extract key points from content
31
+ */
32
+ extractKeyPoints(content) {
33
+ const points = [];
34
+ // Match important notices
35
+ const importantRegex = /(?:Important|Note|Warning|Tip|Caution):\s*([^\n]+)/gi;
36
+ let match;
37
+ while ((match = importantRegex.exec(content)) !== null) {
38
+ points.push(match[1].trim());
39
+ }
40
+ // Match bullet points that start with strong indicators
41
+ const bulletRegex = /^[•\-*]\s*\*\*([^*]+)\*\*:?\s*([^\n]+)/gm;
42
+ while ((match = bulletRegex.exec(content)) !== null) {
43
+ points.push(`${match[1]}: ${match[2]}`);
44
+ }
45
+ return points.slice(0, 10); // Limit to top 10
46
+ }
47
+ /**
48
+ * Identify code patterns in content
49
+ */
50
+ identifyCodePatterns(content) {
51
+ const patterns = [];
52
+ // Extract code blocks
53
+ const codeBlockRegex = /```(\w+)?\n([\s\S]*?)```/g;
54
+ let match;
55
+ while ((match = codeBlockRegex.exec(content)) !== null) {
56
+ const language = match[1] || 'unknown';
57
+ const code = match[2];
58
+ // Identify common patterns
59
+ if (code.includes('import ') || code.includes('require(')) {
60
+ patterns.push({
61
+ type: 'import',
62
+ description: 'Module import pattern',
63
+ example: code.substring(0, 200),
64
+ frequency: 1,
65
+ });
66
+ }
67
+ if (code.includes('function ') || code.includes('const ') || code.includes('class ')) {
68
+ patterns.push({
69
+ type: 'definition',
70
+ description: 'Function/class definition',
71
+ example: code.substring(0, 200),
72
+ frequency: 1,
73
+ });
74
+ }
75
+ if (code.includes('async ') || code.includes('await ') || code.includes('.then(')) {
76
+ patterns.push({
77
+ type: 'async',
78
+ description: 'Asynchronous pattern',
79
+ example: code.substring(0, 200),
80
+ frequency: 1,
81
+ });
82
+ }
83
+ }
84
+ // Aggregate patterns by type
85
+ const aggregated = patterns.reduce((acc, pattern) => {
86
+ const existing = acc.find(p => p.type === pattern.type);
87
+ if (existing) {
88
+ existing.frequency++;
89
+ }
90
+ else {
91
+ acc.push(pattern);
92
+ }
93
+ return acc;
94
+ }, []);
95
+ return aggregated;
96
+ }
97
+ /**
98
+ * Analyze overall content
99
+ */
100
+ analyzeContent(pages) {
101
+ const totalWords = pages.reduce((sum, p) => sum + p.wordCount, 0);
102
+ const totalCodeBlocks = pages.reduce((sum, p) => sum + p.codeBlocks, 0);
103
+ // Categorize pages
104
+ const categories = {};
105
+ pages.forEach(page => {
106
+ if (page.category) {
107
+ categories[page.category] = (categories[page.category] || 0) + 1;
108
+ }
109
+ });
110
+ // Extract main topics from headings
111
+ const allHeadings = pages.flatMap(p => p.headings);
112
+ const mainTopics = this.extractMainTopics(allHeadings);
113
+ // Calculate technical density (code blocks per 1000 words)
114
+ const technicalDensity = totalWords > 0
115
+ ? (totalCodeBlocks / totalWords) * 1000
116
+ : 0;
117
+ // Estimate difficulty
118
+ const difficulty = this.estimateDifficulty(technicalDensity, pages);
119
+ return {
120
+ totalWords,
121
+ totalCodeBlocks,
122
+ categories,
123
+ difficulty,
124
+ mainTopics,
125
+ technicalDensity,
126
+ };
127
+ }
128
+ /**
129
+ * Extract main topics from headings
130
+ */
131
+ extractMainTopics(headings) {
132
+ // Count heading occurrences
133
+ const topicCounts = new Map();
134
+ headings.forEach(heading => {
135
+ const normalized = heading.toLowerCase().trim();
136
+ topicCounts.set(normalized, (topicCounts.get(normalized) || 0) + 1);
137
+ });
138
+ // Sort by frequency and take top 10
139
+ return Array.from(topicCounts.entries())
140
+ .sort((a, b) => b[1] - a[1])
141
+ .slice(0, 10)
142
+ .map(([topic]) => topic);
143
+ }
144
+ /**
145
+ * Estimate difficulty level
146
+ */
147
+ estimateDifficulty(technicalDensity, pages) {
148
+ // High technical density indicates advanced content
149
+ if (technicalDensity > 10) {
150
+ return 'advanced';
151
+ }
152
+ // Check for advanced keywords
153
+ const advancedKeywords = [
154
+ 'architecture',
155
+ 'optimization',
156
+ 'performance',
157
+ 'scalability',
158
+ 'concurrent',
159
+ 'distributed',
160
+ 'algorithm',
161
+ ];
162
+ const hasAdvancedContent = pages.some(page => advancedKeywords.some(keyword => page.content.toLowerCase().includes(keyword)));
163
+ if (hasAdvancedContent) {
164
+ return 'advanced';
165
+ }
166
+ // Check for beginner keywords
167
+ const beginnerKeywords = [
168
+ 'getting started',
169
+ 'introduction',
170
+ 'tutorial',
171
+ 'beginner',
172
+ 'quick start',
173
+ 'installation',
174
+ ];
175
+ const hasBeginnerContent = pages.some(page => beginnerKeywords.some(keyword => page.content.toLowerCase().includes(keyword)));
176
+ if (hasBeginnerContent && technicalDensity < 5) {
177
+ return 'beginner';
178
+ }
179
+ return 'intermediate';
180
+ }
181
+ }
182
+ //# sourceMappingURL=content-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-processor.js","sourceRoot":"","sources":["../../src/processor/content-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { ProcessedContent } from './content-processor.js';
2
+ /**
3
+ * SKILL generation guide for Cursor AI
4
+ */
5
+ export interface SkillGenerationGuide {
6
+ suggestedStructure: string[];
7
+ keyTopics: string[];
8
+ recommendedSections: {
9
+ overview: string;
10
+ quickStart: string[];
11
+ coreFeatures: string[];
12
+ bestPractices: string[];
13
+ troubleshooting: string[];
14
+ };
15
+ tips: string[];
16
+ quality: {
17
+ contentQuality: number;
18
+ codeExamples: number;
19
+ completeness: number;
20
+ overall: number;
21
+ };
22
+ }
23
+ /**
24
+ * Guide generator that provides SKILL generation guidance to Cursor AI
25
+ */
26
+ export declare class GuideGenerator {
27
+ /**
28
+ * Generate SKILL generation guidance
29
+ */
30
+ generate(content: ProcessedContent): SkillGenerationGuide;
31
+ /**
32
+ * Suggest SKILL structure based on content
33
+ */
34
+ private suggestStructure;
35
+ /**
36
+ * Extract key topics from content
37
+ */
38
+ private extractTopics;
39
+ /**
40
+ * Generate overview guidance
41
+ */
42
+ private generateOverviewGuide;
43
+ /**
44
+ * Find quick start pages
45
+ */
46
+ private findQuickStartPages;
47
+ /**
48
+ * Identify core features
49
+ */
50
+ private identifyCoreFeatures;
51
+ /**
52
+ * Extract best practice hints
53
+ */
54
+ private extractBestPracticeHints;
55
+ /**
56
+ * Find troubleshooting content
57
+ */
58
+ private findTroubleshootingContent;
59
+ /**
60
+ * Generate tips for SKILL creation
61
+ */
62
+ private generateTips;
63
+ /**
64
+ * Assess content quality
65
+ */
66
+ private assessQuality;
67
+ }
68
+ //# sourceMappingURL=guide-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide-generator.d.ts","sourceRoot":"","sources":["../../src/processor/guide-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,mBAAmB,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,oBAAoB;IAgBzD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAoBlC;;OAEG;IACH,OAAO,CAAC,YAAY;IAgCpB;;OAEG;IACH,OAAO,CAAC,aAAa;CA4BtB"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Guide generator that provides SKILL generation guidance to Cursor AI
3
+ */
4
+ export class GuideGenerator {
5
+ /**
6
+ * Generate SKILL generation guidance
7
+ */
8
+ generate(content) {
9
+ return {
10
+ suggestedStructure: this.suggestStructure(content),
11
+ keyTopics: this.extractTopics(content),
12
+ recommendedSections: {
13
+ overview: this.generateOverviewGuide(content),
14
+ quickStart: this.findQuickStartPages(content),
15
+ coreFeatures: this.identifyCoreFeatures(content),
16
+ bestPractices: this.extractBestPracticeHints(content),
17
+ troubleshooting: this.findTroubleshootingContent(content),
18
+ },
19
+ tips: this.generateTips(content),
20
+ quality: this.assessQuality(content),
21
+ };
22
+ }
23
+ /**
24
+ * Suggest SKILL structure based on content
25
+ */
26
+ suggestStructure(content) {
27
+ const structure = [
28
+ 'Overview and When to Use',
29
+ 'Prerequisites and Setup',
30
+ ];
31
+ // Add tutorial if beginner-friendly content exists
32
+ const hasQuickStart = content.pages.some(p => p.title.toLowerCase().includes('quick start') ||
33
+ p.title.toLowerCase().includes('getting started') ||
34
+ p.title.toLowerCase().includes('tutorial'));
35
+ if (hasQuickStart) {
36
+ structure.push('Quick Start Tutorial');
37
+ }
38
+ // Core sections
39
+ structure.push('Core Concepts and Workflow', 'Common Patterns and Examples');
40
+ // Add API reference if many code examples
41
+ if (content.analysis.totalCodeBlocks > 20) {
42
+ structure.push('API Reference');
43
+ }
44
+ // Always include these
45
+ structure.push('Best Practices', 'Troubleshooting Guide', 'Additional Resources');
46
+ return structure;
47
+ }
48
+ /**
49
+ * Extract key topics from content
50
+ */
51
+ extractTopics(content) {
52
+ return content.analysis.mainTopics.slice(0, 15);
53
+ }
54
+ /**
55
+ * Generate overview guidance
56
+ */
57
+ generateOverviewGuide(content) {
58
+ const { source, statistics, analysis } = content;
59
+ return `Based on ${statistics.totalPages} pages crawled from ${source.url}, this is ${analysis.difficulty}-level documentation about ${content.metadata.technology || 'the technology'}. The content includes ${analysis.totalCodeBlocks} code examples and covers ${Object.keys(analysis.categories).length} main categories. Focus on explaining what this technology does, when to use it, and its main advantages.`;
60
+ }
61
+ /**
62
+ * Find quick start pages
63
+ */
64
+ findQuickStartPages(content) {
65
+ return content.pages
66
+ .filter(p => {
67
+ const title = p.title.toLowerCase();
68
+ return (title.includes('quick start') ||
69
+ title.includes('getting started') ||
70
+ title.includes('installation') ||
71
+ title.includes('setup') ||
72
+ title.includes('introduction'));
73
+ })
74
+ .map(p => p.title)
75
+ .slice(0, 5);
76
+ }
77
+ /**
78
+ * Identify core features
79
+ */
80
+ identifyCoreFeatures(content) {
81
+ // Use categories and high-frequency topics
82
+ const features = [];
83
+ // Add categories as features
84
+ Object.keys(content.analysis.categories)
85
+ .sort((a, b) => content.analysis.categories[b] - content.analysis.categories[a])
86
+ .slice(0, 8)
87
+ .forEach(cat => features.push(cat));
88
+ // Add pages with many code examples
89
+ content.pages
90
+ .filter(p => p.codeBlocks >= 3)
91
+ .sort((a, b) => b.codeBlocks - a.codeBlocks)
92
+ .slice(0, 5)
93
+ .forEach(p => {
94
+ if (!features.includes(p.title)) {
95
+ features.push(p.title);
96
+ }
97
+ });
98
+ return features.slice(0, 10);
99
+ }
100
+ /**
101
+ * Extract best practice hints
102
+ */
103
+ extractBestPracticeHints(content) {
104
+ const hints = [];
105
+ content.pages.forEach(page => {
106
+ const title = page.title.toLowerCase();
107
+ if (title.includes('best practice') ||
108
+ title.includes('recommendation') ||
109
+ title.includes('guide') ||
110
+ title.includes('tip')) {
111
+ hints.push(page.title);
112
+ }
113
+ // Also check key points
114
+ page.keyPoints.forEach(point => {
115
+ if (point.toLowerCase().includes('should') ||
116
+ point.toLowerCase().includes('recommend') ||
117
+ point.toLowerCase().includes('avoid')) {
118
+ hints.push(point);
119
+ }
120
+ });
121
+ });
122
+ return hints.slice(0, 10);
123
+ }
124
+ /**
125
+ * Find troubleshooting content
126
+ */
127
+ findTroubleshootingContent(content) {
128
+ return content.pages
129
+ .filter(p => {
130
+ const title = p.title.toLowerCase();
131
+ const content = p.content.toLowerCase();
132
+ return (title.includes('troubleshoot') ||
133
+ title.includes('common issue') ||
134
+ title.includes('faq') ||
135
+ title.includes('error') ||
136
+ title.includes('debug') ||
137
+ content.includes('common mistake') ||
138
+ content.includes('frequently asked'));
139
+ })
140
+ .map(p => p.title)
141
+ .slice(0, 5);
142
+ }
143
+ /**
144
+ * Generate tips for SKILL creation
145
+ */
146
+ generateTips(content) {
147
+ const tips = [
148
+ 'Organize SKILL by phase-based workflow (Setup -> Development -> Testing -> Deployment)',
149
+ 'Include verification checklists for each major step',
150
+ 'Provide decision trees for common choices (e.g., which approach to use when)',
151
+ 'Include troubleshooting for common errors with solutions',
152
+ ];
153
+ // Add difficulty-specific tips
154
+ if (content.analysis.difficulty === 'beginner') {
155
+ tips.push('Focus on step-by-step instructions with clear examples', 'Explain prerequisites and fundamental concepts thoroughly');
156
+ }
157
+ else if (content.analysis.difficulty === 'advanced') {
158
+ tips.push('Focus on architecture patterns and advanced techniques', 'Include performance considerations and optimization strategies');
159
+ }
160
+ // Add code-specific tips if many examples
161
+ if (content.analysis.totalCodeBlocks > 30) {
162
+ tips.push('Create a comprehensive code examples section', 'Categorize code patterns by use case');
163
+ }
164
+ return tips;
165
+ }
166
+ /**
167
+ * Assess content quality
168
+ */
169
+ assessQuality(content) {
170
+ // Content quality: based on word count and structure
171
+ const avgWordsPerPage = content.analysis.totalWords / content.statistics.totalPages;
172
+ const contentQuality = Math.min(100, (avgWordsPerPage / 500) * 100);
173
+ // Code examples: based on code block density
174
+ const codeExamplesScore = Math.min(100, content.analysis.technicalDensity * 10);
175
+ // Completeness: based on page count and categories
176
+ const hasGoodCoverage = content.statistics.totalPages >= 10 &&
177
+ Object.keys(content.analysis.categories).length >= 3;
178
+ const completeness = hasGoodCoverage ? 80 + (Math.min(content.statistics.totalPages, 50) / 50) * 20 : 50;
179
+ // Overall quality
180
+ const overall = Math.round((contentQuality + codeExamplesScore + completeness) / 3);
181
+ return {
182
+ contentQuality: Math.round(contentQuality),
183
+ codeExamples: Math.round(codeExamplesScore),
184
+ completeness: Math.round(completeness),
185
+ overall,
186
+ };
187
+ }
188
+ }
189
+ //# sourceMappingURL=guide-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide-generator.js","sourceRoot":"","sources":["../../src/processor/guide-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Safe Coder MCP Server
4
+ * Orchestrates safe-coder-cli for documentation crawling and SKILL generation
5
+ */
6
+ export declare class SafeCoderMCPServer {
7
+ private server;
8
+ constructor();
9
+ /**
10
+ * Register MCP tools
11
+ */
12
+ private setupTools;
13
+ /**
14
+ * Start the MCP server
15
+ */
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=safe-coder-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-coder-mcp.d.ts","sourceRoot":"","sources":["../../src/server/safe-coder-mcp.ts"],"names":[],"mappings":";AAaA;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAY;;IAW1B;;OAEG;IACH,OAAO,CAAC,UAAU;IA8JlB;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAM3B"}