@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,971 @@
|
|
|
1
|
+
import { open } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { getBoolean, getString } from "../args.js";
|
|
4
|
+
import { bridgeCommandRegistry, executeBridgeCommand, executeBridgePayload, SessionSupervisor, SessionSupervisorError } from "../bridge/index.js";
|
|
5
|
+
import { failure, success } from "../output.js";
|
|
6
|
+
import { PackageManagerError } from "../package-manager.js";
|
|
7
|
+
import { instanceSelectionFailure, selectInstanceForFlags, selectObservationInstanceForFlags } from "../instances.js";
|
|
8
|
+
import { EditorBlockerObserver, sanitizeEditorBlockers } from "../editor-blocker-observer.js";
|
|
9
|
+
import { defaultDataDir } from "../platform.js";
|
|
10
|
+
import { validateSchema } from "../schema/validator.js";
|
|
11
|
+
import { checkToolExtensionAvailability, extensionAvailabilityFlags } from "../extension-availability.js";
|
|
12
|
+
import { resolveCatalogIndependentInvocationTool, resolveCatalogTool } from "./catalog.js";
|
|
13
|
+
import { generatedToolCompletionContract } from "./.generated-completion-registry.js";
|
|
14
|
+
import { findDefineTool } from "./define.js";
|
|
15
|
+
import { StructuredToolError } from "./errors.js";
|
|
16
|
+
import { EXTENSION_GROUPS, findToolByName, toolIsMutation } from "./metadata/index.js";
|
|
17
|
+
const MULTI_TARGET_CATALOG_TOOLS = new Set(["tools.group", "tools.group-list", "tools.search", "tools.describe", "diagnose.capabilities"]);
|
|
18
|
+
/**
|
|
19
|
+
* Tool 分发顺序固定为输入解析、catalog 解析、schema 校验、目标选择、执行与 envelope。
|
|
20
|
+
* 调用即授权,只保留 schema、目标与 descriptor 的正确性验证。
|
|
21
|
+
*/
|
|
22
|
+
export async function dispatchTool(name, positionalTarget, flags, runtime, requestId, seed = {}, resolvedTool) {
|
|
23
|
+
const dispatchStartedAtMs = Date.now();
|
|
24
|
+
if (!name)
|
|
25
|
+
return failure(requestId, "E_TOOL_NOT_FOUND_FOR_TARGET", "Tool name is required for tools run.", ["Run unitycli tools group to see tool groups.", "Run unitycli tools search <k1|k2|...> to find related tools."]);
|
|
26
|
+
const executionFlagError = validateExecutionTimeoutFlags(flags, requestId);
|
|
27
|
+
if (executionFlagError)
|
|
28
|
+
return executionFlagError;
|
|
29
|
+
const codeInputDeadlineMs = name === "code.exec"
|
|
30
|
+
? dispatchStartedAtMs + (typeof flags["timeout-ms"] === "string" ? Number(flags["timeout-ms"]) : 60_000)
|
|
31
|
+
: undefined;
|
|
32
|
+
const parsed = await parseTypedInput(flags, requestId, name === "code.exec" ? 1024 * 1024 : undefined, codeInputDeadlineMs);
|
|
33
|
+
if (!parsed.ok)
|
|
34
|
+
return parsed.error;
|
|
35
|
+
const dispatchFlags = withStructuredInput(flags, parsed.input);
|
|
36
|
+
// command入口已从同一次live catalog读取schema;直接使用该descriptor,避免二次发现改变绑定。
|
|
37
|
+
if (resolvedTool) {
|
|
38
|
+
if (resolvedTool.name !== name)
|
|
39
|
+
return failure(requestId, "E_TOOL_SCHEMA_CONFLICT", `Resolved Tool name ${resolvedTool.name} does not match requested name ${name}.`, [
|
|
40
|
+
"Refresh the selected Unity instance catalog and retry the same command."
|
|
41
|
+
], { requestedName: name, resolvedName: resolvedTool.name });
|
|
42
|
+
const input = requestFromInput(resolvedTool, { ...parsed.input, ...seed }, dispatchFlags, positionalTarget);
|
|
43
|
+
return dispatchResolvedTool(resolvedTool, input, dispatchFlags, runtime, requestId, dispatchStartedAtMs);
|
|
44
|
+
}
|
|
45
|
+
const localMetadata = findToolByName(name);
|
|
46
|
+
const localProperties = localMetadata?.inputSchema.properties;
|
|
47
|
+
// TS-local schema 的 project 仅约束已选实例;不得把其他业务字段写入 selector/execution flags。
|
|
48
|
+
const catalogFlags = localMetadata && localProperties && "project" in localProperties
|
|
49
|
+
&& typeof parsed.input.project === "string" && dispatchFlags.project === undefined
|
|
50
|
+
? { ...dispatchFlags, project: parsed.input.project }
|
|
51
|
+
: dispatchFlags;
|
|
52
|
+
// exact 弹窗恢复及其 describe 学习入口不依赖被同一 modal 阻断的 Live catalog。
|
|
53
|
+
const catalogIndependentTool = resolveCatalogIndependentInvocationTool(name, typeof seed.name === "string" ? seed.name : undefined);
|
|
54
|
+
if (catalogIndependentTool) {
|
|
55
|
+
const input = requestFromInput(catalogIndependentTool, { ...parsed.input, ...seed }, dispatchFlags, positionalTarget);
|
|
56
|
+
return dispatchResolvedTool(catalogIndependentTool, input, dispatchFlags, runtime, requestId, dispatchStartedAtMs);
|
|
57
|
+
}
|
|
58
|
+
const coreSpec = bridgeCommandRegistry.specs().find((spec) => (spec.toolName === name || spec.bridgeCommand === name) && !EXTENSION_GROUPS.has(spec.group) && spec.internal !== true);
|
|
59
|
+
// Runtime descriptor 的唯一 owner 在 TS catalog;执行直接进入共享 runtime wrapper,目标缺失时返回 runtime selector 错误。
|
|
60
|
+
if (localMetadata?.handler === "bridge-runtime") {
|
|
61
|
+
const input = requestFromInput(localMetadata, { ...parsed.input, ...seed }, dispatchFlags, positionalTarget);
|
|
62
|
+
return dispatchResolvedTool(localMetadata, input, dispatchFlags, runtime, requestId, dispatchStartedAtMs);
|
|
63
|
+
}
|
|
64
|
+
// 无 catalog fixture 的注入式 bridgeExecute 仅用于隔离测试;其余路径必须 catalog-first。
|
|
65
|
+
if (runtime.bridgeExecute && runtime.projectTools === undefined && localMetadata) {
|
|
66
|
+
const input = requestFromInput(localMetadata, { ...parsed.input, ...seed }, dispatchFlags, positionalTarget);
|
|
67
|
+
return dispatchResolvedTool(localMetadata, input, dispatchFlags, runtime, requestId, dispatchStartedAtMs);
|
|
68
|
+
}
|
|
69
|
+
if (coreSpec && runtime.bridgeExecute && runtime.projectTools === undefined) {
|
|
70
|
+
return executeCoreBridgeSpec(name, coreSpec, parsed.input, dispatchFlags, runtime, requestId, positionalTarget);
|
|
71
|
+
}
|
|
72
|
+
const resolved = await resolveCatalogTool(name, catalogFlags, runtime, requestId);
|
|
73
|
+
if (resolved.ok === false)
|
|
74
|
+
return enrichTargetFailureWithDialogBlocker(resolved, catalogFlags, runtime);
|
|
75
|
+
const tool = resolved.tool;
|
|
76
|
+
if (!tool)
|
|
77
|
+
return failure(requestId, "E_TOOL_NOT_FOUND_FOR_TARGET", `Tool not found: ${name}.`, ["Run unitycli tools group to see tool groups.", "Run unitycli tools search <k1|k2|...> to find related tools."]);
|
|
78
|
+
const input = requestFromInput(tool, { ...parsed.input, ...seed }, dispatchFlags, positionalTarget);
|
|
79
|
+
return dispatchResolvedTool(tool, input, dispatchFlags, runtime, requestId, dispatchStartedAtMs);
|
|
80
|
+
}
|
|
81
|
+
/** 公开统一catalog对每个在线target session分别占一个slot,禁止跨池旁路输出。 */
|
|
82
|
+
export async function dispatchCatalogProjection(command, input, flags, runtime, requestId, execute) {
|
|
83
|
+
const startedAtMs = Date.now();
|
|
84
|
+
const timeoutMs = Math.max(1, executionFromFlags(flags).timeoutMs ?? 30_000);
|
|
85
|
+
const acquired = await acquireCatalogAdmissions(command, input, flags, runtime, requestId, timeoutMs, startedAtMs + timeoutMs, "catalog-projection-v1");
|
|
86
|
+
if ("result" in acquired)
|
|
87
|
+
return acquired.result;
|
|
88
|
+
const primary = acquired.admissions.editor ?? acquired.admissions.runtime;
|
|
89
|
+
const result = await execute({ ...runtime, rootAdmission: primary, rootAdmissions: acquired.admissions });
|
|
90
|
+
await releaseUnconsumedCatalogAdmissions(acquired);
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
async function acquireCatalogAdmissions(command, input, flags, runtime, requestId, timeoutMs, admissionAbsoluteDeadlineMs, completionContractIdentity) {
|
|
94
|
+
const context = { admissions: {}, supervisors: {}, executionAbsoluteDeadlineMs: 0 };
|
|
95
|
+
let lastOffline;
|
|
96
|
+
for (const target of ["editor", "runtime"]) {
|
|
97
|
+
const supervisor = new SessionSupervisor(flags, runtime);
|
|
98
|
+
try {
|
|
99
|
+
const admission = await supervisor.acquireRootAdmission({ requestId, command, input, dryRun: false, target, completionContractIdentity, timeoutMs, admissionAbsoluteDeadlineMs });
|
|
100
|
+
context.admissions[target] = admission;
|
|
101
|
+
context.supervisors[target] = supervisor;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const projected = catalogAdmissionFailure(requestId, error);
|
|
105
|
+
if (projected.error.code === "E_INSTANCE_NOT_RUNNING" || projected.error.code === "E_RUNTIME_NOT_RUNNING") {
|
|
106
|
+
lastOffline = projected;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
await releaseUnconsumedCatalogAdmissions(context);
|
|
110
|
+
return { result: projected };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const leases = Object.values(context.admissions).filter((value) => !!value);
|
|
114
|
+
if (leases.length === 0)
|
|
115
|
+
return { result: lastOffline ?? failure(requestId, "E_INSTANCE_NOT_RUNNING", "No live Unity target is available for catalog projection.", ["Open the target Unity project or development Player."]) };
|
|
116
|
+
const now = Date.now();
|
|
117
|
+
if (leases.some((lease) => lease.grantExpiresAtMs <= now)) {
|
|
118
|
+
await releaseUnconsumedCatalogAdmissions(context);
|
|
119
|
+
return { result: failure(requestId, "E_UNITY_BUSY", "The Unity task-pool grants for the live catalog did not overlap before the admission deadline; no catalog request was sent.", ["Wait for active UnityCLI tasks to finish, then submit a new request."], { phase: "admission", businessRequestSent: false }, { transient: true, retryAfterMs: 100 }) };
|
|
120
|
+
}
|
|
121
|
+
context.executionAbsoluteDeadlineMs = now + timeoutMs;
|
|
122
|
+
for (const lease of leases)
|
|
123
|
+
lease.executionAbsoluteDeadlineMs = context.executionAbsoluteDeadlineMs;
|
|
124
|
+
return context;
|
|
125
|
+
}
|
|
126
|
+
async function releaseUnconsumedCatalogAdmissions(context) {
|
|
127
|
+
for (const target of ["editor", "runtime"]) {
|
|
128
|
+
const admission = context.admissions[target];
|
|
129
|
+
const supervisor = context.supervisors[target];
|
|
130
|
+
if (admission && supervisor)
|
|
131
|
+
await supervisor.completeRootAdmission(admission);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function catalogAdmissionFailure(requestId, error) {
|
|
135
|
+
const selectionFailure = instanceSelectionFailure(requestId, error);
|
|
136
|
+
if (selectionFailure)
|
|
137
|
+
return selectionFailure;
|
|
138
|
+
if (error instanceof SessionSupervisorError)
|
|
139
|
+
return failure(requestId, error.code, error.message, error.nextActions, error.details, { transient: error.transient, retryAfterMs: error.retryAfterMs });
|
|
140
|
+
return failure(requestId, "BRIDGE_CONNECTION_FAILED", error instanceof Error ? error.message : String(error), ["Inspect the selected Unity session."], undefined, { transient: true, retryAfterMs: 100 });
|
|
141
|
+
}
|
|
142
|
+
async function dispatchResolvedTool(tool, input, flags, runtime, requestId, dispatchStartedAtMs) {
|
|
143
|
+
const definition = findDefineTool(tool.name);
|
|
144
|
+
const executionTool = tool;
|
|
145
|
+
const completion = generatedToolCompletionContract(executionTool.name) ?? executionTool.completionContract;
|
|
146
|
+
if (!completion)
|
|
147
|
+
return failure(requestId, "E_TOOL_COMPLETION_CONTRACT_REQUIRED", `Tool ${executionTool.name} has no explicit completion contract.`, [
|
|
148
|
+
"Declare execution class, completion predicate, proof source, reload policy, timeout error, and outcome-unknown policy before registering this Tool."
|
|
149
|
+
], { toolName: executionTool.name });
|
|
150
|
+
const descriptorMutation = toolIsMutation(executionTool);
|
|
151
|
+
if (completion.mutation !== descriptorMutation)
|
|
152
|
+
return failure(requestId, "E_TOOL_COMPLETION_CONTRACT_MISMATCH", `Tool ${executionTool.name} completion contract disagrees with its descriptor mutation signals.`, [
|
|
153
|
+
`Run unitycli tools describe ${executionTool.name} and fix the descriptor or completion contract before execution.`
|
|
154
|
+
], { toolName: executionTool.name, contractMutation: completion.mutation, descriptorMutation });
|
|
155
|
+
const availabilityFlags = await extensionAvailabilityFlags(flags, runtime);
|
|
156
|
+
const availability = await checkToolExtensionAvailability(executionTool, availabilityFlags);
|
|
157
|
+
if (!availability.available)
|
|
158
|
+
return failure(requestId, availability.errorCode, availability.message, availability.nextActions, { extensionId: availability.extensionId, missingPackageIds: availability.availabilityResult?.missingPackageIds ?? executionTool.requiresPackages ?? [] });
|
|
159
|
+
if (getBoolean(flags, "dry-run") && !executionTool.supportsDryRun)
|
|
160
|
+
return failure(requestId, "E_DRY_RUN_UNSUPPORTED", `Tool ${executionTool.name} does not support dry-run.`, [
|
|
161
|
+
"Remove --dry-run and invoke the Tool only when its declared side effects are acceptable.",
|
|
162
|
+
], { toolName: executionTool.name });
|
|
163
|
+
const schemaErrors = validateSchema(executionTool.inputSchema, input);
|
|
164
|
+
if (schemaErrors.length > 0)
|
|
165
|
+
return failure(requestId, "E_SCHEMA_INVALID", `Input schema validation failed at ${schemaErrors[0].path}.`, [`Run unitycli tools describe ${executionTool.name} to inspect inputSchema.`], {
|
|
166
|
+
path: schemaErrors[0].path,
|
|
167
|
+
expected: schemaErrors[0].expected,
|
|
168
|
+
actual: schemaErrors[0].actual,
|
|
169
|
+
errors: schemaErrors
|
|
170
|
+
});
|
|
171
|
+
return definition && executionTool.handler !== "bridge-runtime"
|
|
172
|
+
? executeDefinition(executionTool, completion, definition, input, flags, runtime, requestId, dispatchStartedAtMs)
|
|
173
|
+
: executeLiveTool(executionTool, completion, input, flags, runtime, requestId, dispatchStartedAtMs);
|
|
174
|
+
}
|
|
175
|
+
/** 已有 core bridge spec 使用统一参数构造,不进入 live custom wrapper。 */
|
|
176
|
+
async function executeCoreBridgeSpec(name, spec, input, flags, runtime, requestId, positionalTarget) {
|
|
177
|
+
let args = await spec.buildArgs({ command: name, flags: bridgeWrapperFlags(flags, input), positionalTarget });
|
|
178
|
+
if (spec.toolName)
|
|
179
|
+
args = { name: spec.toolName, input: args };
|
|
180
|
+
return enrichTargetFailureWithDialogBlocker(await executeBridgePayload(requestId, spec.bridgeCommand, args, flags, runtime, undefined, {
|
|
181
|
+
mode: "execute",
|
|
182
|
+
mutation: true,
|
|
183
|
+
}), flags, runtime);
|
|
184
|
+
}
|
|
185
|
+
async function executeDefinition(tool, completion, definition, input, flags, runtime, requestId, dispatchStartedAtMs) {
|
|
186
|
+
let projectPath = typeof input.project === "string" ? input.project : process.cwd();
|
|
187
|
+
const execution = executionFromFlags(flags);
|
|
188
|
+
const timeoutMs = Math.max(1, execution.timeoutMs ?? tool.timeoutMs ?? 30_000);
|
|
189
|
+
const admissionAbsoluteDeadlineMs = dispatchStartedAtMs + timeoutMs;
|
|
190
|
+
let selected;
|
|
191
|
+
// package本地Tool也是live target的一等root;先固定实例,再由同一实例原子发放准入。
|
|
192
|
+
try {
|
|
193
|
+
if (!runtime.bridgeExecute && runtime.projectTools === undefined) {
|
|
194
|
+
const selectionFlags = typeof input.project === "string" && flags.project === undefined
|
|
195
|
+
? { ...flags, project: input.project }
|
|
196
|
+
: flags;
|
|
197
|
+
try {
|
|
198
|
+
selected = await selectInstanceForFlags(selectionFlags, runtime.dataDir ?? defaultDataDir());
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
const selectionFailure = instanceSelectionFailure(requestId, error);
|
|
202
|
+
if (tool.group !== "tools" || selectionFailure?.ok !== false || selectionFailure.error.code !== "E_INSTANCE_NOT_RUNNING")
|
|
203
|
+
throw error;
|
|
204
|
+
selected = await selectInstanceForFlags(selectionFlags, runtime.dataDir ?? defaultDataDir(), process.cwd(), "runtime");
|
|
205
|
+
}
|
|
206
|
+
projectPath = selected.instance.canonicalProjectPath;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
const selectionFailure = instanceSelectionFailure(requestId, error);
|
|
211
|
+
if (selectionFailure)
|
|
212
|
+
return selectionFailure;
|
|
213
|
+
throw error;
|
|
214
|
+
}
|
|
215
|
+
const admissionContext = await acquireToolAdmission(tool, completion, input, flags, runtime, requestId, timeoutMs, admissionAbsoluteDeadlineMs, selected);
|
|
216
|
+
if ("result" in admissionContext)
|
|
217
|
+
return admissionContext.result;
|
|
218
|
+
const { admission, admissions, supervisors, executionAbsoluteDeadlineMs } = admissionContext;
|
|
219
|
+
const absoluteDeadlineMs = executionAbsoluteDeadlineMs;
|
|
220
|
+
const rootRuntime = { ...runtime, rootAdmission: admission, rootAdmissions: admissions };
|
|
221
|
+
const run = async () => {
|
|
222
|
+
try {
|
|
223
|
+
const data = await definition.execute(input, {
|
|
224
|
+
requestId,
|
|
225
|
+
projectPath,
|
|
226
|
+
absoluteDeadlineMs,
|
|
227
|
+
execution,
|
|
228
|
+
dataDir: rootRuntime.dataDir,
|
|
229
|
+
artifactDir: getString(flags, "artifact-dir") ?? rootRuntime.dataDir ?? projectPath,
|
|
230
|
+
logPath: typeof input.logPath === "string" ? input.logPath : undefined,
|
|
231
|
+
flags,
|
|
232
|
+
projectTools: rootRuntime.projectTools,
|
|
233
|
+
rootAdmission: admission,
|
|
234
|
+
rootAdmissions: admissions,
|
|
235
|
+
bridgeExecute: rootRuntime.bridgeExecute,
|
|
236
|
+
fetch: rootRuntime.fetch,
|
|
237
|
+
commitEffect: async () => undefined,
|
|
238
|
+
});
|
|
239
|
+
if (!tool.outputSchema)
|
|
240
|
+
throw new StructuredToolError("E_TOOL_COMPLETION_PROOF_INVALID", `Tool ${tool.name} has no output schema for terminal proof.`, [
|
|
241
|
+
`Regenerate the Tool schema and completion registry for ${tool.name}.`
|
|
242
|
+
]);
|
|
243
|
+
let normalizedData;
|
|
244
|
+
try {
|
|
245
|
+
normalizedData = JSON.parse(JSON.stringify(data));
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
throw new StructuredToolError("E_TOOL_COMPLETION_PROOF_INVALID", `Tool ${tool.name} result is not JSON serializable.`, [
|
|
249
|
+
"Return only values allowed by the public output schema."
|
|
250
|
+
], { toolName: tool.name, reason: error instanceof Error ? error.message : String(error) });
|
|
251
|
+
}
|
|
252
|
+
const outputErrors = validateSchema(tool.outputSchema, normalizedData);
|
|
253
|
+
if (outputErrors.length > 0)
|
|
254
|
+
throw new StructuredToolError("E_TOOL_COMPLETION_PROOF_INVALID", `Tool ${tool.name} result failed output schema validation at ${outputErrors[0].path}.`, [
|
|
255
|
+
"Fix the Tool result or completion driver before retrying."
|
|
256
|
+
], { toolName: tool.name, errors: outputErrors });
|
|
257
|
+
validateLocalCompletionProof(tool.name, completion, normalizedData, input);
|
|
258
|
+
return success(requestId, normalizedData);
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
if (error instanceof PackageManagerError)
|
|
262
|
+
return failure(requestId, error.code, error.message, error.nextActions);
|
|
263
|
+
if (error instanceof StructuredToolError)
|
|
264
|
+
return failure(requestId, error.code, error.message, error.nextActions, error.details, error.transient === undefined ? undefined : { transient: error.transient, retryAfterMs: error.retryAfterMs });
|
|
265
|
+
return failure(requestId, "COMMAND_FAILED", error instanceof Error ? error.message : String(error), [`Run unitycli tools describe ${tool.name} for input requirements and examples.`]);
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
let result;
|
|
269
|
+
try {
|
|
270
|
+
result = await settleToolExecutionAtDeadline(tool.name, requestId, completion.mutation, absoluteDeadlineMs, run);
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
if (error instanceof PackageManagerError)
|
|
274
|
+
result = failure(requestId, error.code, error.message, error.nextActions);
|
|
275
|
+
else if (error instanceof StructuredToolError)
|
|
276
|
+
result = failure(requestId, error.code, error.message, error.nextActions, error.details);
|
|
277
|
+
else
|
|
278
|
+
result = failure(requestId, "COMMAND_FAILED", error instanceof Error ? error.message : String(error), [
|
|
279
|
+
`Run unitycli tools describe ${tool.name} for input requirements and examples.`
|
|
280
|
+
]);
|
|
281
|
+
}
|
|
282
|
+
if (rootResultHasTrustedTerminal(result))
|
|
283
|
+
await releaseUnconsumedCatalogAdmissions({ admissions, supervisors, executionAbsoluteDeadlineMs });
|
|
284
|
+
return result;
|
|
285
|
+
}
|
|
286
|
+
/** Tool自己的wait未按时settle时由框架结束CLI等待;已开始的Unity effect不因此停止。 */
|
|
287
|
+
export async function settleToolExecutionAtDeadline(toolName, requestId, mutation, absoluteDeadlineMs, run) {
|
|
288
|
+
const remainingMs = absoluteDeadlineMs - Date.now();
|
|
289
|
+
if (remainingMs <= 0)
|
|
290
|
+
return toolDeadlineFailure(toolName, requestId, mutation);
|
|
291
|
+
let timer;
|
|
292
|
+
try {
|
|
293
|
+
return await Promise.race([
|
|
294
|
+
run(),
|
|
295
|
+
new Promise((resolveTimeout) => {
|
|
296
|
+
timer = setTimeout(() => resolveTimeout(toolDeadlineFailure(toolName, requestId, mutation)), remainingMs);
|
|
297
|
+
}),
|
|
298
|
+
]);
|
|
299
|
+
}
|
|
300
|
+
finally {
|
|
301
|
+
if (timer)
|
|
302
|
+
clearTimeout(timer);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/** mutation超时只能读取业务状态,不能建议直接重试或声称底层执行已取消。 */
|
|
306
|
+
function toolDeadlineFailure(toolName, requestId, mutation) {
|
|
307
|
+
return failure(requestId, "E_EXECUTION_TIMEOUT", mutation
|
|
308
|
+
? `Tool ${toolName} did not return a terminal result before the immutable deadline; its effect may still be running or partially applied.`
|
|
309
|
+
: `Tool ${toolName} did not return a read result before the immutable deadline.`, mutation
|
|
310
|
+
? ["Inspect editor.state and the affected business state before deciding whether to submit a new request."]
|
|
311
|
+
: ["Inspect editor.state and submit a new read only after Unity is responsive."], mutation ? { outcome: "unknown" } : undefined, { transient: false, retryAfterMs: 0 });
|
|
312
|
+
}
|
|
313
|
+
/** TS Tool 的 terminal proof 与 C# driver 使用同一 execution-class 约束。 */
|
|
314
|
+
export function validateLocalCompletionProof(toolName, completion, result, input) {
|
|
315
|
+
if (completion.executionClass === "atomic" && completion.mutation === false)
|
|
316
|
+
return;
|
|
317
|
+
const preview = objectRecord(result);
|
|
318
|
+
if (preview?.dryRun === true || preview?.status === "dry_run")
|
|
319
|
+
return;
|
|
320
|
+
if (containsIntermediateCompletionState(result)) {
|
|
321
|
+
throw invalidCompletionProof(toolName, completion, "returned an intermediate accepted/requested/queued/started/triggered/running state");
|
|
322
|
+
}
|
|
323
|
+
const failedStatus = findFailedCompletionStatus(result);
|
|
324
|
+
if (failedStatus) {
|
|
325
|
+
throw invalidCompletionProof(toolName, completion, `returned failed terminal status ${failedStatus}`);
|
|
326
|
+
}
|
|
327
|
+
const toolSpecificProof = validateKnownLocalTerminal(toolName, completion, result, input);
|
|
328
|
+
if (completion.executionClass === "atomic")
|
|
329
|
+
return;
|
|
330
|
+
if (!toolSpecificProof) {
|
|
331
|
+
throw invalidCompletionProof(toolName, completion, `has no registered Tool-specific ${completion.executionClass} validator`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/** TS local/hybrid Tool 只接受工具专属业务断言,禁止把通用字段名当成 proof。 */
|
|
335
|
+
function validateKnownLocalTerminal(toolName, completion, result, input) {
|
|
336
|
+
const record = objectRecord(result);
|
|
337
|
+
if (!record)
|
|
338
|
+
return false;
|
|
339
|
+
if (toolName === "package.deploy") {
|
|
340
|
+
if (record.status === "dry_run")
|
|
341
|
+
return true;
|
|
342
|
+
const files = objectRecord(record.files);
|
|
343
|
+
if (record.status !== "deployed" || !nonEmptyString(record.targetPath) || !sha256(record.sourceHash) || !positiveInteger(record.copiedFileCount)
|
|
344
|
+
|| files?.proven !== true || !sha256(files.sourceHash) || !validLivePackageResolve(record.resolve))
|
|
345
|
+
throw invalidCompletionProof(toolName, completion, "did not prove deployed files and terminal PackageInfo resolution");
|
|
346
|
+
return true;
|
|
347
|
+
}
|
|
348
|
+
if (toolName === "package.restore") {
|
|
349
|
+
if (record.status === "dry_run")
|
|
350
|
+
return true;
|
|
351
|
+
const files = objectRecord(record.files);
|
|
352
|
+
if (record.status !== "restored" || !nonEmptyString(record.targetPath) || !nonnegativeInteger(record.copiedFileCount)
|
|
353
|
+
|| files?.proven !== true || typeof files.restoredFromBackup !== "boolean" || typeof files.removedDeployedPackage !== "boolean"
|
|
354
|
+
|| !validLivePackageResolve(record.resolve))
|
|
355
|
+
throw invalidCompletionProof(toolName, completion, "did not prove restored files and terminal PackageInfo resolution");
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
if (toolName === "package.registry.set") {
|
|
359
|
+
if (!nonEmptyString(record.manifestPath) || !nonEmptyString(record.registry))
|
|
360
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the manifest registry readback");
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
if (toolName === "package.registry.clear") {
|
|
364
|
+
if (!nonEmptyString(record.manifestPath) || record.registryCleared !== true)
|
|
365
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the cleared manifest registry readback");
|
|
366
|
+
return true;
|
|
367
|
+
}
|
|
368
|
+
if (toolName === "package.scoped-registry.add") {
|
|
369
|
+
const registry = objectRecord(record.registry);
|
|
370
|
+
if (!nonEmptyString(record.manifestPath) || !registry || !nonEmptyString(registry.name) || !nonEmptyString(registry.url) || !Array.isArray(registry.scopes) || registry.scopes.some((scope) => !nonEmptyString(scope)))
|
|
371
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the scoped registry manifest readback");
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
if (toolName === "package.scoped-registry.remove") {
|
|
375
|
+
if (record.dryRun !== true && (!nonEmptyString(record.manifestPath) || record.registryRemoved !== true))
|
|
376
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the removed scoped registry readback");
|
|
377
|
+
return true;
|
|
378
|
+
}
|
|
379
|
+
if (toolName === "package.install") {
|
|
380
|
+
const files = objectRecord(record.files);
|
|
381
|
+
const dependency = objectRecord(record.dependency);
|
|
382
|
+
if (record.action !== "install" || !nonEmptyString(record.manifestPath) || !sha256(record.manifestHash)
|
|
383
|
+
|| files?.proven !== true || files.manifestHash !== record.manifestHash
|
|
384
|
+
|| dependency?.present !== true || !nonEmptyString(dependency.name) || !nonEmptyString(dependency.version)
|
|
385
|
+
|| !validLivePackageResolve(record.resolve))
|
|
386
|
+
throw invalidCompletionProof(toolName, completion, "did not prove manifest installation and terminal PackageInfo resolution");
|
|
387
|
+
return true;
|
|
388
|
+
}
|
|
389
|
+
if (toolName === "package.remove") {
|
|
390
|
+
if (record.dryRun === true)
|
|
391
|
+
return true;
|
|
392
|
+
const files = objectRecord(record.files);
|
|
393
|
+
const dependency = objectRecord(record.dependency);
|
|
394
|
+
if (record.action !== "remove" || !nonEmptyString(record.manifestPath) || !sha256(record.manifestHash)
|
|
395
|
+
|| files?.proven !== true || files.manifestHash !== record.manifestHash
|
|
396
|
+
|| dependency?.present !== false || !nonEmptyString(dependency.name)
|
|
397
|
+
|| !validLivePackageResolve(record.resolve))
|
|
398
|
+
throw invalidCompletionProof(toolName, completion, "did not prove manifest removal and terminal PackageInfo resolution");
|
|
399
|
+
return true;
|
|
400
|
+
}
|
|
401
|
+
if (toolName === "package.resolve") {
|
|
402
|
+
if (!validLivePackageResolve(record))
|
|
403
|
+
throw invalidCompletionProof(toolName, completion, "did not prove terminal Unity PackageManager resolution");
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
if (toolName === "package.bridge-remove") {
|
|
407
|
+
if (record.action !== "bridge-remove" || !nonEmptyString(record.bridgePath) || !nonEmptyString(record.installMetadataPath))
|
|
408
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the Bridge package removal target");
|
|
409
|
+
return true;
|
|
410
|
+
}
|
|
411
|
+
if (toolName === "code.exec") {
|
|
412
|
+
const compile = objectRecord(record.compile);
|
|
413
|
+
const runtime = objectRecord(record.runtime);
|
|
414
|
+
const probeRequested = Object.prototype.hasOwnProperty.call(input ?? {}, "completionProbe");
|
|
415
|
+
if (!Array.isArray(compile?.diagnostics) || !runtime
|
|
416
|
+
|| !Object.prototype.hasOwnProperty.call(runtime, "returnValue")
|
|
417
|
+
|| typeof runtime.stdout !== "string" || typeof runtime.stderr !== "string"
|
|
418
|
+
|| typeof runtime.stdoutTruncated !== "boolean" || typeof runtime.stderrTruncated !== "boolean") {
|
|
419
|
+
throw invalidCompletionProof(toolName, completion, "did not return compilation and runtime results");
|
|
420
|
+
}
|
|
421
|
+
if (!probeRequested)
|
|
422
|
+
return true;
|
|
423
|
+
const readback = objectRecord(record.completion);
|
|
424
|
+
const assertions = readback?.assertions;
|
|
425
|
+
if (!Array.isArray(assertions) || assertions.length === 0 || assertions.some((item) => {
|
|
426
|
+
const assertion = objectRecord(item);
|
|
427
|
+
return !assertion || !nonEmptyString(assertion.path) || !Object.prototype.hasOwnProperty.call(assertion, "value");
|
|
428
|
+
}))
|
|
429
|
+
throw invalidCompletionProof(toolName, completion, "did not return completionProbe fresh readback");
|
|
430
|
+
return true;
|
|
431
|
+
}
|
|
432
|
+
if (toolName === "asset.refresh") {
|
|
433
|
+
const effects = record.plannedEffects;
|
|
434
|
+
const effect = Array.isArray(effects) && effects.length === 1 ? objectRecord(effects[0]) : undefined;
|
|
435
|
+
const requestedPath = input?.path ?? input?.assetPath ?? input?.target;
|
|
436
|
+
if (!nonEmptyString(requestedPath) || record.path !== requestedPath || record.refreshed !== true || !nonEmptyString(record.options)
|
|
437
|
+
|| !effect || effect.type !== "asset.import" || effect.path !== record.path) {
|
|
438
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the requested asset reimport and stable path readback");
|
|
439
|
+
}
|
|
440
|
+
return true;
|
|
441
|
+
}
|
|
442
|
+
if (toolName === "package.embed") {
|
|
443
|
+
const effects = record.plannedEffects;
|
|
444
|
+
const effect = Array.isArray(effects) && effects.length === 1 ? objectRecord(effects[0]) : undefined;
|
|
445
|
+
const packageId = input?.package;
|
|
446
|
+
const embeddedPath = typeof record.embeddedPath === "string" ? record.embeddedPath.replaceAll("\\", "/") : "";
|
|
447
|
+
if (!nonEmptyString(packageId) || record.packageId !== packageId || !embeddedPath.endsWith(`/Packages/${packageId}`)
|
|
448
|
+
|| !effect || effect.type !== "package.embed" || effect.path !== packageId) {
|
|
449
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the requested embedded package and local package path");
|
|
450
|
+
}
|
|
451
|
+
return true;
|
|
452
|
+
}
|
|
453
|
+
if (toolName === "editor.compile") {
|
|
454
|
+
if (record.dryRun === true)
|
|
455
|
+
return true;
|
|
456
|
+
const compile = objectRecord(record.compile);
|
|
457
|
+
const status = compile?.status;
|
|
458
|
+
if (compile?.completed !== true || compile.errorCount !== 0 || (status !== undefined && status !== "clean" && status !== "warnings"))
|
|
459
|
+
throw invalidCompletionProof(toolName, completion, "did not prove a clean or warnings-only compile terminal");
|
|
460
|
+
return true;
|
|
461
|
+
}
|
|
462
|
+
if (toolName === "navmesh.bake" || toolName === "navmesh.surface.bake") {
|
|
463
|
+
if (record.dryRun === true)
|
|
464
|
+
return true;
|
|
465
|
+
const expectedKind = toolName === "navmesh.bake" ? "legacy" : "surfaces";
|
|
466
|
+
const topology = objectRecord(record.topology);
|
|
467
|
+
const effects = Array.isArray(record.plannedEffects) ? record.plannedEffects : [];
|
|
468
|
+
const effect = effects.length === 1 ? objectRecord(effects[0]) : undefined;
|
|
469
|
+
const surfaces = Array.isArray(record.surfaces) ? record.surfaces : undefined;
|
|
470
|
+
if (!nonEmptyString(record.operationId) || record.kind !== expectedKind || record.status !== "completed" || !timestamp(record.startedAt) || !timestamp(record.finishedAt)
|
|
471
|
+
|| !nonnegativeInteger(record.durationMs) || !topology || !nonnegativeInteger(topology.vertexCount) || !nonnegativeInteger(topology.indexCount) || !sha256(topology.sha256)
|
|
472
|
+
|| !surfaces || (expectedKind === "legacy" ? surfaces.length !== 0 : surfaces.length === 0)
|
|
473
|
+
|| !effect || effect.type !== toolName || !positiveInteger(effect.targetCount)) {
|
|
474
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the exact durable NavMesh bake terminal");
|
|
475
|
+
}
|
|
476
|
+
if (expectedKind === "surfaces" && surfaces.some((value) => {
|
|
477
|
+
const surface = objectRecord(value);
|
|
478
|
+
return !surface || !nonEmptyString(surface.globalId) || !nonEmptyString(surface.dataPath) || !sha256(surface.dataHash) || !positiveInteger(surface.dataSizeBytes);
|
|
479
|
+
}))
|
|
480
|
+
throw invalidCompletionProof(toolName, completion, "did not prove every NavMeshSurface data asset");
|
|
481
|
+
return true;
|
|
482
|
+
}
|
|
483
|
+
if (toolName === "occlusion.bake") {
|
|
484
|
+
if (record.dryRun === true)
|
|
485
|
+
return true;
|
|
486
|
+
const effectiveSettings = objectRecord(record.effectiveSettings);
|
|
487
|
+
const before = objectRecord(record.before);
|
|
488
|
+
const after = objectRecord(record.after);
|
|
489
|
+
const afterSettings = objectRecord(after?.settings);
|
|
490
|
+
const scenes = Array.isArray(record.scenes) ? record.scenes : undefined;
|
|
491
|
+
const effects = Array.isArray(record.plannedEffects) ? record.plannedEffects : [];
|
|
492
|
+
const effect = effects.length === 1 ? objectRecord(effects[0]) : undefined;
|
|
493
|
+
if (!nonEmptyString(record.operationId) || record.status !== "completed" || !timestamp(record.startedAt) || !timestamp(record.finishedAt)
|
|
494
|
+
|| Date.parse(record.finishedAt) < Date.parse(record.startedAt) || !nonnegativeInteger(record.durationMs)
|
|
495
|
+
|| !effectiveSettings || !validOcclusionSettings(effectiveSettings) || !validOcclusionSnapshot(before) || !validOcclusionSnapshot(after)
|
|
496
|
+
|| !afterSettings || !sameOcclusionSettings(effectiveSettings, afterSettings)
|
|
497
|
+
|| !scenes || scenes.length === 0 || !effect || effect.type !== "occlusion.bake" || effect.target !== "open-scenes" || effect.targetCount !== scenes.length) {
|
|
498
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the exact durable Occlusion bake terminal");
|
|
499
|
+
}
|
|
500
|
+
if (scenes.some((value) => {
|
|
501
|
+
const scene = objectRecord(value);
|
|
502
|
+
return !scene || !nonEmptyString(scene.path) || !String(scene.path).startsWith("Assets/") || !String(scene.path).endsWith(".unity")
|
|
503
|
+
|| !/^[a-f0-9]{32}$/i.test(String(scene.guid)) || !sha256(scene.sha256) || !positiveInteger(scene.sizeBytes) || scene.dirty !== false;
|
|
504
|
+
}))
|
|
505
|
+
throw invalidCompletionProof(toolName, completion, "did not prove every frozen Occlusion scene artifact");
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
if (toolName === "build.run") {
|
|
509
|
+
const targets = record.targets;
|
|
510
|
+
if (!Array.isArray(targets) || targets.length === 0)
|
|
511
|
+
throw invalidCompletionProof(toolName, completion, "did not return terminal BuildReport targets");
|
|
512
|
+
for (const target of targets) {
|
|
513
|
+
const item = objectRecord(target);
|
|
514
|
+
const artifact = objectRecord(item?.artifact);
|
|
515
|
+
if (!item || !artifact || item.result !== "Succeeded" || !nonEmptyString(item.target) || !relativePublicPath(item.outputPath)
|
|
516
|
+
|| artifact.exists !== true || artifact.outputPath !== item.outputPath || !relativePublicPath(artifact.outputPath)
|
|
517
|
+
|| !positiveInteger(artifact.fileCount) || !positiveNumber(artifact.size)
|
|
518
|
+
|| !(sha256(artifact.hash) || sha256(artifact.treeHash))) {
|
|
519
|
+
throw invalidCompletionProof(toolName, completion, "did not prove a successful project-relative BuildReport artifact");
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
return true;
|
|
523
|
+
}
|
|
524
|
+
if (toolName === "test.run") {
|
|
525
|
+
const summary = objectRecord(record.summary);
|
|
526
|
+
const failures = record.failures;
|
|
527
|
+
if (!summary || !Array.isArray(failures) || !["EditMode", "PlayMode"].includes(String(summary.platform))
|
|
528
|
+
|| summary.status !== "passed" || !nonnegativeInteger(summary.testCount) || !nonnegativeInteger(summary.passed)
|
|
529
|
+
|| !nonnegativeInteger(summary.failed) || !nonnegativeInteger(summary.skipped) || !nonnegativeInteger(summary.inconclusive)
|
|
530
|
+
|| typeof summary.duration !== "number" || summary.duration < 0 || !timestamp(summary.startedAt) || !timestamp(summary.finishedAt)) {
|
|
531
|
+
throw invalidCompletionProof(toolName, completion, "did not prove a passed RunFinished callback terminal");
|
|
532
|
+
}
|
|
533
|
+
if (record.xml !== undefined) {
|
|
534
|
+
const xml = objectRecord(record.xml);
|
|
535
|
+
if (!xml || xml.kind !== "nunit-xml" || !nonEmptyString(xml.path) || !sha256(xml.hash) || !positiveInteger(xml.size))
|
|
536
|
+
throw invalidCompletionProof(toolName, completion, "did not prove the NUnit XML artifact");
|
|
537
|
+
}
|
|
538
|
+
return true;
|
|
539
|
+
}
|
|
540
|
+
if (toolName === "editor.refresh") {
|
|
541
|
+
const editorState = objectRecord(record.editorState);
|
|
542
|
+
if (typeof record.changed !== "boolean" || typeof record.compilationTriggered !== "boolean"
|
|
543
|
+
|| typeof record.sourceFileCount !== "number" || !Number.isSafeInteger(record.sourceFileCount) || record.sourceFileCount < 0
|
|
544
|
+
|| !sha256(record.sourceFingerprint) || !sha256(record.dependencyVersion)
|
|
545
|
+
|| !editorState || editorState.status !== "ready" || editorState.compile !== false || editorState.import !== false) {
|
|
546
|
+
throw invalidCompletionProof(toolName, completion, "did not prove a stable source and dependency refresh readback");
|
|
547
|
+
}
|
|
548
|
+
return true;
|
|
549
|
+
}
|
|
550
|
+
if (toolName === "editor.dialog.click") {
|
|
551
|
+
if (record.clicked !== true || !nonEmptyString(record.dialogId) || !nonEmptyString(record.title) || !nonEmptyString(record.button)) {
|
|
552
|
+
throw invalidCompletionProof(toolName, completion, "did not prove a completed dialog click");
|
|
553
|
+
}
|
|
554
|
+
return true;
|
|
555
|
+
}
|
|
556
|
+
return false;
|
|
557
|
+
}
|
|
558
|
+
function invalidCompletionProof(toolName, completion, reason) {
|
|
559
|
+
return new StructuredToolError("E_TOOL_COMPLETION_PROOF_INVALID", `Tool ${toolName} ${reason}.`, [
|
|
560
|
+
"Wait for the business terminal and return its stable readback."
|
|
561
|
+
], { toolName, completionDriverId: completion.completionDriverId });
|
|
562
|
+
}
|
|
563
|
+
function objectRecord(value) {
|
|
564
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
565
|
+
}
|
|
566
|
+
function nonEmptyString(value) {
|
|
567
|
+
return typeof value === "string" && value.length > 0;
|
|
568
|
+
}
|
|
569
|
+
function positiveInteger(value) {
|
|
570
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
571
|
+
}
|
|
572
|
+
function positiveNumber(value) {
|
|
573
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
574
|
+
}
|
|
575
|
+
function nonnegativeInteger(value) {
|
|
576
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
|
|
577
|
+
}
|
|
578
|
+
function timestamp(value) {
|
|
579
|
+
return typeof value === "string" && Number.isFinite(Date.parse(value));
|
|
580
|
+
}
|
|
581
|
+
function sha256(value) {
|
|
582
|
+
return typeof value === "string" && /^[a-f0-9]{64}$/i.test(value);
|
|
583
|
+
}
|
|
584
|
+
function relativePublicPath(value) {
|
|
585
|
+
return typeof value === "string" && value.length > 0 && !/^(?:[A-Za-z]:[\\/]|\\\\|\/)/.test(value);
|
|
586
|
+
}
|
|
587
|
+
function validOcclusionSettings(value) {
|
|
588
|
+
return !!value && positiveFiniteNumber(value.smallestOccluder) && positiveFiniteNumber(value.smallestHole)
|
|
589
|
+
&& typeof value.backfaceThreshold === "number" && Number.isFinite(value.backfaceThreshold)
|
|
590
|
+
&& value.backfaceThreshold >= 1 && value.backfaceThreshold <= 100;
|
|
591
|
+
}
|
|
592
|
+
function validOcclusionSnapshot(value) {
|
|
593
|
+
return !!value && nonnegativeInteger(value.umbraDataSizeBytes) && typeof value.doesSceneHaveManualPortals === "boolean"
|
|
594
|
+
&& validOcclusionSettings(objectRecord(value.settings));
|
|
595
|
+
}
|
|
596
|
+
function sameOcclusionSettings(left, right) {
|
|
597
|
+
return ["smallestOccluder", "smallestHole", "backfaceThreshold"].every((field) => typeof left[field] === "number" && typeof right[field] === "number" && Math.abs(left[field] - right[field]) <= 0.00001);
|
|
598
|
+
}
|
|
599
|
+
function positiveFiniteNumber(value) {
|
|
600
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
601
|
+
}
|
|
602
|
+
function validLivePackageResolve(value) {
|
|
603
|
+
const result = objectRecord(value);
|
|
604
|
+
return !!result && result.status === "resolved" && sha256(result.manifestHash) && sha256(result.lockHash)
|
|
605
|
+
&& sha256(result.packageSnapshotHash) && nonnegativeInteger(result.packageCount) && Array.isArray(result.packages)
|
|
606
|
+
&& result.packages.every((item) => {
|
|
607
|
+
const pkg = objectRecord(item);
|
|
608
|
+
return !!pkg && nonEmptyString(pkg.name) && nonEmptyString(pkg.version) && nonEmptyString(pkg.source);
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
function containsIntermediateCompletionState(value) {
|
|
612
|
+
if (Array.isArray(value))
|
|
613
|
+
return value.some(containsIntermediateCompletionState);
|
|
614
|
+
if (!value || typeof value !== "object")
|
|
615
|
+
return false;
|
|
616
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
617
|
+
if (key.toLowerCase() === "status" && typeof nested === "string" && ["accepted", "requested", "queued", "started", "triggered", "running", "in_progress"].includes(nested.toLowerCase()))
|
|
618
|
+
return true;
|
|
619
|
+
if (["accepted", "requested", "queued", "started", "triggered"].includes(key.toLowerCase()) && nested !== undefined && nested !== null && nested !== false && nested !== "")
|
|
620
|
+
return true;
|
|
621
|
+
if (containsIntermediateCompletionState(nested))
|
|
622
|
+
return true;
|
|
623
|
+
}
|
|
624
|
+
return false;
|
|
625
|
+
}
|
|
626
|
+
/** 任何嵌套 operation 的失败终态都会使整个直接调用失败,顶层成功字段不能覆盖它。 */
|
|
627
|
+
function findFailedCompletionStatus(value) {
|
|
628
|
+
if (Array.isArray(value)) {
|
|
629
|
+
for (const item of value) {
|
|
630
|
+
const failed = findFailedCompletionStatus(item);
|
|
631
|
+
if (failed)
|
|
632
|
+
return failed;
|
|
633
|
+
}
|
|
634
|
+
return undefined;
|
|
635
|
+
}
|
|
636
|
+
if (!value || typeof value !== "object")
|
|
637
|
+
return undefined;
|
|
638
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
639
|
+
if (key.toLowerCase() === "status" && typeof nested === "string"
|
|
640
|
+
&& ["failed", "error", "timeout", "wait_timeout", "compile_errors", "console_errors", "blocked", "cancelled", "canceled", "aborted", "outcome_unknown", "unsupported"].includes(nested.toLowerCase())) {
|
|
641
|
+
return nested;
|
|
642
|
+
}
|
|
643
|
+
const failed = findFailedCompletionStatus(nested);
|
|
644
|
+
if (failed)
|
|
645
|
+
return failed;
|
|
646
|
+
}
|
|
647
|
+
return undefined;
|
|
648
|
+
}
|
|
649
|
+
async function acquireToolAdmission(tool, completion, input, flags, runtime, requestId, timeoutMs, admissionAbsoluteDeadlineMs, selected) {
|
|
650
|
+
if (MULTI_TARGET_CATALOG_TOOLS.has(tool.name)) {
|
|
651
|
+
const acquired = await acquireCatalogAdmissions(tool.name, input, flags, runtime, requestId, timeoutMs, admissionAbsoluteDeadlineMs, JSON.stringify(completion));
|
|
652
|
+
if ("result" in acquired)
|
|
653
|
+
return acquired;
|
|
654
|
+
const admission = acquired.admissions.editor ?? acquired.admissions.runtime;
|
|
655
|
+
const supervisor = acquired.supervisors[admission.target];
|
|
656
|
+
return { admission, supervisor, ...acquired };
|
|
657
|
+
}
|
|
658
|
+
const target = selected?.instance.activeSession?.target ?? selected?.instance.target ?? toolTarget(tool, flags);
|
|
659
|
+
const admissionFlags = selected ? { ...flags, instance: selected.instance.instanceId } : flags;
|
|
660
|
+
const supervisor = new SessionSupervisor(admissionFlags, runtime);
|
|
661
|
+
try {
|
|
662
|
+
const admission = await supervisor.acquireRootAdmission({
|
|
663
|
+
requestId,
|
|
664
|
+
command: tool.name,
|
|
665
|
+
input,
|
|
666
|
+
dryRun: getBoolean(flags, "dry-run") || getBoolean(flags, "preflight"),
|
|
667
|
+
target,
|
|
668
|
+
completionContractIdentity: JSON.stringify(completion),
|
|
669
|
+
timeoutMs,
|
|
670
|
+
admissionAbsoluteDeadlineMs,
|
|
671
|
+
});
|
|
672
|
+
return {
|
|
673
|
+
admission,
|
|
674
|
+
supervisor,
|
|
675
|
+
admissions: { [admission.target]: admission },
|
|
676
|
+
supervisors: { [admission.target]: supervisor },
|
|
677
|
+
executionAbsoluteDeadlineMs: admission.executionAbsoluteDeadlineMs,
|
|
678
|
+
};
|
|
679
|
+
}
|
|
680
|
+
catch (error) {
|
|
681
|
+
const selectionFailure = instanceSelectionFailure(requestId, error);
|
|
682
|
+
if (selectionFailure)
|
|
683
|
+
return { result: selectionFailure };
|
|
684
|
+
if (error instanceof SessionSupervisorError) {
|
|
685
|
+
return { result: failure(requestId, error.code, error.message, error.nextActions, error.details, {
|
|
686
|
+
transient: error.transient,
|
|
687
|
+
retryAfterMs: error.retryAfterMs,
|
|
688
|
+
}) };
|
|
689
|
+
}
|
|
690
|
+
return { result: failure(requestId, "BRIDGE_CONNECTION_FAILED", error instanceof Error ? error.message : String(error), [
|
|
691
|
+
"Run unitycli instances list and inspect the selected Unity session.",
|
|
692
|
+
], undefined, { transient: true, retryAfterMs: 100 }) };
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
function toolTarget(tool, flags) {
|
|
696
|
+
return tool.target === "runtime" || (tool.target === "both" && getBoolean(flags, "runtime")) ? "runtime" : "editor";
|
|
697
|
+
}
|
|
698
|
+
const UNKNOWN_ROOT_OUTCOME_CODES = new Set([
|
|
699
|
+
"E_EXECUTION_TIMEOUT",
|
|
700
|
+
"BRIDGE_CONNECTION_FAILED",
|
|
701
|
+
"E_BRIDGE_RESPONSE_INVALID",
|
|
702
|
+
"E_BRIDGE_RESPONSE_MISMATCH",
|
|
703
|
+
"COMMAND_FAILED",
|
|
704
|
+
]);
|
|
705
|
+
function rootResultHasTrustedTerminal(result) {
|
|
706
|
+
return result.ok || !UNKNOWN_ROOT_OUTCOME_CODES.has(result.error.code);
|
|
707
|
+
}
|
|
708
|
+
async function executeLiveTool(tool, completion, input, flags, runtime, requestId, dispatchStartedAtMs) {
|
|
709
|
+
const timeoutMs = Math.max(1, executionFromFlags(flags).timeoutMs ?? tool.timeoutMs ?? 30_000);
|
|
710
|
+
const admissionContext = await acquireToolAdmission(tool, completion, input, flags, runtime, requestId, timeoutMs, dispatchStartedAtMs + timeoutMs);
|
|
711
|
+
if ("result" in admissionContext)
|
|
712
|
+
return admissionContext.result;
|
|
713
|
+
const { admission, supervisor } = admissionContext;
|
|
714
|
+
const runtimeTarget = admission.target === "runtime";
|
|
715
|
+
const wrapper = runtimeTarget ? "runtime-tool.run" : "project-tool.run";
|
|
716
|
+
const descriptorBinding = {
|
|
717
|
+
...(tool.liveDescriptorFingerprint ? { liveDescriptorFingerprint: tool.liveDescriptorFingerprint } : {})
|
|
718
|
+
};
|
|
719
|
+
const rootRuntime = { ...runtime, rootAdmission: admission };
|
|
720
|
+
// live descriptor已完成schema校验,wrapper直接承载typed input并复用同一root admission。
|
|
721
|
+
const mutation = toolIsMutation(tool);
|
|
722
|
+
const result = await enrichTargetFailureWithDialogBlocker(await executeBridgeCommand(requestId, wrapper, bridgeWrapperFlags(flags, input), tool.name, rootRuntime, descriptorBinding, {
|
|
723
|
+
mode: "execute",
|
|
724
|
+
mutation,
|
|
725
|
+
defaultTimeoutMs: timeoutMs,
|
|
726
|
+
absoluteDeadlineMs: admission.executionAbsoluteDeadlineMs,
|
|
727
|
+
}), flags, rootRuntime);
|
|
728
|
+
if (rootResultHasTrustedTerminal(result))
|
|
729
|
+
await supervisor.completeRootAdmission(admission);
|
|
730
|
+
return result;
|
|
731
|
+
}
|
|
732
|
+
/** Bridge wrappers may discard supervisor details; append one independent read-only modal diagnosis to target failures. */
|
|
733
|
+
export async function enrichTargetFailureWithDialogBlocker(result, flags, runtime, observer = new EditorBlockerObserver()) {
|
|
734
|
+
if (result.ok || (result.error.details && typeof result.error.details === "object" && Array.isArray(result.error.details.blockers)))
|
|
735
|
+
return result;
|
|
736
|
+
try {
|
|
737
|
+
const deadlineMs = Date.now() + 10_000;
|
|
738
|
+
const selection = await selectObservationInstanceForFlags(flags, runtime.dataDir ?? defaultDataDir(), Math.max(0, deadlineMs - Date.now()));
|
|
739
|
+
const instance = selection.instance;
|
|
740
|
+
const observation = await observer.observe({ instanceId: instance.instanceId, canonicalProjectPath: instance.canonicalProjectPath, displayProjectPath: instance.displayProjectPath }, deadlineMs, instance.activeSession);
|
|
741
|
+
const blockers = observation.outcome === "observed-blocked" ? sanitizeEditorBlockers(observation.blockers) : [];
|
|
742
|
+
if (blockers.length === 0)
|
|
743
|
+
return result;
|
|
744
|
+
const details = result.error.details && typeof result.error.details === "object" && !Array.isArray(result.error.details) ? result.error.details : {};
|
|
745
|
+
const title = blockers[0].title;
|
|
746
|
+
return { ...result, error: { ...result.error, message: `${result.error.message} Modal dialog '${title}' was observed.`, details: { ...details, blockers }, nextActions: [
|
|
747
|
+
"Run unitycli tools run editor.dialogs to inspect the current modal dialog.",
|
|
748
|
+
"Run unitycli tools run editor.dialog.click with a current dialogId and exact button label.",
|
|
749
|
+
] } };
|
|
750
|
+
}
|
|
751
|
+
catch {
|
|
752
|
+
// An unproven probe must not be represented as an empty blocker list or replace the original failure.
|
|
753
|
+
return result;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
async function parseTypedInput(flags, requestId, maxBytes, absoluteDeadlineMs) {
|
|
757
|
+
try {
|
|
758
|
+
requireInputDeadline(absoluteDeadlineMs);
|
|
759
|
+
const inputFile = getString(flags, "input-file");
|
|
760
|
+
if (inputFile) {
|
|
761
|
+
const text = await readBoundedInputFile(resolve(inputFile), maxBytes, absoluteDeadlineMs);
|
|
762
|
+
if (text === undefined)
|
|
763
|
+
return inputTooLarge(requestId, "--input-file", maxBytes);
|
|
764
|
+
requireInputDeadline(absoluteDeadlineMs);
|
|
765
|
+
return parseInputText(text, "--input-file", requestId);
|
|
766
|
+
}
|
|
767
|
+
if (getBoolean(flags, "stdin")) {
|
|
768
|
+
const stdin = await readStdin(maxBytes, absoluteDeadlineMs);
|
|
769
|
+
if (stdin === undefined)
|
|
770
|
+
return inputTooLarge(requestId, "--stdin", maxBytes);
|
|
771
|
+
requireInputDeadline(absoluteDeadlineMs);
|
|
772
|
+
if (stdin.trim())
|
|
773
|
+
return parseInputText(stdin, "--stdin", requestId);
|
|
774
|
+
}
|
|
775
|
+
const input = getString(flags, "input");
|
|
776
|
+
if (input !== undefined && maxBytes !== undefined && Buffer.byteLength(input, "utf8") > maxBytes)
|
|
777
|
+
return inputTooLarge(requestId, "--input", maxBytes);
|
|
778
|
+
requireInputDeadline(absoluteDeadlineMs);
|
|
779
|
+
return input === undefined ? { ok: true, input: {} } : parseInputText(input, "--input", requestId);
|
|
780
|
+
}
|
|
781
|
+
catch (error) {
|
|
782
|
+
if (error instanceof InputDeadlineExceeded)
|
|
783
|
+
return inputDeadlineExceeded(requestId);
|
|
784
|
+
throw error;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
function parseInputText(text, source, requestId) {
|
|
788
|
+
try {
|
|
789
|
+
const value = JSON.parse(text);
|
|
790
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
791
|
+
return { ok: false, error: failure(requestId, "E_SCHEMA_INVALID", `${source} must contain a JSON object.`, ["Pass an object matching the tool inputSchema."], {
|
|
792
|
+
path: "$",
|
|
793
|
+
expected: "object",
|
|
794
|
+
actual: Array.isArray(value) ? "array" : value === null ? "null" : typeof value
|
|
795
|
+
}) };
|
|
796
|
+
}
|
|
797
|
+
return { ok: true, input: value };
|
|
798
|
+
}
|
|
799
|
+
catch (error) {
|
|
800
|
+
return { ok: false, error: failure(requestId, "E_TOOL_INPUT_JSON_INVALID", `${source} must be valid JSON. ${error instanceof Error ? error.message : String(error)}`, ["In PowerShell use single quotes around JSON, or use --input-file for complex input."]) };
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
class InputDeadlineExceeded extends Error {
|
|
804
|
+
}
|
|
805
|
+
/** 从同一文件句柄读取typed input,并在JSON物化前执行字节和deadline上限。 */
|
|
806
|
+
async function readBoundedInputFile(path, maxBytes, absoluteDeadlineMs) {
|
|
807
|
+
const openPromise = open(path, "r");
|
|
808
|
+
const handle = await beforeInputDeadline(openPromise, absoluteDeadlineMs, () => {
|
|
809
|
+
void openPromise.then((lateHandle) => lateHandle.close()).catch(() => undefined);
|
|
810
|
+
});
|
|
811
|
+
const chunks = [];
|
|
812
|
+
let total = 0;
|
|
813
|
+
let closeDeferred = false;
|
|
814
|
+
try {
|
|
815
|
+
while (true) {
|
|
816
|
+
requireInputDeadline(absoluteDeadlineMs);
|
|
817
|
+
const capacity = maxBytes === undefined ? 64 * 1024 : Math.min(64 * 1024, maxBytes + 1 - total);
|
|
818
|
+
const buffer = Buffer.allocUnsafe(capacity);
|
|
819
|
+
const readPromise = handle.read(buffer, 0, buffer.length, null);
|
|
820
|
+
const { bytesRead } = await beforeInputDeadline(readPromise, absoluteDeadlineMs, () => {
|
|
821
|
+
closeDeferred = true;
|
|
822
|
+
void readPromise.then(() => handle.close(), () => handle.close()).catch(() => undefined);
|
|
823
|
+
});
|
|
824
|
+
if (bytesRead === 0)
|
|
825
|
+
break;
|
|
826
|
+
total += bytesRead;
|
|
827
|
+
if (maxBytes !== undefined && total > maxBytes)
|
|
828
|
+
return undefined;
|
|
829
|
+
chunks.push(buffer.subarray(0, bytesRead));
|
|
830
|
+
}
|
|
831
|
+
requireInputDeadline(absoluteDeadlineMs);
|
|
832
|
+
return Buffer.concat(chunks, total).toString("utf8");
|
|
833
|
+
}
|
|
834
|
+
finally {
|
|
835
|
+
if (!closeDeferred)
|
|
836
|
+
await handle.close();
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
/** 事件式读取stdin,达到字节或deadline上限时立即解除监听。 */
|
|
840
|
+
async function readStdin(maxBytes, absoluteDeadlineMs) {
|
|
841
|
+
if (process.stdin.isTTY)
|
|
842
|
+
return "";
|
|
843
|
+
requireInputDeadline(absoluteDeadlineMs);
|
|
844
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
845
|
+
let data = "";
|
|
846
|
+
let total = 0;
|
|
847
|
+
let timer;
|
|
848
|
+
const cleanup = () => {
|
|
849
|
+
if (timer)
|
|
850
|
+
clearTimeout(timer);
|
|
851
|
+
process.stdin.off("data", onData);
|
|
852
|
+
process.stdin.off("end", onEnd);
|
|
853
|
+
process.stdin.off("error", onError);
|
|
854
|
+
process.stdin.pause();
|
|
855
|
+
};
|
|
856
|
+
const finish = (value) => { cleanup(); resolvePromise(value); };
|
|
857
|
+
const onData = (chunk) => {
|
|
858
|
+
const text = typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
859
|
+
total += Buffer.byteLength(text, "utf8");
|
|
860
|
+
if (maxBytes !== undefined && total > maxBytes) {
|
|
861
|
+
finish(undefined);
|
|
862
|
+
return;
|
|
863
|
+
}
|
|
864
|
+
data += text;
|
|
865
|
+
};
|
|
866
|
+
const onEnd = () => finish(data);
|
|
867
|
+
const onError = (error) => { cleanup(); rejectPromise(error); };
|
|
868
|
+
process.stdin.setEncoding("utf8");
|
|
869
|
+
process.stdin.on("data", onData);
|
|
870
|
+
process.stdin.once("end", onEnd);
|
|
871
|
+
process.stdin.once("error", onError);
|
|
872
|
+
if (absoluteDeadlineMs !== undefined)
|
|
873
|
+
timer = setTimeout(() => { cleanup(); rejectPromise(new InputDeadlineExceeded()); }, Math.max(1, absoluteDeadlineMs - Date.now()));
|
|
874
|
+
process.stdin.resume();
|
|
875
|
+
});
|
|
876
|
+
}
|
|
877
|
+
/** 将一个不可取消的本地I/O等待限制在入口deadline内,并由调用方安排迟到资源回收。 */
|
|
878
|
+
async function beforeInputDeadline(operation, absoluteDeadlineMs, onLate) {
|
|
879
|
+
if (absoluteDeadlineMs === undefined)
|
|
880
|
+
return operation;
|
|
881
|
+
requireInputDeadline(absoluteDeadlineMs);
|
|
882
|
+
let timer;
|
|
883
|
+
try {
|
|
884
|
+
return await Promise.race([
|
|
885
|
+
operation,
|
|
886
|
+
new Promise((_, rejectPromise) => { timer = setTimeout(() => { onLate?.(); rejectPromise(new InputDeadlineExceeded()); }, Math.max(1, absoluteDeadlineMs - Date.now())); }),
|
|
887
|
+
]);
|
|
888
|
+
}
|
|
889
|
+
finally {
|
|
890
|
+
if (timer)
|
|
891
|
+
clearTimeout(timer);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
function requireInputDeadline(absoluteDeadlineMs) {
|
|
895
|
+
if (absoluteDeadlineMs !== undefined && (!Number.isFinite(absoluteDeadlineMs) || Date.now() >= absoluteDeadlineMs))
|
|
896
|
+
throw new InputDeadlineExceeded();
|
|
897
|
+
}
|
|
898
|
+
/** 统一生成code.exec本地typed input超限错误。 */
|
|
899
|
+
function inputTooLarge(requestId, source, maxBytes) {
|
|
900
|
+
return { ok: false, error: failure(requestId, "E_CODE_INPUT_TOO_LARGE", `${source} exceeds the ${maxBytes}-byte code.exec typed-input limit.`, ["Use a smaller JSON input and keep Runtime Code source below its documented local budget."]) };
|
|
901
|
+
}
|
|
902
|
+
function inputDeadlineExceeded(requestId) {
|
|
903
|
+
return { ok: false, error: failure(requestId, "E_EXECUTION_TIMEOUT", "code.exec typed input did not finish reading before the immutable deadline.", ["Provide bounded input from a responsive local source or submit a new request with a sufficient timeout."]) };
|
|
904
|
+
}
|
|
905
|
+
const TOOL_CONTROL_FLAGS = new Set([
|
|
906
|
+
"input", "input-file", "stdin", "raw", "format",
|
|
907
|
+
"instance", "project", "runtime", "timeout-ms", "artifact-dir", "dry-run"
|
|
908
|
+
]);
|
|
909
|
+
/** typed input 与 execution/selector 控制项保持严格隔离。 */
|
|
910
|
+
function requestFromInput(tool, input, flags, positionalTarget) {
|
|
911
|
+
const request = { ...input };
|
|
912
|
+
const required = Array.isArray(tool.inputSchema.required) ? tool.inputSchema.required.map(String) : [];
|
|
913
|
+
if (positionalTarget !== undefined && required.length === 1)
|
|
914
|
+
request[required[0]] ??= positionalTarget;
|
|
915
|
+
const properties = tool.inputSchema.properties && typeof tool.inputSchema.properties === "object"
|
|
916
|
+
? tool.inputSchema.properties
|
|
917
|
+
: {};
|
|
918
|
+
if (positionalTarget !== undefined && "positionalTarget" in properties)
|
|
919
|
+
request.positionalTarget ??= positionalTarget;
|
|
920
|
+
for (const [key, value] of Object.entries(flags)) {
|
|
921
|
+
if (key.startsWith("__") || TOOL_CONTROL_FLAGS.has(key))
|
|
922
|
+
continue;
|
|
923
|
+
const property = key.replace(/-([a-z])/g, (_match, letter) => letter.toUpperCase());
|
|
924
|
+
if (property in properties && request[property] === undefined)
|
|
925
|
+
request[property] = coerceFlagValue(value, properties[property]);
|
|
926
|
+
}
|
|
927
|
+
return request;
|
|
928
|
+
}
|
|
929
|
+
function coerceFlagValue(value, schema) {
|
|
930
|
+
if (typeof value !== "string" || !schema || typeof schema !== "object" || Array.isArray(schema))
|
|
931
|
+
return value;
|
|
932
|
+
const type = schema.type;
|
|
933
|
+
if (type === "number" && value.trim() !== "" && Number.isFinite(Number(value)))
|
|
934
|
+
return Number(value);
|
|
935
|
+
if (type === "boolean" && (value === "true" || value === "false"))
|
|
936
|
+
return value === "true";
|
|
937
|
+
return value;
|
|
938
|
+
}
|
|
939
|
+
/** execution timeout 是命令控制面;非法值必须在任何 selector、journal 或 effect 前失败。 */
|
|
940
|
+
function validateExecutionTimeoutFlags(flags, requestId) {
|
|
941
|
+
for (const name of ["timeout-ms"]) {
|
|
942
|
+
const raw = flags[name];
|
|
943
|
+
if (raw === undefined)
|
|
944
|
+
continue;
|
|
945
|
+
const value = typeof raw === "string" && raw.trim() !== "" ? Number(raw) : Number.NaN;
|
|
946
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
947
|
+
return failure(requestId, "E_SCHEMA_INVALID", `--${name} must be a positive integer.`, [
|
|
948
|
+
`Pass --${name} with a positive integer number of milliseconds.`
|
|
949
|
+
], { path: `$.execution.${name === "timeout-ms" ? "timeoutMs" : "waitTimeoutMs"}`, expected: "positive integer", actual: raw });
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
return undefined;
|
|
953
|
+
}
|
|
954
|
+
function executionFromFlags(flags) {
|
|
955
|
+
const number = (name) => typeof flags[name] === "string" && Number.isFinite(Number(flags[name])) ? Number(flags[name]) : undefined;
|
|
956
|
+
return {
|
|
957
|
+
...(getBoolean(flags, "dry-run") ? { dryRun: true } : {}),
|
|
958
|
+
...(number("timeout-ms") !== undefined ? { timeoutMs: number("timeout-ms") } : {})
|
|
959
|
+
};
|
|
960
|
+
}
|
|
961
|
+
function withStructuredInput(flags, input) {
|
|
962
|
+
return Object.keys(input).length > 0 ? { ...flags, __structuredInput: JSON.stringify(input) } : flags;
|
|
963
|
+
}
|
|
964
|
+
/** wrapper spec 只读取 input/input-file,因此显式替换为已解析并校验的目标 payload。 */
|
|
965
|
+
function bridgeWrapperFlags(flags, input) {
|
|
966
|
+
const result = { ...flags, input: JSON.stringify(input), __structuredInput: JSON.stringify(input) };
|
|
967
|
+
delete result["input-file"];
|
|
968
|
+
delete result.stdin;
|
|
969
|
+
return result;
|
|
970
|
+
}
|
|
971
|
+
//# sourceMappingURL=dispatcher.js.map
|