@stackguide/mcp-server 3.2.0 → 3.8.1

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 (177) hide show
  1. package/README.md +315 -9
  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/analyze.d.ts +11 -0
  7. package/dist/handlers/analyze.d.ts.map +1 -0
  8. package/dist/handlers/analyze.js +274 -0
  9. package/dist/handlers/analyze.js.map +1 -0
  10. package/dist/handlers/config.d.ts +1 -8
  11. package/dist/handlers/config.d.ts.map +1 -1
  12. package/dist/handlers/config.js +7 -1
  13. package/dist/handlers/config.js.map +1 -1
  14. package/dist/handlers/context.d.ts +1 -5
  15. package/dist/handlers/context.d.ts.map +1 -1
  16. package/dist/handlers/context.js +7 -1
  17. package/dist/handlers/context.js.map +1 -1
  18. package/dist/handlers/cursor.d.ts +1 -7
  19. package/dist/handlers/cursor.d.ts.map +1 -1
  20. package/dist/handlers/cursor.js +7 -1
  21. package/dist/handlers/cursor.js.map +1 -1
  22. package/dist/handlers/custom-rule.d.ts +1 -11
  23. package/dist/handlers/custom-rule.d.ts.map +1 -1
  24. package/dist/handlers/custom-rule.js +7 -1
  25. package/dist/handlers/custom-rule.js.map +1 -1
  26. package/dist/handlers/docs.d.ts +1 -8
  27. package/dist/handlers/docs.d.ts.map +1 -1
  28. package/dist/handlers/docs.js +7 -1
  29. package/dist/handlers/docs.js.map +1 -1
  30. package/dist/handlers/generate.d.ts +1 -13
  31. package/dist/handlers/generate.d.ts.map +1 -1
  32. package/dist/handlers/generate.js +6 -3
  33. package/dist/handlers/generate.js.map +1 -1
  34. package/dist/handlers/health.d.ts +1 -8
  35. package/dist/handlers/health.d.ts.map +1 -1
  36. package/dist/handlers/health.js +11 -3
  37. package/dist/handlers/health.js.map +1 -1
  38. package/dist/handlers/help.d.ts +1 -5
  39. package/dist/handlers/help.d.ts.map +1 -1
  40. package/dist/handlers/help.js +7 -1
  41. package/dist/handlers/help.js.map +1 -1
  42. package/dist/handlers/index.d.ts +1 -0
  43. package/dist/handlers/index.d.ts.map +1 -1
  44. package/dist/handlers/index.js +1 -0
  45. package/dist/handlers/index.js.map +1 -1
  46. package/dist/handlers/knowledge.d.ts +1 -8
  47. package/dist/handlers/knowledge.d.ts.map +1 -1
  48. package/dist/handlers/knowledge.js +7 -1
  49. package/dist/handlers/knowledge.js.map +1 -1
  50. package/dist/handlers/prompts.d.ts +31 -0
  51. package/dist/handlers/prompts.d.ts.map +1 -0
  52. package/dist/handlers/prompts.js +225 -0
  53. package/dist/handlers/prompts.js.map +1 -0
  54. package/dist/handlers/resources.d.ts +27 -0
  55. package/dist/handlers/resources.d.ts.map +1 -0
  56. package/dist/handlers/resources.js +210 -0
  57. package/dist/handlers/resources.js.map +1 -0
  58. package/dist/handlers/review.d.ts.map +1 -1
  59. package/dist/handlers/review.js +18 -1
  60. package/dist/handlers/review.js.map +1 -1
  61. package/dist/handlers/rules.d.ts +1 -9
  62. package/dist/handlers/rules.d.ts.map +1 -1
  63. package/dist/handlers/rules.js +7 -1
  64. package/dist/handlers/rules.js.map +1 -1
  65. package/dist/handlers/setup.d.ts +1 -0
  66. package/dist/handlers/setup.d.ts.map +1 -1
  67. package/dist/handlers/setup.js +42 -0
  68. package/dist/handlers/setup.js.map +1 -1
  69. package/dist/index.d.ts +4 -2
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +29 -417
  72. package/dist/index.js.map +1 -1
  73. package/dist/router/index.d.ts +69 -0
  74. package/dist/router/index.d.ts.map +1 -0
  75. package/dist/router/index.js +151 -0
  76. package/dist/router/index.js.map +1 -0
  77. package/dist/services/ast/analyzer.d.ts +55 -0
  78. package/dist/services/ast/analyzer.d.ts.map +1 -0
  79. package/dist/services/ast/analyzer.js +268 -0
  80. package/dist/services/ast/analyzer.js.map +1 -0
  81. package/dist/services/ast/index.d.ts +10 -0
  82. package/dist/services/ast/index.d.ts.map +1 -0
  83. package/dist/services/ast/index.js +12 -0
  84. package/dist/services/ast/index.js.map +1 -0
  85. package/dist/services/ast/rules.d.ts +13 -0
  86. package/dist/services/ast/rules.d.ts.map +1 -0
  87. package/dist/services/ast/rules.js +358 -0
  88. package/dist/services/ast/rules.js.map +1 -0
  89. package/dist/services/ast/treeSitterParser.d.ts +54 -0
  90. package/dist/services/ast/treeSitterParser.d.ts.map +1 -0
  91. package/dist/services/ast/treeSitterParser.js +394 -0
  92. package/dist/services/ast/treeSitterParser.js.map +1 -0
  93. package/dist/services/ast/types.d.ts +167 -0
  94. package/dist/services/ast/types.d.ts.map +1 -0
  95. package/dist/services/ast/types.js +35 -0
  96. package/dist/services/ast/types.js.map +1 -0
  97. package/dist/services/codeAnalyzer.d.ts.map +1 -1
  98. package/dist/services/codeAnalyzer.js +43 -3
  99. package/dist/services/codeAnalyzer.js.map +1 -1
  100. package/dist/services/httpClient.d.ts +45 -0
  101. package/dist/services/httpClient.d.ts.map +1 -0
  102. package/dist/services/httpClient.js +309 -0
  103. package/dist/services/httpClient.js.map +1 -0
  104. package/dist/services/intelligence/configGenerator.d.ts +28 -0
  105. package/dist/services/intelligence/configGenerator.d.ts.map +1 -0
  106. package/dist/services/intelligence/configGenerator.js +404 -0
  107. package/dist/services/intelligence/configGenerator.js.map +1 -0
  108. package/dist/services/intelligence/dependencyAdvisor.d.ts +24 -0
  109. package/dist/services/intelligence/dependencyAdvisor.d.ts.map +1 -0
  110. package/dist/services/intelligence/dependencyAdvisor.js +404 -0
  111. package/dist/services/intelligence/dependencyAdvisor.js.map +1 -0
  112. package/dist/services/intelligence/index.d.ts +12 -0
  113. package/dist/services/intelligence/index.d.ts.map +1 -0
  114. package/dist/services/intelligence/index.js +16 -0
  115. package/dist/services/intelligence/index.js.map +1 -0
  116. package/dist/services/intelligence/projectFs.d.ts +11 -0
  117. package/dist/services/intelligence/projectFs.d.ts.map +1 -0
  118. package/dist/services/intelligence/projectFs.js +30 -0
  119. package/dist/services/intelligence/projectFs.js.map +1 -0
  120. package/dist/services/intelligence/projectIntelligence.d.ts +26 -0
  121. package/dist/services/intelligence/projectIntelligence.d.ts.map +1 -0
  122. package/dist/services/intelligence/projectIntelligence.js +344 -0
  123. package/dist/services/intelligence/projectIntelligence.js.map +1 -0
  124. package/dist/services/intelligence/structureAnalyzer.d.ts +27 -0
  125. package/dist/services/intelligence/structureAnalyzer.d.ts.map +1 -0
  126. package/dist/services/intelligence/structureAnalyzer.js +286 -0
  127. package/dist/services/intelligence/structureAnalyzer.js.map +1 -0
  128. package/dist/services/intelligence/templates.d.ts +22 -0
  129. package/dist/services/intelligence/templates.d.ts.map +1 -0
  130. package/dist/services/intelligence/templates.js +521 -0
  131. package/dist/services/intelligence/templates.js.map +1 -0
  132. package/dist/services/intelligence/types.d.ts +222 -0
  133. package/dist/services/intelligence/types.d.ts.map +1 -0
  134. package/dist/services/intelligence/types.js +7 -0
  135. package/dist/services/intelligence/types.js.map +1 -0
  136. package/dist/services/projectFs.d.ts +85 -0
  137. package/dist/services/projectFs.d.ts.map +1 -0
  138. package/dist/services/projectFs.js +287 -0
  139. package/dist/services/projectFs.js.map +1 -0
  140. package/dist/services/rulesEngine.d.ts +255 -0
  141. package/dist/services/rulesEngine.d.ts.map +1 -0
  142. package/dist/services/rulesEngine.js +483 -0
  143. package/dist/services/rulesEngine.js.map +1 -0
  144. package/dist/services/webDocumentation.d.ts +9 -0
  145. package/dist/services/webDocumentation.d.ts.map +1 -1
  146. package/dist/services/webDocumentation.js +144 -1
  147. package/dist/services/webDocumentation.js.map +1 -1
  148. package/dist/storage/index.d.ts +7 -0
  149. package/dist/storage/index.d.ts.map +1 -0
  150. package/dist/storage/index.js +7 -0
  151. package/dist/storage/index.js.map +1 -0
  152. package/dist/storage/sqlite.d.ts +92 -0
  153. package/dist/storage/sqlite.d.ts.map +1 -0
  154. package/dist/storage/sqlite.js +471 -0
  155. package/dist/storage/sqlite.js.map +1 -0
  156. package/dist/storage/types.d.ts +147 -0
  157. package/dist/storage/types.d.ts.map +1 -0
  158. package/dist/storage/types.js +13 -0
  159. package/dist/storage/types.js.map +1 -0
  160. package/dist/tools/definitions.d.ts +87 -0
  161. package/dist/tools/definitions.d.ts.map +1 -1
  162. package/dist/tools/definitions.js +34 -0
  163. package/dist/tools/definitions.js.map +1 -1
  164. package/dist/utils/logger.d.ts +11 -2
  165. package/dist/utils/logger.d.ts.map +1 -1
  166. package/dist/utils/logger.js +30 -2
  167. package/dist/utils/logger.js.map +1 -1
  168. package/dist/utils/validation.d.ts +3 -3
  169. package/dist/validation/index.d.ts +8 -0
  170. package/dist/validation/index.d.ts.map +1 -0
  171. package/dist/validation/index.js +19 -0
  172. package/dist/validation/index.js.map +1 -0
  173. package/dist/validation/schemas.d.ts +341 -0
  174. package/dist/validation/schemas.d.ts.map +1 -0
  175. package/dist/validation/schemas.js +244 -0
  176. package/dist/validation/schemas.js.map +1 -0
  177. package/package.json +9 -2
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Types for Project Intelligence System
3
+ * Auto-Configuration Intelligence - Phase 4
4
+ * @version 3.3.0
5
+ */
6
+ /**
7
+ * Project structure analysis result
8
+ */
9
+ export interface StructureAnalysis {
10
+ /** Root directory of the project */
11
+ rootPath: string;
12
+ /** Detected project type */
13
+ projectType: string;
14
+ /** Overall structure health score (0-100) */
15
+ structureScore: number;
16
+ /** Existing directories */
17
+ existingDirs: string[];
18
+ /** Missing recommended directories */
19
+ missingDirs: DirectorySuggestion[];
20
+ /** Existing key files */
21
+ existingFiles: string[];
22
+ /** Missing recommended files */
23
+ missingFiles: FileSuggestion[];
24
+ /** Structure improvements */
25
+ improvements: StructureImprovement[];
26
+ }
27
+ export interface DirectorySuggestion {
28
+ path: string;
29
+ purpose: string;
30
+ priority: 'high' | 'medium' | 'low';
31
+ template?: string;
32
+ }
33
+ export interface FileSuggestion {
34
+ path: string;
35
+ purpose: string;
36
+ priority: 'high' | 'medium' | 'low';
37
+ template?: string;
38
+ content?: string;
39
+ }
40
+ export interface StructureImprovement {
41
+ type: 'reorganize' | 'create' | 'rename' | 'move';
42
+ description: string;
43
+ priority: 'high' | 'medium' | 'low';
44
+ from?: string;
45
+ to?: string;
46
+ }
47
+ /**
48
+ * Configuration analysis and generation
49
+ */
50
+ export interface ConfigAnalysis {
51
+ /** Existing configuration files */
52
+ existingConfigs: ConfigFile[];
53
+ /** Recommended configurations */
54
+ recommendedConfigs: ConfigRecommendation[];
55
+ /** Configuration issues found */
56
+ issues: ConfigIssue[];
57
+ /** Overall config health score */
58
+ configScore: number;
59
+ }
60
+ export interface ConfigFile {
61
+ path: string;
62
+ type: ConfigType;
63
+ isValid: boolean;
64
+ settings: Record<string, unknown>;
65
+ issues?: string[];
66
+ }
67
+ export type ConfigType = 'eslint' | 'prettier' | 'tsconfig' | 'jest' | 'vitest' | 'babel' | 'webpack' | 'vite' | 'rollup' | 'docker' | 'github-actions' | 'editorconfig' | 'gitignore' | 'env' | 'package-json' | 'pyproject' | 'cargo' | 'go-mod' | 'other';
68
+ export interface ConfigRecommendation {
69
+ type: ConfigType;
70
+ filename: string;
71
+ description: string;
72
+ priority: 'critical' | 'high' | 'medium' | 'low';
73
+ suggestedContent: string;
74
+ reason: string;
75
+ }
76
+ export interface ConfigIssue {
77
+ file: string;
78
+ type: ConfigType;
79
+ severity: 'error' | 'warning' | 'info';
80
+ message: string;
81
+ suggestion: string;
82
+ autoFixable: boolean;
83
+ fix?: ConfigFix;
84
+ }
85
+ export interface ConfigFix {
86
+ type: 'add' | 'remove' | 'modify';
87
+ path: string;
88
+ key?: string;
89
+ value?: unknown;
90
+ description: string;
91
+ }
92
+ /**
93
+ * Dependency analysis
94
+ */
95
+ export interface DependencyAnalysis {
96
+ /** Package manager detected */
97
+ packageManager: 'npm' | 'yarn' | 'pnpm' | 'pip' | 'poetry' | 'cargo' | 'go' | 'bundler' | 'composer' | 'unknown';
98
+ /** Total dependencies count */
99
+ totalDependencies: number;
100
+ /** Direct dependencies */
101
+ directDependencies: DependencyInfo[];
102
+ /** Dev dependencies */
103
+ devDependencies: DependencyInfo[];
104
+ /** Outdated packages */
105
+ outdatedPackages: OutdatedPackage[];
106
+ /** Security vulnerabilities (if detectable) */
107
+ vulnerabilities: VulnerabilityInfo[];
108
+ /** Missing recommended dependencies */
109
+ recommendedAdditions: DependencyRecommendation[];
110
+ /** Unnecessary dependencies */
111
+ unnecessaryDependencies: string[];
112
+ /** Dependency health score */
113
+ dependencyScore: number;
114
+ }
115
+ export interface DependencyInfo {
116
+ name: string;
117
+ version: string;
118
+ type: 'production' | 'dev' | 'peer' | 'optional';
119
+ isLocal?: boolean;
120
+ }
121
+ export interface OutdatedPackage {
122
+ name: string;
123
+ currentVersion: string;
124
+ latestVersion: string;
125
+ type: 'major' | 'minor' | 'patch';
126
+ breaking: boolean;
127
+ }
128
+ export interface VulnerabilityInfo {
129
+ package: string;
130
+ severity: 'critical' | 'high' | 'medium' | 'low';
131
+ title: string;
132
+ fixedIn?: string;
133
+ url?: string;
134
+ }
135
+ export interface DependencyRecommendation {
136
+ name: string;
137
+ version?: string;
138
+ reason: string;
139
+ category: 'linting' | 'testing' | 'security' | 'performance' | 'dx' | 'types';
140
+ priority: 'high' | 'medium' | 'low';
141
+ }
142
+ /**
143
+ * Full project intelligence report
144
+ */
145
+ export interface IntelligenceReport {
146
+ /** Analysis timestamp */
147
+ timestamp: string;
148
+ /** Project path */
149
+ projectPath: string;
150
+ /** Detected project type */
151
+ projectType: string;
152
+ /** Detection confidence */
153
+ confidence: 'high' | 'medium' | 'low';
154
+ /** Overall intelligence score (0-100) */
155
+ overallScore: number;
156
+ /** Grade based on score */
157
+ grade: 'A' | 'B' | 'C' | 'D' | 'F';
158
+ /** Structure analysis */
159
+ structure: StructureAnalysis;
160
+ /** Configuration analysis */
161
+ configuration: ConfigAnalysis;
162
+ /** Dependency analysis */
163
+ dependencies: DependencyAnalysis;
164
+ /** Top priority actions */
165
+ priorityActions: PriorityAction[];
166
+ /** Suggested workflow */
167
+ suggestedWorkflow: WorkflowStep[];
168
+ /** Estimated effort to achieve optimal state */
169
+ estimatedEffort: 'minimal' | 'moderate' | 'significant';
170
+ }
171
+ export interface PriorityAction {
172
+ id: string;
173
+ category: 'structure' | 'config' | 'dependencies' | 'security';
174
+ priority: 'critical' | 'high' | 'medium' | 'low';
175
+ title: string;
176
+ description: string;
177
+ command?: string;
178
+ autoApplicable: boolean;
179
+ }
180
+ export interface WorkflowStep {
181
+ order: number;
182
+ title: string;
183
+ description: string;
184
+ command?: string;
185
+ estimatedTime: string;
186
+ optional: boolean;
187
+ }
188
+ /**
189
+ * Smart configuration templates
190
+ */
191
+ export interface SmartConfig {
192
+ type: ConfigType;
193
+ filename: string;
194
+ content: string;
195
+ description: string;
196
+ customizations: ConfigCustomization[];
197
+ }
198
+ export interface ConfigCustomization {
199
+ key: string;
200
+ description: string;
201
+ options: ConfigOption[];
202
+ default: string | boolean | number;
203
+ }
204
+ export interface ConfigOption {
205
+ value: string | boolean | number;
206
+ label: string;
207
+ description: string;
208
+ }
209
+ /**
210
+ * Framework-specific template definitions
211
+ */
212
+ export interface FrameworkTemplate {
213
+ projectType: string;
214
+ name: string;
215
+ requiredDirs: string[];
216
+ optionalDirs: string[];
217
+ requiredFiles: string[];
218
+ optionalFiles: string[];
219
+ recommendedDependencies: DependencyRecommendation[];
220
+ configTemplates: SmartConfig[];
221
+ }
222
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/intelligence/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Types for Project Intelligence System
3
+ * Auto-Configuration Intelligence - Phase 4
4
+ * @version 3.3.0
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/intelligence/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * ProjectFs - Injectable Filesystem Abstraction
3
+ * Enables real FS access in production, mocks in tests
4
+ * @version 3.4.0
5
+ */
6
+ export interface FileInfo {
7
+ name: string;
8
+ path: string;
9
+ isDirectory: boolean;
10
+ isFile: boolean;
11
+ size?: number;
12
+ modifiedAt?: Date;
13
+ }
14
+ export interface DirectoryScanOptions {
15
+ maxDepth?: number;
16
+ ignorePatterns?: string[];
17
+ includeHidden?: boolean;
18
+ }
19
+ export interface ProjectFs {
20
+ /** Check if path exists */
21
+ exists(filepath: string): Promise<boolean>;
22
+ /** Check if path is a directory */
23
+ isDirectory(filepath: string): Promise<boolean>;
24
+ /** Check if path is a file */
25
+ isFile(filepath: string): Promise<boolean>;
26
+ /** Read file contents */
27
+ readFile(filepath: string): Promise<string>;
28
+ /** Write file contents */
29
+ writeFile(filepath: string, content: string): Promise<void>;
30
+ /** Read directory entries */
31
+ readDir(dirpath: string): Promise<FileInfo[]>;
32
+ /** Recursively scan directory */
33
+ scanDir(dirpath: string, options?: DirectoryScanOptions): Promise<FileInfo[]>;
34
+ /** Get file/directory info */
35
+ stat(filepath: string): Promise<FileInfo | null>;
36
+ /** Resolve path relative to base */
37
+ resolve(...paths: string[]): string;
38
+ /** Join paths */
39
+ join(...paths: string[]): string;
40
+ /** Get base directory */
41
+ getBasePath(): string;
42
+ }
43
+ export declare class RealProjectFs implements ProjectFs {
44
+ private basePath;
45
+ constructor(basePath?: string);
46
+ exists(filepath: string): Promise<boolean>;
47
+ isDirectory(filepath: string): Promise<boolean>;
48
+ isFile(filepath: string): Promise<boolean>;
49
+ readFile(filepath: string): Promise<string>;
50
+ writeFile(filepath: string, content: string): Promise<void>;
51
+ readDir(dirpath: string): Promise<FileInfo[]>;
52
+ scanDir(dirpath: string, options?: DirectoryScanOptions): Promise<FileInfo[]>;
53
+ stat(filepath: string): Promise<FileInfo | null>;
54
+ resolve(...paths: string[]): string;
55
+ join(...paths: string[]): string;
56
+ getBasePath(): string;
57
+ }
58
+ export interface MockFileEntry {
59
+ content?: string;
60
+ isDirectory?: boolean;
61
+ }
62
+ export declare class MockProjectFs implements ProjectFs {
63
+ private basePath;
64
+ private files;
65
+ constructor(basePath?: string, initialFiles?: Record<string, MockFileEntry>);
66
+ addFile(filepath: string, content: string): void;
67
+ addDirectory(dirpath: string): void;
68
+ exists(filepath: string): Promise<boolean>;
69
+ isDirectory(filepath: string): Promise<boolean>;
70
+ isFile(filepath: string): Promise<boolean>;
71
+ readFile(filepath: string): Promise<string>;
72
+ writeFile(filepath: string, content: string): Promise<void>;
73
+ readDir(dirpath: string): Promise<FileInfo[]>;
74
+ scanDir(dirpath: string, options?: DirectoryScanOptions): Promise<FileInfo[]>;
75
+ stat(filepath: string): Promise<FileInfo | null>;
76
+ resolve(...paths: string[]): string;
77
+ join(...paths: string[]): string;
78
+ getBasePath(): string;
79
+ private hasChildrenAt;
80
+ }
81
+ export declare function createProjectFs(basePath?: string): ProjectFs;
82
+ export declare function getProjectFs(): ProjectFs;
83
+ export declare function setProjectFs(fs: ProjectFs): void;
84
+ export declare function resetProjectFs(): void;
85
+ //# sourceMappingURL=projectFs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectFs.d.ts","sourceRoot":"","sources":["../../src/services/projectFs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * ProjectFs - Injectable Filesystem Abstraction
3
+ * Enables real FS access in production, mocks in tests
4
+ * @version 3.4.0
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ // ============================================================================
9
+ // Real Filesystem Implementation
10
+ // ============================================================================
11
+ const DEFAULT_IGNORE_PATTERNS = [
12
+ 'node_modules',
13
+ '.git',
14
+ '.svn',
15
+ '.hg',
16
+ '__pycache__',
17
+ '.pytest_cache',
18
+ '.mypy_cache',
19
+ 'target',
20
+ 'dist',
21
+ 'build',
22
+ '.next',
23
+ '.nuxt',
24
+ 'coverage',
25
+ '.nyc_output',
26
+ 'vendor',
27
+ '.idea',
28
+ '.vscode'
29
+ ];
30
+ export class RealProjectFs {
31
+ basePath;
32
+ constructor(basePath = process.cwd()) {
33
+ this.basePath = path.resolve(basePath);
34
+ }
35
+ async exists(filepath) {
36
+ try {
37
+ const fullPath = this.resolve(filepath);
38
+ await fs.promises.access(fullPath);
39
+ return true;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ async isDirectory(filepath) {
46
+ try {
47
+ const fullPath = this.resolve(filepath);
48
+ const stats = await fs.promises.stat(fullPath);
49
+ return stats.isDirectory();
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ async isFile(filepath) {
56
+ try {
57
+ const fullPath = this.resolve(filepath);
58
+ const stats = await fs.promises.stat(fullPath);
59
+ return stats.isFile();
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ async readFile(filepath) {
66
+ const fullPath = this.resolve(filepath);
67
+ return fs.promises.readFile(fullPath, 'utf-8');
68
+ }
69
+ async writeFile(filepath, content) {
70
+ const fullPath = this.resolve(filepath);
71
+ const dir = path.dirname(fullPath);
72
+ // Ensure directory exists
73
+ await fs.promises.mkdir(dir, { recursive: true });
74
+ await fs.promises.writeFile(fullPath, content, 'utf-8');
75
+ }
76
+ async readDir(dirpath) {
77
+ const fullPath = this.resolve(dirpath);
78
+ const entries = await fs.promises.readdir(fullPath, { withFileTypes: true });
79
+ return entries.map(entry => ({
80
+ name: entry.name,
81
+ path: path.join(dirpath, entry.name),
82
+ isDirectory: entry.isDirectory(),
83
+ isFile: entry.isFile()
84
+ }));
85
+ }
86
+ async scanDir(dirpath, options = {}) {
87
+ const { maxDepth = 5, ignorePatterns = DEFAULT_IGNORE_PATTERNS, includeHidden = false } = options;
88
+ const results = [];
89
+ const scan = async (currentPath, depth) => {
90
+ if (depth > maxDepth)
91
+ return;
92
+ try {
93
+ const entries = await this.readDir(currentPath);
94
+ for (const entry of entries) {
95
+ // Skip hidden files unless requested
96
+ if (!includeHidden && entry.name.startsWith('.'))
97
+ continue;
98
+ // Skip ignored patterns
99
+ if (ignorePatterns.some(pattern => entry.name === pattern))
100
+ continue;
101
+ results.push(entry);
102
+ if (entry.isDirectory) {
103
+ await scan(entry.path, depth + 1);
104
+ }
105
+ }
106
+ }
107
+ catch (error) {
108
+ // Directory may not exist or be inaccessible
109
+ }
110
+ };
111
+ await scan(dirpath, 0);
112
+ return results;
113
+ }
114
+ async stat(filepath) {
115
+ try {
116
+ const fullPath = this.resolve(filepath);
117
+ const stats = await fs.promises.stat(fullPath);
118
+ return {
119
+ name: path.basename(filepath),
120
+ path: filepath,
121
+ isDirectory: stats.isDirectory(),
122
+ isFile: stats.isFile(),
123
+ size: stats.size,
124
+ modifiedAt: stats.mtime
125
+ };
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ resolve(...paths) {
132
+ if (paths.length === 0)
133
+ return this.basePath;
134
+ const firstPath = paths[0];
135
+ if (path.isAbsolute(firstPath)) {
136
+ return path.resolve(...paths);
137
+ }
138
+ return path.resolve(this.basePath, ...paths);
139
+ }
140
+ join(...paths) {
141
+ return path.join(...paths);
142
+ }
143
+ getBasePath() {
144
+ return this.basePath;
145
+ }
146
+ }
147
+ export class MockProjectFs {
148
+ basePath;
149
+ files;
150
+ constructor(basePath = '/mock/project', initialFiles) {
151
+ this.basePath = basePath;
152
+ this.files = new Map(Object.entries(initialFiles || {}));
153
+ }
154
+ addFile(filepath, content) {
155
+ this.files.set(filepath, { content, isDirectory: false });
156
+ }
157
+ addDirectory(dirpath) {
158
+ this.files.set(dirpath, { isDirectory: true });
159
+ }
160
+ async exists(filepath) {
161
+ const resolved = this.resolve(filepath);
162
+ return this.files.has(resolved) || this.hasChildrenAt(resolved);
163
+ }
164
+ async isDirectory(filepath) {
165
+ const resolved = this.resolve(filepath);
166
+ const entry = this.files.get(resolved);
167
+ if (entry?.isDirectory)
168
+ return true;
169
+ return this.hasChildrenAt(resolved);
170
+ }
171
+ async isFile(filepath) {
172
+ const resolved = this.resolve(filepath);
173
+ const entry = this.files.get(resolved);
174
+ return entry?.content !== undefined;
175
+ }
176
+ async readFile(filepath) {
177
+ const resolved = this.resolve(filepath);
178
+ const entry = this.files.get(resolved);
179
+ if (!entry?.content) {
180
+ throw new Error(`ENOENT: no such file: ${resolved}`);
181
+ }
182
+ return entry.content;
183
+ }
184
+ async writeFile(filepath, content) {
185
+ const resolved = this.resolve(filepath);
186
+ this.files.set(resolved, { content, isDirectory: false });
187
+ }
188
+ async readDir(dirpath) {
189
+ const resolved = this.resolve(dirpath);
190
+ const results = [];
191
+ const seen = new Set();
192
+ for (const [filePath, entry] of this.files) {
193
+ if (filePath.startsWith(resolved + '/')) {
194
+ const relativePath = filePath.slice(resolved.length + 1);
195
+ const parts = relativePath.split('/');
196
+ const name = parts[0];
197
+ if (!seen.has(name)) {
198
+ seen.add(name);
199
+ results.push({
200
+ name,
201
+ path: path.join(dirpath, name),
202
+ isDirectory: parts.length > 1 || entry.isDirectory === true,
203
+ isFile: parts.length === 1 && entry.content !== undefined
204
+ });
205
+ }
206
+ }
207
+ }
208
+ return results;
209
+ }
210
+ async scanDir(dirpath, options = {}) {
211
+ const { maxDepth = 5, ignorePatterns = [], includeHidden = false } = options;
212
+ const results = [];
213
+ const scan = async (currentPath, depth) => {
214
+ if (depth > maxDepth)
215
+ return;
216
+ const entries = await this.readDir(currentPath);
217
+ for (const entry of entries) {
218
+ if (!includeHidden && entry.name.startsWith('.'))
219
+ continue;
220
+ if (ignorePatterns.some(p => entry.name === p))
221
+ continue;
222
+ results.push(entry);
223
+ if (entry.isDirectory) {
224
+ await scan(entry.path, depth + 1);
225
+ }
226
+ }
227
+ };
228
+ await scan(dirpath, 0);
229
+ return results;
230
+ }
231
+ async stat(filepath) {
232
+ const resolved = this.resolve(filepath);
233
+ const entry = this.files.get(resolved);
234
+ if (!entry && !this.hasChildrenAt(resolved))
235
+ return null;
236
+ return {
237
+ name: path.basename(filepath),
238
+ path: filepath,
239
+ isDirectory: entry?.isDirectory === true || this.hasChildrenAt(resolved),
240
+ isFile: entry?.content !== undefined,
241
+ size: entry?.content?.length || 0
242
+ };
243
+ }
244
+ resolve(...paths) {
245
+ if (paths.length === 0)
246
+ return this.basePath;
247
+ const firstPath = paths[0];
248
+ if (path.isAbsolute(firstPath)) {
249
+ return path.resolve(...paths);
250
+ }
251
+ return path.resolve(this.basePath, ...paths);
252
+ }
253
+ join(...paths) {
254
+ return path.join(...paths);
255
+ }
256
+ getBasePath() {
257
+ return this.basePath;
258
+ }
259
+ hasChildrenAt(dirpath) {
260
+ for (const filePath of this.files.keys()) {
261
+ if (filePath.startsWith(dirpath + '/')) {
262
+ return true;
263
+ }
264
+ }
265
+ return false;
266
+ }
267
+ }
268
+ // ============================================================================
269
+ // Factory & Default Instance
270
+ // ============================================================================
271
+ let defaultFs = null;
272
+ export function createProjectFs(basePath) {
273
+ return new RealProjectFs(basePath);
274
+ }
275
+ export function getProjectFs() {
276
+ if (!defaultFs) {
277
+ defaultFs = createProjectFs();
278
+ }
279
+ return defaultFs;
280
+ }
281
+ export function setProjectFs(fs) {
282
+ defaultFs = fs;
283
+ }
284
+ export function resetProjectFs() {
285
+ defaultFs = null;
286
+ }
287
+ //# sourceMappingURL=projectFs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectFs.js","sourceRoot":"","sources":["../../src/services/projectFs.ts"],"names":[],"mappings":"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"}