codingbuddy 2.1.0 → 2.2.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 (157) hide show
  1. package/README.md +62 -0
  2. package/dist/src/agent/agent-prompt.builder.js +6 -0
  3. package/dist/src/agent/agent-prompt.builder.js.map +1 -1
  4. package/dist/src/analyzer/analyzer.module.js +3 -2
  5. package/dist/src/analyzer/analyzer.module.js.map +1 -1
  6. package/dist/src/analyzer/config.analyzer.js +11 -3
  7. package/dist/src/analyzer/config.analyzer.js.map +1 -1
  8. package/dist/src/analyzer/conventions.analyzer.d.ts +20 -0
  9. package/dist/src/analyzer/conventions.analyzer.js +395 -0
  10. package/dist/src/analyzer/conventions.analyzer.js.map +1 -0
  11. package/dist/src/analyzer/conventions.schemas.d.ts +76 -0
  12. package/dist/src/analyzer/conventions.schemas.js +71 -0
  13. package/dist/src/analyzer/conventions.schemas.js.map +1 -0
  14. package/dist/src/analyzer/conventions.types.d.ts +81 -0
  15. package/dist/src/analyzer/conventions.types.js +33 -0
  16. package/dist/src/analyzer/conventions.types.js.map +1 -0
  17. package/dist/src/checklist/checklist.types.d.ts +1 -1
  18. package/dist/src/checklist/checklist.types.js +1 -0
  19. package/dist/src/checklist/checklist.types.js.map +1 -1
  20. package/dist/src/cli/cli.js +5 -0
  21. package/dist/src/cli/cli.js.map +1 -1
  22. package/dist/src/cli/cli.types.d.ts +1 -0
  23. package/dist/src/cli/init/init.command.js +29 -52
  24. package/dist/src/cli/init/init.command.js.map +1 -1
  25. package/dist/src/cli/init/init.wizard.d.ts +22 -0
  26. package/dist/src/cli/init/init.wizard.js +277 -0
  27. package/dist/src/cli/init/init.wizard.js.map +1 -0
  28. package/dist/src/cli/init/prompts/architecture-prompt.d.ts +16 -0
  29. package/dist/src/cli/init/prompts/architecture-prompt.js +66 -0
  30. package/dist/src/cli/init/prompts/architecture-prompt.js.map +1 -0
  31. package/dist/src/cli/init/prompts/basic-prompt.d.ts +13 -0
  32. package/dist/src/cli/init/prompts/basic-prompt.js +53 -0
  33. package/dist/src/cli/init/prompts/basic-prompt.js.map +1 -0
  34. package/dist/src/cli/init/prompts/conventions-prompt.d.ts +19 -0
  35. package/dist/src/cli/init/prompts/conventions-prompt.js +74 -0
  36. package/dist/src/cli/init/prompts/conventions-prompt.js.map +1 -0
  37. package/dist/src/cli/init/prompts/index.d.ts +10 -0
  38. package/dist/src/cli/init/prompts/index.js +27 -1
  39. package/dist/src/cli/init/prompts/index.js.map +1 -1
  40. package/dist/src/cli/init/prompts/language-prompt.d.ts +1 -1
  41. package/dist/src/cli/init/prompts/model-prompt.js +2 -2
  42. package/dist/src/cli/init/prompts/model-prompt.js.map +1 -1
  43. package/dist/src/cli/init/prompts/tech-stack-prompt.d.ts +22 -0
  44. package/dist/src/cli/init/prompts/tech-stack-prompt.js +68 -0
  45. package/dist/src/cli/init/prompts/tech-stack-prompt.js.map +1 -0
  46. package/dist/src/cli/init/prompts/test-strategy-prompt.d.ts +19 -0
  47. package/dist/src/cli/init/prompts/test-strategy-prompt.js +75 -0
  48. package/dist/src/cli/init/prompts/test-strategy-prompt.js.map +1 -0
  49. package/dist/src/cli/init/summary/index.d.ts +2 -0
  50. package/dist/src/cli/init/summary/index.js +9 -0
  51. package/dist/src/cli/init/summary/index.js.map +1 -0
  52. package/dist/src/cli/init/summary/summary.prompt.d.ts +7 -0
  53. package/dist/src/cli/init/summary/summary.prompt.js +22 -0
  54. package/dist/src/cli/init/summary/summary.prompt.js.map +1 -0
  55. package/dist/src/cli/init/summary/summary.renderer.d.ts +32 -0
  56. package/dist/src/cli/init/summary/summary.renderer.js +41 -0
  57. package/dist/src/cli/init/summary/summary.renderer.js.map +1 -0
  58. package/dist/src/cli/init/templates/config-renderer.d.ts +42 -0
  59. package/dist/src/cli/init/templates/config-renderer.js +247 -0
  60. package/dist/src/cli/init/templates/config-renderer.js.map +1 -0
  61. package/dist/src/cli/init/templates/index.d.ts +1 -0
  62. package/dist/src/cli/init/templates/index.js +5 -1
  63. package/dist/src/cli/init/templates/index.js.map +1 -1
  64. package/dist/src/cli/utils/console.js +26 -7
  65. package/dist/src/cli/utils/console.js.map +1 -1
  66. package/dist/src/config/config.loader.d.ts +3 -0
  67. package/dist/src/config/config.loader.js +54 -0
  68. package/dist/src/config/config.loader.js.map +1 -1
  69. package/dist/src/config/config.schema.d.ts +7 -0
  70. package/dist/src/config/config.schema.js +5 -1
  71. package/dist/src/config/config.schema.js.map +1 -1
  72. package/dist/src/config/config.service.d.ts +1 -0
  73. package/dist/src/config/config.service.js +26 -1
  74. package/dist/src/config/config.service.js.map +1 -1
  75. package/dist/src/keyword/auto-executor.d.ts +17 -0
  76. package/dist/src/keyword/auto-executor.js +80 -0
  77. package/dist/src/keyword/auto-executor.js.map +1 -0
  78. package/dist/src/keyword/auto-executor.types.d.ts +44 -0
  79. package/dist/src/keyword/auto-executor.types.js +7 -0
  80. package/dist/src/keyword/auto-executor.types.js.map +1 -0
  81. package/dist/src/keyword/auto-formatter.d.ts +8 -0
  82. package/dist/src/keyword/auto-formatter.js +79 -0
  83. package/dist/src/keyword/auto-formatter.js.map +1 -0
  84. package/dist/src/keyword/auto-prompt-builder.d.ts +6 -0
  85. package/dist/src/keyword/auto-prompt-builder.js +47 -0
  86. package/dist/src/keyword/auto-prompt-builder.js.map +1 -0
  87. package/dist/src/keyword/index.d.ts +9 -0
  88. package/dist/src/keyword/index.js +28 -0
  89. package/dist/src/keyword/index.js.map +1 -0
  90. package/dist/src/keyword/keyword.module.js +11 -1
  91. package/dist/src/keyword/keyword.module.js.map +1 -1
  92. package/dist/src/keyword/keyword.service.d.ts +9 -2
  93. package/dist/src/keyword/keyword.service.js +108 -44
  94. package/dist/src/keyword/keyword.service.js.map +1 -1
  95. package/dist/src/keyword/keyword.types.d.ts +11 -8
  96. package/dist/src/keyword/keyword.types.js +22 -12
  97. package/dist/src/keyword/keyword.types.js.map +1 -1
  98. package/dist/src/keyword/primary-agent-resolver.js +4 -4
  99. package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
  100. package/dist/src/keyword/rule-filter.js +1 -0
  101. package/dist/src/keyword/rule-filter.js.map +1 -1
  102. package/dist/src/main.js +12 -4
  103. package/dist/src/main.js.map +1 -1
  104. package/dist/src/mcp/handlers/abstract-handler.d.ts +8 -0
  105. package/dist/src/mcp/handlers/abstract-handler.js +19 -0
  106. package/dist/src/mcp/handlers/abstract-handler.js.map +1 -0
  107. package/dist/src/mcp/handlers/agent.handler.d.ts +6 -4
  108. package/dist/src/mcp/handlers/agent.handler.js +8 -15
  109. package/dist/src/mcp/handlers/agent.handler.js.map +1 -1
  110. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +6 -4
  111. package/dist/src/mcp/handlers/checklist-context.handler.js +8 -12
  112. package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -1
  113. package/dist/src/mcp/handlers/config.handler.d.ts +6 -4
  114. package/dist/src/mcp/handlers/config.handler.js +12 -20
  115. package/dist/src/mcp/handlers/config.handler.js.map +1 -1
  116. package/dist/src/mcp/handlers/conventions.handler.d.ts +12 -0
  117. package/dist/src/mcp/handlers/conventions.handler.js +73 -0
  118. package/dist/src/mcp/handlers/conventions.handler.js.map +1 -0
  119. package/dist/src/mcp/handlers/index.d.ts +1 -0
  120. package/dist/src/mcp/handlers/index.js +3 -1
  121. package/dist/src/mcp/handlers/index.js.map +1 -1
  122. package/dist/src/mcp/handlers/mode.handler.d.ts +6 -5
  123. package/dist/src/mcp/handlers/mode.handler.js +6 -13
  124. package/dist/src/mcp/handlers/mode.handler.js.map +1 -1
  125. package/dist/src/mcp/handlers/rules.handler.d.ts +6 -4
  126. package/dist/src/mcp/handlers/rules.handler.js +8 -12
  127. package/dist/src/mcp/handlers/rules.handler.js.map +1 -1
  128. package/dist/src/mcp/handlers/skill.handler.d.ts +6 -4
  129. package/dist/src/mcp/handlers/skill.handler.js +8 -12
  130. package/dist/src/mcp/handlers/skill.handler.js.map +1 -1
  131. package/dist/src/mcp/mcp-serverless.js +5 -0
  132. package/dist/src/mcp/mcp-serverless.js.map +1 -1
  133. package/dist/src/mcp/mcp.module.js +1 -0
  134. package/dist/src/mcp/mcp.module.js.map +1 -1
  135. package/dist/src/mcp/mcp.service.d.ts +0 -1
  136. package/dist/src/mcp/mcp.service.js +2 -5
  137. package/dist/src/mcp/mcp.service.js.map +1 -1
  138. package/dist/src/model/model.constants.js.map +1 -1
  139. package/dist/src/model/model.resolver.js +8 -0
  140. package/dist/src/model/model.resolver.js.map +1 -1
  141. package/dist/src/shared/async.utils.d.ts +8 -0
  142. package/dist/src/shared/async.utils.js +18 -0
  143. package/dist/src/shared/async.utils.js.map +1 -0
  144. package/dist/src/shared/file.utils.d.ts +38 -2
  145. package/dist/src/shared/file.utils.js +104 -3
  146. package/dist/src/shared/file.utils.js.map +1 -1
  147. package/dist/src/shared/format.utils.d.ts +1 -0
  148. package/dist/src/shared/format.utils.js +19 -0
  149. package/dist/src/shared/format.utils.js.map +1 -0
  150. package/dist/src/shared/lru-cache.d.ts +21 -0
  151. package/dist/src/shared/lru-cache.js +70 -0
  152. package/dist/src/shared/lru-cache.js.map +1 -0
  153. package/dist/src/shared/validation.constants.d.ts +31 -0
  154. package/dist/src/shared/validation.constants.js +82 -8
  155. package/dist/src/shared/validation.constants.js.map +1 -1
  156. package/dist/tsconfig.build.tsbuildinfo +1 -1
  157. package/package.json +2 -2
package/README.md CHANGED
@@ -42,6 +42,9 @@ npx codingbuddy init
42
42
  | `get_agent_details` | Get detailed profile of a specialist agent |
43
43
  | `parse_mode` | Parse PLAN/ACT/EVAL workflow mode (includes language setting) |
44
44
  | `recommend_skills` | Recommend skills based on user prompt with multi-language support |
45
+ | `get_code_conventions` | **🆕** Get project code conventions from config files (tsconfig, eslint, prettier, editorconfig, markdownlint) |
46
+ | `generate_checklist` | Generate contextual checklists including conventions domain |
47
+ | `analyze_task` | Comprehensive task analysis with risk assessment |
45
48
 
46
49
  ### MCP Prompts
47
50
 
@@ -182,6 +185,65 @@ curl -X POST https://your-project.vercel.app/api/mcp \
182
185
  | `CODINGBUDDY_PROJECT_ROOT` | Project root for config loading | Current directory |
183
186
  | `ANTHROPIC_API_KEY` | API key for `codingbuddy init` | Required for init |
184
187
 
188
+ ## 🆕 Code Conventions Usage
189
+
190
+ The `get_code_conventions` MCP tool automatically parses your project's config files and enforces conventions.
191
+
192
+ ### Supported Config Files
193
+
194
+ | File | Conventions Extracted |
195
+ |------|----------------------|
196
+ | `tsconfig.json` | TypeScript strict mode, compiler options, path aliases |
197
+ | `eslint.config.js` / `.eslintrc.json` | ESLint flat/legacy config, rules, parser options |
198
+ | `.prettierrc` | Quote style, semicolons, trailing commas, indentation |
199
+ | `.editorconfig` | Indent style/size, line endings, charset |
200
+ | `.markdownlint.json` | Markdown linting rules (MD001, MD003, etc.) |
201
+
202
+ ### Example Usage in ACT Mode
203
+
204
+ ```typescript
205
+ // AI calls this tool before implementing
206
+ const conventions = await get_code_conventions();
207
+
208
+ // TypeScript conventions
209
+ if (conventions.typescript.strict) {
210
+ // ✅ Use strict mode - no implicit any
211
+ }
212
+
213
+ // Prettier conventions
214
+ const quote = conventions.prettier.singleQuote ? "'" : '"';
215
+ const semi = conventions.prettier.semi ? ';' : '';
216
+
217
+ // EditorConfig conventions
218
+ const indent = ' '.repeat(conventions.editorconfig.indent_size || 2);
219
+ ```
220
+
221
+ ### Checklist Domain: `conventions`
222
+
223
+ The conventions checklist includes 26 validation items across 5 categories:
224
+
225
+ 1. **TypeScript** (4 items): strict mode, noImplicitAny, strictNullChecks, path aliases
226
+ 2. **ESLint** (3 items): flat config usage, rules compliance, no errors
227
+ 3. **Prettier** (5 items): quotes, semicolons, trailing commas, indentation, arrow parens
228
+ 4. **EditorConfig** (6 items): indent style/size, line endings, charset, whitespace, final newline
229
+ 5. **Markdown** (3 items): heading style, list style, markdownlint rules
230
+
231
+ ### EVAL Mode Integration
232
+
233
+ ```typescript
234
+ // AI automatically includes conventions in code review
235
+ const checklist = await generate_checklist({
236
+ files: ['src/auth/login.ts'],
237
+ domains: ['security', 'conventions'] // conventions added automatically
238
+ });
239
+
240
+ // Checklist items include:
241
+ // - "TypeScript strict mode is enabled"
242
+ // - "Code uses consistent quote style per .prettierrc"
243
+ // - "Indentation style matches .editorconfig"
244
+ // ... and 23 more convention checks
245
+ ```
246
+
185
247
  ## Project Configuration
186
248
 
187
249
  ### Initialize Configuration
@@ -19,11 +19,17 @@ const MODE_INSTRUCTIONS = {
19
19
  - Review code for potential issues and improvements
20
20
  - Provide objective, evidence-based feedback
21
21
  - Identify areas for improvement with specific recommendations`,
22
+ AUTO: `You are in AUTO mode. Your task is to:
23
+ - Execute an autonomous PLAN → ACT → EVAL cycle
24
+ - Iterate until quality standards are met or max iterations reached
25
+ - Self-correct based on EVAL feedback in subsequent iterations
26
+ - Provide a final summary with all changes and remaining issues`,
22
27
  };
23
28
  const MODE_TASK_PREFIXES = {
24
29
  PLAN: 'planning',
25
30
  ACT: 'verification',
26
31
  EVAL: 'review',
32
+ AUTO: 'autonomous execution',
27
33
  };
28
34
  function buildAgentSystemPrompt(agentProfile, context) {
29
35
  const sections = [];
@@ -1 +1 @@
1
- {"version":3,"file":"agent-prompt.builder.js","sourceRoot":"","sources":["../../../src/agent/agent-prompt.builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-prompt.builder.js","sourceRoot":"","sources":["../../../src/agent/agent-prompt.builder.ts"],"names":[],"mappings":"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"}
@@ -9,13 +9,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.AnalyzerModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const analyzer_service_1 = require("./analyzer.service");
12
+ const conventions_analyzer_1 = require("./conventions.analyzer");
12
13
  let AnalyzerModule = class AnalyzerModule {
13
14
  };
14
15
  exports.AnalyzerModule = AnalyzerModule;
15
16
  exports.AnalyzerModule = AnalyzerModule = __decorate([
16
17
  (0, common_1.Module)({
17
- providers: [analyzer_service_1.AnalyzerService],
18
- exports: [analyzer_service_1.AnalyzerService],
18
+ providers: [analyzer_service_1.AnalyzerService, conventions_analyzer_1.ConventionsAnalyzer],
19
+ exports: [analyzer_service_1.AnalyzerService, conventions_analyzer_1.ConventionsAnalyzer],
19
20
  })
20
21
  ], AnalyzerModule);
21
22
  //# sourceMappingURL=analyzer.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.module.js","sourceRoot":"","sources":["../../../src/analyzer/analyzer.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yDAAqD;AAe9C,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAJ1B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,kCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"}
1
+ {"version":3,"file":"analyzer.module.js","sourceRoot":"","sources":["../../../src/analyzer/analyzer.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yDAAqD;AACrD,iEAA6D;AAgBtD,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAJ1B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,kCAAe,EAAE,0CAAmB,CAAC;QACjD,OAAO,EAAE,CAAC,kCAAe,EAAE,0CAAmB,CAAC;KAChD,CAAC;GACW,cAAc,CAAG"}
@@ -45,6 +45,15 @@ exports.CONFIG_FILE_PATTERNS = {
45
45
  vitest: ['vitest.config.ts', 'vitest.config.js', 'vitest.config.mts'],
46
46
  };
47
47
  const ALL_CONFIG_PATTERNS = Object.values(exports.CONFIG_FILE_PATTERNS).flat();
48
+ const COMPILED_PATTERNS = ALL_CONFIG_PATTERNS.map(pattern => {
49
+ if (pattern.includes('*')) {
50
+ return {
51
+ pattern,
52
+ regex: new RegExp('^' + pattern.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$'),
53
+ };
54
+ }
55
+ return { pattern };
56
+ });
48
57
  function parseTsConfig(content, filePath) {
49
58
  try {
50
59
  const config = JSON.parse(content);
@@ -93,9 +102,8 @@ function parsePrettierConfig(content, filePath) {
93
102
  }
94
103
  function matchesConfigPattern(fileName) {
95
104
  const baseName = path.basename(fileName);
96
- for (const pattern of ALL_CONFIG_PATTERNS) {
97
- if (pattern.includes('*')) {
98
- const regex = new RegExp('^' + pattern.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$');
105
+ for (const { pattern, regex } of COMPILED_PATTERNS) {
106
+ if (regex) {
99
107
  if (regex.test(baseName)) {
100
108
  return true;
101
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.analyzer.js","sourceRoot":"","sources":["../../../src/analyzer/config.analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.analyzer.js","sourceRoot":"","sources":["../../../src/analyzer/config.analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ProjectConventions, EditorConfigConventions, TypeScriptConventions, ESLintConventions, PrettierConventions, MarkdownLintConventions } from './conventions.types';
2
+ export declare class ConventionsAnalyzer {
3
+ private readonly logger;
4
+ private readonly conventionsCache;
5
+ private readonly sizeViolations;
6
+ private readonly VIOLATION_THRESHOLD;
7
+ private readonly VIOLATION_WINDOW;
8
+ private getConfigMtimes;
9
+ private trackSizeViolation;
10
+ private parseConfigWithDefaults;
11
+ private parseIniContent;
12
+ private parseEditorConfigKeyValue;
13
+ parseEditorConfig(filePath: string): Promise<EditorConfigConventions>;
14
+ parseMarkdownLint(filePath: string): Promise<MarkdownLintConventions>;
15
+ parseTypeScriptConfig(filePath: string): Promise<TypeScriptConventions>;
16
+ parseESLintConfig(filePath: string): Promise<ESLintConventions>;
17
+ parsePrettierConfig(filePath: string): Promise<PrettierConventions>;
18
+ private findConfigFile;
19
+ analyzeProjectConventions(projectRoot: string): Promise<ProjectConventions>;
20
+ }
@@ -0,0 +1,395 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var ConventionsAnalyzer_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ConventionsAnalyzer = void 0;
11
+ const fs_1 = require("fs");
12
+ const path = require("path");
13
+ const common_1 = require("@nestjs/common");
14
+ const validation_constants_1 = require("../shared/validation.constants");
15
+ const security_utils_1 = require("../shared/security.utils");
16
+ const lru_cache_1 = require("../shared/lru-cache");
17
+ const conventions_schemas_1 = require("./conventions.schemas");
18
+ const conventions_types_1 = require("./conventions.types");
19
+ const config_analyzer_1 = require("./config.analyzer");
20
+ let ConventionsAnalyzer = ConventionsAnalyzer_1 = class ConventionsAnalyzer {
21
+ constructor() {
22
+ this.logger = new common_1.Logger(ConventionsAnalyzer_1.name);
23
+ this.conventionsCache = new lru_cache_1.LRUCache({
24
+ maxSize: 10,
25
+ ttl: 5 * 60 * 1000,
26
+ });
27
+ this.sizeViolations = new Map();
28
+ this.VIOLATION_THRESHOLD = 3;
29
+ this.VIOLATION_WINDOW = 60 * 1000;
30
+ }
31
+ async getConfigMtimes(projectRoot) {
32
+ const mtimes = new Map();
33
+ const configFiles = [
34
+ 'tsconfig.json',
35
+ 'eslint.config.js',
36
+ '.eslintrc.json',
37
+ '.eslintrc',
38
+ '.prettierrc',
39
+ '.prettierrc.json',
40
+ '.editorconfig',
41
+ '.markdownlint.json',
42
+ ];
43
+ for (const file of configFiles) {
44
+ const filePath = path.join(projectRoot, file);
45
+ try {
46
+ const stats = await fs_1.promises.stat(filePath);
47
+ mtimes.set(filePath, stats.mtimeMs);
48
+ }
49
+ catch {
50
+ }
51
+ }
52
+ return mtimes;
53
+ }
54
+ trackSizeViolation(filePath, actualSize, maxSize) {
55
+ const now = Date.now();
56
+ const violations = this.sizeViolations.get(filePath) || [];
57
+ const recentViolations = violations.filter(timestamp => now - timestamp < this.VIOLATION_WINDOW);
58
+ recentViolations.push(now);
59
+ this.sizeViolations.set(filePath, recentViolations);
60
+ if (recentViolations.length >= this.VIOLATION_THRESHOLD) {
61
+ this.logger.warn('Potential DoS attack or misconfiguration detected: Frequent file size violations', {
62
+ filePath,
63
+ violationCount: recentViolations.length,
64
+ timeWindow: `${this.VIOLATION_WINDOW / 1000}s`,
65
+ actualSize,
66
+ maxSize,
67
+ recommendation: 'Review file sizes or increase limit if legitimate use case',
68
+ });
69
+ this.sizeViolations.delete(filePath);
70
+ }
71
+ if (this.sizeViolations.size > 100) {
72
+ for (const [path, timestamps] of this.sizeViolations.entries()) {
73
+ const recent = timestamps.filter(t => now - t < this.VIOLATION_WINDOW);
74
+ if (recent.length === 0) {
75
+ this.sizeViolations.delete(path);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ async parseConfigWithDefaults(filePath, parser, defaultConfig, configType) {
81
+ try {
82
+ const stats = await fs_1.promises.stat(filePath);
83
+ if (stats.size > validation_constants_1.MAX_CONFIG_FILE_SIZE) {
84
+ this.logger.warn('Config file exceeds size limit', {
85
+ configType,
86
+ filePath,
87
+ size: stats.size,
88
+ maxSize: validation_constants_1.MAX_CONFIG_FILE_SIZE,
89
+ });
90
+ this.trackSizeViolation(filePath, stats.size, validation_constants_1.MAX_CONFIG_FILE_SIZE);
91
+ return defaultConfig;
92
+ }
93
+ const content = await fs_1.promises.readFile(filePath, 'utf-8');
94
+ const parsed = await parser(content, filePath);
95
+ return parsed;
96
+ }
97
+ catch (error) {
98
+ const errorMessage = error instanceof Error ? error.message : String(error);
99
+ const errorCode = error?.code;
100
+ if (errorCode !== 'ENOENT') {
101
+ this.logger.warn('Failed to parse config file', {
102
+ configType,
103
+ filePath,
104
+ errorCode,
105
+ errorMessage,
106
+ });
107
+ }
108
+ else {
109
+ this.logger.debug(`Config file not found, using defaults: ${filePath}`, {
110
+ configType,
111
+ filePath,
112
+ });
113
+ }
114
+ return defaultConfig;
115
+ }
116
+ }
117
+ parseIniContent(content) {
118
+ const result = {};
119
+ const lines = content.split('\n');
120
+ let inSection = false;
121
+ for (const line of lines) {
122
+ const trimmed = line.trim();
123
+ if (trimmed.startsWith('#') || trimmed.startsWith(';') || !trimmed) {
124
+ continue;
125
+ }
126
+ if (trimmed === '[*]') {
127
+ inSection = true;
128
+ continue;
129
+ }
130
+ if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
131
+ inSection = false;
132
+ continue;
133
+ }
134
+ if (inSection && trimmed.includes('=')) {
135
+ const [key, value] = trimmed.split('=').map(s => s.trim());
136
+ result[key] = value;
137
+ }
138
+ }
139
+ return result;
140
+ }
141
+ parseEditorConfigKeyValue(config, key, value) {
142
+ switch (key) {
143
+ case 'indent_style':
144
+ if ((0, validation_constants_1.isIndentStyle)(value)) {
145
+ config.indent_style = value;
146
+ }
147
+ break;
148
+ case 'indent_size': {
149
+ const parsed = (0, validation_constants_1.parseIndentSize)(value);
150
+ if (parsed.success && parsed.value !== undefined) {
151
+ config.indent_size = parsed.value;
152
+ }
153
+ break;
154
+ }
155
+ case 'tab_width': {
156
+ const parsed = (0, validation_constants_1.parseTabWidth)(value);
157
+ if (parsed.success && parsed.value !== undefined) {
158
+ config.tab_width = parsed.value;
159
+ }
160
+ break;
161
+ }
162
+ case 'end_of_line':
163
+ if ((0, validation_constants_1.isEndOfLine)(value)) {
164
+ config.end_of_line = value;
165
+ }
166
+ break;
167
+ case 'charset':
168
+ if ((0, validation_constants_1.isCharset)(value)) {
169
+ config.charset = value;
170
+ }
171
+ break;
172
+ case 'trim_trailing_whitespace':
173
+ config.trim_trailing_whitespace = value === 'true';
174
+ break;
175
+ case 'insert_final_newline':
176
+ config.insert_final_newline = value === 'true';
177
+ break;
178
+ case 'max_line_length': {
179
+ const parsed = (0, validation_constants_1.parseMaxLineLength)(value);
180
+ if (parsed.success && parsed.value !== undefined) {
181
+ config.max_line_length = parsed.value;
182
+ }
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ async parseEditorConfig(filePath) {
188
+ return this.parseConfigWithDefaults(filePath, content => {
189
+ const config = {};
190
+ const keyValuePairs = this.parseIniContent(content);
191
+ for (const [key, value] of Object.entries(keyValuePairs)) {
192
+ this.parseEditorConfigKeyValue(config, key, value);
193
+ }
194
+ return { ...conventions_types_1.DEFAULT_EDITOR_CONFIG, ...config };
195
+ }, conventions_types_1.DEFAULT_EDITOR_CONFIG, 'editorconfig');
196
+ }
197
+ async parseMarkdownLint(filePath) {
198
+ return this.parseConfigWithDefaults(filePath, content => {
199
+ const parsed = JSON.parse(content);
200
+ const dangerousPath = (0, security_utils_1.containsDangerousKeys)(parsed);
201
+ if (dangerousPath) {
202
+ this.logger.warn('Dangerous key detected in MarkdownLint config', {
203
+ filePath,
204
+ dangerousPath,
205
+ });
206
+ return conventions_types_1.DEFAULT_MARKDOWNLINT_CONFIG;
207
+ }
208
+ const validationResult = conventions_schemas_1.MarkdownLintConfigSchema.safeParse(parsed);
209
+ if (!validationResult.success) {
210
+ this.logger.warn('MarkdownLint config validation failed', {
211
+ filePath,
212
+ errors: validationResult.error.issues,
213
+ });
214
+ return conventions_types_1.DEFAULT_MARKDOWNLINT_CONFIG;
215
+ }
216
+ const config = validationResult.data;
217
+ return { ...conventions_types_1.DEFAULT_MARKDOWNLINT_CONFIG, ...config };
218
+ }, conventions_types_1.DEFAULT_MARKDOWNLINT_CONFIG, 'markdownlint');
219
+ }
220
+ async parseTypeScriptConfig(filePath) {
221
+ return this.parseConfigWithDefaults(filePath, (content, filePath) => {
222
+ const summary = (0, config_analyzer_1.parseTsConfig)(content, filePath);
223
+ if (!summary) {
224
+ return conventions_types_1.DEFAULT_TYPESCRIPT_CONFIG;
225
+ }
226
+ const parsed = JSON.parse(content);
227
+ const dangerousPath = (0, security_utils_1.containsDangerousKeys)(parsed);
228
+ if (dangerousPath) {
229
+ this.logger.warn('Dangerous key detected in TypeScript config', {
230
+ filePath,
231
+ dangerousPath,
232
+ });
233
+ return conventions_types_1.DEFAULT_TYPESCRIPT_CONFIG;
234
+ }
235
+ const validationResult = conventions_schemas_1.TypeScriptConfigSchema.safeParse(parsed);
236
+ if (!validationResult.success) {
237
+ this.logger.warn('TypeScript config validation failed', {
238
+ filePath,
239
+ errors: validationResult.error.issues,
240
+ });
241
+ return conventions_types_1.DEFAULT_TYPESCRIPT_CONFIG;
242
+ }
243
+ const config = validationResult.data;
244
+ const compilerOptions = config.compilerOptions ?? {};
245
+ return {
246
+ strict: compilerOptions.strict,
247
+ noImplicitAny: compilerOptions.noImplicitAny,
248
+ strictNullChecks: compilerOptions.strictNullChecks,
249
+ strictFunctionTypes: compilerOptions.strictFunctionTypes,
250
+ strictBindCallApply: compilerOptions.strictBindCallApply,
251
+ noImplicitThis: compilerOptions.noImplicitThis,
252
+ alwaysStrict: compilerOptions.alwaysStrict,
253
+ target: compilerOptions.target,
254
+ module: compilerOptions.module,
255
+ moduleResolution: compilerOptions.moduleResolution,
256
+ esModuleInterop: compilerOptions.esModuleInterop,
257
+ paths: compilerOptions.paths,
258
+ };
259
+ }, conventions_types_1.DEFAULT_TYPESCRIPT_CONFIG, 'typescript');
260
+ }
261
+ async parseESLintConfig(filePath) {
262
+ return this.parseConfigWithDefaults(filePath, (content, filePath) => {
263
+ const configType = filePath.includes('eslint.config.')
264
+ ? 'flat'
265
+ : 'legacy';
266
+ if (filePath.endsWith('.json') ||
267
+ filePath === '.eslintrc' ||
268
+ !filePath.includes('.')) {
269
+ const parsed = JSON.parse(content);
270
+ const dangerousPath = (0, security_utils_1.containsDangerousKeys)(parsed);
271
+ if (dangerousPath) {
272
+ this.logger.warn('Dangerous key detected in ESLint config', {
273
+ filePath,
274
+ dangerousPath,
275
+ });
276
+ return {
277
+ configType,
278
+ parser: 'unknown (dangerous keys detected)',
279
+ rules: {},
280
+ };
281
+ }
282
+ const validationResult = conventions_schemas_1.ESLintConfigSchema.safeParse(parsed);
283
+ if (!validationResult.success) {
284
+ this.logger.warn('ESLint config validation failed', {
285
+ filePath,
286
+ errors: validationResult.error.issues,
287
+ });
288
+ return {
289
+ configType,
290
+ parser: 'unknown (validation failed)',
291
+ rules: {},
292
+ };
293
+ }
294
+ const config = validationResult.data;
295
+ return {
296
+ configType,
297
+ parser: config.parser,
298
+ parserOptions: config.parserOptions,
299
+ rules: config.rules,
300
+ extends: config.extends,
301
+ };
302
+ }
303
+ return {
304
+ configType,
305
+ parser: 'unknown (JS config)',
306
+ rules: {},
307
+ };
308
+ }, conventions_types_1.DEFAULT_ESLINT_CONFIG, 'eslint');
309
+ }
310
+ async parsePrettierConfig(filePath) {
311
+ return this.parseConfigWithDefaults(filePath, content => {
312
+ const parsed = JSON.parse(content);
313
+ const dangerousPath = (0, security_utils_1.containsDangerousKeys)(parsed);
314
+ if (dangerousPath) {
315
+ this.logger.warn('Dangerous key detected in Prettier config', {
316
+ filePath,
317
+ dangerousPath,
318
+ });
319
+ return conventions_types_1.DEFAULT_PRETTIER_CONFIG;
320
+ }
321
+ const validationResult = conventions_schemas_1.PrettierConfigSchema.safeParse(parsed);
322
+ if (!validationResult.success) {
323
+ this.logger.warn('Prettier config validation failed', {
324
+ filePath,
325
+ errors: validationResult.error.issues,
326
+ });
327
+ return conventions_types_1.DEFAULT_PRETTIER_CONFIG;
328
+ }
329
+ const config = validationResult.data;
330
+ return { ...conventions_types_1.DEFAULT_PRETTIER_CONFIG, ...config };
331
+ }, conventions_types_1.DEFAULT_PRETTIER_CONFIG, 'prettier');
332
+ }
333
+ async findConfigFile(projectRoot, patterns) {
334
+ for (const pattern of patterns) {
335
+ const filePath = path.join(projectRoot, pattern);
336
+ try {
337
+ await fs_1.promises.access(filePath);
338
+ return filePath;
339
+ }
340
+ catch {
341
+ }
342
+ }
343
+ return null;
344
+ }
345
+ async analyzeProjectConventions(projectRoot) {
346
+ try {
347
+ await fs_1.promises.access(projectRoot);
348
+ }
349
+ catch {
350
+ throw new Error(`Project root does not exist: ${projectRoot}`);
351
+ }
352
+ const mtimes = await this.getConfigMtimes(projectRoot);
353
+ const cached = this.conventionsCache.get(projectRoot, mtimes);
354
+ if (cached) {
355
+ this.logger.debug('Returning cached conventions', { projectRoot });
356
+ return cached;
357
+ }
358
+ const [typescript, eslint, prettier, editorconfig, markdownlint] = await Promise.all([
359
+ this.findConfigFile(projectRoot, ['tsconfig.json'])
360
+ .then(tsConfigPath => tsConfigPath || path.join(projectRoot, 'tsconfig.json'))
361
+ .then(tsConfigPath => this.parseTypeScriptConfig(tsConfigPath)),
362
+ this.findConfigFile(projectRoot, [
363
+ 'eslint.config.js',
364
+ '.eslintrc.json',
365
+ '.eslintrc',
366
+ ])
367
+ .then(eslintConfigPath => eslintConfigPath || path.join(projectRoot, 'eslint.config.js'))
368
+ .then(eslintConfigPath => this.parseESLintConfig(eslintConfigPath)),
369
+ this.findConfigFile(projectRoot, ['.prettierrc', '.prettierrc.json'])
370
+ .then(prettierConfigPath => prettierConfigPath || path.join(projectRoot, '.prettierrc'))
371
+ .then(prettierConfigPath => this.parsePrettierConfig(prettierConfigPath)),
372
+ this.parseEditorConfig(path.join(projectRoot, '.editorconfig')),
373
+ this.parseMarkdownLint(path.join(projectRoot, '.markdownlint.json')),
374
+ ]);
375
+ const result = {
376
+ projectRoot,
377
+ typescript,
378
+ eslint,
379
+ prettier,
380
+ editorconfig,
381
+ markdownlint,
382
+ };
383
+ this.conventionsCache.set(projectRoot, result, mtimes);
384
+ this.logger.debug('Cached conventions', {
385
+ projectRoot,
386
+ mtimes: mtimes.size,
387
+ });
388
+ return result;
389
+ }
390
+ };
391
+ exports.ConventionsAnalyzer = ConventionsAnalyzer;
392
+ exports.ConventionsAnalyzer = ConventionsAnalyzer = ConventionsAnalyzer_1 = __decorate([
393
+ (0, common_1.Injectable)()
394
+ ], ConventionsAnalyzer);
395
+ //# sourceMappingURL=conventions.analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conventions.analyzer.js","sourceRoot":"","sources":["../../../src/analyzer/conventions.analyzer.ts"],"names":[],"mappings":"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"}