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 +6 -6
- package/dist/cli.js +45 -13
- package/dist/sdk/README.md +3 -3
- package/dist/sdk/manifest.json +27 -27
- package/dist/sdk/wave-engine-sdk-2026-06-24.4.TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt.zip +0 -0
- package/package.json +1 -1
- package/dist/sdk/wave-engine-sdk-2026-06-22.1.X6HpjYvUWi7f4c6r-zxQKnKkNT9dyiYE.zip +0 -0
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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: ".
|
|
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.
|
|
42492
|
-
var WAVE3D_AGENT_SDK_REQUIRED_BUILD = "agent-sdk-
|
|
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
|
package/dist/sdk/README.md
CHANGED
|
@@ -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-
|
|
7
|
-
bundleHash:
|
|
8
|
-
zip: wave-engine-sdk-2026-06-
|
|
6
|
+
cacheKey: 2026-06-24.4.TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt
|
|
7
|
+
bundleHash: TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt
|
|
8
|
+
zip: wave-engine-sdk-2026-06-24.4.TfG1gvbOLSyom3MfrRMlDZCm3Rji9aGt.zip
|
package/dist/sdk/manifest.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2026-06-
|
|
3
|
-
"formatVersion": "2026-06-
|
|
4
|
-
"cacheKey": "2026-06-
|
|
5
|
-
"bundleFileName": "wave-engine-sdk-2026-06-
|
|
6
|
-
"bundleHash": "
|
|
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": "
|
|
11
|
+
"promptHash": "E4XHCk4k3hMfpiXt08lgwPS-eGhFPAO5"
|
|
12
12
|
},
|
|
13
13
|
"apiHandbook": {
|
|
14
14
|
"version": "1",
|
|
15
|
-
"contentHash": "
|
|
15
|
+
"contentHash": "dbf93ea87d2c3219"
|
|
16
16
|
},
|
|
17
|
-
"waveSkillCorpusHash": "
|
|
18
|
-
"sdkLookupCorpusHash": "
|
|
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.
|
|
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":
|
|
45
|
-
"apiMethodGroupCount":
|
|
46
|
-
"apiInheritanceCount":
|
|
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": "
|
|
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":
|
|
61
|
-
"hash": "
|
|
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":
|
|
75
|
-
"hash": "
|
|
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":
|
|
82
|
-
"hash": "
|
|
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":
|
|
89
|
-
"hash": "
|
|
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":
|
|
96
|
-
"hash": "
|
|
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": "
|
|
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":
|
|
110
|
-
"hash": "
|
|
109
|
+
"bytes": 3946756,
|
|
110
|
+
"hash": "q3DhrkSRPPEb9VRKosy0Fg-fsZ4tXr9E"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"path": "README.md",
|
|
Binary file
|
package/package.json
CHANGED