workos 0.2.1 → 0.3.2

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 (404) hide show
  1. package/.claude-plugin/plugin.json +3 -3
  2. package/README.md +3 -2
  3. package/dist/bin.js +42 -20
  4. package/dist/bin.js.map +1 -1
  5. package/dist/cli.config.d.ts +6 -3
  6. package/dist/cli.config.js +8 -3
  7. package/dist/cli.config.js.map +1 -1
  8. package/dist/commands/install-skill.js.map +1 -0
  9. package/dist/{src/commands → commands}/install.js +8 -12
  10. package/dist/commands/install.js.map +1 -0
  11. package/dist/{src/commands → commands}/login.js +3 -2
  12. package/dist/commands/login.js.map +1 -0
  13. package/dist/commands/logout.js.map +1 -0
  14. package/dist/craft-pre-release.sh +10 -0
  15. package/dist/dashboard/components/AnimatedLogo.js.map +1 -0
  16. package/dist/dashboard/components/CompletionView.js.map +1 -0
  17. package/dist/dashboard/components/ConfirmPrompt.js.map +1 -0
  18. package/dist/dashboard/components/CredentialsForm.js.map +1 -0
  19. package/dist/dashboard/components/Dashboard.js.map +1 -0
  20. package/dist/{src/dashboard → dashboard}/components/DashboardLayout.d.ts +2 -2
  21. package/dist/dashboard/components/DashboardLayout.js.map +1 -0
  22. package/dist/{src/dashboard → dashboard}/components/DiffPanel.d.ts +2 -2
  23. package/dist/dashboard/components/DiffPanel.js.map +1 -0
  24. package/dist/dashboard/components/InlinePrompt.js.map +1 -0
  25. package/dist/{src/dashboard → dashboard}/components/OutputPanel.d.ts +2 -2
  26. package/dist/dashboard/components/OutputPanel.js.map +1 -0
  27. package/dist/dashboard/components/Panel.js.map +1 -0
  28. package/dist/dashboard/components/TextInput.js.map +1 -0
  29. package/dist/dashboard/components/WelcomeArt.js.map +1 -0
  30. package/dist/dashboard/hooks/useAnimation.js.map +1 -0
  31. package/dist/dashboard/hooks/useKeyboard.js.map +1 -0
  32. package/dist/dashboard/hooks/useTerminalSize.js.map +1 -0
  33. package/dist/{src/dashboard → dashboard}/index.d.ts +2 -2
  34. package/dist/dashboard/index.js.map +1 -0
  35. package/dist/dashboard/lib/diff-utils.js.map +1 -0
  36. package/dist/dashboard/lib/logo-frames.js.map +1 -0
  37. package/dist/dashboard/lib/welcome-art.js.map +1 -0
  38. package/dist/dashboard/types.d.ts +5 -0
  39. package/dist/dashboard/types.js.map +1 -0
  40. package/dist/{src/lib → lib}/adapters/cli-adapter.d.ts +5 -5
  41. package/dist/{src/lib → lib}/adapters/cli-adapter.js +5 -5
  42. package/dist/lib/adapters/cli-adapter.js.map +1 -0
  43. package/dist/{src/lib → lib}/adapters/dashboard-adapter.d.ts +4 -4
  44. package/dist/lib/adapters/dashboard-adapter.js.map +1 -0
  45. package/dist/{src/lib → lib}/adapters/index.d.ts +1 -1
  46. package/dist/lib/adapters/index.js.map +1 -0
  47. package/dist/{src/lib → lib}/adapters/types.d.ts +4 -4
  48. package/dist/lib/adapters/types.js.map +1 -0
  49. package/dist/{src/lib → lib}/agent-interface.d.ts +15 -9
  50. package/dist/{src/lib → lib}/agent-interface.js +146 -61
  51. package/dist/lib/agent-interface.js.map +1 -0
  52. package/dist/{src/lib → lib}/agent-runner.d.ts +2 -2
  53. package/dist/{src/lib → lib}/agent-runner.js +4 -4
  54. package/dist/lib/agent-runner.js.map +1 -0
  55. package/dist/{src/lib → lib}/ai-content.d.ts +6 -2
  56. package/dist/lib/ai-content.js +130 -0
  57. package/dist/lib/ai-content.js.map +1 -0
  58. package/dist/lib/api.js.map +1 -0
  59. package/dist/lib/background-refresh.d.ts +29 -0
  60. package/dist/lib/background-refresh.js +95 -0
  61. package/dist/lib/background-refresh.js.map +1 -0
  62. package/dist/{src/lib → lib}/config.d.ts +6 -6
  63. package/dist/lib/config.js.map +1 -0
  64. package/dist/{src/lib → lib}/constants.d.ts +1 -1
  65. package/dist/{src/lib → lib}/constants.js +1 -1
  66. package/dist/lib/constants.js.map +1 -0
  67. package/dist/lib/credential-discovery.js.map +1 -0
  68. package/dist/lib/credential-proxy.d.ts +36 -0
  69. package/dist/lib/credential-proxy.js +298 -0
  70. package/dist/lib/credential-proxy.js.map +1 -0
  71. package/dist/{src/lib → lib}/credentials.d.ts +6 -0
  72. package/dist/{src/lib → lib}/credentials.js +33 -0
  73. package/dist/lib/credentials.js.map +1 -0
  74. package/dist/{src/lib → lib}/device-auth.d.ts +1 -0
  75. package/dist/{src/lib → lib}/device-auth.js +2 -1
  76. package/dist/lib/device-auth.js.map +1 -0
  77. package/dist/lib/ensure-auth.d.ts +22 -0
  78. package/dist/lib/ensure-auth.js +83 -0
  79. package/dist/lib/ensure-auth.js.map +1 -0
  80. package/dist/lib/env-writer.js.map +1 -0
  81. package/dist/{src/lib → lib}/events.d.ts +8 -8
  82. package/dist/{src/lib → lib}/events.js +3 -3
  83. package/dist/{src/lib → lib}/events.js.map +1 -1
  84. package/dist/{src/lib → lib}/framework-config.d.ts +2 -2
  85. package/dist/{src/lib → lib}/framework-config.js +1 -1
  86. package/dist/lib/framework-config.js.map +1 -0
  87. package/dist/lib/helper-functions.js.map +1 -0
  88. package/dist/{src/lib/wizard-core.d.ts → lib/installer-core.d.ts} +21 -17
  89. package/dist/{src/lib/wizard-core.js → lib/installer-core.js} +19 -17
  90. package/dist/lib/installer-core.js.map +1 -0
  91. package/dist/{src/lib/wizard-core.types.d.ts → lib/installer-core.types.d.ts} +9 -9
  92. package/dist/lib/installer-core.types.js +2 -0
  93. package/dist/lib/installer-core.types.js.map +1 -0
  94. package/dist/lib/port-detection.js.map +1 -0
  95. package/dist/lib/post-install.js.map +1 -0
  96. package/dist/lib/progress-tracker.js.map +1 -0
  97. package/dist/lib/run-with-core.d.ts +2 -0
  98. package/dist/{src/lib → lib}/run-with-core.js +38 -48
  99. package/dist/lib/run-with-core.js.map +1 -0
  100. package/dist/lib/safe-tools.js.map +1 -0
  101. package/dist/{src/lib → lib}/settings.d.ts +3 -0
  102. package/dist/{src/lib → lib}/settings.js +1 -1
  103. package/dist/lib/settings.js.map +1 -0
  104. package/dist/lib/staging-api.js.map +1 -0
  105. package/dist/lib/token-refresh-client.d.ts +23 -0
  106. package/dist/lib/token-refresh-client.js +88 -0
  107. package/dist/lib/token-refresh-client.js.map +1 -0
  108. package/dist/{src/lib → lib}/token-refresh.js +1 -1
  109. package/dist/lib/token-refresh.js.map +1 -0
  110. package/dist/lib/validation/build-validator.js.map +1 -0
  111. package/dist/lib/validation/index.js.map +1 -0
  112. package/dist/lib/validation/types.js.map +1 -0
  113. package/dist/lib/validation/validator.js.map +1 -0
  114. package/dist/{src/lib → lib}/workos-management.js +3 -3
  115. package/dist/lib/workos-management.js.map +1 -0
  116. package/dist/nextjs/nextjs-installer-agent.d.ts +6 -0
  117. package/dist/{src/nextjs/nextjs-wizard-agent.js → nextjs/nextjs-installer-agent.js} +6 -6
  118. package/dist/nextjs/nextjs-installer-agent.js.map +1 -0
  119. package/dist/{src/nextjs → nextjs}/utils.d.ts +2 -2
  120. package/dist/nextjs/utils.js.map +1 -0
  121. package/dist/react/react-installer-agent.d.ts +2 -0
  122. package/dist/{src/react/react-wizard-agent.js → react/react-installer-agent.js} +4 -4
  123. package/dist/react/react-installer-agent.js.map +1 -0
  124. package/dist/react-router/react-router-installer-agent.d.ts +6 -0
  125. package/dist/{src/react-router/react-router-wizard-agent.js → react-router/react-router-installer-agent.js} +6 -6
  126. package/dist/react-router/react-router-installer-agent.js.map +1 -0
  127. package/dist/{src/react-router → react-router}/utils.d.ts +2 -2
  128. package/dist/react-router/utils.js.map +1 -0
  129. package/dist/{src/run.d.ts → run.d.ts} +2 -1
  130. package/dist/{src/run.js → run.js} +5 -4
  131. package/dist/run.js.map +1 -0
  132. package/dist/{src/steps → steps}/add-or-update-environment-variables.js +5 -5
  133. package/dist/steps/add-or-update-environment-variables.js.map +1 -0
  134. package/dist/steps/index.js.map +1 -0
  135. package/dist/{src/steps → steps}/run-prettier.d.ts +2 -2
  136. package/dist/{src/steps → steps}/run-prettier.js +1 -1
  137. package/dist/steps/run-prettier.js.map +1 -0
  138. package/dist/{src/steps → steps}/upload-environment-variables/EnvironmentProvider.d.ts +3 -3
  139. package/dist/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
  140. package/dist/{src/steps → steps}/upload-environment-variables/index.d.ts +2 -2
  141. package/dist/{src/steps → steps}/upload-environment-variables/index.js +3 -3
  142. package/dist/steps/upload-environment-variables/index.js.map +1 -0
  143. package/dist/{src/steps → steps}/upload-environment-variables/providers/vercel.d.ts +2 -2
  144. package/dist/steps/upload-environment-variables/providers/vercel.js.map +1 -0
  145. package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +2 -0
  146. package/dist/{src/tanstack-start/tanstack-start-wizard-agent.js → tanstack-start/tanstack-start-installer-agent.js} +4 -4
  147. package/dist/tanstack-start/tanstack-start-installer-agent.js.map +1 -0
  148. package/dist/telemetry.js.map +1 -0
  149. package/dist/{src/utils → utils}/analytics.js +8 -8
  150. package/dist/utils/analytics.js.map +1 -0
  151. package/dist/utils/bash.js.map +1 -0
  152. package/dist/{src/utils → utils}/clack-utils.d.ts +9 -9
  153. package/dist/{src/utils → utils}/clack-utils.js +8 -8
  154. package/dist/utils/clack-utils.js.map +1 -0
  155. package/dist/utils/clack.js.map +1 -0
  156. package/dist/utils/cli-symbols.js.map +1 -0
  157. package/dist/{src/utils → utils}/debug.js +1 -1
  158. package/dist/utils/debug.js.map +1 -0
  159. package/dist/utils/env-parser.js.map +1 -0
  160. package/dist/utils/environment.d.ts +4 -0
  161. package/dist/{src/utils → utils}/environment.js +1 -1
  162. package/dist/utils/environment.js.map +1 -0
  163. package/dist/{src/utils → utils}/errors.js +1 -1
  164. package/dist/utils/errors.js.map +1 -0
  165. package/dist/utils/git-utils.js.map +1 -0
  166. package/dist/utils/logging.js.map +1 -0
  167. package/dist/utils/package-json.js.map +1 -0
  168. package/dist/{src/utils → utils}/package-manager.d.ts +4 -4
  169. package/dist/utils/package-manager.js.map +1 -0
  170. package/dist/utils/redact.js.map +1 -0
  171. package/dist/utils/semver.js.map +1 -0
  172. package/dist/utils/string.js.map +1 -0
  173. package/dist/{src/utils → utils}/telemetry-client.js +6 -2
  174. package/dist/utils/telemetry-client.js.map +1 -0
  175. package/dist/{src/utils → utils}/telemetry-types.d.ts +5 -5
  176. package/dist/utils/telemetry-types.js +6 -0
  177. package/dist/utils/telemetry-types.js.map +1 -0
  178. package/dist/{src/utils → utils}/types.d.ts +7 -2
  179. package/dist/{src/utils → utils}/types.js.map +1 -1
  180. package/dist/utils/urls.js.map +1 -0
  181. package/dist/utils/vendor/is-unicorn-supported.js.map +1 -0
  182. package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +2 -0
  183. package/dist/{src/vanilla-js/vanilla-js-wizard-agent.js → vanilla-js/vanilla-js-installer-agent.js} +4 -4
  184. package/dist/vanilla-js/vanilla-js-installer-agent.js.map +1 -0
  185. package/package.json +11 -7
  186. package/dist/src/commands/install-skill.js.map +0 -1
  187. package/dist/src/commands/install.js.map +0 -1
  188. package/dist/src/commands/login.js.map +0 -1
  189. package/dist/src/commands/logout.js.map +0 -1
  190. package/dist/src/dashboard/components/AnimatedLogo.js.map +0 -1
  191. package/dist/src/dashboard/components/CompletionView.js.map +0 -1
  192. package/dist/src/dashboard/components/ConfirmPrompt.js.map +0 -1
  193. package/dist/src/dashboard/components/CredentialsForm.js.map +0 -1
  194. package/dist/src/dashboard/components/Dashboard.js.map +0 -1
  195. package/dist/src/dashboard/components/DashboardLayout.js.map +0 -1
  196. package/dist/src/dashboard/components/DiffPanel.js.map +0 -1
  197. package/dist/src/dashboard/components/InlinePrompt.js.map +0 -1
  198. package/dist/src/dashboard/components/OutputPanel.js.map +0 -1
  199. package/dist/src/dashboard/components/Panel.js.map +0 -1
  200. package/dist/src/dashboard/components/TextInput.js.map +0 -1
  201. package/dist/src/dashboard/components/WelcomeArt.js.map +0 -1
  202. package/dist/src/dashboard/hooks/useAnimation.js.map +0 -1
  203. package/dist/src/dashboard/hooks/useKeyboard.js.map +0 -1
  204. package/dist/src/dashboard/hooks/useTerminalSize.js.map +0 -1
  205. package/dist/src/dashboard/index.js.map +0 -1
  206. package/dist/src/dashboard/lib/diff-utils.js.map +0 -1
  207. package/dist/src/dashboard/lib/logo-frames.js.map +0 -1
  208. package/dist/src/dashboard/lib/welcome-art.js.map +0 -1
  209. package/dist/src/dashboard/types.d.ts +0 -5
  210. package/dist/src/dashboard/types.js.map +0 -1
  211. package/dist/src/lib/__tests__/test-utils.d.ts +0 -40
  212. package/dist/src/lib/__tests__/test-utils.js +0 -108
  213. package/dist/src/lib/__tests__/test-utils.js.map +0 -1
  214. package/dist/src/lib/adapters/cli-adapter.js.map +0 -1
  215. package/dist/src/lib/adapters/dashboard-adapter.js.map +0 -1
  216. package/dist/src/lib/adapters/index.js.map +0 -1
  217. package/dist/src/lib/adapters/types.js.map +0 -1
  218. package/dist/src/lib/agent-interface.js.map +0 -1
  219. package/dist/src/lib/agent-runner.js.map +0 -1
  220. package/dist/src/lib/ai-content.js +0 -68
  221. package/dist/src/lib/ai-content.js.map +0 -1
  222. package/dist/src/lib/api.js.map +0 -1
  223. package/dist/src/lib/config.js.map +0 -1
  224. package/dist/src/lib/constants.js.map +0 -1
  225. package/dist/src/lib/credential-discovery.js.map +0 -1
  226. package/dist/src/lib/credentials.js.map +0 -1
  227. package/dist/src/lib/device-auth.js.map +0 -1
  228. package/dist/src/lib/env-writer.js.map +0 -1
  229. package/dist/src/lib/framework-config.js.map +0 -1
  230. package/dist/src/lib/helper-functions.js.map +0 -1
  231. package/dist/src/lib/port-detection.js.map +0 -1
  232. package/dist/src/lib/post-install.js.map +0 -1
  233. package/dist/src/lib/progress-tracker.js.map +0 -1
  234. package/dist/src/lib/run-with-core.d.ts +0 -2
  235. package/dist/src/lib/run-with-core.js.map +0 -1
  236. package/dist/src/lib/safe-tools.js.map +0 -1
  237. package/dist/src/lib/settings.js.map +0 -1
  238. package/dist/src/lib/staging-api.js.map +0 -1
  239. package/dist/src/lib/token-refresh.js.map +0 -1
  240. package/dist/src/lib/validation/build-validator.js.map +0 -1
  241. package/dist/src/lib/validation/index.js.map +0 -1
  242. package/dist/src/lib/validation/types.js.map +0 -1
  243. package/dist/src/lib/validation/validator.js.map +0 -1
  244. package/dist/src/lib/wizard-core.js.map +0 -1
  245. package/dist/src/lib/wizard-core.types.js +0 -2
  246. package/dist/src/lib/wizard-core.types.js.map +0 -1
  247. package/dist/src/lib/workos-management.js.map +0 -1
  248. package/dist/src/nextjs/nextjs-wizard-agent.d.ts +0 -6
  249. package/dist/src/nextjs/nextjs-wizard-agent.js.map +0 -1
  250. package/dist/src/nextjs/utils.js.map +0 -1
  251. package/dist/src/react/react-wizard-agent.d.ts +0 -2
  252. package/dist/src/react/react-wizard-agent.js.map +0 -1
  253. package/dist/src/react-router/react-router-wizard-agent.d.ts +0 -6
  254. package/dist/src/react-router/react-router-wizard-agent.js.map +0 -1
  255. package/dist/src/react-router/utils.js.map +0 -1
  256. package/dist/src/run.js.map +0 -1
  257. package/dist/src/steps/add-or-update-environment-variables.js.map +0 -1
  258. package/dist/src/steps/index.js.map +0 -1
  259. package/dist/src/steps/run-prettier.js.map +0 -1
  260. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
  261. package/dist/src/steps/upload-environment-variables/index.js.map +0 -1
  262. package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +0 -1
  263. package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +0 -2
  264. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +0 -1
  265. package/dist/src/telemetry.js.map +0 -1
  266. package/dist/src/utils/analytics.js.map +0 -1
  267. package/dist/src/utils/bash.js.map +0 -1
  268. package/dist/src/utils/clack-utils.js.map +0 -1
  269. package/dist/src/utils/clack.js.map +0 -1
  270. package/dist/src/utils/cli-symbols.js.map +0 -1
  271. package/dist/src/utils/debug.js.map +0 -1
  272. package/dist/src/utils/env-parser.js.map +0 -1
  273. package/dist/src/utils/environment.d.ts +0 -4
  274. package/dist/src/utils/environment.js.map +0 -1
  275. package/dist/src/utils/errors.js.map +0 -1
  276. package/dist/src/utils/git-utils.js.map +0 -1
  277. package/dist/src/utils/logging.js.map +0 -1
  278. package/dist/src/utils/package-json.js.map +0 -1
  279. package/dist/src/utils/package-manager.js.map +0 -1
  280. package/dist/src/utils/redact.js.map +0 -1
  281. package/dist/src/utils/semver.js.map +0 -1
  282. package/dist/src/utils/string.js.map +0 -1
  283. package/dist/src/utils/telemetry-client.js.map +0 -1
  284. package/dist/src/utils/telemetry-types.js +0 -6
  285. package/dist/src/utils/telemetry-types.js.map +0 -1
  286. package/dist/src/utils/urls.js.map +0 -1
  287. package/dist/src/utils/vendor/is-unicorn-supported.js.map +0 -1
  288. package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +0 -2
  289. package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +0 -1
  290. package/dist/src/version.d.ts +0 -1
  291. package/dist/src/version.js +0 -2
  292. package/dist/src/version.js.map +0 -1
  293. /package/dist/{src/commands → commands}/install-skill.d.ts +0 -0
  294. /package/dist/{src/commands → commands}/install-skill.js +0 -0
  295. /package/dist/{src/commands → commands}/install.d.ts +0 -0
  296. /package/dist/{src/commands → commands}/login.d.ts +0 -0
  297. /package/dist/{src/commands → commands}/logout.d.ts +0 -0
  298. /package/dist/{src/commands → commands}/logout.js +0 -0
  299. /package/dist/{src/dashboard → dashboard}/components/AnimatedLogo.d.ts +0 -0
  300. /package/dist/{src/dashboard → dashboard}/components/AnimatedLogo.js +0 -0
  301. /package/dist/{src/dashboard → dashboard}/components/CompletionView.d.ts +0 -0
  302. /package/dist/{src/dashboard → dashboard}/components/CompletionView.js +0 -0
  303. /package/dist/{src/dashboard → dashboard}/components/ConfirmPrompt.d.ts +0 -0
  304. /package/dist/{src/dashboard → dashboard}/components/ConfirmPrompt.js +0 -0
  305. /package/dist/{src/dashboard → dashboard}/components/CredentialsForm.d.ts +0 -0
  306. /package/dist/{src/dashboard → dashboard}/components/CredentialsForm.js +0 -0
  307. /package/dist/{src/dashboard → dashboard}/components/Dashboard.d.ts +0 -0
  308. /package/dist/{src/dashboard → dashboard}/components/Dashboard.js +0 -0
  309. /package/dist/{src/dashboard → dashboard}/components/DashboardLayout.js +0 -0
  310. /package/dist/{src/dashboard → dashboard}/components/DiffPanel.js +0 -0
  311. /package/dist/{src/dashboard → dashboard}/components/InlinePrompt.d.ts +0 -0
  312. /package/dist/{src/dashboard → dashboard}/components/InlinePrompt.js +0 -0
  313. /package/dist/{src/dashboard → dashboard}/components/OutputPanel.js +0 -0
  314. /package/dist/{src/dashboard → dashboard}/components/Panel.d.ts +0 -0
  315. /package/dist/{src/dashboard → dashboard}/components/Panel.js +0 -0
  316. /package/dist/{src/dashboard → dashboard}/components/TextInput.d.ts +0 -0
  317. /package/dist/{src/dashboard → dashboard}/components/TextInput.js +0 -0
  318. /package/dist/{src/dashboard → dashboard}/components/WelcomeArt.d.ts +0 -0
  319. /package/dist/{src/dashboard → dashboard}/components/WelcomeArt.js +0 -0
  320. /package/dist/{src/dashboard → dashboard}/hooks/useAnimation.d.ts +0 -0
  321. /package/dist/{src/dashboard → dashboard}/hooks/useAnimation.js +0 -0
  322. /package/dist/{src/dashboard → dashboard}/hooks/useKeyboard.d.ts +0 -0
  323. /package/dist/{src/dashboard → dashboard}/hooks/useKeyboard.js +0 -0
  324. /package/dist/{src/dashboard → dashboard}/hooks/useTerminalSize.d.ts +0 -0
  325. /package/dist/{src/dashboard → dashboard}/hooks/useTerminalSize.js +0 -0
  326. /package/dist/{src/dashboard → dashboard}/index.js +0 -0
  327. /package/dist/{src/dashboard → dashboard}/lib/diff-utils.d.ts +0 -0
  328. /package/dist/{src/dashboard → dashboard}/lib/diff-utils.js +0 -0
  329. /package/dist/{src/dashboard → dashboard}/lib/logo-frames.d.ts +0 -0
  330. /package/dist/{src/dashboard → dashboard}/lib/logo-frames.js +0 -0
  331. /package/dist/{src/dashboard → dashboard}/lib/welcome-art.d.ts +0 -0
  332. /package/dist/{src/dashboard → dashboard}/lib/welcome-art.js +0 -0
  333. /package/dist/{src/dashboard → dashboard}/types.js +0 -0
  334. /package/dist/{src/lib → lib}/adapters/dashboard-adapter.js +0 -0
  335. /package/dist/{src/lib → lib}/adapters/index.js +0 -0
  336. /package/dist/{src/lib → lib}/adapters/types.js +0 -0
  337. /package/dist/{src/lib → lib}/api.d.ts +0 -0
  338. /package/dist/{src/lib → lib}/api.js +0 -0
  339. /package/dist/{src/lib → lib}/config.js +0 -0
  340. /package/dist/{src/lib → lib}/credential-discovery.d.ts +0 -0
  341. /package/dist/{src/lib → lib}/credential-discovery.js +0 -0
  342. /package/dist/{src/lib → lib}/env-writer.d.ts +0 -0
  343. /package/dist/{src/lib → lib}/env-writer.js +0 -0
  344. /package/dist/{src/lib → lib}/helper-functions.d.ts +0 -0
  345. /package/dist/{src/lib → lib}/helper-functions.js +0 -0
  346. /package/dist/{src/lib → lib}/port-detection.d.ts +0 -0
  347. /package/dist/{src/lib → lib}/port-detection.js +0 -0
  348. /package/dist/{src/lib → lib}/post-install.d.ts +0 -0
  349. /package/dist/{src/lib → lib}/post-install.js +0 -0
  350. /package/dist/{src/lib → lib}/progress-tracker.d.ts +0 -0
  351. /package/dist/{src/lib → lib}/progress-tracker.js +0 -0
  352. /package/dist/{src/lib → lib}/safe-tools.d.ts +0 -0
  353. /package/dist/{src/lib → lib}/safe-tools.js +0 -0
  354. /package/dist/{src/lib → lib}/staging-api.d.ts +0 -0
  355. /package/dist/{src/lib → lib}/staging-api.js +0 -0
  356. /package/dist/{src/lib → lib}/token-refresh.d.ts +0 -0
  357. /package/dist/{src/lib → lib}/validation/build-validator.d.ts +0 -0
  358. /package/dist/{src/lib → lib}/validation/build-validator.js +0 -0
  359. /package/dist/{src/lib → lib}/validation/index.d.ts +0 -0
  360. /package/dist/{src/lib → lib}/validation/index.js +0 -0
  361. /package/dist/{src/lib → lib}/validation/types.d.ts +0 -0
  362. /package/dist/{src/lib → lib}/validation/types.js +0 -0
  363. /package/dist/{src/lib → lib}/validation/validator.d.ts +0 -0
  364. /package/dist/{src/lib → lib}/validation/validator.js +0 -0
  365. /package/dist/{src/lib → lib}/workos-management.d.ts +0 -0
  366. /package/dist/{src/nextjs → nextjs}/utils.js +0 -0
  367. /package/dist/{src/react-router → react-router}/utils.js +0 -0
  368. /package/dist/{src/steps → steps}/add-or-update-environment-variables.d.ts +0 -0
  369. /package/dist/{src/steps → steps}/index.d.ts +0 -0
  370. /package/dist/{src/steps → steps}/index.js +0 -0
  371. /package/dist/{src/steps → steps}/upload-environment-variables/EnvironmentProvider.js +0 -0
  372. /package/dist/{src/steps → steps}/upload-environment-variables/providers/vercel.js +0 -0
  373. /package/dist/{src/telemetry.d.ts → telemetry.d.ts} +0 -0
  374. /package/dist/{src/telemetry.js → telemetry.js} +0 -0
  375. /package/dist/{src/utils → utils}/analytics.d.ts +0 -0
  376. /package/dist/{src/utils → utils}/bash.d.ts +0 -0
  377. /package/dist/{src/utils → utils}/bash.js +0 -0
  378. /package/dist/{src/utils → utils}/clack.d.ts +0 -0
  379. /package/dist/{src/utils → utils}/clack.js +0 -0
  380. /package/dist/{src/utils → utils}/cli-symbols.d.ts +0 -0
  381. /package/dist/{src/utils → utils}/cli-symbols.js +0 -0
  382. /package/dist/{src/utils → utils}/debug.d.ts +0 -0
  383. /package/dist/{src/utils → utils}/env-parser.d.ts +0 -0
  384. /package/dist/{src/utils → utils}/env-parser.js +0 -0
  385. /package/dist/{src/utils → utils}/errors.d.ts +0 -0
  386. /package/dist/{src/utils → utils}/git-utils.d.ts +0 -0
  387. /package/dist/{src/utils → utils}/git-utils.js +0 -0
  388. /package/dist/{src/utils → utils}/logging.d.ts +0 -0
  389. /package/dist/{src/utils → utils}/logging.js +0 -0
  390. /package/dist/{src/utils → utils}/package-json.d.ts +0 -0
  391. /package/dist/{src/utils → utils}/package-json.js +0 -0
  392. /package/dist/{src/utils → utils}/package-manager.js +0 -0
  393. /package/dist/{src/utils → utils}/redact.d.ts +0 -0
  394. /package/dist/{src/utils → utils}/redact.js +0 -0
  395. /package/dist/{src/utils → utils}/semver.d.ts +0 -0
  396. /package/dist/{src/utils → utils}/semver.js +0 -0
  397. /package/dist/{src/utils → utils}/string.d.ts +0 -0
  398. /package/dist/{src/utils → utils}/string.js +0 -0
  399. /package/dist/{src/utils → utils}/telemetry-client.d.ts +0 -0
  400. /package/dist/{src/utils → utils}/types.js +0 -0
  401. /package/dist/{src/utils → utils}/urls.d.ts +0 -0
  402. /package/dist/{src/utils → utils}/urls.js +0 -0
  403. /package/dist/{src/utils → utils}/vendor/is-unicorn-supported.d.ts +0 -0
  404. /package/dist/{src/utils → utils}/vendor/is-unicorn-supported.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"logo-frames.js","sourceRoot":"","sources":["../../../../src/dashboard/lib/logo-frames.ts"],"names":[],"mappings":"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","sourcesContent":["// Scaled-down WorkOS logo frames for animation\n// Original is 20 lines tall; this is ~10 lines for panel fit\n\nconst LOGO_SMALL = [\n ' *+++++++*++++* ',\n ' *++++++++*++++++ ',\n ' *+++++* *+++++* ',\n ' *+++++* *+++++* ',\n ' *++++* *++++* ',\n ' *+++++* *+++++* ',\n ' *+++++* *+++++* ',\n ' *++++++**++++++* ',\n ' *++++*++*++++* ',\n];\n\n// Purple gradient colors (256 color mode)\nexport const COLORS = {\n brightest: '38;5;225', // light lavender\n bright: '38;5;183', // lavender\n medium: '38;5;141', // medium purple\n dark: '38;5;135', // purple\n darker: '38;5;93', // deep purple\n darkest: '38;5;54', // dark purple\n};\n\nexport type AnimationMode = 'spin' | 'pulse';\n\nexport interface LogoFrame {\n lines: string[];\n color: string;\n}\n\n// Pre-generate frames for spin animation\nexport function generateSpinFrames(): LogoFrame[] {\n const NUM_FRAMES = 32;\n const frames: LogoFrame[] = [];\n\n for (let f = 0; f < NUM_FRAMES; f++) {\n const angle = (f / NUM_FRAMES) * 2 * Math.PI;\n const cosA = Math.cos(angle);\n const absCos = Math.abs(cosA);\n\n // Color based on facing angle\n let color: string;\n if (absCos > 0.9) color = COLORS.brightest;\n else if (absCos > 0.7) color = COLORS.bright;\n else if (absCos > 0.5) color = COLORS.medium;\n else if (absCos > 0.3) color = COLORS.dark;\n else if (absCos > 0.15) color = COLORS.darker;\n else color = COLORS.darkest;\n\n // Project characters\n const projectedLines = LOGO_SMALL.map((line) => {\n const centerX = line.length / 2;\n const outChars = new Array(line.length).fill(' ');\n\n for (let col = 0; col < line.length; col++) {\n const ch = line[col];\n if (ch === ' ') continue;\n\n const x = col - centerX;\n const newX = x * cosA;\n const screenX = Math.round(centerX + newX);\n\n if (screenX >= 0 && screenX < line.length) {\n outChars[screenX] = ch;\n }\n }\n\n return outChars.join('');\n });\n\n frames.push({ lines: projectedLines, color });\n }\n\n return frames;\n}\n\n// Pre-generate frames for pulse animation\nexport function generatePulseFrames(): LogoFrame[] {\n const NUM_FRAMES = 24;\n const frames: LogoFrame[] = [];\n\n for (let f = 0; f < NUM_FRAMES; f++) {\n const angle = (f / NUM_FRAMES) * 2 * Math.PI;\n const brightness = (Math.cos(angle) + 1) / 2; // 0 to 1\n\n let color: string;\n if (brightness > 0.85) color = COLORS.brightest;\n else if (brightness > 0.7) color = COLORS.bright;\n else if (brightness > 0.5) color = COLORS.medium;\n else if (brightness > 0.35) color = COLORS.dark;\n else if (brightness > 0.2) color = COLORS.darker;\n else color = COLORS.darkest;\n\n frames.push({ lines: [...LOGO_SMALL], color });\n }\n\n return frames;\n}\n\n// Cache frames on first use\nlet spinFramesCache: LogoFrame[] | null = null;\nlet pulseFramesCache: LogoFrame[] | null = null;\n\nexport function getFrames(mode: AnimationMode): LogoFrame[] {\n if (mode === 'spin') {\n if (!spinFramesCache) spinFramesCache = generateSpinFrames();\n return spinFramesCache;\n } else {\n if (!pulseFramesCache) pulseFramesCache = generatePulseFrames();\n return pulseFramesCache;\n }\n}\n\nexport const FRAME_DELAYS = {\n spin: 55,\n pulse: 80,\n} as const;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"welcome-art.js","sourceRoot":"","sources":["../../../../src/dashboard/lib/welcome-art.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,UAAU,aAAa;IAC3B,OAAO,SAAS,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACvC,CAAC","sourcesContent":["import { getConfig } from '../../lib/settings.js';\n\nexport function getWelcomeArt(): string {\n return getConfig().branding.asciiArt;\n}\n"]}
@@ -1,5 +0,0 @@
1
- import type { WizardEventEmitter, WizardEvents } from '../lib/events.js';
2
- export interface DashboardProps {
3
- emitter: WizardEventEmitter;
4
- }
5
- export type { WizardEvents, WizardEventEmitter };
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dashboard/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { WizardEventEmitter, WizardEvents } from '../lib/events.js';\n\nexport interface DashboardProps {\n emitter: WizardEventEmitter;\n}\n\n// Re-export for convenience\nexport type { WizardEvents, WizardEventEmitter };\n"]}
@@ -1,40 +0,0 @@
1
- import { type WizardEventName, type WizardEvents } from '../events.js';
2
- /**
3
- * Captured event with type and payload.
4
- */
5
- export interface CapturedEvent<K extends WizardEventName = WizardEventName> {
6
- type: K;
7
- payload: WizardEvents[K];
8
- timestamp: number;
9
- }
10
- /**
11
- * Creates an event capture utility for testing.
12
- * Records all events emitted through the emitter.
13
- */
14
- export declare function createEventCapture(): {
15
- /** The emitter to pass to machine/adapters */
16
- emitter: import("../events.js").WizardEventEmitter;
17
- /** Get all captured events */
18
- getEvents: () => CapturedEvent<keyof WizardEvents>[];
19
- /** Get just the event types in order */
20
- getEventTypes: () => (keyof WizardEvents)[];
21
- /** Get events of a specific type */
22
- getEventsOfType: <K extends WizardEventName>(type: K) => CapturedEvent<K>[];
23
- /** Clear captured events */
24
- clear: () => void;
25
- /** Get count of events */
26
- count: () => number;
27
- };
28
- /**
29
- * Compare two event type sequences for equality.
30
- * Returns match result with diff info if different.
31
- */
32
- export declare function compareEventSequences(seq1: WizardEventName[], seq2: WizardEventName[]): {
33
- match: boolean;
34
- diff?: string;
35
- };
36
- /**
37
- * Filter out non-deterministic events for comparison.
38
- * Some events (like timestamps) shouldn't affect sequence equality.
39
- */
40
- export declare function filterDeterministicEvents(events: WizardEventName[]): WizardEventName[];
@@ -1,108 +0,0 @@
1
- import { createWizardEventEmitter } from '../events.js';
2
- /**
3
- * Creates an event capture utility for testing.
4
- * Records all events emitted through the emitter.
5
- */
6
- export function createEventCapture() {
7
- const emitter = createWizardEventEmitter();
8
- const events = [];
9
- // All event types to capture
10
- const eventTypes = [
11
- 'status',
12
- 'output',
13
- 'complete',
14
- 'error',
15
- 'state:enter',
16
- 'state:exit',
17
- 'auth:checking',
18
- 'auth:required',
19
- 'auth:success',
20
- 'auth:failure',
21
- 'detection:start',
22
- 'detection:complete',
23
- 'detection:none',
24
- 'git:checking',
25
- 'git:clean',
26
- 'git:dirty',
27
- 'git:dirty:confirmed',
28
- 'git:dirty:cancelled',
29
- 'credentials:gathering',
30
- 'credentials:found',
31
- 'credentials:request',
32
- 'credentials:response',
33
- 'config:start',
34
- 'config:complete',
35
- 'agent:start',
36
- 'agent:progress',
37
- 'agent:success',
38
- 'agent:failure',
39
- 'file:write',
40
- 'file:edit',
41
- 'prompt:request',
42
- 'prompt:response',
43
- 'confirm:request',
44
- 'confirm:response',
45
- ];
46
- // Subscribe to all event types
47
- for (const type of eventTypes) {
48
- emitter.on(type, (payload) => {
49
- events.push({
50
- type,
51
- payload,
52
- timestamp: Date.now(),
53
- });
54
- });
55
- }
56
- return {
57
- /** The emitter to pass to machine/adapters */
58
- emitter,
59
- /** Get all captured events */
60
- getEvents: () => [...events],
61
- /** Get just the event types in order */
62
- getEventTypes: () => events.map((e) => e.type),
63
- /** Get events of a specific type */
64
- getEventsOfType: (type) => events.filter((e) => e.type === type),
65
- /** Clear captured events */
66
- clear: () => {
67
- events.length = 0;
68
- },
69
- /** Get count of events */
70
- count: () => events.length,
71
- };
72
- }
73
- /**
74
- * Compare two event type sequences for equality.
75
- * Returns match result with diff info if different.
76
- */
77
- export function compareEventSequences(seq1, seq2) {
78
- // Check lengths
79
- if (seq1.length !== seq2.length) {
80
- return {
81
- match: false,
82
- diff: `Length mismatch: ${seq1.length} vs ${seq2.length}\n` +
83
- `Seq1: ${seq1.join(' → ')}\n` +
84
- `Seq2: ${seq2.join(' → ')}`,
85
- };
86
- }
87
- // Check each position
88
- for (let i = 0; i < seq1.length; i++) {
89
- if (seq1[i] !== seq2[i]) {
90
- return {
91
- match: false,
92
- diff: `Event ${i} differs: "${seq1[i]}" vs "${seq2[i]}"\n` +
93
- `Context: ...${seq1.slice(Math.max(0, i - 2), i + 3).join(' → ')}...`,
94
- };
95
- }
96
- }
97
- return { match: true };
98
- }
99
- /**
100
- * Filter out non-deterministic events for comparison.
101
- * Some events (like timestamps) shouldn't affect sequence equality.
102
- */
103
- export function filterDeterministicEvents(events) {
104
- // Currently all events are deterministic, but this could filter
105
- // things like progress events with variable timing
106
- return events;
107
- }
108
- //# sourceMappingURL=test-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../../../src/lib/__tests__/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2C,MAAM,cAAc,CAAC;AAWjG;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,6BAA6B;IAC7B,MAAM,UAAU,GAAsB;QACpC,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,OAAO;QACP,aAAa;QACb,YAAY;QACZ,eAAe;QACf,eAAe;QACf,cAAc;QACd,cAAc;QACd,iBAAiB;QACjB,oBAAoB;QACpB,gBAAgB;QAChB,cAAc;QACd,WAAW;QACX,WAAW;QACX,qBAAqB;QACrB,qBAAqB;QACrB,uBAAuB;QACvB,mBAAmB;QACnB,qBAAqB;QACrB,sBAAsB;QACtB,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,gBAAgB;QAChB,eAAe;QACf,eAAe;QACf,YAAY;QACZ,WAAW;QACX,gBAAgB;QAChB,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;KACnB,CAAC;IAEF,+BAA+B;IAC/B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAkC,EAAE,EAAE;YACtD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,OAAO;gBACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,8CAA8C;QAC9C,OAAO;QAEP,8BAA8B;QAC9B,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;QAE5B,wCAAwC;QACxC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE9C,oCAAoC;QACpC,eAAe,EAAE,CAA4B,IAAO,EAAsB,EAAE,CAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;QAE9D,4BAA4B;QAC5B,KAAK,EAAE,GAAG,EAAE;YACV,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,0BAA0B;QAC1B,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAuB,EACvB,IAAuB;IAEvB,gBAAgB;IAChB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,IAAI,EACF,oBAAoB,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,IAAI;gBACrD,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;gBAC7B,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;SAC9B,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,IAAI,EACF,SAAS,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK;oBACpD,eAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;aACxE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAyB;IACjE,gEAAgE;IAChE,mDAAmD;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { createWizardEventEmitter, type WizardEventName, type WizardEvents } from '../events.js';\n\n/**\n * Captured event with type and payload.\n */\nexport interface CapturedEvent<K extends WizardEventName = WizardEventName> {\n type: K;\n payload: WizardEvents[K];\n timestamp: number;\n}\n\n/**\n * Creates an event capture utility for testing.\n * Records all events emitted through the emitter.\n */\nexport function createEventCapture() {\n const emitter = createWizardEventEmitter();\n const events: CapturedEvent[] = [];\n\n // All event types to capture\n const eventTypes: WizardEventName[] = [\n 'status',\n 'output',\n 'complete',\n 'error',\n 'state:enter',\n 'state:exit',\n 'auth:checking',\n 'auth:required',\n 'auth:success',\n 'auth:failure',\n 'detection:start',\n 'detection:complete',\n 'detection:none',\n 'git:checking',\n 'git:clean',\n 'git:dirty',\n 'git:dirty:confirmed',\n 'git:dirty:cancelled',\n 'credentials:gathering',\n 'credentials:found',\n 'credentials:request',\n 'credentials:response',\n 'config:start',\n 'config:complete',\n 'agent:start',\n 'agent:progress',\n 'agent:success',\n 'agent:failure',\n 'file:write',\n 'file:edit',\n 'prompt:request',\n 'prompt:response',\n 'confirm:request',\n 'confirm:response',\n ];\n\n // Subscribe to all event types\n for (const type of eventTypes) {\n emitter.on(type, (payload: WizardEvents[typeof type]) => {\n events.push({\n type,\n payload,\n timestamp: Date.now(),\n });\n });\n }\n\n return {\n /** The emitter to pass to machine/adapters */\n emitter,\n\n /** Get all captured events */\n getEvents: () => [...events],\n\n /** Get just the event types in order */\n getEventTypes: () => events.map((e) => e.type),\n\n /** Get events of a specific type */\n getEventsOfType: <K extends WizardEventName>(type: K): CapturedEvent<K>[] =>\n events.filter((e): e is CapturedEvent<K> => e.type === type),\n\n /** Clear captured events */\n clear: () => {\n events.length = 0;\n },\n\n /** Get count of events */\n count: () => events.length,\n };\n}\n\n/**\n * Compare two event type sequences for equality.\n * Returns match result with diff info if different.\n */\nexport function compareEventSequences(\n seq1: WizardEventName[],\n seq2: WizardEventName[],\n): { match: boolean; diff?: string } {\n // Check lengths\n if (seq1.length !== seq2.length) {\n return {\n match: false,\n diff:\n `Length mismatch: ${seq1.length} vs ${seq2.length}\\n` +\n `Seq1: ${seq1.join(' → ')}\\n` +\n `Seq2: ${seq2.join(' → ')}`,\n };\n }\n\n // Check each position\n for (let i = 0; i < seq1.length; i++) {\n if (seq1[i] !== seq2[i]) {\n return {\n match: false,\n diff:\n `Event ${i} differs: \"${seq1[i]}\" vs \"${seq2[i]}\"\\n` +\n `Context: ...${seq1.slice(Math.max(0, i - 2), i + 3).join(' → ')}...`,\n };\n }\n }\n\n return { match: true };\n}\n\n/**\n * Filter out non-deterministic events for comparison.\n * Some events (like timestamps) shouldn't affect sequence equality.\n */\nexport function filterDeterministicEvents(events: WizardEventName[]): WizardEventName[] {\n // Currently all events are deterministic, but this could filter\n // things like progress events with variable timing\n return events;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-adapter.js","sourceRoot":"","sources":["../../../../src/lib/adapters/cli-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WizardAdapter, AdapterConfig } from './types.js';\nimport type { WizardEventEmitter, WizardEvents } from '../events.js';\nimport clack from '../../utils/clack.js';\nimport chalk from 'chalk';\nimport { getConfig } from '../settings.js';\nimport { ProgressTracker } from '../progress-tracker.js';\n\n/**\n * CLI adapter that renders wizard events via clack.\n *\n * Subscribes to WizardEventEmitter and translates events into\n * clack UI operations (logs, spinners, prompts).\n */\nexport class CLIAdapter implements WizardAdapter {\n readonly emitter: WizardEventEmitter;\n private sendEvent: AdapterConfig['sendEvent'];\n private debug: boolean;\n private spinner: ReturnType<typeof clack.spinner> | null = null;\n private isStarted = false;\n private progress = new ProgressTracker();\n\n // Store bound handlers for cleanup\n private handlers = new Map<string, (...args: unknown[]) => void>();\n\n // Queue for logs while prompt is active (parallel state issue)\n private isPromptActive = false;\n private pendingLogs: Array<() => void> = [];\n\n // SIGINT handler for cleanup\n private sigIntHandler: (() => void) | null = null;\n\n // Long-running agent update interval\n private agentUpdateInterval: NodeJS.Timeout | null = null;\n\n constructor(config: AdapterConfig) {\n this.emitter = config.emitter;\n this.sendEvent = config.sendEvent;\n this.debug = config.debug ?? false;\n }\n\n /**\n * Queue a log call if a prompt is active, otherwise execute immediately.\n */\n private queueableLog(logFn: () => void): void {\n if (this.isPromptActive) {\n this.pendingLogs.push(logFn);\n } else {\n logFn();\n }\n }\n\n /**\n * Flush any queued logs after prompt completes.\n */\n private flushPendingLogs(): void {\n const logs = this.pendingLogs.splice(0);\n logs.forEach((fn) => fn());\n }\n\n async start(): Promise<void> {\n if (this.isStarted) return;\n this.isStarted = true;\n\n // Show intro\n const config = getConfig();\n if (config.branding.showAsciiArt) {\n const art = config.branding.useCompact ? config.branding.compactAsciiArt : config.branding.asciiArt;\n console.log(chalk.cyan(art));\n console.log();\n } else {\n clack.intro('Welcome to the WorkOS AuthKit setup wizard');\n }\n\n // Handle Ctrl+C gracefully\n const handleSigInt = () => {\n if (this.spinner) {\n this.spinner.stop('Cancelled');\n this.spinner = null;\n }\n this.stopAgentUpdates();\n clack.log.warn('Wizard cancelled');\n clack.outro('Your project was not modified');\n process.exit(0);\n };\n process.on('SIGINT', handleSigInt);\n this.sigIntHandler = handleSigInt;\n\n // Subscribe to state events for progress tracking\n this.subscribe('state:enter', this.handleStateEnter);\n this.subscribe('state:exit', this.handleStateExit);\n\n // Subscribe to events that require UI rendering\n this.subscribe('auth:success', this.handleAuthSuccess);\n this.subscribe('auth:failure', this.handleAuthFailure);\n this.subscribe('detection:complete', this.handleDetectionComplete);\n this.subscribe('detection:none', this.handleDetectionNone);\n this.subscribe('git:dirty', this.handleGitDirty);\n this.subscribe('credentials:found', this.handleCredentialsFound);\n this.subscribe('credentials:request', this.handleCredentialsRequest);\n this.subscribe('credentials:env:prompt', this.handleEnvScanPrompt);\n this.subscribe('device:started', this.handleDeviceStarted);\n this.subscribe('device:success', this.handleDeviceSuccess);\n this.subscribe('staging:fetching', this.handleStagingFetching);\n this.subscribe('staging:success', this.handleStagingSuccess);\n this.subscribe('credentials:env:found', this.handleEnvCredentialsFound);\n this.subscribe('config:complete', this.handleConfigComplete);\n this.subscribe('agent:start', this.handleAgentStart);\n this.subscribe('agent:progress', this.handleAgentProgress);\n this.subscribe('validation:start', this.handleValidationStart);\n this.subscribe('validation:issues', this.handleValidationIssues);\n this.subscribe('validation:complete', this.handleValidationComplete);\n this.subscribe('complete', this.handleComplete);\n this.subscribe('error', this.handleError);\n // Branch check events\n this.subscribe('branch:prompt', this.handleBranchPrompt);\n this.subscribe('branch:created', this.handleBranchCreated);\n\n // Post-install events\n this.subscribe('postinstall:changes', this.handlePostInstallChanges);\n this.subscribe('postinstall:commit:prompt', this.handleCommitPrompt);\n this.subscribe('postinstall:commit:generating', this.handleCommitGenerating);\n this.subscribe('postinstall:commit:success', this.handleCommitSuccess);\n this.subscribe('postinstall:commit:failed', this.handleCommitFailed);\n this.subscribe('postinstall:pr:prompt', this.handlePrPrompt);\n this.subscribe('postinstall:pr:generating', this.handlePrGenerating);\n this.subscribe('postinstall:pr:pushing', this.handlePrPushing);\n this.subscribe('postinstall:pr:success', this.handlePrSuccess);\n this.subscribe('postinstall:pr:failed', this.handlePrFailed);\n this.subscribe('postinstall:push:failed', this.handlePushFailed);\n this.subscribe('postinstall:manual', this.handleManualInstructions);\n }\n\n async stop(): Promise<void> {\n if (!this.isStarted) return;\n\n // Remove SIGINT handler\n if (this.sigIntHandler) {\n process.off('SIGINT', this.sigIntHandler);\n this.sigIntHandler = null;\n }\n\n // Stop agent updates\n this.stopAgentUpdates();\n\n // Unsubscribe from all events\n for (const [event, handler] of this.handlers) {\n this.emitter.off(event as keyof WizardEvents, handler as never);\n }\n this.handlers.clear();\n\n // Stop any active spinner\n this.spinner?.stop();\n this.spinner = null;\n\n this.isStarted = false;\n }\n\n private stopAgentUpdates = (): void => {\n if (this.agentUpdateInterval) {\n clearInterval(this.agentUpdateInterval);\n this.agentUpdateInterval = null;\n }\n };\n\n private stopSpinner(message: string): void {\n if (this.spinner) {\n this.spinner.stop(message);\n this.spinner = null;\n }\n }\n\n /** Debug logging - only outputs when debug mode is enabled */\n private debugLog = (message: string): void => {\n if (this.debug) {\n console.log(chalk.dim(`[debug] ${message}`));\n }\n };\n\n /**\n * Helper to subscribe and track handlers for cleanup.\n */\n private subscribe<K extends keyof WizardEvents>(\n event: K,\n handler: (payload: WizardEvents[K]) => void | Promise<void>,\n ): void {\n const boundHandler = handler.bind(this);\n this.handlers.set(event, boundHandler as (...args: unknown[]) => void);\n this.emitter.on(event, boundHandler);\n }\n\n // ===== Event Handlers =====\n\n private handleStateEnter = ({ state }: WizardEvents['state:enter']): void => {\n this.progress.enterPhase(state);\n };\n\n private handleStateExit = ({ state }: WizardEvents['state:exit']): void => {\n this.progress.exitPhase(state);\n };\n\n private handleAuthSuccess = (): void => {\n clack.log.success('Authenticated');\n };\n\n private handleAuthFailure = ({ message }: WizardEvents['auth:failure']): void => {\n clack.log.error(`Auth failed: ${message}`);\n clack.log.info('Visit https://dashboard.workos.com to verify your account');\n };\n\n private handleDetectionComplete = ({ integration }: WizardEvents['detection:complete']): void => {\n this.queueableLog(() => clack.log.success(`Detected ${chalk.bold(integration)}`));\n };\n\n private handleDetectionNone = (): void => {\n this.queueableLog(() => clack.log.warn('Could not detect framework automatically'));\n };\n\n private handleCredentialsFound = (): void => {\n clack.log.success('Found existing WorkOS credentials in .env.local');\n };\n\n private handleEnvScanPrompt = async ({ files }: WizardEvents['credentials:env:prompt']): Promise<void> => {\n this.isPromptActive = true;\n const fileList = files.length === 1 ? files[0] : files.slice(0, 2).join(', ');\n const confirmed = await clack.confirm({\n message: `Found ${fileList}. Check for existing WorkOS credentials?`,\n initialValue: true,\n });\n this.isPromptActive = false;\n this.flushPendingLogs();\n\n this.sendEvent({\n type: clack.isCancel(confirmed) || !confirmed ? 'ENV_SCAN_DECLINED' : 'ENV_SCAN_APPROVED',\n });\n };\n\n private handleDeviceStarted = ({ verificationUri, userCode }: WizardEvents['device:started']): void => {\n clack.log.info(`\\nOpen this URL in your browser:\\n`);\n console.log(` ${chalk.cyan(verificationUri)}`);\n console.log(`\\nEnter code: ${chalk.bold(userCode)}\\n`);\n\n this.spinner = clack.spinner();\n this.spinner.start('Waiting for authentication...');\n };\n\n private handleDeviceSuccess = (): void => {\n // Spinner will be stopped by handleStagingFetching\n };\n\n private handleStagingFetching = (): void => {\n if (this.spinner) {\n this.spinner.stop('Authenticated');\n }\n this.spinner = clack.spinner();\n this.spinner.start('Fetching your WorkOS credentials...');\n };\n\n private handleStagingSuccess = (): void => {\n this.stopSpinner('Credentials fetched');\n clack.log.success('WorkOS credentials retrieved automatically');\n };\n\n private handleEnvCredentialsFound = ({ sourcePath }: WizardEvents['credentials:env:found']): void => {\n clack.log.success(`Found existing WorkOS credentials in ${sourcePath}`);\n };\n\n private handleGitDirty = async ({ files }: WizardEvents['git:dirty']): Promise<void> => {\n clack.log.warn('You have uncommitted or untracked files:');\n files.slice(0, 5).forEach((f) => clack.log.info(chalk.dim(` ${f}`)));\n if (files.length > 5) {\n clack.log.info(chalk.dim(` ... and ${files.length - 5} more`));\n }\n\n this.isPromptActive = true;\n const confirmed = await clack.confirm({\n message: 'Continue anyway?',\n initialValue: false,\n });\n this.isPromptActive = false;\n this.flushPendingLogs();\n\n this.sendEvent({\n type: clack.isCancel(confirmed) || !confirmed ? 'GIT_CANCELLED' : 'GIT_CONFIRMED',\n });\n };\n\n private handleCredentialsRequest = async ({ requiresApiKey }: WizardEvents['credentials:request']): Promise<void> => {\n clack.log.step(`Get your credentials from ${chalk.cyan('https://dashboard.workos.com')}`);\n\n const clientId = await clack.text({\n message: 'Enter your WorkOS Client ID:',\n placeholder: 'client_...',\n validate: (value) => {\n if (!value || value.trim().length === 0) {\n return 'Client ID is required';\n }\n if (!value.startsWith('client_')) {\n return 'Client ID should start with \"client_\"';\n }\n return undefined;\n },\n });\n\n if (clack.isCancel(clientId)) {\n this.sendEvent({ type: 'CANCEL' });\n return;\n }\n\n let apiKey = '';\n if (requiresApiKey) {\n clack.log.info(chalk.dim('ℹ️ Your API key will be hidden for security and saved to .env.local'));\n const apiKeyResult = await clack.password({\n message: 'Enter your WorkOS API Key:',\n validate: (value) => {\n if (!value || value.trim().length === 0) {\n return 'API Key is required';\n }\n if (!value.startsWith('sk_')) {\n return 'API Key should start with \"sk_\"';\n }\n return undefined;\n },\n });\n\n if (clack.isCancel(apiKeyResult)) {\n this.sendEvent({ type: 'CANCEL' });\n return;\n }\n apiKey = apiKeyResult as string;\n } else {\n clack.log.info(chalk.dim('ℹ️ Client-only SDK - API key not required'));\n }\n\n this.sendEvent({\n type: 'CREDENTIALS_SUBMITTED',\n apiKey,\n clientId: clientId as string,\n });\n };\n\n private handleConfigComplete = (): void => {\n clack.log.success('Environment configured');\n };\n\n private handleAgentStart = (): void => {\n this.spinner = clack.spinner();\n this.spinner.start('Running AI agent...');\n\n // Periodic status updates for long-running operations\n let dots = 0;\n this.agentUpdateInterval = setInterval(() => {\n dots = (dots + 1) % 4;\n const dotStr = '.'.repeat(dots + 1);\n this.spinner?.message(`Running AI agent${dotStr}`);\n }, 2000);\n };\n\n private handleAgentProgress = ({ step, detail }: WizardEvents['agent:progress']): void => {\n const message = detail ? `${step}: ${detail}` : step;\n this.spinner?.message(message);\n };\n\n private handleValidationStart = (): void => {\n this.stopAgentUpdates();\n this.stopSpinner('Agent completed');\n };\n\n private handleValidationIssues = ({ issues }: WizardEvents['validation:issues']): void => {\n for (const issue of issues) {\n if (issue.severity === 'error') {\n clack.log.error(issue.message);\n } else {\n clack.log.warn(issue.message);\n }\n if (issue.hint) {\n clack.log.info(`Hint: ${issue.hint}`);\n }\n }\n };\n\n private handleValidationComplete = ({ passed, issueCount }: WizardEvents['validation:complete']): void => {\n if (passed) {\n clack.log.success('Validation passed');\n } else {\n clack.log.warn(`Validation found ${issueCount} issue(s)`);\n }\n };\n\n private handleComplete = ({ success, summary }: WizardEvents['complete']): void => {\n this.stopAgentUpdates();\n this.stopSpinner(success ? 'Done' : 'Failed');\n\n if (success) {\n clack.log.success('WorkOS AuthKit installed!');\n clack.log.message('Next steps:');\n clack.log.message(' • Start dev server to test authentication');\n clack.log.message(' • Visit WorkOS Dashboard to manage users');\n clack.outro(chalk.dim('Docs: https://workos.com/docs/authkit'));\n } else {\n clack.log.error('Installation failed');\n if (summary) {\n clack.log.info(summary);\n }\n clack.outro(chalk.dim('Report issues: https://github.com/workos/installer/issues'));\n }\n };\n\n private handleError = ({ message, stack }: WizardEvents['error']): void => {\n this.stopSpinner('Error');\n this.stopAgentUpdates();\n\n clack.log.error(message);\n\n // Add actionable hints for common errors\n if (message.includes('authentication') || message.includes('auth')) {\n clack.log.info('Try running: wizard logout && wizard');\n }\n if (message.includes('ENOENT') || message.includes('not found')) {\n clack.log.info('Ensure you are in a project directory');\n }\n\n if (stack && this.debug) {\n this.debugLog(stack);\n }\n };\n\n private handleBranchPrompt = async ({ branch }: WizardEvents['branch:prompt']): Promise<void> => {\n this.isPromptActive = true;\n const choice = await clack.select({\n message: `You are on ${chalk.bold(branch)}. Create a feature branch?`,\n options: [\n { value: 'create', label: 'Create feat/add-workos-authkit' },\n { value: 'continue', label: 'Continue on current branch' },\n { value: 'cancel', label: 'Cancel' },\n ],\n });\n this.isPromptActive = false;\n this.flushPendingLogs();\n\n if (clack.isCancel(choice) || choice === 'cancel') {\n this.sendEvent({ type: 'BRANCH_CANCEL' });\n } else if (choice === 'create') {\n this.sendEvent({ type: 'BRANCH_CREATE' });\n } else {\n this.sendEvent({ type: 'BRANCH_CONTINUE' });\n }\n };\n\n private handleBranchCreated = ({ branch }: WizardEvents['branch:created']): void => {\n this.queueableLog(() => clack.log.success(`Created branch ${chalk.bold(branch)}`));\n };\n\n // ===== Post-install Event Handlers =====\n\n private handlePostInstallChanges = ({ files }: WizardEvents['postinstall:changes']): void => {\n this.debugLog(`Post-install: ${files.length} changed files detected`);\n };\n\n private handleCommitPrompt = async (): Promise<void> => {\n this.isPromptActive = true;\n const confirmed = await clack.confirm({\n message: 'Commit the changes?',\n initialValue: true,\n });\n this.isPromptActive = false;\n this.flushPendingLogs();\n\n this.sendEvent({\n type: clack.isCancel(confirmed) || !confirmed ? 'COMMIT_DECLINED' : 'COMMIT_APPROVED',\n });\n };\n\n private handleCommitGenerating = (): void => {\n this.spinner = clack.spinner();\n this.spinner.start('Generating commit message...');\n };\n\n private handleCommitSuccess = ({ message }: WizardEvents['postinstall:commit:success']): void => {\n this.stopSpinner('Committed');\n clack.log.success(`Committed: ${chalk.dim(message)}`);\n };\n\n private handleCommitFailed = ({ error }: WizardEvents['postinstall:commit:failed']): void => {\n this.stopSpinner('Commit failed');\n clack.log.error(`Commit failed: ${error}`);\n };\n\n private handlePrPrompt = async (): Promise<void> => {\n this.isPromptActive = true;\n const confirmed = await clack.confirm({\n message: 'Create a pull request?',\n initialValue: true,\n });\n this.isPromptActive = false;\n this.flushPendingLogs();\n\n this.sendEvent({\n type: clack.isCancel(confirmed) || !confirmed ? 'PR_DECLINED' : 'PR_APPROVED',\n });\n };\n\n private handlePrGenerating = (): void => {\n this.spinner = clack.spinner();\n this.spinner.start('Generating PR description...');\n };\n\n private handlePrPushing = (): void => {\n if (this.spinner) {\n this.spinner.message('Pushing to remote...');\n } else {\n this.spinner = clack.spinner();\n this.spinner.start('Pushing to remote...');\n }\n };\n\n private handlePrSuccess = ({ url }: WizardEvents['postinstall:pr:success']): void => {\n this.stopSpinner('PR created');\n clack.log.success(`Pull request created: ${chalk.cyan(url)}`);\n };\n\n private handlePrFailed = ({ error }: WizardEvents['postinstall:pr:failed']): void => {\n this.stopSpinner('PR creation failed');\n clack.log.error(`PR creation failed: ${error}`);\n };\n\n private handlePushFailed = ({ error }: WizardEvents['postinstall:push:failed']): void => {\n this.stopSpinner('Push failed');\n clack.log.error(`Push failed: ${error}`);\n };\n\n private handleManualInstructions = ({ instructions }: WizardEvents['postinstall:manual']): void => {\n clack.log.info('GitHub CLI not found. Manual steps:');\n console.log(chalk.dim(instructions));\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-adapter.js","sourceRoot":"","sources":["../../../../src/lib/adapters/dashboard-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WizardAdapter, AdapterConfig } from './types.js';\nimport type { WizardEventEmitter, WizardEvents } from '../events.js';\nimport chalk from 'chalk';\n\n/**\n * Dashboard adapter that renders wizard events via Ink/React TUI.\n *\n * Wraps the existing Dashboard component and passes the emitter to it.\n * The Dashboard component already handles most event rendering internally.\n */\nexport class DashboardAdapter implements WizardAdapter {\n readonly emitter: WizardEventEmitter;\n private sendEvent: AdapterConfig['sendEvent'];\n private cleanup: (() => void) | null = null;\n private isStarted = false;\n private completionData: { success: boolean; summary?: string } | null = null;\n\n constructor(config: AdapterConfig) {\n this.emitter = config.emitter;\n this.sendEvent = config.sendEvent;\n }\n\n async start(): Promise<void> {\n if (this.isStarted) return;\n this.isStarted = true;\n\n // Dynamic imports to avoid loading Ink when not needed\n const { render } = await import('ink');\n const { createElement } = await import('react');\n const { Dashboard } = await import('../../dashboard/components/Dashboard.js');\n\n // Enter fullscreen (alternate screen buffer)\n process.stdout.write('\\x1b[?1049h'); // Enter alternate screen\n process.stdout.write('\\x1b[2J'); // Clear entire screen\n process.stdout.write('\\x1b[H'); // Move cursor to home\n process.stdout.write('\\x1b[?25l'); // Hide cursor\n\n // Render the Dashboard component with emitter\n const instance = render(createElement(Dashboard, { emitter: this.emitter }));\n\n // Setup cleanup function\n this.cleanup = () => {\n instance.unmount();\n process.stdout.write('\\x1b[?25h'); // Show cursor\n process.stdout.write('\\x1b[?1049l'); // Exit alternate screen\n };\n\n // Wire up Dashboard responses back to the machine\n // The Dashboard component emits these when user interacts\n this.emitter.on('confirm:response', this.handleConfirmResponse);\n this.emitter.on('credentials:response', this.handleCredentialsResponse);\n\n // Track completion for post-exit summary\n this.emitter.on('complete', this.handleComplete);\n }\n\n /**\n * Capture completion data for display after exit.\n */\n private handleComplete = ({ success, summary }: WizardEvents['complete']): void => {\n this.completionData = { success, summary };\n };\n\n async stop(): Promise<void> {\n if (!this.isStarted) return;\n\n // Unsubscribe from events\n this.emitter.off('confirm:response', this.handleConfirmResponse);\n this.emitter.off('credentials:response', this.handleCredentialsResponse);\n this.emitter.off('complete', this.handleComplete);\n\n // Run cleanup (unmount Ink, exit fullscreen)\n this.cleanup?.();\n this.cleanup = null;\n\n // Print completion summary to terminal after exiting alternate screen\n if (this.completionData) {\n console.log(); // blank line\n if (this.completionData.success) {\n console.log(chalk.green('✓ Installation Complete'));\n if (this.completionData.summary) {\n console.log();\n console.log(this.completionData.summary);\n }\n } else {\n console.log(chalk.red('✗ Installation Failed'));\n if (this.completionData.summary) {\n console.log(chalk.dim(this.completionData.summary));\n }\n }\n console.log();\n }\n\n this.isStarted = false;\n }\n\n /**\n * Handle confirm dialog responses from Dashboard.\n */\n private handleConfirmResponse = ({ id, confirmed }: { id: string; confirmed: boolean }): void => {\n if (id === 'git-status') {\n this.sendEvent({ type: confirmed ? 'GIT_CONFIRMED' : 'GIT_CANCELLED' });\n } else if (id === 'env-scan') {\n this.sendEvent({ type: confirmed ? 'ENV_SCAN_APPROVED' : 'ENV_SCAN_DECLINED' });\n } else if (id === 'branch-check') {\n // For dashboard, confirmed=true means create branch, false means continue on current\n this.sendEvent({ type: confirmed ? 'BRANCH_CREATE' : 'BRANCH_CONTINUE' });\n } else if (id === 'commit') {\n this.sendEvent({ type: confirmed ? 'COMMIT_APPROVED' : 'COMMIT_DECLINED' });\n } else if (id === 'pr') {\n this.sendEvent({ type: confirmed ? 'PR_APPROVED' : 'PR_DECLINED' });\n }\n };\n\n /**\n * Handle credentials form submission from Dashboard.\n */\n private handleCredentialsResponse = ({ apiKey, clientId }: { apiKey: string; clientId: string }): void => {\n this.sendEvent({ type: 'CREDENTIALS_SUBMITTED', apiKey, clientId });\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC","sourcesContent":["export { CLIAdapter } from './cli-adapter.js';\nexport { DashboardAdapter } from './dashboard-adapter.js';\nexport type { WizardAdapter, AdapterConfig } from './types.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/adapters/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { WizardEventEmitter } from '../events.js';\n\n/**\n * Configuration passed to adapter constructors.\n */\nexport interface AdapterConfig {\n /** Event emitter to subscribe to */\n emitter: WizardEventEmitter;\n\n /**\n * Callback to send events back to the machine.\n * Used for user responses (confirmations, credentials, etc.)\n */\n sendEvent: (event: { type: string; [key: string]: unknown }) => void;\n\n /** Enable verbose debug output (stack traces, etc.) */\n debug?: boolean;\n}\n\n/**\n * Interface all UI adapters must implement.\n *\n * Adapters are event subscribers that translate machine events\n * into framework-specific UI rendering. They don't control flow—\n * they react to it.\n */\nexport interface WizardAdapter {\n /**\n * Start the adapter.\n * - Subscribe to emitter events\n * - Initialize UI framework (show intro, enter fullscreen, etc.)\n */\n start(): Promise<void>;\n\n /**\n * Stop the adapter.\n * - Unsubscribe from all events\n * - Clean up UI (exit fullscreen, restore terminal, etc.)\n */\n stop(): Promise<void>;\n\n /** The emitter this adapter subscribes to */\n readonly emitter: WizardEventEmitter;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-interface.js","sourceRoot":"","sources":["../../../src/lib/agent-interface.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared agent interface for WorkOS wizards\n * Uses Claude Agent SDK directly with WorkOS MCP server\n */\n\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { debug, logInfo, logWarn, logError, initLogFile, getLogFilePath } from '../utils/debug.js';\nimport type { WizardOptions } from '../utils/types.js';\nimport { analytics } from '../utils/analytics.js';\nimport { WIZARD_INTERACTION_EVENT_NAME } from './constants.js';\nimport { LINTING_TOOLS } from './safe-tools.js';\nimport { getLlmGatewayUrlFromHost } from '../utils/urls.js';\nimport { getConfig } from './settings.js';\nimport { getCredentials, hasCredentials } from './credentials.js';\nimport { ensureValidToken } from './token-refresh.js';\nimport type { WizardEventEmitter } from './events.js';\n\n// File content cache for computing edit diffs\nconst fileContentCache = new Map<string, string>();\n// Track pending Read operations by tool_use_id\nconst pendingReads = new Map<string, string>();\n// Track tool start times by tool_use_id for telemetry\nconst pendingToolCalls = new Map<string, { toolName: string; startTime: number }>();\n\n// Dynamic import cache for ESM module\nlet _sdkModule: any = null;\nasync function getSDKModule(): Promise<any> {\n if (!_sdkModule) {\n _sdkModule = await import('@anthropic-ai/claude-agent-sdk');\n }\n return _sdkModule;\n}\n\n// Using `any` because typed imports from ESM modules require import attributes\n// syntax which prettier cannot parse. See PR discussion for details.\ntype SDKMessage = any;\ntype McpServersConfig = any;\n\nexport const AgentSignals = {\n /** Signal emitted when the agent reports progress to the user */\n STATUS: '[STATUS]',\n /** Signal emitted when the agent cannot access the WorkOS MCP server */\n ERROR_MCP_MISSING: '[ERROR-MCP-MISSING]',\n /** Signal emitted when the agent cannot access the setup resource */\n ERROR_RESOURCE_MISSING: '[ERROR-RESOURCE-MISSING]',\n} as const;\n\nexport type AgentSignal = (typeof AgentSignals)[keyof typeof AgentSignals];\n\n/**\n * Error types that can be returned from agent execution.\n * These correspond to the error signals that the agent emits.\n */\nexport enum AgentErrorType {\n /** Agent could not access the WorkOS MCP server */\n MCP_MISSING = 'WIZARD_MCP_MISSING',\n /** Agent could not access the setup resource */\n RESOURCE_MISSING = 'WIZARD_RESOURCE_MISSING',\n /** Agent execution failed (API error, auth error, etc.) */\n EXECUTION_ERROR = 'WIZARD_EXECUTION_ERROR',\n}\n\nexport type AgentConfig = {\n workingDirectory: string;\n workOSApiKey: string;\n workOSApiHost: string;\n};\n\n/**\n * Internal configuration object returned by initializeAgent\n */\ntype AgentRunConfig = {\n workingDirectory: string;\n mcpServers: McpServersConfig;\n model: string;\n allowedTools: string[];\n};\n\n/**\n * Package managers that can be used to run commands.\n */\nconst PACKAGE_MANAGERS = ['npm', 'pnpm', 'yarn', 'bun', 'npx'];\n\n/**\n * Safe scripts/commands that can be run with any package manager.\n * Uses startsWith matching, so 'build' matches 'build', 'build:prod', etc.\n * Note: Linting tools are in LINTING_TOOLS and checked separately.\n */\nconst SAFE_SCRIPTS = [\n // Package installation\n 'install',\n 'add',\n 'ci',\n // Build\n 'build',\n // Type checking (various naming conventions)\n 'tsc',\n 'typecheck',\n 'type-check',\n 'check-types',\n 'types',\n // Linting/formatting script names (actual tools are in LINTING_TOOLS)\n 'lint',\n 'format',\n];\n\n/**\n * Dangerous shell operators that could allow command injection.\n * Note: We handle `2>&1` and `| tail/head` separately as safe patterns.\n */\nconst DANGEROUS_OPERATORS = /[;`$()]/;\n\n/**\n * Check if command is an allowed package manager command.\n * Matches: <pkg-manager> [run|exec] <safe-script> [args...]\n */\nfunction matchesAllowedPrefix(command: string): boolean {\n const parts = command.split(/\\s+/);\n if (parts.length === 0 || !PACKAGE_MANAGERS.includes(parts[0])) {\n return false;\n }\n\n // Skip 'run' or 'exec' if present\n let scriptIndex = 1;\n if (parts[scriptIndex] === 'run' || parts[scriptIndex] === 'exec') {\n scriptIndex++;\n }\n\n // Get the script/command portion (may include args)\n const scriptPart = parts.slice(scriptIndex).join(' ');\n\n // Check if script starts with any safe script name or linting tool\n return (\n SAFE_SCRIPTS.some((safe) => scriptPart.startsWith(safe)) ||\n LINTING_TOOLS.some((tool) => scriptPart.startsWith(tool))\n );\n}\n\n/**\n * Permission hook that allows only safe commands.\n * - Package manager install commands\n * - Build/typecheck/lint commands for verification\n * - Piping to tail/head for output limiting is allowed\n * - Stderr redirection (2>&1) is allowed\n */\nexport function wizardCanUseTool(\n toolName: string,\n input: Record<string, unknown>,\n): { behavior: 'allow'; updatedInput: Record<string, unknown> } | { behavior: 'deny'; message: string } {\n // Allow all non-Bash tools\n if (toolName !== 'Bash') {\n return { behavior: 'allow', updatedInput: input };\n }\n\n const command = (typeof input.command === 'string' ? input.command : '').trim();\n\n // Block definitely dangerous operators: ; ` $ ( )\n if (DANGEROUS_OPERATORS.test(command)) {\n logWarn(`Denying bash command with dangerous operators: ${command}`);\n debug(`Denying bash command with dangerous operators: ${command}`);\n analytics.capture(WIZARD_INTERACTION_EVENT_NAME, {\n action: 'bash command denied',\n reason: 'dangerous operators',\n command,\n });\n return {\n behavior: 'deny',\n message: `Bash command not allowed. Shell operators like ; \\` $ ( ) are not permitted.`,\n };\n }\n\n // Normalize: remove safe stderr redirection (2>&1, 2>&2, etc.)\n const normalized = command.replace(/\\s*\\d*>&\\d+\\s*/g, ' ').trim();\n\n // Check for pipe to tail/head (safe output limiting)\n const pipeMatch = normalized.match(/^(.+?)\\s*\\|\\s*(tail|head)(\\s+\\S+)*\\s*$/);\n if (pipeMatch) {\n const baseCommand = pipeMatch[1].trim();\n\n // Block if base command has pipes or & (multiple chaining)\n if (/[|&]/.test(baseCommand)) {\n logWarn(`Denying bash command with multiple pipes: ${command}`);\n debug(`Denying bash command with multiple pipes: ${command}`);\n analytics.capture(WIZARD_INTERACTION_EVENT_NAME, {\n action: 'bash command denied',\n reason: 'multiple pipes',\n command,\n });\n return {\n behavior: 'deny',\n message: `Bash command not allowed. Only single pipe to tail/head is permitted.`,\n };\n }\n\n if (matchesAllowedPrefix(baseCommand)) {\n logInfo(`Allowing bash command with output limiter: ${command}`);\n debug(`Allowing bash command with output limiter: ${command}`);\n return { behavior: 'allow', updatedInput: input };\n }\n }\n\n // Block remaining pipes and & (not covered by tail/head case above)\n if (/[|&]/.test(normalized)) {\n logWarn(`Denying bash command with pipe/&: ${command}`);\n debug(`Denying bash command with pipe/&: ${command}`);\n analytics.capture(WIZARD_INTERACTION_EVENT_NAME, {\n action: 'bash command denied',\n reason: 'disallowed pipe',\n command,\n });\n return {\n behavior: 'deny',\n message: `Bash command not allowed. Pipes are only permitted with tail/head for output limiting.`,\n };\n }\n\n // Check if command starts with any allowed prefix\n if (matchesAllowedPrefix(normalized)) {\n logInfo(`Allowing bash command: ${command}`);\n debug(`Allowing bash command: ${command}`);\n return { behavior: 'allow', updatedInput: input };\n }\n\n logWarn(`Denying bash command: ${command}`);\n debug(`Denying bash command: ${command}`);\n analytics.capture(WIZARD_INTERACTION_EVENT_NAME, {\n action: 'bash command denied',\n reason: 'not in allowlist',\n command,\n });\n return {\n behavior: 'deny',\n message: `Bash command not allowed. Only install, build, typecheck, lint, and formatting commands are permitted.`,\n };\n}\n\n/**\n * Initialize agent configuration for the LLM gateway\n */\nexport async function initializeAgent(config: AgentConfig, options: WizardOptions): Promise<AgentRunConfig> {\n // Initialize log file for this run\n initLogFile();\n logInfo('Agent initialization starting');\n logInfo('Install directory:', options.installDir);\n\n // Emit status event for adapters to render\n options.emitter?.emit('status', { message: 'Initializing Claude agent...' });\n\n try {\n // Configure LLM gateway for Claude API calls via LLM_GATEWAY_URL env var\n const gatewayUrl = getLlmGatewayUrlFromHost();\n\n // Check/refresh authentication for production (unless skipping auth)\n if (!options.skipAuth && !options.local) {\n if (!hasCredentials()) {\n throw new Error('Not authenticated. Run `wizard login` to authenticate.');\n }\n\n const refreshResult = await ensureValidToken();\n if (!refreshResult.success) {\n throw new Error(refreshResult.error || 'Authentication failed');\n }\n }\n\n // Set gateway URL\n process.env.ANTHROPIC_BASE_URL = gatewayUrl;\n\n // Only send access token if not skipping auth\n let authMode: string;\n if (options.skipAuth) {\n delete process.env.ANTHROPIC_AUTH_TOKEN;\n authMode = `skip-auth:${gatewayUrl}`;\n logInfo('Skipping auth - no token sent to gateway');\n } else {\n const creds = getCredentials();\n if (!creds) {\n throw new Error('Not authenticated. Run `wizard login` to authenticate.');\n }\n process.env.ANTHROPIC_AUTH_TOKEN = creds.accessToken;\n authMode = options.local ? `local-gateway:${gatewayUrl}` : `workos-gateway:${gatewayUrl}`;\n logInfo('Sending access token to gateway');\n }\n\n logInfo('Configured LLM gateway:', gatewayUrl);\n\n // Disable experimental betas (like input_examples) that the LLM gateway doesn't support\n process.env.CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS = 'true';\n\n // Disable SDK telemetry - our gateway doesn't proxy /api/event_logging/batch\n process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = 'true';\n\n // Configure WorkOS MCP docs server for accessing WorkOS documentation\n const agentRunConfig: AgentRunConfig = {\n workingDirectory: config.workingDirectory,\n mcpServers: {\n workos: {\n command: 'npx',\n args: ['-y', '@workos/mcp-docs-server'],\n },\n },\n model: getConfig().model,\n allowedTools: ['Skill', 'Read', 'Write', 'Edit', 'Bash', 'Glob', 'Grep', 'WebFetch'],\n };\n\n logInfo('Agent config:', {\n workingDirectory: agentRunConfig.workingDirectory,\n gatewayUrl,\n authMode,\n useMcp: false,\n });\n\n if (options.debug) {\n debug('Agent config:', {\n workingDirectory: agentRunConfig.workingDirectory,\n gatewayUrl,\n authMode,\n useMcp: false,\n });\n }\n\n // Emit status events for adapters to render\n const currentLogPath = getLogFilePath();\n if (currentLogPath) {\n options.emitter?.emit('status', { message: `Verbose logs: ${currentLogPath}` });\n }\n options.emitter?.emit('status', { message: \"Agent initialized. Let's get cooking!\" });\n\n return agentRunConfig;\n } catch (error) {\n // Emit error via emitter for adapters to handle\n options.emitter?.emit('error', { message: `Failed to initialize agent: ${(error as Error).message}` });\n logError('Agent initialization error:', error);\n debug('Agent initialization error:', error);\n throw error;\n }\n}\n\n/**\n * Execute an agent with the provided prompt and options\n * Handles the full lifecycle via event emissions - adapters handle UI rendering.\n *\n * @returns An object containing any error detected in the agent's output\n */\nexport async function runAgent(\n agentConfig: AgentRunConfig,\n prompt: string,\n options: WizardOptions,\n config?: {\n spinnerMessage?: string;\n successMessage?: string;\n errorMessage?: string;\n },\n emitter?: WizardEventEmitter,\n): Promise<{ error?: AgentErrorType; errorMessage?: string }> {\n const {\n spinnerMessage = 'Setting up WorkOS AuthKit...',\n successMessage = 'WorkOS AuthKit integration complete',\n errorMessage = 'Integration failed',\n } = config ?? {};\n\n const { query } = await getSDKModule();\n\n // Emit progress for adapters to handle (e.g., CLI adapter starts spinner)\n emitter?.emit('agent:progress', { step: 'Starting', detail: 'This may take a few minutes. Grab some coffee!' });\n emitter?.emit('agent:progress', { step: spinnerMessage });\n\n logInfo('Starting agent run');\n logInfo('Prompt:', prompt);\n\n const startTime = Date.now();\n const collectedText: string[] = [];\n\n try {\n // Workaround for SDK bug: stdin closes before canUseTool responses can be sent.\n // The fix is to use an async generator for the prompt that stays open until\n // the result is received, keeping the stdin stream alive for permission responses.\n // See: https://github.com/anthropics/claude-code/issues/4775\n // See: https://github.com/anthropics/claude-agent-sdk-typescript/issues/41\n let signalDone: () => void;\n const resultReceived = new Promise<void>((resolve) => {\n signalDone = resolve;\n });\n\n const createPromptStream = async function* () {\n yield {\n type: 'user',\n session_id: '',\n message: { role: 'user', content: prompt },\n parent_tool_use_id: null,\n };\n await resultReceived;\n };\n\n // Load plugin with bundled skills\n // Path from dist/src/lib/ back to package root\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const pluginPath = path.join(__dirname, '../../..');\n logInfo('Loading plugin from:', pluginPath);\n\n const response = query({\n prompt: createPromptStream(),\n options: {\n model: agentConfig.model,\n cwd: agentConfig.workingDirectory,\n permissionMode: 'acceptEdits',\n mcpServers: agentConfig.mcpServers,\n env: { ...process.env },\n canUseTool: (toolName: string, input: unknown) => {\n logInfo('canUseTool called:', { toolName, input });\n const result = wizardCanUseTool(toolName, input as Record<string, unknown>);\n logInfo('canUseTool result:', result);\n return Promise.resolve(result);\n },\n tools: { type: 'preset', preset: 'claude_code' },\n allowedTools: agentConfig.allowedTools,\n plugins: [{ type: 'local', path: pluginPath }],\n // Capture stderr from CLI subprocess for debugging\n stderr: (data: string) => {\n logInfo('CLI stderr:', data);\n if (options.debug) {\n debug('CLI stderr:', data);\n }\n },\n },\n });\n\n // Process the async generator\n let sdkError: string | undefined;\n for await (const message of response) {\n const messageError = handleSDKMessage(message, options, collectedText, emitter);\n if (messageError) {\n sdkError = messageError;\n }\n // Signal completion when result received\n if (message.type === 'result') {\n signalDone!();\n }\n }\n\n const durationMs = Date.now() - startTime;\n const outputText = collectedText.join('\\n');\n\n // Check for SDK errors first (e.g., API errors, auth failures)\n // Return error type + message - caller decides whether to throw or emit events\n if (sdkError) {\n logError('Agent SDK error:', sdkError);\n return { error: AgentErrorType.EXECUTION_ERROR, errorMessage: sdkError };\n }\n\n // Check for error markers in the agent's output\n if (outputText.includes(AgentSignals.ERROR_MCP_MISSING)) {\n logError('Agent error: MCP_MISSING');\n return { error: AgentErrorType.MCP_MISSING, errorMessage: 'Could not access WorkOS MCP server' };\n }\n\n if (outputText.includes(AgentSignals.ERROR_RESOURCE_MISSING)) {\n logError('Agent error: RESOURCE_MISSING');\n return { error: AgentErrorType.RESOURCE_MISSING, errorMessage: 'Could not access setup resource' };\n }\n\n logInfo(`Agent run completed in ${Math.round(durationMs / 1000)}s`);\n analytics.capture(WIZARD_INTERACTION_EVENT_NAME, {\n action: 'agent integration completed',\n duration_ms: durationMs,\n duration_seconds: Math.round(durationMs / 1000),\n });\n\n // Don't emit agent:success here - let the state machine handle lifecycle events\n return {};\n } catch (error) {\n // Don't emit events here - just log and re-throw for state machine to handle\n logError('Agent run failed:', error);\n debug('Full error:', error);\n throw error;\n }\n}\n\n/**\n * Handle SDK messages and emit events for adapters to render.\n * @returns Error message if this was an error result, undefined otherwise\n */\nfunction handleSDKMessage(\n message: SDKMessage,\n options: WizardOptions,\n collectedText: string[],\n emitter?: WizardEventEmitter,\n): string | undefined {\n logInfo(`SDK Message: ${message.type}`, JSON.stringify(message, null, 2));\n\n switch (message.type) {\n case 'assistant': {\n // Extract usage data from Anthropic API response for telemetry\n const usage = message.message?.usage;\n if (usage) {\n const inputTokens = usage.input_tokens ?? 0;\n const outputTokens = usage.output_tokens ?? 0;\n const model = message.message?.model ?? 'unknown';\n analytics.llmRequest(model, inputTokens, outputTokens);\n analytics.incrementAgentIterations();\n }\n\n // Extract text content from assistant messages\n const content = message.message?.content;\n if (Array.isArray(content)) {\n for (const block of content) {\n if (block.type === 'text' && typeof block.text === 'string') {\n collectedText.push(block.text);\n\n // Emit output event for dashboard\n emitter?.emit('output', { text: block.text });\n\n // Check for [STATUS] markers and emit progress events\n const statusRegex = new RegExp(\n `^.*${AgentSignals.STATUS.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\s*(.+?)$`,\n 'm',\n );\n const statusMatch = block.text.match(statusRegex);\n if (statusMatch) {\n const statusText = statusMatch[1].trim();\n // Emit progress event - adapters handle spinner updates\n emitter?.emit('agent:progress', { step: statusText });\n emitter?.emit('status', { message: statusText });\n }\n }\n\n // Check for tool_use blocks (Write/Edit operations)\n if (block.type === 'tool_use') {\n const toolName = block.name as string;\n const toolUseId = block.id as string;\n const input = block.input as Record<string, unknown>;\n\n // Log tool usage for debugging\n logInfo(`Tool use: ${toolName}`);\n\n // Track tool start time for telemetry\n if (toolUseId) {\n pendingToolCalls.set(toolUseId, { toolName, startTime: Date.now() });\n }\n\n // Emit file:write event for Write tool\n if (toolName === 'Write' && input) {\n const filePath = input.file_path as string;\n const fileContent = input.content as string;\n if (filePath && fileContent) {\n emitter?.emit('file:write', { path: filePath, content: fileContent });\n }\n }\n\n // Emit file:edit event for Edit tool\n if (toolName === 'Edit' && input) {\n const filePath = input.file_path as string;\n const oldString = input.old_string as string;\n const newString = input.new_string as string;\n if (filePath && oldString !== undefined && newString !== undefined) {\n // Emit the actual strings being replaced, not reconstructed full file\n emitter?.emit('file:edit', {\n path: filePath,\n oldContent: oldString,\n newContent: newString,\n });\n }\n }\n\n // Track Read operations for caching file content later\n if (toolName === 'Read' && input && block.id) {\n const filePath = input.file_path as string;\n if (filePath) {\n pendingReads.set(block.id as string, filePath);\n }\n }\n }\n }\n }\n break;\n }\n\n case 'user': {\n // User messages contain tool results\n const content = message.message?.content;\n if (Array.isArray(content)) {\n for (const block of content) {\n // Tool results contain file content from Read operations\n if (block.type === 'tool_result' && block.tool_use_id) {\n const toolUseId = block.tool_use_id as string;\n\n // Emit telemetry for completed tool call\n const pendingTool = pendingToolCalls.get(toolUseId);\n if (pendingTool) {\n const durationMs = Date.now() - pendingTool.startTime;\n // Check if tool result indicates error (is_error field or error in content)\n const isError = block.is_error === true;\n analytics.toolCalled(pendingTool.toolName, durationMs, !isError);\n pendingToolCalls.delete(toolUseId);\n }\n\n const filePath = pendingReads.get(toolUseId);\n if (filePath) {\n // Extract content from the tool result\n let resultContent = '';\n if (typeof block.content === 'string') {\n resultContent = block.content;\n } else if (Array.isArray(block.content)) {\n // Content might be array of text blocks\n for (const item of block.content) {\n if (item.type === 'text' && item.text) {\n resultContent += item.text;\n }\n }\n }\n if (resultContent) {\n fileContentCache.set(filePath, resultContent);\n }\n pendingReads.delete(toolUseId);\n }\n }\n }\n }\n break;\n }\n\n case 'tool': {\n // This case may not be used by the current SDK, keeping for compatibility\n const toolName = message.tool as string;\n const input = message.input as Record<string, unknown> | undefined;\n\n if (toolName === 'Read' && message.content) {\n const filePath = input?.file_path as string;\n if (filePath && typeof message.content === 'string') {\n fileContentCache.set(filePath, message.content);\n }\n }\n\n break;\n }\n\n case 'result': {\n if (message.subtype === 'success') {\n logInfo('Agent completed successfully');\n if (typeof message.result === 'string') {\n collectedText.push(message.result);\n }\n } else {\n // Error result\n logError('Agent error result:', message.subtype);\n if (message.errors && message.errors.length > 0) {\n for (const err of message.errors) {\n logError('ERROR:', err);\n // Emit error event - adapters handle rendering\n emitter?.emit('error', { message: err });\n }\n // Return the first error message\n return message.errors[0];\n }\n // Return generic error if subtype indicates failure but no errors array\n return `Agent execution failed: ${message.subtype}`;\n }\n break;\n }\n\n case 'system': {\n if (message.subtype === 'init') {\n logInfo('Agent session initialized', {\n model: message.model,\n tools: message.tools?.length,\n mcpServers: message.mcp_servers,\n });\n }\n break;\n }\n\n default:\n // Log other message types for debugging\n if (options.debug) {\n debug(`Unhandled message type: ${message.type}`);\n }\n break;\n }\n return undefined;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-runner.js","sourceRoot":"","sources":["../../../src/lib/agent-runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { SPINNER_MESSAGE, type FrameworkConfig } from './framework-config.js';\nimport { validateInstallation } from './validation/index.js';\nimport type { WizardOptions } from '../utils/types.js';\nimport {\n ensurePackageIsInstalled,\n getOrAskForWorkOSCredentials,\n getPackageDotJson,\n isUsingTypeScript,\n} from '../utils/clack-utils.js';\nimport { analytics } from '../utils/analytics.js';\nimport { WIZARD_INTERACTION_EVENT_NAME } from './constants.js';\nimport { initializeAgent, runAgent } from './agent-interface.js';\nimport { uploadEnvironmentVariablesStep } from '../steps/index.js';\nimport { autoConfigureWorkOSEnvironment } from './workos-management.js';\nimport { detectPort, getCallbackPath } from './port-detection.js';\nimport { writeEnvLocal } from './env-writer.js';\n\n/**\n * Universal agent-powered wizard runner.\n * Handles the complete flow for any framework using WorkOS MCP integration.\n *\n * @returns A detailed summary of what was done and next steps\n */\nexport async function runAgentWizard(config: FrameworkConfig, options: WizardOptions): Promise<string> {\n // Emit status for UI adapters to render\n options.emitter?.emit('status', {\n message: `Setting up WorkOS AuthKit for ${config.metadata.name}`,\n });\n\n const typeScriptDetected = isUsingTypeScript(options);\n\n // Git check is now handled by the state machine - no need to check here\n\n // Framework detection and version\n const packageJson = await getPackageDotJson(options);\n await ensurePackageIsInstalled(packageJson, config.detection.packageName, config.detection.packageDisplayName);\n\n const frameworkVersion = config.detection.getVersion(packageJson);\n\n // Set analytics tags for framework version\n if (frameworkVersion && config.detection.getVersionBucket) {\n const versionBucket = config.detection.getVersionBucket(frameworkVersion);\n analytics.setTag(`${config.metadata.integration}-version`, versionBucket);\n }\n\n analytics.capture(WIZARD_INTERACTION_EVENT_NAME, {\n action: 'started agent integration',\n integration: config.metadata.integration,\n });\n\n // Get WorkOS credentials (API key optional for client-only SDKs)\n const { apiKey, clientId } = await getOrAskForWorkOSCredentials(options, config.environment.requiresApiKey);\n\n // Check if caller (state machine) already configured WorkOS environment\n // If credentials were passed via options, the caller handled config+env writing\n const callerHandledConfig = Boolean(options.apiKey || options.clientId);\n\n // Auto-configure WorkOS environment (redirect URI, CORS, homepage)\n // Skip if caller already handled this (prevents duplicate dashboard config output)\n if (!callerHandledConfig && apiKey && config.environment.requiresApiKey) {\n const port = detectPort(config.metadata.integration, options.installDir);\n await autoConfigureWorkOSEnvironment(apiKey, config.metadata.integration, port, {\n homepageUrl: options.homepageUrl,\n redirectUri: options.redirectUri,\n });\n }\n\n // Gather framework-specific context (e.g., Next.js router, React Native platform)\n const frameworkContext = config.metadata.gatherContext ? await config.metadata.gatherContext(options) : {};\n\n // Write environment variables to .env.local BEFORE agent runs\n // Skip if caller already handled this (prevents double-writing)\n if (!callerHandledConfig) {\n const port = detectPort(config.metadata.integration, options.installDir);\n const callbackPath = getCallbackPath(config.metadata.integration);\n const redirectUri = options.redirectUri || `http://localhost:${port}${callbackPath}`;\n\n // Next.js requires NEXT_PUBLIC_ prefix for client-side env vars\n const redirectUriKey =\n config.metadata.integration === 'nextjs' ? 'NEXT_PUBLIC_WORKOS_REDIRECT_URI' : 'WORKOS_REDIRECT_URI';\n\n writeEnvLocal(options.installDir, {\n ...(apiKey ? { WORKOS_API_KEY: apiKey } : {}),\n WORKOS_CLIENT_ID: clientId,\n [redirectUriKey]: redirectUri,\n });\n }\n\n // Set analytics tags from framework context\n const contextTags = config.analytics.getTags(frameworkContext);\n Object.entries(contextTags).forEach(([key, value]) => {\n analytics.setTag(key, value);\n });\n\n // Build integration prompt (credentials are already in .env.local)\n const integrationPrompt = buildIntegrationPrompt(\n config,\n {\n frameworkVersion: frameworkVersion || 'latest',\n typescript: typeScriptDetected,\n },\n frameworkContext,\n );\n\n // Initialize and run agent\n // Spinner is now handled by adapters listening to agent:start/agent:progress events\n const agent = await initializeAgent(\n {\n workingDirectory: options.installDir,\n workOSApiKey: apiKey,\n workOSApiHost: 'https://api.workos.com',\n },\n options,\n );\n\n // Run agent - errors will throw naturally with skill-based approach\n const agentResult = await runAgent(\n agent,\n integrationPrompt,\n options,\n {\n spinnerMessage: SPINNER_MESSAGE,\n successMessage: config.ui.successMessage,\n errorMessage: 'Integration failed',\n },\n options.emitter,\n );\n\n // If agent returned an error, throw so state machine can handle it\n if (agentResult.error) {\n await analytics.shutdown('error');\n const message = agentResult.errorMessage || agentResult.error;\n throw new Error(`Agent SDK error: ${message}`);\n }\n\n // Run post-installation validation\n if (!options.noValidate) {\n options.emitter?.emit('validation:start', { framework: config.metadata.integration });\n\n const validationResult = await validateInstallation(config.metadata.integration, options.installDir, {\n runBuild: true,\n });\n\n if (validationResult.issues.length > 0) {\n options.emitter?.emit('validation:issues', { issues: validationResult.issues });\n }\n\n options.emitter?.emit('validation:complete', {\n passed: validationResult.passed,\n issueCount: validationResult.issues.length,\n durationMs: validationResult.durationMs,\n });\n }\n\n // Build environment variables from WorkOS credentials\n const envVars = config.environment.getEnvVars(apiKey, clientId);\n\n // Upload environment variables to hosting providers (if configured)\n let uploadedEnvVars: string[] = [];\n if (config.environment.uploadToHosting) {\n uploadedEnvVars = await uploadEnvironmentVariablesStep(envVars, {\n integration: config.metadata.integration,\n options,\n });\n }\n\n // Skip MCP server setup for now (WorkOS doesn't need it initially)\n // await addMCPServerToClientsStep({ ... });\n\n // Build outro message\n const continueUrl = undefined; // No signup flow for WorkOS wizard\n\n const changes = [\n ...config.ui.getOutroChanges(frameworkContext),\n Object.keys(envVars).length > 0 ? `Added environment variables to .env file` : '',\n uploadedEnvVars.length > 0 ? `Uploaded environment variables to your hosting provider` : '',\n ].filter(Boolean);\n\n const nextSteps = [\n ...config.ui.getOutroNextSteps(frameworkContext),\n uploadedEnvVars.length === 0 && config.environment.uploadToHosting\n ? `Upload your WorkOS credentials to your hosting provider`\n : '',\n ].filter(Boolean);\n\n // Build detailed summary to return to caller (state machine)\n const summary = buildCompletionSummary(config, changes, nextSteps, continueUrl);\n\n await analytics.shutdown('success');\n\n return summary;\n}\n\n/**\n * Build the integration prompt for the agent.\n * Uses skill-based approach where agent invokes framework-specific skill.\n * Note: Credentials are pre-written to .env.local, so not included in prompt.\n */\nfunction buildIntegrationPrompt(\n config: FrameworkConfig,\n context: {\n frameworkVersion: string;\n typescript: boolean;\n },\n frameworkContext: Record<string, any>,\n): string {\n const additionalLines = config.prompts.getAdditionalContextLines\n ? config.prompts.getAdditionalContextLines(frameworkContext)\n : [];\n\n const additionalContext =\n additionalLines.length > 0 ? '\\n' + additionalLines.map((line) => `- ${line}`).join('\\n') : '';\n\n const skillName = config.metadata.skillName;\n if (!skillName) {\n throw new Error(`Framework ${config.metadata.name} missing skillName in config`);\n }\n\n // Next.js uses NEXT_PUBLIC_ prefix for redirect URI\n const redirectUriEnvVar =\n config.metadata.integration === 'nextjs' ? 'NEXT_PUBLIC_WORKOS_REDIRECT_URI' : 'WORKOS_REDIRECT_URI';\n\n return `You are integrating WorkOS AuthKit into this ${config.metadata.name} application.\n\n## Project Context\n\n- Framework: ${config.metadata.name} ${context.frameworkVersion}\n- TypeScript: ${context.typescript ? 'Yes' : 'No'}${additionalContext}\n\n## Environment\n\nThe following environment variables have been configured in .env.local:\n- WORKOS_API_KEY\n- WORKOS_CLIENT_ID\n- ${redirectUriEnvVar}\n- WORKOS_COOKIE_PASSWORD\n\n## Your Task\n\nUse the \\`${skillName}\\` skill to integrate WorkOS AuthKit into this application.\n\nThe skill contains step-by-step instructions including:\n1. Fetching the SDK documentation\n2. Installing the SDK\n3. Creating the callback route\n4. Setting up middleware/auth handling\n5. Adding authentication UI to the home page\n\nReport your progress using [STATUS] prefixes.\n\nBegin by invoking the ${skillName} skill.`;\n}\n\n/**\n * Build a completion summary for the event payload.\n * This is a plain-text summary without styling (adapters handle presentation).\n */\nfunction buildCompletionSummary(\n config: FrameworkConfig,\n changes: string[],\n nextSteps: string[],\n continueUrl: string | undefined,\n): string {\n const lines: string[] = [];\n\n lines.push('Successfully installed WorkOS AuthKit!');\n lines.push('');\n\n if (changes.length > 0) {\n lines.push('What the agent did:');\n changes.forEach((change) => lines.push(`• ${change}`));\n lines.push('');\n }\n\n if (nextSteps.length > 0) {\n lines.push('Next steps:');\n nextSteps.forEach((step) => lines.push(`• ${step}`));\n lines.push('');\n }\n\n lines.push(`Learn more: ${config.metadata.docsUrl}`);\n\n if (continueUrl) {\n lines.push(`Continue onboarding: ${continueUrl}`);\n }\n\n lines.push('');\n lines.push('Note: This wizard uses an LLM agent to analyze and modify your project. Please review the changes made.');\n\n return lines.join('\\n');\n}\n"]}
@@ -1,68 +0,0 @@
1
- import Anthropic from '@anthropic-ai/sdk';
2
- const client = new Anthropic();
3
- /**
4
- * Generate a concise commit message for the AuthKit integration.
5
- * Falls back to a default message if AI generation fails.
6
- */
7
- export async function generateCommitMessage(integration, files) {
8
- try {
9
- const response = await client.messages.create({
10
- model: 'claude-sonnet-4-20250514',
11
- max_tokens: 100,
12
- messages: [
13
- {
14
- role: 'user',
15
- content: `Generate a concise git commit message for adding WorkOS AuthKit to a ${integration} project. Changed files: ${files.slice(0, 10).join(', ')}. Use conventional commit format (feat:). One line only, under 72 chars.`,
16
- },
17
- ],
18
- });
19
- const text = response.content[0];
20
- if (text.type === 'text') {
21
- return text.text.trim();
22
- }
23
- }
24
- catch { }
25
- return `feat: add WorkOS AuthKit integration for ${integration}`;
26
- }
27
- /**
28
- * Generate a PR description for the AuthKit integration.
29
- * Falls back to a default template if AI generation fails.
30
- */
31
- export async function generatePrDescription(integration, files, commitMessage) {
32
- try {
33
- const response = await client.messages.create({
34
- model: 'claude-sonnet-4-20250514',
35
- max_tokens: 500,
36
- messages: [
37
- {
38
- role: 'user',
39
- content: `Generate a GitHub PR description for: "${commitMessage}"
40
-
41
- Framework: ${integration}
42
- Files changed: ${files.join(', ')}
43
-
44
- Include:
45
- - Brief summary (2-3 sentences)
46
- - Key changes bullet list
47
- - Link to WorkOS AuthKit docs: https://workos.com/docs/user-management
48
-
49
- Keep it concise. Markdown format.`,
50
- },
51
- ],
52
- });
53
- const text = response.content[0];
54
- if (text.type === 'text') {
55
- return text.text.trim();
56
- }
57
- }
58
- catch { }
59
- return `## Summary
60
- Added WorkOS AuthKit integration for ${integration}.
61
-
62
- ## Changes
63
- ${files.map((f) => `- ${f}`).join('\n')}
64
-
65
- ## Documentation
66
- https://workos.com/docs/user-management`;
67
- }
68
- //# sourceMappingURL=ai-content.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-content.js","sourceRoot":"","sources":["../../../src/lib/ai-content.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AAE/B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB,EAAE,KAAe;IAC9E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK,EAAE,0BAA0B;YACjC,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,wEAAwE,WAAW,4BAA4B,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,0EAA0E;iBAChO;aACF;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,4CAA4C,WAAW,EAAE,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,KAAe,EACf,aAAqB;IAErB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK,EAAE,0BAA0B;YACjC,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,0CAA0C,aAAa;;aAE7D,WAAW;iBACP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;kCAOC;iBACzB;aACF;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO;uCAC8B,WAAW;;;EAGhD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;wCAGC,CAAC;AACzC,CAAC","sourcesContent":["import Anthropic from '@anthropic-ai/sdk';\n\nconst client = new Anthropic();\n\n/**\n * Generate a concise commit message for the AuthKit integration.\n * Falls back to a default message if AI generation fails.\n */\nexport async function generateCommitMessage(integration: string, files: string[]): Promise<string> {\n try {\n const response = await client.messages.create({\n model: 'claude-sonnet-4-20250514',\n max_tokens: 100,\n messages: [\n {\n role: 'user',\n content: `Generate a concise git commit message for adding WorkOS AuthKit to a ${integration} project. Changed files: ${files.slice(0, 10).join(', ')}. Use conventional commit format (feat:). One line only, under 72 chars.`,\n },\n ],\n });\n\n const text = response.content[0];\n if (text.type === 'text') {\n return text.text.trim();\n }\n } catch {}\n\n return `feat: add WorkOS AuthKit integration for ${integration}`;\n}\n\n/**\n * Generate a PR description for the AuthKit integration.\n * Falls back to a default template if AI generation fails.\n */\nexport async function generatePrDescription(\n integration: string,\n files: string[],\n commitMessage: string,\n): Promise<string> {\n try {\n const response = await client.messages.create({\n model: 'claude-sonnet-4-20250514',\n max_tokens: 500,\n messages: [\n {\n role: 'user',\n content: `Generate a GitHub PR description for: \"${commitMessage}\"\n\nFramework: ${integration}\nFiles changed: ${files.join(', ')}\n\nInclude:\n- Brief summary (2-3 sentences)\n- Key changes bullet list\n- Link to WorkOS AuthKit docs: https://workos.com/docs/user-management\n\nKeep it concise. Markdown format.`,\n },\n ],\n });\n\n const text = response.content[0];\n if (text.type === 'text') {\n return text.text.trim();\n }\n } catch {}\n\n return `## Summary\nAdded WorkOS AuthKit integration for ${integration}.\n\n## Changes\n${files.map((f) => `- ${f}`).join('\\n')}\n\n## Documentation\nhttps://workos.com/docs/user-management`;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { analytics } from '../utils/analytics.js';\n\nexport const ApiUserSchema = z.object({\n distinct_id: z.string(),\n organizations: z.array(\n z.object({\n id: z.uuid(),\n }),\n ),\n team: z.object({\n id: z.number(),\n organization: z.uuid(),\n }),\n organization: z.object({\n id: z.uuid(),\n }),\n});\n\nexport const ApiProjectSchema = z.object({\n id: z.number(),\n uuid: z.uuid(),\n organization: z.uuid(),\n api_token: z.string(),\n name: z.string(),\n});\n\nexport type ApiUser = z.infer<typeof ApiUserSchema>;\nexport type ApiProject = z.infer<typeof ApiProjectSchema>;\n\nclass ApiError extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly endpoint?: string,\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\nexport async function fetchUserData(accessToken: string, baseUrl: string): Promise<ApiUser> {\n const endpoint = '/api/users/@me/';\n try {\n const response = await fetch(`${baseUrl}${endpoint}`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n });\n\n if (!response.ok) {\n throw await createFetchError(response, endpoint);\n }\n\n const data = await response.json();\n return ApiUserSchema.parse(data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch user data', endpoint);\n analytics.captureException(apiError, {\n endpoint,\n baseUrl,\n });\n throw apiError;\n }\n}\n\nexport async function fetchProjectData(accessToken: string, projectId: number, baseUrl: string): Promise<ApiProject> {\n const endpoint = `/api/projects/${projectId}/`;\n try {\n const response = await fetch(`${baseUrl}${endpoint}`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n });\n\n if (!response.ok) {\n throw await createFetchError(response, endpoint);\n }\n\n const data = await response.json();\n return ApiProjectSchema.parse(data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch project data', endpoint);\n analytics.captureException(apiError, {\n endpoint,\n baseUrl,\n projectId,\n });\n throw apiError;\n }\n}\n\ninterface FetchError extends Error {\n status: number;\n endpoint: string;\n detail?: string;\n}\n\nasync function createFetchError(response: Response, endpoint: string): Promise<FetchError> {\n let detail: string | undefined;\n try {\n const data: unknown = await response.json();\n if (typeof data === 'object' && data !== null && 'detail' in data) {\n detail = String((data as { detail: unknown }).detail);\n }\n } catch {\n // Response wasn't JSON\n }\n\n const error = new Error(`HTTP ${response.status}`) as FetchError;\n error.status = response.status;\n error.endpoint = endpoint;\n error.detail = detail;\n return error;\n}\n\nfunction isFetchError(error: unknown): error is FetchError {\n return error instanceof Error && 'status' in error && typeof (error as FetchError).status === 'number';\n}\n\nfunction handleApiError(error: unknown, operation: string, endpoint: string): ApiError {\n if (isFetchError(error)) {\n const { status, detail } = error;\n\n if (status === 401) {\n return new ApiError(`Authentication failed while trying to ${operation}`, status, endpoint);\n }\n\n if (status === 403) {\n return new ApiError(`Access denied while trying to ${operation}`, status, endpoint);\n }\n\n if (status === 404) {\n return new ApiError(`Resource not found while trying to ${operation}`, status, endpoint);\n }\n\n const message = detail || `Failed to ${operation}`;\n return new ApiError(message, status, endpoint);\n }\n\n if (error instanceof z.ZodError) {\n return new ApiError(`Invalid response format while trying to ${operation}`);\n }\n\n return new ApiError(\n `Unexpected error while trying to ${operation}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPackageDotJson } from '../utils/clack-utils.js';\nimport { hasPackageInstalled } from '../utils/package-json.js';\nimport type { WizardOptions } from '../utils/types.js';\nimport { Integration } from './constants.js';\n\ntype IntegrationConfig = {\n name: string;\n filterPatterns: string[];\n ignorePatterns: string[];\n detect: (options: Pick<WizardOptions, 'installDir'>) => Promise<boolean>;\n generateFilesRules: string;\n filterFilesRules: string;\n docsUrl: string;\n nextSteps: string;\n defaultChanges: string;\n};\n\nexport const INTEGRATION_CONFIG = {\n [Integration.nextjs]: {\n name: 'Next.js',\n filterPatterns: ['**/*.{tsx,ts,jsx,js,mjs,cjs}'],\n ignorePatterns: ['node_modules', 'dist', 'build', 'public', 'static', 'next-env.d.*'],\n detect: async (options) => {\n const packageJson = await getPackageDotJson(options);\n return hasPackageInstalled('next', packageJson);\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://workos.com/docs/user-management/authkit/nextjs',\n defaultChanges:\n '• Installed @workos/authkit-nextjs package\\n• Initialized WorkOS AuthKit with your credentials\\n• Created authentication routes and callbacks\\n• Added login/logout UI components',\n nextSteps:\n '• Customize the auth UI to match your app design\\n• Add protected routes using withAuth() middleware\\n• Access user session with getUser() in your components',\n },\n [Integration.react]: {\n name: 'React (SPA)',\n filterPatterns: ['**/*.{tsx,ts,jsx,js}'],\n ignorePatterns: ['node_modules', 'dist', 'build', 'public', 'static', 'assets'],\n detect: async (options) => {\n const packageJson = await getPackageDotJson(options);\n // Detect React without routing frameworks\n const hasReact = hasPackageInstalled('react', packageJson);\n const hasNext = hasPackageInstalled('next', packageJson);\n const hasReactRouter = hasPackageInstalled('react-router', packageJson);\n const hasTanstack = hasPackageInstalled('@tanstack/react-start', packageJson);\n return hasReact && !hasNext && !hasReactRouter && !hasTanstack;\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://workos.com/docs/user-management/authkit/react',\n defaultChanges:\n '• Installed @workos/authkit-react package\\n• Added AuthKitProvider to wrap your app\\n• Created login and callback components',\n nextSteps:\n '• Use useAuth() hook to access auth state in components\\n• Add protected routes with conditional rendering\\n• Customize auth UI to match your design',\n },\n [Integration.tanstackStart]: {\n name: 'TanStack Start',\n filterPatterns: ['**/*.{tsx,ts,jsx,js}'],\n ignorePatterns: ['node_modules', 'dist', 'build', '.vinxi', '.output'],\n detect: async (options) => {\n const packageJson = await getPackageDotJson(options);\n return hasPackageInstalled('@tanstack/react-start', packageJson);\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',\n defaultChanges:\n '• Installed WorkOS AuthKit SDK package\\n• Added AuthKit middleware and routes\\n• Created authentication components',\n nextSteps:\n '• Use useAuth() hook to access auth state\\n• Add protected routes with authentication checks\\n• Customize auth UI to match your app',\n },\n [Integration.reactRouter]: {\n name: 'React Router',\n filterPatterns: ['**/*.{tsx,ts,jsx,js}'],\n ignorePatterns: ['node_modules', 'dist', 'build', 'public', 'static', 'assets'],\n detect: async (options) => {\n const packageJson = await getPackageDotJson(options);\n return hasPackageInstalled('react-router', packageJson);\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://workos.com/docs/user-management/authkit/react-router',\n defaultChanges:\n '• Installed @workos/authkit-react-router package\\n• Added AuthKitProvider with React Router integration\\n• Created auth routes and loaders',\n nextSteps:\n '• Use useAuth() hook in your components\\n• Add protected routes with loader functions\\n• Customize auth flow to match your needs',\n },\n [Integration.vanillaJs]: {\n name: 'Vanilla JavaScript',\n filterPatterns: ['**/*.{html,js,ts}'],\n ignorePatterns: ['node_modules', 'dist', 'build'],\n detect: async (options) => {\n // Fallback: if no framework detected, assume vanilla JS\n return true;\n },\n generateFilesRules: '',\n filterFilesRules: '',\n docsUrl: 'https://workos.com/docs/user-management/authkit/javascript',\n defaultChanges:\n '• Installed @workos/authkit-js package (or added CDN script)\\n• Created auth initialization and callback handling\\n• Added login button and auth state display',\n nextSteps:\n '• Integrate auth state into your existing UI\\n• Add logout functionality where needed\\n• Protect pages that require authentication',\n },\n} as const satisfies Record<Integration, IntegrationConfig>;\n\nexport const INTEGRATION_ORDER = [\n Integration.nextjs,\n Integration.tanstackStart,\n Integration.reactRouter,\n Integration.react,\n Integration.vanillaJs, // fallback\n] as const;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;IACf,+CAAgC,CAAA;IAChC,2CAA4B,CAAA;IAC5B,uCAAwB,CAAA;AAC1B,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW,CAAC,KAAK;YACpB,OAAO,aAAa,CAAC;QACvB,KAAK,WAAW,CAAC,aAAa;YAC5B,OAAO,gBAAgB,CAAC;QAC1B,KAAK,WAAW,CAAC,WAAW;YAC1B,OAAO,cAAc,CAAC;QACxB,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,oBAAoB,CAAC;QAC9B;YACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC;QACrC,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC,CAAC;AACN,CAAC;AAOD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;AAEnF,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;AAE7B,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC;AACxE,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;AAC5D,MAAM,CAAC,MAAM,6BAA6B,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,OAAO,CAAC;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,oBAAoB;IACpB,YAAY;IACZ,aAAa;IACb,cAAc;IACd,aAAa;CACd,CAAC","sourcesContent":["import { getConfig } from './settings.js';\n\nexport enum Integration {\n nextjs = 'nextjs',\n react = 'react',\n tanstackStart = 'tanstack-start',\n reactRouter = 'react-router',\n vanillaJs = 'vanilla-js',\n}\n\nexport function getIntegrationDescription(type: string): string {\n switch (type) {\n case Integration.nextjs:\n return 'Next.js';\n case Integration.react:\n return 'React (SPA)';\n case Integration.tanstackStart:\n return 'TanStack Start';\n case Integration.reactRouter:\n return 'React Router';\n case Integration.vanillaJs:\n return 'Vanilla JavaScript';\n default:\n throw new Error(`Unknown integration ${type}`);\n }\n}\n\ntype IntegrationChoice = {\n name: string;\n value: string;\n};\n\nexport function getIntegrationChoices(): IntegrationChoice[] {\n return Object.keys(Integration).map((type: string) => ({\n name: getIntegrationDescription(type),\n value: type,\n }));\n}\n\nexport interface Args {\n debug: boolean;\n integration: Integration;\n}\n\nexport const IS_DEV = ['test', 'development'].includes(process.env.NODE_ENV ?? '');\n\nconst settings = getConfig();\n\nexport const DEBUG = settings.logging.debugMode;\nexport const WORKOS_DOCS_URL = settings.documentation.workosDocsUrl;\nexport const WORKOS_DASHBOARD_URL = settings.documentation.dashboardUrl;\nexport const ISSUES_URL = settings.documentation.issuesUrl;\nexport const ANALYTICS_ENABLED = settings.telemetry.enabled;\nexport const WIZARD_INTERACTION_EVENT_NAME = settings.telemetry.eventName;\nexport const WORKOS_TELEMETRY_ENABLED = process.env.WORKOS_TELEMETRY !== 'false';\nexport const OAUTH_PORT = settings.legacy.oauthPort;\n\n/**\n * Common glob patterns to ignore when searching for files.\n * Used by both Next.js and React Router integrations.\n */\nexport const IGNORE_PATTERNS: string[] = [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n '**/public/**',\n '**/.next/**',\n];\n"]}