@paths.design/caws-cli 4.0.0 → 4.1.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.
Files changed (76) hide show
  1. package/dist/commands/archive.d.ts +50 -0
  2. package/dist/commands/archive.d.ts.map +1 -0
  3. package/dist/commands/archive.js +353 -0
  4. package/dist/commands/iterate.d.ts.map +1 -1
  5. package/dist/commands/iterate.js +12 -13
  6. package/dist/commands/mode.d.ts +24 -0
  7. package/dist/commands/mode.d.ts.map +1 -0
  8. package/dist/commands/mode.js +259 -0
  9. package/dist/commands/plan.d.ts +49 -0
  10. package/dist/commands/plan.d.ts.map +1 -0
  11. package/dist/commands/plan.js +448 -0
  12. package/dist/commands/quality-gates.d.ts +52 -0
  13. package/dist/commands/quality-gates.d.ts.map +1 -0
  14. package/dist/commands/quality-gates.js +490 -0
  15. package/dist/commands/specs.d.ts +71 -0
  16. package/dist/commands/specs.d.ts.map +1 -0
  17. package/dist/commands/specs.js +735 -0
  18. package/dist/commands/status.d.ts +4 -3
  19. package/dist/commands/status.d.ts.map +1 -1
  20. package/dist/commands/status.js +552 -22
  21. package/dist/commands/tutorial.d.ts +55 -0
  22. package/dist/commands/tutorial.d.ts.map +1 -0
  23. package/dist/commands/tutorial.js +481 -0
  24. package/dist/commands/validate.d.ts +10 -3
  25. package/dist/commands/validate.d.ts.map +1 -1
  26. package/dist/commands/validate.js +137 -54
  27. package/dist/config/modes.d.ts +225 -0
  28. package/dist/config/modes.d.ts.map +1 -0
  29. package/dist/config/modes.js +321 -0
  30. package/dist/constants/spec-types.d.ts +41 -0
  31. package/dist/constants/spec-types.d.ts.map +1 -0
  32. package/dist/constants/spec-types.js +42 -0
  33. package/dist/index-new.d.ts +5 -0
  34. package/dist/index-new.d.ts.map +1 -0
  35. package/dist/index-new.js +317 -0
  36. package/dist/index.js +225 -10
  37. package/dist/index.js.backup +4711 -0
  38. package/dist/scaffold/git-hooks.d.ts.map +1 -1
  39. package/dist/scaffold/git-hooks.js +32 -44
  40. package/dist/scaffold/index.d.ts.map +1 -1
  41. package/dist/scaffold/index.js +19 -0
  42. package/dist/utils/quality-gates-errors.js +520 -0
  43. package/dist/utils/quality-gates.d.ts +49 -0
  44. package/dist/utils/quality-gates.d.ts.map +1 -0
  45. package/dist/utils/quality-gates.js +361 -0
  46. package/dist/utils/spec-resolver.d.ts +88 -0
  47. package/dist/utils/spec-resolver.d.ts.map +1 -0
  48. package/dist/utils/spec-resolver.js +602 -0
  49. package/package.json +6 -5
  50. package/templates/.cursor/hooks/caws-scope-guard.sh +64 -8
  51. package/templates/.cursor/hooks/validate-spec.sh +22 -12
  52. package/templates/.cursor/rules/{01-claims-verification.mdc → 00-claims-verification.mdc} +1 -1
  53. package/templates/.cursor/rules/01-working-style.mdc +50 -0
  54. package/templates/.cursor/rules/{02-testing-standards.mdc → 02-quality-gates.mdc} +84 -29
  55. package/templates/.cursor/rules/03-naming-and-refactor.mdc +33 -0
  56. package/templates/.cursor/rules/04-logging-language-style.mdc +23 -0
  57. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +23 -0
  58. package/templates/.cursor/rules/06-typescript-conventions.mdc +36 -0
  59. package/templates/.cursor/rules/07-process-ops.mdc +20 -0
  60. package/templates/.cursor/rules/08-solid-and-architecture.mdc +16 -0
  61. package/templates/.cursor/rules/09-docstrings.mdc +89 -0
  62. package/templates/.cursor/rules/10-authorship-and-attribution.mdc +15 -0
  63. package/templates/.cursor/rules/11-documentation-quality-standards.mdc +390 -0
  64. package/templates/.cursor/rules/12-scope-management-waivers.mdc +385 -0
  65. package/templates/.cursor/rules/13-implementation-completeness.mdc +516 -0
  66. package/templates/.cursor/rules/14-language-agnostic-standards.mdc +588 -0
  67. package/templates/.cursor/rules/15-sophisticated-todo-detection.mdc +425 -0
  68. package/templates/.cursor/rules/README.md +93 -7
  69. package/templates/apps/tools/caws/prompt-lint.js.backup +274 -0
  70. package/templates/apps/tools/caws/provenance.js.backup +73 -0
  71. package/templates/scripts/quality-gates/check-god-objects.js +146 -0
  72. package/templates/scripts/quality-gates/run-quality-gates.js +50 -0
  73. package/templates/scripts/v3/analysis/todo_analyzer.py +1950 -0
  74. package/templates/.cursor/rules/03-infrastructure-standards.mdc +0 -251
  75. package/templates/.cursor/rules/04-documentation-integrity.mdc +0 -291
  76. package/templates/.cursor/rules/05-production-readiness-checklist.mdc +0 -214
@@ -1,12 +1,10 @@
1
1
  /**
2
2
  * @fileoverview Validate Command Handler
3
- * Handles validation commands for CAWS CLI
3
+ * Handles validation commands for CAWS CLI with multi-spec support
4
4
  * @author @darianrosebrook
5
5
  */
6
6
 
7
- const fs = require('fs-extra');
8
7
  const path = require('path');
9
- const yaml = require('js-yaml');
10
8
  const chalk = require('chalk');
11
9
 
12
10
  // Import validation functionality
@@ -15,47 +13,40 @@ const {
15
13
  getComplianceGrade,
16
14
  } = require('../validation/spec-validation');
17
15
 
16
+ // Import spec resolution system
17
+ const { resolveSpec, suggestMigration } = require('../utils/spec-resolver');
18
+
18
19
  /**
19
20
  * Validate command handler
20
- * Enhanced with JSON output format support
21
- * @param {string} specFile - Path to spec file
21
+ * Enhanced with multi-spec support and JSON output format
22
+ * @param {string} specFile - Path to spec file (optional, uses spec resolution)
22
23
  * @param {Object} options - Command options
24
+ * @param {string} [options.specId] - Feature-specific spec ID
25
+ * @param {boolean} [options.interactive] - Use interactive spec selection
26
+ * @param {boolean} [options.format] - Output format (json)
23
27
  */
24
- async function validateCommand(specFile, options) {
28
+ async function validateCommand(specFile, options = {}) {
25
29
  try {
26
- let specPath = specFile || path.join('.caws', 'working-spec.yaml');
27
-
28
- if (!fs.existsSync(specPath)) {
29
- if (options.format === 'json') {
30
- console.log(
31
- JSON.stringify(
32
- {
33
- passed: false,
34
- verdict: 'fail',
35
- errors: [
36
- {
37
- field: 'spec_file',
38
- message: `Spec file not found: ${specPath}`,
39
- suggestion: 'Run "caws init" first to create a working spec',
40
- },
41
- ],
42
- },
43
- null,
44
- 2
45
- )
46
- );
47
- } else {
48
- console.error(chalk.red(`❌ Spec file not found: ${specPath}`));
49
- console.error(chalk.blue('💡 Run "caws init" first to create a working spec'));
50
- }
51
- process.exit(1);
52
- }
30
+ // Resolve spec using priority system
31
+ const resolved = await resolveSpec({
32
+ specId: options.specId,
33
+ specFile,
34
+ warnLegacy: options.format !== 'json',
35
+ interactive: options.interactive || false,
36
+ });
53
37
 
54
- const specContent = fs.readFileSync(specPath, 'utf8');
55
- const spec = yaml.load(specContent);
38
+ const { path: specPath, type: specType, spec } = resolved;
39
+
40
+ // Suggest migration if using legacy spec
41
+ if (specType === 'legacy' && options.format !== 'json') {
42
+ await suggestMigration();
43
+ }
56
44
 
57
45
  if (options.format !== 'json') {
58
- console.log(chalk.cyan('🔍 Validating CAWS working spec...'));
46
+ console.log(
47
+ chalk.cyan(`🔍 Validating ${specType === 'feature' ? 'feature' : 'working'} spec...`)
48
+ );
49
+ console.log(chalk.gray(` Spec: ${path.relative(process.cwd(), specPath)}`));
59
50
  }
60
51
 
61
52
  const result = validateWorkingSpecWithSuggestions(spec, {
@@ -64,16 +55,87 @@ async function validateCommand(specFile, options) {
64
55
  suggestions: !options.quiet,
65
56
  checkBudget: true,
66
57
  projectRoot: path.dirname(specPath),
58
+ specType,
67
59
  });
68
60
 
61
+ // Enhanced validation for multi-spec scenarios
62
+ const enhancedValidation = { ...result };
63
+
64
+ if (specType === 'feature') {
65
+ // Check for potential issues in feature specs
66
+ const featureIssues = [];
67
+
68
+ // Check scope conflicts (if multiple specs exist)
69
+ const { checkMultiSpecStatus } = require('../utils/spec-resolver');
70
+ const multiSpecStatus = await checkMultiSpecStatus();
71
+
72
+ if (multiSpecStatus.specCount > 1) {
73
+ const { checkScopeConflicts } = require('../utils/spec-resolver');
74
+ const conflicts = await checkScopeConflicts(
75
+ Object.keys(multiSpecStatus.registry?.specs || {})
76
+ );
77
+
78
+ if (conflicts.length > 0) {
79
+ const myConflicts = conflicts.filter((c) => c.spec1 === spec.id || c.spec2 === spec.id);
80
+
81
+ if (myConflicts.length > 0) {
82
+ featureIssues.push({
83
+ type: 'warning',
84
+ message: `Scope conflicts detected with other specs`,
85
+ details: myConflicts.map((c) => {
86
+ const otherSpec = c.spec1 === spec.id ? c.spec2 : c.spec1;
87
+ return `Conflict with ${otherSpec}: ${c.conflicts.join(', ')}`;
88
+ }),
89
+ });
90
+ }
91
+ }
92
+ }
93
+
94
+ // Check for missing contracts in feature specs
95
+ if (spec.contracts && spec.contracts.length === 0 && spec.mode === 'feature') {
96
+ featureIssues.push({
97
+ type: 'info',
98
+ message: 'Consider adding API contracts for better integration',
99
+ suggestion: 'Add contracts section to define API boundaries',
100
+ });
101
+ }
102
+
103
+ // Check for overly broad scopes
104
+ if (spec.scope && spec.scope.in) {
105
+ const broadPatterns = spec.scope.in.filter(
106
+ (pattern) => pattern === 'src/' || pattern === 'tests/' || pattern.includes('*')
107
+ );
108
+
109
+ if (broadPatterns.length > 0) {
110
+ featureIssues.push({
111
+ type: 'warning',
112
+ message: 'Broad scope patterns detected',
113
+ details: `Patterns like ${broadPatterns.join(', ')} may conflict with other features`,
114
+ suggestion: 'Use more specific scope.in paths',
115
+ });
116
+ }
117
+ }
118
+
119
+ // Add feature-specific issues to validation result
120
+ if (featureIssues.length > 0) {
121
+ enhancedValidation.issues = (enhancedValidation.issues || []).concat(featureIssues);
122
+ enhancedValidation.featureValidation = {
123
+ passed: featureIssues.filter((i) => i.type === 'error').length === 0,
124
+ issues: featureIssues,
125
+ };
126
+ }
127
+ }
128
+
129
+ const finalResult = enhancedValidation;
130
+
69
131
  // Format output based on requested format
70
132
  if (options.format === 'json') {
71
133
  // Structured JSON output matching CAWSValidationResult
72
134
  const jsonResult = {
73
- passed: result.valid,
135
+ passed: finalResult.valid,
74
136
  cawsVersion: '3.4.0',
75
137
  timestamp: new Date().toISOString(),
76
- verdict: result.valid ? 'pass' : 'fail',
138
+ verdict: finalResult.valid ? 'pass' : 'fail',
77
139
  spec: {
78
140
  id: spec.id,
79
141
  title: spec.title,
@@ -81,21 +143,29 @@ async function validateCommand(specFile, options) {
81
143
  mode: spec.mode,
82
144
  },
83
145
  validation: {
84
- errors: result.errors || [],
85
- warnings: result.warnings || [],
86
- fixes: result.fixes || [],
146
+ errors: finalResult.errors || [],
147
+ warnings: finalResult.warnings || [],
148
+ fixes: finalResult.fixes || [],
87
149
  },
88
- budgetCompliance: result.budget_check || null,
150
+ budgetCompliance: finalResult.budget_check || null,
151
+ specType,
152
+ specPath: path.relative(process.cwd(), specPath),
153
+ featureValidation: finalResult.featureValidation,
89
154
  };
90
155
 
91
156
  console.log(JSON.stringify(jsonResult, null, 2));
92
157
 
93
- if (!result.valid) {
94
- process.exit(1);
158
+ if (!finalResult.valid) {
159
+ // Don't call process.exit in test environment
160
+ if (process.env.NODE_ENV !== 'test' && !process.env.JEST_WORKER_ID) {
161
+ process.exit(1);
162
+ } else {
163
+ throw new Error('Validation failed');
164
+ }
95
165
  }
96
166
  } else {
97
167
  // Human-readable text output
98
- if (result.valid) {
168
+ if (finalResult.valid) {
99
169
  console.log(chalk.green('✅ Working spec validation passed'));
100
170
  if (!options.quiet) {
101
171
  console.log(chalk.gray(` Risk tier: ${spec.risk_tier}`));
@@ -103,10 +173,15 @@ async function validateCommand(specFile, options) {
103
173
  if (spec.title) {
104
174
  console.log(chalk.gray(` Title: ${spec.title}`));
105
175
  }
106
- if (result.complianceScore !== undefined) {
107
- const grade = getComplianceGrade(result.complianceScore);
108
- const scorePercent = (result.complianceScore * 100).toFixed(0);
109
- const scoreColor = result.complianceScore >= 0.9 ? 'green' : result.complianceScore >= 0.7 ? 'yellow' : 'red';
176
+ if (finalResult.complianceScore !== undefined) {
177
+ const grade = getComplianceGrade(finalResult.complianceScore);
178
+ const scorePercent = (finalResult.complianceScore * 100).toFixed(0);
179
+ const scoreColor =
180
+ finalResult.complianceScore >= 0.9
181
+ ? 'green'
182
+ : finalResult.complianceScore >= 0.7
183
+ ? 'yellow'
184
+ : 'red';
110
185
  console.log(chalk[scoreColor](` Compliance: ${scorePercent}% (Grade ${grade})`));
111
186
  }
112
187
  }
@@ -114,7 +189,7 @@ async function validateCommand(specFile, options) {
114
189
  console.log(chalk.red('❌ Working spec validation failed'));
115
190
 
116
191
  // Show errors
117
- result.errors.forEach((error, index) => {
192
+ finalResult.errors.forEach((error, index) => {
118
193
  console.log(` ${index + 1}. ${chalk.red(error.message)}`);
119
194
  if (error.suggestion) {
120
195
  console.log(` ${chalk.blue('💡 ' + error.suggestion)}`);
@@ -122,14 +197,19 @@ async function validateCommand(specFile, options) {
122
197
  });
123
198
 
124
199
  // Show warnings
125
- if (result.warnings && result.warnings.length > 0) {
200
+ if (finalResult.warnings && finalResult.warnings.length > 0) {
126
201
  console.log(chalk.yellow('\n⚠️ Warnings:'));
127
- result.warnings.forEach((warning, index) => {
202
+ finalResult.warnings.forEach((warning, index) => {
128
203
  console.log(` ${index + 1}. ${chalk.yellow(warning.message)}`);
129
204
  });
130
205
  }
131
206
 
132
- process.exit(1);
207
+ // Don't call process.exit in test environment
208
+ if (process.env.NODE_ENV !== 'test' && !process.env.JEST_WORKER_ID) {
209
+ process.exit(1);
210
+ } else {
211
+ throw new Error('Validation failed');
212
+ }
133
213
  }
134
214
  }
135
215
  } catch (error) {
@@ -148,7 +228,10 @@ async function validateCommand(specFile, options) {
148
228
  } else {
149
229
  console.error(chalk.red('❌ Error during validation:'), error.message);
150
230
  }
151
- process.exit(1);
231
+ // Don't call process.exit in test environment
232
+ if (process.env.NODE_ENV !== 'test' && !process.env.JEST_WORKER_ID) {
233
+ process.exit(1);
234
+ }
152
235
  }
153
236
  }
154
237
 
@@ -0,0 +1,225 @@
1
+ export namespace COMPLEXITY_TIERS {
2
+ namespace simple {
3
+ let name: string;
4
+ let description: string;
5
+ let color: chalk.Chalk;
6
+ let icon: string;
7
+ namespace features {
8
+ let workingSpec: boolean;
9
+ let basicValidation: boolean;
10
+ let statusDisplay: boolean;
11
+ let noQualityGates: boolean;
12
+ let noProvenance: boolean;
13
+ let noWaivers: boolean;
14
+ let noChangeBudgets: boolean;
15
+ let noMultiSpec: boolean;
16
+ }
17
+ namespace qualityRequirements {
18
+ let testCoverage: number;
19
+ let mutationScore: number;
20
+ let contracts: string;
21
+ }
22
+ let riskTiers: string[];
23
+ namespace commands {
24
+ let init: boolean;
25
+ let validate: boolean;
26
+ let status: boolean;
27
+ let specs: boolean;
28
+ }
29
+ }
30
+ namespace standard {
31
+ let name_1: string;
32
+ export { name_1 as name };
33
+ let description_1: string;
34
+ export { description_1 as description };
35
+ let color_1: chalk.Chalk;
36
+ export { color_1 as color };
37
+ let icon_1: string;
38
+ export { icon_1 as icon };
39
+ export namespace features_1 {
40
+ let workingSpec_1: boolean;
41
+ export { workingSpec_1 as workingSpec };
42
+ export let fullValidation: boolean;
43
+ let statusDisplay_1: boolean;
44
+ export { statusDisplay_1 as statusDisplay };
45
+ export let qualityGates: boolean;
46
+ export let provenance: boolean;
47
+ export let waivers: boolean;
48
+ export let changeBudgets: boolean;
49
+ export let multiSpec: boolean;
50
+ export let changeFolders: boolean;
51
+ }
52
+ export { features_1 as features };
53
+ export namespace qualityRequirements_1 {
54
+ let testCoverage_1: number;
55
+ export { testCoverage_1 as testCoverage };
56
+ let mutationScore_1: number;
57
+ export { mutationScore_1 as mutationScore };
58
+ let contracts_1: string;
59
+ export { contracts_1 as contracts };
60
+ }
61
+ export { qualityRequirements_1 as qualityRequirements };
62
+ let riskTiers_1: string[];
63
+ export { riskTiers_1 as riskTiers };
64
+ export namespace commands_1 {
65
+ let init_1: boolean;
66
+ export { init_1 as init };
67
+ let validate_1: boolean;
68
+ export { validate_1 as validate };
69
+ let status_1: boolean;
70
+ export { status_1 as status };
71
+ let specs_1: boolean;
72
+ export { specs_1 as specs };
73
+ export let diagnose: boolean;
74
+ export let evaluate: boolean;
75
+ export let iterate: boolean;
76
+ let provenance_1: boolean;
77
+ export { provenance_1 as provenance };
78
+ let waivers_1: boolean;
79
+ export { waivers_1 as waivers };
80
+ export let hooks: boolean;
81
+ export let archive: boolean;
82
+ }
83
+ export { commands_1 as commands };
84
+ }
85
+ namespace enterprise {
86
+ let name_2: string;
87
+ export { name_2 as name };
88
+ let description_2: string;
89
+ export { description_2 as description };
90
+ let color_2: chalk.Chalk;
91
+ export { color_2 as color };
92
+ let icon_2: string;
93
+ export { icon_2 as icon };
94
+ export namespace features_2 {
95
+ let workingSpec_2: boolean;
96
+ export { workingSpec_2 as workingSpec };
97
+ let fullValidation_1: boolean;
98
+ export { fullValidation_1 as fullValidation };
99
+ let statusDisplay_2: boolean;
100
+ export { statusDisplay_2 as statusDisplay };
101
+ let qualityGates_1: boolean;
102
+ export { qualityGates_1 as qualityGates };
103
+ let provenance_2: boolean;
104
+ export { provenance_2 as provenance };
105
+ let waivers_2: boolean;
106
+ export { waivers_2 as waivers };
107
+ let changeBudgets_1: boolean;
108
+ export { changeBudgets_1 as changeBudgets };
109
+ let multiSpec_1: boolean;
110
+ export { multiSpec_1 as multiSpec };
111
+ let changeFolders_1: boolean;
112
+ export { changeFolders_1 as changeFolders };
113
+ export let auditTrails: boolean;
114
+ export let compliance: boolean;
115
+ export let advancedMonitoring: boolean;
116
+ }
117
+ export { features_2 as features };
118
+ export namespace qualityRequirements_2 {
119
+ let testCoverage_2: number;
120
+ export { testCoverage_2 as testCoverage };
121
+ let mutationScore_2: number;
122
+ export { mutationScore_2 as mutationScore };
123
+ let contracts_2: string;
124
+ export { contracts_2 as contracts };
125
+ }
126
+ export { qualityRequirements_2 as qualityRequirements };
127
+ let riskTiers_2: string[];
128
+ export { riskTiers_2 as riskTiers };
129
+ export namespace commands_2 {
130
+ let init_2: boolean;
131
+ export { init_2 as init };
132
+ let validate_2: boolean;
133
+ export { validate_2 as validate };
134
+ let status_2: boolean;
135
+ export { status_2 as status };
136
+ let specs_2: boolean;
137
+ export { specs_2 as specs };
138
+ let diagnose_1: boolean;
139
+ export { diagnose_1 as diagnose };
140
+ let evaluate_1: boolean;
141
+ export { evaluate_1 as evaluate };
142
+ let iterate_1: boolean;
143
+ export { iterate_1 as iterate };
144
+ let provenance_3: boolean;
145
+ export { provenance_3 as provenance };
146
+ let waivers_3: boolean;
147
+ export { waivers_3 as waivers };
148
+ let hooks_1: boolean;
149
+ export { hooks_1 as hooks };
150
+ let archive_1: boolean;
151
+ export { archive_1 as archive };
152
+ export let troubleshoot: boolean;
153
+ export let testAnalysis: boolean;
154
+ export let qualityMonitor: boolean;
155
+ }
156
+ export { commands_2 as commands };
157
+ }
158
+ }
159
+ /**
160
+ * Get tier information
161
+ * @param {string} tier - Tier name
162
+ * @returns {Object} Tier configuration
163
+ */
164
+ export function getTier(tier: string): any;
165
+ /**
166
+ * Get available tiers
167
+ * @returns {string[]} Array of tier names
168
+ */
169
+ export function getAvailableTiers(): string[];
170
+ /**
171
+ * Get current mode from configuration
172
+ * @returns {Promise<string>} Current mode
173
+ */
174
+ export function getCurrentMode(): Promise<string>;
175
+ /**
176
+ * Set current mode in configuration
177
+ * @param {string} mode - Mode to set
178
+ * @returns {Promise<boolean>} Success status
179
+ */
180
+ export function setCurrentMode(mode: string): Promise<boolean>;
181
+ /**
182
+ * Check if a command is available in the current tier
183
+ * @param {string} command - Command name
184
+ * @param {string} tier - Tier name
185
+ * @returns {boolean} Whether command is available
186
+ */
187
+ export function isCommandAvailable(command: string, tier?: string): boolean;
188
+ /**
189
+ * Check if a feature is enabled in the current tier
190
+ * @param {string} feature - Feature name
191
+ * @param {string} tier - Tier name
192
+ * @returns {boolean} Whether feature is enabled
193
+ */
194
+ export function isFeatureEnabled(feature: string, tier?: string): boolean;
195
+ /**
196
+ * Get quality requirements for a tier
197
+ * @param {string} tier - Tier name
198
+ * @returns {Object} Quality requirements
199
+ */
200
+ export function getQualityRequirements(tier?: string): any;
201
+ /**
202
+ * Get supported risk tiers for a complexity tier
203
+ * @param {string} tier - Tier name
204
+ * @returns {string[]} Supported risk tiers
205
+ */
206
+ export function getSupportedRiskTiers(tier?: string): string[];
207
+ /**
208
+ * Validate if a risk tier is supported in the current complexity tier
209
+ * @param {string} riskTier - Risk tier to validate
210
+ * @param {string} complexityTier - Complexity tier
211
+ * @returns {boolean} Whether risk tier is supported
212
+ */
213
+ export function isRiskTierSupported(riskTier: string, complexityTier?: string): boolean;
214
+ /**
215
+ * Display tier comparison
216
+ */
217
+ export function displayTierComparison(): void;
218
+ /**
219
+ * Get tier recommendation based on project characteristics
220
+ * @param {Object} projectInfo - Project information
221
+ * @returns {string} Recommended tier
222
+ */
223
+ export function getTierRecommendation(projectInfo?: any): string;
224
+ import chalk = require("chalk");
225
+ //# sourceMappingURL=modes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../src/config/modes.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2HA;;;;GAIG;AACH,8BAHW,MAAM,OAKhB;AAED;;;GAGG;AACH,qCAFa,MAAM,EAAE,CAIpB;AA8FD;;;GAGG;AACH,kCAFa,OAAO,CAAC,MAAM,CAAC,CAgB3B;AAED;;;;GAIG;AACH,qCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAuB5B;AA1ID;;;;;GAKG;AACH,4CAJW,MAAM,SACN,MAAM,GACJ,OAAO,CAKnB;AAED;;;;;GAKG;AACH,0CAJW,MAAM,SACN,MAAM,GACJ,OAAO,CAKnB;AAED;;;;GAIG;AACH,8CAHW,MAAM,OAMhB;AAED;;;;GAIG;AACH,6CAHW,MAAM,GACJ,MAAM,EAAE,CAKpB;AAED;;;;;GAKG;AACH,8CAJW,MAAM,mBACN,MAAM,GACJ,OAAO,CAKnB;AAED;;GAEG;AACH,8CAkCC;AAkDD;;;;GAIG;AACH,0DAFa,MAAM,CAsBlB"}