@alpsckr/unitycli 0.4.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/README.md +389 -0
- package/contracts/command-contract.json +3972 -0
- package/contracts/stable-session/admission-acquire-v1.schema.json +16 -0
- package/contracts/stable-session/admission-response-v1.schema.json +30 -0
- package/contracts/stable-session/admission-revoke-v1.schema.json +15 -0
- package/contracts/stable-session/admission-transport-v1.json +36 -0
- package/contracts/stable-session/bridge-request-v2.schema.json +26 -0
- package/contracts/stable-session/canonical-path-v1-golden.json +23 -0
- package/contracts/stable-session/completion-contract.schema.json +46 -0
- package/contracts/stable-session/direct-call-semantics.json +102 -0
- package/contracts/stable-session/editor-state.schema.json +92 -0
- package/contracts/stable-session/health-v3.schema.json +47 -0
- package/contracts/stable-session/instance-registry-v3.schema.json +152 -0
- package/contracts/stable-session/removal-map.json +27 -0
- package/contracts/stable-session/request-digest-v1-golden.json +7 -0
- package/contracts/stable-session/runtime-config-v2.schema.json +27 -0
- package/contracts/static-capability-catalog.json +48226 -0
- package/contracts/tool-completion-contract.json +11322 -0
- package/dist/args.d.ts +27 -0
- package/dist/args.js +109 -0
- package/dist/args.js.map +1 -0
- package/dist/bridge/admission.d.ts +28 -0
- package/dist/bridge/admission.js +29 -0
- package/dist/bridge/admission.js.map +1 -0
- package/dist/bridge/args.d.ts +16 -0
- package/dist/bridge/args.js +123 -0
- package/dist/bridge/args.js.map +1 -0
- package/dist/bridge/domains/animation.d.ts +2 -0
- package/dist/bridge/domains/animation.js +199 -0
- package/dist/bridge/domains/animation.js.map +1 -0
- package/dist/bridge/domains/asset.d.ts +2 -0
- package/dist/bridge/domains/asset.js +85 -0
- package/dist/bridge/domains/asset.js.map +1 -0
- package/dist/bridge/domains/build.d.ts +2 -0
- package/dist/bridge/domains/build.js +35 -0
- package/dist/bridge/domains/build.js.map +1 -0
- package/dist/bridge/domains/camera.d.ts +2 -0
- package/dist/bridge/domains/camera.js +54 -0
- package/dist/bridge/domains/camera.js.map +1 -0
- package/dist/bridge/domains/code.d.ts +2 -0
- package/dist/bridge/domains/code.js +17 -0
- package/dist/bridge/domains/code.js.map +1 -0
- package/dist/bridge/domains/console.d.ts +2 -0
- package/dist/bridge/domains/console.js +34 -0
- package/dist/bridge/domains/console.js.map +1 -0
- package/dist/bridge/domains/diagnose.d.ts +2 -0
- package/dist/bridge/domains/diagnose.js +11 -0
- package/dist/bridge/domains/diagnose.js.map +1 -0
- package/dist/bridge/domains/editor.d.ts +2 -0
- package/dist/bridge/domains/editor.js +66 -0
- package/dist/bridge/domains/editor.js.map +1 -0
- package/dist/bridge/domains/extension.d.ts +8 -0
- package/dist/bridge/domains/extension.js +20 -0
- package/dist/bridge/domains/extension.js.map +1 -0
- package/dist/bridge/domains/game-object.d.ts +2 -0
- package/dist/bridge/domains/game-object.js +179 -0
- package/dist/bridge/domains/game-object.js.map +1 -0
- package/dist/bridge/domains/graphics.d.ts +2 -0
- package/dist/bridge/domains/graphics.js +185 -0
- package/dist/bridge/domains/graphics.js.map +1 -0
- package/dist/bridge/domains/material.d.ts +2 -0
- package/dist/bridge/domains/material.js +70 -0
- package/dist/bridge/domains/material.js.map +1 -0
- package/dist/bridge/domains/navmesh.d.ts +2 -0
- package/dist/bridge/domains/navmesh.js +34 -0
- package/dist/bridge/domains/navmesh.js.map +1 -0
- package/dist/bridge/domains/object.d.ts +2 -0
- package/dist/bridge/domains/object.js +43 -0
- package/dist/bridge/domains/object.js.map +1 -0
- package/dist/bridge/domains/occlusion.d.ts +2 -0
- package/dist/bridge/domains/occlusion.js +12 -0
- package/dist/bridge/domains/occlusion.js.map +1 -0
- package/dist/bridge/domains/package.d.ts +2 -0
- package/dist/bridge/domains/package.js +2 -0
- package/dist/bridge/domains/package.js.map +1 -0
- package/dist/bridge/domains/physics.d.ts +2 -0
- package/dist/bridge/domains/physics.js +139 -0
- package/dist/bridge/domains/physics.js.map +1 -0
- package/dist/bridge/domains/prefab.d.ts +2 -0
- package/dist/bridge/domains/prefab.js +104 -0
- package/dist/bridge/domains/prefab.js.map +1 -0
- package/dist/bridge/domains/profiler.d.ts +2 -0
- package/dist/bridge/domains/profiler.js +105 -0
- package/dist/bridge/domains/profiler.js.map +1 -0
- package/dist/bridge/domains/project-tool.d.ts +2 -0
- package/dist/bridge/domains/project-tool.js +46 -0
- package/dist/bridge/domains/project-tool.js.map +1 -0
- package/dist/bridge/domains/reflection.d.ts +2 -0
- package/dist/bridge/domains/reflection.js +48 -0
- package/dist/bridge/domains/reflection.js.map +1 -0
- package/dist/bridge/domains/runtime-tool.d.ts +2 -0
- package/dist/bridge/domains/runtime-tool.js +48 -0
- package/dist/bridge/domains/runtime-tool.js.map +1 -0
- package/dist/bridge/domains/scene.d.ts +2 -0
- package/dist/bridge/domains/scene.js +100 -0
- package/dist/bridge/domains/scene.js.map +1 -0
- package/dist/bridge/domains/screenshot.d.ts +2 -0
- package/dist/bridge/domains/screenshot.js +85 -0
- package/dist/bridge/domains/screenshot.js.map +1 -0
- package/dist/bridge/domains/scriptable-object.d.ts +2 -0
- package/dist/bridge/domains/scriptable-object.js +53 -0
- package/dist/bridge/domains/scriptable-object.js.map +1 -0
- package/dist/bridge/domains/shader.d.ts +2 -0
- package/dist/bridge/domains/shader.js +66 -0
- package/dist/bridge/domains/shader.js.map +1 -0
- package/dist/bridge/domains/texture.d.ts +2 -0
- package/dist/bridge/domains/texture.js +78 -0
- package/dist/bridge/domains/texture.js.map +1 -0
- package/dist/bridge/domains/timeline.d.ts +2 -0
- package/dist/bridge/domains/timeline.js +75 -0
- package/dist/bridge/domains/timeline.js.map +1 -0
- package/dist/bridge/domains/ui.d.ts +2 -0
- package/dist/bridge/domains/ui.js +193 -0
- package/dist/bridge/domains/ui.js.map +1 -0
- package/dist/bridge/index.d.ts +9 -0
- package/dist/bridge/index.js +124 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/registry.d.ts +19 -0
- package/dist/bridge/registry.js +114 -0
- package/dist/bridge/registry.js.map +1 -0
- package/dist/bridge/session-supervisor.d.ts +138 -0
- package/dist/bridge/session-supervisor.js +873 -0
- package/dist/bridge/session-supervisor.js.map +1 -0
- package/dist/bridge/types.d.ts +61 -0
- package/dist/bridge/types.js +17 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/capabilities.d.ts +5 -0
- package/dist/capabilities.js +84 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/cli-commands/command.d.ts +7 -0
- package/dist/cli-commands/command.js +513 -0
- package/dist/cli-commands/command.js.map +1 -0
- package/dist/cli-commands/extension-auto-detect.d.ts +62 -0
- package/dist/cli-commands/extension-auto-detect.js +119 -0
- package/dist/cli-commands/extension-auto-detect.js.map +1 -0
- package/dist/cli-commands/extensions.d.ts +24 -0
- package/dist/cli-commands/extensions.js +428 -0
- package/dist/cli-commands/extensions.js.map +1 -0
- package/dist/cli-commands/package.d.ts +4 -0
- package/dist/cli-commands/package.js +151 -0
- package/dist/cli-commands/package.js.map +1 -0
- package/dist/cli-commands/skill-installer.d.ts +83 -0
- package/dist/cli-commands/skill-installer.js +703 -0
- package/dist/cli-commands/skill-installer.js.map +1 -0
- package/dist/cli-commands/types.d.ts +17 -0
- package/dist/cli-commands/types.js +2 -0
- package/dist/cli-commands/types.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.js +302 -0
- package/dist/cli.js.map +1 -0
- package/dist/contracts/command-contract.d.ts +21 -0
- package/dist/contracts/command-contract.js +143 -0
- package/dist/contracts/command-contract.js.map +1 -0
- package/dist/contracts/csharp-command-extractor.d.ts +1 -0
- package/dist/contracts/csharp-command-extractor.js +89 -0
- package/dist/contracts/csharp-command-extractor.js.map +1 -0
- package/dist/contracts/validate-command-contract.d.ts +1 -0
- package/dist/contracts/validate-command-contract.js +86 -0
- package/dist/contracts/validate-command-contract.js.map +1 -0
- package/dist/doctor.d.ts +22 -0
- package/dist/doctor.js +498 -0
- package/dist/doctor.js.map +1 -0
- package/dist/editor-blocker-observer.d.ts +45 -0
- package/dist/editor-blocker-observer.js +55 -0
- package/dist/editor-blocker-observer.js.map +1 -0
- package/dist/editor-dialogs.d.ts +53 -0
- package/dist/editor-dialogs.js +79 -0
- package/dist/editor-dialogs.js.map +1 -0
- package/dist/extension-availability.d.ts +30 -0
- package/dist/extension-availability.js +83 -0
- package/dist/extension-availability.js.map +1 -0
- package/dist/extensions/.generated-bridge-domains/cinemachine.d.ts +2 -0
- package/dist/extensions/.generated-bridge-domains/cinemachine.js +104 -0
- package/dist/extensions/.generated-bridge-domains/cinemachine.js.map +1 -0
- package/dist/extensions/.generated-bridge-domains/hdrp.d.ts +2 -0
- package/dist/extensions/.generated-bridge-domains/hdrp.js +35 -0
- package/dist/extensions/.generated-bridge-domains/hdrp.js.map +1 -0
- package/dist/extensions/.generated-bridge-domains/probuilder.d.ts +13 -0
- package/dist/extensions/.generated-bridge-domains/probuilder.js +342 -0
- package/dist/extensions/.generated-bridge-domains/probuilder.js.map +1 -0
- package/dist/extensions/.generated-bridge-domains/urp.d.ts +2 -0
- package/dist/extensions/.generated-bridge-domains/urp.js +52 -0
- package/dist/extensions/.generated-bridge-domains/urp.js.map +1 -0
- package/dist/extensions/.generated-bridge-domains/vfx.d.ts +2 -0
- package/dist/extensions/.generated-bridge-domains/vfx.js +312 -0
- package/dist/extensions/.generated-bridge-domains/vfx.js.map +1 -0
- package/dist/extensions/.generated-registry-data.d.ts +7 -0
- package/dist/extensions/.generated-registry-data.js +895 -0
- package/dist/extensions/.generated-registry-data.js.map +1 -0
- package/dist/extensions/contribution-loader.d.ts +27 -0
- package/dist/extensions/contribution-loader.js +60 -0
- package/dist/extensions/contribution-loader.js.map +1 -0
- package/dist/extensions/descriptor-loader.d.ts +73 -0
- package/dist/extensions/descriptor-loader.js +126 -0
- package/dist/extensions/descriptor-loader.js.map +1 -0
- package/dist/extensions/index.d.ts +19 -0
- package/dist/extensions/index.js +23 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/installer.d.ts +80 -0
- package/dist/extensions/installer.js +594 -0
- package/dist/extensions/installer.js.map +1 -0
- package/dist/extensions/metadata/index.d.ts +15 -0
- package/dist/extensions/metadata/index.js +41 -0
- package/dist/extensions/metadata/index.js.map +1 -0
- package/dist/extensions/metadata/types.d.ts +38 -0
- package/dist/extensions/metadata/types.js +11 -0
- package/dist/extensions/metadata/types.js.map +1 -0
- package/dist/extensions/project-resolver.d.ts +35 -0
- package/dist/extensions/project-resolver.js +61 -0
- package/dist/extensions/project-resolver.js.map +1 -0
- package/dist/extensions/registry.d.ts +86 -0
- package/dist/extensions/registry.js +262 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/tool-manifest.d.ts +29 -0
- package/dist/extensions/tool-manifest.js +53 -0
- package/dist/extensions/tool-manifest.js.map +1 -0
- package/dist/extensions/types.d.ts +115 -0
- package/dist/extensions/types.js +12 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/instances.d.ts +163 -0
- package/dist/instances.js +1137 -0
- package/dist/instances.js.map +1 -0
- package/dist/output.d.ts +119 -0
- package/dist/output.js +204 -0
- package/dist/output.js.map +1 -0
- package/dist/package-manager.d.ts +280 -0
- package/dist/package-manager.js +1832 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/platform.d.ts +3 -0
- package/dist/platform.js +19 -0
- package/dist/platform.js.map +1 -0
- package/dist/project-identity.d.ts +48 -0
- package/dist/project-identity.js +254 -0
- package/dist/project-identity.js.map +1 -0
- package/dist/project-tool-discovery.d.ts +23 -0
- package/dist/project-tool-discovery.js +292 -0
- package/dist/project-tool-discovery.js.map +1 -0
- package/dist/protocol/envelope.d.ts +64 -0
- package/dist/protocol/envelope.js +8 -0
- package/dist/protocol/envelope.js.map +1 -0
- package/dist/protocol/index.d.ts +7 -0
- package/dist/protocol/index.js +2 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/runtime-code.d.ts +20 -0
- package/dist/runtime-code.js +232 -0
- package/dist/runtime-code.js.map +1 -0
- package/dist/schema/any-json.d.ts +4 -0
- package/dist/schema/any-json.js +2 -0
- package/dist/schema/any-json.js.map +1 -0
- package/dist/schema/validator.d.ts +7 -0
- package/dist/schema/validator.js +135 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/services/docs-reflect-cache.d.ts +106 -0
- package/dist/services/docs-reflect-cache.js +301 -0
- package/dist/services/docs-reflect-cache.js.map +1 -0
- package/dist/services/docs-service.d.ts +16 -0
- package/dist/services/docs-service.js +208 -0
- package/dist/services/docs-service.js.map +1 -0
- package/dist/services/reflect-service.d.ts +12 -0
- package/dist/services/reflect-service.js +122 -0
- package/dist/services/reflect-service.js.map +1 -0
- package/dist/static-capability-catalog.d.ts +13 -0
- package/dist/static-capability-catalog.js +41 -0
- package/dist/static-capability-catalog.js.map +1 -0
- package/dist/test-results.d.ts +13 -0
- package/dist/test-results.js +44 -0
- package/dist/test-results.js.map +1 -0
- package/dist/tools/.generated-completion-registry.d.ts +17 -0
- package/dist/tools/.generated-completion-registry.js +5862 -0
- package/dist/tools/.generated-completion-registry.js.map +1 -0
- package/dist/tools/.generated-registry.d.ts +53 -0
- package/dist/tools/.generated-registry.js +55 -0
- package/dist/tools/.generated-registry.js.map +1 -0
- package/dist/tools/.generated-schemas.d.ts +1 -0
- package/dist/tools/.generated-schemas.js +56 -0
- package/dist/tools/.generated-schemas.js.map +1 -0
- package/dist/tools/asset/refresh.d.ts +26 -0
- package/dist/tools/asset/refresh.js +97 -0
- package/dist/tools/asset/refresh.js.map +1 -0
- package/dist/tools/build/run.d.ts +45 -0
- package/dist/tools/build/run.js +115 -0
- package/dist/tools/build/run.js.map +1 -0
- package/dist/tools/catalog.d.ts +33 -0
- package/dist/tools/catalog.js +202 -0
- package/dist/tools/catalog.js.map +1 -0
- package/dist/tools/code/exec.d.ts +53 -0
- package/dist/tools/code/exec.js +59 -0
- package/dist/tools/code/exec.js.map +1 -0
- package/dist/tools/commands.d.ts +5 -0
- package/dist/tools/commands.js +45 -0
- package/dist/tools/commands.js.map +1 -0
- package/dist/tools/completion-probe.d.ts +22 -0
- package/dist/tools/completion-probe.js +2 -0
- package/dist/tools/completion-probe.js.map +1 -0
- package/dist/tools/define.d.ts +77 -0
- package/dist/tools/define.js +58 -0
- package/dist/tools/define.js.map +1 -0
- package/dist/tools/diagnose/capabilities.d.ts +13 -0
- package/dist/tools/diagnose/capabilities.js +34 -0
- package/dist/tools/diagnose/capabilities.js.map +1 -0
- package/dist/tools/dispatcher.d.ts +27 -0
- package/dist/tools/dispatcher.js +971 -0
- package/dist/tools/dispatcher.js.map +1 -0
- package/dist/tools/docs/get.d.ts +22 -0
- package/dist/tools/docs/get.js +22 -0
- package/dist/tools/docs/get.js.map +1 -0
- package/dist/tools/docs/search.d.ts +31 -0
- package/dist/tools/docs/search.js +22 -0
- package/dist/tools/docs/search.js.map +1 -0
- package/dist/tools/editor/compile.d.ts +66 -0
- package/dist/tools/editor/compile.js +225 -0
- package/dist/tools/editor/compile.js.map +1 -0
- package/dist/tools/editor/dialog/click.d.ts +12 -0
- package/dist/tools/editor/dialog/click.js +71 -0
- package/dist/tools/editor/dialog/click.js.map +1 -0
- package/dist/tools/editor/dialogs.d.ts +12 -0
- package/dist/tools/editor/dialogs.js +58 -0
- package/dist/tools/editor/dialogs.js.map +1 -0
- package/dist/tools/editor/readiness.d.ts +13 -0
- package/dist/tools/editor/readiness.js +24 -0
- package/dist/tools/editor/readiness.js.map +1 -0
- package/dist/tools/editor/refresh.d.ts +25 -0
- package/dist/tools/editor/refresh.js +154 -0
- package/dist/tools/editor/refresh.js.map +1 -0
- package/dist/tools/editor/state.d.ts +63 -0
- package/dist/tools/editor/state.js +286 -0
- package/dist/tools/editor/state.js.map +1 -0
- package/dist/tools/errors.d.ts +30 -0
- package/dist/tools/errors.js +46 -0
- package/dist/tools/errors.js.map +1 -0
- package/dist/tools/metadata/derived.d.ts +34 -0
- package/dist/tools/metadata/derived.js +136 -0
- package/dist/tools/metadata/derived.js.map +1 -0
- package/dist/tools/metadata/index.d.ts +34 -0
- package/dist/tools/metadata/index.js +130 -0
- package/dist/tools/metadata/index.js.map +1 -0
- package/dist/tools/metadata/schemas.d.ts +3 -0
- package/dist/tools/metadata/schemas.js +19 -0
- package/dist/tools/metadata/schemas.js.map +1 -0
- package/dist/tools/metadata/status.d.ts +4 -0
- package/dist/tools/metadata/status.js +61 -0
- package/dist/tools/metadata/status.js.map +1 -0
- package/dist/tools/metadata/types.d.ts +79 -0
- package/dist/tools/metadata/types.js +2 -0
- package/dist/tools/metadata/types.js.map +1 -0
- package/dist/tools/navmesh/bake-cancel.d.ts +7 -0
- package/dist/tools/navmesh/bake-cancel.js +21 -0
- package/dist/tools/navmesh/bake-cancel.js.map +1 -0
- package/dist/tools/navmesh/bake-status.d.ts +5 -0
- package/dist/tools/navmesh/bake-status.js +18 -0
- package/dist/tools/navmesh/bake-status.js.map +1 -0
- package/dist/tools/navmesh/bake.d.ts +5 -0
- package/dist/tools/navmesh/bake.js +23 -0
- package/dist/tools/navmesh/bake.js.map +1 -0
- package/dist/tools/navmesh/live.d.ts +86 -0
- package/dist/tools/navmesh/live.js +206 -0
- package/dist/tools/navmesh/live.js.map +1 -0
- package/dist/tools/navmesh/surface-bake.d.ts +5 -0
- package/dist/tools/navmesh/surface-bake.js +24 -0
- package/dist/tools/navmesh/surface-bake.js.map +1 -0
- package/dist/tools/occlusion/bake-cancel.d.ts +7 -0
- package/dist/tools/occlusion/bake-cancel.js +21 -0
- package/dist/tools/occlusion/bake-cancel.js.map +1 -0
- package/dist/tools/occlusion/bake-status.d.ts +5 -0
- package/dist/tools/occlusion/bake-status.js +18 -0
- package/dist/tools/occlusion/bake-status.js.map +1 -0
- package/dist/tools/occlusion/bake.d.ts +11 -0
- package/dist/tools/occlusion/bake.js +23 -0
- package/dist/tools/occlusion/bake.js.map +1 -0
- package/dist/tools/occlusion/live.d.ts +74 -0
- package/dist/tools/occlusion/live.js +201 -0
- package/dist/tools/occlusion/live.js.map +1 -0
- package/dist/tools/package/bridge-remove.d.ts +26 -0
- package/dist/tools/package/bridge-remove.js +32 -0
- package/dist/tools/package/bridge-remove.js.map +1 -0
- package/dist/tools/package/deploy.d.ts +49 -0
- package/dist/tools/package/deploy.js +134 -0
- package/dist/tools/package/deploy.js.map +1 -0
- package/dist/tools/package/embed.d.ts +14 -0
- package/dist/tools/package/embed.js +93 -0
- package/dist/tools/package/embed.js.map +1 -0
- package/dist/tools/package/file-mutation-worker.d.ts +6 -0
- package/dist/tools/package/file-mutation-worker.js +154 -0
- package/dist/tools/package/file-mutation-worker.js.map +1 -0
- package/dist/tools/package/info.d.ts +19 -0
- package/dist/tools/package/info.js +27 -0
- package/dist/tools/package/info.js.map +1 -0
- package/dist/tools/package/install.d.ts +24 -0
- package/dist/tools/package/install.js +65 -0
- package/dist/tools/package/install.js.map +1 -0
- package/dist/tools/package/list.d.ts +27 -0
- package/dist/tools/package/list.js +21 -0
- package/dist/tools/package/list.js.map +1 -0
- package/dist/tools/package/live-resolve.d.ts +46 -0
- package/dist/tools/package/live-resolve.js +497 -0
- package/dist/tools/package/live-resolve.js.map +1 -0
- package/dist/tools/package/public-result.d.ts +4 -0
- package/dist/tools/package/public-result.js +25 -0
- package/dist/tools/package/public-result.js.map +1 -0
- package/dist/tools/package/registry-clear.d.ts +15 -0
- package/dist/tools/package/registry-clear.js +27 -0
- package/dist/tools/package/registry-clear.js.map +1 -0
- package/dist/tools/package/registry-get.d.ts +10 -0
- package/dist/tools/package/registry-get.js +22 -0
- package/dist/tools/package/registry-get.js.map +1 -0
- package/dist/tools/package/registry-set.d.ts +17 -0
- package/dist/tools/package/registry-set.js +28 -0
- package/dist/tools/package/registry-set.js.map +1 -0
- package/dist/tools/package/remove.d.ts +47 -0
- package/dist/tools/package/remove.js +67 -0
- package/dist/tools/package/remove.js.map +1 -0
- package/dist/tools/package/resolve.d.ts +6 -0
- package/dist/tools/package/resolve.js +14 -0
- package/dist/tools/package/resolve.js.map +1 -0
- package/dist/tools/package/restore.d.ts +42 -0
- package/dist/tools/package/restore.js +122 -0
- package/dist/tools/package/restore.js.map +1 -0
- package/dist/tools/package/scoped-registry-add.d.ts +25 -0
- package/dist/tools/package/scoped-registry-add.js +30 -0
- package/dist/tools/package/scoped-registry-add.js.map +1 -0
- package/dist/tools/package/scoped-registry-list.d.ts +14 -0
- package/dist/tools/package/scoped-registry-list.js +22 -0
- package/dist/tools/package/scoped-registry-list.js.map +1 -0
- package/dist/tools/package/scoped-registry-remove.d.ts +29 -0
- package/dist/tools/package/scoped-registry-remove.js +31 -0
- package/dist/tools/package/scoped-registry-remove.js.map +1 -0
- package/dist/tools/package/search.d.ts +17 -0
- package/dist/tools/package/search.js +39 -0
- package/dist/tools/package/search.js.map +1 -0
- package/dist/tools/package/status.d.ts +21 -0
- package/dist/tools/package/status.js +37 -0
- package/dist/tools/package/status.js.map +1 -0
- package/dist/tools/reflect/member.d.ts +22 -0
- package/dist/tools/reflect/member.js +22 -0
- package/dist/tools/reflect/member.js.map +1 -0
- package/dist/tools/reflect/search.d.ts +30 -0
- package/dist/tools/reflect/search.js +22 -0
- package/dist/tools/reflect/search.js.map +1 -0
- package/dist/tools/reflect/type.d.ts +21 -0
- package/dist/tools/reflect/type.js +22 -0
- package/dist/tools/reflect/type.js.map +1 -0
- package/dist/tools/runtime/console.d.ts +24 -0
- package/dist/tools/runtime/console.js +17 -0
- package/dist/tools/runtime/console.js.map +1 -0
- package/dist/tools/runtime/input/key.d.ts +23 -0
- package/dist/tools/runtime/input/key.js +18 -0
- package/dist/tools/runtime/input/key.js.map +1 -0
- package/dist/tools/runtime/input/pointer.d.ts +34 -0
- package/dist/tools/runtime/input/pointer.js +18 -0
- package/dist/tools/runtime/input/pointer.js.map +1 -0
- package/dist/tools/runtime/log.d.ts +20 -0
- package/dist/tools/runtime/log.js +17 -0
- package/dist/tools/runtime/log.js.map +1 -0
- package/dist/tools/runtime/state.d.ts +45 -0
- package/dist/tools/runtime/state.js +17 -0
- package/dist/tools/runtime/state.js.map +1 -0
- package/dist/tools/runtime/target-framerate/set.d.ts +16 -0
- package/dist/tools/runtime/target-framerate/set.js +17 -0
- package/dist/tools/runtime/target-framerate/set.js.map +1 -0
- package/dist/tools/runtime/time-scale/set.d.ts +16 -0
- package/dist/tools/runtime/time-scale/set.js +17 -0
- package/dist/tools/runtime/time-scale/set.js.map +1 -0
- package/dist/tools/runtime/ui/capture-element.d.ts +31 -0
- package/dist/tools/runtime/ui/capture-element.js +17 -0
- package/dist/tools/runtime/ui/capture-element.js.map +1 -0
- package/dist/tools/test/cancel.d.ts +19 -0
- package/dist/tools/test/cancel.js +94 -0
- package/dist/tools/test/cancel.js.map +1 -0
- package/dist/tools/test/run.d.ts +39 -0
- package/dist/tools/test/run.js +101 -0
- package/dist/tools/test/run.js.map +1 -0
- package/dist/tools/tools/describe.d.ts +27 -0
- package/dist/tools/tools/describe.js +35 -0
- package/dist/tools/tools/describe.js.map +1 -0
- package/dist/tools/tools/group-list.d.ts +20 -0
- package/dist/tools/tools/group-list.js +39 -0
- package/dist/tools/tools/group-list.js.map +1 -0
- package/dist/tools/tools/group-summaries.d.ts +3 -0
- package/dist/tools/tools/group-summaries.js +52 -0
- package/dist/tools/tools/group-summaries.js.map +1 -0
- package/dist/tools/tools/group.d.ts +13 -0
- package/dist/tools/tools/group.js +34 -0
- package/dist/tools/tools/group.js.map +1 -0
- package/dist/tools/tools/search.d.ts +17 -0
- package/dist/tools/tools/search.js +42 -0
- package/dist/tools/tools/search.js.map +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/unity-project-processes.d.ts +12 -0
- package/dist/unity-project-processes.js +59 -0
- package/dist/unity-project-processes.js.map +1 -0
- package/dist/util.d.ts +11 -0
- package/dist/util.js +22 -0
- package/dist/util.js.map +1 -0
- package/dist/windows-editor-state.d.ts +31 -0
- package/dist/windows-editor-state.js +98 -0
- package/dist/windows-editor-state.js.map +1 -0
- package/docs/README.md +43 -0
- package/docs/availability-differences.md +97 -0
- package/docs/command-execution.md +89 -0
- package/docs/error-codes.md +204 -0
- package/docs/extensions.md +132 -0
- package/docs/risk-and-side-effects.md +93 -0
- package/docs/safety-boundaries.md +103 -0
- package/docs/target-and-instance.md +83 -0
- package/docs/tool-discovery.md +104 -0
- package/docs/tool-execution.md +178 -0
- package/extensions/cinemachine/bridge/domains/cinemachine.ts +115 -0
- package/extensions/cinemachine/docs/cinemachine.md +50 -0
- package/extensions/cinemachine/extension.json +129 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/CinemachineExtensionToolSupport.cs +15 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/CinemachineToolSupport.cs +854 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/aim.cs +96 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/blend.cs +140 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/body.cs +96 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/brain-ensure.cs +16 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/brain-status.cs +12 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/create.cs +147 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/extension-add.cs +13 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/extension-list.cs +13 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/extension-remove.cs +13 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/lens.cs +142 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/noise.cs +126 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/ping.cs +43 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/priority.cs +113 -0
- package/extensions/cinemachine/unitypkg/Editor/Cinemachine/target.cs +84 -0
- package/extensions/cinemachine/unitypkg/UnityCli.Extensions.Cinemachine.Editor.asmdef +18 -0
- package/extensions/hdrp/bridge/domains/hdrp.ts +41 -0
- package/extensions/hdrp/docs/hdrp.md +15 -0
- package/extensions/hdrp/extension.json +31 -0
- package/extensions/hdrp/unitypkg/Editor/Hdrp/HdrpToolSupport.cs +607 -0
- package/extensions/hdrp/unitypkg/Editor/Hdrp/settings-get.cs +29 -0
- package/extensions/hdrp/unitypkg/Editor/Hdrp/settings-set.cs +47 -0
- package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-add-effect.cs +28 -0
- package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-create.cs +28 -0
- package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-info.cs +25 -0
- package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-list.cs +25 -0
- package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-set.cs +28 -0
- package/extensions/hdrp/unitypkg/UnityCli.Extensions.Hdrp.Editor.asmdef +19 -0
- package/extensions/probuilder/bridge/domains/probuilder.ts +386 -0
- package/extensions/probuilder/docs/probuilder.md +125 -0
- package/extensions/probuilder/extension.json +291 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderAppendCompletionProof.cs +254 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderAtomicReadback.cs +293 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderBevelCompletionProof.cs +299 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderCanonicalMeshSnapshot.cs +951 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderConnectCompletionProof.cs +407 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderEdgeCompletionProof.cs +318 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderErrors.cs +83 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderFaceCompletionProof.cs +152 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderFaceExtrudeCompletionProof.cs +283 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderFlipCompletionProof.cs +170 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderInput.cs +85 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderInsertCompletionProof.cs +674 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderOperationProof.cs +137 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderReflection.cs +1064 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderRefreshUvProof.cs +53 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderSceneTool.cs +184 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderShapeTopologyRecords.g.cs +82 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderVertexObjectCompletionProof.cs +346 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/append-vertices-to-edge.cs +118 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/auto-smooth.cs +104 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/bevel-edges.cs +119 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/bridge-edges.cs +113 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/center-pivot.cs +43 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/combine-meshes.cs +58 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/connect-elements.cs +128 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/convert-to-probuilder.cs +40 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/create-poly-shape.cs +55 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/create-polygon.cs +28 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/create-shape.cs +168 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/delete-faces.cs +42 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/detach-faces.cs +46 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/duplicate-and-flip.cs +100 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/extrude-edges.cs +118 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/extrude-faces.cs +110 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/flip-normals.cs +102 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/freeze-transform.cs +45 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/insert-vertex.cs +132 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/merge-faces.cs +44 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/merge-objects.cs +130 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/merge-vertices.cs +109 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/mesh-info.cs +117 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/move-vertices.cs +33 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/ping.cs +51 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/repair-mesh.cs +40 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/select-faces.cs +161 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-face-color.cs +24 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-face-material.cs +23 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-face-uvs.cs +28 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-pivot.cs +42 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-smoothing.cs +23 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/split-vertices.cs +64 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/subdivide.cs +111 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/validate-mesh.cs +75 -0
- package/extensions/probuilder/unitypkg/Editor/ProBuilder/weld-vertices.cs +112 -0
- package/extensions/probuilder/unitypkg/UnityCli.Extensions.ProBuilder.Editor.asmdef +25 -0
- package/extensions/urp/bridge/domains/urp.ts +62 -0
- package/extensions/urp/docs/urp.md +20 -0
- package/extensions/urp/extension.json +41 -0
- package/extensions/urp/unitypkg/Editor/Urp/UrpFeatureToolSupport.cs +336 -0
- package/extensions/urp/unitypkg/Editor/Urp/UrpToolSupport.cs +801 -0
- package/extensions/urp/unitypkg/Editor/Urp/feature-add.cs +12 -0
- package/extensions/urp/unitypkg/Editor/Urp/feature-configure.cs +12 -0
- package/extensions/urp/unitypkg/Editor/Urp/feature-list.cs +12 -0
- package/extensions/urp/unitypkg/Editor/Urp/feature-remove.cs +12 -0
- package/extensions/urp/unitypkg/Editor/Urp/feature-toggle.cs +12 -0
- package/extensions/urp/unitypkg/Editor/Urp/settings-get.cs +27 -0
- package/extensions/urp/unitypkg/Editor/Urp/settings-set.cs +47 -0
- package/extensions/urp/unitypkg/Editor/Urp/volume-add-effect.cs +33 -0
- package/extensions/urp/unitypkg/Editor/Urp/volume-create.cs +33 -0
- package/extensions/urp/unitypkg/Editor/Urp/volume-info.cs +31 -0
- package/extensions/urp/unitypkg/Editor/Urp/volume-list.cs +39 -0
- package/extensions/urp/unitypkg/Editor/Urp/volume-set.cs +33 -0
- package/extensions/urp/unitypkg/UnityCli.Extensions.Urp.Editor.asmdef +19 -0
- package/extensions/vfx-graph/bridge/domains/vfx.ts +337 -0
- package/extensions/vfx-graph/docs/vfx.md +28 -0
- package/extensions/vfx-graph/extension.json +72 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/VfxActionToolSupport.cs +248 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/VfxToolSupport.cs +1325 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-pause.cs +37 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-play.cs +40 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-reinitialize.cs +37 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-set-rate.cs +36 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-set-seed.cs +42 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-stop.cs +37 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/effect-add.cs +55 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/effect-assign.cs +44 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/effect-info.cs +30 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/graph-create.cs +62 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/graph-info.cs +32 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/line-create.cs +75 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/line-positions.cs +100 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/parameter.cs +216 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-clear.cs +39 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-create.cs +80 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-emission.cs +126 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-info.cs +55 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-main.cs +75 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-pause.cs +38 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-play.cs +38 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-shape.cs +148 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-stop.cs +41 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/template-create.cs +58 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/template-list.cs +31 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/trail-create.cs +41 -0
- package/extensions/vfx-graph/unitypkg/Editor/Vfx/trail-set.cs +44 -0
- package/extensions/vfx-graph/unitypkg/UnityCli.Extensions.VfxGraph.Editor.asmdef +18 -0
- package/package.json +46 -0
- package/schemas/error-code.schema.json +70 -0
- package/schemas/extension-descriptor.schema.json +88 -0
- package/schemas/extension-manifest.schema.json +125 -0
- package/schemas/request-envelope.schema.json +34 -0
- package/schemas/response-envelope.schema.json +42 -0
- package/schemas/tool-metadata.schema.json +111 -0
- package/skills/unitycli/SKILL.md +61 -0
- package/skills/unitycli/agents/interface.yaml +30 -0
- package/skills/unitycli/evals/history/2026-08-05-governed-baseline.json +44 -0
- package/skills/unitycli/evals/output/cases.jsonl +5 -0
- package/skills/unitycli/evals/output/fixtures/feedback-scenario.json +27 -0
- package/skills/unitycli/evals/output/schema.json +32 -0
- package/skills/unitycli/evals/semantic_config.json +46 -0
- package/skills/unitycli/evals/trigger_cases.json +39 -0
- package/skills/unitycli/examples/feedback-event.input.json +8 -0
- package/skills/unitycli/examples/feedback-record.output.json +12 -0
- package/skills/unitycli/manifest.json +112 -0
- package/skills/unitycli/references/custom-tools.md +111 -0
- package/skills/unitycli/references/feedback.md +59 -0
- package/skills/unitycli/references/operation-protocol.md +83 -0
- package/skills/unitycli/reports/output_quality_scorecard.md +56 -0
- package/skills/unitycli/reports/trust-report.md +57 -0
- package/skills/unitycli/scripts/record-feedback.ps1 +210 -0
- package/skills/unitycli/security/network_policy.json +18 -0
- package/skills/unitycli/security/permission_policy.json +40 -0
- package/unitypkg/Editor/Bridge/BridgeCommandContext.cs +64 -0
- package/unitypkg/Editor/Bridge/BridgeCommandException.cs +39 -0
- package/unitypkg/Editor/Bridge/BridgeCommandRegistry.cs +172 -0
- package/unitypkg/Editor/Bridge/BridgeHttpServer.cs +534 -0
- package/unitypkg/Editor/Bridge/BridgeResponse.cs +58 -0
- package/unitypkg/Editor/Bridge/BridgeWorkQueue.cs +325 -0
- package/unitypkg/Editor/BridgeStartupStateMachine.cs +81 -0
- package/unitypkg/Editor/Commands/ProjectToolCommands.cs +43 -0
- package/unitypkg/Editor/Commands/RuntimeToolCommands.cs +43 -0
- package/unitypkg/Editor/Generated/UnityCliToolCompletionRegistry.g.cs +428 -0
- package/unitypkg/Editor/Infrastructure/CodeExecSupport.cs +664 -0
- package/unitypkg/Editor/Infrastructure/RegistryOwnershipResolver.cs +148 -0
- package/unitypkg/Editor/Infrastructure/UnityCliActiveOperation.cs +411 -0
- package/unitypkg/Editor/Infrastructure/UnityCliAdmission.cs +485 -0
- package/unitypkg/Editor/Infrastructure/UnityCliArtifacts.cs +110 -0
- package/unitypkg/Editor/Infrastructure/UnityCliAssetRefreshCoordinator.cs +106 -0
- package/unitypkg/Editor/Infrastructure/UnityCliBridgeHelpers.cs +155 -0
- package/unitypkg/Editor/Infrastructure/UnityCliCanonicalProjectPath.cs +325 -0
- package/unitypkg/Editor/Infrastructure/UnityCliCompilationEventBroker.cs +192 -0
- package/unitypkg/Editor/Infrastructure/UnityCliCompileCoordinator.cs +271 -0
- package/unitypkg/Editor/Infrastructure/UnityCliCompletionProbe.cs +515 -0
- package/unitypkg/Editor/Infrastructure/UnityCliEditorStateSnapshot.cs +84 -0
- package/unitypkg/Editor/Infrastructure/UnityCliInstanceRegistry.cs +558 -0
- package/unitypkg/Editor/Infrastructure/UnityCliJson.cs +155 -0
- package/unitypkg/Editor/Infrastructure/UnityCliLargeOutput.cs +128 -0
- package/unitypkg/Editor/Infrastructure/UnityCliLiveBuildCoordinator.cs +230 -0
- package/unitypkg/Editor/Infrastructure/UnityCliLiveRefreshCoordinator.cs +164 -0
- package/unitypkg/Editor/Infrastructure/UnityCliLog.cs +127 -0
- package/unitypkg/Editor/Infrastructure/UnityCliNavMeshBakeCoordinator.cs +2073 -0
- package/unitypkg/Editor/Infrastructure/UnityCliObjectPatch.cs +193 -0
- package/unitypkg/Editor/Infrastructure/UnityCliObjectRef.cs +278 -0
- package/unitypkg/Editor/Infrastructure/UnityCliObjectSerializer.cs +620 -0
- package/unitypkg/Editor/Infrastructure/UnityCliOcclusionBakeCoordinator.cs +1739 -0
- package/unitypkg/Editor/Infrastructure/UnityCliOperationCoordinator.cs +828 -0
- package/unitypkg/Editor/Infrastructure/UnityCliPackageEmbedCoordinator.cs +147 -0
- package/unitypkg/Editor/Infrastructure/UnityCliPackageResolveCoordinator.cs +454 -0
- package/unitypkg/Editor/Infrastructure/UnityCliPackageResolveState.cs +561 -0
- package/unitypkg/Editor/Infrastructure/UnityCliPipelineHandoff.cs +742 -0
- package/unitypkg/Editor/Infrastructure/UnityCliProjectSettings.cs +92 -0
- package/unitypkg/Editor/Infrastructure/UnityCliProtocolRequest.cs +116 -0
- package/unitypkg/Editor/Infrastructure/UnityCliReflection.cs +477 -0
- package/unitypkg/Editor/Infrastructure/UnityCliReloadOperation.cs +664 -0
- package/unitypkg/Editor/Infrastructure/UnityCliRequestDigest.cs +34 -0
- package/unitypkg/Editor/Infrastructure/UnityCliRuntimeBuildInjection.cs +121 -0
- package/unitypkg/Editor/Infrastructure/UnityCliRuntimeExecutor.cs +391 -0
- package/unitypkg/Editor/Infrastructure/UnityCliSceneMutation.cs +84 -0
- package/unitypkg/Editor/Infrastructure/UnityCliScriptableObjectHelpers.cs +235 -0
- package/unitypkg/Editor/Infrastructure/UnityCliSerializer.cs +580 -0
- package/unitypkg/Editor/Infrastructure/UnityCliSessionMutationLease.cs +568 -0
- package/unitypkg/Editor/Infrastructure/UnityCliStateIO.cs +73 -0
- package/unitypkg/Editor/Infrastructure/UnityCliTestRunCoordinator.cs +598 -0
- package/unitypkg/Editor/Infrastructure/UnityCliTransactionLog.cs +112 -0
- package/unitypkg/Editor/Infrastructure/UnityCliValueConverter.cs +146 -0
- package/unitypkg/Editor/Infrastructure/UnityCliWaiter.cs +716 -0
- package/unitypkg/Editor/ProjectTools/IUnityCliTool.cs +152 -0
- package/unitypkg/Editor/ProjectTools/OfficialAttributeToolRegistry.cs +992 -0
- package/unitypkg/Editor/ProjectTools/ProjectToolRegistry.cs +938 -0
- package/unitypkg/Editor/ProjectTools/ProjectToolSchemaValidator.cs +258 -0
- package/unitypkg/Editor/ProjectTools/RegisteredTool.cs +75 -0
- package/unitypkg/Editor/ProjectTools/UnityCliProjectToolContext.cs +68 -0
- package/unitypkg/Editor/ProjectTools/UnityCliSchemaDeriver.cs +297 -0
- package/unitypkg/Editor/Protocol/ProtocolEnvelopeFactory.cs +92 -0
- package/unitypkg/Editor/Protocol/envelope.cs +50 -0
- package/unitypkg/Editor/Roslyn/LICENSE.txt +23 -0
- package/unitypkg/Editor/Roslyn/Microsoft.CodeAnalysis.CSharp.dll +0 -0
- package/unitypkg/Editor/Roslyn/Microsoft.CodeAnalysis.dll +0 -0
- package/unitypkg/Editor/Roslyn/System.Collections.Immutable.dll +0 -0
- package/unitypkg/Editor/Roslyn/System.Reflection.Metadata.dll +0 -0
- package/unitypkg/Editor/Tools/animation/AnimationToolSupport.cs +335 -0
- package/unitypkg/Editor/Tools/animation/AnimatorRuntimeToolSupport.cs +24 -0
- package/unitypkg/Editor/Tools/animation/animator/crossfade.cs +117 -0
- package/unitypkg/Editor/Tools/animation/animator/get-info.cs +24 -0
- package/unitypkg/Editor/Tools/animation/animator/get-parameter.cs +36 -0
- package/unitypkg/Editor/Tools/animation/animator/set-enabled.cs +33 -0
- package/unitypkg/Editor/Tools/animation/animator/set-parameter.cs +71 -0
- package/unitypkg/Editor/Tools/animation/animator/set-speed.cs +33 -0
- package/unitypkg/Editor/Tools/animation/clip/create.cs +48 -0
- package/unitypkg/Editor/Tools/animation/clip/modify.cs +43 -0
- package/unitypkg/Editor/Tools/animation/clip.cs +23 -0
- package/unitypkg/Editor/Tools/animation/play.cs +41 -0
- package/unitypkg/Editor/Tools/animation/state.cs +25 -0
- package/unitypkg/Editor/Tools/animation/stop.cs +45 -0
- package/unitypkg/Editor/Tools/asset/AssetImportSettingsToolSupport.cs +633 -0
- package/unitypkg/Editor/Tools/asset/AssetToolSupport.cs +253 -0
- package/unitypkg/Editor/Tools/asset/create.cs +84 -0
- package/unitypkg/Editor/Tools/asset/delete.cs +88 -0
- package/unitypkg/Editor/Tools/asset/duplicate.cs +68 -0
- package/unitypkg/Editor/Tools/asset/get-components.cs +177 -0
- package/unitypkg/Editor/Tools/asset/get-data.cs +73 -0
- package/unitypkg/Editor/Tools/asset/import-settings/set.cs +127 -0
- package/unitypkg/Editor/Tools/asset/import-settings.cs +54 -0
- package/unitypkg/Editor/Tools/asset/import.cs +132 -0
- package/unitypkg/Editor/Tools/asset/info.cs +48 -0
- package/unitypkg/Editor/Tools/asset/modify.cs +69 -0
- package/unitypkg/Editor/Tools/asset/move.cs +70 -0
- package/unitypkg/Editor/Tools/asset/preview.cs +86 -0
- package/unitypkg/Editor/Tools/asset/rename.cs +84 -0
- package/unitypkg/Editor/Tools/asset/search-built-in.cs +90 -0
- package/unitypkg/Editor/Tools/asset/search.cs +83 -0
- package/unitypkg/Editor/Tools/build/BuildSceneStateTool.cs +37 -0
- package/unitypkg/Editor/Tools/build/BuildSettingsToolSupport.cs +4 -0
- package/unitypkg/Editor/Tools/build/BuildToolDtos.cs +15 -0
- package/unitypkg/Editor/Tools/build/BuildToolSupport.cs +111 -0
- package/unitypkg/Editor/Tools/build/platform/get.cs +12 -0
- package/unitypkg/Editor/Tools/build/platform/set.cs +45 -0
- package/unitypkg/Editor/Tools/build/profile/create.cs +44 -0
- package/unitypkg/Editor/Tools/build/profile/list.cs +12 -0
- package/unitypkg/Editor/Tools/build/profile/modify.cs +42 -0
- package/unitypkg/Editor/Tools/build/profile/switch.cs +30 -0
- package/unitypkg/Editor/Tools/build/scene/add.cs +45 -0
- package/unitypkg/Editor/Tools/build/scene/disable.cs +3 -0
- package/unitypkg/Editor/Tools/build/scene/enable.cs +4 -0
- package/unitypkg/Editor/Tools/build/scene/list.cs +4 -0
- package/unitypkg/Editor/Tools/build/scene/remove.cs +29 -0
- package/unitypkg/Editor/Tools/build/settings/get.cs +3 -0
- package/unitypkg/Editor/Tools/build/settings/set.cs +74 -0
- package/unitypkg/Editor/Tools/camera/CameraToolSupport.cs +292 -0
- package/unitypkg/Editor/Tools/camera/create.cs +114 -0
- package/unitypkg/Editor/Tools/camera/info.cs +49 -0
- package/unitypkg/Editor/Tools/camera/lens.cs +119 -0
- package/unitypkg/Editor/Tools/camera/list.cs +52 -0
- package/unitypkg/Editor/Tools/camera/multiview.cs +96 -0
- package/unitypkg/Editor/Tools/camera/screenshot.cs +65 -0
- package/unitypkg/Editor/Tools/camera/target.cs +94 -0
- package/unitypkg/Editor/Tools/component/add.cs +125 -0
- package/unitypkg/Editor/Tools/component/get.cs +73 -0
- package/unitypkg/Editor/Tools/component/list-types.cs +90 -0
- package/unitypkg/Editor/Tools/component/modify.cs +103 -0
- package/unitypkg/Editor/Tools/component/remove.cs +147 -0
- package/unitypkg/Editor/Tools/component/set.cs +93 -0
- package/unitypkg/Editor/Tools/console/clear.cs +38 -0
- package/unitypkg/Editor/Tools/console/get.cs +28 -0
- package/unitypkg/Editor/Tools/controller/add-blend-tree-child.cs +88 -0
- package/unitypkg/Editor/Tools/controller/add-layer.cs +43 -0
- package/unitypkg/Editor/Tools/controller/add-parameter.cs +51 -0
- package/unitypkg/Editor/Tools/controller/add-state.cs +44 -0
- package/unitypkg/Editor/Tools/controller/add-transition.cs +71 -0
- package/unitypkg/Editor/Tools/controller/assign.cs +38 -0
- package/unitypkg/Editor/Tools/controller/create-blend-tree-1d.cs +40 -0
- package/unitypkg/Editor/Tools/controller/create-blend-tree-2d.cs +42 -0
- package/unitypkg/Editor/Tools/controller/create.cs +31 -0
- package/unitypkg/Editor/Tools/controller/get-info.cs +27 -0
- package/unitypkg/Editor/Tools/controller/remove-layer.cs +57 -0
- package/unitypkg/Editor/Tools/controller/set-layer-weight.cs +42 -0
- package/unitypkg/Editor/Tools/diagnose/preflight.cs +269 -0
- package/unitypkg/Editor/Tools/editor/EditorActionToolSupport.cs +117 -0
- package/unitypkg/Editor/Tools/editor/EditorSearchToolSupport.cs +146 -0
- package/unitypkg/Editor/Tools/editor/EditorToolSupport.cs +132 -0
- package/unitypkg/Editor/Tools/editor/EditorWindowFocusToolSupport.cs +194 -0
- package/unitypkg/Editor/Tools/editor/active-tool/set.cs +33 -0
- package/unitypkg/Editor/Tools/editor/active-tool.cs +100 -0
- package/unitypkg/Editor/Tools/editor/autotick/set.cs +102 -0
- package/unitypkg/Editor/Tools/editor/console.cs +26 -0
- package/unitypkg/Editor/Tools/editor/focus.cs +80 -0
- package/unitypkg/Editor/Tools/editor/menu-items.cs +50 -0
- package/unitypkg/Editor/Tools/editor/menu.cs +53 -0
- package/unitypkg/Editor/Tools/editor/pause.cs +38 -0
- package/unitypkg/Editor/Tools/editor/play.cs +43 -0
- package/unitypkg/Editor/Tools/editor/redo.cs +56 -0
- package/unitypkg/Editor/Tools/editor/resolution.cs +34 -0
- package/unitypkg/Editor/Tools/editor/search.cs +55 -0
- package/unitypkg/Editor/Tools/editor/selection/set.cs +37 -0
- package/unitypkg/Editor/Tools/editor/selection.cs +153 -0
- package/unitypkg/Editor/Tools/editor/stop.cs +43 -0
- package/unitypkg/Editor/Tools/editor/tool-states.cs +140 -0
- package/unitypkg/Editor/Tools/editor/undo.cs +56 -0
- package/unitypkg/Editor/Tools/editor/windows.cs +87 -0
- package/unitypkg/Editor/Tools/extension/status.cs +87 -0
- package/unitypkg/Editor/Tools/go/GameObjectToolSupport.cs +524 -0
- package/unitypkg/Editor/Tools/go/create.cs +333 -0
- package/unitypkg/Editor/Tools/go/delete.cs +87 -0
- package/unitypkg/Editor/Tools/go/duplicate.cs +76 -0
- package/unitypkg/Editor/Tools/go/find.cs +152 -0
- package/unitypkg/Editor/Tools/go/inspect.cs +49 -0
- package/unitypkg/Editor/Tools/go/look-at.cs +76 -0
- package/unitypkg/Editor/Tools/go/modify.cs +156 -0
- package/unitypkg/Editor/Tools/go/move-relative.cs +74 -0
- package/unitypkg/Editor/Tools/go/set-parent.cs +84 -0
- package/unitypkg/Editor/Tools/graphics/GraphicsToolSupport.cs +396 -0
- package/unitypkg/Editor/Tools/graphics/bake-cancel.cs +27 -0
- package/unitypkg/Editor/Tools/graphics/bake-clear.cs +31 -0
- package/unitypkg/Editor/Tools/graphics/bake-reflection-probe.cs +35 -0
- package/unitypkg/Editor/Tools/graphics/bake-settings.cs +131 -0
- package/unitypkg/Editor/Tools/graphics/bake-start.cs +27 -0
- package/unitypkg/Editor/Tools/graphics/bake-status.cs +31 -0
- package/unitypkg/Editor/Tools/graphics/light-probe-group.cs +56 -0
- package/unitypkg/Editor/Tools/graphics/pipeline-info.cs +19 -0
- package/unitypkg/Editor/Tools/graphics/pipeline-quality.cs +24 -0
- package/unitypkg/Editor/Tools/graphics/pipeline-settings.cs +46 -0
- package/unitypkg/Editor/Tools/graphics/probe-positions.cs +58 -0
- package/unitypkg/Editor/Tools/graphics/quality.cs +85 -0
- package/unitypkg/Editor/Tools/graphics/reflection-probe.cs +73 -0
- package/unitypkg/Editor/Tools/graphics/scene-debug.cs +37 -0
- package/unitypkg/Editor/Tools/graphics/settings.cs +104 -0
- package/unitypkg/Editor/Tools/graphics/skybox-get.cs +33 -0
- package/unitypkg/Editor/Tools/graphics/skybox-set-ambient.cs +24 -0
- package/unitypkg/Editor/Tools/graphics/skybox-set-fog.cs +24 -0
- package/unitypkg/Editor/Tools/graphics/skybox-set-material.cs +33 -0
- package/unitypkg/Editor/Tools/graphics/skybox-set-properties.cs +51 -0
- package/unitypkg/Editor/Tools/graphics/skybox-set-reflection.cs +31 -0
- package/unitypkg/Editor/Tools/graphics/skybox-set-sun.cs +35 -0
- package/unitypkg/Editor/Tools/graphics/stats-counters.cs +28 -0
- package/unitypkg/Editor/Tools/graphics/stats-memory.cs +21 -0
- package/unitypkg/Editor/Tools/graphics/stats.cs +17 -0
- package/unitypkg/Editor/Tools/graphics/volume.cs +59 -0
- package/unitypkg/Editor/Tools/instances/list.cs +71 -0
- package/unitypkg/Editor/Tools/material/MaterialToolSupport.cs +401 -0
- package/unitypkg/Editor/Tools/material/assign.cs +124 -0
- package/unitypkg/Editor/Tools/material/create.cs +82 -0
- package/unitypkg/Editor/Tools/material/info.cs +55 -0
- package/unitypkg/Editor/Tools/material/set-renderer-color.cs +108 -0
- package/unitypkg/Editor/Tools/material/set.cs +114 -0
- package/unitypkg/Editor/Tools/navmesh/NavMeshToolSupport.cs +404 -0
- package/unitypkg/Editor/Tools/navmesh/bake-clear.cs +70 -0
- package/unitypkg/Editor/Tools/navmesh/settings/set.cs +73 -0
- package/unitypkg/Editor/Tools/navmesh/settings.cs +37 -0
- package/unitypkg/Editor/Tools/object/ObjectToolSupport.cs +99 -0
- package/unitypkg/Editor/Tools/object/get-data.cs +69 -0
- package/unitypkg/Editor/Tools/object/modify.cs +126 -0
- package/unitypkg/Editor/Tools/occlusion/OcclusionToolSupport.cs +422 -0
- package/unitypkg/Editor/Tools/occlusion/bake-clear.cs +67 -0
- package/unitypkg/Editor/Tools/physics/PhysicsJointToolSupport.cs +13 -0
- package/unitypkg/Editor/Tools/physics/PhysicsToolSupport.cs +389 -0
- package/unitypkg/Editor/Tools/physics/assign-material.cs +88 -0
- package/unitypkg/Editor/Tools/physics/collision-matrix.cs +90 -0
- package/unitypkg/Editor/Tools/physics/force.cs +127 -0
- package/unitypkg/Editor/Tools/physics/joint/add.cs +99 -0
- package/unitypkg/Editor/Tools/physics/joint/remove.cs +4 -0
- package/unitypkg/Editor/Tools/physics/linecast.cs +59 -0
- package/unitypkg/Editor/Tools/physics/material.cs +73 -0
- package/unitypkg/Editor/Tools/physics/overlap.cs +84 -0
- package/unitypkg/Editor/Tools/physics/raycast-all.cs +67 -0
- package/unitypkg/Editor/Tools/physics/raycast.cs +96 -0
- package/unitypkg/Editor/Tools/physics/rigidbody.cs +116 -0
- package/unitypkg/Editor/Tools/physics/settings.cs +116 -0
- package/unitypkg/Editor/Tools/physics/shapecast.cs +127 -0
- package/unitypkg/Editor/Tools/physics/simulation.cs +89 -0
- package/unitypkg/Editor/Tools/physics/validate.cs +67 -0
- package/unitypkg/Editor/Tools/prefab/PrefabOverrideToolSupport.cs +355 -0
- package/unitypkg/Editor/Tools/prefab/PrefabToolSupport.cs +446 -0
- package/unitypkg/Editor/Tools/prefab/create.cs +125 -0
- package/unitypkg/Editor/Tools/prefab/hierarchy.cs +157 -0
- package/unitypkg/Editor/Tools/prefab/info.cs +44 -0
- package/unitypkg/Editor/Tools/prefab/instantiate.cs +106 -0
- package/unitypkg/Editor/Tools/prefab/modify.cs +112 -0
- package/unitypkg/Editor/Tools/prefab/overrides/apply.cs +51 -0
- package/unitypkg/Editor/Tools/prefab/overrides/revert.cs +51 -0
- package/unitypkg/Editor/Tools/prefab/stage-close.cs +67 -0
- package/unitypkg/Editor/Tools/prefab/stage-open.cs +69 -0
- package/unitypkg/Editor/Tools/prefab/stage-save.cs +64 -0
- package/unitypkg/Editor/Tools/prefab/stage.cs +68 -0
- package/unitypkg/Editor/Tools/prefab/unpack.cs +80 -0
- package/unitypkg/Editor/Tools/prefab/variant/create.cs +53 -0
- package/unitypkg/Editor/Tools/profiler/ProfilerFrameDebuggerSupport.cs +68 -0
- package/unitypkg/Editor/Tools/profiler/ProfilerMemorySnapshotSupport.cs +30 -0
- package/unitypkg/Editor/Tools/profiler/ProfilerToolSupport.cs +515 -0
- package/unitypkg/Editor/Tools/profiler/areas.cs +36 -0
- package/unitypkg/Editor/Tools/profiler/capture.cs +188 -0
- package/unitypkg/Editor/Tools/profiler/clear.cs +57 -0
- package/unitypkg/Editor/Tools/profiler/counter.cs +34 -0
- package/unitypkg/Editor/Tools/profiler/deep.cs +48 -0
- package/unitypkg/Editor/Tools/profiler/export.cs +85 -0
- package/unitypkg/Editor/Tools/profiler/frame-debugger/disable.cs +53 -0
- package/unitypkg/Editor/Tools/profiler/frame-debugger/enable.cs +66 -0
- package/unitypkg/Editor/Tools/profiler/frame-debugger/events.cs +140 -0
- package/unitypkg/Editor/Tools/profiler/frame.cs +38 -0
- package/unitypkg/Editor/Tools/profiler/hierarchy.cs +183 -0
- package/unitypkg/Editor/Tools/profiler/load.cs +85 -0
- package/unitypkg/Editor/Tools/profiler/memory-snapshot/compare.cs +78 -0
- package/unitypkg/Editor/Tools/profiler/memory-snapshot/list.cs +73 -0
- package/unitypkg/Editor/Tools/profiler/memory-snapshot/take.cs +147 -0
- package/unitypkg/Editor/Tools/profiler/memory.cs +34 -0
- package/unitypkg/Editor/Tools/profiler/module-enable.cs +52 -0
- package/unitypkg/Editor/Tools/profiler/modules.cs +33 -0
- package/unitypkg/Editor/Tools/profiler/object-memory.cs +49 -0
- package/unitypkg/Editor/Tools/profiler/pause.cs +49 -0
- package/unitypkg/Editor/Tools/profiler/rendering-stats.cs +109 -0
- package/unitypkg/Editor/Tools/profiler/script-stats.cs +35 -0
- package/unitypkg/Editor/Tools/profiler/start.cs +55 -0
- package/unitypkg/Editor/Tools/profiler/status.cs +36 -0
- package/unitypkg/Editor/Tools/profiler/stop.cs +53 -0
- package/unitypkg/Editor/Tools/project/ProjectSettingsReader.cs +31 -0
- package/unitypkg/Editor/Tools/project/ProjectSettingsToolSupport.cs +757 -0
- package/unitypkg/Editor/Tools/project/ProjectTagLayerToolSupport.cs +23 -0
- package/unitypkg/Editor/Tools/project/audio-settings/set.cs +35 -0
- package/unitypkg/Editor/Tools/project/audio-settings.cs +31 -0
- package/unitypkg/Editor/Tools/project/info.cs +52 -0
- package/unitypkg/Editor/Tools/project/input-settings/set.cs +35 -0
- package/unitypkg/Editor/Tools/project/input-settings.cs +35 -0
- package/unitypkg/Editor/Tools/project/layer/add.cs +3 -0
- package/unitypkg/Editor/Tools/project/layer/remove.cs +3 -0
- package/unitypkg/Editor/Tools/project/layers.cs +61 -0
- package/unitypkg/Editor/Tools/project/player-settings/set.cs +35 -0
- package/unitypkg/Editor/Tools/project/player-settings.cs +31 -0
- package/unitypkg/Editor/Tools/project/tag/add.cs +3 -0
- package/unitypkg/Editor/Tools/project/tag/remove.cs +3 -0
- package/unitypkg/Editor/Tools/project/tags.cs +45 -0
- package/unitypkg/Editor/Tools/project/time-settings/set.cs +35 -0
- package/unitypkg/Editor/Tools/project/time-settings.cs +31 -0
- package/unitypkg/Editor/Tools/reflection/method/call.cs +114 -0
- package/unitypkg/Editor/Tools/reflection/method/find.cs +72 -0
- package/unitypkg/Editor/Tools/reflection/type/schema.cs +56 -0
- package/unitypkg/Editor/Tools/scene/SceneToolSupport.cs +181 -0
- package/unitypkg/Editor/Tools/scene/active.cs +62 -0
- package/unitypkg/Editor/Tools/scene/build-settings.cs +69 -0
- package/unitypkg/Editor/Tools/scene/create.cs +78 -0
- package/unitypkg/Editor/Tools/scene/data.cs +125 -0
- package/unitypkg/Editor/Tools/scene/gameobject/component.cs +63 -0
- package/unitypkg/Editor/Tools/scene/gameobject/components.cs +77 -0
- package/unitypkg/Editor/Tools/scene/gameobject-support.cs +101 -0
- package/unitypkg/Editor/Tools/scene/gameobject.cs +83 -0
- package/unitypkg/Editor/Tools/scene/hierarchy.cs +250 -0
- package/unitypkg/Editor/Tools/scene/list-opened.cs +77 -0
- package/unitypkg/Editor/Tools/scene/load.cs +68 -0
- package/unitypkg/Editor/Tools/scene/move-object.cs +122 -0
- package/unitypkg/Editor/Tools/scene/save.cs +231 -0
- package/unitypkg/Editor/Tools/scene/set-active.cs +76 -0
- package/unitypkg/Editor/Tools/scene/unload.cs +109 -0
- package/unitypkg/Editor/Tools/scene/validate.cs +115 -0
- package/unitypkg/Editor/Tools/scene/view-frame.cs +218 -0
- package/unitypkg/Editor/Tools/screenshot/EditorElementCaptureToolSupport.cs +181 -0
- package/unitypkg/Editor/Tools/screenshot/ScreenshotToolSupport.cs +196 -0
- package/unitypkg/Editor/Tools/screenshot/editor-element.cs +87 -0
- package/unitypkg/Editor/Tools/screenshot/game-view.cs +116 -0
- package/unitypkg/Editor/Tools/screenshot/isolated-object.cs +93 -0
- package/unitypkg/Editor/Tools/screenshot/orbit.cs +103 -0
- package/unitypkg/Editor/Tools/screenshot/scene-view.cs +99 -0
- package/unitypkg/Editor/Tools/screenshot/screen.cs +89 -0
- package/unitypkg/Editor/Tools/screenshot/surround.cs +181 -0
- package/unitypkg/Editor/Tools/scriptable-object/ScriptableObjectToolSupport.cs +196 -0
- package/unitypkg/Editor/Tools/scriptable-object/create.cs +79 -0
- package/unitypkg/Editor/Tools/scriptable-object/info.cs +49 -0
- package/unitypkg/Editor/Tools/scriptable-object/list-types.cs +103 -0
- package/unitypkg/Editor/Tools/scriptable-object/modify.cs +208 -0
- package/unitypkg/Editor/Tools/shader/ShaderToolSupport.cs +326 -0
- package/unitypkg/Editor/Tools/shader/create.cs +82 -0
- package/unitypkg/Editor/Tools/shader/delete.cs +90 -0
- package/unitypkg/Editor/Tools/shader/get-data.cs +125 -0
- package/unitypkg/Editor/Tools/shader/info.cs +48 -0
- package/unitypkg/Editor/Tools/shader/list.cs +82 -0
- package/unitypkg/Editor/Tools/shader/read.cs +84 -0
- package/unitypkg/Editor/Tools/shader/update.cs +71 -0
- package/unitypkg/Editor/Tools/tests/list.cs +98 -0
- package/unitypkg/Editor/Tools/texture/TextureToolSupport.cs +327 -0
- package/unitypkg/Editor/Tools/texture/create.cs +182 -0
- package/unitypkg/Editor/Tools/texture/delete.cs +89 -0
- package/unitypkg/Editor/Tools/texture/generate.cs +189 -0
- package/unitypkg/Editor/Tools/texture/import-settings.cs +104 -0
- package/unitypkg/Editor/Tools/texture/info.cs +50 -0
- package/unitypkg/Editor/Tools/texture/modify.cs +154 -0
- package/unitypkg/Editor/Tools/texture/sprite.cs +132 -0
- package/unitypkg/Editor/Tools/timeline/TimelineMutationToolSupport.cs +696 -0
- package/unitypkg/Editor/Tools/timeline/TimelineReadToolSupport.cs +439 -0
- package/unitypkg/Editor/Tools/timeline/TimelineToolSupport.cs +203 -0
- package/unitypkg/Editor/Tools/timeline/clip/add.cs +93 -0
- package/unitypkg/Editor/Tools/timeline/create.cs +88 -0
- package/unitypkg/Editor/Tools/timeline/info.cs +54 -0
- package/unitypkg/Editor/Tools/timeline/track/add.cs +91 -0
- package/unitypkg/Editor/Tools/ui/UiToolSupport.cs +162 -0
- package/unitypkg/Editor/Tools/ui/UiUguiToolSupport.cs +24 -0
- package/unitypkg/Editor/Tools/ui/attach-document.cs +46 -0
- package/unitypkg/Editor/Tools/ui/button/create.cs +58 -0
- package/unitypkg/Editor/Tools/ui/canvas/create.cs +40 -0
- package/unitypkg/Editor/Tools/ui/create-panel-settings.cs +44 -0
- package/unitypkg/Editor/Tools/ui/detach-document.cs +41 -0
- package/unitypkg/Editor/Tools/ui/document/create.cs +49 -0
- package/unitypkg/Editor/Tools/ui/document/delete.cs +33 -0
- package/unitypkg/Editor/Tools/ui/document/info.cs +33 -0
- package/unitypkg/Editor/Tools/ui/document/update.cs +36 -0
- package/unitypkg/Editor/Tools/ui/get-visual-tree.cs +34 -0
- package/unitypkg/Editor/Tools/ui/hierarchy.cs +27 -0
- package/unitypkg/Editor/Tools/ui/image/create.cs +47 -0
- package/unitypkg/Editor/Tools/ui/link-stylesheet.cs +54 -0
- package/unitypkg/Editor/Tools/ui/list-documents.cs +34 -0
- package/unitypkg/Editor/Tools/ui/modify-visual-element.cs +76 -0
- package/unitypkg/Editor/Tools/ui/render-preview.cs +128 -0
- package/unitypkg/Editor/Tools/ui/text/create.cs +45 -0
- package/unitypkg/Editor/Tools/ui/update-panel-settings.cs +49 -0
- package/unitypkg/Editor/UnityCliBridge.cs +431 -0
- package/unitypkg/Editor/UnityCliBridgeBuildInfo.cs +9 -0
- package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeBridge.cs +580 -0
- package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeJson.cs +232 -0
- package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeRegistry.cs +297 -0
- package/unitypkg/Runtime/Tools/UnityCliRuntimeTools.cs +701 -0
- package/unitypkg/Runtime/UnityCli.Runtime.asmdef +14 -0
- package/unitypkg/Shared/UnityCli.Shared.asmdef +14 -0
- package/unitypkg/Shared/UnityCliAdmissionPool.cs +426 -0
- package/unitypkg/Tests/Editor/UnityCli.Editor.Tests.asmdef +15 -0
- package/unitypkg/Tests/Editor/UnityCliAdmissionPoolTests.cs +262 -0
- package/unitypkg/UnityCli.Editor.asmdef +26 -0
- package/unitypkg/package.json +11 -0
|
@@ -0,0 +1,828 @@
|
|
|
1
|
+
#if UNITY_EDITOR
|
|
2
|
+
using System;
|
|
3
|
+
using System.Collections;
|
|
4
|
+
using System.Collections.Generic;
|
|
5
|
+
using System.Globalization;
|
|
6
|
+
using System.IO;
|
|
7
|
+
using System.Linq;
|
|
8
|
+
using System.Security.Cryptography;
|
|
9
|
+
using System.Text;
|
|
10
|
+
using System.Threading;
|
|
11
|
+
using System.Threading.Tasks;
|
|
12
|
+
using UnityCli.Protocol;
|
|
13
|
+
using UnityEditor;
|
|
14
|
+
using UnityEngine;
|
|
15
|
+
using UnityEngine.Rendering;
|
|
16
|
+
|
|
17
|
+
namespace UnityCli
|
|
18
|
+
{
|
|
19
|
+
public static partial class UnityCliBridge
|
|
20
|
+
{
|
|
21
|
+
private sealed class CompletionEvidence
|
|
22
|
+
{
|
|
23
|
+
public string RequestId;
|
|
24
|
+
public string ToolName;
|
|
25
|
+
public string CompletionDriverId;
|
|
26
|
+
public string ProofKind;
|
|
27
|
+
public byte[] ProofBytes;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private static readonly object CompletionEvidenceLock = new object();
|
|
31
|
+
private static readonly Dictionary<string, CompletionEvidence> CompletionEvidenceByRequest = new Dictionary<string, CompletionEvidence>(StringComparer.Ordinal);
|
|
32
|
+
private static readonly HashSet<string> RegisteredCompletionDriverIds = new HashSet<string>(new[]
|
|
33
|
+
{
|
|
34
|
+
"atomic-typed-result-v1",
|
|
35
|
+
"observed-terminal-readback-v1",
|
|
36
|
+
"active-operation-terminal-readback-v1",
|
|
37
|
+
"external-terminal-readback-v1",
|
|
38
|
+
"official-method-return-v1"
|
|
39
|
+
}, StringComparer.Ordinal);
|
|
40
|
+
private const string DirectMutationRequestIdSessionKey = "UnityCli.DirectMutation.RequestId";
|
|
41
|
+
private const string DirectMutationRequestDigestSessionKey = "UnityCli.DirectMutation.RequestDigest";
|
|
42
|
+
private const string DirectMutationCleanupPendingSessionKey = "UnityCli.DirectMutation.CleanupPending";
|
|
43
|
+
private const string DirectMutationEffectCommittedSessionKey = "UnityCli.DirectMutation.EffectCommitted";
|
|
44
|
+
private const string DirectMutationTerminalScope = "direct-mutation";
|
|
45
|
+
private const int MaxDirectMutationTerminalBytes = 1536 * 1024;
|
|
46
|
+
|
|
47
|
+
/// <summary>
|
|
48
|
+
/// live HTTP Tool 的唯一完成协调器。mutation 成功只能消费 Tool runner 显式登记的 typed evidence;
|
|
49
|
+
/// 普通 handler envelope、transport success 与中间状态不能跨过 effect_proven barrier。
|
|
50
|
+
/// </summary>
|
|
51
|
+
private static async Task<string> ExecuteCoordinatedRequest(BridgeRequest request, byte[] rawRequestBytes, Func<bool> tryAcceptJournal, CancellationToken cancellationToken)
|
|
52
|
+
{
|
|
53
|
+
// 私有 compile start/status 必须绕开通用 completion 路径;start 的 accepted 不是公开 terminal。
|
|
54
|
+
if (UnityCliCompileCoordinator.IsCommand(request.Command))
|
|
55
|
+
return await UnityCliCompileCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
56
|
+
// coordinator-owned roots own their journal and must never enter the direct handler path.
|
|
57
|
+
if (UnityCliLiveBuildCoordinator.IsCommand(request.Command))
|
|
58
|
+
return await UnityCliLiveBuildCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
59
|
+
if (UnityCliLiveRefreshCoordinator.IsCommand(request.Command))
|
|
60
|
+
return await UnityCliLiveRefreshCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
61
|
+
if (UnityCliAssetRefreshCoordinator.IsCommand(request.Command))
|
|
62
|
+
return await UnityCliAssetRefreshCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
63
|
+
if (UnityCliPackageEmbedCoordinator.IsCommand(request.Command))
|
|
64
|
+
return await UnityCliPackageEmbedCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
65
|
+
if (UnityCliPackageResolveCoordinator.IsCommand(request.Command))
|
|
66
|
+
return await UnityCliPackageResolveCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
67
|
+
if (UnityCliTestRunCoordinator.IsCommand(request.Command))
|
|
68
|
+
return await UnityCliTestRunCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
69
|
+
if (UnityCliNavMeshBakeCoordinator.IsCommand(request.Command))
|
|
70
|
+
return await UnityCliNavMeshBakeCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
71
|
+
if (UnityCliOcclusionBakeCoordinator.IsCommand(request.Command))
|
|
72
|
+
return await UnityCliOcclusionBakeCoordinator.Execute(request, rawRequestBytes, tryAcceptJournal, cancellationToken);
|
|
73
|
+
var contract = ResolveRequestCompletionContract(request);
|
|
74
|
+
if (contract == null)
|
|
75
|
+
{
|
|
76
|
+
if (IsReadOnlyBridgeCommand(request.Command)) return await Execute(request, cancellationToken);
|
|
77
|
+
return CompletionContractRequiredEnvelope(request);
|
|
78
|
+
}
|
|
79
|
+
if (!string.Equals(contract.DeliveryMode, "direct-terminal", StringComparison.Ordinal))
|
|
80
|
+
return CompletionContractRequiredEnvelope(request);
|
|
81
|
+
if (!IsRegisteredCompletionDriver(contract.ExecutionClass, contract.CompletionDriverId))
|
|
82
|
+
return CompletionDriverRequiredEnvelope(request, contract);
|
|
83
|
+
|
|
84
|
+
var mutation = RequestRequiresMutation(request, contract);
|
|
85
|
+
if (!mutation)
|
|
86
|
+
{
|
|
87
|
+
var response = await Execute(request, cancellationToken);
|
|
88
|
+
ValidateCoordinatedTerminal(response, request.RequestId);
|
|
89
|
+
return response;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 普通direct mutation没有durable recovery root,只能使用本次新取得的exact lease。
|
|
93
|
+
// 已有同identity owner也可能属于并发副本,不能据此重复跨越effect barrier。
|
|
94
|
+
var requestDigest = UnityCliRequestDigest.Compute(rawRequestBytes, request.InstanceId);
|
|
95
|
+
try
|
|
96
|
+
{
|
|
97
|
+
object durableTerminal;
|
|
98
|
+
if (UnityCliActiveOperation.TryGetTerminal(DirectMutationTerminalScope, request.RequestId, requestDigest, out durableTerminal))
|
|
99
|
+
{
|
|
100
|
+
CleanupPublishedDirectMutation(request.RequestId, requestDigest, AdmissionTerminalIsOutcomeUnknown(durableTerminal));
|
|
101
|
+
return UnityCliSerializer.Serialize(durableTerminal);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (BridgeCommandException exception) { return SerializeBridgeExceptionEnvelope(request.RequestId, exception); }
|
|
105
|
+
var resumedDirect = TryResumeDirectMutation(request.RequestId, requestDigest);
|
|
106
|
+
if (resumedDirect != null) return resumedDirect;
|
|
107
|
+
bool newlyAcquiredLease;
|
|
108
|
+
if (!UnityCliSessionMutationLease.TryAcquire(request.RequestId, requestDigest, out newlyAcquiredLease) || !newlyAcquiredLease)
|
|
109
|
+
return UnityCliSerializer.Serialize(ProtocolEnvelopeFactory.Error(
|
|
110
|
+
request.RequestId,
|
|
111
|
+
"E_UNITY_BUSY",
|
|
112
|
+
"Another mutation owns the selected Unity instance.",
|
|
113
|
+
new Dictionary<string, object> { { "owner", "session-mutation" } },
|
|
114
|
+
new[] { "Wait for the current mutation to reach its terminal result, then submit this request again." },
|
|
115
|
+
transient: true,
|
|
116
|
+
retryAfterMs: 250));
|
|
117
|
+
BindDirectMutationLease(request.RequestId, requestDigest);
|
|
118
|
+
|
|
119
|
+
try
|
|
120
|
+
{
|
|
121
|
+
// 接受后 HTTP 超时不再取消已入队的业务执行;普通 Tool 不创建请求级文件。
|
|
122
|
+
if (tryAcceptJournal == null || !tryAcceptJournal())
|
|
123
|
+
throw new OperationCanceledException("HTTP timeout cancelled mutation before acceptance.");
|
|
124
|
+
}
|
|
125
|
+
catch (OperationCanceledException)
|
|
126
|
+
{
|
|
127
|
+
if (newlyAcquiredLease) ReleaseDirectMutationLease(request.RequestId, requestDigest);
|
|
128
|
+
return ExecutionTimeoutEnvelope(request.RequestId, "The request was not accepted before the execution deadline elapsed.");
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
try { SaveDirectMutationAcceptedRoot(request.RequestId, requestDigest); }
|
|
132
|
+
catch (Exception exception)
|
|
133
|
+
{
|
|
134
|
+
ScheduleDirectMutationPreEffectCleanup(request.RequestId, requestDigest);
|
|
135
|
+
return ExecutionTimeoutEnvelope(request.RequestId, "Direct mutation acceptance could not be persisted before effect: " + exception.GetType().Name + ".");
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
try
|
|
139
|
+
{
|
|
140
|
+
cancellationToken.ThrowIfCancellationRequested();
|
|
141
|
+
var response = await Execute(request, cancellationToken);
|
|
142
|
+
var envelope = ValidateCoordinatedTerminal(response, request.RequestId);
|
|
143
|
+
object okValue;
|
|
144
|
+
var ok = envelope.TryGetValue("ok", out okValue) && okValue is bool && (bool)okValue;
|
|
145
|
+
if (!ok)
|
|
146
|
+
{
|
|
147
|
+
var serialized = UnityCliSerializer.Serialize(envelope);
|
|
148
|
+
return DirectMutationEffectCommitted() ? PersistDirectMutationTerminal(request.RequestId, requestDigest, serialized) : serialized;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
var evidence = TakeCompletionEvidence(request.RequestId, contract);
|
|
152
|
+
if (evidence == null)
|
|
153
|
+
{
|
|
154
|
+
var serialized = UnityCliSerializer.Serialize(CompletionProofInvalidEnvelope(request, contract, "No completion-driver evidence was registered."));
|
|
155
|
+
return DirectMutationEffectCommitted() ? PersistDirectMutationTerminal(request.RequestId, requestDigest, serialized) : serialized;
|
|
156
|
+
}
|
|
157
|
+
var finalized = await FinalizeResult(request, envelope, cancellationToken);
|
|
158
|
+
return DirectMutationEffectCommitted() ? PersistDirectMutationTerminal(request.RequestId, requestDigest, finalized) : finalized;
|
|
159
|
+
}
|
|
160
|
+
catch (OperationCanceledException)
|
|
161
|
+
{
|
|
162
|
+
var serialized = ExecutionTimeoutEnvelope(request.RequestId, "The execution deadline elapsed and the result cannot be confirmed. Check the affected business state.");
|
|
163
|
+
return DirectMutationEffectCommitted() ? PersistDirectMutationTerminal(request.RequestId, requestDigest, serialized) : serialized;
|
|
164
|
+
}
|
|
165
|
+
catch (BridgeCommandException exception)
|
|
166
|
+
{
|
|
167
|
+
var serialized = SerializeBridgeExceptionEnvelope(request.RequestId, exception);
|
|
168
|
+
return DirectMutationEffectCommitted() ? PersistDirectMutationTerminal(request.RequestId, requestDigest, serialized) : serialized;
|
|
169
|
+
}
|
|
170
|
+
catch (Exception exception)
|
|
171
|
+
{
|
|
172
|
+
var serialized = SerializeBridgeExceptionEnvelope(request.RequestId, new BridgeCommandException(
|
|
173
|
+
"E_BRIDGE_COMMAND_FAILED", exception.Message, "Check Unity Console and UnityCliBridge.log."));
|
|
174
|
+
return DirectMutationEffectCommitted() ? PersistDirectMutationTerminal(request.RequestId, requestDigest, serialized) : serialized;
|
|
175
|
+
}
|
|
176
|
+
finally
|
|
177
|
+
{
|
|
178
|
+
RemoveCompletionEvidence(request.RequestId);
|
|
179
|
+
FinalizeDirectMutationExecution(request.RequestId, requestDigest);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
private static bool DirectMutationEffectCommitted()
|
|
184
|
+
{
|
|
185
|
+
return SessionState.GetBool(DirectMutationEffectCommittedSessionKey, false);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/// <summary>accepted root写入失败也必须先建立exact cleanup marker,不能依赖不可读root驱动释放。</summary>
|
|
189
|
+
private static void ScheduleDirectMutationPreEffectCleanup(string requestId, string requestDigest)
|
|
190
|
+
{
|
|
191
|
+
if (DirectMutationBindingMatches(requestId, requestDigest)) SessionState.SetBool(DirectMutationCleanupPendingSessionKey, true);
|
|
192
|
+
try { UnityCliActiveOperation.BeginExactTerminalCleanup(DirectMutationTerminalScope, requestId, requestDigest); } catch { }
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/// <summary>effect后的direct terminal先做字节admission,再进入active root与共享cache;超限统一替换为紧凑终态。</summary>
|
|
196
|
+
private static string PersistDirectMutationTerminal(string requestId, string requestDigest, string serializedEnvelope)
|
|
197
|
+
{
|
|
198
|
+
try
|
|
199
|
+
{
|
|
200
|
+
bool isOwned;
|
|
201
|
+
if (!UnityCliSessionMutationLease.TryIsOwnedBy(requestId, requestDigest, out isOwned) || !isOwned)
|
|
202
|
+
serializedEnvelope = ExecutionTimeoutEnvelope(requestId, "The direct mutation lost its exact lease after effect; outcome is unknown. Inspect the affected business state.");
|
|
203
|
+
if (Encoding.UTF8.GetByteCount(serializedEnvelope ?? string.Empty) > MaxDirectMutationTerminalBytes)
|
|
204
|
+
serializedEnvelope = ExecutionTimeoutEnvelope(requestId, "The direct mutation completed, but its terminal exceeded the durable byte budget; inspect the affected business state.");
|
|
205
|
+
object envelope = UnityCliSerializer.Parse(serializedEnvelope) as Dictionary<string, object>;
|
|
206
|
+
if (envelope == null)
|
|
207
|
+
envelope = ProtocolEnvelopeFactory.Error(requestId, "E_EXECUTION_TIMEOUT", "The direct mutation terminal could not be decoded after effect; outcome is unknown.");
|
|
208
|
+
var root = LoadDirectMutationRoot();
|
|
209
|
+
RequireDirectMutationRoot(root, requestId, requestDigest);
|
|
210
|
+
root["phase"] = "terminal_pending";
|
|
211
|
+
root["terminalEnvelope"] = envelope;
|
|
212
|
+
UnityCliActiveOperation.Save(DirectMutationTerminalScope, root);
|
|
213
|
+
var first = UnityCliActiveOperation.StoreTerminalFirst(DirectMutationTerminalScope, requestId, requestDigest, envelope);
|
|
214
|
+
UnityCliActiveOperation.Clear(DirectMutationTerminalScope);
|
|
215
|
+
return UnityCliSerializer.Serialize(first);
|
|
216
|
+
}
|
|
217
|
+
catch (BridgeCommandException exception) { return SerializeBridgeExceptionEnvelope(requestId, exception); }
|
|
218
|
+
catch (Exception exception) { return SerializeBridgeExceptionEnvelope(requestId, new BridgeCommandException("E_EXECUTION_TIMEOUT", "Direct mutation terminal publication is incomplete; the exact owner is retained: " + exception.GetType().Name + ".")); }
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
private static void SaveDirectMutationAcceptedRoot(string requestId, string requestDigest)
|
|
222
|
+
{
|
|
223
|
+
UnityCliActiveOperation.Save(DirectMutationTerminalScope, new Dictionary<string, object>
|
|
224
|
+
{
|
|
225
|
+
{ "requestId", requestId }, { "requestDigest", requestDigest }, { "editorSessionId", EditorSessionId() }, { "phase", "accepted_before_effect" }
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
private static void MarkDirectMutationEffectStarted(string requestId, string requestDigest)
|
|
230
|
+
{
|
|
231
|
+
var root = LoadDirectMutationRoot();
|
|
232
|
+
RequireDirectMutationRoot(root, requestId, requestDigest);
|
|
233
|
+
if (!string.Equals(root["phase"] as string, "accepted_before_effect", StringComparison.Ordinal)
|
|
234
|
+
&& !string.Equals(root["phase"] as string, "effect_started", StringComparison.Ordinal))
|
|
235
|
+
throw new BridgeCommandException("E_EXECUTION_TIMEOUT", "Direct mutation active state cannot cross its effect barrier.");
|
|
236
|
+
root["phase"] = "effect_started";
|
|
237
|
+
UnityCliActiveOperation.Save(DirectMutationTerminalScope, root);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private static Dictionary<string, object> LoadDirectMutationRoot()
|
|
241
|
+
{
|
|
242
|
+
try
|
|
243
|
+
{
|
|
244
|
+
var root = UnityCliActiveOperation.Load(DirectMutationTerminalScope);
|
|
245
|
+
if (root == null) return null;
|
|
246
|
+
object requestId; object requestDigest; object editorSessionId; object phase;
|
|
247
|
+
if (!root.TryGetValue("requestId", out requestId) || !root.TryGetValue("requestDigest", out requestDigest)
|
|
248
|
+
|| !root.TryGetValue("editorSessionId", out editorSessionId) || !root.TryGetValue("phase", out phase)
|
|
249
|
+
|| !(requestId is string) || !(requestDigest is string) || !(editorSessionId is string) || !(phase is string))
|
|
250
|
+
throw new InvalidDataException("Direct mutation active state is incomplete.");
|
|
251
|
+
return root;
|
|
252
|
+
}
|
|
253
|
+
catch (BridgeCommandException) { throw; }
|
|
254
|
+
catch (Exception exception) { throw new BridgeCommandException("E_EXECUTION_TIMEOUT", "Direct mutation active state cannot be read; outcome is unknown: " + exception.GetType().Name + "."); }
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
private static void RequireDirectMutationRoot(Dictionary<string, object> root, string requestId, string requestDigest)
|
|
258
|
+
{
|
|
259
|
+
if (root == null || !string.Equals(root["requestId"] as string, requestId, StringComparison.Ordinal)
|
|
260
|
+
|| !string.Equals(root["requestDigest"] as string, requestDigest, StringComparison.Ordinal)
|
|
261
|
+
|| !string.Equals(root["editorSessionId"] as string, EditorSessionId(), StringComparison.Ordinal))
|
|
262
|
+
throw new BridgeCommandException("E_EXECUTION_TIMEOUT", "Direct mutation active identity cannot be proven; outcome is unknown.");
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private static string TryResumeDirectMutation(string requestId, string requestDigest)
|
|
266
|
+
{
|
|
267
|
+
Dictionary<string, object> root;
|
|
268
|
+
try { root = LoadDirectMutationRoot(); }
|
|
269
|
+
catch (BridgeCommandException exception) { return SerializeBridgeExceptionEnvelope(requestId, exception); }
|
|
270
|
+
if (root == null) return null;
|
|
271
|
+
if (!string.Equals(root["editorSessionId"] as string, EditorSessionId(), StringComparison.Ordinal))
|
|
272
|
+
{
|
|
273
|
+
try { UnityCliActiveOperation.Clear(DirectMutationTerminalScope); }
|
|
274
|
+
catch (Exception exception) { return SerializeBridgeExceptionEnvelope(requestId, new BridgeCommandException("E_EXECUTION_TIMEOUT", "Stale direct mutation state cannot be cleared: " + exception.GetType().Name + ".")); }
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
if (!string.Equals(root["requestId"] as string, requestId, StringComparison.Ordinal))
|
|
278
|
+
return UnityCliSerializer.Serialize(ProtocolEnvelopeFactory.Error(requestId, "E_UNITY_BUSY", "Another direct mutation is active.", null, null, true, 250));
|
|
279
|
+
if (!string.Equals(root["requestDigest"] as string, requestDigest, StringComparison.Ordinal))
|
|
280
|
+
return SerializeBridgeExceptionEnvelope(requestId, new BridgeCommandException("E_REQUEST_ID_REUSED", "Direct mutation requestId was reused with different input."));
|
|
281
|
+
var phase = root["phase"] as string;
|
|
282
|
+
if (string.Equals(phase, "accepted_before_effect", StringComparison.Ordinal))
|
|
283
|
+
return UnityCliSerializer.Serialize(ProtocolEnvelopeFactory.Error(requestId, "E_UNITY_BUSY", "The accepted direct mutation is still active.", null, null, true, 250));
|
|
284
|
+
bool recovered;
|
|
285
|
+
try { if (!UnityCliSessionMutationLease.TryRecoverExact(requestId, requestDigest, out recovered)) return UnityCliSerializer.Serialize(ProtocolEnvelopeFactory.Error(requestId, "E_UNITY_BUSY", "Another mutation owns the selected Unity instance.", null, null, true, 250)); }
|
|
286
|
+
catch (BridgeCommandException exception) { return SerializeBridgeExceptionEnvelope(requestId, exception); }
|
|
287
|
+
object pending;
|
|
288
|
+
var envelope = string.Equals(phase, "terminal_pending", StringComparison.Ordinal) && root.TryGetValue("terminalEnvelope", out pending) && pending != null
|
|
289
|
+
? pending
|
|
290
|
+
: (object)ProtocolEnvelopeFactory.Error(requestId, "E_EXECUTION_TIMEOUT", "Direct mutation effect was interrupted before a terminal was frozen; outcome is unknown.");
|
|
291
|
+
var result = PersistDirectMutationTerminal(requestId, requestDigest, UnityCliSerializer.Serialize(envelope));
|
|
292
|
+
CleanupPublishedDirectMutation(requestId, requestDigest, AdmissionTerminalIsOutcomeUnknown(envelope));
|
|
293
|
+
return result;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
private static void CleanupPublishedDirectMutation(string requestId, string requestDigest, bool completeAdmission)
|
|
297
|
+
{
|
|
298
|
+
try
|
|
299
|
+
{
|
|
300
|
+
object terminal;
|
|
301
|
+
if (!UnityCliActiveOperation.TryGetTerminal(DirectMutationTerminalScope, requestId, requestDigest, out terminal)) return;
|
|
302
|
+
UnityCliActiveOperation.BeginExactTerminalCleanup(DirectMutationTerminalScope, requestId, requestDigest, completeAdmission);
|
|
303
|
+
}
|
|
304
|
+
catch { }
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
private static bool AdmissionTerminalIsOutcomeUnknown(object envelope)
|
|
308
|
+
{
|
|
309
|
+
var value = envelope as IDictionary<string, object>;
|
|
310
|
+
object ok;
|
|
311
|
+
if (value == null || !value.TryGetValue("ok", out ok) || !(ok is bool) || (bool)ok) return false;
|
|
312
|
+
object rawError;
|
|
313
|
+
var error = value.TryGetValue("error", out rawError) ? rawError as IDictionary<string, object> : null;
|
|
314
|
+
object code;
|
|
315
|
+
return error != null && error.TryGetValue("code", out code) && string.Equals(code as string, "E_EXECUTION_TIMEOUT", StringComparison.Ordinal);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
private static void FinalizeDirectMutationExecution(string requestId, string requestDigest)
|
|
319
|
+
{
|
|
320
|
+
try
|
|
321
|
+
{
|
|
322
|
+
var root = LoadDirectMutationRoot();
|
|
323
|
+
if (!DirectMutationEffectCommitted() && DirectMutationBindingMatches(requestId, requestDigest))
|
|
324
|
+
SessionState.SetBool(DirectMutationCleanupPendingSessionKey, true);
|
|
325
|
+
if (root != null && !DirectMutationEffectCommitted()
|
|
326
|
+
&& string.Equals(root["requestId"] as string, requestId, StringComparison.Ordinal)
|
|
327
|
+
&& string.Equals(root["requestDigest"] as string, requestDigest, StringComparison.Ordinal)
|
|
328
|
+
&& string.Equals(root["phase"] as string, "accepted_before_effect", StringComparison.Ordinal))
|
|
329
|
+
UnityCliActiveOperation.Clear(DirectMutationTerminalScope);
|
|
330
|
+
if (UnityCliActiveOperation.Exists(DirectMutationTerminalScope)) return;
|
|
331
|
+
}
|
|
332
|
+
catch
|
|
333
|
+
{
|
|
334
|
+
if (!DirectMutationEffectCommitted() && DirectMutationBindingMatches(requestId, requestDigest))
|
|
335
|
+
{
|
|
336
|
+
SessionState.SetBool(DirectMutationCleanupPendingSessionKey, true);
|
|
337
|
+
try { UnityCliActiveOperation.BeginExactTerminalCleanup(DirectMutationTerminalScope, requestId, requestDigest); } catch { }
|
|
338
|
+
}
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
ReleaseDirectMutationLease(requestId, requestDigest);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/// <summary>主循环恢复direct terminal发布或精确lease清理,I/O不确定时保持root与owner。</summary>
|
|
345
|
+
private static bool TryFinalizeRecoveredPlayModeRoot(string requestId, string requestDigest)
|
|
346
|
+
{
|
|
347
|
+
try
|
|
348
|
+
{
|
|
349
|
+
var root = LoadDirectMutationRoot();
|
|
350
|
+
if (root != null && SessionState.GetBool(DirectMutationCleanupPendingSessionKey, false)
|
|
351
|
+
&& DirectMutationBindingMatches(requestId, requestDigest)
|
|
352
|
+
&& string.Equals(root["requestId"] as string, requestId, StringComparison.Ordinal)
|
|
353
|
+
&& string.Equals(root["requestDigest"] as string, requestDigest, StringComparison.Ordinal)
|
|
354
|
+
&& string.Equals(root["phase"] as string, "accepted_before_effect", StringComparison.Ordinal))
|
|
355
|
+
UnityCliActiveOperation.Clear(DirectMutationTerminalScope);
|
|
356
|
+
}
|
|
357
|
+
catch { return false; }
|
|
358
|
+
var resumed = TryResumeDirectMutation(requestId, requestDigest);
|
|
359
|
+
if (resumed != null)
|
|
360
|
+
{
|
|
361
|
+
try { if (!UnityCliActiveOperation.Exists(DirectMutationTerminalScope)) ReleaseDirectMutationLease(requestId, requestDigest); }
|
|
362
|
+
catch { }
|
|
363
|
+
}
|
|
364
|
+
if (!SessionState.GetBool(DirectMutationCleanupPendingSessionKey, false)
|
|
365
|
+
|| !DirectMutationBindingMatches(requestId, requestDigest)) return resumed != null;
|
|
366
|
+
ReleaseDirectMutationLease(requestId, requestDigest);
|
|
367
|
+
bool isOwned;
|
|
368
|
+
return UnityCliSessionMutationLease.TryIsOwnedBy(requestId, requestDigest, out isOwned) && !isOwned;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/// <summary>绑定本domain正在执行的direct mutation;SessionState只跨本次Editor启动的domain reload存活。</summary>
|
|
372
|
+
private static void BindDirectMutationLease(string requestId, string requestDigest)
|
|
373
|
+
{
|
|
374
|
+
SessionState.SetString(DirectMutationRequestIdSessionKey, requestId);
|
|
375
|
+
SessionState.SetString(DirectMutationRequestDigestSessionKey, requestDigest);
|
|
376
|
+
SessionState.SetBool(DirectMutationCleanupPendingSessionKey, false);
|
|
377
|
+
SessionState.SetBool(DirectMutationEffectCommittedSessionKey, false);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/// <summary>释放时先匹配完整owner;I/O不确定时保留marker供后续主循环再次精确清理。</summary>
|
|
381
|
+
private static void ReleaseDirectMutationLease(string requestId, string requestDigest)
|
|
382
|
+
{
|
|
383
|
+
if (DirectMutationBindingMatches(requestId, requestDigest))
|
|
384
|
+
SessionState.SetBool(DirectMutationCleanupPendingSessionKey, true);
|
|
385
|
+
UnityCliSessionMutationLease.Release(requestId, requestDigest);
|
|
386
|
+
bool isOwned;
|
|
387
|
+
if (!UnityCliSessionMutationLease.TryIsOwnedBy(requestId, requestDigest, out isOwned)
|
|
388
|
+
|| isOwned || !DirectMutationBindingMatches(requestId, requestDigest)) return;
|
|
389
|
+
SessionState.SetString(DirectMutationRequestIdSessionKey, string.Empty);
|
|
390
|
+
SessionState.SetString(DirectMutationRequestDigestSessionKey, string.Empty);
|
|
391
|
+
SessionState.SetBool(DirectMutationCleanupPendingSessionKey, false);
|
|
392
|
+
SessionState.SetBool(DirectMutationEffectCommittedSessionKey, false);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/// <summary>domain reload或Editor退出前终止普通direct owner;专用durable coordinator不使用该marker。</summary>
|
|
396
|
+
private static void ReleaseActiveDirectMutationLease()
|
|
397
|
+
{
|
|
398
|
+
var requestId = SessionState.GetString(DirectMutationRequestIdSessionKey, string.Empty);
|
|
399
|
+
var requestDigest = SessionState.GetString(DirectMutationRequestDigestSessionKey, string.Empty);
|
|
400
|
+
if (string.IsNullOrEmpty(requestId) || string.IsNullOrEmpty(requestDigest)) return;
|
|
401
|
+
ReleaseDirectMutationLease(requestId, requestDigest);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
private static bool DirectMutationBindingMatches(string requestId, string requestDigest)
|
|
405
|
+
{
|
|
406
|
+
return string.Equals(SessionState.GetString(DirectMutationRequestIdSessionKey, string.Empty), requestId, StringComparison.Ordinal)
|
|
407
|
+
&& string.Equals(SessionState.GetString(DirectMutationRequestDigestSessionKey, string.Empty), requestDigest, StringComparison.Ordinal);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/// <summary>普通 Tool 的 effect 提交只保留 runner 协调语义,不写请求级持久状态。</summary>
|
|
411
|
+
private static object PrepareToolEffect(BridgeRequest request, UnityCliToolCompletionContract contract, object typedInput)
|
|
412
|
+
{
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
private static void CommitToolEffect(BridgeRequest request, UnityCliToolCompletionContract contract, object preparation)
|
|
417
|
+
{
|
|
418
|
+
if (!RequestRequiresMutation(request, contract))
|
|
419
|
+
throw new BridgeCommandException("E_TOOL_EFFECT_BARRIER_INVALID", "The current request is not classified as a mutation.", "Remove ctx.CommitEffect() from read-only and dry-run paths.");
|
|
420
|
+
var requestDigest = SessionState.GetString(DirectMutationRequestDigestSessionKey, string.Empty);
|
|
421
|
+
if (!DirectMutationBindingMatches(request.RequestId, requestDigest)
|
|
422
|
+
|| !UnityCliSessionMutationLease.IsOwnedBy(request.RequestId, requestDigest))
|
|
423
|
+
throw new BridgeCommandException("E_UNITY_BUSY", "The direct mutation no longer owns its exact session lease.", "Do not execute the effect; inspect the current owner and business state.");
|
|
424
|
+
MarkDirectMutationEffectStarted(request.RequestId, requestDigest);
|
|
425
|
+
SessionState.SetBool(DirectMutationEffectCommittedSessionKey, true);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/// <summary>code.exec等内部direct命令在首个用户effect前同样重验完整lease identity。</summary>
|
|
429
|
+
private static void BeginDirectEffect(string requestId)
|
|
430
|
+
{
|
|
431
|
+
var requestDigest = SessionState.GetString(DirectMutationRequestDigestSessionKey, string.Empty);
|
|
432
|
+
if (!DirectMutationBindingMatches(requestId, requestDigest)
|
|
433
|
+
|| !UnityCliSessionMutationLease.IsOwnedBy(requestId, requestDigest))
|
|
434
|
+
throw new BridgeCommandException("E_UNITY_BUSY", "The direct command no longer owns its exact session lease.", "Do not execute caller code; inspect the current owner and business state.");
|
|
435
|
+
MarkDirectMutationEffectStarted(requestId, requestDigest);
|
|
436
|
+
SessionState.SetBool(DirectMutationEffectCommittedSessionKey, true);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
private static void RecordToolCompletionEvidence(BridgeRequest request, RegisteredTool definition, object result, object terminalData)
|
|
440
|
+
{
|
|
441
|
+
if (definition == null || definition.CompletionContract == null)
|
|
442
|
+
throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Tool completion contract is unavailable at the runner boundary.", "Fix Tool registration before retrying.");
|
|
443
|
+
var contract = definition.CompletionContract;
|
|
444
|
+
ValidateToolTerminalData(request, definition, result, terminalData);
|
|
445
|
+
if (!RequestRequiresMutation(request, contract))
|
|
446
|
+
{
|
|
447
|
+
if (request.Execution == null || request.Execution.DryRun != true) ValidateDriverReadback(contract, result);
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
ValidateDriverReadback(contract, result);
|
|
451
|
+
RegisterCompletionEvidence(request.RequestId, definition.Name, contract, result);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/// <summary>内部 code/package 命令在取得命令专属 readback 后登记同一 proof 结构。</summary>
|
|
455
|
+
private static void RecordDirectCompletionEvidence(string requestId, string toolName, UnityCliToolCompletionContract contract, object result)
|
|
456
|
+
{
|
|
457
|
+
if (contract == null || !contract.Mutation) throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Direct completion evidence requires a mutating completion contract.", "Fix the internal command completion registration.");
|
|
458
|
+
ValidateDriverReadback(contract, result);
|
|
459
|
+
RegisterCompletionEvidence(requestId, toolName, contract, result);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
private static void RegisterCompletionEvidence(string requestId, string toolName, UnityCliToolCompletionContract contract, object result)
|
|
463
|
+
{
|
|
464
|
+
var resultJson = UnityCliSerializer.Serialize(result);
|
|
465
|
+
byte[] resultHash;
|
|
466
|
+
using (var sha = SHA256.Create()) resultHash = sha.ComputeHash(Encoding.UTF8.GetBytes(resultJson));
|
|
467
|
+
var proofText = "unity-cli-completion-proof-v1\0" + requestId + "\0" + toolName + "\0" + contract.CompletionDriverId + "\0" + contract.ProofSource + "\0" + Hex(resultHash);
|
|
468
|
+
var evidence = new CompletionEvidence
|
|
469
|
+
{
|
|
470
|
+
RequestId = requestId,
|
|
471
|
+
ToolName = toolName,
|
|
472
|
+
CompletionDriverId = contract.CompletionDriverId,
|
|
473
|
+
ProofKind = contract.ProofSource,
|
|
474
|
+
ProofBytes = Encoding.UTF8.GetBytes(proofText)
|
|
475
|
+
};
|
|
476
|
+
lock (CompletionEvidenceLock)
|
|
477
|
+
{
|
|
478
|
+
if (CompletionEvidenceByRequest.ContainsKey(requestId))
|
|
479
|
+
throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Duplicate completion evidence was registered for requestId " + requestId + ".", "Ensure exactly one completion driver owns the Tool request.");
|
|
480
|
+
CompletionEvidenceByRequest.Add(requestId, evidence);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
private static CompletionEvidence TakeCompletionEvidence(string requestId, UnityCliToolCompletionContract contract)
|
|
485
|
+
{
|
|
486
|
+
lock (CompletionEvidenceLock)
|
|
487
|
+
{
|
|
488
|
+
CompletionEvidence evidence;
|
|
489
|
+
if (!CompletionEvidenceByRequest.TryGetValue(requestId, out evidence)) return null;
|
|
490
|
+
CompletionEvidenceByRequest.Remove(requestId);
|
|
491
|
+
if (!string.Equals(evidence.ToolName, contract.ToolName, StringComparison.Ordinal)
|
|
492
|
+
|| !string.Equals(evidence.CompletionDriverId, contract.CompletionDriverId, StringComparison.Ordinal)
|
|
493
|
+
|| !string.Equals(evidence.ProofKind, contract.ProofSource, StringComparison.Ordinal))
|
|
494
|
+
throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Completion evidence does not match the immutable Tool contract.", "Fix the Tool completion driver registration.");
|
|
495
|
+
return evidence;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
private static void RemoveCompletionEvidence(string requestId)
|
|
500
|
+
{
|
|
501
|
+
lock (CompletionEvidenceLock) CompletionEvidenceByRequest.Remove(requestId);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
private static bool IsRegisteredCompletionDriver(string executionClass, string completionDriverId)
|
|
505
|
+
{
|
|
506
|
+
if (!RegisteredCompletionDriverIds.Contains(completionDriverId ?? string.Empty)) return false;
|
|
507
|
+
if (string.Equals(executionClass, "atomic", StringComparison.Ordinal)) return completionDriverId == "atomic-typed-result-v1";
|
|
508
|
+
if (string.Equals(executionClass, "observed-state", StringComparison.Ordinal)) return completionDriverId == "observed-terminal-readback-v1";
|
|
509
|
+
if (string.Equals(executionClass, "resumable", StringComparison.Ordinal)) return completionDriverId == "active-operation-terminal-readback-v1";
|
|
510
|
+
if (string.Equals(executionClass, "external", StringComparison.Ordinal))
|
|
511
|
+
return completionDriverId == "external-terminal-readback-v1" || completionDriverId == "official-method-return-v1";
|
|
512
|
+
return false;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
private static void ValidateToolTerminalData(BridgeRequest request, RegisteredTool definition, object result, object terminalData)
|
|
516
|
+
{
|
|
517
|
+
var data = terminalData as IDictionary<string, object>;
|
|
518
|
+
object resultValue;
|
|
519
|
+
if (data == null
|
|
520
|
+
|| data.Count != 1
|
|
521
|
+
|| !data.TryGetValue("result", out resultValue)
|
|
522
|
+
|| !string.Equals(UnityCliSerializer.Serialize(resultValue), UnityCliSerializer.Serialize(result), StringComparison.Ordinal))
|
|
523
|
+
{
|
|
524
|
+
throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Tool runner did not produce its exact typed business terminal.", "Fix the Tool runner completion boundary before retrying.");
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
private static void ValidateDriverReadback(UnityCliToolCompletionContract contract, object result)
|
|
529
|
+
{
|
|
530
|
+
// 官方 attribute 只承诺 attributed method 已返回;null/primitive/对象都属于诚实的弱终态。
|
|
531
|
+
if (string.Equals(contract.CompletionDriverId, "official-method-return-v1", StringComparison.Ordinal)) return;
|
|
532
|
+
if (result == null) throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Completion result is null.", "Return a typed business result with terminal evidence.");
|
|
533
|
+
var normalized = UnityCliSerializer.Parse(UnityCliSerializer.Serialize(result));
|
|
534
|
+
if (normalized == null) throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Completion result is not a JSON value tree.", "Return a serializable typed business result.");
|
|
535
|
+
if (string.Equals(contract.ExecutionClass, "atomic", StringComparison.Ordinal) && !contract.Mutation) return;
|
|
536
|
+
if (ContainsIntermediateStatus(normalized))
|
|
537
|
+
throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Completion result contains an intermediate accepted/requested/queued/started/triggered/running status.", "Wait for the Tool business terminal and return its stable readback.");
|
|
538
|
+
if (string.Equals(contract.ExecutionClass, "atomic", StringComparison.Ordinal)) return;
|
|
539
|
+
var terminalObject = normalized as IDictionary;
|
|
540
|
+
if (terminalObject == null || terminalObject.Count == 0)
|
|
541
|
+
throw new BridgeCommandException("E_TOOL_COMPLETION_PROOF_INVALID", "Non-atomic Tool result is not a non-empty typed business terminal.", "Return the Tool-specific terminal readback verified by its completion contract.");
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
private static bool ContainsIntermediateStatus(object value)
|
|
545
|
+
{
|
|
546
|
+
var dictionary = value as IDictionary;
|
|
547
|
+
if (dictionary != null)
|
|
548
|
+
{
|
|
549
|
+
foreach (DictionaryEntry entry in dictionary)
|
|
550
|
+
{
|
|
551
|
+
var key = Convert.ToString(entry.Key, CultureInfo.InvariantCulture);
|
|
552
|
+
var text = entry.Value as string;
|
|
553
|
+
if ((string.Equals(key, "status", StringComparison.OrdinalIgnoreCase)
|
|
554
|
+
|| string.Equals(key, "state", StringComparison.OrdinalIgnoreCase)
|
|
555
|
+
|| string.Equals(key, "phase", StringComparison.OrdinalIgnoreCase)) && IsIntermediateStatus(text)) return true;
|
|
556
|
+
if (IsIntermediateField(key) && IntermediateFieldIsSet(entry.Value)) return true;
|
|
557
|
+
if (ContainsIntermediateStatus(entry.Value)) return true;
|
|
558
|
+
}
|
|
559
|
+
return false;
|
|
560
|
+
}
|
|
561
|
+
var sequence = value as IEnumerable;
|
|
562
|
+
if (sequence != null && !(value is string)) foreach (var item in sequence) if (ContainsIntermediateStatus(item)) return true;
|
|
563
|
+
return false;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
private static bool IsIntermediateStatus(string value)
|
|
567
|
+
{
|
|
568
|
+
if (value == null) return false;
|
|
569
|
+
var status = value.Trim().ToLowerInvariant();
|
|
570
|
+
return status == "accepted" || status == "requested" || status == "queued" || status == "started" || status == "triggered" || status == "running" || status == "in_progress";
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
private static bool IsIntermediateField(string name)
|
|
574
|
+
{
|
|
575
|
+
return string.Equals(name, "accepted", StringComparison.OrdinalIgnoreCase)
|
|
576
|
+
|| string.Equals(name, "requested", StringComparison.OrdinalIgnoreCase)
|
|
577
|
+
|| string.Equals(name, "queued", StringComparison.OrdinalIgnoreCase)
|
|
578
|
+
|| string.Equals(name, "started", StringComparison.OrdinalIgnoreCase)
|
|
579
|
+
|| string.Equals(name, "triggered", StringComparison.OrdinalIgnoreCase);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
private static bool IntermediateFieldIsSet(object value)
|
|
583
|
+
{
|
|
584
|
+
if (value == null) return false;
|
|
585
|
+
if (value is bool) return (bool)value;
|
|
586
|
+
var text = value as string;
|
|
587
|
+
return text == null || !string.IsNullOrWhiteSpace(text);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/// <summary>根据 wrapper input 解析真实 Tool;project/runtime wrapper 不能使用泛化 contract。</summary>
|
|
591
|
+
private static UnityCliToolCompletionContract ResolveRequestCompletionContract(BridgeRequest request)
|
|
592
|
+
{
|
|
593
|
+
var toolName = RequestToolName(request);
|
|
594
|
+
UnityCliToolCompletionContract contract;
|
|
595
|
+
if (UnityCliToolCompletionRegistry.TryGet(toolName, out contract)) return contract;
|
|
596
|
+
if (string.Equals(toolName, "code.exec", StringComparison.Ordinal))
|
|
597
|
+
return UnityCliToolCompletionRegistry.CodeExec;
|
|
598
|
+
return ResolveRegisteredCustomToolCompletionContract(toolName);
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
private static string RequestToolName(BridgeRequest request)
|
|
602
|
+
{
|
|
603
|
+
if (request != null && (string.Equals(request.Command, "project-tool.run", StringComparison.Ordinal)
|
|
604
|
+
|| string.Equals(request.Command, "runtime-tool.run", StringComparison.Ordinal)))
|
|
605
|
+
{
|
|
606
|
+
var input = request.Input as IDictionary<string, object>;
|
|
607
|
+
object rawName;
|
|
608
|
+
return input != null && input.TryGetValue("name", out rawName) ? rawName as string : null;
|
|
609
|
+
}
|
|
610
|
+
return request == null ? null : request.Command;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/// <summary>queue 只需保守判断资源所有权;解析失败按 mutation 串行,最终错误仍由 coordinator 结构化返回。</summary>
|
|
614
|
+
private static bool CoordinatedRequestIsMutation(BridgeRequest request)
|
|
615
|
+
{
|
|
616
|
+
try
|
|
617
|
+
{
|
|
618
|
+
if (request != null && string.Equals(request.Command, "internal.editor.compile.start", StringComparison.Ordinal))
|
|
619
|
+
return request.Execution == null || request.Execution.DryRun != true;
|
|
620
|
+
var contract = ResolveRequestCompletionContract(request);
|
|
621
|
+
return RequestRequiresMutation(request, contract);
|
|
622
|
+
}
|
|
623
|
+
catch
|
|
624
|
+
{
|
|
625
|
+
return true;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/// <summary>descriptor 表示潜在风险;本次 input 没有 setter/action 时按 read 执行。</summary>
|
|
630
|
+
private static bool RequestRequiresMutation(BridgeRequest request, UnityCliToolCompletionContract contract)
|
|
631
|
+
{
|
|
632
|
+
if (request == null || contract == null || !contract.Mutation || (request.Execution != null && request.Execution.DryRun == true)) return false;
|
|
633
|
+
var name = contract.ToolName;
|
|
634
|
+
var input = RequestBusinessInput(request);
|
|
635
|
+
if (name == "graphics.reflection-probe") return HasAnyMeaningfulInput(input, "mode", "resolution", "bounces", "hdr", "boxSize", "boxOffset") || CreateProbeNeedsMutation(input, true);
|
|
636
|
+
if (name == "graphics.light-probe-group") return HasAnyMeaningfulInput(input, "positions") || CreateProbeNeedsMutation(input, false);
|
|
637
|
+
if (name == "graphics.skybox-set-properties") return HasAllMeaningfulInput(input, "property", "value");
|
|
638
|
+
if (name == "build.settings.set") return HasAnyInput(input, "apiCompatibilityLevel", "applicationIdentifier", "bundleVersion", "companyId", "productName", "scriptingBackend");
|
|
639
|
+
if (name == "graphics.bake-settings") return HasAnyInput(input, "bakedGI", "bounces", "directSamples", "environmentSamples", "filtering", "indirectSamples", "lightingMode", "realtimeGI");
|
|
640
|
+
if (name == "graphics.probe-positions") return HasAnyInput(input, "positions");
|
|
641
|
+
if (name == "graphics.quality") return HasAnyInput(input, "anisotropicFiltering", "antiAliasing", "lodBias", "masterTextureLimit", "maximumLODLevel", "qualityLevel", "realtimeReflectionProbes", "shadowDistance", "shadowResolution", "shadows", "softParticles", "vSyncCount");
|
|
642
|
+
if (name == "graphics.settings") return HasAnyInput(input, "antiAliasing", "lodBias", "masterTextureLimit", "maximumLODLevel", "property", "renderPipeline", "shadowDistance", "vSyncCount", "value");
|
|
643
|
+
if (name == "graphics.pipeline-settings") return HasAnyInput(input, "renderPipeline");
|
|
644
|
+
if (name == "graphics.pipeline-quality") return HasAnyInput(input, "qualityLevel");
|
|
645
|
+
if (name == "graphics.skybox-set-ambient") return HasAnyMeaningfulInput(input, "ambientEquatorColor", "ambientGroundColor", "ambientSkyColor", "color", "intensity", "mode");
|
|
646
|
+
if (name == "graphics.skybox-set-fog") return HasAnyMeaningfulInput(input, "color", "density", "enabled", "endDistance", "mode", "startDistance");
|
|
647
|
+
if (name == "graphics.skybox-set-reflection") return HasAnyMeaningfulInput(input, "bounces", "intensity", "mode", "resolution");
|
|
648
|
+
if (name == "graphics.scene-debug") return HasAnyInput(input, "drawMode", "shadingMode");
|
|
649
|
+
if (name == "physics.collision-matrix") return HasAllInput(input, "layerA", "layerB", "ignore");
|
|
650
|
+
if (name == "physics.settings") return HasAnyInput(input, "autoSimulation", "bounceThreshold", "defaultContactOffset", "defaultSolverIterations", "defaultSolverVelocityIterations", "gravity", "gravity2d", "property", "queriesHitBackfaces", "queriesHitTriggers", "queriesStartInColliders", "value");
|
|
651
|
+
if (name == "physics.rigidbody") return !InputBoolean(input, "validate") && (HasAnyMeaningfulInput(input, "angularDrag", "drag", "isKinematic", "mass", "useGravity") || RigidbodyNeedsMutation(input));
|
|
652
|
+
if (name == "physics.simulation") return InputBoolean(input, "simulate");
|
|
653
|
+
if (name == "texture.import-settings") return HasAnyInput(input, "alphaIsTransparency", "compression", "filterMode", "maxTextureSize", "mipmap", "readable", "sRGB", "textureType", "type", "wrapMode");
|
|
654
|
+
if (name == "profiler.deep") return HasAnyInput(input, "enabled");
|
|
655
|
+
if (name == "scene.view-frame") return HasAnyInput(input, "target", "path") || InputBoolean(input, "frameAll");
|
|
656
|
+
if (name == "ui.modify-visual-element") return HasUiVisualElementMutation(input);
|
|
657
|
+
if (name == "cinemachine.lens") return HasAnyInput(input, "dutch", "farClipPlane", "fieldOfView", "nearClipPlane", "orthographicSize");
|
|
658
|
+
if (name == "cinemachine.priority") return HasAnyInput(input, "enabled", "priority");
|
|
659
|
+
if (name == "cinemachine.target") return HasAnyInput(input, "follow", "lookAt");
|
|
660
|
+
if (name == "cinemachine.blend") return HasAnyInput(input, "duration", "style");
|
|
661
|
+
return true;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
private static IDictionary<string, object> RequestBusinessInput(BridgeRequest request)
|
|
665
|
+
{
|
|
666
|
+
var root = request.Input as IDictionary<string, object>;
|
|
667
|
+
if (root == null) return new Dictionary<string, object>();
|
|
668
|
+
if (string.Equals(request.Command, "project-tool.run", StringComparison.Ordinal) || string.Equals(request.Command, "runtime-tool.run", StringComparison.Ordinal))
|
|
669
|
+
{
|
|
670
|
+
object nested;
|
|
671
|
+
var typed = root.TryGetValue("input", out nested) ? nested as IDictionary<string, object> : null;
|
|
672
|
+
return typed ?? new Dictionary<string, object>();
|
|
673
|
+
}
|
|
674
|
+
return root;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
private static bool HasAnyInput(IDictionary<string, object> input, params string[] names)
|
|
678
|
+
{
|
|
679
|
+
return names.Any(name => input.ContainsKey(name) && input[name] != null);
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
private static bool HasAllInput(IDictionary<string, object> input, params string[] names)
|
|
683
|
+
{
|
|
684
|
+
return names.All(name => input.ContainsKey(name) && input[name] != null);
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
/// <summary>字符串 setter 与 handler 一致:空字符串表示未提供,数值和布尔值只要非 null 即有效。</summary>
|
|
688
|
+
private static bool HasAnyMeaningfulInput(IDictionary<string, object> input, params string[] names)
|
|
689
|
+
{
|
|
690
|
+
return names.Any(name => HasMeaningfulInput(input, name));
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
private static bool HasAllMeaningfulInput(IDictionary<string, object> input, params string[] names)
|
|
694
|
+
{
|
|
695
|
+
return names.All(name => HasMeaningfulInput(input, name));
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
private static bool HasMeaningfulInput(IDictionary<string, object> input, string name)
|
|
699
|
+
{
|
|
700
|
+
object value;
|
|
701
|
+
return input.TryGetValue(name, out value) && value != null && (!(value is string) || !string.IsNullOrEmpty((string)value));
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/// <summary>UI text 的空字符串是清空文本;其余字符串 setter 与 handler 一样忽略空字符串。</summary>
|
|
705
|
+
private static bool HasUiVisualElementMutation(IDictionary<string, object> input)
|
|
706
|
+
{
|
|
707
|
+
object text;
|
|
708
|
+
return (input.TryGetValue("text", out text) && text != null)
|
|
709
|
+
|| HasAnyMeaningfulInput(input, "addClass", "display", "height", "removeClass", "width");
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
private static bool InputBoolean(IDictionary<string, object> input, string name)
|
|
713
|
+
{
|
|
714
|
+
object value;
|
|
715
|
+
return input.TryGetValue(name, out value) && value is bool && (bool)value;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/// <summary>非 validate 的空配置仅在目标缺少 Rigidbody 时会添加组件,已有组件则保持只读。</summary>
|
|
719
|
+
private static bool RigidbodyNeedsMutation(IDictionary<string, object> input)
|
|
720
|
+
{
|
|
721
|
+
object targetValue;
|
|
722
|
+
var target = input.TryGetValue("target", out targetValue) ? targetValue as string : null;
|
|
723
|
+
if (string.IsNullOrEmpty(target)) return false;
|
|
724
|
+
var targetObject = GameObjectToolSupport.ResolveUniqueTarget(target, "physics.rigidbody requires --target.");
|
|
725
|
+
return targetObject.GetComponent<Rigidbody>() == null;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/// <summary>create=true 只有缺少组件或未指定目标而需要新建对象时才是 mutation;已有组件的幂等读取不越过 barrier。</summary>
|
|
729
|
+
private static bool CreateProbeNeedsMutation(IDictionary<string, object> input, bool reflectionProbe)
|
|
730
|
+
{
|
|
731
|
+
if (!InputBoolean(input, "create")) return false;
|
|
732
|
+
object targetValue;
|
|
733
|
+
var target = input.TryGetValue("target", out targetValue) ? targetValue as string : null;
|
|
734
|
+
if (string.IsNullOrEmpty(target)) return true;
|
|
735
|
+
var targetObject = GameObjectToolSupport.ResolveUniqueTarget(target, "Probe target could not be resolved.");
|
|
736
|
+
return reflectionProbe ? targetObject.GetComponent<ReflectionProbe>() == null : targetObject.GetComponent<LightProbeGroup>() == null;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/// <summary>Context/catalog/health 类请求没有 business mutation,不得创建 request journal。</summary>
|
|
740
|
+
private static bool IsReadOnlyBridgeCommand(string command)
|
|
741
|
+
{
|
|
742
|
+
if (IsEditorStateSnapshotCommand(command)) return true;
|
|
743
|
+
return string.Equals(command, "project-tool.list", StringComparison.Ordinal)
|
|
744
|
+
|| string.Equals(command, "runtime-tool.list", StringComparison.Ordinal);
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
private static Dictionary<string, object> ValidateCoordinatedTerminal(string response, string requestId)
|
|
748
|
+
{
|
|
749
|
+
var envelope = UnityCliSerializer.Parse(response) as Dictionary<string, object>;
|
|
750
|
+
object ok;
|
|
751
|
+
object actualRequestId;
|
|
752
|
+
if (envelope == null
|
|
753
|
+
|| !envelope.TryGetValue("ok", out ok) || !(ok is bool)
|
|
754
|
+
|| !envelope.TryGetValue("requestId", out actualRequestId)
|
|
755
|
+
|| !string.Equals(actualRequestId as string, requestId, StringComparison.Ordinal))
|
|
756
|
+
throw new BridgeCommandException(
|
|
757
|
+
"E_TOOL_COMPLETION_PROOF_INVALID",
|
|
758
|
+
"Tool completion did not produce a terminal envelope bound to the root requestId.",
|
|
759
|
+
"Inspect the Tool completion driver and output schema before retrying.");
|
|
760
|
+
return envelope;
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
/// <summary>普通 Tool 只在当前异步窗口等待稳定状态,超时后由调用方检查业务状态。</summary>
|
|
764
|
+
private static async Task<string> FinalizeResult(BridgeRequest request, object terminalEnvelope, CancellationToken cancellationToken)
|
|
765
|
+
{
|
|
766
|
+
int remainingMs;
|
|
767
|
+
if (!request.TryDeadlineRemainingMs(out remainingMs))
|
|
768
|
+
return ExecutionTimeoutEnvelope(request.RequestId, "The execution result cannot be confirmed before the deadline. Check the affected business state.");
|
|
769
|
+
try
|
|
770
|
+
{
|
|
771
|
+
if (!await CreateWaiter(request.RequestId, "completion.finalize").UntilEditorReady(TimeSpan.FromMilliseconds(remainingMs), cancellationToken))
|
|
772
|
+
return ExecutionTimeoutEnvelope(request.RequestId, "The execution result cannot be confirmed before the deadline. Check the affected business state.");
|
|
773
|
+
}
|
|
774
|
+
catch (OperationCanceledException)
|
|
775
|
+
{
|
|
776
|
+
return ExecutionTimeoutEnvelope(request.RequestId, "The execution result cannot be confirmed before the deadline. Check the affected business state.");
|
|
777
|
+
}
|
|
778
|
+
return UnityCliSerializer.Serialize(terminalEnvelope);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
private static string ExecutionTimeoutEnvelope(string requestId, string reason)
|
|
782
|
+
{
|
|
783
|
+
return UnityCliSerializer.Serialize(ProtocolEnvelopeFactory.Error(
|
|
784
|
+
requestId,
|
|
785
|
+
"E_EXECUTION_TIMEOUT",
|
|
786
|
+
reason,
|
|
787
|
+
null,
|
|
788
|
+
new[] { "Check the affected business state before submitting another request." }));
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
private static object CompletionProofInvalidEnvelope(BridgeRequest request, UnityCliToolCompletionContract contract, string reason)
|
|
793
|
+
{
|
|
794
|
+
return ProtocolEnvelopeFactory.Error(
|
|
795
|
+
request == null ? string.Empty : request.RequestId,
|
|
796
|
+
"E_TOOL_COMPLETION_PROOF_INVALID",
|
|
797
|
+
"The Tool did not satisfy its registered terminal completion proof.",
|
|
798
|
+
new Dictionary<string, object>
|
|
799
|
+
{
|
|
800
|
+
{ "toolName", contract == null ? string.Empty : contract.ToolName },
|
|
801
|
+
{ "completionDriverId", contract == null ? string.Empty : contract.CompletionDriverId },
|
|
802
|
+
{ "reason", reason }
|
|
803
|
+
},
|
|
804
|
+
new[] { "Fix the Tool completion driver or business readback before retrying." });
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
private static string CompletionContractRequiredEnvelope(BridgeRequest request)
|
|
808
|
+
{
|
|
809
|
+
return UnityCliSerializer.Serialize(ProtocolEnvelopeFactory.Error(
|
|
810
|
+
request == null ? string.Empty : request.RequestId,
|
|
811
|
+
"E_TOOL_COMPLETION_CONTRACT_REQUIRED",
|
|
812
|
+
"The requested Tool has no explicit completion contract: " + RequestToolName(request) + ".",
|
|
813
|
+
new Dictionary<string, object> { { "toolName", RequestToolName(request) ?? string.Empty } },
|
|
814
|
+
new[] { "Declare execution class, completion predicate, proof source, reload policy, timeout error, and outcome-unknown policy before registering this Tool." }));
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
private static string CompletionDriverRequiredEnvelope(BridgeRequest request, UnityCliToolCompletionContract contract)
|
|
818
|
+
{
|
|
819
|
+
return UnityCliSerializer.Serialize(ProtocolEnvelopeFactory.Error(
|
|
820
|
+
request == null ? string.Empty : request.RequestId,
|
|
821
|
+
"E_TOOL_COMPLETION_CONTRACT_REQUIRED",
|
|
822
|
+
"The Tool completion driver is not registered for its execution class: " + (contract == null ? string.Empty : contract.ToolName) + ".",
|
|
823
|
+
new Dictionary<string, object> { { "toolName", contract == null ? string.Empty : contract.ToolName }, { "completionDriverId", contract == null ? string.Empty : contract.CompletionDriverId } },
|
|
824
|
+
new[] { "Register one sealed completion driver before exposing this Tool." }));
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
#endif
|