@helix3/helix-cli 0.1.13-helix3.134 → 0.1.13-helix3.136

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.
@@ -39,4 +39,41 @@ export type VaultResolveApi = {
39
39
  request<T>(method: string, path: string): Promise<T>;
40
40
  };
41
41
  export declare function assessWeaponPins(dir: string, client?: VaultResolveApi): Promise<WeaponPinsCurrency | null>;
42
+ export type VaultAssetFinding = 'current' | 'newer-version' | 'unresolved';
43
+ export type VaultAssetRow = {
44
+ assetId: string;
45
+ kind: string;
46
+ installedVersion: number;
47
+ currentVersion: number | null;
48
+ title: string | null;
49
+ finding: VaultAssetFinding;
50
+ note: string;
51
+ };
52
+ export declare function assessVaultAssets(dir: string, client?: VaultResolveApi): Promise<VaultAssetRow[] | null>;
53
+ export type InteractableFinding = 'current' | 'reference-moved' | 'checksum-drift' | 'unresolved';
54
+ export type InteractableRow = {
55
+ itemId: string;
56
+ /** The registry package slug (`helix_interactables/<id>@<version>`). */
57
+ id: string;
58
+ installedVersion: string;
59
+ currentVersion: string | null;
60
+ title: string | null;
61
+ /** How many placed instances of this exact install the world carries. */
62
+ instances: number;
63
+ finding: InteractableFinding;
64
+ note: string;
65
+ };
66
+ export declare function assessInteractables(dir: string, client?: VaultResolveApi): Promise<InteractableRow[] | null>;
67
+ export type PlatformDeliveryStatus = {
68
+ /** What the real publish validator says about the source-tree declarations ([] = passes). */
69
+ errors: string[];
70
+ /** The descriptor's declared delivery, null when the file is missing or unreadable. */
71
+ delivery: string | null;
72
+ descriptorPresent: boolean;
73
+ /** vite.config.ts externalizes `@helix/` — false means the next install marks the world legacy-bundled. */
74
+ viteExternalizes: boolean;
75
+ /** index.html carries the helix:three markers install rewrites the import map between. */
76
+ markersPresent: boolean;
77
+ };
78
+ export declare function assessPlatformDelivery(dir: string, origin?: string): PlatformDeliveryStatus | null;
42
79
  export declare function assessWorldCurrency(dir: string, client?: CatalogClient): Promise<WorldCurrency | null>;
package/dist/currency.js CHANGED
@@ -2,9 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ADVISORY_SYSTEMS = void 0;
4
4
  exports.assessWeaponPins = assessWeaponPins;
5
+ exports.assessVaultAssets = assessVaultAssets;
6
+ exports.assessInteractables = assessInteractables;
7
+ exports.assessPlatformDelivery = assessPlatformDelivery;
5
8
  exports.assessWorldCurrency = assessWorldCurrency;
6
9
  const node_fs_1 = require("node:fs");
7
10
  const node_path_1 = require("node:path");
11
+ const helix_manifest_1 = require("@hypersoniclabs/helix-manifest");
8
12
  const api_1 = require("./api");
9
13
  const config_1 = require("./config");
10
14
  const install_1 = require("./install");
@@ -128,6 +132,164 @@ async function assessWeaponPins(dir, client) {
128
132
  const rows = await Promise.all(unique.map((pin) => classifyWeaponPin(api, pin)));
129
133
  return { rows, copiesDiverge };
130
134
  }
135
+ function readAssetReceipt(path) {
136
+ if (!(0, node_fs_1.existsSync)(path))
137
+ return null;
138
+ try {
139
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
140
+ if (!Array.isArray(parsed.vaultAssets))
141
+ return null;
142
+ const entries = [];
143
+ for (const raw of parsed.vaultAssets) {
144
+ if (!raw || typeof raw !== 'object')
145
+ continue;
146
+ const { assetId, version, kind } = raw;
147
+ if (typeof assetId !== 'string' || typeof version !== 'number')
148
+ continue;
149
+ entries.push({ assetId, version, kind: typeof kind === 'string' ? kind : 'asset' });
150
+ }
151
+ return entries.length ? entries : null;
152
+ }
153
+ catch {
154
+ return null;
155
+ }
156
+ }
157
+ async function classifyVaultAsset(api, entry) {
158
+ const base = { assetId: entry.assetId, kind: entry.kind, installedVersion: entry.version };
159
+ try {
160
+ const detail = await api.request('GET', `${publish_1.VAULT_ASSETS_PATH}/${encodeURIComponent(entry.assetId)}`);
161
+ const currentVersion = detail.artifact?.version ?? null;
162
+ const title = detail.title ?? null;
163
+ if (currentVersion === null) {
164
+ return { ...base, currentVersion: null, title, finding: 'unresolved', note: 'the vault resolve answered no artifact version (held or not public here)' };
165
+ }
166
+ return currentVersion > entry.version
167
+ ? { ...base, currentVersion, title, finding: 'newer-version', note: '' }
168
+ : { ...base, currentVersion, title, finding: 'current', note: '' };
169
+ }
170
+ catch (err) {
171
+ // Same shape as weapon pins: a 404 here usually means the receipt was written against another
172
+ // backend (dev-stack ids in a live world). The bundled files keep working either way.
173
+ return { ...base, currentVersion: null, title: null, finding: 'unresolved', note: errorMessage(err) };
174
+ }
175
+ }
176
+ // null when the world has no provenance receipt (or it lists nothing) — callers omit the section.
177
+ async function assessVaultAssets(dir, client) {
178
+ const entries = readAssetReceipt((0, node_path_1.join)(dir, 'public', 'helix.assets.json'));
179
+ if (!entries)
180
+ return null;
181
+ const creds = (0, config_1.loadCredentials)();
182
+ const api = client ?? (creds ? api_1.HelixApi.forCredentials(creds) : new api_1.HelixApi(config_1.DEFAULT_API_URL));
183
+ return Promise.all(entries.map((entry) => classifyVaultAsset(api, entry)));
184
+ }
185
+ function readInstalledInteractables(path) {
186
+ if (!(0, node_fs_1.existsSync)(path))
187
+ return null;
188
+ try {
189
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
190
+ if (!Array.isArray(parsed.instances))
191
+ return null;
192
+ const grouped = new Map();
193
+ for (const raw of parsed.instances) {
194
+ if (!raw || typeof raw !== 'object')
195
+ continue;
196
+ const { itemId, id, version, checksumSha256 } = raw;
197
+ if (typeof itemId !== 'string' || typeof id !== 'string' || typeof version !== 'string')
198
+ continue;
199
+ const checksum = typeof checksumSha256 === 'string' ? checksumSha256.toLowerCase() : null;
200
+ const key = `${itemId}|${id}|${version}|${checksum ?? ''}`;
201
+ const existing = grouped.get(key);
202
+ if (existing)
203
+ existing.instances += 1;
204
+ else
205
+ grouped.set(key, { entry: { itemId, id, version, checksumSha256: checksum }, instances: 1 });
206
+ }
207
+ return grouped.size ? [...grouped.values()] : null;
208
+ }
209
+ catch {
210
+ return null;
211
+ }
212
+ }
213
+ async function classifyInteractable(api, entry, instances) {
214
+ const base = { itemId: entry.itemId, id: entry.id, installedVersion: entry.version, instances };
215
+ try {
216
+ const detail = await api.request('GET', `/api/v1/universal-items/${encodeURIComponent(entry.itemId)}`);
217
+ const title = detail.item?.title ?? null;
218
+ const references = detail.item?.metadata?.derived?.interactive?.references;
219
+ const first = Array.isArray(references) && references[0] && typeof references[0] === 'object' ? references[0] : null;
220
+ if (!first || first.kind !== 'interactable-bundle' || typeof first.version !== 'string' || typeof first.checksumSha256 !== 'string') {
221
+ return { ...base, currentVersion: null, title, finding: 'unresolved', note: 'the Marketplace item no longer carries a valid interactable-bundle reference' };
222
+ }
223
+ if (first.version !== entry.version) {
224
+ return { ...base, currentVersion: first.version, title, finding: 'reference-moved', note: '' };
225
+ }
226
+ if (entry.checksumSha256 && first.checksumSha256.toLowerCase() !== entry.checksumSha256) {
227
+ return { ...base, currentVersion: first.version, title, finding: 'checksum-drift', note: 'the registry re-published this version with different bytes — treat as suspect' };
228
+ }
229
+ return { ...base, currentVersion: first.version, title, finding: 'current', note: '' };
230
+ }
231
+ catch (err) {
232
+ return { ...base, currentVersion: null, title: null, finding: 'unresolved', note: errorMessage(err) };
233
+ }
234
+ }
235
+ // null when the world has no interactable install index (or it lists nothing) — callers omit the section.
236
+ async function assessInteractables(dir, client) {
237
+ const grouped = readInstalledInteractables((0, node_path_1.join)(dir, 'helix_interactables', 'installed.json'));
238
+ if (!grouped)
239
+ return null;
240
+ const creds = (0, config_1.loadCredentials)();
241
+ const api = client ?? (creds ? api_1.HelixApi.forCredentials(creds) : new api_1.HelixApi(config_1.DEFAULT_API_URL));
242
+ return Promise.all(grouped.map(({ entry, instances }) => classifyInteractable(api, entry, instances)));
243
+ }
244
+ // null when `dir` isn't a world or declares no systems — the gate only fires on systems-declaring
245
+ // worlds. `origin` defaults to the logged-in backend (what publish binds resolver URLs against).
246
+ function assessPlatformDelivery(dir, origin) {
247
+ const manifestPath = install_1.WORLD_MANIFEST_LOCATIONS.map((rel) => (0, node_path_1.join)(dir, rel)).find((p) => (0, node_fs_1.existsSync)(p));
248
+ if (!manifestPath)
249
+ return null;
250
+ let systems;
251
+ try {
252
+ const manifest = JSON.parse((0, node_fs_1.readFileSync)(manifestPath, 'utf8'));
253
+ systems = manifest.systems ?? {};
254
+ }
255
+ catch {
256
+ return null;
257
+ }
258
+ if (Object.keys(systems).length === 0)
259
+ return null;
260
+ const readText = (rel) => {
261
+ const p = (0, node_path_1.join)(dir, rel);
262
+ return (0, node_fs_1.existsSync)(p) ? (0, node_fs_1.readFileSync)(p, 'utf8') : null;
263
+ };
264
+ const viteSource = readText('vite.config.ts');
265
+ const viteExternalizes = viteSource !== null && (0, install_1.viteConfigExternalizesPlatformSystems)(viteSource);
266
+ const html = readText('index.html') ?? '';
267
+ const markersPresent = html.includes('helix:three:start') && html.includes('helix:three:end');
268
+ const descriptorText = readText((0, node_path_1.join)('public', 'helix.runtime.json'));
269
+ if (descriptorText === null) {
270
+ return {
271
+ errors: ['platform systems are declared but public/helix.runtime.json is missing — run helix install, then rebuild'],
272
+ delivery: null,
273
+ descriptorPresent: false,
274
+ viteExternalizes,
275
+ markersPresent,
276
+ };
277
+ }
278
+ let descriptor;
279
+ try {
280
+ descriptor = JSON.parse(descriptorText);
281
+ }
282
+ catch {
283
+ return { errors: ['public/helix.runtime.json is not valid JSON'], delivery: null, descriptorPresent: true, viteExternalizes, markersPresent };
284
+ }
285
+ const verdict = (0, helix_manifest_1.validatePlatformRuntimeDelivery)({
286
+ descriptor,
287
+ manifestSystems: systems,
288
+ entryHtml: html,
289
+ compatibleResolverOrigin: origin ?? (0, config_1.loadCredentials)()?.apiUrl ?? config_1.DEFAULT_API_URL,
290
+ });
291
+ return { errors: verdict.errors, delivery: verdict.delivery, descriptorPresent: true, viteExternalizes, markersPresent };
292
+ }
131
293
  // null when `dir` isn't a world (no helix.json in either manifest location) — callers omit the
132
294
  // section silently. `manifest.systems` absent is treated as `{}`; advisory checks still run.
133
295
  async function assessWorldCurrency(dir, client) {
@@ -1 +1 @@
1
- {"version":3,"file":"currency.js","sourceRoot":"","sources":["../src/currency.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"currency.js","sourceRoot":"","sources":["../src/currency.ts"],"names":[],"mappings":";;;AA8KA,4CAgBC;AA4DD,8CAMC;AA2ED,kDAMC;AAyBD,wDA6CC;AAID,kDAsBC;AAjbD,qCAAmD;AACnD,yCAAiC;AACjC,mEAAiF;AACjF,+BAAiC;AACjC,qCAA4D;AAC5D,uCAAsH;AACtH,+CAAkD;AAClD,+CAAsD;AACtD,uCAA6E;AAgC7E,4FAA4F;AAC5F,yDAAyD;AAC5C,QAAA,gBAAgB,GAAuC;IAClE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,2CAA2C,EAAE;CAC7E,CAAC;AAEF,SAAS,KAAK,CAAC,QAAkB,EAAE,OAAiC;IAClE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,iGAAiG;AACjG,6EAA6E;AAC7E,SAAS,eAAe,CAAC,QAAkB,EAAE,OAAiC;IAC5E,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAqB,EAAE,IAAY,EAAE,GAAW,EAAE,MAAqB;IACnG,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAA,2BAAiB,EAAC,GAAG,CAAC,CAAC;QACpC,2FAA2F;QAC3F,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAE5E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,gBAAgB,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7E,MAAM,aAAa,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhE,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,iBAAiB,CAAC;aACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,GAAG,YAAY,CAAC;aAC3C,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,gBAAgB,CAAC;aAC3F,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YAAE,OAAO,GAAG,cAAc,CAAC;;YACpH,OAAO,GAAG,SAAS,CAAC;QAEzB,MAAM,IAAI,GACR,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YAC9E,CAAC,CAAC,kBAAkB,aAAa,mDAAmD;YACpF,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,yBAAyB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAClJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAqB,EAAE,IAAY,EAAE,MAAc;IACjF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,gBAAgB,CAAC,CAAC;QACrF,MAAM,aAAa,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC7H,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,yBAAyB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC9J,CAAC;AACH,CAAC;AAgCD,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAGnD,CAAC;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC;QACtG,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAoB,EAAE,GAAW;IAChE,IAAI,OAAe,CAAC;IACpB,IAAI,aAA4B,CAAC;IACjC,IAAI,CAAC;QACH,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IACpI,CAAC;IACD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,2DAA2D,EAAE,CAAC;IACzK,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAmB,KAAK,EAAE,GAAG,2BAAiB,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjH,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;QACnC,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,0EAA0E,EAAE,CAAC;QAC/K,CAAC;QACD,OAAO,cAAc,GAAG,aAAa;YACnC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE;YAC5F,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC3F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qFAAqF;QACrF,2FAA2F;QAC3F,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5H,CAAC;AACH,CAAC;AAED,kGAAkG;AAC3F,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAwB;IAC1E,MAAM,YAAY,GAAG,kCAAwB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC1E,IAAI,YAAY,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE5D,MAAM,aAAa,GACjB,YAAY,KAAK,IAAI;QACrB,QAAQ,KAAK,IAAI;QACjB,CAAC,YAAY,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/F,MAAM,KAAK,GAAG,IAAA,wBAAe,GAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,cAAQ,CAAC,wBAAe,CAAC,CAAC,CAAC;IAC/F,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACjC,CAAC;AAsBD,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAA8B,CAAC;QACnF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,SAAS;YAC9C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAA+D,CAAC;YACnG,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,SAAS;YACzE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAoB,EAAE,KAAwB;IAC9E,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3F,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAmB,KAAK,EAAE,GAAG,2BAAiB,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvH,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;QACnC,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,0EAA0E,EAAE,CAAC;QAC3J,CAAC;QACD,OAAO,cAAc,GAAG,KAAK,CAAC,OAAO;YACnC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE;YACxE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,8FAA8F;QAC9F,sFAAsF;QACtF,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IACxG,CAAC;AACH,CAAC;AAED,kGAAkG;AAC3F,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,MAAwB;IAC3E,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAA,wBAAe,GAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,cAAQ,CAAC,wBAAe,CAAC,CAAC,CAAC;IAC/F,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AA8BD,SAAS,0BAA0B,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;QACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoE,CAAC;QAC5F,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,SAAS;YAC9C,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,GAAsF,CAAC;YACvI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,SAAS;YAClG,MAAM,QAAQ,GAAG,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1F,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,EAAE,IAAI,OAAO,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,QAAQ;gBAAE,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;;gBACjC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,GAAoB,EAAE,KAAiC,EAAE,SAAiB;IAC5G,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAChG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAA0B,KAAK,EAAE,2BAA2B,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC;QAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,UAAU,CAAC,CAAC,CAA6B,CAAC,CAAC,CAAC,IAAI,CAAC;QAClJ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YACpI,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,8EAA8E,EAAE,CAAC;QAC/J,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACjG,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC;YACxF,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,gFAAgF,EAAE,CAAC;QAC9K,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IACxG,CAAC;AACH,CAAC;AAED,0GAA0G;AACnG,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,MAAwB;IAC7E,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC/F,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAA,wBAAe,GAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,cAAQ,CAAC,wBAAe,CAAC,CAAC,CAAC;IAC/F,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC;AAuBD,kGAAkG;AAClG,iGAAiG;AACjG,SAAgB,sBAAsB,CAAC,GAAW,EAAE,MAAe;IACjE,MAAM,YAAY,GAAG,kCAAwB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC,CAAC,CAAC;IACtG,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,OAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,YAAY,EAAE,MAAM,CAAC,CAAyC,CAAC;QACxG,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAiB,EAAE;QAC9C,MAAM,CAAC,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,OAAO,IAAA,oBAAU,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,sBAAY,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,UAAU,KAAK,IAAI,IAAI,IAAA,+CAAqC,EAAC,UAAU,CAAC,CAAC;IAClG,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAE9F,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAA,gBAAI,EAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACtE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO;YACL,MAAM,EAAE,CAAC,0GAA0G,CAAC;YACpH,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,KAAK;YACxB,gBAAgB;YAChB,cAAc;SACf,CAAC;IACJ,CAAC;IACD,IAAI,UAAmB,CAAC;IACxB,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,CAAC,6CAA6C,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;IAChJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,gDAA+B,EAAC;QAC9C,UAAU;QACV,eAAe,EAAE,OAAO;QACxB,SAAS,EAAE,IAAI;QACf,wBAAwB,EAAE,MAAM,IAAI,IAAA,wBAAe,GAAE,EAAE,MAAM,IAAI,wBAAe;KACjF,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;AAC3H,CAAC;AAED,+FAA+F;AAC/F,6FAA6F;AACtF,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,MAAsB;IAC3E,MAAM,YAAY,GAAG,kCAAwB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC,CAAC,CAAC;IACtG,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,YAAY,EAAE,MAAM,CAAC,CAAyC,CAAC;IACxG,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAEpC,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,kBAAQ,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAA,oBAAU,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAe,CAAC,CAAC,CAAC,IAAI,CAAC;IACrG,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAErF,4FAA4F;IAC5F,8FAA8F;IAC9F,8BAA8B;IAC9B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,IAAA,qBAAW,EAAC,IAAA,wBAAe,GAAE,EAAE,MAAM,IAAI,wBAAe,CAAC,CAAC,CAAC;IAEtF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7B,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3G,GAAG,wBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;KACvG,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC"}
package/dist/index.js CHANGED
@@ -566,6 +566,38 @@ program
566
566
  : `✖ ${err instanceof Error ? err.message : String(err)}`);
567
567
  }
568
568
  });
569
+ program
570
+ .command('update-interactable')
571
+ .description('Re-resolve an installed Marketplace interactable and move its instances to the current bundle in place (same namespace, same placement)')
572
+ .argument('<slug-or-item-id>', 'Marketplace item slug or UUID')
573
+ .option('-C, --world <dir>', 'world project directory', '.')
574
+ .action(async (ref, opts) => {
575
+ try {
576
+ const credentials = (0, config_1.loadCredentials)() ?? undefined;
577
+ const result = await (0, lib_1.updateInteractable)((0, node_path_1.resolve)(opts.world), ref, {
578
+ credentials,
579
+ onProgress: (message) => console.log(message),
580
+ });
581
+ if (result.noOp) {
582
+ console.log(`✔ Already current: ${result.id}@${result.version}`);
583
+ return;
584
+ }
585
+ console.log(`✔ Updated ${result.id} ${result.fromVersions.join(', ')} → ${result.version} (${result.instances} instance${result.instances === 1 ? '' : 's'}, namespaces preserved)`);
586
+ console.log(` bundle: ${result.destination}`);
587
+ console.log(` server: ${result.manifestPath}`);
588
+ console.log(' composition caps:');
589
+ for (const name of ['rules', 'roomVars', 'playerVars', 'timers', 'phases', 'zones', 'events', 'actions']) {
590
+ console.log(` ${name}: ${result.caps[name]}/${result.caps.limits[name]} (${result.caps.percentages[name]}%)`);
591
+ }
592
+ for (const warning of result.warnings)
593
+ console.warn(` ! ${warning}`);
594
+ }
595
+ catch (err) {
596
+ fail(err instanceof lib_1.ApiError
597
+ ? err.render()
598
+ : `✖ ${err instanceof Error ? err.message : String(err)}`);
599
+ }
600
+ });
569
601
  // --- helix item ------------------------------------------------------------
570
602
  // Universal items (wearables, avatars, home items) uploaded straight from a DCC
571
603
  // export — the surface Helix Studio drives. Publishing an item is not
@@ -3375,6 +3407,31 @@ function formatWeaponPinRow(row) {
3375
3407
  return ` ? ${row.pin}: ${row.note}`;
3376
3408
  }
3377
3409
  }
3410
+ function formatVaultAssetRow(row) {
3411
+ const label = row.title ? `${row.title} (${row.assetId.slice(0, 8)}…)` : row.assetId;
3412
+ switch (row.finding) {
3413
+ case 'current':
3414
+ return ` ✔ ${label}: installed @${row.installedVersion} (current)`;
3415
+ case 'newer-version':
3416
+ return ` ⬆ ${label}: installed @${row.installedVersion} → @${row.currentVersion} in the Vault — optional; adopt with: helix assets install ${row.assetId} (the bundled copy keeps working meanwhile)`;
3417
+ case 'unresolved':
3418
+ return ` ⚠ ${row.assetId}: does not resolve against this backend (${row.note}) — the bundled copy keeps working; reinstalls need the backend it came from`;
3419
+ }
3420
+ }
3421
+ function formatInteractableRow(row) {
3422
+ const name = row.title ? `${row.title} (${row.id})` : row.id;
3423
+ const label = row.instances > 1 ? `${name} ×${row.instances}` : name;
3424
+ switch (row.finding) {
3425
+ case 'current':
3426
+ return ` ✔ ${label}: installed ${row.installedVersion} (current)`;
3427
+ case 'reference-moved':
3428
+ return ` ⬆ ${label}: installed ${row.installedVersion} but the Marketplace item now references ${row.currentVersion} — optional; adopt in place with: helix update-interactable ${row.itemId} (same namespace, same placement)`;
3429
+ case 'checksum-drift':
3430
+ return ` ⚠ ${label}: the Marketplace still references ${row.installedVersion} but its bundle checksum changed — ${row.note}`;
3431
+ case 'unresolved':
3432
+ return ` ⚠ ${label}: ${row.note} — the installed copy keeps working`;
3433
+ }
3434
+ }
3378
3435
  function formatWorldSystemRow(row) {
3379
3436
  const withNote = (line) => (row.note ? `${line} — ${row.note}` : line);
3380
3437
  switch (row.finding) {
@@ -3571,9 +3628,28 @@ program
3571
3628
  console.log(formatWorldSystemRow(row));
3572
3629
  }
3573
3630
  }
3631
+ const platform = (0, lib_1.assessPlatformDelivery)((0, node_path_1.resolve)(opts.project));
3632
+ if (platform) {
3633
+ console.log('\nPlatform runtime delivery (the publish gate, run against the source tree):');
3634
+ if (platform.errors.length === 0) {
3635
+ console.log(` ✔ delivery: ${platform.delivery} — helix.json, helix.runtime.json and the index.html import map agree`);
3636
+ }
3637
+ else {
3638
+ for (const err of platform.errors)
3639
+ console.log(` ✖ ${err}`);
3640
+ }
3641
+ if (!platform.viteExternalizes) {
3642
+ console.log(' ⚠ vite.config.ts does not route @helix/ specifiers external — the build bundles the platform runtime and publish will refuse it; see the MCP upgrades guide');
3643
+ }
3644
+ if (!platform.markersPresent) {
3645
+ console.log(' ⚠ index.html lacks the <!-- helix:three:start/end --> markers — helix install cannot write the import map');
3646
+ }
3647
+ }
3648
+ // Item findings are a separate consent lane from system pins: updating systems does not imply
3649
+ // updating items, so these sections are always framed as optional.
3574
3650
  const weaponPins = await (0, lib_1.assessWeaponPins)((0, node_path_1.resolve)(opts.project));
3575
3651
  if (weaponPins) {
3576
- console.log('\nWeapon definition pins (multiplayer.weaponItems):');
3652
+ console.log('\nWeapon definition pins (multiplayer.weaponItems — updates are optional):');
3577
3653
  if (weaponPins.copiesDiverge) {
3578
3654
  console.log(' ⚠ helix.json and public/multiplayer.json declare DIFFERENT weaponItems — the room fetches public/multiplayer.json, publish validates helix.json; sync them first');
3579
3655
  }
@@ -3581,6 +3657,20 @@ program
3581
3657
  console.log(formatWeaponPinRow(row));
3582
3658
  }
3583
3659
  }
3660
+ const vaultAssets = await (0, lib_1.assessVaultAssets)((0, node_path_1.resolve)(opts.project));
3661
+ if (vaultAssets) {
3662
+ console.log('\nInstalled Vault assets (public/helix.assets.json — updates are optional):');
3663
+ for (const row of vaultAssets) {
3664
+ console.log(formatVaultAssetRow(row));
3665
+ }
3666
+ }
3667
+ const interactables = await (0, lib_1.assessInteractables)((0, node_path_1.resolve)(opts.project));
3668
+ if (interactables) {
3669
+ console.log('\nInstalled interactables (helix_interactables/installed.json — updates are optional):');
3670
+ for (const row of interactables) {
3671
+ console.log(formatInteractableRow(row));
3672
+ }
3673
+ }
3584
3674
  });
3585
3675
  // ---- Unknown subcommands must ERROR, not print the full command list -------
3586
3676
  //