@jterrats/smart-deployment 1.0.5 → 1.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.
- package/README.md +3 -2
- package/lib/ai/wave-validation-prompt.d.ts +2 -0
- package/lib/ai/wave-validation-prompt.js +56 -0
- package/lib/ai/wave-validation-prompt.js.map +1 -0
- package/lib/ai/wave-validation-report.d.ts +2 -0
- package/lib/ai/wave-validation-report.js +96 -0
- package/lib/ai/wave-validation-report.js.map +1 -0
- package/lib/ai/wave-validation-response-parser.d.ts +8 -0
- package/lib/ai/wave-validation-response-parser.js +112 -0
- package/lib/ai/wave-validation-response-parser.js.map +1 -0
- package/lib/ai/wave-validation-result-synthesis.d.ts +6 -0
- package/lib/ai/wave-validation-result-synthesis.js +49 -0
- package/lib/ai/wave-validation-result-synthesis.js.map +1 -0
- package/lib/ai/wave-validation-service.d.ts +1 -55
- package/lib/ai/wave-validation-service.js +11 -359
- package/lib/ai/wave-validation-service.js.map +1 -1
- package/lib/ai/wave-validation-transport.d.ts +7 -0
- package/lib/ai/wave-validation-transport.js +10 -0
- package/lib/ai/wave-validation-transport.js.map +1 -0
- package/lib/analysis/analysis-reporter.d.ts +29 -0
- package/lib/analysis/analysis-reporter.js +84 -1
- package/lib/analysis/analysis-reporter.js.map +1 -1
- package/lib/analysis/analyze-context-service.d.ts +1 -1
- package/lib/analysis/analyze-context-service.js +2 -0
- package/lib/analysis/analyze-context-service.js.map +1 -1
- package/lib/analysis/project-analysis-service.d.ts +2 -0
- package/lib/analysis/project-analysis-service.js +2 -0
- package/lib/analysis/project-analysis-service.js.map +1 -1
- package/lib/commands/start.d.ts +1 -0
- package/lib/commands/start.js +14 -1
- package/lib/commands/start.js.map +1 -1
- package/lib/commands/status.d.ts +2 -0
- package/lib/commands/status.js +1 -0
- package/lib/commands/status.js.map +1 -1
- package/lib/commands/validate.d.ts +3 -3
- package/lib/commands/validate.js +4 -4
- package/lib/commands/validate.js.map +1 -1
- package/lib/constants/api-version.d.ts +2 -2
- package/lib/constants/api-version.js +2 -2
- package/lib/constants/deployment-order.js +11 -8
- package/lib/constants/deployment-order.js.map +1 -1
- package/lib/dependencies/circular-dependency-detector.d.ts +1 -31
- package/lib/dependencies/circular-dependency-detector.js +7 -156
- package/lib/dependencies/circular-dependency-detector.js.map +1 -1
- package/lib/dependencies/cycle-break-suggestions.d.ts +3 -0
- package/lib/dependencies/cycle-break-suggestions.js +63 -0
- package/lib/dependencies/cycle-break-suggestions.js.map +1 -0
- package/lib/dependencies/cycle-discovery.d.ts +16 -0
- package/lib/dependencies/cycle-discovery.js +70 -0
- package/lib/dependencies/cycle-discovery.js.map +1 -0
- package/lib/dependencies/dependency-graph-builder.d.ts +0 -65
- package/lib/dependencies/dependency-graph-builder.js +19 -233
- package/lib/dependencies/dependency-graph-builder.js.map +1 -1
- package/lib/dependencies/dependency-graph-intake.d.ts +17 -0
- package/lib/dependencies/dependency-graph-intake.js +20 -0
- package/lib/dependencies/dependency-graph-intake.js.map +1 -0
- package/lib/dependencies/dependency-graph-stats.d.ts +4 -0
- package/lib/dependencies/dependency-graph-stats.js +82 -0
- package/lib/dependencies/dependency-graph-stats.js.map +1 -0
- package/lib/dependencies/dependency-graph-validation.d.ts +16 -0
- package/lib/dependencies/dependency-graph-validation.js +78 -0
- package/lib/dependencies/dependency-graph-validation.js.map +1 -0
- package/lib/dependencies/dependency-impact-analyzer.d.ts +1 -22
- package/lib/dependencies/dependency-impact-analyzer.js +12 -110
- package/lib/dependencies/dependency-impact-analyzer.js.map +1 -1
- package/lib/dependencies/dependency-impact-scoring.d.ts +5 -0
- package/lib/dependencies/dependency-impact-scoring.js +24 -0
- package/lib/dependencies/dependency-impact-scoring.js.map +1 -0
- package/lib/dependencies/dependency-impact-traversal.d.ts +18 -0
- package/lib/dependencies/dependency-impact-traversal.js +74 -0
- package/lib/dependencies/dependency-impact-traversal.js.map +1 -0
- package/lib/dependencies/dependency-resolution-classifier.d.ts +19 -0
- package/lib/dependencies/dependency-resolution-classifier.js +67 -0
- package/lib/dependencies/dependency-resolution-classifier.js.map +1 -0
- package/lib/dependencies/dependency-resolver.d.ts +1 -48
- package/lib/dependencies/dependency-resolver.js +12 -181
- package/lib/dependencies/dependency-resolver.js.map +1 -1
- package/lib/dependencies/dynamic-query-dependency-references.d.ts +3 -0
- package/lib/dependencies/dynamic-query-dependency-references.js +41 -0
- package/lib/dependencies/dynamic-query-dependency-references.js.map +1 -0
- package/lib/dependencies/topological-dependency-sorter.d.ts +10 -0
- package/lib/dependencies/topological-dependency-sorter.js +84 -0
- package/lib/dependencies/topological-dependency-sorter.js.map +1 -0
- package/lib/deployment/cycle-remediation-runner.d.ts +1 -0
- package/lib/deployment/cycle-remediation-runner.js +5 -1
- package/lib/deployment/cycle-remediation-runner.js.map +1 -1
- package/lib/deployment/deployment-runner.d.ts +3 -1
- package/lib/deployment/deployment-runner.js +6 -1
- package/lib/deployment/deployment-runner.js.map +1 -1
- package/lib/deployment/deployment-status-service.d.ts +2 -0
- package/lib/deployment/deployment-status-service.js +2 -0
- package/lib/deployment/deployment-status-service.js.map +1 -1
- package/lib/deployment/deployment-validation-service.js +1 -1
- package/lib/deployment/deployment-validation-service.js.map +1 -1
- package/lib/deployment/dynamic-query-target-validator.d.ts +24 -0
- package/lib/deployment/dynamic-query-target-validator.js +65 -0
- package/lib/deployment/dynamic-query-target-validator.js.map +1 -0
- package/lib/deployment/sf-cli-integration.d.ts +1 -0
- package/lib/deployment/sf-cli-integration.js +1 -1
- package/lib/deployment/sf-cli-integration.js.map +1 -1
- package/lib/deployment/sf-cli-metadata-lookup.d.ts +4 -0
- package/lib/deployment/sf-cli-metadata-lookup.js +26 -0
- package/lib/deployment/sf-cli-metadata-lookup.js.map +1 -0
- package/lib/deployment/start-execution-service.d.ts +5 -0
- package/lib/deployment/start-execution-service.js +26 -6
- package/lib/deployment/start-execution-service.js.map +1 -1
- package/lib/deployment/wave-graph-state.d.ts +6 -0
- package/lib/deployment/wave-graph-state.js +89 -0
- package/lib/deployment/wave-graph-state.js.map +1 -0
- package/lib/deployment/wave-manifest-service.d.ts +1 -0
- package/lib/deployment/wave-manifest-service.js +1 -1
- package/lib/deployment/wave-manifest-service.js.map +1 -1
- package/lib/errors/deployment-error.js +1 -1
- package/lib/errors/deployment-error.js.map +1 -1
- package/lib/parsers/apex-class-dependencies.d.ts +4 -0
- package/lib/parsers/apex-class-dependencies.js +122 -0
- package/lib/parsers/apex-class-dependencies.js.map +1 -0
- package/lib/parsers/apex-class-lexical.d.ts +3 -0
- package/lib/parsers/apex-class-lexical.js +101 -0
- package/lib/parsers/apex-class-lexical.js.map +1 -0
- package/lib/parsers/apex-class-names.d.ts +18 -0
- package/lib/parsers/apex-class-names.js +93 -0
- package/lib/parsers/apex-class-names.js.map +1 -0
- package/lib/parsers/apex-class-parser-model.d.ts +59 -0
- package/lib/parsers/apex-class-parser-model.js +2 -0
- package/lib/parsers/apex-class-parser-model.js.map +1 -0
- package/lib/parsers/apex-class-parser.d.ts +3 -29
- package/lib/parsers/apex-class-parser.js +10 -395
- package/lib/parsers/apex-class-parser.js.map +1 -1
- package/lib/parsers/apex-class-symbols.d.ts +2 -0
- package/lib/parsers/apex-class-symbols.js +61 -0
- package/lib/parsers/apex-class-symbols.js.map +1 -0
- package/lib/parsers/apex-dynamic-query-analysis.d.ts +2 -0
- package/lib/parsers/apex-dynamic-query-analysis.js +150 -0
- package/lib/parsers/apex-dynamic-query-analysis.js.map +1 -0
- package/lib/parsers/custom-metadata-dynamic-query-analysis.d.ts +2 -0
- package/lib/parsers/custom-metadata-dynamic-query-analysis.js +50 -0
- package/lib/parsers/custom-metadata-dynamic-query-analysis.js.map +1 -0
- package/lib/parsers/custom-metadata-parser.d.ts +2 -0
- package/lib/parsers/custom-metadata-parser.js +3 -0
- package/lib/parsers/custom-metadata-parser.js.map +1 -1
- package/lib/parsers/custom-object-dependency-builder.d.ts +3 -0
- package/lib/parsers/custom-object-dependency-builder.js +103 -0
- package/lib/parsers/custom-object-dependency-builder.js.map +1 -0
- package/lib/parsers/custom-object-parser.js +1 -208
- package/lib/parsers/custom-object-parser.js.map +1 -1
- package/lib/parsers/custom-object-reference-helpers.d.ts +4 -0
- package/lib/parsers/custom-object-reference-helpers.js +92 -0
- package/lib/parsers/custom-object-reference-helpers.js.map +1 -0
- package/lib/parsers/dynamic-query-reference.d.ts +16 -0
- package/lib/parsers/dynamic-query-reference.js +65 -0
- package/lib/parsers/dynamic-query-reference.js.map +1 -0
- package/lib/parsers/layout-action-analysis.d.ts +6 -0
- package/lib/parsers/layout-action-analysis.js +36 -0
- package/lib/parsers/layout-action-analysis.js.map +1 -0
- package/lib/parsers/layout-parser.js +4 -272
- package/lib/parsers/layout-parser.js.map +1 -1
- package/lib/parsers/layout-reference-analysis.d.ts +9 -0
- package/lib/parsers/layout-reference-analysis.js +70 -0
- package/lib/parsers/layout-reference-analysis.js.map +1 -0
- package/lib/parsers/layout-result-assembly.d.ts +5 -0
- package/lib/parsers/layout-result-assembly.js +35 -0
- package/lib/parsers/layout-result-assembly.js.map +1 -0
- package/lib/parsers/layout-section-analysis.d.ts +7 -0
- package/lib/parsers/layout-section-analysis.js +9 -0
- package/lib/parsers/layout-section-analysis.js.map +1 -0
- package/lib/parsers/lwc-code-analysis.d.ts +10 -0
- package/lib/parsers/lwc-code-analysis.js +161 -0
- package/lib/parsers/lwc-code-analysis.js.map +1 -0
- package/lib/parsers/lwc-metadata-analysis.d.ts +6 -0
- package/lib/parsers/lwc-metadata-analysis.js +112 -0
- package/lib/parsers/lwc-metadata-analysis.js.map +1 -0
- package/lib/parsers/lwc-parser.d.ts +3 -27
- package/lib/parsers/lwc-parser.js +6 -377
- package/lib/parsers/lwc-parser.js.map +1 -1
- package/lib/parsers/lwc-result-assembly.d.ts +4 -0
- package/lib/parsers/lwc-result-assembly.js +47 -0
- package/lib/parsers/lwc-result-assembly.js.map +1 -0
- package/lib/presentation/status-command-presenter.d.ts +1 -0
- package/lib/presentation/status-command-presenter.js +20 -0
- package/lib/presentation/status-command-presenter.js.map +1 -1
- package/lib/scanner/forceignore-parser.d.ts +1 -0
- package/lib/scanner/forceignore-parser.js +14 -3
- package/lib/scanner/forceignore-parser.js.map +1 -1
- package/lib/scanner/structure-validator.js +1 -1
- package/lib/services/metadata-scanner-service.d.ts +2 -0
- package/lib/services/metadata-scanner-service.js +9 -2
- package/lib/services/metadata-scanner-service.js.map +1 -1
- package/lib/services/scanners/additional-metadata-scanner.d.ts +2 -0
- package/lib/services/scanners/additional-metadata-scanner.js +183 -0
- package/lib/services/scanners/additional-metadata-scanner.js.map +1 -0
- package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +1 -0
- package/lib/services/scanners/automation-ai-metadata-scanner.js +11 -0
- package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
- package/lib/services/scanners/code-metadata-scanner.js +14 -1
- package/lib/services/scanners/code-metadata-scanner.js.map +1 -1
- package/lib/services/scanners/data-metadata-scanner.js +24 -8
- package/lib/services/scanners/data-metadata-scanner.js.map +1 -1
- package/lib/types/metadata.d.ts +1 -1
- package/lib/utils/cache-entry-serializer.d.ts +7 -0
- package/lib/utils/cache-entry-serializer.js +15 -0
- package/lib/utils/cache-entry-serializer.js.map +1 -0
- package/lib/utils/cache-expiry-policy.d.ts +7 -0
- package/lib/utils/cache-expiry-policy.js +34 -0
- package/lib/utils/cache-expiry-policy.js.map +1 -0
- package/lib/utils/cache-key-derivation.d.ts +11 -0
- package/lib/utils/cache-key-derivation.js +28 -0
- package/lib/utils/cache-key-derivation.js.map +1 -0
- package/lib/utils/cache-lock-lifecycle.d.ts +15 -0
- package/lib/utils/cache-lock-lifecycle.js +84 -0
- package/lib/utils/cache-lock-lifecycle.js.map +1 -0
- package/lib/utils/cache-logger.d.ts +8 -0
- package/lib/utils/cache-logger.js +19 -0
- package/lib/utils/cache-logger.js.map +1 -0
- package/lib/utils/cache-manager.d.ts +1 -2
- package/lib/utils/cache-manager.js +7 -253
- package/lib/utils/cache-manager.js.map +1 -1
- package/lib/utils/cache-storage.d.ts +20 -0
- package/lib/utils/cache-storage.js +83 -0
- package/lib/utils/cache-storage.js.map +1 -0
- package/lib/validators/xml-metadata-validator.js +1 -1
- package/lib/waves/priority-wave-generator.js +8 -2
- package/lib/waves/priority-wave-generator.js.map +1 -1
- package/lib/waves/test-optimizer-discovery.d.ts +12 -0
- package/lib/waves/test-optimizer-discovery.js +46 -0
- package/lib/waves/test-optimizer-discovery.js.map +1 -0
- package/lib/waves/test-optimizer-matching.d.ts +6 -0
- package/lib/waves/test-optimizer-matching.js +43 -0
- package/lib/waves/test-optimizer-matching.js.map +1 -0
- package/lib/waves/test-optimizer-model.d.ts +92 -0
- package/lib/waves/test-optimizer-model.js +2 -0
- package/lib/waves/test-optimizer-model.js.map +1 -0
- package/lib/waves/test-optimizer-scoring.d.ts +11 -0
- package/lib/waves/test-optimizer-scoring.js +53 -0
- package/lib/waves/test-optimizer-scoring.js.map +1 -0
- package/lib/waves/test-optimizer.d.ts +2 -102
- package/lib/waves/test-optimizer.js +9 -154
- package/lib/waves/test-optimizer.js.map +1 -1
- package/lib/waves/wave-builder.d.ts +0 -11
- package/lib/waves/wave-builder.js +19 -193
- package/lib/waves/wave-builder.js.map +1 -1
- package/lib/waves/wave-graph.d.ts +25 -0
- package/lib/waves/wave-graph.js +138 -0
- package/lib/waves/wave-graph.js.map +1 -0
- package/lib/waves/wave-metadata.d.ts +4 -0
- package/lib/waves/wave-metadata.js +36 -0
- package/lib/waves/wave-metadata.js.map +1 -0
- package/lib/waves/wave-priority-policy.d.ts +5 -0
- package/lib/waves/wave-priority-policy.js +83 -0
- package/lib/waves/wave-priority-policy.js.map +1 -0
- package/lib/waves/wave-topology.d.ts +28 -0
- package/lib/waves/wave-topology.js +65 -0
- package/lib/waves/wave-topology.js.map +1 -0
- package/messages/start.json +5 -5
- package/messages/validate.json +1 -1
- package/npm-shrinkwrap.json +342 -751
- package/oclif.lock +83 -262
- package/oclif.manifest.json +7 -7
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -90,7 +90,7 @@ sf smart-deployment start \
|
|
|
90
90
|
--allow-cycle-remediation
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
Validate
|
|
93
|
+
Validate the local wave plan:
|
|
94
94
|
|
|
95
95
|
```bash
|
|
96
96
|
sf smart-deployment validate \
|
|
@@ -100,7 +100,7 @@ sf smart-deployment validate \
|
|
|
100
100
|
|
|
101
101
|
When to use each:
|
|
102
102
|
|
|
103
|
-
- use `validate` for
|
|
103
|
+
- use `validate` for local wave plan readiness and risk checks
|
|
104
104
|
- use `start --dry-run` to rehearse the real deployment command flow without executing the deploy
|
|
105
105
|
|
|
106
106
|
Show persisted deployment state:
|
|
@@ -134,6 +134,7 @@ See:
|
|
|
134
134
|
- [AI configuration](docs/ai-configuration.md)
|
|
135
135
|
- [Known limitations](docs/known-limitations.md)
|
|
136
136
|
- [Release candidate checklist](docs/release-candidate-checklist.md)
|
|
137
|
+
- [Release workflow](docs/release-workflow.md)
|
|
137
138
|
- [Documentation index](docs/README.md)
|
|
138
139
|
|
|
139
140
|
## AI Providers
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export function buildWaveValidationPrompt(waves) {
|
|
2
|
+
const waveSummaries = summarizeWavesForPrompt(waves);
|
|
3
|
+
return `You are an expert Salesforce deployment architect. Analyze the following deployment waves and identify potential issues.
|
|
4
|
+
|
|
5
|
+
Focus on:
|
|
6
|
+
1. **Business Logic Issues**: Components that should/shouldn't be in same wave
|
|
7
|
+
2. **Risk Assessment**: High-risk combinations
|
|
8
|
+
3. **Performance**: Wave size and deployment time concerns
|
|
9
|
+
4. **Dependencies**: Missing or incorrect ordering
|
|
10
|
+
|
|
11
|
+
Waves:
|
|
12
|
+
${JSON.stringify(waveSummaries, null, 2)}
|
|
13
|
+
|
|
14
|
+
Return ONLY a JSON object in this format:
|
|
15
|
+
{
|
|
16
|
+
"issues": [
|
|
17
|
+
{
|
|
18
|
+
"waveNumber": 1,
|
|
19
|
+
"severity": "low|medium|high|critical",
|
|
20
|
+
"category": "dependency|business-logic|performance|risk",
|
|
21
|
+
"message": "Description of issue",
|
|
22
|
+
"affectedComponents": ["Component1", "Component2"],
|
|
23
|
+
"suggestion": "How to fix"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"optimizations": [
|
|
27
|
+
{
|
|
28
|
+
"waveNumber": 1,
|
|
29
|
+
"type": "merge|split|reorder",
|
|
30
|
+
"description": "What to optimize",
|
|
31
|
+
"confidence": 0.0-1.0,
|
|
32
|
+
"estimatedImprovement": "10% faster deployment"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"riskAssessments": [
|
|
36
|
+
{
|
|
37
|
+
"waveNumber": 1,
|
|
38
|
+
"riskLevel": "low|medium|high|critical",
|
|
39
|
+
"riskFactors": ["Large wave size", "Complex dependencies"],
|
|
40
|
+
"mitigation": ["Split into 2 waves", "Add validation tests"],
|
|
41
|
+
"recommendedActions": ["Review before production deploy"]
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
Be conservative - only report issues with high confidence.`;
|
|
47
|
+
}
|
|
48
|
+
function summarizeWavesForPrompt(waves) {
|
|
49
|
+
return waves.map((wave) => ({
|
|
50
|
+
number: wave.number,
|
|
51
|
+
componentCount: wave.metadata.componentCount,
|
|
52
|
+
types: wave.metadata.types,
|
|
53
|
+
components: wave.components.slice(0, 20),
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=wave-validation-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wave-validation-prompt.js","sourceRoot":"","sources":["../../src/ai/wave-validation-prompt.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,MAAM,aAAa,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAErD,OAAO;;;;;;;;;EASP,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAkCmB,CAAC;AAC5D,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc;QAC5C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KACzC,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export function formatWaveValidationReport(result) {
|
|
2
|
+
const lines = [];
|
|
3
|
+
lines.push('🔍 AI Wave Validation Report');
|
|
4
|
+
lines.push('═══════════════════════════════════════');
|
|
5
|
+
if (!result.aiAnalyzed) {
|
|
6
|
+
lines.push('⚠️ AI validation unavailable (using basic checks)');
|
|
7
|
+
lines.push('');
|
|
8
|
+
}
|
|
9
|
+
lines.push(`Overall Risk: ${getRiskIcon(result.overallRisk)} ${result.overallRisk.toUpperCase()}`);
|
|
10
|
+
lines.push(`Execution Time: ${result.executionTime}ms`);
|
|
11
|
+
lines.push('');
|
|
12
|
+
appendIssueSection(lines, result);
|
|
13
|
+
appendOptimizationSection(lines, result);
|
|
14
|
+
appendRiskAssessmentSection(lines, result);
|
|
15
|
+
return lines.join('\n');
|
|
16
|
+
}
|
|
17
|
+
function appendIssueSection(lines, result) {
|
|
18
|
+
if (result.issues.length === 0) {
|
|
19
|
+
lines.push('✅ No critical issues found');
|
|
20
|
+
lines.push('');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
lines.push(`❌ Issues Found: ${result.issues.length}`);
|
|
24
|
+
lines.push('');
|
|
25
|
+
const bySeverity = groupIssuesBySeverity(result.issues);
|
|
26
|
+
for (const [severity, issues] of bySeverity.entries()) {
|
|
27
|
+
lines.push(`${getSeverityIcon(severity)} ${severity.toUpperCase()} (${issues.length}):`);
|
|
28
|
+
for (const issue of issues.slice(0, 5)) {
|
|
29
|
+
lines.push(` Wave ${issue.waveNumber}: ${issue.message}`);
|
|
30
|
+
if (issue.suggestion) {
|
|
31
|
+
lines.push(` 💡 ${issue.suggestion}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (issues.length > 5) {
|
|
35
|
+
lines.push(` ... and ${issues.length - 5} more`);
|
|
36
|
+
}
|
|
37
|
+
lines.push('');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function groupIssuesBySeverity(issues) {
|
|
41
|
+
const bySeverity = new Map();
|
|
42
|
+
for (const issue of issues) {
|
|
43
|
+
const currentIssues = bySeverity.get(issue.severity) ?? [];
|
|
44
|
+
currentIssues.push(issue);
|
|
45
|
+
bySeverity.set(issue.severity, currentIssues);
|
|
46
|
+
}
|
|
47
|
+
return bySeverity;
|
|
48
|
+
}
|
|
49
|
+
function appendOptimizationSection(lines, result) {
|
|
50
|
+
if (result.optimizations.length === 0) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
lines.push(`💡 Optimization Suggestions: ${result.optimizations.length}`);
|
|
54
|
+
lines.push('');
|
|
55
|
+
for (const opt of result.optimizations.slice(0, 5)) {
|
|
56
|
+
lines.push(` Wave ${opt.waveNumber}: ${opt.type.toUpperCase()}`);
|
|
57
|
+
lines.push(` ${opt.description}`);
|
|
58
|
+
lines.push(` Confidence: ${(opt.confidence * 100).toFixed(0)}%`);
|
|
59
|
+
lines.push(` Impact: ${opt.estimatedImprovement}`);
|
|
60
|
+
lines.push('');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function appendRiskAssessmentSection(lines, result) {
|
|
64
|
+
if (result.riskAssessments.length === 0) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
lines.push('📊 Risk Assessment by Wave:');
|
|
68
|
+
lines.push('');
|
|
69
|
+
for (const assessment of result.riskAssessments) {
|
|
70
|
+
lines.push(` Wave ${assessment.waveNumber}: ${getRiskIcon(assessment.riskLevel)} ${assessment.riskLevel.toUpperCase()}`);
|
|
71
|
+
if (assessment.riskFactors.length > 0) {
|
|
72
|
+
lines.push(` Factors: ${assessment.riskFactors.join(', ')}`);
|
|
73
|
+
}
|
|
74
|
+
if (assessment.mitigation.length > 0) {
|
|
75
|
+
lines.push(` Mitigation: ${assessment.mitigation.join(', ')}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function getRiskIcon(risk) {
|
|
80
|
+
switch (risk) {
|
|
81
|
+
case 'critical':
|
|
82
|
+
return '🔴';
|
|
83
|
+
case 'high':
|
|
84
|
+
return '🟠';
|
|
85
|
+
case 'medium':
|
|
86
|
+
return '🟡';
|
|
87
|
+
case 'low':
|
|
88
|
+
return '🟢';
|
|
89
|
+
default:
|
|
90
|
+
return '⚪';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function getSeverityIcon(severity) {
|
|
94
|
+
return getRiskIcon(severity);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=wave-validation-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wave-validation-report.js","sourceRoot":"","sources":["../../src/ai/wave-validation-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Wave } from '../waves/wave-builder.js';
|
|
2
|
+
import type { WaveOptimization, WaveRiskAssessment, WaveValidationIssue } from './wave-validation-service.js';
|
|
3
|
+
export type WaveValidationPayload = {
|
|
4
|
+
issues: WaveValidationIssue[];
|
|
5
|
+
optimizations: WaveOptimization[];
|
|
6
|
+
riskAssessments: WaveRiskAssessment[];
|
|
7
|
+
};
|
|
8
|
+
export declare function parseWaveValidationResponse(content: string, waves: Wave[]): WaveValidationPayload;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { getLogger } from '../utils/logger.js';
|
|
2
|
+
const logger = getLogger('WaveValidationResponseParser');
|
|
3
|
+
export function parseWaveValidationResponse(content, waves) {
|
|
4
|
+
try {
|
|
5
|
+
const parsed = extractValidationJson(content);
|
|
6
|
+
if (!parsed) {
|
|
7
|
+
return createFallbackValidation(waves, 'No JSON found in validation response');
|
|
8
|
+
}
|
|
9
|
+
return normalizeValidationPayload(parsed);
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
logger.error('Failed to parse validation response', {
|
|
13
|
+
error: error instanceof Error ? error.message : String(error),
|
|
14
|
+
});
|
|
15
|
+
return createFallbackValidation(waves);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function extractValidationJson(content) {
|
|
19
|
+
const jsonMatch = /\{[\s\S]*\}/.exec(content);
|
|
20
|
+
if (!jsonMatch) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return JSON.parse(jsonMatch[0]);
|
|
24
|
+
}
|
|
25
|
+
function normalizeValidationPayload(parsed) {
|
|
26
|
+
return {
|
|
27
|
+
issues: parseIssues(parsed.issues ?? []),
|
|
28
|
+
optimizations: parseOptimizations(parsed.optimizations ?? []),
|
|
29
|
+
riskAssessments: parseRiskAssessments(parsed.riskAssessments ?? []),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function createFallbackValidation(waves, reason) {
|
|
33
|
+
if (reason) {
|
|
34
|
+
logger.warn(reason);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
issues: [],
|
|
38
|
+
optimizations: [],
|
|
39
|
+
riskAssessments: waves.map(createFallbackRiskAssessment),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function createFallbackRiskAssessment(wave) {
|
|
43
|
+
const isLargeWave = wave.metadata.componentCount > 200;
|
|
44
|
+
return {
|
|
45
|
+
waveNumber: wave.number,
|
|
46
|
+
riskLevel: isLargeWave ? 'high' : 'low',
|
|
47
|
+
riskFactors: isLargeWave ? ['Large wave size'] : [],
|
|
48
|
+
mitigation: isLargeWave ? ['Consider splitting wave'] : [],
|
|
49
|
+
recommendedActions: [],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function parseIssues(items) {
|
|
53
|
+
const issues = [];
|
|
54
|
+
for (const item of items) {
|
|
55
|
+
if (isIssueLike(item)) {
|
|
56
|
+
issues.push({
|
|
57
|
+
waveNumber: Number(item.waveNumber),
|
|
58
|
+
severity: String(item.severity),
|
|
59
|
+
category: String(item.category),
|
|
60
|
+
message: String(item.message),
|
|
61
|
+
affectedComponents: Array.isArray(item.affectedComponents) ? item.affectedComponents.map(String) : [],
|
|
62
|
+
suggestion: item.suggestion ? String(item.suggestion) : undefined,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return issues;
|
|
67
|
+
}
|
|
68
|
+
function parseOptimizations(items) {
|
|
69
|
+
const optimizations = [];
|
|
70
|
+
for (const item of items) {
|
|
71
|
+
if (isOptimizationLike(item)) {
|
|
72
|
+
optimizations.push({
|
|
73
|
+
waveNumber: Number(item.waveNumber),
|
|
74
|
+
type: String(item.type),
|
|
75
|
+
description: String(item.description),
|
|
76
|
+
confidence: Number(item.confidence) || 0.5,
|
|
77
|
+
estimatedImprovement: String(item.estimatedImprovement) || 'Unknown',
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return optimizations;
|
|
82
|
+
}
|
|
83
|
+
function parseRiskAssessments(items) {
|
|
84
|
+
const assessments = [];
|
|
85
|
+
for (const item of items) {
|
|
86
|
+
if (isRiskAssessmentLike(item)) {
|
|
87
|
+
assessments.push({
|
|
88
|
+
waveNumber: Number(item.waveNumber),
|
|
89
|
+
riskLevel: String(item.riskLevel),
|
|
90
|
+
riskFactors: Array.isArray(item.riskFactors) ? item.riskFactors.map(String) : [],
|
|
91
|
+
mitigation: Array.isArray(item.mitigation) ? item.mitigation.map(String) : [],
|
|
92
|
+
recommendedActions: Array.isArray(item.recommendedActions) ? item.recommendedActions.map(String) : [],
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return assessments;
|
|
97
|
+
}
|
|
98
|
+
function isIssueLike(item) {
|
|
99
|
+
return (typeof item === 'object' &&
|
|
100
|
+
item !== null &&
|
|
101
|
+
'waveNumber' in item &&
|
|
102
|
+
'severity' in item &&
|
|
103
|
+
'category' in item &&
|
|
104
|
+
'message' in item);
|
|
105
|
+
}
|
|
106
|
+
function isOptimizationLike(item) {
|
|
107
|
+
return typeof item === 'object' && item !== null && 'waveNumber' in item && 'type' in item && 'description' in item;
|
|
108
|
+
}
|
|
109
|
+
function isRiskAssessmentLike(item) {
|
|
110
|
+
return typeof item === 'object' && item !== null && 'waveNumber' in item && 'riskLevel' in item;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=wave-validation-response-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wave-validation-response-parser.js","sourceRoot":"","sources":["../../src/ai/wave-validation-response-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,MAAM,MAAM,GAAG,SAAS,CAAC,8BAA8B,CAAC,CAAC;AAczD,MAAM,UAAU,2BAA2B,CAAC,OAAe,EAAE,KAAa;IACxE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,wBAAwB,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;YAClD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QAEH,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAA6B,CAAC;AAC9D,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAgC;IAClE,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACxC,aAAa,EAAE,kBAAkB,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;QAC7D,eAAe,EAAE,oBAAoB,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa,EAAE,MAAe;IAC9D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,OAAO;QACL,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAU;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,GAAG,CAAC;IAEvD,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,MAAM;QACvB,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACvC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE;QACnD,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1D,kBAAkB,EAAE,EAAE;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAgB;IACnC,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC;gBACV,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACnC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAoC;gBAClE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAoC;gBAClE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC7B,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBACrG,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;aAClE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgB;IAC1C,MAAM,aAAa,GAAuB,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACnC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAA6B;gBACnD,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;gBACrC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG;gBAC1C,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,SAAS;aACrE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAgB;IAC5C,MAAM,WAAW,GAAyB,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC;gBACf,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;gBACnC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAoC;gBACpE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChF,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC7E,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;aACtG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,YAAY,IAAI,IAAI;QACpB,UAAU,IAAI,IAAI;QAClB,UAAU,IAAI,IAAI;QAClB,SAAS,IAAI,IAAI,CAClB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa;IACvC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,CAAC;AACtH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAa;IACzC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC;AAClG,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { WaveValidationResult } from './wave-validation-service.js';
|
|
2
|
+
import type { WaveValidationPayload } from './wave-validation-response-parser.js';
|
|
3
|
+
export declare function createDefaultWaveValidationResult(): WaveValidationResult;
|
|
4
|
+
export declare function applyValidationPayload(result: WaveValidationResult, validation: WaveValidationPayload): WaveValidationResult;
|
|
5
|
+
export declare function completeAIAnalysis(result: WaveValidationResult, executionTime: number): WaveValidationResult;
|
|
6
|
+
export declare function completeValidationFailure(result: WaveValidationResult, executionTime: number): WaveValidationResult;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export function createDefaultWaveValidationResult() {
|
|
2
|
+
return {
|
|
3
|
+
isValid: true,
|
|
4
|
+
issues: [],
|
|
5
|
+
optimizations: [],
|
|
6
|
+
riskAssessments: [],
|
|
7
|
+
overallRisk: 'low',
|
|
8
|
+
executionTime: 0,
|
|
9
|
+
aiAnalyzed: false,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function applyValidationPayload(result, validation) {
|
|
13
|
+
return {
|
|
14
|
+
...result,
|
|
15
|
+
issues: validation.issues,
|
|
16
|
+
optimizations: validation.optimizations,
|
|
17
|
+
riskAssessments: validation.riskAssessments,
|
|
18
|
+
overallRisk: calculateOverallRisk(validation.riskAssessments),
|
|
19
|
+
isValid: !validation.issues.some((issue) => issue.severity === 'critical'),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function completeAIAnalysis(result, executionTime) {
|
|
23
|
+
return {
|
|
24
|
+
...result,
|
|
25
|
+
aiAnalyzed: true,
|
|
26
|
+
executionTime,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function completeValidationFailure(result, executionTime) {
|
|
30
|
+
return {
|
|
31
|
+
...result,
|
|
32
|
+
executionTime,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function calculateOverallRisk(assessments) {
|
|
36
|
+
if (assessments.length === 0) {
|
|
37
|
+
return 'low';
|
|
38
|
+
}
|
|
39
|
+
const riskScores = { low: 1, medium: 2, high: 3, critical: 4 };
|
|
40
|
+
const maxRisk = Math.max(...assessments.map((assessment) => riskScores[assessment.riskLevel]));
|
|
41
|
+
if (maxRisk >= 4)
|
|
42
|
+
return 'critical';
|
|
43
|
+
if (maxRisk >= 3)
|
|
44
|
+
return 'high';
|
|
45
|
+
if (maxRisk >= 2)
|
|
46
|
+
return 'medium';
|
|
47
|
+
return 'low';
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=wave-validation-result-synthesis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wave-validation-result-synthesis.js","sourceRoot":"","sources":["../../src/ai/wave-validation-result-synthesis.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iCAAiC;IAC/C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAA4B,EAC5B,UAAiC;IAEjC,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,eAAe,EAAE,UAAU,CAAC,eAAe;QAC3C,WAAW,EAAE,oBAAoB,CAAC,UAAU,CAAC,eAAe,CAAC;QAC7D,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAA4B,EAAE,aAAqB;IACpF,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,IAAI;QAChB,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA4B,EAAE,aAAqB;IAC3F,OAAO;QACL,GAAG,MAAM;QACT,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAiC;IAC7D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAE/F,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IACpC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -56,57 +56,15 @@ export declare class WaveValidationService {
|
|
|
56
56
|
private resolveProvider;
|
|
57
57
|
/**
|
|
58
58
|
* @ac US-056-AC-1: Send wave structure to Agentforce
|
|
59
|
-
* Validate
|
|
59
|
+
* Validate a local wave plan using AI
|
|
60
60
|
*/
|
|
61
61
|
validateWaves(waves: Wave[]): Promise<WaveValidationResult>;
|
|
62
|
-
private createDefaultResult;
|
|
63
62
|
private calculateExecutionTime;
|
|
64
63
|
private shouldSkipAIValidation;
|
|
65
64
|
private finalizeWithoutAI;
|
|
66
65
|
private runAIValidation;
|
|
67
|
-
private sendValidationRequest;
|
|
68
|
-
private evaluateValidationPayload;
|
|
69
|
-
private applyEvaluatedOutcome;
|
|
70
|
-
private markAIAnalysisComplete;
|
|
71
66
|
private logValidationCompleted;
|
|
72
67
|
private handleValidationFailure;
|
|
73
|
-
/**
|
|
74
|
-
* Build validation prompt
|
|
75
|
-
*/
|
|
76
|
-
private buildValidationPrompt;
|
|
77
|
-
private summarizeWavesForPrompt;
|
|
78
|
-
/**
|
|
79
|
-
* @ac US-056-AC-2: Receive validation feedback
|
|
80
|
-
* @ac US-056-AC-3: Identify potential issues
|
|
81
|
-
* @ac US-056-AC-4: Suggest optimizations
|
|
82
|
-
* @ac US-056-AC-5: Risk assessment per wave
|
|
83
|
-
*/
|
|
84
|
-
private parseValidationResponse;
|
|
85
|
-
private extractValidationJson;
|
|
86
|
-
private normalizeValidationPayload;
|
|
87
|
-
private handleValidationParseFailure;
|
|
88
|
-
private createFallbackValidation;
|
|
89
|
-
/**
|
|
90
|
-
* Parse issues from AI response
|
|
91
|
-
*/
|
|
92
|
-
private parseIssues;
|
|
93
|
-
/**
|
|
94
|
-
* Parse optimizations from AI response
|
|
95
|
-
*/
|
|
96
|
-
private parseOptimizations;
|
|
97
|
-
/**
|
|
98
|
-
* Parse risk assessments from AI response
|
|
99
|
-
*/
|
|
100
|
-
private parseRiskAssessments;
|
|
101
|
-
/**
|
|
102
|
-
* Get mock validation (fallback when AI unavailable)
|
|
103
|
-
*/
|
|
104
|
-
private getMockValidation;
|
|
105
|
-
private createFallbackRiskAssessment;
|
|
106
|
-
/**
|
|
107
|
-
* Calculate overall risk from individual assessments
|
|
108
|
-
*/
|
|
109
|
-
private calculateOverallRisk;
|
|
110
68
|
/**
|
|
111
69
|
* @ac US-056-AC-6: Apply AI suggestions (optional)
|
|
112
70
|
* Apply optimization suggestions to waves
|
|
@@ -117,16 +75,4 @@ export declare class WaveValidationService {
|
|
|
117
75
|
* Format validation report
|
|
118
76
|
*/
|
|
119
77
|
formatValidationReport(result: WaveValidationResult): string;
|
|
120
|
-
private appendIssueSection;
|
|
121
|
-
private groupIssuesBySeverity;
|
|
122
|
-
private appendOptimizationSection;
|
|
123
|
-
private appendRiskAssessmentSection;
|
|
124
|
-
/**
|
|
125
|
-
* Get risk level icon
|
|
126
|
-
*/
|
|
127
|
-
private getRiskIcon;
|
|
128
|
-
/**
|
|
129
|
-
* Get severity icon
|
|
130
|
-
*/
|
|
131
|
-
private getSeverityIcon;
|
|
132
78
|
}
|