@jterrats/smart-deployment 1.2.6 → 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 (171) hide show
  1. package/README.md +69 -1
  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/analysis/project-analysis-service.d.ts +5 -0
  12. package/lib/analysis/project-analysis-service.js +18 -0
  13. package/lib/analysis/project-analysis-service.js.map +1 -1
  14. package/lib/commands/ci/preset.d.ts +25 -0
  15. package/lib/commands/ci/preset.js +125 -0
  16. package/lib/commands/ci/preset.js.map +1 -0
  17. package/lib/commands/ci-publish.d.ts +6 -2
  18. package/lib/commands/ci-publish.js +23 -8
  19. package/lib/commands/ci-publish.js.map +1 -1
  20. package/lib/commands/graph/export.d.ts +20 -0
  21. package/lib/commands/graph/export.js +107 -0
  22. package/lib/commands/graph/export.js.map +1 -0
  23. package/lib/commands/impact.d.ts +18 -0
  24. package/lib/commands/impact.js +105 -0
  25. package/lib/commands/impact.js.map +1 -0
  26. package/lib/commands/init.d.ts +19 -0
  27. package/lib/commands/init.js +83 -0
  28. package/lib/commands/init.js.map +1 -0
  29. package/lib/commands/metadata/gaps.d.ts +15 -0
  30. package/lib/commands/metadata/gaps.js +84 -0
  31. package/lib/commands/metadata/gaps.js.map +1 -0
  32. package/lib/commands/plan/explain.d.ts +14 -0
  33. package/lib/commands/plan/explain.js +134 -0
  34. package/lib/commands/plan/explain.js.map +1 -0
  35. package/lib/commands/resume.d.ts +1 -0
  36. package/lib/commands/resume.js +19 -4
  37. package/lib/commands/resume.js.map +1 -1
  38. package/lib/commands/retrieve.d.ts +20 -0
  39. package/lib/commands/retrieve.js +111 -0
  40. package/lib/commands/retrieve.js.map +1 -0
  41. package/lib/commands/start.d.ts +27 -0
  42. package/lib/commands/start.js +159 -20
  43. package/lib/commands/start.js.map +1 -1
  44. package/lib/commands/status.d.ts +1 -0
  45. package/lib/commands/status.js +19 -4
  46. package/lib/commands/status.js.map +1 -1
  47. package/lib/commands/validate.d.ts +15 -0
  48. package/lib/commands/validate.js +37 -1
  49. package/lib/commands/validate.js.map +1 -1
  50. package/lib/config/init-config-generation-service.d.ts +27 -0
  51. package/lib/config/init-config-generation-service.js +88 -0
  52. package/lib/config/init-config-generation-service.js.map +1 -0
  53. package/lib/config/repo-config.d.ts +25 -0
  54. package/lib/config/repo-config.js.map +1 -1
  55. package/lib/constants/deployment-order.js +1 -0
  56. package/lib/constants/deployment-order.js.map +1 -1
  57. package/lib/dependencies/impact-analysis-service.d.ts +77 -0
  58. package/lib/dependencies/impact-analysis-service.js +234 -0
  59. package/lib/dependencies/impact-analysis-service.js.map +1 -0
  60. package/lib/deployment/ci-preset-service.d.ts +44 -0
  61. package/lib/deployment/ci-preset-service.js +65 -0
  62. package/lib/deployment/ci-preset-service.js.map +1 -0
  63. package/lib/deployment/commit-scope-service.d.ts +50 -0
  64. package/lib/deployment/commit-scope-service.js +292 -0
  65. package/lib/deployment/commit-scope-service.js.map +1 -0
  66. package/lib/deployment/deployment-context-service.d.ts +3 -0
  67. package/lib/deployment/deployment-context-service.js +1 -0
  68. package/lib/deployment/deployment-context-service.js.map +1 -1
  69. package/lib/deployment/deployment-error-diagnostics.d.ts +11 -0
  70. package/lib/deployment/deployment-error-diagnostics.js +187 -0
  71. package/lib/deployment/deployment-error-diagnostics.js.map +1 -0
  72. package/lib/deployment/deployment-runner.d.ts +1 -0
  73. package/lib/deployment/deployment-runner.js +37 -16
  74. package/lib/deployment/deployment-runner.js.map +1 -1
  75. package/lib/deployment/deployment-status-service.d.ts +10 -2
  76. package/lib/deployment/deployment-status-service.js +74 -3
  77. package/lib/deployment/deployment-status-service.js.map +1 -1
  78. package/lib/deployment/deployment-validation-service.d.ts +5 -0
  79. package/lib/deployment/deployment-validation-service.js +34 -4
  80. package/lib/deployment/deployment-validation-service.js.map +1 -1
  81. package/lib/deployment/plan-explain-service.d.ts +88 -0
  82. package/lib/deployment/plan-explain-service.js +171 -0
  83. package/lib/deployment/plan-explain-service.js.map +1 -0
  84. package/lib/deployment/resume-deployment-service.d.ts +7 -2
  85. package/lib/deployment/resume-deployment-service.js +24 -3
  86. package/lib/deployment/resume-deployment-service.js.map +1 -1
  87. package/lib/deployment/retrieve-forceignore-service.d.ts +51 -0
  88. package/lib/deployment/retrieve-forceignore-service.js +139 -0
  89. package/lib/deployment/retrieve-forceignore-service.js.map +1 -0
  90. package/lib/deployment/rollback-planning-service.d.ts +49 -0
  91. package/lib/deployment/rollback-planning-service.js +178 -0
  92. package/lib/deployment/rollback-planning-service.js.map +1 -0
  93. package/lib/deployment/sf-cli-integration.d.ts +7 -0
  94. package/lib/deployment/sf-cli-integration.js +35 -3
  95. package/lib/deployment/sf-cli-integration.js.map +1 -1
  96. package/lib/deployment/special-deployment-plan.js +36 -49
  97. package/lib/deployment/special-deployment-plan.js.map +1 -1
  98. package/lib/deployment/start-execution-service.d.ts +1 -0
  99. package/lib/deployment/start-execution-service.js +14 -8
  100. package/lib/deployment/start-execution-service.js.map +1 -1
  101. package/lib/deployment/wave-manifest-service.d.ts +8 -0
  102. package/lib/deployment/wave-manifest-service.js +39 -20
  103. package/lib/deployment/wave-manifest-service.js.map +1 -1
  104. package/lib/presentation/plan-explain-presenter.d.ts +9 -0
  105. package/lib/presentation/plan-explain-presenter.js +40 -0
  106. package/lib/presentation/plan-explain-presenter.js.map +1 -0
  107. package/lib/presentation/release-report-presenter.d.ts +10 -0
  108. package/lib/presentation/release-report-presenter.js +35 -0
  109. package/lib/presentation/release-report-presenter.js.map +1 -0
  110. package/lib/presentation/start-command-presenter.d.ts +4 -0
  111. package/lib/presentation/start-command-presenter.js +4 -0
  112. package/lib/presentation/start-command-presenter.js.map +1 -1
  113. package/lib/presentation/validate-command-presenter.js +13 -0
  114. package/lib/presentation/validate-command-presenter.js.map +1 -1
  115. package/lib/reports/deployment-plan-report-service.d.ts +76 -0
  116. package/lib/reports/deployment-plan-report-service.js +234 -0
  117. package/lib/reports/deployment-plan-report-service.js.map +1 -0
  118. package/lib/reports/graph-export-service.d.ts +85 -0
  119. package/lib/reports/graph-export-service.js +296 -0
  120. package/lib/reports/graph-export-service.js.map +1 -0
  121. package/lib/reports/release-report-builder.d.ts +6 -0
  122. package/lib/reports/release-report-builder.js +115 -0
  123. package/lib/reports/release-report-builder.js.map +1 -0
  124. package/lib/reports/release-report-command-adapter.d.ts +14 -0
  125. package/lib/reports/release-report-command-adapter.js +28 -0
  126. package/lib/reports/release-report-command-adapter.js.map +1 -0
  127. package/lib/reports/release-report-facts-factory.d.ts +14 -0
  128. package/lib/reports/release-report-facts-factory.js +140 -0
  129. package/lib/reports/release-report-facts-factory.js.map +1 -0
  130. package/lib/reports/release-report-sanitizer.d.ts +5 -0
  131. package/lib/reports/release-report-sanitizer.js +120 -0
  132. package/lib/reports/release-report-sanitizer.js.map +1 -0
  133. package/lib/reports/release-report-service.d.ts +43 -0
  134. package/lib/reports/release-report-service.js +80 -0
  135. package/lib/reports/release-report-service.js.map +1 -0
  136. package/lib/reports/release-report-store.d.ts +30 -0
  137. package/lib/reports/release-report-store.js +57 -0
  138. package/lib/reports/release-report-store.js.map +1 -0
  139. package/lib/reports/start-release-report-coordinator.d.ts +15 -0
  140. package/lib/reports/start-release-report-coordinator.js +23 -0
  141. package/lib/reports/start-release-report-coordinator.js.map +1 -0
  142. package/lib/services/metadata-scanner-service.js +14 -2
  143. package/lib/services/metadata-scanner-service.js.map +1 -1
  144. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +3 -1
  145. package/lib/services/scanners/automation-ai-metadata-scanner.js +87 -0
  146. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
  147. package/lib/types/index.d.ts +2 -0
  148. package/lib/types/index.js +2 -0
  149. package/lib/types/index.js.map +1 -1
  150. package/lib/types/metadata-capability.d.ts +39 -0
  151. package/lib/types/metadata-capability.js +2 -0
  152. package/lib/types/metadata-capability.js.map +1 -0
  153. package/lib/types/metadata.d.ts +7 -1
  154. package/lib/types/release-report.d.ts +89 -0
  155. package/lib/types/release-report.js +42 -0
  156. package/lib/types/release-report.js.map +1 -0
  157. package/messages/ci.preset.json +22 -0
  158. package/messages/graph.export.json +20 -0
  159. package/messages/impact.json +18 -0
  160. package/messages/init.json +16 -0
  161. package/messages/metadata.gaps.json +12 -0
  162. package/messages/plan.explain.json +20 -0
  163. package/messages/resume.json +1 -0
  164. package/messages/retrieve.json +26 -0
  165. package/messages/start.json +18 -2
  166. package/messages/status.json +1 -0
  167. package/messages/validate.json +5 -1
  168. package/npm-shrinkwrap.json +436 -945
  169. package/oclif.lock +446 -746
  170. package/oclif.manifest.json +975 -116
  171. package/package.json +26 -21
@@ -1,5 +1,7 @@
1
- import type { MetadataComponent } from '../../types/metadata.js';
1
+ import type { AiEvaluationDefinition, MetadataComponent } from '../../types/metadata.js';
2
2
  export declare function parseFlowComponent(filePath: string): Promise<MetadataComponent | undefined>;
3
3
  export declare function parseBotComponent(filePath: string): Promise<MetadataComponent | undefined>;
4
4
  export declare function parseAiAuthoringBundleComponent(filePath: string): MetadataComponent;
5
+ export declare function parseAiEvaluationDefinitionComponent(filePath: string): Promise<AiEvaluationDefinition>;
6
+ export declare function parseGenAiPlannerBundleComponent(directoryPath: string): Promise<MetadataComponent>;
5
7
  export declare function parseGenAiPromptComponent(filePath: string): Promise<MetadataComponent | undefined>;
@@ -3,6 +3,7 @@ import * as path from 'node:path';
3
3
  import { parseBot } from '../../parsers/bot-parser.js';
4
4
  import { parseFlow } from '../../parsers/flow-parser.js';
5
5
  import { parseGenAiPrompt } from '../../parsers/genai-prompt-parser.js';
6
+ import { parseSalesforceMetadata } from '../../utils/xml.js';
6
7
  function addAll(target, values, defaultType) {
7
8
  for (const value of values) {
8
9
  target.add(defaultType && !value.includes(':') ? `${defaultType}:${value}` : value);
@@ -54,6 +55,92 @@ export function parseAiAuthoringBundleComponent(filePath) {
54
55
  priorityBoost: 0,
55
56
  };
56
57
  }
58
+ export async function parseAiEvaluationDefinitionComponent(filePath) {
59
+ const parsed = await parseSalesforceMetadata(filePath);
60
+ const definition = parsed.AiEvaluationDefinition;
61
+ if (!definition) {
62
+ throw new Error('Expected AiEvaluationDefinition root element.');
63
+ }
64
+ const subjectName = requiredString(definition.subjectName, 'subjectName');
65
+ const subjectType = requiredString(definition.subjectType, 'subjectType');
66
+ if (subjectType !== 'AGENT') {
67
+ throw new Error(`Unsupported subjectType "${subjectType}"; expected "AGENT".`);
68
+ }
69
+ const subjectVersion = optionalString(definition.subjectVersion);
70
+ const dependencyNodeId = `Bot:${subjectName}`;
71
+ return {
72
+ name: path.basename(filePath, '.aiEvaluationDefinition-meta.xml'),
73
+ type: 'AiEvaluationDefinition',
74
+ filePath,
75
+ subjectName,
76
+ subjectType,
77
+ subjectVersion,
78
+ dependencies: new Set([dependencyNodeId]),
79
+ dependencyDetails: [
80
+ {
81
+ nodeId: dependencyNodeId,
82
+ kind: 'hard',
83
+ source: 'parser',
84
+ reason: 'AiEvaluationDefinition subjectName identifies the evaluated Agentforce Bot.',
85
+ },
86
+ ],
87
+ dependents: new Set(),
88
+ priorityBoost: 0,
89
+ };
90
+ }
91
+ export async function parseGenAiPlannerBundleComponent(directoryPath) {
92
+ const bundleName = path.basename(directoryPath);
93
+ const deps = await parseGenAiPlannerBundleDependencies(directoryPath);
94
+ return {
95
+ name: bundleName,
96
+ type: 'GenAiPlannerBundle',
97
+ filePath: directoryPath,
98
+ dependencies: deps,
99
+ dependents: new Set(),
100
+ priorityBoost: 0,
101
+ };
102
+ }
103
+ async function parseGenAiPlannerBundleDependencies(directoryPath) {
104
+ const deps = new Set();
105
+ const entries = await fs.readdir(directoryPath, { recursive: true, withFileTypes: true });
106
+ const files = entries
107
+ .filter((entry) => entry.isFile())
108
+ .map((entry) => path.join(entry.parentPath, entry.name))
109
+ .filter((filePath) => /\.(?:json|xml|yaml|yml)$/iu.test(filePath));
110
+ const contents = await Promise.all(files.map((filePath) => fs.readFile(filePath, 'utf8')));
111
+ for (const content of contents) {
112
+ collectNamedReferences(deps, content, ['flow', 'flowName', 'targetFlow', 'subflow'], 'Flow');
113
+ collectNamedReferences(deps, content, ['apexClass', 'apexAction', 'invocableApexClass'], 'ApexClass');
114
+ collectNamedReferences(deps, content, ['prompt', 'promptTemplate', 'genAiPromptTemplate'], 'GenAiPromptTemplate');
115
+ }
116
+ return deps;
117
+ }
118
+ function collectNamedReferences(dependencies, content, propertyNames, metadataType) {
119
+ for (const propertyName of propertyNames) {
120
+ const quotedProperty = new RegExp(`"${propertyName}"\\s*:\\s*"([^"/]+)"`, 'giu');
121
+ const xmlElement = new RegExp(`<${propertyName}>([^<]+)</${propertyName}>`, 'giu');
122
+ for (const match of content.matchAll(quotedProperty)) {
123
+ dependencies.add(`${metadataType}:${match[1]}`);
124
+ }
125
+ for (const match of content.matchAll(xmlElement)) {
126
+ dependencies.add(`${metadataType}:${match[1]}`);
127
+ }
128
+ }
129
+ }
130
+ function requiredString(value, fieldName) {
131
+ const normalized = optionalString(value);
132
+ if (!normalized) {
133
+ throw new Error(`Missing required ${fieldName}.`);
134
+ }
135
+ return normalized;
136
+ }
137
+ function optionalString(value) {
138
+ if (typeof value !== 'string') {
139
+ return undefined;
140
+ }
141
+ const normalized = value.trim();
142
+ return normalized || undefined;
143
+ }
57
144
  export async function parseGenAiPromptComponent(filePath) {
58
145
  const promptName = path.basename(filePath, '.genAiPromptTemplate-meta.xml');
59
146
  const parsed = await parseGenAiPrompt(filePath, promptName);
@@ -1 +1 @@
1
- {"version":3,"file":"automation-ai-metadata-scanner.js","sourceRoot":"","sources":["../../../src/services/scanners/automation-ai-metadata-scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"automation-ai-metadata-scanner.js","sourceRoot":"","sources":["../../../src/services/scanners/automation-ai-metadata-scanner.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@
5
5
  * This provides a single import source for consumers.
6
6
  */
7
7
  export * from './metadata.js';
8
+ export * from './metadata-capability.js';
9
+ export * from './release-report.js';
8
10
  export * from './dependency.js';
9
11
  export * from './deployment.js';
10
12
  export * from './graph.js';
@@ -6,6 +6,8 @@
6
6
  */
7
7
  // Core metadata types
8
8
  export * from './metadata.js';
9
+ export * from './metadata-capability.js';
10
+ export * from './release-report.js';
9
11
  // Dependency graph types
10
12
  export * from './dependency.js';
11
13
  // Deployment types
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sBAAsB;AACtB,cAAc,eAAe,CAAC;AAE9B,yBAAyB;AACzB,cAAc,iBAAiB,CAAC;AAEhC,mBAAmB;AACnB,cAAc,iBAAiB,CAAC;AAEhC,wBAAwB;AACxB,cAAc,YAAY,CAAC;AAE3B,0BAA0B;AAC1B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sBAAsB;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AAEpC,yBAAyB;AACzB,cAAc,iBAAiB,CAAC;AAEhC,mBAAmB;AACnB,cAAc,iBAAiB,CAAC;AAEhC,wBAAwB;AACxB,cAAc,YAAY,CAAC;AAE3B,0BAA0B;AAC1B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,39 @@
1
+ export type MetadataDeploymentChannel = 'metadata-api' | 'source-format-composite' | 'managed-package-data' | 'provider-lifecycle' | 'external-provider' | 'unknown';
2
+ export type MetadataCanonicalOwner = 'C1' | 'C2' | 'C3' | 'C4' | 'C5' | 'C6' | 'C7' | 'legacy-repository';
3
+ export type MetadataCapabilityStatus = 'proven' | 'partial' | 'absent' | 'not-applicable';
4
+ export type MetadataCapabilityEvidenceSource = {
5
+ id: string;
6
+ kind: 'repository' | 'vendor-documentation' | 'org-validation';
7
+ locator: string;
8
+ retrievedAt?: string;
9
+ };
10
+ export type MetadataCapabilityEvidenceReference = {
11
+ sourceId: string;
12
+ detail: string;
13
+ };
14
+ export type MetadataCapabilityEvidence = {
15
+ status: MetadataCapabilityStatus;
16
+ evidence: readonly MetadataCapabilityEvidenceReference[];
17
+ };
18
+ export type MetadataCapabilities = {
19
+ discovery: MetadataCapabilityEvidence;
20
+ parsing: MetadataCapabilityEvidence;
21
+ dependencies: MetadataCapabilityEvidence;
22
+ ordering: MetadataCapabilityEvidence;
23
+ lifecycle: MetadataCapabilityEvidence;
24
+ fixtures: MetadataCapabilityEvidence;
25
+ };
26
+ export type MetadataCapabilityDefinition = {
27
+ apiVersion: string;
28
+ minimumApiVersion: string;
29
+ deploymentChannel: MetadataDeploymentChannel;
30
+ vendorType: string;
31
+ canonicalType: string;
32
+ internalAliases: readonly string[];
33
+ canonicalOwner: MetadataCanonicalOwner;
34
+ capabilities: MetadataCapabilities;
35
+ evidenceSources: readonly MetadataCapabilityEvidenceSource[];
36
+ };
37
+ export type MetadataCapabilityEntry = MetadataCapabilityDefinition & {
38
+ catalogKey: string;
39
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metadata-capability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-capability.js","sourceRoot":"","sources":["../../src/types/metadata-capability.ts"],"names":[],"mappings":""}
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * @see https://developer.salesforce.com/docs/metadata-coverage/61
11
11
  */
12
- export type MetadataType = 'GlobalValueSet' | 'StandardValueSet' | 'CustomLabels' | 'Translations' | 'StandardValueSetTranslation' | 'CustomObject' | 'CustomSetting' | 'DataCategoryGroup' | 'CustomMetadata' | 'CustomMetadataRecord' | 'CustomField' | 'ObjectTranslation' | 'RecordType' | 'BusinessProcess' | 'ValidationRule' | 'WorkflowRule' | 'OrgSettings' | 'CorsWhitelistOrigin' | 'CspTrustedSite' | 'Role' | 'DelegateGroup' | 'Group' | 'CustomPermission' | 'ExternalCredential' | 'NamedCredential' | 'DataSourceObject' | 'StaticResource' | 'Document' | 'ContentAsset' | 'EmailTemplate' | 'ApexClass' | 'VisualforceComponent' | 'VisualforcePage' | 'LightningComponentBundle' | 'AuraDefinitionBundle' | 'ApexTrigger' | 'ServicePresenceStatus' | 'PresenceUserConfig' | 'Queue' | 'ServiceChannel' | 'QueueRoutingConfig' | 'ChannelLayout' | 'MilestoneType' | 'EntitlementProcess' | 'GenAiFunction' | 'GenAiPromptTemplate' | 'GenAiPlannerBundle' | 'Flow' | 'PathAssistant' | 'Layout' | 'Bot' | 'BotVersion' | 'AiAuthoringBundle' | 'GenAiPlugin' | 'FlexiPage' | 'QuickAction' | 'CompactLayout' | 'ListView' | 'WebLink' | 'LightningApp' | 'SearchCustomization' | 'CustomNotificationType' | 'BrandingSet' | 'DigitalExperienceConfig' | 'CustomSite' | 'Site' | 'DigitalExperience' | 'DigitalExperienceBundle' | 'NetworkBranding' | 'Network' | 'EmbeddedServiceConfig' | 'MessagingChannel' | 'OmniSupervisorConfig' | 'SharingRules' | 'PermissionSet' | 'MutingPermissionSet' | 'PermissionSetGroup' | 'Profile' | 'ApexTestSuite' | 'DataPackageKitDefinition' | 'DataPackageKitObject';
12
+ export type MetadataType = 'GlobalValueSet' | 'StandardValueSet' | 'CustomLabels' | 'Translations' | 'StandardValueSetTranslation' | 'CustomObject' | 'CustomSetting' | 'DataCategoryGroup' | 'CustomMetadata' | 'CustomMetadataRecord' | 'CustomField' | 'ObjectTranslation' | 'RecordType' | 'BusinessProcess' | 'ValidationRule' | 'WorkflowRule' | 'OrgSettings' | 'CorsWhitelistOrigin' | 'CspTrustedSite' | 'Role' | 'DelegateGroup' | 'Group' | 'CustomPermission' | 'ExternalCredential' | 'NamedCredential' | 'DataSourceObject' | 'StaticResource' | 'Document' | 'ContentAsset' | 'EmailTemplate' | 'ApexClass' | 'VisualforceComponent' | 'VisualforcePage' | 'LightningComponentBundle' | 'AuraDefinitionBundle' | 'ApexTrigger' | 'ServicePresenceStatus' | 'PresenceUserConfig' | 'Queue' | 'ServiceChannel' | 'QueueRoutingConfig' | 'ChannelLayout' | 'MilestoneType' | 'EntitlementProcess' | 'GenAiFunction' | 'GenAiPromptTemplate' | 'GenAiPlannerBundle' | 'Flow' | 'PathAssistant' | 'Layout' | 'Bot' | 'BotVersion' | 'AiAuthoringBundle' | 'AiEvaluationDefinition' | 'GenAiPlugin' | 'FlexiPage' | 'QuickAction' | 'CompactLayout' | 'ListView' | 'WebLink' | 'LightningApp' | 'SearchCustomization' | 'CustomNotificationType' | 'BrandingSet' | 'DigitalExperienceConfig' | 'CustomSite' | 'Site' | 'DigitalExperience' | 'DigitalExperienceBundle' | 'NetworkBranding' | 'Network' | 'EmbeddedServiceConfig' | 'MessagingChannel' | 'OmniSupervisorConfig' | 'SharingRules' | 'PermissionSet' | 'MutingPermissionSet' | 'PermissionSetGroup' | 'Profile' | 'ApexTestSuite' | 'DataPackageKitDefinition' | 'DataPackageKitObject';
13
13
  export type MetadataDependencyKind = 'hard' | 'soft' | 'inferred';
14
14
  export type MetadataDependencyReference = {
15
15
  /** Target node ID in the graph, e.g. Type:Name */
@@ -87,6 +87,12 @@ export type CustomMetadataRecord = MetadataComponent & {
87
87
  type: 'CustomMetadataRecord';
88
88
  metadataTypeName: string;
89
89
  };
90
+ export type AiEvaluationDefinition = MetadataComponent & {
91
+ type: 'AiEvaluationDefinition';
92
+ subjectName: string;
93
+ subjectType: 'AGENT';
94
+ subjectVersion?: string;
95
+ };
90
96
  /**
91
97
  * Archivo de metadata físico en el proyecto
92
98
  */
@@ -0,0 +1,89 @@
1
+ export declare const RELEASE_REPORT_SCHEMA_VERSION: "1.0";
2
+ export declare const RELEASE_ANALYSIS_MODES: readonly ["deterministic", "ai_enriched"];
3
+ export declare const RELEASE_ENRICHMENT_STATUSES: readonly ["available", "unavailable", "partial", "skipped"];
4
+ export declare const RELEASE_OUTCOMES: readonly ["succeeded", "failed", "partial", "skipped"];
5
+ export declare const RELEASE_OPERATIONS: readonly ["deploy", "publish", "activate", "validate"];
6
+ export declare const RELEASE_STATUSES: readonly ["succeeded", "failed", "skipped", "needs_review"];
7
+ export declare const RELEASE_PHASE_IDS: readonly ["core-metadata", "agentforce-publish", "agentforce-activate", "ai-evaluations", "community-publish", "omnistudio-vlocity", "validation"];
8
+ export declare const RELEASE_ROUTES: readonly ["salesforce-metadata", "agentforce", "ai-evaluation", "experience-cloud", "omnistudio", "validation"];
9
+ export declare const RELEASE_EVIDENCE_TOOLS: readonly ["sf", "vlocity", "smart-deployment"];
10
+ export type ReleaseAnalysisMode = (typeof RELEASE_ANALYSIS_MODES)[number];
11
+ export type ReleaseEnrichmentStatus = (typeof RELEASE_ENRICHMENT_STATUSES)[number];
12
+ export type ReleaseOutcome = (typeof RELEASE_OUTCOMES)[number];
13
+ export type ReleaseOperation = (typeof RELEASE_OPERATIONS)[number];
14
+ export type ReleaseStatus = (typeof RELEASE_STATUSES)[number];
15
+ export type ReleasePhaseId = (typeof RELEASE_PHASE_IDS)[number];
16
+ export type ReleaseRoute = (typeof RELEASE_ROUTES)[number];
17
+ export type ReleaseEvidenceTool = (typeof RELEASE_EVIDENCE_TOOLS)[number];
18
+ export declare const RELEASE_PHASE_ORDER: Readonly<Record<ReleasePhaseId, number>>;
19
+ export declare const RELEASE_ROUTE_ORDER: Readonly<Record<ReleaseRoute, number>>;
20
+ export type ReleaseCommandEvidenceV1 = {
21
+ tool: ReleaseEvidenceTool;
22
+ operationId: string;
23
+ exitCode?: number;
24
+ deploymentId?: string;
25
+ artifact?: string;
26
+ };
27
+ export type ReleaseEnrichmentV1 = {
28
+ status: ReleaseEnrichmentStatus;
29
+ warnings?: string[];
30
+ };
31
+ export type ReleasePhaseV1 = {
32
+ id: ReleasePhaseId;
33
+ route: ReleaseRoute;
34
+ operation: ReleaseOperation;
35
+ status: ReleaseStatus;
36
+ evidence?: ReleaseCommandEvidenceV1[];
37
+ remediation?: string[];
38
+ };
39
+ export type ReleaseItemV1 = {
40
+ phaseId: ReleasePhaseId;
41
+ metadataType: string;
42
+ fullName: string;
43
+ route: ReleaseRoute;
44
+ operation: ReleaseOperation;
45
+ status: ReleaseStatus;
46
+ targetOrg?: string;
47
+ evidenceReferences?: string[];
48
+ remediation?: string[];
49
+ };
50
+ export type ReleaseSummaryV1 = {
51
+ total: number;
52
+ succeeded: number;
53
+ failed: number;
54
+ skipped: number;
55
+ needsReview: number;
56
+ };
57
+ export type ReleaseReportV1 = {
58
+ schemaVersion: typeof RELEASE_REPORT_SCHEMA_VERSION;
59
+ generatedAt: string;
60
+ command: string;
61
+ targetOrg?: string;
62
+ analysisMode: ReleaseAnalysisMode;
63
+ enrichment: ReleaseEnrichmentV1;
64
+ outcome: ReleaseOutcome;
65
+ summary: ReleaseSummaryV1;
66
+ phases: ReleasePhaseV1[];
67
+ items: ReleaseItemV1[];
68
+ reportWarnings: string[];
69
+ };
70
+ export type ReleaseReportFacts = {
71
+ command: string;
72
+ targetOrg?: string;
73
+ analysisMode: ReleaseAnalysisMode;
74
+ enrichment: ReleaseEnrichmentV1;
75
+ outcome: ReleaseOutcome;
76
+ phases: ReleasePhaseFact[];
77
+ items: ReleaseItemFact[];
78
+ reportWarnings?: string[];
79
+ };
80
+ export type ReleaseFactStatus = ReleaseStatus | 'unknown' | 'inapplicable';
81
+ export type ReleasePhaseFact = Omit<ReleasePhaseV1, 'status'> & {
82
+ status: ReleaseFactStatus;
83
+ };
84
+ export type ReleaseItemFact = Omit<ReleaseItemV1, 'status'> & {
85
+ status: ReleaseFactStatus;
86
+ };
87
+ export type ReleaseReportClock = {
88
+ now: () => Date;
89
+ };
@@ -0,0 +1,42 @@
1
+ export const RELEASE_REPORT_SCHEMA_VERSION = '1.0';
2
+ export const RELEASE_ANALYSIS_MODES = ['deterministic', 'ai_enriched'];
3
+ export const RELEASE_ENRICHMENT_STATUSES = ['available', 'unavailable', 'partial', 'skipped'];
4
+ export const RELEASE_OUTCOMES = ['succeeded', 'failed', 'partial', 'skipped'];
5
+ export const RELEASE_OPERATIONS = ['deploy', 'publish', 'activate', 'validate'];
6
+ export const RELEASE_STATUSES = ['succeeded', 'failed', 'skipped', 'needs_review'];
7
+ export const RELEASE_PHASE_IDS = [
8
+ 'core-metadata',
9
+ 'agentforce-publish',
10
+ 'agentforce-activate',
11
+ 'ai-evaluations',
12
+ 'community-publish',
13
+ 'omnistudio-vlocity',
14
+ 'validation',
15
+ ];
16
+ export const RELEASE_ROUTES = [
17
+ 'salesforce-metadata',
18
+ 'agentforce',
19
+ 'ai-evaluation',
20
+ 'experience-cloud',
21
+ 'omnistudio',
22
+ 'validation',
23
+ ];
24
+ export const RELEASE_EVIDENCE_TOOLS = ['sf', 'vlocity', 'smart-deployment'];
25
+ export const RELEASE_PHASE_ORDER = {
26
+ 'core-metadata': 0,
27
+ 'agentforce-publish': 1,
28
+ 'agentforce-activate': 2,
29
+ 'ai-evaluations': 3,
30
+ 'community-publish': 4,
31
+ 'omnistudio-vlocity': 5,
32
+ validation: 6,
33
+ };
34
+ export const RELEASE_ROUTE_ORDER = {
35
+ 'salesforce-metadata': 0,
36
+ agentforce: 1,
37
+ 'ai-evaluation': 2,
38
+ 'experience-cloud': 3,
39
+ omnistudio: 4,
40
+ validation: 5,
41
+ };
42
+ //# sourceMappingURL=release-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-report.js","sourceRoot":"","sources":["../../src/types/release-report.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAc,CAAC;AAE5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,eAAe,EAAE,aAAa,CAAU,CAAC;AAChF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AACvG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AACzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAU,CAAC;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,mBAAmB;IACnB,oBAAoB;IACpB,YAAY;CACJ,CAAC;AACX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,qBAAqB;IACrB,YAAY;IACZ,eAAe;IACf,kBAAkB;IAClB,YAAY;IACZ,YAAY;CACJ,CAAC;AACX,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAU,CAAC;AAWrF,MAAM,CAAC,MAAM,mBAAmB,GAA6C;IAC3E,eAAe,EAAE,CAAC;IAClB,oBAAoB,EAAE,CAAC;IACvB,qBAAqB,EAAE,CAAC;IACxB,gBAAgB,EAAE,CAAC;IACnB,mBAAmB,EAAE,CAAC;IACtB,oBAAoB,EAAE,CAAC;IACvB,UAAU,EAAE,CAAC;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAA2C;IACzE,qBAAqB,EAAE,CAAC;IACxB,UAAU,EAAE,CAAC;IACb,eAAe,EAAE,CAAC;IAClB,kBAAkB,EAAE,CAAC;IACrB,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,CAAC;CACd,CAAC"}
@@ -0,0 +1,22 @@
1
+ {
2
+ "summary": "Run the CI deployment planning preset",
3
+ "description": "Builds a validation-safe deployment plan, writes JSON and HTML report artifacts, emits GitHub Actions output keys, and returns deterministic CI exit codes.",
4
+ "examples": [
5
+ "<%= config.bin %> <%= command.id %> --source-path force-app --target-org dev --report-dir reports/deployment-plan",
6
+ "<%= config.bin %> smart-deployment ci preset --validation-mode warn-only --skip-tests"
7
+ ],
8
+ "flags.source-path.summary": "Salesforce source path to analyze",
9
+ "flags.source-path.description": "Path to the Salesforce source directory used to build the deployment plan.",
10
+ "flags.report-dir.summary": "Directory where JSON and HTML deployment plan reports are written",
11
+ "flags.report-dir.description": "Defaults to the deployment plan report service location under the analyzed project.",
12
+ "flags.validation-mode.summary": "CI exit-code policy for deployment planning blockers",
13
+ "flags.validation-mode.description": "strict exits non-zero for blockers, warn-only reports blockers with exit code 0, and local-only avoids org-dependent validation expectations.",
14
+ "flags.skip-tests.summary": "Record that Apex tests should be skipped by downstream validation",
15
+ "flags.use-ai.summary": "Use configured AI providers for dependency inference and wave priority analysis",
16
+ "flags.org-type.summary": "Target org type used by AI wave priority analysis",
17
+ "flags.industry.summary": "Industry context used by AI wave priority analysis",
18
+ "flags.scope-commits.summary": "Comma-separated commit SHAs or refs to include in the CI deployment scope",
19
+ "flags.scope-commits.description": "Limits CI plan artifacts to metadata changed by these commits plus required dependencies.",
20
+ "flags.scope-manifest.summary": "Path to a JSON commit or story scope manifest",
21
+ "flags.scope-manifest.description": "Reads commits from { commits: [] } and { stories: [{ commits: [] }] } for trunk-based validation."
22
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "summary": "Export dependency and deployment wave graphs",
3
+ "description": "Builds the local dependency graph and deployment waves, then exports review-ready graph artifacts in Mermaid, DOT, JSON, or HTML format.",
4
+ "examples": [
5
+ "<%= config.bin %> <%= command.id %> --source-path force-app --format mermaid --report-dir reports/graphs",
6
+ "<%= config.bin %> smart-deployment graph export --format html --output reports/dependency-graph.html",
7
+ "<%= config.bin %> smart-deployment graph export --json --format json"
8
+ ],
9
+ "flags.source-path.summary": "Salesforce source path to analyze",
10
+ "flags.source-path.description": "Path to the Salesforce source directory used to build the dependency and wave graph.",
11
+ "flags.report-dir.summary": "Directory where the selected graph artifact is written",
12
+ "flags.report-dir.description": "Defaults to .smart-deployment/reports/graph-export under the analyzed project root.",
13
+ "flags.output.summary": "Exact output file path for the selected graph format",
14
+ "flags.output.description": "Overrides --report-dir and writes the selected graph artifact to this file.",
15
+ "flags.format.summary": "Graph export format",
16
+ "flags.format.description": "Supported formats are mermaid, dot, json, and html.",
17
+ "flags.use-ai.summary": "Use configured AI providers for dependency inference and wave priority analysis before exporting",
18
+ "flags.org-type.summary": "Target org type used by AI wave priority analysis",
19
+ "flags.industry.summary": "Industry context used by AI wave priority analysis"
20
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "summary": "Analyze deployment impact from git changes",
3
+ "description": "Maps git changes to Salesforce metadata components, expands transitive dependents, reports planned deployment waves, and suggests Apex tests for CI decisions.",
4
+ "examples": [
5
+ "<%= config.bin %> <%= command.id %> --base origin/main --head HEAD --json",
6
+ "<%= config.bin %> smart-deployment impact --working-tree --source-path force-app"
7
+ ],
8
+ "flags.source-path.summary": "Salesforce source path to analyze",
9
+ "flags.source-path.description": "Path to the Salesforce source directory used to build the dependency graph and deployment waves.",
10
+ "flags.base.summary": "Base git ref for impact analysis",
11
+ "flags.base.description": "Git ref at the start of the comparison range. Must be provided with --head.",
12
+ "flags.head.summary": "Head git ref for impact analysis",
13
+ "flags.head.description": "Git ref at the end of the comparison range. Must be provided with --base.",
14
+ "flags.working-tree.summary": "Analyze current working-tree changes",
15
+ "flags.working-tree.description": "Uses git status to include staged, unstaged, and untracked working-tree changes. This is the default when --base and --head are omitted.",
16
+ "flags.max-depth.summary": "Maximum dependent traversal depth",
17
+ "flags.max-depth.description": "Limits transitive dependent traversal. Omit for unlimited depth."
18
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "summary": "Initialize Smart Deployment repository config",
3
+ "description": "Detects Salesforce project source settings and writes .smart-deployment.json defaults for cache policy, CI preset behavior, and report locations.",
4
+ "examples": [
5
+ "<%= config.bin %> <%= command.id %>",
6
+ "<%= config.bin %> smart-deployment init --source-path force-app --validation-mode warn-only --non-interactive",
7
+ "<%= config.bin %> smart-deployment init --force --no-cache-enabled"
8
+ ],
9
+ "flags.source-path.summary": "Path used to detect the Salesforce project and default package directory",
10
+ "flags.force.summary": "Overwrite an existing .smart-deployment.json file",
11
+ "flags.cache-enabled.summary": "Enable file-hash cache defaults in generated config",
12
+ "flags.validation-mode.summary": "Default validation mode for the CI preset",
13
+ "flags.report-dir.summary": "Default report directory for CI preset plan artifacts",
14
+ "flags.skip-tests.summary": "Default skip-tests setting for CI preset config",
15
+ "flags.non-interactive.summary": "Run with deterministic defaults suitable for CI automation"
16
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "summary": "Analyze unsupported Salesforce metadata types",
3
+ "description": "Scans package manifests and Salesforce source paths, compares detected metadata types against smart-deployment support, and reports safe next steps for unsupported or partially supported metadata.",
4
+ "examples": [
5
+ "<%= config.bin %> <%= command.id %> --source-path force-app --json",
6
+ "<%= config.bin %> smart-deployment metadata gaps --ai-explain"
7
+ ],
8
+ "flags.source-path.summary": "Salesforce project or source path to scan",
9
+ "flags.source-path.description": "Path used to locate sfdx-project.json and scan configured package directories.",
10
+ "flags.ai-explain.summary": "Include workflow-ready AI explanation context",
11
+ "flags.ai-explain.description": "Adds a deterministic prompt and setup-agents workflow command for Codex-assisted review. The plugin does not call an AI provider directly."
12
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "summary": "Explain why metadata components are placed in deployment waves",
3
+ "description": "Builds the same local plan used by start dry-run and explains wave placement, dependency edges, unresolved references, and provider-owned deployment decisions.",
4
+ "examples": [
5
+ "<%= config.bin %> <%= command.id %> --source-path force-app",
6
+ "<%= config.bin %> smart-deployment plan explain --use-ai --org-type Sandbox --target-org dev"
7
+ ],
8
+ "flags.source-path.summary": "Salesforce source path to analyze",
9
+ "flags.dry-run.summary": "Accepted for parity with start dry-run; explain never deploys metadata",
10
+ "flags.validate-only.summary": "Accepted for parity with start validate-only; explain never deploys metadata",
11
+ "flags.skip-tests.summary": "Accepted for parity with start dry-run inputs; explain never runs tests",
12
+ "flags.allow-cycle-remediation.summary": "Accepted for parity with start dry-run inputs; explain does not modify sources",
13
+ "flags.use-ai.summary": "Use configured AI providers for dependency inference and wave priority analysis",
14
+ "flags.org-type.summary": "Target org type used by AI wave priority analysis",
15
+ "flags.industry.summary": "Industry context used by AI wave priority analysis",
16
+ "flags.since.summary": "Git ref used to explain changed provider-owned metadata decisions",
17
+ "flags.auto-activate.summary": "Include Agentforce activation decisions in provider-owned metadata planning",
18
+ "flags.scope-commits.summary": "Comma-separated commit SHAs or refs to include in the explained plan",
19
+ "flags.scope-manifest.summary": "Path to a JSON commit or story scope manifest"
20
+ }
@@ -4,6 +4,7 @@
4
4
  "<%= config.bin %> <%= command.id %> --source-path force-app",
5
5
  "<%= config.bin %> <%= command.id %> --source-path force-app --retry-strategy quick"
6
6
  ],
7
+ "flags.target-org.summary": "Target Salesforce org alias or username for remote deployment resume",
7
8
  "flags.source-path.summary": "Path to the Salesforce project containing deployment state",
8
9
  "flags.retry-strategy.summary": "Retry strategy to use when resuming the deployment"
9
10
  }
@@ -0,0 +1,26 @@
1
+ {
2
+ "summary": "Retrieve Salesforce metadata while enforcing .forceignore for bundle sub-paths",
3
+ "description": "Wraps sf project retrieve start, then restores any changed paths protected by .forceignore. This protects DigitalExperienceBundle, LightningComponentBundle, and AuraDefinitionBundle leaf paths that the Salesforce CLI can write as part of composite retrieves.",
4
+ "examples": [
5
+ "<%= config.bin %> <%= command.id %> --metadata DigitalExperienceBundle:site/PHP_Portal1 --target-org dev",
6
+ "<%= config.bin %> <%= command.id %> --metadata DigitalExperienceBundle:site/PHP_Portal1 --strict-ignore",
7
+ "<%= config.bin %> <%= command.id %> --metadata DigitalExperienceBundle:site/PHP_Portal1 --normalize-meta"
8
+ ],
9
+ "flags.source-path.summary": "Salesforce project path where retrieve should run",
10
+ "flags.source-path.description": "Defaults to the current working directory when omitted.",
11
+ "flags.metadata.summary": "Metadata component(s) to retrieve, comma-separated",
12
+ "flags.metadata.description": "Passed through to sf project retrieve start --metadata. Example: DigitalExperienceBundle:site/PHP_Portal1.",
13
+ "flags.manifest.summary": "Package manifest to retrieve",
14
+ "flags.manifest.description": "Passed through to sf project retrieve start --manifest.",
15
+ "flags.wait.summary": "Minutes to wait for Salesforce retrieve completion",
16
+ "flags.strict-ignore.summary": "Fail when retrieve touches .forceignore-protected paths",
17
+ "flags.strict-ignore.description": "Protected paths are still restored before the command fails.",
18
+ "flags.normalize-meta.summary": "Normalize DigitalExperienceBundle *_meta.json formatting after retrieve",
19
+ "flags.normalize-meta.description": "Formats JSON with two-space indentation and a trailing newline before forceignore restoration.",
20
+ "output.title": "Smart deployment retrieve",
21
+ "output.changed": "Changed paths after retrieve: %s",
22
+ "output.restored": ".forceignore-protected paths restored: %s",
23
+ "output.normalized": "DigitalExperience *_meta.json files normalized: %s",
24
+ "output.restoredHeader": "Restored protected paths",
25
+ "errors.strict-ignore": "Retrieve touched %s .forceignore-protected path(s). Workspace was restored, but --strict-ignore requires failure."
26
+ }
@@ -5,7 +5,9 @@
5
5
  "<%= config.bin %> <%= command.id %> --source-path force-app --target-org myorg",
6
6
  "<%= config.bin %> <%= command.id %> --source-path force-app --target-org myorg --dry-run",
7
7
  "<%= config.bin %> <%= command.id %> --source-path force-app --target-org myorg --validate-only",
8
- "<%= config.bin %> <%= command.id %> --source-path force-app --target-org myorg --skip-tests"
8
+ "<%= config.bin %> <%= command.id %> --source-path force-app --target-org myorg --skip-tests",
9
+ "<%= config.bin %> <%= command.id %> --source-path force-app --target-org myorg --destructive",
10
+ "<%= config.bin %> <%= command.id %> --source-path force-app --target-org myorg --rollback-from v1.2.0 --rollback-to v1.2.1"
9
11
  ],
10
12
  "flags.target-org.summary": "Target Salesforce org for deployment",
11
13
  "flags.dry-run.summary": "Preview deployment without executing",
@@ -13,6 +15,8 @@
13
15
  "flags.skip-tests.summary": "Skip running tests during deployment",
14
16
  "flags.source-path.summary": "Path to the Salesforce project to analyze and deploy",
15
17
  "flags.source-path.description": "Defaults to the current working directory when omitted",
18
+ "flags.report-dir.summary": "Directory for dry-run deployment plan reports",
19
+ "flags.report-dir.description": "Defaults to .smart-deployment/reports/start-dry-run under the scanned project root",
16
20
  "flags.allow-cycle-remediation.summary": "Allow conservative cycle remediation for supported ApexClass cycles",
17
21
  "flags.allow-cycle-remediation.description": "Applies temporary reversible source edits for simple cycles only",
18
22
  "flags.use-ai.summary": "Use AI for intelligent priority weighting and dependency inference",
@@ -20,5 +24,17 @@
20
24
  "flags.org-type.summary": "Organization type context for AI analysis",
21
25
  "flags.org-type.description": "Helps AI provide context-aware recommendations",
22
26
  "flags.industry.summary": "Industry context for AI analysis",
23
- "flags.industry.description": "Provides business context to AI for better prioritization"
27
+ "flags.industry.description": "Provides business context to AI for better prioritization",
28
+ "flags.scope-commits.summary": "Comma-separated commit SHAs or refs to include in the deployment scope",
29
+ "flags.scope-commits.description": "Limits the deployment plan to metadata changed by these commits plus required dependencies.",
30
+ "flags.scope-manifest.summary": "Path to a JSON commit or story scope manifest",
31
+ "flags.scope-manifest.description": "Reads commits from { commits: [] } and { stories: [{ commits: [] }] } to scope validation and deployment planning.",
32
+ "flags.scope-manifest-output.summary": "Write the resolved story scope manifest for CI review",
33
+ "flags.scope-manifest-output.description": "Creates a deterministic JSON contract containing commits, changed files, included metadata, dependency-retained metadata, explicitly included metadata, and ignored metadata.",
34
+ "flags.destructive.summary": "Delete metadata components using destructive wave manifests",
35
+ "flags.destructive.description": "Runs the normal analysis path, then executes destructiveChanges manifests in reverse wave order.",
36
+ "flags.rollback-from.summary": "Git ref or release tag that represents the rollback target state",
37
+ "flags.rollback-from.description": "Use with --rollback-to. Modified or deleted metadata is restored from this ref using normal deploy waves.",
38
+ "flags.rollback-to.summary": "Git ref or release tag that represents the release being rolled back",
39
+ "flags.rollback-to.description": "Use with --rollback-from. Metadata added between refs is deleted using destructive waves."
24
40
  }
@@ -4,5 +4,6 @@
4
4
  "<%= config.bin %> <%= command.id %> --source-path force-app",
5
5
  "<%= config.bin %> <%= command.id %> --target-org myorg --source-path force-app"
6
6
  ],
7
+ "flags.target-org.summary": "Target Salesforce org alias or username for remote deployment status refresh",
7
8
  "flags.source-path.summary": "Path to the Salesforce project containing deployment state"
8
9
  }
@@ -5,5 +5,9 @@
5
5
  "<%= config.bin %> <%= command.id %> --source-path force-app --use-ai"
6
6
  ],
7
7
  "flags.source-path.summary": "Path to the Salesforce project to validate",
8
- "flags.use-ai.summary": "Use AI wave validation with the configured provider when available"
8
+ "flags.use-ai.summary": "Use configured provider AI validation when available",
9
+ "flags.scope-commits.summary": "Comma-separated commit SHAs or refs to include in validation",
10
+ "flags.scope-manifest.summary": "Path to a JSON commit or story scope manifest",
11
+ "flags.scope-manifest-output.summary": "Write the resolved story scope manifest for CI review",
12
+ "flags.scope-manifest-output.description": "Creates a deterministic JSON contract containing commits, changed files, included metadata, dependency-retained metadata, explicitly included metadata, and ignored metadata."
9
13
  }