@hyper3d/cli 0.0.1 → 0.1.0-beta.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,170 @@
1
- # Hyper3D CLI — initialization placeholder
1
+ # Hyper3D CLI
2
2
 
3
- Version 0.0.1 is a minimal package used to initialize the npm package and configure trusted publishing from GitHub Actions.
3
+ Generate 3D models from text or images, follow their progress, and get the finished
4
+ files from your terminal.
4
5
 
5
- This version does not contain a CLI executable or runtime functionality. It is published under the `init` dist-tag. Use a subsequent functional release to run the Hyper3D CLI.
6
+ ## Install
6
7
 
7
- Source: https://github.com/DeemosTech/hyper3d-cli
8
+ Requires **Node.js 22 or newer**. The package is being prepared for its first npm
9
+ release; the registry commands below become available after that release.
10
+
11
+ ```sh
12
+ npm install --global @hyper3d/cli
13
+ hyper3d --help
14
+ ```
15
+
16
+ You can also use pnpm or Yarn, or run the CLI without a global installation:
17
+
18
+ ```sh
19
+ pnpm add --global @hyper3d/cli
20
+ # Yarn Classic
21
+ yarn global add @hyper3d/cli
22
+ # Run once with npm, pnpm, or modern Yarn
23
+ npx @hyper3d/cli@latest --help
24
+ pnpm dlx @hyper3d/cli@latest --help
25
+ yarn dlx @hyper3d/cli@latest --help
26
+ ```
27
+
28
+ For a project-local installation, run `npm install --save-dev @hyper3d/cli`, then
29
+ `npx hyper3d --help`. To try the latest beta build, use `@hyper3d/cli@beta`
30
+ in place of `@hyper3d/cli`.
31
+
32
+ ## Sign in
33
+
34
+ ```sh
35
+ hyper3d auth login
36
+ ```
37
+
38
+ Compare the code shown in your terminal with the browser, then approve access.
39
+ On a remote machine, use `hyper3d auth login --no-browser` and open the printed link
40
+ on another device. Press Ctrl+C to cancel.
41
+
42
+ ```sh
43
+ hyper3d auth status # Account and credit balances
44
+ hyper3d auth logout # Remove saved credentials from this machine
45
+ ```
46
+
47
+ Credentials are saved in `~/.hyper3d` by default and refreshed automatically when
48
+ needed. Set `HYPER3D_CONFIG_DIR` to use a different directory.
49
+ Signing out locally does not revoke your server-side authorization.
50
+
51
+ ## Generate a model
52
+
53
+ Generation uses credits from your authorized workspace.
54
+
55
+ ```sh
56
+ # From text
57
+ hyper3d generate --prompt "a ceramic teapot" --format glb
58
+
59
+ # From one image
60
+ hyper3d generate --image ./reference.png
61
+
62
+ # From multiple views, with an optional description
63
+ hyper3d generate --image ./front.png --image ./side.jpg --prompt "a ceramic teapot"
64
+ ```
65
+
66
+ You can provide up to five images. The response includes a generation ID; use it
67
+ to check progress and retrieve the result:
68
+
69
+ ```sh
70
+ hyper3d status <generation-id>
71
+ hyper3d poll <generation-id> --timeout 300
72
+ hyper3d result <generation-id>
73
+ ```
74
+
75
+ `poll` waits up to the requested number of seconds. `result` returns download URLs;
76
+ it does not download files to your machine.
77
+
78
+ To separate a completed model into parts:
79
+
80
+ ```sh
81
+ hyper3d bang <generation-id> --instruction "separate the handle and lid"
82
+ ```
83
+
84
+ Run `hyper3d <command> --help` for more options. If a generation request times out,
85
+ check your existing tasks before submitting it again; the CLI never retries
86
+ billable generation automatically.
87
+
88
+ ## Use JSON output
89
+
90
+ Output is readable text by default. Add `--output json` for scripts:
91
+
92
+ ```sh
93
+ hyper3d auth status --output json
94
+ hyper3d generate --prompt "a ceramic teapot" --output json
95
+ hyper3d status <generation-id> --output json
96
+ ```
97
+
98
+ Warnings and errors go to stderr. Successful commands exit with code `0`; errors
99
+ exit with code `1`.
100
+
101
+ ## Updates
102
+
103
+ ```sh
104
+ hyper3d update --check
105
+ hyper3d update
106
+ ```
107
+
108
+ An interactive **npm global installation** checks for updates once a day before
109
+ model commands and only displays an update notice by default. Stable installations
110
+ follow `latest`; prerelease-branch builds follow `beta`. Run `hyper3d update` to install
111
+ an available update.
112
+
113
+ Set `HYPER3D_AUTO_UPDATE=1` to opt into automatic installation (which asks you to
114
+ rerun your command before submitting the model operation), or
115
+ `HYPER3D_UPDATE_CHECK=0` to disable automatic checks and automatic installation.
116
+ These switches require the exact values `1` and `0`, respectively. Automatic checks
117
+ and installation are also skipped when `CI` is nonempty (including `CI=0`) or stderr
118
+ is not a TTY. These settings do not disable manual `hyper3d update` or
119
+ `hyper3d update --check`. Network failures leave your command usable.
120
+
121
+ For pnpm, Yarn, or project-local installations, update with the package manager
122
+ that installed the CLI. For one-off runs, specify `@latest`:
123
+
124
+ ```sh
125
+ pnpm add --global @hyper3d/cli@latest
126
+ yarn global add @hyper3d/cli@latest # Yarn Classic
127
+ npm install --save-dev @hyper3d/cli@latest
128
+ npx @hyper3d/cli@latest --help
129
+ ```
130
+
131
+ To switch channels explicitly, install `@hyper3d/cli@latest` or
132
+ `@hyper3d/cli@beta` with your package manager. `hyper3d update` only upgrades to a
133
+ newer version and never downgrades a pinned installation.
134
+
135
+ ## Troubleshooting
136
+
137
+ - **Not signed in or access denied:** run `hyper3d auth login` again. Check that you
138
+ authorized the intended personal or team workspace.
139
+ - **Browser does not open:** follow the printed link, or use `--no-browser`.
140
+ - **Command not found:** check that your package manager's global bin directory is
141
+ on `PATH`, or use `npx @hyper3d/cli@latest`.
142
+ - **Update permission error:** update with the package manager and permissions used
143
+ for the original installation.
144
+ - **An interrupted update leaves future checks inactive:** close other CLI
145
+ processes and remove the empty `update.lock` directory inside your configuration
146
+ directory (`~/.hyper3d` by default, or the directory set by `HYPER3D_CONFIG_DIR`),
147
+ then run `hyper3d update`.
148
+
149
+ The API base URL defaults to `https://api.hyper3d.com/api`. Set `BASE_URL` to
150
+ use another environment; a trailing slash is optional:
151
+
152
+ ```sh
153
+ BASE_URL=https://api.hyper3d.com/api/ hyper3d auth status
154
+ hyper3d --base-url https://api.hyper3d.com/api auth status
155
+ ```
156
+
157
+ `--base-url` overrides `BASE_URL`. MCP (`mcp`), account (`user/get_info`) and
158
+ team (`group/group_info`) endpoints are derived from this base. HTTPS is required
159
+ except for localhost. OAuth endpoints remain server-discovered, and upload/result
160
+ URLs remain server-provided.
161
+
162
+ `HYPER3D_CONFIG_DIR` changes the directory for credentials, the update cache
163
+ (`update-check.json`), and the update lock (`update.lock`). If unset, it defaults to
164
+ `~/.hyper3d`. Relative paths resolve from the current working directory; an empty
165
+ value uses the current working directory rather than the default. Use a nonempty
166
+ absolute path for a consistent location across commands.
167
+
168
+ For development and releases, see [CONTRIBUTING.md](https://github.com/DeemosTech/hyper3d-cli/blob/main/CONTRIBUTING.md) and the
169
+ [release guide](https://github.com/DeemosTech/hyper3d-cli/blob/main/docs/releasing.md). Report problems in
170
+ [GitHub Issues](https://github.com/DeemosTech/hyper3d-cli/issues).
@@ -0,0 +1,26 @@
1
+ export declare function accountInfo({ fetchFn }?: {
2
+ fetchFn?: typeof fetch | undefined;
3
+ }): Promise<{
4
+ authenticated: boolean;
5
+ user?: undefined;
6
+ wallet?: undefined;
7
+ } | {
8
+ authenticated: boolean;
9
+ user: {
10
+ uuid: string;
11
+ username: string;
12
+ };
13
+ wallet: {
14
+ subscription_balance: number;
15
+ balance: number;
16
+ frozen: number;
17
+ type: "personal";
18
+ } | {
19
+ subscription_balance?: number | undefined;
20
+ balance: number;
21
+ frozen: number;
22
+ type: "group";
23
+ group_uuid: string;
24
+ name?: string;
25
+ };
26
+ }>;
@@ -0,0 +1,136 @@
1
+ import { auth } from '@modelcontextprotocol/sdk/client/auth.js';
2
+ import { z } from 'zod';
3
+ import { loadCredentials, createProvider } from './auth.js';
4
+ import { endpoints, secureUrl } from './endpoints.js';
5
+ const WALLET_UNITS_PER_CREDIT = 10;
6
+ const identitySchema = z.object({
7
+ user_uuid: z.string().min(1),
8
+ username: z.string(),
9
+ });
10
+ const personalMetaSchema = identitySchema.extend({
11
+ balance: z.number(),
12
+ frozen: z.number(),
13
+ subscriptions: z.object({
14
+ active_subscriptions: z.array(z.object({ wallet_balance: z.number() })),
15
+ }),
16
+ });
17
+ const accountResponseSchema = z.object({
18
+ meta: identitySchema.passthrough(),
19
+ billing_workspace: z.discriminatedUnion('type', [
20
+ z.object({ type: z.literal('personal') }),
21
+ z.object({ type: z.literal('group'), group_uuid: z.string().min(1) }),
22
+ ]),
23
+ });
24
+ const groupResponseSchema = z.object({
25
+ group_meta: z.object({
26
+ uuid: z.string().min(1),
27
+ name: z.string().optional(),
28
+ frozen: z.number(),
29
+ }),
30
+ balance: z.number(),
31
+ });
32
+ function parseResponse(schema, data) {
33
+ const result = schema.safeParse(data);
34
+ if (!result.success) {
35
+ const details = result.error.issues
36
+ .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
37
+ .join('; ');
38
+ throw new Error(`Invalid account response: ${details}`);
39
+ }
40
+ return result.data;
41
+ }
42
+ export async function accountInfo({ fetchFn = fetch } = {}) {
43
+ const endpoint = endpoints.mcp;
44
+ const data = await loadCredentials(endpoint);
45
+ const provider = data.clientId ? createProvider(endpoint, data) : undefined;
46
+ let accessToken = data.tokens?.access_token;
47
+ if (!accessToken)
48
+ return { authenticated: false };
49
+ const request = async (input, init = {}) => {
50
+ secureUrl(input);
51
+ return fetchFn(input, {
52
+ ...init,
53
+ redirect: 'error',
54
+ signal: AbortSignal.timeout(15000),
55
+ });
56
+ };
57
+ let refreshed = false;
58
+ const post_with_optional_token_refresh = async (path, body) => {
59
+ const send = async () => request(path, {
60
+ method: 'POST',
61
+ headers: {
62
+ Authorization: `Bearer ${accessToken}`,
63
+ 'Content-Type': 'application/json',
64
+ Accept: 'application/json',
65
+ },
66
+ body: JSON.stringify(body),
67
+ });
68
+ let response = await send();
69
+ if (response.status === 401 &&
70
+ !refreshed &&
71
+ provider &&
72
+ data.tokens?.refresh_token) {
73
+ refreshed = true;
74
+ await response.body?.cancel();
75
+ await auth(provider, { serverUrl: endpoint, fetchFn: request });
76
+ accessToken = provider.tokens()?.access_token;
77
+ response = await send();
78
+ }
79
+ if (!response.ok) {
80
+ await response.body?.cancel();
81
+ if ([401, 403].includes(response.status))
82
+ throw new Error('Account access denied. Run hyper3d auth login to authorize account:read and an available billing workspace.');
83
+ throw new Error(`Account lookup failed (HTTP ${response.status}).`);
84
+ }
85
+ const result = await response.json();
86
+ if (result.error)
87
+ throw new Error(`Account lookup failed: ${result.error}`);
88
+ return result;
89
+ };
90
+ const { meta, billing_workspace: workspace } = parseResponse(accountResponseSchema, await post_with_optional_token_refresh(endpoints.userInfo, {}));
91
+ let wallet;
92
+ switch (workspace.type) {
93
+ case 'personal': {
94
+ const personal = parseResponse(personalMetaSchema, meta);
95
+ const subscriptionBalance = personal.subscriptions.active_subscriptions.reduce((total, subscription) => total + subscription.wallet_balance, 0);
96
+ wallet = {
97
+ type: 'personal',
98
+ balance: personal.balance,
99
+ subscription_balance: subscriptionBalance,
100
+ frozen: personal.frozen,
101
+ };
102
+ break;
103
+ }
104
+ case 'group': {
105
+ const result = parseResponse(groupResponseSchema, await post_with_optional_token_refresh(endpoints.groupInfo, {
106
+ group_uuid: workspace.group_uuid,
107
+ }));
108
+ if (result.group_meta?.uuid !== workspace.group_uuid)
109
+ throw new Error('The returned wallet does not match the authorized billing workspace.');
110
+ wallet = {
111
+ type: 'group',
112
+ group_uuid: workspace.group_uuid,
113
+ name: result.group_meta.name,
114
+ balance: result.balance,
115
+ frozen: result.group_meta.frozen,
116
+ };
117
+ break;
118
+ }
119
+ }
120
+ const displayedWallet = {
121
+ ...wallet,
122
+ balance: wallet.balance / WALLET_UNITS_PER_CREDIT,
123
+ frozen: wallet.frozen / WALLET_UNITS_PER_CREDIT,
124
+ ...(wallet.type === 'personal'
125
+ ? {
126
+ subscription_balance: wallet.subscription_balance / WALLET_UNITS_PER_CREDIT,
127
+ }
128
+ : {}),
129
+ };
130
+ return {
131
+ authenticated: true,
132
+ user: { uuid: meta.user_uuid, username: meta.username },
133
+ wallet: displayedWallet,
134
+ };
135
+ }
136
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts ADDED
@@ -0,0 +1,63 @@
1
+ import { setTimeout as sleep } from 'node:timers/promises';
2
+ import type { Credentials } from './types.js';
3
+ import type { OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
4
+ interface LoginOptions {
5
+ browser?: boolean;
6
+ fetchFn?: typeof fetch;
7
+ open?: (url: string) => Promise<void>;
8
+ write?: (text: string) => unknown;
9
+ wait?: typeof sleep;
10
+ now?: () => number;
11
+ signal?: AbortSignal;
12
+ }
13
+ export declare const DEVICE_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code";
14
+ export declare const CLI_CLIENT_ID = "https://hyper3d.ai/oauth_cimd/cli.json";
15
+ export declare const CLI_SCOPES = "rodin:generate rodin:read account:read offline_access";
16
+ export declare function clientMetadata(): {
17
+ client_id: string;
18
+ client_name: string;
19
+ client_uri: string;
20
+ application_type: string;
21
+ redirect_uris: never[];
22
+ grant_types: string[];
23
+ response_types: never[];
24
+ token_endpoint_auth_method: string;
25
+ scope: string;
26
+ };
27
+ export declare function credentialPath(endpoint: string): string;
28
+ export declare function loadCredentials(endpoint: string): Promise<Credentials>;
29
+ export declare function logout(endpoint: string): Promise<void>;
30
+ export declare function createProvider(endpoint: string, data: Credentials): {
31
+ redirectUrl: undefined;
32
+ saveCodeVerifier: () => Promise<never>;
33
+ codeVerifier: () => Promise<string>;
34
+ clientMetadataUrl: string;
35
+ readonly clientMetadata: Omit<{
36
+ client_id: string;
37
+ client_name: string;
38
+ client_uri: string;
39
+ application_type: string;
40
+ redirect_uris: never[];
41
+ grant_types: string[];
42
+ response_types: never[];
43
+ token_endpoint_auth_method: string;
44
+ scope: string;
45
+ }, "client_id">;
46
+ clientInformation: () => {
47
+ client_id: string;
48
+ };
49
+ tokens: () => {
50
+ access_token: string;
51
+ token_type: string;
52
+ id_token?: string | undefined;
53
+ expires_in?: number | undefined;
54
+ scope?: string | undefined;
55
+ refresh_token?: string | undefined;
56
+ } | undefined;
57
+ saveTokens: (tokens: OAuthTokens) => Promise<void>;
58
+ prepareTokenRequest: () => URLSearchParams;
59
+ redirectToAuthorization: () => never;
60
+ invalidateCredentials: (scope: string) => Promise<void>;
61
+ };
62
+ export declare function login(endpoint: string, { browser, fetchFn, open, write, wait, now, signal, }?: LoginOptions): Promise<void>;
63
+ export {};