@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.
Files changed (259) hide show
  1. package/README.md +3 -2
  2. package/lib/ai/wave-validation-prompt.d.ts +2 -0
  3. package/lib/ai/wave-validation-prompt.js +56 -0
  4. package/lib/ai/wave-validation-prompt.js.map +1 -0
  5. package/lib/ai/wave-validation-report.d.ts +2 -0
  6. package/lib/ai/wave-validation-report.js +96 -0
  7. package/lib/ai/wave-validation-report.js.map +1 -0
  8. package/lib/ai/wave-validation-response-parser.d.ts +8 -0
  9. package/lib/ai/wave-validation-response-parser.js +112 -0
  10. package/lib/ai/wave-validation-response-parser.js.map +1 -0
  11. package/lib/ai/wave-validation-result-synthesis.d.ts +6 -0
  12. package/lib/ai/wave-validation-result-synthesis.js +49 -0
  13. package/lib/ai/wave-validation-result-synthesis.js.map +1 -0
  14. package/lib/ai/wave-validation-service.d.ts +1 -55
  15. package/lib/ai/wave-validation-service.js +11 -359
  16. package/lib/ai/wave-validation-service.js.map +1 -1
  17. package/lib/ai/wave-validation-transport.d.ts +7 -0
  18. package/lib/ai/wave-validation-transport.js +10 -0
  19. package/lib/ai/wave-validation-transport.js.map +1 -0
  20. package/lib/analysis/analysis-reporter.d.ts +29 -0
  21. package/lib/analysis/analysis-reporter.js +84 -1
  22. package/lib/analysis/analysis-reporter.js.map +1 -1
  23. package/lib/analysis/analyze-context-service.d.ts +1 -1
  24. package/lib/analysis/analyze-context-service.js +2 -0
  25. package/lib/analysis/analyze-context-service.js.map +1 -1
  26. package/lib/analysis/project-analysis-service.d.ts +2 -0
  27. package/lib/analysis/project-analysis-service.js +2 -0
  28. package/lib/analysis/project-analysis-service.js.map +1 -1
  29. package/lib/commands/start.d.ts +1 -0
  30. package/lib/commands/start.js +14 -1
  31. package/lib/commands/start.js.map +1 -1
  32. package/lib/commands/status.d.ts +2 -0
  33. package/lib/commands/status.js +1 -0
  34. package/lib/commands/status.js.map +1 -1
  35. package/lib/commands/validate.d.ts +3 -3
  36. package/lib/commands/validate.js +4 -4
  37. package/lib/commands/validate.js.map +1 -1
  38. package/lib/constants/api-version.d.ts +2 -2
  39. package/lib/constants/api-version.js +2 -2
  40. package/lib/constants/deployment-order.js +11 -8
  41. package/lib/constants/deployment-order.js.map +1 -1
  42. package/lib/dependencies/circular-dependency-detector.d.ts +1 -31
  43. package/lib/dependencies/circular-dependency-detector.js +7 -156
  44. package/lib/dependencies/circular-dependency-detector.js.map +1 -1
  45. package/lib/dependencies/cycle-break-suggestions.d.ts +3 -0
  46. package/lib/dependencies/cycle-break-suggestions.js +63 -0
  47. package/lib/dependencies/cycle-break-suggestions.js.map +1 -0
  48. package/lib/dependencies/cycle-discovery.d.ts +16 -0
  49. package/lib/dependencies/cycle-discovery.js +70 -0
  50. package/lib/dependencies/cycle-discovery.js.map +1 -0
  51. package/lib/dependencies/dependency-graph-builder.d.ts +0 -65
  52. package/lib/dependencies/dependency-graph-builder.js +19 -233
  53. package/lib/dependencies/dependency-graph-builder.js.map +1 -1
  54. package/lib/dependencies/dependency-graph-intake.d.ts +17 -0
  55. package/lib/dependencies/dependency-graph-intake.js +20 -0
  56. package/lib/dependencies/dependency-graph-intake.js.map +1 -0
  57. package/lib/dependencies/dependency-graph-stats.d.ts +4 -0
  58. package/lib/dependencies/dependency-graph-stats.js +82 -0
  59. package/lib/dependencies/dependency-graph-stats.js.map +1 -0
  60. package/lib/dependencies/dependency-graph-validation.d.ts +16 -0
  61. package/lib/dependencies/dependency-graph-validation.js +78 -0
  62. package/lib/dependencies/dependency-graph-validation.js.map +1 -0
  63. package/lib/dependencies/dependency-impact-analyzer.d.ts +1 -22
  64. package/lib/dependencies/dependency-impact-analyzer.js +12 -110
  65. package/lib/dependencies/dependency-impact-analyzer.js.map +1 -1
  66. package/lib/dependencies/dependency-impact-scoring.d.ts +5 -0
  67. package/lib/dependencies/dependency-impact-scoring.js +24 -0
  68. package/lib/dependencies/dependency-impact-scoring.js.map +1 -0
  69. package/lib/dependencies/dependency-impact-traversal.d.ts +18 -0
  70. package/lib/dependencies/dependency-impact-traversal.js +74 -0
  71. package/lib/dependencies/dependency-impact-traversal.js.map +1 -0
  72. package/lib/dependencies/dependency-resolution-classifier.d.ts +19 -0
  73. package/lib/dependencies/dependency-resolution-classifier.js +67 -0
  74. package/lib/dependencies/dependency-resolution-classifier.js.map +1 -0
  75. package/lib/dependencies/dependency-resolver.d.ts +1 -48
  76. package/lib/dependencies/dependency-resolver.js +12 -181
  77. package/lib/dependencies/dependency-resolver.js.map +1 -1
  78. package/lib/dependencies/dynamic-query-dependency-references.d.ts +3 -0
  79. package/lib/dependencies/dynamic-query-dependency-references.js +41 -0
  80. package/lib/dependencies/dynamic-query-dependency-references.js.map +1 -0
  81. package/lib/dependencies/topological-dependency-sorter.d.ts +10 -0
  82. package/lib/dependencies/topological-dependency-sorter.js +84 -0
  83. package/lib/dependencies/topological-dependency-sorter.js.map +1 -0
  84. package/lib/deployment/cycle-remediation-runner.d.ts +1 -0
  85. package/lib/deployment/cycle-remediation-runner.js +5 -1
  86. package/lib/deployment/cycle-remediation-runner.js.map +1 -1
  87. package/lib/deployment/deployment-runner.d.ts +3 -1
  88. package/lib/deployment/deployment-runner.js +6 -1
  89. package/lib/deployment/deployment-runner.js.map +1 -1
  90. package/lib/deployment/deployment-status-service.d.ts +2 -0
  91. package/lib/deployment/deployment-status-service.js +2 -0
  92. package/lib/deployment/deployment-status-service.js.map +1 -1
  93. package/lib/deployment/deployment-validation-service.js +1 -1
  94. package/lib/deployment/deployment-validation-service.js.map +1 -1
  95. package/lib/deployment/dynamic-query-target-validator.d.ts +24 -0
  96. package/lib/deployment/dynamic-query-target-validator.js +65 -0
  97. package/lib/deployment/dynamic-query-target-validator.js.map +1 -0
  98. package/lib/deployment/sf-cli-integration.d.ts +1 -0
  99. package/lib/deployment/sf-cli-integration.js +1 -1
  100. package/lib/deployment/sf-cli-integration.js.map +1 -1
  101. package/lib/deployment/sf-cli-metadata-lookup.d.ts +4 -0
  102. package/lib/deployment/sf-cli-metadata-lookup.js +26 -0
  103. package/lib/deployment/sf-cli-metadata-lookup.js.map +1 -0
  104. package/lib/deployment/start-execution-service.d.ts +5 -0
  105. package/lib/deployment/start-execution-service.js +26 -6
  106. package/lib/deployment/start-execution-service.js.map +1 -1
  107. package/lib/deployment/wave-graph-state.d.ts +6 -0
  108. package/lib/deployment/wave-graph-state.js +89 -0
  109. package/lib/deployment/wave-graph-state.js.map +1 -0
  110. package/lib/deployment/wave-manifest-service.d.ts +1 -0
  111. package/lib/deployment/wave-manifest-service.js +1 -1
  112. package/lib/deployment/wave-manifest-service.js.map +1 -1
  113. package/lib/errors/deployment-error.js +1 -1
  114. package/lib/errors/deployment-error.js.map +1 -1
  115. package/lib/parsers/apex-class-dependencies.d.ts +4 -0
  116. package/lib/parsers/apex-class-dependencies.js +122 -0
  117. package/lib/parsers/apex-class-dependencies.js.map +1 -0
  118. package/lib/parsers/apex-class-lexical.d.ts +3 -0
  119. package/lib/parsers/apex-class-lexical.js +101 -0
  120. package/lib/parsers/apex-class-lexical.js.map +1 -0
  121. package/lib/parsers/apex-class-names.d.ts +18 -0
  122. package/lib/parsers/apex-class-names.js +93 -0
  123. package/lib/parsers/apex-class-names.js.map +1 -0
  124. package/lib/parsers/apex-class-parser-model.d.ts +59 -0
  125. package/lib/parsers/apex-class-parser-model.js +2 -0
  126. package/lib/parsers/apex-class-parser-model.js.map +1 -0
  127. package/lib/parsers/apex-class-parser.d.ts +3 -29
  128. package/lib/parsers/apex-class-parser.js +10 -395
  129. package/lib/parsers/apex-class-parser.js.map +1 -1
  130. package/lib/parsers/apex-class-symbols.d.ts +2 -0
  131. package/lib/parsers/apex-class-symbols.js +61 -0
  132. package/lib/parsers/apex-class-symbols.js.map +1 -0
  133. package/lib/parsers/apex-dynamic-query-analysis.d.ts +2 -0
  134. package/lib/parsers/apex-dynamic-query-analysis.js +150 -0
  135. package/lib/parsers/apex-dynamic-query-analysis.js.map +1 -0
  136. package/lib/parsers/custom-metadata-dynamic-query-analysis.d.ts +2 -0
  137. package/lib/parsers/custom-metadata-dynamic-query-analysis.js +50 -0
  138. package/lib/parsers/custom-metadata-dynamic-query-analysis.js.map +1 -0
  139. package/lib/parsers/custom-metadata-parser.d.ts +2 -0
  140. package/lib/parsers/custom-metadata-parser.js +3 -0
  141. package/lib/parsers/custom-metadata-parser.js.map +1 -1
  142. package/lib/parsers/custom-object-dependency-builder.d.ts +3 -0
  143. package/lib/parsers/custom-object-dependency-builder.js +103 -0
  144. package/lib/parsers/custom-object-dependency-builder.js.map +1 -0
  145. package/lib/parsers/custom-object-parser.js +1 -208
  146. package/lib/parsers/custom-object-parser.js.map +1 -1
  147. package/lib/parsers/custom-object-reference-helpers.d.ts +4 -0
  148. package/lib/parsers/custom-object-reference-helpers.js +92 -0
  149. package/lib/parsers/custom-object-reference-helpers.js.map +1 -0
  150. package/lib/parsers/dynamic-query-reference.d.ts +16 -0
  151. package/lib/parsers/dynamic-query-reference.js +65 -0
  152. package/lib/parsers/dynamic-query-reference.js.map +1 -0
  153. package/lib/parsers/layout-action-analysis.d.ts +6 -0
  154. package/lib/parsers/layout-action-analysis.js +36 -0
  155. package/lib/parsers/layout-action-analysis.js.map +1 -0
  156. package/lib/parsers/layout-parser.js +4 -272
  157. package/lib/parsers/layout-parser.js.map +1 -1
  158. package/lib/parsers/layout-reference-analysis.d.ts +9 -0
  159. package/lib/parsers/layout-reference-analysis.js +70 -0
  160. package/lib/parsers/layout-reference-analysis.js.map +1 -0
  161. package/lib/parsers/layout-result-assembly.d.ts +5 -0
  162. package/lib/parsers/layout-result-assembly.js +35 -0
  163. package/lib/parsers/layout-result-assembly.js.map +1 -0
  164. package/lib/parsers/layout-section-analysis.d.ts +7 -0
  165. package/lib/parsers/layout-section-analysis.js +9 -0
  166. package/lib/parsers/layout-section-analysis.js.map +1 -0
  167. package/lib/parsers/lwc-code-analysis.d.ts +10 -0
  168. package/lib/parsers/lwc-code-analysis.js +161 -0
  169. package/lib/parsers/lwc-code-analysis.js.map +1 -0
  170. package/lib/parsers/lwc-metadata-analysis.d.ts +6 -0
  171. package/lib/parsers/lwc-metadata-analysis.js +112 -0
  172. package/lib/parsers/lwc-metadata-analysis.js.map +1 -0
  173. package/lib/parsers/lwc-parser.d.ts +3 -27
  174. package/lib/parsers/lwc-parser.js +6 -377
  175. package/lib/parsers/lwc-parser.js.map +1 -1
  176. package/lib/parsers/lwc-result-assembly.d.ts +4 -0
  177. package/lib/parsers/lwc-result-assembly.js +47 -0
  178. package/lib/parsers/lwc-result-assembly.js.map +1 -0
  179. package/lib/presentation/status-command-presenter.d.ts +1 -0
  180. package/lib/presentation/status-command-presenter.js +20 -0
  181. package/lib/presentation/status-command-presenter.js.map +1 -1
  182. package/lib/scanner/forceignore-parser.d.ts +1 -0
  183. package/lib/scanner/forceignore-parser.js +14 -3
  184. package/lib/scanner/forceignore-parser.js.map +1 -1
  185. package/lib/scanner/structure-validator.js +1 -1
  186. package/lib/services/metadata-scanner-service.d.ts +2 -0
  187. package/lib/services/metadata-scanner-service.js +9 -2
  188. package/lib/services/metadata-scanner-service.js.map +1 -1
  189. package/lib/services/scanners/additional-metadata-scanner.d.ts +2 -0
  190. package/lib/services/scanners/additional-metadata-scanner.js +183 -0
  191. package/lib/services/scanners/additional-metadata-scanner.js.map +1 -0
  192. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +1 -0
  193. package/lib/services/scanners/automation-ai-metadata-scanner.js +11 -0
  194. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
  195. package/lib/services/scanners/code-metadata-scanner.js +14 -1
  196. package/lib/services/scanners/code-metadata-scanner.js.map +1 -1
  197. package/lib/services/scanners/data-metadata-scanner.js +24 -8
  198. package/lib/services/scanners/data-metadata-scanner.js.map +1 -1
  199. package/lib/types/metadata.d.ts +1 -1
  200. package/lib/utils/cache-entry-serializer.d.ts +7 -0
  201. package/lib/utils/cache-entry-serializer.js +15 -0
  202. package/lib/utils/cache-entry-serializer.js.map +1 -0
  203. package/lib/utils/cache-expiry-policy.d.ts +7 -0
  204. package/lib/utils/cache-expiry-policy.js +34 -0
  205. package/lib/utils/cache-expiry-policy.js.map +1 -0
  206. package/lib/utils/cache-key-derivation.d.ts +11 -0
  207. package/lib/utils/cache-key-derivation.js +28 -0
  208. package/lib/utils/cache-key-derivation.js.map +1 -0
  209. package/lib/utils/cache-lock-lifecycle.d.ts +15 -0
  210. package/lib/utils/cache-lock-lifecycle.js +84 -0
  211. package/lib/utils/cache-lock-lifecycle.js.map +1 -0
  212. package/lib/utils/cache-logger.d.ts +8 -0
  213. package/lib/utils/cache-logger.js +19 -0
  214. package/lib/utils/cache-logger.js.map +1 -0
  215. package/lib/utils/cache-manager.d.ts +1 -2
  216. package/lib/utils/cache-manager.js +7 -253
  217. package/lib/utils/cache-manager.js.map +1 -1
  218. package/lib/utils/cache-storage.d.ts +20 -0
  219. package/lib/utils/cache-storage.js +83 -0
  220. package/lib/utils/cache-storage.js.map +1 -0
  221. package/lib/validators/xml-metadata-validator.js +1 -1
  222. package/lib/waves/priority-wave-generator.js +8 -2
  223. package/lib/waves/priority-wave-generator.js.map +1 -1
  224. package/lib/waves/test-optimizer-discovery.d.ts +12 -0
  225. package/lib/waves/test-optimizer-discovery.js +46 -0
  226. package/lib/waves/test-optimizer-discovery.js.map +1 -0
  227. package/lib/waves/test-optimizer-matching.d.ts +6 -0
  228. package/lib/waves/test-optimizer-matching.js +43 -0
  229. package/lib/waves/test-optimizer-matching.js.map +1 -0
  230. package/lib/waves/test-optimizer-model.d.ts +92 -0
  231. package/lib/waves/test-optimizer-model.js +2 -0
  232. package/lib/waves/test-optimizer-model.js.map +1 -0
  233. package/lib/waves/test-optimizer-scoring.d.ts +11 -0
  234. package/lib/waves/test-optimizer-scoring.js +53 -0
  235. package/lib/waves/test-optimizer-scoring.js.map +1 -0
  236. package/lib/waves/test-optimizer.d.ts +2 -102
  237. package/lib/waves/test-optimizer.js +9 -154
  238. package/lib/waves/test-optimizer.js.map +1 -1
  239. package/lib/waves/wave-builder.d.ts +0 -11
  240. package/lib/waves/wave-builder.js +19 -193
  241. package/lib/waves/wave-builder.js.map +1 -1
  242. package/lib/waves/wave-graph.d.ts +25 -0
  243. package/lib/waves/wave-graph.js +138 -0
  244. package/lib/waves/wave-graph.js.map +1 -0
  245. package/lib/waves/wave-metadata.d.ts +4 -0
  246. package/lib/waves/wave-metadata.js +36 -0
  247. package/lib/waves/wave-metadata.js.map +1 -0
  248. package/lib/waves/wave-priority-policy.d.ts +5 -0
  249. package/lib/waves/wave-priority-policy.js +83 -0
  250. package/lib/waves/wave-priority-policy.js.map +1 -0
  251. package/lib/waves/wave-topology.d.ts +28 -0
  252. package/lib/waves/wave-topology.js +65 -0
  253. package/lib/waves/wave-topology.js.map +1 -0
  254. package/messages/start.json +5 -5
  255. package/messages/validate.json +1 -1
  256. package/npm-shrinkwrap.json +342 -751
  257. package/oclif.lock +83 -262
  258. package/oclif.manifest.json +7 -7
  259. 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 without executing deployment:
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 a readiness and risk check
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,2 @@
1
+ import type { Wave } from '../waves/wave-builder.js';
2
+ export declare function buildWaveValidationPrompt(waves: Wave[]): string;
@@ -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,2 @@
1
+ import type { WaveValidationResult } from './wave-validation-service.js';
2
+ export declare function formatWaveValidationReport(result: WaveValidationResult): string;
@@ -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":"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"}
@@ -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 deployment waves using AI
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
  }