@jterrats/smart-deployment 1.0.3
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 +193 -0
- package/lib/ai/agentforce-error-handler.d.ts +81 -0
- package/lib/ai/agentforce-error-handler.js +196 -0
- package/lib/ai/agentforce-error-handler.js.map +1 -0
- package/lib/ai/agentforce-priority-service.d.ts +82 -0
- package/lib/ai/agentforce-priority-service.js +257 -0
- package/lib/ai/agentforce-priority-service.js.map +1 -0
- package/lib/ai/agentforce-service.d.ts +99 -0
- package/lib/ai/agentforce-service.js +300 -0
- package/lib/ai/agentforce-service.js.map +1 -0
- package/lib/ai/circuit-breaker.d.ts +115 -0
- package/lib/ai/circuit-breaker.js +277 -0
- package/lib/ai/circuit-breaker.js.map +1 -0
- package/lib/ai/dependency-inference-service.d.ts +76 -0
- package/lib/ai/dependency-inference-service.js +220 -0
- package/lib/ai/dependency-inference-service.js.map +1 -0
- package/lib/ai/llm-provider-factory.d.ts +15 -0
- package/lib/ai/llm-provider-factory.js +36 -0
- package/lib/ai/llm-provider-factory.js.map +1 -0
- package/lib/ai/llm-provider.d.ts +27 -0
- package/lib/ai/llm-provider.js +2 -0
- package/lib/ai/llm-provider.js.map +1 -0
- package/lib/ai/openai-service.d.ts +20 -0
- package/lib/ai/openai-service.js +89 -0
- package/lib/ai/openai-service.js.map +1 -0
- package/lib/ai/prompt-builder.d.ts +79 -0
- package/lib/ai/prompt-builder.js +180 -0
- package/lib/ai/prompt-builder.js.map +1 -0
- package/lib/ai/response-parser.d.ts +67 -0
- package/lib/ai/response-parser.js +234 -0
- package/lib/ai/response-parser.js.map +1 -0
- package/lib/ai/wave-validation-service.d.ts +111 -0
- package/lib/ai/wave-validation-service.js +381 -0
- package/lib/ai/wave-validation-service.js.map +1 -0
- package/lib/analysis/analysis-reporter.d.ts +56 -0
- package/lib/analysis/analysis-reporter.js +170 -0
- package/lib/analysis/analysis-reporter.js.map +1 -0
- package/lib/analytics/error-analytics.d.ts +80 -0
- package/lib/analytics/error-analytics.js +162 -0
- package/lib/analytics/error-analytics.js.map +1 -0
- package/lib/commands/analyze.d.ts +49 -0
- package/lib/commands/analyze.js +232 -0
- package/lib/commands/analyze.js.map +1 -0
- package/lib/commands/config.d.ts +42 -0
- package/lib/commands/config.js +219 -0
- package/lib/commands/config.js.map +1 -0
- package/lib/commands/resume.d.ts +26 -0
- package/lib/commands/resume.js +69 -0
- package/lib/commands/resume.js.map +1 -0
- package/lib/commands/start.d.ts +70 -0
- package/lib/commands/start.js +659 -0
- package/lib/commands/start.js.map +1 -0
- package/lib/commands/status.d.ts +37 -0
- package/lib/commands/status.js +69 -0
- package/lib/commands/status.js.map +1 -0
- package/lib/commands/validate.d.ts +33 -0
- package/lib/commands/validate.js +66 -0
- package/lib/commands/validate.js.map +1 -0
- package/lib/config/repo-config.d.ts +22 -0
- package/lib/config/repo-config.js +31 -0
- package/lib/config/repo-config.js.map +1 -0
- package/lib/constants/agentforce-limits.d.ts +174 -0
- package/lib/constants/agentforce-limits.js +262 -0
- package/lib/constants/agentforce-limits.js.map +1 -0
- package/lib/constants/api-version.d.ts +70 -0
- package/lib/constants/api-version.js +122 -0
- package/lib/constants/api-version.js.map +1 -0
- package/lib/constants/deployment-order.d.ts +68 -0
- package/lib/constants/deployment-order.js +162 -0
- package/lib/constants/deployment-order.js.map +1 -0
- package/lib/constants/salesforce-limits.d.ts +107 -0
- package/lib/constants/salesforce-limits.js +104 -0
- package/lib/constants/salesforce-limits.js.map +1 -0
- package/lib/dependencies/circular-dependency-detector.d.ts +137 -0
- package/lib/dependencies/circular-dependency-detector.js +329 -0
- package/lib/dependencies/circular-dependency-detector.js.map +1 -0
- package/lib/dependencies/cycle-remediation-planner.d.ts +50 -0
- package/lib/dependencies/cycle-remediation-planner.js +192 -0
- package/lib/dependencies/cycle-remediation-planner.js.map +1 -0
- package/lib/dependencies/dependency-cache.d.ts +134 -0
- package/lib/dependencies/dependency-cache.js +303 -0
- package/lib/dependencies/dependency-cache.js.map +1 -0
- package/lib/dependencies/dependency-depth-calculator.d.ts +145 -0
- package/lib/dependencies/dependency-depth-calculator.js +368 -0
- package/lib/dependencies/dependency-depth-calculator.js.map +1 -0
- package/lib/dependencies/dependency-graph-builder.d.ts +151 -0
- package/lib/dependencies/dependency-graph-builder.js +411 -0
- package/lib/dependencies/dependency-graph-builder.js.map +1 -0
- package/lib/dependencies/dependency-impact-analyzer.d.ts +145 -0
- package/lib/dependencies/dependency-impact-analyzer.js +330 -0
- package/lib/dependencies/dependency-impact-analyzer.js.map +1 -0
- package/lib/dependencies/dependency-merger.d.ts +122 -0
- package/lib/dependencies/dependency-merger.js +245 -0
- package/lib/dependencies/dependency-merger.js.map +1 -0
- package/lib/dependencies/dependency-resolver.d.ts +157 -0
- package/lib/dependencies/dependency-resolver.js +298 -0
- package/lib/dependencies/dependency-resolver.js.map +1 -0
- package/lib/dependencies/dependency-validator.d.ts +123 -0
- package/lib/dependencies/dependency-validator.js +291 -0
- package/lib/dependencies/dependency-validator.js.map +1 -0
- package/lib/dependencies/graph-visualizer.d.ts +110 -0
- package/lib/dependencies/graph-visualizer.js +262 -0
- package/lib/dependencies/graph-visualizer.js.map +1 -0
- package/lib/dependencies/heuristic-inference.d.ts +136 -0
- package/lib/dependencies/heuristic-inference.js +430 -0
- package/lib/dependencies/heuristic-inference.js.map +1 -0
- package/lib/deployment/cycle-source-editor.d.ts +34 -0
- package/lib/deployment/cycle-source-editor.js +121 -0
- package/lib/deployment/cycle-source-editor.js.map +1 -0
- package/lib/deployment/deployment-error-handler.d.ts +38 -0
- package/lib/deployment/deployment-error-handler.js +79 -0
- package/lib/deployment/deployment-error-handler.js.map +1 -0
- package/lib/deployment/deployment-reporter.d.ts +63 -0
- package/lib/deployment/deployment-reporter.js +150 -0
- package/lib/deployment/deployment-reporter.js.map +1 -0
- package/lib/deployment/deployment-state-summary.d.ts +38 -0
- package/lib/deployment/deployment-state-summary.js +209 -0
- package/lib/deployment/deployment-state-summary.js.map +1 -0
- package/lib/deployment/deployment-status-service.d.ts +36 -0
- package/lib/deployment/deployment-status-service.js +128 -0
- package/lib/deployment/deployment-status-service.js.map +1 -0
- package/lib/deployment/deployment-tracker.d.ts +42 -0
- package/lib/deployment/deployment-tracker.js +79 -0
- package/lib/deployment/deployment-tracker.js.map +1 -0
- package/lib/deployment/deployment-validation-service.d.ts +28 -0
- package/lib/deployment/deployment-validation-service.js +161 -0
- package/lib/deployment/deployment-validation-service.js.map +1 -0
- package/lib/deployment/retry-handler.d.ts +37 -0
- package/lib/deployment/retry-handler.js +86 -0
- package/lib/deployment/retry-handler.js.map +1 -0
- package/lib/deployment/sf-cli-integration.d.ts +42 -0
- package/lib/deployment/sf-cli-integration.js +105 -0
- package/lib/deployment/sf-cli-integration.js.map +1 -0
- package/lib/deployment/state-manager.d.ts +61 -0
- package/lib/deployment/state-manager.js +83 -0
- package/lib/deployment/state-manager.js.map +1 -0
- package/lib/deployment/test-executor.d.ts +41 -0
- package/lib/deployment/test-executor.js +87 -0
- package/lib/deployment/test-executor.js.map +1 -0
- package/lib/errors/base-error.d.ts +24 -0
- package/lib/errors/base-error.js +66 -0
- package/lib/errors/base-error.js.map +1 -0
- package/lib/errors/dependency-error.d.ts +37 -0
- package/lib/errors/dependency-error.js +76 -0
- package/lib/errors/dependency-error.js.map +1 -0
- package/lib/errors/deployment-error.d.ts +55 -0
- package/lib/errors/deployment-error.js +132 -0
- package/lib/errors/deployment-error.js.map +1 -0
- package/lib/errors/index.d.ts +45 -0
- package/lib/errors/index.js +71 -0
- package/lib/errors/index.js.map +1 -0
- package/lib/errors/network-error.d.ts +53 -0
- package/lib/errors/network-error.js +111 -0
- package/lib/errors/network-error.js.map +1 -0
- package/lib/errors/parsing-error.d.ts +41 -0
- package/lib/errors/parsing-error.js +69 -0
- package/lib/errors/parsing-error.js.map +1 -0
- package/lib/errors/validation-error-reporter.d.ts +34 -0
- package/lib/errors/validation-error-reporter.js +99 -0
- package/lib/errors/validation-error-reporter.js.map +1 -0
- package/lib/errors/validation-error.d.ts +58 -0
- package/lib/errors/validation-error.js +131 -0
- package/lib/errors/validation-error.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/monitoring/performance-monitor.d.ts +98 -0
- package/lib/monitoring/performance-monitor.js +260 -0
- package/lib/monitoring/performance-monitor.js.map +1 -0
- package/lib/parsers/apex-class-parser.d.ts +47 -0
- package/lib/parsers/apex-class-parser.js +368 -0
- package/lib/parsers/apex-class-parser.js.map +1 -0
- package/lib/parsers/apex-trigger-parser.d.ts +48 -0
- package/lib/parsers/apex-trigger-parser.js +229 -0
- package/lib/parsers/apex-trigger-parser.js.map +1 -0
- package/lib/parsers/aura-parser.d.ts +55 -0
- package/lib/parsers/aura-parser.js +229 -0
- package/lib/parsers/aura-parser.js.map +1 -0
- package/lib/parsers/bot-parser.d.ts +65 -0
- package/lib/parsers/bot-parser.js +225 -0
- package/lib/parsers/bot-parser.js.map +1 -0
- package/lib/parsers/custom-metadata-parser.d.ts +94 -0
- package/lib/parsers/custom-metadata-parser.js +199 -0
- package/lib/parsers/custom-metadata-parser.js.map +1 -0
- package/lib/parsers/custom-object-parser.d.ts +62 -0
- package/lib/parsers/custom-object-parser.js +297 -0
- package/lib/parsers/custom-object-parser.js.map +1 -0
- package/lib/parsers/email-template-parser.d.ts +64 -0
- package/lib/parsers/email-template-parser.js +238 -0
- package/lib/parsers/email-template-parser.js.map +1 -0
- package/lib/parsers/error-resilient-parser.d.ts +110 -0
- package/lib/parsers/error-resilient-parser.js +277 -0
- package/lib/parsers/error-resilient-parser.js.map +1 -0
- package/lib/parsers/flexipage-parser.d.ts +64 -0
- package/lib/parsers/flexipage-parser.js +196 -0
- package/lib/parsers/flexipage-parser.js.map +1 -0
- package/lib/parsers/flow-parser.d.ts +54 -0
- package/lib/parsers/flow-parser.js +287 -0
- package/lib/parsers/flow-parser.js.map +1 -0
- package/lib/parsers/genai-prompt-parser.d.ts +67 -0
- package/lib/parsers/genai-prompt-parser.js +160 -0
- package/lib/parsers/genai-prompt-parser.js.map +1 -0
- package/lib/parsers/layout-parser.d.ts +64 -0
- package/lib/parsers/layout-parser.js +267 -0
- package/lib/parsers/layout-parser.js.map +1 -0
- package/lib/parsers/lwc-parser.d.ts +60 -0
- package/lib/parsers/lwc-parser.js +264 -0
- package/lib/parsers/lwc-parser.js.map +1 -0
- package/lib/parsers/permission-set-parser.d.ts +86 -0
- package/lib/parsers/permission-set-parser.js +152 -0
- package/lib/parsers/permission-set-parser.js.map +1 -0
- package/lib/parsers/profile-parser.d.ts +81 -0
- package/lib/parsers/profile-parser.js +141 -0
- package/lib/parsers/profile-parser.js.map +1 -0
- package/lib/parsers/visualforce-parser.d.ts +47 -0
- package/lib/parsers/visualforce-parser.js +180 -0
- package/lib/parsers/visualforce-parser.js.map +1 -0
- package/lib/provisioning/data-provisioner.d.ts +88 -0
- package/lib/provisioning/data-provisioner.js +257 -0
- package/lib/provisioning/data-provisioner.js.map +1 -0
- package/lib/scanner/custom-structure-scanner.d.ts +66 -0
- package/lib/scanner/custom-structure-scanner.js +229 -0
- package/lib/scanner/custom-structure-scanner.js.map +1 -0
- package/lib/scanner/forceignore-parser.d.ts +69 -0
- package/lib/scanner/forceignore-parser.js +195 -0
- package/lib/scanner/forceignore-parser.js.map +1 -0
- package/lib/scanner/metadata-format-scanner.d.ts +77 -0
- package/lib/scanner/metadata-format-scanner.js +282 -0
- package/lib/scanner/metadata-format-scanner.js.map +1 -0
- package/lib/scanner/monorepo-scanner.d.ts +71 -0
- package/lib/scanner/monorepo-scanner.js +225 -0
- package/lib/scanner/monorepo-scanner.js.map +1 -0
- package/lib/scanner/project-validator.d.ts +55 -0
- package/lib/scanner/project-validator.js +235 -0
- package/lib/scanner/project-validator.js.map +1 -0
- package/lib/scanner/sfdx-project-detector.d.ts +86 -0
- package/lib/scanner/sfdx-project-detector.js +240 -0
- package/lib/scanner/sfdx-project-detector.js.map +1 -0
- package/lib/scanner/structure-validator.d.ts +64 -0
- package/lib/scanner/structure-validator.js +296 -0
- package/lib/scanner/structure-validator.js.map +1 -0
- package/lib/services/metadata-scanner-service.d.ts +64 -0
- package/lib/services/metadata-scanner-service.js +651 -0
- package/lib/services/metadata-scanner-service.js.map +1 -0
- package/lib/types/agentforce.d.ts +157 -0
- package/lib/types/agentforce.js +2 -0
- package/lib/types/agentforce.js.map +1 -0
- package/lib/types/dependency.d.ts +98 -0
- package/lib/types/dependency.js +5 -0
- package/lib/types/dependency.js.map +1 -0
- package/lib/types/deployment-plan.d.ts +81 -0
- package/lib/types/deployment-plan.js +6 -0
- package/lib/types/deployment-plan.js.map +1 -0
- package/lib/types/deployment.d.ts +88 -0
- package/lib/types/deployment.js +5 -0
- package/lib/types/deployment.js.map +1 -0
- package/lib/types/graph.d.ts +35 -0
- package/lib/types/graph.js +5 -0
- package/lib/types/graph.js.map +1 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.js +17 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/metadata.d.ts +101 -0
- package/lib/types/metadata.js +13 -0
- package/lib/types/metadata.js.map +1 -0
- package/lib/types/project.d.ts +156 -0
- package/lib/types/project.js +56 -0
- package/lib/types/project.js.map +1 -0
- package/lib/types/salesforce/apex.d.ts +94 -0
- package/lib/types/salesforce/apex.js +6 -0
- package/lib/types/salesforce/apex.js.map +1 -0
- package/lib/types/salesforce/aura.d.ts +150 -0
- package/lib/types/salesforce/aura.js +6 -0
- package/lib/types/salesforce/aura.js.map +1 -0
- package/lib/types/salesforce/bot.d.ts +293 -0
- package/lib/types/salesforce/bot.js +6 -0
- package/lib/types/salesforce/bot.js.map +1 -0
- package/lib/types/salesforce/common.d.ts +15 -0
- package/lib/types/salesforce/common.js +5 -0
- package/lib/types/salesforce/common.js.map +1 -0
- package/lib/types/salesforce/custom-metadata.d.ts +92 -0
- package/lib/types/salesforce/custom-metadata.js +6 -0
- package/lib/types/salesforce/custom-metadata.js.map +1 -0
- package/lib/types/salesforce/email.d.ts +56 -0
- package/lib/types/salesforce/email.js +6 -0
- package/lib/types/salesforce/email.js.map +1 -0
- package/lib/types/salesforce/flexipage.d.ts +149 -0
- package/lib/types/salesforce/flexipage.js +6 -0
- package/lib/types/salesforce/flexipage.js.map +1 -0
- package/lib/types/salesforce/flow.d.ts +516 -0
- package/lib/types/salesforce/flow.js +6 -0
- package/lib/types/salesforce/flow.js.map +1 -0
- package/lib/types/salesforce/genai.d.ts +67 -0
- package/lib/types/salesforce/genai.js +6 -0
- package/lib/types/salesforce/genai.js.map +1 -0
- package/lib/types/salesforce/index.d.ts +27 -0
- package/lib/types/salesforce/index.js +43 -0
- package/lib/types/salesforce/index.js.map +1 -0
- package/lib/types/salesforce/layout.d.ts +236 -0
- package/lib/types/salesforce/layout.js +6 -0
- package/lib/types/salesforce/layout.js.map +1 -0
- package/lib/types/salesforce/lwc.d.ts +123 -0
- package/lib/types/salesforce/lwc.js +6 -0
- package/lib/types/salesforce/lwc.js.map +1 -0
- package/lib/types/salesforce/object.d.ts +427 -0
- package/lib/types/salesforce/object.js +6 -0
- package/lib/types/salesforce/object.js.map +1 -0
- package/lib/types/salesforce/parser-types.d.ts +79 -0
- package/lib/types/salesforce/parser-types.js +80 -0
- package/lib/types/salesforce/parser-types.js.map +1 -0
- package/lib/types/salesforce/permission.d.ts +289 -0
- package/lib/types/salesforce/permission.js +6 -0
- package/lib/types/salesforce/permission.js.map +1 -0
- package/lib/types/salesforce/resource.d.ts +93 -0
- package/lib/types/salesforce/resource.js +6 -0
- package/lib/types/salesforce/resource.js.map +1 -0
- package/lib/types/salesforce/visualforce.d.ts +70 -0
- package/lib/types/salesforce/visualforce.js +6 -0
- package/lib/types/salesforce/visualforce.js.map +1 -0
- package/lib/utils/cache-manager.d.ts +158 -0
- package/lib/utils/cache-manager.js +429 -0
- package/lib/utils/cache-manager.js.map +1 -0
- package/lib/utils/deployment-plan-manager.d.ts +40 -0
- package/lib/utils/deployment-plan-manager.js +183 -0
- package/lib/utils/deployment-plan-manager.js.map +1 -0
- package/lib/utils/error-aggregator.d.ts +117 -0
- package/lib/utils/error-aggregator.js +268 -0
- package/lib/utils/error-aggregator.js.map +1 -0
- package/lib/utils/file-system.d.ts +62 -0
- package/lib/utils/file-system.js +167 -0
- package/lib/utils/file-system.js.map +1 -0
- package/lib/utils/functional.d.ts +52 -0
- package/lib/utils/functional.js +61 -0
- package/lib/utils/functional.js.map +1 -0
- package/lib/utils/graph-algorithms.d.ts +53 -0
- package/lib/utils/graph-algorithms.js +177 -0
- package/lib/utils/graph-algorithms.js.map +1 -0
- package/lib/utils/logger.d.ts +154 -0
- package/lib/utils/logger.js +327 -0
- package/lib/utils/logger.js.map +1 -0
- package/lib/utils/network-handler.d.ts +64 -0
- package/lib/utils/network-handler.js +147 -0
- package/lib/utils/network-handler.js.map +1 -0
- package/lib/utils/performance.d.ts +148 -0
- package/lib/utils/performance.js +294 -0
- package/lib/utils/performance.js.map +1 -0
- package/lib/utils/string.d.ts +197 -0
- package/lib/utils/string.js +331 -0
- package/lib/utils/string.js.map +1 -0
- package/lib/utils/xml.d.ts +97 -0
- package/lib/utils/xml.js +227 -0
- package/lib/utils/xml.js.map +1 -0
- package/lib/validators/xml-metadata-validator.d.ts +106 -0
- package/lib/validators/xml-metadata-validator.js +509 -0
- package/lib/validators/xml-metadata-validator.js.map +1 -0
- package/lib/waves/priority-wave-generator-ai.d.ts +85 -0
- package/lib/waves/priority-wave-generator-ai.js +191 -0
- package/lib/waves/priority-wave-generator-ai.js.map +1 -0
- package/lib/waves/priority-wave-generator.d.ts +47 -0
- package/lib/waves/priority-wave-generator.js +88 -0
- package/lib/waves/priority-wave-generator.js.map +1 -0
- package/lib/waves/test-optimizer.d.ts +155 -0
- package/lib/waves/test-optimizer.js +290 -0
- package/lib/waves/test-optimizer.js.map +1 -0
- package/lib/waves/wave-builder.d.ts +147 -0
- package/lib/waves/wave-builder.js +286 -0
- package/lib/waves/wave-builder.js.map +1 -0
- package/lib/waves/wave-diff-generator.d.ts +17 -0
- package/lib/waves/wave-diff-generator.js +6 -0
- package/lib/waves/wave-diff-generator.js.map +1 -0
- package/lib/waves/wave-executor.d.ts +33 -0
- package/lib/waves/wave-executor.js +50 -0
- package/lib/waves/wave-executor.js.map +1 -0
- package/lib/waves/wave-merger.d.ts +96 -0
- package/lib/waves/wave-merger.js +181 -0
- package/lib/waves/wave-merger.js.map +1 -0
- package/lib/waves/wave-metadata-generator.d.ts +13 -0
- package/lib/waves/wave-metadata-generator.js +12 -0
- package/lib/waves/wave-metadata-generator.js.map +1 -0
- package/lib/waves/wave-splitter.d.ts +154 -0
- package/lib/waves/wave-splitter.js +307 -0
- package/lib/waves/wave-splitter.js.map +1 -0
- package/lib/waves/wave-validator.d.ts +17 -0
- package/lib/waves/wave-validator.js +15 -0
- package/lib/waves/wave-validator.js.map +1 -0
- package/messages/analyze.json +18 -0
- package/messages/config.json +29 -0
- package/messages/resume.json +9 -0
- package/messages/start.json +24 -0
- package/messages/status.json +8 -0
- package/messages/validate.json +9 -0
- package/npm-shrinkwrap.json +25676 -0
- package/oclif.lock +11988 -0
- package/oclif.manifest.json +589 -0
- package/package.json +224 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Prompt Builder - US-058
|
|
3
|
+
* Build effective AI prompts with context and token optimization
|
|
4
|
+
*
|
|
5
|
+
* @ac US-058-AC-1: Context-aware prompt generation
|
|
6
|
+
* @ac US-058-AC-2: Include relevant metadata snippets
|
|
7
|
+
* @ac US-058-AC-3: Optimize token usage
|
|
8
|
+
* @ac US-058-AC-4: Template-based prompts
|
|
9
|
+
* @ac US-058-AC-5: Version prompts
|
|
10
|
+
* @ac US-058-AC-6: A/B test prompts
|
|
11
|
+
* @issue #58
|
|
12
|
+
*/
|
|
13
|
+
import { getLogger } from '../utils/logger.js';
|
|
14
|
+
const logger = getLogger('PromptBuilder');
|
|
15
|
+
/**
|
|
16
|
+
* @ac US-058-AC-4: Template-based prompts
|
|
17
|
+
* Predefined prompt templates
|
|
18
|
+
*/
|
|
19
|
+
const PROMPT_TEMPLATES = {
|
|
20
|
+
'dependency-inference': {
|
|
21
|
+
name: 'Dependency Inference',
|
|
22
|
+
version: '1.0.0',
|
|
23
|
+
systemPrompt: 'You are an expert Salesforce metadata analyzer specialized in finding implicit dependencies.',
|
|
24
|
+
userPromptTemplate: `Analyze these components and infer non-obvious dependencies:
|
|
25
|
+
|
|
26
|
+
Components: {{components}}
|
|
27
|
+
|
|
28
|
+
Look for dynamic references, implicit dependencies, and business logic relationships.
|
|
29
|
+
Return JSON array of dependencies with confidence scores.`,
|
|
30
|
+
maxTokens: 2000,
|
|
31
|
+
temperature: 0.2,
|
|
32
|
+
},
|
|
33
|
+
'wave-validation': {
|
|
34
|
+
name: 'Wave Validation',
|
|
35
|
+
version: '1.0.0',
|
|
36
|
+
systemPrompt: 'You are a Salesforce deployment architect expert in wave optimization.',
|
|
37
|
+
userPromptTemplate: `Validate these deployment waves for issues:
|
|
38
|
+
|
|
39
|
+
Waves: {{waves}}
|
|
40
|
+
|
|
41
|
+
Identify business logic issues, performance concerns, and risks.
|
|
42
|
+
Return JSON with issues, optimizations, and risk assessments.`,
|
|
43
|
+
maxTokens: 3000,
|
|
44
|
+
temperature: 0.1,
|
|
45
|
+
},
|
|
46
|
+
'priority-analysis': {
|
|
47
|
+
name: 'Priority Analysis',
|
|
48
|
+
version: '1.0.0',
|
|
49
|
+
systemPrompt: 'You are a Salesforce architect expert in deployment prioritization.',
|
|
50
|
+
userPromptTemplate: `Analyze component priorities for deployment:
|
|
51
|
+
|
|
52
|
+
Components: {{components}}
|
|
53
|
+
Organization Type: {{orgType}}
|
|
54
|
+
Industry: {{industry}}
|
|
55
|
+
|
|
56
|
+
Consider business criticality and failure impact.
|
|
57
|
+
Return JSON array of priority recommendations.`,
|
|
58
|
+
maxTokens: 2000,
|
|
59
|
+
temperature: 0.3,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* @ac US-058-AC-1: Context-aware prompt generation
|
|
64
|
+
* @ac US-058-AC-2: Include relevant metadata snippets
|
|
65
|
+
*/
|
|
66
|
+
export class PromptBuilder {
|
|
67
|
+
constructor(maxTokenEstimate = 4000) {
|
|
68
|
+
logger.debug('Prompt builder initialized', { maxTokenEstimate });
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @ac US-058-AC-1: Context-aware prompt generation
|
|
72
|
+
* Build prompt from template and context
|
|
73
|
+
*/
|
|
74
|
+
buildPrompt(options) {
|
|
75
|
+
const template = PROMPT_TEMPLATES[options.template];
|
|
76
|
+
if (!template) {
|
|
77
|
+
throw new Error(`Template '${options.template}' not found`);
|
|
78
|
+
}
|
|
79
|
+
logger.debug('Building prompt', {
|
|
80
|
+
template: options.template,
|
|
81
|
+
variant: options.variant,
|
|
82
|
+
});
|
|
83
|
+
// Get variant-specific template if A/B testing
|
|
84
|
+
const userTemplate = this.getTemplateVariant(template, options.variant);
|
|
85
|
+
// Optimize context for token usage
|
|
86
|
+
const optimizedContext = this.optimizeContext(options.context);
|
|
87
|
+
// Replace placeholders
|
|
88
|
+
let userPrompt = userTemplate;
|
|
89
|
+
for (const [key, value] of Object.entries(optimizedContext)) {
|
|
90
|
+
const placeholder = `{{${key}}}`;
|
|
91
|
+
const replacement = typeof value === 'string' ? value : JSON.stringify(value, null, 2);
|
|
92
|
+
userPrompt = userPrompt.replaceAll(placeholder, replacement);
|
|
93
|
+
}
|
|
94
|
+
// Estimate tokens
|
|
95
|
+
const estimatedTokens = this.estimateTokens(template.systemPrompt + userPrompt);
|
|
96
|
+
logger.info('Prompt built', {
|
|
97
|
+
template: template.name,
|
|
98
|
+
version: template.version,
|
|
99
|
+
estimatedTokens,
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
systemPrompt: template.systemPrompt,
|
|
103
|
+
userPrompt,
|
|
104
|
+
estimatedTokens,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* @ac US-058-AC-6: A/B test prompts
|
|
109
|
+
* Get template variant for A/B testing
|
|
110
|
+
*/
|
|
111
|
+
getTemplateVariant(template, variant) {
|
|
112
|
+
if (!variant || variant === 'A') {
|
|
113
|
+
return template.userPromptTemplate;
|
|
114
|
+
}
|
|
115
|
+
// Variant B: more concise version (remove extra line breaks, simplify language)
|
|
116
|
+
return template.userPromptTemplate
|
|
117
|
+
.replace(/\n\n/g, '\n')
|
|
118
|
+
.replace(/Look for dynamic references, implicit dependencies, and business logic relationships\.\n/, '');
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @ac US-058-AC-3: Optimize token usage
|
|
122
|
+
* Optimize context to reduce token count
|
|
123
|
+
*/
|
|
124
|
+
optimizeContext(context) {
|
|
125
|
+
const optimized = {};
|
|
126
|
+
const limits = context.limits ?? {};
|
|
127
|
+
// Limit components
|
|
128
|
+
if (context.components) {
|
|
129
|
+
const maxComponents = limits.maxComponents ?? 20;
|
|
130
|
+
optimized.components = Array.isArray(context.components)
|
|
131
|
+
? context.components.slice(0, maxComponents)
|
|
132
|
+
: context.components;
|
|
133
|
+
}
|
|
134
|
+
// Limit waves
|
|
135
|
+
if (context.waves) {
|
|
136
|
+
optimized.waves = Array.isArray(context.waves) ? context.waves.slice(0, 10) : context.waves;
|
|
137
|
+
}
|
|
138
|
+
// Limit dependencies
|
|
139
|
+
if (context.dependencies) {
|
|
140
|
+
optimized.dependencies = Array.isArray(context.dependencies)
|
|
141
|
+
? context.dependencies.slice(0, 30)
|
|
142
|
+
: context.dependencies;
|
|
143
|
+
}
|
|
144
|
+
// Include other metadata as-is
|
|
145
|
+
if (context.metadata) {
|
|
146
|
+
for (const [key, value] of Object.entries(context.metadata)) {
|
|
147
|
+
optimized[key] = value;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return optimized;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* @ac US-058-AC-3: Optimize token usage
|
|
154
|
+
* Estimate token count (rough approximation)
|
|
155
|
+
*/
|
|
156
|
+
estimateTokens(text) {
|
|
157
|
+
// Rough estimate: 1 token ≈ 4 characters
|
|
158
|
+
return Math.ceil(text.length / 4);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get available templates
|
|
162
|
+
*/
|
|
163
|
+
getTemplates() {
|
|
164
|
+
return Object.keys(PROMPT_TEMPLATES);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get template details
|
|
168
|
+
*/
|
|
169
|
+
getTemplate(name) {
|
|
170
|
+
return PROMPT_TEMPLATES[name];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* @ac US-058-AC-5: Version prompts
|
|
174
|
+
* Get template version
|
|
175
|
+
*/
|
|
176
|
+
getTemplateVersion(name) {
|
|
177
|
+
return PROMPT_TEMPLATES[name]?.version;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=prompt-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/ai/prompt-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Response Parser - US-059
|
|
3
|
+
* Parse AI responses reliably and extract actionable information
|
|
4
|
+
*
|
|
5
|
+
* @ac US-059-AC-1: Parse JSON responses
|
|
6
|
+
* @ac US-059-AC-2: Handle malformed responses
|
|
7
|
+
* @ac US-059-AC-3: Extract structured data
|
|
8
|
+
* @ac US-059-AC-4: Validate response schema
|
|
9
|
+
* @ac US-059-AC-5: Handle AI hallucinations
|
|
10
|
+
* @ac US-059-AC-6: Confidence scoring
|
|
11
|
+
* @issue #59
|
|
12
|
+
*/
|
|
13
|
+
export type ParsedResponse<T> = {
|
|
14
|
+
success: boolean;
|
|
15
|
+
data?: T;
|
|
16
|
+
confidence: number;
|
|
17
|
+
warnings: string[];
|
|
18
|
+
errors: string[];
|
|
19
|
+
rawContent: string;
|
|
20
|
+
hallucinationDetected: boolean;
|
|
21
|
+
};
|
|
22
|
+
export type SchemaValidationResult = {
|
|
23
|
+
valid: boolean;
|
|
24
|
+
errors: string[];
|
|
25
|
+
missingFields: string[];
|
|
26
|
+
invalidTypes: string[];
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* @ac US-059-AC-1: Parse JSON responses
|
|
30
|
+
* @ac US-059-AC-2: Handle malformed responses
|
|
31
|
+
*/
|
|
32
|
+
export declare class ResponseParser {
|
|
33
|
+
/**
|
|
34
|
+
* @ac US-059-AC-1: Parse JSON responses
|
|
35
|
+
* Parse AI response into structured data
|
|
36
|
+
*/
|
|
37
|
+
parse<T>(content: string, schema?: Record<string, unknown>): ParsedResponse<T>;
|
|
38
|
+
/**
|
|
39
|
+
* @ac US-059-AC-2: Handle malformed responses
|
|
40
|
+
* Extract JSON from potentially malformed response
|
|
41
|
+
*/
|
|
42
|
+
private extractJSON;
|
|
43
|
+
/**
|
|
44
|
+
* @ac US-059-AC-4: Validate response schema
|
|
45
|
+
* Validate parsed data against schema
|
|
46
|
+
*/
|
|
47
|
+
private validateSchema;
|
|
48
|
+
/**
|
|
49
|
+
* @ac US-059-AC-5: Handle AI hallucinations
|
|
50
|
+
* Detect potential hallucinations in AI response
|
|
51
|
+
*/
|
|
52
|
+
private detectHallucinations;
|
|
53
|
+
/**
|
|
54
|
+
* @ac US-059-AC-6: Confidence scoring
|
|
55
|
+
* Calculate confidence score for parsed response
|
|
56
|
+
*/
|
|
57
|
+
private calculateConfidence;
|
|
58
|
+
/**
|
|
59
|
+
* @ac US-059-AC-3: Extract structured data
|
|
60
|
+
* Parse array of items from response
|
|
61
|
+
*/
|
|
62
|
+
parseArray<T>(content: string): ParsedResponse<T[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Format parsing report
|
|
65
|
+
*/
|
|
66
|
+
formatReport<T>(result: ParsedResponse<T>): string;
|
|
67
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Response Parser - US-059
|
|
3
|
+
* Parse AI responses reliably and extract actionable information
|
|
4
|
+
*
|
|
5
|
+
* @ac US-059-AC-1: Parse JSON responses
|
|
6
|
+
* @ac US-059-AC-2: Handle malformed responses
|
|
7
|
+
* @ac US-059-AC-3: Extract structured data
|
|
8
|
+
* @ac US-059-AC-4: Validate response schema
|
|
9
|
+
* @ac US-059-AC-5: Handle AI hallucinations
|
|
10
|
+
* @ac US-059-AC-6: Confidence scoring
|
|
11
|
+
* @issue #59
|
|
12
|
+
*/
|
|
13
|
+
import { getLogger } from '../utils/logger.js';
|
|
14
|
+
const logger = getLogger('ResponseParser');
|
|
15
|
+
/**
|
|
16
|
+
* @ac US-059-AC-1: Parse JSON responses
|
|
17
|
+
* @ac US-059-AC-2: Handle malformed responses
|
|
18
|
+
*/
|
|
19
|
+
export class ResponseParser {
|
|
20
|
+
/**
|
|
21
|
+
* @ac US-059-AC-1: Parse JSON responses
|
|
22
|
+
* Parse AI response into structured data
|
|
23
|
+
*/
|
|
24
|
+
parse(content, schema) {
|
|
25
|
+
const result = {
|
|
26
|
+
success: false,
|
|
27
|
+
confidence: 0,
|
|
28
|
+
warnings: [],
|
|
29
|
+
errors: [],
|
|
30
|
+
rawContent: content,
|
|
31
|
+
hallucinationDetected: false,
|
|
32
|
+
};
|
|
33
|
+
try {
|
|
34
|
+
// Extract JSON from response
|
|
35
|
+
const json = this.extractJSON(content);
|
|
36
|
+
if (!json) {
|
|
37
|
+
result.errors.push('No JSON found in response');
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
// Parse JSON
|
|
41
|
+
const parsed = JSON.parse(json);
|
|
42
|
+
// Validate schema if provided
|
|
43
|
+
if (schema) {
|
|
44
|
+
const validation = this.validateSchema(parsed, schema);
|
|
45
|
+
if (!validation.valid) {
|
|
46
|
+
result.errors.push(...validation.errors);
|
|
47
|
+
result.warnings.push(...validation.missingFields.map((f) => `Missing field: ${f}`));
|
|
48
|
+
result.success = false; // Mark as failed if schema validation fails
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Check for hallucinations
|
|
53
|
+
const hallucinationCheck = this.detectHallucinations(content, parsed);
|
|
54
|
+
if (hallucinationCheck.detected) {
|
|
55
|
+
result.hallucinationDetected = true;
|
|
56
|
+
result.warnings.push(...hallucinationCheck.warnings);
|
|
57
|
+
}
|
|
58
|
+
// Calculate confidence
|
|
59
|
+
result.confidence = this.calculateConfidence(parsed, schema, result.warnings.length);
|
|
60
|
+
result.data = parsed;
|
|
61
|
+
result.success = true;
|
|
62
|
+
logger.debug('Response parsed successfully', {
|
|
63
|
+
confidence: result.confidence,
|
|
64
|
+
warnings: result.warnings.length,
|
|
65
|
+
});
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
result.errors.push(error instanceof Error ? error.message : String(error));
|
|
70
|
+
logger.error('Failed to parse response', {
|
|
71
|
+
error: error instanceof Error ? error.message : String(error),
|
|
72
|
+
});
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @ac US-059-AC-2: Handle malformed responses
|
|
78
|
+
* Extract JSON from potentially malformed response
|
|
79
|
+
*/
|
|
80
|
+
extractJSON(content) {
|
|
81
|
+
// Try to find JSON block with code fences
|
|
82
|
+
const codeBlockMatch = /```json\s*([\s\S]*?)\s*```/.exec(content);
|
|
83
|
+
if (codeBlockMatch) {
|
|
84
|
+
return codeBlockMatch[1];
|
|
85
|
+
}
|
|
86
|
+
// Try to find JSON array first (before objects, as arrays can contain objects)
|
|
87
|
+
const arrayMatch = /\[[\s\S]*\]/.exec(content);
|
|
88
|
+
if (arrayMatch) {
|
|
89
|
+
return arrayMatch[0];
|
|
90
|
+
}
|
|
91
|
+
// Try to find raw JSON object
|
|
92
|
+
const jsonMatch = /\{[\s\S]*\}/.exec(content);
|
|
93
|
+
if (jsonMatch) {
|
|
94
|
+
return jsonMatch[0];
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* @ac US-059-AC-4: Validate response schema
|
|
100
|
+
* Validate parsed data against schema
|
|
101
|
+
*/
|
|
102
|
+
validateSchema(data, schema) {
|
|
103
|
+
const result = {
|
|
104
|
+
valid: true,
|
|
105
|
+
errors: [],
|
|
106
|
+
missingFields: [],
|
|
107
|
+
invalidTypes: [],
|
|
108
|
+
};
|
|
109
|
+
if (typeof data !== 'object' || data === null) {
|
|
110
|
+
result.valid = false;
|
|
111
|
+
result.errors.push('Data is not an object');
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
const dataObj = data;
|
|
115
|
+
// Check required fields
|
|
116
|
+
for (const [field, expectedType] of Object.entries(schema)) {
|
|
117
|
+
if (!(field in dataObj)) {
|
|
118
|
+
result.missingFields.push(field);
|
|
119
|
+
result.valid = false;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
// Basic type checking
|
|
123
|
+
const actualType = Array.isArray(dataObj[field]) ? 'array' : typeof dataObj[field];
|
|
124
|
+
if (expectedType !== actualType && expectedType !== 'any') {
|
|
125
|
+
result.invalidTypes.push(`${field}: expected ${String(expectedType)}, got ${actualType}`);
|
|
126
|
+
result.valid = false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* @ac US-059-AC-5: Handle AI hallucinations
|
|
133
|
+
* Detect potential hallucinations in AI response
|
|
134
|
+
*/
|
|
135
|
+
detectHallucinations(content, parsed) {
|
|
136
|
+
const warnings = [];
|
|
137
|
+
// Check for common hallucination patterns
|
|
138
|
+
const hallucinationPatterns = [
|
|
139
|
+
/I apologize|I'm sorry|I cannot|I don't have/i,
|
|
140
|
+
/As an AI|As a language model/i,
|
|
141
|
+
/hypothetical|example|placeholder/i,
|
|
142
|
+
];
|
|
143
|
+
for (const pattern of hallucinationPatterns) {
|
|
144
|
+
if (pattern.test(content)) {
|
|
145
|
+
warnings.push(`Possible hallucination detected: ${pattern.source}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Check for suspiciously generic data
|
|
149
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
150
|
+
const dataObj = parsed;
|
|
151
|
+
for (const [key, value] of Object.entries(dataObj)) {
|
|
152
|
+
if (typeof value === 'string' &&
|
|
153
|
+
(value.toLowerCase().includes('example') ||
|
|
154
|
+
value.toLowerCase().includes('placeholder') ||
|
|
155
|
+
value.toLowerCase().includes('todo'))) {
|
|
156
|
+
warnings.push(`Suspicious generic value in field "${key}": ${value}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
detected: warnings.length > 0,
|
|
162
|
+
warnings,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @ac US-059-AC-6: Confidence scoring
|
|
167
|
+
* Calculate confidence score for parsed response
|
|
168
|
+
*/
|
|
169
|
+
calculateConfidence(data, schema, warningCount = 0) {
|
|
170
|
+
let confidence = 1.0;
|
|
171
|
+
// Reduce confidence for schema validation issues
|
|
172
|
+
if (schema) {
|
|
173
|
+
const validation = this.validateSchema(data, schema);
|
|
174
|
+
confidence -= validation.missingFields.length * 0.1;
|
|
175
|
+
confidence -= validation.invalidTypes.length * 0.15;
|
|
176
|
+
}
|
|
177
|
+
// Reduce confidence for warnings
|
|
178
|
+
confidence -= warningCount * 0.05;
|
|
179
|
+
// Check data completeness
|
|
180
|
+
if (typeof data === 'object' && data !== null) {
|
|
181
|
+
const dataObj = data;
|
|
182
|
+
const emptyFields = Object.values(dataObj).filter((v) => v === null || v === undefined || v === '').length;
|
|
183
|
+
confidence -= emptyFields * 0.05;
|
|
184
|
+
}
|
|
185
|
+
return Math.max(0, Math.min(1, confidence));
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* @ac US-059-AC-3: Extract structured data
|
|
189
|
+
* Parse array of items from response
|
|
190
|
+
*/
|
|
191
|
+
parseArray(content) {
|
|
192
|
+
const result = this.parse(content);
|
|
193
|
+
if (result.success && result.data && !Array.isArray(result.data)) {
|
|
194
|
+
result.success = false;
|
|
195
|
+
result.errors.push('Response is not an array');
|
|
196
|
+
result.data = undefined;
|
|
197
|
+
}
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Format parsing report
|
|
202
|
+
*/
|
|
203
|
+
formatReport(result) {
|
|
204
|
+
const lines = [];
|
|
205
|
+
lines.push('📝 AI Response Parse Report');
|
|
206
|
+
lines.push('═══════════════════════════════════════');
|
|
207
|
+
if (result.success) {
|
|
208
|
+
lines.push(`✅ Success: Confidence ${(result.confidence * 100).toFixed(0)}%`);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
lines.push('❌ Failed to parse response');
|
|
212
|
+
}
|
|
213
|
+
if (result.errors.length > 0) {
|
|
214
|
+
lines.push('');
|
|
215
|
+
lines.push('❌ Errors:');
|
|
216
|
+
for (const error of result.errors) {
|
|
217
|
+
lines.push(` - ${error}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (result.warnings.length > 0) {
|
|
221
|
+
lines.push('');
|
|
222
|
+
lines.push('⚠️ Warnings:');
|
|
223
|
+
for (const warning of result.warnings) {
|
|
224
|
+
lines.push(` - ${warning}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (result.hallucinationDetected) {
|
|
228
|
+
lines.push('');
|
|
229
|
+
lines.push('🔍 Hallucination detected - review data carefully');
|
|
230
|
+
}
|
|
231
|
+
return lines.join('\n');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=response-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parser.js","sourceRoot":"","sources":["../../src/ai/response-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Wave Validation Service - US-056
|
|
3
|
+
* Uses Agentforce to validate deployment waves for business logic issues
|
|
4
|
+
*
|
|
5
|
+
* @ac US-056-AC-1: Send wave structure to Agentforce
|
|
6
|
+
* @ac US-056-AC-2: Receive validation feedback
|
|
7
|
+
* @ac US-056-AC-3: Identify potential issues
|
|
8
|
+
* @ac US-056-AC-4: Suggest optimizations
|
|
9
|
+
* @ac US-056-AC-5: Risk assessment per wave
|
|
10
|
+
* @ac US-056-AC-6: Apply AI suggestions (optional)
|
|
11
|
+
* @issue #56
|
|
12
|
+
*/
|
|
13
|
+
import type { Wave } from '../waves/wave-builder.js';
|
|
14
|
+
import type { LLMProvider } from './llm-provider.js';
|
|
15
|
+
export type WaveValidationIssue = {
|
|
16
|
+
waveNumber: number;
|
|
17
|
+
severity: 'low' | 'medium' | 'high' | 'critical';
|
|
18
|
+
category: 'dependency' | 'business-logic' | 'performance' | 'risk';
|
|
19
|
+
message: string;
|
|
20
|
+
affectedComponents: string[];
|
|
21
|
+
suggestion?: string;
|
|
22
|
+
};
|
|
23
|
+
export type WaveOptimization = {
|
|
24
|
+
waveNumber: number;
|
|
25
|
+
type: 'merge' | 'split' | 'reorder' | 'add-component' | 'remove-component';
|
|
26
|
+
description: string;
|
|
27
|
+
confidence: number;
|
|
28
|
+
estimatedImprovement: string;
|
|
29
|
+
};
|
|
30
|
+
export type WaveRiskAssessment = {
|
|
31
|
+
waveNumber: number;
|
|
32
|
+
riskLevel: 'low' | 'medium' | 'high' | 'critical';
|
|
33
|
+
riskFactors: string[];
|
|
34
|
+
mitigation: string[];
|
|
35
|
+
recommendedActions: string[];
|
|
36
|
+
};
|
|
37
|
+
export type WaveValidationResult = {
|
|
38
|
+
isValid: boolean;
|
|
39
|
+
issues: WaveValidationIssue[];
|
|
40
|
+
optimizations: WaveOptimization[];
|
|
41
|
+
riskAssessments: WaveRiskAssessment[];
|
|
42
|
+
overallRisk: 'low' | 'medium' | 'high' | 'critical';
|
|
43
|
+
executionTime: number;
|
|
44
|
+
aiAnalyzed: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type WaveValidationServiceOptions = {
|
|
47
|
+
baseDir?: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* @ac US-056-AC-1: Send wave structure to Agentforce
|
|
51
|
+
* @ac US-056-AC-2: Receive validation feedback
|
|
52
|
+
*/
|
|
53
|
+
export declare class WaveValidationService {
|
|
54
|
+
private readonly llmProvider;
|
|
55
|
+
constructor(llmProviderOrOptions?: LLMProvider | WaveValidationServiceOptions);
|
|
56
|
+
private resolveProvider;
|
|
57
|
+
/**
|
|
58
|
+
* @ac US-056-AC-1: Send wave structure to Agentforce
|
|
59
|
+
* Validate deployment waves using AI
|
|
60
|
+
*/
|
|
61
|
+
validateWaves(waves: Wave[]): Promise<WaveValidationResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Build validation prompt
|
|
64
|
+
*/
|
|
65
|
+
private buildValidationPrompt;
|
|
66
|
+
/**
|
|
67
|
+
* @ac US-056-AC-2: Receive validation feedback
|
|
68
|
+
* @ac US-056-AC-3: Identify potential issues
|
|
69
|
+
* @ac US-056-AC-4: Suggest optimizations
|
|
70
|
+
* @ac US-056-AC-5: Risk assessment per wave
|
|
71
|
+
*/
|
|
72
|
+
private parseValidationResponse;
|
|
73
|
+
/**
|
|
74
|
+
* Parse issues from AI response
|
|
75
|
+
*/
|
|
76
|
+
private parseIssues;
|
|
77
|
+
/**
|
|
78
|
+
* Parse optimizations from AI response
|
|
79
|
+
*/
|
|
80
|
+
private parseOptimizations;
|
|
81
|
+
/**
|
|
82
|
+
* Parse risk assessments from AI response
|
|
83
|
+
*/
|
|
84
|
+
private parseRiskAssessments;
|
|
85
|
+
/**
|
|
86
|
+
* Get mock validation (fallback when AI unavailable)
|
|
87
|
+
*/
|
|
88
|
+
private getMockValidation;
|
|
89
|
+
/**
|
|
90
|
+
* Calculate overall risk from individual assessments
|
|
91
|
+
*/
|
|
92
|
+
private calculateOverallRisk;
|
|
93
|
+
/**
|
|
94
|
+
* @ac US-056-AC-6: Apply AI suggestions (optional)
|
|
95
|
+
* Apply optimization suggestions to waves
|
|
96
|
+
*/
|
|
97
|
+
applyOptimizations(waves: Wave[], optimizations: WaveOptimization[]): Wave[];
|
|
98
|
+
getProviderConfig(): Readonly<ReturnType<LLMProvider['getConfig']>>;
|
|
99
|
+
/**
|
|
100
|
+
* Format validation report
|
|
101
|
+
*/
|
|
102
|
+
formatValidationReport(result: WaveValidationResult): string;
|
|
103
|
+
/**
|
|
104
|
+
* Get risk level icon
|
|
105
|
+
*/
|
|
106
|
+
private getRiskIcon;
|
|
107
|
+
/**
|
|
108
|
+
* Get severity icon
|
|
109
|
+
*/
|
|
110
|
+
private getSeverityIcon;
|
|
111
|
+
}
|