wave3d-agent-sdk 0.2.11 → 0.2.13

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
@@ -21,19 +21,19 @@ Vocabulary:
21
21
  - Project: user workspace content. Reading a project is not opening/replacing live workspace.
22
22
 
23
23
  ```bash
24
- npx -y wave3d-agent-sdk@0.2.11 start
24
+ npx -y wave3d-agent-sdk@0.2.13 start
25
25
  ```
26
26
 
27
27
  After Copy to Agent, run the exact start command with MCP_TOKEN preserved as the local pairing secret. Keep it hidden:
28
28
 
29
29
  ```bash
30
- WAVE3D_MCP_TOKEN="$MCP_TOKEN" npx -y wave3d-agent-sdk@0.2.11 start
30
+ WAVE3D_MCP_TOKEN="$MCP_TOKEN" npx -y wave3d-agent-sdk@0.2.13 start
31
31
  ```
32
32
 
33
33
  Check SDK build before trusting a running SDK process:
34
34
 
35
35
  ```bash
36
- npx -y wave3d-agent-sdk@0.2.11 --version
36
+ npx -y wave3d-agent-sdk@0.2.13 --version
37
37
  ```
38
38
 
39
39
  The package bundles the WaveEngine SDK lookup corpus. No normal session needs a separate protected zip download.
@@ -43,7 +43,7 @@ The package bundles the WaveEngine SDK lookup corpus. No normal session needs a
43
43
  Wave Studio Copy to Agent defaults same-machine live MCP transport to this SDK:
44
44
 
45
45
  ```bash
46
- npx -y wave3d-agent-sdk@0.2.11 start
46
+ npx -y wave3d-agent-sdk@0.2.13 start
47
47
  ```
48
48
 
49
49
  Agents choose topology first:
@@ -58,13 +58,13 @@ Use `MCP_HTTP_GATEWAY_FALLBACK_URL` only for topology mismatch, remote/sandboxed
58
58
  For unfamiliar authoring, use the local SDK tools:
59
59
 
60
60
  ```bash
61
- npx -y wave3d-agent-sdk@0.2.11 cache search "continuous left rotation"
61
+ npx -y wave3d-agent-sdk@0.2.13 cache search "continuous left rotation"
62
62
  ```
63
63
 
64
64
  `cache refresh` without MCP arguments reinstalls the bundled SDK into `~/.wave3d/agent-cache`:
65
65
 
66
66
  ```bash
67
- npx -y wave3d-agent-sdk@0.2.11 cache refresh
67
+ npx -y wave3d-agent-sdk@0.2.13 cache refresh
68
68
  ```
69
69
 
70
70
  Old `cache refresh --mcp-url <url> --token <token>` arguments are ignored. Normal users update the npm package; no separate zip download exists.
package/dist/cli.js CHANGED
@@ -264,6 +264,8 @@ var AssetType;
264
264
  AssetType2["CubeMap"] = "CubeMap";
265
265
  AssetType2["Font"] = "Font";
266
266
  AssetType2["SerializedData"] = "SerializedData";
267
+ AssetType2["Pose"] = "Pose";
268
+ AssetType2["Animation"] = "Animation";
267
269
  AssetType2["Video"] = "Video";
268
270
  AssetType2["FxSystem"] = "FxSystem";
269
271
  AssetType2["VertexAnimation"] = "VertexAnimation";
@@ -453,15 +455,17 @@ var PROJECT_ASSET_KIND_SPECS = {
453
455
  },
454
456
  animation: {
455
457
  sourceTypes: ["raw", "project"],
456
- inlineDefinitionSupport: "none"
458
+ inlineDefinitionSupport: "none",
459
+ runtimeAssetType: AssetType.Animation
457
460
  },
458
461
  rig: {
459
462
  sourceTypes: ["raw", "project"],
460
463
  inlineDefinitionSupport: "none"
461
464
  },
462
465
  pose: {
463
- sourceTypes: ["project"],
464
- inlineDefinitionSupport: "none"
466
+ sourceTypes: ["raw", "project"],
467
+ inlineDefinitionSupport: "none",
468
+ runtimeAssetType: AssetType.Pose
465
469
  },
466
470
  vertexAnimation: {
467
471
  sourceTypes: ["raw", "project"],
@@ -527,6 +531,7 @@ var PROJECT_ASSET_ACCESSOR_BUCKETS = [
527
531
  "materials",
528
532
  "textures",
529
533
  "animations",
534
+ "poses",
530
535
  "audios",
531
536
  "instruments",
532
537
  "videos",
@@ -41604,7 +41609,7 @@ var DEFAULT_PHYSICS = {
41604
41609
  };
41605
41610
 
41606
41611
  // ../../src/lib/waveStudio/assets/contracts/waveStudioEngineAssetContracts.ts
41607
- var WAVE_STUDIO_ENGINE_ACCESSOR_BUCKET_EXTENSIONS = ["cubeMaps"];
41612
+ var WAVE_STUDIO_ENGINE_ACCESSOR_BUCKET_EXTENSIONS = ["cubeMaps", "poses"];
41608
41613
  function withAccessorBucketExtensions(buckets) {
41609
41614
  const existingBuckets = new Set(buckets);
41610
41615
  return Object.freeze([
@@ -41697,6 +41702,8 @@ var WAVE_STUDIO_ACCEPTED_USER_UPLOAD_EXTENSIONS = [
41697
41702
  "zip",
41698
41703
  "wmat",
41699
41704
  "vat.json",
41705
+ "anim.json",
41706
+ "pose.json",
41700
41707
  "splat",
41701
41708
  "ply",
41702
41709
  "spz",
@@ -41761,6 +41768,8 @@ var WAVE_STUDIO_USER_ASSET_MIME_TYPE_BY_EXTENSION = Object.freeze({
41761
41768
  zip: "application/zip",
41762
41769
  wmat: "application/vnd.wave.material+deflate",
41763
41770
  "vat.json": "application/json",
41771
+ "anim.json": "application/json",
41772
+ "pose.json": "application/json",
41764
41773
  splat: "application/octet-stream",
41765
41774
  ply: "application/octet-stream",
41766
41775
  spz: "application/octet-stream",
@@ -41771,9 +41780,10 @@ var WAVE_STUDIO_BRIDGE_ASSET_UPLOAD_EXTENSIONS_BY_KIND = Object.freeze({
41771
41780
  model: ["glb", "gltf", "obj", "stl"],
41772
41781
  fbx_model: ["fbx"],
41773
41782
  gaussianSplat: ["splat", "ply", "spz", "sog", "sog.json"],
41774
- animation: ["glb", "gltf", "obj"],
41783
+ animation: ["glb", "gltf", "obj", "anim.json"],
41775
41784
  fbx_animation: ["fbx"],
41776
41785
  vertexAnimation: ["vat.json"],
41786
+ pose: ["pose.json"],
41777
41787
  texture: ["jpg", "jpeg", "png", "webp", "gif", "bmp", "tiff", "ktx", "ktx2"],
41778
41788
  hdrEnvironment: ["hdr"],
41779
41789
  cubeMap: ["env", "dds"],
@@ -41818,6 +41828,7 @@ var WAVE_STUDIO_BRIDGE_ASSET_UPLOAD_KIND_ALIASES = Object.freeze({
41818
41828
  splat: "gaussianSplat",
41819
41829
  spz: "gaussianSplat",
41820
41830
  anim: "animation",
41831
+ animjson: "animation",
41821
41832
  animationclip: "animation",
41822
41833
  fbxanim: "fbx_animation",
41823
41834
  fbxanimation: "fbx_animation",
@@ -41826,6 +41837,9 @@ var WAVE_STUDIO_BRIDGE_ASSET_UPLOAD_KIND_ALIASES = Object.freeze({
41826
41837
  vatjson: "vertexAnimation",
41827
41838
  vertexanimation: "vertexAnimation",
41828
41839
  vertex_animation: "vertexAnimation",
41840
+ pose: "pose",
41841
+ posejson: "pose",
41842
+ poses: "pose",
41829
41843
  hdri: "hdrEnvironment",
41830
41844
  hdrenvironment: "hdrEnvironment",
41831
41845
  hdr: "hdrEnvironment",
@@ -41879,6 +41893,8 @@ function getWaveStudioBridgeAssetUploadKindHelpText() {
41879
41893
  function getWaveStudioUserAssetUploadExtension(filename) {
41880
41894
  const normalizedFilename = String(filename || "").trim().toLowerCase();
41881
41895
  if (normalizedFilename.endsWith(".vat.json")) return "vat.json";
41896
+ if (normalizedFilename.endsWith(".anim.json")) return "anim.json";
41897
+ if (normalizedFilename.endsWith(".pose.json")) return "pose.json";
41882
41898
  if (normalizedFilename.endsWith(".sog.json")) return "sog.json";
41883
41899
  return normalizedFilename.split(".").pop() || "";
41884
41900
  }
@@ -41983,7 +41999,7 @@ var WAVE_STUDIO_PRIMARY_ASSET_BUCKET_SPECS = Object.freeze([
41983
41999
  assetTypes: ["animation", "vertexAnimation"],
41984
42000
  label: "Animation",
41985
42001
  pluralLabel: "Animations",
41986
- defaultExtension: ".glb",
42002
+ defaultExtension: ".anim.json",
41987
42003
  baseCategoryAliases: [
41988
42004
  "animations",
41989
42005
  "animation",
@@ -41994,10 +42010,22 @@ var WAVE_STUDIO_PRIMARY_ASSET_BUCKET_SPECS = Object.freeze([
41994
42010
  "vat"
41995
42011
  ],
41996
42012
  pathFolderAliases: ["animations"],
41997
- pathExtensions: ["vat.json"],
42013
+ pathExtensions: ["anim.json", "vat.json", "glb", "gltf", "fbx"],
41998
42014
  assetManagerAlias: "animationNames",
41999
42015
  monaco: { interfaceName: "AnimationNames", propertyName: "animationNames" }
42000
42016
  },
42017
+ {
42018
+ bucket: "poses",
42019
+ assetTypes: ["pose"],
42020
+ label: "Pose",
42021
+ pluralLabel: "Poses",
42022
+ defaultExtension: ".pose.json",
42023
+ baseCategoryAliases: ["poses", "pose"],
42024
+ pathFolderAliases: ["poses"],
42025
+ pathExtensions: ["pose.json"],
42026
+ assetManagerAlias: "poseNames",
42027
+ monaco: { interfaceName: "PoseNames", propertyName: "poseNames" }
42028
+ },
42001
42029
  {
42002
42030
  bucket: "audios",
42003
42031
  assetTypes: ["audio"],
@@ -42233,6 +42261,7 @@ var WAVE_STUDIO_USER_ASSET_UPLOAD_KIND_TO_TYPE = Object.freeze({
42233
42261
  animation: "animation",
42234
42262
  fbx_animation: "animation",
42235
42263
  vertexAnimation: "vertexAnimation",
42264
+ pose: "pose",
42236
42265
  texture: "texture",
42237
42266
  hdrEnvironment: "hdrEnvironment",
42238
42267
  cubeMap: "cubeMap",
@@ -42267,6 +42296,9 @@ var WAVE_STUDIO_ASSET_TYPE_ALIASES = Object.freeze({
42267
42296
  material_zip: "material",
42268
42297
  fbxanimation: "animation",
42269
42298
  fbx_animation: "animation",
42299
+ animjson: "animation",
42300
+ posejson: "pose",
42301
+ poses: "pose",
42270
42302
  vat: "vertexAnimation",
42271
42303
  vatjson: "vertexAnimation",
42272
42304
  vertexanimation: "vertexAnimation",
@@ -42488,8 +42520,8 @@ function normalizeWaveGenieAssetUploadRequest(request) {
42488
42520
 
42489
42521
  // ../../src/lib/waveStudio/aiAssist/bridge/localAgentSdkContract.ts
42490
42522
  var WAVE3D_AGENT_SDK_PACKAGE_NAME = "wave3d-agent-sdk";
42491
- var WAVE3D_AGENT_SDK_REQUIRED_VERSION = "0.2.11";
42492
- var WAVE3D_AGENT_SDK_REQUIRED_BUILD = "agent-sdk-20260622.1";
42523
+ var WAVE3D_AGENT_SDK_REQUIRED_VERSION = "0.2.13";
42524
+ var WAVE3D_AGENT_SDK_REQUIRED_BUILD = "agent-sdk-20260625.1";
42493
42525
  var WAVE3D_AGENT_SDK_PACKAGE_SPEC = `${WAVE3D_AGENT_SDK_PACKAGE_NAME}@${WAVE3D_AGENT_SDK_REQUIRED_VERSION}`;
42494
42526
  var WAVE3D_AGENT_SDK_START_COMMAND = `npx -y ${WAVE3D_AGENT_SDK_PACKAGE_SPEC} start`;
42495
42527
  var WAVE3D_AGENT_SDK_TOKEN_ENV_VAR = "WAVE3D_MCP_TOKEN";
@@ -44118,7 +44150,7 @@ var WAVE_AUTHORING_CORE_RULES = {
44118
44150
  terrainGroundRouting: "`myScene.terrain` is the terrain controller/recipe surface for world terrain state: heightfield sculpting, mountains, rivers, terrain-wide materials, splat paint, water, queries, and world/streaming persistence. `myScene.ground` is the live `waveTerrainTile` under the primary render camera: use it only for tile-local entity behavior, visual overlays, transform/tooling, sensing/interactable callbacks, and local inspection. Tile-local visual material/color edits are overlays and should win over terrain-wide material stamping for that tile; terrain-wide material remains the base for tiles with no local overlay.",
44119
44151
  argumentAssembly: "Assemble arguments deliberately: asset refs, bare globals, option objects, callbacks, units, and terminal verbs.",
44120
44152
  assetResolution: "When passing an existing asset as an argument, resolve the exact typed asset ref from current code or the asset catalog before writing it; never invent asset map keys. When creating/configuring an asset handle, choose the intent-owned Wave facade first.",
44121
- sourceOwnership: "For modular Studio projects, make each hot-reloadable file own the objects, callbacks, promoted parts, and visual mutations it wants to iterate on. Keep helpers pure or parameterized. For intentional live entity reuse across source-root modules, use `waveStudio.exportEntity(name, entity)` in the owner and `waveStudio.importEntity<T>(name)` in importers. Studio builds a dependency graph across runnable source roots plus `main.ts`: exporters run before importers; if `main.ts` imports an exported entity, that owner source runs before `main.ts`; importer overlay files run after the exporter/main baseline. Names must be static string literals, unique, and acyclic or run/hot reload stops before execution.",
44153
+ sourceOwnership: "For modular Studio projects, make each hot-reloadable file own the objects, callbacks, promoted/adopted parts, and visual mutations it wants to iterate on. Keep helpers pure or parameterized. For intentional live entity reuse across source-root modules, use `waveStudio.exportEntity(name, entity)` in the owner and `waveStudio.importEntity<T>(name)` in importers. Studio builds a dependency graph across runnable source roots plus `main.ts`: exporters run before importers; if `main.ts` imports an exported entity, that owner source runs before `main.ts`; importer overlay files run after the exporter/main baseline. Names must be static string literals, unique, and acyclic or run/hot reload stops before execution.",
44122
44154
  typeScriptGlue: "Use concise TypeScript glue around WaveEngine calls, but avoid manual runtime loops, large state machines, or engine-internal plumbing when public authoring APIs express the intent.",
44123
44155
  syncUserCode: "Keep authored scene code synchronous by default. Do not use async/await, Promises, async callbacks, or top-level asynchronous user code unless the user explicitly and strongly asks for asynchronous/network/permission/worker behavior and understands the Wave Studio online coding environment; prefer WaveEngine synchronous facades and Studio/bootstrap-managed loading.",
44124
44156
  hotReloadCallbackSafety: "Hot-reload safety is a hard authoring rule. Do not write raw unmanaged callback roots in authored Studio code: no setInterval/setTimeout/setImmediate/requestAnimationFrame/requestIdleCallback/queueMicrotask, addEventListener/removeEventListener/requestVideoFrameCallback/watchPosition, Promise callback chains (.then/.catch/.finally) or new Promise(...), raw observers/workers/sockets/channels, eventBus/myScene raw subscriptions, or raw event-handler property assignments such as .onclick = or .onmessage =. Use Wave-owned callbacks, Animate DSL, entity lifecycle/tick/state APIs, contact/input/Director APIs, or other scoped Wave APIs so hot reload can unregister old closures."
@@ -44485,7 +44517,7 @@ var WAVE_MCP_CODING_GUARDRAIL = [
44485
44517
  "7a. Use `list_wave_explorer_assets` when you need uploaded asset explorer metadata such as path, URL, size, or display/ref name for rename/delete/library work. It is not a fallback for built-in/public code refs and may be empty while `find_wave_assets_by_category` has many usable refs.",
44486
44518
  '8. Wave Studio automations: `project.assetrefs.ts`, `project.scene.ts`, `project.scenes.ts`, and `project.execution.ts` are automatically managed by Wave Studio and are MCP read-only for agents. `bootstrap.ts` / scene `*/bootstrap.ts` is normally managed too. Edit bootstrap only when you can confidently pass `managedFileEditReason` as one of: `world_streaming_or_terrain_provider` (including Google Maps 3D tiles), `render_profile_or_runtime_backend`, `media_consent_or_capture_plan`, `external_ai_or_tts_backend`, `scene_envelope_or_template_baseline`, `baseline_setup_before_user_main`, or `stale_api_update_to_latest`. Never edit bootstrap for `asset_manifest_or_loader`, `instrument_registry`, `scene_registry`, or `execution_manifest`; Studio owns those. Do not edit managed files to register/preload assets, wire scenes, execution order, or force bootstrap sync; write user-authored scene code in `main.ts` or feature modules with bare refs like `models.Robot` or `textures.Grass`, then let Studio sync bootstrap/asset/scene/execution wiring. Hot reload is the normal way to see code changes. Static VFS/package/asset-surface changes can be detected from file/package diffs, so Studio may upgrade the reload tier internally (`patchMain`, `preserveScene`, or hard `rebuildScene`). Runtime-authored UI state changes cannot be inferred from files; when UI changes bootstrap/world-provider/runtime-envelope state, call `waveStudio.reloadPreview({ reason, invalidates: ["world-provider"] })` with the narrowest valid invalidation: `bootstrap`, `world-provider`, or `runtime-envelope`. Only the hard rebuild tier performs a full bundled scene run.',
44487
44519
  "9. Use `waveStudio.*` only for Studio host services. Check `waveStudio.capabilities.assetSave` before save/bake calls.",
44488
- '10. Make deterministic file edits through the simplest fitting tool. Default to forgiving `edit_wave_file`: oldText infers exact replace, startLine/endLine infers line replace, `edits:[{startLine,endLine,text}]` or `edits:[{rangeOffset,rangeLength,text}]` performs one-file multi-edit, and path+text/content with no oldText infers whole-file replace. It is the primary simple edit tool and can omit `baseHash`; Studio resolves the latest hosted VFS mirror contentHash and still applies browser-side stale-write checks. Prefer canonical fields: `path` for file path, `text` for line/whole-file content, and `newText` for text replacement; `filePath`, `replacement`, and `content` are accepted as aliases where useful. Use `apply_wave_patch({ operations: [...] })` for multi-file edits, grouped cross-file edits, unified diffs, or full rewrites; a single bare operation is tolerated for mistake recovery but operations:[...] is preferred. Use `create_wave_file`, `rename_wave_file`, and `delete_wave_file` to split projects into `.ts` modules such as `/actors/player.ts`, `/systems/obstacles.ts`, and `/levels/obby.ts` instead of growing one giant `main.ts`; newly created `.ts/.tsx` files are standalone runnable source roots by default, so top-level scene code in them runs on Run/hot reload. Pass `runnable:false` only for pure helper modules that should not execute on their own. These same VFS tools also create `.html` sketch files for diagrams/charts/docs, with Mermaid rendered from `<div class="mermaid">...</div>` when the HTML file is active in the editor/coding pane; HTML sketches must never replace the live engine preview iframe. Scene-root modules and their owned helpers run inside the Studio authoring context, but helpers should stay pure or parameterized. Studio hot reload targets the active/open edited file when safe: `/main.ts` reloads the whole main graph, scene-root modules reload that root, and bootstrap/scene registry/assets/network/ambiguous helper surfaces escalate. Standalone `hot_reload_wave_preview` has no target path and follows the currently open/active Studio editor file in multi-file projects. A feature file should own the objects, callbacks, promoted GLB parts, and appearance mutations it wants to iterate on. For intentional live entity reuse across modules, the owner calls `waveStudio.exportEntity("Name", entity)` and importers call `waveStudio.importEntity<T>("Name")`; do not pass live entities through shared helper exports. Use exact VFS paths from `list_wave_files`; read target file before writing. `contentHash` is a cooperative stale-write fingerprint, not a security boundary. For advanced compact `apply_wave_patch` operations, pass the latest full-file `contentHash` as `baseHash`: one `lineEdits`, one `textEdits`, one strict `searchReplace`, or one `unifiedDiff`. Do not send multiple compact ops for the same file with the same baseHash; the first edit changes the file hash and later compact ops skip as stale. Scoped `read_wave_file` line ranges do not change the `textEdits` offset base; they do pair naturally with line-based edits. Existing-file `writeFile` requires `baseHash` unless `forceOverwrite: true`; force overwrite is only for intentional stale overwrites.',
44520
+ '10. Make deterministic file edits through the simplest fitting tool. Default to forgiving `edit_wave_file`: oldText infers exact replace, startLine/endLine infers line replace, `edits:[{startLine,endLine,text}]` or `edits:[{rangeOffset,rangeLength,text}]` performs one-file multi-edit, and path+text/content with no oldText infers whole-file replace. It is the primary simple edit tool and can omit `baseHash`; Studio resolves the latest hosted VFS mirror contentHash and still applies browser-side stale-write checks. Prefer canonical fields: `path` for file path, `text` for line/whole-file content, and `newText` for text replacement; `filePath`, `replacement`, and `content` are accepted as aliases where useful. Use `apply_wave_patch({ operations: [...] })` for multi-file edits, grouped cross-file edits, unified diffs, or full rewrites; a single bare operation is tolerated for mistake recovery but operations:[...] is preferred. Use `create_wave_file`, `rename_wave_file`, and `delete_wave_file` to split projects into `.ts` modules such as `/actors/player.ts`, `/systems/obstacles.ts`, and `/levels/obby.ts` instead of growing one giant `main.ts`; newly created `.ts/.tsx` files are standalone runnable source roots by default, so top-level scene code in them runs on Run/hot reload. Pass `runnable:false` only for pure helper modules that should not execute on their own. These same VFS tools also create `.html` sketch files for diagrams/charts/docs, with Mermaid rendered from `<div class="mermaid">...</div>` when the HTML file is active in the editor/coding pane; HTML sketches must never replace the live engine preview iframe. Scene-root modules and their owned helpers run inside the Studio authoring context, but helpers should stay pure or parameterized. Studio hot reload targets the active/open edited file when safe: `/main.ts` reloads the whole main graph, scene-root modules reload that root, and bootstrap/scene registry/assets/network/ambiguous helper surfaces escalate. Standalone `hot_reload_wave_preview` has no target path and follows the currently open/active Studio editor file in multi-file projects. A feature file should own the objects, callbacks, promoted/adopted GLB parts, and appearance mutations it wants to iterate on. For intentional live entity reuse across modules, the owner calls `waveStudio.exportEntity("Name", entity)` and importers call `waveStudio.importEntity<T>("Name")`; do not pass live entities through shared helper exports. Use exact VFS paths from `list_wave_files`; read target file before writing. `contentHash` is a cooperative stale-write fingerprint, not a security boundary. For advanced compact `apply_wave_patch` operations, pass the latest full-file `contentHash` as `baseHash`: one `lineEdits`, one `textEdits`, one strict `searchReplace`, or one `unifiedDiff`. Do not send multiple compact ops for the same file with the same baseHash; the first edit changes the file hash and later compact ops skip as stale. Scoped `read_wave_file` line ranges do not change the `textEdits` offset base; they do pair naturally with line-based edits. Existing-file `writeFile` requires `baseHash` unless `forceOverwrite: true`; force overwrite is only for intentional stale overwrites.',
44489
44521
  "10a. Always inspect `changedFiles`, `changedPaths`, `partial`, `skippedOperations`, `hotReloadRequested`, `hotReloadSkippedReason`, and `runtimeVerification`; treat skipped operations, no-content-change skips, unscheduled hot reloads, runtime verification errors, and `runtimeVerification.diagnostics.editorErrorCount > 0` as work still needing attention.",
44490
44522
  '11. After the final code edit, default to hot reload. Prefer `awaitHotReload: true` on the edit tool when you want one MCP response with edit result + hot reload + bounded diagnostics. `requestHotReload:true` also waits for diagnostics by default unless paired with `awaitHotReload:false`. Standalone `run_wave_preview` / `hot_reload_wave_preview` also wait by default and return `runtimeVerification`; set `awaitRuntimeResult:false` only for intentional fire-and-poll. Caveat: standalone `hot_reload_wave_preview` mirrors the toolbar button and reloads the currently open/active TypeScript file in multi-file projects; it does not take a target path or reload every user-created .ts module. That hot-reload request may internally upgrade from `patchMain` to `preserveScene` or hard `rebuildScene` when assets/bootstrap/scene surface changed; do not manually force bootstrap sync. Runtime-authored UI that changes bootstrap/world-provider/runtime-envelope state must call `waveStudio.reloadPreview({ reason, invalidates: ["world-provider"] })` because Studio cannot infer that from static file diffs. Use `run_wave_preview` only when diagnostics show no successful preview yet (`hasRunSucceeded: false`), the user explicitly asks for a full run/restart, or hot reload/polling fails and a full restart is the last resort. `pause_wave_preview` and `resume_wave_preview` are direct preview controls mirroring the toolbar pause/resume buttons.',
44491
44523
  '12. After run/hot reload, use returned `runtimeVerification` when present; otherwise call `get_wave_runtime_diagnostics` repeatedly until `runtimeBusy` is false and `lastRuntimeOutcome` is `success` or `error`. Use `previewExecutionPhase` to distinguish Studio preparing work from the preview iframe executing it. `isRunning` is only the Studio scheduling flag, not the final runtime completion gate. If the edit/runtime tool returned `requestedAt` or `runtimeActionRequestedAt`, ignore diagnostics whose `lastRuntimeOutcomeAt` is older than that timestamp. Treat `latestError` as current only when `lastRuntimeOutcome` is `error`; older error lines can remain in returned logs as history. Treat `editorErrorCount > 0` as blocking Monaco/linter/compile failure and read `editorDiagnostics` before claiming success, even when `lastRuntimeOutcome` is `success`. If `lastRuntimeOutcome` is `success` and `editorErrorCount` is 0, verify visually with `capture_wave_screenshot({ resolution: "L" })` or structurally with `get_wave_runtime_entity_snapshot({ variableName, filePath? })` instead of declaring failure from old log text. Same-machine screenshots usually return `localPath`; hosted screenshots return exact field `dataBase64`, not `imageBase64`.',
@@ -44596,7 +44628,7 @@ var WAVE_MCP_FILE_CONTEXT_GUIDE = [
44596
44628
  "- Use `share_wave_project()` to create a 30-day share link for the current live project through the same Share Project menu pipeline, then return the `url` to the user.",
44597
44629
  "- Use `list_wave_explorer_assets` to inspect the uploaded asset explorer library with paths, URLs, display names, and ref keys. `rename_wave_asset` changes the display/ref name only; it does not move the stored blob path.",
44598
44630
  "- `bootstrap.ts` / scene `*/bootstrap.ts`: Studio-managed boot/config code that creates or loads the scene. Agents may read it for context. Agents may edit it only with a valid `managedFileEditReason` for world streaming/terrain provider (including Google Maps 3D tiles), render/runtime backend, media consent/capture, external AI/TTS backend, scene-envelope/template baseline, baseline setup before main.ts, or stale bootstrap API update to latest. Asset reference parsing accepts both `ASSET_WAREHOUSE.models.X` and bare `models.X`; prefer bare aliases in user-authored main/module code and never edit bootstrap to register assets.",
44599
- "- Scene-root modules and their owned helpers run inside the Studio authoring context. Keep shared helpers pure or parameterized; put live object ownership, callbacks, promoted parts, and appearance mutations in the feature file expected to hot reload. For intentional live entity reuse across scene-root modules, use `waveStudio.exportEntity(name, entity)` and `waveStudio.importEntity<T>(name)`. Studio builds a deterministic source-root graph: exporters run before importers, exporter roots run before `main.ts` when main imports them, importer overlays run after the exporter/main baseline, and duplicate/dynamic/cyclic names stop run/hot reload before execution."
44631
+ "- Scene-root modules and their owned helpers run inside the Studio authoring context. Keep shared helpers pure or parameterized; put live object ownership, callbacks, promoted/adopted parts, and appearance mutations in the feature file expected to hot reload. For intentional live entity reuse across scene-root modules, use `waveStudio.exportEntity(name, entity)` and `waveStudio.importEntity<T>(name)`. Studio builds a deterministic source-root graph: exporters run before importers, exporter roots run before `main.ts` when main imports them, importer overlays run after the exporter/main baseline, and duplicate/dynamic/cyclic names stop run/hot reload before execution."
44600
44632
  ].join("\n");
44601
44633
 
44602
44634
  // ../../src/lib/waveStudio/aiAssist/bridge/hosted/mcpResources/studioSkillMap.ts
@@ -44668,7 +44700,7 @@ var WAVE_MCP_STUDIO_TOOL_GUIDE = [
44668
44700
  "- `waveStudio.exportEntity(name, entity)`: declare a live entity owned by the current source module for intentional modular reuse. `name` must be a static string literal and unique across runnable roots.",
44669
44701
  "- `waveStudio.importEntity<T>(name)`: import an exported live entity into the current source module; Studio restores the exporter baseline and prunes/replays importer callbacks/overlays during source hot reload. Studio orders source roots by export/import dependencies: exporter before importer; exporter before `main.ts` if main imports it; overlay importers after exporter/main baseline. Missing, duplicate, dynamic, or cyclic entity names stop run/hot reload before execution.",
44670
44702
  '- MCP command result rule: poll `get_wave_command_result({ requestId })` only when the previous tool response includes `status:"pending"` plus `requestId`. HTTP Gateway browser-backed tools may return pending and need that poll. WaveEngine Agent SDK browser-backed tools wait directly and return final results; its `get_wave_command_result` is a catalog-parity no-op unless a pending result was explicitly returned.',
44671
- "- MCP preview tools: `hot_reload_wave_preview` (alias `hotreload_wave_preview`) is the default standalone way to view code changes in an already-running preview; `run_wave_preview` (alias `run_project`) is for first start when diagnostics show `hasRunSucceeded: false`, explicit full restart requests, or last-resort recovery after hot reload/polling fails; `pause_wave_preview` / `resume_wave_preview` mirror the toolbar pause/resume buttons. All require write pairing because they mutate live Studio runtime state. Runtime-triggering tools wait by default and return same-call `runtimeVerification`; set `awaitRuntimeResult:false` only when intentionally fire-and-polling. `hot_reload_wave_preview` mirrors the Wave Studio toolbar button and has no path argument: in multi-file VFS projects it reloads the currently open/active TypeScript file when safe, not every user-created .ts module. For a specific module, make that file active in Studio before calling the standalone hot-reload tool, or use the edit tool `awaitHotReload:true` immediately after the final edit. Main entries reload the main graph, source-root modules reload that root, and bootstrap/scene registry/assets/network/ambiguous helper surfaces escalate. Agents should organize feature-owned objects, callbacks, promoted parts, and appearance mutations into the file they expect to hot reload; use `waveStudio.exportEntity`/`waveStudio.importEntity` only when a live entity intentionally crosses module boundaries. Hot reload may internally choose `patchSource`, `patchMain`, `preserveScene`, or hard `rebuildScene`; agents should inspect returned `runtimeVerification` or poll diagnostics instead of manually guessing the tier. Poll `get_wave_runtime_diagnostics` only when `runtimeVerification` is absent, timed out, or ambiguous; require `editorErrorCount === 0`, then choose one relevant proof tool if needed: screenshot, runtime entity snapshot, markers, or performance snapshot."
44703
+ "- MCP preview tools: `hot_reload_wave_preview` (alias `hotreload_wave_preview`) is the default standalone way to view code changes in an already-running preview; `run_wave_preview` (alias `run_project`) is for first start when diagnostics show `hasRunSucceeded: false`, explicit full restart requests, or last-resort recovery after hot reload/polling fails; `pause_wave_preview` / `resume_wave_preview` mirror the toolbar pause/resume buttons. All require write pairing because they mutate live Studio runtime state. Runtime-triggering tools wait by default and return same-call `runtimeVerification`; set `awaitRuntimeResult:false` only when intentionally fire-and-polling. `hot_reload_wave_preview` mirrors the Wave Studio toolbar button and has no path argument: in multi-file VFS projects it reloads the currently open/active TypeScript file when safe, not every user-created .ts module. For a specific module, make that file active in Studio before calling the standalone hot-reload tool, or use the edit tool `awaitHotReload:true` immediately after the final edit. Main entries reload the main graph, source-root modules reload that root, and bootstrap/scene registry/assets/network/ambiguous helper surfaces escalate. Agents should organize feature-owned objects, callbacks, promoted/adopted parts, and appearance mutations into the file they expect to hot reload; use `waveStudio.exportEntity`/`waveStudio.importEntity` only when a live entity intentionally crosses module boundaries. Hot reload may internally choose `patchSource`, `patchMain`, `preserveScene`, or hard `rebuildScene`; agents should inspect returned `runtimeVerification` or poll diagnostics instead of manually guessing the tier. Poll `get_wave_runtime_diagnostics` only when `runtimeVerification` is absent, timed out, or ambiguous; require `editorErrorCount === 0`, then choose one relevant proof tool if needed: screenshot, runtime entity snapshot, markers, or performance snapshot."
44672
44704
  ].join("\n");
44673
44705
 
44674
44706
  // ../../src/lib/waveStudio/aiAssist/bridge/hosted/mcpResources/toolCatalog.ts
@@ -3,6 +3,6 @@
3
3
  Bundled public-safe WaveEngine SDK lookup cache for wave3d-agent-sdk.
4
4
  Generated from sanitized public API/skill corpus during package build.
5
5
 
6
- cacheKey: 2026-06-22.1.X6HpjYvUWi7f4c6r-zxQKnKkNT9dyiYE
7
- bundleHash: X6HpjYvUWi7f4c6r-zxQKnKkNT9dyiYE
8
- zip: wave-engine-sdk-2026-06-22.1.X6HpjYvUWi7f4c6r-zxQKnKkNT9dyiYE.zip
6
+ cacheKey: 2026-06-24.4.TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt
7
+ bundleHash: TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt
8
+ zip: wave-engine-sdk-2026-06-24.4.TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt.zip
@@ -1,21 +1,21 @@
1
1
  {
2
- "version": "2026-06-22.1.X6HpjYvUWi7f4c6r-zxQKnKkNT9dyiYE",
3
- "formatVersion": "2026-06-22.1",
4
- "cacheKey": "2026-06-22.1.X6HpjYvUWi7f4c6r-zxQKnKkNT9dyiYE",
5
- "bundleFileName": "wave-engine-sdk-2026-06-22.1.X6HpjYvUWi7f4c6r-zxQKnKkNT9dyiYE.zip",
6
- "bundleHash": "X6HpjYvUWi7f4c6r-zxQKnKkNT9dyiYE",
2
+ "version": "2026-06-24.4.TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt",
3
+ "formatVersion": "2026-06-24.4",
4
+ "cacheKey": "2026-06-24.4.TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt",
5
+ "bundleFileName": "wave-engine-sdk-2026-06-24.4.TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt.zip",
6
+ "bundleHash": "TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt",
7
7
  "generatedAt": "2026-06-06T00:00:00.000Z",
8
8
  "sourceVersions": {
9
9
  "onboarding": {
10
10
  "promptVersion": "2026-06-22.1",
11
- "promptHash": "auIbrVF6qMlzkzY_hqUZcSic2zefX74_"
11
+ "promptHash": "E4XHCk4k3hMfpiXt08lgwPS-eGhFPAO5"
12
12
  },
13
13
  "apiHandbook": {
14
14
  "version": "1",
15
- "contentHash": "84c2e6d2792f159c"
15
+ "contentHash": "dbf93ea87d2c3219"
16
16
  },
17
- "waveSkillCorpusHash": "COqfxbebzaCbjainu_umCA4CRE47_fHt",
18
- "sdkLookupCorpusHash": "jdg3gw4_rBQiSt-EHDrgCpT3b54hbA7y"
17
+ "waveSkillCorpusHash": "MzMqj1iHZduYT7888Dn-2GeklAp3LCp5",
18
+ "sdkLookupCorpusHash": "L0OTq_j_oYHTpZLJj10LkheltWHlRAtT"
19
19
  },
20
20
  "cacheContract": {
21
21
  "llmContextCacheOnly": [
@@ -35,15 +35,15 @@
35
35
  "searchDocuments"
36
36
  ],
37
37
  "rule": "Priority 1 always-on sections must stay in LLM chat/system context. The WaveEngine SDK local cache is public-safe retrieval data, never the only memory for core policy.",
38
- "defaultRefreshCommand": "npx -y wave3d-agent-sdk@0.2.11 cache refresh",
38
+ "defaultRefreshCommand": "npx -y wave3d-agent-sdk@0.2.13 cache refresh",
39
39
  "refreshRule": "When using WaveEngine SDK local cache, compare cacheKey, bundleHash, and sourceVersions before trusting local lookup. If any value differs, update the SDK package or reinstall its bundled SDK cache and rebuild local indexes. Do not fetch a remote SDK zip.",
40
40
  "onlineFallback": "HTTP Gateway does not provide cloud API lookup. If local Node/npm or cache is refused/unavailable, use only concrete Studio operations and already-known code; repair the local WaveEngine SDK before unfamiliar API authoring."
41
41
  },
42
42
  "corpus": {
43
43
  "skillCount": 67,
44
- "apiEntryCount": 4201,
45
- "apiMethodGroupCount": 4483,
46
- "apiInheritanceCount": 735
44
+ "apiEntryCount": 4213,
45
+ "apiMethodGroupCount": 4484,
46
+ "apiInheritanceCount": 737
47
47
  },
48
48
  "files": [
49
49
  {
@@ -51,14 +51,14 @@
51
51
  "mediaType": "application/json",
52
52
  "role": "lookup-guide",
53
53
  "bytes": 1311,
54
- "hash": "9l-7lHnsaVNcHqKl3Y1i_OrYra869ijF"
54
+ "hash": "L0qhzeSHHbkMCpjcrhyTKMgFQkaiYnHQ"
55
55
  },
56
56
  {
57
57
  "path": "skills/wave-skills.jsonl",
58
58
  "mediaType": "application/jsonl",
59
59
  "role": "skill-corpus",
60
- "bytes": 537625,
61
- "hash": "BmIN7llcGe9jL3M7okesN7G7gzPmlbs_"
60
+ "bytes": 557391,
61
+ "hash": "pyZjnxdHIaDi-qU_rIYiZFuLVmm3HiNw"
62
62
  },
63
63
  {
64
64
  "path": "skills/foundations.jsonl",
@@ -71,43 +71,43 @@
71
71
  "path": "skills/families.json",
72
72
  "mediaType": "application/json",
73
73
  "role": "skill-corpus",
74
- "bytes": 47269,
75
- "hash": "zBdxYL9IvwI0GZ3UETEASd2FxcryfvYS"
74
+ "bytes": 48608,
75
+ "hash": "SK3ema2SjiiywXu4qS7F4xTICmVM5Qxs"
76
76
  },
77
77
  {
78
78
  "path": "api/entries.jsonl",
79
79
  "mediaType": "application/jsonl",
80
80
  "role": "api-corpus",
81
- "bytes": 4170742,
82
- "hash": "0xJxPVL6Bc4iDpNeR4rU8NEzyAP7NL42"
81
+ "bytes": 4189408,
82
+ "hash": "naVWkuJnhTuU7Jj8IEnmzjYww_mkITuH"
83
83
  },
84
84
  {
85
85
  "path": "api/method-groups.jsonl",
86
86
  "mediaType": "application/jsonl",
87
87
  "role": "api-corpus",
88
- "bytes": 1400900,
89
- "hash": "vC1zn6JbYLyjXj7T8u0JhXjidr6TCE5-"
88
+ "bytes": 1403019,
89
+ "hash": "EUzMqkNgQi1OBZaExr6AVkiM76ziJ_b1"
90
90
  },
91
91
  {
92
92
  "path": "api/inheritance.jsonl",
93
93
  "mediaType": "application/jsonl",
94
94
  "role": "api-corpus",
95
- "bytes": 76701,
96
- "hash": "0F5GYp7YBA41jrmjazV4BkYld7eAImnE"
95
+ "bytes": 76921,
96
+ "hash": "jpqGmCvDfkvtKH5ZqVpXxtoYCUiKIXeb"
97
97
  },
98
98
  {
99
99
  "path": "api/index-metadata.json",
100
100
  "mediaType": "application/json",
101
101
  "role": "api-corpus",
102
102
  "bytes": 219,
103
- "hash": "SVmD8KOnyXtsKQOWwu_soG0Es3XaetTe"
103
+ "hash": "RXyWtU18gn0noeJ51_y5QB4-YQpWto4S"
104
104
  },
105
105
  {
106
106
  "path": "search/search-documents.jsonl",
107
107
  "mediaType": "application/jsonl",
108
108
  "role": "search-index",
109
- "bytes": 3923196,
110
- "hash": "5gQ98L5DJWgPxShey6YsUTQ9nQRRJPX8"
109
+ "bytes": 3946756,
110
+ "hash": "q3DhrkSRPPEb9VRKosy0Fg-fsZ4tXr9E"
111
111
  },
112
112
  {
113
113
  "path": "README.md",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wave3d-agent-sdk",
3
- "version": "0.2.11",
3
+ "version": "0.2.13",
4
4
  "description": "WaveEngine Agent SDK for same-machine Wave Studio MCP plus bundled WaveEngine lookup.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",