@hypersoniclabs/helix-mcp 0.2.15 → 0.2.16-helix3.191

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
@@ -63,8 +63,8 @@ workflow), `read_doc({ name: "vehicles" })` the HELIX Vehicle Contract (the rule
63
63
  from-scratch builds; physics from real specs; audio; add-ons; publication; QA; a complete live
64
64
  reference package). New vehicle content follows the sealed Package workflow; the former vehicle
65
65
  Item-first MCP publisher routes are retired. `visual_qa_item` judges a candidate `packageVersion`. `item_thumbnail`
66
- re-renders (`action: "refresh"`, with `force` / `dryRun`) or replaces (`action: "set"`, `imagePath`) a
67
- published item's thumbnail in-process through the creator's own credentials.
66
+ requests a server re-render of a published item's catalog thumbnail (with `force` / `dryRun`) and returns the
67
+ preview URL. The catalog card is rendered by HELIX; creators cannot override it (add images to the item page instead).
68
68
 
69
69
  Avatar lifecycle: `get_started({ kind: "avatar" })` serves the `helix-avatars` skill. A generated avatar ("make me an
70
70
  avatar of this character, publish it privately") is ONE blocking call, `create_avatar`, which executes the bundled CLI:
package/dist/server.js CHANGED
@@ -2474,33 +2474,38 @@ server.registerTool('delist_item', {
2474
2474
  label: 'Delist item',
2475
2475
  timeoutMs: 2 * VEHICLE_MIN,
2476
2476
  }));
2477
+ /** What creators are told whenever they try to override the catalog card. */
2478
+ const CATALOG_CARD_IS_PLATFORM_ONLY = 'Catalog thumbnails are rendered by HELIX; creators cannot override the catalog card. Add images to the item page instead.';
2477
2479
  server.registerTool('item_thumbnail', {
2478
- description: "Refresh or replace the thumbnail of an ALREADY-PUBLISHED item (avatar, wearable, add-on, vehicle, ...) you own — runs in-process, no CLI step. action=refresh re-renders the canonical thumbnail from the item's ACTIVE Package Version with the standard server renderer (use after a corrected Package Version, or when the thumbnail still shows an older mesh); pass dryRun first to see what would change without writing, and force to re-render when the server says it is already current. action=set uploads your own png/jpg/webp (imagePath) — moderated, and it is kept across version moves until a later refresh with force. To correct a Package-backed avatar mesh, seal a new Package Version and move the item onto it, then refresh here. A creator-owned item only (403 otherwise); an older backend answers 'does not support thumbnail refresh yet'. Not for worlds: use set_world_thumbnail.",
2480
+ description: "Request a fresh server render of an ALREADY-PUBLISHED item's catalog thumbnail (avatar, wearable, add-on, vehicle, ...) you own, and get back the preview URL — runs in-process, no CLI step. The catalog card is rendered by HELIX with the standard renderer from the item's ACTIVE Package Version, with one fixed camera and lighting preset per item type; creators CANNOT upload or override it (action=set is gone and is refused). Use this after a corrected Package Version, or when the card still shows an older mesh; pass dryRun first to see what would change without writing, and force to re-render when the server says it is already current. To correct a Package-backed mesh, seal a new Package Version and move the item onto it, then request the render here. A creator-owned item only (403 otherwise); an older backend answers 'does not support thumbnail refresh yet'. Not for worlds: use set_world_thumbnail.",
2479
2481
  inputSchema: {
2480
- action: zod_1.z.enum(['refresh', 'set']).describe('refresh = server re-render from the active Package Version; set = upload your own image'),
2482
+ action: zod_1.z
2483
+ .enum(['refresh', 'set'])
2484
+ .optional()
2485
+ .describe('Default and only working action: refresh (server re-render). "set" is refused: creators cannot override the catalog card.'),
2481
2486
  itemId: zod_1.z.string().describe('Published universal item id (UUID) from the item detail page/API or an approved Creator publication receipt.'),
2482
- force: zod_1.z.boolean().optional().describe('refresh only: re-render even when the stored thumbnail is already current'),
2483
- dryRun: zod_1.z.boolean().optional().describe('refresh only: report what would change, write nothing'),
2484
- imagePath: zod_1.z.string().optional().describe('set only: absolute path to a png/jpg/jpeg/webp image (up to 10 MiB)'),
2487
+ force: zod_1.z.boolean().optional().describe('Re-render even when the stored thumbnail is already current'),
2488
+ dryRun: zod_1.z.boolean().optional().describe('Report what would change, write nothing'),
2485
2489
  },
2486
- }, async ({ action, itemId, force, dryRun, imagePath }) => {
2490
+ }, async ({ action, itemId, force, dryRun }) => {
2491
+ if (action === 'set')
2492
+ return errText(`item_thumbnail action=set is not available. ${CATALOG_CARD_IS_PLATFORM_ONLY}`);
2487
2493
  const creds = (0, helix_cli_1.loadCredentials)();
2488
2494
  if (!creds)
2489
2495
  return errText('Not logged in. Ask the human to run: helix login');
2490
- if (action === 'set' && !imagePath)
2491
- return errText('item_thumbnail action=set needs imagePath (png/jpg/webp).');
2492
- if (action === 'set' && (force || dryRun))
2493
- return errText('force and dryRun apply to action=refresh only; set uploads exactly the image given.');
2494
- if (action === 'refresh' && imagePath)
2495
- return errText('imagePath applies to action=set only; refresh re-renders on the server.');
2496
2496
  try {
2497
- const result = action === 'set'
2498
- ? await (0, helix_cli_1.setItemThumbnail)(itemId, (0, node_path_1.resolve)(imagePath), creds)
2499
- : await (0, helix_cli_1.refreshItemThumbnail)(itemId, { force, dryRun }, creds);
2500
- return text([...(0, helix_cli_1.renderItemThumbnailResult)(result), '', JSON.stringify(result, null, 2)].join('\n'));
2497
+ const result = await (0, helix_cli_1.refreshItemThumbnail)(itemId, { force, dryRun }, creds);
2498
+ return text([
2499
+ ...(0, helix_cli_1.renderItemThumbnailResult)(result),
2500
+ '',
2501
+ `Preview URL: ${result.thumbnailUrl ?? result.previousThumbnailUrl ?? '(none yet)'}`,
2502
+ CATALOG_CARD_IS_PLATFORM_ONLY,
2503
+ '',
2504
+ JSON.stringify(result, null, 2),
2505
+ ].join('\n'));
2501
2506
  }
2502
2507
  catch (err) {
2503
- return errText(`item_thumbnail ${action} failed: ${(0, helix_cli_1.describeThumbnailError)(err, itemId)}`);
2508
+ return errText(`item_thumbnail refresh failed: ${(0, helix_cli_1.describeThumbnailError)(err, itemId)}`);
2504
2509
  }
2505
2510
  });
2506
2511
  const distributionLimit = zod_1.z