@paths.design/caws-cli 3.5.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 (87) hide show
  1. package/dist/budget-derivation.d.ts +41 -2
  2. package/dist/budget-derivation.d.ts.map +1 -1
  3. package/dist/budget-derivation.js +417 -30
  4. package/dist/commands/archive.d.ts +50 -0
  5. package/dist/commands/archive.d.ts.map +1 -0
  6. package/dist/commands/archive.js +353 -0
  7. package/dist/commands/iterate.d.ts.map +1 -1
  8. package/dist/commands/iterate.js +12 -13
  9. package/dist/commands/mode.d.ts +24 -0
  10. package/dist/commands/mode.d.ts.map +1 -0
  11. package/dist/commands/mode.js +259 -0
  12. package/dist/commands/plan.d.ts +49 -0
  13. package/dist/commands/plan.d.ts.map +1 -0
  14. package/dist/commands/plan.js +448 -0
  15. package/dist/commands/quality-gates.d.ts +52 -0
  16. package/dist/commands/quality-gates.d.ts.map +1 -0
  17. package/dist/commands/quality-gates.js +490 -0
  18. package/dist/commands/specs.d.ts +71 -0
  19. package/dist/commands/specs.d.ts.map +1 -0
  20. package/dist/commands/specs.js +735 -0
  21. package/dist/commands/status.d.ts +4 -3
  22. package/dist/commands/status.d.ts.map +1 -1
  23. package/dist/commands/status.js +552 -22
  24. package/dist/commands/tutorial.d.ts +55 -0
  25. package/dist/commands/tutorial.d.ts.map +1 -0
  26. package/dist/commands/tutorial.js +481 -0
  27. package/dist/commands/validate.d.ts +10 -2
  28. package/dist/commands/validate.d.ts.map +1 -1
  29. package/dist/commands/validate.js +199 -39
  30. package/dist/config/modes.d.ts +225 -0
  31. package/dist/config/modes.d.ts.map +1 -0
  32. package/dist/config/modes.js +321 -0
  33. package/dist/constants/spec-types.d.ts +41 -0
  34. package/dist/constants/spec-types.d.ts.map +1 -0
  35. package/dist/constants/spec-types.js +42 -0
  36. package/dist/index-new.d.ts +5 -0
  37. package/dist/index-new.d.ts.map +1 -0
  38. package/dist/index-new.js +317 -0
  39. package/dist/index.js +227 -10
  40. package/dist/index.js.backup +4711 -0
  41. package/dist/policy/PolicyManager.d.ts +104 -0
  42. package/dist/policy/PolicyManager.d.ts.map +1 -0
  43. package/dist/policy/PolicyManager.js +399 -0
  44. package/dist/scaffold/cursor-hooks.d.ts.map +1 -1
  45. package/dist/scaffold/cursor-hooks.js +15 -0
  46. package/dist/scaffold/git-hooks.d.ts.map +1 -1
  47. package/dist/scaffold/git-hooks.js +32 -44
  48. package/dist/scaffold/index.d.ts.map +1 -1
  49. package/dist/scaffold/index.js +19 -0
  50. package/dist/spec/SpecFileManager.d.ts +146 -0
  51. package/dist/spec/SpecFileManager.d.ts.map +1 -0
  52. package/dist/spec/SpecFileManager.js +419 -0
  53. package/dist/utils/quality-gates-errors.js +520 -0
  54. package/dist/utils/quality-gates.d.ts +49 -0
  55. package/dist/utils/quality-gates.d.ts.map +1 -0
  56. package/dist/utils/quality-gates.js +361 -0
  57. package/dist/utils/spec-resolver.d.ts +88 -0
  58. package/dist/utils/spec-resolver.d.ts.map +1 -0
  59. package/dist/utils/spec-resolver.js +602 -0
  60. package/dist/validation/spec-validation.d.ts +14 -0
  61. package/dist/validation/spec-validation.d.ts.map +1 -1
  62. package/dist/validation/spec-validation.js +225 -13
  63. package/package.json +6 -5
  64. package/templates/.cursor/hooks/caws-scope-guard.sh +64 -8
  65. package/templates/.cursor/hooks/validate-spec.sh +22 -12
  66. package/templates/.cursor/rules/00-claims-verification.mdc +144 -0
  67. package/templates/.cursor/rules/01-working-style.mdc +50 -0
  68. package/templates/.cursor/rules/02-quality-gates.mdc +370 -0
  69. package/templates/.cursor/rules/03-naming-and-refactor.mdc +33 -0
  70. package/templates/.cursor/rules/04-logging-language-style.mdc +23 -0
  71. package/templates/.cursor/rules/05-safe-defaults-guards.mdc +23 -0
  72. package/templates/.cursor/rules/06-typescript-conventions.mdc +36 -0
  73. package/templates/.cursor/rules/07-process-ops.mdc +20 -0
  74. package/templates/.cursor/rules/08-solid-and-architecture.mdc +16 -0
  75. package/templates/.cursor/rules/09-docstrings.mdc +89 -0
  76. package/templates/.cursor/rules/10-authorship-and-attribution.mdc +15 -0
  77. package/templates/.cursor/rules/11-documentation-quality-standards.mdc +390 -0
  78. package/templates/.cursor/rules/12-scope-management-waivers.mdc +385 -0
  79. package/templates/.cursor/rules/13-implementation-completeness.mdc +516 -0
  80. package/templates/.cursor/rules/14-language-agnostic-standards.mdc +588 -0
  81. package/templates/.cursor/rules/15-sophisticated-todo-detection.mdc +425 -0
  82. package/templates/.cursor/rules/README.md +150 -0
  83. package/templates/apps/tools/caws/prompt-lint.js.backup +274 -0
  84. package/templates/apps/tools/caws/provenance.js.backup +73 -0
  85. package/templates/scripts/quality-gates/check-god-objects.js +146 -0
  86. package/templates/scripts/quality-gates/run-quality-gates.js +50 -0
  87. package/templates/scripts/v3/analysis/todo_analyzer.py +1950 -0
@@ -1,77 +1,237 @@
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
13
- const { validateWorkingSpecWithSuggestions } = require('../validation/spec-validation');
11
+ const {
12
+ validateWorkingSpecWithSuggestions,
13
+ getComplianceGrade,
14
+ } = require('../validation/spec-validation');
15
+
16
+ // Import spec resolution system
17
+ const { resolveSpec, suggestMigration } = require('../utils/spec-resolver');
14
18
 
15
19
  /**
16
20
  * Validate command handler
17
- * @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)
18
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)
19
27
  */
20
- async function validateCommand(specFile, options) {
28
+ async function validateCommand(specFile, options = {}) {
21
29
  try {
22
- let specPath = specFile || path.join('.caws', 'working-spec.yaml');
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
+ });
23
37
 
24
- if (!fs.existsSync(specPath)) {
25
- console.error(chalk.red(`❌ Spec file not found: ${specPath}`));
26
- console.error(chalk.blue('💡 Run "caws init" first to create a working spec'));
27
- process.exit(1);
28
- }
38
+ const { path: specPath, type: specType, spec } = resolved;
29
39
 
30
- const specContent = fs.readFileSync(specPath, 'utf8');
31
- const spec = yaml.load(specContent);
40
+ // Suggest migration if using legacy spec
41
+ if (specType === 'legacy' && options.format !== 'json') {
42
+ await suggestMigration();
43
+ }
32
44
 
33
- console.log(chalk.cyan('🔍 Validating CAWS working spec...'));
45
+ if (options.format !== 'json') {
46
+ console.log(
47
+ chalk.cyan(`🔍 Validating ${specType === 'feature' ? 'feature' : 'working'} spec...`)
48
+ );
49
+ console.log(chalk.gray(` Spec: ${path.relative(process.cwd(), specPath)}`));
50
+ }
34
51
 
35
52
  const result = validateWorkingSpecWithSuggestions(spec, {
36
53
  autoFix: options.autoFix,
54
+ dryRun: options.dryRun,
37
55
  suggestions: !options.quiet,
38
56
  checkBudget: true,
39
57
  projectRoot: path.dirname(specPath),
58
+ specType,
40
59
  });
41
60
 
42
- if (result.valid) {
43
- console.log(chalk.green('✅ Working spec validation passed'));
44
- if (!options.quiet) {
45
- console.log(chalk.gray(` Risk tier: ${spec.risk_tier}`));
46
- console.log(chalk.gray(` Mode: ${spec.mode}`));
47
- if (spec.title) {
48
- console.log(chalk.gray(` Title: ${spec.title}`));
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
+ }
49
91
  }
50
92
  }
51
- } else {
52
- console.log(chalk.red('❌ Working spec validation failed'));
53
93
 
54
- // Show errors
55
- result.errors.forEach((error, index) => {
56
- console.log(` ${index + 1}. ${chalk.red(error.message)}`);
57
- if (error.suggestion) {
58
- console.log(` ${chalk.blue('💡 ' + error.suggestion)}`);
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
+ });
59
116
  }
60
- });
117
+ }
61
118
 
62
- // Show warnings
63
- if (result.warnings && result.warnings.length > 0) {
64
- console.log(chalk.yellow('\n⚠️ Warnings:'));
65
- result.warnings.forEach((warning, index) => {
66
- console.log(` ${index + 1}. ${chalk.yellow(warning.message)}`);
67
- });
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
+
131
+ // Format output based on requested format
132
+ if (options.format === 'json') {
133
+ // Structured JSON output matching CAWSValidationResult
134
+ const jsonResult = {
135
+ passed: finalResult.valid,
136
+ cawsVersion: '3.4.0',
137
+ timestamp: new Date().toISOString(),
138
+ verdict: finalResult.valid ? 'pass' : 'fail',
139
+ spec: {
140
+ id: spec.id,
141
+ title: spec.title,
142
+ risk_tier: spec.risk_tier,
143
+ mode: spec.mode,
144
+ },
145
+ validation: {
146
+ errors: finalResult.errors || [],
147
+ warnings: finalResult.warnings || [],
148
+ fixes: finalResult.fixes || [],
149
+ },
150
+ budgetCompliance: finalResult.budget_check || null,
151
+ specType,
152
+ specPath: path.relative(process.cwd(), specPath),
153
+ featureValidation: finalResult.featureValidation,
154
+ };
155
+
156
+ console.log(JSON.stringify(jsonResult, null, 2));
157
+
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
+ }
68
165
  }
166
+ } else {
167
+ // Human-readable text output
168
+ if (finalResult.valid) {
169
+ console.log(chalk.green('✅ Working spec validation passed'));
170
+ if (!options.quiet) {
171
+ console.log(chalk.gray(` Risk tier: ${spec.risk_tier}`));
172
+ console.log(chalk.gray(` Mode: ${spec.mode}`));
173
+ if (spec.title) {
174
+ console.log(chalk.gray(` Title: ${spec.title}`));
175
+ }
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';
185
+ console.log(chalk[scoreColor](` Compliance: ${scorePercent}% (Grade ${grade})`));
186
+ }
187
+ }
188
+ } else {
189
+ console.log(chalk.red('❌ Working spec validation failed'));
69
190
 
70
- process.exit(1);
191
+ // Show errors
192
+ finalResult.errors.forEach((error, index) => {
193
+ console.log(` ${index + 1}. ${chalk.red(error.message)}`);
194
+ if (error.suggestion) {
195
+ console.log(` ${chalk.blue('💡 ' + error.suggestion)}`);
196
+ }
197
+ });
198
+
199
+ // Show warnings
200
+ if (finalResult.warnings && finalResult.warnings.length > 0) {
201
+ console.log(chalk.yellow('\n⚠️ Warnings:'));
202
+ finalResult.warnings.forEach((warning, index) => {
203
+ console.log(` ${index + 1}. ${chalk.yellow(warning.message)}`);
204
+ });
205
+ }
206
+
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
+ }
213
+ }
71
214
  }
72
215
  } catch (error) {
73
- console.error(chalk.red('❌ Error during validation:'), error.message);
74
- process.exit(1);
216
+ if (options.format === 'json') {
217
+ console.log(
218
+ JSON.stringify(
219
+ {
220
+ passed: false,
221
+ verdict: 'fail',
222
+ error: error.message,
223
+ },
224
+ null,
225
+ 2
226
+ )
227
+ );
228
+ } else {
229
+ console.error(chalk.red('❌ Error during validation:'), error.message);
230
+ }
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
+ }
75
235
  }
76
236
  }
77
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"}