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

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
@@ -47,8 +47,12 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
47
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
48
  | `helix preview-video <slug> <youtube-url>` | Set or clear a published world's YouTube preview. |
49
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. |
50
+ | `helix assets search\|get\|versions\|track\|install\|update` | Search the typed Vault with explainable ranking; inspect/manage annotations and immutable versions; install by durable ID with verified SHA-256 receipts. |
51
+ | `helix assets start\|status\|generate\|resume` | Start or poll generation without duplicates. Props/characters use the main Dreamer path; standalone assets use the shared broker and report the auto-published `vaultAssetId`. |
52
+ | `helix assets generate-image\|generate-material\|generate-audio\|generate-environment` | Run the supported standalone generation adapters. Material is a validated PBR bundle (1K default, explicit 2K); splats declare object/fragment/environment scope. Animation remains an explicit unavailable boundary. |
53
+ | `helix assets materials\|material` | Discover the small built-in material palette and resolve its immutable map URLs before searching or generating. |
54
+ | `helix assets credits\|check-loaders` | Render asset credits from provenance and reject models requiring unsupported loaders. |
55
+ | `helix world audit\|source-audit\|perf-gate\|prove-live` | Run the blocking world QA, performance, and deployed-build identity gates. |
52
56
  | `helix doctor [--project <dir>]` | Print the environment + whether the @helix toolchain (CLI/MCP/SDK/manifest) is current. |
53
57
 
54
58
  ## Publish flow
@@ -67,6 +71,27 @@ The programmatic surface (`publishWorld`, `checkBundle`, `whoAmI`, …) is expor
67
71
  modules. Agent integrations should instruct or delegate to the `helix` commands above rather than
68
72
  reimplementing operational behavior in a transport package.
69
73
 
74
+ ## Vault lifecycle
75
+
76
+ Use the durable Vault UUID as the handle. Search results include independent lexical, hard-filter,
77
+ measured-performance, reuse, and availability explanations; they do not collapse those signals into
78
+ a made-up score. `helix assets install` resolves the current immutable version, follows the
79
+ `/download` indirection, verifies its server checksum and byte count, installs related material maps,
80
+ and writes `public/helix.assets.json`. A checksum mismatch fails before a provenance receipt is
81
+ written.
82
+
83
+ Generation is source-agnostic at the backend:
84
+
85
+ - `prop` and `character` start through the main Dreamer route because they use its verified
86
+ universal-item flow.
87
+ - `image`, `material`, `audio`, and `gaussian_splat` start through the shared asset route.
88
+ Gaussian splats must declare `object`, `fragment`, or `environment` scope.
89
+ - `animation` fails locally with `CAPABILITY_UNAVAILABLE`; it never starts a chargeable job.
90
+
91
+ Run `helix assets status <job-id> --pipeline dreamer|asset` to poll an existing job. A successful
92
+ default-on generation reports `vaultAssetId` and `vaultAutoPublish: "published"`; an explicit
93
+ creator opt-out reports `"disabled"`.
94
+
70
95
  ## Item publish flow
71
96
 
72
97
  `helix item publish` is a different shape from a world publish: one mesh, one round trip, an
package/dist/assets.d.ts CHANGED
@@ -1,7 +1,10 @@
1
1
  import { CliCredentials } from './config';
2
+ export declare const VAULT_ASSET_KINDS: readonly ["prop", "character", "animation", "audio", "texture", "material", "environment", "terrain", "vfx", "decal", "sky", "gaussian_splat", "scene", "unreal_package"];
3
+ export type VaultAssetKind = (typeof VAULT_ASSET_KINDS)[number];
2
4
  export type DreamerAssetKind = 'prop' | 'character';
3
- export type StandaloneAssetKind = 'image' | 'audio' | 'gaussian_splat' | 'animation';
5
+ export type StandaloneAssetKind = 'image' | 'prop' | 'material' | 'audio' | 'gaussian_splat' | 'animation';
4
6
  export type DreamerApprovalGate = 'concept' | 'preview';
7
+ export type DreamerPipeline = 'dreamer' | 'asset';
5
8
  export type DreamerAssetJob = {
6
9
  id: string;
7
10
  status: string;
@@ -13,6 +16,13 @@ export type DreamerAssetJob = {
13
16
  sparkSpentTotal?: number;
14
17
  error?: string;
15
18
  publishedItemId?: string | null;
19
+ vaultAssetId?: string | null;
20
+ vaultAutoPublish?: 'published' | 'disabled';
21
+ verification?: {
22
+ vaultAssetId?: string | null;
23
+ vaultAutoPublish?: 'published' | 'disabled';
24
+ [key: string]: unknown;
25
+ } | null;
16
26
  artifacts?: {
17
27
  meshUrl?: string;
18
28
  thumbnailUrl?: string;
@@ -50,27 +60,69 @@ export type VaultAssetSummary = {
50
60
  assetId: string;
51
61
  slug: string;
52
62
  title: string;
53
- kind: string;
63
+ kind: VaultAssetKind;
54
64
  origin: string;
55
65
  visibility: string;
56
66
  artifactUrl?: string;
57
67
  mimeType?: string;
58
68
  artifactMimeType?: string;
69
+ artifactSizeBytes?: number;
59
70
  currentVersion?: number;
71
+ selectionExplanation?: VaultSelectionExplanation | null;
60
72
  [key: string]: unknown;
61
73
  };
74
+ export type ResolvedVaultArtifact = {
75
+ assetId: string;
76
+ version: number;
77
+ url: string | null;
78
+ urlKind: 'cdn' | 'unavailable';
79
+ mimeType: string;
80
+ sizeBytes: number;
81
+ checksumSha256: string | null;
82
+ relatedArtifacts: VaultRelatedArtifact[];
83
+ };
84
+ export type VaultRelatedArtifact = {
85
+ role: string;
86
+ url: string | null;
87
+ mimeType: string;
88
+ sizeBytes: number;
89
+ checksumSha256: string;
90
+ };
62
91
  export type VaultAssetDetail = VaultAssetSummary & {
63
- artifact?: {
64
- url: string;
65
- mimeType?: string;
66
- sizeBytes?: number;
67
- version?: number;
68
- checksumSha256?: string;
92
+ artifact: ResolvedVaultArtifact;
93
+ usedInWorlds?: Array<Record<string, unknown>>;
94
+ };
95
+ export type VaultSelectionExplanation = {
96
+ rankMode: 'relevance' | 'performance' | 'reuse';
97
+ lexical: {
98
+ matchedTerms: string[];
99
+ matchedFields: Array<'title' | 'description' | 'tags' | 'kind'>;
100
+ };
101
+ hardFilters: Record<string, string | string[]>;
102
+ performance: {
103
+ tier: string | null;
104
+ costScore: number | null;
105
+ qualityScore: number | null;
106
+ };
107
+ reuse: {
108
+ worldUsageCount: number;
109
+ usageCount: number;
110
+ lastUsedAt: string | null;
111
+ };
112
+ availability: {
113
+ performanceMeasured: boolean;
114
+ qualityMeasured: boolean;
115
+ reuseObserved: boolean;
69
116
  };
70
117
  };
71
118
  export type VaultAssetSearch = {
72
119
  q?: string;
73
- kind?: string[];
120
+ kind?: VaultAssetKind[];
121
+ subtype?: string;
122
+ scope?: 'object' | 'fragment' | 'environment';
123
+ format?: string;
124
+ performanceTier?: 'mobile' | 'desktop' | 'cinematic' | 'unknown';
125
+ rank?: 'relevance' | 'performance' | 'reuse';
74
126
  skeleton?: string;
75
127
  engine?: string;
76
128
  license?: string;
@@ -83,12 +135,48 @@ export type VaultAssetSearch = {
83
135
  export type InstalledVaultAsset = {
84
136
  assetId: string;
85
137
  slug: string;
86
- kind: string;
87
- version: number | null;
138
+ kind: VaultAssetKind;
139
+ version: number;
88
140
  path: string;
89
141
  sourceUrl: string;
90
142
  checksumSha256: string;
143
+ sizeBytes: number;
144
+ relatedArtifacts: Array<{
145
+ role: string;
146
+ path: string;
147
+ sourceUrl: string;
148
+ checksumSha256: string;
149
+ sizeBytes: number;
150
+ }>;
151
+ };
152
+ export type VaultAssetVersion = {
153
+ version: number;
154
+ url: string | null;
155
+ mimeType: string;
156
+ sizeBytes: number;
157
+ checksumSha256: string | null;
158
+ notes?: string | null;
159
+ createdAt: string;
91
160
  };
161
+ export type VaultMetadataUpdate = {
162
+ title?: string;
163
+ description?: string | null;
164
+ tags?: string[];
165
+ contentRating?: 'everyone' | 'teen' | 'mature' | 'adult';
166
+ contentRatingAttestationAccepted?: boolean;
167
+ };
168
+ export type VaultAssetUsage = {
169
+ assetId: string;
170
+ worldUsageCount: number;
171
+ usageCount: number;
172
+ lastUsedAt: string | null;
173
+ usedInWorlds: Array<Record<string, unknown>>;
174
+ };
175
+ export declare class UnavailableCapabilityError extends Error {
176
+ readonly capability: string;
177
+ readonly code = "CAPABILITY_UNAVAILABLE";
178
+ constructor(capability: string, message: string);
179
+ }
92
180
  export type MaterialCatalogEntry = {
93
181
  id: string;
94
182
  name: string;
@@ -109,6 +197,8 @@ export type MaterialCatalogResult = {
109
197
  materials: MaterialCatalogEntry[];
110
198
  };
111
199
  export declare function generateAndPublishAsset(creds: CliCredentials, input: GenerateAssetInput, options?: GenerateAssetOptions): Promise<DreamerAssetJob>;
200
+ export declare function startDreamerAssetGeneration(creds: CliCredentials, input: GenerateAssetInput): Promise<DreamerAssetJob>;
201
+ export declare function getDreamerAssetGenerationJob(creds: CliCredentials, jobId: string): Promise<DreamerAssetJob>;
112
202
  export declare function resumeAndPublishAsset(creds: CliCredentials, jobId: string, options?: GenerateAssetOptions): Promise<DreamerAssetJob>;
113
203
  export declare function generateStandaloneAsset(creds: CliCredentials, input: {
114
204
  kind: StandaloneAssetKind;
@@ -118,15 +208,36 @@ export declare function generateStandaloneAsset(creds: CliCredentials, input: {
118
208
  title?: string;
119
209
  loop?: boolean;
120
210
  durationSeconds?: number;
211
+ resolution?: 1024 | 2048;
212
+ splatScope?: 'object' | 'fragment' | 'environment';
213
+ sessionId?: string;
121
214
  }, options?: {
122
215
  pollIntervalMs?: number;
123
216
  timeoutMs?: number;
124
217
  onProgress?: (job: StandaloneGeneratedAsset) => void;
125
218
  }): Promise<StandaloneGeneratedAsset>;
219
+ export declare function startStandaloneAssetGeneration(creds: CliCredentials, input: {
220
+ kind: StandaloneAssetKind;
221
+ prompt: string;
222
+ additionalPrompt?: string;
223
+ projectId?: string;
224
+ sessionId?: string;
225
+ title?: string;
226
+ loop?: boolean;
227
+ durationSeconds?: number;
228
+ resolution?: 1024 | 2048;
229
+ splatScope?: 'object' | 'fragment' | 'environment';
230
+ }): Promise<{
231
+ jobId: string;
232
+ status: 'queued';
233
+ }>;
234
+ export declare function getStandaloneAssetGenerationJob(creds: CliCredentials, jobId: string): Promise<StandaloneGeneratedAsset>;
126
235
  export declare function generateImage(creds: CliCredentials, input: {
127
236
  prompt: string;
128
237
  additionalPrompt?: string;
129
238
  projectId?: string;
239
+ sessionId?: string;
240
+ title?: string;
130
241
  }, options?: {
131
242
  pollIntervalMs?: number;
132
243
  timeoutMs?: number;
@@ -137,6 +248,11 @@ export declare function searchVaultAssets(apiUrl: string, query?: VaultAssetSear
137
248
  totalItems: number;
138
249
  }>;
139
250
  export declare function getVaultAsset(apiUrl: string, assetId: string, creds?: CliCredentials): Promise<VaultAssetDetail>;
251
+ export declare function getVaultAssetVersions(apiUrl: string, assetId: string, creds?: CliCredentials): Promise<{
252
+ items: VaultAssetVersion[];
253
+ }>;
254
+ export declare function updateVaultAssetMetadata(creds: CliCredentials, assetId: string, update: VaultMetadataUpdate): Promise<VaultAssetSummary>;
255
+ export declare function getVaultAssetUsage(apiUrl: string, assetId: string, creds?: CliCredentials): Promise<VaultAssetUsage>;
140
256
  export declare function installVaultAsset(worldDir: string, apiUrl: string, assetId: string, creds?: CliCredentials): Promise<InstalledVaultAsset>;
141
257
  export declare function listMaterials(apiUrl: string, query?: {
142
258
  q?: string;
package/dist/assets.js CHANGED
@@ -1,11 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnavailableCapabilityError = exports.VAULT_ASSET_KINDS = void 0;
3
4
  exports.generateAndPublishAsset = generateAndPublishAsset;
5
+ exports.startDreamerAssetGeneration = startDreamerAssetGeneration;
6
+ exports.getDreamerAssetGenerationJob = getDreamerAssetGenerationJob;
4
7
  exports.resumeAndPublishAsset = resumeAndPublishAsset;
5
8
  exports.generateStandaloneAsset = generateStandaloneAsset;
9
+ exports.startStandaloneAssetGeneration = startStandaloneAssetGeneration;
10
+ exports.getStandaloneAssetGenerationJob = getStandaloneAssetGenerationJob;
6
11
  exports.generateImage = generateImage;
7
12
  exports.searchVaultAssets = searchVaultAssets;
8
13
  exports.getVaultAsset = getVaultAsset;
14
+ exports.getVaultAssetVersions = getVaultAssetVersions;
15
+ exports.updateVaultAssetMetadata = updateVaultAssetMetadata;
16
+ exports.getVaultAssetUsage = getVaultAssetUsage;
9
17
  exports.installVaultAsset = installVaultAsset;
10
18
  exports.listMaterials = listMaterials;
11
19
  exports.resolveMaterial = resolveMaterial;
@@ -13,21 +21,72 @@ const node_crypto_1 = require("node:crypto");
13
21
  const promises_1 = require("node:fs/promises");
14
22
  const node_path_1 = require("node:path");
15
23
  const api_1 = require("./api");
24
+ exports.VAULT_ASSET_KINDS = [
25
+ 'prop',
26
+ 'character',
27
+ 'animation',
28
+ 'audio',
29
+ 'texture',
30
+ 'material',
31
+ 'environment',
32
+ 'terrain',
33
+ 'vfx',
34
+ 'decal',
35
+ 'sky',
36
+ 'gaussian_splat',
37
+ 'scene',
38
+ 'unreal_package',
39
+ ];
40
+ class UnavailableCapabilityError extends Error {
41
+ capability;
42
+ code = 'CAPABILITY_UNAVAILABLE';
43
+ constructor(capability, message) {
44
+ super(message);
45
+ this.capability = capability;
46
+ }
47
+ }
48
+ exports.UnavailableCapabilityError = UnavailableCapabilityError;
16
49
  const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
17
50
  function isTerminalFailure(job) {
18
51
  return ['failed', 'blocked_insufficient_spark', 'cancelled'].includes(job.status);
19
52
  }
53
+ function normalizeDreamerAssetJob(job) {
54
+ const vaultAssetId = job.vaultAssetId ??
55
+ (typeof job.verification?.vaultAssetId === 'string'
56
+ ? job.verification.vaultAssetId
57
+ : null);
58
+ const vaultAutoPublish = job.vaultAutoPublish ??
59
+ (job.verification?.vaultAutoPublish === 'disabled'
60
+ ? 'disabled'
61
+ : vaultAssetId
62
+ ? 'published'
63
+ : undefined);
64
+ return {
65
+ ...job,
66
+ ...(vaultAssetId ? { vaultAssetId } : {}),
67
+ ...(vaultAutoPublish ? { vaultAutoPublish } : {}),
68
+ };
69
+ }
20
70
  async function generateAndPublishAsset(creds, input, options = {}) {
21
71
  const api = api_1.HelixApi.forCredentials(creds);
22
- const job = await api.request('POST', '/api/v1/dreamer/generate', {
72
+ const job = await startDreamerAssetGeneration(creds, input);
73
+ return driveDreamerAssetJob(api, job, options);
74
+ }
75
+ async function startDreamerAssetGeneration(creds, input) {
76
+ const api = api_1.HelixApi.forCredentials(creds);
77
+ return normalizeDreamerAssetJob(await api.request('POST', '/api/v1/dreamer/generate', {
23
78
  ...input,
24
79
  kind: input.kind === 'prop' ? 'home_item' : 'avatar',
25
- });
26
- return driveDreamerAssetJob(api, job, options);
80
+ }));
81
+ }
82
+ function getDreamerAssetGenerationJob(creds, jobId) {
83
+ return api_1.HelixApi.forCredentials(creds)
84
+ .request('GET', `/api/v1/dreamer/jobs/${encodeURIComponent(jobId)}`)
85
+ .then(normalizeDreamerAssetJob);
27
86
  }
28
87
  async function resumeAndPublishAsset(creds, jobId, options = {}) {
29
88
  const api = api_1.HelixApi.forCredentials(creds);
30
- const job = await api.request('GET', `/api/v1/dreamer/jobs/${encodeURIComponent(jobId)}`);
89
+ const job = await getDreamerAssetGenerationJob(creds, jobId);
31
90
  return driveDreamerAssetJob(api, job, options);
32
91
  }
33
92
  async function driveDreamerAssetJob(api, initialJob, options) {
@@ -44,28 +103,27 @@ async function driveDreamerAssetJob(api, initialJob, options) {
44
103
  return job;
45
104
  const gate = job.awaitingApproval?.gate;
46
105
  if (gate && !approved.has(gate)) {
47
- job = await api.request('POST', `/api/v1/dreamer/jobs/${encodeURIComponent(job.id)}/approve`, { gate });
106
+ job = normalizeDreamerAssetJob(await api.request('POST', `/api/v1/dreamer/jobs/${encodeURIComponent(job.id)}/approve`, { gate }));
48
107
  approved.add(gate);
49
108
  continue;
50
109
  }
51
110
  if (!job.awaitingApproval &&
52
111
  (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' });
112
+ job = normalizeDreamerAssetJob(await api.request('POST', `/api/v1/dreamer/jobs/${encodeURIComponent(job.id)}/publish`, { visibility: options.visibility ?? 'public' }));
54
113
  if (job.publishedItemId)
55
114
  return job;
56
115
  }
57
116
  await sleep(pollIntervalMs);
58
- job = await api.request('GET', `/api/v1/dreamer/jobs/${encodeURIComponent(job.id)}`);
117
+ job = normalizeDreamerAssetJob(await api.request('GET', `/api/v1/dreamer/jobs/${encodeURIComponent(job.id)}`));
59
118
  }
60
119
  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
120
  }
62
121
  async function generateStandaloneAsset(creds, input, options = {}) {
63
- const api = api_1.HelixApi.forCredentials(creds);
64
122
  const pollIntervalMs = options.pollIntervalMs ?? 2_000;
65
123
  const deadline = Date.now() + (options.timeoutMs ?? 10 * 60_000);
66
- const accepted = await api.request('POST', '/api/v1/dreamer/assets/generate', input);
124
+ const accepted = await startStandaloneAssetGeneration(creds, input);
67
125
  while (Date.now() < deadline) {
68
- const job = await api.request('GET', `/api/v1/dreamer/assets/jobs/${encodeURIComponent(accepted.jobId)}`);
126
+ const job = await getStandaloneAssetGenerationJob(creds, accepted.jobId);
69
127
  options.onProgress?.(job);
70
128
  if (job.status === 'succeeded')
71
129
  return job;
@@ -76,6 +134,15 @@ async function generateStandaloneAsset(creds, input, options = {}) {
76
134
  }
77
135
  throw new Error(`Dreamer ${input.kind} generation job ${accepted.jobId} timed out after ${options.timeoutMs ?? 10 * 60_000}ms`);
78
136
  }
137
+ async function startStandaloneAssetGeneration(creds, input) {
138
+ if (input.kind === 'animation') {
139
+ throw new UnavailableCapabilityError('animation_generation', 'Animation generation is not available yet. Use a published Vault animation or upload a skeleton-gated clip.');
140
+ }
141
+ return api_1.HelixApi.forCredentials(creds).request('POST', '/api/v1/dreamer/assets/generate', input);
142
+ }
143
+ function getStandaloneAssetGenerationJob(creds, jobId) {
144
+ return api_1.HelixApi.forCredentials(creds).request('GET', `/api/v1/dreamer/assets/jobs/${encodeURIComponent(jobId)}`);
145
+ }
79
146
  function generateImage(creds, input, options = {}) {
80
147
  return generateStandaloneAsset(creds, { kind: 'image', ...input }, options);
81
148
  }
@@ -86,7 +153,19 @@ async function searchVaultAssets(apiUrl, query = {}, creds) {
86
153
  params.set('q', query.q);
87
154
  for (const kind of query.kind ?? [])
88
155
  params.append('kind', kind);
89
- for (const key of ['skeleton', 'engine', 'license', 'source', 'origin', 'creatorId']) {
156
+ for (const key of [
157
+ 'subtype',
158
+ 'scope',
159
+ 'format',
160
+ 'performanceTier',
161
+ 'rank',
162
+ 'skeleton',
163
+ 'engine',
164
+ 'license',
165
+ 'source',
166
+ 'origin',
167
+ 'creatorId',
168
+ ]) {
90
169
  if (query[key])
91
170
  params.set(key, String(query[key]));
92
171
  }
@@ -101,10 +180,24 @@ function getVaultAsset(apiUrl, assetId, creds) {
101
180
  const api = creds ? api_1.HelixApi.forCredentials(creds) : new api_1.HelixApi(apiUrl);
102
181
  return api.request('GET', `/api/v1/vault/assets/${encodeURIComponent(assetId)}`);
103
182
  }
183
+ function getVaultAssetVersions(apiUrl, assetId, creds) {
184
+ const api = creds ? api_1.HelixApi.forCredentials(creds) : new api_1.HelixApi(apiUrl);
185
+ return api.request('GET', `/api/v1/vault/assets/${encodeURIComponent(assetId)}/versions`);
186
+ }
187
+ function updateVaultAssetMetadata(creds, assetId, update) {
188
+ return api_1.HelixApi.forCredentials(creds).request('PATCH', `/api/v1/vault/assets/${encodeURIComponent(assetId)}`, update);
189
+ }
190
+ async function getVaultAssetUsage(apiUrl, assetId, creds) {
191
+ const detail = await getVaultAsset(apiUrl, assetId, creds);
192
+ return {
193
+ assetId: detail.assetId,
194
+ worldUsageCount: typeof detail.worldUsageCount === 'number' ? detail.worldUsageCount : 0,
195
+ usageCount: typeof detail.usageCount === 'number' ? detail.usageCount : 0,
196
+ lastUsedAt: typeof detail.lastUsedAt === 'string' ? detail.lastUsedAt : null,
197
+ usedInWorlds: detail.usedInWorlds ?? [],
198
+ };
199
+ }
104
200
  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
201
  const byMime = {
109
202
  'model/gltf-binary': '.glb',
110
203
  'model/gltf+json': '.gltf',
@@ -113,32 +206,94 @@ function extensionFor(url, mimeType) {
113
206
  'image/webp': '.webp',
114
207
  'audio/mpeg': '.mp3',
115
208
  'audio/ogg': '.ogg',
209
+ 'application/json': '.json',
210
+ 'application/vnd.helix.material+json': '.helix-material.json',
211
+ 'application/vnd.helix.scene+json': '.helix-scene.json',
212
+ 'application/vnd.helix.terrain+json': '.helix-terrain.json',
213
+ 'application/vnd.helix.vfx+json': '.helix-vfx.json',
214
+ 'application/vnd.helix.decal+json': '.helix-decal.json',
215
+ 'image/ktx2': '.ktx2',
216
+ 'image/vnd.radiance': '.hdr',
217
+ 'image/x-exr': '.exr',
218
+ 'application/x-spz': '.spz',
116
219
  };
117
- return byMime[mimeType ?? ''] ?? '.bin';
220
+ const semanticExtension = byMime[mimeType ?? ''];
221
+ if (semanticExtension?.includes('.helix-'))
222
+ return semanticExtension;
223
+ const fromUrl = (0, node_path_1.extname)(new URL(url).pathname).toLowerCase();
224
+ if (/^\.[a-z0-9]{2,5}$/.test(fromUrl))
225
+ return fromUrl;
226
+ return semanticExtension ?? '.bin';
227
+ }
228
+ function safeName(value, fallback) {
229
+ return (value
230
+ .replace(/[^a-z0-9_.-]+/gi, '-')
231
+ .replace(/^-+|-+$/g, '')
232
+ .toLowerCase() || fallback);
233
+ }
234
+ async function downloadAndVerify(input) {
235
+ const response = await fetch(input.url, {
236
+ headers: input.token ? { authorization: `Bearer ${input.token}` } : {},
237
+ });
238
+ if (!response.ok) {
239
+ throw new Error(`${input.label} download failed (${response.status})`);
240
+ }
241
+ const bytes = Buffer.from(await response.arrayBuffer());
242
+ const checksumSha256 = (0, node_crypto_1.createHash)('sha256').update(bytes).digest('hex');
243
+ if (input.expectedChecksumSha256 &&
244
+ checksumSha256.toLowerCase() !== input.expectedChecksumSha256.toLowerCase()) {
245
+ throw new Error(`${input.label} checksum mismatch: expected ${input.expectedChecksumSha256}, received ${checksumSha256}`);
246
+ }
247
+ if (input.expectedSizeBytes > 0 && bytes.length !== input.expectedSizeBytes) {
248
+ throw new Error(`${input.label} size mismatch: expected ${input.expectedSizeBytes} bytes, received ${bytes.length}`);
249
+ }
250
+ return { bytes, checksumSha256 };
118
251
  }
119
252
  async function installVaultAsset(worldDir, apiUrl, assetId, creds) {
120
253
  const detail = await getVaultAsset(apiUrl, assetId, creds);
121
254
  const artifactUrl = detail.artifact?.url ?? detail.artifactUrl;
122
255
  if (!artifactUrl)
123
256
  throw new Error(`Vault asset ${assetId} has no downloadable artifact`);
124
- const version = detail.artifact?.version ?? detail.currentVersion ?? null;
257
+ const version = detail.artifact.version;
125
258
  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}` } : {},
259
+ const { bytes, checksumSha256 } = await downloadAndVerify({
260
+ url: downloadUrl,
261
+ token: creds?.token,
262
+ expectedChecksumSha256: detail.artifact.checksumSha256,
263
+ expectedSizeBytes: detail.artifact.sizeBytes,
264
+ label: `Vault asset ${assetId}`,
128
265
  });
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();
266
+ const extension = extensionFor(artifactUrl, detail.artifact.mimeType ?? detail.artifactMimeType ?? detail.mimeType);
267
+ const safeSlug = safeName(detail.slug || (0, node_path_1.basename)(new URL(artifactUrl).pathname, extension), 'asset');
138
268
  const relativePath = (0, node_path_1.join)('public', 'assets', 'vault', assetId, `${safeSlug}${extension}`);
139
269
  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 });
270
+ const assetDir = (0, node_path_1.join)(worldDir, 'public', 'assets', 'vault', assetId);
271
+ await (0, promises_1.mkdir)(assetDir, { recursive: true });
141
272
  await (0, promises_1.writeFile)(outputPath, bytes);
273
+ const installedRelated = [];
274
+ for (const related of detail.artifact.relatedArtifacts ?? []) {
275
+ if (!related.url) {
276
+ throw new Error(`Vault asset ${assetId} related artifact "${related.role}" is unavailable`);
277
+ }
278
+ const downloaded = await downloadAndVerify({
279
+ url: related.url,
280
+ token: creds?.token,
281
+ expectedChecksumSha256: related.checksumSha256,
282
+ expectedSizeBytes: related.sizeBytes,
283
+ label: `Vault asset ${assetId} related artifact "${related.role}"`,
284
+ });
285
+ const relatedExtension = extensionFor(related.url, related.mimeType);
286
+ const filename = `${safeName(related.role, 'related')}${relatedExtension}`;
287
+ const relatedPath = (0, node_path_1.join)('public', 'assets', 'vault', assetId, filename);
288
+ await (0, promises_1.writeFile)((0, node_path_1.join)(worldDir, relatedPath), downloaded.bytes);
289
+ installedRelated.push({
290
+ role: related.role,
291
+ path: relatedPath,
292
+ sourceUrl: related.url,
293
+ checksumSha256: downloaded.checksumSha256,
294
+ sizeBytes: downloaded.bytes.length,
295
+ });
296
+ }
142
297
  const receiptPath = (0, node_path_1.join)(worldDir, 'public', 'helix.assets.json');
143
298
  let prior = {
144
299
  version: 1,
@@ -158,7 +313,9 @@ async function installVaultAsset(worldDir, apiUrl, assetId, creds) {
158
313
  version,
159
314
  path: relativePath,
160
315
  sourceUrl: downloadUrl,
161
- checksumSha256: (0, node_crypto_1.createHash)('sha256').update(bytes).digest('hex'),
316
+ checksumSha256,
317
+ sizeBytes: bytes.length,
318
+ relatedArtifacts: installedRelated,
162
319
  };
163
320
  const artifactKey = new URL(artifactUrl).pathname.replace(/^\/+/, '');
164
321
  prior.vaultAssets = [
@@ -169,6 +326,8 @@ async function installVaultAsset(worldDir, apiUrl, assetId, creds) {
169
326
  kind: detail.kind,
170
327
  artifactKey,
171
328
  integrity: `sha256-${installed.checksumSha256}`,
329
+ checksumSha256: installed.checksumSha256,
330
+ relatedArtifacts: installedRelated,
172
331
  },
173
332
  ];
174
333
  prior.assets = [
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}