From 13d0c80335a827744de29df6e0ea783f8c28656f Mon Sep 17 00:00:00 2001 From: huadexuan <491009149@qq.com> Date: Thu, 24 Sep 2026 21:41:14 +0800 Subject: [PATCH] =?UTF-8?q?```=20chore(bridge):=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=A1=A5=E6=8E=A5=E5=8C=85=E7=9A=84=E6=8F=90=E4=BA=A4=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=92=8CGit=E5=B1=9E=E6=80=A7=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除了 .codely-bridge-commit 文件中存储的提交哈希值 移除了 .gitattributes 文件中的行结束符配置规则 ``` --- .../.codely-bridge-commit | 1 + .../.gitattributes | 0 .../CHANGELOG.md | 0 .../CHANGELOG.md.meta | 0 .../Editor.meta | 0 .../Editor/Bridge.meta | 0 .../Editor/Bridge/AssemblyInfo.cs | 0 .../Editor/Bridge/AssemblyInfo.cs.meta | 0 .../Editor/Bridge/Helpers.meta | 0 .../Editor/Bridge/Helpers/ActionRouter.cs | 0 .../Bridge/Helpers/ActionRouter.cs.meta | 0 .../Bridge/Helpers/AssetListeningGuard.cs | 0 .../Helpers/AssetListeningGuard.cs.meta | 0 .../Editor/Bridge/Helpers/AsyncTaskRunner.cs | 0 .../Bridge/Helpers/AsyncTaskRunner.cs.meta | 0 .../Bridge/Helpers/BackgroundCommandPump.cs | 0 .../Helpers/BackgroundCommandPump.cs.meta | 0 .../Helpers/BridgeUpdateRestartPrompt.cs | 2 + .../Helpers/BridgeUpdateRestartPrompt.cs.meta | 0 .../Editor/Bridge/Helpers/CommandContext.cs | 0 .../Bridge/Helpers/CommandContext.cs.meta | 0 .../Bridge/Helpers/CompilationHelper.cs | 0 .../Bridge/Helpers/CompilationHelper.cs.meta | 0 .../Editor/Bridge/Helpers/CoroutineRunner.cs | 0 .../Bridge/Helpers/CoroutineRunner.cs.meta | 0 .../Editor/Bridge/Helpers/DetachedJobs.cs | 0 .../Bridge/Helpers/DetachedJobs.cs.meta | 0 .../Editor/Bridge/Helpers/DialogWatcher.cs | 2 + .../Bridge/Helpers/DialogWatcher.cs.meta | 0 .../Bridge/Helpers/EditorAutomationGuard.cs | 34 ++ .../Helpers/EditorAutomationGuard.cs.meta | 0 .../Editor/Bridge/Helpers/ExecPath.cs | 0 .../Editor/Bridge/Helpers/ExecPath.cs.meta | 0 .../Bridge/Helpers/GameObjectSerializer.cs | 0 .../Helpers/GameObjectSerializer.cs.meta | 0 .../Editor/Bridge/Helpers/JobContext.cs | 0 .../Editor/Bridge/Helpers/JobContext.cs.meta | 0 .../Editor/Bridge/Helpers/JobControl.cs | 0 .../Editor/Bridge/Helpers/JobControl.cs.meta | 0 .../Editor/Bridge/Helpers/JobRegistry.cs | 0 .../Editor/Bridge/Helpers/JobRegistry.cs.meta | 0 .../Editor/Bridge/Helpers/JobRunnerBase.cs | 0 .../Bridge/Helpers/JobRunnerBase.cs.meta | 0 .../Bridge/Helpers/JsonCommandHelper.cs | 0 .../Bridge/Helpers/JsonCommandHelper.cs.meta | 0 .../Bridge/Helpers/MacModalDialogScanner.cs | 0 .../Helpers/MacModalDialogScanner.cs.meta | 0 .../Editor/Bridge/Helpers/MainThreadHelper.cs | 0 .../Bridge/Helpers/MainThreadHelper.cs.meta | 0 .../Bridge/Helpers/ModalDialogScanner.cs | 0 .../Bridge/Helpers/ModalDialogScanner.cs.meta | 0 .../Editor/Bridge/Helpers/PortManager.cs | 0 .../Editor/Bridge/Helpers/PortManager.cs.meta | 0 .../Editor/Bridge/Helpers/Response.cs | 0 .../Editor/Bridge/Helpers/Response.cs.meta | 0 .../Bridge/Helpers/SelectionPayloadBuilder.cs | 135 ++++++++ .../Helpers/SelectionPayloadBuilder.cs.meta | 11 + .../Bridge/Helpers/ServerPathResolver.cs | 0 .../Bridge/Helpers/ServerPathResolver.cs.meta | 0 .../Editor/Bridge/Helpers/ShaderVariantApi.cs | 0 .../Bridge/Helpers/ShaderVariantApi.cs.meta | 0 .../Editor/Bridge/Helpers/StateComposer.cs | 0 .../Bridge/Helpers/StateComposer.cs.meta | 0 .../Editor/Bridge/Helpers/StepJob.cs | 0 .../Editor/Bridge/Helpers/StepJob.cs.meta | 0 .../Editor/Bridge/Helpers/StepJobRunner.cs | 19 +- .../Bridge/Helpers/StepJobRunner.cs.meta | 0 .../Editor/Bridge/Helpers/TelemetryHelper.cs | 0 .../Bridge/Helpers/TelemetryHelper.cs.meta | 0 .../Bridge/Helpers/UnityStateDirtyHook.cs | 0 .../Helpers/UnityStateDirtyHook.cs.meta | 0 .../Editor/Bridge/Helpers/Vector3Helper.cs | 0 .../Bridge/Helpers/Vector3Helper.cs.meta | 0 .../Bridge/Helpers/Win32ModalDialogScanner.cs | 0 .../Helpers/Win32ModalDialogScanner.cs.meta | 0 .../Editor/Bridge/Helpers/WriteGuard.cs | 9 +- .../Editor/Bridge/Helpers/WriteGuard.cs.meta | 0 .../Editor/Bridge/Icons.meta | 0 .../Editor/Bridge/Native.meta | 0 .../Editor/Bridge/Native/EditorBusyProxy.cs | 16 + .../Bridge/Native/EditorBusyProxy.cs.meta | 2 + .../Editor/Bridge/Native/NativeDllLoader.cs | 29 +- .../Bridge/Native/NativeDllLoader.cs.meta | 0 .../Bridge/Native/NativeUnityTcpBridgeAPI.cs | 4 + .../Native/NativeUnityTcpBridgeAPI.cs.meta | 0 .../Bridge/Native/NativeUnityTcpBridgeHost.cs | 1 + .../Native/NativeUnityTcpBridgeHost.cs.meta | 0 .../Bridge/Native/NativeWindowBridgeAPI.cs | 0 .../Native/NativeWindowBridgeAPI.cs.meta | 0 .../NativeWindowBridgeHost.AddComponent.cs | 0 ...ativeWindowBridgeHost.AddComponent.cs.meta | 0 ...eWindowBridgeHost.AdvancedDropdownPopup.cs | 0 ...owBridgeHost.AdvancedDropdownPopup.cs.meta | 0 .../NativeWindowBridgeHost.Composite.cs | 0 .../NativeWindowBridgeHost.Composite.cs.meta | 0 .../Native/NativeWindowBridgeHost.Cursor.cs | 0 .../NativeWindowBridgeHost.Cursor.cs.meta | 0 .../NativeWindowBridgeHost.DragAndDrop.cs | 0 ...NativeWindowBridgeHost.DragAndDrop.cs.meta | 0 .../NativeWindowBridgeHost.IconSelector.cs | 0 ...ativeWindowBridgeHost.IconSelector.cs.meta | 0 .../Native/NativeWindowBridgeHost.Json.cs | 0 .../NativeWindowBridgeHost.Json.cs.meta | 0 .../NativeWindowBridgeHost.NewInputSystem.cs | 0 ...iveWindowBridgeHost.NewInputSystem.cs.meta | 0 .../NativeWindowBridgeHost.ObjectSelector.cs | 0 ...iveWindowBridgeHost.ObjectSelector.cs.meta | 0 .../NativeWindowBridgeHost.PaneOptions.cs | 0 ...NativeWindowBridgeHost.PaneOptions.cs.meta | 0 .../Native/NativeWindowBridgeHost.Panel.cs | 0 .../NativeWindowBridgeHost.Panel.cs.meta | 0 .../NativeWindowBridgeHost.PopupDock.cs | 0 .../NativeWindowBridgeHost.PopupDock.cs.meta | 0 .../NativeWindowBridgeHost.PopupMenu.cs | 0 .../NativeWindowBridgeHost.PopupMenu.cs.meta | 0 .../Native/NativeWindowBridgeHost.TabDrag.cs | 0 .../NativeWindowBridgeHost.TabDrag.cs.meta | 0 .../Bridge/Native/NativeWindowBridgeHost.cs | 49 ++- .../Native/NativeWindowBridgeHost.cs.meta | 0 .../Bridge/Native/StreamingMaskWindow.cs | 0 .../Bridge/Native/StreamingMaskWindow.cs.meta | 0 .../Editor/Bridge/Notifier.meta | 0 .../Bridge/Notifier/AgentInputNotifier.cs | 0 .../Notifier/AgentInputNotifier.cs.meta | 0 .../Notifier/ConsoleLogChangedNotifier.cs | 0 .../ConsoleLogChangedNotifier.cs.meta | 0 .../Bridge/Notifier/SceneHierarchyNotifier.cs | 0 .../Notifier/SceneHierarchyNotifier.cs.meta | 0 .../Notifier/SelectionChangedNotifier.cs | 57 ++++ .../Notifier/SelectionChangedNotifier.cs.meta | 0 .../Editor/Bridge/Serialization.meta | 0 .../Serialization/UnityTypeConverters.cs | 0 .../Serialization/UnityTypeConverters.cs.meta | 0 .../Editor/Bridge/Tools.meta | 0 .../Bridge/Tools/ExecuteCSharpScript.cs | 5 +- .../Bridge/Tools/ExecuteCSharpScript.cs.meta | 0 .../Editor/Bridge/Tools/ExecuteCustomTool.cs | 0 .../Bridge/Tools/ExecuteCustomTool.cs.meta | 0 .../Editor/Bridge/Tools/ExecuteMenuItem.cs | 0 .../Bridge/Tools/ExecuteMenuItem.cs.meta | 0 .../Bridge/Tools/ExecuteScriptCommand.cs | 0 .../Bridge/Tools/ExecuteScriptCommand.cs.meta | 0 .../Editor/Bridge/Tools/Jobs.meta | 0 .../Bridge/Tools/Jobs/EditorStepJobs.cs | 7 +- .../Bridge/Tools/Jobs/EditorStepJobs.cs.meta | 0 .../Bridge/Tools/Jobs/PackageStepJobs.cs | 0 .../Bridge/Tools/Jobs/PackageStepJobs.cs.meta | 0 .../Editor/Bridge/Tools/ManageAsset.cs | 175 +--------- .../Editor/Bridge/Tools/ManageAsset.cs.meta | 0 .../Editor/Bridge/Tools/ManageBake.cs | 0 .../Editor/Bridge/Tools/ManageBake.cs.meta | 0 .../Editor/Bridge/Tools/ManageDialog.cs | 0 .../Editor/Bridge/Tools/ManageDialog.cs.meta | 0 .../Editor/Bridge/Tools/ManageEditor.cs | 59 +--- .../Editor/Bridge/Tools/ManageEditor.cs.meta | 0 .../Editor/Bridge/Tools/ManageGameObject.cs | 305 ++++++++--------- .../Bridge/Tools/ManageGameObject.cs.meta | 0 .../Editor/Bridge/Tools/ManageGameView.cs | 0 .../Bridge/Tools/ManageGameView.cs.meta | 0 .../Editor/Bridge/Tools/ManageInput.cs | 0 .../Editor/Bridge/Tools/ManageInput.cs.meta | 0 .../Editor/Bridge/Tools/ManageJob.cs | 0 .../Editor/Bridge/Tools/ManageJob.cs.meta | 0 .../Editor/Bridge/Tools/ManagePackage.cs | 0 .../Editor/Bridge/Tools/ManagePackage.cs.meta | 0 .../Editor/Bridge/Tools/ManageScene.cs | 242 ++++---------- .../Editor/Bridge/Tools/ManageScene.cs.meta | 0 .../Editor/Bridge/Tools/ManageScreenshot.cs | 15 +- .../Bridge/Tools/ManageScreenshot.cs.meta | 0 .../Editor/Bridge/Tools/ManageShader.cs | 0 .../Editor/Bridge/Tools/ManageShader.cs.meta | 0 .../Editor/Bridge/Tools/ManageWindowBridge.cs | 0 .../Bridge/Tools/ManageWindowBridge.cs.meta | 0 .../Editor/Bridge/Tools/PlatformMp4Encoder.cs | 0 .../Bridge/Tools/PlatformMp4Encoder.cs.meta | 0 .../Editor/Bridge/Tools/REPL.meta | 0 .../Bridge/Tools/REPL/Repl.ApiHelper.cs | 0 .../Bridge/Tools/REPL/Repl.ApiHelper.cs.meta | 0 .../Editor/Bridge/Tools/REPL/Repl.cs | 0 .../Editor/Bridge/Tools/REPL/Repl.cs.meta | 0 .../Editor/Bridge/Tools/REPL/ReplGuard.cs | 0 .../Bridge/Tools/REPL/ReplGuard.cs.meta | 0 .../Editor/Bridge/Tools/ReadConsole.cs | 248 +++++++++++--- .../Editor/Bridge/Tools/ReadConsole.cs.meta | 0 .../Editor/Bridge/Tools/ScriptFix.meta | 0 .../Tools/ScriptFix/FixAmbiguousReference.cs | 0 .../ScriptFix/FixAmbiguousReference.cs.meta | 0 .../ScriptFix/FixMissingAssemblyReference.cs | 0 .../FixMissingAssemblyReference.cs.meta | 0 .../Bridge/Tools/ScriptFix/FixMissingBrace.cs | 0 .../Tools/ScriptFix/FixMissingBrace.cs.meta | 0 .../Tools/ScriptFix/FixMissingImports.cs | 0 .../Tools/ScriptFix/FixMissingImports.cs.meta | 0 .../Tools/ScriptFix/FixMissingParenthesis.cs | 0 .../ScriptFix/FixMissingParenthesis.cs.meta | 0 .../Tools/ScriptFix/FixMissingSemicolon.cs | 0 .../ScriptFix/FixMissingSemicolon.cs.meta | 0 .../ScriptFix/FixMissingSquareBracket.cs | 0 .../ScriptFix/FixMissingSquareBracket.cs.meta | 0 .../FixUnqualifiedUnityStaticMethod.cs | 0 .../FixUnqualifiedUnityStaticMethod.cs.meta | 0 .../Tools/ScriptFix/ScriptFixContext.cs | 0 .../Tools/ScriptFix/ScriptFixContext.cs.meta | 0 .../Tools/ScriptFix/ScriptFixProvider.cs | 0 .../Tools/ScriptFix/ScriptFixProvider.cs.meta | 0 .../Tools/ScriptFix/ScriptSyntaxUtils.cs | 0 .../Tools/ScriptFix/ScriptSyntaxUtils.cs.meta | 0 .../Bridge/Tools/TmpEssentialsAutoImporter.cs | 2 + .../Tools/TmpEssentialsAutoImporter.cs.meta | 0 .../Bridge/Tools/VirtualInputDevices.cs | 0 .../Bridge/Tools/VirtualInputDevices.cs.meta | 0 .../Bridge/Tools/_InternalAssetListening.cs | 0 .../Tools/_InternalAssetListening.cs.meta | 0 .../Tools/_InternalStateDirtyNotifier.cs | 0 .../Tools/_InternalStateDirtyNotifier.cs.meta | 0 .../Editor/Bridge/UnityTcp.Editor.asmdef | 0 .../Editor/Bridge/UnityTcp.Editor.asmdef.meta | 0 .../Editor/Bridge/UnityTcpBridge.cs | 13 +- .../Editor/Bridge/UnityTcpBridge.cs.meta | 0 .../Editor/Bridge/Windows.meta | 0 .../Editor/Bridge/Windows/README_Windows.md | 0 .../Bridge/Windows/README_Windows.md.meta | 0 .../Bridge/Windows/TcpBridgeControlWindow.cs | 0 .../Windows/TcpBridgeControlWindow.cs.meta | 0 .../Editor/Bridge/fonts.meta | 0 .../Editor/Bridge/fonts/FiraMono-Regular.ttf | Bin .../Bridge/fonts/FiraMono-Regular.ttf.meta | 0 .../Editor/Bridge/fonts/Inter.ttc.meta | 0 .../Editor/Bridge/fonts/NotoSans-Regular.ttf | Bin .../Bridge/fonts/NotoSans-Regular.ttf.meta | 0 .../Editor/Common.meta | 0 .../Editor/Common/Codely.Common.asmdef | 0 .../Editor/Common/Codely.Common.asmdef.meta | 0 .../Editor/Common/CodelyLogger.cs | 0 .../Editor/Common/CodelyLogger.cs.meta | 0 .../Editor/Common/EditorProcessGuard.cs | 58 ++++ .../Editor/Common/EditorProcessGuard.cs.meta | 11 + .../Editor/Common/InstanceIdExtensions.cs | 314 ++++++++++++++++++ .../Common/InstanceIdExtensions.cs.meta | 0 .../Editor/Layout.meta | 0 .../Editor/Layout/Tuanjie AI Mode.wlt | 0 .../Editor/Layout/Tuanjie AI Mode.wlt.meta | 0 .../Editor/Tauri.meta | 0 .../Tauri/Cn.Tuanjie.Codely.Editor.asmdef | 0 .../Cn.Tuanjie.Codely.Editor.asmdef.meta | 0 .../Editor/Tauri/CodelyEventTracker.cs | 0 .../Editor/Tauri/CodelyEventTracker.cs.meta | 0 .../Editor/Tauri/CodelyIpcManager.cs | 0 .../Editor/Tauri/CodelyIpcManager.cs.meta | 0 .../Editor/Tauri/CodelyIpcServer.cs | 0 .../Editor/Tauri/CodelyIpcServer.cs.meta | 0 .../Editor/Tauri/CodelyLayoutInstaller.cs | 2 + .../Tauri/CodelyLayoutInstaller.cs.meta | 0 .../Editor/Tauri/CodelyToolbar.cs | 5 +- .../Editor/Tauri/CodelyToolbar.cs.meta | 0 .../Editor/Tauri/CodelyWindow.cs | 139 +++++--- .../Editor/Tauri/CodelyWindow.cs.meta | 0 .../Editor/Tauri/CodelyWindowDocker.cs | 0 .../Editor/Tauri/CodelyWindowDocker.cs.meta | 0 .../Editor/Tauri/DrillWindow.cs | 2 + .../Editor/Tauri/DrillWindow.cs.meta | 0 .../Tauri/EditorWindowNativeHandleHelper.cs | 0 .../EditorWindowNativeHandleHelper.cs.meta | 0 .../Editor/Tauri/Icons.meta | 0 .../Editor/Tauri/InternalBridge.meta | 0 .../InternalBridge/UnityConnectSession.cs | 0 .../UnityConnectSession.cs.meta | 0 .../Editor/Tauri/MacOSWebViewBridge.cs | 0 .../Editor/Tauri/MacOSWebViewBridge.cs.meta | 0 .../Editor/Tauri/NativeBrowserAPI.cs | 0 .../Editor/Tauri/NativeBrowserAPI.cs.meta | 0 .../Editor/Tauri/NativeWindowHelper.cs | 0 .../Editor/Tauri/NativeWindowHelper.cs.meta | 0 .../Editor/Tauri/TauriUtils.cs | 9 +- .../Editor/Tauri/TauriUtils.cs.meta | 0 .../Editor/Tauri/WebView2Host.cs | 0 .../Editor/Tauri/WebView2Host.cs.meta | 0 .../Editor/Tauri/WindowHostStabilityPolicy.cs | 0 .../Tauri/WindowHostStabilityPolicy.cs.meta | 0 .../Tauri/WindowResourcePreservationPolicy.cs | 0 .../WindowResourcePreservationPolicy.cs.meta | 0 .../Plugins.meta | 0 .../Plugins/Codely.Newtonsoft.Json.dll | Bin .../Plugins/Codely.Newtonsoft.Json.dll.meta | 29 ++ .../Plugins/Codely.Roslyn.README.md | 0 .../Plugins/Codely.Roslyn.README.md.meta | 0 .../Plugins/Codely.Roslyn.dll.meta | 29 ++ .../Plugins/Linux.meta | 0 .../Plugins/Linux/x86_64.meta | 0 .../Linux/x86_64/libNativeTcpBridge.so | Bin .../Linux/x86_64/libNativeTcpBridge.so.meta | 29 ++ .../Plugins/Win.meta | 0 .../Plugins/Win/NativeBrowser.dll | Bin .../Plugins/Win/NativeBrowser.dll.meta | 29 ++ .../Plugins/Win/NativeBrowser.meta | 0 .../Plugins/Win/NativeBrowser/CMakeLists.txt | 0 .../Win/NativeBrowser/CMakeLists.txt.meta | 0 .../Plugins/Win/NativeBrowser/build.ps1 | 0 .../Plugins/Win/NativeBrowser/build.ps1.meta | 0 .../Plugins/Win/NativeBrowser/include.meta | 0 .../Win/NativeBrowser/include/NativeBrowser.h | 0 .../include/NativeBrowser.h.meta | 23 ++ .../Plugins/Win/NativeBrowser/src.meta | 0 .../Win/NativeBrowser/src/BrowserInstance.cpp | 0 .../src/BrowserInstance.cpp.meta | 24 +- .../Win/NativeBrowser/src/BrowserInstance.h | 0 .../NativeBrowser/src/BrowserInstance.h.meta | 24 +- .../Win/NativeBrowser/src/NativeBrowser.cpp | 0 .../NativeBrowser/src/NativeBrowser.cpp.meta | 24 +- .../Win/NativeBrowser/src/STAThread.cpp | 0 .../Win/NativeBrowser/src/STAThread.cpp.meta | 24 +- .../Plugins/Win/NativeBrowser/src/STAThread.h | 0 .../Win/NativeBrowser/src/STAThread.h.meta | 24 +- .../Win/NativeBrowser/src/WndProcHook.cpp | 0 .../NativeBrowser/src/WndProcHook.cpp.meta | 24 +- .../Win/NativeBrowser/src/WndProcHook.h | 0 .../Win/NativeBrowser/src/WndProcHook.h.meta | 24 +- .../Plugins/Win/NativeBrowser/vendor.meta | 0 .../Win/NativeBrowser/vendor/webview2.meta | 0 .../vendor/webview2/include.meta | 0 .../vendor/webview2/include/WebView2.h | 0 .../vendor/webview2/include/WebView2.h.meta | 24 +- .../NativeBrowser/vendor/webview2/lib.meta | 0 .../vendor/webview2/lib/x64.meta | 0 .../lib/x64/WebView2LoaderStatic.lib.meta | 24 +- .../Plugins/Win/NativeIpcClient.dll | Bin .../Plugins/Win/NativeIpcClient.dll.meta | 29 ++ .../Plugins/Win/NativeTcpBridge.dll | Bin 0 -> 485888 bytes .../Plugins/Win/NativeTcpBridge.dll.meta | 29 ++ .../Plugins/Win/NativeWindowBridge.dll | Bin .../Plugins/Win/NativeWindowBridge.dll.meta | 0 .../Plugins/Win/datachannel.dll | Bin .../Plugins/Win/datachannel.dll.meta | 0 .../Plugins/Win/libcrypto-3-x64.dll.meta | 0 .../Plugins/Win/libssl-3-x64.dll | Bin .../Plugins/Win/libssl-3-x64.dll.meta | 0 .../Plugins/macOS.meta | 0 .../Plugins/macOS/WebView.meta | 0 .../Plugins/macOS/WebView/WebViewPlugin.mm | 0 .../macOS/WebView/WebViewPlugin.mm.meta | 24 +- .../Plugins/macOS/WebView/build-webview.sh | 0 .../macOS/WebView/build-webview.sh.meta | 0 .../Plugins/macOS/WebViewPlugin.bundle.meta | 28 ++ .../macOS/WebViewPlugin.bundle/Contents.meta | 0 .../WebViewPlugin.bundle/Contents/Info.plist | 0 .../Contents/Info.plist.meta | 0 .../WebViewPlugin.bundle/Contents/MacOS.meta | 0 .../Contents/MacOS/WebViewPlugin | Bin .../Contents/MacOS/WebViewPlugin.meta | 0 .../Plugins/macOS/libNativeTcpBridge.dylib | Bin .../macOS/libNativeTcpBridge.dylib.meta | 29 ++ .../Plugins/macOS/libNativeWindowBridge.dylib | Bin .../macOS/libNativeWindowBridge.dylib.meta | 0 .../Plugins/macOS/libcrypto.3.dylib | Bin .../Plugins/macOS/libcrypto.3.dylib.meta | 0 .../Plugins/macOS/libdatachannel.dylib.meta | 0 .../Plugins/macOS/libssl.3.dylib | Bin .../Plugins/macOS/libssl.3.dylib.meta | 0 .../README.md | 0 .../README.md.meta | 0 .../package.json | 0 .../package.json.meta | 0 .../scripts.meta | 0 .../scripts/fix-meta-guids.ps1 | 0 .../scripts/fix-meta-guids.ps1.meta | 0 .../scripts/fix-meta-guids.sh | 0 .../scripts/fix-meta-guids.sh.meta | 0 .../scripts/validate-meta-guids.bat | 0 .../scripts/validate-meta-guids.bat.meta | 0 .../scripts/validate-meta-guids.sh | 0 .../scripts/validate-meta-guids.sh.meta | 0 .../.codely-bridge-commit | 1 - .../Bridge/Helpers/EditorAutomationGuard.cs | 23 -- .../Notifier/SelectionChangedNotifier.cs | 119 ------- .../Editor/Common/InstanceIdExtensions.cs | 118 ------- .../Plugins/Codely.Newtonsoft.Json.dll.meta | 95 ------ .../Plugins/Codely.Roslyn.dll.meta | 95 ------ .../Linux/x86_64/libNativeTcpBridge.so.meta | 89 ----- .../Plugins/Win/NativeBrowser.dll.meta | 63 ---- .../include/NativeBrowser.h.meta | 47 --- .../Plugins/Win/NativeIpcClient.dll.meta | 63 ---- .../Plugins/Win/NativeTcpBridge.dll | Bin 477184 -> 0 bytes .../Plugins/Win/NativeTcpBridge.dll.meta | 89 ----- .../Plugins/macOS/WebViewPlugin.bundle.meta | 66 ---- .../macOS/libNativeTcpBridge.dylib.meta | 89 ----- Assets/Prefabs/第一章/弓箭手.prefab | 2 +- Assets/Scenes/Chapter1/CoreBattleTest.scene | 8 +- CODELY.md | 1 + Packages/manifest.json | 2 +- Packages/packages-lock.json | 2 +- 召唤之战 - 核心玩法拆家版.md | 3 + 召唤之战-核心玩法塔防版.md | 258 ++++++++++++++ 392 files changed, 1814 insertions(+), 1895 deletions(-) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.codely-bridge-commit rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/.gitattributes (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/CHANGELOG.md (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/CHANGELOG.md.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/AssemblyInfo.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/AssemblyInfo.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ActionRouter.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ActionRouter.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/AssetListeningGuard.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/AsyncTaskRunner.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/BackgroundCommandPump.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs (98%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/CommandContext.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/CommandContext.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/CompilationHelper.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/CompilationHelper.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/CoroutineRunner.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/CoroutineRunner.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/DetachedJobs.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/DetachedJobs.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/DialogWatcher.cs (99%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/DialogWatcher.cs.meta (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ExecPath.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ExecPath.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/GameObjectSerializer.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JobContext.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JobContext.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JobControl.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JobControl.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JobRegistry.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JobRegistry.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JobRunnerBase.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JobRunnerBase.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JsonCommandHelper.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/MacModalDialogScanner.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/MainThreadHelper.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/MainThreadHelper.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ModalDialogScanner.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/PortManager.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/PortManager.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/Response.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/Response.cs.meta (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ServerPathResolver.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ServerPathResolver.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ShaderVariantApi.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/StateComposer.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/StateComposer.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/StepJob.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/StepJob.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/StepJobRunner.cs (97%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/StepJobRunner.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/TelemetryHelper.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/TelemetryHelper.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/UnityStateDirtyHook.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/Vector3Helper.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/Vector3Helper.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/WriteGuard.cs (97%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Helpers/WriteGuard.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Icons.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native.meta (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeDllLoader.cs (95%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeDllLoader.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs (95%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs (99%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeAPI.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.cs (99%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/StreamingMaskWindow.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Native/StreamingMaskWindow.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Notifier.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Notifier/AgentInputNotifier.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Serialization.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Serialization/UnityTypeConverters.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ExecuteCSharpScript.cs (99%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ExecuteCustomTool.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ExecuteMenuItem.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ExecuteScriptCommand.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/Jobs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs (98%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageAsset.cs (89%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageAsset.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageBake.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageBake.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageDialog.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageDialog.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageEditor.cs (94%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageEditor.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageGameObject.cs (96%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageGameObject.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageGameView.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageGameView.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageInput.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageInput.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageJob.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageJob.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManagePackage.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManagePackage.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageScene.cs (75%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageScene.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageScreenshot.cs (99%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageScreenshot.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageShader.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageShader.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageWindowBridge.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ManageWindowBridge.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/PlatformMp4Encoder.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/REPL.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/REPL/Repl.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/REPL/Repl.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/REPL/ReplGuard.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ReadConsole.cs (78%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ReadConsole.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs (98%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/VirtualInputDevices.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/VirtualInputDevices.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/_InternalAssetListening.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/_InternalAssetListening.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/UnityTcp.Editor.asmdef (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/UnityTcp.Editor.asmdef.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/UnityTcpBridge.cs (97%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/UnityTcpBridge.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Windows.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Windows/README_Windows.md (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Windows/README_Windows.md.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Windows/TcpBridgeControlWindow.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/fonts.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/fonts/FiraMono-Regular.ttf (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/fonts/Inter.ttc.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/fonts/NotoSans-Regular.ttf (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Common.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Common/Codely.Common.asmdef (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Common/Codely.Common.asmdef.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Common/CodelyLogger.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Common/CodelyLogger.cs.meta (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs.meta create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Common/InstanceIdExtensions.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Layout.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Layout/Tuanjie AI Mode.wlt (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Layout/Tuanjie AI Mode.wlt.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyEventTracker.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyEventTracker.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyIpcManager.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyIpcManager.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyIpcServer.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyIpcServer.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyLayoutInstaller.cs (99%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyLayoutInstaller.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyToolbar.cs (97%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyToolbar.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyWindow.cs (97%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyWindow.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyWindowDocker.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/CodelyWindowDocker.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/DrillWindow.cs (99%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/DrillWindow.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/EditorWindowNativeHandleHelper.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/Icons.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/InternalBridge.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/InternalBridge/UnityConnectSession.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/MacOSWebViewBridge.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/MacOSWebViewBridge.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/NativeBrowserAPI.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/NativeBrowserAPI.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/NativeWindowHelper.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/NativeWindowHelper.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/TauriUtils.cs (97%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/TauriUtils.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/WebView2Host.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/WebView2Host.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/WindowHostStabilityPolicy.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/WindowHostStabilityPolicy.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/WindowResourcePreservationPolicy.cs (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Codely.Newtonsoft.Json.dll (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Codely.Roslyn.README.md (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Codely.Roslyn.README.md.meta (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.dll.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Linux.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Linux/x86_64.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Linux/x86_64/libNativeTcpBridge.so (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser.dll (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/CMakeLists.txt (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/CMakeLists.txt.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/build.ps1 (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/build.ps1.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/include.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/include/NativeBrowser.h (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/BrowserInstance.h (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/STAThread.cpp (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/STAThread.h (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/STAThread.h.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/WndProcHook.cpp (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/WndProcHook.h (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/vendor.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/vendor/webview2.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/vendor/webview2/include.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta (53%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeIpcClient.dll (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll.meta create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeWindowBridge.dll (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/NativeWindowBridge.dll.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/datachannel.dll (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/datachannel.dll.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/libcrypto-3-x64.dll.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/libssl-3-x64.dll (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/Win/libssl-3-x64.dll.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebView.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebView/WebViewPlugin.mm (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebView/WebViewPlugin.mm.meta (82%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebView/build-webview.sh (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebView/build-webview.sh.meta (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebViewPlugin.bundle/Contents.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/libNativeTcpBridge.dylib (100%) create mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib.meta rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/libNativeWindowBridge.dylib (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/libNativeWindowBridge.dylib.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/libcrypto.3.dylib (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/libcrypto.3.dylib.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/libdatachannel.dylib.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/libssl.3.dylib (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/Plugins/macOS/libssl.3.dylib.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/README.md (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/README.md.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/package.json (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/package.json.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts/fix-meta-guids.ps1 (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts/fix-meta-guids.ps1.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts/fix-meta-guids.sh (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts/fix-meta-guids.sh.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts/validate-meta-guids.bat (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts/validate-meta-guids.bat.meta (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts/validate-meta-guids.sh (100%) rename .codely.packages/{cn.tuanjie.codely.bridge@1.0.85-785dea6a => cn.tuanjie.codely.bridge@1.0.85-47f31100}/scripts/validate-meta-guids.sh.meta (100%) delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.codely-bridge-commit delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll.meta delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.dll.meta delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll.meta delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll.meta delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll.meta delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle.meta delete mode 100644 .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeTcpBridge.dylib.meta create mode 100644 召唤之战-核心玩法塔防版.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.codely-bridge-commit b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.codely-bridge-commit new file mode 100644 index 0000000..050cd6a --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.codely-bridge-commit @@ -0,0 +1 @@ +47f3110000c95eee5cd83c827e0f1f11585f7ae1 diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.gitattributes b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.gitattributes similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.gitattributes rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.gitattributes diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/CHANGELOG.md b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/CHANGELOG.md similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/CHANGELOG.md rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/CHANGELOG.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/CHANGELOG.md.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/CHANGELOG.md.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/CHANGELOG.md.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/CHANGELOG.md.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/AssemblyInfo.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/AssemblyInfo.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/AssemblyInfo.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/AssemblyInfo.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/AssemblyInfo.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/AssemblyInfo.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/AssemblyInfo.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/AssemblyInfo.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ActionRouter.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ActionRouter.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ActionRouter.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ActionRouter.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ActionRouter.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ActionRouter.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ActionRouter.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ActionRouter.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AssetListeningGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AssetListeningGuard.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AssetListeningGuard.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AssetListeningGuard.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AsyncTaskRunner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AsyncTaskRunner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AsyncTaskRunner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AsyncTaskRunner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BackgroundCommandPump.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BackgroundCommandPump.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BackgroundCommandPump.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BackgroundCommandPump.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs similarity index 98% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs index 6761890..411e41b 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs @@ -30,6 +30,8 @@ namespace UnityTcp.Editor.Helpers static BridgeUpdateRestartPrompt() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + EditorApplication.delayCall += TryShowPendingPrompt; } diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CommandContext.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CommandContext.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CommandContext.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CommandContext.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CommandContext.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CommandContext.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CommandContext.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CommandContext.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CompilationHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CompilationHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CompilationHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CompilationHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CompilationHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CompilationHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CompilationHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CompilationHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CoroutineRunner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CoroutineRunner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CoroutineRunner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CoroutineRunner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CoroutineRunner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CoroutineRunner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CoroutineRunner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CoroutineRunner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DetachedJobs.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DetachedJobs.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DetachedJobs.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DetachedJobs.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DetachedJobs.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DetachedJobs.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DetachedJobs.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DetachedJobs.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs index c1b1290..79a9718 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs @@ -113,6 +113,8 @@ namespace UnityTcp.Editor.Helpers static DialogWatcher() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + // Force main-thread-only static init NOW, on this ([InitializeOnLoad]) thread, // before any watcher thread exists: the Windows watcher thread reads // UnityTcpBridge.IsRunning in Notify, and if that were the bridge's first touch its diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs new file mode 100644 index 0000000..19a39be --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs @@ -0,0 +1,34 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace UnityTcp.Editor.Helpers +{ + /// + /// Restricts bridge auto-start to the main Editor process and supported automation runs. + /// Set to opt in when integration tests need the bridge. + /// + internal static class EditorAutomationGuard + { + internal const string AllowBridgeInBatchEnvVar = "UNITY_TCP_ALLOW_BATCH"; + + internal static bool IsAutomatedEditorRun() + => Application.isBatchMode + || SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null; + + internal static bool ShouldSkipBridgeAutoStart() + => EditorProcessGuard.ShouldSkipEditorAutoStart() + || (IsAutomatedEditorRun() + && string.IsNullOrWhiteSpace( + Environment.GetEnvironmentVariable(AllowBridgeInBatchEnvVar))); + + internal static bool ShouldSkipBridgeAutoStart( + bool isAssetImportWorker, + bool isSecondaryEditor, + bool isAutomatedEditorRun, + bool allowBridgeInBatch) + => isAssetImportWorker + || isSecondaryEditor + || (isAutomatedEditorRun && !allowBridgeInBatch); + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ExecPath.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ExecPath.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ExecPath.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ExecPath.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ExecPath.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ExecPath.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ExecPath.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ExecPath.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/GameObjectSerializer.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/GameObjectSerializer.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/GameObjectSerializer.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/GameObjectSerializer.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobContext.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobContext.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobContext.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobContext.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobContext.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobContext.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobContext.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobContext.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobControl.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobControl.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobControl.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobControl.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobControl.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobControl.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobControl.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobControl.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRegistry.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRegistry.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRegistry.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRegistry.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRegistry.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRegistry.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRegistry.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRegistry.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRunnerBase.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRunnerBase.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRunnerBase.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRunnerBase.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRunnerBase.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRunnerBase.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRunnerBase.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRunnerBase.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JsonCommandHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JsonCommandHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JsonCommandHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JsonCommandHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MacModalDialogScanner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MacModalDialogScanner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MacModalDialogScanner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MacModalDialogScanner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MainThreadHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MainThreadHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MainThreadHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MainThreadHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MainThreadHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MainThreadHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MainThreadHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MainThreadHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ModalDialogScanner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ModalDialogScanner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ModalDialogScanner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ModalDialogScanner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/PortManager.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/PortManager.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/PortManager.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/PortManager.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/PortManager.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/PortManager.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/PortManager.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/PortManager.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Response.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Response.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Response.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Response.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Response.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Response.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Response.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Response.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs new file mode 100644 index 0000000..af2235d --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs @@ -0,0 +1,135 @@ +using System.Linq; +using Codely.Newtonsoft.Json.Linq; +using UnityEditor; +#if UNITY_2021_2_OR_NEWER +using UnityEditor.SceneManagement; +#else +using UnityEditor.Experimental.SceneManagement; +#endif +using UnityEngine; + +namespace UnityTcp.Editor.Helpers +{ + /// + /// Builds the standard Unity selection payload shared by + /// and + /// 's get_selection action, + /// keeping the two callers in sync without duplicating logic. + /// + public static class SelectionPayloadBuilder + { + /// + /// Constructs a describing the current Unity Editor selection. + /// The caller is responsible for wrapping the result (e.g. in + /// or directly broadcasting it as a notification). + /// + public static JObject Build() + { + var assetGUIDs = Selection.assetGUIDs; + var assetPaths = assetGUIDs?.Select(AssetDatabase.GUIDToAssetPath).ToArray(); + + string activeAssetPath = Selection.activeObject != null + ? AssetDatabase.GetAssetPath(Selection.activeObject) + : null; + string activeAsset = string.IsNullOrEmpty(activeAssetPath) + ? null + : activeAssetPath.Replace('\\', '/'); + + bool isSubAsset = Selection.activeObject != null + && AssetDatabase.IsSubAsset(Selection.activeObject); + string activeAssetFileId = string.IsNullOrEmpty(activeAsset) + ? null + : Selection.activeObject.FormatLocalFileId(); + string activeAssetGuid = string.IsNullOrEmpty(activeAsset) + ? null + : Selection.activeObject.GetAssetGuid(); + + var activeGo = Selection.activeGameObject; + var goSource = activeGo != null && activeGo.scene.IsValid() + ? PrefabUtility.GetCorrespondingObjectFromSource(activeGo) + : null; + string sourcePrefabGuid = goSource != null + ? AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(goSource)) + : null; + + var payload = new + { + activeObject = Selection.activeObject?.name, + activeObjectKind = Selection.activeObject.GetKind(), + activeAsset = activeAsset, + // Decimal string: Tuanjie fileIDs can exceed JS Number / Int32. + activeAssetLocalId = activeAssetFileId, + activeAssetGuid = activeAssetGuid, + activeSelectedSubAsset = isSubAsset && !string.IsNullOrEmpty(activeAssetFileId) + ? (object)new + { + type = Selection.activeObject.GetType().Name, + name = Selection.activeObject.name, + fileId = activeAssetFileId, + } + : null, + activeGameObject = activeGo?.name, + activeGameObjectScenePath = GetSceneOrPrefabPath(activeGo), + // instanceID always refers to the GameObject, never Transform/component. + // Decimal string: Unity 6.5 EntityId can exceed JS Number / 2^53. + activeInstanceID = activeGo.FormatStableInstanceId() ?? "0", + activeGameObjectFileId = activeGo.FormatLocalFileId(), + activeGameObjectGuid = activeGo.FormatGlobalObjectGuid(), + // Prefab instance children: fileId is the source-prefab local id, + // not a scene YAML id. Pair with these to grep the prefab file. + activeGameObjectIsPrefabInstanceChild = goSource != null, + activeGameObjectSourcePrefabGuid = string.IsNullOrEmpty(sourcePrefabGuid) ? null : sourcePrefabGuid, + activeGameObjectSourcePrefabFileId = goSource.FormatLocalFileId(), + activeTransform = Selection.activeTransform?.name, +#if UNITY_2020_1_OR_NEWER + count = Selection.count, +#else + count = Selection.objects?.Length ?? 0, +#endif + objects = Selection.objects + .Where(obj => obj != null) + .Select(obj => new + { + name = obj.name, + type = obj.GetType().FullName, + instanceID = obj.FormatStableInstanceId(), + }) + .ToList(), + gameObjects = Selection.gameObjects + .Where(go => go != null) + .Select(go => new + { + name = go.name, + path = go.GetHierarchyPathWithIndex(), + instanceID = go.FormatStableInstanceId(), + kind = go.GetKind(), + fileId = go.FormatLocalFileId(), + guid = go.FormatGlobalObjectGuid(), + componentNames = go.GetComponentTypeNames(), + }) + .ToList(), + assetGUIDs = assetGUIDs, + assetPaths = assetPaths, + }; + + return JObject.FromObject(payload); + } + + /// + /// Returns the scene or prefab asset path that owns , + /// normalised to forward-slashes. Returns null for null input. + /// + public static string GetSceneOrPrefabPath(GameObject go) + { + if (go == null) return null; + if (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)) + return go.scene.path.Replace('\\', '/'); + string stagePath = InstanceIdExtensions.GetPrefabStageAssetPath( + PrefabStageUtility.GetPrefabStage(go)); + if (!string.IsNullOrEmpty(stagePath)) + return stagePath.Replace('\\', '/'); + string assetPath = AssetDatabase.GetAssetPath(go); + return string.IsNullOrEmpty(assetPath) ? null : assetPath.Replace('\\', '/'); + } + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs.meta new file mode 100644 index 0000000..be0ebf2 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00ca19b90d0118744b3dae38cfcd149f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ServerPathResolver.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ServerPathResolver.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ServerPathResolver.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ServerPathResolver.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ServerPathResolver.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ServerPathResolver.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ServerPathResolver.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ServerPathResolver.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ShaderVariantApi.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ShaderVariantApi.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ShaderVariantApi.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ShaderVariantApi.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StateComposer.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StateComposer.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StateComposer.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StateComposer.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StateComposer.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StateComposer.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StateComposer.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StateComposer.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJob.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJob.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJob.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJob.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJob.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJob.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJob.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJob.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs index f379684..5f9d356 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs @@ -143,9 +143,22 @@ namespace UnityTcp.Editor.Helpers // Set from any thread when state changed outside the tick (a cross-thread detach); // consumed by Tick on the main thread, which owns persistence. private static volatile bool _saveRequested; + private static bool _initialized; static StepJobRunner() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + + EnsureInitialized(); + } + + // Main-thread only. Explicit bridge/job starts need restoration too, even + // when InitializeOnLoad deliberately skipped auto-start in this domain. + internal static void EnsureInitialized() + { + if (_initialized) return; + // Set before Load: a restored job's OnRestored may enroll another job. + _initialized = true; Load(); // Pending markers persist but only step jobs survive the reload; retire the rest so no // client is left polling a job that no longer exists. @@ -171,6 +184,7 @@ namespace UnityTcp.Editor.Helpers bool detached = false) { if (job == null) throw new ArgumentNullException(nameof(job)); + EnsureInitialized(); var ctx = new JobContext(requestId, name, detached); var entry = new Entry @@ -490,9 +504,8 @@ namespace UnityTcp.Editor.Helpers { Save(); _entries.Clear(); - Load(); - DetachedJobs.ReconcilePending( - _entries.Where(e => e.Detached).Select(e => e.JobId).ToList()); + _initialized = false; + EnsureInitialized(); } private static void Load() diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/TelemetryHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/TelemetryHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/TelemetryHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/TelemetryHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/TelemetryHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/TelemetryHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/TelemetryHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/TelemetryHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/UnityStateDirtyHook.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/UnityStateDirtyHook.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/UnityStateDirtyHook.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/UnityStateDirtyHook.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Vector3Helper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Vector3Helper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Vector3Helper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Vector3Helper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Vector3Helper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Vector3Helper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Vector3Helper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Vector3Helper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs index 6e6f8c3..dd386e0 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs @@ -55,24 +55,17 @@ namespace UnityTcp.Editor.Helpers "create", "modify", "delete", - "add_component", "remove_component", "set_component_property" }, ["manage_asset"] = new HashSet(StringComparer.OrdinalIgnoreCase) { - "import", "ensure_prefab_variant", "create", - "modify", - "delete", - "duplicate", - "move" + "modify" }, ["manage_scene"] = new HashSet(StringComparer.OrdinalIgnoreCase) { - "ensure_scene_open", - "ensure_scene_saved", "create", "load", "save" diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Icons.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Icons.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Icons.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Icons.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs new file mode 100644 index 0000000..f3e31e2 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs @@ -0,0 +1,16 @@ +namespace UnityTcp.Editor.Native +{ + // Managed code only enables the feature; native window probes decide when to show. + internal static class EditorBusyProxy + { + internal const bool BusyWindowEnabled = true; + + internal static void Refresh() + { +#if UNITY_EDITOR_WIN + try { NativeUnityTcpBridgeAPI.NTB_SetEditorBusyProxyEnabled?.Invoke(BusyWindowEnabled ? 1 : 0); } + catch { /* Optional UI must not interrupt bridge startup. */ } +#endif + } + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs.meta new file mode 100644 index 0000000..0b8baf8 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ff8b1598a9bb4fbd8067e7245bc1f68d diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs similarity index 95% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs index c4aef90..ef3d281 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs @@ -169,6 +169,13 @@ namespace UnityTcp.Editor.Native static NativeDllLoader() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + + RegisterCleanupHandlers(); + } + + private static void RegisterCleanupHandlers() + { #if UNITY_2020_1_OR_NEWER UnityEditor.PackageManager.Events.registeringPackages -= OnPackagesRegistering; UnityEditor.PackageManager.Events.registeringPackages += OnPackagesRegistering; @@ -264,6 +271,8 @@ namespace UnityTcp.Editor.Native private static void RegisterLogCallback() { if (!IsLoaded) return; + // Explicit starts need cleanup too, even when bridge auto-start is disabled. + RegisterCleanupHandlers(); try { _logCallback = (level, message) => @@ -351,6 +360,8 @@ namespace UnityTcp.Editor.Native { if (_handle == IntPtr.Zero) return; OnUnload?.Invoke(reason); + // Stop/join native workers even when no managed bridge subscribed to OnUnload. + NativeUnityTcpBridgeHost.StopServer(reason); UnregisterLogCallback(); PlatformFree(_handle); _handle = IntPtr.Zero; @@ -369,6 +380,7 @@ namespace UnityTcp.Editor.Native NativeUnityTcpBridgeAPI.NTB_ResumeManagedCommandProcessing = null; NativeUnityTcpBridgeAPI.NTB_NotifyAll = null; NativeUnityTcpBridgeAPI.NTB_SetStreamPort = null; + NativeUnityTcpBridgeAPI.NTB_SetEditorBusyProxyEnabled = null; SetLogCallback = null; SessionState.EraseString(HandleKey); } @@ -405,7 +417,7 @@ namespace UnityTcp.Editor.Native { if (!CheckAbiVersion()) return false; - return + bool resolved = Resolve("NTB_StartBridge", ref NativeUnityTcpBridgeAPI.NTB_StartBridge) && Resolve("NTB_StopWithReason", ref NativeUnityTcpBridgeAPI.NTB_StopWithReason) && Resolve("NTB_Stop", ref NativeUnityTcpBridgeAPI.NTB_Stop) && @@ -421,6 +433,13 @@ namespace UnityTcp.Editor.Native Resolve("NTB_NotifyAll", ref NativeUnityTcpBridgeAPI.NTB_NotifyAll) && Resolve("NTB_SetStreamPort", ref NativeUnityTcpBridgeAPI.NTB_SetStreamPort) && Resolve("Log_SetCallback", ref SetLogCallback); + if (!resolved) return false; + +#if UNITY_EDITOR_WIN + // The busy-Editor proxy is optional; failure to bind it must not disable commands. + ResolveOptional("NTB_SetEditorBusyProxyEnabled", ref NativeUnityTcpBridgeAPI.NTB_SetEditorBusyProxyEnabled); +#endif + return true; } private static bool CheckAbiVersion() @@ -464,6 +483,14 @@ namespace UnityTcp.Editor.Native return true; } +#if UNITY_EDITOR_WIN + private static void ResolveOptional(string symbol, ref T del) where T : Delegate + { + IntPtr ptr = GetProcAddress(_handle, symbol); + del = ptr == IntPtr.Zero ? null : Marshal.GetDelegateForFunctionPointer(ptr); + } +#endif + private static string PluginPathUnder(string packageRoot) { if (string.IsNullOrEmpty(packageRoot)) return null; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs similarity index 95% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs index dceab08..6363892 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs @@ -61,6 +61,9 @@ namespace UnityTcp.Editor.Native // NTB_StartBridge — safe to call at any time. internal delegate void SetStreamPortDelegate(int streamPort); + // Optional Windows busy-Editor proxy; unavailable UI must not block commands. + internal delegate void SetEditorBusyProxyEnabledDelegate(int enabled); + internal static GetAbiVersionDelegate NTB_GetAbiVersion; internal static StartBridgeDelegate NTB_StartBridge; internal static StopDelegate NTB_Stop; @@ -76,6 +79,7 @@ namespace UnityTcp.Editor.Native internal static ResumeManagedCommandProcessingDelegate NTB_ResumeManagedCommandProcessing; internal static NotifyAllDelegate NTB_NotifyAll; internal static SetStreamPortDelegate NTB_SetStreamPort; + internal static SetEditorBusyProxyEnabledDelegate NTB_SetEditorBusyProxyEnabled; #endif } } diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs index ef72f6f..868b8bf 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs @@ -52,6 +52,7 @@ namespace UnityTcp.Editor.Native try { #if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX || UNITY_EDITOR_LINUX + EditorBusyProxy.Refresh(); // After a domain reload the managed side restarts but the native server // remains bound to its existing port. Probe first so we attach to the // existing listener instead of relying solely on NTB_StartBridge's idempotency. diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeAPI.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeAPI.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs index 39e894f..b00e9cc 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs @@ -68,11 +68,9 @@ namespace UnityTcp.Editor.Native [UnityEditor.InitializeOnLoadMethod] private static void OnDomainReload() { - // Register cleanup handler for the NEXT domain reload so we can null the - // native log callback before C# delegates are garbage-collected. Without - // this the old DLL instance's background threads would call a dangling - // function pointer and crash. - AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + + EnsureReloadCleanupRegistered(); // Listen for play mode changes to force-repaint GameView immediately // after exiting play mode, preventing a multi-second frame stall. @@ -233,6 +231,28 @@ namespace UnityTcp.Editor.Native private static void OnBeforeAssemblyReload() { +#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX + try + { + CleanupBeforeAssemblyReload(); + } + finally + { + // Window cleanup must not prevent releasing the native callback. + // Clear native first; keep the delegate rooted if that call fails. + try + { + NativeWindowBridgeAPI.NWB_SetLogCallback(null); + s_NativeLogCallbackRegistered = false; + s_NativeLogCallback = null; + } + catch (Exception) { } + } +#endif + } + + private static void CleanupBeforeAssemblyReload() + { #if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX // Notify browser that domain reload is imminent SendDataChannelMessage("{\"type\":\"domain_reload\"}"); @@ -296,16 +316,6 @@ namespace UnityTcp.Editor.Native s_OffscreenActive = false; s_OffscreenLoopRegistered = false; - // Null the log callback — this is the ONLY C# delegate the native - // side holds. NWB_SetLogCallback is an atomic store, never blocks. - try - { - NativeWindowBridgeAPI.NWB_SetLogCallback(null); - s_NativeLogCallbackRegistered = false; - s_NativeLogCallback = null; - } - catch (Exception) { } - // NOTE: Do NOT call NWB_StopServer or NWB_StopCapture here. // The native singleton keeps the HTTP server, WebRTC session, // and offscreen mode alive across domain reload. Benefits: @@ -1013,6 +1023,9 @@ namespace UnityTcp.Editor.Native private static void RegisterNativeLogCallback() { #if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX + // Install cleanup before handing any delegate to native, including + // explicit starts where OnDomainReload was skipped by the guard. + EnsureReloadCleanupRegistered(); if (s_NativeLogCallbackRegistered) return; try { @@ -1032,6 +1045,12 @@ namespace UnityTcp.Editor.Native #endif } + private static void EnsureReloadCleanupRegistered() + { + AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReload; + AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + } + /// /// Register EditorApplication.update polling for offscreen capture requests. /// diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/StreamingMaskWindow.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/StreamingMaskWindow.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/StreamingMaskWindow.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/StreamingMaskWindow.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/StreamingMaskWindow.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/StreamingMaskWindow.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/StreamingMaskWindow.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/StreamingMaskWindow.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/AgentInputNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/AgentInputNotifier.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/AgentInputNotifier.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/AgentInputNotifier.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs new file mode 100644 index 0000000..b0500f2 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs @@ -0,0 +1,57 @@ +using System; +using Codely.Newtonsoft.Json.Linq; +using UnityEditor; +using UnityTcp.Editor.Helpers; + +namespace UnityTcp.Editor.Notifier +{ + /// + /// Broadcasts the current Editor selection to notifier clients whenever it + /// changes. The emitted payload mirrors the structure returned by + /// 's get_selection action. + /// + [InitializeOnLoad] + public static class SelectionChangedNotifier + { + private const string EventType = "selection_changed"; + + private static bool _flushScheduled; + + static SelectionChangedNotifier() + { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + + Selection.selectionChanged += OnSelectionChanged; + } + + private static void OnSelectionChanged() => ScheduleFlush(); + + private static void ScheduleFlush() + { + if (_flushScheduled) return; + _flushScheduled = true; + EditorApplication.delayCall += Flush; + } + + private static void Flush() + { + _flushScheduled = false; + try + { + if (!UnityTcpBridge.IsRunning) return; + + JObject payload = BuildSelectionPayload(); + if (payload == null) return; + + UnityTcpBridge.NotifyAll(EventType, payload); + } + catch (Exception e) + { + try { CodelyLogger.LogError($"[SelectionChangedNotifier] flush failed: {e.Message}"); } catch { } + } + } + + private static JObject BuildSelectionPayload() => SelectionPayloadBuilder.Build(); + + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization/UnityTypeConverters.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization/UnityTypeConverters.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization/UnityTypeConverters.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization/UnityTypeConverters.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs index f05d81a..13fac55 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs @@ -1694,8 +1694,7 @@ namespace UnityTcp.Editor.Tools // Builds the response returned for a successfully executed one-shot script — whether it // completed synchronously or (via ScheduleTask/ScheduleCoroutine) on a later frame. `stopwatch` // was started when the command came in, so elapsed_ms is the real end-to-end time either way. - // Only the one-shot path reaches this (HandleSessionExecution builds its own response), so - // session_status is always "oneshot" here. + // Only the one-shot path reaches this (HandleSessionExecution builds its own response). static object BuildScriptSuccessResponse(object result, List logs, System.Diagnostics.Stopwatch stopwatch, object recordingResponse = null) { @@ -1703,9 +1702,7 @@ namespace UnityTcp.Editor.Tools var data = new Dictionary { { "result", formatted }, - { "return_type", SafeTypeName(result) }, { "elapsed_ms", stopwatch.ElapsedMilliseconds }, - { "session_status", "oneshot" }, { "logs", logs }, { "log_count", logs.Count }, }; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCustomTool.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCustomTool.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCustomTool.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCustomTool.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteMenuItem.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteMenuItem.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteMenuItem.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteMenuItem.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteScriptCommand.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteScriptCommand.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteScriptCommand.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteScriptCommand.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs similarity index 98% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs index 94d3d40..ff8d524 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs @@ -52,9 +52,10 @@ namespace UnityTcp.Editor.Tools.Jobs { ["status"] = "completed", ["pipeline_kind"] = "compile", - // Default pipeline calls include the complete post-compile console, so callers no - // longer need a second unity_console.get. If inclusion was explicitly disabled or - // the internal read failed, retain the compatibility hint for a manual fallback. + // Default pipeline calls include the effective post-compile Console view and + // report whether Collapse is active, so callers no longer need a second + // unity_console.get. If inclusion was explicitly disabled or the internal read + // failed, retain the compatibility hint for a manual fallback. ["requires_console_validation"] = !consoleReadSucceeded, ["console"] = console, // False means compilation never started while we watched. The counts below are then diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs similarity index 89% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs index 23b8e16..5d5d2dd 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs @@ -31,12 +31,8 @@ namespace UnityTcp.Editor.Tools new Dictionary> { { "ensure_prefab_variant", EnsurePrefabVariant }, - { "import", p => ReimportAsset(p["path"]?.ToString(), p["properties"] as JObject) }, { "create", CreateAsset }, { "modify", p => ModifyAsset(p["path"]?.ToString(), p["properties"] as JObject) }, - { "delete", p => DeleteAsset(p["path"]?.ToString()) }, - { "duplicate", p => DuplicateAsset(p["path"]?.ToString(), p["destination"]?.ToString()) }, - { "move", p => MoveOrRenameAsset(p["path"]?.ToString(), p["destination"]?.ToString()) }, { "search", SearchAssets }, { "get_info", p => GetAssetInfo( p["path"]?.ToString(), @@ -97,35 +93,6 @@ namespace UnityTcp.Editor.Tools // --- Action Implementations --- - private static object ReimportAsset(string path, JObject properties) - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' is required for reimport."); - if (!TryResolveAssetPath(path, out string fullPath, out var pathError)) - return pathError; - bool ghostDesync; - if (!AssetExists(fullPath, out ghostDesync)) - return BuildAssetNotFoundResponse($"Asset not found at path: {fullPath}", fullPath, ghostDesync); - - try - { - if (properties != null && properties.HasValues) - { - return Response.Error( - "Modifying importer properties is not supported. Call import without properties to force reimport." - ); - } - - AssetDatabase.ImportAsset(fullPath, ImportAssetOptions.ForceUpdate); - // AssetDatabase.Refresh(); // Usually ImportAsset handles refresh - return Response.Success($"Asset '{fullPath}' reimported.", GetAssetData(fullPath)); - } - catch (Exception e) - { - return Response.Error($"Failed to reimport asset '{fullPath}': {e.Message}"); - } - } - private static object CreateAsset(JObject @params) { string path = @params["path"]?.ToString(); @@ -518,146 +485,6 @@ namespace UnityTcp.Editor.Tools } } - private static object DeleteAsset(string path) - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' is required for delete."); - if (!TryResolveAssetPath(path, out string fullPath, out var pathError)) - return pathError; - bool ghostDesync; - if (!AssetExists(fullPath, out ghostDesync)) - return BuildAssetNotFoundResponse($"Asset not found at path: {fullPath}", fullPath, ghostDesync); - - try - { - bool success = AssetDatabase.DeleteAsset(fullPath); - if (success) - { - // AssetDatabase.Refresh(); // DeleteAsset usually handles refresh - return Response.Success($"Asset '{fullPath}' deleted successfully."); - } - else - { - // This might happen if the file couldn't be deleted (e.g., locked) - return Response.Error( - $"Failed to delete asset '{fullPath}'. Check logs or if the file is locked." - ); - } - } - catch (Exception e) - { - return Response.Error($"Error deleting asset '{fullPath}': {e.Message}"); - } - } - - private static object DuplicateAsset(string path, string destinationPath) - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' is required for duplicate."); - - if (!TryResolveAssetPath(path, out string sourcePath, out var sourceError)) - return sourceError; - bool ghostDesync; - if (!AssetExists(sourcePath, out ghostDesync)) - return BuildAssetNotFoundResponse($"Source asset not found at path: {sourcePath}", sourcePath, ghostDesync); - - string destPath; - if (string.IsNullOrEmpty(destinationPath)) - { - // Generate a unique path if destination is not provided - destPath = AssetDatabase.GenerateUniqueAssetPath(sourcePath); - } - else - { - if (!TryResolveAssetPath(destinationPath, out destPath, out var destError)) - return destError; - if (AssetExists(destPath)) - return Response.Error($"Asset already exists at destination path: {destPath}"); - // Ensure destination directory exists - EnsureDirectoryExists(Path.GetDirectoryName(destPath)); - } - - try - { - bool success = AssetDatabase.CopyAsset(sourcePath, destPath); - if (success) - { - // AssetDatabase.Refresh(); - return Response.Success( - $"Asset '{sourcePath}' duplicated to '{destPath}'.", - GetAssetData(destPath) - ); - } - else - { - return Response.Error( - $"Failed to duplicate asset from '{sourcePath}' to '{destPath}'." - ); - } - } - catch (Exception e) - { - return Response.Error($"Error duplicating asset '{sourcePath}': {e.Message}"); - } - } - - private static object MoveOrRenameAsset(string path, string destinationPath) - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' is required for move/rename."); - if (string.IsNullOrEmpty(destinationPath)) - return Response.Error("'destination' path is required for move/rename."); - - if (!TryResolveAssetPath(path, out string sourcePath, out var sourceError)) - return sourceError; - if (!TryResolveAssetPath(destinationPath, out string destPath, out var destError)) - return destError; - - bool ghostDesync; - if (!AssetExists(sourcePath, out ghostDesync)) - return BuildAssetNotFoundResponse($"Source asset not found at path: {sourcePath}", sourcePath, ghostDesync); - if (AssetExists(destPath)) - return Response.Error( - $"An asset already exists at the destination path: {destPath}" - ); - - // Ensure destination directory exists - EnsureDirectoryExists(Path.GetDirectoryName(destPath)); - - try - { - // Validate will return an error string if failed, empty string if successful - string validateError = AssetDatabase.ValidateMoveAsset(sourcePath, destPath); - if (!string.IsNullOrEmpty(validateError)) - { - return Response.Error( - $"Failed to move/rename asset from '{sourcePath}' to '{destPath}': {validateError}" - ); - } - - // MoveAsset returns an empty string on success, or an error message on failure - string moveError = AssetDatabase.MoveAsset(sourcePath, destPath); - if (string.IsNullOrEmpty(moveError)) - { - // AssetDatabase.Refresh(); // MoveAsset usually handles refresh - return Response.Success( - $"Asset moved/renamed from '{sourcePath}' to '{destPath}'.", - GetAssetData(destPath) - ); - } - else - { - return Response.Error( - $"Failed to move/rename asset from '{sourcePath}' to '{destPath}': {moveError}" - ); - } - } - catch (Exception e) - { - return Response.Error($"Error moving/renaming asset '{sourcePath}': {e.Message}"); - } - } - private static object SearchAssets(JObject @params) { string searchPattern = @params["searchPattern"]?.ToString(); @@ -1050,7 +877,7 @@ namespace UnityTcp.Editor.Tools /// /// Recursively ensures an Assets/ folder chain exists via AssetDatabase.CreateFolder. /// - private static void EnsureDirectoryExists(string directoryPath) + internal static void EnsureDirectoryExists(string directoryPath) { if (string.IsNullOrEmpty(directoryPath)) return; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageBake.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageBake.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageBake.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageBake.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageBake.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageBake.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageBake.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageBake.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageDialog.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageDialog.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageDialog.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageDialog.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageDialog.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageDialog.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageDialog.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageDialog.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs similarity index 94% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs index 4b182a0..6f0ebe5 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs @@ -498,68 +498,11 @@ namespace UnityTcp.Editor.Tools return Response.Error($"Error setting active tool: {e.Message}"); } } - /// - /// Returns the hierarchy path of a GameObject (e.g. "Root/Child/Grandchild"). - /// Kept consistent with SelectionChangedNotifier so the `path` field has identical - /// semantics in get_selection responses and selection_changed notifications. - /// - private static string GetGameObjectPath(UnityEngine.GameObject obj) - { - if (obj == null) return string.Empty; - - var path = obj.name; - var parent = obj.transform != null ? obj.transform.parent : null; - while (parent != null) - { - path = $"{parent.name}/{path}"; - parent = parent.parent; - } - return path; - } private static object GetSelection() { try { - string activeAssetPath = Selection.activeObject != null - ? AssetDatabase.GetAssetPath(Selection.activeObject) - : null; - string activeAsset = string.IsNullOrEmpty(activeAssetPath) - ? null - : Path.GetFullPath(activeAssetPath).Replace('\\', '/'); - - var selectionInfo = new - { - activeObject = Selection.activeObject?.name, - activeAsset = activeAsset, - activeGameObject = Selection.activeGameObject?.name, - activeTransform = Selection.activeTransform?.name, - activeInstanceID = InstanceIdExtensions.ActiveSelectionInstanceId(), -#if UNITY_2020_1_OR_NEWER - count = Selection.count, -#else - count = Selection.objects?.Length ?? 0, -#endif - objects = Selection - .objects.Select(obj => new - { - name = obj?.name, - type = obj?.GetType().FullName, - instanceID = obj?.GetStableInstanceId(), - }) - .ToList(), - gameObjects = Selection - .gameObjects.Select(go => new - { - name = go?.name, - path = GetGameObjectPath(go), - instanceID = go?.GetStableInstanceId(), - }) - .ToList(), - assetGUIDs = Selection.assetGUIDs, // GUIDs for selected assets in Project view - assetPaths = Selection.assetGUIDs?.Select(AssetDatabase.GUIDToAssetPath).ToArray(), - }; - - return Response.Success("Retrieved current selection details.", selectionInfo); + return Response.Success("Retrieved current selection details.", SelectionPayloadBuilder.Build()); } catch (Exception e) { diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs similarity index 96% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs index 1a556f8..e798563 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs @@ -7,7 +7,11 @@ using Codely.Newtonsoft.Json; // Added for JsonSerializationException using Codely.Newtonsoft.Json.Linq; using UnityEditor; using UnityEditor.Compilation; // For CompilationPipeline +#if UNITY_2021_2_OR_NEWER using UnityEditor.SceneManagement; +#else +using UnityEditor.Experimental.SceneManagement; +#endif using UnityEditorInternal; using UnityEngine; using UnityEngine.SceneManagement; @@ -51,8 +55,7 @@ namespace UnityTcp.Editor.Tools @params, ActionHandlers.Keys, out var action, - out var resolveError, - ActionAliases)) + out var resolveError)) { return resolveError; } @@ -154,7 +157,6 @@ namespace UnityTcp.Editor.Tools } else if ( action == "delete" - || action == "add_component" || action == "remove_component" || action == "get_components" ) // Added get_components here too @@ -169,15 +171,9 @@ namespace UnityTcp.Editor.Tools } // --- End Prefab Redirection Check --- - return ActionRouter.Route(@params, ActionHandlers, ActionAliases); + return ActionRouter.Route(@params, ActionHandlers); } - private static readonly Dictionary ActionAliases = - new Dictionary - { - { "set_component_properties", "set_component_property" }, - }; - private static readonly Dictionary> ActionHandlers = new Dictionary> { @@ -193,10 +189,8 @@ namespace UnityTcp.Editor.Tools { "find", p => FindGameObjects(p, p["target"], SearchMethodOf(p)) }, { "list_children", p => ListChildren(p, p["target"], SearchMethodOf(p)) }, { "get_components", GetComponentsAction }, - { "add_component", p => AddComponentToTarget(p, p["target"], SearchMethodOf(p)) }, { "remove_component", p => RemoveComponentFromTarget(p, p["target"], SearchMethodOf(p)) }, { "set_component_property", p => SetComponentPropertyOnTarget(p, p["target"], SearchMethodOf(p)) }, - { "select", p => SelectGameObject(p, p["target"], SearchMethodOf(p)) }, }; private static string SearchMethodOf(JObject p) @@ -558,21 +552,20 @@ namespace UnityTcp.Editor.Tools finalPrefabPath += ".prefab"; } + // Validate the prefab path stays within Assets/ before creating any files. + // ManageAsset.TrySanitizeAssetPath uses Path.GetFullPath to reject ".." escapes. + if (!ManageAsset.TrySanitizeAssetPath(finalPrefabPath, out string sanitizedPrefabPath, out var prefabPathError)) + return prefabPathError; + finalPrefabPath = sanitizedPrefabPath; + try { - // Ensure directory exists using the final saving path - string directoryPath = System.IO.Path.GetDirectoryName(finalPrefabPath); - if ( - !string.IsNullOrEmpty(directoryPath) - && !System.IO.Directory.Exists(directoryPath) - ) - { - System.IO.Directory.CreateDirectory(directoryPath); - AssetDatabase.Refresh(); // Refresh asset database to recognize the new folder - CodelyLogger.Log( - $"[ManageGameObject.Create] Created directory for prefab: {directoryPath}" - ); - } + // Ensure directory exists using AssetDatabase API so Unity registers + // the folder (creates .meta) without needing a manual Refresh(). + string assetDir = System.IO.Path.GetDirectoryName(finalPrefabPath)?.Replace('\\', '/'); + if (!string.IsNullOrEmpty(assetDir)) + ManageAsset.EnsureDirectoryExists(assetDir); + // Use SaveAsPrefabAssetAndConnect with the final saving path finalInstance = PrefabUtility.SaveAsPrefabAssetAndConnect( newGo, @@ -967,63 +960,6 @@ namespace UnityTcp.Editor.Tools } } - /// - /// Selects one or more GameObjects in the Unity Editor. - /// This sets Selection.activeGameObject (for single) or Selection.objects (for multiple). - /// - private static object SelectGameObject(JObject @params, JToken targetToken, string searchMethod) - { - if (targetToken == null) - { - // Clear selection if no target specified - Selection.activeGameObject = null; - Selection.objects = new UnityEngine.Object[0]; - return Response.Success("Selection cleared.", new { selectedCount = 0 }); - } - - bool selectAll = @params?["selectAll"]?.ToObject() ?? false; - List targets = FindObjectsInternal(targetToken, searchMethod, selectAll, @params); - - if (targets.Count == 0) - { - return Response.Error( - $"Target GameObject(s) ('{targetToken}') not found using method '{searchMethod ?? "default"}'." - ); - } - - if (targets.Count == 1) - { - // Single selection - Selection.activeGameObject = targets[0]; - return Response.Success( - $"Selected GameObject '{targets[0].name}'.", - new - { - selectedCount = 1, - selected = new[] - { - new { name = targets[0].name, instanceID = targets[0].GetStableInstanceId() } - } - } - ); - } - else - { - // Multiple selection - Selection.objects = targets.ToArray(); - Selection.activeGameObject = targets[0]; // First one becomes active - var selectedInfo = targets.Select(go => new { name = go.name, instanceID = go.GetStableInstanceId() }).ToList(); - return Response.Success( - $"Selected {targets.Count} GameObjects.", - new - { - selectedCount = targets.Count, - selected = selectedInfo - } - ); - } - } - private static object FindGameObjects( JObject @params, JToken targetToken, @@ -1689,63 +1625,6 @@ namespace UnityTcp.Editor.Tools } } - private static object AddComponentToTarget( - JObject @params, - JToken targetToken, - string searchMethod - ) - { - GameObject targetGo = FindObjectInternal(targetToken, searchMethod); - if (targetGo == null) - { - return Response.Error( - $"Target GameObject ('{targetToken}') not found using method '{searchMethod ?? "default"}'." - ); - } - - string typeName = null; - JObject properties = null; - - // Allow adding component specified directly or via componentsToAdd array (take first) - if (@params["componentName"] != null) - { - typeName = @params["componentName"]?.ToString(); - properties = @params["componentProperties"]?[typeName] as JObject; // Check if props are nested under name - } - else if ( - @params["componentsToAdd"] is JArray componentsToAddArray - && componentsToAddArray.Count > 0 - ) - { - var compToken = componentsToAddArray.First; - if (compToken.Type == JTokenType.String) - typeName = compToken.ToString(); - else if (compToken is JObject compObj) - { - typeName = compObj["typeName"]?.ToString(); - properties = compObj["properties"] as JObject; - } - } - - if (string.IsNullOrEmpty(typeName)) - { - return Response.Error( - "Component type name ('componentName' or first element in 'componentsToAdd') is required." - ); - } - - var addResult = AddComponentInternal(targetGo, typeName, properties); - if (addResult != null) - return addResult; // Return error - - EditorUtility.SetDirty(targetGo); - // Use the new serializer helper - return Response.Success( - $"Component '{typeName}' added to '{targetGo.name}'.", - Helpers.GameObjectSerializer.GetGameObjectData(targetGo) - ); // Return updated GO data - } - private static object RemoveComponentFromTarget( JObject @params, JToken targetToken, @@ -2009,15 +1888,12 @@ namespace UnityTcp.Editor.Tools } break; case "by_path": - // Path is relative to scene root or rootSearchObject - Transform foundTransform = rootSearchObject - ? rootSearchObject.transform.Find(searchTerm) - : GameObject.Find(searchTerm)?.transform; - if ( - foundTransform != null - && (searchInactive || foundTransform.gameObject.activeInHierarchy) - ) - results.Add(foundTransform.gameObject); + GameObject foundByPath = FindByHierarchyPath( + searchTerm, + rootSearchObject, + searchInactive); + if (foundByPath != null) + results.Add(foundByPath); break; case "by_tag": var searchPoolTag = rootSearchObject @@ -2149,8 +2025,8 @@ namespace UnityTcp.Editor.Tools break; } } - GameObject objByPath = GameObject.Find(searchTerm); - if (objByPath != null && (searchInactive || objByPath.activeInHierarchy)) + GameObject objByPath = FindByHierarchyPath(searchTerm, null, searchInactive); + if (objByPath != null) { results.Add(objByPath); break; @@ -2185,20 +2061,132 @@ namespace UnityTcp.Editor.Tools return results.Distinct().ToList(); // Ensure uniqueness } - // Helper to get all scene objects efficiently + // Helper to get all scene objects, including Prefab Stage preview objects. private static IEnumerable GetAllSceneObjects(bool includeInactive) { - // SceneManager.GetActiveScene().GetRootGameObjects() is faster than FindObjectsOfType() - var rootObjects = SceneManager.GetActiveScene().GetRootGameObjects(); var allObjects = new List(); + CollectSceneObjects(SceneManager.GetActiveScene(), includeInactive, allObjects); + var stage = PrefabStageUtility.GetCurrentPrefabStage(); + if (stage != null && stage.scene.IsValid() + && stage.scene != SceneManager.GetActiveScene()) + { + CollectSceneObjects(stage.scene, includeInactive, allObjects); + } + return allObjects; + } + + private static void CollectSceneObjects( + Scene scene, + bool includeInactive, + List allObjects) + { + if (!scene.IsValid()) return; + var rootObjects = scene.GetRootGameObjects(); foreach (var root in rootObjects) { + if (root == null) continue; allObjects.AddRange( root.GetComponentsInChildren(includeInactive) .Select(t => t.gameObject) ); } - return allObjects; + } + + private static IEnumerable GetSearchRoots() + { + var roots = new List(); + if (SceneManager.GetActiveScene().IsValid()) + roots.AddRange(SceneManager.GetActiveScene().GetRootGameObjects()); + var stage = PrefabStageUtility.GetCurrentPrefabStage(); + if (stage != null && stage.scene.IsValid() + && stage.scene != SceneManager.GetActiveScene()) + { + roots.AddRange(stage.scene.GetRootGameObjects()); + } + return roots.Where(go => go != null); + } + + /// + /// Resolves a hierarchy path that may contain same-name ordinals + /// (e.g. Root/Cube[1]/Child). Does not use GameObject.Find, so inactive + /// objects and Prefab Stage contents are included. + /// + private static GameObject FindByHierarchyPath( + string path, + GameObject rootSearchObject, + bool searchInactive) + { + if (string.IsNullOrEmpty(path)) return null; + var segments = path.Replace('\\', '/').Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + if (segments.Length == 0) return null; + + IEnumerable start; + if (rootSearchObject != null) + { + start = new[] { rootSearchObject.transform }; + } + else + { + start = GetSearchRoots().Select(go => go.transform); + } + + IEnumerable current = start; + for (int s = 0; s < segments.Length; s++) + { + string segment = segments[s]; + string name; + int ordinal; + if (!InstanceIdExtensions.TryParseHierarchySegment(segment, out name, out ordinal)) + return null; + + bool firstSegmentFromRoots = s == 0 && rootSearchObject == null; + var matches = new List(); + if (firstSegmentFromRoots) + { + foreach (var root in current) + { + if (root != null && root.name == name) + matches.Add(root); + } + } + else + { + foreach (var parent in current) + { + if (parent == null) continue; + for (int i = 0; i < parent.childCount; i++) + { + var child = parent.GetChild(i); + if (child.name == name) + matches.Add(child); + } + } + } + + Transform picked = null; + if (ordinal >= 0) + { + if (ordinal < matches.Count) + picked = matches[ordinal]; + } + else if (matches.Count == 1) + { + picked = matches[0]; + } + else if (matches.Count > 1) + { + // No suffix: generated paths only omit [N] when the name is unique. + // Fall back to the first match for older paths. + picked = matches[0]; + } + + if (picked == null) return null; + if (!searchInactive && !picked.gameObject.activeInHierarchy) return null; + current = new[] { picked }; + } + + var found = current.FirstOrDefault(); + return found != null ? found.gameObject : null; } /// @@ -3620,6 +3608,9 @@ namespace UnityTcp.Editor.Tools spriteRenderer.sprite = sprite; EditorUtility.SetDirty(prefab); + // SavePrefabAsset persists in-place prefab changes atomically, + // matching the pattern used in ManageAsset.ModifyAsset (L456-458). + PrefabUtility.SavePrefabAsset(prefab); AssetDatabase.SaveAssets(); return new @@ -3672,7 +3663,6 @@ namespace UnityTcp.Editor.Tools "create", "modify", "delete", - "add_component", "remove_component", "set_component_property", }; @@ -3684,7 +3674,6 @@ namespace UnityTcp.Editor.Tools string opId = op["id"]?.ToString() ?? "unknown"; var opAction = op["action"]?.ToString()?.ToLower(); if (string.IsNullOrEmpty(opAction)) continue; - if (opAction == "set_component_properties") opAction = "set_component_property"; if (!writeOps.Contains(opAction)) { return Response.Error( @@ -3704,7 +3693,6 @@ namespace UnityTcp.Editor.Tools string opId = op["id"]?.ToString() ?? "unknown"; string opAction = op["action"]?.ToString()?.ToLower(); if (string.IsNullOrEmpty(opAction)) continue; - if (opAction == "set_component_properties") opAction = "set_component_property"; // Only validate deterministic targeting for write ops that can take target/parent. if (!writeOps.Contains(opAction)) continue; @@ -3959,7 +3947,6 @@ namespace UnityTcp.Editor.Tools "create", "modify", "delete", - "add_component", "remove_component", "set_component_property", }; @@ -4007,8 +3994,6 @@ namespace UnityTcp.Editor.Tools continue; } - if (opAction == "set_component_properties") opAction = "set_component_property"; - if (opAction == "batch" || opAction == "create_batch" || opAction == "edit_batch") { return Response.Error($"Op '{opId}' invalid: nested batch is not allowed"); diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameView.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameView.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameView.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameView.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameView.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameView.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameView.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameView.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageInput.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageInput.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageInput.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageInput.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageInput.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageInput.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageInput.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageInput.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageJob.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageJob.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageJob.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageJob.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageJob.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageJob.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageJob.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageJob.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManagePackage.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManagePackage.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManagePackage.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManagePackage.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManagePackage.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManagePackage.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManagePackage.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManagePackage.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs similarity index 75% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs index 3316f78..a667fb2 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs @@ -125,6 +125,18 @@ namespace UnityTcp.Editor.Tools relativeDir = "Scenes"; // Default relative directory } + // Guard against path traversal (e.g. "Assets/../../../etc") by reusing + // ManageAsset.TrySanitizeAssetPath which calls Path.GetFullPath and verifies + // the canonical path stays under Application.dataPath. + if (!string.IsNullOrEmpty(relativeDir)) + { + if (!ManageAsset.TrySanitizeAssetPath( + "Assets/" + relativeDir.TrimStart('/'), + out _, + out string dirErr)) + return Response.Error(dirErr); + } + if (!ActionRouter.TryResolve( new JObject { ["action"] = action }, ValidActions, @@ -151,17 +163,18 @@ namespace UnityTcp.Editor.Tools ? null : Path.Combine("Assets", relativeDir, sceneFileName).Replace('\\', '/'); - // Ensure directory exists for 'create' - if (action == "create" && !string.IsNullOrEmpty(fullPathDir)) + // Ensure directory exists for 'create' using AssetDatabase API so the + // folder gets a .meta file and Unity registers it immediately. + if (action == "create" && !string.IsNullOrEmpty(relativeDir)) { try { - Directory.CreateDirectory(fullPathDir); + ManageAsset.EnsureDirectoryExists("Assets/" + relativeDir.TrimStart('/')); } catch (Exception e) { return Response.Error( - $"Could not create directory '{fullPathDir}': {e.Message}" + $"Could not create directory 'Assets/{relativeDir}': {e.Message}" ); } } @@ -174,32 +187,16 @@ namespace UnityTcp.Editor.Tools private static readonly string[] ValidActions = { - "ensure_scene_open", - "ensure_scene_saved", "create", "load", "save", "get_hierarchy", - "get_active", - "get_build_settings", }; private static Dictionary> BuildActionHandlers( string path, string name, string relativePath, string fullPath, int? buildIndex) => new Dictionary> { - { "ensure_scene_open", _ => - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' parameter is required for 'ensure_scene_open' action."); - string ensureScenePath = path.Replace('\\', '/'); - if (!ensureScenePath.StartsWith("Assets/", StringComparison.OrdinalIgnoreCase)) - ensureScenePath = "Assets/" + ensureScenePath.TrimStart('/'); - if (!HasAllowedSceneExtension(ensureScenePath)) - return Response.Error("'path' must end with '.unity' or '.scene' for scene files."); - return EnsureSceneOpen(ensureScenePath); - } }, - { "ensure_scene_saved", _ => EnsureSceneSaved() }, { "create", _ => { if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(relativePath)) @@ -226,14 +223,6 @@ namespace UnityTcp.Editor.Tools try { CodelyLogger.Verbose("[ManageScene] get_hierarchy: exiting"); } catch { } return gh; } }, - { "get_active", _ => - { - try { CodelyLogger.Verbose("[ManageScene] get_active: entering"); } catch { } - var ga = GetActiveSceneInfo(); - try { CodelyLogger.Verbose("[ManageScene] get_active: exiting"); } catch { } - return ga; - } }, - { "get_build_settings", _ => GetBuildSettingsScenes() }, }; private static object CreateScene(string fullPath, string relativePath) @@ -291,8 +280,21 @@ namespace UnityTcp.Editor.Tools return Response.Error($"Scene file not found at '{relativePath}'."); } + Scene activeScene = EditorSceneManager.GetActiveScene(); + if (activeScene.path.Equals(relativePath, StringComparison.OrdinalIgnoreCase)) + { + return Response.Success( + "Scene already active.", + new + { + path = relativePath, + name = Path.GetFileNameWithoutExtension(relativePath), + } + ); + } + // Check for unsaved changes in the current scene - if (EditorSceneManager.GetActiveScene().isDirty) + if (activeScene.isDirty) { // Optionally prompt the user or save automatically before loading return Response.Error( @@ -329,8 +331,23 @@ namespace UnityTcp.Editor.Tools ); } + string scenePath = SceneUtility.GetScenePathByBuildIndex(buildIndex); + Scene activeScene = EditorSceneManager.GetActiveScene(); + if (activeScene.path.Equals(scenePath, StringComparison.OrdinalIgnoreCase)) + { + return Response.Success( + $"Scene at build index {buildIndex} is already active.", + new + { + path = scenePath, + name = Path.GetFileNameWithoutExtension(scenePath), + buildIndex = buildIndex, + } + ); + } + // Check for unsaved changes - if (EditorSceneManager.GetActiveScene().isDirty) + if (activeScene.isDirty) { return Response.Error( "Current scene has unsaved changes. Please save or discard changes before loading a new scene." @@ -339,7 +356,6 @@ namespace UnityTcp.Editor.Tools try { - string scenePath = SceneUtility.GetScenePathByBuildIndex(buildIndex); EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single); return Response.Success( $"Scene at build index {buildIndex} ('{scenePath}') loaded successfully.", @@ -375,10 +391,10 @@ namespace UnityTcp.Editor.Tools if (!string.IsNullOrEmpty(relativePath) && currentScene.path != relativePath) { // Save As... - // Ensure directory exists - string dir = Path.GetDirectoryName(fullPath); - if (!Directory.Exists(dir)) - Directory.CreateDirectory(dir); + // Ensure directory exists using AssetDatabase API (gets .meta, no traversal risk). + string assetDir = Path.GetDirectoryName(relativePath)?.Replace('\\', '/'); + if (!string.IsNullOrEmpty(assetDir)) + ManageAsset.EnsureDirectoryExists(assetDir); saved = EditorSceneManager.SaveScene(currentScene, relativePath); finalPath = relativePath; @@ -393,6 +409,13 @@ namespace UnityTcp.Editor.Tools "Cannot save an untitled scene without providing a 'name' and 'path'. Use Save As functionality." ); } + if (!currentScene.isDirty) + { + return Response.Success( + $"Scene '{currentScene.name}' already saved.", + new { path = currentScene.path, name = currentScene.name } + ); + } saved = EditorSceneManager.SaveScene(currentScene); } @@ -415,63 +438,6 @@ namespace UnityTcp.Editor.Tools } } - private static object GetActiveSceneInfo() - { - try - { - try { CodelyLogger.Verbose("[ManageScene] get_active: querying EditorSceneManager.GetActiveScene"); } catch { } - Scene activeScene = EditorSceneManager.GetActiveScene(); - try { CodelyLogger.Verbose($"[ManageScene] get_active: got scene valid={activeScene.IsValid()} loaded={activeScene.isLoaded} name='{activeScene.name}'"); } catch { } - if (!activeScene.IsValid()) - { - return Response.Error("No active scene found."); - } - - var sceneInfo = new - { - name = activeScene.name, - path = activeScene.path, - buildIndex = activeScene.buildIndex, // -1 if not in build settings - isDirty = activeScene.isDirty, - isLoaded = activeScene.isLoaded, - rootCount = activeScene.rootCount, - }; - - return Response.Success("Retrieved active scene information.", sceneInfo); - } - catch (Exception e) - { - try { CodelyLogger.LogError($"[ManageScene] get_active: exception {e.Message}"); } catch { } - return Response.Error($"Error getting active scene info: {e.Message}"); - } - } - - private static object GetBuildSettingsScenes() - { - try - { - var scenes = new List(); - for (int i = 0; i < EditorBuildSettings.scenes.Length; i++) - { - var scene = EditorBuildSettings.scenes[i]; - scenes.Add( - new - { - path = scene.path, - guid = scene.guid.ToString(), - enabled = scene.enabled, - buildIndex = i, // Actual build index considering only enabled scenes might differ - } - ); - } - return Response.Success("Retrieved scenes from Build Settings.", scenes); - } - catch (Exception e) - { - return Response.Error($"Error getting scenes from Build Settings: {e.Message}"); - } - } - private static object GetSceneHierarchy() { try @@ -551,98 +517,6 @@ namespace UnityTcp.Editor.Tools } } - // --- Ensure Methods (Idempotent Operations) --- - - /// - /// Ensures a scene is open. Idempotent. - /// - private static object EnsureSceneOpen(string scenePath) - { - try - { - var writeCheck = WriteGuard.CheckWriteAllowed($"ensure_scene_open({scenePath})"); - if (writeCheck != null) return writeCheck; - - if (!File.Exists(scenePath)) - return Response.Error($"Scene file not found: {scenePath}"); - - Scene activeScene = SceneManager.GetActiveScene(); - if (activeScene.path.Equals(scenePath, StringComparison.OrdinalIgnoreCase)) - { - return new - { - success = true, - message = $"Scene is already active.", - data = new { scenePath = activeScene.path, dirty = activeScene.isDirty } - }; - } - - Scene loadedScene = EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single); - if (!loadedScene.IsValid()) - return Response.Error($"Failed to open scene: {scenePath}"); - - return new - { - success = true, - message = $"Scene opened.", - data = new { scenePath = loadedScene.path, dirty = loadedScene.isDirty } - }; - } - catch (Exception e) - { - return Response.Error($"Failed to ensure scene open: {e.Message}"); - } - } - - /// - /// Ensures the active scene is saved. Idempotent. - /// - private static object EnsureSceneSaved() - { - try - { - Scene activeScene = SceneManager.GetActiveScene(); - if (!activeScene.IsValid()) - return Response.Error("No active scene."); - - if (!activeScene.isDirty) - { - return new - { - success = true, - message = "Scene already saved.", - data = new { scenePath = activeScene.path, dirty = false } - }; - } - - // An untitled scene has no path; SaveScene would open a native - // "Save Scene" file dialog that blocks the editor thread and hangs - // automated/yolo mode. Fail fast instead of triggering the dialog. - if (string.IsNullOrEmpty(activeScene.path)) - return Response.Error( - "Cannot ensure-save an untitled scene (no path). Use the 'save' action with a 'name' and 'path' first." - ); - - var writeCheck = WriteGuard.CheckWriteAllowed($"ensure_scene_saved"); - if (writeCheck != null) return writeCheck; - - bool saved = EditorSceneManager.SaveScene(activeScene); - if (!saved) - return Response.Error($"Failed to save scene."); - - return new - { - success = true, - message = "Scene saved.", - data = new { scenePath = activeScene.path, dirty = false } - }; - } - catch (Exception e) - { - return Response.Error($"Failed to ensure scene saved: {e.Message}"); - } - } - /// /// Counts total GameObjects in a hierarchy. Uses an iterative traversal to avoid stack overflows on deep hierarchies. /// diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs index b5afd28..4c3d4e4 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs @@ -59,7 +59,7 @@ namespace UnityTcp.Editor.Tools /// startDelay (float, 0-5) – Seconds to wait before capture starts /// (default 0). /// start_game_view_recording: - /// durationSeconds (float, 1-15) – Recording duration in real-time seconds (default 4). + /// durationSeconds (float, 1-8) – Recording duration in real-time seconds (default 5). /// fps (int, 5-30) – Capture frame rate: how many frames per second are /// grabbed from the Game View (default 15). Higher values /// capture more visual detail. @@ -372,6 +372,14 @@ namespace UnityTcp.Editor.Tools p, Mp4RecordingOwner.Split, out handle, out error); } + internal static float ResolveMp4DurationSeconds(JObject p) + { + return Mathf.Clamp( + AsFloat(p?["durationSeconds"] ?? p?["duration_seconds"]) ?? 5f, + 1f, + 8f); + } + private static bool TryBeginOwnedGameViewMp4Recording( JObject p, Mp4RecordingOwner owner, out Mp4RecordingHandle handle, out object error) { @@ -399,8 +407,7 @@ namespace UnityTcp.Editor.Tools return false; } - float duration = Mathf.Clamp( - AsFloat(p?["durationSeconds"] ?? p?["duration_seconds"]) ?? 4f, 1f, 15f); + float duration = ResolveMp4DurationSeconds(p); int fps = Mathf.Clamp(AsInt(p?["fps"]) ?? 15, 5, 30); int encodeFps = Mathf.Clamp(AsInt(p?["encodeFps"] ?? p?["encode_fps"]) ?? fps, 1, 30); float startDelay = Mathf.Clamp( @@ -1959,6 +1966,8 @@ namespace UnityTcp.Editor.Tools [InitializeOnLoadMethod] private static void ScheduleStaleCaptureWindowCleanup() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + AssemblyReloadEvents.beforeAssemblyReload -= CleanupRecordingBeforeDomainExit; AssemblyReloadEvents.beforeAssemblyReload += CleanupRecordingBeforeDomainExit; EditorApplication.quitting -= CleanupRecordingBeforeDomainExit; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageShader.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageShader.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageShader.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageShader.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageShader.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageShader.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageShader.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageShader.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageWindowBridge.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageWindowBridge.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageWindowBridge.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageWindowBridge.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageWindowBridge.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageWindowBridge.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageWindowBridge.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageWindowBridge.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/PlatformMp4Encoder.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/PlatformMp4Encoder.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/PlatformMp4Encoder.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/PlatformMp4Encoder.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/ReplGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/ReplGuard.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/ReplGuard.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/ReplGuard.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs similarity index 78% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs index 04a9656..72db070 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs @@ -26,6 +26,7 @@ namespace UnityTcp.Editor.Tools private static MethodInfo _endGettingEntriesMethod; // Renamed from _stopGettingEntriesMethod, trying End... private static MethodInfo _clearMethod; private static MethodInfo _getCountMethod; + private static MethodInfo _getEntryCountMethod; private static MethodInfo _getEntryMethod; private static PropertyInfo _consoleFlagsProperty; private static MethodInfo _setConsoleFlagMethod; @@ -86,6 +87,14 @@ namespace UnityTcp.Editor.Tools if (_getCountMethod == null) throw new Exception("Failed to reflect LogEntries.GetCount"); + _getEntryCountMethod = logEntriesType.GetMethod( + "GetEntryCount", + staticFlags, + null, + new[] { typeof(int) }, + null + ); + _getEntryMethod = logEntriesType.GetMethod("GetEntryInternal", staticFlags); if (_getEntryMethod == null) throw new Exception("Failed to reflect LogEntries.GetEntryInternal"); @@ -155,6 +164,7 @@ namespace UnityTcp.Editor.Tools _getCountMethod = _getEntryMethod = null; + _getEntryCountMethod = null; _consoleFlagsProperty = null; _setConsoleFlagMethod = null; _setFilteringTextMethod = null; @@ -184,9 +194,13 @@ namespace UnityTcp.Editor.Tools CodelyLogger.LogError( "[ReadConsole] HandleCommand called but reflection members are not initialized. Static constructor might have failed silently or there's an issue." ); - return Response.Error( + string requestedAction = (@params?["action"]?.ToString() ?? "get").ToLowerInvariant(); + object initializationError = Response.Error( "ReadConsole handler failed to initialize due to reflection errors. Cannot access console logs." ); + return requestedAction == "get" || requestedAction == "set_collapse" + ? AddCollapseStatus(initializationError, ReadCollapseState()) + : initializationError; } return ActionRouter.Route(@params, ActionHandlers, defaultAction: "get"); @@ -197,6 +211,7 @@ namespace UnityTcp.Editor.Tools { { "clear", ClearAction }, { "get", GetAction }, + { "set_collapse", SetCollapseAction }, }; private static object ClearAction(JObject @params) @@ -207,36 +222,90 @@ namespace UnityTcp.Editor.Tools private static object GetAction(JObject @params) { - var types = - (@params["types"] as JArray)?.Select(t => t.ToString().ToLower()).ToList() - ?? new List { "error", "warning", "log" }; - int? count = @params["count"]?.ToObject(); - string filterText = @params["filterText"]?.ToString(); - string sinceTimestampStr = @params["sinceTimestamp"]?.ToString(); - string format = (@params["format"]?.ToString() ?? "detailed").ToLower(); - bool includeStacktrace = - @params["includeStacktrace"]?.ToObject() ?? true; - - if (types.Contains("all")) + try { - types = new List { "error", "warning", "log" }; + var types = + (@params["types"] as JArray)?.Select(t => t.ToString().ToLower()).ToList() + ?? new List { "error", "warning", "log" }; + int? count = @params["count"]?.ToObject(); + string filterText = @params["filterText"]?.ToString(); + string sinceTimestampStr = @params["sinceTimestamp"]?.ToString(); + string format = (@params["format"]?.ToString() ?? "detailed").ToLower(); + bool includeStacktrace = + @params["includeStacktrace"]?.ToObject() ?? true; + + if (types.Contains("all")) + { + types = new List { "error", "warning", "log" }; + } + + if (!string.IsNullOrEmpty(sinceTimestampStr)) + { + CodelyLogger.LogWarning( + "[ReadConsole] Filtering by 'since_timestamp' is not currently implemented." + ); + } + + bool? effectiveCollapse = ReadCollapseState(); + if (!effectiveCollapse.HasValue) + { + return AddCollapseStatus( + Response.Error( + "Console collapse state is unavailable because UnityEditor.LogEntries.consoleFlags could not be reflected." + ), + null + ); + } + + object response = GetConsoleEntries( + types, + count, + filterText, + format, + includeStacktrace, + effectiveCollapse.Value + ); + return AddCollapseStatus(response, effectiveCollapse.Value); } - - if (!string.IsNullOrEmpty(sinceTimestampStr)) + catch (Exception e) { - CodelyLogger.LogWarning( - "[ReadConsole] Filtering by 'since_timestamp' is not currently implemented." + return AddCollapseStatus(Response.Error(e.Message), ReadCollapseState()); + } + } + + private static object SetCollapseAction(JObject @params) + { + bool? current = ReadCollapseState(); + JToken token = @params["collapse"]; + if (token == null || token.Type != JTokenType.Boolean) + { + return AddCollapseStatus( + Response.Error("collapse must be true or false for set_collapse action"), + current ); } - return GetConsoleEntries(types, count, filterText, format, includeStacktrace); + try + { + bool effective = SetCollapseState(token.ToObject()); + return AddCollapseStatus( + Response.Success(effective ? "Console collapse enabled." : "Console collapse disabled."), + effective + ); + } + catch (Exception e) + { + return AddCollapseStatus(Response.Error(e.Message), ReadCollapseState()); + } } /// - /// Reads the complete post-compile console for start_compilation_pipeline and - /// normalizes the public command response into a stable nested payload. Keeping this - /// adapter here ensures the standalone console tool and the compilation pipeline use the - /// exact same filtering, formatting, truncation and full-log-file behavior. + /// Reads the effective post-compile Console view for + /// start_compilation_pipeline. The result intentionally respects the + /// persistent Unity Console Collapse state: collapsed entries represent groups + /// and include occurrence counts. Keeping this adapter here ensures the + /// standalone Console tool and compilation pipeline use the same filtering, + /// formatting, truncation, Collapse, and full-log-file behavior. /// internal static JObject ReadForCompilationPipeline() { @@ -278,6 +347,7 @@ namespace UnityTcp.Editor.Tools CopyIfPresent(response, result, "totalCount"); CopyIfPresent(response, result, "returnedCount"); CopyIfPresent(response, result, "fullLogFile"); + CopyIfPresent(response, result, "collapse"); if (!readSuccess) { @@ -374,10 +444,19 @@ namespace UnityTcp.Editor.Tools int? count, string filterText, string format, - bool includeStacktrace + bool includeStacktrace, + bool effectiveCollapse ) { - return GetConsoleEntriesFromIndex(0, types, count, filterText, format, includeStacktrace); + return GetConsoleEntriesFromIndex( + 0, + types, + count, + filterText, + format, + includeStacktrace, + effectiveCollapse + ); } /// @@ -389,9 +468,17 @@ namespace UnityTcp.Editor.Tools int? count, string filterText, string format, - bool includeStacktrace + bool includeStacktrace, + bool effectiveCollapse ) { + if (effectiveCollapse && _getEntryCountMethod == null) + { + return Response.Error( + "Console collapse counts are unavailable because UnityEditor.LogEntries.GetEntryCount could not be reflected." + ); + } + List formattedEntries = new List(); SafeEndGettingEntries(); @@ -457,24 +544,39 @@ namespace UnityTcp.Editor.Tools // line before the stack start, not only the first line. SplitMessageAndStack(message, out string messageOnly, out string embeddedStack); string stackTrace = includeStacktrace ? embeddedStack : null; + int occurrenceCount = effectiveCollapse + ? (int)_getEntryCountMethod.Invoke(null, new object[] { i }) + : 1; object formattedEntry; switch (format) { case "plain": - formattedEntry = messageOnly; + formattedEntry = effectiveCollapse + ? $"[x{occurrenceCount}] {messageOnly}" + : messageOnly; break; case "json": case "detailed": default: - formattedEntry = new - { - type = unityType.ToString(), - message = messageOnly, - file = file, - line = line, - stackTrace = stackTrace, - }; + formattedEntry = effectiveCollapse + ? (object)new + { + type = unityType.ToString(), + message = messageOnly, + file = file, + line = line, + stackTrace = stackTrace, + count = occurrenceCount, + } + : new + { + type = unityType.ToString(), + message = messageOnly, + file = file, + line = line, + stackTrace = stackTrace, + }; break; } @@ -507,7 +609,9 @@ namespace UnityTcp.Editor.Tools return new { success = true, - message = $"Console has {totalCount} entries, showing first {returnLimit}. Full log saved to temp file.", + message = effectiveCollapse + ? $"Console has {totalCount} collapsed log groups, showing first {returnLimit}. Full log saved to temp file." + : $"Console has {totalCount} entries, showing first {returnLimit}. Full log saved to temp file.", data = truncatedEntries, truncated = true, totalCount = totalCount, @@ -518,10 +622,10 @@ namespace UnityTcp.Editor.Tools } var finalEntries = count.HasValue ? formattedEntries.Take(count.Value).ToList() : formattedEntries; - return Response.Success( - $"Retrieved {finalEntries.Count} log entries.", - finalEntries - ); + string successMessage = effectiveCollapse + ? $"Retrieved collapsed log groups: {finalEntries.Count}." + : $"Retrieved {finalEntries.Count} log entries."; + return Response.Success(successMessage, finalEntries); } private sealed class ConsoleUiBypassRestore : IDisposable @@ -557,26 +661,70 @@ namespace UnityTcp.Editor.Tools private static int ReadConsoleFlags() { if (_consoleFlagsProperty == null) return 0; - try { return (int)_consoleFlagsProperty.GetValue(null, null); } - catch { return 0; } + return (int)_consoleFlagsProperty.GetValue(null, null); + } + + private static bool? ReadCollapseState() + { + if (_consoleFlagsProperty == null) return null; + try + { + return (ReadConsoleFlags() & ConsoleFlagCollapse) != 0; + } + catch + { + return null; + } + } + + private static bool SetCollapseState(bool collapse) + { + if (_setConsoleFlagMethod == null || _consoleFlagsProperty == null) + throw new InvalidOperationException( + "Console collapse is unavailable because the required UnityEditor.LogEntries APIs could not be reflected." + ); + + SafeEndGettingEntries(); + _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagCollapse, collapse }); + bool? effective = ReadCollapseState(); + if (!effective.HasValue) + throw new InvalidOperationException("Failed to read Console collapse state after setting it."); + return effective.Value; + } + + private static JObject AddCollapseStatus(object response, bool? collapse) + { + JObject result = response as JObject ?? JObject.FromObject(response); + result["collapse"] = collapse.HasValue + ? JToken.FromObject(collapse.Value) + : JValue.CreateNull(); + return result; } private static ConsoleUiBypassRestore BeginConsoleUiBypass() { int savedFlags = ReadConsoleFlags(); string savedFilter = _getFilteringTextMethod?.Invoke(null, null) as string; + var restore = new ConsoleUiBypassRestore(savedFlags, savedFilter); if (_setConsoleFlagMethod == null) - return new ConsoleUiBypassRestore(savedFlags, savedFilter); + return restore; - SafeEndGettingEntries(); - _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagCollapse, false }); - _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelLog, true }); - _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelWarning, true }); - _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelError, true }); - if (_setFilteringTextMethod != null) - _setFilteringTextMethod.Invoke(null, new object[] { string.Empty }); + try + { + SafeEndGettingEntries(); + _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelLog, true }); + _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelWarning, true }); + _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelError, true }); + if (_setFilteringTextMethod != null) + _setFilteringTextMethod.Invoke(null, new object[] { string.Empty }); - return new ConsoleUiBypassRestore(savedFlags, savedFilter); + return restore; + } + catch + { + restore.Dispose(); + throw; + } } private static void SafeEndGettingEntries() diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs similarity index 98% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs index bdd755e..a60c926 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs @@ -29,6 +29,8 @@ namespace UnityTcp.Editor.Tools static TmpEssentialsAutoImporter() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + // Only re-arm across the post-install domain reload if a tool install // requested it. No-op for every other editor load. if (SessionState.GetBool(PendingKey, false)) diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/VirtualInputDevices.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/VirtualInputDevices.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/VirtualInputDevices.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/VirtualInputDevices.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/VirtualInputDevices.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/VirtualInputDevices.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/VirtualInputDevices.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/VirtualInputDevices.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalAssetListening.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalAssetListening.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalAssetListening.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalAssetListening.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalAssetListening.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalAssetListening.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalAssetListening.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalAssetListening.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcp.Editor.asmdef b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcp.Editor.asmdef similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcp.Editor.asmdef rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcp.Editor.asmdef diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcp.Editor.asmdef.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcp.Editor.asmdef.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcp.Editor.asmdef.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcp.Editor.asmdef.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs index fa5f941..ded0015 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs @@ -33,6 +33,7 @@ namespace UnityTcp.Editor // SessionState (not EditorPrefs): a manual stop must survive domain reloads but be // forgotten when the editor process exits, so a relaunch starts the bridge again. private const string ManualStopKey = "UnityTcp.ManualStop"; + private const string ResumeAfterReloadKey = "UnityTcp.ResumeAfterReload"; public static event Action OnClientPlatformsChanged; // Heartbeat file writing lives entirely in native (configured via // NativeUnityTcpBridgeHost.StartOrAttach); this just gates how often @@ -85,7 +86,10 @@ namespace UnityTcp.Editor // Register the FindObjectByInstruction delegate for UnityEngineObjectConverter UnityTcp.Editor.Serialization.UnityEngineObjectConverter.FindObjectByInstruction = ManageGameObject.FindObjectByInstruction; - if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) + // Auto-start eligibility does not revoke an already-running bridge's + // reload lifecycle (including explicit starts in secondary Editors). + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart() + && !SessionState.GetBool(ResumeAfterReloadKey, false)) { return; } @@ -185,6 +189,8 @@ namespace UnityTcp.Editor // command on the worker thread could otherwise be the store's first toucher // and silently lose everything persisted across the last reload. DetachedJobs.EnsureLoaded(); + // Restore and reconcile jobs before the worker can serve manage_job. + StepJobRunner.EnsureInitialized(); // A modal dialog may block afterAssemblyReload. // Initialize DialogWatcher on Unity's main thread before starting the command worker; @@ -219,6 +225,7 @@ namespace UnityTcp.Editor // modal-dialog escape path are ready, even if afterAssemblyReload is blocked. CodelyLogger.Log("ResumeManagedCommandProcessing"); NativeUnityTcpBridgeHost.ResumeManagedCommandProcessing(); + SessionState.EraseBool(ResumeAfterReloadKey); CodelyLogger.Log($"Codely-Bridge: Native Codely Bridge running on port {currentUnityPort}. (OS={Application.platform}, server={serverVer})"); } @@ -235,6 +242,7 @@ namespace UnityTcp.Editor // generic "stopped". public static void Stop(bool isManualStop = false, string reason = null) { + SessionState.EraseBool(ResumeAfterReloadKey); if (isManualStop) SessionState.SetBool(ManualStopKey, true); if (!isRunning) return; @@ -632,6 +640,9 @@ namespace UnityTcp.Editor // Heartbeat/status helpers private static void OnBeforeAssemblyReload() { + if (isRunning) + SessionState.SetBool(ResumeAfterReloadKey, true); + // Best-effort: a REPL session is about to be silently wiped by this reload (its static // fields don't survive), so tell clients before that happens. Native send is async and // reload timing can cut it off, so this is a courtesy, not the only way a client learns diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/README_Windows.md b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/README_Windows.md similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/README_Windows.md rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/README_Windows.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/README_Windows.md.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/README_Windows.md.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/README_Windows.md.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/README_Windows.md.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/TcpBridgeControlWindow.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/TcpBridgeControlWindow.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/TcpBridgeControlWindow.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/TcpBridgeControlWindow.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/FiraMono-Regular.ttf b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/FiraMono-Regular.ttf similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/FiraMono-Regular.ttf rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/FiraMono-Regular.ttf diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/Inter.ttc.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/Inter.ttc.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/Inter.ttc.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/Inter.ttc.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/NotoSans-Regular.ttf b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/NotoSans-Regular.ttf similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/NotoSans-Regular.ttf rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/NotoSans-Regular.ttf diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/Codely.Common.asmdef b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/Codely.Common.asmdef similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/Codely.Common.asmdef rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/Codely.Common.asmdef diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/Codely.Common.asmdef.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/Codely.Common.asmdef.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/Codely.Common.asmdef.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/Codely.Common.asmdef.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/CodelyLogger.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/CodelyLogger.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/CodelyLogger.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/CodelyLogger.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/CodelyLogger.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/CodelyLogger.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/CodelyLogger.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/CodelyLogger.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs new file mode 100644 index 0000000..d5a9d14 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs @@ -0,0 +1,58 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.Rendering; + +namespace UnityTcp.Editor.Helpers +{ + /// Restricts editor auto-start hooks to the main Editor process. + public static class EditorProcessGuard + { + public static bool ShouldSkipEditorAutoStart() + => ShouldSkipEditorAutoStart(IsAssetImportWorkerProcess(), IsSecondaryEditorProcess()); + + public static bool ShouldSkipEditorUiAutoStart() + => ShouldSkipEditorUiAutoStart( + IsAssetImportWorkerProcess(), + IsSecondaryEditorProcess(), + Application.isBatchMode, + SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null); + + internal static bool ShouldSkipEditorAutoStart( + bool isAssetImportWorker, + bool isSecondaryEditor) + => isAssetImportWorker || isSecondaryEditor; + + internal static bool ShouldSkipEditorUiAutoStart( + bool isAssetImportWorker, + bool isSecondaryEditor, + bool isBatchMode, + bool isNullGraphics) + => ShouldSkipEditorAutoStart(isAssetImportWorker, isSecondaryEditor) + || isBatchMode + || isNullGraphics; + + private static bool IsAssetImportWorkerProcess() + { +#if UNITY_2020_2_OR_NEWER + return AssetDatabase.IsAssetImportWorkerProcess(); +#elif UNITY_2019_3_OR_NEWER + return UnityEditor.Experimental.AssetDatabaseExperimental.IsAssetImportWorkerProcess(); +#else + return false; +#endif + } + + private static bool IsSecondaryEditorProcess() + { +#if UNITY_2021_1_OR_NEWER + return UnityEditor.MPE.ProcessService.level == UnityEditor.MPE.ProcessLevel.Secondary; +#elif UNITY_2020_2_OR_NEWER + return UnityEditor.MPE.ProcessService.level == UnityEditor.MPE.ProcessLevel.Slave; +#elif UNITY_2020_1_OR_NEWER + return Unity.MPE.ProcessService.level == Unity.MPE.ProcessLevel.UMP_SLAVE; +#else + return false; +#endif + } + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs.meta new file mode 100644 index 0000000..56664f3 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc7862ec0c2d46b9adf01c6023c35fa3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs new file mode 100644 index 0000000..9055c48 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs @@ -0,0 +1,314 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +#if UNITY_2021_2_OR_NEWER +using UnityEditor.SceneManagement; +#else +using UnityEditor.Experimental.SceneManagement; +#endif + +namespace UnityTcp.Editor.Helpers +{ + /// + /// Central compatibility surface for Unity's instance-id → EntityId + /// migration (Unity 6000.5 / Unity 6.5). + /// + /// Unity 6.5 deprecated every -based identity API with an + /// error-level obsolete attribute (CS0619) in favour of 64-bit EntityId + /// overloads that do not exist on earlier versions: + /// Object.GetInstanceID() -> Object.GetEntityId() + /// Selection.activeInstanceID -> Selection.activeEntityId + /// EditorUtility.InstanceIDToObject(int) -> EditorUtility.EntityIdToObject(EntityId) + /// AssetDatabase.GetAssetPath(int) -> AssetDatabase.GetAssetPath(Object) + /// + /// These helpers speak so the full 64-bit EntityId value is + /// carried losslessly and can be reconstructed exactly (no 32-bit truncation). + /// On pre-6.5 Unity the legacy int instance id widens implicitly to + /// long, so call sites see a single consistent type across versions. The + /// only version-specific code lives in the two conversion helpers at the bottom. + /// + public static class InstanceIdExtensions + { + // ---- producers: Object / Selection -> long id ------------------------- + + /// + /// Returns the object's stable instance id as a , or 0 if + /// the object is null/destroyed. Prefer this over GetInstanceID(). + /// + public static long GetStableInstanceId(this Object obj) + { + if (obj == null) return 0; +#if UNITY_6000_5_OR_NEWER + return ToLong(obj.GetEntityId()); +#else +#pragma warning disable CS0618 + return obj.GetInstanceID(); +#pragma warning restore CS0618 +#endif + } + + /// Active selection instance id, or 0 if nothing is selected. + public static long ActiveSelectionInstanceId() + { +#if UNITY_6000_5_OR_NEWER + return ToLong(Selection.activeEntityId); +#else +#pragma warning disable CS0618 + return Selection.activeInstanceID; +#pragma warning restore CS0618 +#endif + } + + // ---- consumers: long id -> Object / path ------------------------------ + + /// Resolves an instance id to its , or null. + public static Object InstanceIdToObject(long instanceId) + { +#if UNITY_6000_5_OR_NEWER + return EditorUtility.EntityIdToObject(ToEntityId(instanceId)); +#else +#pragma warning disable CS0618 + return EditorUtility.InstanceIDToObject((int)instanceId); +#pragma warning restore CS0618 +#endif + } + + /// + /// Resolves an instance id to its , or null. + /// Same lookup as ; kept for existing call sites. + /// + public static Object ObjectFromInstanceId(long instanceId) + => InstanceIdToObject(instanceId); + + /// + /// Persistent YAML fileID. Uses + /// (ulong) so Tuanjie does not truncate values above Int32 + /// (e.g. 60588083669363838 must not become -2068059010). + /// Returns 0 if the object is not yet written to disk. + /// + public static long GetLocalFileId(this Object obj) + { + if (obj == null) return 0; + var gid = GlobalObjectId.GetGlobalObjectIdSlow(obj); + return unchecked((long)gid.targetObjectId); + } + + /// + /// Decimal string of , or null when unknown. + /// Wire this rather than a JSON number: values above 2^53 are not safe + /// in JavaScript. + /// + public static string FormatLocalFileId(this Object obj) + { + if (obj == null) return null; + ulong id = GlobalObjectId.GetGlobalObjectIdSlow(obj).targetObjectId; + return id == 0 ? null : id.ToString(); + } + + /// + /// Decimal string of , or null when 0. + /// Wire this rather than a JSON number: Unity 6.5 EntityId values + /// can exceed JavaScript's 2^53-safe integer range. + /// + public static string FormatStableInstanceId(this Object obj) + { + if (obj == null) return null; + long id = obj.GetStableInstanceId(); + return id == 0 ? null : id.ToString(); + } + + /// + /// Selection kind for CLI routing: + /// staged / sceneInstance / subAsset / projectAsset. + /// + public static string GetKind(this Object obj) + { + if (obj == null) return null; + if (obj is GameObject go) + { + if (PrefabStageUtility.GetPrefabStage(go) != null) + return "staged"; + if (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)) + return "sceneInstance"; + } + if (AssetDatabase.IsSubAsset(obj)) + return "subAsset"; + if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(obj))) + return "projectAsset"; + return null; + } + + /// + /// Prefab asset path for a stage. Unity 2019 exposes + /// prefabAssetPath; 2020.1+ renamed it to assetPath. + /// + public static string GetPrefabStageAssetPath(PrefabStage stage) + { + if (stage == null) return null; +#if UNITY_2020_1_OR_NEWER + return stage.assetPath; +#else + return stage.prefabAssetPath; +#endif + } + + /// + /// GUID from so staged prefab + /// objects still resolve to the source prefab, not an empty asset path. + /// + public static string FormatGlobalObjectGuid(this Object obj) + { + if (obj == null) return null; + string guid = GlobalObjectId.GetGlobalObjectIdSlow(obj).assetGUID.ToString(); + if (!IsEmptyGuid(guid)) return guid; + + // Staged / scene objects sometimes yield an all-zero assetGUID. + // Fall back to the prefab or scene asset path. + string path = null; + if (obj is GameObject go) + { + var stage = PrefabStageUtility.GetPrefabStage(go); + string stagePath = GetPrefabStageAssetPath(stage); + if (!string.IsNullOrEmpty(stagePath)) + path = stagePath; + else if (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)) + path = go.scene.path; + } + if (string.IsNullOrEmpty(path)) + path = AssetDatabase.GetAssetPath(obj); + if (string.IsNullOrEmpty(path)) return null; + guid = AssetDatabase.AssetPathToGUID(path); + return IsEmptyGuid(guid) ? null : guid; + } + + private static bool IsEmptyGuid(string guid) + { + return string.IsNullOrEmpty(guid) || guid == "00000000000000000000000000000000"; + } + + /// + /// Hierarchy path with same-name ordinal only when a parent has more than + /// one child of the same name (e.g. Cube, Sphere, Cube → second Cube is Cube[1]). + /// The index is among same-name siblings, not Transform.GetSiblingIndex(). + /// + public static string GetHierarchyPathWithIndex(this GameObject go) + { + if (go == null) return ""; + var segments = new List(); + var t = go.transform; + while (t != null) + { + var parent = t.parent; + string seg = t.name; + if (parent != null && HasSameNameSibling(parent, t)) + seg = $"{t.name}[{GetSameNameOrdinal(parent, t)}]"; + segments.Insert(0, seg); + t = parent; + } + return string.Join("/", segments); + } + + /// + /// 0-based index of among siblings that share its name. + /// + public static int GetSameNameOrdinal(Transform parent, Transform self) + { + int ordinal = 0; + for (int i = 0; i < parent.childCount; i++) + { + var child = parent.GetChild(i); + if (child.name != self.name) continue; + if (child == self) return ordinal; + ordinal++; + } + return ordinal; + } + + /// + /// Parses a path segment produced by . + /// is -1 when the name is unique (no suffix). + /// + public static bool TryParseHierarchySegment(string segment, out string name, out int ordinal) + { + name = segment ?? ""; + ordinal = -1; + if (string.IsNullOrEmpty(segment)) return false; + int close = segment.LastIndexOf(']'); + int open = segment.LastIndexOf('['); + if (open > 0 && close == segment.Length - 1 && close > open + 1) + { + int n; + if (int.TryParse(segment.Substring(open + 1, close - open - 1), out n) && n >= 0) + { + name = segment.Substring(0, open); + ordinal = n; + } + } + return true; + } + + public static string[] GetComponentTypeNames(this GameObject go) + { + if (go == null) return new string[0]; + var comps = go.GetComponents(); + var names = new List(comps.Length); + for (int i = 0; i < comps.Length; i++) + { + if (comps[i] != null) + names.Add(comps[i].GetType().FullName); + } + return names.ToArray(); + } + + private static bool HasSameNameSibling(Transform parent, Transform self) + { + int count = 0; + for (int i = 0; i < parent.childCount; i++) + { + if (parent.GetChild(i).name != self.name) continue; + count++; + if (count > 1) return true; + } + return false; + } + + /// Asset GUID from path, or null if the object is not an asset. + public static string GetAssetGuid(this Object obj) + { + if (obj == null) return null; + string guid = obj.FormatGlobalObjectGuid(); + if (!string.IsNullOrEmpty(guid)) return guid; + string path = AssetDatabase.GetAssetPath(obj); + if (string.IsNullOrEmpty(path)) return null; + guid = AssetDatabase.AssetPathToGUID(path); + return string.IsNullOrEmpty(guid) ? null : guid; + } + + /// Asset path for an instance id, or "" if it is not an asset. + public static string AssetPathFromInstanceId(long instanceId) + { + var obj = InstanceIdToObject(instanceId); + return obj != null ? AssetDatabase.GetAssetPath(obj) : ""; + } + +#if UNITY_6000_5_OR_NEWER + // ---- the ONLY version-specific conversions ---------------------------- + // Both are pure 64-bit bit reinterpretations of EntityId.ToULong (the + // canonical numeric form of an EntityId, which this project already uses), + // so ToEntityId is an exact inverse of ToLong with no loss of information. + + /// Reinterprets an EntityId as a 64-bit . + internal static long ToLong(EntityId entityId) + => unchecked((long)EntityId.ToULong(entityId)); + + /// + /// Exact inverse of : rebuilds the EntityId from + /// its 64-bit numeric form via EntityId.FromULong (the counterpart of + /// EntityId.ToULong), so an id survives a round-trip through storage or + /// the wire without loss. + /// + internal static EntityId ToEntityId(long instanceId) + => EntityId.FromULong(unchecked((ulong)instanceId)); +#endif + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout/Tuanjie AI Mode.wlt b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout/Tuanjie AI Mode.wlt similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout/Tuanjie AI Mode.wlt rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout/Tuanjie AI Mode.wlt diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout/Tuanjie AI Mode.wlt.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout/Tuanjie AI Mode.wlt.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout/Tuanjie AI Mode.wlt.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout/Tuanjie AI Mode.wlt.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyEventTracker.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyEventTracker.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyEventTracker.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyEventTracker.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyEventTracker.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyEventTracker.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyEventTracker.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyEventTracker.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcManager.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcManager.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcManager.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcManager.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcManager.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcManager.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcManager.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcManager.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcServer.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcServer.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcServer.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcServer.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcServer.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcServer.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcServer.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcServer.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs index efa2231..401b57a 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs @@ -16,6 +16,8 @@ namespace Cn.Tuanjie.Codely.Editor static CodelyLayoutInstaller() { + if (EditorProcessGuard.ShouldSkipEditorUiAutoStart()) return; + EditorApplication.delayCall += InstallCodelyLayout; } diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs index 4921231..0cbca19 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs @@ -33,6 +33,7 @@ using UnityEditor; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; +using UnityTcp.Editor.Helpers; namespace UnityTcp.Editor.Windows { @@ -43,6 +44,8 @@ namespace UnityTcp.Editor.Windows static CodelyToolbar() { + if (EditorProcessGuard.ShouldSkipEditorUiAutoStart()) return; + EditorApplication.delayCall += AttachToToolbar; EditorApplication.update += EnsureAttached; } @@ -150,4 +153,4 @@ namespace UnityTcp.Editor.Windows } } #endif -#endif \ No newline at end of file +#endif diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs index 98b9239..ca92d2f 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs @@ -14,10 +14,28 @@ using System.Threading.Tasks; using Unity.InternalBridge; using UnityEditor; using UnityEditor.PackageManager; +#if UNITY_2021_2_OR_NEWER +using UnityEditor.SceneManagement; +#else +using UnityEditor.Experimental.SceneManagement; +#endif using UnityEngine; using UnityTcp.Editor.Helpers; namespace Cn.Tuanjie.Codely.Editor { + /// + /// Describes a sub-object (e.g. a Mesh or Material) selected inside a + /// container asset file (FBX, atlas texture). Only present when the + /// selection is a sub-asset; never present for top-level asset files. + /// + [Serializable] + public class DropItemSelected + { + public string type; // C# type name, e.g. "Mesh", "Material" + public string name; // Object name as shown in the Project window + public string fileId; // decimal YAML fileID (GlobalObjectId.targetObjectId) + } + /// /// 用于序列化选中对象信息 /// @@ -27,6 +45,28 @@ namespace Cn.Tuanjie.Codely.Editor public string path; public string type; public string name; + public string guid; // Asset GUID (stable across sessions) + /// + /// Decimal string of the YAML fileID (GlobalObjectId.targetObjectId). + /// Empty for GameObjects (use instanceId). String on the wire so values + /// above Int32 / JS Number.MAX_SAFE_INTEGER are not truncated. + /// + public string fileId; + /// Non-null when the selected object lives inside a container + /// file (sub-asset). Carries type + name + fileId of the sub-object so + /// callers can distinguish e.g. "Material #25" inside an FBX from the + /// top-level FBX asset. + /// + public DropItemSelected selected; + public string hierarchyPath; + public long instanceId; + /// staged | sceneInstance | subAsset | projectAsset + public string kind; + /// Persistent YAML fileID of a GameObject (GlobalObjectId.targetObjectId). + public string goFileId; + /// Persistent GUID of a GameObject's source asset/scene. + public string goGuid; + public string[] componentNames; } [Serializable] @@ -43,6 +83,8 @@ namespace Cn.Tuanjie.Codely.Editor [InitializeOnLoadMethod] private static void RegisterReloadEvents() { + if (TauriUtils.IsAutomatedEditorRun()) return; + if (s_reloadEventsRegistered) { return; @@ -883,15 +925,7 @@ namespace Cn.Tuanjie.Codely.Editor foreach (var obj in selectedObjects) { if (obj == null) continue; - var itemData = new DropItemData { name = obj.name, type = obj.GetType().Name }; - string assetPath = AssetDatabase.GetAssetPath(obj); - if (!string.IsNullOrEmpty(assetPath)) - itemData.path = Path.GetFullPath(assetPath); - else if (obj is UnityEngine.GameObject go) - itemData.path = GetGameObjectPath(go); - else - itemData.path = obj.name; - dropItems.Add(itemData); + dropItems.Add(BuildDropItem(obj)); } return dropItems.Count > 0 ? dropItems : null; } @@ -989,6 +1023,8 @@ namespace Cn.Tuanjie.Codely.Editor private void OnEnable() { + if (TauriUtils.IsAutomatedEditorRun()) return; + ApplyTitleIcon(); if (string.IsNullOrEmpty(GetCodelyRunnable())) @@ -4066,28 +4102,7 @@ namespace Cn.Tuanjie.Codely.Editor foreach (var obj in DragAndDrop.objectReferences) { if (obj == null) continue; - - var itemData = new DropItemData - { - name = obj.name, - type = obj.GetType().Name - }; - - string assetPath = AssetDatabase.GetAssetPath(obj); - if (!string.IsNullOrEmpty(assetPath)) - { - itemData.path = Path.GetFullPath(assetPath); - } - else if (obj is UnityEngine.GameObject go) - { - itemData.path = GetGameObjectPath(go); - } - else - { - itemData.path = obj.name; - } - - dropItems.Add(itemData); + dropItems.Add(BuildDropItem(obj)); } } @@ -4135,31 +4150,59 @@ namespace Cn.Tuanjie.Codely.Editor } } - /// - /// Get the hierarchical path of a GameObject in the scene - /// - private static string GetGameObjectPath(UnityEngine.GameObject obj) + private static DropItemData BuildDropItem(UnityEngine.Object obj) { - if (obj == null) return ""; + var itemData = new DropItemData { name = obj.name, type = obj.GetType().Name, kind = obj.GetKind() }; + string assetPath = AssetDatabase.GetAssetPath(obj); - // For GameObjects in a scene, return the scene asset path (relative to project root) - var scene = obj.scene; - if (scene.IsValid() && !string.IsNullOrEmpty(scene.path)) + if (obj is UnityEngine.GameObject go + && (string.IsNullOrEmpty(assetPath) + || PrefabStageUtility.GetPrefabStage(go) != null + || (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)))) { - return scene.path; + itemData.path = GetSceneOrPrefabPath(go); + itemData.hierarchyPath = go.GetHierarchyPathWithIndex(); + itemData.instanceId = go.GetStableInstanceId(); + itemData.goFileId = go.FormatLocalFileId() ?? ""; + itemData.goGuid = go.FormatGlobalObjectGuid() ?? ""; + itemData.componentNames = go.GetComponentTypeNames(); + if (string.IsNullOrEmpty(itemData.path)) + itemData.path = itemData.hierarchyPath; + return itemData; } - // Fallback to hierarchy path if scene is not valid - var path = obj.name; - var parent = obj.transform.parent; - - while (parent != null) + if (!string.IsNullOrEmpty(assetPath)) { - path = $"{parent.name}/{path}"; - parent = parent.parent; + itemData.path = assetPath.Replace('\\', '/'); + itemData.guid = obj.GetAssetGuid(); + itemData.fileId = obj.FormatLocalFileId() ?? ""; + if (AssetDatabase.IsSubAsset(obj) && !string.IsNullOrEmpty(itemData.fileId)) + { + itemData.selected = new DropItemSelected + { + type = obj.GetType().Name, + name = obj.name, + fileId = itemData.fileId, + }; + } + return itemData; } - return path; + itemData.path = obj.name; + return itemData; + } + + private static string GetSceneOrPrefabPath(UnityEngine.GameObject go) + { + if (go == null) return ""; + if (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)) + return go.scene.path.Replace('\\', '/'); + string stagePath = InstanceIdExtensions.GetPrefabStageAssetPath( + PrefabStageUtility.GetPrefabStage(go)); + if (!string.IsNullOrEmpty(stagePath)) + return stagePath.Replace('\\', '/'); + string assetPath = AssetDatabase.GetAssetPath(go); + return string.IsNullOrEmpty(assetPath) ? "" : assetPath.Replace('\\', '/'); } diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindowDocker.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindowDocker.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindowDocker.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindowDocker.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindowDocker.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindowDocker.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindowDocker.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindowDocker.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs index fde146c..05ae616 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs @@ -162,6 +162,8 @@ namespace Cn.Tuanjie.Codely.Editor private void OnEnable() { + if (TauriUtils.IsAutomatedEditorRun()) return; + if (!_eventTrackedOnEnable) { _eventTrackedOnEnable = true; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/EditorWindowNativeHandleHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/EditorWindowNativeHandleHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Icons.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Icons.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Icons.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Icons.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge/UnityConnectSession.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge/UnityConnectSession.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge/UnityConnectSession.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge/UnityConnectSession.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/MacOSWebViewBridge.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/MacOSWebViewBridge.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/MacOSWebViewBridge.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/MacOSWebViewBridge.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/MacOSWebViewBridge.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/MacOSWebViewBridge.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/MacOSWebViewBridge.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/MacOSWebViewBridge.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeBrowserAPI.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeBrowserAPI.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeBrowserAPI.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeBrowserAPI.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeBrowserAPI.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeBrowserAPI.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeBrowserAPI.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeBrowserAPI.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeWindowHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeWindowHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeWindowHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeWindowHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeWindowHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeWindowHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeWindowHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeWindowHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs index 454dfa1..282ea9b 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs @@ -35,15 +35,14 @@ namespace Cn.Tuanjie.Codely.Editor #region Automation / Headless Detection /// - /// True when the editor is running unattended — batch mode or with a null graphics device - /// (CI / QA automation harnesses). The auto-open windows must stay closed in these - /// environments: creating an forces native window + + /// True when this is not the main interactive Editor — a worker/secondary process, batch + /// mode, or a null graphics device (CI / QA automation harnesses). Auto-open windows stay + /// closed in these environments: creating an forces native window + /// graphics-surface creation, which fails with a SUCCEEDED(hr) native assertion that /// flips otherwise-passing automated test runs to an overall FAIL. /// internal static bool IsAutomatedEditorRun() - => Application.isBatchMode - || SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Null; + => EditorProcessGuard.ShouldSkipEditorUiAutoStart(); #endregion diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WebView2Host.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WebView2Host.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WebView2Host.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WebView2Host.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WebView2Host.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WebView2Host.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WebView2Host.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WebView2Host.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowHostStabilityPolicy.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowHostStabilityPolicy.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowHostStabilityPolicy.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowHostStabilityPolicy.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowHostStabilityPolicy.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowHostStabilityPolicy.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowHostStabilityPolicy.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowHostStabilityPolicy.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowResourcePreservationPolicy.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowResourcePreservationPolicy.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowResourcePreservationPolicy.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowResourcePreservationPolicy.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll.meta new file mode 100644 index 0000000..5bc4f71 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 5bcc56c16573f0945aeefcb157e22736 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.README.md b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.README.md similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.README.md rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.README.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.README.md.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.README.md.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.README.md.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.README.md.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.dll.meta new file mode 100644 index 0000000..4268954 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 38389b47caeb4d7493c8ef1fd954ab6a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 1 + validateReferences: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta new file mode 100644 index 0000000..2537b45 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: abb8725b95ae4fd49e8f90016252dc0c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Linux + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll.meta new file mode 100644 index 0000000..e93a809 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 0e1e756d3d2df9149ba70839ab1b645f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: Windows + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/CMakeLists.txt b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/CMakeLists.txt similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/CMakeLists.txt rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/CMakeLists.txt diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/CMakeLists.txt.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/CMakeLists.txt.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/CMakeLists.txt.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/CMakeLists.txt.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/build.ps1 b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/build.ps1 similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/build.ps1 rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/build.ps1 diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/build.ps1.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/build.ps1.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/build.ps1.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/build.ps1.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta new file mode 100644 index 0000000..93656e0 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 952eec9c9781d7c478a1057764a499ea +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta index b9a66eb..32099fe 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta index 39c0159..ba252a4 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta index 83452a1..b8c34bb 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta index f0519e3..97df4d7 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h.meta index e913d56..a0b77f2 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta index 3871464..1708779 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta index 1220d11..5556bac 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta index f98701f..68a8d2c 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta index 70d9052..c0245cd 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll.meta new file mode 100644 index 0000000..fee4e6b --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 2cb1ee4cdb45fae41a791bcdb59188ac +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll new file mode 100644 index 0000000000000000000000000000000000000000..1762dce65d2f2b0c25c49bf1dc6a9c72802b5db3 GIT binary patch literal 485888 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

Z2884AS4XrW0|wz(rd#_&XZ4D*`!7)3wRh&gjv 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

t=ppg#+d93{SYP@A~Gk&UM6?CC3va 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⪻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 literal 0 HcmV?d00001 diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll.meta new file mode 100644 index 0000000..5ff5190 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: c0f1e4f2a8f94f8f8fd7b6a90d7b6e3c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeWindowBridge.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeWindowBridge.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeWindowBridge.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeWindowBridge.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeWindowBridge.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeWindowBridge.dll.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeWindowBridge.dll.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeWindowBridge.dll.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/datachannel.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/datachannel.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/datachannel.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/datachannel.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/datachannel.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/datachannel.dll.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/datachannel.dll.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/datachannel.dll.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libcrypto-3-x64.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libcrypto-3-x64.dll.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libcrypto-3-x64.dll.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libcrypto-3-x64.dll.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libssl-3-x64.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libssl-3-x64.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libssl-3-x64.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libssl-3-x64.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libssl-3-x64.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libssl-3-x64.dll.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libssl-3-x64.dll.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libssl-3-x64.dll.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm.meta similarity index 82% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm.meta index 7795b44..0577453 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm.meta @@ -16,19 +16,17 @@ PluginImporter: second: enabled: 0 settings: - Exclude Android: 1 Exclude Editor: 0 Exclude Linux64: 1 Exclude OSXUniversal: 1 + Exclude PlayableAds: 1 + Exclude VisionOS: 1 + Exclude WebGL: 1 + Exclude WeixinMiniGame: 1 Exclude Win: 1 Exclude Win64: 1 Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 + Exclude tvOS: 1 - first: Any: second: @@ -47,7 +45,7 @@ PluginImporter: second: enabled: 0 settings: - CPU: AnyCPU + CPU: x86_64 - first: Standalone: OSXUniversal second: @@ -69,21 +67,17 @@ PluginImporter: - first: VisionOS: VisionOS second: - enabled: 1 + enabled: 0 settings: {} - first: iPhone: iOS second: enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: AnyCPU - CompileFlags: - FrameworkDependencies: + settings: {} - first: tvOS: tvOS second: - enabled: 1 + enabled: 0 settings: {} userData: assetBundleName: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/build-webview.sh b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/build-webview.sh similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/build-webview.sh rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/build-webview.sh diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/build-webview.sh.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/build-webview.sh.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/build-webview.sh.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/build-webview.sh.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle.meta new file mode 100644 index 0000000..bdf496a --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle.meta @@ -0,0 +1,28 @@ +fileFormatVersion: 2 +guid: d2d8d6e91e1ac2043b37ba01ada2eaff +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + OS: OSX + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeTcpBridge.dylib b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeTcpBridge.dylib rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib.meta new file mode 100644 index 0000000..36ad5ac --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 3487f8a0f6484a4a98f04907037a4fae +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: OSX + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeWindowBridge.dylib b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeWindowBridge.dylib similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeWindowBridge.dylib rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeWindowBridge.dylib diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeWindowBridge.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeWindowBridge.dylib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeWindowBridge.dylib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeWindowBridge.dylib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libcrypto.3.dylib b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libcrypto.3.dylib similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libcrypto.3.dylib rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libcrypto.3.dylib diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libcrypto.3.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libcrypto.3.dylib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libcrypto.3.dylib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libcrypto.3.dylib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libdatachannel.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libdatachannel.dylib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libdatachannel.dylib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libdatachannel.dylib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libssl.3.dylib b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libssl.3.dylib similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libssl.3.dylib rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libssl.3.dylib diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libssl.3.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libssl.3.dylib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libssl.3.dylib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libssl.3.dylib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/README.md b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/README.md similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/README.md rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/README.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/README.md.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/README.md.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/README.md.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/README.md.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/package.json b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/package.json similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/package.json rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/package.json diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/package.json.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/package.json.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/package.json.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/package.json.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.ps1 b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.ps1 similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.ps1 rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.ps1 diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.ps1.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.ps1.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.ps1.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.ps1.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.sh b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.sh similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.sh rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.sh diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.sh.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.sh.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.sh.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.sh.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.bat b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.bat similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.bat rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.bat diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.bat.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.bat.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.bat.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.bat.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.sh b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.sh similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.sh rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.sh diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.sh.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.sh.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.sh.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.sh.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.codely-bridge-commit b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.codely-bridge-commit deleted file mode 100644 index 16fa161..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.codely-bridge-commit +++ /dev/null @@ -1 +0,0 @@ -785dea6a36da9d495b10bb73b7478e176ddd08fa diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs deleted file mode 100644 index 7f1a54d..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.Rendering; - -namespace UnityTcp.Editor.Helpers -{ - ///

- /// Detects unattended editor runs (CI / UTR batchmode) and gates bridge auto-start. - /// Set to opt in when integration tests need the bridge. - /// - internal static class EditorAutomationGuard - { - internal const string AllowBridgeInBatchEnvVar = "UNITY_TCP_ALLOW_BATCH"; - - internal static bool IsAutomatedEditorRun() - => Application.isBatchMode - || SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null; - - internal static bool ShouldSkipBridgeAutoStart() - => IsAutomatedEditorRun() - && string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(AllowBridgeInBatchEnvVar)); - } -} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs deleted file mode 100644 index dee4294..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Codely.Newtonsoft.Json.Linq; -using UnityEditor; -using UnityEngine; -using UnityTcp.Editor.Helpers; - -namespace UnityTcp.Editor.Notifier -{ - /// - /// Broadcasts the current Editor selection to notifier clients whenever it - /// changes. The emitted payload mirrors the structure returned by - /// 's get_selection action. - /// - [InitializeOnLoad] - public static class SelectionChangedNotifier - { - private const string EventType = "selection_changed"; - - private static bool _flushScheduled; - - static SelectionChangedNotifier() - { - Selection.selectionChanged += OnSelectionChanged; - } - - private static void OnSelectionChanged() => ScheduleFlush(); - - private static void ScheduleFlush() - { - if (_flushScheduled) return; - _flushScheduled = true; - EditorApplication.delayCall += Flush; - } - - private static void Flush() - { - _flushScheduled = false; - try - { - if (!UnityTcpBridge.IsRunning) return; - - JObject payload = BuildSelectionPayload(); - if (payload == null) return; - - UnityTcpBridge.NotifyAll(EventType, payload); - } - catch (Exception e) - { - try { CodelyLogger.LogError($"[SelectionChangedNotifier] flush failed: {e.Message}"); } catch { } - } - } - - private static JObject BuildSelectionPayload() - { - var assetGUIDs = Selection.assetGUIDs; - var assetPaths = assetGUIDs?.Select(AssetDatabase.GUIDToAssetPath).ToArray(); - - string activeAssetPath = Selection.activeObject != null - ? AssetDatabase.GetAssetPath(Selection.activeObject) - : null; - string activeAsset = string.IsNullOrEmpty(activeAssetPath) - ? null - : Path.GetFullPath(activeAssetPath).Replace('\\', '/'); - - var payload = new - { - activeObject = Selection.activeObject?.name, - activeAsset = activeAsset, - activeGameObject = Selection.activeGameObject?.name, - activeTransform = Selection.activeTransform?.name, - activeInstanceID = InstanceIdExtensions.ActiveSelectionInstanceId(), -#if UNITY_2020_1_OR_NEWER - count = Selection.count, -#else - count = Selection.objects?.Length ?? 0, -#endif - objects = Selection.objects - .Where(obj => obj != null) - .Select(obj => new - { - name = obj.name, - type = obj.GetType().FullName, - instanceID = obj.GetStableInstanceId(), - }) - .ToList(), - gameObjects = Selection.gameObjects - .Where(go => go != null) - .Select(go => new - { - name = go.name, - path = GetGameObjectHierarchyPath(go), - instanceID = go.GetStableInstanceId(), - }) - .ToList(), - assetGUIDs = assetGUIDs, - assetPaths = assetPaths, - }; - - return JObject.FromObject(payload); - } - - private static string GetGameObjectHierarchyPath(GameObject obj) - { - if (obj == null) return string.Empty; - - var path = obj.name; - var parent = obj.transform != null ? obj.transform.parent : null; - while (parent != null) - { - path = $"{parent.name}/{path}"; - parent = parent.parent; - } - return path; - } - } -} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs deleted file mode 100644 index 1e31b88..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs +++ /dev/null @@ -1,118 +0,0 @@ -using UnityEngine; -using UnityEditor; -using UnityEditorInternal; - -namespace UnityTcp.Editor.Helpers -{ - /// - /// Central compatibility surface for Unity's instance-id → EntityId - /// migration (Unity 6000.5 / Unity 6.5). - /// - /// Unity 6.5 deprecated every -based identity API with an - /// error-level obsolete attribute (CS0619) in favour of 64-bit EntityId - /// overloads that do not exist on earlier versions: - /// Object.GetInstanceID() -> Object.GetEntityId() - /// Selection.activeInstanceID -> Selection.activeEntityId - /// EditorUtility.InstanceIDToObject(int) -> EditorUtility.EntityIdToObject(EntityId) - /// InternalEditorUtility.GetObjectFromInstanceID(int) - /// -> InternalEditorUtility.GetObjectFromEntityId(EntityId) - /// AssetDatabase.GetAssetPath(int) -> AssetDatabase.GetAssetPath(EntityId) - /// - /// These helpers speak so the full 64-bit EntityId value is - /// carried losslessly and can be reconstructed exactly (no 32-bit truncation). - /// On pre-6.5 Unity the legacy int instance id widens implicitly to - /// long, so call sites see a single consistent type across versions. The - /// only version-specific code lives in the two conversion helpers at the bottom. - /// - public static class InstanceIdExtensions - { - // ---- producers: Object / Selection -> long id ------------------------- - - /// - /// Returns the object's stable instance id as a , or 0 if - /// the object is null/destroyed. Prefer this over GetInstanceID(). - /// - public static long GetStableInstanceId(this Object obj) - { - if (obj == null) return 0; -#if UNITY_6000_5_OR_NEWER - return ToLong(obj.GetEntityId()); -#else - return obj.GetInstanceID(); -#endif - } - - /// Active selection instance id, or 0 if nothing is selected. - public static long ActiveSelectionInstanceId() - { -#if UNITY_6000_5_OR_NEWER - return ToLong(Selection.activeEntityId); -#else -#pragma warning disable CS0618 - return Selection.activeInstanceID; -#pragma warning restore CS0618 -#endif - } - - // ---- consumers: long id -> Object / path ------------------------------ - - /// Resolves an instance id to its , or null. - public static Object InstanceIdToObject(long instanceId) - { -#if UNITY_6000_5_OR_NEWER - return EditorUtility.EntityIdToObject(ToEntityId(instanceId)); -#else -#pragma warning disable CS0618 - return EditorUtility.InstanceIDToObject((int)instanceId); -#pragma warning restore CS0618 -#endif - } - - /// - /// Resolves an instance id via InternalEditorUtility (used for objects - /// that will not return, e.g. some scene objects). - /// - public static Object ObjectFromInstanceId(long instanceId) - { -#if UNITY_6000_5_OR_NEWER - return InternalEditorUtility.GetObjectFromEntityId(ToEntityId(instanceId)); -#else -#pragma warning disable CS0618 - return InternalEditorUtility.GetObjectFromInstanceID((int)instanceId); -#pragma warning restore CS0618 -#endif - } - - /// Asset path for an instance id, or "" if it is not an asset. - public static string AssetPathFromInstanceId(long instanceId) - { -#if UNITY_6000_5_OR_NEWER - return AssetDatabase.GetAssetPath(ToEntityId(instanceId)); -#else -#pragma warning disable CS0618 - return AssetDatabase.GetAssetPath((int)instanceId); -#pragma warning restore CS0618 -#endif - } - -#if UNITY_6000_5_OR_NEWER - // ---- the ONLY version-specific conversions ---------------------------- - // Both are pure 64-bit bit reinterpretations of EntityId.ToULong (the - // canonical numeric form of an EntityId, which this project already uses), - // so ToEntityId is an exact inverse of ToLong with no loss of information. - - /// Reinterprets an EntityId as a 64-bit . - internal static long ToLong(EntityId entityId) - => unchecked((long)EntityId.ToULong(entityId)); - - /// - /// Exact inverse of : rebuilds the EntityId from - /// its 64-bit numeric form via EntityId.FromULong (the counterpart of - /// EntityId.ToULong), so an id survives a round-trip through storage or - /// the wire without loss. - /// - internal static EntityId ToEntityId(long instanceId) - => EntityId.FromULong(unchecked((ulong)instanceId)); -#endif - } -} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll.meta deleted file mode 100644 index bd185ae..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll.meta +++ /dev/null @@ -1,95 +0,0 @@ -fileFormatVersion: 2 -guid: 5bcc56c16573f0945aeefcb157e22736 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 0 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude QNX: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - EmbeddedLinux: EmbeddedLinux - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - HMIAndroid: HMIAndroid - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - QNX: QNX - second: - enabled: 0 - settings: - CPU: AnyCPU - SDK: AnySDK - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.dll.meta deleted file mode 100644 index 7e03924..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.dll.meta +++ /dev/null @@ -1,95 +0,0 @@ -fileFormatVersion: 2 -guid: 38389b47caeb4d7493c8ef1fd954ab6a -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 1 - validateReferences: 0 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude QNX: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - EmbeddedLinux: EmbeddedLinux - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - HMIAndroid: HMIAndroid - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - QNX: QNX - second: - enabled: 0 - settings: - CPU: AnyCPU - SDK: AnySDK - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta deleted file mode 100644 index ea12fc6..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta +++ /dev/null @@ -1,89 +0,0 @@ -fileFormatVersion: 2 -guid: abb8725b95ae4fd49e8f90016252dc0c -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude QNX: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Linux - - first: - EmbeddedLinux: EmbeddedLinux - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - HMIAndroid: HMIAndroid - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - QNX: QNX - second: - enabled: 0 - settings: - CPU: AnyCPU - SDK: AnySDK - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll.meta deleted file mode 100644 index 865039d..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll.meta +++ /dev/null @@ -1,63 +0,0 @@ -fileFormatVersion: 2 -guid: 0e1e756d3d2df9149ba70839ab1b645f -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : - second: - enabled: 0 - settings: {} - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta deleted file mode 100644 index b72811a..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta +++ /dev/null @@ -1,47 +0,0 @@ -fileFormatVersion: 2 -guid: 952eec9c9781d7c478a1057764a499ea -PluginImporter: - externalObjects: {} - serializedVersion: 3 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - Any: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Editor: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - OSXUniversal: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll.meta deleted file mode 100644 index 40c2f67..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll.meta +++ /dev/null @@ -1,63 +0,0 @@ -fileFormatVersion: 2 -guid: 2cb1ee4cdb45fae41a791bcdb59188ac -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : - second: - enabled: 0 - settings: {} - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll deleted file mode 100644 index c541cf658a241ef14062a7a7ffd55a69d6bc2bf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477184 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