@helix3/helix-cli 0.1.13-helix3.52 → 0.1.13-helix3.54

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
@@ -4,6 +4,12 @@
4
4
  backend. It shares bundle validation with the server via `@hypersoniclabs/helix-manifest`, so "validate passed but
5
5
  publish failed" can't happen for contract reasons.
6
6
 
7
+ ## Architecture boundary
8
+
9
+ All creator feature and operational logic, validation, file mutation, network behavior, and tests
10
+ live here. MCP packages may expose transport schemas, resources, instructions, and thin delegation
11
+ to these commands, but must not reimplement this logic.
12
+
7
13
  ## Install
8
14
 
9
15
  ```bash
@@ -35,8 +41,14 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
35
41
  | `helix init <dir>` | Scaffold a minimal Three.js world (`helix.json` + `index.html` + `main.js`). |
36
42
  | `helix install [--update]` | Resolve a world's `systems`/`abilities` pins (a v0.2 **or v0.3** manifest) → materialize the modules, the `three` import map, and `helix.runtime.ts`. |
37
43
  | `helix validate [dir]` | Validate a bundle locally — the exact rules the server enforces. |
38
- | `helix publish [dir]` | Validate → resolve/create the world → upload files → finalize → print the play URL. |
44
+ | `helix publish [dir] [--thumbnail <file>]` | Validate → resolve/create the world → upload files → finalize → set the cover image → print the play URL. |
39
45
  | `helix list` | List your worlds. |
46
+ | `helix item list-slots [--json]` | Print the Character-Creator vocabulary a wearable declares: the cosmetic slot tags, and the genders. |
47
+ | `helix item publish <mesh.glb> --title <t> [--kind <k>] [--slot <tag>] [--gender <g>] [--price-lix <n> \| --personal] [--thumbnail <f>] [--dry-run]` | Publish a universal item (wearable / avatar / home item) from one `.glb`; the server verifies the mesh inline. |
48
+ | `helix preview-video <slug> <youtube-url>` | Set or clear a published world's YouTube preview. |
49
+ | `helix thumbnail set <slug> <file>` | Upload a thumbnail or preview image through the CLI-owned media path. |
50
+ | `helix assets materials\|material\|search\|get\|install` | Discover platform materials and Vault assets, then install immutable assets with provenance receipts. |
51
+ | `helix assets generate\|resume\|generate-image\|generate-audio\|generate-environment` | Run Dreamer asset generation and resume existing jobs. |
40
52
  | `helix doctor [--project <dir>]` | Print the environment + whether the @helix toolchain (CLI/MCP/SDK/manifest) is current. |
41
53
 
42
54
  ## Publish flow
@@ -51,8 +63,35 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
51
63
  5. `POST /api/v1/instant-worlds/:id/builds/:buildId/finalize` → byte-exact verify, activate, publish.
52
64
  6. `GET /api/v1/instant-worlds/:slug` → the play URL.
53
65
 
54
- The programmatic surface (`publishWorld`, `checkBundle`, `whoAmI`, …) is exported from the package
55
- main, so an MCP server can drive the exact same code paths an agent would.
66
+ The programmatic surface (`publishWorld`, `checkBundle`, `whoAmI`, …) is exported for other CLI
67
+ modules. Agent integrations should instruct or delegate to the `helix` commands above rather than
68
+ reimplementing operational behavior in a transport package.
69
+
70
+ ## Item publish flow
71
+
72
+ `helix item publish` is a different shape from a world publish: one mesh, one round trip, an
73
+ inline verdict — which is what an editor (Helix Studio) needs when an artist clicks Publish.
74
+
75
+ 1. Local validation, before anything leaves the machine: the `--kind`, the Character-Creator
76
+ `--slot` and `--gender` (**both required** for a wearable, exact-match), the title/slug/tag
77
+ limits, and the GLB container magic. `--dry-run` stops here and prints exactly what would be
78
+ sent.
79
+ 2. `POST /api/v1/universal-items/upload` — `multipart/form-data` with a `mesh` file part, an
80
+ optional `thumbnail` file part, and the metadata as ONE JSON string in `payload`.
81
+ 3. The server verifies the mesh **inline** (triangles, texture edges, materials, and — for a
82
+ wearable — whether it is a skinned garment or a rigid socketed accessory) and returns the
83
+ created item together with the verification verdict and warnings.
84
+
85
+ The slot table in `src/item.ts` MIRRORS `helix-backend-api → src/universal-items/cc-wearable-slot.ts`,
86
+ and the gender list mirrors `src/universal-items/cc-gender.ts` the same way. They are a local fast
87
+ path so a typo costs no upload; the server remains the authority and its 400 lists every valid
88
+ value. Adding a slot or a gender means editing both, in the same PR wave.
89
+
90
+ `--gender` takes `male`, `female`, or `male,female`, and is **required** for `--kind wearable`.
91
+ There is no `both`/`unisex`/`all`: Unreal's cosmetics enum has exactly Male and Female, so a garment
92
+ that fits every body names both — one HELIX row with `{male, female}` is the web equivalent of
93
+ Unreal's two entries sharing one mesh. The field goes on the wire as `genders`; `ccGenders` is the
94
+ database column and the backend rejects it by name rather than dropping it in silence.
56
95
 
57
96
  ## Develop
58
97
 
package/dist/api.d.ts CHANGED
@@ -18,6 +18,7 @@ export declare class HelixApi {
18
18
  setToken(token: string): void;
19
19
  request<T>(method: string, path: string, body?: unknown): Promise<T>;
20
20
  requestItem<T>(method: string, path: string, body?: unknown): Promise<T>;
21
+ postMultipart<T>(path: string, form: FormData): Promise<T>;
21
22
  static forCredentials(creds: CliCredentials): HelixApi;
22
23
  }
23
24
  export declare function uploadToTicket(url: string, body: Buffer, contentType: string, cacheControl?: string): Promise<void>;
package/dist/api.js CHANGED
@@ -59,6 +59,26 @@ class HelixApi {
59
59
  const envelope = await this.request(method, path, body);
60
60
  return envelope.item;
61
61
  }
62
+ // multipart/form-data POST — for the endpoints that take file parts alongside
63
+ // JSON (universal-item uploads). Deliberately does NOT set content-type: the
64
+ // boundary is generated by the runtime and a hand-written header loses it,
65
+ // which the server sees as a malformed body. Uses Node's built-in FormData /
66
+ // Blob (globals since Node 18, same undici that already backs `fetch` above),
67
+ // so multipart needs no dependency.
68
+ async postMultipart(path, form) {
69
+ const res = await fetch(`${this.baseUrl}${path}`, {
70
+ method: 'POST',
71
+ headers: this.token ? { authorization: `Bearer ${this.token}` } : {},
72
+ body: form,
73
+ });
74
+ if (!res.ok) {
75
+ const problem = (await res.json().catch(() => ({})));
76
+ throw new ApiError(res.status, problem);
77
+ }
78
+ if (res.status === 204)
79
+ return undefined;
80
+ return (await res.json());
81
+ }
62
82
  static forCredentials(creds) {
63
83
  return new HelixApi(creds.apiUrl, creds.token);
64
84
  }
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { CliCredentials } from './config';
2
+ export type DreamerAssetKind = 'prop' | 'character';
3
+ export type StandaloneAssetKind = 'image' | 'audio' | 'gaussian_splat' | 'animation';
4
+ export type DreamerApprovalGate = 'concept' | 'preview';
5
+ export type DreamerAssetJob = {
6
+ id: string;
7
+ status: string;
8
+ currentStage?: string;
9
+ title?: string;
10
+ awaitingApproval: {
11
+ gate: DreamerApprovalGate;
12
+ } | null;
13
+ sparkSpentTotal?: number;
14
+ error?: string;
15
+ publishedItemId?: string | null;
16
+ artifacts?: {
17
+ meshUrl?: string;
18
+ thumbnailUrl?: string;
19
+ referenceSheetUrl?: string;
20
+ };
21
+ };
22
+ export type GenerateAssetInput = {
23
+ kind: DreamerAssetKind;
24
+ prompt: string;
25
+ title?: string;
26
+ additionalPrompt?: string;
27
+ targetPolycount?: number;
28
+ };
29
+ export type GenerateAssetOptions = {
30
+ pollIntervalMs?: number;
31
+ timeoutMs?: number;
32
+ visibility?: 'public' | 'unlisted' | 'private';
33
+ onProgress?: (job: DreamerAssetJob) => void;
34
+ };
35
+ export type StandaloneGeneratedAsset = {
36
+ jobId: string;
37
+ status: 'queued' | 'running' | 'succeeded' | 'failed';
38
+ asset?: {
39
+ url: string;
40
+ contentType: string;
41
+ sizeBytes: number;
42
+ kind: Exclude<StandaloneAssetKind, 'animation'>;
43
+ };
44
+ error?: string;
45
+ units?: number;
46
+ vaultAssetId?: string | null;
47
+ vaultAutoPublish?: 'published' | 'disabled';
48
+ };
49
+ export type VaultAssetSummary = {
50
+ assetId: string;
51
+ slug: string;
52
+ title: string;
53
+ kind: string;
54
+ origin: string;
55
+ visibility: string;
56
+ artifactUrl?: string;
57
+ mimeType?: string;
58
+ artifactMimeType?: string;
59
+ currentVersion?: number;
60
+ [key: string]: unknown;
61
+ };
62
+ export type VaultAssetDetail = VaultAssetSummary & {
63
+ artifact?: {
64
+ url: string;
65
+ mimeType?: string;
66
+ sizeBytes?: number;
67
+ version?: number;
68
+ checksumSha256?: string;
69
+ };
70
+ };
71
+ export type VaultAssetSearch = {
72
+ q?: string;
73
+ kind?: string[];
74
+ skeleton?: string;
75
+ engine?: string;
76
+ license?: string;
77
+ source?: string;
78
+ origin?: string;
79
+ creatorId?: string;
80
+ page?: number;
81
+ limit?: number;
82
+ };
83
+ export type InstalledVaultAsset = {
84
+ assetId: string;
85
+ slug: string;
86
+ kind: string;
87
+ version: number | null;
88
+ path: string;
89
+ sourceUrl: string;
90
+ checksumSha256: string;
91
+ };
92
+ export type MaterialCatalogEntry = {
93
+ id: string;
94
+ name: string;
95
+ category: string;
96
+ kind: 'texture' | 'glass' | 'procedural_water';
97
+ tags: string[];
98
+ maps?: {
99
+ albedo: string;
100
+ normal: string;
101
+ orm: string;
102
+ };
103
+ [key: string]: unknown;
104
+ };
105
+ export type MaterialCatalogResult = {
106
+ slug: string;
107
+ version: string;
108
+ assetBaseUrl: string;
109
+ materials: MaterialCatalogEntry[];
110
+ };
111
+ export declare function generateAndPublishAsset(creds: CliCredentials, input: GenerateAssetInput, options?: GenerateAssetOptions): Promise<DreamerAssetJob>;
112
+ export declare function resumeAndPublishAsset(creds: CliCredentials, jobId: string, options?: GenerateAssetOptions): Promise<DreamerAssetJob>;
113
+ export declare function generateStandaloneAsset(creds: CliCredentials, input: {
114
+ kind: StandaloneAssetKind;
115
+ prompt: string;
116
+ additionalPrompt?: string;
117
+ projectId?: string;
118
+ title?: string;
119
+ loop?: boolean;
120
+ durationSeconds?: number;
121
+ }, options?: {
122
+ pollIntervalMs?: number;
123
+ timeoutMs?: number;
124
+ onProgress?: (job: StandaloneGeneratedAsset) => void;
125
+ }): Promise<StandaloneGeneratedAsset>;
126
+ export declare function generateImage(creds: CliCredentials, input: {
127
+ prompt: string;
128
+ additionalPrompt?: string;
129
+ projectId?: string;
130
+ }, options?: {
131
+ pollIntervalMs?: number;
132
+ timeoutMs?: number;
133
+ onProgress?: (job: StandaloneGeneratedAsset) => void;
134
+ }): Promise<StandaloneGeneratedAsset>;
135
+ export declare function searchVaultAssets(apiUrl: string, query?: VaultAssetSearch, creds?: CliCredentials): Promise<{
136
+ items: VaultAssetSummary[];
137
+ totalItems: number;
138
+ }>;
139
+ export declare function getVaultAsset(apiUrl: string, assetId: string, creds?: CliCredentials): Promise<VaultAssetDetail>;
140
+ export declare function installVaultAsset(worldDir: string, apiUrl: string, assetId: string, creds?: CliCredentials): Promise<InstalledVaultAsset>;
141
+ export declare function listMaterials(apiUrl: string, query?: {
142
+ q?: string;
143
+ category?: string;
144
+ limit?: number;
145
+ }, slug?: string): Promise<MaterialCatalogResult>;
146
+ export declare function resolveMaterial(apiUrl: string, id: string, slug?: string): Promise<MaterialCatalogEntry & {
147
+ resolvedMaps?: Record<string, string>;
148
+ }>;
package/dist/assets.js ADDED
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateAndPublishAsset = generateAndPublishAsset;
4
+ exports.resumeAndPublishAsset = resumeAndPublishAsset;
5
+ exports.generateStandaloneAsset = generateStandaloneAsset;
6
+ exports.generateImage = generateImage;
7
+ exports.searchVaultAssets = searchVaultAssets;
8
+ exports.getVaultAsset = getVaultAsset;
9
+ exports.installVaultAsset = installVaultAsset;
10
+ exports.listMaterials = listMaterials;
11
+ exports.resolveMaterial = resolveMaterial;
12
+ const node_crypto_1 = require("node:crypto");
13
+ const promises_1 = require("node:fs/promises");
14
+ const node_path_1 = require("node:path");
15
+ const api_1 = require("./api");
16
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
17
+ function isTerminalFailure(job) {
18
+ return ['failed', 'blocked_insufficient_spark', 'cancelled'].includes(job.status);
19
+ }
20
+ async function generateAndPublishAsset(creds, input, options = {}) {
21
+ const api = api_1.HelixApi.forCredentials(creds);
22
+ const job = await api.request('POST', '/api/v1/dreamer/generate', {
23
+ ...input,
24
+ kind: input.kind === 'prop' ? 'home_item' : 'avatar',
25
+ });
26
+ return driveDreamerAssetJob(api, job, options);
27
+ }
28
+ async function resumeAndPublishAsset(creds, jobId, options = {}) {
29
+ const api = api_1.HelixApi.forCredentials(creds);
30
+ const job = await api.request('GET', `/api/v1/dreamer/jobs/${encodeURIComponent(jobId)}`);
31
+ return driveDreamerAssetJob(api, job, options);
32
+ }
33
+ async function driveDreamerAssetJob(api, initialJob, options) {
34
+ const pollIntervalMs = options.pollIntervalMs ?? 2_000;
35
+ const deadline = Date.now() + (options.timeoutMs ?? 20 * 60_000);
36
+ let job = initialJob;
37
+ const approved = new Set();
38
+ while (Date.now() < deadline) {
39
+ options.onProgress?.(job);
40
+ if (isTerminalFailure(job)) {
41
+ throw new Error(`Dreamer asset generation ${job.status}: ${job.error ?? 'no details'}`);
42
+ }
43
+ if (job.publishedItemId)
44
+ return job;
45
+ const gate = job.awaitingApproval?.gate;
46
+ if (gate && !approved.has(gate)) {
47
+ job = await api.request('POST', `/api/v1/dreamer/jobs/${encodeURIComponent(job.id)}/approve`, { gate });
48
+ approved.add(gate);
49
+ continue;
50
+ }
51
+ if (!job.awaitingApproval &&
52
+ (job.status === 'preview_ready' || job.currentStage === 'publish')) {
53
+ job = await api.request('POST', `/api/v1/dreamer/jobs/${encodeURIComponent(job.id)}/publish`, { visibility: options.visibility ?? 'public' });
54
+ if (job.publishedItemId)
55
+ return job;
56
+ }
57
+ await sleep(pollIntervalMs);
58
+ job = await api.request('GET', `/api/v1/dreamer/jobs/${encodeURIComponent(job.id)}`);
59
+ }
60
+ throw new Error(`Dreamer asset generation job ${job.id} timed out after ${options.timeoutMs ?? 20 * 60_000}ms at ${job.status}:${job.awaitingApproval?.gate ?? job.currentStage ?? 'unknown'}`);
61
+ }
62
+ async function generateStandaloneAsset(creds, input, options = {}) {
63
+ const api = api_1.HelixApi.forCredentials(creds);
64
+ const pollIntervalMs = options.pollIntervalMs ?? 2_000;
65
+ const deadline = Date.now() + (options.timeoutMs ?? 10 * 60_000);
66
+ const accepted = await api.request('POST', '/api/v1/dreamer/assets/generate', input);
67
+ while (Date.now() < deadline) {
68
+ const job = await api.request('GET', `/api/v1/dreamer/assets/jobs/${encodeURIComponent(accepted.jobId)}`);
69
+ options.onProgress?.(job);
70
+ if (job.status === 'succeeded')
71
+ return job;
72
+ if (job.status === 'failed') {
73
+ throw new Error(`Dreamer ${input.kind} generation failed: ${job.error ?? 'no details'}`);
74
+ }
75
+ await sleep(pollIntervalMs);
76
+ }
77
+ throw new Error(`Dreamer ${input.kind} generation job ${accepted.jobId} timed out after ${options.timeoutMs ?? 10 * 60_000}ms`);
78
+ }
79
+ function generateImage(creds, input, options = {}) {
80
+ return generateStandaloneAsset(creds, { kind: 'image', ...input }, options);
81
+ }
82
+ async function searchVaultAssets(apiUrl, query = {}, creds) {
83
+ const api = creds ? api_1.HelixApi.forCredentials(creds) : new api_1.HelixApi(apiUrl);
84
+ const params = new URLSearchParams();
85
+ if (query.q)
86
+ params.set('q', query.q);
87
+ for (const kind of query.kind ?? [])
88
+ params.append('kind', kind);
89
+ for (const key of ['skeleton', 'engine', 'license', 'source', 'origin', 'creatorId']) {
90
+ if (query[key])
91
+ params.set(key, String(query[key]));
92
+ }
93
+ if (query.page)
94
+ params.set('page', String(query.page));
95
+ if (query.limit)
96
+ params.set('limit', String(query.limit));
97
+ const suffix = params.size ? `?${params}` : '';
98
+ return api.request('GET', `/api/v1/vault/assets${suffix}`);
99
+ }
100
+ function getVaultAsset(apiUrl, assetId, creds) {
101
+ const api = creds ? api_1.HelixApi.forCredentials(creds) : new api_1.HelixApi(apiUrl);
102
+ return api.request('GET', `/api/v1/vault/assets/${encodeURIComponent(assetId)}`);
103
+ }
104
+ function extensionFor(url, mimeType) {
105
+ const fromUrl = (0, node_path_1.extname)(new URL(url).pathname).toLowerCase();
106
+ if (/^\.[a-z0-9]{2,5}$/.test(fromUrl))
107
+ return fromUrl;
108
+ const byMime = {
109
+ 'model/gltf-binary': '.glb',
110
+ 'model/gltf+json': '.gltf',
111
+ 'image/png': '.png',
112
+ 'image/jpeg': '.jpg',
113
+ 'image/webp': '.webp',
114
+ 'audio/mpeg': '.mp3',
115
+ 'audio/ogg': '.ogg',
116
+ };
117
+ return byMime[mimeType ?? ''] ?? '.bin';
118
+ }
119
+ async function installVaultAsset(worldDir, apiUrl, assetId, creds) {
120
+ const detail = await getVaultAsset(apiUrl, assetId, creds);
121
+ const artifactUrl = detail.artifact?.url ?? detail.artifactUrl;
122
+ if (!artifactUrl)
123
+ throw new Error(`Vault asset ${assetId} has no downloadable artifact`);
124
+ const version = detail.artifact?.version ?? detail.currentVersion ?? null;
125
+ const downloadUrl = `${apiUrl.replace(/\/+$/, '')}/api/v1/vault/assets/${encodeURIComponent(assetId)}/download${version ? `?version=${version}` : ''}`;
126
+ const response = await fetch(downloadUrl, {
127
+ headers: creds?.token ? { authorization: `Bearer ${creds.token}` } : {},
128
+ });
129
+ if (!response.ok) {
130
+ throw new Error(`Vault asset download failed (${response.status})`);
131
+ }
132
+ const bytes = Buffer.from(await response.arrayBuffer());
133
+ const extension = extensionFor(artifactUrl, detail.artifact?.mimeType ?? detail.artifactMimeType ?? detail.mimeType);
134
+ const safeSlug = (detail.slug || (0, node_path_1.basename)(new URL(artifactUrl).pathname, extension) || 'asset')
135
+ .replace(/[^a-z0-9-]+/gi, '-')
136
+ .replace(/^-+|-+$/g, '')
137
+ .toLowerCase();
138
+ const relativePath = (0, node_path_1.join)('public', 'assets', 'vault', assetId, `${safeSlug}${extension}`);
139
+ const outputPath = (0, node_path_1.join)(worldDir, relativePath);
140
+ await (0, promises_1.mkdir)((0, node_path_1.join)(worldDir, 'public', 'assets', 'vault', assetId), { recursive: true });
141
+ await (0, promises_1.writeFile)(outputPath, bytes);
142
+ const receiptPath = (0, node_path_1.join)(worldDir, 'public', 'helix.assets.json');
143
+ let prior = {
144
+ version: 1,
145
+ vaultAssets: [],
146
+ assets: [],
147
+ };
148
+ try {
149
+ prior = JSON.parse(await (0, promises_1.readFile)(receiptPath, 'utf8'));
150
+ }
151
+ catch {
152
+ // First installed Vault asset in this world.
153
+ }
154
+ const installed = {
155
+ assetId,
156
+ slug: detail.slug,
157
+ kind: detail.kind,
158
+ version,
159
+ path: relativePath,
160
+ sourceUrl: downloadUrl,
161
+ checksumSha256: (0, node_crypto_1.createHash)('sha256').update(bytes).digest('hex'),
162
+ };
163
+ const artifactKey = new URL(artifactUrl).pathname.replace(/^\/+/, '');
164
+ prior.vaultAssets = [
165
+ ...(prior.vaultAssets ?? []).filter((entry) => entry.assetId !== assetId),
166
+ {
167
+ assetId,
168
+ version,
169
+ kind: detail.kind,
170
+ artifactKey,
171
+ integrity: `sha256-${installed.checksumSha256}`,
172
+ },
173
+ ];
174
+ prior.assets = [
175
+ ...(prior.assets ?? []).filter((entry) => entry.assetId !== assetId),
176
+ {
177
+ assetId,
178
+ path: relativePath.replace(/^public[\\/]/, '').replaceAll('\\', '/'),
179
+ provenance: 'vault',
180
+ source: 'Vault',
181
+ ...(typeof detail.license === 'string' ? { licence: detail.license } : {}),
182
+ },
183
+ ];
184
+ const temporaryReceipt = `${receiptPath}.tmp-${process.pid}`;
185
+ await (0, promises_1.writeFile)(temporaryReceipt, `${JSON.stringify(prior, null, 2)}\n`);
186
+ await (0, promises_1.rename)(temporaryReceipt, receiptPath);
187
+ return installed;
188
+ }
189
+ function assetBaseFromManifest(manifest) {
190
+ const direct = manifest.assetBaseUrl;
191
+ if (typeof direct === 'string')
192
+ return direct;
193
+ const payload = manifest.payload;
194
+ if (payload && typeof payload === 'object') {
195
+ const nested = payload.assetBaseUrl;
196
+ if (typeof nested === 'string')
197
+ return nested;
198
+ }
199
+ throw new Error('Material pack manifest does not expose assetBaseUrl');
200
+ }
201
+ async function listMaterials(apiUrl, query = {}, slug = 'helix-materials') {
202
+ const api = new api_1.HelixApi(apiUrl);
203
+ const manifest = await api.requestItem('GET', `/api/v1/instant-packages/${encodeURIComponent(slug)}/versions/latest`);
204
+ const assetBaseUrl = assetBaseFromManifest(manifest).replace(/\/+$/, '');
205
+ const response = await fetch(`${assetBaseUrl}/catalog.json`);
206
+ if (!response.ok)
207
+ throw new Error(`Material catalog request failed (${response.status})`);
208
+ const catalog = (await response.json());
209
+ if (!Array.isArray(catalog.materials))
210
+ throw new Error('Material catalog is invalid');
211
+ const needle = query.q?.trim().toLowerCase() ?? '';
212
+ const matched = catalog.materials.filter((material) => {
213
+ if (query.category && material.category !== query.category)
214
+ return false;
215
+ return (!needle ||
216
+ [material.id, material.name, material.category, ...(material.tags ?? [])]
217
+ .join(' ')
218
+ .toLowerCase()
219
+ .includes(needle));
220
+ });
221
+ const materials = query.limit === undefined
222
+ ? matched
223
+ : matched.slice(0, Math.max(0, Math.floor(query.limit)));
224
+ return {
225
+ slug: catalog.pack?.slug ?? slug,
226
+ version: catalog.pack?.version ?? 'latest',
227
+ assetBaseUrl,
228
+ materials,
229
+ };
230
+ }
231
+ async function resolveMaterial(apiUrl, id, slug = 'helix-materials') {
232
+ const catalog = await listMaterials(apiUrl, {}, slug);
233
+ const material = catalog.materials.find((candidate) => candidate.id === id);
234
+ if (!material)
235
+ throw new Error(`Material "${id}" was not found in ${slug}`);
236
+ const resolvedMaps = material.maps
237
+ ? Object.fromEntries(Object.entries(material.maps).map(([key, value]) => [
238
+ key,
239
+ /^https?:\/\//i.test(value)
240
+ ? value
241
+ : `${catalog.assetBaseUrl}/${value.replace(/^\/+/, '')}`,
242
+ ]))
243
+ : undefined;
244
+ return { ...material, ...(resolvedMaps ? { resolvedMaps } : {}) };
245
+ }
246
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -34,15 +34,29 @@ const ENVIRONMENTS = {
34
34
  helix3: { apiUrl: 'https://helix-backend-api-helix3.up.railway.app', webUrl: 'https://new.helixgame.com' },
35
35
  };
36
36
  const SCOPE_ENVS = { '@helixdev': 'staging', '@helix3': 'helix3' };
37
+ const ENV_SCOPES = {
38
+ production: '@hypersoniclabs',
39
+ staging: '@helixdev',
40
+ helix3: '@helix3',
41
+ };
37
42
  // Pure resolver (testable without the ambient package.json / process.env): the npm scope
38
43
  // picks the environment; HELIX_API_URL/HELIX_WEB_URL override. The site is its OWN value —
39
44
  // only an API-only override derives it (api.-strip); otherwise the env default applies.
40
45
  function resolveEnvironment(scope, override = {}) {
41
- const env = SCOPE_ENVS[scope] ?? 'production';
46
+ // A local file-linked build still carries the production package name. When
47
+ // its explicit API override exactly names a known lane, label and package
48
+ // suggestions must follow that lane rather than falsely saying production.
49
+ const normalizedOverride = override.apiUrl?.replace(/\/+$/, '').toLowerCase();
50
+ const overrideEnv = normalizedOverride
51
+ ? Object.entries(ENVIRONMENTS).find(([, value]) => value.apiUrl.replace(/\/+$/, '').toLowerCase() === normalizedOverride)?.[0]
52
+ : undefined;
53
+ const env = overrideEnv ?? SCOPE_ENVS[scope] ?? 'production';
54
+ const resolvedScope = overrideEnv ? ENV_SCOPES[overrideEnv] : scope;
42
55
  const preset = ENVIRONMENTS[env];
43
56
  const apiUrl = override.apiUrl ?? preset.apiUrl;
44
- const webUrl = override.webUrl ?? (override.apiUrl ? (0, browserLogin_1.deriveWebUrl)(apiUrl) : preset.webUrl);
45
- return { scope, env, apiUrl, webUrl };
57
+ const webUrl = override.webUrl ??
58
+ (override.apiUrl && !overrideEnv ? (0, browserLogin_1.deriveWebUrl)(apiUrl) : preset.webUrl);
59
+ return { scope: resolvedScope, env, apiUrl, webUrl };
46
60
  }
47
61
  // This build's resolved scope/environment + default API & website URLs. Scope comes from
48
62
  // our own package.json name; HELIX_API_URL/HELIX_WEB_URL override per run.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}