@agentuity/cli 0.0.12 → 0.0.13
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/dist/api.d.ts +5 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/auth.d.ts +2 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cmd/auth/api.d.ts +7 -0
- package/dist/cmd/auth/api.d.ts.map +1 -1
- package/dist/cmd/auth/index.d.ts.map +1 -1
- package/dist/cmd/auth/login.d.ts.map +1 -1
- package/dist/cmd/auth/signup.d.ts +3 -0
- package/dist/cmd/auth/signup.d.ts.map +1 -0
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/example/index.d.ts.map +1 -1
- package/dist/cmd/example/optional-auth.d.ts +3 -0
- package/dist/cmd/example/optional-auth.d.ts.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/tui.d.ts +22 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/types.d.ts +29 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api.ts +16 -2
- package/src/auth.ts +79 -4
- package/src/cli.ts +51 -1
- package/src/cmd/auth/README.md +37 -3
- package/src/cmd/auth/api.ts +66 -2
- package/src/cmd/auth/index.ts +2 -1
- package/src/cmd/auth/login.ts +11 -3
- package/src/cmd/auth/signup.ts +51 -0
- package/src/cmd/dev/index.ts +135 -48
- package/src/cmd/example/index.ts +2 -0
- package/src/cmd/example/optional-auth.ts +38 -0
- package/src/config.ts +8 -1
- package/src/index.ts +1 -0
- package/src/tui.ts +121 -6
- package/src/types.ts +47 -2
package/dist/api.d.ts
CHANGED
|
@@ -13,6 +13,11 @@ import type { Config } from './types';
|
|
|
13
13
|
export declare class UpgradeRequiredError extends Error {
|
|
14
14
|
constructor(message: string);
|
|
15
15
|
}
|
|
16
|
+
export declare class APIError extends Error {
|
|
17
|
+
status: number;
|
|
18
|
+
code?: string | undefined;
|
|
19
|
+
constructor(message: string, status: number, code?: string | undefined);
|
|
20
|
+
}
|
|
16
21
|
export declare class APIClient {
|
|
17
22
|
private baseUrl;
|
|
18
23
|
private apiKey?;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAmDtC,qBAAa,oBAAqB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,SAAS;IAEpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,MAAM,CAAC;gBAFP,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,MAAM,CAAC,GAAE,MAAM,GAAG,IAAI,aAAA;IAGzB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAmDtC,qBAAa,oBAAqB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI3B;AAED,qBAAa,QAAS,SAAQ,KAAK;IAG1B,MAAM,EAAE,MAAM;IACd,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,YAAA;CAKrB;AAED,qBAAa,SAAS;IAEpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,MAAM,CAAC;gBAFP,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,MAAM,CAAC,GAAE,MAAM,GAAG,IAAI,aAAA;IAGzB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAqF9E;AAED,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAW5D;AAED,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAW5D"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -3,5 +3,7 @@ export declare function isTTY(): boolean;
|
|
|
3
3
|
export declare function hasLoggedInBefore(): boolean;
|
|
4
4
|
export declare function isAuthenticated(): Promise<boolean>;
|
|
5
5
|
export declare function requireAuth(ctx: CommandContext<false>): Promise<AuthData>;
|
|
6
|
+
export declare function optionalAuth(ctx: CommandContext<false>, continueText?: string): Promise<AuthData | null>;
|
|
6
7
|
export declare function withAuth<TArgs extends unknown[]>(ctx: CommandContext<false>, handler: (ctx: CommandContext<true>, ...args: TArgs) => Promise<void> | void): (...args: TArgs) => Promise<void>;
|
|
8
|
+
export declare function withOptionalAuth<TArgs extends unknown[]>(ctx: CommandContext<false>, handler: (ctx: CommandContext<false>, auth: AuthData | null, ...args: TArgs) => Promise<void> | void, continueText?: string): (...args: TArgs) => Promise<void>;
|
|
7
9
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxD,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAG3C;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAMxD;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyD/E;AAED,wBAAsB,YAAY,CACjC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,EAC1B,YAAY,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAkD1B;AAED,wBAAgB,QAAQ,CAAC,KAAK,SAAS,OAAO,EAAE,EAC/C,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,EAC1B,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC1E,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CASnC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,OAAO,EAAE,EACvD,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,EAC1B,OAAO,EAAE,CACR,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,EAC1B,IAAI,EAAE,QAAQ,GAAG,IAAI,EACrB,GAAG,IAAI,EAAE,KAAK,KACV,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EACzB,YAAY,CAAC,EAAE,MAAM,GACnB,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAKnC"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAwB,cAAc,EAAE,MAAM,SAAS,CAAC;AAKvF,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BjE;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAwB,cAAc,EAAE,MAAM,SAAS,CAAC;AAKvF,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BjE;AAiKD,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
package/dist/cmd/auth/api.d.ts
CHANGED
|
@@ -4,6 +4,13 @@ export interface LoginResult {
|
|
|
4
4
|
userId: string;
|
|
5
5
|
expires: Date;
|
|
6
6
|
}
|
|
7
|
+
export interface SignupResult {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
userId: string;
|
|
10
|
+
expires: Date;
|
|
11
|
+
}
|
|
7
12
|
export declare function generateLoginOTP(apiUrl: string, config?: Config | null): Promise<string>;
|
|
8
13
|
export declare function pollForLoginCompletion(apiUrl: string, otp: string, config?: Config | null, timeoutMs?: number): Promise<LoginResult>;
|
|
14
|
+
export declare function generateSignupOTP(): string;
|
|
15
|
+
export declare function pollForSignupCompletion(apiUrl: string, otp: string, config?: Config | null, timeoutMs?: number): Promise<SignupResult>;
|
|
9
16
|
//# sourceMappingURL=api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAkBtC,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;CACd;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9F;AAED,wBAAsB,sBAAsB,CAC3C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,SAAQ,GACf,OAAO,CAAC,WAAW,CAAC,CAyBtB"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAkBtC,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;CACd;AAQD,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;CACd;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9F;AAED,wBAAsB,sBAAsB,CAC3C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,SAAQ,GACf,OAAO,CAAC,WAAW,CAAC,CAyBtB;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAS1C;AAED,wBAAsB,uBAAuB,CAC5C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,SAAS,GAChB,OAAO,CAAC,YAAY,CAAC,CAkCvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,qCAIlB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAMpD,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAMpD,eAAO,MAAM,YAAY,EAAE,oBA6E1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../../src/cmd/auth/signup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAMpD,eAAO,MAAM,aAAa,EAAE,oBA4C3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/dev/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/dev/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,qCAgKlB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/example/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/example/index.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,OAAO,qCAgBlB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional-auth.d.ts","sourceRoot":"","sources":["../../../src/cmd/example/optional-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAA4B,MAAM,SAAS,CAAC;AAG9E,eAAO,MAAM,sBAAsB,EAAE,oBAkCpC,CAAC"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKzD,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAOrD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7D;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBlD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAkCxD;AAED,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKzD,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAOrD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7D;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBlD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAkCxD;AAED,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsC5E;AA4CD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnF;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAU/C;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAcxD;AA4BD,iBAAS,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0DlD;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createCLI, registerCommands } from './cli';
|
|
2
2
|
export { validateRuntime, isBun } from './runtime';
|
|
3
3
|
export { getVersion, getRevision, getPackageName, getPackage } from './version';
|
|
4
|
+
export { requireAuth, optionalAuth, withAuth, withOptionalAuth } from './auth';
|
|
4
5
|
export { loadConfig, saveConfig, getDefaultConfigPath, getDefaultConfigDir, getProfilePath, ensureConfigDir, saveProfile, getProfile, fetchProfiles, saveAuth, clearAuth, getAuth, } from './config';
|
|
5
6
|
export { APIClient, getAPIBaseURL, getAppBaseURL, UpgradeRequiredError } from './api';
|
|
6
7
|
export { Logger, logger } from './logger';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EACN,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,GACP,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACN,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,eAAe,IAAI,mBAAmB,EAC3C,KAAK,qBAAqB,GAC1B,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,MAAM,EACN,QAAQ,EACR,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,OAAO,EACP,QAAQ,EACR,cAAc,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1D,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EACN,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,GACP,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACN,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,eAAe,IAAI,mBAAmB,EAC3C,KAAK,qBAAqB,GAC1B,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,MAAM,EACN,QAAQ,EACR,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,OAAO,EACP,QAAQ,EACR,cAAc,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1D,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/tui.d.ts
CHANGED
|
@@ -14,6 +14,10 @@ export declare function success(message: string): void;
|
|
|
14
14
|
* Print an error message with a red X
|
|
15
15
|
*/
|
|
16
16
|
export declare function error(message: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Print an error message with a red X and then exit
|
|
19
|
+
*/
|
|
20
|
+
export declare function fatal(message: string): never;
|
|
17
21
|
/**
|
|
18
22
|
* Print a warning message with a yellow warning icon
|
|
19
23
|
*/
|
|
@@ -59,6 +63,7 @@ export declare function padLeft(str: string, length: number, pad?: string): stri
|
|
|
59
63
|
* Creates a bordered box around the content
|
|
60
64
|
*
|
|
61
65
|
* Uses Bun.stringWidth() for accurate width calculation with ANSI codes and unicode
|
|
66
|
+
* Responsive to terminal width - adapts to narrow terminals
|
|
62
67
|
*/
|
|
63
68
|
export declare function banner(title: string, body: string): void;
|
|
64
69
|
/**
|
|
@@ -73,6 +78,11 @@ export declare function waitForAnyKey(message?: string): Promise<void>;
|
|
|
73
78
|
* Exits with code 1 if CTRL+C is pressed
|
|
74
79
|
*/
|
|
75
80
|
export declare function confirm(message: string, defaultValue?: boolean): Promise<boolean>;
|
|
81
|
+
/**
|
|
82
|
+
* Display a signup benefits box with cyan border
|
|
83
|
+
* Shows the value proposition for creating an Agentuity account
|
|
84
|
+
*/
|
|
85
|
+
export declare function showSignupBenefits(): void;
|
|
76
86
|
/**
|
|
77
87
|
* Copy text to clipboard
|
|
78
88
|
* Returns true if successful, false otherwise
|
|
@@ -146,6 +156,18 @@ export interface CommandRunnerOptions {
|
|
|
146
156
|
* Defaults to false
|
|
147
157
|
*/
|
|
148
158
|
clearOnSuccess?: boolean;
|
|
159
|
+
/**
|
|
160
|
+
* If true or undefined, will truncate each line of output
|
|
161
|
+
*/
|
|
162
|
+
truncate?: boolean;
|
|
163
|
+
/**
|
|
164
|
+
* If undefined, will show up to 3 last lines of output while running. Customize the number with this property.
|
|
165
|
+
*/
|
|
166
|
+
maxLinesOutput?: number;
|
|
167
|
+
/**
|
|
168
|
+
* If undefined, will show up to 10 last lines on failure. Customize the number with this property.
|
|
169
|
+
*/
|
|
170
|
+
maxLinesOnFailure?: number;
|
|
149
171
|
}
|
|
150
172
|
/**
|
|
151
173
|
* Run an external command and stream its output with a live UI
|
package/dist/tui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA+C9C,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAExD;AAUD;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,IAAI,CAI9D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUxC;AAuBD;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAKvE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAKtE;AAED
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -92,12 +92,13 @@ export type CommandContext<RequiresAuth extends boolean = false, ArgsSchema exte
|
|
|
92
92
|
logger: Logger;
|
|
93
93
|
options: GlobalOptions;
|
|
94
94
|
};
|
|
95
|
-
export declare function createSubcommand<TRequiresAuth extends boolean, TArgsSchema extends z.ZodType | undefined, TOptionsSchema extends z.ZodType | undefined>(definition: {
|
|
95
|
+
export declare function createSubcommand<TRequiresAuth extends boolean, TOptionalAuth extends boolean | string, TArgsSchema extends z.ZodType | undefined, TOptionsSchema extends z.ZodType | undefined>(definition: {
|
|
96
96
|
name: string;
|
|
97
97
|
description: string;
|
|
98
98
|
aliases?: string[];
|
|
99
99
|
toplevel?: boolean;
|
|
100
100
|
requiresAuth?: TRequiresAuth;
|
|
101
|
+
optionalAuth?: TOptionalAuth;
|
|
101
102
|
schema?: TArgsSchema extends z.ZodType ? TOptionsSchema extends z.ZodType ? {
|
|
102
103
|
args: TArgsSchema;
|
|
103
104
|
options: TOptionsSchema;
|
|
@@ -106,14 +107,15 @@ export declare function createSubcommand<TRequiresAuth extends boolean, TArgsSch
|
|
|
106
107
|
} : TOptionsSchema extends z.ZodType ? {
|
|
107
108
|
options: TOptionsSchema;
|
|
108
109
|
} : never;
|
|
109
|
-
handler(ctx: CommandContext<TRequiresAuth extends true ? true : false, TArgsSchema, TOptionsSchema>): void | Promise<void>;
|
|
110
|
+
handler(ctx: CommandContext<TRequiresAuth extends true ? true : TOptionalAuth extends true | string ? true | false : false, TArgsSchema, TOptionsSchema>): void | Promise<void>;
|
|
110
111
|
}): SubcommandDefinition;
|
|
111
|
-
export declare function createCommand<TRequiresAuth extends boolean, TArgsSchema extends z.ZodType | undefined, TOptionsSchema extends z.ZodType | undefined>(definition: {
|
|
112
|
+
export declare function createCommand<TRequiresAuth extends boolean, TOptionalAuth extends boolean | string, TArgsSchema extends z.ZodType | undefined, TOptionsSchema extends z.ZodType | undefined>(definition: {
|
|
112
113
|
name: string;
|
|
113
114
|
description: string;
|
|
114
115
|
aliases?: string[];
|
|
115
116
|
hidden?: boolean;
|
|
116
117
|
requiresAuth?: TRequiresAuth;
|
|
118
|
+
optionalAuth?: TOptionalAuth;
|
|
117
119
|
schema?: TArgsSchema extends z.ZodType ? TOptionsSchema extends z.ZodType ? {
|
|
118
120
|
args: TArgsSchema;
|
|
119
121
|
options: TOptionsSchema;
|
|
@@ -122,7 +124,7 @@ export declare function createCommand<TRequiresAuth extends boolean, TArgsSchema
|
|
|
122
124
|
} : TOptionsSchema extends z.ZodType ? {
|
|
123
125
|
options: TOptionsSchema;
|
|
124
126
|
} : never;
|
|
125
|
-
handler?(ctx: CommandContext<TRequiresAuth extends true ? true : false, TArgsSchema, TOptionsSchema>): void | Promise<void>;
|
|
127
|
+
handler?(ctx: CommandContext<TRequiresAuth extends true ? true : TOptionalAuth extends true | string ? true | false : false, TArgsSchema, TOptionsSchema>): void | Promise<void>;
|
|
126
128
|
subcommands?: SubcommandDefinition[];
|
|
127
129
|
}): CommandDefinition;
|
|
128
130
|
export type SubcommandDefinition = {
|
|
@@ -131,6 +133,7 @@ export type SubcommandDefinition = {
|
|
|
131
133
|
aliases?: string[];
|
|
132
134
|
toplevel?: boolean;
|
|
133
135
|
requiresAuth: true;
|
|
136
|
+
optionalAuth?: false | string;
|
|
134
137
|
schema?: CommandSchemas;
|
|
135
138
|
handler(ctx: CommandContext): void | Promise<void>;
|
|
136
139
|
} | {
|
|
@@ -139,6 +142,16 @@ export type SubcommandDefinition = {
|
|
|
139
142
|
aliases?: string[];
|
|
140
143
|
toplevel?: boolean;
|
|
141
144
|
requiresAuth?: false;
|
|
145
|
+
optionalAuth: true | string;
|
|
146
|
+
schema?: CommandSchemas;
|
|
147
|
+
handler(ctx: CommandContext): void | Promise<void>;
|
|
148
|
+
} | {
|
|
149
|
+
name: string;
|
|
150
|
+
description: string;
|
|
151
|
+
aliases?: string[];
|
|
152
|
+
toplevel?: boolean;
|
|
153
|
+
requiresAuth?: false;
|
|
154
|
+
optionalAuth?: false;
|
|
142
155
|
schema?: CommandSchemas;
|
|
143
156
|
handler(ctx: CommandContext): void | Promise<void>;
|
|
144
157
|
};
|
|
@@ -148,6 +161,17 @@ export type CommandDefinition = {
|
|
|
148
161
|
aliases?: string[];
|
|
149
162
|
hidden?: boolean;
|
|
150
163
|
requiresAuth: true;
|
|
164
|
+
optionalAuth?: false | string;
|
|
165
|
+
schema?: CommandSchemas;
|
|
166
|
+
handler?(ctx: CommandContext): void | Promise<void>;
|
|
167
|
+
subcommands?: SubcommandDefinition[];
|
|
168
|
+
} | {
|
|
169
|
+
name: string;
|
|
170
|
+
description: string;
|
|
171
|
+
aliases?: string[];
|
|
172
|
+
hidden?: boolean;
|
|
173
|
+
requiresAuth?: false;
|
|
174
|
+
optionalAuth: true | string;
|
|
151
175
|
schema?: CommandSchemas;
|
|
152
176
|
handler?(ctx: CommandContext): void | Promise<void>;
|
|
153
177
|
subcommands?: SubcommandDefinition[];
|
|
@@ -157,6 +181,7 @@ export type CommandDefinition = {
|
|
|
157
181
|
aliases?: string[];
|
|
158
182
|
hidden?: boolean;
|
|
159
183
|
requiresAuth?: false;
|
|
184
|
+
optionalAuth?: false;
|
|
160
185
|
schema?: CommandSchemas;
|
|
161
186
|
handler?(ctx: CommandContext): void | Promise<void>;
|
|
162
187
|
subcommands?: SubcommandDefinition[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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
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
|
|
155
|
+
throw new APIError(errorData.message, response.status, errorData.code);
|
|
145
156
|
}
|
|
146
157
|
|
|
147
|
-
throw new
|
|
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
|
-
//
|
|
49
|
-
tui.
|
|
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
|
-
|
|
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
|
|
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
|
}
|
package/src/cmd/auth/README.md
CHANGED
|
@@ -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
|
|
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**:
|
|
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
|
|