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.
- package/README.md +4 -646
- package/bin/workos.js +44 -0
- package/package.json +18 -99
- package/LICENSE +0 -47
- package/dist/bin.d.ts +0 -2
- package/dist/bin.js +0 -1790
- package/dist/bin.js.map +0 -1
- package/dist/cli.config.d.ts +0 -88
- package/dist/cli.config.js +0 -110
- package/dist/cli.config.js.map +0 -1
- package/dist/commands/api/catalog.d.ts +0 -23
- package/dist/commands/api/catalog.js +0 -97
- package/dist/commands/api/catalog.js.map +0 -1
- package/dist/commands/api/format.d.ts +0 -5
- package/dist/commands/api/format.js +0 -46
- package/dist/commands/api/format.js.map +0 -1
- package/dist/commands/api/index.d.ts +0 -15
- package/dist/commands/api/index.js +0 -213
- package/dist/commands/api/index.js.map +0 -1
- package/dist/commands/api/interactive.d.ts +0 -3
- package/dist/commands/api/interactive.js +0 -133
- package/dist/commands/api/interactive.js.map +0 -1
- package/dist/commands/api/request.d.ts +0 -14
- package/dist/commands/api/request.js +0 -38
- package/dist/commands/api/request.js.map +0 -1
- package/dist/commands/api-key-mgmt.d.ts +0 -16
- package/dist/commands/api-key-mgmt.js +0 -96
- package/dist/commands/api-key-mgmt.js.map +0 -1
- package/dist/commands/audit-log.d.ts +0 -26
- package/dist/commands/audit-log.js +0 -155
- package/dist/commands/audit-log.js.map +0 -1
- package/dist/commands/auth-status.d.ts +0 -1
- package/dist/commands/auth-status.js +0 -57
- package/dist/commands/auth-status.js.map +0 -1
- package/dist/commands/claim.d.ts +0 -11
- package/dist/commands/claim.js +0 -143
- package/dist/commands/claim.js.map +0 -1
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.js +0 -54
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/connection.d.ts +0 -13
- package/dist/commands/connection.js +0 -96
- package/dist/commands/connection.js.map +0 -1
- package/dist/commands/debug-sso.d.ts +0 -1
- package/dist/commands/debug-sso.js +0 -78
- package/dist/commands/debug-sso.js.map +0 -1
- package/dist/commands/debug-sync.d.ts +0 -1
- package/dist/commands/debug-sync.js +0 -102
- package/dist/commands/debug-sync.js.map +0 -1
- package/dist/commands/debug.d.ts +0 -28
- package/dist/commands/debug.js +0 -406
- package/dist/commands/debug.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -22
- package/dist/commands/dev.js +0 -145
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/directory.d.ts +0 -27
- package/dist/commands/directory.js +0 -176
- package/dist/commands/directory.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -12
- package/dist/commands/doctor.js +0 -41
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/emulate.d.ts +0 -7
- package/dist/commands/emulate.js +0 -69
- package/dist/commands/emulate.js.map +0 -1
- package/dist/commands/env.d.ts +0 -19
- package/dist/commands/env.js +0 -303
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/event.d.ts +0 -9
- package/dist/commands/event.js +0 -43
- package/dist/commands/event.js.map +0 -1
- package/dist/commands/feature-flag.d.ts +0 -12
- package/dist/commands/feature-flag.js +0 -96
- package/dist/commands/feature-flag.js.map +0 -1
- package/dist/commands/install-skill.d.ts +0 -85
- package/dist/commands/install-skill.js +0 -332
- package/dist/commands/install-skill.js.map +0 -1
- package/dist/commands/install.d.ts +0 -6
- package/dist/commands/install.js +0 -51
- package/dist/commands/install.js.map +0 -1
- package/dist/commands/invitation.d.ts +0 -19
- package/dist/commands/invitation.js +0 -94
- package/dist/commands/invitation.js.map +0 -1
- package/dist/commands/list-skills.d.ts +0 -4
- package/dist/commands/list-skills.js +0 -52
- package/dist/commands/list-skills.js.map +0 -1
- package/dist/commands/login.d.ts +0 -32
- package/dist/commands/login.js +0 -239
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -1
- package/dist/commands/logout.js +0 -17
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -14
- package/dist/commands/mcp.js +0 -99
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/membership.d.ts +0 -20
- package/dist/commands/membership.js +0 -129
- package/dist/commands/membership.js.map +0 -1
- package/dist/commands/migrations.d.ts +0 -2
- package/dist/commands/migrations.js +0 -50
- package/dist/commands/migrations.js.map +0 -1
- package/dist/commands/onboard-user.d.ts +0 -7
- package/dist/commands/onboard-user.js +0 -61
- package/dist/commands/onboard-user.js.map +0 -1
- package/dist/commands/org-domain.d.ts +0 -4
- package/dist/commands/org-domain.js +0 -45
- package/dist/commands/org-domain.js.map +0 -1
- package/dist/commands/organization.d.ts +0 -14
- package/dist/commands/organization.js +0 -103
- package/dist/commands/organization.js.map +0 -1
- package/dist/commands/permission.d.ts +0 -20
- package/dist/commands/permission.js +0 -93
- package/dist/commands/permission.js.map +0 -1
- package/dist/commands/portal.d.ts +0 -7
- package/dist/commands/portal.js +0 -26
- package/dist/commands/portal.js.map +0 -1
- package/dist/commands/role.d.ts +0 -17
- package/dist/commands/role.js +0 -122
- package/dist/commands/role.js.map +0 -1
- package/dist/commands/seed.d.ts +0 -6
- package/dist/commands/seed.js +0 -298
- package/dist/commands/seed.js.map +0 -1
- package/dist/commands/session.d.ts +0 -8
- package/dist/commands/session.js +0 -63
- package/dist/commands/session.js.map +0 -1
- package/dist/commands/setup-org.d.ts +0 -6
- package/dist/commands/setup-org.js +0 -99
- package/dist/commands/setup-org.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -50
- package/dist/commands/setup.js +0 -237
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/telemetry.d.ts +0 -3
- package/dist/commands/telemetry.js +0 -88
- package/dist/commands/telemetry.js.map +0 -1
- package/dist/commands/uninstall-skill.d.ts +0 -11
- package/dist/commands/uninstall-skill.js +0 -117
- package/dist/commands/uninstall-skill.js.map +0 -1
- package/dist/commands/user.d.ts +0 -19
- package/dist/commands/user.js +0 -92
- package/dist/commands/user.js.map +0 -1
- package/dist/commands/vault-run.d.ts +0 -13
- package/dist/commands/vault-run.js +0 -195
- package/dist/commands/vault-run.js.map +0 -1
- package/dist/commands/vault.d.ts +0 -25
- package/dist/commands/vault.js +0 -153
- package/dist/commands/vault.js.map +0 -1
- package/dist/commands/verify-login.d.ts +0 -25
- package/dist/commands/verify-login.js +0 -158
- package/dist/commands/verify-login.js.map +0 -1
- package/dist/commands/webhook.d.ts +0 -3
- package/dist/commands/webhook.js +0 -92
- package/dist/commands/webhook.js.map +0 -1
- package/dist/craft-pre-release.sh +0 -10
- package/dist/dashboard/components/AnimatedLogo.d.ts +0 -8
- package/dist/dashboard/components/AnimatedLogo.js +0 -16
- package/dist/dashboard/components/AnimatedLogo.js.map +0 -1
- package/dist/dashboard/components/CompletionView.d.ts +0 -13
- package/dist/dashboard/components/CompletionView.js +0 -25
- package/dist/dashboard/components/CompletionView.js.map +0 -1
- package/dist/dashboard/components/ConfirmPrompt.d.ts +0 -9
- package/dist/dashboard/components/ConfirmPrompt.js +0 -25
- package/dist/dashboard/components/ConfirmPrompt.js.map +0 -1
- package/dist/dashboard/components/CredentialsForm.d.ts +0 -10
- package/dist/dashboard/components/CredentialsForm.js +0 -47
- package/dist/dashboard/components/CredentialsForm.js.map +0 -1
- package/dist/dashboard/components/Dashboard.d.ts +0 -3
- package/dist/dashboard/components/Dashboard.js +0 -100
- package/dist/dashboard/components/Dashboard.js.map +0 -1
- package/dist/dashboard/components/DashboardLayout.d.ts +0 -24
- package/dist/dashboard/components/DashboardLayout.js +0 -25
- package/dist/dashboard/components/DashboardLayout.js.map +0 -1
- package/dist/dashboard/components/DiffPanel.d.ts +0 -9
- package/dist/dashboard/components/DiffPanel.js +0 -136
- package/dist/dashboard/components/DiffPanel.js.map +0 -1
- package/dist/dashboard/components/InlinePrompt.d.ts +0 -8
- package/dist/dashboard/components/InlinePrompt.js +0 -19
- package/dist/dashboard/components/InlinePrompt.js.map +0 -1
- package/dist/dashboard/components/OutputPanel.d.ts +0 -10
- package/dist/dashboard/components/OutputPanel.js +0 -100
- package/dist/dashboard/components/OutputPanel.js.map +0 -1
- package/dist/dashboard/components/Panel.d.ts +0 -12
- package/dist/dashboard/components/Panel.js +0 -6
- package/dist/dashboard/components/Panel.js.map +0 -1
- package/dist/dashboard/components/TextInput.d.ts +0 -13
- package/dist/dashboard/components/TextInput.js +0 -57
- package/dist/dashboard/components/TextInput.js.map +0 -1
- package/dist/dashboard/components/WelcomeArt.d.ts +0 -2
- package/dist/dashboard/components/WelcomeArt.js +0 -9
- package/dist/dashboard/components/WelcomeArt.js.map +0 -1
- package/dist/dashboard/hooks/useAnimation.d.ts +0 -7
- package/dist/dashboard/hooks/useAnimation.js +0 -24
- package/dist/dashboard/hooks/useAnimation.js.map +0 -1
- package/dist/dashboard/hooks/useKeyboard.d.ts +0 -8
- package/dist/dashboard/hooks/useKeyboard.js +0 -18
- package/dist/dashboard/hooks/useKeyboard.js.map +0 -1
- package/dist/dashboard/hooks/useTerminalSize.d.ts +0 -8
- package/dist/dashboard/hooks/useTerminalSize.js +0 -23
- package/dist/dashboard/hooks/useTerminalSize.js.map +0 -1
- package/dist/dashboard/index.d.ts +0 -6
- package/dist/dashboard/index.js +0 -36
- package/dist/dashboard/index.js.map +0 -1
- package/dist/dashboard/lib/diff-utils.d.ts +0 -21
- package/dist/dashboard/lib/diff-utils.js +0 -271
- package/dist/dashboard/lib/diff-utils.js.map +0 -1
- package/dist/dashboard/lib/logo-frames.d.ts +0 -20
- package/dist/dashboard/lib/logo-frames.js +0 -109
- package/dist/dashboard/lib/logo-frames.js.map +0 -1
- package/dist/dashboard/lib/welcome-art.d.ts +0 -1
- package/dist/dashboard/lib/welcome-art.js +0 -5
- package/dist/dashboard/lib/welcome-art.js.map +0 -1
- package/dist/dashboard/types.d.ts +0 -5
- package/dist/dashboard/types.js +0 -2
- package/dist/dashboard/types.js.map +0 -1
- package/dist/doctor/agent-prompt.d.ts +0 -10
- package/dist/doctor/agent-prompt.js +0 -190
- package/dist/doctor/agent-prompt.js.map +0 -1
- package/dist/doctor/checks/ai-analysis.d.ts +0 -9
- package/dist/doctor/checks/ai-analysis.js +0 -124
- package/dist/doctor/checks/ai-analysis.js.map +0 -1
- package/dist/doctor/checks/auth-patterns.d.ts +0 -2
- package/dist/doctor/checks/auth-patterns.js +0 -569
- package/dist/doctor/checks/auth-patterns.js.map +0 -1
- package/dist/doctor/checks/connectivity.d.ts +0 -2
- package/dist/doctor/checks/connectivity.js +0 -35
- package/dist/doctor/checks/connectivity.js.map +0 -1
- package/dist/doctor/checks/dashboard.d.ts +0 -3
- package/dist/doctor/checks/dashboard.js +0 -123
- package/dist/doctor/checks/dashboard.js.map +0 -1
- package/dist/doctor/checks/environment.d.ts +0 -2
- package/dist/doctor/checks/environment.js +0 -86
- package/dist/doctor/checks/environment.js.map +0 -1
- package/dist/doctor/checks/framework.d.ts +0 -2
- package/dist/doctor/checks/framework.js +0 -94
- package/dist/doctor/checks/framework.js.map +0 -1
- package/dist/doctor/checks/host-execution.d.ts +0 -2
- package/dist/doctor/checks/host-execution.js +0 -21
- package/dist/doctor/checks/host-execution.js.map +0 -1
- package/dist/doctor/checks/language.d.ts +0 -6
- package/dist/doctor/checks/language.js +0 -104
- package/dist/doctor/checks/language.js.map +0 -1
- package/dist/doctor/checks/mcp.d.ts +0 -15
- package/dist/doctor/checks/mcp.js +0 -34
- package/dist/doctor/checks/mcp.js.map +0 -1
- package/dist/doctor/checks/runtime.d.ts +0 -2
- package/dist/doctor/checks/runtime.js +0 -20
- package/dist/doctor/checks/runtime.js.map +0 -1
- package/dist/doctor/checks/sdk.d.ts +0 -2
- package/dist/doctor/checks/sdk.js +0 -192
- package/dist/doctor/checks/sdk.js.map +0 -1
- package/dist/doctor/checks/skills.d.ts +0 -9
- package/dist/doctor/checks/skills.js +0 -84
- package/dist/doctor/checks/skills.js.map +0 -1
- package/dist/doctor/clipboard.d.ts +0 -1
- package/dist/doctor/clipboard.js +0 -43
- package/dist/doctor/clipboard.js.map +0 -1
- package/dist/doctor/index.d.ts +0 -26
- package/dist/doctor/index.js +0 -182
- package/dist/doctor/index.js.map +0 -1
- package/dist/doctor/issues.d.ts +0 -63
- package/dist/doctor/issues.js +0 -199
- package/dist/doctor/issues.js.map +0 -1
- package/dist/doctor/json-output.d.ts +0 -2
- package/dist/doctor/json-output.js +0 -4
- package/dist/doctor/json-output.js.map +0 -1
- package/dist/doctor/output.d.ts +0 -7
- package/dist/doctor/output.js +0 -289
- package/dist/doctor/output.js.map +0 -1
- package/dist/doctor/types.d.ts +0 -203
- package/dist/doctor/types.js +0 -2
- package/dist/doctor/types.js.map +0 -1
- package/dist/integrations/dotnet/index.d.ts +0 -8
- package/dist/integrations/dotnet/index.js +0 -170
- package/dist/integrations/dotnet/index.js.map +0 -1
- package/dist/integrations/elixir/index.d.ts +0 -8
- package/dist/integrations/elixir/index.js +0 -146
- package/dist/integrations/elixir/index.js.map +0 -1
- package/dist/integrations/go/index.d.ts +0 -11
- package/dist/integrations/go/index.js +0 -212
- package/dist/integrations/go/index.js.map +0 -1
- package/dist/integrations/kotlin/index.d.ts +0 -4
- package/dist/integrations/kotlin/index.js +0 -78
- package/dist/integrations/kotlin/index.js.map +0 -1
- package/dist/integrations/nextjs/index.d.ts +0 -4
- package/dist/integrations/nextjs/index.js +0 -93
- package/dist/integrations/nextjs/index.js.map +0 -1
- package/dist/integrations/nextjs/utils.d.ts +0 -8
- package/dist/integrations/nextjs/utils.js +0 -68
- package/dist/integrations/nextjs/utils.js.map +0 -1
- package/dist/integrations/node/index.d.ts +0 -4
- package/dist/integrations/node/index.js +0 -52
- package/dist/integrations/node/index.js.map +0 -1
- package/dist/integrations/php/index.d.ts +0 -4
- package/dist/integrations/php/index.js +0 -51
- package/dist/integrations/php/index.js.map +0 -1
- package/dist/integrations/php-laravel/index.d.ts +0 -4
- package/dist/integrations/php-laravel/index.js +0 -51
- package/dist/integrations/php-laravel/index.js.map +0 -1
- package/dist/integrations/python/index.d.ts +0 -9
- package/dist/integrations/python/index.js +0 -249
- package/dist/integrations/python/index.js.map +0 -1
- package/dist/integrations/react/index.d.ts +0 -4
- package/dist/integrations/react/index.js +0 -49
- package/dist/integrations/react/index.js.map +0 -1
- package/dist/integrations/react-router/index.d.ts +0 -4
- package/dist/integrations/react-router/index.js +0 -94
- package/dist/integrations/react-router/index.js.map +0 -1
- package/dist/integrations/react-router/utils.d.ts +0 -10
- package/dist/integrations/react-router/utils.js +0 -162
- package/dist/integrations/react-router/utils.js.map +0 -1
- package/dist/integrations/ruby/index.d.ts +0 -8
- package/dist/integrations/ruby/index.js +0 -137
- package/dist/integrations/ruby/index.js.map +0 -1
- package/dist/integrations/sveltekit/index.d.ts +0 -4
- package/dist/integrations/sveltekit/index.js +0 -50
- package/dist/integrations/sveltekit/index.js.map +0 -1
- package/dist/integrations/tanstack-start/index.d.ts +0 -4
- package/dist/integrations/tanstack-start/index.js +0 -51
- package/dist/integrations/tanstack-start/index.js.map +0 -1
- package/dist/integrations/vanilla-js/index.d.ts +0 -4
- package/dist/integrations/vanilla-js/index.js +0 -49
- package/dist/integrations/vanilla-js/index.js.map +0 -1
- package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.d.ts +0 -7
- package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js +0 -12
- package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js.map +0 -1
- package/dist/lib/adapters/cli-adapter.d.ts +0 -113
- package/dist/lib/adapters/cli-adapter.js +0 -641
- package/dist/lib/adapters/cli-adapter.js.map +0 -1
- package/dist/lib/adapters/dashboard-adapter.d.ts +0 -34
- package/dist/lib/adapters/dashboard-adapter.js +0 -121
- package/dist/lib/adapters/dashboard-adapter.js.map +0 -1
- package/dist/lib/adapters/headless-adapter.d.ts +0 -80
- package/dist/lib/adapters/headless-adapter.js +0 -347
- package/dist/lib/adapters/headless-adapter.js.map +0 -1
- package/dist/lib/adapters/index.d.ts +0 -4
- package/dist/lib/adapters/index.js +0 -4
- package/dist/lib/adapters/index.js.map +0 -1
- package/dist/lib/adapters/types.d.ts +0 -41
- package/dist/lib/adapters/types.js +0 -2
- package/dist/lib/adapters/types.js.map +0 -1
- package/dist/lib/agent-interface.d.ts +0 -84
- package/dist/lib/agent-interface.js +0 -840
- package/dist/lib/agent-interface.js.map +0 -1
- package/dist/lib/agent-runner.d.ts +0 -9
- package/dist/lib/agent-runner.js +0 -261
- package/dist/lib/agent-runner.js.map +0 -1
- package/dist/lib/ai-content.d.ts +0 -14
- package/dist/lib/ai-content.js +0 -131
- package/dist/lib/ai-content.js.map +0 -1
- package/dist/lib/api-error-handler.d.ts +0 -18
- package/dist/lib/api-error-handler.js +0 -76
- package/dist/lib/api-error-handler.js.map +0 -1
- package/dist/lib/api-key.d.ts +0 -14
- package/dist/lib/api-key.js +0 -37
- package/dist/lib/api-key.js.map +0 -1
- package/dist/lib/api.d.ts +0 -25
- package/dist/lib/api.js +0 -120
- package/dist/lib/api.js.map +0 -1
- package/dist/lib/background-refresh.d.ts +0 -29
- package/dist/lib/background-refresh.js +0 -95
- package/dist/lib/background-refresh.js.map +0 -1
- package/dist/lib/command-aliases.d.ts +0 -8
- package/dist/lib/command-aliases.js +0 -12
- package/dist/lib/command-aliases.js.map +0 -1
- package/dist/lib/completion-data.d.ts +0 -33
- package/dist/lib/completion-data.js +0 -33
- package/dist/lib/completion-data.js.map +0 -1
- package/dist/lib/config-store.d.ts +0 -63
- package/dist/lib/config-store.js +0 -293
- package/dist/lib/config-store.js.map +0 -1
- package/dist/lib/config.d.ts +0 -34
- package/dist/lib/config.js +0 -37
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -51
- package/dist/lib/constants.js +0 -50
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/credential-discovery.d.ts +0 -42
- package/dist/lib/credential-discovery.js +0 -100
- package/dist/lib/credential-discovery.js.map +0 -1
- package/dist/lib/credential-proxy.d.ts +0 -45
- package/dist/lib/credential-proxy.js +0 -364
- package/dist/lib/credential-proxy.js.map +0 -1
- package/dist/lib/credential-store.d.ts +0 -32
- package/dist/lib/credential-store.js +0 -236
- package/dist/lib/credential-store.js.map +0 -1
- package/dist/lib/credentials.d.ts +0 -13
- package/dist/lib/credentials.js +0 -34
- package/dist/lib/credentials.js.map +0 -1
- package/dist/lib/dev-command.d.ts +0 -26
- package/dist/lib/dev-command.js +0 -129
- package/dist/lib/dev-command.js.map +0 -1
- package/dist/lib/device-auth.d.ts +0 -48
- package/dist/lib/device-auth.js +0 -176
- package/dist/lib/device-auth.js.map +0 -1
- package/dist/lib/device-id.d.ts +0 -25
- package/dist/lib/device-id.js +0 -102
- package/dist/lib/device-id.js.map +0 -1
- package/dist/lib/ensure-auth.d.ts +0 -12
- package/dist/lib/ensure-auth.js +0 -111
- package/dist/lib/ensure-auth.js.map +0 -1
- package/dist/lib/env-writer.d.ts +0 -25
- package/dist/lib/env-writer.js +0 -90
- package/dist/lib/env-writer.js.map +0 -1
- package/dist/lib/events.d.ts +0 -248
- package/dist/lib/events.js +0 -19
- package/dist/lib/events.js.map +0 -1
- package/dist/lib/framework-config.d.ts +0 -133
- package/dist/lib/framework-config.js +0 -11
- package/dist/lib/framework-config.js.map +0 -1
- package/dist/lib/helper-functions.d.ts +0 -1
- package/dist/lib/helper-functions.js +0 -2
- package/dist/lib/helper-functions.js.map +0 -1
- package/dist/lib/host-probe.d.ts +0 -28
- package/dist/lib/host-probe.js +0 -154
- package/dist/lib/host-probe.js.map +0 -1
- package/dist/lib/installer-core.d.ts +0 -569
- package/dist/lib/installer-core.js +0 -1134
- package/dist/lib/installer-core.js.map +0 -1
- package/dist/lib/installer-core.types.d.ts +0 -162
- package/dist/lib/installer-core.types.js +0 -2
- package/dist/lib/installer-core.types.js.map +0 -1
- package/dist/lib/mcp-clients.d.ts +0 -45
- package/dist/lib/mcp-clients.js +0 -297
- package/dist/lib/mcp-clients.js.map +0 -1
- package/dist/lib/port-detection.d.ts +0 -7
- package/dist/lib/port-detection.js +0 -244
- package/dist/lib/port-detection.js.map +0 -1
- package/dist/lib/post-install.d.ts +0 -8
- package/dist/lib/post-install.js +0 -51
- package/dist/lib/post-install.js.map +0 -1
- package/dist/lib/preferences.d.ts +0 -143
- package/dist/lib/preferences.js +0 -227
- package/dist/lib/preferences.js.map +0 -1
- package/dist/lib/progress-tracker.d.ts +0 -22
- package/dist/lib/progress-tracker.js +0 -47
- package/dist/lib/progress-tracker.js.map +0 -1
- package/dist/lib/registry.d.ts +0 -42
- package/dist/lib/registry.js +0 -96
- package/dist/lib/registry.js.map +0 -1
- package/dist/lib/resolve-install-credentials.d.ts +0 -11
- package/dist/lib/resolve-install-credentials.js +0 -53
- package/dist/lib/resolve-install-credentials.js.map +0 -1
- package/dist/lib/run-with-core.d.ts +0 -7
- package/dist/lib/run-with-core.js +0 -559
- package/dist/lib/run-with-core.js.map +0 -1
- package/dist/lib/safe-tools.d.ts +0 -2
- package/dist/lib/safe-tools.js +0 -212
- package/dist/lib/safe-tools.js.map +0 -1
- package/dist/lib/scaffold/index.d.ts +0 -1
- package/dist/lib/scaffold/index.js +0 -2
- package/dist/lib/scaffold/index.js.map +0 -1
- package/dist/lib/scaffold/scaffold.d.ts +0 -66
- package/dist/lib/scaffold/scaffold.js +0 -156
- package/dist/lib/scaffold/scaffold.js.map +0 -1
- package/dist/lib/settings.d.ts +0 -60
- package/dist/lib/settings.js +0 -31
- package/dist/lib/settings.js.map +0 -1
- package/dist/lib/staging-api.d.ts +0 -22
- package/dist/lib/staging-api.js +0 -74
- package/dist/lib/staging-api.js.map +0 -1
- package/dist/lib/startup-notice-gate.d.ts +0 -21
- package/dist/lib/startup-notice-gate.js +0 -29
- package/dist/lib/startup-notice-gate.js.map +0 -1
- package/dist/lib/telemetry-notice.d.ts +0 -25
- package/dist/lib/telemetry-notice.js +0 -58
- package/dist/lib/telemetry-notice.js.map +0 -1
- package/dist/lib/token-refresh-client.d.ts +0 -23
- package/dist/lib/token-refresh-client.js +0 -89
- package/dist/lib/token-refresh-client.js.map +0 -1
- package/dist/lib/token-refresh.d.ts +0 -12
- package/dist/lib/token-refresh.js +0 -27
- package/dist/lib/token-refresh.js.map +0 -1
- package/dist/lib/unclaimed-env-api.d.ts +0 -42
- package/dist/lib/unclaimed-env-api.js +0 -139
- package/dist/lib/unclaimed-env-api.js.map +0 -1
- package/dist/lib/unclaimed-env-provision.d.ts +0 -24
- package/dist/lib/unclaimed-env-provision.js +0 -80
- package/dist/lib/unclaimed-env-provision.js.map +0 -1
- package/dist/lib/unclaimed-warning.d.ts +0 -15
- package/dist/lib/unclaimed-warning.js +0 -78
- package/dist/lib/unclaimed-warning.js.map +0 -1
- package/dist/lib/validation/build-validator.d.ts +0 -21
- package/dist/lib/validation/build-validator.js +0 -153
- package/dist/lib/validation/build-validator.js.map +0 -1
- package/dist/lib/validation/index.d.ts +0 -4
- package/dist/lib/validation/index.js +0 -4
- package/dist/lib/validation/index.js.map +0 -1
- package/dist/lib/validation/quick-checks.d.ts +0 -19
- package/dist/lib/validation/quick-checks.js +0 -192
- package/dist/lib/validation/quick-checks.js.map +0 -1
- package/dist/lib/validation/security-checks.d.ts +0 -35
- package/dist/lib/validation/security-checks.js +0 -106
- package/dist/lib/validation/security-checks.js.map +0 -1
- package/dist/lib/validation/types.d.ts +0 -56
- package/dist/lib/validation/types.js +0 -2
- package/dist/lib/validation/types.js.map +0 -1
- package/dist/lib/validation/validator.d.ts +0 -13
- package/dist/lib/validation/validator.js +0 -711
- package/dist/lib/validation/validator.js.map +0 -1
- package/dist/lib/version-check.d.ts +0 -6
- package/dist/lib/version-check.js +0 -46
- package/dist/lib/version-check.js.map +0 -1
- package/dist/lib/workos-api.d.ts +0 -30
- package/dist/lib/workos-api.js +0 -69
- package/dist/lib/workos-api.js.map +0 -1
- package/dist/lib/workos-client.d.ts +0 -58
- package/dist/lib/workos-client.js +0 -140
- package/dist/lib/workos-client.js.map +0 -1
- package/dist/lib/workos-management.d.ts +0 -32
- package/dist/lib/workos-management.js +0 -149
- package/dist/lib/workos-management.js.map +0 -1
- package/dist/nextjs/nextjs-installer-agent.d.ts +0 -5
- package/dist/nextjs/nextjs-installer-agent.js +0 -6
- package/dist/nextjs/nextjs-installer-agent.js.map +0 -1
- package/dist/nextjs/utils.d.ts +0 -4
- package/dist/nextjs/utils.js +0 -5
- package/dist/nextjs/utils.js.map +0 -1
- package/dist/react/react-installer-agent.d.ts +0 -4
- package/dist/react/react-installer-agent.js +0 -5
- package/dist/react/react-installer-agent.js.map +0 -1
- package/dist/react-router/react-router-installer-agent.d.ts +0 -4
- package/dist/react-router/react-router-installer-agent.js +0 -5
- package/dist/react-router/react-router-installer-agent.js.map +0 -1
- package/dist/react-router/utils.d.ts +0 -4
- package/dist/react-router/utils.js +0 -5
- package/dist/react-router/utils.js.map +0 -1
- package/dist/run.d.ts +0 -33
- package/dist/run.js +0 -58
- package/dist/run.js.map +0 -1
- package/dist/smoke-test.ts +0 -881
- package/dist/steps/add-or-update-environment-variables.d.ts +0 -10
- package/dist/steps/add-or-update-environment-variables.js +0 -155
- package/dist/steps/add-or-update-environment-variables.js.map +0 -1
- package/dist/steps/index.d.ts +0 -3
- package/dist/steps/index.js +0 -4
- package/dist/steps/index.js.map +0 -1
- package/dist/steps/run-prettier.d.ts +0 -5
- package/dist/steps/run-prettier.js +0 -50
- package/dist/steps/run-prettier.js.map +0 -1
- package/dist/steps/upload-environment-variables/EnvironmentProvider.d.ts +0 -8
- package/dist/steps/upload-environment-variables/EnvironmentProvider.js +0 -7
- package/dist/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
- package/dist/steps/upload-environment-variables/index.d.ts +0 -6
- package/dist/steps/upload-environment-variables/index.js +0 -69
- package/dist/steps/upload-environment-variables/index.js.map +0 -1
- package/dist/steps/upload-environment-variables/providers/vercel.d.ts +0 -14
- package/dist/steps/upload-environment-variables/providers/vercel.js +0 -107
- package/dist/steps/upload-environment-variables/providers/vercel.js.map +0 -1
- package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +0 -4
- package/dist/tanstack-start/tanstack-start-installer-agent.js +0 -5
- package/dist/tanstack-start/tanstack-start-installer-agent.js.map +0 -1
- package/dist/telemetry.d.ts +0 -2
- package/dist/telemetry.js +0 -29
- package/dist/telemetry.js.map +0 -1
- package/dist/test/force-insecure-storage.d.ts +0 -1
- package/dist/test/force-insecure-storage.js +0 -9
- package/dist/test/force-insecure-storage.js.map +0 -1
- package/dist/test/setup.d.ts +0 -1
- package/dist/test/setup.js +0 -38
- package/dist/test/setup.js.map +0 -1
- package/dist/utils/analytics.d.ts +0 -66
- package/dist/utils/analytics.js +0 -330
- package/dist/utils/analytics.js.map +0 -1
- package/dist/utils/bash.d.ts +0 -2
- package/dist/utils/bash.js +0 -17
- package/dist/utils/bash.js.map +0 -1
- package/dist/utils/box.d.ts +0 -9
- package/dist/utils/box.js +0 -15
- package/dist/utils/box.js.map +0 -1
- package/dist/utils/cli-exit.d.ts +0 -15
- package/dist/utils/cli-exit.js +0 -11
- package/dist/utils/cli-exit.js.map +0 -1
- package/dist/utils/cli-symbols.d.ts +0 -44
- package/dist/utils/cli-symbols.js +0 -58
- package/dist/utils/cli-symbols.js.map +0 -1
- package/dist/utils/command-invocation.d.ts +0 -10
- package/dist/utils/command-invocation.js +0 -26
- package/dist/utils/command-invocation.js.map +0 -1
- package/dist/utils/command-telemetry.d.ts +0 -17
- package/dist/utils/command-telemetry.js +0 -67
- package/dist/utils/command-telemetry.js.map +0 -1
- package/dist/utils/crash-reporter.d.ts +0 -13
- package/dist/utils/crash-reporter.js +0 -91
- package/dist/utils/crash-reporter.js.map +0 -1
- package/dist/utils/debug.d.ts +0 -9
- package/dist/utils/debug.js +0 -105
- package/dist/utils/debug.js.map +0 -1
- package/dist/utils/env-parser.d.ts +0 -5
- package/dist/utils/env-parser.js +0 -18
- package/dist/utils/env-parser.js.map +0 -1
- package/dist/utils/environment.d.ts +0 -10
- package/dist/utils/environment.js +0 -69
- package/dist/utils/environment.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -3
- package/dist/utils/errors.js +0 -7
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/exec-file.d.ts +0 -15
- package/dist/utils/exec-file.js +0 -39
- package/dist/utils/exec-file.js.map +0 -1
- package/dist/utils/exit-codes.d.ts +0 -31
- package/dist/utils/exit-codes.js +0 -69
- package/dist/utils/exit-codes.js.map +0 -1
- package/dist/utils/git-utils.d.ts +0 -23
- package/dist/utils/git-utils.js +0 -86
- package/dist/utils/git-utils.js.map +0 -1
- package/dist/utils/help-json.d.ts +0 -58
- package/dist/utils/help-json.js +0 -1577
- package/dist/utils/help-json.js.map +0 -1
- package/dist/utils/interaction-mode.d.ts +0 -25
- package/dist/utils/interaction-mode.js +0 -99
- package/dist/utils/interaction-mode.js.map +0 -1
- package/dist/utils/lock-art.d.ts +0 -4
- package/dist/utils/lock-art.js +0 -73
- package/dist/utils/lock-art.js.map +0 -1
- package/dist/utils/logging.d.ts +0 -9
- package/dist/utils/logging.js +0 -36
- package/dist/utils/logging.js.map +0 -1
- package/dist/utils/ndjson.d.ts +0 -16
- package/dist/utils/ndjson.js +0 -18
- package/dist/utils/ndjson.js.map +0 -1
- package/dist/utils/output.d.ts +0 -60
- package/dist/utils/output.js +0 -124
- package/dist/utils/output.js.map +0 -1
- package/dist/utils/package-json.d.ts +0 -26
- package/dist/utils/package-json.js +0 -32
- package/dist/utils/package-json.js.map +0 -1
- package/dist/utils/package-manager.d.ts +0 -21
- package/dist/utils/package-manager.js +0 -166
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -5
- package/dist/utils/paths.js +0 -18
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/platform.d.ts +0 -8
- package/dist/utils/platform.js +0 -7
- package/dist/utils/platform.js.map +0 -1
- package/dist/utils/recovery-hints.d.ts +0 -42
- package/dist/utils/recovery-hints.js +0 -92
- package/dist/utils/recovery-hints.js.map +0 -1
- package/dist/utils/redact.d.ts +0 -5
- package/dist/utils/redact.js +0 -29
- package/dist/utils/redact.js.map +0 -1
- package/dist/utils/register-subcommand.d.ts +0 -10
- package/dist/utils/register-subcommand.js +0 -33
- package/dist/utils/register-subcommand.js.map +0 -1
- package/dist/utils/semver.d.ts +0 -10
- package/dist/utils/semver.js +0 -43
- package/dist/utils/semver.js.map +0 -1
- package/dist/utils/string.d.ts +0 -1
- package/dist/utils/string.js +0 -6
- package/dist/utils/string.js.map +0 -1
- package/dist/utils/summary-box.d.ts +0 -25
- package/dist/utils/summary-box.js +0 -211
- package/dist/utils/summary-box.js.map +0 -1
- package/dist/utils/table.d.ts +0 -5
- package/dist/utils/table.js +0 -18
- package/dist/utils/table.js.map +0 -1
- package/dist/utils/telemetry-client.d.ts +0 -43
- package/dist/utils/telemetry-client.js +0 -171
- package/dist/utils/telemetry-client.js.map +0 -1
- package/dist/utils/telemetry-store-forward.d.ts +0 -11
- package/dist/utils/telemetry-store-forward.js +0 -94
- package/dist/utils/telemetry-store-forward.js.map +0 -1
- package/dist/utils/telemetry-types.d.ts +0 -100
- package/dist/utils/telemetry-types.js +0 -6
- package/dist/utils/telemetry-types.js.map +0 -1
- package/dist/utils/types.d.ts +0 -123
- package/dist/utils/types.js +0 -2
- package/dist/utils/types.js.map +0 -1
- package/dist/utils/ui-utils.d.ts +0 -97
- package/dist/utils/ui-utils.js +0 -449
- package/dist/utils/ui-utils.js.map +0 -1
- package/dist/utils/ui.d.ts +0 -148
- package/dist/utils/ui.js +0 -368
- package/dist/utils/ui.js.map +0 -1
- package/dist/utils/urls.d.ts +0 -13
- package/dist/utils/urls.js +0 -14
- package/dist/utils/urls.js.map +0 -1
- package/dist/utils/vendor/is-unicorn-supported.d.ts +0 -1
- package/dist/utils/vendor/is-unicorn-supported.js +0 -21
- package/dist/utils/vendor/is-unicorn-supported.js.map +0 -1
- package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +0 -4
- package/dist/vanilla-js/vanilla-js-installer-agent.js +0 -5
- package/dist/vanilla-js/vanilla-js-installer-agent.js.map +0 -1
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { createWorkOSClient } from '../lib/workos-client.js';
|
|
3
|
-
import { outputJson, isJsonMode } from '../utils/output.js';
|
|
4
|
-
import { createApiErrorHandler } from '../lib/api-error-handler.js';
|
|
5
|
-
const handleApiError = createApiErrorHandler('SetupOrg');
|
|
6
|
-
export async function runSetupOrg(options, apiKey, baseUrl) {
|
|
7
|
-
const client = createWorkOSClient(apiKey, baseUrl);
|
|
8
|
-
const summary = {};
|
|
9
|
-
try {
|
|
10
|
-
// 1. Create organization
|
|
11
|
-
if (!isJsonMode())
|
|
12
|
-
console.log(chalk.bold(`Setting up organization: ${options.name}`));
|
|
13
|
-
const org = await client.sdk.organizations.createOrganization({
|
|
14
|
-
name: options.name,
|
|
15
|
-
});
|
|
16
|
-
summary.organizationId = org.id;
|
|
17
|
-
if (!isJsonMode())
|
|
18
|
-
console.log(chalk.green(` Created org: ${org.name} (${org.id})`));
|
|
19
|
-
// 2. Add domain
|
|
20
|
-
if (options.domain) {
|
|
21
|
-
const domainResult = await client.sdk.organizationDomains.create({
|
|
22
|
-
domain: options.domain,
|
|
23
|
-
organizationId: org.id,
|
|
24
|
-
});
|
|
25
|
-
summary.domainId = domainResult.id;
|
|
26
|
-
if (!isJsonMode())
|
|
27
|
-
console.log(chalk.green(` Added domain: ${options.domain}`));
|
|
28
|
-
// 3. Verify domain
|
|
29
|
-
try {
|
|
30
|
-
await client.sdk.organizationDomains.verify(domainResult.id);
|
|
31
|
-
summary.domainVerified = true;
|
|
32
|
-
if (!isJsonMode())
|
|
33
|
-
console.log(chalk.green(` Verified domain: ${options.domain}`));
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
summary.domainVerified = false;
|
|
37
|
-
if (!isJsonMode())
|
|
38
|
-
console.log(chalk.yellow(` Domain verification pending: ${options.domain}`));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// 4. Create org-scoped roles (copy from env role names)
|
|
42
|
-
if (options.roles?.length) {
|
|
43
|
-
summary.roles = [];
|
|
44
|
-
for (const roleSlug of options.roles) {
|
|
45
|
-
try {
|
|
46
|
-
const role = await client.sdk.authorization.createOrganizationRole(org.id, {
|
|
47
|
-
slug: roleSlug,
|
|
48
|
-
name: roleSlug,
|
|
49
|
-
});
|
|
50
|
-
summary.roles.push(role.slug);
|
|
51
|
-
if (!isJsonMode())
|
|
52
|
-
console.log(chalk.green(` Created org role: ${roleSlug}`));
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
if (error instanceof Error && error.message.toLowerCase().includes('already exists')) {
|
|
56
|
-
if (!isJsonMode())
|
|
57
|
-
console.log(chalk.dim(` Role exists: ${roleSlug} (skipped)`));
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
if (!isJsonMode())
|
|
61
|
-
console.log(chalk.yellow(` Warning: Could not create role ${roleSlug}`));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
// 5. Generate Admin Portal link
|
|
67
|
-
try {
|
|
68
|
-
const portal = await client.sdk.portal.generateLink({
|
|
69
|
-
intent: 'sso',
|
|
70
|
-
organization: org.id,
|
|
71
|
-
});
|
|
72
|
-
summary.portalLink = portal.link;
|
|
73
|
-
if (!isJsonMode()) {
|
|
74
|
-
console.log(chalk.green(` Portal link: ${portal.link}`));
|
|
75
|
-
console.log(chalk.dim(' Note: Portal links expire after 5 minutes.'));
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
if (!isJsonMode())
|
|
80
|
-
console.log(chalk.dim(' Portal link: skipped (may require plan upgrade)'));
|
|
81
|
-
}
|
|
82
|
-
// 6. Print summary
|
|
83
|
-
if (isJsonMode()) {
|
|
84
|
-
outputJson({ status: 'ok', ...summary });
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
console.log(chalk.bold('\nSetup complete:'));
|
|
88
|
-
console.log(` Organization: ${org.id}`);
|
|
89
|
-
if (options.domain)
|
|
90
|
-
console.log(` Domain: ${options.domain} (${summary.domainVerified ? 'verified' : 'pending'})`);
|
|
91
|
-
if (summary.portalLink)
|
|
92
|
-
console.log(` Portal: ${summary.portalLink}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
handleApiError(error);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=setup-org.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup-org.js","sourceRoot":"","sources":["../../src/commands/setup-org.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { createWorkOSClient } from '../lib/workos-client.js';\nimport { outputJson, isJsonMode } from '../utils/output.js';\nimport { createApiErrorHandler } from '../lib/api-error-handler.js';\n\nconst handleApiError = createApiErrorHandler('SetupOrg');\n\nexport interface SetupOrgOptions {\n name: string;\n domain?: string;\n roles?: string[];\n}\n\nexport async function runSetupOrg(options: SetupOrgOptions, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n const summary: Record<string, unknown> = {};\n\n try {\n // 1. Create organization\n if (!isJsonMode()) console.log(chalk.bold(`Setting up organization: ${options.name}`));\n\n const org = await client.sdk.organizations.createOrganization({\n name: options.name,\n });\n summary.organizationId = org.id;\n if (!isJsonMode()) console.log(chalk.green(` Created org: ${org.name} (${org.id})`));\n\n // 2. Add domain\n if (options.domain) {\n const domainResult = await client.sdk.organizationDomains.create({\n domain: options.domain,\n organizationId: org.id,\n });\n summary.domainId = domainResult.id;\n if (!isJsonMode()) console.log(chalk.green(` Added domain: ${options.domain}`));\n\n // 3. Verify domain\n try {\n await client.sdk.organizationDomains.verify(domainResult.id);\n summary.domainVerified = true;\n if (!isJsonMode()) console.log(chalk.green(` Verified domain: ${options.domain}`));\n } catch {\n summary.domainVerified = false;\n if (!isJsonMode()) console.log(chalk.yellow(` Domain verification pending: ${options.domain}`));\n }\n }\n\n // 4. Create org-scoped roles (copy from env role names)\n if (options.roles?.length) {\n summary.roles = [];\n for (const roleSlug of options.roles) {\n try {\n const role = await client.sdk.authorization.createOrganizationRole(org.id, {\n slug: roleSlug,\n name: roleSlug,\n });\n (summary.roles as string[]).push(role.slug);\n if (!isJsonMode()) console.log(chalk.green(` Created org role: ${roleSlug}`));\n } catch (error: unknown) {\n if (error instanceof Error && error.message.toLowerCase().includes('already exists')) {\n if (!isJsonMode()) console.log(chalk.dim(` Role exists: ${roleSlug} (skipped)`));\n } else {\n if (!isJsonMode()) console.log(chalk.yellow(` Warning: Could not create role ${roleSlug}`));\n }\n }\n }\n }\n\n // 5. Generate Admin Portal link\n try {\n const portal = await client.sdk.portal.generateLink({\n intent: 'sso' as Parameters<typeof client.sdk.portal.generateLink>[0]['intent'],\n organization: org.id,\n });\n summary.portalLink = portal.link;\n if (!isJsonMode()) {\n console.log(chalk.green(` Portal link: ${portal.link}`));\n console.log(chalk.dim(' Note: Portal links expire after 5 minutes.'));\n }\n } catch {\n if (!isJsonMode()) console.log(chalk.dim(' Portal link: skipped (may require plan upgrade)'));\n }\n\n // 6. Print summary\n if (isJsonMode()) {\n outputJson({ status: 'ok', ...summary });\n } else {\n console.log(chalk.bold('\\nSetup complete:'));\n console.log(` Organization: ${org.id}`);\n if (options.domain)\n console.log(` Domain: ${options.domain} (${summary.domainVerified ? 'verified' : 'pending'})`);\n if (summary.portalLink) console.log(` Portal: ${summary.portalLink}`);\n }\n } catch (error) {\n handleApiError(error);\n }\n}\n"]}
|
package/dist/commands/setup.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `workos setup` — the consolidated, consented agent-setup moment.
|
|
3
|
-
*
|
|
4
|
-
* Owns BOTH surfaces that used to nag independently:
|
|
5
|
-
* - skills auto-install (previously silent + unconditional on login/install)
|
|
6
|
-
* - the MCP server offer (previously a separate prompt at end of `install`)
|
|
7
|
-
*
|
|
8
|
-
* One prompt, one place. It is called three ways:
|
|
9
|
-
* - trigger 'login' / 'install' → `maybeRunSetupAfter`, a best-effort hook that
|
|
10
|
-
* can never block or fail the parent flow, gated so it stays silent in
|
|
11
|
-
* agent/CI/non-TTY/JSON and never re-asks after a decline or completion.
|
|
12
|
-
* - trigger 'command' → the top-level `workos setup`, always runnable, with
|
|
13
|
-
* flags for granular / non-interactive use.
|
|
14
|
-
*
|
|
15
|
-
* The consent contract is the whole point: nothing is written to a coding agent
|
|
16
|
-
* unless the user says yes (or passes --yes). This replaces the auto-install
|
|
17
|
-
* that a customer called "prompt injection malware".
|
|
18
|
-
*/
|
|
19
|
-
export type SetupTrigger = 'login' | 'install' | 'command';
|
|
20
|
-
export interface RunSetupOptions {
|
|
21
|
-
trigger: SetupTrigger;
|
|
22
|
-
/** Restrict to specific agent keys (e.g. claude-code, cursor). */
|
|
23
|
-
agents?: string[];
|
|
24
|
-
skillsOnly?: boolean;
|
|
25
|
-
mcpOnly?: boolean;
|
|
26
|
-
/** Skip the confirm and install directly (for non-interactive `workos setup --yes`). */
|
|
27
|
-
assumeYes?: boolean;
|
|
28
|
-
/** Clear a prior decline so automatic offers resume, then return. */
|
|
29
|
-
reset?: boolean;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Run the consolidated setup flow. Behavior branches on `trigger`:
|
|
33
|
-
* - automatic (login/install): self-gates on mode + decline/complete, prompts,
|
|
34
|
-
* records an absolute decline on "no".
|
|
35
|
-
* - command: always runs; a "no" does NOT record a permanent decline.
|
|
36
|
-
*/
|
|
37
|
-
export declare function runSetup(opts: RunSetupOptions): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Best-effort setup offer after a successful `login` / `install`.
|
|
40
|
-
*
|
|
41
|
-
* Never throws into, wedges, or fails the parent flow — a try/catch swallows any
|
|
42
|
-
* error. The offer is only ever shown to a present human in an interactive TTY
|
|
43
|
-
* (runSetup early-returns in every machine/non-interactive context), so the
|
|
44
|
-
* confirm is NOT time-bounded: a question that auto-dismisses while the user is
|
|
45
|
-
* reading it is exactly the "it asked but moved on" bug. @inquirer already
|
|
46
|
-
* handles ctrl-c, and detection/install are internally time-bounded, so there is
|
|
47
|
-
* nothing left to race. The parent flow has already succeeded by the time this
|
|
48
|
-
* runs. Any failure is reported to telemetry before being swallowed.
|
|
49
|
-
*/
|
|
50
|
-
export declare function maybeRunSetupAfter(trigger: 'login' | 'install'): Promise<void>;
|
package/dist/commands/setup.js
DELETED
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `workos setup` — the consolidated, consented agent-setup moment.
|
|
3
|
-
*
|
|
4
|
-
* Owns BOTH surfaces that used to nag independently:
|
|
5
|
-
* - skills auto-install (previously silent + unconditional on login/install)
|
|
6
|
-
* - the MCP server offer (previously a separate prompt at end of `install`)
|
|
7
|
-
*
|
|
8
|
-
* One prompt, one place. It is called three ways:
|
|
9
|
-
* - trigger 'login' / 'install' → `maybeRunSetupAfter`, a best-effort hook that
|
|
10
|
-
* can never block or fail the parent flow, gated so it stays silent in
|
|
11
|
-
* agent/CI/non-TTY/JSON and never re-asks after a decline or completion.
|
|
12
|
-
* - trigger 'command' → the top-level `workos setup`, always runnable, with
|
|
13
|
-
* flags for granular / non-interactive use.
|
|
14
|
-
*
|
|
15
|
-
* The consent contract is the whole point: nothing is written to a coding agent
|
|
16
|
-
* unless the user says yes (or passes --yes). This replaces the auto-install
|
|
17
|
-
* that a customer called "prompt injection malware".
|
|
18
|
-
*/
|
|
19
|
-
import { homedir } from 'node:os';
|
|
20
|
-
import ui, { isCancel } from '../utils/ui.js';
|
|
21
|
-
import { outputSuccess, exitWithError, isJsonMode } from '../utils/output.js';
|
|
22
|
-
import { ExitCode, exitWithCode } from '../utils/exit-codes.js';
|
|
23
|
-
import { CliExit } from '../utils/cli-exit.js';
|
|
24
|
-
import { isPromptAllowed } from '../utils/interaction-mode.js';
|
|
25
|
-
import { isSetupDeclined, isSetupCompleted, recordSetupDeclined, recordSetupCompleted, clearSetupDecline, } from '../lib/preferences.js';
|
|
26
|
-
import { createAgents, detectAgents, refreshWorkOSSkills } from './install-skill.js';
|
|
27
|
-
import { detectMcpClients, MCP_AGENT_KEYS, MCP_OUTCOME_LABELS, } from '../lib/mcp-clients.js';
|
|
28
|
-
import { analytics } from '../utils/analytics.js';
|
|
29
|
-
import { formatWorkOSCommand } from '../utils/command-invocation.js';
|
|
30
|
-
/** Validate an --agents filter against the known keys; exit with a structured error on unknown. */
|
|
31
|
-
function validateAgentFilter(agents, known) {
|
|
32
|
-
if (!agents || agents.length === 0)
|
|
33
|
-
return undefined;
|
|
34
|
-
const unknown = agents.filter((a) => !known.includes(a));
|
|
35
|
-
if (unknown.length > 0) {
|
|
36
|
-
exitWithError({
|
|
37
|
-
code: 'unknown_agent',
|
|
38
|
-
message: `Unknown agent(s): ${unknown.join(', ')}. Supported: ${known.join(', ')}.`,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return agents;
|
|
42
|
-
}
|
|
43
|
-
/** Distinct display names across skill agents + MCP targets, for the offer copy. */
|
|
44
|
-
function detectedNames(skillAgents, mcpTargets) {
|
|
45
|
-
return Array.from(new Set([...skillAgents.map((a) => a.displayName), ...mcpTargets.map((t) => t.displayName)]));
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Run the consolidated setup flow. Behavior branches on `trigger`:
|
|
49
|
-
* - automatic (login/install): self-gates on mode + decline/complete, prompts,
|
|
50
|
-
* records an absolute decline on "no".
|
|
51
|
-
* - command: always runs; a "no" does NOT record a permanent decline.
|
|
52
|
-
*/
|
|
53
|
-
export async function runSetup(opts) {
|
|
54
|
-
if (opts.reset) {
|
|
55
|
-
clearSetupDecline();
|
|
56
|
-
if (isJsonMode()) {
|
|
57
|
-
outputSuccess('Setup offers re-enabled', { reset: true });
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
ui.log.success(`Setup offers re-enabled. Run \`${formatWorkOSCommand('setup')}\` to configure your agents.`);
|
|
61
|
-
}
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const isCommand = opts.trigger === 'command';
|
|
65
|
-
const agents = createAgents(homedir()); // cheap (path construction, no IO); built once
|
|
66
|
-
const agentFilter = isCommand
|
|
67
|
-
? validateAgentFilter(opts.agents, [...Object.keys(agents), ...MCP_AGENT_KEYS])
|
|
68
|
-
: opts.agents;
|
|
69
|
-
// Gate BEFORE any agent detection — detectMcpClients shells out to `claude mcp
|
|
70
|
-
// list` etc., so a machine / declined / completed run must pay nothing.
|
|
71
|
-
if (!isCommand) {
|
|
72
|
-
// Automatic (login/install): silent in machine/non-interactive contexts, and
|
|
73
|
-
// never after a decline or a prior completion.
|
|
74
|
-
if (isJsonMode() || !isPromptAllowed())
|
|
75
|
-
return;
|
|
76
|
-
if (isSetupDeclined() || isSetupCompleted())
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
else if ((!isPromptAllowed() || isJsonMode()) && !opts.assumeYes) {
|
|
80
|
-
// Explicit `workos setup` can't prompt in a non-interactive context, nor
|
|
81
|
-
// under --json — output mode is JSON while interaction mode stays human, so
|
|
82
|
-
// isPromptAllowed() is still true and a confirm would pollute the
|
|
83
|
-
// machine-readable stdout stream. Require --yes in both cases.
|
|
84
|
-
exitWithError({
|
|
85
|
-
code: 'confirmation_required',
|
|
86
|
-
message: `Setup can't prompt here (non-interactive or --json). Re-run \`${formatWorkOSCommand('setup --yes')}\` to install without a prompt.`,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
const wantSkills = !opts.mcpOnly;
|
|
90
|
-
const wantMcp = !opts.skillsOnly;
|
|
91
|
-
const skillAgents = wantSkills ? detectAgents(agents, agentFilter) : [];
|
|
92
|
-
const mcpTargets = wantMcp ? await detectMcpClients(agentFilter) : [];
|
|
93
|
-
const names = detectedNames(skillAgents, mcpTargets);
|
|
94
|
-
// Nothing to install to. Surface it only for an explicit invocation.
|
|
95
|
-
if (names.length === 0) {
|
|
96
|
-
if (isCommand) {
|
|
97
|
-
if (isJsonMode()) {
|
|
98
|
-
outputSuccess('No supported coding agents detected', { agents: [] });
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
ui.log.info('No supported coding agents detected (looked for Claude Code, Codex, Cursor, Goose).');
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
const startedAt = Date.now();
|
|
107
|
-
// The offer.
|
|
108
|
-
if (!opts.assumeYes) {
|
|
109
|
-
ui.heading('Set up your coding agent');
|
|
110
|
-
const what = wantSkills && wantMcp ? 'WorkOS skills and the MCP server' : wantMcp ? 'the WorkOS MCP server' : 'WorkOS skills';
|
|
111
|
-
ui.note(`Add ${what} to ${names.join(', ')} so your coding agent can\n` +
|
|
112
|
-
`scaffold auth and manage WorkOS resources. Nothing is written until you confirm.`);
|
|
113
|
-
const answer = await ui.confirm({ message: 'Set up now?', initialValue: true });
|
|
114
|
-
// Cancel (ctrl-c) is not a decline — skip silently and ask again next time,
|
|
115
|
-
// but record it so the cut-off is observable in telemetry.
|
|
116
|
-
if (isCancel(answer)) {
|
|
117
|
-
emitSetupEvent(opts.trigger, startedAt, 'cancelled', { skills: [], mcpInstalled: [], mcpFailed: [] });
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
if (!answer) {
|
|
121
|
-
if (!isCommand)
|
|
122
|
-
recordSetupDeclined();
|
|
123
|
-
emitSetupEvent(opts.trigger, startedAt, 'declined', { skills: [], mcpInstalled: [], mcpFailed: [] });
|
|
124
|
-
ui.log.hint(`No problem. Run \`${formatWorkOSCommand('setup')}\` anytime.`);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// Install.
|
|
129
|
-
await installAndReport(opts, skillAgents, mcpTargets, startedAt);
|
|
130
|
-
}
|
|
131
|
-
async function installAndReport(opts, skillAgents, mcpTargets, startedAt) {
|
|
132
|
-
// Skills (local fs) and MCP (shell-outs to `claude mcp add` etc., which can
|
|
133
|
-
// each block toward a 10s timeout) are independent — run them concurrently,
|
|
134
|
-
// and run the per-agent MCP adds in parallel too. Empty inputs (skillsOnly /
|
|
135
|
-
// mcpOnly) resolve to null / [] without work. `target.add()` never rejects.
|
|
136
|
-
const [skillResult, mcpResults] = await Promise.all([
|
|
137
|
-
skillAgents.length > 0 ? refreshWorkOSSkills({ agents: skillAgents }) : Promise.resolve(null),
|
|
138
|
-
Promise.all(mcpTargets.map((target) => target.add())),
|
|
139
|
-
]);
|
|
140
|
-
const skillAgentNames = skillResult?.agents.map((a) => a.displayName) ?? [];
|
|
141
|
-
const mcpInstalled = mcpResults
|
|
142
|
-
.filter((r) => r.outcome === 'installed' || r.outcome === 'already-installed')
|
|
143
|
-
.map((r) => r.agent);
|
|
144
|
-
const failedResults = mcpResults.filter((r) => r.outcome === 'failed');
|
|
145
|
-
const mcpFailed = failedResults.map((r) => r.agent);
|
|
146
|
-
// Carry a bounded, agent-tagged reason so the MCP-install failure CAUSE (not
|
|
147
|
-
// just the count) is observable in telemetry. Already user-safe — the same
|
|
148
|
-
// text is shown via ui.log.error.
|
|
149
|
-
const mcpFailedReasons = failedResults.map((r) => `${r.agent}:${(r.error ?? '').slice(0, 120)}`).join('; ');
|
|
150
|
-
// Only mark setup complete when something actually landed. A run where every
|
|
151
|
-
// attempted install failed (e.g. transient `claude mcp add` timeouts, with no
|
|
152
|
-
// skills to fall back on) must NOT be treated as done: isSetupCompleted()
|
|
153
|
-
// suppresses every future automatic offer, so persisting completion here would
|
|
154
|
-
// strand the user after a transient failure. Leave the pref unset so the next
|
|
155
|
-
// login/install re-offers.
|
|
156
|
-
if (skillAgentNames.length > 0 || mcpInstalled.length > 0) {
|
|
157
|
-
recordSetupCompleted();
|
|
158
|
-
}
|
|
159
|
-
emitSetupEvent(opts.trigger, startedAt, 'accepted', {
|
|
160
|
-
skills: skillResult?.agents.map((a) => a.name) ?? [],
|
|
161
|
-
mcpInstalled,
|
|
162
|
-
mcpFailed,
|
|
163
|
-
mcpFailedReasons,
|
|
164
|
-
});
|
|
165
|
-
reportResults(skillResult ? { agents: skillAgentNames, count: skillResult.skills.length } : null, mcpResults);
|
|
166
|
-
}
|
|
167
|
-
/** Emit the outcome in both output modes; exit non-zero if any MCP install failed. */
|
|
168
|
-
function reportResults(skills, mcp) {
|
|
169
|
-
if (isJsonMode()) {
|
|
170
|
-
outputSuccess('Setup complete', { skills, mcp });
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
if (skills && skills.agents.length > 0) {
|
|
174
|
-
const word = skills.count === 1 ? 'skill' : 'skills';
|
|
175
|
-
ui.log.success(`${skills.count} ${word} installed for ${skills.agents.join(', ')}`);
|
|
176
|
-
}
|
|
177
|
-
for (const r of mcp) {
|
|
178
|
-
const line = `MCP server: ${r.displayName} — ${MCP_OUTCOME_LABELS[r.outcome]}`;
|
|
179
|
-
if (r.outcome === 'failed') {
|
|
180
|
-
ui.log.error(r.error ? `${line} (${r.error})` : line);
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
ui.log.success(line);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
if (mcp.some((r) => r.outcome === 'installed' || r.outcome === 'already-installed')) {
|
|
187
|
-
ui.log.hint('Your agent will authorize WorkOS via OAuth on first MCP use.');
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
if (mcp.some((r) => r.outcome === 'failed')) {
|
|
191
|
-
exitWithCode(ExitCode.GENERAL_ERROR);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
function emitSetupEvent(trigger, startedAt, outcome, agents) {
|
|
195
|
-
analytics.emitCommandEvent('setup offer', Date.now() - startedAt, agents.mcpFailed.length === 0, {
|
|
196
|
-
extraAttributes: {
|
|
197
|
-
'setup.trigger': trigger,
|
|
198
|
-
// `accepted` kept for back-compat dashboards; `outcome` distinguishes a
|
|
199
|
-
// deliberate "no" (declined) from a walk-away/ctrl-c (cancelled).
|
|
200
|
-
'setup.accepted': outcome === 'accepted',
|
|
201
|
-
'setup.outcome': outcome,
|
|
202
|
-
'setup.skills_agents': agents.skills.join(','),
|
|
203
|
-
'setup.mcp_installed': agents.mcpInstalled.join(','),
|
|
204
|
-
'setup.mcp_failed': agents.mcpFailed.join(','),
|
|
205
|
-
...(agents.mcpFailedReasons ? { 'setup.mcp_failed_reasons': agents.mcpFailedReasons } : {}),
|
|
206
|
-
},
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Best-effort setup offer after a successful `login` / `install`.
|
|
211
|
-
*
|
|
212
|
-
* Never throws into, wedges, or fails the parent flow — a try/catch swallows any
|
|
213
|
-
* error. The offer is only ever shown to a present human in an interactive TTY
|
|
214
|
-
* (runSetup early-returns in every machine/non-interactive context), so the
|
|
215
|
-
* confirm is NOT time-bounded: a question that auto-dismisses while the user is
|
|
216
|
-
* reading it is exactly the "it asked but moved on" bug. @inquirer already
|
|
217
|
-
* handles ctrl-c, and detection/install are internally time-bounded, so there is
|
|
218
|
-
* nothing left to race. The parent flow has already succeeded by the time this
|
|
219
|
-
* runs. Any failure is reported to telemetry before being swallowed.
|
|
220
|
-
*/
|
|
221
|
-
export async function maybeRunSetupAfter(trigger) {
|
|
222
|
-
try {
|
|
223
|
-
await runSetup({ trigger });
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
// reportResults exits non-zero via CliExit on a failed MCP add — that's an
|
|
227
|
-
// intentional exit for the standalone command, not an exception to report
|
|
228
|
-
// (and it stays swallowed here so it never fails the parent login/install).
|
|
229
|
-
if (error instanceof CliExit)
|
|
230
|
-
return;
|
|
231
|
-
// Setup must never fail or block login / install — but don't drop the signal.
|
|
232
|
-
analytics.captureException(error instanceof Error ? error : new Error(String(error)), {
|
|
233
|
-
'setup.trigger': trigger,
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `workos setup` — the consolidated, consented agent-setup moment.\n *\n * Owns BOTH surfaces that used to nag independently:\n * - skills auto-install (previously silent + unconditional on login/install)\n * - the MCP server offer (previously a separate prompt at end of `install`)\n *\n * One prompt, one place. It is called three ways:\n * - trigger 'login' / 'install' → `maybeRunSetupAfter`, a best-effort hook that\n * can never block or fail the parent flow, gated so it stays silent in\n * agent/CI/non-TTY/JSON and never re-asks after a decline or completion.\n * - trigger 'command' → the top-level `workos setup`, always runnable, with\n * flags for granular / non-interactive use.\n *\n * The consent contract is the whole point: nothing is written to a coding agent\n * unless the user says yes (or passes --yes). This replaces the auto-install\n * that a customer called \"prompt injection malware\".\n */\n\nimport { homedir } from 'node:os';\nimport ui, { isCancel } from '../utils/ui.js';\nimport { outputSuccess, exitWithError, isJsonMode } from '../utils/output.js';\nimport { ExitCode, exitWithCode } from '../utils/exit-codes.js';\nimport { CliExit } from '../utils/cli-exit.js';\nimport { isPromptAllowed } from '../utils/interaction-mode.js';\nimport {\n isSetupDeclined,\n isSetupCompleted,\n recordSetupDeclined,\n recordSetupCompleted,\n clearSetupDecline,\n} from '../lib/preferences.js';\nimport { createAgents, detectAgents, refreshWorkOSSkills, type AgentConfig } from './install-skill.js';\nimport {\n detectMcpClients,\n MCP_AGENT_KEYS,\n MCP_OUTCOME_LABELS,\n type McpClientResult,\n type McpClientTarget,\n} from '../lib/mcp-clients.js';\nimport { analytics } from '../utils/analytics.js';\nimport { formatWorkOSCommand } from '../utils/command-invocation.js';\n\nexport type SetupTrigger = 'login' | 'install' | 'command';\n\nexport interface RunSetupOptions {\n trigger: SetupTrigger;\n /** Restrict to specific agent keys (e.g. claude-code, cursor). */\n agents?: string[];\n skillsOnly?: boolean;\n mcpOnly?: boolean;\n /** Skip the confirm and install directly (for non-interactive `workos setup --yes`). */\n assumeYes?: boolean;\n /** Clear a prior decline so automatic offers resume, then return. */\n reset?: boolean;\n}\n\n/** Validate an --agents filter against the known keys; exit with a structured error on unknown. */\nfunction validateAgentFilter(agents: string[] | undefined, known: string[]): string[] | undefined {\n if (!agents || agents.length === 0) return undefined;\n const unknown = agents.filter((a) => !known.includes(a));\n if (unknown.length > 0) {\n exitWithError({\n code: 'unknown_agent',\n message: `Unknown agent(s): ${unknown.join(', ')}. Supported: ${known.join(', ')}.`,\n });\n }\n return agents;\n}\n\n/** Distinct display names across skill agents + MCP targets, for the offer copy. */\nfunction detectedNames(skillAgents: AgentConfig[], mcpTargets: McpClientTarget[]): string[] {\n return Array.from(new Set([...skillAgents.map((a) => a.displayName), ...mcpTargets.map((t) => t.displayName)]));\n}\n\n/**\n * Run the consolidated setup flow. Behavior branches on `trigger`:\n * - automatic (login/install): self-gates on mode + decline/complete, prompts,\n * records an absolute decline on \"no\".\n * - command: always runs; a \"no\" does NOT record a permanent decline.\n */\nexport async function runSetup(opts: RunSetupOptions): Promise<void> {\n if (opts.reset) {\n clearSetupDecline();\n if (isJsonMode()) {\n outputSuccess('Setup offers re-enabled', { reset: true });\n } else {\n ui.log.success(`Setup offers re-enabled. Run \\`${formatWorkOSCommand('setup')}\\` to configure your agents.`);\n }\n return;\n }\n\n const isCommand = opts.trigger === 'command';\n const agents = createAgents(homedir()); // cheap (path construction, no IO); built once\n const agentFilter = isCommand\n ? validateAgentFilter(opts.agents, [...Object.keys(agents), ...MCP_AGENT_KEYS])\n : opts.agents;\n\n // Gate BEFORE any agent detection — detectMcpClients shells out to `claude mcp\n // list` etc., so a machine / declined / completed run must pay nothing.\n if (!isCommand) {\n // Automatic (login/install): silent in machine/non-interactive contexts, and\n // never after a decline or a prior completion.\n if (isJsonMode() || !isPromptAllowed()) return;\n if (isSetupDeclined() || isSetupCompleted()) return;\n } else if ((!isPromptAllowed() || isJsonMode()) && !opts.assumeYes) {\n // Explicit `workos setup` can't prompt in a non-interactive context, nor\n // under --json — output mode is JSON while interaction mode stays human, so\n // isPromptAllowed() is still true and a confirm would pollute the\n // machine-readable stdout stream. Require --yes in both cases.\n exitWithError({\n code: 'confirmation_required',\n message: `Setup can't prompt here (non-interactive or --json). Re-run \\`${formatWorkOSCommand('setup --yes')}\\` to install without a prompt.`,\n });\n }\n\n const wantSkills = !opts.mcpOnly;\n const wantMcp = !opts.skillsOnly;\n const skillAgents: AgentConfig[] = wantSkills ? detectAgents(agents, agentFilter) : [];\n const mcpTargets: McpClientTarget[] = wantMcp ? await detectMcpClients(agentFilter) : [];\n const names = detectedNames(skillAgents, mcpTargets);\n\n // Nothing to install to. Surface it only for an explicit invocation.\n if (names.length === 0) {\n if (isCommand) {\n if (isJsonMode()) {\n outputSuccess('No supported coding agents detected', { agents: [] });\n } else {\n ui.log.info('No supported coding agents detected (looked for Claude Code, Codex, Cursor, Goose).');\n }\n }\n return;\n }\n\n const startedAt = Date.now();\n\n // The offer.\n if (!opts.assumeYes) {\n ui.heading('Set up your coding agent');\n const what =\n wantSkills && wantMcp ? 'WorkOS skills and the MCP server' : wantMcp ? 'the WorkOS MCP server' : 'WorkOS skills';\n ui.note(\n `Add ${what} to ${names.join(', ')} so your coding agent can\\n` +\n `scaffold auth and manage WorkOS resources. Nothing is written until you confirm.`,\n );\n\n const answer = await ui.confirm({ message: 'Set up now?', initialValue: true });\n // Cancel (ctrl-c) is not a decline — skip silently and ask again next time,\n // but record it so the cut-off is observable in telemetry.\n if (isCancel(answer)) {\n emitSetupEvent(opts.trigger, startedAt, 'cancelled', { skills: [], mcpInstalled: [], mcpFailed: [] });\n return;\n }\n if (!answer) {\n if (!isCommand) recordSetupDeclined();\n emitSetupEvent(opts.trigger, startedAt, 'declined', { skills: [], mcpInstalled: [], mcpFailed: [] });\n ui.log.hint(`No problem. Run \\`${formatWorkOSCommand('setup')}\\` anytime.`);\n return;\n }\n }\n\n // Install.\n await installAndReport(opts, skillAgents, mcpTargets, startedAt);\n}\n\nasync function installAndReport(\n opts: RunSetupOptions,\n skillAgents: AgentConfig[],\n mcpTargets: McpClientTarget[],\n startedAt: number,\n): Promise<void> {\n // Skills (local fs) and MCP (shell-outs to `claude mcp add` etc., which can\n // each block toward a 10s timeout) are independent — run them concurrently,\n // and run the per-agent MCP adds in parallel too. Empty inputs (skillsOnly /\n // mcpOnly) resolve to null / [] without work. `target.add()` never rejects.\n const [skillResult, mcpResults] = await Promise.all([\n skillAgents.length > 0 ? refreshWorkOSSkills({ agents: skillAgents }) : Promise.resolve(null),\n Promise.all(mcpTargets.map((target) => target.add())),\n ]);\n const skillAgentNames = skillResult?.agents.map((a) => a.displayName) ?? [];\n\n const mcpInstalled = mcpResults\n .filter((r) => r.outcome === 'installed' || r.outcome === 'already-installed')\n .map((r) => r.agent);\n const failedResults = mcpResults.filter((r) => r.outcome === 'failed');\n const mcpFailed = failedResults.map((r) => r.agent);\n // Carry a bounded, agent-tagged reason so the MCP-install failure CAUSE (not\n // just the count) is observable in telemetry. Already user-safe — the same\n // text is shown via ui.log.error.\n const mcpFailedReasons = failedResults.map((r) => `${r.agent}:${(r.error ?? '').slice(0, 120)}`).join('; ');\n\n // Only mark setup complete when something actually landed. A run where every\n // attempted install failed (e.g. transient `claude mcp add` timeouts, with no\n // skills to fall back on) must NOT be treated as done: isSetupCompleted()\n // suppresses every future automatic offer, so persisting completion here would\n // strand the user after a transient failure. Leave the pref unset so the next\n // login/install re-offers.\n if (skillAgentNames.length > 0 || mcpInstalled.length > 0) {\n recordSetupCompleted();\n }\n\n emitSetupEvent(opts.trigger, startedAt, 'accepted', {\n skills: skillResult?.agents.map((a) => a.name) ?? [],\n mcpInstalled,\n mcpFailed,\n mcpFailedReasons,\n });\n\n reportResults(skillResult ? { agents: skillAgentNames, count: skillResult.skills.length } : null, mcpResults);\n}\n\ninterface SkillSummary {\n agents: string[];\n count: number;\n}\n\n/** Emit the outcome in both output modes; exit non-zero if any MCP install failed. */\nfunction reportResults(skills: SkillSummary | null, mcp: McpClientResult[]): void {\n if (isJsonMode()) {\n outputSuccess('Setup complete', { skills, mcp });\n } else {\n if (skills && skills.agents.length > 0) {\n const word = skills.count === 1 ? 'skill' : 'skills';\n ui.log.success(`${skills.count} ${word} installed for ${skills.agents.join(', ')}`);\n }\n for (const r of mcp) {\n const line = `MCP server: ${r.displayName} — ${MCP_OUTCOME_LABELS[r.outcome]}`;\n if (r.outcome === 'failed') {\n ui.log.error(r.error ? `${line} (${r.error})` : line);\n } else {\n ui.log.success(line);\n }\n }\n if (mcp.some((r) => r.outcome === 'installed' || r.outcome === 'already-installed')) {\n ui.log.hint('Your agent will authorize WorkOS via OAuth on first MCP use.');\n }\n }\n\n if (mcp.some((r) => r.outcome === 'failed')) {\n exitWithCode(ExitCode.GENERAL_ERROR);\n }\n}\n\n/**\n * Queued adoption event (NOT capture()): setup runs as a sub-step after the\n * installer session has ended, so folded session tags would never ship. A queued\n * command event rides the CLI's final flush (the same pattern the old\n * standalone MCP offer used).\n */\ntype SetupOutcome = 'accepted' | 'declined' | 'cancelled';\n\nfunction emitSetupEvent(\n trigger: SetupTrigger,\n startedAt: number,\n outcome: SetupOutcome,\n agents: { skills: string[]; mcpInstalled: string[]; mcpFailed: string[]; mcpFailedReasons?: string },\n): void {\n analytics.emitCommandEvent('setup offer', Date.now() - startedAt, agents.mcpFailed.length === 0, {\n extraAttributes: {\n 'setup.trigger': trigger,\n // `accepted` kept for back-compat dashboards; `outcome` distinguishes a\n // deliberate \"no\" (declined) from a walk-away/ctrl-c (cancelled).\n 'setup.accepted': outcome === 'accepted',\n 'setup.outcome': outcome,\n 'setup.skills_agents': agents.skills.join(','),\n 'setup.mcp_installed': agents.mcpInstalled.join(','),\n 'setup.mcp_failed': agents.mcpFailed.join(','),\n ...(agents.mcpFailedReasons ? { 'setup.mcp_failed_reasons': agents.mcpFailedReasons } : {}),\n },\n });\n}\n\n/**\n * Best-effort setup offer after a successful `login` / `install`.\n *\n * Never throws into, wedges, or fails the parent flow — a try/catch swallows any\n * error. The offer is only ever shown to a present human in an interactive TTY\n * (runSetup early-returns in every machine/non-interactive context), so the\n * confirm is NOT time-bounded: a question that auto-dismisses while the user is\n * reading it is exactly the \"it asked but moved on\" bug. @inquirer already\n * handles ctrl-c, and detection/install are internally time-bounded, so there is\n * nothing left to race. The parent flow has already succeeded by the time this\n * runs. Any failure is reported to telemetry before being swallowed.\n */\nexport async function maybeRunSetupAfter(trigger: 'login' | 'install'): Promise<void> {\n try {\n await runSetup({ trigger });\n } catch (error) {\n // reportResults exits non-zero via CliExit on a failed MCP add — that's an\n // intentional exit for the standalone command, not an exception to report\n // (and it stays swallowed here so it never fails the parent login/install).\n if (error instanceof CliExit) return;\n // Setup must never fail or block login / install — but don't drop the signal.\n analytics.captureException(error instanceof Error ? error : new Error(String(error)), {\n 'setup.trigger': trigger,\n });\n }\n}\n"]}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { envTelemetryOverride, getTelemetrySource, isTelemetryEnabled, isTelemetryOptedOut, setTelemetryOptedOut, } from '../lib/preferences.js';
|
|
3
|
-
import { isJsonMode, outputJson, exitWithError } from '../utils/output.js';
|
|
4
|
-
import { formatWorkOSCommand } from '../utils/command-invocation.js';
|
|
5
|
-
/**
|
|
6
|
-
* Persist an opt-out/opt-in change, surfacing a clear error if the write fails
|
|
7
|
-
* (read-only FS, permission denied). Unlike the read path, the command path
|
|
8
|
-
* must NOT swallow a write failure — otherwise the user believes their
|
|
9
|
-
* preference persisted when it did not.
|
|
10
|
-
*/
|
|
11
|
-
function persistOptedOut(value) {
|
|
12
|
-
try {
|
|
13
|
-
setTelemetryOptedOut(value);
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
exitWithError({
|
|
17
|
-
code: 'internal_error',
|
|
18
|
-
message: `Could not save telemetry preference to disk. Your preference was NOT persisted.`,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export async function runTelemetryOptOut() {
|
|
23
|
-
const alreadyOptedOut = isTelemetryOptedOut();
|
|
24
|
-
persistOptedOut(true);
|
|
25
|
-
if (isJsonMode()) {
|
|
26
|
-
outputJson({ status: 'ok', optedOut: true, alreadyOptedOut });
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
if (alreadyOptedOut) {
|
|
30
|
-
console.log(chalk.green('Telemetry collection is already opted out.'));
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
console.log(chalk.green('Telemetry collection disabled. No further events will be sent.'));
|
|
34
|
-
}
|
|
35
|
-
console.log(chalk.dim(`Re-enable any time with \`${formatWorkOSCommand('telemetry opt-in')}\`.`));
|
|
36
|
-
}
|
|
37
|
-
export async function runTelemetryOptIn() {
|
|
38
|
-
const wasOptedOut = isTelemetryOptedOut();
|
|
39
|
-
persistOptedOut(false);
|
|
40
|
-
if (isJsonMode()) {
|
|
41
|
-
outputJson({ status: 'ok', optedOut: false, alreadyOptedIn: !wasOptedOut });
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
if (wasOptedOut) {
|
|
45
|
-
console.log(chalk.green('Telemetry collection re-enabled.'));
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
console.log(chalk.green('Telemetry collection is already enabled.'));
|
|
49
|
-
}
|
|
50
|
-
console.log(chalk.dim(`Opt out any time with \`${formatWorkOSCommand('telemetry opt-out')}\`.`));
|
|
51
|
-
}
|
|
52
|
-
function describeSource(source) {
|
|
53
|
-
switch (source) {
|
|
54
|
-
case 'env':
|
|
55
|
-
return 'WORKOS_TELEMETRY environment variable';
|
|
56
|
-
case 'preference':
|
|
57
|
-
return 'saved preference';
|
|
58
|
-
case 'default':
|
|
59
|
-
return 'default';
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
export async function runTelemetryStatus() {
|
|
63
|
-
const enabled = isTelemetryEnabled();
|
|
64
|
-
const optedOut = isTelemetryOptedOut();
|
|
65
|
-
const source = getTelemetrySource();
|
|
66
|
-
const override = envTelemetryOverride();
|
|
67
|
-
if (isJsonMode()) {
|
|
68
|
-
outputJson({
|
|
69
|
-
enabled,
|
|
70
|
-
optedOut,
|
|
71
|
-
source,
|
|
72
|
-
envOverride: override ?? null,
|
|
73
|
-
});
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const stateLine = enabled
|
|
77
|
-
? chalk.green('Telemetry collection is enabled.')
|
|
78
|
-
: chalk.yellow('Telemetry collection is disabled.');
|
|
79
|
-
console.log(stateLine);
|
|
80
|
-
console.log(chalk.dim(`Source: ${describeSource(source)}.`));
|
|
81
|
-
if (enabled) {
|
|
82
|
-
console.log(chalk.dim(`Opt out with \`${formatWorkOSCommand('telemetry opt-out')}\`.`));
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
console.log(chalk.dim(`Re-enable with \`${formatWorkOSCommand('telemetry opt-in')}\`.`));
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=telemetry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport {\n envTelemetryOverride,\n getTelemetrySource,\n isTelemetryEnabled,\n isTelemetryOptedOut,\n setTelemetryOptedOut,\n type TelemetrySource,\n} from '../lib/preferences.js';\nimport { isJsonMode, outputJson, exitWithError } from '../utils/output.js';\nimport { formatWorkOSCommand } from '../utils/command-invocation.js';\n\n/**\n * Persist an opt-out/opt-in change, surfacing a clear error if the write fails\n * (read-only FS, permission denied). Unlike the read path, the command path\n * must NOT swallow a write failure — otherwise the user believes their\n * preference persisted when it did not.\n */\nfunction persistOptedOut(value: boolean): void {\n try {\n setTelemetryOptedOut(value);\n } catch {\n exitWithError({\n code: 'internal_error',\n message: `Could not save telemetry preference to disk. Your preference was NOT persisted.`,\n });\n }\n}\n\nexport async function runTelemetryOptOut(): Promise<void> {\n const alreadyOptedOut = isTelemetryOptedOut();\n persistOptedOut(true);\n\n if (isJsonMode()) {\n outputJson({ status: 'ok', optedOut: true, alreadyOptedOut });\n return;\n }\n\n if (alreadyOptedOut) {\n console.log(chalk.green('Telemetry collection is already opted out.'));\n } else {\n console.log(chalk.green('Telemetry collection disabled. No further events will be sent.'));\n }\n console.log(chalk.dim(`Re-enable any time with \\`${formatWorkOSCommand('telemetry opt-in')}\\`.`));\n}\n\nexport async function runTelemetryOptIn(): Promise<void> {\n const wasOptedOut = isTelemetryOptedOut();\n persistOptedOut(false);\n\n if (isJsonMode()) {\n outputJson({ status: 'ok', optedOut: false, alreadyOptedIn: !wasOptedOut });\n return;\n }\n\n if (wasOptedOut) {\n console.log(chalk.green('Telemetry collection re-enabled.'));\n } else {\n console.log(chalk.green('Telemetry collection is already enabled.'));\n }\n console.log(chalk.dim(`Opt out any time with \\`${formatWorkOSCommand('telemetry opt-out')}\\`.`));\n}\n\nfunction describeSource(source: TelemetrySource): string {\n switch (source) {\n case 'env':\n return 'WORKOS_TELEMETRY environment variable';\n case 'preference':\n return 'saved preference';\n case 'default':\n return 'default';\n }\n}\n\nexport async function runTelemetryStatus(): Promise<void> {\n const enabled = isTelemetryEnabled();\n const optedOut = isTelemetryOptedOut();\n const source = getTelemetrySource();\n const override = envTelemetryOverride();\n\n if (isJsonMode()) {\n outputJson({\n enabled,\n optedOut,\n source,\n envOverride: override ?? null,\n });\n return;\n }\n\n const stateLine = enabled\n ? chalk.green('Telemetry collection is enabled.')\n : chalk.yellow('Telemetry collection is disabled.');\n console.log(stateLine);\n console.log(chalk.dim(`Source: ${describeSource(source)}.`));\n\n if (enabled) {\n console.log(chalk.dim(`Opt out with \\`${formatWorkOSCommand('telemetry opt-out')}\\`.`));\n } else {\n console.log(chalk.dim(`Re-enable with \\`${formatWorkOSCommand('telemetry opt-in')}\\`.`));\n }\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { type AgentConfig } from './install-skill.js';
|
|
2
|
-
export interface UninstallSkillOptions {
|
|
3
|
-
skill?: string[];
|
|
4
|
-
agent?: string[];
|
|
5
|
-
}
|
|
6
|
-
export declare function findInstalledSkills(knownSkills: string[], agent: AgentConfig): string[];
|
|
7
|
-
export declare function uninstallSkill(skillName: string, agent: AgentConfig): Promise<{
|
|
8
|
-
success: boolean;
|
|
9
|
-
error?: string;
|
|
10
|
-
}>;
|
|
11
|
-
export declare function runUninstallSkill(options: UninstallSkillOptions): Promise<void>;
|