pax8-cta 0.1.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 (224) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +659 -0
  3. package/demo-data/solutions/ProductQADemo_1_0_0_2_managed.zip +0 -0
  4. package/dist/commands/analyze.d.ts +28 -0
  5. package/dist/commands/analyze.d.ts.map +1 -0
  6. package/dist/commands/analyze.js +571 -0
  7. package/dist/commands/analyze.js.map +1 -0
  8. package/dist/commands/auth.d.ts +18 -0
  9. package/dist/commands/auth.d.ts.map +1 -0
  10. package/dist/commands/auth.js +171 -0
  11. package/dist/commands/auth.js.map +1 -0
  12. package/dist/commands/config.d.ts +34 -0
  13. package/dist/commands/config.d.ts.map +1 -0
  14. package/dist/commands/config.js +299 -0
  15. package/dist/commands/config.js.map +1 -0
  16. package/dist/commands/demo.d.ts +33 -0
  17. package/dist/commands/demo.d.ts.map +1 -0
  18. package/dist/commands/demo.js +362 -0
  19. package/dist/commands/demo.js.map +1 -0
  20. package/dist/commands/deploy.d.ts +18 -0
  21. package/dist/commands/deploy.d.ts.map +1 -0
  22. package/dist/commands/deploy.js +1186 -0
  23. package/dist/commands/deploy.js.map +1 -0
  24. package/dist/commands/deployments/helpers.d.ts +68 -0
  25. package/dist/commands/deployments/helpers.d.ts.map +1 -0
  26. package/dist/commands/deployments/helpers.js +414 -0
  27. package/dist/commands/deployments/helpers.js.map +1 -0
  28. package/dist/commands/deployments/index.d.ts +24 -0
  29. package/dist/commands/deployments/index.d.ts.map +1 -0
  30. package/dist/commands/deployments/index.js +47 -0
  31. package/dist/commands/deployments/index.js.map +1 -0
  32. package/dist/commands/deployments/list.d.ts +18 -0
  33. package/dist/commands/deployments/list.d.ts.map +1 -0
  34. package/dist/commands/deployments/list.js +97 -0
  35. package/dist/commands/deployments/list.js.map +1 -0
  36. package/dist/commands/deployments/show.d.ts +18 -0
  37. package/dist/commands/deployments/show.d.ts.map +1 -0
  38. package/dist/commands/deployments/show.js +81 -0
  39. package/dist/commands/deployments/show.js.map +1 -0
  40. package/dist/commands/deployments/undo.d.ts +18 -0
  41. package/dist/commands/deployments/undo.d.ts.map +1 -0
  42. package/dist/commands/deployments/undo.js +295 -0
  43. package/dist/commands/deployments/undo.js.map +1 -0
  44. package/dist/commands/export.d.ts +18 -0
  45. package/dist/commands/export.d.ts.map +1 -0
  46. package/dist/commands/export.js +133 -0
  47. package/dist/commands/export.js.map +1 -0
  48. package/dist/commands/import.d.ts +18 -0
  49. package/dist/commands/import.d.ts.map +1 -0
  50. package/dist/commands/import.js +129 -0
  51. package/dist/commands/import.js.map +1 -0
  52. package/dist/commands/init-config.d.ts +26 -0
  53. package/dist/commands/init-config.d.ts.map +1 -0
  54. package/dist/commands/init-config.js +123 -0
  55. package/dist/commands/init-config.js.map +1 -0
  56. package/dist/commands/init-validation.d.ts +47 -0
  57. package/dist/commands/init-validation.d.ts.map +1 -0
  58. package/dist/commands/init-validation.js +339 -0
  59. package/dist/commands/init-validation.js.map +1 -0
  60. package/dist/commands/init-wizard.d.ts +25 -0
  61. package/dist/commands/init-wizard.d.ts.map +1 -0
  62. package/dist/commands/init-wizard.js +433 -0
  63. package/dist/commands/init-wizard.js.map +1 -0
  64. package/dist/commands/init.d.ts +18 -0
  65. package/dist/commands/init.d.ts.map +1 -0
  66. package/dist/commands/init.js +46 -0
  67. package/dist/commands/init.js.map +1 -0
  68. package/dist/commands/resolve-url.d.ts +18 -0
  69. package/dist/commands/resolve-url.d.ts.map +1 -0
  70. package/dist/commands/resolve-url.js +126 -0
  71. package/dist/commands/resolve-url.js.map +1 -0
  72. package/dist/commands/setup.d.ts +18 -0
  73. package/dist/commands/setup.d.ts.map +1 -0
  74. package/dist/commands/setup.js +239 -0
  75. package/dist/commands/setup.js.map +1 -0
  76. package/dist/commands/solutions/drift-analysis.d.ts +73 -0
  77. package/dist/commands/solutions/drift-analysis.d.ts.map +1 -0
  78. package/dist/commands/solutions/drift-analysis.js +416 -0
  79. package/dist/commands/solutions/drift-analysis.js.map +1 -0
  80. package/dist/commands/solutions/drift.d.ts +32 -0
  81. package/dist/commands/solutions/drift.d.ts.map +1 -0
  82. package/dist/commands/solutions/drift.js +641 -0
  83. package/dist/commands/solutions/drift.js.map +1 -0
  84. package/dist/commands/solutions/fix-planner.d.ts +48 -0
  85. package/dist/commands/solutions/fix-planner.d.ts.map +1 -0
  86. package/dist/commands/solutions/fix-planner.js +43 -0
  87. package/dist/commands/solutions/fix-planner.js.map +1 -0
  88. package/dist/commands/solutions/helpers.d.ts +35 -0
  89. package/dist/commands/solutions/helpers.d.ts.map +1 -0
  90. package/dist/commands/solutions/helpers.js +54 -0
  91. package/dist/commands/solutions/helpers.js.map +1 -0
  92. package/dist/commands/solutions/index.d.ts +18 -0
  93. package/dist/commands/solutions/index.d.ts.map +1 -0
  94. package/dist/commands/solutions/index.js +30 -0
  95. package/dist/commands/solutions/index.js.map +1 -0
  96. package/dist/commands/solutions/list.d.ts +18 -0
  97. package/dist/commands/solutions/list.d.ts.map +1 -0
  98. package/dist/commands/solutions/list.js +174 -0
  99. package/dist/commands/solutions/list.js.map +1 -0
  100. package/dist/commands/solutions/remove.d.ts +18 -0
  101. package/dist/commands/solutions/remove.d.ts.map +1 -0
  102. package/dist/commands/solutions/remove.js +137 -0
  103. package/dist/commands/solutions/remove.js.map +1 -0
  104. package/dist/commands/solutions/risk-calculator.d.ts +33 -0
  105. package/dist/commands/solutions/risk-calculator.d.ts.map +1 -0
  106. package/dist/commands/solutions/risk-calculator.js +79 -0
  107. package/dist/commands/solutions/risk-calculator.js.map +1 -0
  108. package/dist/commands/solutions/show.d.ts +18 -0
  109. package/dist/commands/solutions/show.d.ts.map +1 -0
  110. package/dist/commands/solutions/show.js +165 -0
  111. package/dist/commands/solutions/show.js.map +1 -0
  112. package/dist/commands/status.d.ts +18 -0
  113. package/dist/commands/status.d.ts.map +1 -0
  114. package/dist/commands/status.js +573 -0
  115. package/dist/commands/status.js.map +1 -0
  116. package/dist/commands/telemetry.d.ts +18 -0
  117. package/dist/commands/telemetry.d.ts.map +1 -0
  118. package/dist/commands/telemetry.js +85 -0
  119. package/dist/commands/telemetry.js.map +1 -0
  120. package/dist/commands/tenants/health.d.ts +18 -0
  121. package/dist/commands/tenants/health.d.ts.map +1 -0
  122. package/dist/commands/tenants/health.js +172 -0
  123. package/dist/commands/tenants/health.js.map +1 -0
  124. package/dist/commands/tenants/helpers.d.ts +44 -0
  125. package/dist/commands/tenants/helpers.d.ts.map +1 -0
  126. package/dist/commands/tenants/helpers.js +72 -0
  127. package/dist/commands/tenants/helpers.js.map +1 -0
  128. package/dist/commands/tenants/index.d.ts +19 -0
  129. package/dist/commands/tenants/index.d.ts.map +1 -0
  130. package/dist/commands/tenants/index.js +39 -0
  131. package/dist/commands/tenants/index.js.map +1 -0
  132. package/dist/commands/tenants/inspect.d.ts +18 -0
  133. package/dist/commands/tenants/inspect.d.ts.map +1 -0
  134. package/dist/commands/tenants/inspect.js +176 -0
  135. package/dist/commands/tenants/inspect.js.map +1 -0
  136. package/dist/commands/tenants/list.d.ts +18 -0
  137. package/dist/commands/tenants/list.d.ts.map +1 -0
  138. package/dist/commands/tenants/list.js +144 -0
  139. package/dist/commands/tenants/list.js.map +1 -0
  140. package/dist/commands/tenants/manage.d.ts +20 -0
  141. package/dist/commands/tenants/manage.d.ts.map +1 -0
  142. package/dist/commands/tenants/manage.js +206 -0
  143. package/dist/commands/tenants/manage.js.map +1 -0
  144. package/dist/commands/tenants/show.d.ts +18 -0
  145. package/dist/commands/tenants/show.d.ts.map +1 -0
  146. package/dist/commands/tenants/show.js +191 -0
  147. package/dist/commands/tenants/show.js.map +1 -0
  148. package/dist/commands/validate.d.ts +18 -0
  149. package/dist/commands/validate.d.ts.map +1 -0
  150. package/dist/commands/validate.js +536 -0
  151. package/dist/commands/validate.js.map +1 -0
  152. package/dist/index.d.ts +19 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +258 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/lib/auth.d.ts +51 -0
  157. package/dist/lib/auth.d.ts.map +1 -0
  158. package/dist/lib/auth.js +153 -0
  159. package/dist/lib/auth.js.map +1 -0
  160. package/dist/lib/banner.d.ts +19 -0
  161. package/dist/lib/banner.d.ts.map +1 -0
  162. package/dist/lib/banner.js +78 -0
  163. package/dist/lib/banner.js.map +1 -0
  164. package/dist/lib/command-wrapper.d.ts +56 -0
  165. package/dist/lib/command-wrapper.d.ts.map +1 -0
  166. package/dist/lib/command-wrapper.js +71 -0
  167. package/dist/lib/command-wrapper.js.map +1 -0
  168. package/dist/lib/credentials.d.ts +56 -0
  169. package/dist/lib/credentials.d.ts.map +1 -0
  170. package/dist/lib/credentials.js +146 -0
  171. package/dist/lib/credentials.js.map +1 -0
  172. package/dist/lib/demo-banner.d.ts +15 -0
  173. package/dist/lib/demo-banner.d.ts.map +1 -0
  174. package/dist/lib/demo-banner.js +33 -0
  175. package/dist/lib/demo-banner.js.map +1 -0
  176. package/dist/lib/error-handler.d.ts +51 -0
  177. package/dist/lib/error-handler.d.ts.map +1 -0
  178. package/dist/lib/error-handler.js +458 -0
  179. package/dist/lib/error-handler.js.map +1 -0
  180. package/dist/lib/errors.d.ts +61 -0
  181. package/dist/lib/errors.d.ts.map +1 -0
  182. package/dist/lib/errors.js +168 -0
  183. package/dist/lib/errors.js.map +1 -0
  184. package/dist/lib/formatters.d.ts +55 -0
  185. package/dist/lib/formatters.d.ts.map +1 -0
  186. package/dist/lib/formatters.js +163 -0
  187. package/dist/lib/formatters.js.map +1 -0
  188. package/dist/lib/graph-client.d.ts +74 -0
  189. package/dist/lib/graph-client.d.ts.map +1 -0
  190. package/dist/lib/graph-client.js +231 -0
  191. package/dist/lib/graph-client.js.map +1 -0
  192. package/dist/lib/input.d.ts +22 -0
  193. package/dist/lib/input.d.ts.map +1 -0
  194. package/dist/lib/input.js +120 -0
  195. package/dist/lib/input.js.map +1 -0
  196. package/dist/lib/interactive-wizard.d.ts +26 -0
  197. package/dist/lib/interactive-wizard.d.ts.map +1 -0
  198. package/dist/lib/interactive-wizard.js +550 -0
  199. package/dist/lib/interactive-wizard.js.map +1 -0
  200. package/dist/lib/oss-surface.d.ts +21 -0
  201. package/dist/lib/oss-surface.d.ts.map +1 -0
  202. package/dist/lib/oss-surface.js +29 -0
  203. package/dist/lib/oss-surface.js.map +1 -0
  204. package/dist/lib/output.d.ts +74 -0
  205. package/dist/lib/output.d.ts.map +1 -0
  206. package/dist/lib/output.js +156 -0
  207. package/dist/lib/output.js.map +1 -0
  208. package/dist/lib/picker.d.ts +75 -0
  209. package/dist/lib/picker.d.ts.map +1 -0
  210. package/dist/lib/picker.js +115 -0
  211. package/dist/lib/picker.js.map +1 -0
  212. package/dist/lib/repl.d.ts +19 -0
  213. package/dist/lib/repl.d.ts.map +1 -0
  214. package/dist/lib/repl.js +158 -0
  215. package/dist/lib/repl.js.map +1 -0
  216. package/dist/lib/spinner.d.ts +41 -0
  217. package/dist/lib/spinner.d.ts.map +1 -0
  218. package/dist/lib/spinner.js +126 -0
  219. package/dist/lib/spinner.js.map +1 -0
  220. package/dist/lib/telemetry.d.ts +96 -0
  221. package/dist/lib/telemetry.d.ts.map +1 -0
  222. package/dist/lib/telemetry.js +367 -0
  223. package/dist/lib/telemetry.js.map +1 -0
  224. package/package.json +68 -0
@@ -0,0 +1,571 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ import { spawn } from "node:child_process";
18
+ import chalk from "chalk";
19
+ import { createSpinner, isQuietMode } from "../lib/spinner.js";
20
+ import Table from "cli-table3";
21
+ import { riskAnalyzer, DEMO_TENANTS, DEMO_SOLUTIONS, WaveService, confidenceQualifierLabel, } from "@pax8-cta/core";
22
+ import open from "open";
23
+ import { withResolvedDestinations } from "../lib/command-wrapper.js";
24
+ import { CliError, handleCommandError } from "../lib/errors.js";
25
+ import { isInteractivePrompt, pickFromList, printRunningCommand } from "../lib/picker.js";
26
+ import { showDemoBanner } from "../lib/demo-banner.js";
27
+ // Risk issue severity colors
28
+ const SEVERITY_COLORS = {
29
+ critical: chalk.red,
30
+ error: chalk.red,
31
+ warning: chalk.yellow,
32
+ info: chalk.blue,
33
+ };
34
+ const SEVERITY_ICONS = {
35
+ critical: "🚫",
36
+ error: "❌",
37
+ warning: "⚠️",
38
+ info: "ℹ️",
39
+ };
40
+ export const analyzeCommand = new Command("analyze")
41
+ .description("Analyze deployment risk for a solution across your tenants")
42
+ .argument("[solution]", "Solution name (e.g., TestDeploy) or path to solution zip file")
43
+ .option("-s, --solution <path>", "Solution name or path to zip (alternative to argument)")
44
+ .option("--agentPackage <path>", "Alias for --solution")
45
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
46
+ .option("-t, --tag <tags...>", "Analyze only tenants with these tags")
47
+ .option("--all", "Analyze all tenants (default when no --tag specified)")
48
+ .option("--json", "Output results as JSON")
49
+ .addHelpText("after", `
50
+ Examples:
51
+ analyze TestDeploy Analyze risk across all tenants
52
+ analyze TestDeploy --tag production Analyze production tenants only
53
+ analyze ./TestDeploy.zip Analyze a pre-exported zip
54
+ `)
55
+ .action(async (solutionArg, options, cmd) => {
56
+ const spinner = createSpinner("Loading configuration...").start();
57
+ // Merge global options (--json may be consumed by root program in Commander v12)
58
+ const allOpts = cmd.optsWithGlobals();
59
+ const jsonOutput = !!(allOpts.json || options.json);
60
+ // Allow solution as positional arg or --solution flag
61
+ if (solutionArg && !options.solution) {
62
+ options.solution = solutionArg;
63
+ }
64
+ if (!options.solution) {
65
+ spinner.fail(chalk.red("Solution name or path required."));
66
+ if (!isQuietMode()) {
67
+ console.error(chalk.gray(" Example: analyze TestDeploy"));
68
+ }
69
+ process.exit(2);
70
+ }
71
+ // Default to --all if no tag filter specified
72
+ if (!options.all && (!options.tag || options.tag.length === 0)) {
73
+ options.all = true;
74
+ }
75
+ try {
76
+ await withResolvedDestinations(options, async (destinations) => {
77
+ spinner.succeed("Demo fleet manifest loaded");
78
+ if (!isQuietMode()) {
79
+ showDemoBanner();
80
+ }
81
+ // Validate the solution argument against the demo catalog before we
82
+ // run a synthetic risk analysis. Without this, demo mode happily
83
+ // analyzes typo'd solution names (e.g. "CusteomrServiceAgent") and
84
+ // prints a confident "READY TO DEPLOY" verdict — which is dangerous
85
+ // during demos where a typo is the whole point of the exercise.
86
+ // Mirrors the deploy fix in #379. ZIP path inputs ("./foo.zip")
87
+ // still pretend-bypass without file existence checks (the existing
88
+ // demo contract for paths).
89
+ const solutionInput = options.agentPackage || options.solution;
90
+ const isFilePath = solutionInput.endsWith(".zip");
91
+ if (!isFilePath) {
92
+ const knownDemoNames = DEMO_SOLUTIONS.map((sol) => sol.uniqueName);
93
+ // Case-sensitive match — the CLI is case-sensitive about solution
94
+ // names elsewhere (export/import use the uniqueName verbatim).
95
+ if (!knownDemoNames.includes(solutionInput)) {
96
+ const preview = knownDemoNames.slice(0, 5);
97
+ const lines = [
98
+ `Solution '${solutionInput}' not found in the demo catalog.`,
99
+ "Available demo solutions:",
100
+ ...preview.map((name) => ` - ${name}`),
101
+ "Run 'solutions list' to see all available demo solutions.",
102
+ ];
103
+ throw new CliError(lines.join("\n"));
104
+ }
105
+ }
106
+ if (destinations.length === 0) {
107
+ spinner.fail(chalk.red("No destinations matched the selection criteria"));
108
+ process.exit(1);
109
+ }
110
+ // Display destinations
111
+ console.log(chalk.bold(`📊 Analyzing Risk for ${destinations.length} Destinations`));
112
+ console.log();
113
+ const table = new Table({
114
+ head: ["Destination", "Tenant ID", "Port", "Tags"],
115
+ style: { head: ["cyan"] },
116
+ });
117
+ destinations.forEach((tenant) => {
118
+ table.push([
119
+ tenant.name,
120
+ tenant.tenantId.slice(0, 8) + "...",
121
+ new URL(tenant.environmentUrl).hostname,
122
+ tenant.tags?.join(", ") || "-",
123
+ ]);
124
+ });
125
+ console.log(table.toString());
126
+ console.log();
127
+ // Run risk analysis directly via core
128
+ spinner.start("Running risk analysis...");
129
+ // Demo mode has no Config to draw waves from. Use a single wave
130
+ // with the documented default parallelism (DEFAULT_MAX_PARALLEL=5)
131
+ // so the duration estimate models real deploys, not a sequential
132
+ // pessimization. Mirrors what `deploy --all` does at runtime when
133
+ // no waves are configured.
134
+ const context = {
135
+ tenants: destinations.map((t) => ({
136
+ id: t.tenantId,
137
+ name: t.name,
138
+ environmentUrl: t.environmentUrl,
139
+ tags: t.tags,
140
+ })),
141
+ solutionFile: options.agentPackage || options.solution,
142
+ isProduction: destinations.some((t) => t.tags?.includes("production")),
143
+ maxParallel: 5,
144
+ };
145
+ const analysis = await riskAnalyzer.analyze(context);
146
+ spinner.succeed(chalk.green("Risk analysis complete"));
147
+ console.log();
148
+ displayAnalysis(analysis, destinations.length, jsonOutput);
149
+ await maybePromptPreconditionFix(analysis.preconditions.failures, jsonOutput);
150
+ if (analysis.canProceed) {
151
+ await maybePromptTestDeploy({
152
+ solution: options.agentPackage || options.solution,
153
+ fullFleet: DEMO_TENANTS,
154
+ isDemo: true,
155
+ json: jsonOutput,
156
+ });
157
+ }
158
+ }, async ({ config, destinations }) => {
159
+ spinner.succeed("Manifest loaded");
160
+ if (destinations.length === 0) {
161
+ spinner.fail(chalk.red("No destinations matched the selection criteria"));
162
+ process.exit(1);
163
+ }
164
+ // Display destinations
165
+ console.log();
166
+ console.log(chalk.bold(`📊 Analyzing Risk for ${destinations.length} Destinations:`));
167
+ const table = new Table({
168
+ head: ["Destination", "Tenant ID", "Port", "Tags"],
169
+ style: { head: ["cyan"] },
170
+ });
171
+ destinations.forEach((tenant) => {
172
+ table.push([
173
+ tenant.name,
174
+ tenant.tenantId.slice(0, 8) + "...",
175
+ new URL(tenant.environmentUrl).hostname,
176
+ tenant.tags?.join(", ") || "-",
177
+ ]);
178
+ });
179
+ console.log(table.toString());
180
+ console.log();
181
+ // Run risk analysis directly via core
182
+ spinner.start("Running risk analysis...");
183
+ const agentPackagePath = options.agentPackage || options.solution;
184
+ // Plumb the actual wave plan through so the duration estimate
185
+ // matches what `deploy` will run. Mirrors `deploy.ts`'s
186
+ // `runDryRunPreview` flow.
187
+ const waveService = new WaveService();
188
+ const waves = waveService.createExecutionPlan(config, destinations);
189
+ const context = {
190
+ tenants: destinations.map((t) => ({
191
+ id: t.tenantId,
192
+ name: t.name,
193
+ environmentUrl: t.environmentUrl,
194
+ tags: t.tags,
195
+ })),
196
+ solutionFile: agentPackagePath,
197
+ isProduction: destinations.some((t) => t.tags?.includes("production")),
198
+ waves,
199
+ };
200
+ const analysis = await riskAnalyzer.analyze(context);
201
+ spinner.succeed(chalk.green("Risk analysis complete"));
202
+ console.log();
203
+ displayAnalysis(analysis, destinations.length, jsonOutput);
204
+ await maybePromptPreconditionFix(analysis.preconditions.failures, jsonOutput);
205
+ if (analysis.canProceed) {
206
+ await maybePromptTestDeploy({
207
+ solution: agentPackagePath,
208
+ fullFleet: config.tenants,
209
+ isDemo: false,
210
+ json: jsonOutput,
211
+ });
212
+ }
213
+ });
214
+ }
215
+ catch (error) {
216
+ handleCommandError(error, spinner, "Risk analysis failed");
217
+ }
218
+ });
219
+ /**
220
+ * Offer to run a test deploy on a tenant tagged "test" right after a successful
221
+ * analysis. Skipped when output is non-interactive (--json, --quiet, non-TTY)
222
+ * so scripts and pipelines never hang waiting for input.
223
+ */
224
+ async function maybePromptTestDeploy(opts) {
225
+ const interactive = isInteractivePrompt({ json: opts.json });
226
+ if (!interactive)
227
+ return;
228
+ const testTenants = opts.fullFleet.filter((t) => t.enabled && t.tags?.includes("test"));
229
+ if (testTenants.length === 0)
230
+ return;
231
+ // pickFromList collapses to a y/N confirm when the list has one item, so the
232
+ // single-test-tenant case and the multi-test-tenant case share one code path.
233
+ const target = await pickFromList(testTenants, {
234
+ prompt: "Try a test deploy first?",
235
+ label: (t) => t.name,
236
+ hint: (t) => (t.tags?.length ? t.tags.join(", ") : undefined),
237
+ isInteractive: interactive,
238
+ });
239
+ if (!target)
240
+ return;
241
+ printRunningCommand(["deploy", opts.solution, "--tenant", target.name]);
242
+ await runDeploy(opts.solution, target.name, opts.isDemo);
243
+ }
244
+ async function runDeploy(solution, tenantName, isDemo) {
245
+ return new Promise((resolve, reject) => {
246
+ const args = ["deploy", solution, "--tenant", tenantName];
247
+ const isBundled = !process.argv[1] || process.argv[1] === process.execPath;
248
+ const spawnArgs = isBundled ? args : [process.argv[1], ...args];
249
+ const env = { ...process.env };
250
+ if (isDemo)
251
+ env.DEMO_MODE = "true";
252
+ // stdin ignored so the subprocess doesn't fight with the parent REPL's
253
+ // shared readline; deploy doesn't need interactive input in the
254
+ // analyze → test-deploy flow.
255
+ const proc = spawn(process.execPath, spawnArgs, {
256
+ stdio: ["ignore", "inherit", "inherit"],
257
+ env,
258
+ });
259
+ proc.on("close", () => resolve());
260
+ proc.on("error", reject);
261
+ });
262
+ }
263
+ function displayAnalysis(analysis, tenantCount, jsonOutput) {
264
+ if (jsonOutput) {
265
+ console.log(JSON.stringify(analysis, null, 2));
266
+ return;
267
+ }
268
+ // Overall summary
269
+ const scoreColor = analysis.score === "critical" || analysis.score === "high"
270
+ ? chalk.red
271
+ : analysis.score === "medium"
272
+ ? chalk.yellow
273
+ : chalk.green;
274
+ console.log(chalk.bold("═".repeat(70)));
275
+ console.log(chalk.bold.cyan(" RISK ANALYSIS REPORT"));
276
+ console.log(chalk.bold("═".repeat(70)));
277
+ console.log();
278
+ // Surface the confidence qualifier next to the risk score so users see
279
+ // "LOW (limited data)" or "HIGH (high confidence)" rather than treating
280
+ // every risk score as equally trustworthy.
281
+ const qualifierLabel = confidenceQualifierLabel(analysis.confidenceQualifier);
282
+ const scoreLabel = `${analysis.score.toUpperCase()} (${qualifierLabel})`;
283
+ console.log(chalk.bold("📊 Overall Assessment"));
284
+ console.log("─".repeat(70));
285
+ console.log(` Risk Score: ${scoreColor(scoreLabel)}`);
286
+ console.log(` Confidence: ${analysis.confidence}%`);
287
+ console.log(` Success Probability: ${analysis.successProbability}%`);
288
+ console.log(` Estimated Duration: ${analysis.estimatedDuration.min}-${analysis.estimatedDuration.max} minutes`);
289
+ console.log(` Can Proceed: ${analysis.canProceed ? chalk.green("YES") : chalk.red("NO")}`);
290
+ console.log(` Requires Approval: ${analysis.requiresApproval ? chalk.yellow("YES") : chalk.green("NO")}`);
291
+ console.log(` Analyzed Tenants: ${tenantCount}`);
292
+ console.log();
293
+ // Blockers
294
+ if (analysis.blockers.length > 0) {
295
+ console.log(chalk.bold.red(`🚫 BLOCKERS (${analysis.blockers.length})`));
296
+ console.log(chalk.red("─".repeat(70)));
297
+ console.log(chalk.red("These issues prevent deployment and MUST be fixed first:"));
298
+ console.log();
299
+ analysis.blockers.forEach((blocker, idx) => {
300
+ console.log(chalk.red(`${idx + 1}. ${blocker.message}`));
301
+ if (blocker.affectedTenants && blocker.affectedTenants.length > 0) {
302
+ console.log(chalk.gray(` Affected: ${blocker.affectedTenants.join(", ")}`));
303
+ }
304
+ if (blocker.resolution) {
305
+ console.log(chalk.yellow(` 💡 ${blocker.resolution}`));
306
+ }
307
+ if (blocker.link) {
308
+ console.log(chalk.blue(` 🔗 ${blocker.link}`));
309
+ }
310
+ console.log();
311
+ });
312
+ }
313
+ // Critical & Error Issues — preflight failures get their own dedicated
314
+ // PRECONDITIONS section below, so exclude them here to avoid duplication.
315
+ const criticalIssues = analysis.issues.filter((i) => (i.severity === "critical" || i.severity === "error") && i.category !== "preconditions");
316
+ if (criticalIssues.length > 0 && analysis.blockers.length === 0) {
317
+ console.log(chalk.bold.red(`❌ CRITICAL ISSUES (${criticalIssues.length})`));
318
+ console.log(chalk.red("─".repeat(70)));
319
+ criticalIssues.forEach((issue, idx) => {
320
+ const icon = SEVERITY_ICONS[issue.severity];
321
+ const colorFn = SEVERITY_COLORS[issue.severity];
322
+ console.log(colorFn(`${icon} ${idx + 1}. ${issue.message}`));
323
+ if (issue.affectedTenants && issue.affectedTenants.length > 0) {
324
+ console.log(chalk.gray(` Affected: ${issue.affectedTenants.join(", ")}`));
325
+ }
326
+ if (issue.resolution) {
327
+ console.log(chalk.yellow(` 💡 ${issue.resolution}`));
328
+ }
329
+ });
330
+ console.log();
331
+ }
332
+ // Warnings — same exclusion, preflight has its own section.
333
+ const warnings = analysis.issues.filter((i) => i.severity === "warning" && i.category !== "preconditions");
334
+ if (warnings.length > 0) {
335
+ console.log(chalk.bold.yellow(`⚠️ WARNINGS (${warnings.length})`));
336
+ console.log(chalk.yellow("─".repeat(70)));
337
+ warnings.forEach((warning, idx) => {
338
+ console.log(chalk.yellow(`${idx + 1}. ${warning.message}`));
339
+ if (warning.affectedTenants && warning.affectedTenants.length > 0) {
340
+ console.log(chalk.gray(` Affected: ${warning.affectedTenants.join(", ")}`));
341
+ }
342
+ if (warning.resolution) {
343
+ console.log(chalk.gray(` 💡 ${warning.resolution}`));
344
+ }
345
+ });
346
+ console.log();
347
+ }
348
+ // Info — exclude preconditions; the PRECONDITIONS section below renders
349
+ // its own "manifest skipped" / "all clear" status line.
350
+ const infos = analysis.issues.filter((i) => i.severity === "info" && i.category !== "preconditions");
351
+ if (infos.length > 0) {
352
+ console.log(chalk.bold.blue(`ℹ️ INFORMATION (${infos.length})`));
353
+ console.log(chalk.blue("─".repeat(70)));
354
+ infos.forEach((info, idx) => {
355
+ console.log(chalk.blue(`${idx + 1}. ${info.message}`));
356
+ });
357
+ console.log();
358
+ }
359
+ // Recommendations
360
+ if (analysis.recommendations.length > 0) {
361
+ console.log(chalk.bold.cyan("💡 RECOMMENDATIONS"));
362
+ console.log(chalk.cyan("─".repeat(70)));
363
+ analysis.recommendations.forEach((rec, idx) => {
364
+ console.log(chalk.cyan(`${idx + 1}. ${rec}`));
365
+ });
366
+ console.log();
367
+ }
368
+ // Preflight (preconditions) — fifth analyze dimension. Renders structured
369
+ // remediation per failure (deep link / CLI command / manual steps).
370
+ displayPreconditions(analysis);
371
+ // Per-tenant breakdown — gives operators a fast scan over which
372
+ // tenants are driving the aggregate risk.
373
+ if (analysis.perTenantBreakdown && analysis.perTenantBreakdown.length > 0) {
374
+ console.log(chalk.bold("🏢 PER-TENANT BREAKDOWN"));
375
+ console.log("─".repeat(70));
376
+ const breakdownTable = new Table({
377
+ head: ["Tenant", "Risk", "Top Factor"],
378
+ style: { head: ["cyan"] },
379
+ colWidths: [28, 10, 32],
380
+ wordWrap: true,
381
+ });
382
+ for (const row of analysis.perTenantBreakdown) {
383
+ const rowColor = row.score === "critical" || row.score === "high"
384
+ ? chalk.red
385
+ : row.score === "medium"
386
+ ? chalk.yellow
387
+ : chalk.green;
388
+ const factor = row.topFactor
389
+ ? `[${row.topFactor.severity}] ${row.topFactor.message}`
390
+ : "no issues";
391
+ breakdownTable.push([row.tenantName, rowColor(row.score.toUpperCase()), factor]);
392
+ }
393
+ console.log(breakdownTable.toString());
394
+ console.log();
395
+ }
396
+ // Final verdict
397
+ console.log(chalk.bold("═".repeat(70)));
398
+ if (analysis.canProceed) {
399
+ if (analysis.blockers.length === 0 && criticalIssues.length === 0 && warnings.length === 0) {
400
+ console.log(chalk.bold.green("✅ READY TO DEPLOY"));
401
+ console.log(chalk.green("All checks passed. You can proceed with deployment."));
402
+ }
403
+ else {
404
+ console.log(chalk.bold.yellow("⚠️ PROCEED WITH CAUTION"));
405
+ console.log(chalk.yellow("Deployment can proceed, but there are warnings to consider."));
406
+ }
407
+ }
408
+ else {
409
+ console.log(chalk.bold.red("❌ DEPLOYMENT BLOCKED"));
410
+ console.log(chalk.red(`Fix ${analysis.blockers.length} blocker(s) before proceeding.`));
411
+ }
412
+ console.log(chalk.bold("═".repeat(70)));
413
+ console.log();
414
+ // Next steps
415
+ if (analysis.canProceed) {
416
+ console.log(chalk.gray("Next step: deploy <solution> --all"));
417
+ }
418
+ else {
419
+ console.log(chalk.gray("Fix the blockers listed above, then run 'analyze' again"));
420
+ }
421
+ console.log();
422
+ }
423
+ /**
424
+ * Render the PRECONDITIONS block (Phase 1 preflight). Three states:
425
+ * - Manifest not found → single info line, deploy still proceeds.
426
+ * - Manifest found, no failures → "all clear" line.
427
+ * - Manifest found with failures → numbered list with structured
428
+ * remediation (link / command / manual).
429
+ */
430
+ function displayPreconditions(analysis) {
431
+ const { preconditions } = analysis;
432
+ if (!preconditions.manifestFound) {
433
+ // Visible note about coverage — preflight skipped because no manifest.
434
+ console.log(chalk.bold("🔧 PRECONDITIONS"));
435
+ console.log("─".repeat(70));
436
+ console.log(chalk.gray("No precondition manifest for this solution; preflight skipped."));
437
+ console.log();
438
+ return;
439
+ }
440
+ if (preconditions.failures.length === 0) {
441
+ console.log(chalk.bold("🔧 PRECONDITIONS"));
442
+ console.log("─".repeat(70));
443
+ console.log(chalk.green(`All preconditions passed for solution \`${preconditions.solution}\` (manifest v${preconditions.manifestVersion}).`));
444
+ console.log();
445
+ return;
446
+ }
447
+ console.log(chalk.bold("🔧 PRECONDITIONS"));
448
+ console.log("─".repeat(70));
449
+ console.log(`${chalk.bold(preconditions.failures.length)} precondition${preconditions.failures.length === 1 ? "" : "s"} failed for solution \`${preconditions.solution}\`:`);
450
+ console.log();
451
+ preconditions.failures.forEach((failure, idx) => {
452
+ const headerColor = failure.severity === "error" ? chalk.red : chalk.yellow;
453
+ console.log(headerColor(` ${idx + 1}. ${failure.resourceType.split(".").pop() ?? failure.resourceType} \`${failure.resourceDisplayName}\` [${failure.tenantName}]`));
454
+ console.log(` ${chalk.gray("property:")} ${failure.failedProperty}`);
455
+ console.log(` ${chalk.gray("current:")} ${formatValue(failure.currentValue)}`);
456
+ console.log(` ${chalk.gray("required:")} ${formatValue(failure.requiredValue)} (${failure.comparisonOp})`);
457
+ console.log(` ${chalk.gray("why:")} ${failure.description}`);
458
+ console.log();
459
+ const subs = remediationSubstitutions(failure);
460
+ const remediation = failure.remediation;
461
+ console.log(` ${chalk.cyan("fix:")} ${substitute(remediation.title, subs)}`);
462
+ if (remediation.kind === "link") {
463
+ console.log(` ${chalk.cyan("→")} ${substitute(remediation.urlTemplate, subs)}`);
464
+ }
465
+ else if (remediation.kind === "command") {
466
+ console.log(` ${chalk.cyan("$")} ${substitute(remediation.cmd, subs)}`);
467
+ }
468
+ else {
469
+ remediation.steps.forEach((step) => {
470
+ console.log(` ${chalk.cyan("·")} ${substitute(step, subs)}`);
471
+ });
472
+ }
473
+ console.log();
474
+ });
475
+ }
476
+ /**
477
+ * Pretty-print a precondition value. Strings stay bare; everything else
478
+ * (booleans, arrays, objects, undefined) round-trips through JSON for a
479
+ * compact, unambiguous representation.
480
+ */
481
+ function formatValue(value) {
482
+ if (typeof value === "string")
483
+ return `\`${value}\``;
484
+ if (value === undefined)
485
+ return "(missing)";
486
+ return JSON.stringify(value);
487
+ }
488
+ /**
489
+ * Substitution map for `urlTemplate`, `cmd`, and `manualSteps[*]`. Keys in
490
+ * the template are wrapped in single braces (e.g. `{tenantId}`) — same
491
+ * grammar as the existing analyze deep-link templating in the URL
492
+ * resolver.
493
+ */
494
+ function remediationSubstitutions(failure) {
495
+ return {
496
+ tenantId: failure.tenantId,
497
+ tenantName: failure.tenantName,
498
+ resourceId: failure.resourceId,
499
+ resourceDisplayName: failure.resourceDisplayName,
500
+ };
501
+ }
502
+ function substitute(template, subs) {
503
+ return template.replace(/\{(\w+)\}/g, (_, key) => subs[key] ?? `{${key}}`);
504
+ }
505
+ /**
506
+ * After-action picker for preflight failures. TTY-only (matches the
507
+ * drift-after-action UX from #404). Renders a numbered list of failures
508
+ * and dispatches based on remediation kind:
509
+ * - `link` → print URL, optionally `open` it.
510
+ * - `command` → print the command and spawn it.
511
+ * - `manual` → print the substituted steps.
512
+ */
513
+ export async function maybePromptPreconditionFix(failures, jsonOutput) {
514
+ if (failures.length === 0)
515
+ return;
516
+ const interactive = isInteractivePrompt({ json: jsonOutput });
517
+ if (!interactive)
518
+ return;
519
+ const choice = await pickFromList(failures, {
520
+ prompt: "Fix a precondition?",
521
+ label: (f) => `${f.resourceDisplayName} on ${f.tenantName} (${f.failedProperty})`,
522
+ hint: (f) => f.severity,
523
+ isInteractive: interactive,
524
+ skipLabel: "skip",
525
+ });
526
+ if (!choice)
527
+ return;
528
+ await dispatchRemediation(choice);
529
+ }
530
+ async function dispatchRemediation(failure) {
531
+ const subs = remediationSubstitutions(failure);
532
+ const remediation = failure.remediation;
533
+ if (remediation.kind === "link") {
534
+ const url = substitute(remediation.urlTemplate, subs);
535
+ console.log(chalk.cyan(`\n→ ${url}\n`));
536
+ try {
537
+ await open(url);
538
+ }
539
+ catch {
540
+ // Non-fatal: user can copy the URL manually.
541
+ }
542
+ return;
543
+ }
544
+ if (remediation.kind === "command") {
545
+ const cmd = substitute(remediation.cmd, subs);
546
+ printRunningCommand(cmd.split(/\s+/));
547
+ await runShellCommand(cmd);
548
+ return;
549
+ }
550
+ console.log(chalk.cyan(`\n${remediation.title}`));
551
+ remediation.steps.forEach((step, idx) => {
552
+ console.log(` ${idx + 1}. ${substitute(step, subs)}`);
553
+ });
554
+ console.log();
555
+ }
556
+ /**
557
+ * Spawn a remediation `command` directly. Mirrors `runDeploy` above —
558
+ * stdin ignored so we don't fight with the parent REPL's readline.
559
+ */
560
+ async function runShellCommand(cmd) {
561
+ return new Promise((resolve, reject) => {
562
+ const parts = cmd.split(/\s+/);
563
+ const proc = spawn(parts[0], parts.slice(1), {
564
+ stdio: ["ignore", "inherit", "inherit"],
565
+ env: process.env,
566
+ });
567
+ proc.on("close", () => resolve());
568
+ proc.on("error", reject);
569
+ });
570
+ }
571
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ export declare const authCommand: Command;
18
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,WAAW,SAUrB,CAAC"}