@alpsckr/unitycli 0.4.4 → 0.5.0
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/contracts/command-contract.json +591 -591
- package/contracts/package-files.json +367 -367
- package/contracts/stable-session/direct-call-semantics.json +3 -3
- package/contracts/stable-session/request-digest-v1-golden.json +2 -2
- package/contracts/tool-completion-contract.json +322 -322
- package/dist/bridge/domains/animation.js +37 -37
- package/dist/bridge/domains/animation.js.map +1 -1
- package/dist/bridge/domains/asset.js +15 -16
- package/dist/bridge/domains/asset.js.map +1 -1
- package/dist/bridge/domains/build.js +13 -13
- package/dist/bridge/domains/build.js.map +1 -1
- package/dist/bridge/domains/camera.js +7 -7
- package/dist/bridge/domains/camera.js.map +1 -1
- package/dist/bridge/domains/catalog-editor.d.ts +2 -0
- package/dist/bridge/domains/{project-tool.js → catalog-editor.js} +10 -10
- package/dist/bridge/domains/catalog-editor.js.map +1 -0
- package/dist/bridge/domains/catalog-player.d.ts +2 -0
- package/dist/bridge/domains/{runtime-tool.js → catalog-player.js} +9 -9
- package/dist/bridge/domains/catalog-player.js.map +1 -0
- package/dist/bridge/domains/code.js +1 -1
- package/dist/bridge/domains/code.js.map +1 -1
- package/dist/bridge/domains/console.js +2 -2
- package/dist/bridge/domains/console.js.map +1 -1
- package/dist/bridge/domains/doctor.js +3 -3
- package/dist/bridge/domains/doctor.js.map +1 -1
- package/dist/bridge/domains/editor.js +14 -14
- package/dist/bridge/domains/editor.js.map +1 -1
- package/dist/bridge/domains/game-object.js +16 -16
- package/dist/bridge/domains/game-object.js.map +1 -1
- package/dist/bridge/domains/lighting.d.ts +2 -0
- package/dist/bridge/domains/lighting.js +127 -0
- package/dist/bridge/domains/lighting.js.map +1 -0
- package/dist/bridge/domains/material.js +5 -5
- package/dist/bridge/domains/material.js.map +1 -1
- package/dist/bridge/domains/navmesh.js +3 -3
- package/dist/bridge/domains/navmesh.js.map +1 -1
- package/dist/bridge/domains/occlusion.js +1 -9
- package/dist/bridge/domains/occlusion.js.map +1 -1
- package/dist/bridge/domains/physics.js +14 -14
- package/dist/bridge/domains/physics.js.map +1 -1
- package/dist/bridge/domains/prefab.js +12 -12
- package/dist/bridge/domains/prefab.js.map +1 -1
- package/dist/bridge/domains/profiler.js +25 -25
- package/dist/bridge/domains/profiler.js.map +1 -1
- package/dist/bridge/domains/rendering.d.ts +2 -0
- package/dist/bridge/domains/rendering.js +71 -0
- package/dist/bridge/domains/rendering.js.map +1 -0
- package/dist/bridge/domains/runtime-reflection.d.ts +2 -0
- package/dist/bridge/domains/{reflection.js → runtime-reflection.js} +7 -7
- package/dist/bridge/domains/runtime-reflection.js.map +1 -0
- package/dist/bridge/domains/scene.js +15 -15
- package/dist/bridge/domains/scene.js.map +1 -1
- package/dist/bridge/domains/screenshot.js +6 -6
- package/dist/bridge/domains/screenshot.js.map +1 -1
- package/dist/bridge/domains/scriptable-object.js +4 -4
- package/dist/bridge/domains/scriptable-object.js.map +1 -1
- package/dist/bridge/domains/serialized-object.d.ts +2 -0
- package/dist/bridge/domains/{object.js → serialized-object.js} +6 -6
- package/dist/bridge/domains/serialized-object.js.map +1 -0
- package/dist/bridge/domains/shader.js +7 -7
- package/dist/bridge/domains/shader.js.map +1 -1
- package/dist/bridge/domains/texture.js +7 -7
- package/dist/bridge/domains/texture.js.map +1 -1
- package/dist/bridge/domains/timeline.js +4 -4
- package/dist/bridge/domains/timeline.js.map +1 -1
- package/dist/bridge/domains/ui.js +18 -18
- package/dist/bridge/domains/ui.js.map +1 -1
- package/dist/bridge/domains/volume.d.ts +2 -0
- package/dist/bridge/domains/volume.js +26 -0
- package/dist/bridge/domains/volume.js.map +1 -0
- package/dist/bridge/index.js +3 -3
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/registry.js +15 -13
- package/dist/bridge/registry.js.map +1 -1
- package/dist/bridge/session-supervisor.js +27 -9
- package/dist/bridge/session-supervisor.js.map +1 -1
- package/dist/bridge/start-diagnostics.d.ts +19 -0
- package/dist/bridge/start-diagnostics.js +96 -0
- package/dist/bridge/start-diagnostics.js.map +1 -0
- package/dist/bridge/types.d.ts +1 -1
- package/dist/catalog-protocol.js +3 -3
- package/dist/catalog-protocol.js.map +1 -1
- package/dist/cli-commands/package.js +10 -2
- package/dist/cli-commands/package.js.map +1 -1
- package/dist/doctor.js +23 -1
- package/dist/doctor.js.map +1 -1
- package/dist/extensions/.generated-bridge-domains/cinemachine.js +14 -14
- package/dist/extensions/.generated-bridge-domains/cinemachine.js.map +1 -1
- package/dist/extensions/.generated-bridge-domains/hdrp.js +7 -7
- package/dist/extensions/.generated-bridge-domains/hdrp.js.map +1 -1
- package/dist/extensions/.generated-bridge-domains/probuilder.d.ts +3 -3
- package/dist/extensions/.generated-bridge-domains/probuilder.js +40 -40
- package/dist/extensions/.generated-bridge-domains/probuilder.js.map +1 -1
- package/dist/extensions/.generated-bridge-domains/urp.js +12 -12
- package/dist/extensions/.generated-bridge-domains/urp.js.map +1 -1
- package/dist/extensions/.generated-bridge-domains/vfx.js +27 -27
- package/dist/extensions/.generated-bridge-domains/vfx.js.map +1 -1
- package/dist/extensions/installer.d.ts +35 -0
- package/dist/extensions/installer.js +123 -0
- package/dist/extensions/installer.js.map +1 -1
- package/dist/instances.d.ts +6 -0
- package/dist/instances.js +13 -0
- package/dist/instances.js.map +1 -1
- package/dist/package-manager.js +1 -1
- package/dist/project-tool-discovery.d.ts +1 -1
- package/dist/project-tool-discovery.js +5 -5
- package/dist/project-tool-discovery.js.map +1 -1
- package/dist/runtime-code.js +2 -2
- package/dist/runtime-code.js.map +1 -1
- package/dist/services/reflect-service.d.ts +3 -3
- package/dist/services/reflect-service.js +5 -5
- package/dist/services/reflect-service.js.map +1 -1
- package/dist/tools/.generated-completion-registry.js +689 -689
- package/dist/tools/.generated-completion-registry.js.map +1 -1
- package/dist/tools/.generated-registry.d.ts +12 -12
- package/dist/tools/.generated-registry.js +12 -12
- package/dist/tools/.generated-registry.js.map +1 -1
- package/dist/tools/.generated-schemas.js +13 -13
- package/dist/tools/.generated-schemas.js.map +1 -1
- package/dist/tools/catalog.d.ts +1 -1
- package/dist/tools/catalog.js +1 -1
- package/dist/tools/code/{exec.d.ts → execute.d.ts} +1 -1
- package/dist/tools/code/{exec.js → execute.js} +5 -5
- package/dist/tools/code/execute.js.map +1 -0
- package/dist/tools/dispatcher.js +12 -8
- package/dist/tools/dispatcher.js.map +1 -1
- package/dist/tools/editor/compile.d.ts +3 -2
- package/dist/tools/editor/compile.js +23 -13
- package/dist/tools/editor/compile.js.map +1 -1
- package/dist/tools/editor/play-mode-status.js +2 -2
- package/dist/tools/editor/play-mode-status.js.map +1 -1
- package/dist/tools/editor/refresh.js +2 -2
- package/dist/tools/editor/refresh.js.map +1 -1
- package/dist/tools/metadata/derived.d.ts +0 -7
- package/dist/tools/metadata/derived.js +7 -16
- package/dist/tools/metadata/derived.js.map +1 -1
- package/dist/tools/metadata/index.d.ts +1 -1
- package/dist/tools/metadata/index.js +1 -1
- package/dist/tools/metadata/index.js.map +1 -1
- package/dist/tools/metadata/status.js +1 -1
- package/dist/tools/metadata/status.js.map +1 -1
- package/dist/tools/{runtime → player-runtime}/console.js +4 -4
- package/dist/tools/player-runtime/console.js.map +1 -0
- package/dist/tools/{runtime → player-runtime}/input/key.js +4 -4
- package/dist/tools/player-runtime/input/key.js.map +1 -0
- package/dist/tools/{runtime → player-runtime}/input/pointer.js +4 -4
- package/dist/tools/player-runtime/input/pointer.js.map +1 -0
- package/dist/tools/{runtime → player-runtime}/log.js +5 -5
- package/dist/tools/player-runtime/log.js.map +1 -0
- package/dist/tools/{runtime → player-runtime}/state.js +4 -4
- package/dist/tools/player-runtime/state.js.map +1 -0
- package/dist/tools/{runtime → player-runtime}/target-framerate/set.js +4 -4
- package/dist/tools/player-runtime/target-framerate/set.js.map +1 -0
- package/dist/tools/{runtime → player-runtime}/time-scale/set.js +4 -4
- package/dist/tools/player-runtime/time-scale/set.js.map +1 -0
- package/dist/tools/{runtime → player-runtime}/ui/capture-element.js +4 -4
- package/dist/tools/player-runtime/ui/capture-element.js.map +1 -0
- package/dist/tools/tools/group-summaries.js +17 -14
- package/dist/tools/tools/group-summaries.js.map +1 -1
- package/dist/tools/{reflect/member.js → type-inspection/get-member.js} +6 -6
- package/dist/tools/type-inspection/get-member.js.map +1 -0
- package/dist/tools/{reflect/type.js → type-inspection/get-type.js} +6 -6
- package/dist/tools/type-inspection/get-type.js.map +1 -0
- package/dist/tools/{reflect → type-inspection}/search.js +5 -5
- package/dist/tools/type-inspection/search.js.map +1 -0
- package/docs/README.md +1 -2
- package/docs/architecture.md +1 -1
- package/docs/availability-differences.md +2 -2
- package/docs/development.md +1 -1
- package/docs/error-codes.md +5 -5
- package/docs/extensions.md +2 -2
- package/docs/risk-and-side-effects.md +12 -12
- package/docs/safety-boundaries.md +7 -7
- package/docs/tool-discovery.md +1 -1
- package/docs/tool-execution.md +16 -16
- package/extensions/cinemachine/bridge/domains/cinemachine.ts +14 -14
- package/extensions/hdrp/bridge/domains/hdrp.ts +7 -7
- package/extensions/hdrp/unitypkg/Editor/Hdrp/HdrpToolSupport.cs +2 -2
- package/extensions/probuilder/bridge/domains/probuilder.ts +40 -40
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderErrors.cs +1 -1
- package/extensions/urp/bridge/domains/urp.ts +12 -12
- package/extensions/urp/unitypkg/Editor/Urp/UrpToolSupport.cs +2 -2
- package/extensions/vfx-graph/bridge/domains/vfx.ts +27 -27
- package/package.json +1 -1
- package/skills/unitycli/SKILL.md +1 -1
- package/skills/unitycli/manifest.json +1 -1
- package/skills/unitycli/references/operation-protocol.md +1 -1
- package/unitypkg/Editor/Bridge/BridgeHttpServer.cs +2 -2
- package/unitypkg/Editor/Commands/ProjectToolCommands.cs +7 -7
- package/unitypkg/Editor/Commands/RuntimeToolCommands.cs +6 -6
- package/unitypkg/Editor/Generated/UnityCliToolCompletionRegistry.g.cs +147 -147
- package/unitypkg/Editor/Infrastructure/CodeExecSupport.cs +4 -4
- package/unitypkg/Editor/Infrastructure/UnityCliAdmission.cs +17 -17
- package/unitypkg/Editor/Infrastructure/UnityCliCompileCoordinator.cs +61 -54
- package/unitypkg/Editor/Infrastructure/UnityCliJson.cs +0 -18
- package/unitypkg/Editor/Infrastructure/UnityCliLiveRefreshCoordinator.cs +26 -21
- package/unitypkg/Editor/Infrastructure/UnityCliObjectPatch.cs +1 -1
- package/unitypkg/Editor/Infrastructure/UnityCliObjectRef.cs +5 -5
- package/unitypkg/Editor/Infrastructure/UnityCliOperationCoordinator.cs +32 -32
- package/unitypkg/Editor/Infrastructure/UnityCliReflection.cs +12 -12
- package/unitypkg/Editor/Infrastructure/UnityCliRuntimeExecutor.cs +1 -1
- package/unitypkg/Editor/ProjectTools/ProjectToolRegistry.cs +5 -5
- package/unitypkg/Editor/Tools/{animation → animation-clip}/AnimationToolSupport.cs +3 -3
- package/unitypkg/Editor/Tools/{animation/clip → animation-clip}/create.cs +4 -4
- package/unitypkg/Editor/Tools/{animation/clip.cs → animation-clip/read.cs} +3 -3
- package/unitypkg/Editor/Tools/{animation/clip/modify.cs → animation-clip/update.cs} +5 -5
- package/unitypkg/Editor/Tools/{animation/animator → animator}/crossfade.cs +1 -1
- package/unitypkg/Editor/Tools/{animation/animator → animator}/get-info.cs +1 -1
- package/unitypkg/Editor/Tools/{animation/animator → animator}/get-parameter.cs +1 -1
- package/unitypkg/Editor/Tools/{animation/state.cs → animator/get-state.cs} +3 -3
- package/unitypkg/Editor/Tools/{animation → animator}/play.cs +5 -5
- package/unitypkg/Editor/Tools/{animation/animator → animator}/set-enabled.cs +1 -1
- package/unitypkg/Editor/Tools/{animation/animator → animator}/set-parameter.cs +1 -1
- package/unitypkg/Editor/Tools/{animation/animator → animator}/set-speed.cs +1 -1
- package/unitypkg/Editor/Tools/{animation → animator}/stop.cs +4 -4
- package/unitypkg/Editor/Tools/{controller → animator-controller}/add-blend-tree-child.cs +10 -10
- package/unitypkg/Editor/Tools/{controller → animator-controller}/add-layer.cs +6 -6
- package/unitypkg/Editor/Tools/{controller → animator-controller}/add-parameter.cs +6 -6
- package/unitypkg/Editor/Tools/{controller → animator-controller}/add-state.cs +7 -7
- package/unitypkg/Editor/Tools/{controller → animator-controller}/add-transition.cs +9 -9
- package/unitypkg/Editor/Tools/{controller → animator-controller}/assign.cs +6 -6
- package/unitypkg/Editor/Tools/{controller → animator-controller}/create-blend-tree-1d.cs +7 -7
- package/unitypkg/Editor/Tools/{controller → animator-controller}/create-blend-tree-2d.cs +7 -7
- package/unitypkg/Editor/Tools/{controller → animator-controller}/create.cs +4 -4
- package/unitypkg/Editor/Tools/{controller → animator-controller}/get-info.cs +4 -4
- package/unitypkg/Editor/Tools/{controller → animator-controller}/remove-layer.cs +8 -8
- package/unitypkg/Editor/Tools/{controller → animator-controller}/set-layer-weight.cs +6 -6
- package/unitypkg/Editor/Tools/asset/preview.cs +1 -1
- package/unitypkg/Editor/Tools/asset/{modify.cs → write-text.cs} +6 -6
- package/unitypkg/Editor/Tools/component/get.cs +1 -1
- package/unitypkg/Editor/Tools/component/list-types.cs +2 -2
- package/unitypkg/Editor/Tools/component/modify.cs +1 -1
- package/unitypkg/Editor/Tools/component/set.cs +1 -1
- package/unitypkg/Editor/Tools/console/{get.cs → read.cs} +3 -3
- package/unitypkg/Editor/Tools/editor/{play.cs → play-mode/start.cs} +5 -5
- package/unitypkg/Editor/Tools/editor/{stop.cs → play-mode/stop.cs} +5 -5
- package/unitypkg/Editor/Tools/editor/search.cs +1 -1
- package/unitypkg/Editor/Tools/{go → game-object}/GameObjectToolSupport.cs +5 -22
- package/unitypkg/Editor/Tools/{go → game-object}/create.cs +11 -11
- package/unitypkg/Editor/Tools/{go → game-object}/delete.cs +7 -7
- package/unitypkg/Editor/Tools/{go → game-object}/duplicate.cs +6 -6
- package/unitypkg/Editor/Tools/{go → game-object}/find.cs +5 -5
- package/unitypkg/Editor/Tools/{go → game-object}/look-at.cs +8 -8
- package/unitypkg/Editor/Tools/{go → game-object}/modify.cs +9 -9
- package/unitypkg/Editor/Tools/{go → game-object}/move-relative.cs +7 -7
- package/unitypkg/Editor/Tools/{scene/move-object.cs → game-object/move-to-scene.cs} +7 -7
- package/unitypkg/Editor/Tools/{go → game-object}/set-parent.cs +9 -9
- package/unitypkg/Editor/Tools/{graphics/bake-cancel.cs → lighting/bake/cancel.cs} +4 -4
- package/unitypkg/Editor/Tools/{graphics/bake-clear.cs → lighting/bake/clear.cs} +4 -4
- package/unitypkg/Editor/Tools/{graphics/bake-reflection-probe.cs → lighting/bake/reflection-probe.cs} +3 -3
- package/unitypkg/Editor/Tools/{graphics/bake-settings.cs → lighting/bake/settings.cs} +12 -12
- package/unitypkg/Editor/Tools/{graphics/bake-start.cs → lighting/bake/start.cs} +5 -5
- package/unitypkg/Editor/Tools/{graphics/bake-status.cs → lighting/bake/status.cs} +3 -3
- package/unitypkg/Editor/Tools/{graphics → lighting}/light-probe-group.cs +7 -7
- package/unitypkg/Editor/Tools/{graphics → lighting}/reflection-probe.cs +12 -12
- package/unitypkg/Editor/Tools/{graphics/skybox-get.cs → lighting/skybox/get.cs} +3 -3
- package/unitypkg/Editor/Tools/{graphics/skybox-set-ambient.cs → lighting/skybox/set-ambient.cs} +3 -3
- package/unitypkg/Editor/Tools/{graphics/skybox-set-fog.cs → lighting/skybox/set-fog.cs} +3 -3
- package/unitypkg/Editor/Tools/{graphics/skybox-set-material.cs → lighting/skybox/set-material.cs} +5 -5
- package/unitypkg/Editor/Tools/{graphics/skybox-set-properties.cs → lighting/skybox/set-properties.cs} +5 -5
- package/unitypkg/Editor/Tools/{graphics/skybox-set-reflection.cs → lighting/skybox/set-reflection.cs} +3 -3
- package/unitypkg/Editor/Tools/{graphics/skybox-set-sun.cs → lighting/skybox/set-sun.cs} +5 -5
- package/unitypkg/Editor/Tools/{project → project-settings}/ProjectSettingsToolSupport.cs +5 -5
- package/unitypkg/Editor/Tools/{project → project-settings}/audio-settings/set.cs +3 -3
- package/unitypkg/Editor/Tools/{project → project-settings}/audio-settings.cs +4 -4
- package/unitypkg/Editor/Tools/{project → project-settings}/info.cs +4 -4
- package/unitypkg/Editor/Tools/{project → project-settings}/input-settings/set.cs +3 -3
- package/unitypkg/Editor/Tools/{project → project-settings}/input-settings.cs +4 -4
- package/unitypkg/Editor/Tools/project-settings/layer/add.cs +3 -0
- package/unitypkg/Editor/Tools/project-settings/layer/remove.cs +3 -0
- package/unitypkg/Editor/Tools/{project → project-settings}/layers.cs +4 -4
- package/unitypkg/Editor/Tools/{project → project-settings}/player-settings/set.cs +4 -4
- package/unitypkg/Editor/Tools/{project → project-settings}/player-settings.cs +4 -4
- package/unitypkg/Editor/Tools/project-settings/tag/add.cs +3 -0
- package/unitypkg/Editor/Tools/project-settings/tag/remove.cs +3 -0
- package/unitypkg/Editor/Tools/{project → project-settings}/tags.cs +4 -4
- package/unitypkg/Editor/Tools/{project → project-settings}/time-settings/set.cs +3 -3
- package/unitypkg/Editor/Tools/{project → project-settings}/time-settings.cs +4 -4
- package/unitypkg/Editor/Tools/{graphics → rendering}/GraphicsToolSupport.cs +3 -3
- package/unitypkg/Editor/Tools/rendering/pipeline/info.cs +19 -0
- package/unitypkg/Editor/Tools/{graphics/pipeline-settings.cs → rendering/pipeline/settings.cs} +4 -4
- package/unitypkg/Editor/Tools/{graphics → rendering}/quality.cs +17 -17
- package/unitypkg/Editor/Tools/{graphics → rendering}/scene-debug.cs +4 -4
- package/unitypkg/Editor/Tools/rendering/stats.cs +17 -0
- package/unitypkg/Editor/Tools/{reflection → runtime-reflection}/method/find.cs +5 -5
- package/unitypkg/Editor/Tools/{reflection/method/call.cs → runtime-reflection/method/invoke.cs} +7 -7
- package/unitypkg/Editor/Tools/{reflection → runtime-reflection}/type/schema.cs +5 -5
- package/unitypkg/Editor/Tools/scene/gameobject-support.cs +1 -1
- package/unitypkg/Editor/Tools/scene/gameobject.cs +1 -1
- package/unitypkg/Editor/Tools/scene/hierarchy.cs +1 -1
- package/unitypkg/Editor/Tools/{camera/screenshot.cs → screenshot/from-camera.cs} +4 -4
- package/unitypkg/Editor/Tools/{object/modify.cs → serialized-object/patch.cs} +8 -8
- package/unitypkg/Editor/Tools/{object/get-data.cs → serialized-object/read.cs} +4 -4
- package/unitypkg/Editor/Tools/{graphics/volume.cs → volume/list.cs} +3 -3
- package/unitypkg/Editor/UnityCliBridge.cs +3 -22
- package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeBridge.cs +15 -15
- package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeRegistry.cs +1 -1
- package/unitypkg/Runtime/Tools/UnityCliRuntimeTools.cs +22 -22
- package/unitypkg/Shared/UnityCliBridgeQueuePolicy.cs +1 -1
- package/unitypkg/Tests/Editor/UnityCliAdmissionCoordinatorIntegrationTests.cs +7 -7
- package/unitypkg/Tests/Editor/UnityCliBridgeAdmissionIntegrationTests.cs +6 -6
- package/unitypkg/Tests/Editor/UnityCliBridgeQueuePolicyTests.cs +3 -3
- package/unitypkg/Tests/Editor/UnityCliContinuationIntegrationTests.cs +1 -1
- package/unitypkg/Tests/Editor/UnityCliRequestBudgetTests.cs +4 -4
- package/unitypkg/Tests/Editor/UnityCliRuntimeBridgeIntegrationTests.cs +15 -15
- package/unitypkg/Tests/Runtime/UnityCliRuntimeCatalogValidationTests.cs +5 -5
- package/unitypkg/package.json +1 -1
- package/dist/bridge/domains/graphics.d.ts +0 -2
- package/dist/bridge/domains/graphics.js +0 -170
- package/dist/bridge/domains/graphics.js.map +0 -1
- package/dist/bridge/domains/object.d.ts +0 -2
- package/dist/bridge/domains/object.js.map +0 -1
- package/dist/bridge/domains/package.d.ts +0 -2
- package/dist/bridge/domains/package.js +0 -2
- package/dist/bridge/domains/package.js.map +0 -1
- package/dist/bridge/domains/project-tool.d.ts +0 -2
- package/dist/bridge/domains/project-tool.js.map +0 -1
- package/dist/bridge/domains/reflection.d.ts +0 -2
- package/dist/bridge/domains/reflection.js.map +0 -1
- package/dist/bridge/domains/runtime-tool.d.ts +0 -2
- package/dist/bridge/domains/runtime-tool.js.map +0 -1
- package/dist/tools/code/exec.js.map +0 -1
- package/dist/tools/reflect/member.js.map +0 -1
- package/dist/tools/reflect/search.js.map +0 -1
- package/dist/tools/reflect/type.js.map +0 -1
- package/dist/tools/runtime/console.js.map +0 -1
- package/dist/tools/runtime/input/key.js.map +0 -1
- package/dist/tools/runtime/input/pointer.js.map +0 -1
- package/dist/tools/runtime/log.js.map +0 -1
- package/dist/tools/runtime/state.js.map +0 -1
- package/dist/tools/runtime/target-framerate/set.js.map +0 -1
- package/dist/tools/runtime/time-scale/set.js.map +0 -1
- package/dist/tools/runtime/ui/capture-element.js.map +0 -1
- package/unitypkg/Editor/Tools/graphics/pipeline-info.cs +0 -19
- package/unitypkg/Editor/Tools/graphics/stats.cs +0 -17
- package/unitypkg/Editor/Tools/project/layer/add.cs +0 -3
- package/unitypkg/Editor/Tools/project/layer/remove.cs +0 -3
- package/unitypkg/Editor/Tools/project/tag/add.cs +0 -3
- package/unitypkg/Editor/Tools/project/tag/remove.cs +0 -3
- /package/dist/tools/{runtime → player-runtime}/console.d.ts +0 -0
- /package/dist/tools/{runtime → player-runtime}/input/key.d.ts +0 -0
- /package/dist/tools/{runtime → player-runtime}/input/pointer.d.ts +0 -0
- /package/dist/tools/{runtime → player-runtime}/log.d.ts +0 -0
- /package/dist/tools/{runtime → player-runtime}/state.d.ts +0 -0
- /package/dist/tools/{runtime → player-runtime}/target-framerate/set.d.ts +0 -0
- /package/dist/tools/{runtime → player-runtime}/time-scale/set.d.ts +0 -0
- /package/dist/tools/{runtime → player-runtime}/ui/capture-element.d.ts +0 -0
- /package/dist/tools/{reflect/member.d.ts → type-inspection/get-member.d.ts} +0 -0
- /package/dist/tools/{reflect/type.d.ts → type-inspection/get-type.d.ts} +0 -0
- /package/dist/tools/{reflect → type-inspection}/search.d.ts +0 -0
- /package/unitypkg/Editor/Tools/{animation → animator}/AnimatorRuntimeToolSupport.cs +0 -0
- /package/unitypkg/Editor/Tools/{project → project-settings}/ProjectSettingsReader.cs +0 -0
- /package/unitypkg/Editor/Tools/{project → project-settings}/ProjectTagLayerToolSupport.cs +0 -0
- /package/unitypkg/Editor/Tools/{object → serialized-object}/ObjectToolSupport.cs +0 -0
|
@@ -7,9 +7,9 @@ using UnityEngine.Rendering;
|
|
|
7
7
|
namespace UnityCli
|
|
8
8
|
{
|
|
9
9
|
/// <summary>
|
|
10
|
-
///
|
|
10
|
+
/// rendering.quality — 读取/写入 QualitySettings(qualityLevel/vSync/antiAliasing/shadowDistance 等)。
|
|
11
11
|
/// </summary>
|
|
12
|
-
public class
|
|
12
|
+
public class RenderingQualityTool : IUnityCliTool<RenderingQualityTool.Request, RenderingQualityTool.Result>
|
|
13
13
|
{
|
|
14
14
|
public sealed class Request
|
|
15
15
|
{
|
|
@@ -36,9 +36,9 @@ namespace UnityCli
|
|
|
36
36
|
|
|
37
37
|
public ToolDescriptor Describe() => new()
|
|
38
38
|
{
|
|
39
|
-
Name = "
|
|
40
|
-
Description = "Dedicated QualitySettings reader/writer for Edit and Play mode. Pass qualityLevel (name or index) and individual quality fields to update; omit every field for a pure read. Success returns a fresh QualitySettings snapshot and the applied effects; render-pipeline assignment belongs to
|
|
41
|
-
Group = "
|
|
39
|
+
Name = "rendering.quality", Summary = "Read and update Unity QualitySettings (quality level, vSync, anti-aliasing, shadows, LOD).",
|
|
40
|
+
Description = "Dedicated QualitySettings reader/writer for Edit and Play mode. Pass qualityLevel (name or index) and individual quality fields to update; omit every field for a pure read. Success returns a fresh QualitySettings snapshot and the applied effects; render-pipeline assignment belongs to rendering.pipeline.settings.",
|
|
41
|
+
Group = "rendering",DestructiveHint = true, SideEffects = new[] { "settings-write" },
|
|
42
42
|
Target = "editor", PlayModeSupport = "session-affecting",
|
|
43
43
|
DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000,
|
|
44
44
|
Examples = new[] { new ToolExample { Description = "Read quality settings", Input = new Request { } } }
|
|
@@ -62,19 +62,19 @@ namespace UnityCli
|
|
|
62
62
|
if (level.HasValue)
|
|
63
63
|
{
|
|
64
64
|
QualitySettings.SetQualityLevel(level.Value, true);
|
|
65
|
-
effects.Add(new GraphicsPlannedEffect { Type = "
|
|
65
|
+
effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "qualityLevel", Value = level.Value.ToString() });
|
|
66
66
|
}
|
|
67
|
-
if (request.VSyncCount.HasValue) { QualitySettings.vSyncCount = request.VSyncCount.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
68
|
-
if (request.AntiAliasing.HasValue) { QualitySettings.antiAliasing = request.AntiAliasing.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
69
|
-
if (request.ShadowDistance.HasValue) { QualitySettings.shadowDistance = request.ShadowDistance.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
70
|
-
if (request.MasterTextureLimit.HasValue) { QualitySettings.globalTextureMipmapLimit = request.MasterTextureLimit.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
71
|
-
if (request.LodBias.HasValue) { QualitySettings.lodBias = request.LodBias.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
72
|
-
if (request.MaximumLODLevel.HasValue) { QualitySettings.maximumLODLevel = request.MaximumLODLevel.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
73
|
-
if (anisotropic.HasValue) { QualitySettings.anisotropicFiltering = anisotropic.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
74
|
-
if (shadows.HasValue) { QualitySettings.shadows = shadows.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
75
|
-
if (shadowResolution.HasValue) { QualitySettings.shadowResolution = shadowResolution.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
76
|
-
if (request.RealtimeReflectionProbes.HasValue) { QualitySettings.realtimeReflectionProbes = request.RealtimeReflectionProbes.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
77
|
-
if (request.SoftParticles.HasValue) { QualitySettings.softParticles = request.SoftParticles.Value; effects.Add(new GraphicsPlannedEffect { Type = "
|
|
67
|
+
if (request.VSyncCount.HasValue) { QualitySettings.vSyncCount = request.VSyncCount.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "vSyncCount", Value = request.VSyncCount.Value.ToString() }); }
|
|
68
|
+
if (request.AntiAliasing.HasValue) { QualitySettings.antiAliasing = request.AntiAliasing.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "antiAliasing", Value = request.AntiAliasing.Value.ToString() }); }
|
|
69
|
+
if (request.ShadowDistance.HasValue) { QualitySettings.shadowDistance = request.ShadowDistance.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "shadowDistance", Value = request.ShadowDistance.Value.ToString(System.Globalization.CultureInfo.InvariantCulture) }); }
|
|
70
|
+
if (request.MasterTextureLimit.HasValue) { QualitySettings.globalTextureMipmapLimit = request.MasterTextureLimit.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "masterTextureLimit", Value = request.MasterTextureLimit.Value.ToString() }); }
|
|
71
|
+
if (request.LodBias.HasValue) { QualitySettings.lodBias = request.LodBias.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "lodBias", Value = request.LodBias.Value.ToString(System.Globalization.CultureInfo.InvariantCulture) }); }
|
|
72
|
+
if (request.MaximumLODLevel.HasValue) { QualitySettings.maximumLODLevel = request.MaximumLODLevel.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "maximumLODLevel", Value = request.MaximumLODLevel.Value.ToString() }); }
|
|
73
|
+
if (anisotropic.HasValue) { QualitySettings.anisotropicFiltering = anisotropic.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "anisotropicFiltering", Value = request.AnisotropicFiltering }); }
|
|
74
|
+
if (shadows.HasValue) { QualitySettings.shadows = shadows.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "shadows", Value = request.Shadows }); }
|
|
75
|
+
if (shadowResolution.HasValue) { QualitySettings.shadowResolution = shadowResolution.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "shadowResolution", Value = request.ShadowResolution }); }
|
|
76
|
+
if (request.RealtimeReflectionProbes.HasValue) { QualitySettings.realtimeReflectionProbes = request.RealtimeReflectionProbes.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "realtimeReflectionProbes", Value = request.RealtimeReflectionProbes.Value.ToString().ToLowerInvariant() }); }
|
|
77
|
+
if (request.SoftParticles.HasValue) { QualitySettings.softParticles = request.SoftParticles.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "softParticles", Value = request.SoftParticles.Value.ToString().ToLowerInvariant() }); }
|
|
78
78
|
if (effects.Count > 0) AssetDatabase.SaveAssets();
|
|
79
79
|
var observed = GraphicsToolSupport.BuildQualitySettings();
|
|
80
80
|
if ((level.HasValue && observed.CurrentLevel != level.Value) || (request.VSyncCount.HasValue && observed.VSyncCount != request.VSyncCount.Value) || (request.AntiAliasing.HasValue && observed.AntiAliasing != request.AntiAliasing.Value) || (request.ShadowDistance.HasValue && !Mathf.Approximately((float)observed.ShadowDistance, request.ShadowDistance.Value)) || (request.MasterTextureLimit.HasValue && observed.MasterTextureLimit != request.MasterTextureLimit.Value) || (request.LodBias.HasValue && !Mathf.Approximately((float)observed.LodBias, request.LodBias.Value)) || (request.MaximumLODLevel.HasValue && observed.MaximumLODLevel != request.MaximumLODLevel.Value) || (anisotropic.HasValue && observed.AnisotropicFiltering != anisotropic.Value.ToString()) || (shadows.HasValue && observed.Shadows != shadows.Value.ToString()) || (shadowResolution.HasValue && observed.ShadowResolution != shadowResolution.Value.ToString()) || (request.RealtimeReflectionProbes.HasValue && observed.RealtimeReflectionProbes != request.RealtimeReflectionProbes.Value) || (request.SoftParticles.HasValue && observed.SoftParticles != request.SoftParticles.Value)) throw new UnityCliBridge.BridgeCommandException("E_QUALITY_STATE_MISMATCH", "Quality settings readback did not match the request.", "Retry after the editor is idle.");
|
|
@@ -4,11 +4,11 @@ using UnityEditor;
|
|
|
4
4
|
using UnityEngine;
|
|
5
5
|
namespace UnityCli
|
|
6
6
|
{
|
|
7
|
-
public class
|
|
7
|
+
public class RenderingSceneDebugTool : IUnityCliTool<RenderingSceneDebugTool.Request, RenderingSceneDebugTool.Result>
|
|
8
8
|
{
|
|
9
9
|
public sealed class Request { public string ShadingMode { get; set; } public string DrawMode { get; set; } }
|
|
10
10
|
public sealed class Result { public bool SceneViewAvailable { get; set; } public string CurrentDrawMode { get; set; } public List<GraphicsPlannedEffect> PlannedEffects { get; set; } }
|
|
11
|
-
public ToolDescriptor Describe() => new() { Name = "
|
|
11
|
+
public ToolDescriptor Describe() => new() { Name = "rendering.scene-debug", Summary = "Set the SceneView shading or draw mode for debugging.", Description = "Change the current Editor SceneView camera mode.", Group = "rendering",SideEffects = new[] { "scene-view-state" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Show SceneView wireframe", Input = new Request { DrawMode = "Wireframe" } } } };
|
|
12
12
|
public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
|
|
13
13
|
{
|
|
14
14
|
var view = SceneView.lastActiveSceneView;
|
|
@@ -28,8 +28,8 @@ namespace UnityCli
|
|
|
28
28
|
var observed = SceneView.lastActiveSceneView;
|
|
29
29
|
if (observed == null || observed.cameraMode.drawMode != expected) throw new UnityCliBridge.BridgeCommandException("E_SCENE_DEBUG_STATE_MISMATCH", "SceneView draw mode readback did not match the request.", "Retry when a SceneView is active.");
|
|
30
30
|
var effects = new List<GraphicsPlannedEffect>();
|
|
31
|
-
if (shading.HasValue) effects.Add(new GraphicsPlannedEffect { Type = "
|
|
32
|
-
if (draw.HasValue) effects.Add(new GraphicsPlannedEffect { Type = "
|
|
31
|
+
if (shading.HasValue) effects.Add(new GraphicsPlannedEffect { Type = "rendering.scene-debug", Property = "shadingMode", Value = shading.Value.ToString() });
|
|
32
|
+
if (draw.HasValue) effects.Add(new GraphicsPlannedEffect { Type = "rendering.scene-debug", Property = "drawMode", Value = draw.Value.ToString() });
|
|
33
33
|
return new System.Threading.Tasks.ValueTask<Result>(new Result { SceneViewAvailable = true, CurrentDrawMode = observed.cameraMode.name, PlannedEffects = effects });
|
|
34
34
|
}
|
|
35
35
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#if UNITY_EDITOR
|
|
2
|
+
using System.Collections.Generic;
|
|
3
|
+
using UnityEditor;
|
|
4
|
+
using UnityEngine;
|
|
5
|
+
|
|
6
|
+
namespace UnityCli
|
|
7
|
+
{
|
|
8
|
+
/// <summary>rendering.stats — 读取渲染统计(drawCalls/batches/triangles/vertices 等)。</summary>
|
|
9
|
+
public class RenderingStatsTool : IUnityCliTool<RenderingStatsTool.Request, RenderingStatsTool.Result>
|
|
10
|
+
{
|
|
11
|
+
public sealed class Request { }
|
|
12
|
+
public sealed class Result { public RenderStatsInfo Stats { get; set; } }
|
|
13
|
+
public ToolDescriptor Describe() => new() { Name = "rendering.stats", Summary = "Read one unified render counter and memory snapshot.", Description = "Read-only in Edit and Play mode. Returns one bounded snapshot containing draw calls, batches, set-pass calls, triangles, vertices, screen resolution, texture/render-texture memory, and vertex-buffer memory from RenderStats (Unity 6) or UnityStats (2022.3).", Group = "rendering",DestructiveHint = false, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Read render stats", Input = new Request { } } } };
|
|
14
|
+
public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default) => new System.Threading.Tasks.ValueTask<Result>(new Result { Stats = GraphicsToolSupport.BuildRenderStats() });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
#endif
|
|
@@ -4,8 +4,8 @@ using System.Reflection;
|
|
|
4
4
|
|
|
5
5
|
namespace UnityCli
|
|
6
6
|
{
|
|
7
|
-
/// <summary>reflection.method.find — stable raw method ordinal pagination under one reflection budget。</summary>
|
|
8
|
-
public class
|
|
7
|
+
/// <summary>runtime-reflection.method.find — stable raw method ordinal pagination under one reflection budget。</summary>
|
|
8
|
+
public class RuntimeReflectionMethodFindTool : IUnityCliTool<RuntimeReflectionMethodFindTool.Request, RuntimeReflectionMethodFindTool.Result>
|
|
9
9
|
{
|
|
10
10
|
public sealed class Request
|
|
11
11
|
{
|
|
@@ -32,10 +32,10 @@ namespace UnityCli
|
|
|
32
32
|
|
|
33
33
|
public ToolDescriptor Describe() => new()
|
|
34
34
|
{
|
|
35
|
-
Name = "reflection.method.find",
|
|
35
|
+
Name = "runtime-reflection.method.find",
|
|
36
36
|
Summary = "Page live C# method signatures by exact type/name and visibility/static scope under one reflection budget.",
|
|
37
37
|
Description = "Find methods on one exact live type. includePrivate defaults false; includeStatic/includeInstance default true. pageSize is 1..500 (default 100). Filtering advances over raw MethodInfo ordinals, so sparse searches remain bounded and total is the raw method count rather than a fabricated filtered total. Each method and parameter descriptor consumes the shared scan/node/reflection/monotonic-time/UTF-8 budget; defaults are 10000/4096/4096/250 ms/1 MiB and maxima are 100000/20000/20000/2000 ms/8 MiB. A parameter-heavy method may return parametersTruncated with parameterCount. nextCursor binds type, flags, name filter and listener/assembly generation. Read-only in Edit and Play Mode.",
|
|
38
|
-
Group = "reflection", DestructiveHint = false, Target = "editor", PlayModeSupport = "supported",
|
|
38
|
+
Group = "runtime-reflection", DestructiveHint = false, Target = "editor", PlayModeSupport = "supported",
|
|
39
39
|
DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000,
|
|
40
40
|
Examples = new[] { new ToolExample { Description = "Find Translate overloads", Input = new Request { TypeName = "UnityEngine.Transform", MethodName = "Translate", PageSize = 100 } } }
|
|
41
41
|
};
|
|
@@ -43,7 +43,7 @@ namespace UnityCli
|
|
|
43
43
|
public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
|
|
44
44
|
{
|
|
45
45
|
if (request == null || string.IsNullOrEmpty(request.TypeName))
|
|
46
|
-
throw new UnityCliBridge.BridgeCommandException("E_TYPE_NAME_REQUIRED", "reflection.method.find requires typeName.", "Pass a full live C# type name.");
|
|
46
|
+
throw new UnityCliBridge.BridgeCommandException("E_TYPE_NAME_REQUIRED", "runtime-reflection.method.find requires typeName.", "Pass a full live C# type name.");
|
|
47
47
|
var bindings = (request.IncludePrivate ? BindingFlags.Public | BindingFlags.NonPublic : BindingFlags.Public)
|
|
48
48
|
| (request.IncludeStatic ? BindingFlags.Static : BindingFlags.Default)
|
|
49
49
|
| (request.IncludeInstance ? BindingFlags.Instance : BindingFlags.Default);
|
package/unitypkg/Editor/Tools/{reflection/method/call.cs → runtime-reflection/method/invoke.cs}
RENAMED
|
@@ -7,7 +7,7 @@ namespace UnityCli
|
|
|
7
7
|
/// <summary>
|
|
8
8
|
/// <summary>通过反射调用任意 C# 方法。</summary>
|
|
9
9
|
/// </summary>
|
|
10
|
-
public class
|
|
10
|
+
public class RuntimeReflectionMethodInvokeTool : IUnityCliTool<RuntimeReflectionMethodInvokeTool.Request, RuntimeReflectionMethodInvokeTool.Result>
|
|
11
11
|
{
|
|
12
12
|
public sealed class Request
|
|
13
13
|
{
|
|
@@ -38,10 +38,10 @@ namespace UnityCli
|
|
|
38
38
|
|
|
39
39
|
public ToolDescriptor Describe() => new()
|
|
40
40
|
{
|
|
41
|
-
Name = "reflection.method.
|
|
41
|
+
Name = "runtime-reflection.method.invoke",
|
|
42
42
|
Summary = "Call one synchronous C# method in the live Editor and prove declared state through a read Tool.",
|
|
43
43
|
Description = "Resolve the exact type, overload, arguments, and optional instance under one request budget before invoking one synchronous method. completionProbe is mandatory and proves declared before/after state through an eligible read Tool in the same Editor turn. Candidate methods, parameters, signatures, reflection work, monotonic main-thread time, and output bytes are globally bounded in dry-run and execution. Task/ValueTask, iterator, yield, and AsyncOperation methods are rejected; a method return value is never accepted as completion proof.",
|
|
44
|
-
Group = "reflection",
|
|
44
|
+
Group = "runtime-reflection",
|
|
45
45
|
DestructiveHint = true,
|
|
46
46
|
SideEffects = new[] { "arbitrary-method-invocation" },
|
|
47
47
|
Target = "editor",
|
|
@@ -76,8 +76,8 @@ namespace UnityCli
|
|
|
76
76
|
if (string.IsNullOrEmpty(request.TypeName) || string.IsNullOrEmpty(request.MethodName))
|
|
77
77
|
{
|
|
78
78
|
throw new UnityCliBridge.BridgeCommandException("E_METHOD_TARGET_REQUIRED",
|
|
79
|
-
"reflection.method.
|
|
80
|
-
"Run tools run reflection.method.find to discover methods, then retry with the required target fields.");
|
|
79
|
+
"runtime-reflection.method.invoke requires typeName and methodName.",
|
|
80
|
+
"Run tools run runtime-reflection.method.find to discover methods, then retry with the required target fields.");
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
var readBudget = ctx.UseReadBudget(request.Budget);
|
|
@@ -94,7 +94,7 @@ namespace UnityCli
|
|
|
94
94
|
{
|
|
95
95
|
PlannedEffects = new List<PlannedEffect>
|
|
96
96
|
{
|
|
97
|
-
new PlannedEffect { Type = "reflection.method.
|
|
97
|
+
new PlannedEffect { Type = "runtime-reflection.method.invoke", Target = request.TypeName + "." + request.MethodName, SideEffects = "arbitrary-method-invocation" }
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
100
|
}
|
|
@@ -107,7 +107,7 @@ namespace UnityCli
|
|
|
107
107
|
Completion = completion,
|
|
108
108
|
PlannedEffects = new List<PlannedEffect>
|
|
109
109
|
{
|
|
110
|
-
new PlannedEffect { Type = "reflection.method.
|
|
110
|
+
new PlannedEffect { Type = "runtime-reflection.method.invoke", Target = request.TypeName + "." + request.MethodName, SideEffects = "arbitrary-method-invocation" }
|
|
111
111
|
}
|
|
112
112
|
});
|
|
113
113
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#if UNITY_EDITOR
|
|
2
2
|
namespace UnityCli
|
|
3
3
|
{
|
|
4
|
-
/// <summary>type.schema — live 类型 schema 的有界成员/definition 分页。</summary>
|
|
5
|
-
public class
|
|
4
|
+
/// <summary>runtime-reflection.type.schema — live 类型 schema 的有界成员/definition 分页。</summary>
|
|
5
|
+
public class RuntimeReflectionTypeSchemaTool : IUnityCliTool<RuntimeReflectionTypeSchemaTool.Request, RuntimeReflectionTypeSchemaTool.Result>
|
|
6
6
|
{
|
|
7
7
|
public sealed class Request
|
|
8
8
|
{
|
|
@@ -26,10 +26,10 @@ namespace UnityCli
|
|
|
26
26
|
|
|
27
27
|
public ToolDescriptor Describe() => new()
|
|
28
28
|
{
|
|
29
|
-
Name = "type.schema",
|
|
29
|
+
Name = "runtime-reflection.type.schema",
|
|
30
30
|
Summary = "Page a live C# type schema under global depth, member, definition, reflection and byte ceilings.",
|
|
31
31
|
Description = "Generate a JSON Schema page for one live C# type. maxDepth is 0..16 (default 3), maxMembers 1..512 (default 256), maxDefinitions 1..256 (default 128), and pageSize 1..256 (default 64). Primitive, enum, array, and dictionary roots use the same classification as recursive values and do not expose continuation; only object roots page bounded public member metadata by raw ordinal. nextCursor binds listener/assembly generation, the member fingerprint, and all structural limits. Recursive definitions, member candidates, interfaces, and friendly type names share the same scan/member/node/reflection/monotonic-time/UTF-8 budget (defaults 10000/4096/4096/250 ms/1 MiB; maxima 100000/20000/20000/2000 ms/8 MiB). Assembly reload or compilation invalidates the bounded type cache and old cursors. Read-only in Edit and Play Mode.",
|
|
32
|
-
Group = "reflection", DestructiveHint = false, Target = "editor", PlayModeSupport = "supported",
|
|
32
|
+
Group = "runtime-reflection", DestructiveHint = false, Target = "editor", PlayModeSupport = "supported",
|
|
33
33
|
DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000,
|
|
34
34
|
Examples = new[] { new ToolExample { Description = "Read the first Rigidbody schema page", Input = new Request { TypeName = "UnityEngine.Rigidbody", PageSize = 64 } } }
|
|
35
35
|
};
|
|
@@ -37,7 +37,7 @@ namespace UnityCli
|
|
|
37
37
|
public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
|
|
38
38
|
{
|
|
39
39
|
if (request == null || string.IsNullOrEmpty(request.TypeName))
|
|
40
|
-
throw new UnityCliBridge.BridgeCommandException("E_TYPE_NAME_REQUIRED", "type.schema requires typeName.", "Pass a full live C# type name.");
|
|
40
|
+
throw new UnityCliBridge.BridgeCommandException("E_TYPE_NAME_REQUIRED", "runtime-reflection.type.schema requires typeName.", "Pass a full live C# type name.");
|
|
41
41
|
var budget = ctx.UseReadBudget(request.Budget);
|
|
42
42
|
var page = UnityCliBridge.TypeSchemaGenerator.Generate(request.TypeName, request.MaxDepth ?? 3, request.MaxMembers ?? 256,
|
|
43
43
|
request.MaxDefinitions ?? 128, request.PageSize ?? 64, request.Cursor, budget);
|
|
@@ -41,7 +41,7 @@ namespace UnityCli
|
|
|
41
41
|
}
|
|
42
42
|
if (gameObject == null)
|
|
43
43
|
{
|
|
44
|
-
throw new BridgeCommandException("E_TARGET_NOT_FOUND", "GameObject context target not found.", "Pass input target, path, or id. Use a scene context such as scene.
|
|
44
|
+
throw new BridgeCommandException("E_TARGET_NOT_FOUND", "GameObject context target not found.", "Pass input target, path, or id. Use a scene context such as scene.hierarchy to discover reusable scene object references.");
|
|
45
45
|
}
|
|
46
46
|
return gameObject;
|
|
47
47
|
}
|
|
@@ -27,7 +27,7 @@ namespace UnityCli
|
|
|
27
27
|
public ToolDescriptor Describe() => new()
|
|
28
28
|
{
|
|
29
29
|
Name = "scene.gameobject", Summary = "Read one GameObject summary by id, hierarchy path, or name without modifying the scene.",
|
|
30
|
-
Description = "Read one GameObject's lightweight scene summary by id, hierarchy path, or name in Edit or Play mode. Use this after scene.hierarchy or
|
|
30
|
+
Description = "Read one GameObject's lightweight scene summary by id, hierarchy path, or name in Edit or Play mode. Use this after scene.hierarchy or game-object.find discovery and before component.get, serialized-object.read, or mutation tools to confirm a stable path/id. Does not modify the scene; set includeComponents=false when only the reusable reference is needed.",
|
|
31
31
|
DestructiveHint = false,
|
|
32
32
|
Group = "scene", Target = "editor", PlayModeSupport = "supported",
|
|
33
33
|
Examples = new[] { new ToolExample { Description = "Read the main camera object", Input = new Request { Target = "Main Camera", IncludeComponents = true } }, new ToolExample { Description = "Read only the reusable object reference", Input = new Request { Target = "Main Camera", IncludeComponents = false } } }
|
|
@@ -68,7 +68,7 @@ namespace UnityCli
|
|
|
68
68
|
{
|
|
69
69
|
Name = "scene.hierarchy",
|
|
70
70
|
Summary = "Read a lightweight, paged active scene hierarchy from stable raw GameObject positions.",
|
|
71
|
-
Description = "Read a lightweight active-scene hierarchy in Edit or Play mode. Use parent for one subtree, maxDepth to limit recursion, query/name/component filters to narrow results, and includeComponents only when component previews are needed. Read one selected object with scene.gameobject; use object.
|
|
71
|
+
Description = "Read a lightweight active-scene hierarchy in Edit or Play mode. Use parent for one subtree, maxDepth to limit recursion, query/name/component filters to narrow results, and includeComponents only when component previews are needed. Read one selected object with scene.gameobject; use serialized-object.read or component.get for deep fields. pageSize is 1..500 (default 50), maxDepth is 0..16 (default 1), each page scans only forward from nextCursor, pageInfo never fabricates a filtered total, and old generations return E_CONTINUATION_STALE. All pages share scan/node/getter/reflection/time/UTF-8 budgets.",
|
|
72
72
|
Group = "scene",
|
|
73
73
|
DestructiveHint = false,
|
|
74
74
|
Target = "editor",
|
|
@@ -5,9 +5,9 @@ using UnityEngine;
|
|
|
5
5
|
namespace UnityCli
|
|
6
6
|
{
|
|
7
7
|
/// <summary>
|
|
8
|
-
/// camera
|
|
8
|
+
/// screenshot.from-camera — 从指定 Camera 渲染 PNG/JPG 截图到文件。
|
|
9
9
|
/// </summary>
|
|
10
|
-
public class
|
|
10
|
+
public class ScreenshotFromCameraTool : IUnityCliTool<ScreenshotFromCameraTool.Request, CameraCapture>
|
|
11
11
|
{
|
|
12
12
|
public sealed class Request
|
|
13
13
|
{
|
|
@@ -27,10 +27,10 @@ namespace UnityCli
|
|
|
27
27
|
|
|
28
28
|
public ToolDescriptor Describe() => new()
|
|
29
29
|
{
|
|
30
|
-
Name = "camera
|
|
30
|
+
Name = "screenshot.from-camera",
|
|
31
31
|
Summary = "Render a PNG/JPG artifact from one specific Camera; use screenshot.* for view-based captures.",
|
|
32
32
|
Description = "Render one Camera to PNG/JPG. Before the first effect, dimensions must be 1..8192 with at most 16777216 pixels, and the aggregate plan must fit default ceilings of 33554432 total pixels, 128 MiB temporary memory and 64 MiB artifacts (public maxima 67108864, 256 MiB and 256 MiB). limits may only tighten or raise within those maxima; zero, negative and excessive values fail before capture. The texture and Camera state are released/restored in finally. Available in Edit and Play Mode with session render effects.",
|
|
33
|
-
Group = "
|
|
33
|
+
Group = "screenshot",
|
|
34
34
|
DestructiveHint = true,
|
|
35
35
|
SideEffects = new[] { "artifact-write", "render-texture" },
|
|
36
36
|
Target = "editor",
|
|
@@ -6,9 +6,9 @@ using UnityEngine;
|
|
|
6
6
|
namespace UnityCli
|
|
7
7
|
{
|
|
8
8
|
/// <summary>
|
|
9
|
-
/// object.
|
|
9
|
+
/// serialized-object.patch — 使用可验证的 SerializedProperty pathPatches 修改 Unity Object。
|
|
10
10
|
/// </summary>
|
|
11
|
-
public class
|
|
11
|
+
public class SerializedObjectPatchTool : IUnityCliTool<SerializedObjectPatchTool.Request, SerializedObjectPatchTool.Result>
|
|
12
12
|
{
|
|
13
13
|
public sealed class Request : IUnityCliObjectReferenceInput, IUnityCliObjectSerializationInput
|
|
14
14
|
{
|
|
@@ -52,10 +52,10 @@ namespace UnityCli
|
|
|
52
52
|
|
|
53
53
|
public ToolDescriptor Describe() => new()
|
|
54
54
|
{
|
|
55
|
-
Name = "object.
|
|
55
|
+
Name = "serialized-object.patch",
|
|
56
56
|
Summary = "Modify any Unity Object via verified serialized pathPatches; supports dry-run.",
|
|
57
57
|
Description = "Modify an object using non-empty direct replace pathPatches on verifiable SerializedProperties. Resolves the target by instanceId, assetPath/guid, or path/name. Supports dry-run to preview without applying. Marks scene objects dirty.",
|
|
58
|
-
Group = "object",
|
|
58
|
+
Group = "serialized-object",
|
|
59
59
|
DestructiveHint = true,
|
|
60
60
|
SideEffects = new[] { "object-modify" },
|
|
61
61
|
Target = "editor",
|
|
@@ -71,16 +71,16 @@ namespace UnityCli
|
|
|
71
71
|
|
|
72
72
|
public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
|
|
73
73
|
{
|
|
74
|
-
ObjectToolSupport.EnsureEditorNotBusy("object.
|
|
74
|
+
ObjectToolSupport.EnsureEditorNotBusy("serialized-object.patch");
|
|
75
75
|
var readBudget = ctx.UseReadBudget(request.Budget);
|
|
76
76
|
var target = UnityCliBridge.ObjectRefResolver.ResolveObject(request, readBudget);
|
|
77
77
|
if (EditorApplication.isPlaying && EditorUtility.IsPersistent(target))
|
|
78
78
|
{
|
|
79
|
-
throw new UnityCliBridge.BridgeCommandException("E_TOOL_PLAYMODE_UNAVAILABLE", "object.
|
|
79
|
+
throw new UnityCliBridge.BridgeCommandException("E_TOOL_PLAYMODE_UNAVAILABLE", "serialized-object.patch cannot modify persistent assets during Play Mode.", "Target a scene object or exit Play Mode before modifying an asset.");
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
if (request.PathPatches == null || request.PathPatches.Count == 0)
|
|
83
|
-
throw new UnityCliBridge.BridgeCommandException("E_OBJECT_PATCH_REQUIRED", "object.
|
|
83
|
+
throw new UnityCliBridge.BridgeCommandException("E_OBJECT_PATCH_REQUIRED", "serialized-object.patch requires non-empty pathPatches.", "Pass direct replace pathPatches for writable serialized properties.");
|
|
84
84
|
|
|
85
85
|
var hasPathPatches = true;
|
|
86
86
|
UnityCliBridge.ObjectPatch.ValidateOnly(target, request.PathPatches, null);
|
|
@@ -94,7 +94,7 @@ namespace UnityCli
|
|
|
94
94
|
TypeName = target.GetType().FullName,
|
|
95
95
|
PlannedEffects = new List<PlannedEffect>
|
|
96
96
|
{
|
|
97
|
-
new PlannedEffect { Type = "object.
|
|
97
|
+
new PlannedEffect { Type = "serialized-object.patch", Target = target.name, HasPathPatches = hasPathPatches }
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
100
|
}
|
|
@@ -4,9 +4,9 @@ using System.Collections.Generic;
|
|
|
4
4
|
namespace UnityCli
|
|
5
5
|
{
|
|
6
6
|
/// <summary>
|
|
7
|
-
/// object.
|
|
7
|
+
/// serialized-object.read — 读取任意 UnityEngine.Object 的深序列化数据。只读。
|
|
8
8
|
/// </summary>
|
|
9
|
-
public class
|
|
9
|
+
public class SerializedObjectReadTool : IUnityCliTool<SerializedObjectReadTool.Request, SerializedObjectReadTool.Result>
|
|
10
10
|
{
|
|
11
11
|
public sealed class Request : IUnityCliObjectReferenceInput, IUnityCliObjectSerializationInput
|
|
12
12
|
{
|
|
@@ -39,10 +39,10 @@ namespace UnityCli
|
|
|
39
39
|
|
|
40
40
|
public ToolDescriptor Describe() => new()
|
|
41
41
|
{
|
|
42
|
-
Name = "object.
|
|
42
|
+
Name = "serialized-object.read",
|
|
43
43
|
Summary = "Read deep serialized data from any Unity Object by instanceId, assetPath, guid or path.",
|
|
44
44
|
Description = "Read deep serialized data from any UnityEngine.Object. maxDepth is 0..16 and maxArrayItems is 1..1000. paths accepts at most 128 ordered exact reads; all paths and recursive branches share one budget (10000 scans, 4096 nodes, 2048 getters, 4096 reflection calls, 250 main-thread ms, 1 MiB UTF-8 by default; public maxima are 100000/20000/10000/20000/2000 ms/8 MiB). Truncated nodes return nextPath. Read-only in Edit and Play Mode.",
|
|
45
|
-
Group = "object",
|
|
45
|
+
Group = "serialized-object",
|
|
46
46
|
DestructiveHint = false,
|
|
47
47
|
Target = "editor",
|
|
48
48
|
PlayModeSupport = "supported",
|
|
@@ -7,13 +7,13 @@ using UnityEngine.Rendering;
|
|
|
7
7
|
|
|
8
8
|
namespace UnityCli
|
|
9
9
|
{
|
|
10
|
-
/// <summary>
|
|
11
|
-
public class
|
|
10
|
+
/// <summary>volume.list — 列出场景中的 Volume 组件(通过反射,兼容 URP/HDRP)。</summary>
|
|
11
|
+
public class VolumeListTool : IUnityCliTool<VolumeListTool.Request, VolumeListTool.Result>
|
|
12
12
|
{
|
|
13
13
|
public sealed class Request { public string Target { get; set; } public int PageSize { get; set; } public string Cursor { get; set; } }
|
|
14
14
|
public sealed class Result { public List<VolumeInfo> Volumes { get; set; } public long Count { get; set; } public PageInfo PageInfo { get; set; } }
|
|
15
15
|
public sealed class PageInfo { public bool HasMore { get; set; } public long PageSize { get; set; } }
|
|
16
|
-
public ToolDescriptor Describe() => new() { Name = "
|
|
16
|
+
public ToolDescriptor Describe() => new() { Name = "volume.list", Summary = "List Volume components in the scene, optionally filtered by target.", Description = "Find Volume components (URP/HDRP) via reflection. Filter by GameObject name or hierarchy path and return count plus page metadata. This Tool is read-only.", Group = "volume",DestructiveHint = false, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "List all volumes", Input = new Request { PageSize = 100 } } } };
|
|
17
17
|
/// <summary>读取 pipeline-neutral Volume 列表,并保留旧读取入口的 count/pageInfo contract。</summary>
|
|
18
18
|
public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
|
|
19
19
|
{
|
|
@@ -33,25 +33,6 @@ namespace UnityCli
|
|
|
33
33
|
private const int PreferredPortRange = 4096;
|
|
34
34
|
private const int PreferredPortRetryCount = 4;
|
|
35
35
|
private const int DeterministicFallbackCount = 64;
|
|
36
|
-
private static readonly string[] CameraCommands = { "camera.list", "camera.info", "camera.screenshot", "camera.create", "camera.target", "camera.lens", "camera.multiview" };
|
|
37
|
-
private static readonly string[] SceneCommands = { "scene.active", "scene.hierarchy", "scene.create", "scene.load", "scene.save" };
|
|
38
|
-
private static readonly string[] GameObjectCommands = { "go.find", "go.create", "go.modify", "go.duplicate", "go.move-relative", "go.look-at", "go.delete", "component.add", "component.remove", "component.set" };
|
|
39
|
-
private static readonly string[] AssetCommands = { "asset.search", "asset.info", "asset.create", "asset.import", "asset.modify", "asset.delete", "asset.duplicate", "asset.move", "asset.rename", "asset.refresh" };
|
|
40
|
-
private static readonly string[] ScreenshotCommands = { "screenshot.game-view", "screenshot.scene-view", "screenshot.isolated-object", "screenshot.orbit", "screenshot.surround" };
|
|
41
|
-
private static readonly string[] PrefabCommands = { "prefab.info", "prefab.hierarchy", "prefab.create", "prefab.modify", "prefab.stage-open", "prefab.stage-save", "prefab.stage-close" };
|
|
42
|
-
private static readonly string[] UiCommands = { "ui.canvas.create", "ui.text.create", "ui.button.create", "ui.image.create", "ui.document.info", "ui.document.create", "ui.hierarchy" };
|
|
43
|
-
private static readonly string[] MaterialCommands = { "material.info", "material.create", "material.assign", "material.set" };
|
|
44
|
-
private static readonly string[] GraphicsCommands = { "graphics.quality", "graphics.volume", "graphics.bake-start", "graphics.bake-cancel", "graphics.bake-status", "graphics.bake-clear", "graphics.bake-reflection-probe", "graphics.bake-settings", "graphics.light-probe-group", "graphics.reflection-probe", "graphics.stats", "graphics.scene-debug", "graphics.skybox-get", "graphics.skybox-set-material", "graphics.skybox-set-properties", "graphics.skybox-set-ambient", "graphics.skybox-set-fog", "graphics.skybox-set-reflection", "graphics.skybox-set-sun", "graphics.pipeline-settings", "graphics.pipeline-info" };
|
|
45
|
-
private static readonly string[] PhysicsCommands = { "physics.settings", "physics.collision-matrix", "physics.material", "physics.assign-material", "physics.joint.add", "physics.joint.remove", "physics.force", "physics.overlap", "physics.rigidbody", "physics.raycast", "physics.simulation", "physics.linecast", "physics.shapecast", "physics.validate" };
|
|
46
|
-
private static readonly string[] ProfilerCommands = { "profiler.start", "profiler.stop", "profiler.pause", "profiler.counter", "profiler.memory", "profiler.frame", "profiler.capture", "profiler.export", "profiler.status" };
|
|
47
|
-
private static readonly string[] AnimationCommands = { "animation.clip", "animation.clip.create", "animation.clip.modify", "animation.state", "animation.play", "animation.stop", "animator.get-info", "animator.get-parameter", "animator.set-parameter", "animator.crossfade", "animator.set-speed", "animator.set-enabled", "controller.create", "controller.add-state", "controller.add-transition", "controller.add-parameter", "controller.get-info", "controller.assign", "controller.add-layer", "controller.remove-layer", "controller.set-layer-weight", "controller.create-blend-tree-1d", "controller.create-blend-tree-2d", "controller.add-blend-tree-child" };
|
|
48
|
-
private static readonly string[] ShaderCommands = { "shader.info", "shader.read", "shader.create", "shader.update" };
|
|
49
|
-
private static readonly string[] TextureCommands = { "texture.info", "texture.create", "texture.sprite", "texture.import-settings" };
|
|
50
|
-
private static readonly string[] EditorCommands = { "editor.play", "editor.pause", "editor.stop", "editor.undo", "editor.redo", "editor.resolution", "editor.menu", "project.tag.add", "project.tag.remove", "project.layer.add", "project.layer.remove" };
|
|
51
|
-
private static readonly string[] ScriptableObjectCommands = { "scriptable-object.create", "scriptable-object.info", "scriptable-object.list-types", "scriptable-object.modify" };
|
|
52
|
-
private static readonly string[] CodeCommands = { "code.exec" };
|
|
53
|
-
private static readonly string[] ProjectToolCommands = { "project-tool.health", "project-tool.groups", "project-tool.summary", "project-tool.describe", "project-tool.list", "project-tool.run" };
|
|
54
|
-
private static readonly string[] RuntimeToolCommands = { "runtime-tool.groups", "runtime-tool.summary", "runtime-tool.describe", "runtime-tool.list", "runtime-tool.run" };
|
|
55
36
|
private const string BridgeDiagnosticsFingerprint = "health-fingerprint-play-mode-guard-v3";
|
|
56
37
|
private static readonly BridgeCommandRegistry CommandRegistry = CreateCommandRegistry();
|
|
57
38
|
private static readonly string ListenerId = "listener-" + Guid.NewGuid().ToString("N");
|
|
@@ -370,7 +351,7 @@ namespace UnityCli
|
|
|
370
351
|
private static CancellationTokenSource CreateExecutionLifetime(UnityCli.Protocol.BridgeRequest request)
|
|
371
352
|
{
|
|
372
353
|
var tokens = new List<CancellationToken> { BridgeLifetime.Token };
|
|
373
|
-
if (request != null && string.Equals(request.Command, "
|
|
354
|
+
if (request != null && string.Equals(request.Command, "catalog.player.run", StringComparison.Ordinal)) tokens.Add(runtimeSession.Token);
|
|
374
355
|
return CancellationTokenSource.CreateLinkedTokenSource(tokens.ToArray());
|
|
375
356
|
}
|
|
376
357
|
|
|
@@ -466,9 +447,9 @@ namespace UnityCli
|
|
|
466
447
|
var allowedDuringPlayModeTransition = UnityCliDurableStatusCoordinator.IsCommand(request.Command) || UnityCliCompileCoordinator.IsCommand(request.Command) || UnityCliLiveRefreshCoordinator.IsCommand(request.Command) || UnityCliAssetRefreshCoordinator.IsCommand(request.Command) || UnityCliPackageEmbedCoordinator.IsCommand(request.Command) || UnityCliPackageResolveCoordinator.IsCommand(request.Command) || UnityCliTestRunCoordinator.IsCommand(request.Command) || UnityCliNavMeshBakeCoordinator.IsCommand(request.Command) || UnityCliOcclusionBakeCoordinator.IsCommand(request.Command)
|
|
467
448
|
|| IsEditorStateSnapshotCommand(request.Command)
|
|
468
449
|
|| request.Command == "editor.pause"
|
|
469
|
-
|| request.Command == "editor.stop"
|
|
450
|
+
|| request.Command == "editor.play-mode.stop"
|
|
470
451
|
|| IsProjectToolCatalogReadCommand(request.Command)
|
|
471
|
-
|| request.Command == "
|
|
452
|
+
|| request.Command == "catalog.player.run"
|
|
472
453
|
|| IsDoctorAdmissionBypassCommand(request.Command);
|
|
473
454
|
|
|
474
455
|
if (!allowedDuringPlayModeTransition)
|
|
@@ -246,7 +246,7 @@ namespace UnityCli
|
|
|
246
246
|
var remaining = work.AbsoluteDeadlineMs - dependencies.UtcNowMs();
|
|
247
247
|
if (remaining <= 0L || dependencies.IsStopping())
|
|
248
248
|
{
|
|
249
|
-
var timeout = Error(requestId, "E_EXECUTION_TIMEOUT", "Runtime request did not reach a proven terminal before its immutable deadline or session shutdown.", new[] { "Inspect runtime.state before submitting a new request." }, true, 100);
|
|
249
|
+
var timeout = Error(requestId, "E_EXECUTION_TIMEOUT", "Runtime request did not reach a proven terminal before its immutable deadline or session shutdown.", new[] { "Inspect player-runtime.state before submitting a new request." }, true, 100);
|
|
250
250
|
if (work.Owner.FinalizeRuntimeRequest(work, timeout, 0)) return work.Completion.Task.Result;
|
|
251
251
|
return timeout;
|
|
252
252
|
}
|
|
@@ -435,22 +435,22 @@ namespace UnityCli
|
|
|
435
435
|
var expectedGeneration = ReadString(input, "expectedCatalogGeneration");
|
|
436
436
|
if (!string.IsNullOrEmpty(expectedGeneration) && !string.Equals(expectedGeneration, generation, StringComparison.Ordinal))
|
|
437
437
|
terminal = Error(requestId, "E_TOOL_CATALOG_CHANGED", "The Tool catalog generation changed before this continuation page was read.", new[] { "Restart this discovery query from its first page against the current Runtime generation." });
|
|
438
|
-
else if (string.Equals(command, "
|
|
438
|
+
else if (string.Equals(command, "catalog.player.groups", StringComparison.Ordinal))
|
|
439
439
|
terminal = Success(requestId, new Dictionary<string, object> { { "catalogGeneration", generation }, { "groups", new List<object>() } });
|
|
440
|
-
else if (string.Equals(command, "
|
|
440
|
+
else if (string.Equals(command, "catalog.player.summary", StringComparison.Ordinal))
|
|
441
441
|
terminal = Success(requestId, RuntimeCatalogSummaryData(input, generation));
|
|
442
|
-
else if (string.Equals(command, "
|
|
442
|
+
else if (string.Equals(command, "catalog.player.describe", StringComparison.Ordinal))
|
|
443
443
|
terminal = Success(requestId, new Dictionary<string, object> { { "catalogGeneration", generation }, { "found", false } });
|
|
444
444
|
else
|
|
445
445
|
terminal = Success(requestId, new Dictionary<string, object> { { "tools", new List<object>() }, { "target", "runtime" }, { "runtimeSessionId", sessionId } });
|
|
446
446
|
}
|
|
447
|
-
else if (string.Equals(command, "
|
|
447
|
+
else if (string.Equals(command, "catalog.player.run", StringComparison.Ordinal))
|
|
448
448
|
{
|
|
449
449
|
var wrapper = ReadObject(request, "input");
|
|
450
|
-
if (wrapper == null || !HasOnlyKeys(wrapper, "name", "input", "artifactDir", "playModeSessionId")) throw new FormatException("
|
|
450
|
+
if (wrapper == null || !HasOnlyKeys(wrapper, "name", "input", "artifactDir", "playModeSessionId")) throw new FormatException("catalog.player.run wrapper is invalid.");
|
|
451
451
|
var name = RequiredString(wrapper, "name", 256);
|
|
452
452
|
var toolInput = ReadObject(wrapper, "input");
|
|
453
|
-
if (toolInput == null) throw new FormatException("
|
|
453
|
+
if (toolInput == null) throw new FormatException("catalog.player.run input must be an object.");
|
|
454
454
|
var execution = ReadObject(request, "execution");
|
|
455
455
|
object dryRunValue;
|
|
456
456
|
var dryRun = execution != null && execution.TryGetValue("dryRun", out dryRunValue) && dryRunValue is bool && (bool)dryRunValue;
|
|
@@ -472,10 +472,10 @@ namespace UnityCli
|
|
|
472
472
|
|
|
473
473
|
private static bool RuntimeCatalogReadCommand(string command)
|
|
474
474
|
{
|
|
475
|
-
return string.Equals(command, "
|
|
476
|
-
|| string.Equals(command, "
|
|
477
|
-
|| string.Equals(command, "
|
|
478
|
-
|| string.Equals(command, "
|
|
475
|
+
return string.Equals(command, "catalog.player.groups", StringComparison.Ordinal)
|
|
476
|
+
|| string.Equals(command, "catalog.player.summary", StringComparison.Ordinal)
|
|
477
|
+
|| string.Equals(command, "catalog.player.describe", StringComparison.Ordinal)
|
|
478
|
+
|| string.Equals(command, "catalog.player.list", StringComparison.Ordinal);
|
|
479
479
|
}
|
|
480
480
|
|
|
481
481
|
/// <summary>Runtime catalog是私有闭集协议;空执行器也必须拒绝畸形或无界输入。</summary>
|
|
@@ -490,12 +490,12 @@ namespace UnityCli
|
|
|
490
490
|
if (reserved == null || reserved.Count > 4096 || reserved.Any(value => !(value is string) || string.IsNullOrWhiteSpace((string)value) || Encoding.UTF8.GetByteCount((string)value) > 256))
|
|
491
491
|
throw new FormatException("Catalog reserved names exceed their bounded item or string limits.");
|
|
492
492
|
}
|
|
493
|
-
if (string.Equals(command, "
|
|
493
|
+
if (string.Equals(command, "catalog.player.groups", StringComparison.Ordinal))
|
|
494
494
|
{
|
|
495
495
|
if (!HasOnlyKeys(input, "expectedCatalogGeneration", "reservedNames")) throw new FormatException("Runtime catalog groups input contains an unknown field.");
|
|
496
496
|
return;
|
|
497
497
|
}
|
|
498
|
-
if (string.Equals(command, "
|
|
498
|
+
if (string.Equals(command, "catalog.player.summary", StringComparison.Ordinal))
|
|
499
499
|
{
|
|
500
500
|
if (!HasOnlyKeys(input, "group", "keyword", "limit", "expectedCatalogGeneration", "reservedNames", "localNames", "cursorContext", "cursorToken"))
|
|
501
501
|
throw new FormatException("Runtime catalog summary input contains an unknown field.");
|
|
@@ -514,7 +514,7 @@ namespace UnityCli
|
|
|
514
514
|
RuntimeCatalogStringList(input, "localNames", true);
|
|
515
515
|
return;
|
|
516
516
|
}
|
|
517
|
-
if (string.Equals(command, "
|
|
517
|
+
if (string.Equals(command, "catalog.player.describe", StringComparison.Ordinal))
|
|
518
518
|
{
|
|
519
519
|
if (!HasOnlyKeys(input, "name")) throw new FormatException("Runtime catalog describe input contains an unknown field.");
|
|
520
520
|
var name = RequiredString(input, "name", 256);
|
|
@@ -1077,7 +1077,7 @@ namespace UnityCli
|
|
|
1077
1077
|
{
|
|
1078
1078
|
if (newlyConsumed && admissionOwner != null && pool != null && !TryCompensateRuntimeAdmission(pool, admissionOwner))
|
|
1079
1079
|
{
|
|
1080
|
-
var terminal = Error(requestId, "E_RUNTIME_BRIDGE_FAILED", "Runtime queue publication failed and exact admission cleanup is pending.", new[] { "Inspect runtime.state before submitting a new request." });
|
|
1080
|
+
var terminal = Error(requestId, "E_RUNTIME_BRIDGE_FAILED", "Runtime queue publication failed and exact admission cleanup is pending.", new[] { "Inspect player-runtime.state before submitting a new request." });
|
|
1081
1081
|
FinalizeRuntimeRequest(work, terminal, 0);
|
|
1082
1082
|
return Publication(RuntimePublicationOutcome.Rejected, work, null);
|
|
1083
1083
|
}
|
|
@@ -131,7 +131,7 @@ namespace UnityCli
|
|
|
131
131
|
},
|
|
132
132
|
{ "progress", new List<object>() }, { "blockers", new List<object>() },
|
|
133
133
|
{ "unityVersion", Application.unityVersion }, { "buildStamp", buildStamp },
|
|
134
|
-
{ "toolCatalogFingerprint", "runtime-
|
|
134
|
+
{ "toolCatalogFingerprint", "player-runtime-executor" }, { "executablePath", executablePath }, { "buildId", buildId }
|
|
135
135
|
};
|
|
136
136
|
}
|
|
137
137
|
|