@alpsckr/unitycli 0.4.3 → 0.4.5
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 +5 -5
- package/contracts/command-contract.json +109 -217
- package/contracts/package-files.json +374 -294
- package/contracts/stable-session/direct-call-semantics.json +8 -2
- package/contracts/tool-completion-contract.json +148 -672
- package/dist/bridge/admission.d.ts +17 -1
- package/dist/bridge/admission.js +2 -0
- package/dist/bridge/admission.js.map +1 -1
- package/dist/bridge/domains/asset.js +3 -1
- package/dist/bridge/domains/asset.js.map +1 -1
- package/dist/bridge/domains/camera.js +39 -7
- package/dist/bridge/domains/camera.js.map +1 -1
- package/dist/bridge/domains/console.js +2 -1
- package/dist/bridge/domains/console.js.map +1 -1
- package/dist/bridge/domains/doctor.d.ts +3 -0
- package/dist/bridge/domains/doctor.js +8 -0
- package/dist/bridge/domains/doctor.js.map +1 -0
- package/dist/bridge/domains/editor.js +0 -4
- package/dist/bridge/domains/editor.js.map +1 -1
- package/dist/bridge/domains/game-object.js +4 -12
- package/dist/bridge/domains/game-object.js.map +1 -1
- package/dist/bridge/domains/graphics.js +1 -16
- package/dist/bridge/domains/graphics.js.map +1 -1
- package/dist/bridge/domains/object.js +3 -0
- package/dist/bridge/domains/object.js.map +1 -1
- package/dist/bridge/domains/physics.js +1 -2
- package/dist/bridge/domains/physics.js.map +1 -1
- package/dist/bridge/domains/profiler.js +18 -7
- package/dist/bridge/domains/profiler.js.map +1 -1
- package/dist/bridge/domains/project-tool.js +4 -0
- package/dist/bridge/domains/project-tool.js.map +1 -1
- package/dist/bridge/domains/reflection.js +10 -2
- package/dist/bridge/domains/reflection.js.map +1 -1
- package/dist/bridge/domains/runtime-tool.js +3 -0
- package/dist/bridge/domains/runtime-tool.js.map +1 -1
- package/dist/bridge/domains/scene.js +3 -8
- package/dist/bridge/domains/scene.js.map +1 -1
- package/dist/bridge/domains/screenshot.js +30 -6
- package/dist/bridge/domains/screenshot.js.map +1 -1
- package/dist/bridge/domains/ui.js +3 -1
- package/dist/bridge/domains/ui.js.map +1 -1
- package/dist/bridge/index.d.ts +5 -5
- package/dist/bridge/index.js +6 -9
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/registry.js +3 -5
- package/dist/bridge/registry.js.map +1 -1
- package/dist/bridge/session-supervisor.d.ts +6 -3
- package/dist/bridge/session-supervisor.js +145 -39
- package/dist/bridge/session-supervisor.js.map +1 -1
- package/dist/bridge/start-diagnostics.d.ts +19 -0
- package/dist/bridge/start-diagnostics.js +96 -0
- package/dist/bridge/start-diagnostics.js.map +1 -0
- package/dist/bridge/types.d.ts +6 -5
- package/dist/bridge/types.js +16 -2
- package/dist/bridge/types.js.map +1 -1
- package/dist/catalog-protocol.d.ts +64 -0
- package/dist/catalog-protocol.js +460 -0
- package/dist/catalog-protocol.js.map +1 -0
- package/dist/cli-commands/command.js +84 -61
- package/dist/cli-commands/command.js.map +1 -1
- package/dist/cli-commands/extensions.js +70 -50
- package/dist/cli-commands/extensions.js.map +1 -1
- package/dist/cli-commands/instances.js +1 -1
- package/dist/cli-commands/instances.js.map +1 -1
- package/dist/cli-commands/package.js +10 -2
- package/dist/cli-commands/package.js.map +1 -1
- package/dist/cli-process-owners.d.ts +6 -0
- package/dist/cli-process-owners.js +27 -0
- package/dist/cli-process-owners.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +20 -5
- package/dist/cli.js.map +1 -1
- package/dist/contracts/command-contract.js +14 -4
- package/dist/contracts/command-contract.js.map +1 -1
- package/dist/doctor.d.ts +4 -6
- package/dist/doctor.js +451 -398
- package/dist/doctor.js.map +1 -1
- package/dist/editor-blocker-observer.d.ts +2 -1
- package/dist/editor-blocker-observer.js +40 -13
- package/dist/editor-blocker-observer.js.map +1 -1
- package/dist/extension-availability.d.ts +27 -9
- package/dist/extension-availability.js +96 -56
- package/dist/extension-availability.js.map +1 -1
- package/dist/extensions/descriptor-loader.d.ts +2 -2
- package/dist/extensions/descriptor-loader.js +3 -4
- package/dist/extensions/descriptor-loader.js.map +1 -1
- package/dist/extensions/index.d.ts +1 -1
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/installer.d.ts +57 -5
- package/dist/extensions/installer.js +263 -64
- package/dist/extensions/installer.js.map +1 -1
- package/dist/extensions/registry.js +3 -5
- package/dist/extensions/registry.js.map +1 -1
- package/dist/extensions/state-contract.d.ts +11 -0
- package/dist/extensions/state-contract.js +50 -0
- package/dist/extensions/state-contract.js.map +1 -0
- package/dist/instances.d.ts +19 -1
- package/dist/instances.js +39 -0
- package/dist/instances.js.map +1 -1
- package/dist/package-manager.d.ts +0 -24
- package/dist/package-manager.js +5 -58
- package/dist/package-manager.js.map +1 -1
- package/dist/project-tool-discovery.d.ts +5 -2
- package/dist/project-tool-discovery.js +22 -18
- package/dist/project-tool-discovery.js.map +1 -1
- package/dist/runtime-code.js +1 -1
- package/dist/runtime-code.js.map +1 -1
- package/dist/tool-name.d.ts +4 -0
- package/dist/tool-name.js +15 -0
- package/dist/tool-name.js.map +1 -0
- package/dist/tools/.generated-completion-registry.d.ts +2 -0
- package/dist/tools/.generated-completion-registry.js +763 -325
- package/dist/tools/.generated-completion-registry.js.map +1 -1
- package/dist/tools/.generated-registry.d.ts +6 -11
- package/dist/tools/.generated-registry.js +6 -11
- package/dist/tools/.generated-registry.js.map +1 -1
- package/dist/tools/.generated-schemas.js +11 -16
- package/dist/tools/.generated-schemas.js.map +1 -1
- package/dist/tools/asset/refresh-status.d.ts +3 -0
- package/dist/tools/asset/refresh-status.js +12 -0
- package/dist/tools/asset/refresh-status.js.map +1 -0
- package/dist/tools/asset/refresh.js +7 -3
- package/dist/tools/asset/refresh.js.map +1 -1
- package/dist/tools/build/player-status.d.ts +3 -0
- package/dist/tools/build/player-status.js +12 -0
- package/dist/tools/build/player-status.js.map +1 -0
- package/dist/tools/build/run.js +1 -1
- package/dist/tools/build/run.js.map +1 -1
- package/dist/tools/catalog-control.d.ts +22 -0
- package/dist/tools/catalog-control.js +335 -0
- package/dist/tools/catalog-control.js.map +1 -0
- package/dist/tools/catalog.d.ts +7 -9
- package/dist/tools/catalog.js +66 -45
- package/dist/tools/catalog.js.map +1 -1
- package/dist/tools/commands.d.ts +1 -1
- package/dist/tools/commands.js +44 -11
- package/dist/tools/commands.js.map +1 -1
- package/dist/tools/define.js +3 -2
- package/dist/tools/define.js.map +1 -1
- package/dist/tools/dispatcher.d.ts +53 -6
- package/dist/tools/dispatcher.js +277 -108
- package/dist/tools/dispatcher.js.map +1 -1
- package/dist/tools/editor/compile.js +1 -1
- package/dist/tools/editor/compile.js.map +1 -1
- package/dist/tools/editor/play-mode-status.d.ts +3 -0
- package/dist/tools/editor/play-mode-status.js +12 -0
- package/dist/tools/editor/play-mode-status.js.map +1 -0
- package/dist/tools/editor/readiness.d.ts +0 -1
- package/dist/tools/editor/readiness.js +0 -1
- package/dist/tools/editor/readiness.js.map +1 -1
- package/dist/tools/editor/refresh.d.ts +7 -3
- package/dist/tools/editor/refresh.js +20 -15
- package/dist/tools/editor/refresh.js.map +1 -1
- package/dist/tools/editor/state.d.ts +2 -2
- package/dist/tools/editor/state.js +13 -12
- package/dist/tools/editor/state.js.map +1 -1
- package/dist/tools/metadata/derived.js +1 -7
- package/dist/tools/metadata/derived.js.map +1 -1
- package/dist/tools/metadata/status.js +1 -12
- package/dist/tools/metadata/status.js.map +1 -1
- package/dist/tools/metadata/types.d.ts +0 -2
- package/dist/tools/navmesh/live.js +1 -1
- package/dist/tools/navmesh/live.js.map +1 -1
- package/dist/tools/occlusion/live.js +1 -1
- package/dist/tools/occlusion/live.js.map +1 -1
- package/dist/tools/package/deploy.js +2 -2
- package/dist/tools/package/deploy.js.map +1 -1
- package/dist/tools/package/embed.js +1 -1
- package/dist/tools/package/embed.js.map +1 -1
- package/dist/tools/package/install-status.d.ts +3 -0
- package/dist/tools/package/install-status.js +12 -0
- package/dist/tools/package/install-status.js.map +1 -0
- package/dist/tools/package/install.js +3 -3
- package/dist/tools/package/install.js.map +1 -1
- package/dist/tools/package/live-resolve.js +45 -12
- package/dist/tools/package/live-resolve.js.map +1 -1
- package/dist/tools/package/registry-clear.js.map +1 -1
- package/dist/tools/package/registry-set.js.map +1 -1
- package/dist/tools/package/remove-status.d.ts +3 -0
- package/dist/tools/package/remove-status.js +12 -0
- package/dist/tools/package/remove-status.js.map +1 -0
- package/dist/tools/package/remove.js +3 -3
- package/dist/tools/package/remove.js.map +1 -1
- package/dist/tools/package/resolve.js +3 -3
- package/dist/tools/package/resolve.js.map +1 -1
- package/dist/tools/package/restore.js +2 -2
- package/dist/tools/package/restore.js.map +1 -1
- package/dist/tools/package/scoped-registry-add.js.map +1 -1
- package/dist/tools/status/support.d.ts +13 -0
- package/dist/tools/status/support.js +28 -0
- package/dist/tools/status/support.js.map +1 -0
- package/dist/tools/test/cancel.js +2 -2
- package/dist/tools/test/cancel.js.map +1 -1
- package/dist/tools/test/run-status.d.ts +3 -0
- package/dist/tools/test/run-status.js +12 -0
- package/dist/tools/test/run-status.js.map +1 -0
- package/dist/tools/test/run.js +7 -4
- package/dist/tools/test/run.js.map +1 -1
- package/dist/tools/tools/group-summaries.js +10 -14
- package/dist/tools/tools/group-summaries.js.map +1 -1
- package/docs/architecture.md +4 -4
- package/docs/availability-differences.md +4 -4
- package/docs/command-execution.md +4 -3
- package/docs/error-codes.md +13 -5
- package/docs/extensions.md +1 -7
- package/docs/risk-and-side-effects.md +4 -3
- package/docs/safety-boundaries.md +3 -1
- package/docs/target-and-instance.md +1 -1
- package/docs/tool-discovery.md +17 -10
- package/docs/tool-execution.md +18 -7
- package/extensions/cinemachine/unitypkg/Editor/UnityCliExtensionAssembly.cs +3 -0
- package/extensions/hdrp/unitypkg/Editor/UnityCliExtensionAssembly.cs +3 -0
- package/extensions/probuilder/unitypkg/Editor/UnityCliExtensionAssembly.cs +3 -0
- package/extensions/urp/unitypkg/Editor/UnityCliExtensionAssembly.cs +3 -0
- package/extensions/vfx-graph/unitypkg/Editor/UnityCliExtensionAssembly.cs +3 -0
- package/package.json +2 -4
- package/skills/unitycli/SKILL.md +11 -2
- package/skills/unitycli/manifest.json +1 -1
- package/skills/unitycli/references/operation-protocol.md +3 -3
- package/unitypkg/Editor/AssemblyInfo.cs +5 -0
- package/unitypkg/Editor/Bridge/BridgeCommandRegistry.cs +49 -14
- package/unitypkg/Editor/Bridge/BridgeHttpServer.cs +9 -35
- package/unitypkg/Editor/Bridge/BridgeQueueState.cs +672 -0
- package/unitypkg/Editor/Bridge/BridgeWorkQueue.cs +970 -120
- package/unitypkg/Editor/BridgeStartupStateMachine.cs +59 -1
- package/unitypkg/Editor/Commands/ProjectToolCommands.cs +4 -0
- package/unitypkg/Editor/Commands/RuntimeToolCommands.cs +3 -0
- package/unitypkg/Editor/Generated/UnityCliToolCompletionRegistry.g.cs +379 -14
- package/unitypkg/Editor/Infrastructure/CodeExecSupport.cs +28 -13
- package/unitypkg/Editor/Infrastructure/RegistryOwnershipResolver.cs +132 -105
- package/unitypkg/Editor/Infrastructure/UnityCliActiveOperation.cs +138 -29
- package/unitypkg/Editor/Infrastructure/UnityCliAdmission.cs +1856 -237
- package/unitypkg/Editor/Infrastructure/UnityCliDoctorDiagnostics.cs +220 -0
- package/unitypkg/Editor/Infrastructure/UnityCliDurableStatusCoordinator.cs +118 -0
- package/unitypkg/Editor/Infrastructure/UnityCliEditorStateSnapshot.cs +2 -1
- package/unitypkg/Editor/Infrastructure/UnityCliHierarchyPager.cs +203 -0
- package/unitypkg/Editor/Infrastructure/UnityCliInstanceCleanup.cs +2 -1
- package/unitypkg/Editor/Infrastructure/UnityCliInstanceRegistry.cs +201 -63
- package/unitypkg/Editor/Infrastructure/UnityCliJson.cs +2 -3
- package/unitypkg/Editor/Infrastructure/UnityCliLiveBuildCoordinator.cs +289 -46
- package/unitypkg/Editor/Infrastructure/UnityCliLiveRefreshCoordinator.cs +87 -53
- package/unitypkg/Editor/Infrastructure/UnityCliNavMeshBakeCoordinator.cs +4 -4
- package/unitypkg/Editor/Infrastructure/UnityCliObjectRef.cs +128 -25
- package/unitypkg/Editor/Infrastructure/UnityCliObjectSerializer.cs +435 -327
- package/unitypkg/Editor/Infrastructure/UnityCliOcclusionBakeCoordinator.cs +4 -4
- package/unitypkg/Editor/Infrastructure/UnityCliOperationCoordinator.cs +351 -53
- package/unitypkg/Editor/Infrastructure/UnityCliPackageResolveCoordinator.cs +118 -18
- package/unitypkg/Editor/Infrastructure/UnityCliPackageResolveState.cs +20 -1
- package/unitypkg/Editor/Infrastructure/UnityCliReadGeneration.cs +97 -0
- package/unitypkg/Editor/Infrastructure/UnityCliReflection.cs +644 -133
- package/unitypkg/Editor/Infrastructure/UnityCliReloadOperation.cs +128 -41
- package/unitypkg/Editor/Infrastructure/UnityCliRuntimeExecutor.cs +14 -84
- package/unitypkg/Editor/Infrastructure/UnityCliSerializer.cs +220 -0
- package/unitypkg/Editor/Infrastructure/UnityCliSessionMutationLease.cs +69 -29
- package/unitypkg/Editor/Infrastructure/UnityCliTestRunCoordinator.cs +440 -54
- package/unitypkg/Editor/Infrastructure/UnityCliWaiter.cs +128 -35
- package/unitypkg/Editor/ProjectTools/IUnityCliTool.cs +9 -1
- package/unitypkg/Editor/ProjectTools/OfficialAttributeToolRegistry.cs +32 -31
- package/unitypkg/Editor/ProjectTools/ProjectToolRegistry.cs +607 -458
- package/unitypkg/Editor/ProjectTools/ProjectToolSchemaValidator.cs +35 -7
- package/unitypkg/Editor/ProjectTools/RegisteredTool.cs +501 -60
- package/unitypkg/Editor/ProjectTools/UnityCliProjectToolContext.cs +21 -0
- package/unitypkg/Editor/ProjectTools/UnityCliSchemaDeriver.cs +36 -7
- package/unitypkg/Editor/ProjectTools/UnityCliToolName.cs +30 -0
- package/unitypkg/Editor/Properties/AssemblyInfo.cs +3 -0
- package/unitypkg/Editor/Tools/asset/get-data.cs +16 -7
- package/unitypkg/Editor/Tools/build/BuildSceneStateTool.cs +23 -3
- package/unitypkg/Editor/Tools/build/BuildToolDtos.cs +2 -1
- package/unitypkg/Editor/Tools/build/scene/add.cs +6 -3
- package/unitypkg/Editor/Tools/build/scene/disable.cs +1 -1
- package/unitypkg/Editor/Tools/build/scene/enable.cs +1 -1
- package/unitypkg/Editor/Tools/build/scene/list.cs +1 -1
- package/unitypkg/Editor/Tools/build/scene/remove.cs +13 -3
- package/unitypkg/Editor/Tools/camera/CameraToolSupport.cs +38 -38
- package/unitypkg/Editor/Tools/camera/multiview.cs +13 -6
- package/unitypkg/Editor/Tools/camera/screenshot.cs +14 -7
- package/unitypkg/Editor/Tools/component/get.cs +16 -9
- package/unitypkg/Editor/Tools/component/modify.cs +6 -4
- package/unitypkg/Editor/Tools/console/clear.cs +7 -6
- package/unitypkg/Editor/Tools/console/get.cs +48 -16
- package/unitypkg/Editor/Tools/editor/EditorToolSupport.cs +143 -28
- package/unitypkg/Editor/Tools/editor/menu-items.cs +1 -1
- package/unitypkg/Editor/Tools/editor/play.cs +2 -11
- package/unitypkg/Editor/Tools/editor/selection.cs +1 -1
- package/unitypkg/Editor/Tools/editor/stop.cs +2 -11
- package/unitypkg/Editor/Tools/editor/windows.cs +1 -1
- package/unitypkg/Editor/Tools/go/GameObjectToolSupport.cs +54 -4
- package/unitypkg/Editor/Tools/go/delete.cs +1 -1
- package/unitypkg/Editor/Tools/go/find.cs +167 -70
- package/unitypkg/Editor/Tools/graphics/GraphicsToolSupport.cs +25 -0
- package/unitypkg/Editor/Tools/graphics/light-probe-group.cs +9 -3
- package/unitypkg/Editor/Tools/graphics/pipeline-info.cs +1 -1
- package/unitypkg/Editor/Tools/graphics/pipeline-settings.cs +1 -1
- package/unitypkg/Editor/Tools/graphics/quality.cs +2 -2
- package/unitypkg/Editor/Tools/graphics/reflection-probe.cs +3 -3
- package/unitypkg/Editor/Tools/graphics/stats.cs +1 -1
- package/unitypkg/Editor/Tools/object/ObjectToolSupport.cs +4 -4
- package/unitypkg/Editor/Tools/object/get-data.cs +9 -7
- package/unitypkg/Editor/Tools/object/modify.cs +7 -5
- package/unitypkg/Editor/Tools/physics/raycast.cs +24 -6
- package/unitypkg/Editor/Tools/prefab/stage.cs +1 -1
- package/unitypkg/Editor/Tools/profiler/ProfilerFrameDebuggerSupport.cs +94 -21
- package/unitypkg/Editor/Tools/profiler/ProfilerMemorySnapshotSupport.cs +397 -10
- package/unitypkg/Editor/Tools/profiler/ProfilerToolSupport.cs +18 -4
- package/unitypkg/Editor/Tools/profiler/frame-debugger/enable.cs +1 -1
- package/unitypkg/Editor/Tools/profiler/frame-debugger/events.cs +88 -87
- package/unitypkg/Editor/Tools/profiler/hierarchy.cs +278 -112
- package/unitypkg/Editor/Tools/profiler/memory-snapshot/compare.cs +9 -5
- package/unitypkg/Editor/Tools/profiler/memory-snapshot/list.cs +37 -35
- package/unitypkg/Editor/Tools/profiler/memory-snapshot/take.cs +99 -97
- package/unitypkg/Editor/Tools/project/info.cs +1 -1
- package/unitypkg/Editor/Tools/project/layers.cs +1 -1
- package/unitypkg/Editor/Tools/project/tags.cs +1 -1
- package/unitypkg/Editor/Tools/reflection/method/call.cs +9 -7
- package/unitypkg/Editor/Tools/reflection/method/find.cs +27 -37
- package/unitypkg/Editor/Tools/reflection/type/schema.cs +24 -28
- package/unitypkg/Editor/Tools/scene/gameobject/component.cs +8 -5
- package/unitypkg/Editor/Tools/scene/gameobject/components.cs +10 -7
- package/unitypkg/Editor/Tools/scene/gameobject-support.cs +104 -8
- package/unitypkg/Editor/Tools/scene/gameobject.cs +37 -16
- package/unitypkg/Editor/Tools/scene/hierarchy.cs +146 -142
- package/unitypkg/Editor/Tools/screenshot/EditorElementCaptureToolSupport.cs +77 -25
- package/unitypkg/Editor/Tools/screenshot/ScreenshotToolSupport.cs +315 -95
- package/unitypkg/Editor/Tools/screenshot/editor-element.cs +7 -5
- package/unitypkg/Editor/Tools/screenshot/game-view.cs +35 -21
- package/unitypkg/Editor/Tools/screenshot/isolated-object.cs +29 -23
- package/unitypkg/Editor/Tools/screenshot/orbit.cs +37 -25
- package/unitypkg/Editor/Tools/screenshot/scene-view.cs +25 -18
- package/unitypkg/Editor/Tools/screenshot/screen.cs +177 -17
- package/unitypkg/Editor/Tools/screenshot/surround.cs +83 -79
- package/unitypkg/Editor/Tools/ui/render-preview.cs +16 -11
- package/unitypkg/Editor/UnityCliBridge.cs +97 -34
- package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeBridge.cs +753 -122
- package/unitypkg/Runtime/Properties/AssemblyInfo.cs +5 -0
- package/unitypkg/Runtime/UnityCli.Runtime.asmdef +1 -1
- package/unitypkg/Shared/AssemblyInfo.cs +4 -0
- package/unitypkg/Shared/UnityCliAdmissionPool.cs +265 -75
- package/unitypkg/Shared/UnityCliBridgeQueuePolicy.cs +410 -0
- package/unitypkg/Shared/UnityCliBridgeWorkItemState.cs +47 -0
- package/unitypkg/Shared/UnityCliExceptionProjection.cs +151 -0
- package/unitypkg/Shared/UnityCliQueuePublication.cs +30 -0
- package/unitypkg/Shared/UnityCliRequestBudget.cs +352 -0
- package/unitypkg/Shared/UnityCliRuntimeRequestPublication.cs +107 -0
- package/unitypkg/Tests/Editor/UnityCli.Editor.Tests.asmdef +2 -2
- package/unitypkg/Tests/Editor/UnityCliAdmissionCoordinatorIntegrationTests.cs +1329 -0
- package/unitypkg/Tests/Editor/UnityCliAdmissionPoolTests.cs +311 -114
- package/unitypkg/Tests/Editor/UnityCliAdmissionRepairStateTests.cs +94 -0
- package/unitypkg/Tests/Editor/UnityCliBridgeAdmissionIntegrationTests.cs +1229 -0
- package/unitypkg/Tests/Editor/UnityCliBridgeQueuePolicyTests.cs +412 -0
- package/unitypkg/Tests/Editor/UnityCliContinuationIntegrationTests.cs +292 -0
- package/unitypkg/Tests/Editor/UnityCliDiagnosticBoundaryTests.cs +120 -0
- package/unitypkg/Tests/Editor/UnityCliDurableStatusTests.cs +84 -0
- package/unitypkg/Tests/Editor/UnityCliExceptionProjectionTests.cs +72 -0
- package/unitypkg/Tests/Editor/UnityCliInstancePublicationRetryTests.cs +180 -97
- package/unitypkg/Tests/Editor/UnityCliMemoryReflectionIntegrationTests.cs +434 -0
- package/unitypkg/Tests/Editor/UnityCliRequestBudgetTests.cs +615 -0
- package/unitypkg/Tests/Editor/UnityCliRuntimeBridgeIntegrationTests.cs +520 -0
- package/unitypkg/Tests/Editor/UnityCliToolCatalogTests.cs +562 -0
- package/unitypkg/Tests/Runtime/UnityCli.Runtime.Tests.asmdef +23 -0
- package/unitypkg/Tests/Runtime/UnityCliRuntimeCatalogValidationTests.cs +29 -0
- package/unitypkg/package.json +1 -1
- package/contracts/static-capability-catalog.json +0 -48226
- package/dist/bridge/domains/diagnose.d.ts +0 -2
- package/dist/bridge/domains/diagnose.js +0 -11
- package/dist/bridge/domains/diagnose.js.map +0 -1
- package/dist/bridge/domains/extension.d.ts +0 -8
- package/dist/bridge/domains/extension.js +0 -20
- package/dist/bridge/domains/extension.js.map +0 -1
- package/dist/capabilities.d.ts +0 -5
- package/dist/capabilities.js +0 -84
- package/dist/capabilities.js.map +0 -1
- package/dist/static-capability-catalog.d.ts +0 -13
- package/dist/static-capability-catalog.js +0 -41
- package/dist/static-capability-catalog.js.map +0 -1
- package/dist/tools/diagnose/capabilities.d.ts +0 -13
- package/dist/tools/diagnose/capabilities.js +0 -34
- package/dist/tools/diagnose/capabilities.js.map +0 -1
- package/dist/tools/package/info.d.ts +0 -19
- package/dist/tools/package/info.js +0 -27
- package/dist/tools/package/info.js.map +0 -1
- package/dist/tools/package/list.d.ts +0 -27
- package/dist/tools/package/list.js +0 -21
- package/dist/tools/package/list.js.map +0 -1
- package/dist/tools/package/registry-get.d.ts +0 -10
- package/dist/tools/package/registry-get.js +0 -22
- package/dist/tools/package/registry-get.js.map +0 -1
- package/dist/tools/package/scoped-registry-list.d.ts +0 -14
- package/dist/tools/package/scoped-registry-list.js +0 -22
- package/dist/tools/package/scoped-registry-list.js.map +0 -1
- package/dist/tools/package/search.d.ts +0 -17
- package/dist/tools/package/search.js +0 -39
- package/dist/tools/package/search.js.map +0 -1
- package/dist/tools/package/status.d.ts +0 -21
- package/dist/tools/package/status.js +0 -37
- package/dist/tools/package/status.js.map +0 -1
- package/dist/tools/tools/describe.d.ts +0 -27
- package/dist/tools/tools/describe.js +0 -35
- package/dist/tools/tools/describe.js.map +0 -1
- package/dist/tools/tools/group-list.d.ts +0 -16
- package/dist/tools/tools/group-list.js +0 -38
- package/dist/tools/tools/group-list.js.map +0 -1
- package/dist/tools/tools/group.d.ts +0 -13
- package/dist/tools/tools/group.js +0 -34
- package/dist/tools/tools/group.js.map +0 -1
- package/dist/tools/tools/pagination.d.ts +0 -17
- package/dist/tools/tools/pagination.js +0 -28
- package/dist/tools/tools/pagination.js.map +0 -1
- package/dist/tools/tools/search.d.ts +0 -15
- package/dist/tools/tools/search.js +0 -42
- package/dist/tools/tools/search.js.map +0 -1
- package/unitypkg/Editor/Tools/diagnose/preflight.cs +0 -269
- package/unitypkg/Editor/Tools/editor/console.cs +0 -26
- package/unitypkg/Editor/Tools/extension/status.cs +0 -87
- package/unitypkg/Editor/Tools/go/inspect.cs +0 -49
- package/unitypkg/Editor/Tools/graphics/pipeline-quality.cs +0 -24
- package/unitypkg/Editor/Tools/graphics/probe-positions.cs +0 -58
- package/unitypkg/Editor/Tools/graphics/settings.cs +0 -104
- package/unitypkg/Editor/Tools/graphics/stats-counters.cs +0 -28
- package/unitypkg/Editor/Tools/graphics/stats-memory.cs +0 -21
- package/unitypkg/Editor/Tools/instances/list.cs +0 -71
- package/unitypkg/Editor/Tools/physics/raycast-all.cs +0 -67
- package/unitypkg/Editor/Tools/scene/build-settings.cs +0 -69
- package/unitypkg/Editor/Tools/scene/data.cs +0 -125
- package/unitypkg/Editor/Tools/tests/list.cs +0 -98
package/dist/bridge/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge/registry.js
CHANGED
|
@@ -4,9 +4,8 @@ import { buildBridgeSpecs } from "./domains/build.js";
|
|
|
4
4
|
import { cameraBridgeSpecs } from "./domains/camera.js";
|
|
5
5
|
import { codeBridgeSpecs } from "./domains/code.js";
|
|
6
6
|
import { consoleBridgeSpecs } from "./domains/console.js";
|
|
7
|
-
import {
|
|
7
|
+
import { doctorBridgeSpecs } from "./domains/doctor.js";
|
|
8
8
|
import { editorBridgeSpecs } from "./domains/editor.js";
|
|
9
|
-
import { extensionBridgeSpecs } from "./domains/extension.js";
|
|
10
9
|
import { gameObjectBridgeSpecs } from "./domains/game-object.js";
|
|
11
10
|
import { graphicsBridgeSpecs } from "./domains/graphics.js";
|
|
12
11
|
import { materialBridgeSpecs } from "./domains/material.js";
|
|
@@ -50,7 +49,7 @@ const CORE_DOMAIN_SPECS = [
|
|
|
50
49
|
...animationBridgeSpecs,
|
|
51
50
|
...uiBridgeSpecs,
|
|
52
51
|
...editorBridgeSpecs,
|
|
53
|
-
...
|
|
52
|
+
...doctorBridgeSpecs,
|
|
54
53
|
...codeBridgeSpecs,
|
|
55
54
|
...objectBridgeSpecs,
|
|
56
55
|
...reflectionBridgeSpecs,
|
|
@@ -59,8 +58,7 @@ const CORE_DOMAIN_SPECS = [
|
|
|
59
58
|
...packageBridgeSpecs,
|
|
60
59
|
...buildBridgeSpecs,
|
|
61
60
|
...runtimeToolBridgeSpecs,
|
|
62
|
-
...projectToolBridgeSpecs
|
|
63
|
-
...extensionBridgeSpecs
|
|
61
|
+
...projectToolBridgeSpecs
|
|
64
62
|
];
|
|
65
63
|
export class BridgeCommandRegistry {
|
|
66
64
|
byCliCommand = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/bridge/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/bridge/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,10 @@ export interface BridgeRequestTemplate {
|
|
|
19
19
|
rootAdmission?: RootAdmissionLease;
|
|
20
20
|
/** 已由 editor.state 完成的私有选择;不得重跑 selector。 */
|
|
21
21
|
observationSelection?: InstanceSelection;
|
|
22
|
-
/** 私有 continuation capability
|
|
22
|
+
/** 私有 continuation capability;只允许白名单内部命令绑定 transition session。 */
|
|
23
23
|
allowTransitionBinding?: boolean;
|
|
24
|
+
/** 私有 durable status capability;把 canonical transition 响应交回外层重新观察。 */
|
|
25
|
+
returnTransitionResponse?: boolean;
|
|
24
26
|
}
|
|
25
27
|
export interface FrozenBridgeRequest {
|
|
26
28
|
readonly payload: BridgeRequest;
|
|
@@ -38,6 +40,7 @@ interface ValidatedBinding {
|
|
|
38
40
|
readonly endpoint: string;
|
|
39
41
|
readonly processId: number;
|
|
40
42
|
readonly processStartedAt: string;
|
|
43
|
+
readonly toolCatalogFingerprint?: string;
|
|
41
44
|
}
|
|
42
45
|
interface TransportAttestation {
|
|
43
46
|
target: InstanceTarget;
|
|
@@ -95,7 +98,7 @@ export declare class SessionSupervisor {
|
|
|
95
98
|
execute(template: BridgeRequestTemplate): Promise<BridgeResponse>;
|
|
96
99
|
/** 普通读取型Tool与live catalog入口;generation变化后只允许整次重新读取。 */
|
|
97
100
|
read(template: BridgeRequestTemplate): Promise<BridgeResponse>;
|
|
98
|
-
/** editor.state
|
|
101
|
+
/** editor.state 私有即时入口;调用者必须显式提供完整只读约束。 */
|
|
99
102
|
observeNow(template: BridgeRequestTemplate): Promise<BridgeResponse>;
|
|
100
103
|
/** 在准入deadline内原子取得一个root grant;业务执行deadline只在grant返回后创建一次。 */
|
|
101
104
|
acquireRootAdmission(request: RootAdmissionRequest): Promise<RootAdmissionLease>;
|
|
@@ -105,7 +108,7 @@ export declare class SessionSupervisor {
|
|
|
105
108
|
private run;
|
|
106
109
|
/** 首个POST被admission层明确拒绝时可在原执行deadline内换取新token;不得刷新deadline。 */
|
|
107
110
|
private reacquireAdmission;
|
|
108
|
-
/**
|
|
111
|
+
/** timeout诊断只能消费原execution deadline的剩余预算。 */
|
|
109
112
|
private executionTimeoutWithObservation;
|
|
110
113
|
/** 失败路径的 observer 严格复用调用 deadline。 */
|
|
111
114
|
private observeBlockers;
|
|
@@ -3,8 +3,8 @@ import { defaultDataDir } from "../platform.js";
|
|
|
3
3
|
import { EditorBlockerObserver, sanitizeEditorBlockers } from "../editor-blocker-observer.js";
|
|
4
4
|
import { clearInstanceHealthCache, InstanceRegistryError, selectInstanceForFlags, selectObservationInstanceForFlags, selectTransitionInstanceForFlags, } from "../instances.js";
|
|
5
5
|
import { rootAdmissionFingerprint } from "./admission.js";
|
|
6
|
+
import { readBridgeStartBlockerDiagnostics } from "./start-diagnostics.js";
|
|
6
7
|
export const EDITOR_STATE_OBSERVATION_BUDGET_MS = 10_000;
|
|
7
|
-
const BLOCKER_DIAGNOSTIC_BUDGET_MS = 10_000;
|
|
8
8
|
export const EDITOR_STATE_BRIDGE_PROBE_BUDGET_MS = 3_500;
|
|
9
9
|
const DEFAULT_EXECUTION_TIMEOUT_MS = 60_000;
|
|
10
10
|
const REGISTRY_POLL_INTERVAL_MS = 100;
|
|
@@ -23,6 +23,12 @@ const ROOT_TRANSITION_COMMANDS = new Set([
|
|
|
23
23
|
"internal.editor.refresh.status",
|
|
24
24
|
"internal.asset.refresh.start",
|
|
25
25
|
"internal.asset.refresh.status",
|
|
26
|
+
"internal.asset.refresh.public-status",
|
|
27
|
+
"internal.build.player.public-status",
|
|
28
|
+
"internal.editor.play-mode.public-status",
|
|
29
|
+
"internal.package.install.public-status",
|
|
30
|
+
"internal.package.remove.public-status",
|
|
31
|
+
"internal.test.run.public-status",
|
|
26
32
|
"internal.package.embed.start",
|
|
27
33
|
"internal.package.embed.status",
|
|
28
34
|
"internal.package.resolve.start",
|
|
@@ -47,7 +53,14 @@ const ROOT_TRANSITION_COMMANDS = new Set([
|
|
|
47
53
|
"internal.occlusion.bake.snapshot",
|
|
48
54
|
"internal.occlusion.bake.cancel",
|
|
49
55
|
]);
|
|
50
|
-
const
|
|
56
|
+
const RETURNABLE_TRANSITION_COMMANDS = new Set([
|
|
57
|
+
"internal.package.resolve.status",
|
|
58
|
+
]);
|
|
59
|
+
// 只有自身切换 Editor session 状态的 Tool 才能恢复已发出但丢失响应的同根请求。
|
|
60
|
+
const POST_DISPATCH_LISTENER_RECOVERY_TOOLS = new Set([
|
|
61
|
+
"editor.play",
|
|
62
|
+
"editor.stop",
|
|
63
|
+
]);
|
|
51
64
|
const TRANSITION_CODES = new Set([
|
|
52
65
|
"E_UNITY_DOMAIN_RELOAD",
|
|
53
66
|
"E_UNITY_COMPILING",
|
|
@@ -115,9 +128,9 @@ export class SessionSupervisor {
|
|
|
115
128
|
read(template) {
|
|
116
129
|
return this.run("read", { ...template, mutation: false });
|
|
117
130
|
}
|
|
118
|
-
/** editor.state
|
|
131
|
+
/** editor.state 私有即时入口;调用者必须显式提供完整只读约束。 */
|
|
119
132
|
observeNow(template) {
|
|
120
|
-
return this.run("observeNow",
|
|
133
|
+
return this.run("observeNow", template);
|
|
121
134
|
}
|
|
122
135
|
/** 在准入deadline内原子取得一个root grant;业务执行deadline只在grant返回后创建一次。 */
|
|
123
136
|
async acquireRootAdmission(request) {
|
|
@@ -133,6 +146,16 @@ export class SessionSupervisor {
|
|
|
133
146
|
instanceId: INJECTED_INSTANCE_ID,
|
|
134
147
|
canonicalProjectPath: process.cwd(),
|
|
135
148
|
sessionId: "injected-session",
|
|
149
|
+
processId: process.pid,
|
|
150
|
+
processStartedAt: "injected-process",
|
|
151
|
+
toolCatalogFingerprint: "injected-catalog",
|
|
152
|
+
listenerId: "injected-listener",
|
|
153
|
+
listenerGeneration: 1,
|
|
154
|
+
discoveryProvenance: request.expectedDiscoveryProvenance ?? (request.captureDiscoveryProvenance ? {
|
|
155
|
+
target: request.target, instanceId: INJECTED_INSTANCE_ID, sessionId: "injected-session",
|
|
156
|
+
...(request.target === "editor" ? { editorSessionId: "injected-session" } : {}),
|
|
157
|
+
listenerId: "injected-listener", listenerGeneration: 1,
|
|
158
|
+
} : undefined),
|
|
136
159
|
token: "injected-admission",
|
|
137
160
|
consumed: false,
|
|
138
161
|
grantExpiresAtMs: this.dependencies.now() + 2_000,
|
|
@@ -140,17 +163,9 @@ export class SessionSupervisor {
|
|
|
140
163
|
injected: true,
|
|
141
164
|
};
|
|
142
165
|
}
|
|
143
|
-
|
|
144
|
-
let binding;
|
|
145
|
-
|
|
146
|
-
const selection = await this.dependencies.selectObservation(this.flags, this.runtime.dataDir ?? defaultDataDir(), remainingBudget(request.admissionAbsoluteDeadlineMs, this.dependencies.now()), "editor");
|
|
147
|
-
target = { target: "editor", instanceId: selection.instance.instanceId, initialSelection: selection, injected: false };
|
|
148
|
-
binding = bindingFrom(selection.instance);
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
target = await this.resolveTarget(request.target, request.admissionAbsoluteDeadlineMs, startedAtMs, request.admissionAbsoluteDeadlineMs, false);
|
|
152
|
-
binding = await this.bind(target, request.admissionAbsoluteDeadlineMs, false, target.initialSelection);
|
|
153
|
-
}
|
|
166
|
+
const target = await this.resolveTarget(request.target, request.admissionAbsoluteDeadlineMs, startedAtMs, request.admissionAbsoluteDeadlineMs, false);
|
|
167
|
+
let binding = await this.bind(target, request.admissionAbsoluteDeadlineMs, false, target.initialSelection);
|
|
168
|
+
requireDiscoveryProvenance(request.expectedDiscoveryProvenance, binding);
|
|
154
169
|
const fingerprint = rootAdmissionFingerprint(request, binding.instanceId);
|
|
155
170
|
for (;;) {
|
|
156
171
|
const remainingMs = remainingBudget(request.admissionAbsoluteDeadlineMs, this.dependencies.now());
|
|
@@ -160,6 +175,7 @@ export class SessionSupervisor {
|
|
|
160
175
|
const reply = await this.dependencies.acquire(binding, request, fingerprint, remainingMs);
|
|
161
176
|
if (!attestationMatches(binding, reply.attestation)) {
|
|
162
177
|
binding = await this.bindReplacement(target, request.admissionAbsoluteDeadlineMs, binding);
|
|
178
|
+
requireDiscoveryProvenance(request.expectedDiscoveryProvenance, binding);
|
|
163
179
|
continue;
|
|
164
180
|
}
|
|
165
181
|
if (reply.granted && reply.token) {
|
|
@@ -172,6 +188,13 @@ export class SessionSupervisor {
|
|
|
172
188
|
instanceId: binding.instanceId,
|
|
173
189
|
canonicalProjectPath: binding.canonicalProjectPath,
|
|
174
190
|
sessionId: binding.sessionId,
|
|
191
|
+
processId: binding.processId,
|
|
192
|
+
processStartedAt: binding.processStartedAt,
|
|
193
|
+
toolCatalogFingerprint: binding.toolCatalogFingerprint,
|
|
194
|
+
listenerId: binding.listenerId,
|
|
195
|
+
listenerGeneration: binding.listenerGeneration,
|
|
196
|
+
discoveryProvenance: request.expectedDiscoveryProvenance
|
|
197
|
+
?? (request.captureDiscoveryProvenance ? provenanceFromBinding(binding) : undefined),
|
|
175
198
|
token: reply.token,
|
|
176
199
|
consumed: false,
|
|
177
200
|
grantExpiresAtMs: this.dependencies.now() + reply.grantExpiresInMs,
|
|
@@ -191,6 +214,7 @@ export class SessionSupervisor {
|
|
|
191
214
|
await this.dependencies.sleep(Math.min(admissionPollDelay(this.dependencies.random()), remainingAfterFailureMs));
|
|
192
215
|
clearInstanceHealthCache();
|
|
193
216
|
binding = await this.bind(target, request.admissionAbsoluteDeadlineMs, false, undefined);
|
|
217
|
+
requireDiscoveryProvenance(request.expectedDiscoveryProvenance, binding);
|
|
194
218
|
}
|
|
195
219
|
}
|
|
196
220
|
}
|
|
@@ -204,7 +228,8 @@ export class SessionSupervisor {
|
|
|
204
228
|
if (!selection.instance.activeSession)
|
|
205
229
|
return;
|
|
206
230
|
const binding = bindingFrom(selection.instance);
|
|
207
|
-
if (binding.sessionId !== admission.sessionId
|
|
231
|
+
if (binding.sessionId !== admission.sessionId || binding.listenerId !== admission.listenerId
|
|
232
|
+
|| binding.listenerGeneration !== admission.listenerGeneration)
|
|
208
233
|
return;
|
|
209
234
|
const reply = await this.dependencies.revoke(binding, admission, remainingBudget(deadlineMs, this.dependencies.now()));
|
|
210
235
|
if (!attestationMatches(binding, reply.attestation))
|
|
@@ -220,6 +245,12 @@ export class SessionSupervisor {
|
|
|
220
245
|
if (template.allowTransitionBinding === true && !ROOT_TRANSITION_COMMANDS.has(template.command)) {
|
|
221
246
|
throw new SessionSupervisorError("E_INTERNAL_INVOCATION_INVALID", "Transition binding is restricted to private durable root coordinator commands.", [], { command: template.command });
|
|
222
247
|
}
|
|
248
|
+
if (template.returnTransitionResponse === true && (mode !== "read"
|
|
249
|
+
|| template.mutation !== false
|
|
250
|
+
|| template.allowTransitionBinding !== true
|
|
251
|
+
|| !RETURNABLE_TRANSITION_COMMANDS.has(template.command))) {
|
|
252
|
+
throw new SessionSupervisorError("E_INTERNAL_INVOCATION_INVALID", "Transition response handoff is restricted to private read-only durable status commands.", [], { command: template.command });
|
|
253
|
+
}
|
|
223
254
|
const timeoutMs = normalizeTimeoutMs(template.timeoutMs, mode);
|
|
224
255
|
// caller 已冻结业务 deadline 时,未显式提供更短 timeout 不得被 Supervisor 默认预算再次截断。
|
|
225
256
|
const absoluteDeadlineMs = mode === "observeNow"
|
|
@@ -266,10 +297,16 @@ export class SessionSupervisor {
|
|
|
266
297
|
throw await this.executionTimeoutWithObservation(target.instanceId, binding, absoluteDeadlineMs, "The selected Unity process session changed after the first mutation POST; automatic redelivery is forbidden.");
|
|
267
298
|
}
|
|
268
299
|
try {
|
|
300
|
+
const requestAdmission = template.rootAdmission?.requestId === template.requestId ? template.rootAdmission : undefined;
|
|
301
|
+
const recoverConsumedAdmission = canRecoverConsumedAdmission(requestAdmission, binding, dispatchAttempted);
|
|
302
|
+
assertAdmissionBinding(template.rootAdmission, binding, recoverConsumedAdmission);
|
|
269
303
|
dispatchAttempted = true;
|
|
270
304
|
postAttempts += 1;
|
|
271
|
-
|
|
272
|
-
const
|
|
305
|
+
// replacement listener 只能通过 Bridge 持久化的 exact consumed owner 附着,不能重用旧 token。
|
|
306
|
+
const transportAdmission = recoverConsumedAdmission && requestAdmission
|
|
307
|
+
? { ...requestAdmission, consumed: true }
|
|
308
|
+
: requestAdmission;
|
|
309
|
+
const reply = await this.dependencies.post(binding, request, remainingMs, transportAdmission);
|
|
273
310
|
if (!attestationMatches(binding, reply.attestation)) {
|
|
274
311
|
binding = await this.bindReplacement(target, absoluteDeadlineMs, binding, template.allowTransitionBinding === true);
|
|
275
312
|
continue;
|
|
@@ -285,6 +322,8 @@ export class SessionSupervisor {
|
|
|
285
322
|
// Bridge 已给出 canonical terminal response 时优先返回。
|
|
286
323
|
if (!shouldRecoverTransition(reply.response))
|
|
287
324
|
return reply.response;
|
|
325
|
+
if (template.returnTransitionResponse === true)
|
|
326
|
+
return reply.response;
|
|
288
327
|
await this.waitBeforeRecovery(reply.response, absoluteDeadlineMs);
|
|
289
328
|
clearInstanceHealthCache();
|
|
290
329
|
binding = await this.bind(target, absoluteDeadlineMs, false, undefined, template.allowTransitionBinding === true);
|
|
@@ -338,6 +377,8 @@ export class SessionSupervisor {
|
|
|
338
377
|
dryRun: false,
|
|
339
378
|
target: admission.target,
|
|
340
379
|
completionContractIdentity: admission.completionContractIdentity,
|
|
380
|
+
captureDiscoveryProvenance: admission.discoveryProvenance !== undefined,
|
|
381
|
+
expectedDiscoveryProvenance: admission.discoveryProvenance,
|
|
341
382
|
timeoutMs: remainingMs,
|
|
342
383
|
admissionAbsoluteDeadlineMs: absoluteDeadlineMs,
|
|
343
384
|
};
|
|
@@ -352,10 +393,9 @@ export class SessionSupervisor {
|
|
|
352
393
|
await this.dependencies.sleep(Math.min(admissionPollDelay(this.dependencies.random()), remainingMs));
|
|
353
394
|
}
|
|
354
395
|
}
|
|
355
|
-
/**
|
|
356
|
-
async executionTimeoutWithObservation(instanceId, binding,
|
|
357
|
-
|
|
358
|
-
return executionTimeout(instanceId, reason, await this.observeBlockers(binding, observationDeadlineMs));
|
|
396
|
+
/** timeout诊断只能消费原execution deadline的剩余预算。 */
|
|
397
|
+
async executionTimeoutWithObservation(instanceId, binding, deadlineMs, reason) {
|
|
398
|
+
return executionTimeout(instanceId, reason, await this.observeBlockers(binding, deadlineMs));
|
|
359
399
|
}
|
|
360
400
|
/** 失败路径的 observer 严格复用调用 deadline。 */
|
|
361
401
|
async observeBlockers(binding, deadlineMs) {
|
|
@@ -408,20 +448,16 @@ export class SessionSupervisor {
|
|
|
408
448
|
if (this.runtime.bridgeExecute)
|
|
409
449
|
return this.dispatchInjected(request, probeTimeoutMs);
|
|
410
450
|
try {
|
|
411
|
-
|
|
412
|
-
const requestAdmission = template.rootAdmission?.requestId === template.requestId ? template.rootAdmission : undefined;
|
|
413
|
-
const reply = await this.dependencies.post(binding, request, probeTimeoutMs, requestAdmission);
|
|
451
|
+
const reply = await this.dependencies.post(binding, request, probeTimeoutMs);
|
|
414
452
|
if (!attestationMatches(binding, reply.attestation))
|
|
415
453
|
throw identityMismatch(instance.instanceId);
|
|
416
454
|
assertResponseRequestId(request.payload.requestId, reply.response);
|
|
417
|
-
if (requestAdmission && !admissionWasRejected(reply.response))
|
|
418
|
-
requestAdmission.consumed = true;
|
|
419
455
|
return reply.response;
|
|
420
456
|
}
|
|
421
457
|
catch (error) {
|
|
422
458
|
if (error instanceof SessionSupervisorError)
|
|
423
459
|
throw error;
|
|
424
|
-
throw connectionFailure(instance.instanceId, error);
|
|
460
|
+
throw await connectionFailure(instance.instanceId, error, this.runtime.dataDir);
|
|
425
461
|
}
|
|
426
462
|
}
|
|
427
463
|
async selectObservation(absoluteDeadlineMs, startedAtMs) {
|
|
@@ -433,7 +469,7 @@ export class SessionSupervisor {
|
|
|
433
469
|
/** 测试 transport 仍通过 supervisor,但不伪造 registry/listener generation。 */
|
|
434
470
|
async dispatchInjected(request, timeoutMs) {
|
|
435
471
|
if (!this.runtime.bridgeExecute)
|
|
436
|
-
throw connectionFailure(request.payload.instanceId, new Error("Injected Bridge transport is unavailable."));
|
|
472
|
+
throw await connectionFailure(request.payload.instanceId, new Error("Injected Bridge transport is unavailable."), this.runtime.dataDir);
|
|
437
473
|
try {
|
|
438
474
|
const operation = this.runtime.bridgeExecute(request.payload);
|
|
439
475
|
const response = timeoutMs === undefined ? await operation : await Promise.race([
|
|
@@ -446,7 +482,7 @@ export class SessionSupervisor {
|
|
|
446
482
|
catch (error) {
|
|
447
483
|
if (error instanceof SessionSupervisorError)
|
|
448
484
|
throw error;
|
|
449
|
-
throw connectionFailure(request.payload.instanceId, error);
|
|
485
|
+
throw await connectionFailure(request.payload.instanceId, error, this.runtime.dataDir);
|
|
450
486
|
}
|
|
451
487
|
}
|
|
452
488
|
/** 首次 selector 解析只发生一次;后续恢复固定使用 instanceId,alias 变化不会改绑目标。 */
|
|
@@ -724,6 +760,7 @@ function bindingFrom(instance) {
|
|
|
724
760
|
endpoint: session.listener.endpoint.url,
|
|
725
761
|
processId: session.processId,
|
|
726
762
|
processStartedAt: session.processStartedAt,
|
|
763
|
+
toolCatalogFingerprint: session.toolCatalogFingerprint,
|
|
727
764
|
};
|
|
728
765
|
}
|
|
729
766
|
function bindingKey(binding) {
|
|
@@ -736,14 +773,66 @@ function attestationMatches(binding, attestation) {
|
|
|
736
773
|
&& attestation.listenerId === binding.listenerId
|
|
737
774
|
&& attestation.listenerGeneration === binding.listenerGeneration;
|
|
738
775
|
}
|
|
739
|
-
function assertAdmissionBinding(admission, binding) {
|
|
776
|
+
function assertAdmissionBinding(admission, binding, recoveredConsumedRoot = false) {
|
|
740
777
|
if (!admission)
|
|
741
778
|
return;
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
779
|
+
const matches = admission.instanceId === binding.instanceId
|
|
780
|
+
&& admission.target === binding.target
|
|
781
|
+
&& admission.sessionId === binding.sessionId
|
|
782
|
+
&& admission.listenerId === binding.listenerId
|
|
783
|
+
&& admission.listenerGeneration === binding.listenerGeneration;
|
|
784
|
+
if (matches || recoveredConsumedRoot)
|
|
785
|
+
return;
|
|
786
|
+
if (admission.discoveryProvenance && !admission.consumed)
|
|
787
|
+
throw staleDiscoveryProvenance(admission.discoveryProvenance);
|
|
788
|
+
throw new SessionSupervisorError("E_EXECUTION_TIMEOUT", "The admitted Unity root no longer matches the selected target session.", [
|
|
789
|
+
"Inspect the selected Unity session and affected business state before submitting a new request.",
|
|
790
|
+
], { instanceId: admission.instanceId, outcome: "unknown" });
|
|
791
|
+
}
|
|
792
|
+
/** 只允许同一Editor进程、同一catalog的显式session-affecting根附着Bridge持久化owner。 */
|
|
793
|
+
function canRecoverConsumedAdmission(admission, binding, dispatchAttempted) {
|
|
794
|
+
return dispatchAttempted
|
|
795
|
+
&& admission !== undefined
|
|
796
|
+
&& POST_DISPATCH_LISTENER_RECOVERY_TOOLS.has(admission.command)
|
|
797
|
+
&& admission.target === "editor"
|
|
798
|
+
&& binding.target === "editor"
|
|
799
|
+
&& admission.instanceId === binding.instanceId
|
|
800
|
+
&& admission.canonicalProjectPath === binding.canonicalProjectPath
|
|
801
|
+
&& admission.sessionId === binding.sessionId
|
|
802
|
+
&& admission.processId === binding.processId
|
|
803
|
+
&& admission.processStartedAt === binding.processStartedAt
|
|
804
|
+
&& typeof admission.toolCatalogFingerprint === "string"
|
|
805
|
+
&& admission.toolCatalogFingerprint.length > 0
|
|
806
|
+
&& admission.toolCatalogFingerprint === binding.toolCatalogFingerprint
|
|
807
|
+
&& (admission.listenerId !== binding.listenerId || admission.listenerGeneration !== binding.listenerGeneration);
|
|
808
|
+
}
|
|
809
|
+
/** discovery 和首次业务 POST 必须归属于同一 exact listener generation。 */
|
|
810
|
+
function requireDiscoveryProvenance(expected, binding) {
|
|
811
|
+
if (!expected)
|
|
812
|
+
return;
|
|
813
|
+
const matches = expected.target === binding.target
|
|
814
|
+
&& expected.instanceId === binding.instanceId
|
|
815
|
+
&& expected.sessionId === binding.sessionId
|
|
816
|
+
&& expected.listenerId === binding.listenerId
|
|
817
|
+
&& expected.listenerGeneration === binding.listenerGeneration
|
|
818
|
+
&& (binding.target !== "editor" || expected.editorSessionId === binding.sessionId);
|
|
819
|
+
if (!matches)
|
|
820
|
+
throw staleDiscoveryProvenance(expected);
|
|
821
|
+
}
|
|
822
|
+
function provenanceFromBinding(binding) {
|
|
823
|
+
return {
|
|
824
|
+
target: binding.target,
|
|
825
|
+
instanceId: binding.instanceId,
|
|
826
|
+
sessionId: binding.sessionId,
|
|
827
|
+
...(binding.target === "editor" ? { editorSessionId: binding.sessionId } : {}),
|
|
828
|
+
listenerId: binding.listenerId,
|
|
829
|
+
listenerGeneration: binding.listenerGeneration,
|
|
830
|
+
};
|
|
831
|
+
}
|
|
832
|
+
function staleDiscoveryProvenance(expected) {
|
|
833
|
+
return new SessionSupervisorError("E_TOOL_CATALOG_CHANGED", "The Unity listener generation changed after Tool discovery and before the first business request was sent.", [
|
|
834
|
+
"Restart this top-level tools or command invocation against the current Unity generation.",
|
|
835
|
+
], { instanceId: expected.instanceId, phase: "admission", businessRequestSent: false });
|
|
747
836
|
}
|
|
748
837
|
function admissionPollDelay(randomValue) {
|
|
749
838
|
const bounded = Number.isFinite(randomValue) ? Math.min(0.999999999, Math.max(0, randomValue)) : 0.5;
|
|
@@ -756,7 +845,7 @@ function admissionBusy(instanceId, timeoutMs) {
|
|
|
756
845
|
}
|
|
757
846
|
/** runtime-tool namespace 始终绑定独立 development Player;其余命令绑定 Editor。 */
|
|
758
847
|
function bridgeTarget(command) {
|
|
759
|
-
return command
|
|
848
|
+
return command.startsWith("runtime-tool.") ? "runtime" : "editor";
|
|
760
849
|
}
|
|
761
850
|
function normalizeTimeoutMs(value, mode) {
|
|
762
851
|
if (mode === "observeNow") {
|
|
@@ -858,11 +947,28 @@ function identityMismatch(instanceId) {
|
|
|
858
947
|
"Run unitycli instances list and retry after the selected session is stable.",
|
|
859
948
|
], { instanceId });
|
|
860
949
|
}
|
|
861
|
-
|
|
862
|
-
|
|
950
|
+
/**
|
|
951
|
+
* 连接失败的统一错误构造;dataDir 可用时读取项目 bridge 日志尾部,
|
|
952
|
+
* 把 Unity 侧阻止 bridge 启动的根因直接透出到错误信息与 nextActions,而不是笼统的连接失败。
|
|
953
|
+
*/
|
|
954
|
+
async function connectionFailure(instanceId, error, dataDir) {
|
|
955
|
+
const failure = new SessionSupervisorError("BRIDGE_CONNECTION_FAILED", errorMessage(error), [
|
|
863
956
|
"Run unitycli instances list and inspect the selected Unity session.",
|
|
864
957
|
"Run unitycli tools run editor.state for transition or blocker details.",
|
|
865
958
|
], { instanceId }, true, REGISTRY_POLL_INTERVAL_MS);
|
|
959
|
+
try {
|
|
960
|
+
const diagnostics = await readBridgeStartBlockerDiagnostics(dataDir ?? defaultDataDir(), instanceId);
|
|
961
|
+
if (!diagnostics)
|
|
962
|
+
return failure;
|
|
963
|
+
return new SessionSupervisorError("BRIDGE_CONNECTION_FAILED", `${errorMessage(error)} ${diagnostics.message}`, [
|
|
964
|
+
...diagnostics.nextActions,
|
|
965
|
+
...failure.nextActions,
|
|
966
|
+
], { instanceId, bridgeStartBlocked: diagnostics.details }, true, REGISTRY_POLL_INTERVAL_MS);
|
|
967
|
+
}
|
|
968
|
+
catch {
|
|
969
|
+
// 根因诊断永远不影响原始连接失败错误。
|
|
970
|
+
return failure;
|
|
971
|
+
}
|
|
866
972
|
}
|
|
867
973
|
function admissionWasRejected(response) {
|
|
868
974
|
return response.ok === false && (response.error.code === "E_ADMISSION_REQUIRED" || response.error.code === "E_ADMISSION_IDENTITY_MISMATCH");
|