@atelierai/uco 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +7 -8
- package/bin/server.mjs +1 -1
- package/bin/stub-plugin.mjs +3 -3
- package/dist/codegen/coerce.js +1 -1
- package/dist/codegen/coerce.js.map +1 -1
- package/dist/codegen/emit.js +2 -2
- package/dist/codegen/emit.js.map +1 -1
- package/dist/codegen/refs.js +1 -1
- package/dist/codegen/refs.js.map +1 -1
- package/dist/codegen/types.js +1 -1
- package/dist/codegen/types.js.map +1 -1
- package/dist/commands/call.js +1 -1
- package/dist/commands/call.js.map +1 -1
- package/dist/commands/devops/configure.js +1 -1
- package/dist/commands/devops/configure.js.map +1 -1
- package/dist/commands/devops/index.js +0 -4
- package/dist/commands/devops/index.js.map +1 -1
- package/dist/commands/devops/install-plugin.js +1 -1
- package/dist/commands/devops/install-plugin.js.map +1 -1
- package/dist/commands/devops/open.js +7 -7
- package/dist/commands/devops/open.js.map +1 -1
- package/dist/commands/devops/status.js +3 -3
- package/dist/commands/devops/status.js.map +1 -1
- package/dist/commands/exec.js +1 -1
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/install.js +2 -2
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/prompt.js +2 -2
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/resource.js +2 -2
- package/dist/commands/resource.js.map +1 -1
- package/dist/commands/update.js +1 -26
- package/dist/commands/update.js.map +1 -1
- package/dist/config/port.js +2 -2
- package/dist/config/port.js.map +1 -1
- package/dist/config/resolve.d.ts +1 -2
- package/dist/config/resolve.js +0 -12
- package/dist/config/resolve.js.map +1 -1
- package/dist/devops/lib/configure.d.ts +1 -1
- package/dist/devops/lib/configure.js +2 -2
- package/dist/devops/lib/configure.js.map +1 -1
- package/dist/devops/lib/install-plugin.d.ts +1 -1
- package/dist/devops/lib/install-plugin.js +1 -1
- package/dist/devops/lib/install-plugin.js.map +1 -1
- package/dist/devops/lib/install.d.ts +2 -2
- package/dist/devops/lib/install.js +5 -5
- package/dist/devops/lib/install.js.map +1 -1
- package/dist/devops/lib/open.js +11 -32
- package/dist/devops/lib/open.js.map +1 -1
- package/dist/devops/lib/remove-plugin.d.ts +1 -1
- package/dist/devops/lib/remove-plugin.js +3 -3
- package/dist/devops/lib/remove-plugin.js.map +1 -1
- package/dist/devops/lib/run-tool.d.ts +2 -2
- package/dist/devops/lib/run-tool.js +2 -2
- package/dist/devops/lib/types.d.ts +17 -54
- package/dist/devops/lib/types.js +2 -2
- package/dist/devops/lib/types.js.map +1 -1
- package/dist/devops/lib/update.d.ts +0 -15
- package/dist/devops/lib/update.js +2 -91
- package/dist/devops/lib/update.js.map +1 -1
- package/dist/devops/utils/agents.d.ts +0 -28
- package/dist/devops/utils/agents.js +0 -462
- package/dist/devops/utils/agents.js.map +1 -1
- package/dist/devops/utils/config.d.ts +9 -18
- package/dist/devops/utils/config.js +7 -20
- package/dist/devops/utils/config.js.map +1 -1
- package/dist/devops/utils/editor-cache.js +1 -1
- package/dist/devops/utils/editor-cache.js.map +1 -1
- package/dist/devops/utils/launch-error-dismiss.d.ts +2 -2
- package/dist/devops/utils/launch-error-dismiss.js +5 -5
- package/dist/devops/utils/manifest.d.ts +2 -2
- package/dist/devops/utils/manifest.js +3 -3
- package/dist/devops/utils/manifest.js.map +1 -1
- package/dist/devops/utils/port.d.ts +1 -1
- package/dist/devops/utils/port.js +1 -1
- package/dist/devops/utils/probe.d.ts +1 -1
- package/dist/devops/utils/probe.js +1 -1
- package/dist/devops/utils/ui.js +2 -2
- package/dist/devops/utils/ui.js.map +1 -1
- package/dist/devops/utils/unity-editor.js +4 -4
- package/dist/devops/utils/unity-editor.js.map +1 -1
- package/dist/devops/utils/unity-hub.js +1 -1
- package/dist/devops/utils/unity-hub.js.map +1 -1
- package/dist/devops/utils/unity-shutdown.d.ts +1 -1
- package/dist/devops/utils/unity-shutdown.js +1 -1
- package/dist/devops/utils/update-check.js +3 -3
- package/dist/devops/utils/update-check.js.map +1 -1
- package/dist/devops/utils/vendor.d.ts +2 -2
- package/dist/devops/utils/vendor.js +4 -4
- package/dist/devops/utils/vendor.js.map +1 -1
- package/dist/generated/tools.js +1 -1
- package/dist/generated/tools.js.map +1 -1
- package/dist/program.js +3 -3
- package/dist/program.js.map +1 -1
- package/dist/server/app.d.ts +5 -5
- package/dist/server/app.js +3 -3
- package/dist/server/app.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/rest/auth.d.ts +1 -1
- package/dist/server/rest/auth.js +3 -3
- package/dist/server/rest/auth.js.map +1 -1
- package/dist/server/rest/context.d.ts +2 -2
- package/dist/server/rest/forward.d.ts +2 -2
- package/dist/server/session/store.d.ts +3 -3
- package/dist/server/session/store.js +4 -4
- package/dist/server/session/store.js.map +1 -1
- package/dist/server/stub-client/scenarios.js +8 -8
- package/dist/server/stub-client/scenarios.js.map +1 -1
- package/dist/server/types.d.ts +11 -11
- package/dist/server/types.js +9 -9
- package/dist/server/types.js.map +1 -1
- package/dist/server/ws/hub.d.ts +8 -8
- package/dist/server/ws/hub.js +13 -13
- package/dist/server/ws/hub.js.map +1 -1
- package/dist/server/ws/rpc.d.ts +3 -3
- package/dist/server/ws/rpc.js +4 -4
- package/dist/server/ws/rpc.js.map +1 -1
- package/dist/transport/index.d.ts +1 -1
- package/dist/transport/index.js +3 -3
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/rest.js +1 -1
- package/dist/transport/rest.js.map +1 -1
- package/docs/INSTALL.zh-CN.md +2 -3
- package/package.json +1 -1
- package/skills/uco-setup/SKILL.md +1 -1
- package/skills/unity-editor/references/diagnostics.md +24 -24
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetConfig.cs +132 -132
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetDependencyResolver.cs +237 -237
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetDownloader.cs +82 -82
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Resource/MenuItems.cs +247 -247
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Resource/ToolGroups.cs +153 -153
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/SystemTool/Skills.Create.SkillBody.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Console.GetLogs.cs +95 -95
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Docs.HttpFetcher.cs +139 -139
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Instance.ListAll.cs +72 -72
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/PathReadHelper.cs +106 -106
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Script.Validate.cs +252 -252
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Tests/TestResultCollector.cs +537 -537
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Tests.cs +400 -400
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Branding/ProductInfo.cs +62 -62
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/CopilotServerManager.cs +1034 -1034
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Skills/Skill_InitialSetup.cs +197 -197
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Startup.Editor.cs +201 -201
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Startup.cs +67 -67
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Components/ExtensionPanel.cs +379 -379
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/MenuItems.cs +72 -72
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/UnityCopilotProjectSettingsProvider.cs +64 -64
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/CopilotListWindowBase.cs +393 -393
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/CopilotWindowBase.cs +113 -113
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.Connection.cs +3 -3
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotFeatures.cs +195 -195
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotServer.cs +372 -372
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CreateGUI.cs +354 -354
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.cs +78 -78
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowInitializer.cs +47 -47
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/SerializationCheckWindow.cs +190 -190
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Build.cs +91 -91
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Config.cs +298 -298
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Static.cs +296 -296
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.cs +69 -69
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/PackageUtils.cs +168 -168
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/PrefsKeyMigration.cs +119 -119
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/SafeDefaultsGuard.cs +180 -180
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ScriptUtils.cs +229 -229
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ToolsManifestGenerator.cs +200 -200
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityAuthoringAdapters.cs +1467 -1467
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityAuthoringSafetyReloadGuard.cs +65 -65
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityCopilotUpdateProjectSettings.cs +66 -66
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/ReflectorNet.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.Common.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Converter/Json/Structures/EntityIdConverter.cs +120 -120
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Data/GameObjectMetadata.cs +110 -110
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Data/GameObjectMetadata.pre-Unity.6.5.cs +110 -110
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Unity/Logs/FileLogStorage.cs +547 -547
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Build.cs +243 -243
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Config.cs +175 -175
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.cs +295 -295
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginBuilder.cs +105 -105
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginRuntime.Static.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginRuntime.cs +59 -59
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Utils/EnvironmentUtils.cs +368 -368
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AtomicApi/AtomicApiTestFixtures.cs +99 -99
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AtomicApi/TryModifyAtTests.cs +227 -227
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AuthoringSafetyPilotTests.cs +1050 -1050
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetLegacyMigrationTests.cs +304 -304
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +4 -4
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/BlacklistTypeTests.cs +416 -416
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataFieldScriptableObjectPopulationTests.cs +172 -172
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataFieldScriptableObjectPopulationTests.pre-Unity.6.5.cs +169 -169
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPopulationTests.cs +182 -182
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPopulationTests.pre-Unity.6.5.cs +179 -179
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyPopulationTests.cs +175 -175
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyPopulationTests.pre-Unity.6.5.cs +174 -174
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyScriptableObjectPopulationTests.cs +171 -171
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyScriptableObjectPopulationTests.pre-Unity.6.5.cs +170 -170
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsCreateFolderTests.cs +243 -243
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsMaterialTests.cs +101 -101
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.cs +348 -348
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.pre-Unity.6.5.cs +348 -348
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsShaderTests.cs +194 -194
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/PathBasedToolTests.cs +573 -573
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/PathBasedToolTests.pre-Unity.6.5.cs +513 -513
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotCameraTests.cs +154 -154
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotCameraTests.pre-Unity.6.5.cs +154 -154
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotGameViewTests.cs +164 -164
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotSceneViewTests.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolParameterTests.cs +56 -56
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolThreadSafetyTests.cs +651 -651
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolThreadSafetyTests.pre-Unity.6.5.cs +651 -651
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ToolBatchExecutionIntegrationTests.cs +407 -407
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/{McpPluginTests.cs → UcoPluginTests.cs} +105 -105
- package/vendor/plugin/com.atelierai.unity.copilot/package.json +1 -1
- package/dist/commands/devops/login.d.ts +0 -2
- package/dist/commands/devops/login.js +0 -29
- package/dist/commands/devops/login.js.map +0 -1
- package/dist/commands/devops/setup-mcp.d.ts +0 -2
- package/dist/commands/devops/setup-mcp.js +0 -41
- package/dist/commands/devops/setup-mcp.js.map +0 -1
- package/dist/devops/commands-upstream/bootstrap-local.d.ts +0 -17
- package/dist/devops/commands-upstream/bootstrap-local.js +0 -87
- package/dist/devops/commands-upstream/bootstrap-local.js.map +0 -1
- package/dist/devops/commands-upstream/close.d.ts +0 -57
- package/dist/devops/commands-upstream/close.js +0 -188
- package/dist/devops/commands-upstream/close.js.map +0 -1
- package/dist/devops/commands-upstream/configure.d.ts +0 -2
- package/dist/devops/commands-upstream/configure.js +0 -87
- package/dist/devops/commands-upstream/configure.js.map +0 -1
- package/dist/devops/commands-upstream/create-project.d.ts +0 -2
- package/dist/devops/commands-upstream/create-project.js +0 -43
- package/dist/devops/commands-upstream/create-project.js.map +0 -1
- package/dist/devops/commands-upstream/install-plugin.d.ts +0 -2
- package/dist/devops/commands-upstream/install-plugin.js +0 -64
- package/dist/devops/commands-upstream/install-plugin.js.map +0 -1
- package/dist/devops/commands-upstream/install-unity.d.ts +0 -2
- package/dist/devops/commands-upstream/install-unity.js +0 -72
- package/dist/devops/commands-upstream/install-unity.js.map +0 -1
- package/dist/devops/commands-upstream/login.d.ts +0 -2
- package/dist/devops/commands-upstream/login.js +0 -33
- package/dist/devops/commands-upstream/login.js.map +0 -1
- package/dist/devops/commands-upstream/open.d.ts +0 -32
- package/dist/devops/commands-upstream/open.js +0 -282
- package/dist/devops/commands-upstream/open.js.map +0 -1
- package/dist/devops/commands-upstream/remove-plugin.d.ts +0 -2
- package/dist/devops/commands-upstream/remove-plugin.js +0 -41
- package/dist/devops/commands-upstream/remove-plugin.js.map +0 -1
- package/dist/devops/commands-upstream/run-system-tool.d.ts +0 -1
- package/dist/devops/commands-upstream/run-system-tool.js +0 -13
- package/dist/devops/commands-upstream/run-system-tool.js.map +0 -1
- package/dist/devops/commands-upstream/run-tool-builder.d.ts +0 -25
- package/dist/devops/commands-upstream/run-tool-builder.js +0 -125
- package/dist/devops/commands-upstream/run-tool-builder.js.map +0 -1
- package/dist/devops/commands-upstream/run-tool.d.ts +0 -1
- package/dist/devops/commands-upstream/run-tool.js +0 -13
- package/dist/devops/commands-upstream/run-tool.js.map +0 -1
- package/dist/devops/commands-upstream/setup-mcp.d.ts +0 -2
- package/dist/devops/commands-upstream/setup-mcp.js +0 -68
- package/dist/devops/commands-upstream/setup-mcp.js.map +0 -1
- package/dist/devops/commands-upstream/setup-skills.d.ts +0 -2
- package/dist/devops/commands-upstream/setup-skills.js +0 -167
- package/dist/devops/commands-upstream/setup-skills.js.map +0 -1
- package/dist/devops/commands-upstream/status.d.ts +0 -2
- package/dist/devops/commands-upstream/status.js +0 -87
- package/dist/devops/commands-upstream/status.js.map +0 -1
- package/dist/devops/commands-upstream/update.d.ts +0 -2
- package/dist/devops/commands-upstream/update.js +0 -77
- package/dist/devops/commands-upstream/update.js.map +0 -1
- package/dist/devops/commands-upstream/wait-for-ready.d.ts +0 -2
- package/dist/devops/commands-upstream/wait-for-ready.js +0 -93
- package/dist/devops/commands-upstream/wait-for-ready.js.map +0 -1
- package/dist/devops/lib/setup-mcp.d.ts +0 -35
- package/dist/devops/lib/setup-mcp.js +0 -177
- package/dist/devops/lib/setup-mcp.js.map +0 -1
- package/dist/devops/utils/cloud-login.d.ts +0 -7
- package/dist/devops/utils/cloud-login.js +0 -56
- package/dist/devops/utils/cloud-login.js.map +0 -1
- /package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/{McpPluginTests.cs.meta → UcoPluginTests.cs.meta} +0 -0
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import { platform as nodePlatform } from 'os';
|
|
5
|
-
import * as ui from '../utils/ui.js';
|
|
6
|
-
import { verbose } from '../utils/ui.js';
|
|
7
|
-
import { findUnityProcess } from '../utils/unity-process.js';
|
|
8
|
-
import { readLockfilePid, isProcessAlive, sendGracefulShutdown, sendForceKill, waitForExit, } from '../utils/unity-shutdown.js';
|
|
9
|
-
const DEFAULT_TIMEOUT_SECONDS = 30;
|
|
10
|
-
/**
|
|
11
|
-
* Resolve the project path argument to an absolute, canonical path.
|
|
12
|
-
*
|
|
13
|
-
* Mirrors the convention used by `open` / `wait-for-ready` — accepts a
|
|
14
|
-
* positional argument or `process.cwd()` fallback, normalises symlinks where
|
|
15
|
-
* possible, and trims any trailing path separator. Exported for unit tests.
|
|
16
|
-
*/
|
|
17
|
-
export function resolveCloseProjectPath(positionalPath, cwd) {
|
|
18
|
-
const explicit = positionalPath ?? cwd;
|
|
19
|
-
let resolved = path.resolve(explicit);
|
|
20
|
-
// realpathSync collapses symlinks, ".." segments, and trailing separators
|
|
21
|
-
// when the path exists. When it does not, fall through to the resolved
|
|
22
|
-
// form so the caller can produce a "path does not exist" error.
|
|
23
|
-
try {
|
|
24
|
-
resolved = fs.realpathSync(resolved);
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
// Path may not exist — let the caller decide what to do.
|
|
28
|
-
}
|
|
29
|
-
return resolved;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Returns true when `<projectPath>/ProjectSettings/ProjectVersion.txt` exists.
|
|
33
|
-
*
|
|
34
|
-
* The issue's acceptance criteria require refusing to act on any path that
|
|
35
|
-
* does not look like a Unity project root (`ProjectVersion.txt` is the
|
|
36
|
-
* canonical marker). This is intentionally narrower than the `open`
|
|
37
|
-
* subcommand's check — the goal here is to defend against accidental
|
|
38
|
-
* "kill all Unity processes on host" invocations, so a positive ID of
|
|
39
|
-
* "this is a Unity project" is required.
|
|
40
|
-
*
|
|
41
|
-
* Exported for unit tests.
|
|
42
|
-
*/
|
|
43
|
-
export function isUnityProjectRoot(projectPath) {
|
|
44
|
-
return fs.existsSync(path.join(projectPath, 'ProjectSettings', 'ProjectVersion.txt'));
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Parse a positive-integer `--timeout` value (seconds). Returns the parsed
|
|
48
|
-
* value, or `null` when the input is not a valid positive integer.
|
|
49
|
-
*
|
|
50
|
-
* The `undefined` branch falls back to the default for ergonomic
|
|
51
|
-
* direct-call use (e.g., unit tests). The action handler never reaches it
|
|
52
|
-
* because commander always materialises the configured default string.
|
|
53
|
-
*
|
|
54
|
-
* Exported for unit tests.
|
|
55
|
-
*/
|
|
56
|
-
export function parseTimeoutSeconds(raw) {
|
|
57
|
-
if (raw === undefined)
|
|
58
|
-
return DEFAULT_TIMEOUT_SECONDS;
|
|
59
|
-
const parsed = Number(raw);
|
|
60
|
-
if (!Number.isInteger(parsed) || parsed <= 0)
|
|
61
|
-
return null;
|
|
62
|
-
return parsed;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Resolve the editor PID for a given project path.
|
|
66
|
-
*
|
|
67
|
-
* Reads `<project>/Temp/UnityLockfile` (4 bytes LE uint32) and enumerates
|
|
68
|
-
* Unity processes by command line, then prefers the lockfile PID when it
|
|
69
|
-
* is alive and matches the enumerated process for this project (handles
|
|
70
|
-
* stale lockfiles); otherwise uses the enumerated PID.
|
|
71
|
-
*
|
|
72
|
-
* Symlink/realpath handling: `resolveCloseProjectPath` canonicalises via
|
|
73
|
-
* `realpathSync` while `findUnityProcess` only `path.resolve`s the cmdline
|
|
74
|
-
* `-projectPath` argument. If Unity was launched via a symlink, the first
|
|
75
|
-
* lookup misses. We retry against the un-canonicalised form so a symlinked
|
|
76
|
-
* launch path doesn't silently degrade close to a no-op.
|
|
77
|
-
*
|
|
78
|
-
* Returns `null` when no live editor matches the project. Exported for tests.
|
|
79
|
-
*/
|
|
80
|
-
export function resolveEditorPid(projectPath, platform = nodePlatform()) {
|
|
81
|
-
const lockPid = readLockfilePid(projectPath);
|
|
82
|
-
// Enumerate Unity processes once. `findUnityProcess` shells out (3s timeout
|
|
83
|
-
// on Windows via PowerShell+CIM, 5s on POSIX via `ps`), so calling it twice
|
|
84
|
-
// on the stale-lockfile path used to roughly double close latency.
|
|
85
|
-
let proc = findUnityProcess(projectPath);
|
|
86
|
-
// Symlink fallback: if the canonical realpath form found no process, retry
|
|
87
|
-
// with `path.resolve` only (no realpath collapse) — that matches what
|
|
88
|
-
// `findUnityProcess` derives from the cmdline `-projectPath` argument.
|
|
89
|
-
if (!proc) {
|
|
90
|
-
const resolvedNoRealpath = path.resolve(projectPath);
|
|
91
|
-
if (resolvedNoRealpath !== projectPath) {
|
|
92
|
-
proc = findUnityProcess(resolvedNoRealpath);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (lockPid !== null && isProcessAlive(lockPid, platform)) {
|
|
96
|
-
if (proc && proc.pid === lockPid) {
|
|
97
|
-
verbose(`Lockfile PID ${lockPid} confirmed via process enumeration`);
|
|
98
|
-
return lockPid;
|
|
99
|
-
}
|
|
100
|
-
// Lockfile alive but no matching enumerated process — the lockfile may
|
|
101
|
-
// still be authoritative if the asymmetry is purely realpath/symlink
|
|
102
|
-
// related (process listed under symlink path while we queried by realpath).
|
|
103
|
-
// Trust the live lockfile PID in that case rather than discarding it.
|
|
104
|
-
if (!proc) {
|
|
105
|
-
verbose(`Lockfile PID ${lockPid} alive but no enumerated match — using lockfile PID (likely symlink/path mismatch)`);
|
|
106
|
-
return lockPid;
|
|
107
|
-
}
|
|
108
|
-
verbose(`Lockfile PID ${lockPid} did not match enumerated Unity process for project — treating as stale`);
|
|
109
|
-
}
|
|
110
|
-
return proc ? proc.pid : null;
|
|
111
|
-
}
|
|
112
|
-
export const closeCommand = new Command('close')
|
|
113
|
-
.description('Gracefully terminate the Unity Editor instance running for a given project path')
|
|
114
|
-
.argument('[path]', 'Path to the Unity project (defaults to current directory)')
|
|
115
|
-
.option('--timeout-seconds <seconds>', `Polite-quit timeout in seconds (canonical; default: ${DEFAULT_TIMEOUT_SECONDS})`)
|
|
116
|
-
.option('--timeout <seconds>', 'Deprecated alias for --timeout-seconds; value is seconds', String(DEFAULT_TIMEOUT_SECONDS))
|
|
117
|
-
.option('--force', 'Hard-kill the Editor if it does not exit within --timeout')
|
|
118
|
-
.action(async (positionalPath, options) => {
|
|
119
|
-
const projectPath = resolveCloseProjectPath(positionalPath, process.cwd());
|
|
120
|
-
verbose(`close invoked for project: ${projectPath}`);
|
|
121
|
-
if (!fs.existsSync(projectPath)) {
|
|
122
|
-
ui.error(`Project path does not exist: ${projectPath}`);
|
|
123
|
-
process.exit(1);
|
|
124
|
-
}
|
|
125
|
-
if (!isUnityProjectRoot(projectPath)) {
|
|
126
|
-
ui.error(`Not a Unity project root: ${projectPath}`);
|
|
127
|
-
process.exit(1);
|
|
128
|
-
}
|
|
129
|
-
const timeoutRaw = options.timeoutSeconds ?? options.timeout;
|
|
130
|
-
const timeoutSeconds = parseTimeoutSeconds(timeoutRaw);
|
|
131
|
-
if (timeoutSeconds === null) {
|
|
132
|
-
ui.error(`Invalid timeout value: "${timeoutRaw}". Must be a positive integer (seconds).`);
|
|
133
|
-
process.exit(1);
|
|
134
|
-
}
|
|
135
|
-
const platform = nodePlatform();
|
|
136
|
-
const pid = resolveEditorPid(projectPath, platform);
|
|
137
|
-
if (pid === null) {
|
|
138
|
-
ui.success(`no running Editor for project at ${projectPath}`);
|
|
139
|
-
process.exit(0);
|
|
140
|
-
}
|
|
141
|
-
ui.heading('Closing Unity Editor');
|
|
142
|
-
ui.label('Project', projectPath);
|
|
143
|
-
ui.label('PID', String(pid));
|
|
144
|
-
ui.label('Timeout', `${timeoutSeconds}s`);
|
|
145
|
-
ui.label('Force', options.force ? 'yes' : 'no');
|
|
146
|
-
ui.divider();
|
|
147
|
-
// TOCTOU window: between resolveEditorPid returning and the signal call
|
|
148
|
-
// below, the original Unity process could exit and the OS could reuse
|
|
149
|
-
// the same numeric PID for an unrelated process (more likely on POSIX,
|
|
150
|
-
// where PIDs cycle aggressively). We accept the residual risk — the
|
|
151
|
-
// lockfile cross-check above already narrows it, holding a lock across
|
|
152
|
-
// a spawned Editor's lifetime is impractical, and the signals we send
|
|
153
|
-
// (SIGTERM / WM_CLOSE) are best-effort, not destructive.
|
|
154
|
-
const spinner = ui.startSpinner(`Sending polite-quit to PID ${pid}...`);
|
|
155
|
-
const sent = sendGracefulShutdown(pid, platform);
|
|
156
|
-
if (!sent) {
|
|
157
|
-
spinner.error(`Failed to deliver polite-quit signal to PID ${pid}`);
|
|
158
|
-
process.exit(1);
|
|
159
|
-
}
|
|
160
|
-
spinner.text = `Waiting up to ${timeoutSeconds}s for PID ${pid} to exit...`;
|
|
161
|
-
const timeoutMs = timeoutSeconds * 1000;
|
|
162
|
-
const exited = await waitForExit(pid, timeoutMs, platform);
|
|
163
|
-
if (exited) {
|
|
164
|
-
spinner.success(`Unity Editor (PID ${pid}) exited cleanly`);
|
|
165
|
-
process.exit(0);
|
|
166
|
-
}
|
|
167
|
-
if (!options.force) {
|
|
168
|
-
spinner.error(`Unity Editor (PID ${pid}) did not exit within ${timeoutSeconds}s. ` +
|
|
169
|
-
`Re-run with --force to hard-kill, or close it manually.`);
|
|
170
|
-
process.exit(1);
|
|
171
|
-
}
|
|
172
|
-
spinner.text = `Force-killing PID ${pid}...`;
|
|
173
|
-
const killed = sendForceKill(pid, platform);
|
|
174
|
-
if (!killed) {
|
|
175
|
-
spinner.error(`Failed to force-kill PID ${pid}`);
|
|
176
|
-
process.exit(1);
|
|
177
|
-
}
|
|
178
|
-
// Brief secondary wait so we report a true terminal state — the OS may
|
|
179
|
-
// need a moment to reap the process even after SIGKILL / `taskkill /F`.
|
|
180
|
-
const reaped = await waitForExit(pid, 5000, platform);
|
|
181
|
-
if (reaped) {
|
|
182
|
-
spinner.success(`Unity Editor (PID ${pid}) force-killed`);
|
|
183
|
-
process.exit(0);
|
|
184
|
-
}
|
|
185
|
-
spinner.error(`Unity Editor (PID ${pid}) is still alive after force-kill`);
|
|
186
|
-
process.exit(1);
|
|
187
|
-
});
|
|
188
|
-
//# sourceMappingURL=close.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"close.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/close.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as ui from '../utils/ui.js';
|
|
4
|
-
import { verbose } from '../utils/ui.js';
|
|
5
|
-
import { configure } from '../lib/configure.js';
|
|
6
|
-
function parseCommaSeparated(value) {
|
|
7
|
-
return value.split(',').map((s) => s.trim()).filter(Boolean);
|
|
8
|
-
}
|
|
9
|
-
function buildAction(enable, disable, enableAll, disableAll) {
|
|
10
|
-
if (!enable && !disable && !enableAll && !disableAll)
|
|
11
|
-
return undefined;
|
|
12
|
-
return {
|
|
13
|
-
enableNames: enable,
|
|
14
|
-
disableNames: disable,
|
|
15
|
-
enableAll,
|
|
16
|
-
disableAll,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export const configureCommand = new Command('configure')
|
|
20
|
-
.description('Configure MCP tools, prompts, and resources in uco-config.json')
|
|
21
|
-
.argument('[path]', 'Path to the Unity project')
|
|
22
|
-
.option('--path <path>', 'Path to the Unity project')
|
|
23
|
-
.option('--enable-tools <names>', 'Enable specific tools (comma-separated)', parseCommaSeparated)
|
|
24
|
-
.option('--disable-tools <names>', 'Disable specific tools (comma-separated)', parseCommaSeparated)
|
|
25
|
-
.option('--enable-all-tools', 'Enable all tools')
|
|
26
|
-
.option('--disable-all-tools', 'Disable all tools')
|
|
27
|
-
.option('--enable-prompts <names>', 'Enable specific prompts (comma-separated)', parseCommaSeparated)
|
|
28
|
-
.option('--disable-prompts <names>', 'Disable specific prompts (comma-separated)', parseCommaSeparated)
|
|
29
|
-
.option('--enable-all-prompts', 'Enable all prompts')
|
|
30
|
-
.option('--disable-all-prompts', 'Disable all prompts')
|
|
31
|
-
.option('--enable-resources <names>', 'Enable specific resources (comma-separated)', parseCommaSeparated)
|
|
32
|
-
.option('--disable-resources <names>', 'Disable specific resources (comma-separated)', parseCommaSeparated)
|
|
33
|
-
.option('--enable-all-resources', 'Enable all resources')
|
|
34
|
-
.option('--disable-all-resources', 'Disable all resources')
|
|
35
|
-
.option('--list', 'List current configuration')
|
|
36
|
-
.action(async (positionalPath, options) => {
|
|
37
|
-
const resolvedPath = positionalPath ?? options.path;
|
|
38
|
-
if (!resolvedPath) {
|
|
39
|
-
ui.error('Path is required. Usage: unity-mcp-cli configure <path> or --path <path>');
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
const projectPath = path.resolve(resolvedPath);
|
|
43
|
-
verbose(`Loading config for project: ${projectPath}`);
|
|
44
|
-
// `--list` must be read-only: previously this command short-
|
|
45
|
-
// circuited before applying any enable/disable flags. Preserve
|
|
46
|
-
// that semantics by suppressing the mutating actions whenever
|
|
47
|
-
// `options.list` is set, regardless of other flags.
|
|
48
|
-
const toolsAction = buildAction(options.enableTools, options.disableTools, options.enableAllTools, options.disableAllTools);
|
|
49
|
-
const promptsAction = buildAction(options.enablePrompts, options.disablePrompts, options.enableAllPrompts, options.disableAllPrompts);
|
|
50
|
-
const resourcesAction = buildAction(options.enableResources, options.disableResources, options.enableAllResources, options.disableAllResources);
|
|
51
|
-
const result = await configure({
|
|
52
|
-
unityProjectPath: projectPath,
|
|
53
|
-
tools: options.list ? undefined : toolsAction,
|
|
54
|
-
prompts: options.list ? undefined : promptsAction,
|
|
55
|
-
resources: options.list ? undefined : resourcesAction,
|
|
56
|
-
});
|
|
57
|
-
if (result.kind === 'failure') {
|
|
58
|
-
ui.error(result.error.message);
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
// Narrowed: result.kind === 'success' below — `snapshot` is
|
|
62
|
-
// non-optional.
|
|
63
|
-
if (options.list) {
|
|
64
|
-
ui.heading('Current configuration');
|
|
65
|
-
ui.label('Host', result.snapshot.host ?? 'not set');
|
|
66
|
-
ui.label('Keep Connected', String(result.snapshot.keepConnected ?? false));
|
|
67
|
-
ui.label('Transport', result.snapshot.transportMethod ?? 'streamableHttp');
|
|
68
|
-
ui.label('Auth', result.snapshot.authOption ?? 'none');
|
|
69
|
-
const printFeatures = (featureLabel, features) => {
|
|
70
|
-
ui.heading(featureLabel);
|
|
71
|
-
if (features.length === 0) {
|
|
72
|
-
ui.info('(none configured - all enabled by default)');
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
for (const f of features) {
|
|
76
|
-
ui.featureRow(f.name, f.enabled);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
printFeatures('Tools', result.snapshot.tools);
|
|
80
|
-
printFeatures('Prompts', result.snapshot.prompts);
|
|
81
|
-
printFeatures('Resources', result.snapshot.resources);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
verbose('Writing updated configuration');
|
|
85
|
-
ui.success('Configuration updated successfully.');
|
|
86
|
-
});
|
|
87
|
-
//# sourceMappingURL=configure.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,WAAW,CAClB,MAA4B,EAC5B,OAA6B,EAC7B,SAA8B,EAC9B,UAA+B;IAE/B,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IACvE,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,OAAO;QACrB,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,gEAAgE,CAAC;KAC7E,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,wBAAwB,EAAE,yCAAyC,EAAE,mBAAmB,CAAC;KAChG,MAAM,CAAC,yBAAyB,EAAE,0CAA0C,EAAE,mBAAmB,CAAC;KAClG,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;KAChD,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;KAClD,MAAM,CAAC,0BAA0B,EAAE,2CAA2C,EAAE,mBAAmB,CAAC;KACpG,MAAM,CAAC,2BAA2B,EAAE,4CAA4C,EAAE,mBAAmB,CAAC;KACtG,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;KACtD,MAAM,CAAC,4BAA4B,EAAE,6CAA6C,EAAE,mBAAmB,CAAC;KACxG,MAAM,CAAC,6BAA6B,EAAE,8CAA8C,EAAE,mBAAmB,CAAC;KAC1G,MAAM,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;KACxD,MAAM,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;KAC1D,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAelD,EAAE,EAAE;IACH,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/C,OAAO,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;IAEtD,6DAA6D;IAC7D,+DAA+D;IAC/D,8DAA8D;IAC9D,oDAAoD;IACpD,MAAM,WAAW,GAAG,WAAW,CAC7B,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,eAAe,CACxB,CAAC;IACF,MAAM,aAAa,GAAG,WAAW,CAC/B,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,gBAAgB,EACxB,OAAO,CAAC,iBAAiB,CAC1B,CAAC;IACF,MAAM,eAAe,GAAG,WAAW,CACjC,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,gBAAgB,EACxB,OAAO,CAAC,kBAAkB,EAC1B,OAAO,CAAC,mBAAmB,CAC5B,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;QAC7B,gBAAgB,EAAE,WAAW;QAC7B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;QAC7C,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;QACjD,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe;KACtD,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4DAA4D;IAC5D,gBAAgB;IAChB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACpC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;QACpD,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC;QAC3E,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,eAAe,IAAI,gBAAgB,CAAC,CAAC;QAC3E,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC;QAEvD,MAAM,aAAa,GAAG,CAAC,YAAoB,EAAE,QAA8C,EAAE,EAAE;YAC7F,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,EAAE,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC;QAEF,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9C,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClD,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,+BAA+B,CAAC,CAAC;IACzC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { ensureUnityHub, createProject, listInstalledEditors, findHighestEditor } from '../utils/unity-hub.js';
|
|
4
|
-
import * as ui from '../utils/ui.js';
|
|
5
|
-
import { verbose } from '../utils/ui.js';
|
|
6
|
-
export const createProjectCommand = new Command('create-project')
|
|
7
|
-
.description('Create a new Unity project')
|
|
8
|
-
.argument('[path]', 'Path where the project will be created')
|
|
9
|
-
.option('--path <path>', 'Path where the project will be created')
|
|
10
|
-
.option('--unity <version>', 'Unity Editor version to use')
|
|
11
|
-
.action(async (positionalPath, options) => {
|
|
12
|
-
const resolvedPath = positionalPath ?? options.path;
|
|
13
|
-
if (!resolvedPath) {
|
|
14
|
-
ui.error('Path is required. Usage: unity-mcp-cli create-project <path> or --path <path>');
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
const spinner = ui.startSpinner('Locating Unity Hub...');
|
|
18
|
-
let hubPath;
|
|
19
|
-
try {
|
|
20
|
-
hubPath = await ensureUnityHub();
|
|
21
|
-
}
|
|
22
|
-
catch (err) {
|
|
23
|
-
spinner.error('Failed to locate Unity Hub');
|
|
24
|
-
throw err;
|
|
25
|
-
}
|
|
26
|
-
spinner.success('Unity Hub located');
|
|
27
|
-
let editorVersion = options.unity;
|
|
28
|
-
if (!editorVersion) {
|
|
29
|
-
const editors = listInstalledEditors(hubPath);
|
|
30
|
-
if (editors.length === 0) {
|
|
31
|
-
ui.error('No Unity editors installed. Install one with: unity-mcp-cli install-unity [version]');
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
const highest = findHighestEditor(editors);
|
|
35
|
-
editorVersion = highest.version;
|
|
36
|
-
ui.info(`No Unity version specified, using highest installed: ${editorVersion}`);
|
|
37
|
-
}
|
|
38
|
-
const projectPath = path.resolve(resolvedPath);
|
|
39
|
-
verbose(`Creating project at: ${projectPath} with editor version: ${editorVersion}`);
|
|
40
|
-
verbose(`Unity Hub path: ${hubPath}`);
|
|
41
|
-
createProject(hubPath, projectPath, editorVersion);
|
|
42
|
-
});
|
|
43
|
-
//# sourceMappingURL=create-project.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/create-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/G,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,QAAQ,EAAE,wCAAwC,CAAC;KAC5D,MAAM,CAAC,eAAe,EAAE,wCAAwC,CAAC;KACjE,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAA0C,EAAE,EAAE;IAC/F,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;IACzD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAErC,IAAI,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IAElC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,EAAE,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;YAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,EAAE,CAAC,IAAI,CAAC,wDAAwD,aAAa,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/C,OAAO,CAAC,wBAAwB,WAAW,yBAAyB,aAAa,EAAE,CAAC,CAAC;IACrF,OAAO,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;IACtC,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as ui from '../utils/ui.js';
|
|
4
|
-
import { verbose } from '../utils/ui.js';
|
|
5
|
-
import { installPlugin } from '../lib/install-plugin.js';
|
|
6
|
-
export const installPluginCommand = new Command('install-plugin')
|
|
7
|
-
.description('Install Unity-MCP plugin into a Unity project')
|
|
8
|
-
.argument('[path]', 'Path to the Unity project')
|
|
9
|
-
.option('--path <path>', 'Path to the Unity project')
|
|
10
|
-
.option('--plugin-version <version>', 'Plugin version to install (default: latest)')
|
|
11
|
-
.action(async (positionalPath, options) => {
|
|
12
|
-
const resolvedPath = positionalPath ?? options.path;
|
|
13
|
-
if (!resolvedPath) {
|
|
14
|
-
ui.error('Path is required. Usage: unity-mcp-cli install-plugin <path> or --path <path>');
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
const projectPath = path.resolve(resolvedPath);
|
|
18
|
-
// Wire the library's progress events back into the CLI's chalk-
|
|
19
|
-
// styled ui so the terminal experience stays identical.
|
|
20
|
-
let spinner;
|
|
21
|
-
if (!options.pluginVersion) {
|
|
22
|
-
spinner = ui.startSpinner('Resolving latest plugin version...');
|
|
23
|
-
}
|
|
24
|
-
const result = await installPlugin({
|
|
25
|
-
unityProjectPath: projectPath,
|
|
26
|
-
version: options.pluginVersion,
|
|
27
|
-
onProgress: (event) => {
|
|
28
|
-
if (event.phase === 'dependencies-resolved' && spinner) {
|
|
29
|
-
spinner.success(`Resolved plugin version: ${event.version}`);
|
|
30
|
-
spinner = undefined;
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (event.phase === 'manifest-patched') {
|
|
34
|
-
// Preserve the historical `ui.success("Updated …")` vs
|
|
35
|
-
// `ui.info("manifest.json is already up to date.")` split
|
|
36
|
-
// that the shared manifest helpers used to print directly.
|
|
37
|
-
if (event.message.startsWith('Updated ')) {
|
|
38
|
-
ui.success(event.message);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
ui.info(event.message);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
if (result.kind === 'failure') {
|
|
47
|
-
if (spinner) {
|
|
48
|
-
spinner.error('Failed to resolve plugin version');
|
|
49
|
-
spinner = undefined;
|
|
50
|
-
}
|
|
51
|
-
ui.error(result.error.message);
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
54
|
-
// Narrowed: result.kind === 'success' below — `installedVersion`
|
|
55
|
-
// and `manifestPath` are non-optional.
|
|
56
|
-
verbose(`Plugin version: ${result.installedVersion} (explicit: ${!!options.pluginVersion})`);
|
|
57
|
-
verbose(`Manifest path: ${result.manifestPath}`);
|
|
58
|
-
ui.info(`Installing Unity-MCP plugin v${result.installedVersion} into: ${projectPath}`);
|
|
59
|
-
for (const warning of result.warnings) {
|
|
60
|
-
ui.warn(warning);
|
|
61
|
-
}
|
|
62
|
-
ui.success('Done! Open the project in Unity Editor to complete installation.');
|
|
63
|
-
});
|
|
64
|
-
//# sourceMappingURL=install-plugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/install-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as fs from 'fs';
|
|
4
|
-
import { ensureUnityHub, installEditor, listInstalledEditors, listAvailableReleases, findLatestStableRelease } from '../utils/unity-hub.js';
|
|
5
|
-
import { getProjectEditorVersion } from '../utils/unity-editor.js';
|
|
6
|
-
import * as ui from '../utils/ui.js';
|
|
7
|
-
import { verbose } from '../utils/ui.js';
|
|
8
|
-
export const installUnityCommand = new Command('install-unity')
|
|
9
|
-
.description('Install Unity Editor via Unity Hub')
|
|
10
|
-
.argument('[version]', 'Unity Editor version to install (e.g. 6000.3.1f1). Omit to install latest stable release.')
|
|
11
|
-
.option('--path <path>', 'Read version from an existing Unity project')
|
|
12
|
-
.action(async (positionalVersion, options) => {
|
|
13
|
-
verbose(`install-unity invoked with version=${positionalVersion ?? '(auto)'}, path=${options.path ?? '(none)'}`);
|
|
14
|
-
const spinner = ui.startSpinner('Locating Unity Hub...');
|
|
15
|
-
let hubPath;
|
|
16
|
-
try {
|
|
17
|
-
hubPath = await ensureUnityHub();
|
|
18
|
-
}
|
|
19
|
-
catch (err) {
|
|
20
|
-
spinner.error('Failed to locate Unity Hub');
|
|
21
|
-
throw err;
|
|
22
|
-
}
|
|
23
|
-
spinner.success('Unity Hub located');
|
|
24
|
-
verbose(`Unity Hub path: ${hubPath}`);
|
|
25
|
-
let version = positionalVersion;
|
|
26
|
-
if (!version && options.path) {
|
|
27
|
-
const projectPath = path.resolve(options.path);
|
|
28
|
-
if (!fs.existsSync(projectPath)) {
|
|
29
|
-
ui.error(`Project path does not exist: ${projectPath}`);
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
33
|
-
if (version) {
|
|
34
|
-
ui.info(`Detected editor version from project: ${version}`);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
ui.error('Could not read editor version from ProjectSettings/ProjectVersion.txt');
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Fetch available releases once — reused for latest-stable lookup and install
|
|
42
|
-
let releases;
|
|
43
|
-
// No version specified — resolve latest stable release from Unity Hub
|
|
44
|
-
if (!version) {
|
|
45
|
-
releases = listAvailableReleases(hubPath);
|
|
46
|
-
const latest = findLatestStableRelease(releases);
|
|
47
|
-
if (!latest) {
|
|
48
|
-
ui.error('No stable releases found');
|
|
49
|
-
const editors = listInstalledEditors(hubPath);
|
|
50
|
-
if (editors.length > 0) {
|
|
51
|
-
ui.heading('Currently installed editors:');
|
|
52
|
-
for (const editor of editors) {
|
|
53
|
-
ui.label(editor.version, editor.path);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
ui.success(`Latest stable release: ${latest.version}`);
|
|
59
|
-
version = latest.version;
|
|
60
|
-
}
|
|
61
|
-
// Check if already installed
|
|
62
|
-
const editors = listInstalledEditors(hubPath);
|
|
63
|
-
const alreadyInstalled = editors.find((e) => e.version === version);
|
|
64
|
-
if (alreadyInstalled) {
|
|
65
|
-
ui.success(`Unity Editor ${version} is already installed at: ${alreadyInstalled.path}`);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
verbose(`Installing Unity Editor version: ${version}`);
|
|
69
|
-
await installEditor(hubPath, version, releases);
|
|
70
|
-
ui.success(`Unity Editor ${version} installed successfully`);
|
|
71
|
-
});
|
|
72
|
-
//# sourceMappingURL=install-unity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-unity.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/install-unity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2024 Ivan Murzak. All rights reserved.
|
|
2
|
-
// Licensed under the Apache License, Version 2.0.
|
|
3
|
-
import { Command } from 'commander';
|
|
4
|
-
import * as ui from '../utils/ui.js';
|
|
5
|
-
import { verbose } from '../utils/ui.js';
|
|
6
|
-
import { resolveProjectPath } from '../utils/connection.js';
|
|
7
|
-
import { getOrCreateConfig, CLOUD_SERVER_BASE_URL } from '../utils/config.js';
|
|
8
|
-
import { runCloudLogin } from '../utils/cloud-login.js';
|
|
9
|
-
export const loginCommand = new Command('login')
|
|
10
|
-
.description('Authenticate with the Unity-MCP cloud server')
|
|
11
|
-
.argument('[path]', 'Unity project path (defaults to cwd)')
|
|
12
|
-
.option('--force', 'Re-authenticate even if already logged in')
|
|
13
|
-
.action(async (positionalPath, options) => {
|
|
14
|
-
const projectPath = resolveProjectPath(positionalPath, options);
|
|
15
|
-
verbose(`Project path: ${projectPath}`);
|
|
16
|
-
const config = getOrCreateConfig(projectPath);
|
|
17
|
-
if (config.cloudToken && !options.force) {
|
|
18
|
-
ui.success('Already authenticated with cloud server.');
|
|
19
|
-
ui.info('Use --force to re-authenticate.');
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
ui.heading('Cloud Authentication');
|
|
23
|
-
ui.label('Server', CLOUD_SERVER_BASE_URL);
|
|
24
|
-
ui.divider();
|
|
25
|
-
const token = await runCloudLogin(projectPath);
|
|
26
|
-
if (token) {
|
|
27
|
-
ui.success('Authentication complete. Cloud token saved to project config.');
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
//# sourceMappingURL=login.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/login.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,kDAAkD;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAOxD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,8CAA8C,CAAC;KAC3D,QAAQ,CAAC,QAAQ,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;KAC9D,MAAM,CACL,KAAK,EACH,cAAkC,EAClC,OAAqB,EACrB,EAAE;IACF,MAAM,WAAW,GAAG,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;QACvD,EAAE,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACnC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAC1C,EAAE,CAAC,OAAO,EAAE,CAAC;IAEb,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,KAAK,EAAE,CAAC;QACV,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CACF,CAAC"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { isUnityProjectDir as libIsUnityProjectDir } from '../lib/open.js';
|
|
3
|
-
/**
|
|
4
|
-
* Resolve the project path from the positional argument, `--path` option, or
|
|
5
|
-
* the current working directory when neither is provided.
|
|
6
|
-
*
|
|
7
|
-
* Re-exported from the library helper so existing tests continue to import
|
|
8
|
-
* `resolveOpenProjectPath` from this module.
|
|
9
|
-
*/
|
|
10
|
-
export interface ResolveProjectPathResult {
|
|
11
|
-
/** Absolute, resolved path to the project directory. */
|
|
12
|
-
projectPath: string;
|
|
13
|
-
/** True if no path was supplied and we fell back to `process.cwd()`. */
|
|
14
|
-
usedCwdFallback: boolean;
|
|
15
|
-
}
|
|
16
|
-
export declare function resolveOpenProjectPath(positionalPath: string | undefined, optionPath: string | undefined, cwd: string): ResolveProjectPathResult;
|
|
17
|
-
/** Re-export for backward compatibility with existing tests. */
|
|
18
|
-
export declare const isUnityProjectDir: typeof libIsUnityProjectDir;
|
|
19
|
-
/**
|
|
20
|
-
* Parse a `--xxx <ms>` style commander option as a positive integer.
|
|
21
|
-
* Commander stores the raw string (including the literal default
|
|
22
|
-
* supplied to `.option()`), so a parse-and-validate step is required
|
|
23
|
-
* before the value can flow into the library. Exits with code 1 on
|
|
24
|
-
* a non-numeric / non-positive value — matches the CLI's existing
|
|
25
|
-
* error-handling pattern for malformed flag values (`--auth`,
|
|
26
|
-
* `--transport`, `--start-server`).
|
|
27
|
-
*
|
|
28
|
-
* Exported for unit tests; the CLI wrapper is the only production
|
|
29
|
-
* caller.
|
|
30
|
-
*/
|
|
31
|
-
export declare function parsePositiveIntFlag(raw: string | undefined, flagName: string, fallback: number): number;
|
|
32
|
-
export declare const openCommand: Command;
|