workos 0.19.0 → 0.20.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 (681) hide show
  1. package/README.md +4 -646
  2. package/bin/workos.js +44 -0
  3. package/package.json +18 -99
  4. package/LICENSE +0 -47
  5. package/dist/bin.d.ts +0 -2
  6. package/dist/bin.js +0 -1790
  7. package/dist/bin.js.map +0 -1
  8. package/dist/cli.config.d.ts +0 -88
  9. package/dist/cli.config.js +0 -110
  10. package/dist/cli.config.js.map +0 -1
  11. package/dist/commands/api/catalog.d.ts +0 -23
  12. package/dist/commands/api/catalog.js +0 -97
  13. package/dist/commands/api/catalog.js.map +0 -1
  14. package/dist/commands/api/format.d.ts +0 -5
  15. package/dist/commands/api/format.js +0 -46
  16. package/dist/commands/api/format.js.map +0 -1
  17. package/dist/commands/api/index.d.ts +0 -15
  18. package/dist/commands/api/index.js +0 -213
  19. package/dist/commands/api/index.js.map +0 -1
  20. package/dist/commands/api/interactive.d.ts +0 -3
  21. package/dist/commands/api/interactive.js +0 -133
  22. package/dist/commands/api/interactive.js.map +0 -1
  23. package/dist/commands/api/request.d.ts +0 -14
  24. package/dist/commands/api/request.js +0 -38
  25. package/dist/commands/api/request.js.map +0 -1
  26. package/dist/commands/api-key-mgmt.d.ts +0 -16
  27. package/dist/commands/api-key-mgmt.js +0 -96
  28. package/dist/commands/api-key-mgmt.js.map +0 -1
  29. package/dist/commands/audit-log.d.ts +0 -26
  30. package/dist/commands/audit-log.js +0 -155
  31. package/dist/commands/audit-log.js.map +0 -1
  32. package/dist/commands/auth-status.d.ts +0 -1
  33. package/dist/commands/auth-status.js +0 -57
  34. package/dist/commands/auth-status.js.map +0 -1
  35. package/dist/commands/claim.d.ts +0 -11
  36. package/dist/commands/claim.js +0 -143
  37. package/dist/commands/claim.js.map +0 -1
  38. package/dist/commands/config.d.ts +0 -3
  39. package/dist/commands/config.js +0 -54
  40. package/dist/commands/config.js.map +0 -1
  41. package/dist/commands/connection.d.ts +0 -13
  42. package/dist/commands/connection.js +0 -96
  43. package/dist/commands/connection.js.map +0 -1
  44. package/dist/commands/debug-sso.d.ts +0 -1
  45. package/dist/commands/debug-sso.js +0 -78
  46. package/dist/commands/debug-sso.js.map +0 -1
  47. package/dist/commands/debug-sync.d.ts +0 -1
  48. package/dist/commands/debug-sync.js +0 -102
  49. package/dist/commands/debug-sync.js.map +0 -1
  50. package/dist/commands/debug.d.ts +0 -28
  51. package/dist/commands/debug.js +0 -406
  52. package/dist/commands/debug.js.map +0 -1
  53. package/dist/commands/dev.d.ts +0 -22
  54. package/dist/commands/dev.js +0 -145
  55. package/dist/commands/dev.js.map +0 -1
  56. package/dist/commands/directory.d.ts +0 -27
  57. package/dist/commands/directory.js +0 -176
  58. package/dist/commands/directory.js.map +0 -1
  59. package/dist/commands/doctor.d.ts +0 -12
  60. package/dist/commands/doctor.js +0 -41
  61. package/dist/commands/doctor.js.map +0 -1
  62. package/dist/commands/emulate.d.ts +0 -7
  63. package/dist/commands/emulate.js +0 -69
  64. package/dist/commands/emulate.js.map +0 -1
  65. package/dist/commands/env.d.ts +0 -19
  66. package/dist/commands/env.js +0 -303
  67. package/dist/commands/env.js.map +0 -1
  68. package/dist/commands/event.d.ts +0 -9
  69. package/dist/commands/event.js +0 -43
  70. package/dist/commands/event.js.map +0 -1
  71. package/dist/commands/feature-flag.d.ts +0 -12
  72. package/dist/commands/feature-flag.js +0 -96
  73. package/dist/commands/feature-flag.js.map +0 -1
  74. package/dist/commands/install-skill.d.ts +0 -85
  75. package/dist/commands/install-skill.js +0 -332
  76. package/dist/commands/install-skill.js.map +0 -1
  77. package/dist/commands/install.d.ts +0 -6
  78. package/dist/commands/install.js +0 -51
  79. package/dist/commands/install.js.map +0 -1
  80. package/dist/commands/invitation.d.ts +0 -19
  81. package/dist/commands/invitation.js +0 -94
  82. package/dist/commands/invitation.js.map +0 -1
  83. package/dist/commands/list-skills.d.ts +0 -4
  84. package/dist/commands/list-skills.js +0 -52
  85. package/dist/commands/list-skills.js.map +0 -1
  86. package/dist/commands/login.d.ts +0 -32
  87. package/dist/commands/login.js +0 -239
  88. package/dist/commands/login.js.map +0 -1
  89. package/dist/commands/logout.d.ts +0 -1
  90. package/dist/commands/logout.js +0 -17
  91. package/dist/commands/logout.js.map +0 -1
  92. package/dist/commands/mcp.d.ts +0 -14
  93. package/dist/commands/mcp.js +0 -99
  94. package/dist/commands/mcp.js.map +0 -1
  95. package/dist/commands/membership.d.ts +0 -20
  96. package/dist/commands/membership.js +0 -129
  97. package/dist/commands/membership.js.map +0 -1
  98. package/dist/commands/migrations.d.ts +0 -2
  99. package/dist/commands/migrations.js +0 -50
  100. package/dist/commands/migrations.js.map +0 -1
  101. package/dist/commands/onboard-user.d.ts +0 -7
  102. package/dist/commands/onboard-user.js +0 -61
  103. package/dist/commands/onboard-user.js.map +0 -1
  104. package/dist/commands/org-domain.d.ts +0 -4
  105. package/dist/commands/org-domain.js +0 -45
  106. package/dist/commands/org-domain.js.map +0 -1
  107. package/dist/commands/organization.d.ts +0 -14
  108. package/dist/commands/organization.js +0 -103
  109. package/dist/commands/organization.js.map +0 -1
  110. package/dist/commands/permission.d.ts +0 -20
  111. package/dist/commands/permission.js +0 -93
  112. package/dist/commands/permission.js.map +0 -1
  113. package/dist/commands/portal.d.ts +0 -7
  114. package/dist/commands/portal.js +0 -26
  115. package/dist/commands/portal.js.map +0 -1
  116. package/dist/commands/role.d.ts +0 -17
  117. package/dist/commands/role.js +0 -122
  118. package/dist/commands/role.js.map +0 -1
  119. package/dist/commands/seed.d.ts +0 -6
  120. package/dist/commands/seed.js +0 -298
  121. package/dist/commands/seed.js.map +0 -1
  122. package/dist/commands/session.d.ts +0 -8
  123. package/dist/commands/session.js +0 -63
  124. package/dist/commands/session.js.map +0 -1
  125. package/dist/commands/setup-org.d.ts +0 -6
  126. package/dist/commands/setup-org.js +0 -99
  127. package/dist/commands/setup-org.js.map +0 -1
  128. package/dist/commands/setup.d.ts +0 -50
  129. package/dist/commands/setup.js +0 -237
  130. package/dist/commands/setup.js.map +0 -1
  131. package/dist/commands/telemetry.d.ts +0 -3
  132. package/dist/commands/telemetry.js +0 -88
  133. package/dist/commands/telemetry.js.map +0 -1
  134. package/dist/commands/uninstall-skill.d.ts +0 -11
  135. package/dist/commands/uninstall-skill.js +0 -117
  136. package/dist/commands/uninstall-skill.js.map +0 -1
  137. package/dist/commands/user.d.ts +0 -19
  138. package/dist/commands/user.js +0 -92
  139. package/dist/commands/user.js.map +0 -1
  140. package/dist/commands/vault-run.d.ts +0 -13
  141. package/dist/commands/vault-run.js +0 -195
  142. package/dist/commands/vault-run.js.map +0 -1
  143. package/dist/commands/vault.d.ts +0 -25
  144. package/dist/commands/vault.js +0 -153
  145. package/dist/commands/vault.js.map +0 -1
  146. package/dist/commands/verify-login.d.ts +0 -25
  147. package/dist/commands/verify-login.js +0 -158
  148. package/dist/commands/verify-login.js.map +0 -1
  149. package/dist/commands/webhook.d.ts +0 -3
  150. package/dist/commands/webhook.js +0 -92
  151. package/dist/commands/webhook.js.map +0 -1
  152. package/dist/craft-pre-release.sh +0 -10
  153. package/dist/dashboard/components/AnimatedLogo.d.ts +0 -8
  154. package/dist/dashboard/components/AnimatedLogo.js +0 -16
  155. package/dist/dashboard/components/AnimatedLogo.js.map +0 -1
  156. package/dist/dashboard/components/CompletionView.d.ts +0 -13
  157. package/dist/dashboard/components/CompletionView.js +0 -25
  158. package/dist/dashboard/components/CompletionView.js.map +0 -1
  159. package/dist/dashboard/components/ConfirmPrompt.d.ts +0 -9
  160. package/dist/dashboard/components/ConfirmPrompt.js +0 -25
  161. package/dist/dashboard/components/ConfirmPrompt.js.map +0 -1
  162. package/dist/dashboard/components/CredentialsForm.d.ts +0 -10
  163. package/dist/dashboard/components/CredentialsForm.js +0 -47
  164. package/dist/dashboard/components/CredentialsForm.js.map +0 -1
  165. package/dist/dashboard/components/Dashboard.d.ts +0 -3
  166. package/dist/dashboard/components/Dashboard.js +0 -100
  167. package/dist/dashboard/components/Dashboard.js.map +0 -1
  168. package/dist/dashboard/components/DashboardLayout.d.ts +0 -24
  169. package/dist/dashboard/components/DashboardLayout.js +0 -25
  170. package/dist/dashboard/components/DashboardLayout.js.map +0 -1
  171. package/dist/dashboard/components/DiffPanel.d.ts +0 -9
  172. package/dist/dashboard/components/DiffPanel.js +0 -136
  173. package/dist/dashboard/components/DiffPanel.js.map +0 -1
  174. package/dist/dashboard/components/InlinePrompt.d.ts +0 -8
  175. package/dist/dashboard/components/InlinePrompt.js +0 -19
  176. package/dist/dashboard/components/InlinePrompt.js.map +0 -1
  177. package/dist/dashboard/components/OutputPanel.d.ts +0 -10
  178. package/dist/dashboard/components/OutputPanel.js +0 -100
  179. package/dist/dashboard/components/OutputPanel.js.map +0 -1
  180. package/dist/dashboard/components/Panel.d.ts +0 -12
  181. package/dist/dashboard/components/Panel.js +0 -6
  182. package/dist/dashboard/components/Panel.js.map +0 -1
  183. package/dist/dashboard/components/TextInput.d.ts +0 -13
  184. package/dist/dashboard/components/TextInput.js +0 -57
  185. package/dist/dashboard/components/TextInput.js.map +0 -1
  186. package/dist/dashboard/components/WelcomeArt.d.ts +0 -2
  187. package/dist/dashboard/components/WelcomeArt.js +0 -9
  188. package/dist/dashboard/components/WelcomeArt.js.map +0 -1
  189. package/dist/dashboard/hooks/useAnimation.d.ts +0 -7
  190. package/dist/dashboard/hooks/useAnimation.js +0 -24
  191. package/dist/dashboard/hooks/useAnimation.js.map +0 -1
  192. package/dist/dashboard/hooks/useKeyboard.d.ts +0 -8
  193. package/dist/dashboard/hooks/useKeyboard.js +0 -18
  194. package/dist/dashboard/hooks/useKeyboard.js.map +0 -1
  195. package/dist/dashboard/hooks/useTerminalSize.d.ts +0 -8
  196. package/dist/dashboard/hooks/useTerminalSize.js +0 -23
  197. package/dist/dashboard/hooks/useTerminalSize.js.map +0 -1
  198. package/dist/dashboard/index.d.ts +0 -6
  199. package/dist/dashboard/index.js +0 -36
  200. package/dist/dashboard/index.js.map +0 -1
  201. package/dist/dashboard/lib/diff-utils.d.ts +0 -21
  202. package/dist/dashboard/lib/diff-utils.js +0 -271
  203. package/dist/dashboard/lib/diff-utils.js.map +0 -1
  204. package/dist/dashboard/lib/logo-frames.d.ts +0 -20
  205. package/dist/dashboard/lib/logo-frames.js +0 -109
  206. package/dist/dashboard/lib/logo-frames.js.map +0 -1
  207. package/dist/dashboard/lib/welcome-art.d.ts +0 -1
  208. package/dist/dashboard/lib/welcome-art.js +0 -5
  209. package/dist/dashboard/lib/welcome-art.js.map +0 -1
  210. package/dist/dashboard/types.d.ts +0 -5
  211. package/dist/dashboard/types.js +0 -2
  212. package/dist/dashboard/types.js.map +0 -1
  213. package/dist/doctor/agent-prompt.d.ts +0 -10
  214. package/dist/doctor/agent-prompt.js +0 -190
  215. package/dist/doctor/agent-prompt.js.map +0 -1
  216. package/dist/doctor/checks/ai-analysis.d.ts +0 -9
  217. package/dist/doctor/checks/ai-analysis.js +0 -124
  218. package/dist/doctor/checks/ai-analysis.js.map +0 -1
  219. package/dist/doctor/checks/auth-patterns.d.ts +0 -2
  220. package/dist/doctor/checks/auth-patterns.js +0 -569
  221. package/dist/doctor/checks/auth-patterns.js.map +0 -1
  222. package/dist/doctor/checks/connectivity.d.ts +0 -2
  223. package/dist/doctor/checks/connectivity.js +0 -35
  224. package/dist/doctor/checks/connectivity.js.map +0 -1
  225. package/dist/doctor/checks/dashboard.d.ts +0 -3
  226. package/dist/doctor/checks/dashboard.js +0 -123
  227. package/dist/doctor/checks/dashboard.js.map +0 -1
  228. package/dist/doctor/checks/environment.d.ts +0 -2
  229. package/dist/doctor/checks/environment.js +0 -86
  230. package/dist/doctor/checks/environment.js.map +0 -1
  231. package/dist/doctor/checks/framework.d.ts +0 -2
  232. package/dist/doctor/checks/framework.js +0 -94
  233. package/dist/doctor/checks/framework.js.map +0 -1
  234. package/dist/doctor/checks/host-execution.d.ts +0 -2
  235. package/dist/doctor/checks/host-execution.js +0 -21
  236. package/dist/doctor/checks/host-execution.js.map +0 -1
  237. package/dist/doctor/checks/language.d.ts +0 -6
  238. package/dist/doctor/checks/language.js +0 -104
  239. package/dist/doctor/checks/language.js.map +0 -1
  240. package/dist/doctor/checks/mcp.d.ts +0 -15
  241. package/dist/doctor/checks/mcp.js +0 -34
  242. package/dist/doctor/checks/mcp.js.map +0 -1
  243. package/dist/doctor/checks/runtime.d.ts +0 -2
  244. package/dist/doctor/checks/runtime.js +0 -20
  245. package/dist/doctor/checks/runtime.js.map +0 -1
  246. package/dist/doctor/checks/sdk.d.ts +0 -2
  247. package/dist/doctor/checks/sdk.js +0 -192
  248. package/dist/doctor/checks/sdk.js.map +0 -1
  249. package/dist/doctor/checks/skills.d.ts +0 -9
  250. package/dist/doctor/checks/skills.js +0 -84
  251. package/dist/doctor/checks/skills.js.map +0 -1
  252. package/dist/doctor/clipboard.d.ts +0 -1
  253. package/dist/doctor/clipboard.js +0 -43
  254. package/dist/doctor/clipboard.js.map +0 -1
  255. package/dist/doctor/index.d.ts +0 -26
  256. package/dist/doctor/index.js +0 -182
  257. package/dist/doctor/index.js.map +0 -1
  258. package/dist/doctor/issues.d.ts +0 -63
  259. package/dist/doctor/issues.js +0 -199
  260. package/dist/doctor/issues.js.map +0 -1
  261. package/dist/doctor/json-output.d.ts +0 -2
  262. package/dist/doctor/json-output.js +0 -4
  263. package/dist/doctor/json-output.js.map +0 -1
  264. package/dist/doctor/output.d.ts +0 -7
  265. package/dist/doctor/output.js +0 -289
  266. package/dist/doctor/output.js.map +0 -1
  267. package/dist/doctor/types.d.ts +0 -203
  268. package/dist/doctor/types.js +0 -2
  269. package/dist/doctor/types.js.map +0 -1
  270. package/dist/integrations/dotnet/index.d.ts +0 -8
  271. package/dist/integrations/dotnet/index.js +0 -170
  272. package/dist/integrations/dotnet/index.js.map +0 -1
  273. package/dist/integrations/elixir/index.d.ts +0 -8
  274. package/dist/integrations/elixir/index.js +0 -146
  275. package/dist/integrations/elixir/index.js.map +0 -1
  276. package/dist/integrations/go/index.d.ts +0 -11
  277. package/dist/integrations/go/index.js +0 -212
  278. package/dist/integrations/go/index.js.map +0 -1
  279. package/dist/integrations/kotlin/index.d.ts +0 -4
  280. package/dist/integrations/kotlin/index.js +0 -78
  281. package/dist/integrations/kotlin/index.js.map +0 -1
  282. package/dist/integrations/nextjs/index.d.ts +0 -4
  283. package/dist/integrations/nextjs/index.js +0 -93
  284. package/dist/integrations/nextjs/index.js.map +0 -1
  285. package/dist/integrations/nextjs/utils.d.ts +0 -8
  286. package/dist/integrations/nextjs/utils.js +0 -68
  287. package/dist/integrations/nextjs/utils.js.map +0 -1
  288. package/dist/integrations/node/index.d.ts +0 -4
  289. package/dist/integrations/node/index.js +0 -52
  290. package/dist/integrations/node/index.js.map +0 -1
  291. package/dist/integrations/php/index.d.ts +0 -4
  292. package/dist/integrations/php/index.js +0 -51
  293. package/dist/integrations/php/index.js.map +0 -1
  294. package/dist/integrations/php-laravel/index.d.ts +0 -4
  295. package/dist/integrations/php-laravel/index.js +0 -51
  296. package/dist/integrations/php-laravel/index.js.map +0 -1
  297. package/dist/integrations/python/index.d.ts +0 -9
  298. package/dist/integrations/python/index.js +0 -249
  299. package/dist/integrations/python/index.js.map +0 -1
  300. package/dist/integrations/react/index.d.ts +0 -4
  301. package/dist/integrations/react/index.js +0 -49
  302. package/dist/integrations/react/index.js.map +0 -1
  303. package/dist/integrations/react-router/index.d.ts +0 -4
  304. package/dist/integrations/react-router/index.js +0 -94
  305. package/dist/integrations/react-router/index.js.map +0 -1
  306. package/dist/integrations/react-router/utils.d.ts +0 -10
  307. package/dist/integrations/react-router/utils.js +0 -162
  308. package/dist/integrations/react-router/utils.js.map +0 -1
  309. package/dist/integrations/ruby/index.d.ts +0 -8
  310. package/dist/integrations/ruby/index.js +0 -137
  311. package/dist/integrations/ruby/index.js.map +0 -1
  312. package/dist/integrations/sveltekit/index.d.ts +0 -4
  313. package/dist/integrations/sveltekit/index.js +0 -50
  314. package/dist/integrations/sveltekit/index.js.map +0 -1
  315. package/dist/integrations/tanstack-start/index.d.ts +0 -4
  316. package/dist/integrations/tanstack-start/index.js +0 -51
  317. package/dist/integrations/tanstack-start/index.js.map +0 -1
  318. package/dist/integrations/vanilla-js/index.d.ts +0 -4
  319. package/dist/integrations/vanilla-js/index.js +0 -49
  320. package/dist/integrations/vanilla-js/index.js.map +0 -1
  321. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.d.ts +0 -7
  322. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js +0 -12
  323. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js.map +0 -1
  324. package/dist/lib/adapters/cli-adapter.d.ts +0 -113
  325. package/dist/lib/adapters/cli-adapter.js +0 -641
  326. package/dist/lib/adapters/cli-adapter.js.map +0 -1
  327. package/dist/lib/adapters/dashboard-adapter.d.ts +0 -34
  328. package/dist/lib/adapters/dashboard-adapter.js +0 -121
  329. package/dist/lib/adapters/dashboard-adapter.js.map +0 -1
  330. package/dist/lib/adapters/headless-adapter.d.ts +0 -80
  331. package/dist/lib/adapters/headless-adapter.js +0 -347
  332. package/dist/lib/adapters/headless-adapter.js.map +0 -1
  333. package/dist/lib/adapters/index.d.ts +0 -4
  334. package/dist/lib/adapters/index.js +0 -4
  335. package/dist/lib/adapters/index.js.map +0 -1
  336. package/dist/lib/adapters/types.d.ts +0 -41
  337. package/dist/lib/adapters/types.js +0 -2
  338. package/dist/lib/adapters/types.js.map +0 -1
  339. package/dist/lib/agent-interface.d.ts +0 -84
  340. package/dist/lib/agent-interface.js +0 -840
  341. package/dist/lib/agent-interface.js.map +0 -1
  342. package/dist/lib/agent-runner.d.ts +0 -9
  343. package/dist/lib/agent-runner.js +0 -261
  344. package/dist/lib/agent-runner.js.map +0 -1
  345. package/dist/lib/ai-content.d.ts +0 -14
  346. package/dist/lib/ai-content.js +0 -131
  347. package/dist/lib/ai-content.js.map +0 -1
  348. package/dist/lib/api-error-handler.d.ts +0 -18
  349. package/dist/lib/api-error-handler.js +0 -76
  350. package/dist/lib/api-error-handler.js.map +0 -1
  351. package/dist/lib/api-key.d.ts +0 -14
  352. package/dist/lib/api-key.js +0 -37
  353. package/dist/lib/api-key.js.map +0 -1
  354. package/dist/lib/api.d.ts +0 -25
  355. package/dist/lib/api.js +0 -120
  356. package/dist/lib/api.js.map +0 -1
  357. package/dist/lib/background-refresh.d.ts +0 -29
  358. package/dist/lib/background-refresh.js +0 -95
  359. package/dist/lib/background-refresh.js.map +0 -1
  360. package/dist/lib/command-aliases.d.ts +0 -8
  361. package/dist/lib/command-aliases.js +0 -12
  362. package/dist/lib/command-aliases.js.map +0 -1
  363. package/dist/lib/completion-data.d.ts +0 -33
  364. package/dist/lib/completion-data.js +0 -33
  365. package/dist/lib/completion-data.js.map +0 -1
  366. package/dist/lib/config-store.d.ts +0 -63
  367. package/dist/lib/config-store.js +0 -293
  368. package/dist/lib/config-store.js.map +0 -1
  369. package/dist/lib/config.d.ts +0 -34
  370. package/dist/lib/config.js +0 -37
  371. package/dist/lib/config.js.map +0 -1
  372. package/dist/lib/constants.d.ts +0 -51
  373. package/dist/lib/constants.js +0 -50
  374. package/dist/lib/constants.js.map +0 -1
  375. package/dist/lib/credential-discovery.d.ts +0 -42
  376. package/dist/lib/credential-discovery.js +0 -100
  377. package/dist/lib/credential-discovery.js.map +0 -1
  378. package/dist/lib/credential-proxy.d.ts +0 -45
  379. package/dist/lib/credential-proxy.js +0 -364
  380. package/dist/lib/credential-proxy.js.map +0 -1
  381. package/dist/lib/credential-store.d.ts +0 -32
  382. package/dist/lib/credential-store.js +0 -236
  383. package/dist/lib/credential-store.js.map +0 -1
  384. package/dist/lib/credentials.d.ts +0 -13
  385. package/dist/lib/credentials.js +0 -34
  386. package/dist/lib/credentials.js.map +0 -1
  387. package/dist/lib/dev-command.d.ts +0 -26
  388. package/dist/lib/dev-command.js +0 -129
  389. package/dist/lib/dev-command.js.map +0 -1
  390. package/dist/lib/device-auth.d.ts +0 -48
  391. package/dist/lib/device-auth.js +0 -176
  392. package/dist/lib/device-auth.js.map +0 -1
  393. package/dist/lib/device-id.d.ts +0 -25
  394. package/dist/lib/device-id.js +0 -102
  395. package/dist/lib/device-id.js.map +0 -1
  396. package/dist/lib/ensure-auth.d.ts +0 -12
  397. package/dist/lib/ensure-auth.js +0 -111
  398. package/dist/lib/ensure-auth.js.map +0 -1
  399. package/dist/lib/env-writer.d.ts +0 -25
  400. package/dist/lib/env-writer.js +0 -90
  401. package/dist/lib/env-writer.js.map +0 -1
  402. package/dist/lib/events.d.ts +0 -248
  403. package/dist/lib/events.js +0 -19
  404. package/dist/lib/events.js.map +0 -1
  405. package/dist/lib/framework-config.d.ts +0 -133
  406. package/dist/lib/framework-config.js +0 -11
  407. package/dist/lib/framework-config.js.map +0 -1
  408. package/dist/lib/helper-functions.d.ts +0 -1
  409. package/dist/lib/helper-functions.js +0 -2
  410. package/dist/lib/helper-functions.js.map +0 -1
  411. package/dist/lib/host-probe.d.ts +0 -28
  412. package/dist/lib/host-probe.js +0 -154
  413. package/dist/lib/host-probe.js.map +0 -1
  414. package/dist/lib/installer-core.d.ts +0 -569
  415. package/dist/lib/installer-core.js +0 -1134
  416. package/dist/lib/installer-core.js.map +0 -1
  417. package/dist/lib/installer-core.types.d.ts +0 -162
  418. package/dist/lib/installer-core.types.js +0 -2
  419. package/dist/lib/installer-core.types.js.map +0 -1
  420. package/dist/lib/mcp-clients.d.ts +0 -45
  421. package/dist/lib/mcp-clients.js +0 -297
  422. package/dist/lib/mcp-clients.js.map +0 -1
  423. package/dist/lib/port-detection.d.ts +0 -7
  424. package/dist/lib/port-detection.js +0 -244
  425. package/dist/lib/port-detection.js.map +0 -1
  426. package/dist/lib/post-install.d.ts +0 -8
  427. package/dist/lib/post-install.js +0 -51
  428. package/dist/lib/post-install.js.map +0 -1
  429. package/dist/lib/preferences.d.ts +0 -143
  430. package/dist/lib/preferences.js +0 -227
  431. package/dist/lib/preferences.js.map +0 -1
  432. package/dist/lib/progress-tracker.d.ts +0 -22
  433. package/dist/lib/progress-tracker.js +0 -47
  434. package/dist/lib/progress-tracker.js.map +0 -1
  435. package/dist/lib/registry.d.ts +0 -42
  436. package/dist/lib/registry.js +0 -96
  437. package/dist/lib/registry.js.map +0 -1
  438. package/dist/lib/resolve-install-credentials.d.ts +0 -11
  439. package/dist/lib/resolve-install-credentials.js +0 -53
  440. package/dist/lib/resolve-install-credentials.js.map +0 -1
  441. package/dist/lib/run-with-core.d.ts +0 -7
  442. package/dist/lib/run-with-core.js +0 -559
  443. package/dist/lib/run-with-core.js.map +0 -1
  444. package/dist/lib/safe-tools.d.ts +0 -2
  445. package/dist/lib/safe-tools.js +0 -212
  446. package/dist/lib/safe-tools.js.map +0 -1
  447. package/dist/lib/scaffold/index.d.ts +0 -1
  448. package/dist/lib/scaffold/index.js +0 -2
  449. package/dist/lib/scaffold/index.js.map +0 -1
  450. package/dist/lib/scaffold/scaffold.d.ts +0 -66
  451. package/dist/lib/scaffold/scaffold.js +0 -156
  452. package/dist/lib/scaffold/scaffold.js.map +0 -1
  453. package/dist/lib/settings.d.ts +0 -60
  454. package/dist/lib/settings.js +0 -31
  455. package/dist/lib/settings.js.map +0 -1
  456. package/dist/lib/staging-api.d.ts +0 -22
  457. package/dist/lib/staging-api.js +0 -74
  458. package/dist/lib/staging-api.js.map +0 -1
  459. package/dist/lib/startup-notice-gate.d.ts +0 -21
  460. package/dist/lib/startup-notice-gate.js +0 -29
  461. package/dist/lib/startup-notice-gate.js.map +0 -1
  462. package/dist/lib/telemetry-notice.d.ts +0 -25
  463. package/dist/lib/telemetry-notice.js +0 -58
  464. package/dist/lib/telemetry-notice.js.map +0 -1
  465. package/dist/lib/token-refresh-client.d.ts +0 -23
  466. package/dist/lib/token-refresh-client.js +0 -89
  467. package/dist/lib/token-refresh-client.js.map +0 -1
  468. package/dist/lib/token-refresh.d.ts +0 -12
  469. package/dist/lib/token-refresh.js +0 -27
  470. package/dist/lib/token-refresh.js.map +0 -1
  471. package/dist/lib/unclaimed-env-api.d.ts +0 -42
  472. package/dist/lib/unclaimed-env-api.js +0 -139
  473. package/dist/lib/unclaimed-env-api.js.map +0 -1
  474. package/dist/lib/unclaimed-env-provision.d.ts +0 -24
  475. package/dist/lib/unclaimed-env-provision.js +0 -80
  476. package/dist/lib/unclaimed-env-provision.js.map +0 -1
  477. package/dist/lib/unclaimed-warning.d.ts +0 -15
  478. package/dist/lib/unclaimed-warning.js +0 -78
  479. package/dist/lib/unclaimed-warning.js.map +0 -1
  480. package/dist/lib/validation/build-validator.d.ts +0 -21
  481. package/dist/lib/validation/build-validator.js +0 -153
  482. package/dist/lib/validation/build-validator.js.map +0 -1
  483. package/dist/lib/validation/index.d.ts +0 -4
  484. package/dist/lib/validation/index.js +0 -4
  485. package/dist/lib/validation/index.js.map +0 -1
  486. package/dist/lib/validation/quick-checks.d.ts +0 -19
  487. package/dist/lib/validation/quick-checks.js +0 -192
  488. package/dist/lib/validation/quick-checks.js.map +0 -1
  489. package/dist/lib/validation/security-checks.d.ts +0 -35
  490. package/dist/lib/validation/security-checks.js +0 -106
  491. package/dist/lib/validation/security-checks.js.map +0 -1
  492. package/dist/lib/validation/types.d.ts +0 -56
  493. package/dist/lib/validation/types.js +0 -2
  494. package/dist/lib/validation/types.js.map +0 -1
  495. package/dist/lib/validation/validator.d.ts +0 -13
  496. package/dist/lib/validation/validator.js +0 -711
  497. package/dist/lib/validation/validator.js.map +0 -1
  498. package/dist/lib/version-check.d.ts +0 -6
  499. package/dist/lib/version-check.js +0 -46
  500. package/dist/lib/version-check.js.map +0 -1
  501. package/dist/lib/workos-api.d.ts +0 -30
  502. package/dist/lib/workos-api.js +0 -69
  503. package/dist/lib/workos-api.js.map +0 -1
  504. package/dist/lib/workos-client.d.ts +0 -58
  505. package/dist/lib/workos-client.js +0 -140
  506. package/dist/lib/workos-client.js.map +0 -1
  507. package/dist/lib/workos-management.d.ts +0 -32
  508. package/dist/lib/workos-management.js +0 -149
  509. package/dist/lib/workos-management.js.map +0 -1
  510. package/dist/nextjs/nextjs-installer-agent.d.ts +0 -5
  511. package/dist/nextjs/nextjs-installer-agent.js +0 -6
  512. package/dist/nextjs/nextjs-installer-agent.js.map +0 -1
  513. package/dist/nextjs/utils.d.ts +0 -4
  514. package/dist/nextjs/utils.js +0 -5
  515. package/dist/nextjs/utils.js.map +0 -1
  516. package/dist/react/react-installer-agent.d.ts +0 -4
  517. package/dist/react/react-installer-agent.js +0 -5
  518. package/dist/react/react-installer-agent.js.map +0 -1
  519. package/dist/react-router/react-router-installer-agent.d.ts +0 -4
  520. package/dist/react-router/react-router-installer-agent.js +0 -5
  521. package/dist/react-router/react-router-installer-agent.js.map +0 -1
  522. package/dist/react-router/utils.d.ts +0 -4
  523. package/dist/react-router/utils.js +0 -5
  524. package/dist/react-router/utils.js.map +0 -1
  525. package/dist/run.d.ts +0 -33
  526. package/dist/run.js +0 -58
  527. package/dist/run.js.map +0 -1
  528. package/dist/smoke-test.ts +0 -881
  529. package/dist/steps/add-or-update-environment-variables.d.ts +0 -10
  530. package/dist/steps/add-or-update-environment-variables.js +0 -155
  531. package/dist/steps/add-or-update-environment-variables.js.map +0 -1
  532. package/dist/steps/index.d.ts +0 -3
  533. package/dist/steps/index.js +0 -4
  534. package/dist/steps/index.js.map +0 -1
  535. package/dist/steps/run-prettier.d.ts +0 -5
  536. package/dist/steps/run-prettier.js +0 -50
  537. package/dist/steps/run-prettier.js.map +0 -1
  538. package/dist/steps/upload-environment-variables/EnvironmentProvider.d.ts +0 -8
  539. package/dist/steps/upload-environment-variables/EnvironmentProvider.js +0 -7
  540. package/dist/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
  541. package/dist/steps/upload-environment-variables/index.d.ts +0 -6
  542. package/dist/steps/upload-environment-variables/index.js +0 -69
  543. package/dist/steps/upload-environment-variables/index.js.map +0 -1
  544. package/dist/steps/upload-environment-variables/providers/vercel.d.ts +0 -14
  545. package/dist/steps/upload-environment-variables/providers/vercel.js +0 -107
  546. package/dist/steps/upload-environment-variables/providers/vercel.js.map +0 -1
  547. package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +0 -4
  548. package/dist/tanstack-start/tanstack-start-installer-agent.js +0 -5
  549. package/dist/tanstack-start/tanstack-start-installer-agent.js.map +0 -1
  550. package/dist/telemetry.d.ts +0 -2
  551. package/dist/telemetry.js +0 -29
  552. package/dist/telemetry.js.map +0 -1
  553. package/dist/test/force-insecure-storage.d.ts +0 -1
  554. package/dist/test/force-insecure-storage.js +0 -9
  555. package/dist/test/force-insecure-storage.js.map +0 -1
  556. package/dist/test/setup.d.ts +0 -1
  557. package/dist/test/setup.js +0 -38
  558. package/dist/test/setup.js.map +0 -1
  559. package/dist/utils/analytics.d.ts +0 -66
  560. package/dist/utils/analytics.js +0 -330
  561. package/dist/utils/analytics.js.map +0 -1
  562. package/dist/utils/bash.d.ts +0 -2
  563. package/dist/utils/bash.js +0 -17
  564. package/dist/utils/bash.js.map +0 -1
  565. package/dist/utils/box.d.ts +0 -9
  566. package/dist/utils/box.js +0 -15
  567. package/dist/utils/box.js.map +0 -1
  568. package/dist/utils/cli-exit.d.ts +0 -15
  569. package/dist/utils/cli-exit.js +0 -11
  570. package/dist/utils/cli-exit.js.map +0 -1
  571. package/dist/utils/cli-symbols.d.ts +0 -44
  572. package/dist/utils/cli-symbols.js +0 -58
  573. package/dist/utils/cli-symbols.js.map +0 -1
  574. package/dist/utils/command-invocation.d.ts +0 -10
  575. package/dist/utils/command-invocation.js +0 -26
  576. package/dist/utils/command-invocation.js.map +0 -1
  577. package/dist/utils/command-telemetry.d.ts +0 -17
  578. package/dist/utils/command-telemetry.js +0 -67
  579. package/dist/utils/command-telemetry.js.map +0 -1
  580. package/dist/utils/crash-reporter.d.ts +0 -13
  581. package/dist/utils/crash-reporter.js +0 -91
  582. package/dist/utils/crash-reporter.js.map +0 -1
  583. package/dist/utils/debug.d.ts +0 -9
  584. package/dist/utils/debug.js +0 -105
  585. package/dist/utils/debug.js.map +0 -1
  586. package/dist/utils/env-parser.d.ts +0 -5
  587. package/dist/utils/env-parser.js +0 -18
  588. package/dist/utils/env-parser.js.map +0 -1
  589. package/dist/utils/environment.d.ts +0 -10
  590. package/dist/utils/environment.js +0 -69
  591. package/dist/utils/environment.js.map +0 -1
  592. package/dist/utils/errors.d.ts +0 -3
  593. package/dist/utils/errors.js +0 -7
  594. package/dist/utils/errors.js.map +0 -1
  595. package/dist/utils/exec-file.d.ts +0 -15
  596. package/dist/utils/exec-file.js +0 -39
  597. package/dist/utils/exec-file.js.map +0 -1
  598. package/dist/utils/exit-codes.d.ts +0 -31
  599. package/dist/utils/exit-codes.js +0 -69
  600. package/dist/utils/exit-codes.js.map +0 -1
  601. package/dist/utils/git-utils.d.ts +0 -23
  602. package/dist/utils/git-utils.js +0 -86
  603. package/dist/utils/git-utils.js.map +0 -1
  604. package/dist/utils/help-json.d.ts +0 -58
  605. package/dist/utils/help-json.js +0 -1577
  606. package/dist/utils/help-json.js.map +0 -1
  607. package/dist/utils/interaction-mode.d.ts +0 -25
  608. package/dist/utils/interaction-mode.js +0 -99
  609. package/dist/utils/interaction-mode.js.map +0 -1
  610. package/dist/utils/lock-art.d.ts +0 -4
  611. package/dist/utils/lock-art.js +0 -73
  612. package/dist/utils/lock-art.js.map +0 -1
  613. package/dist/utils/logging.d.ts +0 -9
  614. package/dist/utils/logging.js +0 -36
  615. package/dist/utils/logging.js.map +0 -1
  616. package/dist/utils/ndjson.d.ts +0 -16
  617. package/dist/utils/ndjson.js +0 -18
  618. package/dist/utils/ndjson.js.map +0 -1
  619. package/dist/utils/output.d.ts +0 -60
  620. package/dist/utils/output.js +0 -124
  621. package/dist/utils/output.js.map +0 -1
  622. package/dist/utils/package-json.d.ts +0 -26
  623. package/dist/utils/package-json.js +0 -32
  624. package/dist/utils/package-json.js.map +0 -1
  625. package/dist/utils/package-manager.d.ts +0 -21
  626. package/dist/utils/package-manager.js +0 -166
  627. package/dist/utils/package-manager.js.map +0 -1
  628. package/dist/utils/paths.d.ts +0 -5
  629. package/dist/utils/paths.js +0 -18
  630. package/dist/utils/paths.js.map +0 -1
  631. package/dist/utils/platform.d.ts +0 -8
  632. package/dist/utils/platform.js +0 -7
  633. package/dist/utils/platform.js.map +0 -1
  634. package/dist/utils/recovery-hints.d.ts +0 -42
  635. package/dist/utils/recovery-hints.js +0 -92
  636. package/dist/utils/recovery-hints.js.map +0 -1
  637. package/dist/utils/redact.d.ts +0 -5
  638. package/dist/utils/redact.js +0 -29
  639. package/dist/utils/redact.js.map +0 -1
  640. package/dist/utils/register-subcommand.d.ts +0 -10
  641. package/dist/utils/register-subcommand.js +0 -33
  642. package/dist/utils/register-subcommand.js.map +0 -1
  643. package/dist/utils/semver.d.ts +0 -10
  644. package/dist/utils/semver.js +0 -43
  645. package/dist/utils/semver.js.map +0 -1
  646. package/dist/utils/string.d.ts +0 -1
  647. package/dist/utils/string.js +0 -6
  648. package/dist/utils/string.js.map +0 -1
  649. package/dist/utils/summary-box.d.ts +0 -25
  650. package/dist/utils/summary-box.js +0 -211
  651. package/dist/utils/summary-box.js.map +0 -1
  652. package/dist/utils/table.d.ts +0 -5
  653. package/dist/utils/table.js +0 -18
  654. package/dist/utils/table.js.map +0 -1
  655. package/dist/utils/telemetry-client.d.ts +0 -43
  656. package/dist/utils/telemetry-client.js +0 -171
  657. package/dist/utils/telemetry-client.js.map +0 -1
  658. package/dist/utils/telemetry-store-forward.d.ts +0 -11
  659. package/dist/utils/telemetry-store-forward.js +0 -94
  660. package/dist/utils/telemetry-store-forward.js.map +0 -1
  661. package/dist/utils/telemetry-types.d.ts +0 -100
  662. package/dist/utils/telemetry-types.js +0 -6
  663. package/dist/utils/telemetry-types.js.map +0 -1
  664. package/dist/utils/types.d.ts +0 -123
  665. package/dist/utils/types.js +0 -2
  666. package/dist/utils/types.js.map +0 -1
  667. package/dist/utils/ui-utils.d.ts +0 -97
  668. package/dist/utils/ui-utils.js +0 -449
  669. package/dist/utils/ui-utils.js.map +0 -1
  670. package/dist/utils/ui.d.ts +0 -148
  671. package/dist/utils/ui.js +0 -368
  672. package/dist/utils/ui.js.map +0 -1
  673. package/dist/utils/urls.d.ts +0 -13
  674. package/dist/utils/urls.js +0 -14
  675. package/dist/utils/urls.js.map +0 -1
  676. package/dist/utils/vendor/is-unicorn-supported.d.ts +0 -1
  677. package/dist/utils/vendor/is-unicorn-supported.js +0 -21
  678. package/dist/utils/vendor/is-unicorn-supported.js.map +0 -1
  679. package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +0 -4
  680. package/dist/vanilla-js/vanilla-js-installer-agent.js +0 -5
  681. package/dist/vanilla-js/vanilla-js-installer-agent.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/doctor/checks/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAA8B,EAAE;QACvD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAsB,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC5F,uEAAuE;QACvE,wEAAwE;QACxE,0DAA0D;QAC1D,IAAI,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAC3C,MAAM,CAAC,aAAa,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,cAAc,CAAC;QAChE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC","sourcesContent":["import { detectMcpClients, getCursorConfiguredUrl } from '../../lib/mcp-clients.js';\nimport { MCP_SERVER_URL } from '../../lib/constants.js';\nimport type { McpInfo, McpAgentMcpStatus } from '../types.js';\n\n/**\n * Report the WorkOS MCP server status across detected coding agents.\n *\n * Mirrors checkSkills: per-detected-agent loop, typed `*Info` return, null when\n * no agents are detected (so doctor renders no MCP section for users with no\n * coding agent installed). Report-only — never mutates config (`--fix` does not\n * touch MCP in this phase).\n *\n * Absent MCP is deliberately NOT an issue: the user may have declined the\n * offer. Only Cursor exposes a readable config, so URL drift (\"misconfigured\")\n * is detected for Cursor alone; issues.ts derives a warning from it. Per-agent\n * shell-outs carry the 10s timeout from the client library, keeping doctor fast.\n */\nexport async function checkMcp(): Promise<McpInfo | null> {\n const clients = await detectMcpClients();\n if (clients.length === 0) return null;\n\n const agents = await Promise.all(\n clients.map(async (client): Promise<McpAgentMcpStatus> => {\n const installed = await client.isInstalled();\n const status: McpAgentMcpStatus = { agent: client.displayName, available: true, installed };\n // Cursor is the only client whose config we can read, so it's the only\n // one we can flag for URL drift. A missing/unreadable URL (null) is not\n // \"unexpected\" — only a present-but-different URL counts.\n if (client.key === 'cursor' && installed) {\n const url = await getCursorConfiguredUrl();\n status.misconfigured = url !== null && url !== MCP_SERVER_URL;\n }\n return status;\n }),\n );\n\n return { serverUrl: MCP_SERVER_URL, agents };\n}\n"]}
@@ -1,2 +0,0 @@
1
- import type { DoctorOptions, RuntimeInfo } from '../types.js';
2
- export declare function checkRuntime(options: DoctorOptions): Promise<RuntimeInfo>;
@@ -1,20 +0,0 @@
1
- import { detectAllPackageManagers } from '../../utils/package-manager.js';
2
- import { execFileNoThrow } from '../../utils/exec-file.js';
3
- export async function checkRuntime(options) {
4
- const nodeVersion = process.version;
5
- const managers = detectAllPackageManagers(options);
6
- const primaryManager = managers[0] ?? null;
7
- let packageManagerVersion = null;
8
- if (primaryManager) {
9
- const result = await execFileNoThrow(primaryManager.name, ['--version']);
10
- if (result.status === 0) {
11
- packageManagerVersion = result.stdout.trim();
12
- }
13
- }
14
- return {
15
- nodeVersion,
16
- packageManager: primaryManager?.label ?? null,
17
- packageManagerVersion,
18
- };
19
- }
20
- //# sourceMappingURL=runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/doctor/checks/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAsB;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAE3C,IAAI,qBAAqB,GAAkB,IAAI,CAAC;IAChD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW;QACX,cAAc,EAAE,cAAc,EAAE,KAAK,IAAI,IAAI;QAC7C,qBAAqB;KACtB,CAAC;AACJ,CAAC","sourcesContent":["import { detectAllPackageManagers } from '../../utils/package-manager.js';\nimport { execFileNoThrow } from '../../utils/exec-file.js';\nimport type { DoctorOptions, RuntimeInfo } from '../types.js';\n\nexport async function checkRuntime(options: DoctorOptions): Promise<RuntimeInfo> {\n const nodeVersion = process.version;\n\n const managers = detectAllPackageManagers(options);\n const primaryManager = managers[0] ?? null;\n\n let packageManagerVersion: string | null = null;\n if (primaryManager) {\n const result = await execFileNoThrow(primaryManager.name, ['--version']);\n if (result.status === 0) {\n packageManagerVersion = result.stdout.trim();\n }\n }\n\n return {\n nodeVersion,\n packageManager: primaryManager?.label ?? null,\n packageManagerVersion,\n };\n}\n"]}
@@ -1,2 +0,0 @@
1
- import type { DoctorOptions, SdkInfo } from '../types.js';
2
- export declare function checkSdk(options: DoctorOptions): Promise<SdkInfo>;
@@ -1,192 +0,0 @@
1
- import { readFile, readdir } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
- import { readPackageJson, hasPackageInstalled, getPackageVersion } from '../../utils/package-json.js';
4
- // AuthKit SDKs - check @workos/* scope first, then @workos-inc/*
5
- const SDK_PACKAGES = [
6
- // @workos/* scope
7
- '@workos/authkit-tanstack-react-start',
8
- '@workos/authkit-sveltekit',
9
- // @workos-inc/* scope
10
- '@workos-inc/authkit-nextjs',
11
- '@workos-inc/authkit-remix',
12
- '@workos-inc/authkit-react-router',
13
- '@workos-inc/authkit-react',
14
- '@workos-inc/authkit-js',
15
- '@workos-inc/node',
16
- 'workos', // very old legacy
17
- ];
18
- const AUTHKIT_PACKAGES = new Set([
19
- '@workos/authkit-tanstack-react-start',
20
- '@workos/authkit-sveltekit',
21
- '@workos-inc/authkit-nextjs',
22
- '@workos-inc/authkit-remix',
23
- '@workos-inc/authkit-react-router',
24
- '@workos-inc/authkit-react',
25
- '@workos-inc/authkit-js',
26
- ]);
27
- const NO_SDK = {
28
- name: null,
29
- version: null,
30
- latest: null,
31
- outdated: false,
32
- isAuthKit: false,
33
- language: 'javascript',
34
- };
35
- export async function checkSdk(options) {
36
- const packageJson = readPackageJson(options.installDir);
37
- if (!packageJson) {
38
- return (await checkNonJsSdk(options.installDir)) ?? NO_SDK;
39
- }
40
- const installedSdk = SDK_PACKAGES.find((pkg) => hasPackageInstalled(pkg, packageJson));
41
- if (!installedSdk) {
42
- return (await checkNonJsSdk(options.installDir)) ?? NO_SDK;
43
- }
44
- const version = getPackageVersion(installedSdk, packageJson) ?? null;
45
- const latest = await fetchLatestVersion(installedSdk);
46
- return {
47
- name: installedSdk,
48
- version,
49
- latest,
50
- outdated: version && latest ? isVersionOutdated(version, latest) : false,
51
- isAuthKit: AUTHKIT_PACKAGES.has(installedSdk),
52
- language: 'javascript',
53
- };
54
- }
55
- async function fetchLatestVersion(packageName) {
56
- try {
57
- const controller = new AbortController();
58
- const timeoutId = setTimeout(() => controller.abort(), 5000);
59
- const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`, {
60
- signal: controller.signal,
61
- });
62
- clearTimeout(timeoutId);
63
- if (!response.ok)
64
- return null;
65
- const data = (await response.json());
66
- return data.version ?? null;
67
- }
68
- catch {
69
- return null;
70
- }
71
- }
72
- const NON_JS_DETECTORS = [
73
- {
74
- language: 'python',
75
- file: 'requirements.txt',
76
- pattern: /^workos(?:-python)?(?:==|>=|~=|!=)?([\d.]*)/m,
77
- nameExtract: 'workos-python',
78
- versionGroup: 1,
79
- },
80
- {
81
- language: 'python',
82
- file: 'pyproject.toml',
83
- pattern: /workos(?:-python)?/m,
84
- nameExtract: 'workos-python',
85
- },
86
- {
87
- language: 'ruby',
88
- file: 'Gemfile',
89
- pattern: /gem\s+['"]workos(?:-ruby)?['"]/m,
90
- nameExtract: 'workos-ruby',
91
- },
92
- {
93
- language: 'go',
94
- file: 'go.mod',
95
- pattern: /github\.com\/workos\/workos-go(?:\/v\d+)?\s+(v[\d.]+)/m,
96
- nameExtract: 'workos-go',
97
- versionGroup: 1,
98
- },
99
- {
100
- language: 'java',
101
- file: 'pom.xml',
102
- pattern: /<groupId>com\.workos<\/groupId>/m,
103
- nameExtract: 'workos-java',
104
- },
105
- {
106
- language: 'java',
107
- file: 'build.gradle',
108
- pattern: /com\.workos/m,
109
- nameExtract: 'workos-java',
110
- },
111
- {
112
- language: 'php',
113
- file: 'composer.json',
114
- pattern: /"workos\/workos-php"/m,
115
- nameExtract: 'workos-php',
116
- },
117
- ];
118
- async function readFileSafe(path) {
119
- try {
120
- return await readFile(path, 'utf-8');
121
- }
122
- catch {
123
- return null;
124
- }
125
- }
126
- async function checkNonJsSdk(installDir) {
127
- for (const detector of NON_JS_DETECTORS) {
128
- const content = await readFileSafe(join(installDir, detector.file));
129
- if (!content)
130
- continue;
131
- const match = content.match(detector.pattern);
132
- if (match) {
133
- const version = detector.versionGroup ? match[detector.versionGroup] || null : null;
134
- return {
135
- name: detector.nameExtract ?? null,
136
- version,
137
- latest: null, // No registry checks for non-JS in this phase
138
- outdated: false,
139
- isAuthKit: false,
140
- language: detector.language,
141
- };
142
- }
143
- }
144
- // Check .csproj files for .NET (requires directory listing)
145
- try {
146
- const entries = await readdir(installDir);
147
- for (const entry of entries) {
148
- if (entry.endsWith('.csproj')) {
149
- const content = await readFileSafe(join(installDir, entry));
150
- if (content && /PackageReference.*Include="WorkOS\.net"/i.test(content)) {
151
- const versionMatch = content.match(/Include="WorkOS\.net".*?Version="([\d.]+)"/i);
152
- return {
153
- name: 'WorkOS.net',
154
- version: versionMatch?.[1] ?? null,
155
- latest: null,
156
- outdated: false,
157
- isAuthKit: false,
158
- language: 'dotnet',
159
- };
160
- }
161
- }
162
- }
163
- }
164
- catch {
165
- // directory not readable
166
- }
167
- return null;
168
- }
169
- function isVersionOutdated(current, latest) {
170
- // Strip semver range prefixes (^, ~, etc.) and workspace protocol
171
- const cleanCurrent = current.replace(/^[\^~>=<]+/, '').replace(/^workspace:\*?/, '');
172
- const cleanLatest = latest.replace(/^[\^~>=<]+/, '');
173
- // Handle prerelease: "1.0.0-beta.1" → "1.0.0", "-beta.1"
174
- const [currBase] = cleanCurrent.split('-');
175
- const [latBase] = cleanLatest.split('-');
176
- const currParts = currBase.split('.').map(Number);
177
- const latParts = latBase.split('.').map(Number);
178
- // If we got NaN values, we can't reliably compare - assume not outdated
179
- if (currParts.some(isNaN) || latParts.some(isNaN)) {
180
- return false;
181
- }
182
- const [currMajor = 0, currMinor = 0, currPatch = 0] = currParts;
183
- const [latMajor = 0, latMinor = 0, latPatch = 0] = latParts;
184
- if (latMajor > currMajor)
185
- return true;
186
- if (latMajor === currMajor && latMinor > currMinor)
187
- return true;
188
- if (latMajor === currMajor && latMinor === currMinor && latPatch > currPatch)
189
- return true;
190
- return false;
191
- }
192
- //# sourceMappingURL=sdk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/doctor/checks/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile, readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { readPackageJson, hasPackageInstalled, getPackageVersion } from '../../utils/package-json.js';\nimport type { DoctorOptions, SdkInfo } from '../types.js';\n\n// AuthKit SDKs - check @workos/* scope first, then @workos-inc/*\nconst SDK_PACKAGES = [\n // @workos/* scope\n '@workos/authkit-tanstack-react-start',\n '@workos/authkit-sveltekit',\n // @workos-inc/* scope\n '@workos-inc/authkit-nextjs',\n '@workos-inc/authkit-remix',\n '@workos-inc/authkit-react-router',\n '@workos-inc/authkit-react',\n '@workos-inc/authkit-js',\n '@workos-inc/node',\n 'workos', // very old legacy\n] as const;\n\nconst AUTHKIT_PACKAGES = new Set([\n '@workos/authkit-tanstack-react-start',\n '@workos/authkit-sveltekit',\n '@workos-inc/authkit-nextjs',\n '@workos-inc/authkit-remix',\n '@workos-inc/authkit-react-router',\n '@workos-inc/authkit-react',\n '@workos-inc/authkit-js',\n]);\n\nconst NO_SDK: SdkInfo = {\n name: null,\n version: null,\n latest: null,\n outdated: false,\n isAuthKit: false,\n language: 'javascript',\n};\n\nexport async function checkSdk(options: DoctorOptions): Promise<SdkInfo> {\n const packageJson = readPackageJson(options.installDir);\n if (!packageJson) {\n return (await checkNonJsSdk(options.installDir)) ?? NO_SDK;\n }\n\n const installedSdk = SDK_PACKAGES.find((pkg) => hasPackageInstalled(pkg, packageJson));\n if (!installedSdk) {\n return (await checkNonJsSdk(options.installDir)) ?? NO_SDK;\n }\n\n const version = getPackageVersion(installedSdk, packageJson) ?? null;\n const latest = await fetchLatestVersion(installedSdk);\n\n return {\n name: installedSdk,\n version,\n latest,\n outdated: version && latest ? isVersionOutdated(version, latest) : false,\n isAuthKit: AUTHKIT_PACKAGES.has(installedSdk),\n language: 'javascript',\n };\n}\n\nasync function fetchLatestVersion(packageName: string): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`, {\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) return null;\n const data = (await response.json()) as { version?: string };\n return data.version ?? null;\n } catch {\n return null;\n }\n}\n\ninterface NonJsDetector {\n language: string;\n file: string;\n pattern: RegExp;\n nameExtract?: string; // Static SDK name when pattern matches\n versionGroup?: number; // Capture group index for version\n}\n\nconst NON_JS_DETECTORS: NonJsDetector[] = [\n {\n language: 'python',\n file: 'requirements.txt',\n pattern: /^workos(?:-python)?(?:==|>=|~=|!=)?([\\d.]*)/m,\n nameExtract: 'workos-python',\n versionGroup: 1,\n },\n {\n language: 'python',\n file: 'pyproject.toml',\n pattern: /workos(?:-python)?/m,\n nameExtract: 'workos-python',\n },\n {\n language: 'ruby',\n file: 'Gemfile',\n pattern: /gem\\s+['\"]workos(?:-ruby)?['\"]/m,\n nameExtract: 'workos-ruby',\n },\n {\n language: 'go',\n file: 'go.mod',\n pattern: /github\\.com\\/workos\\/workos-go(?:\\/v\\d+)?\\s+(v[\\d.]+)/m,\n nameExtract: 'workos-go',\n versionGroup: 1,\n },\n {\n language: 'java',\n file: 'pom.xml',\n pattern: /<groupId>com\\.workos<\\/groupId>/m,\n nameExtract: 'workos-java',\n },\n {\n language: 'java',\n file: 'build.gradle',\n pattern: /com\\.workos/m,\n nameExtract: 'workos-java',\n },\n {\n language: 'php',\n file: 'composer.json',\n pattern: /\"workos\\/workos-php\"/m,\n nameExtract: 'workos-php',\n },\n];\n\nasync function readFileSafe(path: string): Promise<string | null> {\n try {\n return await readFile(path, 'utf-8');\n } catch {\n return null;\n }\n}\n\nasync function checkNonJsSdk(installDir: string): Promise<SdkInfo | null> {\n for (const detector of NON_JS_DETECTORS) {\n const content = await readFileSafe(join(installDir, detector.file));\n if (!content) continue;\n\n const match = content.match(detector.pattern);\n if (match) {\n const version = detector.versionGroup ? match[detector.versionGroup] || null : null;\n return {\n name: detector.nameExtract ?? null,\n version,\n latest: null, // No registry checks for non-JS in this phase\n outdated: false,\n isAuthKit: false,\n language: detector.language,\n };\n }\n }\n\n // Check .csproj files for .NET (requires directory listing)\n try {\n const entries = await readdir(installDir);\n for (const entry of entries) {\n if (entry.endsWith('.csproj')) {\n const content = await readFileSafe(join(installDir, entry));\n if (content && /PackageReference.*Include=\"WorkOS\\.net\"/i.test(content)) {\n const versionMatch = content.match(/Include=\"WorkOS\\.net\".*?Version=\"([\\d.]+)\"/i);\n return {\n name: 'WorkOS.net',\n version: versionMatch?.[1] ?? null,\n latest: null,\n outdated: false,\n isAuthKit: false,\n language: 'dotnet',\n };\n }\n }\n }\n } catch {\n // directory not readable\n }\n\n return null;\n}\n\nfunction isVersionOutdated(current: string, latest: string): boolean {\n // Strip semver range prefixes (^, ~, etc.) and workspace protocol\n const cleanCurrent = current.replace(/^[\\^~>=<]+/, '').replace(/^workspace:\\*?/, '');\n const cleanLatest = latest.replace(/^[\\^~>=<]+/, '');\n\n // Handle prerelease: \"1.0.0-beta.1\" → \"1.0.0\", \"-beta.1\"\n const [currBase] = cleanCurrent.split('-');\n const [latBase] = cleanLatest.split('-');\n\n const currParts = currBase.split('.').map(Number);\n const latParts = latBase.split('.').map(Number);\n\n // If we got NaN values, we can't reliably compare - assume not outdated\n if (currParts.some(isNaN) || latParts.some(isNaN)) {\n return false;\n }\n\n const [currMajor = 0, currMinor = 0, currPatch = 0] = currParts;\n const [latMajor = 0, latMinor = 0, latPatch = 0] = latParts;\n\n if (latMajor > currMajor) return true;\n if (latMajor === currMajor && latMinor > currMinor) return true;\n if (latMajor === currMajor && latMinor === currMinor && latPatch > currPatch) return true;\n return false;\n}\n"]}
@@ -1,9 +0,0 @@
1
- import type { SkillsInfo } from '../types.js';
2
- /**
3
- * Check the freshness of auto-installed WorkOS skills across detected coding
4
- * agents. Compares each agent's version marker (written by autoInstallSkills)
5
- * against the bundled @workos/skills version the CLI ships with. Returns null
6
- * when no agents have a WorkOS skill installed at all — no noise for users who
7
- * never installed through the CLI.
8
- */
9
- export declare function checkSkills(home?: string): Promise<SkillsInfo | null>;
@@ -1,84 +0,0 @@
1
- import { homedir } from 'node:os';
2
- import { access, readFile } from 'node:fs/promises';
3
- import { join } from 'node:path';
4
- import semver from 'semver';
5
- import { createAgents, getBundledSkillsVersion, SKILL_VERSION_MARKER_FILENAME } from '../../commands/install-skill.js';
6
- async function pathExists(p) {
7
- try {
8
- await access(p);
9
- return true;
10
- }
11
- catch {
12
- return false;
13
- }
14
- }
15
- /**
16
- * Stale = installed version is strictly older than the bundled version.
17
- * String inequality would also fire when installed > bundled (user installed
18
- * via a newer CLI then downgraded), and the SKILLS_OUTDATED remediation would
19
- * silently downgrade their agent's skills. Use semver ordering so we only
20
- * recommend an update when the bundled set is actually ahead.
21
- *
22
- * Falls back to string inequality when either version can't be parsed as
23
- * semver — better to flag a possibly-stale skill than to ignore drift entirely.
24
- */
25
- function isStale(installed, bundled) {
26
- const installedValid = semver.valid(installed);
27
- const bundledValid = semver.valid(bundled);
28
- if (installedValid && bundledValid) {
29
- return semver.lt(installedValid, bundledValid);
30
- }
31
- return installed !== bundled;
32
- }
33
- /**
34
- * Check the freshness of auto-installed WorkOS skills across detected coding
35
- * agents. Compares each agent's version marker (written by autoInstallSkills)
36
- * against the bundled @workos/skills version the CLI ships with. Returns null
37
- * when no agents have a WorkOS skill installed at all — no noise for users who
38
- * never installed through the CLI.
39
- */
40
- export async function checkSkills(home = homedir()) {
41
- const bundledVersion = await getBundledSkillsVersion();
42
- const agents = createAgents(home);
43
- const statuses = [];
44
- for (const [, agent] of Object.entries(agents)) {
45
- // Only report on agents that actually have a WorkOS skill installed.
46
- // An agent's `skills/` dir existing (e.g. for unrelated user-installed
47
- // skills) doesn't mean WE installed — and `doctor --fix` would otherwise
48
- // happily write `workos/` and `workos-widgets/` onto an agent that never
49
- // opted in. The marker OR a workos/ / workos-widgets/ subdir is the signal
50
- // (either is enough — older explicit installs of just `workos-widgets`
51
- // shouldn't be invisible to doctor).
52
- const markerPath = join(agent.globalSkillsDir, SKILL_VERSION_MARKER_FILENAME);
53
- const workosSkillDir = join(agent.globalSkillsDir, 'workos');
54
- const widgetsSkillDir = join(agent.globalSkillsDir, 'workos-widgets');
55
- const [hasMarker, hasWorkos, hasWidgets] = await Promise.all([
56
- pathExists(markerPath),
57
- pathExists(workosSkillDir),
58
- pathExists(widgetsSkillDir),
59
- ]);
60
- if (!hasMarker && !hasWorkos && !hasWidgets)
61
- continue;
62
- let installedVersion = null;
63
- if (hasMarker) {
64
- try {
65
- installedVersion = (await readFile(markerPath, 'utf8')).trim() || null;
66
- }
67
- catch {
68
- installedVersion = null;
69
- }
70
- }
71
- statuses.push({
72
- agent: agent.displayName,
73
- installedVersion,
74
- stale: Boolean(bundledVersion && installedVersion && isStale(installedVersion, bundledVersion)),
75
- });
76
- }
77
- if (statuses.length === 0)
78
- return null;
79
- return {
80
- bundledVersion,
81
- agents: statuses,
82
- };
83
- }
84
- //# sourceMappingURL=skills.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/doctor/checks/skills.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from 'node:os';\nimport { access, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport semver from 'semver';\nimport { createAgents, getBundledSkillsVersion, SKILL_VERSION_MARKER_FILENAME } from '../../commands/install-skill.js';\nimport type { SkillsInfo, SkillAgentStatus } from '../types.js';\n\nasync function pathExists(p: string): Promise<boolean> {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Stale = installed version is strictly older than the bundled version.\n * String inequality would also fire when installed > bundled (user installed\n * via a newer CLI then downgraded), and the SKILLS_OUTDATED remediation would\n * silently downgrade their agent's skills. Use semver ordering so we only\n * recommend an update when the bundled set is actually ahead.\n *\n * Falls back to string inequality when either version can't be parsed as\n * semver — better to flag a possibly-stale skill than to ignore drift entirely.\n */\nfunction isStale(installed: string, bundled: string): boolean {\n const installedValid = semver.valid(installed);\n const bundledValid = semver.valid(bundled);\n if (installedValid && bundledValid) {\n return semver.lt(installedValid, bundledValid);\n }\n return installed !== bundled;\n}\n\n/**\n * Check the freshness of auto-installed WorkOS skills across detected coding\n * agents. Compares each agent's version marker (written by autoInstallSkills)\n * against the bundled @workos/skills version the CLI ships with. Returns null\n * when no agents have a WorkOS skill installed at all — no noise for users who\n * never installed through the CLI.\n */\nexport async function checkSkills(home: string = homedir()): Promise<SkillsInfo | null> {\n const bundledVersion = await getBundledSkillsVersion();\n const agents = createAgents(home);\n\n const statuses: SkillAgentStatus[] = [];\n\n for (const [, agent] of Object.entries(agents)) {\n // Only report on agents that actually have a WorkOS skill installed.\n // An agent's `skills/` dir existing (e.g. for unrelated user-installed\n // skills) doesn't mean WE installed — and `doctor --fix` would otherwise\n // happily write `workos/` and `workos-widgets/` onto an agent that never\n // opted in. The marker OR a workos/ / workos-widgets/ subdir is the signal\n // (either is enough — older explicit installs of just `workos-widgets`\n // shouldn't be invisible to doctor).\n const markerPath = join(agent.globalSkillsDir, SKILL_VERSION_MARKER_FILENAME);\n const workosSkillDir = join(agent.globalSkillsDir, 'workos');\n const widgetsSkillDir = join(agent.globalSkillsDir, 'workos-widgets');\n const [hasMarker, hasWorkos, hasWidgets] = await Promise.all([\n pathExists(markerPath),\n pathExists(workosSkillDir),\n pathExists(widgetsSkillDir),\n ]);\n if (!hasMarker && !hasWorkos && !hasWidgets) continue;\n\n let installedVersion: string | null = null;\n if (hasMarker) {\n try {\n installedVersion = (await readFile(markerPath, 'utf8')).trim() || null;\n } catch {\n installedVersion = null;\n }\n }\n\n statuses.push({\n agent: agent.displayName,\n installedVersion,\n stale: Boolean(bundledVersion && installedVersion && isStale(installedVersion, bundledVersion)),\n });\n }\n\n if (statuses.length === 0) return null;\n\n return {\n bundledVersion,\n agents: statuses,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- export declare function copyToClipboard(text: string): Promise<boolean>;
@@ -1,43 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { platform } from 'node:os';
3
- /**
4
- * Execute a command with stdin input.
5
- * Returns true if the command succeeded (exit code 0).
6
- */
7
- function execWithStdin(command, args, input) {
8
- return new Promise((resolve) => {
9
- const child = spawn(command, args, {
10
- shell: false,
11
- stdio: ['pipe', 'ignore', 'ignore'],
12
- });
13
- child.on('error', () => resolve(false));
14
- child.on('close', (code) => resolve(code === 0));
15
- child.stdin?.write(input);
16
- child.stdin?.end();
17
- });
18
- }
19
- export async function copyToClipboard(text) {
20
- const os = platform();
21
- try {
22
- if (os === 'darwin') {
23
- // macOS: use pbcopy
24
- return await execWithStdin('pbcopy', [], text);
25
- }
26
- else if (os === 'linux') {
27
- // Linux: try xclip first, then xsel
28
- const xclipResult = await execWithStdin('xclip', ['-selection', 'clipboard'], text);
29
- if (xclipResult)
30
- return true;
31
- return await execWithStdin('xsel', ['--clipboard', '--input'], text);
32
- }
33
- else if (os === 'win32') {
34
- // Windows: use clip.exe
35
- return await execWithStdin('clip', [], text);
36
- }
37
- return false;
38
- }
39
- catch {
40
- return false;
41
- }
42
- }
43
- //# sourceMappingURL=clipboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/doctor/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC;;;GAGG;AACH,SAAS,aAAa,CAAC,OAAe,EAAE,IAAc,EAAE,KAAa;IACnE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,IAAI,CAAC;QACH,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpB,oBAAoB;YACpB,OAAO,MAAM,aAAa,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YAC1B,oCAAoC;YACpC,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;YACpF,IAAI,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC7B,OAAO,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YAC1B,wBAAwB;YACxB,OAAO,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["import { spawn } from 'node:child_process';\nimport { platform } from 'node:os';\n\n/**\n * Execute a command with stdin input.\n * Returns true if the command succeeded (exit code 0).\n */\nfunction execWithStdin(command: string, args: string[], input: string): Promise<boolean> {\n return new Promise((resolve) => {\n const child = spawn(command, args, {\n shell: false,\n stdio: ['pipe', 'ignore', 'ignore'],\n });\n\n child.on('error', () => resolve(false));\n child.on('close', (code) => resolve(code === 0));\n\n child.stdin?.write(input);\n child.stdin?.end();\n });\n}\n\nexport async function copyToClipboard(text: string): Promise<boolean> {\n const os = platform();\n\n try {\n if (os === 'darwin') {\n // macOS: use pbcopy\n return await execWithStdin('pbcopy', [], text);\n } else if (os === 'linux') {\n // Linux: try xclip first, then xsel\n const xclipResult = await execWithStdin('xclip', ['-selection', 'clipboard'], text);\n if (xclipResult) return true;\n return await execWithStdin('xsel', ['--clipboard', '--input'], text);\n } else if (os === 'win32') {\n // Windows: use clip.exe\n return await execWithStdin('clip', [], text);\n }\n return false;\n } catch {\n return false;\n }\n}\n"]}
@@ -1,26 +0,0 @@
1
- import type { DoctorOptions, DoctorReport, SkillsRefreshResult } from './types.js';
2
- /**
3
- * Skills `--fix` is allowed to refresh. Hardcoded — NOT derived from
4
- * discoverSkills — so future bundled skills require an explicit opt-in here
5
- * before doctor will write to their target directory. This is the contract's
6
- * promise that `--fix` only ever touches `workos/` and `workos-widgets/`.
7
- */
8
- export declare const FIXABLE_SKILLS: readonly ["workos", "workos-widgets"];
9
- /**
10
- * Refresh stale WorkOS skills if `--fix` is set and at least one agent is
11
- * stale or has no marker. Always re-reads `checkSkills()` after a successful
12
- * refresh so detectIssues sees the post-refresh state and we don't ship a
13
- * doctor report that simultaneously claims "fixed" and "still stale".
14
- *
15
- * Extracted from runDoctor for unit testability — runDoctor itself depends on
16
- * eight upstream checks that are expensive to mock.
17
- */
18
- export declare function maybeRefreshSkills(options: Pick<DoctorOptions, 'fix'>, skills: DoctorReport['skills']): Promise<{
19
- skillsRefresh?: SkillsRefreshResult;
20
- skills: DoctorReport['skills'];
21
- }>;
22
- export declare function runDoctor(options: DoctorOptions): Promise<DoctorReport>;
23
- export declare function outputReport(report: DoctorReport, options: DoctorOptions): Promise<void>;
24
- export { formatReport } from './output.js';
25
- export { formatReportAsJson } from './json-output.js';
26
- export type { DoctorReport, DoctorOptions } from './types.js';
@@ -1,182 +0,0 @@
1
- import { checkSdk } from './checks/sdk.js';
2
- import { checkFramework } from './checks/framework.js';
3
- import { checkRuntime } from './checks/runtime.js';
4
- import { checkLanguage } from './checks/language.js';
5
- import { checkEnvironment } from './checks/environment.js';
6
- import { checkConnectivity } from './checks/connectivity.js';
7
- import { checkHostExecution } from './checks/host-execution.js';
8
- import { checkDashboardSettings, compareRedirectUris } from './checks/dashboard.js';
9
- import { checkAuthPatterns } from './checks/auth-patterns.js';
10
- import { checkAiAnalysis } from './checks/ai-analysis.js';
11
- import { checkSkills } from './checks/skills.js';
12
- import { checkMcp } from './checks/mcp.js';
13
- import { refreshWorkOSSkills } from '../commands/install-skill.js';
14
- import { detectIssues } from './issues.js';
15
- import { formatReport } from './output.js';
16
- import { formatReportAsJson } from './json-output.js';
17
- import { copyToClipboard } from './clipboard.js';
18
- import { getInteractionMode } from '../utils/interaction-mode.js';
19
- import Chalk from 'chalk';
20
- const DOCTOR_VERSION = '1.0.0';
21
- /**
22
- * Skills `--fix` is allowed to refresh. Hardcoded — NOT derived from
23
- * discoverSkills — so future bundled skills require an explicit opt-in here
24
- * before doctor will write to their target directory. This is the contract's
25
- * promise that `--fix` only ever touches `workos/` and `workos-widgets/`.
26
- */
27
- export const FIXABLE_SKILLS = ['workos', 'workos-widgets'];
28
- /**
29
- * Refresh stale WorkOS skills if `--fix` is set and at least one agent is
30
- * stale or has no marker. Always re-reads `checkSkills()` after a successful
31
- * refresh so detectIssues sees the post-refresh state and we don't ship a
32
- * doctor report that simultaneously claims "fixed" and "still stale".
33
- *
34
- * Extracted from runDoctor for unit testability — runDoctor itself depends on
35
- * eight upstream checks that are expensive to mock.
36
- */
37
- export async function maybeRefreshSkills(options, skills) {
38
- if (!options.fix || !skills)
39
- return { skills };
40
- const stalePresent = skills.agents.some((a) => a.stale || a.installedVersion === null);
41
- if (!stalePresent)
42
- return { skills };
43
- const refresh = await refreshWorkOSSkills({
44
- // Explicit allowlist — NOT discoverSkills — so the contract's
45
- // workos/+workos-widgets-only constraint can't drift.
46
- skills: [...FIXABLE_SKILLS],
47
- });
48
- if (!refresh)
49
- return { skills };
50
- return {
51
- skillsRefresh: {
52
- before: refresh.perAgentBefore,
53
- after: refresh.perAgentAfter,
54
- skillsInstalled: refresh.skills,
55
- },
56
- skills: (await checkSkills()) ?? undefined,
57
- };
58
- }
59
- export async function runDoctor(options) {
60
- const interactionMode = getInteractionMode();
61
- // Environment check first - loads project's .env/.env.local files
62
- // Must run before connectivity so the resolved base URL is available
63
- const { info: environment, raw: envRaw } = checkEnvironment(options);
64
- // Run remaining checks concurrently
65
- const [sdk, framework, runtime, connectivity, language, hostExecution, mcpResult] = await Promise.all([
66
- checkSdk(options),
67
- checkFramework(options),
68
- checkRuntime(options),
69
- checkConnectivity(options, environment.baseUrl ?? 'https://api.workos.com'),
70
- checkLanguage(options.installDir),
71
- checkHostExecution(),
72
- checkMcp(),
73
- ]);
74
- // Normalize the check's null (no agents detected) to undefined for the report.
75
- const mcp = mcpResult ?? undefined;
76
- let skills = (await checkSkills()) ?? undefined;
77
- // `--fix`: refresh stale WorkOS skills BEFORE earlyIssues + AI analysis so
78
- // every downstream consumer (issue detection, AI prompt context) sees the
79
- // post-refresh skill state and doesn't reference a SKILLS_OUTDATED warning
80
- // that was just resolved.
81
- const refreshOutcome = await maybeRefreshSkills(options, skills);
82
- const skillsRefresh = refreshOutcome.skillsRefresh;
83
- skills = refreshOutcome.skills;
84
- // Dashboard settings + auth patterns + AI analysis (parallel, all need sdk/framework results)
85
- // AI analysis also receives early issues as context to avoid duplication
86
- const earlyIssues = detectIssues({
87
- version: DOCTOR_VERSION,
88
- timestamp: '',
89
- interactionMode,
90
- project: { path: options.installDir, packageManager: runtime.packageManager },
91
- sdk,
92
- language,
93
- runtime,
94
- framework,
95
- environment,
96
- hostExecution,
97
- connectivity,
98
- skills,
99
- mcp,
100
- });
101
- const [dashboardResult, authPatterns, aiAnalysis] = await Promise.all([
102
- checkDashboardSettings(options, environment.apiKeyType, envRaw),
103
- checkAuthPatterns(options, framework, environment, sdk),
104
- checkAiAnalysis({ installDir: options.installDir, language, framework, sdk, environment, existingIssues: earlyIssues }, { skipAi: options.skipAi }),
105
- ]);
106
- // Compute expected redirect URI from framework detection if not set in env
107
- const redirectUriSource = environment.redirectUri ? 'env' : 'inferred';
108
- const expectedRedirectUri = environment.redirectUri ??
109
- (framework.expectedCallbackPath && framework.detectedPort
110
- ? `http://localhost:${framework.detectedPort}${framework.expectedCallbackPath}`
111
- : null);
112
- // Compare redirect URIs if we have dashboard data
113
- const redirectUris = dashboardResult.settings
114
- ? compareRedirectUris(expectedRedirectUri, dashboardResult.settings.redirectUris, redirectUriSource)
115
- : undefined;
116
- // Build partial report
117
- const partialReport = {
118
- version: DOCTOR_VERSION,
119
- timestamp: new Date().toISOString(),
120
- interactionMode,
121
- project: {
122
- path: options.installDir,
123
- packageManager: runtime.packageManager,
124
- },
125
- sdk,
126
- language,
127
- runtime,
128
- framework,
129
- environment,
130
- hostExecution,
131
- connectivity,
132
- credentialValidation: dashboardResult.credentialValidation,
133
- dashboardSettings: dashboardResult.settings ?? undefined,
134
- dashboardError: dashboardResult.settings ? undefined : dashboardResult.error,
135
- redirectUris,
136
- authPatterns,
137
- aiAnalysis,
138
- skills,
139
- skillsRefresh,
140
- mcp,
141
- };
142
- // Detect issues based on (post-refresh) data.
143
- const issues = detectIssues(partialReport);
144
- // Calculate summary
145
- const errors = issues.filter((i) => i.severity === 'error').length;
146
- const warnings = issues.filter((i) => i.severity === 'warning').length;
147
- const report = {
148
- ...partialReport,
149
- issues,
150
- summary: {
151
- errors,
152
- warnings,
153
- healthy: errors === 0,
154
- },
155
- };
156
- return report;
157
- }
158
- export async function outputReport(report, options) {
159
- if (options.json) {
160
- const json = formatReportAsJson(report);
161
- console.log(json);
162
- if (options.copy) {
163
- const success = await copyToClipboard(json);
164
- if (success) {
165
- console.error('(Copied to clipboard)');
166
- }
167
- }
168
- }
169
- else {
170
- formatReport(report, { verbose: options.verbose });
171
- if (options.copy) {
172
- const json = formatReportAsJson(report);
173
- const success = await copyToClipboard(json);
174
- if (success) {
175
- console.log(Chalk.dim('Report copied to clipboard'));
176
- }
177
- }
178
- }
179
- }
180
- export { formatReport } from './output.js';
181
- export { formatReportAsJson } from './json-output.js';
182
- //# sourceMappingURL=index.js.map