workos 0.0.24 → 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 (305) hide show
  1. package/.claude-plugin/plugin.json +13 -0
  2. package/LICENSE +47 -0
  3. package/README.md +154 -1
  4. package/dist/bin.d.ts +2 -0
  5. package/dist/bin.js +163 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/cli.config.d.ts +52 -0
  8. package/dist/cli.config.js +70 -0
  9. package/dist/cli.config.js.map +1 -0
  10. package/dist/package.json +87 -0
  11. package/dist/src/commands/install-skill.d.ts +20 -0
  12. package/dist/src/commands/install-skill.js +130 -0
  13. package/dist/src/commands/install-skill.js.map +1 -0
  14. package/dist/src/commands/install.d.ts +22 -0
  15. package/dist/src/commands/install.js +57 -0
  16. package/dist/src/commands/install.js.map +1 -0
  17. package/dist/src/commands/login.d.ts +1 -0
  18. package/dist/src/commands/login.js +141 -0
  19. package/dist/src/commands/login.js.map +1 -0
  20. package/dist/src/commands/logout.d.ts +1 -0
  21. package/dist/src/commands/logout.js +17 -0
  22. package/dist/src/commands/logout.js.map +1 -0
  23. package/dist/src/dashboard/components/AnimatedLogo.d.ts +8 -0
  24. package/dist/src/dashboard/components/AnimatedLogo.js +16 -0
  25. package/dist/src/dashboard/components/AnimatedLogo.js.map +1 -0
  26. package/dist/src/dashboard/components/CompletionView.d.ts +13 -0
  27. package/dist/src/dashboard/components/CompletionView.js +21 -0
  28. package/dist/src/dashboard/components/CompletionView.js.map +1 -0
  29. package/dist/src/dashboard/components/ConfirmPrompt.d.ts +9 -0
  30. package/dist/src/dashboard/components/ConfirmPrompt.js +25 -0
  31. package/dist/src/dashboard/components/ConfirmPrompt.js.map +1 -0
  32. package/dist/src/dashboard/components/CredentialsForm.d.ts +10 -0
  33. package/dist/src/dashboard/components/CredentialsForm.js +47 -0
  34. package/dist/src/dashboard/components/CredentialsForm.js.map +1 -0
  35. package/dist/src/dashboard/components/Dashboard.d.ts +3 -0
  36. package/dist/src/dashboard/components/Dashboard.js +100 -0
  37. package/dist/src/dashboard/components/Dashboard.js.map +1 -0
  38. package/dist/src/dashboard/components/DashboardLayout.d.ts +24 -0
  39. package/dist/src/dashboard/components/DashboardLayout.js +25 -0
  40. package/dist/src/dashboard/components/DashboardLayout.js.map +1 -0
  41. package/dist/src/dashboard/components/DiffPanel.d.ts +9 -0
  42. package/dist/src/dashboard/components/DiffPanel.js +136 -0
  43. package/dist/src/dashboard/components/DiffPanel.js.map +1 -0
  44. package/dist/src/dashboard/components/InlinePrompt.d.ts +8 -0
  45. package/dist/src/dashboard/components/InlinePrompt.js +19 -0
  46. package/dist/src/dashboard/components/InlinePrompt.js.map +1 -0
  47. package/dist/src/dashboard/components/OutputPanel.d.ts +10 -0
  48. package/dist/src/dashboard/components/OutputPanel.js +100 -0
  49. package/dist/src/dashboard/components/OutputPanel.js.map +1 -0
  50. package/dist/src/dashboard/components/Panel.d.ts +12 -0
  51. package/dist/src/dashboard/components/Panel.js +6 -0
  52. package/dist/src/dashboard/components/Panel.js.map +1 -0
  53. package/dist/src/dashboard/components/TextInput.d.ts +13 -0
  54. package/dist/src/dashboard/components/TextInput.js +57 -0
  55. package/dist/src/dashboard/components/TextInput.js.map +1 -0
  56. package/dist/src/dashboard/components/WelcomeArt.d.ts +2 -0
  57. package/dist/src/dashboard/components/WelcomeArt.js +9 -0
  58. package/dist/src/dashboard/components/WelcomeArt.js.map +1 -0
  59. package/dist/src/dashboard/hooks/useAnimation.d.ts +7 -0
  60. package/dist/src/dashboard/hooks/useAnimation.js +24 -0
  61. package/dist/src/dashboard/hooks/useAnimation.js.map +1 -0
  62. package/dist/src/dashboard/hooks/useKeyboard.d.ts +8 -0
  63. package/dist/src/dashboard/hooks/useKeyboard.js +18 -0
  64. package/dist/src/dashboard/hooks/useKeyboard.js.map +1 -0
  65. package/dist/src/dashboard/hooks/useTerminalSize.d.ts +8 -0
  66. package/dist/src/dashboard/hooks/useTerminalSize.js +23 -0
  67. package/dist/src/dashboard/hooks/useTerminalSize.js.map +1 -0
  68. package/dist/src/dashboard/index.d.ts +6 -0
  69. package/dist/src/dashboard/index.js +36 -0
  70. package/dist/src/dashboard/index.js.map +1 -0
  71. package/dist/src/dashboard/lib/diff-utils.d.ts +21 -0
  72. package/dist/src/dashboard/lib/diff-utils.js +271 -0
  73. package/dist/src/dashboard/lib/diff-utils.js.map +1 -0
  74. package/dist/src/dashboard/lib/logo-frames.d.ts +20 -0
  75. package/dist/src/dashboard/lib/logo-frames.js +109 -0
  76. package/dist/src/dashboard/lib/logo-frames.js.map +1 -0
  77. package/dist/src/dashboard/lib/welcome-art.d.ts +1 -0
  78. package/dist/src/dashboard/lib/welcome-art.js +5 -0
  79. package/dist/src/dashboard/lib/welcome-art.js.map +1 -0
  80. package/dist/src/dashboard/types.d.ts +5 -0
  81. package/dist/src/dashboard/types.js +2 -0
  82. package/dist/src/dashboard/types.js.map +1 -0
  83. package/dist/src/lib/__tests__/test-utils.d.ts +40 -0
  84. package/dist/src/lib/__tests__/test-utils.js +108 -0
  85. package/dist/src/lib/__tests__/test-utils.js.map +1 -0
  86. package/dist/src/lib/adapters/cli-adapter.d.ts +56 -0
  87. package/dist/src/lib/adapters/cli-adapter.js +318 -0
  88. package/dist/src/lib/adapters/cli-adapter.js.map +1 -0
  89. package/dist/src/lib/adapters/dashboard-adapter.d.ts +30 -0
  90. package/dist/src/lib/adapters/dashboard-adapter.js +97 -0
  91. package/dist/src/lib/adapters/dashboard-adapter.js.map +1 -0
  92. package/dist/src/lib/adapters/index.d.ts +3 -0
  93. package/dist/src/lib/adapters/index.js +3 -0
  94. package/dist/src/lib/adapters/index.js.map +1 -0
  95. package/dist/src/lib/adapters/types.d.ts +41 -0
  96. package/dist/src/lib/adapters/types.js +2 -0
  97. package/dist/src/lib/adapters/types.js.map +1 -0
  98. package/dist/src/lib/agent-interface.d.ts +75 -0
  99. package/dist/src/lib/agent-interface.js +563 -0
  100. package/dist/src/lib/agent-interface.js.map +1 -0
  101. package/dist/src/lib/agent-runner.d.ts +9 -0
  102. package/dist/src/lib/agent-runner.js +213 -0
  103. package/dist/src/lib/agent-runner.js.map +1 -0
  104. package/dist/src/lib/api.d.ts +25 -0
  105. package/dist/src/lib/api.js +120 -0
  106. package/dist/src/lib/api.js.map +1 -0
  107. package/dist/src/lib/config.d.ts +60 -0
  108. package/dist/src/lib/config.js +88 -0
  109. package/dist/src/lib/config.js.map +1 -0
  110. package/dist/src/lib/constants.d.ts +32 -0
  111. package/dist/src/lib/constants.js +53 -0
  112. package/dist/src/lib/constants.js.map +1 -0
  113. package/dist/src/lib/credentials.d.ts +19 -0
  114. package/dist/src/lib/credentials.js +55 -0
  115. package/dist/src/lib/credentials.js.map +1 -0
  116. package/dist/src/lib/env-writer.d.ts +14 -0
  117. package/dist/src/lib/env-writer.js +39 -0
  118. package/dist/src/lib/env-writer.js.map +1 -0
  119. package/dist/src/lib/events.d.ts +114 -0
  120. package/dist/src/lib/events.js +19 -0
  121. package/dist/src/lib/events.js.map +1 -0
  122. package/dist/src/lib/framework-config.d.ts +108 -0
  123. package/dist/src/lib/framework-config.js +11 -0
  124. package/dist/src/lib/framework-config.js.map +1 -0
  125. package/dist/src/lib/helper-functions.d.ts +1 -0
  126. package/dist/src/lib/helper-functions.js +2 -0
  127. package/dist/src/lib/helper-functions.js.map +1 -0
  128. package/dist/src/lib/port-detection.d.ts +7 -0
  129. package/dist/src/lib/port-detection.js +112 -0
  130. package/dist/src/lib/port-detection.js.map +1 -0
  131. package/dist/src/lib/progress-tracker.d.ts +22 -0
  132. package/dist/src/lib/progress-tracker.js +47 -0
  133. package/dist/src/lib/progress-tracker.js.map +1 -0
  134. package/dist/src/lib/run-with-core.d.ts +2 -0
  135. package/dist/src/lib/run-with-core.js +266 -0
  136. package/dist/src/lib/run-with-core.js.map +1 -0
  137. package/dist/src/lib/safe-tools.d.ts +2 -0
  138. package/dist/src/lib/safe-tools.js +212 -0
  139. package/dist/src/lib/safe-tools.js.map +1 -0
  140. package/dist/src/lib/settings.d.ts +59 -0
  141. package/dist/src/lib/settings.js +36 -0
  142. package/dist/src/lib/settings.js.map +1 -0
  143. package/dist/src/lib/token-refresh.d.ts +12 -0
  144. package/dist/src/lib/token-refresh.js +26 -0
  145. package/dist/src/lib/token-refresh.js.map +1 -0
  146. package/dist/src/lib/validation/build-validator.d.ts +9 -0
  147. package/dist/src/lib/validation/build-validator.js +118 -0
  148. package/dist/src/lib/validation/build-validator.js.map +1 -0
  149. package/dist/src/lib/validation/index.d.ts +3 -0
  150. package/dist/src/lib/validation/index.js +3 -0
  151. package/dist/src/lib/validation/index.js.map +1 -0
  152. package/dist/src/lib/validation/types.d.ts +41 -0
  153. package/dist/src/lib/validation/types.js +2 -0
  154. package/dist/src/lib/validation/types.js.map +1 -0
  155. package/dist/src/lib/validation/validator.d.ts +6 -0
  156. package/dist/src/lib/validation/validator.js +647 -0
  157. package/dist/src/lib/validation/validator.js.map +1 -0
  158. package/dist/src/lib/wizard-core.d.ts +200 -0
  159. package/dist/src/lib/wizard-core.js +392 -0
  160. package/dist/src/lib/wizard-core.js.map +1 -0
  161. package/dist/src/lib/wizard-core.types.d.ts +73 -0
  162. package/dist/src/lib/wizard-core.types.js +2 -0
  163. package/dist/src/lib/wizard-core.types.js.map +1 -0
  164. package/dist/src/lib/workos-management.d.ts +32 -0
  165. package/dist/src/lib/workos-management.js +142 -0
  166. package/dist/src/lib/workos-management.js.map +1 -0
  167. package/dist/src/nextjs/nextjs-wizard-agent.d.ts +6 -0
  168. package/dist/src/nextjs/nextjs-wizard-agent.js +97 -0
  169. package/dist/src/nextjs/nextjs-wizard-agent.js.map +1 -0
  170. package/dist/src/nextjs/utils.d.ts +8 -0
  171. package/dist/src/nextjs/utils.js +53 -0
  172. package/dist/src/nextjs/utils.js.map +1 -0
  173. package/dist/src/react/react-wizard-agent.d.ts +2 -0
  174. package/dist/src/react/react-wizard-agent.js +47 -0
  175. package/dist/src/react/react-wizard-agent.js.map +1 -0
  176. package/dist/src/react-router/react-router-wizard-agent.d.ts +6 -0
  177. package/dist/src/react-router/react-router-wizard-agent.js +103 -0
  178. package/dist/src/react-router/react-router-wizard-agent.js.map +1 -0
  179. package/dist/src/react-router/utils.d.ts +19 -0
  180. package/dist/src/react-router/utils.js +210 -0
  181. package/dist/src/react-router/utils.js.map +1 -0
  182. package/dist/src/run.d.ts +24 -0
  183. package/dist/src/run.js +48 -0
  184. package/dist/src/run.js.map +1 -0
  185. package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
  186. package/dist/src/steps/add-or-update-environment-variables.js +155 -0
  187. package/dist/src/steps/add-or-update-environment-variables.js.map +1 -0
  188. package/dist/src/steps/index.d.ts +3 -0
  189. package/dist/src/steps/index.js +4 -0
  190. package/dist/src/steps/index.js.map +1 -0
  191. package/dist/src/steps/run-prettier.d.ts +5 -0
  192. package/dist/src/steps/run-prettier.js +54 -0
  193. package/dist/src/steps/run-prettier.js.map +1 -0
  194. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +8 -0
  195. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +7 -0
  196. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
  197. package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
  198. package/dist/src/steps/upload-environment-variables/index.js +57 -0
  199. package/dist/src/steps/upload-environment-variables/index.js.map +1 -0
  200. package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +14 -0
  201. package/dist/src/steps/upload-environment-variables/providers/vercel.js +104 -0
  202. package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -0
  203. package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +2 -0
  204. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js +49 -0
  205. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +1 -0
  206. package/dist/src/telemetry.d.ts +2 -0
  207. package/dist/src/telemetry.js +29 -0
  208. package/dist/src/telemetry.js.map +1 -0
  209. package/dist/src/utils/analytics.d.ts +24 -0
  210. package/dist/src/utils/analytics.js +139 -0
  211. package/dist/src/utils/analytics.js.map +1 -0
  212. package/dist/src/utils/bash.d.ts +2 -0
  213. package/dist/src/utils/bash.js +17 -0
  214. package/dist/src/utils/bash.js.map +1 -0
  215. package/dist/src/utils/clack-utils.d.ts +93 -0
  216. package/dist/src/utils/clack-utils.js +397 -0
  217. package/dist/src/utils/clack-utils.js.map +1 -0
  218. package/dist/src/utils/clack.d.ts +5 -0
  219. package/dist/src/utils/clack.js +34 -0
  220. package/dist/src/utils/clack.js.map +1 -0
  221. package/dist/src/utils/cli-symbols.d.ts +32 -0
  222. package/dist/src/utils/cli-symbols.js +46 -0
  223. package/dist/src/utils/cli-symbols.js.map +1 -0
  224. package/dist/src/utils/debug.d.ts +7 -0
  225. package/dist/src/utils/debug.js +88 -0
  226. package/dist/src/utils/debug.js.map +1 -0
  227. package/dist/src/utils/env-parser.d.ts +5 -0
  228. package/dist/src/utils/env-parser.js +18 -0
  229. package/dist/src/utils/env-parser.js.map +1 -0
  230. package/dist/src/utils/environment.d.ts +4 -0
  231. package/dist/src/utils/environment.js +69 -0
  232. package/dist/src/utils/environment.js.map +1 -0
  233. package/dist/src/utils/errors.d.ts +3 -0
  234. package/dist/src/utils/errors.js +7 -0
  235. package/dist/src/utils/errors.js.map +1 -0
  236. package/dist/src/utils/logging.d.ts +9 -0
  237. package/dist/src/utils/logging.js +36 -0
  238. package/dist/src/utils/logging.js.map +1 -0
  239. package/dist/src/utils/package-json.d.ts +25 -0
  240. package/dist/src/utils/package-json.js +21 -0
  241. package/dist/src/utils/package-json.js.map +1 -0
  242. package/dist/src/utils/package-manager.d.ts +21 -0
  243. package/dist/src/utils/package-manager.js +167 -0
  244. package/dist/src/utils/package-manager.js.map +1 -0
  245. package/dist/src/utils/redact.d.ts +5 -0
  246. package/dist/src/utils/redact.js +29 -0
  247. package/dist/src/utils/redact.js.map +1 -0
  248. package/dist/src/utils/semver.d.ts +10 -0
  249. package/dist/src/utils/semver.js +43 -0
  250. package/dist/src/utils/semver.js.map +1 -0
  251. package/dist/src/utils/string.d.ts +1 -0
  252. package/dist/src/utils/string.js +6 -0
  253. package/dist/src/utils/string.js.map +1 -0
  254. package/dist/src/utils/telemetry-client.d.ts +15 -0
  255. package/dist/src/utils/telemetry-client.js +57 -0
  256. package/dist/src/utils/telemetry-client.js.map +1 -0
  257. package/dist/src/utils/telemetry-types.d.ts +51 -0
  258. package/dist/src/utils/telemetry-types.js +6 -0
  259. package/dist/src/utils/telemetry-types.js.map +1 -0
  260. package/dist/src/utils/types.d.ts +80 -0
  261. package/dist/src/utils/types.js +2 -0
  262. package/dist/src/utils/types.js.map +1 -0
  263. package/dist/src/utils/urls.d.ts +7 -0
  264. package/dist/src/utils/urls.js +8 -0
  265. package/dist/src/utils/urls.js.map +1 -0
  266. package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
  267. package/dist/src/utils/vendor/is-unicorn-supported.js +21 -0
  268. package/dist/src/utils/vendor/is-unicorn-supported.js.map +1 -0
  269. package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +2 -0
  270. package/dist/src/vanilla-js/vanilla-js-wizard-agent.js +47 -0
  271. package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +1 -0
  272. package/package.json +76 -84
  273. package/skills/workos-authkit-base/SKILL.md +113 -0
  274. package/skills/workos-authkit-nextjs/SKILL.md +115 -0
  275. package/skills/workos-authkit-react/SKILL.md +91 -0
  276. package/skills/workos-authkit-react-router/SKILL.md +106 -0
  277. package/skills/workos-authkit-tanstack-start/SKILL.md +104 -0
  278. package/skills/workos-authkit-vanilla-js/SKILL.md +81 -0
  279. package/build/apps/index.js +0 -50
  280. package/build/apps/slack.js +0 -151
  281. package/build/cli.js +0 -42
  282. package/build/config.js +0 -34
  283. package/build/dev.js +0 -5
  284. package/build/enable-api-access.png +0 -0
  285. package/build/groups.js +0 -480
  286. package/build/index.js +0 -3
  287. package/build/info.js +0 -69
  288. package/build/login.js +0 -161
  289. package/build/main.js +0 -214
  290. package/build/users.js +0 -402
  291. package/build/util.js +0 -157
  292. package/coverage/clover.xml +0 -66
  293. package/coverage/coverage-final.json +0 -4
  294. package/coverage/lcov-report/base.css +0 -212
  295. package/coverage/lcov-report/cli.ts.html +0 -329
  296. package/coverage/lcov-report/config.ts.html +0 -152
  297. package/coverage/lcov-report/index.html +0 -119
  298. package/coverage/lcov-report/prettify.css +0 -1
  299. package/coverage/lcov-report/prettify.js +0 -1
  300. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  301. package/coverage/lcov-report/sorter.js +0 -158
  302. package/coverage/lcov-report/util.ts.html +0 -350
  303. package/coverage/lcov.info +0 -121
  304. package/package-lock.json +0 -7617
  305. package/tests/util.test.ts +0 -35
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Progress tracking for wizard phases.
3
+ * Maps xstate machine states to user-friendly phase names.
4
+ */
5
+ export interface Phase {
6
+ id: string;
7
+ name: string;
8
+ number: number;
9
+ }
10
+ export declare const PHASES: Phase[];
11
+ export declare class ProgressTracker {
12
+ private currentPhase;
13
+ private completedPhases;
14
+ private readonly totalPhases;
15
+ enterPhase(stateId: string): void;
16
+ exitPhase(stateId: string): void;
17
+ getCurrentPhase(): Phase | null;
18
+ getCurrentIndicator(): string;
19
+ getCompletedSummary(): string[];
20
+ isComplete(): boolean;
21
+ reset(): void;
22
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Progress tracking for wizard phases.
3
+ * Maps xstate machine states to user-friendly phase names.
4
+ */
5
+ export const PHASES = [
6
+ { id: 'authenticating', name: 'Authentication', number: 1 },
7
+ { id: 'preparing', name: 'Detection', number: 2 },
8
+ { id: 'gatheringCredentials', name: 'Credentials', number: 3 },
9
+ { id: 'configuring', name: 'Configuration', number: 4 },
10
+ { id: 'runningAgent', name: 'Installation', number: 5 },
11
+ ];
12
+ export class ProgressTracker {
13
+ currentPhase = null;
14
+ completedPhases = [];
15
+ totalPhases = PHASES.length;
16
+ enterPhase(stateId) {
17
+ const phase = PHASES.find((p) => p.id === stateId);
18
+ if (phase) {
19
+ this.currentPhase = phase;
20
+ }
21
+ }
22
+ exitPhase(stateId) {
23
+ const phase = PHASES.find((p) => p.id === stateId);
24
+ if (phase && !this.completedPhases.some((p) => p.id === phase.id)) {
25
+ this.completedPhases.push(phase);
26
+ }
27
+ }
28
+ getCurrentPhase() {
29
+ return this.currentPhase;
30
+ }
31
+ getCurrentIndicator() {
32
+ if (!this.currentPhase)
33
+ return '';
34
+ return `[${this.currentPhase.number}/${this.totalPhases}] ${this.currentPhase.name}`;
35
+ }
36
+ getCompletedSummary() {
37
+ return this.completedPhases.map((p) => `✓ ${p.name}`);
38
+ }
39
+ isComplete() {
40
+ return this.completedPhases.length === this.totalPhases;
41
+ }
42
+ reset() {
43
+ this.currentPhase = null;
44
+ this.completedPhases = [];
45
+ }
46
+ }
47
+ //# sourceMappingURL=progress-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../../../src/lib/progress-tracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,EAAE;IAC3D,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE;IACjD,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;IAC9D,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE;IACvD,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE;CACxD,CAAC;AAEF,MAAM,OAAO,eAAe;IAClB,YAAY,GAAiB,IAAI,CAAC;IAClC,eAAe,GAAY,EAAE,CAAC;IACrB,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAE7C,UAAU,CAAC,OAAe;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,SAAS,CAAC,OAAe;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACvF,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC;IAC1D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;CACF","sourcesContent":["/**\n * Progress tracking for wizard phases.\n * Maps xstate machine states to user-friendly phase names.\n */\n\nexport interface Phase {\n id: string;\n name: string;\n number: number;\n}\n\nexport const PHASES: Phase[] = [\n { id: 'authenticating', name: 'Authentication', number: 1 },\n { id: 'preparing', name: 'Detection', number: 2 },\n { id: 'gatheringCredentials', name: 'Credentials', number: 3 },\n { id: 'configuring', name: 'Configuration', number: 4 },\n { id: 'runningAgent', name: 'Installation', number: 5 },\n];\n\nexport class ProgressTracker {\n private currentPhase: Phase | null = null;\n private completedPhases: Phase[] = [];\n private readonly totalPhases = PHASES.length;\n\n enterPhase(stateId: string): void {\n const phase = PHASES.find((p) => p.id === stateId);\n if (phase) {\n this.currentPhase = phase;\n }\n }\n\n exitPhase(stateId: string): void {\n const phase = PHASES.find((p) => p.id === stateId);\n if (phase && !this.completedPhases.some((p) => p.id === phase.id)) {\n this.completedPhases.push(phase);\n }\n }\n\n getCurrentPhase(): Phase | null {\n return this.currentPhase;\n }\n\n getCurrentIndicator(): string {\n if (!this.currentPhase) return '';\n return `[${this.currentPhase.number}/${this.totalPhases}] ${this.currentPhase.name}`;\n }\n\n getCompletedSummary(): string[] {\n return this.completedPhases.map((p) => `✓ ${p.name}`);\n }\n\n isComplete(): boolean {\n return this.completedPhases.length === this.totalPhases;\n }\n\n reset(): void {\n this.currentPhase = null;\n this.completedPhases = [];\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import type { WizardOptions } from '../utils/types.js';
2
+ export declare function runWithCore(options: WizardOptions): Promise<void>;
@@ -0,0 +1,266 @@
1
+ import { createActor, fromPromise } from 'xstate';
2
+ import { createSkyInspector } from '@statelyai/inspect';
3
+ import open from 'opn';
4
+ import { existsSync, readFileSync } from 'fs';
5
+ import { join } from 'path';
6
+ import { wizardMachine } from './wizard-core.js';
7
+ import { createWizardEventEmitter } from './events.js';
8
+ import { CLIAdapter } from './adapters/cli-adapter.js';
9
+ import { DashboardAdapter } from './adapters/dashboard-adapter.js';
10
+ import { Integration } from './constants.js';
11
+ import { parseEnvFile } from '../utils/env-parser.js';
12
+ import { enableDebugLogs, initLogFile, logInfo, logError } from '../utils/debug.js';
13
+ import { getAccessToken, getCredentials } from './credentials.js';
14
+ import { analytics } from '../utils/analytics.js';
15
+ import { getVersion } from './settings.js';
16
+ import { getLlmGatewayUrlFromHost } from '../utils/urls.js';
17
+ import { runLogin } from '../commands/login.js';
18
+ import { isInGitRepo, getUncommittedOrUntrackedFiles } from '../utils/clack-utils.js';
19
+ import { INTEGRATION_CONFIG, INTEGRATION_ORDER } from './config.js';
20
+ import { autoConfigureWorkOSEnvironment } from './workos-management.js';
21
+ import { detectPort, getCallbackPath } from './port-detection.js';
22
+ import { writeEnvLocal } from './env-writer.js';
23
+ import { runNextjsWizardAgent } from '../nextjs/nextjs-wizard-agent.js';
24
+ import { runReactWizardAgent } from '../react/react-wizard-agent.js';
25
+ import { runReactRouterWizardAgent } from '../react-router/react-router-wizard-agent.js';
26
+ import { runTanstackStartWizardAgent } from '../tanstack-start/tanstack-start-wizard-agent.js';
27
+ import { runVanillaJsWizardAgent } from '../vanilla-js/vanilla-js-wizard-agent.js';
28
+ async function runIntegrationWizardFn(integration, options) {
29
+ switch (integration) {
30
+ case Integration.nextjs:
31
+ return runNextjsWizardAgent(options);
32
+ case Integration.react:
33
+ return runReactWizardAgent(options);
34
+ case Integration.reactRouter:
35
+ return runReactRouterWizardAgent(options);
36
+ case Integration.tanstackStart:
37
+ return runTanstackStartWizardAgent(options);
38
+ case Integration.vanillaJs:
39
+ return runVanillaJsWizardAgent(options);
40
+ default:
41
+ throw new Error(`Unknown integration: ${integration}`);
42
+ }
43
+ }
44
+ function readExistingCredentials(installDir) {
45
+ const envPath = join(installDir, '.env.local');
46
+ if (!existsSync(envPath)) {
47
+ return {};
48
+ }
49
+ try {
50
+ const content = readFileSync(envPath, 'utf-8');
51
+ const envVars = parseEnvFile(content);
52
+ return {
53
+ apiKey: envVars.WORKOS_API_KEY || undefined,
54
+ clientId: envVars.WORKOS_CLIENT_ID || undefined,
55
+ };
56
+ }
57
+ catch {
58
+ return {};
59
+ }
60
+ }
61
+ async function detectIntegrationFn(options) {
62
+ const integrationConfigs = Object.entries(INTEGRATION_CONFIG).sort(([a], [b]) => INTEGRATION_ORDER.indexOf(a) - INTEGRATION_ORDER.indexOf(b));
63
+ for (const [integration, config] of integrationConfigs) {
64
+ const detected = await config.detect(options);
65
+ if (detected) {
66
+ return integration;
67
+ }
68
+ }
69
+ return undefined;
70
+ }
71
+ export async function runWithCore(options) {
72
+ // Initialize debug/logging early so we capture all failures
73
+ initLogFile();
74
+ if (options.debug) {
75
+ enableDebugLogs();
76
+ }
77
+ logInfo('Wizard starting with options:', {
78
+ debug: options.debug,
79
+ dashboard: options.dashboard,
80
+ local: options.local,
81
+ ci: options.ci,
82
+ skipAuth: options.skipAuth,
83
+ installDir: options.installDir,
84
+ });
85
+ // Configure telemetry endpoint (same URL as LLM gateway)
86
+ const gatewayUrl = getLlmGatewayUrlFromHost();
87
+ analytics.setGatewayUrl(gatewayUrl);
88
+ const existingCreds = readExistingCredentials(options.installDir);
89
+ const augmentedOptions = {
90
+ ...options,
91
+ apiKey: options.apiKey || existingCreds.apiKey,
92
+ clientId: options.clientId || existingCreds.clientId,
93
+ };
94
+ const emitter = createWizardEventEmitter();
95
+ let actor = null;
96
+ const sendEvent = (event) => {
97
+ if (actor) {
98
+ actor.send(event);
99
+ }
100
+ };
101
+ const adapter = options.dashboard
102
+ ? new DashboardAdapter({ emitter, sendEvent, debug: augmentedOptions.debug })
103
+ : new CLIAdapter({ emitter, sendEvent, debug: augmentedOptions.debug });
104
+ const machineWithActors = wizardMachine.provide({
105
+ actors: {
106
+ checkAuthentication: fromPromise(async () => {
107
+ const token = getAccessToken();
108
+ if (token) {
109
+ // Set telemetry from existing credentials
110
+ const creds = getCredentials();
111
+ if (creds) {
112
+ analytics.setAccessToken(creds.accessToken);
113
+ analytics.setDistinctId(creds.userId);
114
+ }
115
+ return true;
116
+ }
117
+ await runLogin();
118
+ const newToken = getAccessToken();
119
+ if (!newToken) {
120
+ throw new Error('Authentication failed. Please try again.');
121
+ }
122
+ // Set telemetry after fresh login
123
+ const creds = getCredentials();
124
+ if (creds) {
125
+ analytics.setAccessToken(creds.accessToken);
126
+ analytics.setDistinctId(creds.userId);
127
+ }
128
+ return true;
129
+ }),
130
+ detectIntegration: fromPromise(async ({ input }) => {
131
+ const integration = await detectIntegrationFn({ installDir: input.options.installDir });
132
+ return { integration };
133
+ }),
134
+ checkGitStatus: fromPromise(async () => {
135
+ if (!isInGitRepo()) {
136
+ return { isClean: true, files: [] };
137
+ }
138
+ const files = getUncommittedOrUntrackedFiles();
139
+ return { isClean: files.length === 0, files };
140
+ }),
141
+ configureEnvironment: fromPromise(async ({ input }) => {
142
+ const { context } = input;
143
+ const { options: wizardOptions, integration, credentials } = context;
144
+ if (!integration || !credentials) {
145
+ throw new Error('Missing integration or credentials');
146
+ }
147
+ const port = detectPort(integration, wizardOptions.installDir);
148
+ const callbackPath = getCallbackPath(integration);
149
+ const redirectUri = wizardOptions.redirectUri || `http://localhost:${port}${callbackPath}`;
150
+ const requiresApiKey = [Integration.nextjs, Integration.tanstackStart, Integration.reactRouter].includes(integration);
151
+ if (credentials.apiKey && requiresApiKey) {
152
+ await autoConfigureWorkOSEnvironment(credentials.apiKey, integration, port, {
153
+ homepageUrl: wizardOptions.homepageUrl,
154
+ redirectUri: wizardOptions.redirectUri,
155
+ });
156
+ }
157
+ const redirectUriKey = integration === Integration.nextjs ? 'NEXT_PUBLIC_WORKOS_REDIRECT_URI' : 'WORKOS_REDIRECT_URI';
158
+ writeEnvLocal(wizardOptions.installDir, {
159
+ ...(credentials.apiKey ? { WORKOS_API_KEY: credentials.apiKey } : {}),
160
+ WORKOS_CLIENT_ID: credentials.clientId,
161
+ [redirectUriKey]: redirectUri,
162
+ });
163
+ }),
164
+ runAgent: fromPromise(async ({ input }) => {
165
+ const { context } = input;
166
+ const { options: wizardOptions, integration, credentials } = context;
167
+ if (!integration) {
168
+ return { success: false, error: new Error('No integration specified') };
169
+ }
170
+ try {
171
+ const agentOptions = {
172
+ ...wizardOptions,
173
+ apiKey: credentials?.apiKey,
174
+ clientId: credentials?.clientId,
175
+ emitter: context.emitter,
176
+ };
177
+ const summary = await runIntegrationWizardFn(integration, agentOptions);
178
+ return {
179
+ success: true,
180
+ summary: summary || `Successfully installed WorkOS AuthKit for ${integration}!`,
181
+ };
182
+ }
183
+ catch (error) {
184
+ return {
185
+ success: false,
186
+ error: error instanceof Error ? error : new Error(String(error)),
187
+ };
188
+ }
189
+ }),
190
+ },
191
+ });
192
+ let inspector;
193
+ if (augmentedOptions.inspect) {
194
+ const originalLog = console.log;
195
+ let inspectUrl;
196
+ console.log = (...args) => {
197
+ const msg = args.join(' ');
198
+ if (typeof msg === 'string' && msg.startsWith('https://stately.ai/inspect/')) {
199
+ inspectUrl = msg;
200
+ console.log = originalLog;
201
+ console.log(`Opening XState inspector: ${inspectUrl}`);
202
+ void open(inspectUrl);
203
+ }
204
+ else {
205
+ originalLog.apply(console, args);
206
+ }
207
+ };
208
+ inspector = createSkyInspector();
209
+ setTimeout(() => {
210
+ console.log = originalLog;
211
+ }, 5000).unref();
212
+ }
213
+ actor = createActor(machineWithActors, {
214
+ input: { emitter, options: augmentedOptions },
215
+ inspect: inspector?.inspect,
216
+ });
217
+ await adapter.start();
218
+ // Start telemetry session
219
+ const mode = augmentedOptions.dashboard ? 'tui' : 'cli';
220
+ analytics.sessionStart(mode, getVersion());
221
+ let wizardStatus = 'success';
222
+ // Handle ctrl+c by sending CANCEL to state machine for graceful shutdown
223
+ const handleSigint = () => {
224
+ wizardStatus = 'cancelled';
225
+ actor?.send({ type: 'CANCEL' });
226
+ };
227
+ process.on('SIGINT', handleSigint);
228
+ try {
229
+ await new Promise((resolve, reject) => {
230
+ actor.subscribe({
231
+ complete: () => {
232
+ const snapshot = actor.getSnapshot();
233
+ if (snapshot.value === 'error') {
234
+ const err = snapshot.context.error;
235
+ wizardStatus = 'error';
236
+ reject(err ?? new Error('Wizard failed'));
237
+ }
238
+ else if (snapshot.value === 'cancelled') {
239
+ wizardStatus = 'cancelled';
240
+ resolve();
241
+ }
242
+ else {
243
+ resolve();
244
+ }
245
+ },
246
+ error: (err) => {
247
+ wizardStatus = 'error';
248
+ reject(err);
249
+ },
250
+ });
251
+ actor.start();
252
+ actor.send({ type: 'START' });
253
+ });
254
+ }
255
+ catch (error) {
256
+ wizardStatus = 'error';
257
+ logError('Wizard failed with error:', error instanceof Error ? error.stack || error.message : String(error));
258
+ throw error;
259
+ }
260
+ finally {
261
+ process.off('SIGINT', handleSigint);
262
+ await analytics.shutdown(wizardStatus);
263
+ await adapter.stop();
264
+ }
265
+ }
266
+ //# sourceMappingURL=run-with-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-with-core.js","sourceRoot":"","sources":["../../../src/lib/run-with-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { createActor, fromPromise } from 'xstate';\nimport { createSkyInspector } from '@statelyai/inspect';\nimport open from 'opn';\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport { wizardMachine } from './wizard-core.js';\nimport { createWizardEventEmitter } from './events.js';\nimport { CLIAdapter } from './adapters/cli-adapter.js';\nimport { DashboardAdapter } from './adapters/dashboard-adapter.js';\nimport type { WizardAdapter } from './adapters/types.js';\nimport type { WizardOptions } from '../utils/types.js';\nimport type { WizardMachineContext, DetectionOutput, GitCheckOutput, AgentOutput } from './wizard-core.types.js';\nimport { Integration } from './constants.js';\nimport { parseEnvFile } from '../utils/env-parser.js';\nimport { enableDebugLogs, initLogFile, logInfo, logError } from '../utils/debug.js';\n\nimport { getAccessToken, getCredentials } from './credentials.js';\nimport { analytics } from '../utils/analytics.js';\nimport { getVersion } from './settings.js';\nimport { getLlmGatewayUrlFromHost } from '../utils/urls.js';\nimport { runLogin } from '../commands/login.js';\nimport { isInGitRepo, getUncommittedOrUntrackedFiles } from '../utils/clack-utils.js';\nimport { INTEGRATION_CONFIG, INTEGRATION_ORDER } from './config.js';\nimport { autoConfigureWorkOSEnvironment } from './workos-management.js';\nimport { detectPort, getCallbackPath } from './port-detection.js';\nimport { writeEnvLocal } from './env-writer.js';\nimport { runNextjsWizardAgent } from '../nextjs/nextjs-wizard-agent.js';\nimport { runReactWizardAgent } from '../react/react-wizard-agent.js';\nimport { runReactRouterWizardAgent } from '../react-router/react-router-wizard-agent.js';\nimport { runTanstackStartWizardAgent } from '../tanstack-start/tanstack-start-wizard-agent.js';\nimport { runVanillaJsWizardAgent } from '../vanilla-js/vanilla-js-wizard-agent.js';\n\nasync function runIntegrationWizardFn(integration: Integration, options: WizardOptions): Promise<string> {\n switch (integration) {\n case Integration.nextjs:\n return runNextjsWizardAgent(options);\n case Integration.react:\n return runReactWizardAgent(options);\n case Integration.reactRouter:\n return runReactRouterWizardAgent(options);\n case Integration.tanstackStart:\n return runTanstackStartWizardAgent(options);\n case Integration.vanillaJs:\n return runVanillaJsWizardAgent(options);\n default:\n throw new Error(`Unknown integration: ${integration}`);\n }\n}\n\nfunction readExistingCredentials(installDir: string): { apiKey?: string; clientId?: string } {\n const envPath = join(installDir, '.env.local');\n if (!existsSync(envPath)) {\n return {};\n }\n\n try {\n const content = readFileSync(envPath, 'utf-8');\n const envVars = parseEnvFile(content);\n return {\n apiKey: envVars.WORKOS_API_KEY || undefined,\n clientId: envVars.WORKOS_CLIENT_ID || undefined,\n };\n } catch {\n return {};\n }\n}\n\nasync function detectIntegrationFn(options: Pick<WizardOptions, 'installDir'>): Promise<Integration | undefined> {\n const integrationConfigs = Object.entries(INTEGRATION_CONFIG).sort(\n ([a], [b]) => INTEGRATION_ORDER.indexOf(a as Integration) - INTEGRATION_ORDER.indexOf(b as Integration),\n );\n\n for (const [integration, config] of integrationConfigs) {\n const detected = await config.detect(options);\n if (detected) {\n return integration as Integration;\n }\n }\n return undefined;\n}\n\nexport async function runWithCore(options: WizardOptions): Promise<void> {\n // Initialize debug/logging early so we capture all failures\n initLogFile();\n if (options.debug) {\n enableDebugLogs();\n }\n logInfo('Wizard starting with options:', {\n debug: options.debug,\n dashboard: options.dashboard,\n local: options.local,\n ci: options.ci,\n skipAuth: options.skipAuth,\n installDir: options.installDir,\n });\n\n // Configure telemetry endpoint (same URL as LLM gateway)\n const gatewayUrl = getLlmGatewayUrlFromHost();\n analytics.setGatewayUrl(gatewayUrl);\n\n const existingCreds = readExistingCredentials(options.installDir);\n const augmentedOptions: WizardOptions = {\n ...options,\n apiKey: options.apiKey || existingCreds.apiKey,\n clientId: options.clientId || existingCreds.clientId,\n };\n\n const emitter = createWizardEventEmitter();\n let actor: ReturnType<typeof createActor<typeof wizardMachine>> | null = null;\n\n const sendEvent = (event: { type: string; [key: string]: unknown }) => {\n if (actor) {\n actor.send(event as Parameters<typeof actor.send>[0]);\n }\n };\n\n const adapter: WizardAdapter = options.dashboard\n ? new DashboardAdapter({ emitter, sendEvent, debug: augmentedOptions.debug })\n : new CLIAdapter({ emitter, sendEvent, debug: augmentedOptions.debug });\n\n const machineWithActors = wizardMachine.provide({\n actors: {\n checkAuthentication: fromPromise(async () => {\n const token = getAccessToken();\n if (token) {\n // Set telemetry from existing credentials\n const creds = getCredentials();\n if (creds) {\n analytics.setAccessToken(creds.accessToken);\n analytics.setDistinctId(creds.userId);\n }\n return true;\n }\n\n await runLogin();\n\n const newToken = getAccessToken();\n if (!newToken) {\n throw new Error('Authentication failed. Please try again.');\n }\n\n // Set telemetry after fresh login\n const creds = getCredentials();\n if (creds) {\n analytics.setAccessToken(creds.accessToken);\n analytics.setDistinctId(creds.userId);\n }\n return true;\n }),\n\n detectIntegration: fromPromise<DetectionOutput, { options: WizardOptions }>(async ({ input }) => {\n const integration = await detectIntegrationFn({ installDir: input.options.installDir });\n return { integration };\n }),\n\n checkGitStatus: fromPromise<GitCheckOutput, { installDir: string }>(async () => {\n if (!isInGitRepo()) {\n return { isClean: true, files: [] };\n }\n const files = getUncommittedOrUntrackedFiles();\n return { isClean: files.length === 0, files };\n }),\n\n configureEnvironment: fromPromise<void, { context: WizardMachineContext }>(async ({ input }) => {\n const { context } = input;\n const { options: wizardOptions, integration, credentials } = context;\n\n if (!integration || !credentials) {\n throw new Error('Missing integration or credentials');\n }\n\n const port = detectPort(integration, wizardOptions.installDir);\n const callbackPath = getCallbackPath(integration);\n const redirectUri = wizardOptions.redirectUri || `http://localhost:${port}${callbackPath}`;\n\n const requiresApiKey = [Integration.nextjs, Integration.tanstackStart, Integration.reactRouter].includes(\n integration,\n );\n if (credentials.apiKey && requiresApiKey) {\n await autoConfigureWorkOSEnvironment(credentials.apiKey, integration, port, {\n homepageUrl: wizardOptions.homepageUrl,\n redirectUri: wizardOptions.redirectUri,\n });\n }\n\n const redirectUriKey =\n integration === Integration.nextjs ? 'NEXT_PUBLIC_WORKOS_REDIRECT_URI' : 'WORKOS_REDIRECT_URI';\n\n writeEnvLocal(wizardOptions.installDir, {\n ...(credentials.apiKey ? { WORKOS_API_KEY: credentials.apiKey } : {}),\n WORKOS_CLIENT_ID: credentials.clientId,\n [redirectUriKey]: redirectUri,\n });\n }),\n\n runAgent: fromPromise<AgentOutput, { context: WizardMachineContext }>(async ({ input }) => {\n const { context } = input;\n const { options: wizardOptions, integration, credentials } = context;\n\n if (!integration) {\n return { success: false, error: new Error('No integration specified') };\n }\n\n try {\n const agentOptions: WizardOptions = {\n ...wizardOptions,\n apiKey: credentials?.apiKey,\n clientId: credentials?.clientId,\n emitter: context.emitter,\n };\n const summary = await runIntegrationWizardFn(integration, agentOptions);\n return {\n success: true,\n summary: summary || `Successfully installed WorkOS AuthKit for ${integration}!`,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }),\n },\n });\n\n let inspector: ReturnType<typeof createSkyInspector> | undefined;\n if (augmentedOptions.inspect) {\n const originalLog = console.log;\n let inspectUrl: string | undefined;\n\n console.log = (...args: unknown[]) => {\n const msg = args.join(' ');\n if (typeof msg === 'string' && msg.startsWith('https://stately.ai/inspect/')) {\n inspectUrl = msg;\n console.log = originalLog;\n console.log(`Opening XState inspector: ${inspectUrl}`);\n void open(inspectUrl);\n } else {\n originalLog.apply(console, args);\n }\n };\n\n inspector = createSkyInspector();\n setTimeout(() => {\n console.log = originalLog;\n }, 5000).unref();\n }\n\n actor = createActor(machineWithActors, {\n input: { emitter, options: augmentedOptions },\n inspect: inspector?.inspect,\n });\n\n await adapter.start();\n\n // Start telemetry session\n const mode = augmentedOptions.dashboard ? 'tui' : 'cli';\n analytics.sessionStart(mode, getVersion());\n\n let wizardStatus: 'success' | 'error' | 'cancelled' = 'success';\n\n // Handle ctrl+c by sending CANCEL to state machine for graceful shutdown\n const handleSigint = () => {\n wizardStatus = 'cancelled';\n actor?.send({ type: 'CANCEL' });\n };\n process.on('SIGINT', handleSigint);\n\n try {\n await new Promise<void>((resolve, reject) => {\n actor!.subscribe({\n complete: () => {\n const snapshot = actor!.getSnapshot();\n if (snapshot.value === 'error') {\n const err = snapshot.context.error;\n wizardStatus = 'error';\n reject(err ?? new Error('Wizard failed'));\n } else if (snapshot.value === 'cancelled') {\n wizardStatus = 'cancelled';\n resolve();\n } else {\n resolve();\n }\n },\n error: (err) => {\n wizardStatus = 'error';\n reject(err);\n },\n });\n\n actor!.start();\n actor!.send({ type: 'START' });\n });\n } catch (error) {\n wizardStatus = 'error';\n logError('Wizard failed with error:', error instanceof Error ? error.stack || error.message : String(error));\n throw error;\n } finally {\n process.off('SIGINT', handleSigint);\n await analytics.shutdown(wizardStatus);\n await adapter.stop();\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const LINTING_TOOLS: string[];
2
+ export type LintingTool = (typeof LINTING_TOOLS)[number];
@@ -0,0 +1,212 @@
1
+ export const LINTING_TOOLS = [
2
+ // All (general purpose)
3
+ 'codespell',
4
+ 'cspell',
5
+ 'git-diff-check',
6
+ 'gitleaks',
7
+ 'trufflehog',
8
+ // Amazon States Language
9
+ 'asl-validator',
10
+ // Ansible
11
+ 'ansible-lint',
12
+ // Apex, Java
13
+ 'pmd',
14
+ // Astro, CSS, GraphQL, GritQL, HTML, JavaScript, JSON, JSONC, JSON5, JSX, TSX, Svelte, TypeScript, Vue
15
+ 'biome',
16
+ // AWS CloudFormation templates
17
+ 'cfn-lint',
18
+ 'cfnlint',
19
+ // AWS CloudFormation, Azure ARM, Dockerfile, Helm, Kubernetes, Security, Terraform
20
+ 'checkov',
21
+ // AWS CloudFormation, Azure ARM, Dockerfile, Kubernetes, Secrets, Security, Terraform, Vulnerabilities
22
+ 'trivy',
23
+ // Azure Resource Manager (ARM)
24
+ 'test-aztemplate',
25
+ // Bash / Shell
26
+ 'shellcheck',
27
+ 'shfmt',
28
+ // Bazel, Starlark
29
+ 'buildifier',
30
+ // C, C++
31
+ 'cpplint',
32
+ 'clang-format',
33
+ 'clang-tidy',
34
+ 'cmake-format',
35
+ 'iwyu',
36
+ 'pragma-once',
37
+ // C#, Dotnet (.NET)
38
+ 'dotnet-format',
39
+ // CircleCI Config
40
+ 'circleci',
41
+ // Clojure
42
+ 'clj-kondo',
43
+ // CoffeeScript
44
+ 'coffeelint',
45
+ // Commit messages
46
+ 'commitlint',
47
+ // Copy/paste detection
48
+ 'jscpd',
49
+ // CSS, SCSS, Sass
50
+ 'stylelint',
51
+ // CSS, GraphQL, HTML, JavaScript, JSON, JSONC, JSON5, JSX, TSX, Markdown, TypeScript, Vue, YAML
52
+ 'prettier',
53
+ // Cue
54
+ 'cue-fmt',
55
+ // Dart
56
+ 'dart',
57
+ // Dockerfile / Docker
58
+ 'hadolint',
59
+ // Dotenv
60
+ 'dotenv-linter',
61
+ // EditorConfig
62
+ 'editorconfig-checker',
63
+ // GitHub Actions
64
+ 'actionlint',
65
+ 'zizmor',
66
+ // Go
67
+ 'gofmt',
68
+ 'gofumpt',
69
+ 'goimports',
70
+ 'gokart',
71
+ 'golangci-lint',
72
+ 'golines',
73
+ // Go, Java, JavaScript, JSON, Python, Ruby, TypeScript, YAML
74
+ 'semgrep',
75
+ // GoReleaser
76
+ 'goreleaser',
77
+ // GraphQL
78
+ 'graphql-schema-linter',
79
+ // Groovy
80
+ 'npm-groovy-lint',
81
+ // HAML
82
+ 'haml-lint',
83
+ // HTML
84
+ 'htmlhint',
85
+ // HTML Templates
86
+ 'djlint',
87
+ // Java
88
+ 'checkstyle',
89
+ 'google-java-format',
90
+ // JavaScript, JSON, TypeScript
91
+ 'eslint',
92
+ // Next.js
93
+ 'next lint',
94
+ // JavaScript, JSON, Markdown, TypeScript
95
+ 'deno',
96
+ // JavaScript, TypeScript
97
+ 'rome',
98
+ // JSON, JSONC, JSON5
99
+ 'eslint-plugin-jsonc',
100
+ 'eslint-plugin-json',
101
+ // JSX, TSX
102
+ 'eslint-plugin-jsx-a11y',
103
+ 'eslint-plugin-react',
104
+ // Jupyter Notebook
105
+ 'nbqa',
106
+ // Kotlin
107
+ 'detekt',
108
+ 'ktlint',
109
+ // Kubernetes
110
+ 'kubeconform',
111
+ 'kube-linter',
112
+ // LaTeX
113
+ 'chktex',
114
+ // Lua
115
+ 'luacheck',
116
+ 'stylua',
117
+ // Markdown
118
+ 'markdownlint',
119
+ 'markdownlint-cli2',
120
+ 'markdown-link-check',
121
+ 'markdown-table-prettify',
122
+ 'remark-lint',
123
+ // Natural language / Prose
124
+ 'textlint',
125
+ 'vale',
126
+ // Nix
127
+ 'nixpkgs-fmt',
128
+ // OpenAPI
129
+ 'spectral',
130
+ // package.json
131
+ 'sort-package-json',
132
+ // Perl
133
+ 'perlcritic',
134
+ 'perltidy',
135
+ // PHP
136
+ 'php-cs-fixer',
137
+ 'phpcs',
138
+ 'phpstan',
139
+ 'psalm',
140
+ // PNG
141
+ 'oxipng',
142
+ // PowerShell
143
+ 'psscriptanalyzer',
144
+ // Prisma
145
+ 'prisma',
146
+ // Protocol Buffers (Protobuf)
147
+ 'protolint',
148
+ 'buf',
149
+ // Python
150
+ 'pylint',
151
+ 'flake8',
152
+ 'isort',
153
+ 'ruff',
154
+ 'black',
155
+ 'autopep8',
156
+ 'bandit',
157
+ 'mypy',
158
+ 'pyright',
159
+ 'sourcery',
160
+ 'yapf',
161
+ // R
162
+ 'lintr',
163
+ // Rego
164
+ 'opa',
165
+ 'regal',
166
+ // Ruby
167
+ 'rubocop',
168
+ 'brakeman',
169
+ 'rufo',
170
+ 'standardrb',
171
+ // Rust
172
+ 'clippy',
173
+ 'rustfmt',
174
+ // Scala
175
+ 'scalafmt',
176
+ // Security, Vulnerabilities
177
+ 'osv-scanner',
178
+ // Security, Terraform
179
+ 'terrascan',
180
+ 'tfsec',
181
+ // Snakemake
182
+ 'snakemake --lint',
183
+ 'snakefmt',
184
+ // SQL
185
+ 'sqlfluff',
186
+ 'sql-formatter',
187
+ 'sqlfmt',
188
+ 'squawk',
189
+ // SVG
190
+ 'svgo',
191
+ // Swift
192
+ 'stringslint',
193
+ 'swiftformat',
194
+ 'swiftlint',
195
+ // Terraform
196
+ 'tflint',
197
+ 'terraform',
198
+ 'tofu',
199
+ // Terragrunt
200
+ 'terragrunt',
201
+ // Textproto
202
+ 'txtpbfmt',
203
+ // TOML
204
+ 'taplo',
205
+ // Vue
206
+ 'eslint-plugin-vue',
207
+ // XML
208
+ 'xmllint',
209
+ // YAML
210
+ 'yamllint',
211
+ ];
212
+ //# sourceMappingURL=safe-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-tools.js","sourceRoot":"","sources":["../../../src/lib/safe-tools.ts"],"names":[],"mappings":"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","sourcesContent":["export const LINTING_TOOLS: string[] = [\n // All (general purpose)\n 'codespell',\n 'cspell',\n 'git-diff-check',\n 'gitleaks',\n 'trufflehog',\n\n // Amazon States Language\n 'asl-validator',\n\n // Ansible\n 'ansible-lint',\n\n // Apex, Java\n 'pmd',\n\n // Astro, CSS, GraphQL, GritQL, HTML, JavaScript, JSON, JSONC, JSON5, JSX, TSX, Svelte, TypeScript, Vue\n 'biome',\n\n // AWS CloudFormation templates\n 'cfn-lint',\n 'cfnlint',\n\n // AWS CloudFormation, Azure ARM, Dockerfile, Helm, Kubernetes, Security, Terraform\n 'checkov',\n\n // AWS CloudFormation, Azure ARM, Dockerfile, Kubernetes, Secrets, Security, Terraform, Vulnerabilities\n 'trivy',\n\n // Azure Resource Manager (ARM)\n 'test-aztemplate',\n\n // Bash / Shell\n 'shellcheck',\n 'shfmt',\n\n // Bazel, Starlark\n 'buildifier',\n\n // C, C++\n 'cpplint',\n 'clang-format',\n 'clang-tidy',\n 'cmake-format',\n 'iwyu',\n 'pragma-once',\n\n // C#, Dotnet (.NET)\n 'dotnet-format',\n\n // CircleCI Config\n 'circleci',\n\n // Clojure\n 'clj-kondo',\n\n // CoffeeScript\n 'coffeelint',\n\n // Commit messages\n 'commitlint',\n\n // Copy/paste detection\n 'jscpd',\n\n // CSS, SCSS, Sass\n 'stylelint',\n\n // CSS, GraphQL, HTML, JavaScript, JSON, JSONC, JSON5, JSX, TSX, Markdown, TypeScript, Vue, YAML\n 'prettier',\n\n // Cue\n 'cue-fmt',\n\n // Dart\n 'dart',\n\n // Dockerfile / Docker\n 'hadolint',\n\n // Dotenv\n 'dotenv-linter',\n\n // EditorConfig\n 'editorconfig-checker',\n\n // GitHub Actions\n 'actionlint',\n 'zizmor',\n\n // Go\n 'gofmt',\n 'gofumpt',\n 'goimports',\n 'gokart',\n 'golangci-lint',\n 'golines',\n\n // Go, Java, JavaScript, JSON, Python, Ruby, TypeScript, YAML\n 'semgrep',\n\n // GoReleaser\n 'goreleaser',\n\n // GraphQL\n 'graphql-schema-linter',\n\n // Groovy\n 'npm-groovy-lint',\n\n // HAML\n 'haml-lint',\n\n // HTML\n 'htmlhint',\n\n // HTML Templates\n 'djlint',\n\n // Java\n 'checkstyle',\n 'google-java-format',\n\n // JavaScript, JSON, TypeScript\n 'eslint',\n\n // Next.js\n 'next lint',\n\n // JavaScript, JSON, Markdown, TypeScript\n 'deno',\n\n // JavaScript, TypeScript\n 'rome',\n\n // JSON, JSONC, JSON5\n 'eslint-plugin-jsonc',\n 'eslint-plugin-json',\n\n // JSX, TSX\n 'eslint-plugin-jsx-a11y',\n 'eslint-plugin-react',\n\n // Jupyter Notebook\n 'nbqa',\n\n // Kotlin\n 'detekt',\n 'ktlint',\n\n // Kubernetes\n 'kubeconform',\n 'kube-linter',\n\n // LaTeX\n 'chktex',\n\n // Lua\n 'luacheck',\n 'stylua',\n\n // Markdown\n 'markdownlint',\n 'markdownlint-cli2',\n 'markdown-link-check',\n 'markdown-table-prettify',\n 'remark-lint',\n\n // Natural language / Prose\n 'textlint',\n 'vale',\n\n // Nix\n 'nixpkgs-fmt',\n\n // OpenAPI\n 'spectral',\n\n // package.json\n 'sort-package-json',\n\n // Perl\n 'perlcritic',\n 'perltidy',\n\n // PHP\n 'php-cs-fixer',\n 'phpcs',\n 'phpstan',\n 'psalm',\n\n // PNG\n 'oxipng',\n\n // PowerShell\n 'psscriptanalyzer',\n\n // Prisma\n 'prisma',\n\n // Protocol Buffers (Protobuf)\n 'protolint',\n 'buf',\n\n // Python\n 'pylint',\n 'flake8',\n 'isort',\n 'ruff',\n 'black',\n 'autopep8',\n 'bandit',\n 'mypy',\n 'pyright',\n 'sourcery',\n 'yapf',\n\n // R\n 'lintr',\n\n // Rego\n 'opa',\n 'regal',\n\n // Ruby\n 'rubocop',\n 'brakeman',\n 'rufo',\n 'standardrb',\n\n // Rust\n 'clippy',\n 'rustfmt',\n\n // Scala\n 'scalafmt',\n\n // Security, Vulnerabilities\n 'osv-scanner',\n\n // Security, Terraform\n 'terrascan',\n 'tfsec',\n\n // Snakemake\n 'snakemake --lint',\n 'snakefmt',\n\n // SQL\n 'sqlfluff',\n 'sql-formatter',\n 'sqlfmt',\n 'squawk',\n\n // SVG\n 'svgo',\n\n // Swift\n 'stringslint',\n 'swiftformat',\n 'swiftlint',\n\n // Terraform\n 'tflint',\n 'terraform',\n 'tofu',\n\n // Terragrunt\n 'terragrunt',\n\n // Textproto\n 'txtpbfmt',\n\n // TOML\n 'taplo',\n\n // Vue\n 'eslint-plugin-vue',\n\n // XML\n 'xmllint',\n\n // YAML\n 'yamllint',\n] as const;\n\nexport type LintingTool = (typeof LINTING_TOOLS)[number];\n"]}