workos 0.18.0 → 0.20.1
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 -783
- package/bin/workos.js +44 -0
- package/package.json +18 -107
- package/LICENSE +0 -47
- package/dist/bin.d.ts +0 -2
- package/dist/bin.js +0 -1711
- package/dist/bin.js.map +0 -1
- package/dist/check-coverage.ts +0 -237
- 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 -205
- 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 -131
- 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 -23
- 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 -6
- package/dist/commands/emulate.js +0 -68
- package/dist/commands/emulate.js.map +0 -1
- package/dist/commands/env.d.ts +0 -9
- package/dist/commands/env.js +0 -227
- 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 -56
- 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 -22
- package/dist/commands/login.js +0 -184
- 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 -108
- 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 -49
- 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 -297
- 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/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 -194
- 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/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 -198
- 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 -288
- 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/emulate/core/id.d.ts +0 -48
- package/dist/emulate/core/id.js +0 -73
- package/dist/emulate/core/id.js.map +0 -1
- package/dist/emulate/core/index.d.ts +0 -8
- package/dist/emulate/core/index.js +0 -8
- package/dist/emulate/core/index.js.map +0 -1
- package/dist/emulate/core/jwt.d.ts +0 -28
- package/dist/emulate/core/jwt.js +0 -78
- package/dist/emulate/core/jwt.js.map +0 -1
- package/dist/emulate/core/middleware/auth.d.ts +0 -15
- package/dist/emulate/core/middleware/auth.js +0 -17
- package/dist/emulate/core/middleware/auth.js.map +0 -1
- package/dist/emulate/core/middleware/error-handler.d.ts +0 -22
- package/dist/emulate/core/middleware/error-handler.js +0 -72
- package/dist/emulate/core/middleware/error-handler.js.map +0 -1
- package/dist/emulate/core/pagination.d.ts +0 -27
- package/dist/emulate/core/pagination.js +0 -43
- package/dist/emulate/core/pagination.js.map +0 -1
- package/dist/emulate/core/plugin.d.ts +0 -15
- package/dist/emulate/core/plugin.js +0 -2
- package/dist/emulate/core/plugin.js.map +0 -1
- package/dist/emulate/core/server.d.ts +0 -17
- package/dist/emulate/core/server.js +0 -90
- package/dist/emulate/core/server.js.map +0 -1
- package/dist/emulate/core/store.d.ts +0 -44
- package/dist/emulate/core/store.js +0 -169
- package/dist/emulate/core/store.js.map +0 -1
- package/dist/emulate/index.d.ts +0 -25
- package/dist/emulate/index.js +0 -47
- package/dist/emulate/index.js.map +0 -1
- package/dist/emulate/workos/constants.d.ts +0 -56
- package/dist/emulate/workos/constants.js +0 -56
- package/dist/emulate/workos/constants.js.map +0 -1
- package/dist/emulate/workos/entities.d.ts +0 -360
- package/dist/emulate/workos/entities.js +0 -2
- package/dist/emulate/workos/entities.js.map +0 -1
- package/dist/emulate/workos/event-bus.d.ts +0 -17
- package/dist/emulate/workos/event-bus.js +0 -70
- package/dist/emulate/workos/event-bus.js.map +0 -1
- package/dist/emulate/workos/helpers.d.ts +0 -72
- package/dist/emulate/workos/helpers.js +0 -211
- package/dist/emulate/workos/helpers.js.map +0 -1
- package/dist/emulate/workos/index.d.ts +0 -93
- package/dist/emulate/workos/index.js +0 -326
- package/dist/emulate/workos/index.js.map +0 -1
- package/dist/emulate/workos/role-helpers.d.ts +0 -21
- package/dist/emulate/workos/role-helpers.js +0 -130
- package/dist/emulate/workos/role-helpers.js.map +0 -1
- package/dist/emulate/workos/routes/api-keys.d.ts +0 -2
- package/dist/emulate/workos/routes/api-keys.js +0 -32
- package/dist/emulate/workos/routes/api-keys.js.map +0 -1
- package/dist/emulate/workos/routes/audit-logs.d.ts +0 -2
- package/dist/emulate/workos/routes/audit-logs.js +0 -104
- package/dist/emulate/workos/routes/audit-logs.js.map +0 -1
- package/dist/emulate/workos/routes/auth-challenges.d.ts +0 -2
- package/dist/emulate/workos/routes/auth-challenges.js +0 -51
- package/dist/emulate/workos/routes/auth-challenges.js.map +0 -1
- package/dist/emulate/workos/routes/auth-factors.d.ts +0 -2
- package/dist/emulate/workos/routes/auth-factors.js +0 -51
- package/dist/emulate/workos/routes/auth-factors.js.map +0 -1
- package/dist/emulate/workos/routes/auth.d.ts +0 -2
- package/dist/emulate/workos/routes/auth.js +0 -350
- package/dist/emulate/workos/routes/auth.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-checks.d.ts +0 -10
- package/dist/emulate/workos/routes/authorization-checks.js +0 -123
- package/dist/emulate/workos/routes/authorization-checks.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-org-roles.d.ts +0 -2
- package/dist/emulate/workos/routes/authorization-org-roles.js +0 -64
- package/dist/emulate/workos/routes/authorization-org-roles.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-permissions.d.ts +0 -2
- package/dist/emulate/workos/routes/authorization-permissions.js +0 -67
- package/dist/emulate/workos/routes/authorization-permissions.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-resources.d.ts +0 -2
- package/dist/emulate/workos/routes/authorization-resources.js +0 -117
- package/dist/emulate/workos/routes/authorization-resources.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-roles.d.ts +0 -2
- package/dist/emulate/workos/routes/authorization-roles.js +0 -13
- package/dist/emulate/workos/routes/authorization-roles.js.map +0 -1
- package/dist/emulate/workos/routes/config.d.ts +0 -2
- package/dist/emulate/workos/routes/config.js +0 -57
- package/dist/emulate/workos/routes/config.js.map +0 -1
- package/dist/emulate/workos/routes/connect.d.ts +0 -2
- package/dist/emulate/workos/routes/connect.js +0 -65
- package/dist/emulate/workos/routes/connect.js.map +0 -1
- package/dist/emulate/workos/routes/connections.d.ts +0 -2
- package/dist/emulate/workos/routes/connections.js +0 -73
- package/dist/emulate/workos/routes/connections.js.map +0 -1
- package/dist/emulate/workos/routes/data-integrations.d.ts +0 -2
- package/dist/emulate/workos/routes/data-integrations.js +0 -55
- package/dist/emulate/workos/routes/data-integrations.js.map +0 -1
- package/dist/emulate/workos/routes/directories.d.ts +0 -2
- package/dist/emulate/workos/routes/directories.js +0 -90
- package/dist/emulate/workos/routes/directories.js.map +0 -1
- package/dist/emulate/workos/routes/email-verification.d.ts +0 -2
- package/dist/emulate/workos/routes/email-verification.js +0 -49
- package/dist/emulate/workos/routes/email-verification.js.map +0 -1
- package/dist/emulate/workos/routes/events.d.ts +0 -2
- package/dist/emulate/workos/routes/events.js +0 -18
- package/dist/emulate/workos/routes/events.js.map +0 -1
- package/dist/emulate/workos/routes/feature-flags.d.ts +0 -2
- package/dist/emulate/workos/routes/feature-flags.js +0 -103
- package/dist/emulate/workos/routes/feature-flags.js.map +0 -1
- package/dist/emulate/workos/routes/invitations.d.ts +0 -2
- package/dist/emulate/workos/routes/invitations.js +0 -122
- package/dist/emulate/workos/routes/invitations.js.map +0 -1
- package/dist/emulate/workos/routes/legacy-mfa.d.ts +0 -2
- package/dist/emulate/workos/routes/legacy-mfa.js +0 -75
- package/dist/emulate/workos/routes/legacy-mfa.js.map +0 -1
- package/dist/emulate/workos/routes/magic-auth.d.ts +0 -2
- package/dist/emulate/workos/routes/magic-auth.js +0 -32
- package/dist/emulate/workos/routes/magic-auth.js.map +0 -1
- package/dist/emulate/workos/routes/memberships.d.ts +0 -2
- package/dist/emulate/workos/routes/memberships.js +0 -114
- package/dist/emulate/workos/routes/memberships.js.map +0 -1
- package/dist/emulate/workos/routes/organization-domains.d.ts +0 -2
- package/dist/emulate/workos/routes/organization-domains.js +0 -58
- package/dist/emulate/workos/routes/organization-domains.js.map +0 -1
- package/dist/emulate/workos/routes/organizations.d.ts +0 -2
- package/dist/emulate/workos/routes/organizations.js +0 -131
- package/dist/emulate/workos/routes/organizations.js.map +0 -1
- package/dist/emulate/workos/routes/password-reset.d.ts +0 -2
- package/dist/emulate/workos/routes/password-reset.js +0 -61
- package/dist/emulate/workos/routes/password-reset.js.map +0 -1
- package/dist/emulate/workos/routes/pipes.d.ts +0 -2
- package/dist/emulate/workos/routes/pipes.js +0 -82
- package/dist/emulate/workos/routes/pipes.js.map +0 -1
- package/dist/emulate/workos/routes/portal.d.ts +0 -2
- package/dist/emulate/workos/routes/portal.js +0 -18
- package/dist/emulate/workos/routes/portal.js.map +0 -1
- package/dist/emulate/workos/routes/radar.d.ts +0 -2
- package/dist/emulate/workos/routes/radar.js +0 -41
- package/dist/emulate/workos/routes/radar.js.map +0 -1
- package/dist/emulate/workos/routes/sessions.d.ts +0 -2
- package/dist/emulate/workos/routes/sessions.js +0 -51
- package/dist/emulate/workos/routes/sessions.js.map +0 -1
- package/dist/emulate/workos/routes/sso.d.ts +0 -2
- package/dist/emulate/workos/routes/sso.js +0 -161
- package/dist/emulate/workos/routes/sso.js.map +0 -1
- package/dist/emulate/workos/routes/user-features.d.ts +0 -2
- package/dist/emulate/workos/routes/user-features.js +0 -50
- package/dist/emulate/workos/routes/user-features.js.map +0 -1
- package/dist/emulate/workos/routes/users.d.ts +0 -2
- package/dist/emulate/workos/routes/users.js +0 -129
- package/dist/emulate/workos/routes/users.js.map +0 -1
- package/dist/emulate/workos/routes/webhook-endpoints.d.ts +0 -2
- package/dist/emulate/workos/routes/webhook-endpoints.js +0 -67
- package/dist/emulate/workos/routes/webhook-endpoints.js.map +0 -1
- package/dist/emulate/workos/routes/widgets.d.ts +0 -2
- package/dist/emulate/workos/routes/widgets.js +0 -27
- package/dist/emulate/workos/routes/widgets.js.map +0 -1
- package/dist/emulate/workos/store.d.ts +0 -48
- package/dist/emulate/workos/store.js +0 -102
- package/dist/emulate/workos/store.js.map +0 -1
- package/dist/emulate/workos/webhook-signer.d.ts +0 -1
- package/dist/emulate/workos/webhook-signer.js +0 -8
- package/dist/emulate/workos/webhook-signer.js.map +0 -1
- package/dist/gen-routes-lib.spec.ts +0 -659
- package/dist/gen-routes-lib.ts +0 -647
- package/dist/gen-routes.ts +0 -96
- 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 -90
- 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 -53
- 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 -146
- 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 -84
- package/dist/lib/adapters/cli-adapter.js +0 -525
- 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 -73
- package/dist/lib/adapters/headless-adapter.js +0 -310
- 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 -826
- 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 -36
- 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/config-store.d.ts +0 -50
- package/dist/lib/config-store.js +0 -269
- 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 -43
- package/dist/lib/constants.js +0 -42
- 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 -215
- package/dist/lib/events.js +0 -19
- package/dist/lib/events.js.map +0 -1
- package/dist/lib/framework-config.d.ts +0 -127
- 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 -556
- package/dist/lib/installer-core.js +0 -1115
- package/dist/lib/installer-core.js.map +0 -1
- package/dist/lib/installer-core.types.d.ts +0 -160
- 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 -39
- package/dist/lib/mcp-clients.js +0 -284
- package/dist/lib/mcp-clients.js.map +0 -1
- package/dist/lib/mcp-notice.d.ts +0 -72
- package/dist/lib/mcp-notice.js +0 -275
- package/dist/lib/mcp-notice.js.map +0 -1
- package/dist/lib/port-detection.d.ts +0 -7
- package/dist/lib/port-detection.js +0 -238
- 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 -115
- package/dist/lib/preferences.js +0 -201
- 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 -522
- 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 -59
- 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 -77
- 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 -77
- 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 -105
- 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 -684
- 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 -142
- 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 -32
- package/dist/run.js +0 -54
- 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 -57
- 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 -33
- package/dist/utils/box.js +0 -102
- package/dist/utils/box.js.map +0 -1
- package/dist/utils/clack-utils.d.ts +0 -97
- package/dist/utils/clack-utils.js +0 -422
- package/dist/utils/clack-utils.js.map +0 -1
- package/dist/utils/clack.d.ts +0 -5
- package/dist/utils/clack.js +0 -34
- package/dist/utils/clack.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 -32
- package/dist/utils/cli-symbols.js +0 -46
- 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 -1466
- 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 -37
- package/dist/utils/recovery-hints.js +0 -80
- 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 -18
- package/dist/utils/summary-box.js +0 -148
- 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 -113
- package/dist/utils/types.js +0 -2
- package/dist/utils/types.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
package/dist/lib/mcp-notice.js
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP-install onboarding surfaces + their shared gate state.
|
|
3
|
-
*
|
|
4
|
-
* One module owns all automatic-ask state so the install-flow prompt and the
|
|
5
|
-
* one-time banner can't drift apart. The decline contract is absolute: any
|
|
6
|
-
* explicit "no" records `promptDeclined` and no automatic surface ever asks
|
|
7
|
-
* again — `workos mcp install` stays available manually.
|
|
8
|
-
*
|
|
9
|
-
* Mirrors telemetry-notice.ts: persisted shown/declined state in the plain
|
|
10
|
-
* prefs store, mode-gated display, and a never-throws contract so a notice can
|
|
11
|
-
* never block or fail a command. The mode gate is the CLI's interaction-mode
|
|
12
|
-
* system (isPromptAllowed / isHumanMode), which already folds in CI markers,
|
|
13
|
-
* agent markers, and TTY state — non-TTY safety comes from using it.
|
|
14
|
-
*/
|
|
15
|
-
import chalk from 'chalk';
|
|
16
|
-
import clack from '../utils/clack.js';
|
|
17
|
-
import { isHumanMode, isPromptAllowed } from '../utils/interaction-mode.js';
|
|
18
|
-
import { isJsonMode } from '../utils/output.js';
|
|
19
|
-
import { renderStderrBox } from '../utils/box.js';
|
|
20
|
-
import { formatWorkOSCommand } from '../utils/command-invocation.js';
|
|
21
|
-
import { analytics } from '../utils/analytics.js';
|
|
22
|
-
import { loadPreferences, savePreferences } from './preferences.js';
|
|
23
|
-
import { detectMcpClients } from './mcp-clients.js';
|
|
24
|
-
import { hasStartupNoticeShown, markStartupNoticeShown } from './startup-notice-gate.js';
|
|
25
|
-
/**
|
|
26
|
-
* Ceiling on the whole install-flow offer so a wedged prompt can never hold up
|
|
27
|
-
* `workos install`. The deadline actively aborts the pending clack prompt (via
|
|
28
|
-
* AbortSignal) — clack's cancel path releases stdin and restores raw mode, so
|
|
29
|
-
* the process can actually exit; a race alone would leave the prompt's stdin
|
|
30
|
-
* handle keeping the event loop alive. Mirrors login.ts's
|
|
31
|
-
* SKILL_INSTALL_TIMEOUT_MS.
|
|
32
|
-
*/
|
|
33
|
-
export const MCP_OFFER_TIMEOUT_MS = 30 * 1000;
|
|
34
|
-
let bannerShownThisSession = false;
|
|
35
|
-
/** Human phrasing for each install outcome shown in the accept matrix. */
|
|
36
|
-
const OUTCOME_LABEL = {
|
|
37
|
-
installed: 'installed',
|
|
38
|
-
'already-installed': 'already installed',
|
|
39
|
-
removed: 'removed',
|
|
40
|
-
'not-installed': 'not installed',
|
|
41
|
-
skipped: 'skipped',
|
|
42
|
-
failed: 'failed',
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Read the persisted automatic-ask state. Never throws — a missing/corrupt
|
|
46
|
-
* prefs file degrades to "nothing recorded" so gating still works in-memory.
|
|
47
|
-
*/
|
|
48
|
-
export async function getMcpAskState() {
|
|
49
|
-
try {
|
|
50
|
-
const prefs = await loadPreferences();
|
|
51
|
-
return {
|
|
52
|
-
declined: prefs.mcp?.promptDeclined === true,
|
|
53
|
-
bannerShown: Boolean(prefs.mcp?.bannerShownAt),
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
return { declined: false, bannerShown: false };
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Record an explicit decline. Absolute and permanent for automatic surfaces.
|
|
62
|
-
* Write failures are swallowed: gating degrades to per-run memory, never
|
|
63
|
-
* crashes a command.
|
|
64
|
-
*/
|
|
65
|
-
export async function recordMcpDeclined() {
|
|
66
|
-
try {
|
|
67
|
-
savePreferences({ mcp: { promptDeclined: true } });
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
// Swallow — a read-only prefs file must never break a command.
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/** Record that the one-time banner was shown, stamping the current time. */
|
|
74
|
-
export async function recordMcpBannerShown() {
|
|
75
|
-
try {
|
|
76
|
-
savePreferences({ mcp: { bannerShownAt: new Date().toISOString() } });
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
// Swallow — see recordMcpDeclined.
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* The detected agents that would actually receive an install: available on this
|
|
84
|
-
* machine AND missing the WorkOS server. Empty when there is nothing to offer.
|
|
85
|
-
* Never throws — detection failure yields an empty set.
|
|
86
|
-
*/
|
|
87
|
-
async function detectInstallTargets() {
|
|
88
|
-
try {
|
|
89
|
-
const clients = await detectMcpClients();
|
|
90
|
-
if (clients.length === 0)
|
|
91
|
-
return [];
|
|
92
|
-
const installed = await Promise.all(clients.map((c) => c.isInstalled()));
|
|
93
|
-
return clients.filter((_, i) => !installed[i]);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
return [];
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Would an automatic ask be appropriate right now? True only when the user has
|
|
101
|
-
* not declined AND at least one detected agent lacks the server. Does NOT gate
|
|
102
|
-
* on interaction mode — callers add that (isPromptAllowed for the prompt,
|
|
103
|
-
* isHumanMode for the banner). Checks `declined` first so declined machines
|
|
104
|
-
* never pay for the client shell-outs.
|
|
105
|
-
*/
|
|
106
|
-
export async function isAutoAskEligible() {
|
|
107
|
-
const { declined } = await getMcpAskState();
|
|
108
|
-
if (declined)
|
|
109
|
-
return false;
|
|
110
|
-
const targets = await detectInstallTargets();
|
|
111
|
-
return targets.length > 0;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* One-time stderr banner nudging the user toward `workos mcp install`. Shown at
|
|
115
|
-
* most once per machine, only on a normal human-mode run, and never when an
|
|
116
|
-
* earlier startup notice already fired this run (telemetry notice and unclaimed
|
|
117
|
-
* warning take precedence). Records `bannerShownAt` before printing —
|
|
118
|
-
* shown-once beats seen-once (a lost banner is fine; a nag loop is not). Never
|
|
119
|
-
* throws.
|
|
120
|
-
*/
|
|
121
|
-
export async function maybeShowMcpNotice() {
|
|
122
|
-
try {
|
|
123
|
-
if (bannerShownThisSession)
|
|
124
|
-
return;
|
|
125
|
-
if (!isHumanMode())
|
|
126
|
-
return; // suppress in agent / CI / non-TTY
|
|
127
|
-
if (isJsonMode())
|
|
128
|
-
return; // never on the machine-readable path
|
|
129
|
-
if (hasStartupNoticeShown())
|
|
130
|
-
return; // one-notice-per-run cap; telemetry/unclaimed win
|
|
131
|
-
const { bannerShown } = await getMcpAskState();
|
|
132
|
-
if (bannerShown)
|
|
133
|
-
return; // already shown once, ever
|
|
134
|
-
if (!(await isAutoAskEligible()))
|
|
135
|
-
return; // declined, or nothing to offer
|
|
136
|
-
// Claim the slot + persist BEFORE printing: a lost banner beats a nag loop.
|
|
137
|
-
bannerShownThisSession = true;
|
|
138
|
-
markStartupNoticeShown();
|
|
139
|
-
await recordMcpBannerShown();
|
|
140
|
-
// Impression event. Queued (not capture()d) so it rides the CLI's final
|
|
141
|
-
// flush; capture() only folds session tags and no session exists here.
|
|
142
|
-
analytics.emitCommandEvent('mcp offer', 0, true, {
|
|
143
|
-
extraAttributes: { 'mcp.entry_point': 'banner', 'mcp.shown': true },
|
|
144
|
-
});
|
|
145
|
-
const cmd = chalk.cyan(formatWorkOSCommand('mcp install'));
|
|
146
|
-
const inner = ` ${chalk.cyan('ℹ')} New: connect your coding agent to WorkOS. Run ${cmd} to add the WorkOS MCP server (Claude Code, Codex, Cursor). `;
|
|
147
|
-
renderStderrBox(inner, chalk.cyan);
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
// Never block command startup.
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
/** Emit the per-agent install matrix (human mode) without ever exiting. */
|
|
154
|
-
function printInstallMatrix(results) {
|
|
155
|
-
for (const r of results) {
|
|
156
|
-
const line = `${r.displayName}: ${OUTCOME_LABEL[r.outcome]}`;
|
|
157
|
-
if (r.outcome === 'failed') {
|
|
158
|
-
clack.log.error(r.error ? `${line} — ${r.error}` : line);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
clack.log.success(line);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* The real install-flow offer. Self-gating: renders nothing unless prompting is
|
|
167
|
-
* allowed, the user hasn't declined, and there is at least one agent to install
|
|
168
|
-
* to. On yes: install + print the matrix + emit the adoption event. On explicit
|
|
169
|
-
* no: record the decline + emit (a decline is an adoption signal). On cancel
|
|
170
|
-
* (ctrl-C): skip silently without recording — a cancel is not a decline.
|
|
171
|
-
*/
|
|
172
|
-
async function offerMcpInstall(signal) {
|
|
173
|
-
if (!isPromptAllowed())
|
|
174
|
-
return; // the entire mode gate (CI / agent / non-TTY)
|
|
175
|
-
if (isJsonMode())
|
|
176
|
-
return; // never prompt on the machine-readable path (e.g. `install --json` on a TTY)
|
|
177
|
-
const { declined } = await getMcpAskState();
|
|
178
|
-
if (declined)
|
|
179
|
-
return; // decline is absolute
|
|
180
|
-
const targets = await detectInstallTargets();
|
|
181
|
-
if (targets.length === 0)
|
|
182
|
-
return; // nothing to offer
|
|
183
|
-
const names = targets.map((t) => t.displayName).join(', ');
|
|
184
|
-
const offerStartedAt = Date.now();
|
|
185
|
-
// The deadline signal aborts a hung/unanswered prompt: clack resolves it as
|
|
186
|
-
// a cancel and releases stdin so the process can exit.
|
|
187
|
-
const answer = await clack.confirm({
|
|
188
|
-
message: `Add the WorkOS MCP server to ${names}? Your coding agent gets tools to manage WorkOS resources (you'll authorize via OAuth on first use).`,
|
|
189
|
-
signal,
|
|
190
|
-
});
|
|
191
|
-
// Cancel (ctrl-C or deadline abort) is not a decline — skip silently, ask
|
|
192
|
-
// again next time.
|
|
193
|
-
if (clack.isCancel(answer))
|
|
194
|
-
return;
|
|
195
|
-
// Adoption events are queued command events, NOT capture(): the installer
|
|
196
|
-
// session has already shut down by the time this offer runs (run-with-core
|
|
197
|
-
// fires session.end in its finally), so folded tags would never ship. A
|
|
198
|
-
// queued event rides the CLI's unconditional final flush (bin.ts) and the
|
|
199
|
-
// store-forward exit handler covers anything the flush misses.
|
|
200
|
-
if (!answer) {
|
|
201
|
-
// Record the decline BEFORE anything else so a later crash can't re-ask.
|
|
202
|
-
await recordMcpDeclined();
|
|
203
|
-
// A decline is a completed interaction, not an error: success stays true.
|
|
204
|
-
analytics.emitCommandEvent('mcp offer', Date.now() - offerStartedAt, true, {
|
|
205
|
-
extraAttributes: {
|
|
206
|
-
'mcp.entry_point': 'install-flow',
|
|
207
|
-
'mcp.accepted': false,
|
|
208
|
-
'mcp.agents_installed': '',
|
|
209
|
-
'mcp.agents_failed': '',
|
|
210
|
-
},
|
|
211
|
-
});
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
// The user submitted right as the deadline fired: the outer flow has already
|
|
215
|
-
// moved on, so don't start install work it will never report on.
|
|
216
|
-
if (signal.aborted)
|
|
217
|
-
return;
|
|
218
|
-
const results = [];
|
|
219
|
-
for (const target of targets) {
|
|
220
|
-
results.push(await target.add());
|
|
221
|
-
}
|
|
222
|
-
printInstallMatrix(results);
|
|
223
|
-
const installed = results
|
|
224
|
-
.filter((r) => r.outcome === 'installed' || r.outcome === 'already-installed')
|
|
225
|
-
.map((r) => r.agent);
|
|
226
|
-
const failed = results.filter((r) => r.outcome === 'failed').map((r) => r.agent);
|
|
227
|
-
// success=false when any agent failed, so the offer surfaces as an error
|
|
228
|
-
// span while mcp.agents_failed carries which ones.
|
|
229
|
-
analytics.emitCommandEvent('mcp offer', Date.now() - offerStartedAt, failed.length === 0, {
|
|
230
|
-
extraAttributes: {
|
|
231
|
-
'mcp.entry_point': 'install-flow',
|
|
232
|
-
'mcp.accepted': true,
|
|
233
|
-
'mcp.agents_installed': installed.join(','),
|
|
234
|
-
'mcp.agents_failed': failed.join(','),
|
|
235
|
-
},
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Offer to install the WorkOS MCP server at the end of `workos install`.
|
|
240
|
-
*
|
|
241
|
-
* Wraps offerMcpInstall best-effort: a try/catch AND a 30s deadline so the
|
|
242
|
-
* offer can never throw into, wedge, or fail the install flow. The deadline
|
|
243
|
-
* aborts the pending prompt (AbortSignal → clack cancel, which releases stdin);
|
|
244
|
-
* the race is a backstop in case the flow is wedged somewhere that can't be
|
|
245
|
-
* aborted (client shell-outs are separately bounded by their exec timeouts).
|
|
246
|
-
* `workos install` has already succeeded by the time this runs.
|
|
247
|
-
*/
|
|
248
|
-
export async function maybeOfferMcpInstall(_opts) {
|
|
249
|
-
let timeoutHandle;
|
|
250
|
-
const deadline = new AbortController();
|
|
251
|
-
try {
|
|
252
|
-
const timeout = new Promise((resolve) => {
|
|
253
|
-
timeoutHandle = setTimeout(() => {
|
|
254
|
-
deadline.abort();
|
|
255
|
-
resolve();
|
|
256
|
-
}, MCP_OFFER_TIMEOUT_MS);
|
|
257
|
-
// Don't keep the event loop alive on this timer — the process should exit
|
|
258
|
-
// as soon as everything else settles.
|
|
259
|
-
timeoutHandle.unref?.();
|
|
260
|
-
});
|
|
261
|
-
await Promise.race([offerMcpInstall(deadline.signal), timeout]);
|
|
262
|
-
}
|
|
263
|
-
catch {
|
|
264
|
-
// The MCP offer must never fail or block `workos install`.
|
|
265
|
-
}
|
|
266
|
-
finally {
|
|
267
|
-
if (timeoutHandle)
|
|
268
|
-
clearTimeout(timeoutHandle);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
/** Reset per-session banner state (for testing). */
|
|
272
|
-
export function resetMcpNoticeState() {
|
|
273
|
-
bannerShownThisSession = false;
|
|
274
|
-
}
|
|
275
|
-
//# sourceMappingURL=mcp-notice.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-notice.js","sourceRoot":"","sources":["../../src/lib/mcp-notice.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP-install onboarding surfaces + their shared gate state.\n *\n * One module owns all automatic-ask state so the install-flow prompt and the\n * one-time banner can't drift apart. The decline contract is absolute: any\n * explicit \"no\" records `promptDeclined` and no automatic surface ever asks\n * again — `workos mcp install` stays available manually.\n *\n * Mirrors telemetry-notice.ts: persisted shown/declined state in the plain\n * prefs store, mode-gated display, and a never-throws contract so a notice can\n * never block or fail a command. The mode gate is the CLI's interaction-mode\n * system (isPromptAllowed / isHumanMode), which already folds in CI markers,\n * agent markers, and TTY state — non-TTY safety comes from using it.\n */\n\nimport chalk from 'chalk';\nimport clack from '../utils/clack.js';\nimport { isHumanMode, isPromptAllowed } from '../utils/interaction-mode.js';\nimport { isJsonMode } from '../utils/output.js';\nimport { renderStderrBox } from '../utils/box.js';\nimport { formatWorkOSCommand } from '../utils/command-invocation.js';\nimport { analytics } from '../utils/analytics.js';\nimport { loadPreferences, savePreferences } from './preferences.js';\nimport { detectMcpClients, type McpClientResult, type McpClientTarget } from './mcp-clients.js';\nimport { hasStartupNoticeShown, markStartupNoticeShown } from './startup-notice-gate.js';\n\nexport type McpAskState = { declined: boolean; bannerShown: boolean };\n\n/**\n * Ceiling on the whole install-flow offer so a wedged prompt can never hold up\n * `workos install`. The deadline actively aborts the pending clack prompt (via\n * AbortSignal) — clack's cancel path releases stdin and restores raw mode, so\n * the process can actually exit; a race alone would leave the prompt's stdin\n * handle keeping the event loop alive. Mirrors login.ts's\n * SKILL_INSTALL_TIMEOUT_MS.\n */\nexport const MCP_OFFER_TIMEOUT_MS = 30 * 1000;\n\nlet bannerShownThisSession = false;\n\n/** Human phrasing for each install outcome shown in the accept matrix. */\nconst OUTCOME_LABEL: Record<McpClientResult['outcome'], string> = {\n installed: 'installed',\n 'already-installed': 'already installed',\n removed: 'removed',\n 'not-installed': 'not installed',\n skipped: 'skipped',\n failed: 'failed',\n};\n\n/**\n * Read the persisted automatic-ask state. Never throws — a missing/corrupt\n * prefs file degrades to \"nothing recorded\" so gating still works in-memory.\n */\nexport async function getMcpAskState(): Promise<McpAskState> {\n try {\n const prefs = await loadPreferences();\n return {\n declined: prefs.mcp?.promptDeclined === true,\n bannerShown: Boolean(prefs.mcp?.bannerShownAt),\n };\n } catch {\n return { declined: false, bannerShown: false };\n }\n}\n\n/**\n * Record an explicit decline. Absolute and permanent for automatic surfaces.\n * Write failures are swallowed: gating degrades to per-run memory, never\n * crashes a command.\n */\nexport async function recordMcpDeclined(): Promise<void> {\n try {\n savePreferences({ mcp: { promptDeclined: true } });\n } catch {\n // Swallow — a read-only prefs file must never break a command.\n }\n}\n\n/** Record that the one-time banner was shown, stamping the current time. */\nexport async function recordMcpBannerShown(): Promise<void> {\n try {\n savePreferences({ mcp: { bannerShownAt: new Date().toISOString() } });\n } catch {\n // Swallow — see recordMcpDeclined.\n }\n}\n\n/**\n * The detected agents that would actually receive an install: available on this\n * machine AND missing the WorkOS server. Empty when there is nothing to offer.\n * Never throws — detection failure yields an empty set.\n */\nasync function detectInstallTargets(): Promise<McpClientTarget[]> {\n try {\n const clients = await detectMcpClients();\n if (clients.length === 0) return [];\n const installed = await Promise.all(clients.map((c) => c.isInstalled()));\n return clients.filter((_, i) => !installed[i]);\n } catch {\n return [];\n }\n}\n\n/**\n * Would an automatic ask be appropriate right now? True only when the user has\n * not declined AND at least one detected agent lacks the server. Does NOT gate\n * on interaction mode — callers add that (isPromptAllowed for the prompt,\n * isHumanMode for the banner). Checks `declined` first so declined machines\n * never pay for the client shell-outs.\n */\nexport async function isAutoAskEligible(): Promise<boolean> {\n const { declined } = await getMcpAskState();\n if (declined) return false;\n const targets = await detectInstallTargets();\n return targets.length > 0;\n}\n\n/**\n * One-time stderr banner nudging the user toward `workos mcp install`. Shown at\n * most once per machine, only on a normal human-mode run, and never when an\n * earlier startup notice already fired this run (telemetry notice and unclaimed\n * warning take precedence). Records `bannerShownAt` before printing —\n * shown-once beats seen-once (a lost banner is fine; a nag loop is not). Never\n * throws.\n */\nexport async function maybeShowMcpNotice(): Promise<void> {\n try {\n if (bannerShownThisSession) return;\n if (!isHumanMode()) return; // suppress in agent / CI / non-TTY\n if (isJsonMode()) return; // never on the machine-readable path\n if (hasStartupNoticeShown()) return; // one-notice-per-run cap; telemetry/unclaimed win\n const { bannerShown } = await getMcpAskState();\n if (bannerShown) return; // already shown once, ever\n if (!(await isAutoAskEligible())) return; // declined, or nothing to offer\n\n // Claim the slot + persist BEFORE printing: a lost banner beats a nag loop.\n bannerShownThisSession = true;\n markStartupNoticeShown();\n await recordMcpBannerShown();\n\n // Impression event. Queued (not capture()d) so it rides the CLI's final\n // flush; capture() only folds session tags and no session exists here.\n analytics.emitCommandEvent('mcp offer', 0, true, {\n extraAttributes: { 'mcp.entry_point': 'banner', 'mcp.shown': true },\n });\n\n const cmd = chalk.cyan(formatWorkOSCommand('mcp install'));\n const inner = ` ${chalk.cyan('ℹ')} New: connect your coding agent to WorkOS. Run ${cmd} to add the WorkOS MCP server (Claude Code, Codex, Cursor). `;\n renderStderrBox(inner, chalk.cyan);\n } catch {\n // Never block command startup.\n }\n}\n\n/** Emit the per-agent install matrix (human mode) without ever exiting. */\nfunction printInstallMatrix(results: McpClientResult[]): void {\n for (const r of results) {\n const line = `${r.displayName}: ${OUTCOME_LABEL[r.outcome]}`;\n if (r.outcome === 'failed') {\n clack.log.error(r.error ? `${line} — ${r.error}` : line);\n } else {\n clack.log.success(line);\n }\n }\n}\n\n/**\n * The real install-flow offer. Self-gating: renders nothing unless prompting is\n * allowed, the user hasn't declined, and there is at least one agent to install\n * to. On yes: install + print the matrix + emit the adoption event. On explicit\n * no: record the decline + emit (a decline is an adoption signal). On cancel\n * (ctrl-C): skip silently without recording — a cancel is not a decline.\n */\nasync function offerMcpInstall(signal: AbortSignal): Promise<void> {\n if (!isPromptAllowed()) return; // the entire mode gate (CI / agent / non-TTY)\n if (isJsonMode()) return; // never prompt on the machine-readable path (e.g. `install --json` on a TTY)\n const { declined } = await getMcpAskState();\n if (declined) return; // decline is absolute\n const targets = await detectInstallTargets();\n if (targets.length === 0) return; // nothing to offer\n\n const names = targets.map((t) => t.displayName).join(', ');\n const offerStartedAt = Date.now();\n // The deadline signal aborts a hung/unanswered prompt: clack resolves it as\n // a cancel and releases stdin so the process can exit.\n const answer = await clack.confirm({\n message: `Add the WorkOS MCP server to ${names}? Your coding agent gets tools to manage WorkOS resources (you'll authorize via OAuth on first use).`,\n signal,\n });\n\n // Cancel (ctrl-C or deadline abort) is not a decline — skip silently, ask\n // again next time.\n if (clack.isCancel(answer)) return;\n\n // Adoption events are queued command events, NOT capture(): the installer\n // session has already shut down by the time this offer runs (run-with-core\n // fires session.end in its finally), so folded tags would never ship. A\n // queued event rides the CLI's unconditional final flush (bin.ts) and the\n // store-forward exit handler covers anything the flush misses.\n if (!answer) {\n // Record the decline BEFORE anything else so a later crash can't re-ask.\n await recordMcpDeclined();\n // A decline is a completed interaction, not an error: success stays true.\n analytics.emitCommandEvent('mcp offer', Date.now() - offerStartedAt, true, {\n extraAttributes: {\n 'mcp.entry_point': 'install-flow',\n 'mcp.accepted': false,\n 'mcp.agents_installed': '',\n 'mcp.agents_failed': '',\n },\n });\n return;\n }\n\n // The user submitted right as the deadline fired: the outer flow has already\n // moved on, so don't start install work it will never report on.\n if (signal.aborted) return;\n\n const results: McpClientResult[] = [];\n for (const target of targets) {\n results.push(await target.add());\n }\n printInstallMatrix(results);\n\n const installed = results\n .filter((r) => r.outcome === 'installed' || r.outcome === 'already-installed')\n .map((r) => r.agent);\n const failed = results.filter((r) => r.outcome === 'failed').map((r) => r.agent);\n // success=false when any agent failed, so the offer surfaces as an error\n // span while mcp.agents_failed carries which ones.\n analytics.emitCommandEvent('mcp offer', Date.now() - offerStartedAt, failed.length === 0, {\n extraAttributes: {\n 'mcp.entry_point': 'install-flow',\n 'mcp.accepted': true,\n 'mcp.agents_installed': installed.join(','),\n 'mcp.agents_failed': failed.join(','),\n },\n });\n}\n\n/**\n * Offer to install the WorkOS MCP server at the end of `workos install`.\n *\n * Wraps offerMcpInstall best-effort: a try/catch AND a 30s deadline so the\n * offer can never throw into, wedge, or fail the install flow. The deadline\n * aborts the pending prompt (AbortSignal → clack cancel, which releases stdin);\n * the race is a backstop in case the flow is wedged somewhere that can't be\n * aborted (client shell-outs are separately bounded by their exec timeouts).\n * `workos install` has already succeeded by the time this runs.\n */\nexport async function maybeOfferMcpInstall(_opts: { entryPoint: 'install-flow' }): Promise<void> {\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n const deadline = new AbortController();\n try {\n const timeout = new Promise<void>((resolve) => {\n timeoutHandle = setTimeout(() => {\n deadline.abort();\n resolve();\n }, MCP_OFFER_TIMEOUT_MS);\n // Don't keep the event loop alive on this timer — the process should exit\n // as soon as everything else settles.\n timeoutHandle.unref?.();\n });\n await Promise.race([offerMcpInstall(deadline.signal), timeout]);\n } catch {\n // The MCP offer must never fail or block `workos install`.\n } finally {\n if (timeoutHandle) clearTimeout(timeoutHandle);\n }\n}\n\n/** Reset per-session banner state (for testing). */\nexport function resetMcpNoticeState(): void {\n bannerShownThisSession = false;\n}\n"]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Integration } from './constants.js';
|
|
2
|
-
export declare function getCallbackPath(integration: Integration): string;
|
|
3
|
-
/**
|
|
4
|
-
* Detect the dev server port for a framework.
|
|
5
|
-
* Checks config files first, falls back to framework default.
|
|
6
|
-
*/
|
|
7
|
-
export declare function detectPort(integration: Integration, installDir: string): number;
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { getConfig } from './settings.js';
|
|
4
|
-
const settings = getConfig();
|
|
5
|
-
const INTEGRATION_TO_SETTINGS_KEY = {
|
|
6
|
-
nextjs: 'nextjs',
|
|
7
|
-
react: 'react',
|
|
8
|
-
'tanstack-start': 'tanstackStart',
|
|
9
|
-
'react-router': 'reactRouter',
|
|
10
|
-
'vanilla-js': 'vanillaJs',
|
|
11
|
-
python: 'python',
|
|
12
|
-
ruby: 'ruby',
|
|
13
|
-
php: 'php',
|
|
14
|
-
'php-laravel': 'phpLaravel',
|
|
15
|
-
go: 'go',
|
|
16
|
-
dotnet: 'dotnet',
|
|
17
|
-
elixir: 'elixir',
|
|
18
|
-
kotlin: 'kotlin',
|
|
19
|
-
};
|
|
20
|
-
const DEFAULT_PORT = 3000;
|
|
21
|
-
const DEFAULT_CALLBACK_PATH = '/auth/callback';
|
|
22
|
-
function getDefaultPort(integration) {
|
|
23
|
-
const settingsKey = INTEGRATION_TO_SETTINGS_KEY[integration];
|
|
24
|
-
return settings.frameworks[settingsKey]?.port ?? DEFAULT_PORT;
|
|
25
|
-
}
|
|
26
|
-
export function getCallbackPath(integration) {
|
|
27
|
-
const settingsKey = INTEGRATION_TO_SETTINGS_KEY[integration];
|
|
28
|
-
return settings.frameworks[settingsKey]?.callbackPath ?? DEFAULT_CALLBACK_PATH;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Parse port from Vite config file.
|
|
32
|
-
* Looks for server.port in vite.config.{ts,js,mjs}
|
|
33
|
-
*/
|
|
34
|
-
function parseViteConfigPort(configPath) {
|
|
35
|
-
try {
|
|
36
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
37
|
-
// Match: port: 3000 or port: "3000" or port: '3000'
|
|
38
|
-
const portMatch = content.match(/port\s*:\s*['"]?(\d+)['"]?/);
|
|
39
|
-
if (portMatch) {
|
|
40
|
-
return parseInt(portMatch[1], 10);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
// File doesn't exist or can't be read
|
|
45
|
-
}
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Parse port from Next.js package.json scripts.
|
|
50
|
-
* Next.js uses: "dev": "next dev -p 4000" or --port 4000
|
|
51
|
-
*/
|
|
52
|
-
function parseNextConfigPort(installDir) {
|
|
53
|
-
try {
|
|
54
|
-
const packageJsonPath = join(installDir, 'package.json');
|
|
55
|
-
const content = fs.readFileSync(packageJsonPath, 'utf-8');
|
|
56
|
-
const packageJson = JSON.parse(content);
|
|
57
|
-
const devScript = packageJson.scripts?.dev || '';
|
|
58
|
-
// Match: -p 4000, --port 4000, --port=4000
|
|
59
|
-
const portMatch = devScript.match(/-p\s+(\d+)|--port[=\s]+(\d+)/);
|
|
60
|
-
if (portMatch) {
|
|
61
|
-
return parseInt(portMatch[1] || portMatch[2], 10);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// Can't read package.json
|
|
66
|
-
}
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Parse port from TanStack Start app.config.ts.
|
|
71
|
-
* Uses Vinxi: server: { port: N }
|
|
72
|
-
*/
|
|
73
|
-
function parseTanStackPort(installDir) {
|
|
74
|
-
const configPaths = [join(installDir, 'app.config.ts'), join(installDir, 'app.config.js')];
|
|
75
|
-
for (const configPath of configPaths) {
|
|
76
|
-
try {
|
|
77
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
78
|
-
// Match server config with port
|
|
79
|
-
const portMatch = content.match(/server\s*:\s*\{[^}]*port\s*:\s*(\d+)/);
|
|
80
|
-
if (portMatch) {
|
|
81
|
-
return parseInt(portMatch[1], 10);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
// Config file doesn't exist
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Parse port from .NET Properties/launchSettings.json.
|
|
92
|
-
* VS/Rider scaffold: profiles[*].applicationUrl = "http://localhost:5000;https://localhost:5001"
|
|
93
|
-
*/
|
|
94
|
-
function parseDotnetPort(installDir) {
|
|
95
|
-
try {
|
|
96
|
-
const configPath = join(installDir, 'Properties', 'launchSettings.json');
|
|
97
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
98
|
-
const parsed = JSON.parse(content);
|
|
99
|
-
for (const profile of Object.values(parsed.profiles ?? {})) {
|
|
100
|
-
const match = profile.applicationUrl?.match(/http:\/\/[^:/]+:(\d+)/);
|
|
101
|
-
if (match)
|
|
102
|
-
return parseInt(match[1], 10);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// File doesn't exist or can't parse
|
|
107
|
-
}
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Parse port from Phoenix config/dev.exs or config/runtime.exs.
|
|
112
|
-
* Looks for `port: NNNN` — typically inside `http: [...]` but a bare regex is fine.
|
|
113
|
-
*/
|
|
114
|
-
function parseElixirPort(installDir) {
|
|
115
|
-
for (const relPath of ['config/dev.exs', 'config/runtime.exs']) {
|
|
116
|
-
try {
|
|
117
|
-
const content = fs.readFileSync(join(installDir, relPath), 'utf-8');
|
|
118
|
-
const match = content.match(/port:\s*(\d+)/);
|
|
119
|
-
if (match)
|
|
120
|
-
return parseInt(match[1], 10);
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
// skip
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Parse port from Spring Boot application.properties or application.yml.
|
|
130
|
-
* Both the default `src/main/resources/` location and a top-level file are checked.
|
|
131
|
-
*/
|
|
132
|
-
function parseKotlinPort(installDir) {
|
|
133
|
-
const propsPaths = [
|
|
134
|
-
join(installDir, 'src', 'main', 'resources', 'application.properties'),
|
|
135
|
-
join(installDir, 'application.properties'),
|
|
136
|
-
];
|
|
137
|
-
for (const propsPath of propsPaths) {
|
|
138
|
-
try {
|
|
139
|
-
const content = fs.readFileSync(propsPath, 'utf-8');
|
|
140
|
-
const match = content.match(/^server\.port\s*=\s*(\d+)/m);
|
|
141
|
-
if (match)
|
|
142
|
-
return parseInt(match[1], 10);
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
// skip
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
const ymlPaths = [
|
|
149
|
-
join(installDir, 'src', 'main', 'resources', 'application.yml'),
|
|
150
|
-
join(installDir, 'src', 'main', 'resources', 'application.yaml'),
|
|
151
|
-
join(installDir, 'application.yml'),
|
|
152
|
-
join(installDir, 'application.yaml'),
|
|
153
|
-
];
|
|
154
|
-
for (const ymlPath of ymlPaths) {
|
|
155
|
-
try {
|
|
156
|
-
const content = fs.readFileSync(ymlPath, 'utf-8');
|
|
157
|
-
// `server:\n port: 8080` — shallow YAML parse via regex
|
|
158
|
-
const match = content.match(/server\s*:\s*\n[^\S\n]+port\s*:\s*(\d+)/);
|
|
159
|
-
if (match)
|
|
160
|
-
return parseInt(match[1], 10);
|
|
161
|
-
}
|
|
162
|
-
catch {
|
|
163
|
-
// skip
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Parse port from Rails config/puma.rb.
|
|
170
|
-
* Common forms:
|
|
171
|
-
* port ENV.fetch("PORT") { 3000 }
|
|
172
|
-
* port ENV.fetch("PORT", 3000)
|
|
173
|
-
* port 3000
|
|
174
|
-
*/
|
|
175
|
-
function parseRubyPort(installDir) {
|
|
176
|
-
try {
|
|
177
|
-
const configPath = join(installDir, 'config', 'puma.rb');
|
|
178
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
179
|
-
const blockFetch = content.match(/port\s+ENV\.fetch\([^)]*\)\s*\{\s*(\d+)\s*\}/);
|
|
180
|
-
if (blockFetch)
|
|
181
|
-
return parseInt(blockFetch[1], 10);
|
|
182
|
-
const argFetch = content.match(/port\s+ENV\.fetch\([^,]+,\s*(\d+)\)/);
|
|
183
|
-
if (argFetch)
|
|
184
|
-
return parseInt(argFetch[1], 10);
|
|
185
|
-
const literal = content.match(/^\s*port\s+(\d+)/m);
|
|
186
|
-
if (literal)
|
|
187
|
-
return parseInt(literal[1], 10);
|
|
188
|
-
}
|
|
189
|
-
catch {
|
|
190
|
-
// skip
|
|
191
|
-
}
|
|
192
|
-
return null;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Detect the dev server port for a framework.
|
|
196
|
-
* Checks config files first, falls back to framework default.
|
|
197
|
-
*/
|
|
198
|
-
export function detectPort(integration, installDir) {
|
|
199
|
-
let detectedPort = null;
|
|
200
|
-
switch (integration) {
|
|
201
|
-
case 'nextjs':
|
|
202
|
-
detectedPort = parseNextConfigPort(installDir);
|
|
203
|
-
break;
|
|
204
|
-
case 'tanstack-start':
|
|
205
|
-
detectedPort = parseTanStackPort(installDir);
|
|
206
|
-
break;
|
|
207
|
-
case 'react':
|
|
208
|
-
case 'react-router':
|
|
209
|
-
case 'vanilla-js': {
|
|
210
|
-
// Vite-based frameworks
|
|
211
|
-
const viteConfigs = [
|
|
212
|
-
join(installDir, 'vite.config.ts'),
|
|
213
|
-
join(installDir, 'vite.config.js'),
|
|
214
|
-
join(installDir, 'vite.config.mjs'),
|
|
215
|
-
];
|
|
216
|
-
for (const configPath of viteConfigs) {
|
|
217
|
-
detectedPort = parseViteConfigPort(configPath);
|
|
218
|
-
if (detectedPort)
|
|
219
|
-
break;
|
|
220
|
-
}
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
case 'dotnet':
|
|
224
|
-
detectedPort = parseDotnetPort(installDir);
|
|
225
|
-
break;
|
|
226
|
-
case 'elixir':
|
|
227
|
-
detectedPort = parseElixirPort(installDir);
|
|
228
|
-
break;
|
|
229
|
-
case 'kotlin':
|
|
230
|
-
detectedPort = parseKotlinPort(installDir);
|
|
231
|
-
break;
|
|
232
|
-
case 'ruby':
|
|
233
|
-
detectedPort = parseRubyPort(installDir);
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
return detectedPort ?? getDefaultPort(integration);
|
|
237
|
-
}
|
|
238
|
-
//# sourceMappingURL=port-detection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"port-detection.js","sourceRoot":"","sources":["../../src/lib/port-detection.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport { join } from 'node:path';\nimport type { Integration } from './constants.js';\nimport { getConfig } from './settings.js';\n\nconst settings = getConfig();\n\nconst INTEGRATION_TO_SETTINGS_KEY: Record<string, string> = {\n nextjs: 'nextjs',\n react: 'react',\n 'tanstack-start': 'tanstackStart',\n 'react-router': 'reactRouter',\n 'vanilla-js': 'vanillaJs',\n python: 'python',\n ruby: 'ruby',\n php: 'php',\n 'php-laravel': 'phpLaravel',\n go: 'go',\n dotnet: 'dotnet',\n elixir: 'elixir',\n kotlin: 'kotlin',\n};\n\nconst DEFAULT_PORT = 3000;\nconst DEFAULT_CALLBACK_PATH = '/auth/callback';\n\nfunction getDefaultPort(integration: Integration): number {\n const settingsKey = INTEGRATION_TO_SETTINGS_KEY[integration];\n return settings.frameworks[settingsKey]?.port ?? DEFAULT_PORT;\n}\n\nexport function getCallbackPath(integration: Integration): string {\n const settingsKey = INTEGRATION_TO_SETTINGS_KEY[integration];\n return settings.frameworks[settingsKey]?.callbackPath ?? DEFAULT_CALLBACK_PATH;\n}\n\n/**\n * Parse port from Vite config file.\n * Looks for server.port in vite.config.{ts,js,mjs}\n */\nfunction parseViteConfigPort(configPath: string): number | null {\n try {\n const content = fs.readFileSync(configPath, 'utf-8');\n // Match: port: 3000 or port: \"3000\" or port: '3000'\n const portMatch = content.match(/port\\s*:\\s*['\"]?(\\d+)['\"]?/);\n if (portMatch) {\n return parseInt(portMatch[1], 10);\n }\n } catch {\n // File doesn't exist or can't be read\n }\n return null;\n}\n\n/**\n * Parse port from Next.js package.json scripts.\n * Next.js uses: \"dev\": \"next dev -p 4000\" or --port 4000\n */\nfunction parseNextConfigPort(installDir: string): number | null {\n try {\n const packageJsonPath = join(installDir, 'package.json');\n const content = fs.readFileSync(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(content);\n\n const devScript = packageJson.scripts?.dev || '';\n // Match: -p 4000, --port 4000, --port=4000\n const portMatch = devScript.match(/-p\\s+(\\d+)|--port[=\\s]+(\\d+)/);\n if (portMatch) {\n return parseInt(portMatch[1] || portMatch[2], 10);\n }\n } catch {\n // Can't read package.json\n }\n return null;\n}\n\n/**\n * Parse port from TanStack Start app.config.ts.\n * Uses Vinxi: server: { port: N }\n */\nfunction parseTanStackPort(installDir: string): number | null {\n const configPaths = [join(installDir, 'app.config.ts'), join(installDir, 'app.config.js')];\n\n for (const configPath of configPaths) {\n try {\n const content = fs.readFileSync(configPath, 'utf-8');\n // Match server config with port\n const portMatch = content.match(/server\\s*:\\s*\\{[^}]*port\\s*:\\s*(\\d+)/);\n if (portMatch) {\n return parseInt(portMatch[1], 10);\n }\n } catch {\n // Config file doesn't exist\n }\n }\n return null;\n}\n\n/**\n * Parse port from .NET Properties/launchSettings.json.\n * VS/Rider scaffold: profiles[*].applicationUrl = \"http://localhost:5000;https://localhost:5001\"\n */\nfunction parseDotnetPort(installDir: string): number | null {\n try {\n const configPath = join(installDir, 'Properties', 'launchSettings.json');\n const content = fs.readFileSync(configPath, 'utf-8');\n const parsed = JSON.parse(content) as { profiles?: Record<string, { applicationUrl?: string }> };\n for (const profile of Object.values(parsed.profiles ?? {})) {\n const match = profile.applicationUrl?.match(/http:\\/\\/[^:/]+:(\\d+)/);\n if (match) return parseInt(match[1], 10);\n }\n } catch {\n // File doesn't exist or can't parse\n }\n return null;\n}\n\n/**\n * Parse port from Phoenix config/dev.exs or config/runtime.exs.\n * Looks for `port: NNNN` — typically inside `http: [...]` but a bare regex is fine.\n */\nfunction parseElixirPort(installDir: string): number | null {\n for (const relPath of ['config/dev.exs', 'config/runtime.exs']) {\n try {\n const content = fs.readFileSync(join(installDir, relPath), 'utf-8');\n const match = content.match(/port:\\s*(\\d+)/);\n if (match) return parseInt(match[1], 10);\n } catch {\n // skip\n }\n }\n return null;\n}\n\n/**\n * Parse port from Spring Boot application.properties or application.yml.\n * Both the default `src/main/resources/` location and a top-level file are checked.\n */\nfunction parseKotlinPort(installDir: string): number | null {\n const propsPaths = [\n join(installDir, 'src', 'main', 'resources', 'application.properties'),\n join(installDir, 'application.properties'),\n ];\n for (const propsPath of propsPaths) {\n try {\n const content = fs.readFileSync(propsPath, 'utf-8');\n const match = content.match(/^server\\.port\\s*=\\s*(\\d+)/m);\n if (match) return parseInt(match[1], 10);\n } catch {\n // skip\n }\n }\n\n const ymlPaths = [\n join(installDir, 'src', 'main', 'resources', 'application.yml'),\n join(installDir, 'src', 'main', 'resources', 'application.yaml'),\n join(installDir, 'application.yml'),\n join(installDir, 'application.yaml'),\n ];\n for (const ymlPath of ymlPaths) {\n try {\n const content = fs.readFileSync(ymlPath, 'utf-8');\n // `server:\\n port: 8080` — shallow YAML parse via regex\n const match = content.match(/server\\s*:\\s*\\n[^\\S\\n]+port\\s*:\\s*(\\d+)/);\n if (match) return parseInt(match[1], 10);\n } catch {\n // skip\n }\n }\n return null;\n}\n\n/**\n * Parse port from Rails config/puma.rb.\n * Common forms:\n * port ENV.fetch(\"PORT\") { 3000 }\n * port ENV.fetch(\"PORT\", 3000)\n * port 3000\n */\nfunction parseRubyPort(installDir: string): number | null {\n try {\n const configPath = join(installDir, 'config', 'puma.rb');\n const content = fs.readFileSync(configPath, 'utf-8');\n const blockFetch = content.match(/port\\s+ENV\\.fetch\\([^)]*\\)\\s*\\{\\s*(\\d+)\\s*\\}/);\n if (blockFetch) return parseInt(blockFetch[1], 10);\n const argFetch = content.match(/port\\s+ENV\\.fetch\\([^,]+,\\s*(\\d+)\\)/);\n if (argFetch) return parseInt(argFetch[1], 10);\n const literal = content.match(/^\\s*port\\s+(\\d+)/m);\n if (literal) return parseInt(literal[1], 10);\n } catch {\n // skip\n }\n return null;\n}\n\n/**\n * Detect the dev server port for a framework.\n * Checks config files first, falls back to framework default.\n */\nexport function detectPort(integration: Integration, installDir: string): number {\n let detectedPort: number | null = null;\n\n switch (integration) {\n case 'nextjs':\n detectedPort = parseNextConfigPort(installDir);\n break;\n\n case 'tanstack-start':\n detectedPort = parseTanStackPort(installDir);\n break;\n\n case 'react':\n case 'react-router':\n case 'vanilla-js': {\n // Vite-based frameworks\n const viteConfigs = [\n join(installDir, 'vite.config.ts'),\n join(installDir, 'vite.config.js'),\n join(installDir, 'vite.config.mjs'),\n ];\n for (const configPath of viteConfigs) {\n detectedPort = parseViteConfigPort(configPath);\n if (detectedPort) break;\n }\n break;\n }\n\n case 'dotnet':\n detectedPort = parseDotnetPort(installDir);\n break;\n\n case 'elixir':\n detectedPort = parseElixirPort(installDir);\n break;\n\n case 'kotlin':\n detectedPort = parseKotlinPort(installDir);\n break;\n\n case 'ruby':\n detectedPort = parseRubyPort(installDir);\n break;\n }\n\n return detectedPort ?? getDefaultPort(integration);\n}\n"]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare function detectChanges(): {
|
|
2
|
-
hasChanges: boolean;
|
|
3
|
-
files: string[];
|
|
4
|
-
};
|
|
5
|
-
export declare function stageAndCommit(message: string, cwd: string): void;
|
|
6
|
-
export declare function pushBranch(cwd: string): void;
|
|
7
|
-
export declare function createPullRequest(title: string, body: string, cwd: string): string;
|
|
8
|
-
export declare function getManualPrInstructions(branch: string): string;
|
package/dist/lib/post-install.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from 'node:child_process';
|
|
2
|
-
import { writeFileSync, unlinkSync } from 'node:fs';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { getDefaultBranch, getUncommittedFiles } from '../utils/git-utils.js';
|
|
6
|
-
export function detectChanges() {
|
|
7
|
-
const files = getUncommittedFiles();
|
|
8
|
-
return { hasChanges: files.length > 0, files };
|
|
9
|
-
}
|
|
10
|
-
export function stageAndCommit(message, cwd) {
|
|
11
|
-
execFileSync('git', ['add', '-A'], { cwd, stdio: 'ignore' });
|
|
12
|
-
execFileSync('git', ['commit', '-m', message], { cwd, stdio: 'ignore' });
|
|
13
|
-
}
|
|
14
|
-
export function pushBranch(cwd) {
|
|
15
|
-
execFileSync('git', ['push', '-u', 'origin', 'HEAD'], { cwd, stdio: 'pipe' });
|
|
16
|
-
}
|
|
17
|
-
export function createPullRequest(title, body, cwd) {
|
|
18
|
-
const baseBranch = getDefaultBranch();
|
|
19
|
-
const tmpFile = join(tmpdir(), `pr-body-${Date.now()}.md`);
|
|
20
|
-
writeFileSync(tmpFile, body, 'utf-8');
|
|
21
|
-
try {
|
|
22
|
-
return execFileSync('gh', ['pr', 'create', '--title', title, '--body-file', tmpFile, '--base', baseBranch], {
|
|
23
|
-
cwd,
|
|
24
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
25
|
-
})
|
|
26
|
-
.toString()
|
|
27
|
-
.trim();
|
|
28
|
-
}
|
|
29
|
-
finally {
|
|
30
|
-
try {
|
|
31
|
-
unlinkSync(tmpFile);
|
|
32
|
-
}
|
|
33
|
-
catch { }
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export function getManualPrInstructions(branch) {
|
|
37
|
-
const baseBranch = getDefaultBranch();
|
|
38
|
-
return `
|
|
39
|
-
To create a PR manually:
|
|
40
|
-
|
|
41
|
-
1. Push your branch:
|
|
42
|
-
git push -u origin ${branch}
|
|
43
|
-
|
|
44
|
-
2. Create PR via GitHub:
|
|
45
|
-
https://github.com/<owner>/<repo>/compare/${baseBranch}...${branch}
|
|
46
|
-
|
|
47
|
-
Or install the GitHub CLI:
|
|
48
|
-
https://cli.github.com/
|
|
49
|
-
`.trim();
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=post-install.js.map
|