coding-agent-benchmarks 0.2.0 → 0.3.0
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.
- package/README.md +225 -10
- package/dist/adapters/claudeCodeCLI.d.ts +1 -1
- package/dist/adapters/claudeCodeCLI.d.ts.map +1 -1
- package/dist/adapters/claudeCodeCLI.js +44 -32
- package/dist/adapters/claudeCodeCLI.js.map +1 -1
- package/dist/adapters/copilotCLI.d.ts.map +1 -1
- package/dist/adapters/copilotCLI.js +28 -16
- package/dist/adapters/copilotCLI.js.map +1 -1
- package/dist/config/environment.d.ts +51 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +57 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/parser.d.ts +6 -0
- package/dist/config/parser.d.ts.map +1 -0
- package/dist/config/parser.js +87 -0
- package/dist/config/parser.js.map +1 -0
- package/dist/evaluator.d.ts +4 -9
- package/dist/evaluator.d.ts.map +1 -1
- package/dist/evaluator.js +4 -12
- package/dist/evaluator.js.map +1 -1
- package/dist/examples/file-upload-example.d.ts +2 -0
- package/dist/examples/file-upload-example.d.ts.map +1 -0
- package/dist/examples/file-upload-example.js +37 -0
- package/dist/examples/file-upload-example.js.map +1 -0
- package/dist/examples/typedEventEmitterExample.d.ts +5 -0
- package/dist/examples/typedEventEmitterExample.d.ts.map +1 -0
- package/dist/examples/typedEventEmitterExample.js +44 -0
- package/dist/examples/typedEventEmitterExample.js.map +1 -0
- package/dist/index.d.ts +13 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/registration/database.d.ts +13 -0
- package/dist/registration/database.d.ts.map +1 -0
- package/dist/registration/database.js +35 -0
- package/dist/registration/database.js.map +1 -0
- package/dist/registration/email.d.ts +17 -0
- package/dist/registration/email.d.ts.map +1 -0
- package/dist/registration/email.js +40 -0
- package/dist/registration/email.js.map +1 -0
- package/dist/registration/emailService.d.ts +13 -0
- package/dist/registration/emailService.d.ts.map +1 -0
- package/dist/registration/emailService.js +26 -0
- package/dist/registration/emailService.js.map +1 -0
- package/dist/registration/example.d.ts +2 -0
- package/dist/registration/example.d.ts.map +1 -0
- package/dist/registration/example.js +37 -0
- package/dist/registration/example.js.map +1 -0
- package/dist/registration/index.d.ts +7 -0
- package/dist/registration/index.d.ts.map +1 -0
- package/dist/registration/index.js +15 -0
- package/dist/registration/index.js.map +1 -0
- package/dist/registration/password.d.ts +3 -0
- package/dist/registration/password.d.ts.map +1 -0
- package/dist/registration/password.js +27 -0
- package/dist/registration/password.js.map +1 -0
- package/dist/registration/passwordHasher.d.ts +8 -0
- package/dist/registration/passwordHasher.d.ts.map +1 -0
- package/dist/registration/passwordHasher.js +39 -0
- package/dist/registration/passwordHasher.js.map +1 -0
- package/dist/registration/registrationService.d.ts +14 -0
- package/dist/registration/registrationService.d.ts.map +1 -0
- package/dist/registration/registrationService.js +49 -0
- package/dist/registration/registrationService.js.map +1 -0
- package/dist/registration/service.d.ts +14 -0
- package/dist/registration/service.d.ts.map +1 -0
- package/dist/registration/service.js +48 -0
- package/dist/registration/service.js.map +1 -0
- package/dist/registration/types.d.ts +22 -0
- package/dist/registration/types.d.ts.map +1 -0
- package/dist/registration/types.js +3 -0
- package/dist/registration/types.js.map +1 -0
- package/dist/registration/userRepository.d.ts +12 -0
- package/dist/registration/userRepository.d.ts.map +1 -0
- package/dist/registration/userRepository.js +28 -0
- package/dist/registration/userRepository.js.map +1 -0
- package/dist/registration/validator.d.ts +7 -0
- package/dist/registration/validator.d.ts.map +1 -0
- package/dist/registration/validator.js +44 -0
- package/dist/registration/validator.js.map +1 -0
- package/dist/registration/validators.d.ts +5 -0
- package/dist/registration/validators.d.ts.map +1 -0
- package/dist/registration/validators.js +60 -0
- package/dist/registration/validators.js.map +1 -0
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +59 -29
- package/dist/reporter.js.map +1 -1
- package/dist/runner.js +2 -1
- package/dist/runner.js.map +1 -1
- package/dist/sync/cache.d.ts +14 -0
- package/dist/sync/cache.d.ts.map +1 -0
- package/dist/sync/cache.js +73 -0
- package/dist/sync/cache.js.map +1 -0
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +20 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/resolver.d.ts +12 -0
- package/dist/sync/resolver.d.ts.map +1 -0
- package/dist/sync/resolver.js +43 -0
- package/dist/sync/resolver.js.map +1 -0
- package/dist/sync/service.d.ts +20 -0
- package/dist/sync/service.d.ts.map +1 -0
- package/dist/sync/service.js +162 -0
- package/dist/sync/service.js.map +1 -0
- package/dist/sync/source.d.ts +21 -0
- package/dist/sync/source.d.ts.map +1 -0
- package/dist/sync/source.js +58 -0
- package/dist/sync/source.js.map +1 -0
- package/dist/sync/types.d.ts +56 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +21 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/types.d.ts +6 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/baselineManager.d.ts +2 -1
- package/dist/utils/baselineManager.d.ts.map +1 -1
- package/dist/utils/baselineManager.js +1 -0
- package/dist/utils/baselineManager.js.map +1 -1
- package/dist/utils/cache.d.ts +11 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +28 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/config-merger.d.ts +11 -0
- package/dist/utils/config-merger.d.ts.map +1 -0
- package/dist/utils/config-merger.js +36 -0
- package/dist/utils/config-merger.js.map +1 -0
- package/dist/utils/configParser.d.ts +9 -0
- package/dist/utils/configParser.d.ts.map +1 -0
- package/dist/utils/configParser.js +51 -0
- package/dist/utils/configParser.js.map +1 -0
- package/dist/utils/database-providers.d.ts +23 -0
- package/dist/utils/database-providers.d.ts.map +1 -0
- package/dist/utils/database-providers.js +48 -0
- package/dist/utils/database-providers.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +10 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +58 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/fetchUserData.d.ts +11 -0
- package/dist/utils/fetchUserData.d.ts.map +1 -0
- package/dist/utils/fetchUserData.js +31 -0
- package/dist/utils/fetchUserData.js.map +1 -0
- package/dist/utils/file-upload-handler.d.ts +46 -0
- package/dist/utils/file-upload-handler.d.ts.map +1 -0
- package/dist/utils/file-upload-handler.js +110 -0
- package/dist/utils/file-upload-handler.js.map +1 -0
- package/dist/utils/gitUtils.d.ts +2 -1
- package/dist/utils/gitUtils.d.ts.map +1 -1
- package/dist/utils/gitUtils.js +85 -18
- package/dist/utils/gitUtils.js.map +1 -1
- package/dist/utils/statistics.d.ts +9 -0
- package/dist/utils/statistics.d.ts.map +1 -0
- package/dist/utils/statistics.js +26 -0
- package/dist/utils/statistics.js.map +1 -0
- package/dist/utils/storage-providers.d.ts +24 -0
- package/dist/utils/storage-providers.d.ts.map +1 -0
- package/dist/utils/storage-providers.js +38 -0
- package/dist/utils/storage-providers.js.map +1 -0
- package/dist/utils/transformArray.d.ts +18 -0
- package/dist/utils/transformArray.d.ts.map +1 -0
- package/dist/utils/transformArray.js +21 -0
- package/dist/utils/transformArray.js.map +1 -0
- package/dist/utils/typedEventEmitter.d.ts +18 -0
- package/dist/utils/typedEventEmitter.d.ts.map +1 -0
- package/dist/utils/typedEventEmitter.js +62 -0
- package/dist/utils/typedEventEmitter.js.map +1 -0
- package/dist/utils/userUtils.d.ts +9 -0
- package/dist/utils/userUtils.d.ts.map +1 -0
- package/dist/utils/userUtils.js +14 -0
- package/dist/utils/userUtils.js.map +1 -0
- package/dist/validators/llmJudge.d.ts +1 -1
- package/dist/validators/llmJudge.d.ts.map +1 -1
- package/dist/validators/llmJudge.js +40 -41
- package/dist/validators/llmJudge.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
Open-source framework for evaluating AI coding assistants (like GitHub Copilot CLI or Claude Code) follow your coding standards. Here's the workflow:
|
|
4
4
|
1. You give it a prompt → 2. AI generates code → 3. Library validates → 4. You get a score
|
|
5
5
|
|
|
6
|
+

|
|
7
|
+
|
|
8
|
+
|
|
6
9
|
## Features
|
|
7
10
|
|
|
8
11
|
- **Multiple Adapters**: Built-in support for GitHub Copilot CLI and Claude Code CLI
|
|
@@ -55,6 +58,57 @@ npx coding-agent-benchmarks evaluate --tag best-practices
|
|
|
55
58
|
npx coding-agent-benchmarks evaluate --output report.json
|
|
56
59
|
```
|
|
57
60
|
|
|
61
|
+
## Auto-Generate Scenarios from Your Coding Standards
|
|
62
|
+
|
|
63
|
+
Save time by automatically generating validation scenarios from your existing coding standards!
|
|
64
|
+
|
|
65
|
+
The `/auto-scenarios` skill discovers coding standards from your project files and creates realistic test scenarios that validate whether AI coding agents follow those standards.
|
|
66
|
+
|
|
67
|
+
### What It Does
|
|
68
|
+
|
|
69
|
+
- 🔍 **Discovers standards** from CLAUDE.md, tsconfig.json, .eslintrc, .prettierrc, and more
|
|
70
|
+
- 📋 **Extracts actionable rules** like "No `any` types", "Use readonly for immutable data", "Single Responsibility Principle"
|
|
71
|
+
- ✨ **Generates synthetic scenarios** with realistic prompts that naturally test each standard
|
|
72
|
+
- 💾 **Writes to your config** - appends scenarios to your benchmarks.config.js
|
|
73
|
+
|
|
74
|
+
### How to Use
|
|
75
|
+
|
|
76
|
+
If you're using Claude Code CLI, simply run:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
/auto-scenarios
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The skill will:
|
|
83
|
+
1. Scan your project for coding standard files
|
|
84
|
+
2. Extract rules from each source
|
|
85
|
+
3. Generate diverse test scenarios
|
|
86
|
+
4. Show you a preview
|
|
87
|
+
5. Ask where to write the scenarios (append to config, create new file, etc.)
|
|
88
|
+
|
|
89
|
+
### What Gets Discovered
|
|
90
|
+
|
|
91
|
+
The skill finds standards from:
|
|
92
|
+
|
|
93
|
+
- **CLAUDE.md** / **.cursorrules** - Explicit AI coding instructions
|
|
94
|
+
- **tsconfig.json** - TypeScript compiler settings
|
|
95
|
+
- **.eslintrc*** - Linting rules
|
|
96
|
+
- **.prettierrc*** - Formatting preferences
|
|
97
|
+
- **package.json** - Project context
|
|
98
|
+
- **CONTRIBUTING.md** - Contribution guidelines
|
|
99
|
+
|
|
100
|
+
### Benefits
|
|
101
|
+
|
|
102
|
+
✅ **Save hours** - Generate dozens of scenarios in seconds vs. manual writing
|
|
103
|
+
|
|
104
|
+
✅ **Comprehensive** - Captures ALL your coding standards automatically
|
|
105
|
+
|
|
106
|
+
✅ **Realistic prompts** - Creates scenarios developers would actually request
|
|
107
|
+
|
|
108
|
+
✅ **Living documentation** - Standards become executable tests
|
|
109
|
+
|
|
110
|
+
✅ **Synthetic data** - Varies complexity and context for thorough testing
|
|
111
|
+
|
|
58
112
|
## Configuration
|
|
59
113
|
|
|
60
114
|
**Configuration is required.** Create a `benchmarks.config.js` (or `.ts`) file in your project root with your test scenarios:
|
|
@@ -228,19 +282,124 @@ validationStrategy: {
|
|
|
228
282
|
}
|
|
229
283
|
```
|
|
230
284
|
|
|
231
|
-
## Scoring
|
|
285
|
+
## Scoring System
|
|
232
286
|
|
|
233
|
-
|
|
287
|
+
The scoring system operates at three levels: per-validator scoring, per-scenario scoring, and summary scoring.
|
|
234
288
|
|
|
235
|
-
-
|
|
236
|
-
- **0.8-0.99**: Minor issues
|
|
237
|
-
- **0.5-0.79**: Moderate issues
|
|
238
|
-
- **0.0-0.49**: Major issues or failed
|
|
289
|
+
### Per-Validator Scoring
|
|
239
290
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
291
|
+
Each validator (Pattern, LLM Judge, ESLint) independently evaluates the generated code and produces a score from 0.0 to 1.0:
|
|
292
|
+
|
|
293
|
+
#### Pattern Validator
|
|
294
|
+
|
|
295
|
+
Uses exponential decay based on weighted violations:
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
score = e^(-totalWeight)
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Where `totalWeight` is the sum of violation weights:
|
|
302
|
+
- **Critical violations**: 1.0 weight each
|
|
303
|
+
- **Major violations**: 0.7 weight each
|
|
304
|
+
- **Minor violations**: 0.3 weight each
|
|
305
|
+
|
|
306
|
+
**Examples**:
|
|
307
|
+
- 0 violations → score = 1.0 (perfect)
|
|
308
|
+
- 1 critical violation → score ≈ 0.37
|
|
309
|
+
- 1 major violation → score ≈ 0.50
|
|
310
|
+
- 2 minor violations → score ≈ 0.55
|
|
311
|
+
|
|
312
|
+
#### LLM Judge Validator
|
|
313
|
+
|
|
314
|
+
The LLM (GPT-4 or other model) evaluates the code semantically and returns:
|
|
315
|
+
- An `overallScore` from 0.0 to 1.0
|
|
316
|
+
- A list of violations with explanations
|
|
317
|
+
- Passed if: score ≥ 0.7 AND no violations
|
|
318
|
+
|
|
319
|
+
The LLM judge provides semantic understanding beyond pattern matching, evaluating whether the code actually solves the problem correctly and follows best practices.
|
|
320
|
+
|
|
321
|
+
#### ESLint Validator
|
|
322
|
+
|
|
323
|
+
Uses exponential decay with a dampening factor:
|
|
324
|
+
|
|
325
|
+
```
|
|
326
|
+
score = e^(-totalWeight / 2)
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
ESLint violations are mapped to severity:
|
|
330
|
+
- ESLint error (severity 2) → **Major** violation (0.7 weight)
|
|
331
|
+
- ESLint warning (severity 1) → **Minor** violation (0.3 weight)
|
|
332
|
+
|
|
333
|
+
The `/2` dampening factor makes ESLint less punitive since projects often have many minor linting issues.
|
|
334
|
+
|
|
335
|
+
### Per-Scenario Scoring
|
|
336
|
+
|
|
337
|
+
Each scenario receives an **overall score** calculated as:
|
|
338
|
+
|
|
339
|
+
```
|
|
340
|
+
overallScore = average of all active validator scores
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**Active validators** are those that:
|
|
344
|
+
- Are configured in the scenario's `validationStrategy`
|
|
345
|
+
- Successfully ran (did not return score = -1)
|
|
346
|
+
|
|
347
|
+
**Pass/Fail Criteria**:
|
|
348
|
+
- ✅ **PASS**: `overallScore ≥ 0.8` AND `violations.length === 0`
|
|
349
|
+
- ❌ **FAIL**: `overallScore < 0.8` OR `violations.length > 0`
|
|
350
|
+
- ⚠️ **SKIP**: An error occurred during evaluation (timeout, adapter failure, etc.)
|
|
351
|
+
|
|
352
|
+
**Example**: If Pattern validator returns 0.9, LLM Judge returns 0.8, and ESLint is skipped:
|
|
353
|
+
```
|
|
354
|
+
overallScore = (0.9 + 0.8) / 2 = 0.85
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### Summary Scoring
|
|
358
|
+
|
|
359
|
+
After evaluating all scenarios, the framework calculates summary statistics:
|
|
360
|
+
|
|
361
|
+
```javascript
|
|
362
|
+
{
|
|
363
|
+
total: 10, // Total number of scenarios
|
|
364
|
+
passed: 7, // Scenarios with overallScore ≥ 0.8 and no violations
|
|
365
|
+
failed: 2, // Scenarios evaluated but didn't pass
|
|
366
|
+
skipped: 1, // Scenarios that encountered errors
|
|
367
|
+
averageScore: 0.78, // Average of all scenario overallScores
|
|
368
|
+
totalViolations: 8 // Sum of violations across all scenarios
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**Average Score Calculation**:
|
|
373
|
+
```
|
|
374
|
+
averageScore = (sum of all scenario scores) / total scenarios
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
This includes scores from failed scenarios, providing an overall quality metric across your entire test suite.
|
|
378
|
+
|
|
379
|
+
**Transparency**: When baselines are saved, the per-validator breakdown is included in the baseline file, allowing you to trace exactly which validator contributed what score. See [Baseline File Format](#baseline-file-format) for details.
|
|
380
|
+
|
|
381
|
+
### Score Interpretation
|
|
382
|
+
|
|
383
|
+
| Score Range | Interpretation | Typical Meaning |
|
|
384
|
+
|-------------|----------------|-----------------|
|
|
385
|
+
| **1.0** | Perfect | No violations detected by any validator |
|
|
386
|
+
| **0.8-0.99** | Minor issues | Small violations or stylistic concerns |
|
|
387
|
+
| **0.5-0.79** | Moderate issues | Several violations or some significant problems |
|
|
388
|
+
| **0.0-0.49** | Major issues | Many violations or critical problems |
|
|
389
|
+
|
|
390
|
+
### Baseline Comparison
|
|
391
|
+
|
|
392
|
+
When baseline tracking is enabled, you'll see delta metrics:
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
✓ [1/3] typescript-no-any PASS (score: 0.95)
|
|
396
|
+
↑ +18.5% improvement from baseline
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
The percentage is calculated as:
|
|
400
|
+
```
|
|
401
|
+
percentage = (currentScore - baselineScore) / baselineScore * 100
|
|
402
|
+
```
|
|
244
403
|
|
|
245
404
|
## Baseline Tracking
|
|
246
405
|
|
|
@@ -267,6 +426,62 @@ When `compareBaseline` is enabled, the report will show score deltas and whether
|
|
|
267
426
|
|
|
268
427
|
**Tip**: Add `.benchmarks/` to your `.gitignore` to keep baseline data local to each developer.
|
|
269
428
|
|
|
429
|
+
### Baseline File Format
|
|
430
|
+
|
|
431
|
+
Each baseline file contains complete transparency into how the score was calculated:
|
|
432
|
+
|
|
433
|
+
```json
|
|
434
|
+
{
|
|
435
|
+
"scenarioId": "typescript-no-any",
|
|
436
|
+
"score": 0.85,
|
|
437
|
+
"violations": [
|
|
438
|
+
{
|
|
439
|
+
"type": "pattern",
|
|
440
|
+
"message": "Forbidden pattern found: :\\s*any\\b",
|
|
441
|
+
"file": "src/types.ts",
|
|
442
|
+
"line": 12,
|
|
443
|
+
"severity": "critical",
|
|
444
|
+
"details": "Matched: \"metadata: any\""
|
|
445
|
+
}
|
|
446
|
+
],
|
|
447
|
+
"validationResults": [
|
|
448
|
+
{
|
|
449
|
+
"passed": false,
|
|
450
|
+
"score": 0.37,
|
|
451
|
+
"violations": [...],
|
|
452
|
+
"validatorType": "pattern"
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
"passed": true,
|
|
456
|
+
"score": 1.0,
|
|
457
|
+
"violations": [],
|
|
458
|
+
"validatorType": "llm-judge"
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
"passed": true,
|
|
462
|
+
"score": -1,
|
|
463
|
+
"violations": [],
|
|
464
|
+
"validatorType": "eslint",
|
|
465
|
+
"error": "ESLint not found"
|
|
466
|
+
}
|
|
467
|
+
],
|
|
468
|
+
"timestamp": "2026-01-23T22:28:32.216Z",
|
|
469
|
+
"adapter": "copilot",
|
|
470
|
+
"model": "claude-sonnet-4.5"
|
|
471
|
+
}
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
**Key fields**:
|
|
475
|
+
- `score`: Overall scenario score (average of active validators)
|
|
476
|
+
- `violations`: All violations from all validators combined
|
|
477
|
+
- `validationResults`: Per-validator breakdown showing:
|
|
478
|
+
- Individual validator score
|
|
479
|
+
- Whether that validator passed
|
|
480
|
+
- Violations specific to that validator
|
|
481
|
+
- Any errors that occurred (`score: -1` means skipped)
|
|
482
|
+
|
|
483
|
+
**Score Traceability**: With this format, you can always trace the overall score back to individual validator scores. For example, if you see `score: 0.067`, you can look at `validationResults` to see which validators contributed what scores (e.g., Pattern: 0.135, LLM Judge: 0.00).
|
|
484
|
+
|
|
270
485
|
## CLI Commands
|
|
271
486
|
|
|
272
487
|
### `evaluate`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCodeCLI.d.ts","sourceRoot":"","sources":["../../src/adapters/claudeCodeCLI.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"claudeCodeCLI.d.ts","sourceRoot":"","sources":["../../src/adapters/claudeCodeCLI.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOjD,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,qBAAa,oBAAqB,YAAW,qBAAqB;IAChE,SAAgB,IAAI,EAAG,aAAa,CAAU;IAC9C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,CAAC,EAAE,2BAA2B;IAKjD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAgB3C;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;;OAGG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,EAChC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC;CAqGrB"}
|
|
@@ -42,10 +42,10 @@ const fs = __importStar(require("fs"));
|
|
|
42
42
|
const path = __importStar(require("path"));
|
|
43
43
|
const gitUtils_1 = require("../utils/gitUtils");
|
|
44
44
|
const workspaceUtils_1 = require("../utils/workspaceUtils");
|
|
45
|
-
const DEFAULT_MODEL =
|
|
45
|
+
const DEFAULT_MODEL = "sonnet";
|
|
46
46
|
class ClaudeCodeCLIAdapter {
|
|
47
47
|
constructor(options) {
|
|
48
|
-
this.type =
|
|
48
|
+
this.type = "claude-code";
|
|
49
49
|
this.workspaceRoot = (0, workspaceUtils_1.resolveWorkspaceRoot)(options?.workspaceRoot);
|
|
50
50
|
this.model = options?.model || DEFAULT_MODEL;
|
|
51
51
|
}
|
|
@@ -54,13 +54,13 @@ class ClaudeCodeCLIAdapter {
|
|
|
54
54
|
*/
|
|
55
55
|
async checkAvailability() {
|
|
56
56
|
return new Promise((resolve) => {
|
|
57
|
-
const proc = (0, child_process_1.spawn)(
|
|
58
|
-
stdio:
|
|
57
|
+
const proc = (0, child_process_1.spawn)("which", ["claude"], {
|
|
58
|
+
stdio: "pipe",
|
|
59
59
|
});
|
|
60
|
-
proc.on(
|
|
60
|
+
proc.on("close", (code) => {
|
|
61
61
|
resolve(code === 0);
|
|
62
62
|
});
|
|
63
|
-
proc.on(
|
|
63
|
+
proc.on("error", () => {
|
|
64
64
|
resolve(false);
|
|
65
65
|
});
|
|
66
66
|
});
|
|
@@ -105,40 +105,56 @@ class ClaudeCodeCLIAdapter {
|
|
|
105
105
|
const statusBefore = (0, gitUtils_1.getGitStatusPorcelain)(this.workspaceRoot);
|
|
106
106
|
// Write prompt to temp file and pipe via stdin (matches @copilot-evals pattern)
|
|
107
107
|
return new Promise((resolve, reject) => {
|
|
108
|
-
const tempFile = path.join(this.workspaceRoot,
|
|
109
|
-
fs.writeFileSync(tempFile, fullPrompt,
|
|
108
|
+
const tempFile = path.join(this.workspaceRoot, ".claude-eval-prompt.txt");
|
|
109
|
+
fs.writeFileSync(tempFile, fullPrompt, "utf8");
|
|
110
|
+
// Cleanup function
|
|
111
|
+
const cleanup = () => {
|
|
112
|
+
try {
|
|
113
|
+
if (fs.existsSync(tempFile)) {
|
|
114
|
+
fs.unlinkSync(tempFile);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Ignore cleanup errors
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
// Register cleanup on process termination
|
|
122
|
+
const cleanupOnExit = () => {
|
|
123
|
+
cleanup();
|
|
124
|
+
};
|
|
125
|
+
process.once("SIGINT", cleanupOnExit);
|
|
126
|
+
process.once("SIGTERM", cleanupOnExit);
|
|
110
127
|
const command = `cat "${tempFile}" | claude --model ${this.model} --dangerously-skip-permissions --disallowed-tools 'Bash(rm)' --disallowed-tools 'Bash(git push)' --disallowed-tools 'Bash(git commit)'`;
|
|
111
|
-
const proc = (0, child_process_1.spawn)(
|
|
128
|
+
const proc = (0, child_process_1.spawn)("sh", ["-c", command], {
|
|
112
129
|
cwd: this.workspaceRoot,
|
|
113
|
-
stdio: [
|
|
130
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
114
131
|
});
|
|
115
|
-
let stdout =
|
|
116
|
-
let stderr =
|
|
117
|
-
proc.stdout?.on(
|
|
132
|
+
let stdout = "";
|
|
133
|
+
let stderr = "";
|
|
134
|
+
proc.stdout?.on("data", (data) => {
|
|
118
135
|
stdout += data.toString();
|
|
119
136
|
});
|
|
120
|
-
proc.stderr?.on(
|
|
137
|
+
proc.stderr?.on("data", (data) => {
|
|
121
138
|
stderr += data.toString();
|
|
122
139
|
});
|
|
123
140
|
// Set timeout only if specified (null/undefined = no timeout)
|
|
124
141
|
let timeoutHandle = null;
|
|
125
142
|
if (timeout !== null && timeout !== undefined) {
|
|
126
143
|
timeoutHandle = setTimeout(() => {
|
|
127
|
-
proc.kill(
|
|
144
|
+
proc.kill("SIGTERM");
|
|
145
|
+
cleanup();
|
|
146
|
+
process.removeListener("SIGINT", cleanupOnExit);
|
|
147
|
+
process.removeListener("SIGTERM", cleanupOnExit);
|
|
128
148
|
reject(new Error(`Claude Code CLI timed out after ${timeout}ms`));
|
|
129
149
|
}, timeout);
|
|
130
150
|
}
|
|
131
|
-
proc.on(
|
|
151
|
+
proc.on("close", (code) => {
|
|
132
152
|
if (timeoutHandle) {
|
|
133
153
|
clearTimeout(timeoutHandle);
|
|
134
154
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
// Ignore cleanup errors
|
|
141
|
-
}
|
|
155
|
+
cleanup();
|
|
156
|
+
process.removeListener("SIGINT", cleanupOnExit);
|
|
157
|
+
process.removeListener("SIGTERM", cleanupOnExit);
|
|
142
158
|
if (code !== 0) {
|
|
143
159
|
reject(new Error(`Claude Code CLI exited with code ${code}\nStderr: ${stderr}`));
|
|
144
160
|
return;
|
|
@@ -146,24 +162,20 @@ class ClaudeCodeCLIAdapter {
|
|
|
146
162
|
// Get files changed during generation (diff before/after)
|
|
147
163
|
try {
|
|
148
164
|
const statusAfter = (0, gitUtils_1.getGitStatusPorcelain)(this.workspaceRoot);
|
|
149
|
-
const changedFiles = (0, gitUtils_1.getChangedFilesDiff)(statusBefore, statusAfter);
|
|
165
|
+
const changedFiles = (0, gitUtils_1.getChangedFilesDiff)(statusBefore, statusAfter, this.workspaceRoot);
|
|
150
166
|
resolve(changedFiles);
|
|
151
167
|
}
|
|
152
168
|
catch (error) {
|
|
153
169
|
reject(new Error(`Failed to get changed files: ${error}`));
|
|
154
170
|
}
|
|
155
171
|
});
|
|
156
|
-
proc.on(
|
|
172
|
+
proc.on("error", (error) => {
|
|
157
173
|
if (timeoutHandle) {
|
|
158
174
|
clearTimeout(timeoutHandle);
|
|
159
175
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
catch {
|
|
165
|
-
// Ignore cleanup errors
|
|
166
|
-
}
|
|
176
|
+
cleanup();
|
|
177
|
+
process.removeListener("SIGINT", cleanupOnExit);
|
|
178
|
+
process.removeListener("SIGTERM", cleanupOnExit);
|
|
167
179
|
reject(new Error(`Failed to spawn Claude Code CLI: ${error}`));
|
|
168
180
|
});
|
|
169
181
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCodeCLI.js","sourceRoot":"","sources":["../../src/adapters/claudeCodeCLI.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAsC;AACtC,uCAAyB;AACzB,2CAA6B;AAE7B,gDAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"claudeCodeCLI.js","sourceRoot":"","sources":["../../src/adapters/claudeCodeCLI.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copilotCLI.d.ts","sourceRoot":"","sources":["../../src/adapters/copilotCLI.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOjD,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,qBAAa,iBAAkB,YAAW,qBAAqB;IAC7D,SAAgB,IAAI,EAAG,SAAS,CAAU;IAC1C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,CAAC,EAAE,wBAAwB;IAK9C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAgB3C;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;;OAGG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,EAChC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"copilotCLI.d.ts","sourceRoot":"","sources":["../../src/adapters/copilotCLI.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOjD,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,qBAAa,iBAAkB,YAAW,qBAAqB;IAC7D,SAAgB,IAAI,EAAG,SAAS,CAAU;IAC1C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,CAAC,EAAE,wBAAwB;IAK9C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAgB3C;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;;OAGG;IACG,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,EAChC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC;CAwGrB"}
|
|
@@ -105,8 +105,25 @@ class CopilotCLIAdapter {
|
|
|
105
105
|
const statusBefore = (0, gitUtils_1.getGitStatusPorcelain)(this.workspaceRoot);
|
|
106
106
|
// Write prompt to temp file and pipe via stdin (matches @copilot-evals pattern)
|
|
107
107
|
return new Promise((resolve, reject) => {
|
|
108
|
-
const tempFile = path.join(this.workspaceRoot,
|
|
108
|
+
const tempFile = path.join(this.workspaceRoot, ".copilot-eval-prompt.txt");
|
|
109
109
|
fs.writeFileSync(tempFile, fullPrompt, "utf8");
|
|
110
|
+
// Cleanup function
|
|
111
|
+
const cleanup = () => {
|
|
112
|
+
try {
|
|
113
|
+
if (fs.existsSync(tempFile)) {
|
|
114
|
+
fs.unlinkSync(tempFile);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Ignore cleanup errors
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
// Register cleanup on process termination
|
|
122
|
+
const cleanupOnExit = () => {
|
|
123
|
+
cleanup();
|
|
124
|
+
};
|
|
125
|
+
process.once("SIGINT", cleanupOnExit);
|
|
126
|
+
process.once("SIGTERM", cleanupOnExit);
|
|
110
127
|
const command = `cat "${tempFile}" | copilot --model ${this.model} --allow-all-tools --deny-tool 'shell(rm)' --deny-tool 'shell(git push)' --deny-tool 'shell(git commit)'`;
|
|
111
128
|
const proc = (0, child_process_1.spawn)("sh", ["-c", command], {
|
|
112
129
|
cwd: this.workspaceRoot,
|
|
@@ -125,6 +142,9 @@ class CopilotCLIAdapter {
|
|
|
125
142
|
if (timeout !== null && timeout !== undefined) {
|
|
126
143
|
timeoutHandle = setTimeout(() => {
|
|
127
144
|
proc.kill("SIGTERM");
|
|
145
|
+
cleanup();
|
|
146
|
+
process.removeListener("SIGINT", cleanupOnExit);
|
|
147
|
+
process.removeListener("SIGTERM", cleanupOnExit);
|
|
128
148
|
reject(new Error(`Copilot CLI timed out after ${timeout}ms`));
|
|
129
149
|
}, timeout);
|
|
130
150
|
}
|
|
@@ -132,13 +152,9 @@ class CopilotCLIAdapter {
|
|
|
132
152
|
if (timeoutHandle) {
|
|
133
153
|
clearTimeout(timeoutHandle);
|
|
134
154
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
// Ignore cleanup errors
|
|
141
|
-
}
|
|
155
|
+
cleanup();
|
|
156
|
+
process.removeListener("SIGINT", cleanupOnExit);
|
|
157
|
+
process.removeListener("SIGTERM", cleanupOnExit);
|
|
142
158
|
if (code !== 0) {
|
|
143
159
|
reject(new Error(`Copilot CLI exited with code ${code}\nStderr: ${stderr}`));
|
|
144
160
|
return;
|
|
@@ -146,7 +162,7 @@ class CopilotCLIAdapter {
|
|
|
146
162
|
// Get files changed during generation (diff before/after)
|
|
147
163
|
try {
|
|
148
164
|
const statusAfter = (0, gitUtils_1.getGitStatusPorcelain)(this.workspaceRoot);
|
|
149
|
-
const changedFiles = (0, gitUtils_1.getChangedFilesDiff)(statusBefore, statusAfter);
|
|
165
|
+
const changedFiles = (0, gitUtils_1.getChangedFilesDiff)(statusBefore, statusAfter, this.workspaceRoot);
|
|
150
166
|
resolve(changedFiles);
|
|
151
167
|
}
|
|
152
168
|
catch (error) {
|
|
@@ -157,13 +173,9 @@ class CopilotCLIAdapter {
|
|
|
157
173
|
if (timeoutHandle) {
|
|
158
174
|
clearTimeout(timeoutHandle);
|
|
159
175
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
catch {
|
|
165
|
-
// Ignore cleanup errors
|
|
166
|
-
}
|
|
176
|
+
cleanup();
|
|
177
|
+
process.removeListener("SIGINT", cleanupOnExit);
|
|
178
|
+
process.removeListener("SIGTERM", cleanupOnExit);
|
|
167
179
|
reject(new Error(`Failed to spawn Copilot CLI: ${error}`));
|
|
168
180
|
});
|
|
169
181
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copilotCLI.js","sourceRoot":"","sources":["../../src/adapters/copilotCLI.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"copilotCLI.js","sourceRoot":"","sources":["../../src/adapters/copilotCLI.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAsC;AACtC,uCAAyB;AACzB,2CAA6B;AAE7B,gDAA+E;AAC/E,4DAGiC;AAOjC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAE1C,MAAa,iBAAiB;IAK5B,YAAY,OAAkC;QAJ9B,SAAI,GAAG,SAAkB,CAAC;QAKxC,IAAI,CAAC,aAAa,GAAG,IAAA,qCAAoB,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,aAAa,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE;gBACvC,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,MAAc,EACd,YAAgC;QAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAA,iCAAgB,EAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YACpE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAClC,MAAM,cAAc,GAAG,QAAQ;qBAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACX,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;oBAC5D,OAAO,OAAO,GAAG,CAAC,IAAI,WAAW,GAAG,KAAK,GAAG,CAAC,OAAO,UAAU,CAAC;gBACjE,CAAC,CAAC;qBACD,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,KAAK,CAAC,IAAI,CACR,0GAA0G,CAC3G,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CACZ,MAAc,EACd,YAAgC,EAChC,OAAuB;QAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAE1D,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAA,gCAAqB,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE/D,gFAAgF;QAChF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,IAAI,CAAC,aAAa,EAClB,0BAA0B,CAC3B,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAE/C,mBAAmB;YACnB,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,IAAI,CAAC;oBACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC5B,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,wBAAwB;gBAC1B,CAAC;YACH,CAAC,CAAC;YAEF,0CAA0C;YAC1C,MAAM,aAAa,GAAG,GAAS,EAAE;gBAC/B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,QAAQ,QAAQ,uBAAuB,IAAI,CAAC,KAAK,0GAA0G,CAAC;YAC5K,MAAM,IAAI,GAAG,IAAA,qBAAK,EAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBACxC,GAAG,EAAE,IAAI,CAAC,aAAa;gBACvB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,8DAA8D;YAC9D,IAAI,aAAa,GAA0B,IAAI,CAAC;YAChD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9C,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACrB,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;oBAChD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;oBACjD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,OAAO,IAAI,CAAC,CAAC,CAAC;gBAChE,CAAC,EAAE,OAAO,CAAC,CAAC;YACd,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,IAAI,aAAa,EAAE,CAAC;oBAClB,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC9B,CAAC;gBAED,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;gBAChD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBAEjD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,CACJ,IAAI,KAAK,CACP,gCAAgC,IAAI,aAAa,MAAM,EAAE,CAC1D,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,0DAA0D;gBAC1D,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,IAAA,gCAAqB,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC9D,MAAM,YAAY,GAAG,IAAA,8BAAmB,EACtC,YAAY,EACZ,WAAW,EACX,IAAI,CAAC,aAAa,CACnB,CAAC;oBACF,OAAO,CAAC,YAAY,CAAC,CAAC;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACzB,IAAI,aAAa,EAAE,CAAC;oBAClB,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC9B,CAAC;gBACD,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;gBAChD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBACjD,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AArLD,8CAqLC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
type Environment = 'development' | 'staging' | 'production';
|
|
2
|
+
interface FeatureToggles {
|
|
3
|
+
readonly enableAnalytics: boolean;
|
|
4
|
+
readonly enableBetaFeatures: boolean;
|
|
5
|
+
readonly enableDetailedLogging: boolean;
|
|
6
|
+
readonly enableCaching: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface EnvironmentConfig {
|
|
9
|
+
readonly environment: Environment;
|
|
10
|
+
readonly apiUrl: string;
|
|
11
|
+
readonly debug: boolean;
|
|
12
|
+
readonly features: FeatureToggles;
|
|
13
|
+
}
|
|
14
|
+
declare const developmentConfig: {
|
|
15
|
+
readonly environment: "development";
|
|
16
|
+
readonly apiUrl: "http://localhost:3000/api";
|
|
17
|
+
readonly debug: true;
|
|
18
|
+
readonly features: {
|
|
19
|
+
readonly enableAnalytics: false;
|
|
20
|
+
readonly enableBetaFeatures: true;
|
|
21
|
+
readonly enableDetailedLogging: true;
|
|
22
|
+
readonly enableCaching: false;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
declare const stagingConfig: {
|
|
26
|
+
readonly environment: "staging";
|
|
27
|
+
readonly apiUrl: "https://staging-api.example.com/api";
|
|
28
|
+
readonly debug: true;
|
|
29
|
+
readonly features: {
|
|
30
|
+
readonly enableAnalytics: true;
|
|
31
|
+
readonly enableBetaFeatures: true;
|
|
32
|
+
readonly enableDetailedLogging: true;
|
|
33
|
+
readonly enableCaching: true;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
declare const productionConfig: {
|
|
37
|
+
readonly environment: "production";
|
|
38
|
+
readonly apiUrl: "https://api.example.com/api";
|
|
39
|
+
readonly debug: false;
|
|
40
|
+
readonly features: {
|
|
41
|
+
readonly enableAnalytics: true;
|
|
42
|
+
readonly enableBetaFeatures: false;
|
|
43
|
+
readonly enableDetailedLogging: false;
|
|
44
|
+
readonly enableCaching: true;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
declare const getEnvironmentConfig: (env?: Environment) => EnvironmentConfig;
|
|
48
|
+
declare const getCurrentEnvironment: () => Environment;
|
|
49
|
+
export type { Environment, EnvironmentConfig, FeatureToggles };
|
|
50
|
+
export { developmentConfig, stagingConfig, productionConfig, getEnvironmentConfig, getCurrentEnvironment };
|
|
51
|
+
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;AAE5D,UAAU,cAAc;IACtB,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;CACnC;AAED,QAAA,MAAM,iBAAiB;;;;;;;;;;CAUe,CAAC;AAEvC,QAAA,MAAM,aAAa;;;;;;;;;;CAUmB,CAAC;AAEvC,QAAA,MAAM,gBAAgB;;;;;;;;;;CAUgB,CAAC;AAQvC,QAAA,MAAM,oBAAoB,GAAI,MAAK,WAA2B,KAAG,iBAEhE,CAAC;AAEF,QAAA,MAAM,qBAAqB,QAAO,WAMjC,CAAC;AAEF,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCurrentEnvironment = exports.getEnvironmentConfig = exports.productionConfig = exports.stagingConfig = exports.developmentConfig = void 0;
|
|
4
|
+
const developmentConfig = {
|
|
5
|
+
environment: 'development',
|
|
6
|
+
apiUrl: 'http://localhost:3000/api',
|
|
7
|
+
debug: true,
|
|
8
|
+
features: {
|
|
9
|
+
enableAnalytics: false,
|
|
10
|
+
enableBetaFeatures: true,
|
|
11
|
+
enableDetailedLogging: true,
|
|
12
|
+
enableCaching: false,
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
exports.developmentConfig = developmentConfig;
|
|
16
|
+
const stagingConfig = {
|
|
17
|
+
environment: 'staging',
|
|
18
|
+
apiUrl: 'https://staging-api.example.com/api',
|
|
19
|
+
debug: true,
|
|
20
|
+
features: {
|
|
21
|
+
enableAnalytics: true,
|
|
22
|
+
enableBetaFeatures: true,
|
|
23
|
+
enableDetailedLogging: true,
|
|
24
|
+
enableCaching: true,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
exports.stagingConfig = stagingConfig;
|
|
28
|
+
const productionConfig = {
|
|
29
|
+
environment: 'production',
|
|
30
|
+
apiUrl: 'https://api.example.com/api',
|
|
31
|
+
debug: false,
|
|
32
|
+
features: {
|
|
33
|
+
enableAnalytics: true,
|
|
34
|
+
enableBetaFeatures: false,
|
|
35
|
+
enableDetailedLogging: false,
|
|
36
|
+
enableCaching: true,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
exports.productionConfig = productionConfig;
|
|
40
|
+
const configs = {
|
|
41
|
+
development: developmentConfig,
|
|
42
|
+
staging: stagingConfig,
|
|
43
|
+
production: productionConfig,
|
|
44
|
+
};
|
|
45
|
+
const getEnvironmentConfig = (env = 'development') => {
|
|
46
|
+
return configs[env];
|
|
47
|
+
};
|
|
48
|
+
exports.getEnvironmentConfig = getEnvironmentConfig;
|
|
49
|
+
const getCurrentEnvironment = () => {
|
|
50
|
+
const env = process.env.NODE_ENV;
|
|
51
|
+
if (env === 'production' || env === 'staging' || env === 'development') {
|
|
52
|
+
return env;
|
|
53
|
+
}
|
|
54
|
+
return 'development';
|
|
55
|
+
};
|
|
56
|
+
exports.getCurrentEnvironment = getCurrentEnvironment;
|
|
57
|
+
//# sourceMappingURL=environment.js.map
|