@jterrats/smart-deployment 1.3.1 → 1.4.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 (98) hide show
  1. package/README.md +38 -0
  2. package/lib/analysis/metadata-capability-definitions.d.ts +2 -0
  3. package/lib/analysis/metadata-capability-definitions.js +260 -0
  4. package/lib/analysis/metadata-capability-definitions.js.map +1 -0
  5. package/lib/analysis/metadata-capability-registry.d.ts +11 -0
  6. package/lib/analysis/metadata-capability-registry.js +142 -0
  7. package/lib/analysis/metadata-capability-registry.js.map +1 -0
  8. package/lib/analysis/metadata-gap-analysis-service.d.ts +51 -0
  9. package/lib/analysis/metadata-gap-analysis-service.js +277 -0
  10. package/lib/analysis/metadata-gap-analysis-service.js.map +1 -0
  11. package/lib/commands/ci-publish.d.ts +6 -2
  12. package/lib/commands/ci-publish.js +23 -8
  13. package/lib/commands/ci-publish.js.map +1 -1
  14. package/lib/commands/metadata/gaps.d.ts +15 -0
  15. package/lib/commands/metadata/gaps.js +84 -0
  16. package/lib/commands/metadata/gaps.js.map +1 -0
  17. package/lib/commands/resume.js +5 -4
  18. package/lib/commands/resume.js.map +1 -1
  19. package/lib/commands/start.d.ts +6 -0
  20. package/lib/commands/start.js +43 -14
  21. package/lib/commands/start.js.map +1 -1
  22. package/lib/commands/status.js +5 -2
  23. package/lib/commands/status.js.map +1 -1
  24. package/lib/commands/validate.d.ts +7 -0
  25. package/lib/commands/validate.js +24 -2
  26. package/lib/commands/validate.js.map +1 -1
  27. package/lib/constants/deployment-order.js +1 -0
  28. package/lib/constants/deployment-order.js.map +1 -1
  29. package/lib/deployment/commit-scope-service.d.ts +7 -0
  30. package/lib/deployment/commit-scope-service.js +104 -21
  31. package/lib/deployment/commit-scope-service.js.map +1 -1
  32. package/lib/deployment/deployment-runner.d.ts +1 -1
  33. package/lib/deployment/deployment-runner.js +23 -22
  34. package/lib/deployment/deployment-runner.js.map +1 -1
  35. package/lib/deployment/deployment-status-service.d.ts +8 -7
  36. package/lib/deployment/deployment-status-service.js +45 -27
  37. package/lib/deployment/deployment-status-service.js.map +1 -1
  38. package/lib/deployment/deployment-validation-service.d.ts +2 -0
  39. package/lib/deployment/deployment-validation-service.js +2 -0
  40. package/lib/deployment/deployment-validation-service.js.map +1 -1
  41. package/lib/deployment/resume-deployment-service.d.ts +5 -4
  42. package/lib/deployment/resume-deployment-service.js +18 -21
  43. package/lib/deployment/resume-deployment-service.js.map +1 -1
  44. package/lib/deployment/sf-cli-integration.d.ts +5 -2
  45. package/lib/deployment/sf-cli-integration.js +26 -14
  46. package/lib/deployment/sf-cli-integration.js.map +1 -1
  47. package/lib/deployment/special-deployment-plan.js +36 -49
  48. package/lib/deployment/special-deployment-plan.js.map +1 -1
  49. package/lib/deployment/start-execution-service.js +1 -1
  50. package/lib/deployment/start-execution-service.js.map +1 -1
  51. package/lib/presentation/release-report-presenter.d.ts +10 -0
  52. package/lib/presentation/release-report-presenter.js +35 -0
  53. package/lib/presentation/release-report-presenter.js.map +1 -0
  54. package/lib/presentation/validate-command-presenter.js +13 -0
  55. package/lib/presentation/validate-command-presenter.js.map +1 -1
  56. package/lib/reports/release-report-builder.d.ts +6 -0
  57. package/lib/reports/release-report-builder.js +115 -0
  58. package/lib/reports/release-report-builder.js.map +1 -0
  59. package/lib/reports/release-report-command-adapter.d.ts +14 -0
  60. package/lib/reports/release-report-command-adapter.js +28 -0
  61. package/lib/reports/release-report-command-adapter.js.map +1 -0
  62. package/lib/reports/release-report-facts-factory.d.ts +14 -0
  63. package/lib/reports/release-report-facts-factory.js +140 -0
  64. package/lib/reports/release-report-facts-factory.js.map +1 -0
  65. package/lib/reports/release-report-sanitizer.d.ts +5 -0
  66. package/lib/reports/release-report-sanitizer.js +120 -0
  67. package/lib/reports/release-report-sanitizer.js.map +1 -0
  68. package/lib/reports/release-report-service.d.ts +43 -0
  69. package/lib/reports/release-report-service.js +80 -0
  70. package/lib/reports/release-report-service.js.map +1 -0
  71. package/lib/reports/release-report-store.d.ts +30 -0
  72. package/lib/reports/release-report-store.js +57 -0
  73. package/lib/reports/release-report-store.js.map +1 -0
  74. package/lib/reports/start-release-report-coordinator.d.ts +15 -0
  75. package/lib/reports/start-release-report-coordinator.js +23 -0
  76. package/lib/reports/start-release-report-coordinator.js.map +1 -0
  77. package/lib/services/metadata-scanner-service.js +12 -2
  78. package/lib/services/metadata-scanner-service.js.map +1 -1
  79. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +2 -1
  80. package/lib/services/scanners/automation-ai-metadata-scanner.js +48 -0
  81. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
  82. package/lib/types/index.d.ts +2 -0
  83. package/lib/types/index.js +2 -0
  84. package/lib/types/index.js.map +1 -1
  85. package/lib/types/metadata-capability.d.ts +39 -0
  86. package/lib/types/metadata-capability.js +2 -0
  87. package/lib/types/metadata-capability.js.map +1 -0
  88. package/lib/types/metadata.d.ts +7 -1
  89. package/lib/types/release-report.d.ts +89 -0
  90. package/lib/types/release-report.js +42 -0
  91. package/lib/types/release-report.js.map +1 -0
  92. package/messages/metadata.gaps.json +12 -0
  93. package/messages/start.json +2 -0
  94. package/messages/validate.json +3 -1
  95. package/npm-shrinkwrap.json +417 -901
  96. package/oclif.lock +415 -718
  97. package/oclif.manifest.json +93 -10
  98. package/package.json +18 -14
@@ -0,0 +1,277 @@
1
+ import * as path from 'node:path';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { SfdxProjectDetector } from '../scanner/sfdx-project-detector.js';
4
+ import { findDirectories, findFiles, fileExists } from '../services/scanners/scanner-runtime.js';
5
+ import { parseXml } from '../utils/xml.js';
6
+ import { metadataCapabilityRegistry } from './metadata-capability-registry.js';
7
+ const SOURCE_DIRECTORY_TYPES = {
8
+ aiAuthoringBundles: 'AiAuthoringBundle',
9
+ aura: 'AuraDefinitionBundle',
10
+ bots: 'Bot',
11
+ brandingSets: 'BrandingSet',
12
+ classes: 'ApexClass',
13
+ customMetadata: 'CustomMetadataRecord',
14
+ digitalExperiences: 'DigitalExperienceBundle',
15
+ email: 'EmailTemplate',
16
+ embeddedServiceConfigs: 'EmbeddedServiceConfig',
17
+ flexipages: 'FlexiPage',
18
+ flows: 'Flow',
19
+ genAiPlannerBundles: 'GenAiPlannerBundle',
20
+ genAiPromptTemplates: 'GenAiPromptTemplate',
21
+ layouts: 'Layout',
22
+ lwc: 'LightningComponentBundle',
23
+ networks: 'Network',
24
+ objects: 'CustomObject',
25
+ applications: 'CustomApplication',
26
+ pages: 'VisualforcePage',
27
+ permissionsets: 'PermissionSet',
28
+ profiles: 'Profile',
29
+ queues: 'Queue',
30
+ sites: 'CustomSite',
31
+ standardValueSets: 'StandardValueSet',
32
+ triggers: 'ApexTrigger',
33
+ };
34
+ const FILE_SUFFIX_TYPES = [
35
+ ['.cls-meta.xml', 'ApexClass'],
36
+ ['.trigger-meta.xml', 'ApexTrigger'],
37
+ ['.flow-meta.xml', 'Flow'],
38
+ ['.flexipage-meta.xml', 'FlexiPage'],
39
+ ['.layout-meta.xml', 'Layout'],
40
+ ['.permissionset-meta.xml', 'PermissionSet'],
41
+ ['.profile-meta.xml', 'Profile'],
42
+ ['.bot-meta.xml', 'Bot'],
43
+ ['.botVersion-meta.xml', 'BotVersion'],
44
+ ['.site-meta.xml', 'CustomSite'],
45
+ ['.network-meta.xml', 'Network'],
46
+ ['.queue-meta.xml', 'Queue'],
47
+ ['.standardValueSet-meta.xml', 'StandardValueSet'],
48
+ ['.embeddedServiceConfig-meta.xml', 'EmbeddedServiceConfig'],
49
+ ['.app-meta.xml', 'CustomApplication'],
50
+ ['.matchingRule-meta.xml', 'MatchingRules'],
51
+ ];
52
+ export class MetadataGapAnalysisService {
53
+ capabilityRegistry;
54
+ constructor(capabilityRegistry = metadataCapabilityRegistry) {
55
+ this.capabilityRegistry = capabilityRegistry;
56
+ }
57
+ async analyze(options = {}) {
58
+ const sourcePath = options.sourcePath ?? process.cwd();
59
+ const project = await SfdxProjectDetector.detect(sourcePath);
60
+ if (!project.detected) {
61
+ throw new Error(`SFDX project not found in ${sourcePath}`);
62
+ }
63
+ const evidenceByType = new Map();
64
+ await this.collectManifestTypes(project.projectRoot, evidenceByType);
65
+ await Promise.all(project.packageDirectories.map((packageDir) => this.collectSourceTypes(packageDir, project.projectRoot, evidenceByType)));
66
+ const detectedTypes = [...evidenceByType.values()]
67
+ .map((entry) => this.toDetectedType(project.projectRoot, project.apiVersion, entry))
68
+ .sort((left, right) => left.metadataType.localeCompare(right.metadataType));
69
+ const gaps = detectedTypes.filter((type) => type.supportStatus !== 'supported').map((type) => this.toGap(type));
70
+ const result = {
71
+ success: true,
72
+ analysisMode: options.aiExplain === true ? 'deterministic-with-ai-context' : 'deterministic',
73
+ projectRoot: project.projectRoot,
74
+ apiVersion: project.apiVersion,
75
+ detectedTypes,
76
+ gaps,
77
+ summary: {
78
+ detectedTypeCount: detectedTypes.length,
79
+ supportedTypeCount: detectedTypes.filter((type) => type.supportStatus === 'supported').length,
80
+ gapCount: gaps.length,
81
+ humanReviewCount: gaps.filter((gap) => gap.requiresHumanReview).length,
82
+ },
83
+ };
84
+ if (options.aiExplain === true) {
85
+ result.aiContext = this.buildAIContext(result);
86
+ }
87
+ return result;
88
+ }
89
+ async collectManifestTypes(projectRoot, evidenceByType) {
90
+ const manifestFiles = await findFiles(projectRoot, '**/{package,destructiveChanges,destructiveChangesPre,destructiveChangesPost}.xml');
91
+ await Promise.all(manifestFiles.map(async (manifestPath) => {
92
+ const parsed = parseXml(await readFile(manifestPath, 'utf-8'));
93
+ const entries = toArray(parsed.Package?.types);
94
+ for (const entry of entries) {
95
+ if (typeof entry.name !== 'string' || entry.name.length === 0) {
96
+ continue;
97
+ }
98
+ const members = toArray(entry.members);
99
+ const memberCount = members.length;
100
+ this.addEvidence(evidenceByType, entry.name, `${manifestPath}${memberCount > 0 ? ` (${memberCount} members)` : ''}`, 'package-manifest');
101
+ }
102
+ }));
103
+ }
104
+ async collectSourceTypes(packageDir, projectRoot, evidenceByType) {
105
+ if (!(await fileExists(packageDir))) {
106
+ return;
107
+ }
108
+ const metadataFiles = await findFiles(packageDir, '**/*-meta.xml');
109
+ for (const filePath of metadataFiles) {
110
+ const inferredType = inferTypeFromFilePath(filePath);
111
+ if (inferredType) {
112
+ this.addEvidence(evidenceByType, inferredType, filePath, 'source-path');
113
+ }
114
+ }
115
+ const directories = await findDirectories(packageDir, '**/*');
116
+ for (const directoryPath of directories) {
117
+ const relativeParts = path.relative(projectRoot, directoryPath).split(path.sep);
118
+ const type = relativeParts.map((part) => SOURCE_DIRECTORY_TYPES[part]).find((value) => value !== undefined);
119
+ if (type) {
120
+ this.addEvidence(evidenceByType, type, directoryPath, 'source-path');
121
+ }
122
+ }
123
+ }
124
+ addEvidence(evidenceByType, metadataType, evidence, detectedFrom) {
125
+ const entry = evidenceByType.get(metadataType) ??
126
+ {
127
+ metadataType,
128
+ evidence: new Set(),
129
+ detectedFrom: new Set(),
130
+ };
131
+ entry.evidence.add(evidence);
132
+ entry.detectedFrom.add(detectedFrom);
133
+ evidenceByType.set(metadataType, entry);
134
+ }
135
+ toDetectedType(projectRoot, apiVersion, entry) {
136
+ return {
137
+ metadataType: entry.metadataType,
138
+ supportStatus: getSupportStatus(this.capabilityRegistry, entry.metadataType, apiVersion),
139
+ evidence: [...entry.evidence].map((evidence) => relativizeEvidence(projectRoot, evidence)).sort(),
140
+ detectedFrom: [...entry.detectedFrom].sort(),
141
+ };
142
+ }
143
+ toGap(type) {
144
+ const classification = classifyGap(type.metadataType, type.supportStatus);
145
+ return {
146
+ ...type,
147
+ classification,
148
+ reason: describeClassification(type.metadataType, type.supportStatus, classification),
149
+ suggestedImplementation: suggestImplementation(type.metadataType, type.supportStatus, classification),
150
+ requiresHumanReview: classification === 'provider-owned' || classification === 'human-review-required',
151
+ };
152
+ }
153
+ buildAIContext(result) {
154
+ const gapLines = result.gaps.length === 0
155
+ ? ['No metadata support gaps detected.']
156
+ : result.gaps.map((gap) => `- ${gap.metadataType}: ${gap.classification}, ${gap.supportStatus}, evidence=${gap.evidence.join(', ')}`);
157
+ return {
158
+ mode: 'workflow-prompt',
159
+ directProviderApiAllowed: false,
160
+ recommendedCommand: 'sf setup-agents workflow run --story PLUGIN-AI-METADATA-GAP-DETECTION',
161
+ prompt: [
162
+ 'Analyze this deterministic smart-deployment metadata gap report.',
163
+ 'Do not call provider APIs from the plugin runtime.',
164
+ 'For safe gaps, propose scoped code, fixture, and test changes.',
165
+ 'For provider-owned or human-review gaps, keep them blocked and explain the review evidence needed.',
166
+ '',
167
+ `Project root: ${result.projectRoot}`,
168
+ `API version: ${result.apiVersion}`,
169
+ `Detected metadata types: ${result.summary.detectedTypeCount}`,
170
+ `Gap count: ${result.summary.gapCount}`,
171
+ '',
172
+ ...gapLines,
173
+ ].join('\n'),
174
+ };
175
+ }
176
+ }
177
+ function inferTypeFromFilePath(filePath) {
178
+ const fileName = path.basename(filePath);
179
+ const explicit = FILE_SUFFIX_TYPES.find(([suffix]) => fileName.endsWith(suffix));
180
+ if (explicit) {
181
+ return explicit[1];
182
+ }
183
+ const genericSuffix = /\.([A-Za-z][A-Za-z0-9]*)-meta\.xml$/u.exec(fileName);
184
+ return genericSuffix ? toMetadataTypeName(genericSuffix[1]) : undefined;
185
+ }
186
+ function toMetadataTypeName(rawType) {
187
+ return rawType
188
+ .split(/[-_]/u)
189
+ .filter((part) => part.length > 0)
190
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
191
+ .join('');
192
+ }
193
+ function getSupportStatus(registry, metadataType, apiVersion) {
194
+ const entry = registry.resolve(metadataType, apiVersion);
195
+ if (entry?.capabilities.discovery.status === 'proven') {
196
+ return 'supported';
197
+ }
198
+ return entry?.capabilities.ordering.status === 'proven' ? 'ordered-only' : 'unsupported';
199
+ }
200
+ function classifyGap(metadataType, supportStatus) {
201
+ if (isProviderOwned(metadataType)) {
202
+ return 'provider-owned';
203
+ }
204
+ if (isHumanReviewRequired(metadataType)) {
205
+ return 'human-review-required';
206
+ }
207
+ if (isOrderingSpecial(metadataType)) {
208
+ return 'ordering-special';
209
+ }
210
+ if (supportStatus === 'ordered-only' || needsDependencyRules(metadataType)) {
211
+ return 'dependency-rule';
212
+ }
213
+ return 'registry-only';
214
+ }
215
+ function isProviderOwned(metadataType) {
216
+ return /(Ai|Einstein|GenAi|Ml|Bot|DigitalExperience|Experience|Network|Site|Lwr)/u.test(metadataType);
217
+ }
218
+ function isHumanReviewRequired(metadataType) {
219
+ return /(Profile|Permission|Sharing|Territory|License|AuthProvider|ConnectedApp|Certificate|Credential)/u.test(metadataType);
220
+ }
221
+ function isOrderingSpecial(metadataType) {
222
+ return /(Settings|Credential|RemoteSite|ExternalData|DataSource|CspTrusted|CorsWhitelist)/u.test(metadataType);
223
+ }
224
+ function needsDependencyRules(metadataType) {
225
+ return /(Rule|Layout|Field|Object|Flow|Action|Application|RecordType|Duplicate|Matching|Assignment|Escalation)/u.test(metadataType);
226
+ }
227
+ function describeClassification(metadataType, supportStatus, classification) {
228
+ if (supportStatus === 'ordered-only') {
229
+ return `${metadataType} has deployment ordering but no scanner/parser coverage, so dependency behavior is not proven.`;
230
+ }
231
+ const descriptions = {
232
+ 'registry-only': `${metadataType} appears to be a simple metadata type that may only need registry and fixture coverage.`,
233
+ 'dependency-rule': `${metadataType} likely references other metadata and needs parser or dependency rules before it is safe.`,
234
+ 'ordering-special': `${metadataType} likely has deployment ordering constraints that must be validated before support is enabled.`,
235
+ 'provider-owned': `${metadataType} may require provider publish, activation, or lifecycle handling outside standard metadata deploy.`,
236
+ 'human-review-required': `${metadataType} affects security, access, credentials, or org-level behavior and requires explicit review.`,
237
+ };
238
+ return descriptions[classification];
239
+ }
240
+ function suggestImplementation(metadataType, supportStatus, classification) {
241
+ const suggestions = [
242
+ `Add ${metadataType} fixtures covering package.xml and source-path detection.`,
243
+ 'Add metadata gap analysis unit coverage before marking the type supported.',
244
+ ];
245
+ if (supportStatus === 'unsupported') {
246
+ suggestions.push('Add deployment ordering only after fixture validation proves safe ordering.');
247
+ }
248
+ if (classification === 'dependency-rule') {
249
+ suggestions.push('Add parser or dependency extraction rules for referenced metadata.');
250
+ }
251
+ else if (classification === 'ordering-special') {
252
+ suggestions.push('Add explicit ordering tests and deploy-validate evidence.');
253
+ }
254
+ else if (classification === 'provider-owned') {
255
+ suggestions.push('Define publish/activate lifecycle handling or keep the type blocked.');
256
+ }
257
+ else if (classification === 'human-review-required') {
258
+ suggestions.push('Require human review before enabling deploy automation for this type.');
259
+ }
260
+ else {
261
+ suggestions.push('Register the type as scanner-supported only after deterministic fixture tests pass.');
262
+ }
263
+ return suggestions;
264
+ }
265
+ function toArray(value) {
266
+ if (value === undefined) {
267
+ return [];
268
+ }
269
+ return Array.isArray(value) ? value : [value];
270
+ }
271
+ function relativizeEvidence(projectRoot, evidence) {
272
+ const suffix = evidence.match(/ \(\d+ members\)$/u)?.[0] ?? '';
273
+ const pathPart = suffix ? evidence.slice(0, -suffix.length) : evidence;
274
+ const relative = path.isAbsolute(pathPart) ? path.relative(projectRoot, pathPart) : pathPart;
275
+ return suffix ? `${relative}${suffix}` : relative;
276
+ }
277
+ //# sourceMappingURL=metadata-gap-analysis-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-gap-analysis-service.js","sourceRoot":"","sources":["../../src/analysis/metadata-gap-analysis-service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { SfCommand } from '@salesforce/sf-plugins-core';
2
2
  import { type SpecialDeploymentPlan } from '../deployment/special-deployment-plan.js';
3
- export default class CiPublish extends SfCommand<SpecialDeploymentPlan> {
3
+ import { type ReleaseReportCommandOutput } from '../reports/release-report-command-adapter.js';
4
+ type CiPublishResult = SpecialDeploymentPlan & ReleaseReportCommandOutput;
5
+ export default class CiPublish extends SfCommand<CiPublishResult> {
4
6
  static readonly aliases: string[];
5
7
  static readonly summary = "Build a coordinated metadata, Agentforce, LWR, and OmniStudio publish plan for CI.";
6
8
  static readonly examples: string[];
@@ -11,7 +13,9 @@ export default class CiPublish extends SfCommand<SpecialDeploymentPlan> {
11
13
  'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
14
  'auto-activate': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
15
  };
14
- run(): Promise<SpecialDeploymentPlan>;
16
+ run(): Promise<CiPublishResult>;
17
+ private finalizeReleaseReport;
15
18
  private reportPlan;
16
19
  private reportExecutionFailure;
17
20
  }
21
+ export {};
@@ -1,8 +1,11 @@
1
1
  import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
2
- import { SpecialDeploymentPlanExecutor } from '../deployment/special-deployment-executor.js';
2
+ import { SpecialDeploymentPlanExecutor, } from '../deployment/special-deployment-executor.js';
3
3
  import { SpecialDeploymentPlanService } from '../deployment/special-deployment-plan.js';
4
+ import { ReleaseReportCommandAdapter, } from '../reports/release-report-command-adapter.js';
5
+ import { buildCiPublishReportFacts } from '../reports/release-report-facts-factory.js';
4
6
  import { getLogger } from '../utils/logger.js';
5
7
  const logger = getLogger('CiPublishCommand');
8
+ const releaseReportAdapter = new ReleaseReportCommandAdapter();
6
9
  export default class CiPublish extends SfCommand {
7
10
  static aliases = ['smart-deployment ci-publish'];
8
11
  static summary = 'Build a coordinated metadata, Agentforce, LWR, and OmniStudio publish plan for CI.';
@@ -47,22 +50,34 @@ export default class CiPublish extends SfCommand {
47
50
  autoActivate,
48
51
  });
49
52
  this.reportPlan(plan);
53
+ let execution;
54
+ let resultPlan = plan;
55
+ let executionFailure;
50
56
  if (!dryRun) {
51
- const execution = await new SpecialDeploymentPlanExecutor().execute(plan);
57
+ execution = await new SpecialDeploymentPlanExecutor().execute(plan);
52
58
  if (!execution.success) {
53
59
  const message = execution.errors[0] ?? 'Coordinated publish failed.';
54
- const failedPlan = {
60
+ executionFailure = message;
61
+ resultPlan = {
55
62
  ...plan,
56
63
  success: false,
57
64
  errors: [...plan.errors, message],
58
65
  };
59
66
  this.reportExecutionFailure(execution.failedPhase, execution.exitCode, message);
60
- return failedPlan;
61
67
  }
62
- this.log('');
63
- this.log('Coordinated publish execution completed successfully.');
68
+ else {
69
+ this.log('');
70
+ this.log('Coordinated publish execution completed successfully.');
71
+ }
64
72
  }
65
- return plan;
73
+ const result = await this.finalizeReleaseReport(resultPlan, execution);
74
+ if (executionFailure)
75
+ this.error(executionFailure);
76
+ return result;
77
+ }
78
+ async finalizeReleaseReport(plan, execution) {
79
+ const releaseReport = await releaseReportAdapter.finalize(this, { kind: 'succeeded', value: plan }, buildCiPublishReportFacts(plan, execution), { projectRoot: plan.projectRoot });
80
+ return { ...plan, ...releaseReport };
66
81
  }
67
82
  reportPlan(plan) {
68
83
  this.log('Coordinated publish plan');
@@ -93,7 +108,7 @@ export default class CiPublish extends SfCommand {
93
108
  }
94
109
  reportExecutionFailure(failedPhase, exitCode, message) {
95
110
  this.log('');
96
- this.error(`Coordinated publish failed in phase ${failedPhase ?? 'unknown'} with exit code ${exitCode ?? 'unknown'}: ${message}`);
111
+ this.warn(`Coordinated publish failed in phase ${failedPhase ?? 'unknown'} with exit code ${exitCode ?? 'unknown'}: ${message}`);
97
112
  }
98
113
  }
99
114
  //# sourceMappingURL=ci-publish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ci-publish.js","sourceRoot":"","sources":["../../src/commands/ci-publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ci-publish.js","sourceRoot":"","sources":["../../src/commands/ci-publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { SfCommand } from '@salesforce/sf-plugins-core';
2
+ import { type MetadataGapAnalysisResult } from '../../analysis/metadata-gap-analysis-service.js';
3
+ export default class MetadataGaps extends SfCommand<MetadataGapAnalysisResult> {
4
+ static readonly aliases: string[];
5
+ static readonly summary: string;
6
+ static readonly description: string;
7
+ static readonly examples: string[];
8
+ static readonly flags: {
9
+ 'source-path': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'ai-explain': import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<MetadataGapAnalysisResult>;
13
+ private withJsonConsoleSuppressed;
14
+ private reportResult;
15
+ }
@@ -0,0 +1,84 @@
1
+ import { Messages } from '@salesforce/core';
2
+ import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
3
+ import { MetadataGapAnalysisService, } from '../../analysis/metadata-gap-analysis-service.js';
4
+ import { getLogger } from '../../utils/logger.js';
5
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
6
+ const messages = Messages.loadMessages('@jterrats/smart-deployment', 'metadata.gaps');
7
+ const logger = getLogger('MetadataGapsCommand');
8
+ const metadataGapAnalysisService = new MetadataGapAnalysisService();
9
+ export default class MetadataGaps extends SfCommand {
10
+ static aliases = ['smart-deployment metadata gaps'];
11
+ static summary = messages.getMessage('summary');
12
+ static description = messages.getMessage('description');
13
+ static examples = messages.getMessages('examples');
14
+ static flags = {
15
+ 'source-path': Flags.string({
16
+ summary: messages.getMessage('flags.source-path.summary'),
17
+ description: messages.getMessage('flags.source-path.description'),
18
+ }),
19
+ 'ai-explain': Flags.boolean({
20
+ summary: messages.getMessage('flags.ai-explain.summary'),
21
+ description: messages.getMessage('flags.ai-explain.description'),
22
+ default: false,
23
+ }),
24
+ };
25
+ async run() {
26
+ const { flags } = await this.parse(MetadataGaps);
27
+ try {
28
+ const result = await this.withJsonConsoleSuppressed(async () => metadataGapAnalysisService.analyze({
29
+ sourcePath: typeof flags['source-path'] === 'string' ? flags['source-path'] : undefined,
30
+ aiExplain: flags['ai-explain'] === true,
31
+ }));
32
+ if (!this.jsonEnabled()) {
33
+ this.reportResult(result);
34
+ }
35
+ return result;
36
+ }
37
+ catch (error) {
38
+ logger.error('Metadata gap analysis failed', { error });
39
+ this.error(`Metadata gap analysis failed: ${error instanceof Error ? error.message : String(error)}`);
40
+ }
41
+ }
42
+ async withJsonConsoleSuppressed(operation) {
43
+ if (!this.jsonEnabled()) {
44
+ return operation();
45
+ }
46
+ // eslint-disable-next-line no-console
47
+ const originalLog = console.log;
48
+ // eslint-disable-next-line no-console
49
+ const originalWarn = console.warn;
50
+ try {
51
+ // eslint-disable-next-line no-console
52
+ console.log = () => { };
53
+ // eslint-disable-next-line no-console
54
+ console.warn = () => { };
55
+ return await operation();
56
+ }
57
+ finally {
58
+ // eslint-disable-next-line no-console
59
+ console.log = originalLog;
60
+ // eslint-disable-next-line no-console
61
+ console.warn = originalWarn;
62
+ }
63
+ }
64
+ reportResult(result) {
65
+ this.log('Smart deployment metadata gaps');
66
+ this.log(`Analysis mode: ${result.analysisMode}`);
67
+ this.log(`Detected metadata types: ${result.summary.detectedTypeCount}`);
68
+ this.log(`Supported metadata types: ${result.summary.supportedTypeCount}`);
69
+ this.log(`Gaps: ${result.summary.gapCount}`);
70
+ this.log(`Human review required: ${result.summary.humanReviewCount}`);
71
+ if (result.gaps.length > 0) {
72
+ this.log('');
73
+ this.log('Unsupported or incomplete metadata support');
74
+ for (const gap of result.gaps) {
75
+ this.log(`- ${gap.metadataType}: ${gap.classification} (${gap.supportStatus})`);
76
+ }
77
+ }
78
+ if (result.aiContext) {
79
+ this.log('');
80
+ this.log(`AI workflow context: ${result.aiContext.recommendedCommand}`);
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=gaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gaps.js","sourceRoot":"","sources":["../../../src/commands/metadata/gaps.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ export default class Resume extends SfCommand {
26
26
  static flags = {
27
27
  'target-org': Flags.string({
28
28
  summary: messages.getMessage('flags.target-org.summary'),
29
+ char: 'o',
29
30
  }),
30
31
  'source-path': Flags.directory({
31
32
  summary: messages.getMessage('flags.source-path.summary'),
@@ -38,15 +39,15 @@ export default class Resume extends SfCommand {
38
39
  }),
39
40
  };
40
41
  async run() {
41
- const { flags } = await this.parse(Resume);
42
+ const parseResult = await this.parse(Resume);
43
+ const { flags } = parseResult;
42
44
  const sourcePath = typeof flags['source-path'] === 'string' ? flags['source-path'] : undefined;
45
+ const targetOrg = this.getTargetOrgIdentifier(flags['target-org']);
43
46
  try {
44
47
  logger.info('Resuming deployment', { flags });
45
48
  const retryStrategy = flags['retry-strategy'];
46
49
  const resumeService = new ResumeDeploymentService(new StateManager({ baseDir: sourcePath }));
47
- const summary = await resumeService.prepareResume(retryStrategy, {
48
- targetOrg: this.getTargetOrgIdentifier(flags['target-org']),
49
- });
50
+ const summary = await resumeService.prepareResume(retryStrategy, { targetOrg });
50
51
  presenter.reportResumePreparation(this, summary, retryStrategy);
51
52
  return {
52
53
  success: true,
@@ -1 +1 @@
1
- {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@
17
17
  */
18
18
  import { type Interfaces } from '@oclif/core';
19
19
  import { SfCommand } from '@salesforce/sf-plugins-core';
20
+ import type { ReleaseReportV1 } from '../types/release-report.js';
20
21
  /**
21
22
  * @ac US-046-AC-1: Analyzes metadata automatically
22
23
  * @ac US-046-AC-2: Generates deployment waves
@@ -34,8 +35,10 @@ type StartResult = {
34
35
  commits: string[];
35
36
  changedComponents: string[];
36
37
  dependencyComponents: string[];
38
+ explicitComponents: string[];
37
39
  includedComponents: string[];
38
40
  ignoredComponents: string[];
41
+ manifestPath?: string;
39
42
  };
40
43
  rollback?: {
41
44
  enabled: boolean;
@@ -54,6 +57,9 @@ type StartResult = {
54
57
  inferredDependencies?: number;
55
58
  inferenceFallback?: boolean;
56
59
  };
60
+ releaseReport?: ReleaseReportV1;
61
+ releaseReportPath?: string;
62
+ releaseReportWarning?: string;
57
63
  };
58
64
  export default class Start extends SfCommand<StartResult> {
59
65
  static readonly aliases: string[];