@agentuity/cli 0.0.12 → 0.0.15

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 (115) hide show
  1. package/dist/api.d.ts +5 -0
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/auth.d.ts +2 -0
  4. package/dist/auth.d.ts.map +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cmd/auth/api.d.ts +8 -1
  7. package/dist/cmd/auth/api.d.ts.map +1 -1
  8. package/dist/cmd/auth/index.d.ts +1 -1
  9. package/dist/cmd/auth/index.d.ts.map +1 -1
  10. package/dist/cmd/auth/login.d.ts +1 -1
  11. package/dist/cmd/auth/login.d.ts.map +1 -1
  12. package/dist/cmd/auth/logout.d.ts +1 -1
  13. package/dist/cmd/auth/logout.d.ts.map +1 -1
  14. package/dist/cmd/auth/signup.d.ts +3 -0
  15. package/dist/cmd/auth/signup.d.ts.map +1 -0
  16. package/dist/cmd/bundle/index.d.ts +1 -1
  17. package/dist/cmd/bundle/index.d.ts.map +1 -1
  18. package/dist/cmd/dev/index.d.ts +1 -1
  19. package/dist/cmd/dev/index.d.ts.map +1 -1
  20. package/dist/cmd/example/create-user.d.ts +1 -1
  21. package/dist/cmd/example/create-user.d.ts.map +1 -1
  22. package/dist/cmd/example/create.d.ts +1 -1
  23. package/dist/cmd/example/create.d.ts.map +1 -1
  24. package/dist/cmd/example/deploy.d.ts +1 -1
  25. package/dist/cmd/example/deploy.d.ts.map +1 -1
  26. package/dist/cmd/example/index.d.ts +1 -1
  27. package/dist/cmd/example/index.d.ts.map +1 -1
  28. package/dist/cmd/example/list.d.ts +1 -1
  29. package/dist/cmd/example/list.d.ts.map +1 -1
  30. package/dist/cmd/example/optional-auth.d.ts +3 -0
  31. package/dist/cmd/example/optional-auth.d.ts.map +1 -0
  32. package/dist/cmd/example/run-command.d.ts +1 -1
  33. package/dist/cmd/example/run-command.d.ts.map +1 -1
  34. package/dist/cmd/example/spinner.d.ts +1 -1
  35. package/dist/cmd/example/spinner.d.ts.map +1 -1
  36. package/dist/cmd/example/steps.d.ts +1 -1
  37. package/dist/cmd/example/steps.d.ts.map +1 -1
  38. package/dist/cmd/example/version.d.ts +1 -1
  39. package/dist/cmd/example/version.d.ts.map +1 -1
  40. package/dist/cmd/profile/create.d.ts +1 -1
  41. package/dist/cmd/profile/create.d.ts.map +1 -1
  42. package/dist/cmd/profile/delete.d.ts +1 -1
  43. package/dist/cmd/profile/delete.d.ts.map +1 -1
  44. package/dist/cmd/profile/index.d.ts +1 -1
  45. package/dist/cmd/profile/index.d.ts.map +1 -1
  46. package/dist/cmd/profile/list.d.ts +1 -1
  47. package/dist/cmd/profile/list.d.ts.map +1 -1
  48. package/dist/cmd/profile/show.d.ts +1 -1
  49. package/dist/cmd/profile/show.d.ts.map +1 -1
  50. package/dist/cmd/profile/use.d.ts +1 -1
  51. package/dist/cmd/profile/use.d.ts.map +1 -1
  52. package/dist/cmd/project/create.d.ts +1 -1
  53. package/dist/cmd/project/create.d.ts.map +1 -1
  54. package/dist/cmd/project/delete.d.ts +1 -1
  55. package/dist/cmd/project/delete.d.ts.map +1 -1
  56. package/dist/cmd/project/download.d.ts +1 -1
  57. package/dist/cmd/project/download.d.ts.map +1 -1
  58. package/dist/cmd/project/index.d.ts +1 -1
  59. package/dist/cmd/project/index.d.ts.map +1 -1
  60. package/dist/cmd/project/list.d.ts +1 -1
  61. package/dist/cmd/project/list.d.ts.map +1 -1
  62. package/dist/cmd/project/show.d.ts +1 -1
  63. package/dist/cmd/project/show.d.ts.map +1 -1
  64. package/dist/cmd/project/template-flow.d.ts +1 -1
  65. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  66. package/dist/cmd/version/index.d.ts +1 -1
  67. package/dist/cmd/version/index.d.ts.map +1 -1
  68. package/dist/config.d.ts.map +1 -1
  69. package/dist/index.d.ts +1 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/tui.d.ts +22 -0
  72. package/dist/tui.d.ts.map +1 -1
  73. package/dist/types.d.ts +29 -4
  74. package/dist/types.d.ts.map +1 -1
  75. package/package.json +1 -1
  76. package/src/api.ts +16 -2
  77. package/src/auth.ts +79 -4
  78. package/src/cli.ts +51 -1
  79. package/src/cmd/auth/README.md +37 -3
  80. package/src/cmd/auth/api.ts +67 -3
  81. package/src/cmd/auth/index.ts +3 -2
  82. package/src/cmd/auth/login.ts +15 -7
  83. package/src/cmd/auth/logout.ts +3 -3
  84. package/src/cmd/auth/signup.ts +51 -0
  85. package/src/cmd/bundle/index.ts +1 -1
  86. package/src/cmd/dev/index.ts +137 -50
  87. package/src/cmd/example/create-user.ts +1 -1
  88. package/src/cmd/example/create.ts +1 -1
  89. package/src/cmd/example/deploy.ts +1 -1
  90. package/src/cmd/example/index.ts +3 -1
  91. package/src/cmd/example/list.ts +1 -1
  92. package/src/cmd/example/optional-auth.ts +38 -0
  93. package/src/cmd/example/run-command.ts +2 -2
  94. package/src/cmd/example/sound.ts +2 -2
  95. package/src/cmd/example/spinner.ts +2 -2
  96. package/src/cmd/example/steps.ts +2 -2
  97. package/src/cmd/example/version.ts +1 -1
  98. package/src/cmd/profile/create.ts +3 -3
  99. package/src/cmd/profile/delete.ts +3 -3
  100. package/src/cmd/profile/index.ts +1 -1
  101. package/src/cmd/profile/list.ts +3 -3
  102. package/src/cmd/profile/show.ts +3 -3
  103. package/src/cmd/profile/use.ts +3 -3
  104. package/src/cmd/project/create.ts +1 -1
  105. package/src/cmd/project/delete.ts +1 -1
  106. package/src/cmd/project/download.ts +3 -3
  107. package/src/cmd/project/index.ts +1 -1
  108. package/src/cmd/project/list.ts +1 -1
  109. package/src/cmd/project/show.ts +1 -1
  110. package/src/cmd/project/template-flow.ts +3 -3
  111. package/src/cmd/version/index.ts +3 -3
  112. package/src/config.ts +9 -2
  113. package/src/index.ts +1 -0
  114. package/src/tui.ts +121 -6
  115. package/src/types.ts +47 -2
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/cli",
3
- "version": "0.0.12",
3
+ "version": "0.0.15",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./dist/index.d.ts",
package/src/api.ts CHANGED
@@ -68,6 +68,17 @@ export class UpgradeRequiredError extends Error {
68
68
  }
69
69
  }
70
70
 
71
+ export class APIError extends Error {
72
+ constructor(
73
+ message: string,
74
+ public status: number,
75
+ public code?: string
76
+ ) {
77
+ super(message);
78
+ this.name = 'APIError';
79
+ }
80
+ }
81
+
71
82
  export class APIClient {
72
83
  constructor(
73
84
  private baseUrl: string,
@@ -141,10 +152,13 @@ export class APIClient {
141
152
 
142
153
  // Throw with message from API if available
143
154
  if (errorData?.message) {
144
- throw new Error(errorData.message);
155
+ throw new APIError(errorData.message, response.status, errorData.code);
145
156
  }
146
157
 
147
- throw new Error(`API error: ${response.status} ${response.statusText}`);
158
+ throw new APIError(
159
+ `API error: ${response.status} ${response.statusText}`,
160
+ response.status
161
+ );
148
162
  }
149
163
 
150
164
  // Successful response; handle empty bodies (e.g., 204 No Content)
package/src/auth.ts CHANGED
@@ -3,6 +3,7 @@ import { getDefaultConfigDir, getAuth } from './config';
3
3
  import { getCommand } from './command-prefix';
4
4
  import type { CommandContext, AuthData } from './types';
5
5
  import * as tui from './tui';
6
+ import enquirer from 'enquirer';
6
7
 
7
8
  export function isTTY(): boolean {
8
9
  return process.stdin.isTTY === true && process.stdout.isTTY === true;
@@ -45,8 +46,10 @@ export async function requireAuth(ctx: CommandContext<false>): Promise<AuthData>
45
46
  }
46
47
  }
47
48
 
48
- // Interactive mode - prompt user to login
49
- tui.newline();
49
+ // Show signup benefits box
50
+ tui.showSignupBenefits();
51
+
52
+ // Interactive mode - show warning and confirm
50
53
  tui.warning(
51
54
  hasConfig
52
55
  ? 'You are not currently logged in or your session has expired.'
@@ -60,9 +63,65 @@ export async function requireAuth(ctx: CommandContext<false>): Promise<AuthData>
60
63
  );
61
64
 
62
65
  if (!shouldLogin) {
63
- logger.fatal(`Authentication required. Run "${loginCmd}" when you're ready to continue.`);
66
+ return tui.fatal(`Authentication required. Run "${loginCmd}" when you're ready to continue.`);
67
+ }
68
+ tui.newline();
69
+
70
+ // Import and run login flow
71
+ const { loginCommand } = await import('./cmd/auth/login');
72
+ await loginCommand.handler(ctx);
73
+
74
+ // After login completes, verify we have auth
75
+ const newAuth = await getAuth();
76
+ if (!newAuth || newAuth.expires <= new Date()) {
77
+ return tui.fatal('Login was not completed successfully.');
78
+ }
79
+ tui.newline();
80
+
81
+ return newAuth;
82
+ }
83
+
84
+ export async function optionalAuth(
85
+ ctx: CommandContext<false>,
86
+ continueText?: string
87
+ ): Promise<AuthData | null> {
88
+ const auth = await getAuth();
89
+
90
+ if (auth && auth.expires > new Date()) {
91
+ return auth;
92
+ }
93
+
94
+ if (!isTTY()) {
95
+ // In non-TTY mode, just return null
96
+ return null;
64
97
  }
65
98
 
99
+ // Show signup benefits box
100
+ tui.showSignupBenefits();
101
+
102
+ // Show select menu with custom or default text
103
+ const defaultContinueText = 'Start without an account (run locally)';
104
+ const response = await enquirer.prompt<{ action: string }>({
105
+ type: 'select',
106
+ name: 'action',
107
+ message: 'How would you like to continue?',
108
+ choices: [
109
+ {
110
+ name: 'login',
111
+ message: 'Create an account or login',
112
+ },
113
+ {
114
+ name: 'local',
115
+ message: continueText || defaultContinueText,
116
+ },
117
+ ],
118
+ });
119
+
120
+ if (response.action === 'local') {
121
+ return null;
122
+ }
123
+ tui.newline();
124
+
66
125
  // Import and run login flow
67
126
  const { loginCommand } = await import('./cmd/auth/login');
68
127
  await loginCommand.handler(ctx);
@@ -70,8 +129,9 @@ export async function requireAuth(ctx: CommandContext<false>): Promise<AuthData>
70
129
  // After login completes, verify we have auth
71
130
  const newAuth = await getAuth();
72
131
  if (!newAuth || newAuth.expires <= new Date()) {
73
- return logger.fatal('Login was not completed successfully.');
132
+ return null;
74
133
  }
134
+ tui.newline();
75
135
 
76
136
  return newAuth;
77
137
  }
@@ -89,3 +149,18 @@ export function withAuth<TArgs extends unknown[]>(
89
149
  return handler(authenticatedCtx, ...args);
90
150
  };
91
151
  }
152
+
153
+ export function withOptionalAuth<TArgs extends unknown[]>(
154
+ ctx: CommandContext<false>,
155
+ handler: (
156
+ ctx: CommandContext<false>,
157
+ auth: AuthData | null,
158
+ ...args: TArgs
159
+ ) => Promise<void> | void,
160
+ continueText?: string
161
+ ): (...args: TArgs) => Promise<void> {
162
+ return async (...args: TArgs) => {
163
+ const auth = await optionalAuth(ctx, continueText);
164
+ return handler(ctx, auth, ...args);
165
+ };
166
+ }
package/src/cli.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
  import type { CommandDefinition, SubcommandDefinition, CommandContext } from './types';
3
3
  import { showBanner } from './banner';
4
- import { requireAuth } from './auth';
4
+ import { requireAuth, optionalAuth } from './auth';
5
5
  import { parseArgsSchema, parseOptionsSchema, buildValidationInput } from './schema-parser';
6
6
 
7
7
  export async function createCLI(version: string): Promise<Command> {
@@ -121,6 +121,46 @@ async function registerSubcommand(
121
121
  };
122
122
  await subcommand.handler(ctx);
123
123
  }
124
+ } else if (subcommand.optionalAuth) {
125
+ const continueText =
126
+ typeof subcommand.optionalAuth === 'string' ? subcommand.optionalAuth : undefined;
127
+ const auth = await optionalAuth(baseCtx as CommandContext<false>, continueText);
128
+
129
+ if (subcommand.schema) {
130
+ try {
131
+ const input = buildValidationInput(subcommand.schema, args, options);
132
+ const ctx: Record<string, unknown> = {
133
+ ...baseCtx,
134
+ ...(auth ? { auth } : {}),
135
+ };
136
+ if (subcommand.schema.args) {
137
+ ctx.args = subcommand.schema.args.parse(input.args);
138
+ }
139
+ if (subcommand.schema.options) {
140
+ ctx.opts = subcommand.schema.options.parse(input.options);
141
+ }
142
+ await subcommand.handler(ctx as CommandContext);
143
+ } catch (error) {
144
+ if (error && typeof error === 'object' && 'issues' in error) {
145
+ baseCtx.logger.error('Validation error:');
146
+ const issues = (error as { issues: Array<{ path: string[]; message: string }> })
147
+ .issues;
148
+ for (const issue of issues) {
149
+ baseCtx.logger.error(` ${issue.path.join('.')}: ${issue.message}`);
150
+ }
151
+ process.exit(1);
152
+ }
153
+ throw error;
154
+ }
155
+ } else if (auth) {
156
+ const ctx: CommandContext<true> = {
157
+ ...baseCtx,
158
+ auth,
159
+ };
160
+ await subcommand.handler(ctx);
161
+ } else {
162
+ await subcommand.handler(baseCtx as CommandContext<false>);
163
+ }
124
164
  } else {
125
165
  if (subcommand.schema) {
126
166
  try {
@@ -175,6 +215,16 @@ export async function registerCommands(
175
215
  const auth = await requireAuth(baseCtx as CommandContext<false>);
176
216
  const ctx: CommandContext<true> = { ...baseCtx, auth };
177
217
  await cmdDef.handler!(ctx);
218
+ } else if (cmdDef.optionalAuth) {
219
+ const continueText =
220
+ typeof cmdDef.optionalAuth === 'string' ? cmdDef.optionalAuth : undefined;
221
+ const auth = await optionalAuth(baseCtx as CommandContext<false>, continueText);
222
+ if (auth) {
223
+ const ctx: CommandContext<true> = { ...baseCtx, auth };
224
+ await cmdDef.handler!(ctx);
225
+ } else {
226
+ await cmdDef.handler!(baseCtx as CommandContext<false>);
227
+ }
178
228
  } else {
179
229
  await cmdDef.handler!(baseCtx as CommandContext<false>);
180
230
  }
@@ -33,6 +33,34 @@ preferences:
33
33
  orgId: ''
34
34
  ```
35
35
 
36
+ ### `auth signup`
37
+
38
+ Create a new Agentuity Cloud Platform account.
39
+
40
+ ```bash
41
+ agentuity auth signup
42
+ # or
43
+ agentuity signup
44
+ ```
45
+
46
+ **How it works:**
47
+
48
+ 1. Generates a random 5-character OTP locally (client-side)
49
+ 2. Displays a signup URL with the OTP code: `/sign-up?code=<otp>`
50
+ 3. User opens the URL in their browser and completes the signup process
51
+ 4. Polls `GET /cli/auth/signup/<otp>` every 2 seconds for up to 5 minutes
52
+ 5. Server returns 404 until signup is complete, then returns credentials
53
+ 6. Once complete, saves the API key, user ID, and expiration to config
54
+
55
+ **Stored data:**
56
+
57
+ ```yaml
58
+ auth:
59
+ api_key: 'your-api-key'
60
+ user_id: 'user-id'
61
+ expires: 1234567890
62
+ ```
63
+
36
64
  ### `auth logout`
37
65
 
38
66
  Logout of the Agentuity Cloud Platform by clearing authentication credentials.
@@ -55,6 +83,7 @@ The authentication flow uses the following API endpoints:
55
83
 
56
84
  - `GET /cli/auth/start` - Generate OTP for login
57
85
  - `POST /cli/auth/check` - Poll for login completion with OTP
86
+ - `GET /cli/auth/signup/<otp>` - Poll for signup completion with client-generated OTP (returns 404 until complete)
58
87
 
59
88
  ## URL Configuration
60
89
 
@@ -80,13 +109,18 @@ This allows different profiles (e.g., `local`, `production`) to point to differe
80
109
 
81
110
  ## Implementation Details
82
111
 
83
- - **Generic API Client**: [../../api.ts](../../api.ts) provides the generic `APIClient` class for HTTP requests
84
- - **Auth-specific APIs**: [api.ts](./api.ts) provides `generateLoginOTP()` and `pollForLoginCompletion()` functions
112
+ - **Generic API Client**: [../../api.ts](../../api.ts) provides the generic `APIClient` class and `APIError` for HTTP requests
113
+ - **Auth-specific APIs**: [api.ts](./api.ts) provides:
114
+ - `generateLoginOTP()` and `pollForLoginCompletion()` for login flow
115
+ - `generateSignupOTP()` and `pollForSignupCompletion()` for signup flow
85
116
  - **Config Management**: [../../config.ts](../../config.ts) provides `saveAuth()`, `clearAuth()`, and `getAuth()` helpers
86
117
  - **Browser Opening**: Uses `Bun.spawn(['open', authURL])` on non-Windows platforms to auto-open browser
87
- - **Polling**: Polls every 2 seconds with 60-second timeout
118
+ - **Polling**:
119
+ - Login: Polls every 2 seconds with 60-second timeout
120
+ - Signup: Polls every 2 seconds with 5-minute timeout, retries on 404 errors
88
121
  - **Error Handling**: All errors are caught and displayed to user with appropriate exit codes
89
122
  - `UpgradeRequiredError`: Shows upgrade instructions when CLI version is outdated
123
+ - `APIError`: Preserves HTTP status codes for proper retry logic (e.g., 404 during signup polling)
90
124
  - Generic API errors: Display the error message from the server
91
125
  - See [../../api-errors.md](../../api-errors.md) for details
92
126
 
@@ -1,5 +1,5 @@
1
- import { APIClient } from '@/api';
2
- import type { Config } from '@/types';
1
+ import { APIClient, APIError } from '../../api';
2
+ import type { Config } from '../../types';
3
3
 
4
4
  interface APIResponse<T> {
5
5
  success: boolean;
@@ -23,6 +23,18 @@ export interface LoginResult {
23
23
  expires: Date;
24
24
  }
25
25
 
26
+ interface SignupCompleteData {
27
+ userId: string;
28
+ apiKey: string;
29
+ expiresAt: number;
30
+ }
31
+
32
+ export interface SignupResult {
33
+ apiKey: string;
34
+ userId: string;
35
+ expires: Date;
36
+ }
37
+
26
38
  export async function generateLoginOTP(apiUrl: string, config?: Config | null): Promise<string> {
27
39
  const client = new APIClient(apiUrl, undefined, config);
28
40
  const resp = await client.request<APIResponse<OTPStartData>>('GET', '/cli/auth/start');
@@ -64,8 +76,60 @@ export async function pollForLoginCompletion(
64
76
  };
65
77
  }
66
78
 
67
- await new Promise((resolve) => setTimeout(resolve, 2000));
79
+ await Bun.sleep(2000);
68
80
  }
69
81
 
70
82
  throw new Error('Login timed out');
71
83
  }
84
+
85
+ export function generateSignupOTP(): string {
86
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
87
+ let result = '';
88
+ const array = new Uint8Array(5);
89
+ crypto.getRandomValues(array);
90
+ for (let i = 0; i < 5; i++) {
91
+ result += chars[array[i] % chars.length];
92
+ }
93
+ return result;
94
+ }
95
+
96
+ export async function pollForSignupCompletion(
97
+ apiUrl: string,
98
+ otp: string,
99
+ config?: Config | null,
100
+ timeoutMs = 300000
101
+ ): Promise<SignupResult> {
102
+ const client = new APIClient(apiUrl, undefined, config);
103
+ const started = Date.now();
104
+
105
+ while (Date.now() - started < timeoutMs) {
106
+ try {
107
+ const resp = await client.request<APIResponse<SignupCompleteData>>(
108
+ 'GET',
109
+ `/cli/auth/signup/${otp}`
110
+ );
111
+
112
+ if (!resp.success) {
113
+ throw new Error(resp.message);
114
+ }
115
+
116
+ if (resp.data) {
117
+ return {
118
+ apiKey: resp.data.apiKey,
119
+ userId: resp.data.userId,
120
+ expires: new Date(resp.data.expiresAt),
121
+ };
122
+ }
123
+ } catch (error) {
124
+ if (error instanceof APIError && error.status === 404) {
125
+ await Bun.sleep(2000);
126
+ continue;
127
+ }
128
+ throw error;
129
+ }
130
+
131
+ await Bun.sleep(2000);
132
+ }
133
+
134
+ throw new Error('Signup timed out');
135
+ }
@@ -1,9 +1,10 @@
1
- import { createCommand } from '@/types';
1
+ import { createCommand } from '../../types';
2
2
  import { loginCommand } from './login';
3
3
  import { logoutCommand } from './logout';
4
+ import { signupCommand } from './signup';
4
5
 
5
6
  export const command = createCommand({
6
7
  name: 'auth',
7
8
  description: 'Authentication and authorization related commands',
8
- subcommands: [loginCommand, logoutCommand],
9
+ subcommands: [loginCommand, logoutCommand, signupCommand],
9
10
  });
@@ -1,8 +1,8 @@
1
- import type { SubcommandDefinition } from '@/types';
2
- import { getAPIBaseURL, getAppBaseURL, UpgradeRequiredError } from '@/api';
3
- import { saveAuth } from '@/config';
1
+ import type { SubcommandDefinition } from '../../types';
2
+ import { getAPIBaseURL, getAppBaseURL, UpgradeRequiredError } from '../../api';
3
+ import { saveAuth } from '../../config';
4
4
  import { generateLoginOTP, pollForLoginCompletion } from './api';
5
- import * as tui from '@/tui';
5
+ import * as tui from '../../tui';
6
6
 
7
7
  export const loginCommand: SubcommandDefinition = {
8
8
  name: 'login',
@@ -15,9 +15,16 @@ export const loginCommand: SubcommandDefinition = {
15
15
  const appUrl = getAppBaseURL(config);
16
16
 
17
17
  try {
18
- console.log('Generating login OTP...');
18
+ let otp: string | undefined;
19
+
20
+ await tui.spinner('Generating login one time code...', async () => {
21
+ otp = await generateLoginOTP(apiUrl, config);
22
+ });
23
+
24
+ if (!otp) {
25
+ return;
26
+ }
19
27
 
20
- const otp = await generateLoginOTP(apiUrl, config);
21
28
  const authURL = `${appUrl}/auth/cli`;
22
29
 
23
30
  const copied = await tui.copyToClipboard(otp);
@@ -39,7 +46,8 @@ export const loginCommand: SubcommandDefinition = {
39
46
  tui.newline();
40
47
 
41
48
  if (process.platform === 'darwin') {
42
- await tui.waitForAnyKey('Press Enter to open the URL...');
49
+ await tui.waitForAnyKey('Press any key to open the URL in your browser...');
50
+ tui.newline();
43
51
  try {
44
52
  Bun.spawn(['open', authURL], {
45
53
  stdio: ['ignore', 'ignore', 'ignore'],
@@ -1,6 +1,6 @@
1
- import type { SubcommandDefinition } from '@/types';
2
- import { clearAuth } from '@/config';
3
- import * as tui from '@/tui';
1
+ import type { SubcommandDefinition } from '../../types';
2
+ import { clearAuth } from '../../config';
3
+ import * as tui from '../../tui';
4
4
 
5
5
  export const logoutCommand: SubcommandDefinition = {
6
6
  name: 'logout',
@@ -0,0 +1,51 @@
1
+ import type { SubcommandDefinition } from '../../types';
2
+ import { getAPIBaseURL, getAppBaseURL, UpgradeRequiredError } from '../../api';
3
+ import { saveAuth } from '../../config';
4
+ import { generateSignupOTP, pollForSignupCompletion } from './api';
5
+ import * as tui from '../../tui';
6
+
7
+ export const signupCommand: SubcommandDefinition = {
8
+ name: 'signup',
9
+ description: 'Create a new Agentuity Cloud Platform account',
10
+ toplevel: true,
11
+
12
+ async handler(ctx) {
13
+ const { logger, config } = ctx;
14
+ const apiUrl = getAPIBaseURL(config);
15
+ const appUrl = getAppBaseURL(config);
16
+
17
+ try {
18
+ const otp = generateSignupOTP();
19
+
20
+ const signupURL = `${appUrl}/sign-up?code=${otp}`;
21
+
22
+ const bannerBody = `Please open the URL in your browser:\n\n${tui.link(signupURL)}\n\n${tui.muted('Once you have completed the signup process, you will be given a one-time password to complete the signup process.')}`;
23
+
24
+ tui.banner('Signup for Agentuity', bannerBody);
25
+ tui.newline();
26
+
27
+ await tui.spinner('Waiting for signup to complete...', async () => {
28
+ const result = await pollForSignupCompletion(apiUrl, otp, config);
29
+
30
+ await saveAuth({
31
+ apiKey: result.apiKey,
32
+ userId: result.userId,
33
+ expires: result.expires,
34
+ });
35
+ });
36
+
37
+ tui.newline();
38
+ tui.success('Welcome to Agentuity! You are now logged in');
39
+ } catch (error) {
40
+ if (error instanceof UpgradeRequiredError) {
41
+ const bannerBody = `${error.message}\n\nVisit: ${tui.link('https://agentuity.dev/CLI/installation')}`;
42
+ tui.banner('CLI Upgrade Required', bannerBody);
43
+ process.exit(1);
44
+ } else if (error instanceof Error) {
45
+ logger.fatal(`Signup failed: ${error.message}`);
46
+ } else {
47
+ logger.fatal('Signup failed');
48
+ }
49
+ }
50
+ },
51
+ };
@@ -1,4 +1,4 @@
1
- import { createSubcommand } from '@/types';
1
+ import { createSubcommand } from '../../types';
2
2
  import { z } from 'zod';
3
3
  import { resolve } from 'node:path';
4
4
  import { bundle } from './bundler';