workos 0.8.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +10 -8
  2. package/dist/bin.js +62 -27
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/auth-status.d.ts +1 -0
  5. package/dist/commands/auth-status.js +56 -0
  6. package/dist/commands/auth-status.js.map +1 -0
  7. package/dist/commands/install-skill.d.ts +0 -1
  8. package/dist/commands/install-skill.js +2 -10
  9. package/dist/commands/install-skill.js.map +1 -1
  10. package/dist/commands/list-skills.d.ts +4 -0
  11. package/dist/commands/list-skills.js +52 -0
  12. package/dist/commands/list-skills.js.map +1 -0
  13. package/dist/commands/login.js +5 -4
  14. package/dist/commands/login.js.map +1 -1
  15. package/dist/commands/uninstall-skill.d.ts +11 -0
  16. package/dist/commands/uninstall-skill.js +116 -0
  17. package/dist/commands/uninstall-skill.js.map +1 -0
  18. package/dist/doctor/checks/ai-analysis.js +3 -3
  19. package/dist/doctor/checks/ai-analysis.js.map +1 -1
  20. package/dist/integrations/dotnet/index.js +7 -12
  21. package/dist/integrations/dotnet/index.js.map +1 -1
  22. package/dist/integrations/elixir/index.js +7 -13
  23. package/dist/integrations/elixir/index.js.map +1 -1
  24. package/dist/integrations/go/index.js +5 -11
  25. package/dist/integrations/go/index.js.map +1 -1
  26. package/dist/integrations/python/index.js +7 -13
  27. package/dist/integrations/python/index.js.map +1 -1
  28. package/dist/integrations/ruby/index.js +9 -14
  29. package/dist/integrations/ruby/index.js.map +1 -1
  30. package/dist/lib/adapters/cli-adapter.js +1 -1
  31. package/dist/lib/adapters/cli-adapter.js.map +1 -1
  32. package/dist/lib/agent-interface.js +10 -9
  33. package/dist/lib/agent-interface.js.map +1 -1
  34. package/dist/lib/agent-runner.js +24 -19
  35. package/dist/lib/agent-runner.js.map +1 -1
  36. package/dist/lib/credential-proxy.js +1 -1
  37. package/dist/lib/credential-proxy.js.map +1 -1
  38. package/dist/lib/ensure-auth.js +3 -3
  39. package/dist/lib/ensure-auth.js.map +1 -1
  40. package/dist/lib/run-with-core.js +1 -1
  41. package/dist/lib/run-with-core.js.map +1 -1
  42. package/dist/lib/token-refresh-client.js +1 -1
  43. package/dist/lib/token-refresh-client.js.map +1 -1
  44. package/dist/lib/token-refresh.js +1 -1
  45. package/dist/lib/token-refresh.js.map +1 -1
  46. package/dist/lib/version-check.js +2 -1
  47. package/dist/lib/version-check.js.map +1 -1
  48. package/dist/utils/exit-codes.js +1 -1
  49. package/dist/utils/exit-codes.js.map +1 -1
  50. package/dist/utils/help-json.js +62 -23
  51. package/dist/utils/help-json.js.map +1 -1
  52. package/package.json +2 -3
  53. package/.claude-plugin/plugin.json +0 -13
  54. package/skills/workos-authkit-base/SKILL.md +0 -123
  55. package/skills/workos-authkit-nextjs/SKILL.md +0 -247
  56. package/skills/workos-authkit-react/SKILL.md +0 -91
  57. package/skills/workos-authkit-react-router/SKILL.md +0 -107
  58. package/skills/workos-authkit-sveltekit/SKILL.md +0 -160
  59. package/skills/workos-authkit-tanstack-start/SKILL.md +0 -300
  60. package/skills/workos-authkit-vanilla-js/SKILL.md +0 -83
  61. package/skills/workos-dotnet/SKILL.md +0 -163
  62. package/skills/workos-elixir/SKILL.md +0 -194
  63. package/skills/workos-go/SKILL.md +0 -191
  64. package/skills/workos-kotlin/SKILL.md +0 -161
  65. package/skills/workos-management/SKILL.md +0 -250
  66. package/skills/workos-node/SKILL.md +0 -164
  67. package/skills/workos-php/SKILL.md +0 -127
  68. package/skills/workos-php-laravel/SKILL.md +0 -147
  69. package/skills/workos-python/SKILL.md +0 -159
  70. package/skills/workos-ruby/SKILL.md +0 -163
package/README.md CHANGED
@@ -15,7 +15,7 @@ workos
15
15
 
16
16
  ## Features
17
17
 
18
- - **5 Framework Support:** Next.js, React Router, TanStack Start, React SPA, Vanilla JS
18
+ - **15 Framework Support:** Next.js, React Router, TanStack Start, React SPA, Vanilla JS, SvelteKit, Node.js (Express), Python (Django), Ruby (Rails), Go, .NET (ASP.NET Core), Kotlin (Spring Boot), Elixir (Phoenix), PHP (Laravel), PHP
19
19
  - **AI-Powered:** Uses Claude to intelligently adapt to your project structure
20
20
  - **Security-First:** Masks API keys, redacts from logs, saves to .env.local
21
21
  - **Smart Detection:** Auto-detects framework, package manager, router type
@@ -50,11 +50,10 @@ workos [command]
50
50
 
51
51
  Commands:
52
52
  install Install WorkOS AuthKit into your project
53
- login Authenticate with WorkOS via browser OAuth
54
- logout Remove stored credentials
53
+ auth Manage authentication (login, logout, status)
55
54
  env Manage environment configurations
56
55
  doctor Diagnose WorkOS integration issues
57
- install-skill Install AuthKit skills to coding agents
56
+ skills Manage WorkOS skills for coding agents (install, uninstall, list)
58
57
 
59
58
  Resource Management:
60
59
  organization (org) Manage organizations
@@ -364,7 +363,7 @@ workos org-domain delete <id>
364
363
  workos install [options]
365
364
 
366
365
  --direct, -D Use your own Anthropic API key (bypass llm-gateway)
367
- --integration <name> Framework: nextjs, react, react-router, tanstack-start, vanilla-js
366
+ --integration <name> Framework: nextjs, react, react-router, tanstack-start, vanilla-js, sveltekit, node, python, ruby, go, dotnet, kotlin, elixir, php-laravel, php
368
367
  --api-key <key> WorkOS API key (required in non-interactive mode)
369
368
  --client-id <id> WorkOS client ID (required in non-interactive mode)
370
369
  --redirect-uri <uri> Custom redirect URI
@@ -386,7 +385,7 @@ workos install [options]
386
385
  npx workos
387
386
 
388
387
  # Specify framework
389
- npx workos --integration react-router
388
+ npx workos install --integration react-router
390
389
 
391
390
  # With visual dashboard (experimental)
392
391
  npx workos dashboard
@@ -470,10 +469,13 @@ The CLI uses WorkOS Connect OAuth device flow for authentication:
470
469
 
471
470
  ```bash
472
471
  # Login (opens browser for authentication)
473
- workos login
472
+ workos auth login
473
+
474
+ # Check current auth status
475
+ workos auth status
474
476
 
475
477
  # Logout (clears stored credentials)
476
- workos logout
478
+ workos auth logout
477
479
  ```
478
480
 
479
481
  OAuth credentials are stored in the system keychain (with `~/.workos/credentials.json` fallback). Access tokens are not persisted long-term for security - users re-authenticate when tokens expire.
package/dist/bin.js CHANGED
@@ -20,7 +20,7 @@ if (!satisfies(process.version, NODE_VERSION_RANGE)) {
20
20
  process.exit(1);
21
21
  }
22
22
  import { isNonInteractiveEnvironment } from './utils/environment.js';
23
- import { resolveOutputMode, setOutputMode, outputJson, exitWithError } from './utils/output.js';
23
+ import { resolveOutputMode, setOutputMode, isJsonMode, outputJson, exitWithError } from './utils/output.js';
24
24
  import clack from './utils/clack.js';
25
25
  import { registerSubcommand } from './utils/register-subcommand.js';
26
26
  // Resolve output mode early from raw argv (before yargs parses)
@@ -163,8 +163,9 @@ const installerOptions = {
163
163
  type: 'boolean',
164
164
  },
165
165
  };
166
- // Check for updates (blocks up to 500ms)
167
- await checkForUpdates();
166
+ // Check for updates (blocks up to 500ms, skip in JSON mode to keep stdout clean)
167
+ if (!isJsonMode())
168
+ await checkForUpdates();
168
169
  yargs(rawArgs)
169
170
  .env('WORKOS_INSTALLER')
170
171
  .option('json', {
@@ -173,44 +174,78 @@ yargs(rawArgs)
173
174
  describe: 'Output results as JSON (auto-enabled in non-TTY)',
174
175
  global: true,
175
176
  })
176
- .command('login', 'Authenticate with WorkOS via browser-based OAuth', insecureStorageOption, async (argv) => {
177
- await applyInsecureStorage(argv.insecureStorage);
178
- const { runLogin } = await import('./commands/login.js');
179
- await runLogin();
180
- process.exit(0);
181
- })
182
- .command('logout', 'Remove stored WorkOS credentials and tokens', insecureStorageOption, async (argv) => {
183
- await applyInsecureStorage(argv.insecureStorage);
184
- const { runLogout } = await import('./commands/logout.js');
185
- await runLogout();
177
+ .command('auth', 'Manage authentication (login, logout, status)', (yargs) => {
178
+ yargs.options(insecureStorageOption);
179
+ registerSubcommand(yargs, 'login', 'Authenticate with WorkOS via browser-based OAuth', (y) => y, async (argv) => {
180
+ await applyInsecureStorage(argv.insecureStorage);
181
+ const { runLogin } = await import('./commands/login.js');
182
+ await runLogin();
183
+ process.exit(0);
184
+ });
185
+ registerSubcommand(yargs, 'logout', 'Remove stored WorkOS credentials and tokens', (y) => y, async (argv) => {
186
+ await applyInsecureStorage(argv.insecureStorage);
187
+ const { runLogout } = await import('./commands/logout.js');
188
+ await runLogout();
189
+ });
190
+ registerSubcommand(yargs, 'status', 'Show current authentication status', (y) => y, async (argv) => {
191
+ await applyInsecureStorage(argv.insecureStorage);
192
+ const { runAuthStatus } = await import('./commands/auth-status.js');
193
+ await runAuthStatus();
194
+ });
195
+ return yargs.demandCommand(1, 'Please specify an auth subcommand').strict();
186
196
  })
187
- .command('install-skill', 'Install bundled AuthKit skills to coding agents (Claude Code, Codex, Cursor, Goose)', (yargs) => {
188
- return yargs
189
- .option('list', {
190
- alias: 'l',
191
- type: 'boolean',
192
- description: 'List available skills without installing',
197
+ .command('skills', 'Manage WorkOS skills for coding agents (Claude Code, Codex, Cursor, Goose)', (yargs) => {
198
+ registerSubcommand(yargs, 'install', 'Install bundled AuthKit skills to coding agents', (y) => y
199
+ .option('skill', {
200
+ alias: 's',
201
+ type: 'array',
202
+ string: true,
203
+ description: 'Install specific skill(s) by name',
193
204
  })
205
+ .option('agent', {
206
+ alias: 'a',
207
+ type: 'array',
208
+ string: true,
209
+ description: 'Target specific agent(s): claude-code, codex, cursor, goose',
210
+ }), async (argv) => {
211
+ const { runInstallSkill } = await import('./commands/install-skill.js');
212
+ await runInstallSkill({
213
+ skill: argv.skill,
214
+ agent: argv.agent,
215
+ });
216
+ });
217
+ registerSubcommand(yargs, 'uninstall', 'Remove installed WorkOS skills from coding agents', (y) => y
194
218
  .option('skill', {
195
219
  alias: 's',
196
220
  type: 'array',
197
221
  string: true,
198
- description: 'Install specific skill(s)',
222
+ description: 'Remove specific skill(s) by name',
199
223
  })
200
224
  .option('agent', {
201
225
  alias: 'a',
202
226
  type: 'array',
203
227
  string: true,
204
228
  description: 'Target specific agent(s): claude-code, codex, cursor, goose',
229
+ }), async (argv) => {
230
+ const { runUninstallSkill } = await import('./commands/uninstall-skill.js');
231
+ await runUninstallSkill({
232
+ skill: argv.skill,
233
+ agent: argv.agent,
234
+ });
205
235
  });
206
- }, withAuth(async (argv) => {
207
- const { runInstallSkill } = await import('./commands/install-skill.js');
208
- await runInstallSkill({
209
- list: argv.list,
210
- skill: argv.skill,
211
- agent: argv.agent,
236
+ registerSubcommand(yargs, 'list', 'List available and installed skills', (y) => y.option('agent', {
237
+ alias: 'a',
238
+ type: 'array',
239
+ string: true,
240
+ description: 'Target specific agent(s): claude-code, codex, cursor, goose',
241
+ }), async (argv) => {
242
+ const { runListSkills } = await import('./commands/list-skills.js');
243
+ await runListSkills({
244
+ agent: argv.agent,
245
+ });
212
246
  });
213
- }))
247
+ return yargs.demandCommand(1, 'Please specify a skills subcommand').strict();
248
+ })
214
249
  .command('doctor', 'Diagnose WorkOS AuthKit integration issues in the current project', (yargs) => yargs.options({
215
250
  verbose: {
216
251
  type: 'boolean',