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,332 +0,0 @@
|
|
|
1
|
-
import { homedir } from 'os';
|
|
2
|
-
import { dirname, join } from 'path';
|
|
3
|
-
import { existsSync } from 'fs';
|
|
4
|
-
import { mkdir, mkdtemp, cp, rename, rm, readdir, readFile, stat, access, writeFile } from 'fs/promises';
|
|
5
|
-
import chalk from 'chalk';
|
|
6
|
-
import { getSkillsDir as getSkillsPackageDir } from '@workos/skills';
|
|
7
|
-
import { IS_WINDOWS } from '../utils/platform.js';
|
|
8
|
-
import { ExitCode, exitWithCode } from '../utils/exit-codes.js';
|
|
9
|
-
export const SKILL_VERSION_MARKER_FILENAME = '.workos-skill-version';
|
|
10
|
-
// Stale-orphan cutoff for `.workos.tmp-*` / `.workos.bak-*` siblings left behind
|
|
11
|
-
// by a crashed prior run. Anything younger may belong to a concurrent install
|
|
12
|
-
// and must NOT be removed.
|
|
13
|
-
const ORPHAN_STALE_MS = 60 * 60 * 1000;
|
|
14
|
-
/** Async equivalent of `existsSync` — `access` rejects with ENOENT when missing. */
|
|
15
|
-
async function pathExists(p) {
|
|
16
|
-
try {
|
|
17
|
-
await access(p);
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Read the bundled @workos/skills version by walking up from the skills
|
|
26
|
-
* directory to the package.json. The package's `exports` map doesn't expose
|
|
27
|
-
* package.json, so we resolve it by filesystem convention.
|
|
28
|
-
* Returns null if the version can't be determined — callers treat that as
|
|
29
|
-
* "no marker written" rather than failing the install.
|
|
30
|
-
*/
|
|
31
|
-
export async function getBundledSkillsVersion(skillsDir = getSkillsPackageDir()) {
|
|
32
|
-
try {
|
|
33
|
-
// skillsDir = <packageRoot>/plugins/workos/skills
|
|
34
|
-
const packageRoot = dirname(dirname(dirname(skillsDir)));
|
|
35
|
-
const pkgJson = JSON.parse(await readFile(join(packageRoot, 'package.json'), 'utf8'));
|
|
36
|
-
return typeof pkgJson.version === 'string' ? pkgJson.version : null;
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export function createAgents(home) {
|
|
43
|
-
const appData = process.env.APPDATA ?? join(home, 'AppData', 'Roaming');
|
|
44
|
-
return {
|
|
45
|
-
'claude-code': {
|
|
46
|
-
name: 'claude-code',
|
|
47
|
-
displayName: 'Claude Code',
|
|
48
|
-
globalSkillsDir: join(home, '.claude', 'skills'),
|
|
49
|
-
detect: () => existsSync(join(home, '.claude')),
|
|
50
|
-
},
|
|
51
|
-
codex: {
|
|
52
|
-
name: 'codex',
|
|
53
|
-
displayName: 'Codex',
|
|
54
|
-
globalSkillsDir: join(home, '.codex', 'skills'),
|
|
55
|
-
detect: () => existsSync(join(home, '.codex')),
|
|
56
|
-
},
|
|
57
|
-
cursor: {
|
|
58
|
-
name: 'cursor',
|
|
59
|
-
displayName: 'Cursor',
|
|
60
|
-
globalSkillsDir: join(home, '.cursor', 'skills'),
|
|
61
|
-
detect: () => existsSync(join(home, '.cursor')),
|
|
62
|
-
},
|
|
63
|
-
goose: {
|
|
64
|
-
name: 'goose',
|
|
65
|
-
displayName: 'Goose',
|
|
66
|
-
globalSkillsDir: IS_WINDOWS ? join(appData, 'goose', 'skills') : join(home, '.config', 'goose', 'skills'),
|
|
67
|
-
detect: () => (IS_WINDOWS ? existsSync(join(appData, 'goose')) : existsSync(join(home, '.config', 'goose'))),
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
export function getSkillsDir() {
|
|
72
|
-
return getSkillsPackageDir();
|
|
73
|
-
}
|
|
74
|
-
export async function discoverSkills(skillsDir) {
|
|
75
|
-
const entries = await readdir(skillsDir, { withFileTypes: true });
|
|
76
|
-
const dirs = entries.filter((e) => e.isDirectory());
|
|
77
|
-
const checks = await Promise.all(dirs.map((e) => pathExists(join(skillsDir, e.name, 'SKILL.md'))));
|
|
78
|
-
return dirs.filter((_, i) => checks[i]).map((e) => e.name);
|
|
79
|
-
}
|
|
80
|
-
export function detectAgents(agents, filter) {
|
|
81
|
-
const detected = [];
|
|
82
|
-
for (const [key, config] of Object.entries(agents)) {
|
|
83
|
-
if (filter && !filter.includes(key))
|
|
84
|
-
continue;
|
|
85
|
-
if (config.detect()) {
|
|
86
|
-
detected.push(config);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return detected;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Recursively install a skill directory (SKILL.md + references/ + any other
|
|
93
|
-
* files) with prune-replace semantics. Uses a sibling temp dir + backup-rename
|
|
94
|
-
* pattern so the operation is effectively atomic per skill: the target either
|
|
95
|
-
* matches the source exactly, or (on rollback) is restored to its prior state.
|
|
96
|
-
*
|
|
97
|
-
* Returns `{ success, error }` rather than throwing — callers (autoInstallSkills,
|
|
98
|
-
* runInstallSkill) accumulate failures across the (skill × agent) matrix.
|
|
99
|
-
*/
|
|
100
|
-
export async function installSkill(skillsDir, skillName, agent) {
|
|
101
|
-
const sourceDir = join(skillsDir, skillName);
|
|
102
|
-
const targetDir = join(agent.globalSkillsDir, skillName);
|
|
103
|
-
const parent = dirname(targetDir);
|
|
104
|
-
// Setup (mkdir parent, mkdtemp) is inside the try so EACCES / ENOTDIR / etc.
|
|
105
|
-
// surface as `{ success: false }` rather than rejecting — runInstallSkill and
|
|
106
|
-
// refreshWorkOSSkills accumulate failures across the (skill × agent) matrix
|
|
107
|
-
// and would otherwise abort the whole batch on a single bad agent dir.
|
|
108
|
-
let tempDir;
|
|
109
|
-
try {
|
|
110
|
-
await mkdir(parent, { recursive: true });
|
|
111
|
-
// Best-effort cleanup of OLD orphans only — never current-run paths.
|
|
112
|
-
await cleanupStaleOrphans(parent, skillName).catch(() => { });
|
|
113
|
-
// mkdtemp gives us atomic creation + a random suffix that prevents
|
|
114
|
-
// collisions between concurrent installers.
|
|
115
|
-
tempDir = await mkdtemp(join(parent, `.workos.tmp-${skillName}-`));
|
|
116
|
-
const backupDir = tempDir.replace('.workos.tmp-', '.workos.bak-');
|
|
117
|
-
await cp(sourceDir, tempDir, { recursive: true, errorOnExist: false });
|
|
118
|
-
const targetExisted = await pathExists(targetDir);
|
|
119
|
-
if (targetExisted) {
|
|
120
|
-
await rename(targetDir, backupDir);
|
|
121
|
-
}
|
|
122
|
-
try {
|
|
123
|
-
await rename(tempDir, targetDir);
|
|
124
|
-
}
|
|
125
|
-
catch (renameErr) {
|
|
126
|
-
if (targetExisted) {
|
|
127
|
-
await rename(backupDir, targetDir).catch(() => { });
|
|
128
|
-
}
|
|
129
|
-
throw renameErr;
|
|
130
|
-
}
|
|
131
|
-
// Backup cleanup is best-effort: target is already in place, so failure
|
|
132
|
-
// here leaves a stale backup that the next run's cleanup handles after 1h.
|
|
133
|
-
if (targetExisted) {
|
|
134
|
-
await rm(backupDir, { recursive: true, force: true }).catch(() => { });
|
|
135
|
-
}
|
|
136
|
-
return { success: true };
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
if (tempDir) {
|
|
140
|
-
await rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
success: false,
|
|
144
|
-
error: error instanceof Error ? error.message : 'Unknown error',
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Remove `.workos.tmp-{skillName}-*` and `.workos.bak-{skillName}-*` siblings
|
|
150
|
-
* older than ORPHAN_STALE_MS. Fresh siblings (from a concurrent install) are
|
|
151
|
-
* preserved — destroying them would race the other run's final rename.
|
|
152
|
-
*/
|
|
153
|
-
async function cleanupStaleOrphans(parent, skillName) {
|
|
154
|
-
if (!(await pathExists(parent)))
|
|
155
|
-
return;
|
|
156
|
-
const entries = await readdir(parent).catch(() => []);
|
|
157
|
-
const cutoff = Date.now() - ORPHAN_STALE_MS;
|
|
158
|
-
for (const entry of entries) {
|
|
159
|
-
const isOrphan = entry.startsWith(`.workos.tmp-${skillName}-`) || entry.startsWith(`.workos.bak-${skillName}-`);
|
|
160
|
-
if (!isOrphan)
|
|
161
|
-
continue;
|
|
162
|
-
const path = join(parent, entry);
|
|
163
|
-
const st = await stat(path).catch(() => null);
|
|
164
|
-
if (st && st.mtimeMs < cutoff) {
|
|
165
|
-
await rm(path, { recursive: true, force: true }).catch(() => { });
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
export async function runInstallSkill(options) {
|
|
170
|
-
const home = homedir();
|
|
171
|
-
const agents = createAgents(home);
|
|
172
|
-
const skillsDir = getSkillsDir();
|
|
173
|
-
const skills = await discoverSkills(skillsDir);
|
|
174
|
-
const targetSkills = options.skill ? skills.filter((s) => options.skill.includes(s)) : skills;
|
|
175
|
-
if (targetSkills.length === 0) {
|
|
176
|
-
console.error(chalk.red('No matching skills found.'));
|
|
177
|
-
console.log('Available skills:', skills.join(', '));
|
|
178
|
-
exitWithCode(ExitCode.GENERAL_ERROR);
|
|
179
|
-
}
|
|
180
|
-
const targetAgents = detectAgents(agents, options.agent);
|
|
181
|
-
if (targetAgents.length === 0) {
|
|
182
|
-
if (options.agent) {
|
|
183
|
-
console.error(chalk.red('Specified agents not found.'));
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
console.error(chalk.red('No coding agents detected.'));
|
|
187
|
-
}
|
|
188
|
-
console.log('Supported agents:', Object.keys(agents).join(', '));
|
|
189
|
-
exitWithCode(ExitCode.GENERAL_ERROR);
|
|
190
|
-
}
|
|
191
|
-
console.log(chalk.bold('\nInstalling skills...\n'));
|
|
192
|
-
const results = [];
|
|
193
|
-
for (const skill of targetSkills) {
|
|
194
|
-
for (const agent of targetAgents) {
|
|
195
|
-
const result = await installSkill(skillsDir, skill, agent);
|
|
196
|
-
results.push({ skill, agent, ...result });
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
const successful = results.filter((r) => r.success);
|
|
200
|
-
const failed = results.filter((r) => !r.success);
|
|
201
|
-
if (successful.length > 0) {
|
|
202
|
-
console.log(chalk.green(`✓ Installed ${successful.length} skill(s):\n`));
|
|
203
|
-
for (const r of successful) {
|
|
204
|
-
console.log(` ${chalk.cyan(r.skill)} → ${chalk.dim(r.agent.displayName)}`);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
// Write per-agent version markers for any agent that had at least one
|
|
208
|
-
// successful install, so `workos doctor` doesn't immediately flag the
|
|
209
|
-
// freshly-installed skills as stale or missing. Same primitive as
|
|
210
|
-
// refreshWorkOSSkills — single source of truth for marker semantics.
|
|
211
|
-
const version = await getBundledSkillsVersion(skillsDir);
|
|
212
|
-
if (version) {
|
|
213
|
-
const succeededAgents = new Set();
|
|
214
|
-
for (const r of successful)
|
|
215
|
-
succeededAgents.add(r.agent);
|
|
216
|
-
for (const agent of succeededAgents) {
|
|
217
|
-
await writeAgentSkillMarker(agent, version);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
if (failed.length > 0) {
|
|
221
|
-
console.log(chalk.red(`\n✗ Failed to install ${failed.length}:\n`));
|
|
222
|
-
for (const r of failed) {
|
|
223
|
-
console.log(` ${r.skill} → ${r.agent.displayName}: ${chalk.dim(r.error)}`);
|
|
224
|
-
}
|
|
225
|
-
exitWithCode(ExitCode.GENERAL_ERROR);
|
|
226
|
-
}
|
|
227
|
-
console.log(chalk.green('\nDone!'));
|
|
228
|
-
}
|
|
229
|
-
async function readSkillVersionMarker(agent) {
|
|
230
|
-
const path = join(agent.globalSkillsDir, SKILL_VERSION_MARKER_FILENAME);
|
|
231
|
-
try {
|
|
232
|
-
return (await readFile(path, 'utf8')).trim() || null;
|
|
233
|
-
}
|
|
234
|
-
catch {
|
|
235
|
-
return null;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Best-effort marker write — any failure is swallowed (filesystem permission
|
|
240
|
-
* errors shouldn't fail the install; doctor treats missing markers as "unknown").
|
|
241
|
-
* Single source of truth for the .workos-skill-version write semantics.
|
|
242
|
-
*/
|
|
243
|
-
async function writeAgentSkillMarker(agent, version) {
|
|
244
|
-
try {
|
|
245
|
-
await writeFile(join(agent.globalSkillsDir, SKILL_VERSION_MARKER_FILENAME), version, 'utf8');
|
|
246
|
-
}
|
|
247
|
-
catch {
|
|
248
|
-
// Marker is best-effort; doctor treats missing marker as "unknown".
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Reusable primitive: discover bundled skills, install each one to each agent,
|
|
253
|
-
* write per-agent version markers, and report before/after marker state.
|
|
254
|
-
*
|
|
255
|
-
* Both `autoInstallSkills` (best-effort hook called from install/login) and
|
|
256
|
-
* `doctor --fix` (Phase 3) call this — there is no duplicate copy logic.
|
|
257
|
-
*
|
|
258
|
-
* Returns null when nothing applied (no agents detected, no skills found, or
|
|
259
|
-
* every install attempt failed).
|
|
260
|
-
*/
|
|
261
|
-
export async function refreshWorkOSSkills(opts = {}) {
|
|
262
|
-
const home = homedir();
|
|
263
|
-
const skillsDir = getSkillsDir();
|
|
264
|
-
const detected = opts.agents ?? detectAgents(createAgents(home));
|
|
265
|
-
const allSkills = await discoverSkills(skillsDir).catch(() => []);
|
|
266
|
-
const skills = opts.skills ? allSkills.filter((s) => opts.skills.includes(s)) : allSkills;
|
|
267
|
-
const writeMarker = opts.writeMarker ?? true;
|
|
268
|
-
if (skills.length === 0 || detected.length === 0)
|
|
269
|
-
return null;
|
|
270
|
-
const version = await getBundledSkillsVersion(skillsDir);
|
|
271
|
-
const perAgentBefore = {};
|
|
272
|
-
const perAgentAfter = {};
|
|
273
|
-
const succeededAgents = [];
|
|
274
|
-
// Union of skills that succeeded for at least one agent. Returning the full
|
|
275
|
-
// attempted list would inflate "Installed N skills" copy when some skills
|
|
276
|
-
// failed to copy; only count what actually landed somewhere.
|
|
277
|
-
const installedSkills = new Set();
|
|
278
|
-
for (const agent of detected) {
|
|
279
|
-
perAgentBefore[agent.name] = await readSkillVersionMarker(agent);
|
|
280
|
-
let agentSucceeded = false;
|
|
281
|
-
for (const skill of skills) {
|
|
282
|
-
const result = await installSkill(skillsDir, skill, agent);
|
|
283
|
-
if (result.success) {
|
|
284
|
-
agentSucceeded = true;
|
|
285
|
-
installedSkills.add(skill);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
if (agentSucceeded) {
|
|
289
|
-
succeededAgents.push(agent);
|
|
290
|
-
if (writeMarker && version) {
|
|
291
|
-
await writeAgentSkillMarker(agent, version);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
perAgentAfter[agent.name] = await readSkillVersionMarker(agent);
|
|
295
|
-
}
|
|
296
|
-
if (succeededAgents.length === 0)
|
|
297
|
-
return null;
|
|
298
|
-
return {
|
|
299
|
-
agents: succeededAgents,
|
|
300
|
-
skills: skills.filter((s) => installedSkills.has(s)),
|
|
301
|
-
version,
|
|
302
|
-
perAgentBefore,
|
|
303
|
-
perAgentAfter,
|
|
304
|
-
};
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Install all bundled skills to all detected coding agents.
|
|
308
|
-
* Returns a summary when anything was installed, or null when nothing applied.
|
|
309
|
-
* Performs minimal IO: writes a version marker file alongside installed
|
|
310
|
-
* skills so `workos doctor` can detect staleness later. Errors are swallowed
|
|
311
|
-
* so skill install never disrupts the calling flow.
|
|
312
|
-
*
|
|
313
|
-
* Thin back-compat wrapper around `refreshWorkOSSkills` — the install/auth-login
|
|
314
|
-
* call sites use this; doctor `--fix` (Phase 3) calls `refreshWorkOSSkills`
|
|
315
|
-
* directly to surface the per-agent before/after marker state.
|
|
316
|
-
*/
|
|
317
|
-
export async function autoInstallSkills() {
|
|
318
|
-
try {
|
|
319
|
-
const result = await refreshWorkOSSkills();
|
|
320
|
-
if (!result)
|
|
321
|
-
return null;
|
|
322
|
-
return {
|
|
323
|
-
skills: result.skills,
|
|
324
|
-
agents: result.agents.map((a) => a.displayName),
|
|
325
|
-
version: result.version,
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
catch {
|
|
329
|
-
return null;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
//# sourceMappingURL=install-skill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/commands/install-skill.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from 'os';\nimport { dirname, join } from 'path';\nimport { existsSync } from 'fs';\nimport { mkdir, mkdtemp, cp, rename, rm, readdir, readFile, stat, access, writeFile } from 'fs/promises';\nimport chalk from 'chalk';\nimport { getSkillsDir as getSkillsPackageDir } from '@workos/skills';\nimport { IS_WINDOWS } from '../utils/platform.js';\nimport { ExitCode, exitWithCode } from '../utils/exit-codes.js';\n\nexport const SKILL_VERSION_MARKER_FILENAME = '.workos-skill-version';\n\n// Stale-orphan cutoff for `.workos.tmp-*` / `.workos.bak-*` siblings left behind\n// by a crashed prior run. Anything younger may belong to a concurrent install\n// and must NOT be removed.\nconst ORPHAN_STALE_MS = 60 * 60 * 1000;\n\n/** Async equivalent of `existsSync` — `access` rejects with ENOENT when missing. */\nasync function pathExists(p: string): Promise<boolean> {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Read the bundled @workos/skills version by walking up from the skills\n * directory to the package.json. The package's `exports` map doesn't expose\n * package.json, so we resolve it by filesystem convention.\n * Returns null if the version can't be determined — callers treat that as\n * \"no marker written\" rather than failing the install.\n */\nexport async function getBundledSkillsVersion(skillsDir: string = getSkillsPackageDir()): Promise<string | null> {\n try {\n // skillsDir = <packageRoot>/plugins/workos/skills\n const packageRoot = dirname(dirname(dirname(skillsDir)));\n const pkgJson = JSON.parse(await readFile(join(packageRoot, 'package.json'), 'utf8'));\n return typeof pkgJson.version === 'string' ? pkgJson.version : null;\n } catch {\n return null;\n }\n}\n\nexport interface AgentConfig {\n name: string;\n displayName: string;\n globalSkillsDir: string;\n detect: () => boolean;\n}\n\nexport function createAgents(home: string): Record<string, AgentConfig> {\n const appData = process.env.APPDATA ?? join(home, 'AppData', 'Roaming');\n return {\n 'claude-code': {\n name: 'claude-code',\n displayName: 'Claude Code',\n globalSkillsDir: join(home, '.claude', 'skills'),\n detect: () => existsSync(join(home, '.claude')),\n },\n codex: {\n name: 'codex',\n displayName: 'Codex',\n globalSkillsDir: join(home, '.codex', 'skills'),\n detect: () => existsSync(join(home, '.codex')),\n },\n cursor: {\n name: 'cursor',\n displayName: 'Cursor',\n globalSkillsDir: join(home, '.cursor', 'skills'),\n detect: () => existsSync(join(home, '.cursor')),\n },\n goose: {\n name: 'goose',\n displayName: 'Goose',\n globalSkillsDir: IS_WINDOWS ? join(appData, 'goose', 'skills') : join(home, '.config', 'goose', 'skills'),\n detect: () => (IS_WINDOWS ? existsSync(join(appData, 'goose')) : existsSync(join(home, '.config', 'goose'))),\n },\n };\n}\n\nexport interface InstallSkillOptions {\n skill?: string[];\n agent?: string[];\n}\n\nexport function getSkillsDir(): string {\n return getSkillsPackageDir();\n}\n\nexport async function discoverSkills(skillsDir: string): Promise<string[]> {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n\n const dirs = entries.filter((e) => e.isDirectory());\n const checks = await Promise.all(dirs.map((e) => pathExists(join(skillsDir, e.name, 'SKILL.md'))));\n return dirs.filter((_, i) => checks[i]).map((e) => e.name);\n}\n\nexport function detectAgents(agents: Record<string, AgentConfig>, filter?: string[]): AgentConfig[] {\n const detected: AgentConfig[] = [];\n\n for (const [key, config] of Object.entries(agents)) {\n if (filter && !filter.includes(key)) continue;\n if (config.detect()) {\n detected.push(config);\n }\n }\n\n return detected;\n}\n\n/**\n * Recursively install a skill directory (SKILL.md + references/ + any other\n * files) with prune-replace semantics. Uses a sibling temp dir + backup-rename\n * pattern so the operation is effectively atomic per skill: the target either\n * matches the source exactly, or (on rollback) is restored to its prior state.\n *\n * Returns `{ success, error }` rather than throwing — callers (autoInstallSkills,\n * runInstallSkill) accumulate failures across the (skill × agent) matrix.\n */\nexport async function installSkill(\n skillsDir: string,\n skillName: string,\n agent: AgentConfig,\n): Promise<{ success: boolean; error?: string }> {\n const sourceDir = join(skillsDir, skillName);\n const targetDir = join(agent.globalSkillsDir, skillName);\n const parent = dirname(targetDir);\n\n // Setup (mkdir parent, mkdtemp) is inside the try so EACCES / ENOTDIR / etc.\n // surface as `{ success: false }` rather than rejecting — runInstallSkill and\n // refreshWorkOSSkills accumulate failures across the (skill × agent) matrix\n // and would otherwise abort the whole batch on a single bad agent dir.\n let tempDir: string | undefined;\n try {\n await mkdir(parent, { recursive: true });\n // Best-effort cleanup of OLD orphans only — never current-run paths.\n await cleanupStaleOrphans(parent, skillName).catch(() => {});\n\n // mkdtemp gives us atomic creation + a random suffix that prevents\n // collisions between concurrent installers.\n tempDir = await mkdtemp(join(parent, `.workos.tmp-${skillName}-`));\n const backupDir = tempDir.replace('.workos.tmp-', '.workos.bak-');\n\n await cp(sourceDir, tempDir, { recursive: true, errorOnExist: false });\n\n const targetExisted = await pathExists(targetDir);\n if (targetExisted) {\n await rename(targetDir, backupDir);\n }\n try {\n await rename(tempDir, targetDir);\n } catch (renameErr) {\n if (targetExisted) {\n await rename(backupDir, targetDir).catch(() => {});\n }\n throw renameErr;\n }\n // Backup cleanup is best-effort: target is already in place, so failure\n // here leaves a stale backup that the next run's cleanup handles after 1h.\n if (targetExisted) {\n await rm(backupDir, { recursive: true, force: true }).catch(() => {});\n }\n return { success: true };\n } catch (error) {\n if (tempDir) {\n await rm(tempDir, { recursive: true, force: true }).catch(() => {});\n }\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n}\n\n/**\n * Remove `.workos.tmp-{skillName}-*` and `.workos.bak-{skillName}-*` siblings\n * older than ORPHAN_STALE_MS. Fresh siblings (from a concurrent install) are\n * preserved — destroying them would race the other run's final rename.\n */\nasync function cleanupStaleOrphans(parent: string, skillName: string): Promise<void> {\n if (!(await pathExists(parent))) return;\n const entries = await readdir(parent).catch(() => []);\n const cutoff = Date.now() - ORPHAN_STALE_MS;\n for (const entry of entries) {\n const isOrphan = entry.startsWith(`.workos.tmp-${skillName}-`) || entry.startsWith(`.workos.bak-${skillName}-`);\n if (!isOrphan) continue;\n const path = join(parent, entry);\n const st = await stat(path).catch(() => null);\n if (st && st.mtimeMs < cutoff) {\n await rm(path, { recursive: true, force: true }).catch(() => {});\n }\n }\n}\n\nexport async function runInstallSkill(options: InstallSkillOptions): Promise<void> {\n const home = homedir();\n const agents = createAgents(home);\n const skillsDir = getSkillsDir();\n const skills = await discoverSkills(skillsDir);\n\n const targetSkills = options.skill ? skills.filter((s) => options.skill!.includes(s)) : skills;\n\n if (targetSkills.length === 0) {\n console.error(chalk.red('No matching skills found.'));\n console.log('Available skills:', skills.join(', '));\n exitWithCode(ExitCode.GENERAL_ERROR);\n }\n\n const targetAgents = detectAgents(agents, options.agent);\n\n if (targetAgents.length === 0) {\n if (options.agent) {\n console.error(chalk.red('Specified agents not found.'));\n } else {\n console.error(chalk.red('No coding agents detected.'));\n }\n console.log('Supported agents:', Object.keys(agents).join(', '));\n exitWithCode(ExitCode.GENERAL_ERROR);\n }\n\n console.log(chalk.bold('\\nInstalling skills...\\n'));\n\n const results: Array<{\n skill: string;\n agent: AgentConfig;\n success: boolean;\n error?: string;\n }> = [];\n\n for (const skill of targetSkills) {\n for (const agent of targetAgents) {\n const result = await installSkill(skillsDir, skill, agent);\n results.push({ skill, agent, ...result });\n }\n }\n\n const successful = results.filter((r) => r.success);\n const failed = results.filter((r) => !r.success);\n\n if (successful.length > 0) {\n console.log(chalk.green(`✓ Installed ${successful.length} skill(s):\\n`));\n for (const r of successful) {\n console.log(` ${chalk.cyan(r.skill)} → ${chalk.dim(r.agent.displayName)}`);\n }\n }\n\n // Write per-agent version markers for any agent that had at least one\n // successful install, so `workos doctor` doesn't immediately flag the\n // freshly-installed skills as stale or missing. Same primitive as\n // refreshWorkOSSkills — single source of truth for marker semantics.\n const version = await getBundledSkillsVersion(skillsDir);\n if (version) {\n const succeededAgents = new Set<AgentConfig>();\n for (const r of successful) succeededAgents.add(r.agent);\n for (const agent of succeededAgents) {\n await writeAgentSkillMarker(agent, version);\n }\n }\n\n if (failed.length > 0) {\n console.log(chalk.red(`\\n✗ Failed to install ${failed.length}:\\n`));\n for (const r of failed) {\n console.log(` ${r.skill} → ${r.agent.displayName}: ${chalk.dim(r.error)}`);\n }\n exitWithCode(ExitCode.GENERAL_ERROR);\n }\n\n console.log(chalk.green('\\nDone!'));\n}\n\nexport interface AutoInstallResult {\n skills: string[];\n agents: string[];\n version: string | null;\n}\n\nexport interface RefreshOptions {\n /** Pre-detected agents. Default: detect from $HOME. */\n agents?: AgentConfig[];\n /** Skill names to install. Default: all bundled skills. */\n skills?: string[];\n /** Whether to write the version marker after a successful per-agent install. Default: true. */\n writeMarker?: boolean;\n}\n\nexport interface RefreshResult {\n /** Agents where at least one skill installed successfully. */\n agents: AgentConfig[];\n /** Skills that were attempted (the resolved set after filtering). */\n skills: string[];\n /** Bundled skills package version, or null if it couldn't be resolved. */\n version: string | null;\n /** Marker version per agent.name BEFORE refresh (null = no marker / unreadable). */\n perAgentBefore: Record<string, string | null>;\n /** Marker version per agent.name AFTER refresh. */\n perAgentAfter: Record<string, string | null>;\n}\n\nasync function readSkillVersionMarker(agent: AgentConfig): Promise<string | null> {\n const path = join(agent.globalSkillsDir, SKILL_VERSION_MARKER_FILENAME);\n try {\n return (await readFile(path, 'utf8')).trim() || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Best-effort marker write — any failure is swallowed (filesystem permission\n * errors shouldn't fail the install; doctor treats missing markers as \"unknown\").\n * Single source of truth for the .workos-skill-version write semantics.\n */\nasync function writeAgentSkillMarker(agent: AgentConfig, version: string): Promise<void> {\n try {\n await writeFile(join(agent.globalSkillsDir, SKILL_VERSION_MARKER_FILENAME), version, 'utf8');\n } catch {\n // Marker is best-effort; doctor treats missing marker as \"unknown\".\n }\n}\n\n/**\n * Reusable primitive: discover bundled skills, install each one to each agent,\n * write per-agent version markers, and report before/after marker state.\n *\n * Both `autoInstallSkills` (best-effort hook called from install/login) and\n * `doctor --fix` (Phase 3) call this — there is no duplicate copy logic.\n *\n * Returns null when nothing applied (no agents detected, no skills found, or\n * every install attempt failed).\n */\nexport async function refreshWorkOSSkills(opts: RefreshOptions = {}): Promise<RefreshResult | null> {\n const home = homedir();\n const skillsDir = getSkillsDir();\n const detected = opts.agents ?? detectAgents(createAgents(home));\n const allSkills = await discoverSkills(skillsDir).catch(() => []);\n const skills = opts.skills ? allSkills.filter((s) => opts.skills!.includes(s)) : allSkills;\n const writeMarker = opts.writeMarker ?? true;\n\n if (skills.length === 0 || detected.length === 0) return null;\n\n const version = await getBundledSkillsVersion(skillsDir);\n const perAgentBefore: Record<string, string | null> = {};\n const perAgentAfter: Record<string, string | null> = {};\n const succeededAgents: AgentConfig[] = [];\n // Union of skills that succeeded for at least one agent. Returning the full\n // attempted list would inflate \"Installed N skills\" copy when some skills\n // failed to copy; only count what actually landed somewhere.\n const installedSkills = new Set<string>();\n\n for (const agent of detected) {\n perAgentBefore[agent.name] = await readSkillVersionMarker(agent);\n\n let agentSucceeded = false;\n for (const skill of skills) {\n const result = await installSkill(skillsDir, skill, agent);\n if (result.success) {\n agentSucceeded = true;\n installedSkills.add(skill);\n }\n }\n\n if (agentSucceeded) {\n succeededAgents.push(agent);\n if (writeMarker && version) {\n await writeAgentSkillMarker(agent, version);\n }\n }\n\n perAgentAfter[agent.name] = await readSkillVersionMarker(agent);\n }\n\n if (succeededAgents.length === 0) return null;\n\n return {\n agents: succeededAgents,\n skills: skills.filter((s) => installedSkills.has(s)),\n version,\n perAgentBefore,\n perAgentAfter,\n };\n}\n\n/**\n * Install all bundled skills to all detected coding agents.\n * Returns a summary when anything was installed, or null when nothing applied.\n * Performs minimal IO: writes a version marker file alongside installed\n * skills so `workos doctor` can detect staleness later. Errors are swallowed\n * so skill install never disrupts the calling flow.\n *\n * Thin back-compat wrapper around `refreshWorkOSSkills` — the install/auth-login\n * call sites use this; doctor `--fix` (Phase 3) calls `refreshWorkOSSkills`\n * directly to surface the per-agent before/after marker state.\n */\nexport async function autoInstallSkills(): Promise<AutoInstallResult | null> {\n try {\n const result = await refreshWorkOSSkills();\n if (!result) return null;\n return {\n skills: result.skills,\n agents: result.agents.map((a) => a.displayName),\n version: result.version,\n };\n } catch {\n return null;\n }\n}\n"]}
|
package/dist/commands/install.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { runInstaller } from '../run.js';
|
|
2
|
-
import ui from '../utils/ui.js';
|
|
3
|
-
import { exitWithError, isJsonMode } from '../utils/output.js';
|
|
4
|
-
import { ExitCode, exitWithCode } from '../utils/exit-codes.js';
|
|
5
|
-
import { isCiMode } from '../utils/interaction-mode.js';
|
|
6
|
-
import { maybeRunSetupAfter } from './setup.js';
|
|
7
|
-
/**
|
|
8
|
-
* Handle install command execution.
|
|
9
|
-
*/
|
|
10
|
-
export async function handleInstall(argv) {
|
|
11
|
-
const options = { ...argv };
|
|
12
|
-
// CI mode validation — trigger for the hidden --ci flag or WORKOS_MODE=ci.
|
|
13
|
-
if (options.ci || isCiMode()) {
|
|
14
|
-
if (!options.apiKey) {
|
|
15
|
-
exitWithError({ code: 'missing_args', message: 'CI mode requires --api-key (WorkOS API key sk_xxx)' });
|
|
16
|
-
}
|
|
17
|
-
if (!options.clientId) {
|
|
18
|
-
exitWithError({ code: 'missing_args', message: 'CI mode requires --client-id (WorkOS Client ID client_xxx)' });
|
|
19
|
-
}
|
|
20
|
-
if (!options.installDir) {
|
|
21
|
-
exitWithError({
|
|
22
|
-
code: 'missing_args',
|
|
23
|
-
message: 'CI mode requires --install-dir (directory to install WorkOS AuthKit in)',
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
await runInstaller(options);
|
|
29
|
-
// One consented moment offers skills + MCP together. Self-gating
|
|
30
|
-
// (human/TTY-only, decline-respecting) and best-effort — never fails install.
|
|
31
|
-
await maybeRunSetupAfter('install');
|
|
32
|
-
}
|
|
33
|
-
catch (err) {
|
|
34
|
-
const { getLogFilePath } = await import('../utils/debug.js');
|
|
35
|
-
const logPath = getLogFilePath();
|
|
36
|
-
if (isJsonMode()) {
|
|
37
|
-
exitWithError({
|
|
38
|
-
code: 'installer_error',
|
|
39
|
-
message: err instanceof Error ? err.message : 'Unknown error',
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
if (options.debug && err instanceof Error && err.stack) {
|
|
43
|
-
console.error(err.stack);
|
|
44
|
-
}
|
|
45
|
-
if (logPath) {
|
|
46
|
-
ui.log.info(`Debug logs: ${logPath}`);
|
|
47
|
-
}
|
|
48
|
-
exitWithCode(ExitCode.GENERAL_ERROR);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=install.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuC;IACzE,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE5B,2EAA2E;IAC3E,IAAI,OAAO,CAAC,EAAE,IAAI,QAAQ,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4DAA4D,EAAE,CAAC,CAAC;QACjH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,aAAa,CAAC;gBACZ,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,yEAAyE;aACnF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAE5B,iEAAiE;QACjE,8EAA8E;QAC9E,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QAEjC,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,aAAa,CAAC;gBACZ,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;AACH,CAAC","sourcesContent":["import { runInstaller } from '../run.js';\nimport type { InstallerArgs } from '../run.js';\nimport ui from '../utils/ui.js';\nimport { exitWithError, isJsonMode } from '../utils/output.js';\nimport { ExitCode, exitWithCode } from '../utils/exit-codes.js';\nimport { isCiMode } from '../utils/interaction-mode.js';\nimport type { ArgumentsCamelCase } from 'yargs';\nimport { maybeRunSetupAfter } from './setup.js';\n\n/**\n * Handle install command execution.\n */\nexport async function handleInstall(argv: ArgumentsCamelCase<InstallerArgs>): Promise<void> {\n const options = { ...argv };\n\n // CI mode validation — trigger for the hidden --ci flag or WORKOS_MODE=ci.\n if (options.ci || isCiMode()) {\n if (!options.apiKey) {\n exitWithError({ code: 'missing_args', message: 'CI mode requires --api-key (WorkOS API key sk_xxx)' });\n }\n if (!options.clientId) {\n exitWithError({ code: 'missing_args', message: 'CI mode requires --client-id (WorkOS Client ID client_xxx)' });\n }\n if (!options.installDir) {\n exitWithError({\n code: 'missing_args',\n message: 'CI mode requires --install-dir (directory to install WorkOS AuthKit in)',\n });\n }\n }\n\n try {\n await runInstaller(options);\n\n // One consented moment offers skills + MCP together. Self-gating\n // (human/TTY-only, decline-respecting) and best-effort — never fails install.\n await maybeRunSetupAfter('install');\n } catch (err) {\n const { getLogFilePath } = await import('../utils/debug.js');\n const logPath = getLogFilePath();\n\n if (isJsonMode()) {\n exitWithError({\n code: 'installer_error',\n message: err instanceof Error ? err.message : 'Unknown error',\n });\n }\n\n if (options.debug && err instanceof Error && err.stack) {\n console.error(err.stack);\n }\n if (logPath) {\n ui.log.info(`Debug logs: ${logPath}`);\n }\n exitWithCode(ExitCode.GENERAL_ERROR);\n }\n}\n"]}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface InvitationListOptions {
|
|
2
|
-
org?: string;
|
|
3
|
-
email?: string;
|
|
4
|
-
limit?: number;
|
|
5
|
-
before?: string;
|
|
6
|
-
after?: string;
|
|
7
|
-
order?: string;
|
|
8
|
-
}
|
|
9
|
-
export declare function runInvitationList(options: InvitationListOptions, apiKey: string, baseUrl?: string): Promise<void>;
|
|
10
|
-
export declare function runInvitationGet(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
11
|
-
export interface InvitationSendOptions {
|
|
12
|
-
email: string;
|
|
13
|
-
org?: string;
|
|
14
|
-
role?: string;
|
|
15
|
-
expiresInDays?: number;
|
|
16
|
-
}
|
|
17
|
-
export declare function runInvitationSend(options: InvitationSendOptions, apiKey: string, baseUrl?: string): Promise<void>;
|
|
18
|
-
export declare function runInvitationRevoke(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
19
|
-
export declare function runInvitationResend(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { createWorkOSClient } from '../lib/workos-client.js';
|
|
3
|
-
import { formatTable } from '../utils/table.js';
|
|
4
|
-
import { outputSuccess, outputJson, isJsonMode } from '../utils/output.js';
|
|
5
|
-
import { createApiErrorHandler } from '../lib/api-error-handler.js';
|
|
6
|
-
const handleApiError = createApiErrorHandler('Invitation');
|
|
7
|
-
export async function runInvitationList(options, apiKey, baseUrl) {
|
|
8
|
-
const client = createWorkOSClient(apiKey, baseUrl);
|
|
9
|
-
try {
|
|
10
|
-
const result = await client.sdk.userManagement.listInvitations({
|
|
11
|
-
...(options.org && { organizationId: options.org }),
|
|
12
|
-
...(options.email && { email: options.email }),
|
|
13
|
-
limit: options.limit,
|
|
14
|
-
before: options.before,
|
|
15
|
-
after: options.after,
|
|
16
|
-
order: options.order,
|
|
17
|
-
});
|
|
18
|
-
if (isJsonMode()) {
|
|
19
|
-
outputJson({ data: result.data, listMetadata: result.listMetadata });
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (result.data.length === 0) {
|
|
23
|
-
console.log('No invitations found.');
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
const rows = result.data.map((inv) => [
|
|
27
|
-
inv.id,
|
|
28
|
-
inv.email,
|
|
29
|
-
inv.organizationId ?? chalk.dim('-'),
|
|
30
|
-
inv.state,
|
|
31
|
-
inv.expiresAt,
|
|
32
|
-
]);
|
|
33
|
-
console.log(formatTable([{ header: 'ID' }, { header: 'Email' }, { header: 'Org ID' }, { header: 'State' }, { header: 'Expires At' }], rows));
|
|
34
|
-
const { before, after } = result.listMetadata;
|
|
35
|
-
if (before && after) {
|
|
36
|
-
console.log(chalk.dim(`Before: ${before} After: ${after}`));
|
|
37
|
-
}
|
|
38
|
-
else if (before) {
|
|
39
|
-
console.log(chalk.dim(`Before: ${before}`));
|
|
40
|
-
}
|
|
41
|
-
else if (after) {
|
|
42
|
-
console.log(chalk.dim(`After: ${after}`));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
handleApiError(error);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
export async function runInvitationGet(id, apiKey, baseUrl) {
|
|
50
|
-
const client = createWorkOSClient(apiKey, baseUrl);
|
|
51
|
-
try {
|
|
52
|
-
const invitation = await client.sdk.userManagement.getInvitation(id);
|
|
53
|
-
outputJson(invitation);
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
handleApiError(error);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
export async function runInvitationSend(options, apiKey, baseUrl) {
|
|
60
|
-
const client = createWorkOSClient(apiKey, baseUrl);
|
|
61
|
-
try {
|
|
62
|
-
const invitation = await client.sdk.userManagement.sendInvitation({
|
|
63
|
-
email: options.email,
|
|
64
|
-
...(options.org && { organizationId: options.org }),
|
|
65
|
-
...(options.role && { roleSlug: options.role }),
|
|
66
|
-
...(options.expiresInDays !== undefined && { expiresInDays: options.expiresInDays }),
|
|
67
|
-
});
|
|
68
|
-
outputSuccess('Sent invitation', invitation);
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
handleApiError(error);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
export async function runInvitationRevoke(id, apiKey, baseUrl) {
|
|
75
|
-
const client = createWorkOSClient(apiKey, baseUrl);
|
|
76
|
-
try {
|
|
77
|
-
const invitation = await client.sdk.userManagement.revokeInvitation(id);
|
|
78
|
-
outputSuccess('Revoked invitation', invitation);
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
handleApiError(error);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
export async function runInvitationResend(id, apiKey, baseUrl) {
|
|
85
|
-
const client = createWorkOSClient(apiKey, baseUrl);
|
|
86
|
-
try {
|
|
87
|
-
const invitation = await client.sdk.userManagement.resendInvitation(id);
|
|
88
|
-
outputSuccess('Resent invitation', invitation);
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
handleApiError(error);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=invitation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"invitation.js","sourceRoot":"","sources":["../../src/commands/invitation.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { createWorkOSClient } from '../lib/workos-client.js';\nimport { formatTable } from '../utils/table.js';\nimport { outputSuccess, outputJson, isJsonMode } from '../utils/output.js';\nimport { createApiErrorHandler } from '../lib/api-error-handler.js';\n\nconst handleApiError = createApiErrorHandler('Invitation');\n\nexport interface InvitationListOptions {\n org?: string;\n email?: string;\n limit?: number;\n before?: string;\n after?: string;\n order?: string;\n}\n\nexport async function runInvitationList(\n options: InvitationListOptions,\n apiKey: string,\n baseUrl?: string,\n): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const result = await client.sdk.userManagement.listInvitations({\n ...(options.org && { organizationId: options.org }),\n ...(options.email && { email: options.email }),\n limit: options.limit,\n before: options.before,\n after: options.after,\n order: options.order as 'asc' | 'desc' | undefined,\n });\n\n if (isJsonMode()) {\n outputJson({ data: result.data, listMetadata: result.listMetadata });\n return;\n }\n\n if (result.data.length === 0) {\n console.log('No invitations found.');\n return;\n }\n\n const rows = result.data.map((inv) => [\n inv.id,\n inv.email,\n inv.organizationId ?? chalk.dim('-'),\n inv.state,\n inv.expiresAt,\n ]);\n\n console.log(\n formatTable(\n [{ header: 'ID' }, { header: 'Email' }, { header: 'Org ID' }, { header: 'State' }, { header: 'Expires At' }],\n rows,\n ),\n );\n\n const { before, after } = result.listMetadata;\n if (before && after) {\n console.log(chalk.dim(`Before: ${before} After: ${after}`));\n } else if (before) {\n console.log(chalk.dim(`Before: ${before}`));\n } else if (after) {\n console.log(chalk.dim(`After: ${after}`));\n }\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runInvitationGet(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const invitation = await client.sdk.userManagement.getInvitation(id);\n outputJson(invitation);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport interface InvitationSendOptions {\n email: string;\n org?: string;\n role?: string;\n expiresInDays?: number;\n}\n\nexport async function runInvitationSend(\n options: InvitationSendOptions,\n apiKey: string,\n baseUrl?: string,\n): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const invitation = await client.sdk.userManagement.sendInvitation({\n email: options.email,\n ...(options.org && { organizationId: options.org }),\n ...(options.role && { roleSlug: options.role }),\n ...(options.expiresInDays !== undefined && { expiresInDays: options.expiresInDays }),\n });\n outputSuccess('Sent invitation', invitation);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runInvitationRevoke(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const invitation = await client.sdk.userManagement.revokeInvitation(id);\n outputSuccess('Revoked invitation', invitation);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runInvitationResend(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const invitation = await client.sdk.userManagement.resendInvitation(id);\n outputSuccess('Resent invitation', invitation);\n } catch (error) {\n handleApiError(error);\n }\n}\n"]}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { homedir } from 'os';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
|
-
import { logError } from '../utils/debug.js';
|
|
4
|
-
import { exitWithError, isJsonMode, outputJson } from '../utils/output.js';
|
|
5
|
-
import { createAgents, detectAgents, discoverSkills, getSkillsDir } from './install-skill.js';
|
|
6
|
-
import { findInstalledSkills } from './uninstall-skill.js';
|
|
7
|
-
export async function runListSkills(options) {
|
|
8
|
-
const home = homedir();
|
|
9
|
-
const agents = createAgents(home);
|
|
10
|
-
const skillsDir = getSkillsDir();
|
|
11
|
-
let knownSkills;
|
|
12
|
-
try {
|
|
13
|
-
knownSkills = await discoverSkills(skillsDir);
|
|
14
|
-
}
|
|
15
|
-
catch (error) {
|
|
16
|
-
logError('Failed to read skills directory:', error);
|
|
17
|
-
exitWithError({
|
|
18
|
-
code: 'SKILLS_DIR_READ_FAILED',
|
|
19
|
-
message: `Could not read skills directory at ${skillsDir}. Your WorkOS CLI installation may be corrupted. Try reinstalling with \`npm install -g @workos-inc/cli\`.`,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
const targetAgents = detectAgents(agents, options.agent);
|
|
23
|
-
const listData = [];
|
|
24
|
-
for (const agent of targetAgents) {
|
|
25
|
-
const installed = findInstalledSkills(knownSkills, agent);
|
|
26
|
-
listData.push({ agent: agent.displayName, available: knownSkills, installed });
|
|
27
|
-
}
|
|
28
|
-
if (isJsonMode()) {
|
|
29
|
-
outputJson(listData);
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
console.log(chalk.bold('\nWorkOS Skills:\n'));
|
|
33
|
-
console.log(` ${chalk.bold('Available:')} ${knownSkills.map((s) => chalk.cyan(s)).join(', ')}\n`);
|
|
34
|
-
if (targetAgents.length === 0) {
|
|
35
|
-
console.log(chalk.dim(' No coding agents detected.\n'));
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
console.log(chalk.bold(' Installed per agent:\n'));
|
|
39
|
-
for (const entry of listData) {
|
|
40
|
-
console.log(` ${chalk.bold(entry.agent)}:`);
|
|
41
|
-
if (entry.installed.length === 0) {
|
|
42
|
-
console.log(` ${chalk.dim('(none)')}`);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
for (const skill of entry.installed) {
|
|
46
|
-
console.log(` ${chalk.cyan(skill)}`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
console.log();
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=list-skills.js.map
|