@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,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentforce Priority Service - US-057
|
|
3
|
+
* Uses Salesforce AI to suggest component deployment priorities
|
|
4
|
+
*
|
|
5
|
+
* @ac US-057-AC-1: Send component list to Agentforce
|
|
6
|
+
* @ac US-057-AC-2: Receive priority recommendations
|
|
7
|
+
* @ac US-057-AC-3: Consider business criticality
|
|
8
|
+
* @ac US-057-AC-4: Consider failure impact
|
|
9
|
+
* @ac US-057-AC-5: Merge with static priorities
|
|
10
|
+
* @ac US-057-AC-6: Report AI decisions
|
|
11
|
+
* @issue #57
|
|
12
|
+
*/
|
|
13
|
+
import { getLogger } from '../utils/logger.js';
|
|
14
|
+
import { createLLMProvider } from './llm-provider-factory.js';
|
|
15
|
+
const logger = getLogger('AgentforcePriorityService');
|
|
16
|
+
/**
|
|
17
|
+
* @ac US-057-AC-1: Send component list to Agentforce
|
|
18
|
+
* @ac US-057-AC-2: Receive priority recommendations
|
|
19
|
+
*/
|
|
20
|
+
export class AgentforcePriorityService {
|
|
21
|
+
llmProvider;
|
|
22
|
+
enabled;
|
|
23
|
+
constructor(config = {}) {
|
|
24
|
+
this.llmProvider =
|
|
25
|
+
config.llmProvider ??
|
|
26
|
+
createLLMProvider({
|
|
27
|
+
baseDir: config.baseDir,
|
|
28
|
+
provider: config.provider,
|
|
29
|
+
endpoint: config.endpoint,
|
|
30
|
+
apiKey: config.apiKey,
|
|
31
|
+
model: config.model,
|
|
32
|
+
timeout: config.timeout,
|
|
33
|
+
maxRetries: config.maxRetries,
|
|
34
|
+
enabled: config.enabled,
|
|
35
|
+
rateLimit: config.rateLimit,
|
|
36
|
+
fetchFn: config.fetchFn,
|
|
37
|
+
});
|
|
38
|
+
this.enabled = this.llmProvider.isEnabled();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @ac US-057-AC-1: Send component list to Agentforce
|
|
42
|
+
* @ac US-057-AC-2: Receive priority recommendations
|
|
43
|
+
* @ac US-057-AC-3: Consider business criticality
|
|
44
|
+
* @ac US-057-AC-4: Consider failure impact
|
|
45
|
+
*/
|
|
46
|
+
async analyzePriorities(components, context) {
|
|
47
|
+
const startTime = Date.now();
|
|
48
|
+
const prompt = this.buildPriorityPrompt(components, context);
|
|
49
|
+
if (!this.enabled) {
|
|
50
|
+
logger.info('Agentforce disabled, returning empty recommendations');
|
|
51
|
+
return {
|
|
52
|
+
recommendations: [],
|
|
53
|
+
totalComponents: components.length,
|
|
54
|
+
aiAdjustments: 0,
|
|
55
|
+
executionTime: 0,
|
|
56
|
+
usedFallback: false,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
logger.info('Analyzing component priorities with Agentforce', {
|
|
60
|
+
componentCount: components.length,
|
|
61
|
+
orgType: context?.orgType,
|
|
62
|
+
industry: context?.industry,
|
|
63
|
+
});
|
|
64
|
+
try {
|
|
65
|
+
const response = await this.llmProvider.sendRequest({
|
|
66
|
+
model: this.llmProvider.getConfig().model,
|
|
67
|
+
prompt,
|
|
68
|
+
temperature: 0.2,
|
|
69
|
+
maxTokens: 4000,
|
|
70
|
+
});
|
|
71
|
+
const recommendations = this.parseResponse(response.content);
|
|
72
|
+
const executionTime = Date.now() - startTime;
|
|
73
|
+
logger.info('Priority analysis complete', {
|
|
74
|
+
recommendations: recommendations.length,
|
|
75
|
+
executionTime,
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
recommendations,
|
|
79
|
+
totalComponents: components.length,
|
|
80
|
+
aiAdjustments: recommendations.filter((r) => r.confidence > 0.8).length,
|
|
81
|
+
executionTime,
|
|
82
|
+
tokensUsed: response.tokensUsed,
|
|
83
|
+
usedFallback: false,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
logger.warn('LLM priority analysis failed, falling back to static recommendations', {
|
|
88
|
+
error: error instanceof Error ? error.message : String(error),
|
|
89
|
+
provider: this.llmProvider.getConfig().provider,
|
|
90
|
+
});
|
|
91
|
+
return this.createFallbackResult(components, prompt, startTime);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @ac US-057-AC-3: Consider business criticality
|
|
96
|
+
* @ac US-057-AC-4: Consider failure impact
|
|
97
|
+
*/
|
|
98
|
+
buildPriorityPrompt(components, context) {
|
|
99
|
+
const componentList = components.map((c) => `- ${c.type}: ${c.name}`).join('\n');
|
|
100
|
+
const contextInfo = context
|
|
101
|
+
? `\nOrg Type: ${context.orgType ?? 'Unknown'}\nIndustry: ${context.industry ?? 'Unknown'}`
|
|
102
|
+
: '';
|
|
103
|
+
return `You are an expert Salesforce deployment analyst. Analyze these components and suggest deployment priorities.
|
|
104
|
+
|
|
105
|
+
Context:${contextInfo}
|
|
106
|
+
|
|
107
|
+
Components to analyze:
|
|
108
|
+
${componentList}
|
|
109
|
+
|
|
110
|
+
For each component, consider:
|
|
111
|
+
1. **Business Criticality**: How important is this to business operations?
|
|
112
|
+
2. **Failure Impact**: What happens if this component fails to deploy?
|
|
113
|
+
3. **Dependencies**: Should this deploy before or after others?
|
|
114
|
+
4. **Risk Level**: How risky is deploying this component?
|
|
115
|
+
|
|
116
|
+
Assign priorities (0-100):
|
|
117
|
+
- 90-100: CRITICAL (payment processing, authentication, core business logic)
|
|
118
|
+
- 70-89: HIGH (important features, customer-facing)
|
|
119
|
+
- 40-69: MEDIUM (supporting features, utilities)
|
|
120
|
+
- 0-39: LOW (logging, monitoring, non-critical utilities)
|
|
121
|
+
|
|
122
|
+
Respond ONLY with valid JSON (no markdown):
|
|
123
|
+
{
|
|
124
|
+
"recommendations": [
|
|
125
|
+
{
|
|
126
|
+
"componentName": "exact component name",
|
|
127
|
+
"priority": 85,
|
|
128
|
+
"reason": "brief explanation",
|
|
129
|
+
"confidence": 0.9,
|
|
130
|
+
"businessCriticality": "high",
|
|
131
|
+
"failureImpact": "high"
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
}`;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* @ac US-057-AC-1: Send component list to Agentforce
|
|
138
|
+
*/
|
|
139
|
+
parseResponse(content) {
|
|
140
|
+
try {
|
|
141
|
+
// Remove markdown code blocks if present
|
|
142
|
+
const cleanContent = content
|
|
143
|
+
.replace(/```json\n?/g, '')
|
|
144
|
+
.replace(/```\n?/g, '')
|
|
145
|
+
.trim();
|
|
146
|
+
const parsed = JSON.parse(cleanContent);
|
|
147
|
+
if (!parsed.recommendations || !Array.isArray(parsed.recommendations)) {
|
|
148
|
+
logger.warn('Invalid response format, returning empty recommendations');
|
|
149
|
+
return [];
|
|
150
|
+
}
|
|
151
|
+
return parsed.recommendations;
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
logger.error('Failed to parse Agentforce response', { error });
|
|
155
|
+
return [];
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Mock response for testing and fallback
|
|
160
|
+
*/
|
|
161
|
+
getMockResponse(prompt) {
|
|
162
|
+
// Extract component names from prompt
|
|
163
|
+
const componentMatches = prompt.matchAll(/- (\w+): ([\w_]+)/g);
|
|
164
|
+
const recommendations = [];
|
|
165
|
+
for (const match of componentMatches) {
|
|
166
|
+
const type = match[1];
|
|
167
|
+
const name = match[2];
|
|
168
|
+
// Simple heuristic-based mock priorities
|
|
169
|
+
let priority = 50;
|
|
170
|
+
let businessCriticality = 'medium';
|
|
171
|
+
let failureImpact = 'medium';
|
|
172
|
+
if (name.toLowerCase().includes('payment') || name.toLowerCase().includes('auth')) {
|
|
173
|
+
priority = 95;
|
|
174
|
+
businessCriticality = 'critical';
|
|
175
|
+
failureImpact = 'critical';
|
|
176
|
+
}
|
|
177
|
+
else if (name.toLowerCase().includes('handler') || name.toLowerCase().includes('service')) {
|
|
178
|
+
priority = 75;
|
|
179
|
+
businessCriticality = 'high';
|
|
180
|
+
failureImpact = 'high';
|
|
181
|
+
}
|
|
182
|
+
else if (name.toLowerCase().includes('log') || name.toLowerCase().includes('audit')) {
|
|
183
|
+
priority = 20;
|
|
184
|
+
businessCriticality = 'low';
|
|
185
|
+
failureImpact = 'low';
|
|
186
|
+
}
|
|
187
|
+
recommendations.push({
|
|
188
|
+
componentName: name,
|
|
189
|
+
priority,
|
|
190
|
+
reason: `Mock: ${type} with ${businessCriticality} business impact`,
|
|
191
|
+
confidence: 0.85,
|
|
192
|
+
businessCriticality,
|
|
193
|
+
failureImpact,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
choices: [
|
|
198
|
+
{
|
|
199
|
+
message: {
|
|
200
|
+
content: JSON.stringify({ recommendations }),
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
usage: {
|
|
205
|
+
['total_tokens']: 500,
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
createFallbackResult(components, prompt, startTime) {
|
|
210
|
+
const response = this.getMockResponse(prompt);
|
|
211
|
+
const content = response.choices?.[0]?.message?.content ?? '{}';
|
|
212
|
+
const recommendations = this.parseResponse(content);
|
|
213
|
+
return {
|
|
214
|
+
recommendations,
|
|
215
|
+
totalComponents: components.length,
|
|
216
|
+
aiAdjustments: recommendations.filter((recommendation) => recommendation.confidence > 0.8).length,
|
|
217
|
+
executionTime: Date.now() - startTime,
|
|
218
|
+
tokensUsed: response.usage?.['total_tokens'],
|
|
219
|
+
usedFallback: true,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* @ac US-057-AC-6: Report AI decisions
|
|
224
|
+
*/
|
|
225
|
+
formatDecisionReport(result) {
|
|
226
|
+
const lines = [];
|
|
227
|
+
lines.push('🤖 AI Priority Analysis Report');
|
|
228
|
+
lines.push('═══════════════════════════════════════');
|
|
229
|
+
lines.push(`Total Components: ${result.totalComponents}`);
|
|
230
|
+
lines.push(`AI Adjustments: ${result.aiAdjustments}`);
|
|
231
|
+
lines.push(`Execution Time: ${result.executionTime}ms`);
|
|
232
|
+
if (result.tokensUsed) {
|
|
233
|
+
lines.push(`Tokens Used: ${result.tokensUsed}`);
|
|
234
|
+
}
|
|
235
|
+
lines.push('');
|
|
236
|
+
if (result.recommendations.length > 0) {
|
|
237
|
+
lines.push('Priority Recommendations:');
|
|
238
|
+
const sorted = result.recommendations.sort((a, b) => b.priority - a.priority);
|
|
239
|
+
for (const rec of sorted.slice(0, 10)) {
|
|
240
|
+
// Top 10
|
|
241
|
+
lines.push(` ${rec.priority.toString().padStart(3)} | ${rec.componentName.padEnd(30)} | ${rec.businessCriticality.toUpperCase()}`);
|
|
242
|
+
lines.push(` ${rec.reason}`);
|
|
243
|
+
}
|
|
244
|
+
if (result.recommendations.length > 10) {
|
|
245
|
+
lines.push(` ... and ${result.recommendations.length - 10} more`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
lines.push('No AI recommendations (using static priorities)');
|
|
250
|
+
}
|
|
251
|
+
return lines.join('\n');
|
|
252
|
+
}
|
|
253
|
+
getProviderConfig() {
|
|
254
|
+
return this.llmProvider.getConfig();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=agentforce-priority-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentforce-priority-service.js","sourceRoot":"","sources":["../../src/ai/agentforce-priority-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentforce Service - US-054
|
|
3
|
+
* Base service for connecting to Agentforce API
|
|
4
|
+
*
|
|
5
|
+
* @ac US-054-AC-1: Configure API endpoint
|
|
6
|
+
* @ac US-054-AC-2: Handle authentication
|
|
7
|
+
* @ac US-054-AC-3: Support multiple models
|
|
8
|
+
* @ac US-054-AC-4: Implement retry logic
|
|
9
|
+
* @ac US-054-AC-5: Handle rate limiting
|
|
10
|
+
* @ac US-054-AC-6: Monitor API usage
|
|
11
|
+
* @issue #54
|
|
12
|
+
*/
|
|
13
|
+
import type { LLMProvider, LLMProviderConfig, LLMRequest, LLMResponse } from './llm-provider.js';
|
|
14
|
+
export type AgentforceFetch = typeof fetch;
|
|
15
|
+
export type AgentforceConfig = LLMProviderConfig & {
|
|
16
|
+
provider: 'agentforce';
|
|
17
|
+
endpoint: string;
|
|
18
|
+
/** API endpoint URL */
|
|
19
|
+
/** API key or named credential */
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
model: string;
|
|
22
|
+
timeout: number;
|
|
23
|
+
enabled: boolean;
|
|
24
|
+
rateLimit: number;
|
|
25
|
+
/** Max retry attempts */
|
|
26
|
+
maxRetries: number;
|
|
27
|
+
/** Injectable fetch implementation for tests or alternate runtimes */
|
|
28
|
+
fetchFn?: AgentforceFetch;
|
|
29
|
+
};
|
|
30
|
+
export type AgentforceRequest = LLMRequest;
|
|
31
|
+
export type AgentforceResponse = LLMResponse;
|
|
32
|
+
export type ApiUsageStats = {
|
|
33
|
+
totalRequests: number;
|
|
34
|
+
successfulRequests: number;
|
|
35
|
+
failedRequests: number;
|
|
36
|
+
totalTokensUsed: number;
|
|
37
|
+
averageResponseTime: number;
|
|
38
|
+
rateLimitHits: number;
|
|
39
|
+
lastRequestTime?: Date;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* @ac US-054-AC-1: Configure API endpoint
|
|
43
|
+
* @ac US-054-AC-2: Handle authentication
|
|
44
|
+
*/
|
|
45
|
+
export declare class AgentforceService implements LLMProvider {
|
|
46
|
+
private readonly config;
|
|
47
|
+
private readonly fetchFn?;
|
|
48
|
+
private readonly usageStats;
|
|
49
|
+
private requestTimestamps;
|
|
50
|
+
constructor(config?: Partial<AgentforceConfig>);
|
|
51
|
+
/**
|
|
52
|
+
* @ac US-054-AC-3: Support multiple models
|
|
53
|
+
* Send request to Agentforce API
|
|
54
|
+
*/
|
|
55
|
+
sendRequest(request: AgentforceRequest): Promise<AgentforceResponse>;
|
|
56
|
+
/**
|
|
57
|
+
* @ac US-054-AC-4: Implement retry logic
|
|
58
|
+
* Execute request with exponential backoff retry
|
|
59
|
+
*/
|
|
60
|
+
private executeWithRetry;
|
|
61
|
+
private executeRequest;
|
|
62
|
+
/**
|
|
63
|
+
* @ac US-054-AC-5: Handle rate limiting
|
|
64
|
+
* Enforce rate limit (requests per minute)
|
|
65
|
+
*/
|
|
66
|
+
private enforceRateLimit;
|
|
67
|
+
/**
|
|
68
|
+
* Check if error is retryable
|
|
69
|
+
*/
|
|
70
|
+
private isRetryableError;
|
|
71
|
+
/**
|
|
72
|
+
* Sleep utility
|
|
73
|
+
*/
|
|
74
|
+
private sleep;
|
|
75
|
+
/**
|
|
76
|
+
* Update average response time
|
|
77
|
+
*/
|
|
78
|
+
private updateAverageResponseTime;
|
|
79
|
+
/**
|
|
80
|
+
* @ac US-054-AC-6: Monitor API usage
|
|
81
|
+
* Get usage statistics
|
|
82
|
+
*/
|
|
83
|
+
getUsageStats(): Readonly<ApiUsageStats>;
|
|
84
|
+
/**
|
|
85
|
+
* Get configuration
|
|
86
|
+
*/
|
|
87
|
+
getConfig(): Readonly<AgentforceConfig>;
|
|
88
|
+
/**
|
|
89
|
+
* Check if service is enabled
|
|
90
|
+
*/
|
|
91
|
+
isEnabled(): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Reset usage statistics (for testing)
|
|
94
|
+
*/
|
|
95
|
+
resetStats(): void;
|
|
96
|
+
private extractContent;
|
|
97
|
+
private extractTokensUsed;
|
|
98
|
+
private extractModel;
|
|
99
|
+
}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentforce Service - US-054
|
|
3
|
+
* Base service for connecting to Agentforce API
|
|
4
|
+
*
|
|
5
|
+
* @ac US-054-AC-1: Configure API endpoint
|
|
6
|
+
* @ac US-054-AC-2: Handle authentication
|
|
7
|
+
* @ac US-054-AC-3: Support multiple models
|
|
8
|
+
* @ac US-054-AC-4: Implement retry logic
|
|
9
|
+
* @ac US-054-AC-5: Handle rate limiting
|
|
10
|
+
* @ac US-054-AC-6: Monitor API usage
|
|
11
|
+
* @issue #54
|
|
12
|
+
*/
|
|
13
|
+
import { getLogger } from '../utils/logger.js';
|
|
14
|
+
import { getErrorAggregator } from '../utils/error-aggregator.js';
|
|
15
|
+
const logger = getLogger('AgentforceService');
|
|
16
|
+
const errorAggregator = getErrorAggregator();
|
|
17
|
+
/**
|
|
18
|
+
* @ac US-054-AC-1: Configure API endpoint
|
|
19
|
+
* @ac US-054-AC-2: Handle authentication
|
|
20
|
+
*/
|
|
21
|
+
export class AgentforceService {
|
|
22
|
+
config;
|
|
23
|
+
fetchFn;
|
|
24
|
+
usageStats = {
|
|
25
|
+
totalRequests: 0,
|
|
26
|
+
successfulRequests: 0,
|
|
27
|
+
failedRequests: 0,
|
|
28
|
+
totalTokensUsed: 0,
|
|
29
|
+
averageResponseTime: 0,
|
|
30
|
+
rateLimitHits: 0,
|
|
31
|
+
};
|
|
32
|
+
requestTimestamps = [];
|
|
33
|
+
constructor(config = {}) {
|
|
34
|
+
this.config = {
|
|
35
|
+
provider: 'agentforce',
|
|
36
|
+
endpoint: config.endpoint ?? process.env.AGENTFORCE_ENDPOINT ?? 'https://api.salesforce.com/ai/v1',
|
|
37
|
+
apiKey: config.apiKey ?? process.env.AGENTFORCE_API_KEY,
|
|
38
|
+
model: config.model ?? 'agentforce-1',
|
|
39
|
+
timeout: config.timeout ?? 30_000, // 30 seconds
|
|
40
|
+
maxRetries: config.maxRetries ?? 3,
|
|
41
|
+
enabled: config.enabled ?? true,
|
|
42
|
+
rateLimit: config.rateLimit ?? 60, // 60 requests per minute
|
|
43
|
+
fetchFn: config.fetchFn ?? globalThis.fetch,
|
|
44
|
+
};
|
|
45
|
+
this.fetchFn = this.config.fetchFn;
|
|
46
|
+
logger.info('Agentforce service initialized', {
|
|
47
|
+
endpoint: this.config.endpoint,
|
|
48
|
+
model: this.config.model,
|
|
49
|
+
enabled: this.config.enabled,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @ac US-054-AC-3: Support multiple models
|
|
54
|
+
* Send request to Agentforce API
|
|
55
|
+
*/
|
|
56
|
+
async sendRequest(request) {
|
|
57
|
+
if (!this.config.enabled) {
|
|
58
|
+
throw new Error('Agentforce service is disabled');
|
|
59
|
+
}
|
|
60
|
+
if (!this.config.apiKey) {
|
|
61
|
+
throw new Error('Agentforce API key not configured');
|
|
62
|
+
}
|
|
63
|
+
// Rate limiting check
|
|
64
|
+
this.enforceRateLimit();
|
|
65
|
+
const startTime = Date.now();
|
|
66
|
+
this.usageStats.totalRequests++;
|
|
67
|
+
try {
|
|
68
|
+
// Execute with retry logic
|
|
69
|
+
const response = await this.executeWithRetry(request);
|
|
70
|
+
// Track success
|
|
71
|
+
const executionTime = Date.now() - startTime;
|
|
72
|
+
this.usageStats.successfulRequests++;
|
|
73
|
+
this.usageStats.totalTokensUsed += response.tokensUsed;
|
|
74
|
+
this.updateAverageResponseTime(executionTime);
|
|
75
|
+
this.usageStats.lastRequestTime = new Date();
|
|
76
|
+
logger.info('Agentforce request successful', {
|
|
77
|
+
model: response.model,
|
|
78
|
+
tokens: response.tokensUsed,
|
|
79
|
+
executionTime,
|
|
80
|
+
});
|
|
81
|
+
return response;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
// Track failure
|
|
85
|
+
this.usageStats.failedRequests++;
|
|
86
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
87
|
+
logger.error('Agentforce request failed', { error: errorMessage });
|
|
88
|
+
errorAggregator.addError({
|
|
89
|
+
message: `Agentforce API error: ${errorMessage}`,
|
|
90
|
+
type: 'AgentforceError',
|
|
91
|
+
severity: 'HIGH',
|
|
92
|
+
context: { model: request.model, prompt: request.prompt.slice(0, 100) },
|
|
93
|
+
});
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* @ac US-054-AC-4: Implement retry logic
|
|
99
|
+
* Execute request with exponential backoff retry
|
|
100
|
+
*/
|
|
101
|
+
async executeWithRetry(request, attempt = 1) {
|
|
102
|
+
try {
|
|
103
|
+
return await this.executeRequest(request);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
107
|
+
// Check if we should retry
|
|
108
|
+
if (attempt >= this.config.maxRetries) {
|
|
109
|
+
throw new Error(`Agentforce request failed after ${attempt} attempts: ${errorMessage}`);
|
|
110
|
+
}
|
|
111
|
+
// Check if error is retryable
|
|
112
|
+
if (!this.isRetryableError(error)) {
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
// Calculate backoff delay (exponential)
|
|
116
|
+
const delay = Math.min(1e3 * 2 ** (attempt - 1), 1e4); // Max 10s
|
|
117
|
+
logger.warn(`Retrying Agentforce request (attempt ${attempt}/${this.config.maxRetries})`, {
|
|
118
|
+
delay,
|
|
119
|
+
error: errorMessage,
|
|
120
|
+
});
|
|
121
|
+
await this.sleep(delay);
|
|
122
|
+
return this.executeWithRetry(request, attempt + 1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async executeRequest(request) {
|
|
126
|
+
const startTime = Date.now();
|
|
127
|
+
logger.debug('Executing Agentforce request', {
|
|
128
|
+
model: request.model,
|
|
129
|
+
promptLength: request.prompt.length,
|
|
130
|
+
});
|
|
131
|
+
if (!this.fetchFn) {
|
|
132
|
+
throw new Error('Fetch API is not available in this runtime');
|
|
133
|
+
}
|
|
134
|
+
const apiKey = this.config.apiKey;
|
|
135
|
+
if (!apiKey) {
|
|
136
|
+
throw new Error('Agentforce API key not configured');
|
|
137
|
+
}
|
|
138
|
+
const controller = new AbortController();
|
|
139
|
+
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
140
|
+
try {
|
|
141
|
+
const response = await this.fetchFn(this.config.endpoint, {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
headers: {
|
|
144
|
+
Authorization: `Bearer ${apiKey}`,
|
|
145
|
+
'Content-Type': 'application/json',
|
|
146
|
+
},
|
|
147
|
+
body: JSON.stringify({
|
|
148
|
+
model: request.model,
|
|
149
|
+
prompt: request.prompt,
|
|
150
|
+
context: request.context,
|
|
151
|
+
temperature: request.temperature ?? 0.2,
|
|
152
|
+
maxTokens: request.maxTokens ?? 2000,
|
|
153
|
+
}),
|
|
154
|
+
signal: controller.signal,
|
|
155
|
+
});
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
throw new Error(`Agentforce API error: ${response.status} ${response.statusText}`);
|
|
158
|
+
}
|
|
159
|
+
const rawPayload = await response.json();
|
|
160
|
+
if (typeof rawPayload !== 'object' || rawPayload === null) {
|
|
161
|
+
throw new Error('Agentforce response payload was not an object');
|
|
162
|
+
}
|
|
163
|
+
const payload = rawPayload;
|
|
164
|
+
return {
|
|
165
|
+
content: this.extractContent(payload),
|
|
166
|
+
tokensUsed: this.extractTokensUsed(payload, request.prompt),
|
|
167
|
+
model: this.extractModel(payload, request.model),
|
|
168
|
+
executionTime: Date.now() - startTime,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
173
|
+
throw new Error('Agentforce request timed out');
|
|
174
|
+
}
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
clearTimeout(timeoutId);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* @ac US-054-AC-5: Handle rate limiting
|
|
183
|
+
* Enforce rate limit (requests per minute)
|
|
184
|
+
*/
|
|
185
|
+
enforceRateLimit() {
|
|
186
|
+
const now = Date.now();
|
|
187
|
+
const oneMinuteAgo = now - 60_000;
|
|
188
|
+
// Remove timestamps older than 1 minute
|
|
189
|
+
this.requestTimestamps = this.requestTimestamps.filter((ts) => ts > oneMinuteAgo);
|
|
190
|
+
// Check if we exceeded rate limit
|
|
191
|
+
if (this.requestTimestamps.length >= this.config.rateLimit) {
|
|
192
|
+
this.usageStats.rateLimitHits++;
|
|
193
|
+
const oldestTimestamp = this.requestTimestamps[0] ?? now;
|
|
194
|
+
const waitTime = 60_000 - (now - oldestTimestamp);
|
|
195
|
+
throw new Error(`Rate limit exceeded. Please wait ${Math.ceil(waitTime / 1000)}s before retrying.`);
|
|
196
|
+
}
|
|
197
|
+
// Add current timestamp
|
|
198
|
+
this.requestTimestamps.push(now);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if error is retryable
|
|
202
|
+
*/
|
|
203
|
+
isRetryableError(error) {
|
|
204
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
205
|
+
// Retry on network errors, timeouts, and 5xx errors
|
|
206
|
+
const retryablePatterns = [
|
|
207
|
+
/timeout/i,
|
|
208
|
+
/network/i,
|
|
209
|
+
/ECONNRESET/i,
|
|
210
|
+
/ETIMEDOUT/i,
|
|
211
|
+
/5\d{2}/i, // 5xx HTTP errors
|
|
212
|
+
];
|
|
213
|
+
return retryablePatterns.some((pattern) => pattern.test(errorMessage));
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Sleep utility
|
|
217
|
+
*/
|
|
218
|
+
async sleep(ms) {
|
|
219
|
+
return new Promise((resolve) => {
|
|
220
|
+
setTimeout(resolve, ms);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Update average response time
|
|
225
|
+
*/
|
|
226
|
+
updateAverageResponseTime(newTime) {
|
|
227
|
+
const totalRequests = this.usageStats.successfulRequests;
|
|
228
|
+
const currentAvg = this.usageStats.averageResponseTime;
|
|
229
|
+
// Incremental average calculation
|
|
230
|
+
this.usageStats.averageResponseTime = (currentAvg * (totalRequests - 1) + newTime) / totalRequests;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* @ac US-054-AC-6: Monitor API usage
|
|
234
|
+
* Get usage statistics
|
|
235
|
+
*/
|
|
236
|
+
getUsageStats() {
|
|
237
|
+
return { ...this.usageStats };
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get configuration
|
|
241
|
+
*/
|
|
242
|
+
getConfig() {
|
|
243
|
+
return { ...this.config };
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Check if service is enabled
|
|
247
|
+
*/
|
|
248
|
+
isEnabled() {
|
|
249
|
+
return this.config.enabled;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Reset usage statistics (for testing)
|
|
253
|
+
*/
|
|
254
|
+
resetStats() {
|
|
255
|
+
this.usageStats.totalRequests = 0;
|
|
256
|
+
this.usageStats.successfulRequests = 0;
|
|
257
|
+
this.usageStats.failedRequests = 0;
|
|
258
|
+
this.usageStats.totalTokensUsed = 0;
|
|
259
|
+
this.usageStats.averageResponseTime = 0;
|
|
260
|
+
this.usageStats.rateLimitHits = 0;
|
|
261
|
+
this.requestTimestamps = [];
|
|
262
|
+
}
|
|
263
|
+
extractContent(payload) {
|
|
264
|
+
const content = payload.content;
|
|
265
|
+
if (typeof content === 'string') {
|
|
266
|
+
return content;
|
|
267
|
+
}
|
|
268
|
+
const choices = payload.choices;
|
|
269
|
+
if (Array.isArray(choices) && choices.length > 0) {
|
|
270
|
+
const [firstChoice] = choices;
|
|
271
|
+
if (typeof firstChoice === 'object' && firstChoice !== null && 'message' in firstChoice) {
|
|
272
|
+
const message = firstChoice.message;
|
|
273
|
+
if (typeof message === 'object' && message !== null && 'content' in message) {
|
|
274
|
+
const messageContent = message.content;
|
|
275
|
+
if (typeof messageContent === 'string') {
|
|
276
|
+
return messageContent;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
throw new Error('Agentforce response did not contain content');
|
|
282
|
+
}
|
|
283
|
+
extractTokensUsed(payload, prompt) {
|
|
284
|
+
const usage = payload.usage;
|
|
285
|
+
if (typeof usage === 'object' && usage !== null && 'total_tokens' in usage) {
|
|
286
|
+
const totalTokens = usage.total_tokens;
|
|
287
|
+
if (typeof totalTokens === 'number' && Number.isFinite(totalTokens)) {
|
|
288
|
+
return totalTokens;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return Math.max(1, Math.ceil(prompt.length / 4));
|
|
292
|
+
}
|
|
293
|
+
extractModel(payload, fallbackModel) {
|
|
294
|
+
if (typeof payload.model === 'string') {
|
|
295
|
+
return payload.model;
|
|
296
|
+
}
|
|
297
|
+
return fallbackModel;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=agentforce-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentforce-service.js","sourceRoot":"","sources":["../../src/ai/agentforce-service.ts"],"names":[],"mappings":"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"}
|