@jterrats/smart-deployment 1.2.6 → 1.3.1

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 (115) hide show
  1. package/README.md +31 -1
  2. package/lib/analysis/project-analysis-service.d.ts +5 -0
  3. package/lib/analysis/project-analysis-service.js +18 -0
  4. package/lib/analysis/project-analysis-service.js.map +1 -1
  5. package/lib/commands/ci/preset.d.ts +25 -0
  6. package/lib/commands/ci/preset.js +125 -0
  7. package/lib/commands/ci/preset.js.map +1 -0
  8. package/lib/commands/graph/export.d.ts +20 -0
  9. package/lib/commands/graph/export.js +107 -0
  10. package/lib/commands/graph/export.js.map +1 -0
  11. package/lib/commands/impact.d.ts +18 -0
  12. package/lib/commands/impact.js +105 -0
  13. package/lib/commands/impact.js.map +1 -0
  14. package/lib/commands/init.d.ts +19 -0
  15. package/lib/commands/init.js +83 -0
  16. package/lib/commands/init.js.map +1 -0
  17. package/lib/commands/plan/explain.d.ts +14 -0
  18. package/lib/commands/plan/explain.js +134 -0
  19. package/lib/commands/plan/explain.js.map +1 -0
  20. package/lib/commands/resume.d.ts +1 -0
  21. package/lib/commands/resume.js +17 -3
  22. package/lib/commands/resume.js.map +1 -1
  23. package/lib/commands/retrieve.d.ts +20 -0
  24. package/lib/commands/retrieve.js +111 -0
  25. package/lib/commands/retrieve.js.map +1 -0
  26. package/lib/commands/start.d.ts +21 -0
  27. package/lib/commands/start.js +124 -14
  28. package/lib/commands/start.js.map +1 -1
  29. package/lib/commands/status.d.ts +1 -0
  30. package/lib/commands/status.js +15 -3
  31. package/lib/commands/status.js.map +1 -1
  32. package/lib/commands/validate.d.ts +8 -0
  33. package/lib/commands/validate.js +14 -0
  34. package/lib/commands/validate.js.map +1 -1
  35. package/lib/config/init-config-generation-service.d.ts +27 -0
  36. package/lib/config/init-config-generation-service.js +88 -0
  37. package/lib/config/init-config-generation-service.js.map +1 -0
  38. package/lib/config/repo-config.d.ts +25 -0
  39. package/lib/config/repo-config.js.map +1 -1
  40. package/lib/dependencies/impact-analysis-service.d.ts +77 -0
  41. package/lib/dependencies/impact-analysis-service.js +234 -0
  42. package/lib/dependencies/impact-analysis-service.js.map +1 -0
  43. package/lib/deployment/ci-preset-service.d.ts +44 -0
  44. package/lib/deployment/ci-preset-service.js +65 -0
  45. package/lib/deployment/ci-preset-service.js.map +1 -0
  46. package/lib/deployment/commit-scope-service.d.ts +43 -0
  47. package/lib/deployment/commit-scope-service.js +209 -0
  48. package/lib/deployment/commit-scope-service.js.map +1 -0
  49. package/lib/deployment/deployment-context-service.d.ts +3 -0
  50. package/lib/deployment/deployment-context-service.js +1 -0
  51. package/lib/deployment/deployment-context-service.js.map +1 -1
  52. package/lib/deployment/deployment-error-diagnostics.d.ts +11 -0
  53. package/lib/deployment/deployment-error-diagnostics.js +187 -0
  54. package/lib/deployment/deployment-error-diagnostics.js.map +1 -0
  55. package/lib/deployment/deployment-runner.d.ts +1 -0
  56. package/lib/deployment/deployment-runner.js +35 -15
  57. package/lib/deployment/deployment-runner.js.map +1 -1
  58. package/lib/deployment/deployment-status-service.d.ts +9 -2
  59. package/lib/deployment/deployment-status-service.js +56 -3
  60. package/lib/deployment/deployment-status-service.js.map +1 -1
  61. package/lib/deployment/deployment-validation-service.d.ts +3 -0
  62. package/lib/deployment/deployment-validation-service.js +32 -4
  63. package/lib/deployment/deployment-validation-service.js.map +1 -1
  64. package/lib/deployment/plan-explain-service.d.ts +88 -0
  65. package/lib/deployment/plan-explain-service.js +171 -0
  66. package/lib/deployment/plan-explain-service.js.map +1 -0
  67. package/lib/deployment/resume-deployment-service.d.ts +6 -2
  68. package/lib/deployment/resume-deployment-service.js +27 -3
  69. package/lib/deployment/resume-deployment-service.js.map +1 -1
  70. package/lib/deployment/retrieve-forceignore-service.d.ts +51 -0
  71. package/lib/deployment/retrieve-forceignore-service.js +139 -0
  72. package/lib/deployment/retrieve-forceignore-service.js.map +1 -0
  73. package/lib/deployment/rollback-planning-service.d.ts +49 -0
  74. package/lib/deployment/rollback-planning-service.js +178 -0
  75. package/lib/deployment/rollback-planning-service.js.map +1 -0
  76. package/lib/deployment/sf-cli-integration.d.ts +4 -0
  77. package/lib/deployment/sf-cli-integration.js +22 -2
  78. package/lib/deployment/sf-cli-integration.js.map +1 -1
  79. package/lib/deployment/start-execution-service.d.ts +1 -0
  80. package/lib/deployment/start-execution-service.js +14 -8
  81. package/lib/deployment/start-execution-service.js.map +1 -1
  82. package/lib/deployment/wave-manifest-service.d.ts +8 -0
  83. package/lib/deployment/wave-manifest-service.js +39 -20
  84. package/lib/deployment/wave-manifest-service.js.map +1 -1
  85. package/lib/presentation/plan-explain-presenter.d.ts +9 -0
  86. package/lib/presentation/plan-explain-presenter.js +40 -0
  87. package/lib/presentation/plan-explain-presenter.js.map +1 -0
  88. package/lib/presentation/start-command-presenter.d.ts +4 -0
  89. package/lib/presentation/start-command-presenter.js +4 -0
  90. package/lib/presentation/start-command-presenter.js.map +1 -1
  91. package/lib/reports/deployment-plan-report-service.d.ts +76 -0
  92. package/lib/reports/deployment-plan-report-service.js +234 -0
  93. package/lib/reports/deployment-plan-report-service.js.map +1 -0
  94. package/lib/reports/graph-export-service.d.ts +85 -0
  95. package/lib/reports/graph-export-service.js +296 -0
  96. package/lib/reports/graph-export-service.js.map +1 -0
  97. package/lib/services/metadata-scanner-service.js +4 -2
  98. package/lib/services/metadata-scanner-service.js.map +1 -1
  99. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +1 -0
  100. package/lib/services/scanners/automation-ai-metadata-scanner.js +39 -0
  101. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
  102. package/messages/ci.preset.json +22 -0
  103. package/messages/graph.export.json +20 -0
  104. package/messages/impact.json +18 -0
  105. package/messages/init.json +16 -0
  106. package/messages/plan.explain.json +20 -0
  107. package/messages/resume.json +1 -0
  108. package/messages/retrieve.json +26 -0
  109. package/messages/start.json +16 -2
  110. package/messages/status.json +1 -0
  111. package/messages/validate.json +3 -1
  112. package/npm-shrinkwrap.json +45 -70
  113. package/oclif.lock +44 -41
  114. package/oclif.manifest.json +801 -25
  115. package/package.json +9 -8
@@ -0,0 +1,296 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ const DEFAULT_REPORT_DIR = '.smart-deployment/reports/graph-export';
4
+ const FILE_NAMES = {
5
+ mermaid: 'dependency-graph.mmd',
6
+ dot: 'dependency-graph.dot',
7
+ json: 'dependency-graph.json',
8
+ html: 'dependency-graph.html',
9
+ };
10
+ export class GraphExportService {
11
+ async generate(context, options) {
12
+ const report = this.createReport(context);
13
+ const outputPath = this.resolveOutputPath(context, options);
14
+ const content = this.render(report, options.format);
15
+ await mkdir(path.dirname(outputPath), { recursive: true });
16
+ await writeFile(outputPath, content, 'utf8');
17
+ return { success: true, format: options.format, path: outputPath, report };
18
+ }
19
+ createReport(context) {
20
+ const waveByComponent = this.createWaveIndex(context.orderedWaves);
21
+ const cycles = context.scanResult.dependencyResult.circularDependencies.map((cycle) => ({
22
+ cycle: [...cycle.cycle],
23
+ severity: cycle.severity,
24
+ message: cycle.message,
25
+ }));
26
+ const cycleEdges = this.createCycleEdgeSet(cycles);
27
+ const cycleNodes = new Set(cycles.flatMap((cycle) => cycle.cycle));
28
+ const components = this.createComponents(context, waveByComponent, cycleNodes);
29
+ const edges = this.createEdges(context.scanResult.dependencyResult.edges, waveByComponent, cycleEdges);
30
+ return {
31
+ generatedAt: new Date().toISOString(),
32
+ projectRoot: context.scanResult.projectRoot,
33
+ summary: {
34
+ components: components.length,
35
+ dependencyEdges: edges.length,
36
+ waves: context.orderedWaves.length,
37
+ cycles: cycles.length,
38
+ isolatedComponents: components.filter((component) => component.isolated).length,
39
+ },
40
+ components,
41
+ edges,
42
+ waves: context.orderedWaves.map((wave) => this.createWave(wave)),
43
+ cycles,
44
+ };
45
+ }
46
+ render(report, format) {
47
+ if (format === 'mermaid')
48
+ return `${this.toMermaid(report)}\n`;
49
+ if (format === 'dot')
50
+ return `${this.toDot(report)}\n`;
51
+ if (format === 'html')
52
+ return this.toHtml(report);
53
+ return `${JSON.stringify(report, null, 2)}\n`;
54
+ }
55
+ toMermaid(report) {
56
+ const lines = ['graph TD'];
57
+ const nodesByWave = new Map();
58
+ for (const component of report.components) {
59
+ const key = component.wave ?? 'unplaced';
60
+ const group = nodesByWave.get(key) ?? [];
61
+ group.push(component);
62
+ nodesByWave.set(key, group);
63
+ }
64
+ for (const [waveNumber, components] of nodesByWave.entries()) {
65
+ const label = waveNumber === 'unplaced' ? 'Unplaced components' : `Wave ${waveNumber}`;
66
+ lines.push(` subgraph ${this.toMermaidId(`wave:${waveNumber}`)}["${escapeMermaidText(label)}"]`);
67
+ for (const component of components) {
68
+ lines.push(` ${this.toMermaidNode(component)}`);
69
+ }
70
+ lines.push(' end');
71
+ }
72
+ for (const edge of report.edges) {
73
+ const label = edge.inCycle ? 'cycle' : edge.type;
74
+ lines.push(` ${this.toMermaidId(edge.from)} -->|"${escapeMermaidText(label)}"| ${this.toMermaidId(edge.to)}`);
75
+ }
76
+ if (report.components.length === 0) {
77
+ lines.push(' empty["No components found"]');
78
+ }
79
+ lines.push(' classDef cycle fill:#fee2e2,stroke:#dc2626,stroke-width:2px');
80
+ lines.push(' classDef normal fill:#eff6ff,stroke:#2563eb,stroke-width:1px');
81
+ for (const component of report.components) {
82
+ lines.push(` class ${this.toMermaidId(component.id)} ${component.inCycle ? 'cycle' : 'normal'}`);
83
+ }
84
+ return lines.join('\n');
85
+ }
86
+ toDot(report) {
87
+ const lines = ['digraph Dependencies {', ' rankdir=LR;', ' node [shape=box, style="rounded,filled"];'];
88
+ const clustered = new Set();
89
+ for (const wave of report.waves) {
90
+ lines.push(` subgraph cluster_wave_${wave.number} {`);
91
+ lines.push(` label="${escapeDot(`Wave ${wave.number}`)}";`);
92
+ for (const componentId of wave.components) {
93
+ const component = report.components.find((candidate) => candidate.id === componentId);
94
+ if (component) {
95
+ clustered.add(component.id);
96
+ lines.push(` "${escapeDot(component.id)}" [label="${escapeDot(this.componentLabel(component))}"];`);
97
+ }
98
+ }
99
+ lines.push(' }');
100
+ }
101
+ for (const component of report.components.filter((candidate) => !clustered.has(candidate.id))) {
102
+ lines.push(` "${escapeDot(component.id)}" [label="${escapeDot(this.componentLabel(component))}", fillcolor="${component.inCycle ? '#fee2e2' : '#eff6ff'}"];`);
103
+ }
104
+ for (const edge of report.edges) {
105
+ const attributes = [
106
+ `label="${escapeDot(edge.inCycle ? 'cycle' : edge.type)}"`,
107
+ edge.inCycle ? 'color="#dc2626"' : undefined,
108
+ edge.type === 'soft' ? 'style=dashed' : undefined,
109
+ ].filter((attribute) => attribute !== undefined);
110
+ lines.push(` "${escapeDot(edge.from)}" -> "${escapeDot(edge.to)}" [${attributes.join(', ')}];`);
111
+ }
112
+ lines.push('}');
113
+ return lines.join('\n');
114
+ }
115
+ toHtml(report) {
116
+ const componentRows = report.components.length > 0
117
+ ? report.components.map((component) => this.toComponentRow(component)).join('')
118
+ : '<tr><td colspan="6">No components found.</td></tr>';
119
+ const edgeRows = report.edges.length > 0
120
+ ? report.edges.map((edge) => this.toEdgeRow(edge)).join('')
121
+ : '<tr><td colspan="6">No dependency edges found.</td></tr>';
122
+ const mermaid = this.toMermaid(report);
123
+ const dot = this.toDot(report);
124
+ return `
125
+ <!DOCTYPE html>
126
+ <html lang="en">
127
+ <head>
128
+ <meta charset="utf-8">
129
+ <title>Dependency Graph Export</title>
130
+ <style>
131
+ body { font-family: Arial, sans-serif; margin: 24px; color: #1f2937; }
132
+ table { border-collapse: collapse; width: 100%; margin-top: 1rem; }
133
+ th, td { border: 1px solid #d1d5db; padding: 8px; text-align: left; vertical-align: top; }
134
+ th { background: #f3f4f6; }
135
+ pre { background: #f9fafb; border: 1px solid #d1d5db; padding: 12px; overflow: auto; }
136
+ code { white-space: nowrap; }
137
+ .summary { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; }
138
+ .card { border: 1px solid #d1d5db; border-radius: 8px; padding: 12px; background: #fff; }
139
+ </style>
140
+ </head>
141
+ <body>
142
+ <h1>Dependency Graph Export</h1>
143
+ <p>Generated at ${escapeHtml(report.generatedAt)}</p>
144
+ <p>Project root: <code>${escapeHtml(report.projectRoot)}</code></p>
145
+ <div class="summary">
146
+ <div class="card"><strong>Components</strong><br>${report.summary.components}</div>
147
+ <div class="card"><strong>Edges</strong><br>${report.summary.dependencyEdges}</div>
148
+ <div class="card"><strong>Waves</strong><br>${report.summary.waves}</div>
149
+ <div class="card"><strong>Cycles</strong><br>${report.summary.cycles}</div>
150
+ <div class="card"><strong>Isolated</strong><br>${report.summary.isolatedComponents}</div>
151
+ </div>
152
+ <h2>Components</h2>
153
+ <table><thead><tr><th>ID</th><th>Type</th><th>Name</th><th>Wave</th><th>Cycle</th><th>File</th></tr></thead><tbody>${componentRows}</tbody></table>
154
+ <h2>Dependency Edges</h2>
155
+ <table><thead><tr><th>From</th><th>To</th><th>Type</th><th>Source</th><th>Waves</th><th>Cycle</th></tr></thead><tbody>${edgeRows}</tbody></table>
156
+ <h2>Mermaid</h2><pre>${escapeHtml(mermaid)}</pre>
157
+ <h2>DOT</h2><pre>${escapeHtml(dot)}</pre>
158
+ <h2>JSON</h2><pre>${escapeHtml(JSON.stringify(report, null, 2))}</pre>
159
+ </body>
160
+ </html>
161
+ `.trim();
162
+ }
163
+ resolveOutputPath(context, options) {
164
+ if (options.outputPath)
165
+ return path.resolve(options.outputPath);
166
+ const reportDir = options.reportDir ?? path.join(context.scanResult.projectRoot, DEFAULT_REPORT_DIR);
167
+ return path.join(reportDir, FILE_NAMES[options.format]);
168
+ }
169
+ createComponents(context, waveByComponent, cycleNodes) {
170
+ const graphNodes = new Set(context.scanResult.dependencyResult.graph.keys());
171
+ for (const dependencies of context.scanResult.dependencyResult.graph.values()) {
172
+ for (const dependency of dependencies)
173
+ graphNodes.add(dependency);
174
+ }
175
+ for (const nodeId of context.scanResult.dependencyResult.components.keys())
176
+ graphNodes.add(nodeId);
177
+ return [...graphNodes]
178
+ .sort((left, right) => left.localeCompare(right))
179
+ .map((nodeId) => {
180
+ const component = context.scanResult.dependencyResult.components.get(nodeId);
181
+ const dependencies = [...(context.scanResult.dependencyResult.graph.get(nodeId) ?? [])].sort((left, right) => left.localeCompare(right));
182
+ const dependents = [...(context.scanResult.dependencyResult.reverseGraph.get(nodeId) ?? [])].sort((left, right) => left.localeCompare(right));
183
+ const parsed = parseNodeId(nodeId, component);
184
+ return {
185
+ id: nodeId,
186
+ type: parsed.type,
187
+ name: parsed.name,
188
+ filePath: component?.filePath,
189
+ dependencies,
190
+ dependents,
191
+ wave: waveByComponent.get(nodeId),
192
+ inCycle: cycleNodes.has(nodeId),
193
+ isolated: dependencies.length === 0 && dependents.length === 0,
194
+ };
195
+ });
196
+ }
197
+ createEdges(edges, waveByComponent, cycleEdges) {
198
+ return [...edges]
199
+ .sort((left, right) => `${left.from}->${left.to}`.localeCompare(`${right.from}->${right.to}`))
200
+ .map((edge) => {
201
+ const fromWave = waveByComponent.get(edge.from);
202
+ const toWave = waveByComponent.get(edge.to);
203
+ return {
204
+ from: edge.from,
205
+ to: edge.to,
206
+ type: edge.type,
207
+ source: edge.source,
208
+ reason: edge.reason,
209
+ confidence: edge.confidence,
210
+ fromWave,
211
+ toWave,
212
+ crossesWave: fromWave !== undefined && toWave !== undefined && fromWave !== toWave,
213
+ inCycle: cycleEdges.has(edgeKey(edge.from, edge.to)),
214
+ };
215
+ });
216
+ }
217
+ createWave(wave) {
218
+ return {
219
+ number: wave.number,
220
+ componentCount: wave.metadata.componentCount,
221
+ types: [...wave.metadata.types].sort((left, right) => left.localeCompare(right)),
222
+ maxDepth: wave.metadata.maxDepth,
223
+ estimatedTimeSeconds: wave.metadata.estimatedTime,
224
+ hasCircularDependencies: wave.metadata.hasCircularDeps,
225
+ components: [...wave.components].sort((left, right) => left.localeCompare(right)),
226
+ };
227
+ }
228
+ createWaveIndex(waves) {
229
+ const waveByComponent = new Map();
230
+ for (const wave of waves) {
231
+ for (const component of wave.components)
232
+ waveByComponent.set(component, wave.number);
233
+ }
234
+ return waveByComponent;
235
+ }
236
+ createCycleEdgeSet(cycles) {
237
+ const cycleEdges = new Set();
238
+ for (const cycle of cycles) {
239
+ for (let index = 0; index < cycle.cycle.length; index += 1) {
240
+ const from = cycle.cycle[index];
241
+ const to = cycle.cycle[(index + 1) % cycle.cycle.length];
242
+ if (from && to)
243
+ cycleEdges.add(edgeKey(from, to));
244
+ }
245
+ }
246
+ return cycleEdges;
247
+ }
248
+ toMermaidNode(component) {
249
+ return `${this.toMermaidId(component.id)}["${escapeMermaidText(this.componentLabel(component))}"]`;
250
+ }
251
+ toMermaidId(value) {
252
+ return `n_${value.replace(/[^a-zA-Z0-9_]/g, '_')}`;
253
+ }
254
+ componentLabel(component) {
255
+ const markers = [
256
+ component.wave === undefined ? 'unplaced' : `wave ${component.wave}`,
257
+ component.inCycle ? 'cycle' : '',
258
+ ]
259
+ .filter(Boolean)
260
+ .join(', ');
261
+ return markers ? `${component.type}:${component.name} (${markers})` : `${component.type}:${component.name}`;
262
+ }
263
+ toComponentRow(component) {
264
+ return `<tr><td><code>${escapeHtml(component.id)}</code></td><td>${escapeHtml(component.type)}</td><td>${escapeHtml(component.name)}</td><td>${component.wave ?? 'Unplaced'}</td><td>${component.inCycle ? 'Yes' : 'No'}</td><td><code>${escapeHtml(component.filePath ?? '')}</code></td></tr>`;
265
+ }
266
+ toEdgeRow(edge) {
267
+ const waves = edge.fromWave === undefined || edge.toWave === undefined ? 'Unplaced' : `${edge.fromWave} -> ${edge.toWave}`;
268
+ return `<tr><td><code>${escapeHtml(edge.from)}</code></td><td><code>${escapeHtml(edge.to)}</code></td><td>${escapeHtml(edge.type)}</td><td>${escapeHtml(edge.source ?? '')}</td><td>${escapeHtml(waves)}</td><td>${edge.inCycle ? 'Yes' : 'No'}</td></tr>`;
269
+ }
270
+ }
271
+ function parseNodeId(nodeId, component) {
272
+ if (component)
273
+ return { type: component.type, name: component.name };
274
+ const separatorIndex = nodeId.indexOf(':');
275
+ if (separatorIndex === -1)
276
+ return { type: 'Unknown', name: nodeId };
277
+ return { type: nodeId.slice(0, separatorIndex), name: nodeId.slice(separatorIndex + 1) };
278
+ }
279
+ function edgeKey(from, to) {
280
+ return `${from}->${to}`;
281
+ }
282
+ function escapeMermaidText(value) {
283
+ return value.replaceAll('&', '&amp;').replaceAll('"', '&quot;').replaceAll('[', '(').replaceAll(']', ')');
284
+ }
285
+ function escapeDot(value) {
286
+ return value.replaceAll('\\', '\\\\').replaceAll('"', '\\"').replaceAll('\n', '\\n');
287
+ }
288
+ function escapeHtml(value) {
289
+ return value
290
+ .replaceAll('&', '&amp;')
291
+ .replaceAll('<', '&lt;')
292
+ .replaceAll('>', '&gt;')
293
+ .replaceAll('"', '&quot;')
294
+ .replaceAll("'", '&#39;');
295
+ }
296
+ //# sourceMappingURL=graph-export-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-export-service.js","sourceRoot":"","sources":["../../src/reports/graph-export-service.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import { DependencyGraphBuilder } from '../dependencies/dependency-graph-builder
13
13
  import { ForceIgnoreParser } from '../scanner/forceignore-parser.js';
14
14
  import { SfdxProjectDetector } from '../scanner/sfdx-project-detector.js';
15
15
  import { getLogger } from '../utils/logger.js';
16
- import { parseAiAuthoringBundleComponent, parseBotComponent, parseFlowComponent, parseGenAiPromptComponent, } from './scanners/automation-ai-metadata-scanner.js';
16
+ import { parseAiAuthoringBundleComponent, parseBotComponent, parseFlowComponent, parseGenAiPlannerBundleComponent, parseGenAiPromptComponent, } from './scanners/automation-ai-metadata-scanner.js';
17
17
  import { CODE_DIRECTORY_SCANNERS, CODE_FILE_SCANNERS } from './scanners/code-metadata-scanner.js';
18
18
  import { parseCustomMetadataComponents, parseCustomObjectComponent } from './scanners/data-metadata-scanner.js';
19
19
  import { parseEmailTemplateComponent, parseFlexiPageComponent, parseLayoutComponent, parseVisualforceComponent, } from './scanners/experience-metadata-scanner.js';
@@ -156,7 +156,9 @@ export class MetadataScannerService {
156
156
  const botComponents = await scanMetadataFiles(packagePath, '**/bots/**/*.bot-meta.xml', errors, 'Bot', this.shouldIgnorePath, parseBotComponent);
157
157
  const genAiPromptComponents = await scanMetadataFiles(packagePath, '**/genaiPromptTemplates/**/*.genAiPromptTemplate-meta.xml', errors, 'GenAI Prompt', this.shouldIgnorePath, parseGenAiPromptComponent);
158
158
  const aiAuthoringBundleComponents = await scanMetadataFiles(packagePath, '**/aiAuthoringBundles/**/*.agent', errors, 'AiAuthoringBundle', this.shouldIgnorePath, (filePath) => Promise.resolve(parseAiAuthoringBundleComponent(filePath)));
159
- return [...botComponents, ...genAiPromptComponents, ...aiAuthoringBundleComponents];
159
+ const authoringBundleNames = new Set(aiAuthoringBundleComponents.map((component) => component.name));
160
+ const genAiPlannerBundleComponents = (await scanMetadataDirectories(packagePath, '**/genAiPlannerBundles/*', errors, 'GenAiPlannerBundle', this.shouldIgnorePath, parseGenAiPlannerBundleComponent)).filter((component) => !authoringBundleNames.has(component.name));
161
+ return [...botComponents, ...genAiPromptComponents, ...aiAuthoringBundleComponents, ...genAiPlannerBundleComponents];
160
162
  }
161
163
  async scanAdditionalMetadata(packagePath, errors) {
162
164
  return scanAdditionalMetadata(packagePath, errors, this.shouldIgnorePath);
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-scanner-service.js","sourceRoot":"","sources":["../../src/services/metadata-scanner-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata-scanner-service.js","sourceRoot":"","sources":["../../src/services/metadata-scanner-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG1E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,+BAA+B,EAC/B,iBAAiB,EACjB,kBAAkB,EAClB,gCAAgC,EAChC,yBAAyB,GAC1B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAClG,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAChH,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,UAAU,EACV,uBAAuB,EACvB,iBAAiB,EACjB,+BAA+B,EAC/B,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAC7G,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAEnF,MAAM,MAAM,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;AAkBnD;;;GAGG;AACH,8BAA8B;AAC9B,wBAAwB;AACxB,wBAAwB;AACxB,kEAAkE;AAClE,0HAA0H;AAC1H,IAAI;AAEJ;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACzB,iBAAiB,CAAqB;IAC7B,gBAAgB,GAAG,CAAC,QAAgB,EAAW,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAE/F;;OAEG;IACI,KAAK,CAAC,IAAI,CAAC,UAAuB,EAAE;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,iBAAiB;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEjE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC9B,IAAI,EAAE,WAAW,CAAC,WAAW;YAC7B,WAAW,EAAE,WAAW,CAAC,kBAAkB,CAAC,MAAM;SACnD,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC3E,IAAI,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC9E,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACjC,KAAK,EAAE,UAAU,CAAC,UAAU;aAC7B,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CACxC,WAAW,CAAC,WAAW,EACvB,WAAW,CAAC,kBAAkB,EAC9B,MAAM,EACN,QAAQ,CACT,CAAC;QAEF,yBAAyB;QACzB,MAAM,YAAY,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAClD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE7C,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YAC3B,UAAU,EAAE,UAAU,CAAC,MAAM;YAC7B,YAAY,EAAE,gBAAgB,CAAC,KAAK,CAAC,iBAAiB;YACtD,aAAa;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,QAAQ,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,OAAO;YACL,UAAU;YACV,gBAAgB;YAChB,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,aAAa;YACb,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,WAAmB,EACnB,WAAqB,EACrB,MAAgB,EAChB,QAAkB;QAElB,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACnC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAClG,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC5D,QAAQ,CAAC,IAAI,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;gBAC7D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,eAAe,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAChC,WAAmB,EACnB,MAAgB,EAChB,QAAkB;QAElB,KAAK,QAAQ,CAAC;QACd,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxC,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,MAAM,CAAC;YACpD,IAAI,CAAC,+BAA+B,CAAC,WAAW,EAAE,MAAM,CAAC;YACzD,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC;YAChD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC;YAC1C,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC;YAC9C,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC;YAChD,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC;YACxC,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC;SACjD,CAAC,CAAC;QAEH,OAAO,eAAe,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,WAAmB,EAAE,MAAgB;QACxE,OAAO,iBAAiB,CACtB,WAAW,EACX,6BAA6B,EAC7B,MAAM,EACN,MAAM,EACN,IAAI,CAAC,gBAAgB,EACrB,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,WAAmB,EAAE,MAAgB;QAClE,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CACpD,WAAW,EACX,cAAc,EACd,MAAM,EACN,eAAe,EACf,IAAI,CAAC,gBAAgB,EACrB,0BAA0B,CAC3B,CAAC;QAEF,MAAM,wBAAwB,GAAG,MAAM,uBAAuB,CAC5D,WAAW,EACX,qBAAqB,EACrB,MAAM,EACN,sBAAsB,EACtB,IAAI,CAAC,gBAAgB,EACrB,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,cAAc,CAAC,CAAC;YAC9D,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAClC,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC,EACD,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAChD,CAAC;QAEF,OAAO,CAAC,GAAG,gBAAgB,EAAE,GAAG,wBAAwB,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,WAAmB,EAAE,MAAgB;QACtE,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAC/C,WAAW,EACX,mCAAmC,EACnC,MAAM,EACN,SAAS,EACT,IAAI,CAAC,gBAAgB,EACrB,qBAAqB,CACtB,CAAC;QAEF,MAAM,uBAAuB,GAAG,MAAM,iBAAiB,CACrD,WAAW,EACX,+CAA+C,EAC/C,MAAM,EACN,gBAAgB,EAChB,IAAI,CAAC,gBAAgB,EACrB,2BAA2B,CAC5B,CAAC;QAEF,OAAO,CAAC,GAAG,iBAAiB,EAAE,GAAG,uBAAuB,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,WAAmB,EAAE,MAAgB;QACxE,MAAM,mBAAmB,GAAG,MAAM,iBAAiB,CACjD,WAAW,EACX,uCAAuC,EACvC,MAAM,EACN,WAAW,EACX,IAAI,CAAC,gBAAgB,EACrB,uBAAuB,CACxB,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAC9C,WAAW,EACX,iCAAiC,EACjC,MAAM,EACN,QAAQ,EACR,IAAI,CAAC,gBAAgB,EACrB,oBAAoB,CACrB,CAAC;QAEF,MAAM,uBAAuB,GAAG,MAAM,iBAAiB,CACrD,WAAW,EACX,8BAA8B,EAC9B,MAAM,EACN,gBAAgB,EAChB,IAAI,CAAC,gBAAgB,EACrB,CAAC,QAAQ,EAAE,EAAE,CAAC,2BAA2B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAChE,CAAC;QAEF,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9C,iBAAiB,CACf,WAAW,EACX,oBAAoB,EACpB,MAAM,EACN,aAAa,EACb,IAAI,CAAC,gBAAgB,EACrB,yBAAyB,CAC1B;YACD,iBAAiB,CACf,WAAW,EACX,8BAA8B,EAC9B,MAAM,EACN,aAAa,EACb,IAAI,CAAC,gBAAgB,EACrB,yBAAyB,CAC1B;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,mBAAmB,EAAE,GAAG,gBAAgB,EAAE,GAAG,uBAAuB,EAAE,GAAG,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC;IACpH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,MAAgB;QAChE,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C,WAAW,EACX,2BAA2B,EAC3B,MAAM,EACN,KAAK,EACL,IAAI,CAAC,gBAAgB,EACrB,iBAAiB,CAClB,CAAC;QAEF,MAAM,qBAAqB,GAAG,MAAM,iBAAiB,CACnD,WAAW,EACX,2DAA2D,EAC3D,MAAM,EACN,cAAc,EACd,IAAI,CAAC,gBAAgB,EACrB,yBAAyB,CAC1B,CAAC;QAEF,MAAM,2BAA2B,GAAG,MAAM,iBAAiB,CACzD,WAAW,EACX,kCAAkC,EAClC,MAAM,EACN,mBAAmB,EACnB,IAAI,CAAC,gBAAgB,EACrB,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC,CACzE,CAAC;QAEF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACrG,MAAM,4BAA4B,GAAG,CACnC,MAAM,uBAAuB,CAC3B,WAAW,EACX,0BAA0B,EAC1B,MAAM,EACN,oBAAoB,EACpB,IAAI,CAAC,gBAAgB,EACrB,gCAAgC,CACjC,CACF,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEnE,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,qBAAqB,EAAE,GAAG,2BAA2B,EAAE,GAAG,4BAA4B,CAAC,CAAC;IACvH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,WAAmB,EAAE,MAAgB;QACxE,OAAO,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5E,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,WAAmB,EAAE,MAAgB;QAC5E,OAAO,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IACpG,CAAC;IAEO,KAAK,CAAC,+BAA+B,CAAC,WAAmB,EAAE,MAAgB;QACjF,OAAO,+BAA+B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;IAC9G,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,QAAgB;QACnC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;CAKF"}
@@ -2,4 +2,5 @@ import type { 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 parseGenAiPlannerBundleComponent(directoryPath: string): Promise<MetadataComponent>;
5
6
  export declare function parseGenAiPromptComponent(filePath: string): Promise<MetadataComponent | undefined>;
@@ -54,6 +54,45 @@ export function parseAiAuthoringBundleComponent(filePath) {
54
54
  priorityBoost: 0,
55
55
  };
56
56
  }
57
+ export async function parseGenAiPlannerBundleComponent(directoryPath) {
58
+ const bundleName = path.basename(directoryPath);
59
+ const deps = await parseGenAiPlannerBundleDependencies(directoryPath);
60
+ return {
61
+ name: bundleName,
62
+ type: 'GenAiPlannerBundle',
63
+ filePath: directoryPath,
64
+ dependencies: deps,
65
+ dependents: new Set(),
66
+ priorityBoost: 0,
67
+ };
68
+ }
69
+ async function parseGenAiPlannerBundleDependencies(directoryPath) {
70
+ const deps = new Set();
71
+ const entries = await fs.readdir(directoryPath, { recursive: true, withFileTypes: true });
72
+ const files = entries
73
+ .filter((entry) => entry.isFile())
74
+ .map((entry) => path.join(entry.parentPath, entry.name))
75
+ .filter((filePath) => /\.(?:json|xml|yaml|yml)$/iu.test(filePath));
76
+ const contents = await Promise.all(files.map((filePath) => fs.readFile(filePath, 'utf8')));
77
+ for (const content of contents) {
78
+ collectNamedReferences(deps, content, ['flow', 'flowName', 'targetFlow', 'subflow'], 'Flow');
79
+ collectNamedReferences(deps, content, ['apexClass', 'apexAction', 'invocableApexClass'], 'ApexClass');
80
+ collectNamedReferences(deps, content, ['prompt', 'promptTemplate', 'genAiPromptTemplate'], 'GenAiPromptTemplate');
81
+ }
82
+ return deps;
83
+ }
84
+ function collectNamedReferences(dependencies, content, propertyNames, metadataType) {
85
+ for (const propertyName of propertyNames) {
86
+ const quotedProperty = new RegExp(`"${propertyName}"\\s*:\\s*"([^"/]+)"`, 'giu');
87
+ const xmlElement = new RegExp(`<${propertyName}>([^<]+)</${propertyName}>`, 'giu');
88
+ for (const match of content.matchAll(quotedProperty)) {
89
+ dependencies.add(`${metadataType}:${match[1]}`);
90
+ }
91
+ for (const match of content.matchAll(xmlElement)) {
92
+ dependencies.add(`${metadataType}:${match[1]}`);
93
+ }
94
+ }
95
+ }
57
96
  export async function parseGenAiPromptComponent(filePath) {
58
97
  const promptName = path.basename(filePath, '.genAiPromptTemplate-meta.xml');
59
98
  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":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAGxE,SAAS,MAAM,CAAC,MAAmB,EAAE,MAAwB,EAAE,WAAoB;IACjF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACvD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACzC,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACvE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,IAAI,EAAE,MAAe;QACrB,QAAQ;QACR,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI,GAAG,EAAU;QAC7B,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE9B,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,KAAc;QACpB,QAAQ;QACR,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI,GAAG,EAAU;QAC7B,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,QAAgB;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAErD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,mBAAmB;QACzB,QAAQ;QACR,YAAY,EAAE,IAAI,GAAG,EAAU;QAC/B,UAAU,EAAE,IAAI,GAAG,EAAU;QAC7B,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAgB;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAErF,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,qBAA8B;QACpC,QAAQ;QACR,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI,GAAG,EAAU;QAC7B,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC"}
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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"}
@@ -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,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
+ }