@atelierai/uco 1.0.6 → 1.0.7

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.
Files changed (204) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +7 -8
  3. package/bin/server.mjs +1 -1
  4. package/bin/stub-plugin.mjs +3 -3
  5. package/dist/codegen/coerce.js +1 -1
  6. package/dist/codegen/coerce.js.map +1 -1
  7. package/dist/codegen/emit.js +2 -2
  8. package/dist/codegen/emit.js.map +1 -1
  9. package/dist/codegen/refs.js +1 -1
  10. package/dist/codegen/refs.js.map +1 -1
  11. package/dist/codegen/types.js +1 -1
  12. package/dist/codegen/types.js.map +1 -1
  13. package/dist/commands/call.js +1 -1
  14. package/dist/commands/call.js.map +1 -1
  15. package/dist/commands/devops/configure.js +1 -1
  16. package/dist/commands/devops/configure.js.map +1 -1
  17. package/dist/commands/devops/index.js +0 -4
  18. package/dist/commands/devops/index.js.map +1 -1
  19. package/dist/commands/devops/install-plugin.js +1 -1
  20. package/dist/commands/devops/install-plugin.js.map +1 -1
  21. package/dist/commands/devops/open.js +7 -7
  22. package/dist/commands/devops/open.js.map +1 -1
  23. package/dist/commands/devops/status.js +3 -3
  24. package/dist/commands/devops/status.js.map +1 -1
  25. package/dist/commands/exec.js +1 -1
  26. package/dist/commands/exec.js.map +1 -1
  27. package/dist/commands/install.js +2 -2
  28. package/dist/commands/install.js.map +1 -1
  29. package/dist/commands/prompt.js +2 -2
  30. package/dist/commands/prompt.js.map +1 -1
  31. package/dist/commands/resource.js +2 -2
  32. package/dist/commands/resource.js.map +1 -1
  33. package/dist/commands/update.js +1 -26
  34. package/dist/commands/update.js.map +1 -1
  35. package/dist/config/port.js +2 -2
  36. package/dist/config/port.js.map +1 -1
  37. package/dist/config/resolve.d.ts +1 -2
  38. package/dist/config/resolve.js +0 -12
  39. package/dist/config/resolve.js.map +1 -1
  40. package/dist/devops/lib/configure.d.ts +1 -1
  41. package/dist/devops/lib/configure.js +2 -2
  42. package/dist/devops/lib/configure.js.map +1 -1
  43. package/dist/devops/lib/install-plugin.d.ts +1 -1
  44. package/dist/devops/lib/install-plugin.js +1 -1
  45. package/dist/devops/lib/install-plugin.js.map +1 -1
  46. package/dist/devops/lib/install.d.ts +2 -2
  47. package/dist/devops/lib/install.js +5 -5
  48. package/dist/devops/lib/install.js.map +1 -1
  49. package/dist/devops/lib/open.js +11 -32
  50. package/dist/devops/lib/open.js.map +1 -1
  51. package/dist/devops/lib/remove-plugin.d.ts +1 -1
  52. package/dist/devops/lib/remove-plugin.js +3 -3
  53. package/dist/devops/lib/remove-plugin.js.map +1 -1
  54. package/dist/devops/lib/run-tool.d.ts +2 -2
  55. package/dist/devops/lib/run-tool.js +2 -2
  56. package/dist/devops/lib/types.d.ts +17 -54
  57. package/dist/devops/lib/types.js +2 -2
  58. package/dist/devops/lib/types.js.map +1 -1
  59. package/dist/devops/lib/update.d.ts +0 -15
  60. package/dist/devops/lib/update.js +2 -91
  61. package/dist/devops/lib/update.js.map +1 -1
  62. package/dist/devops/utils/agents.d.ts +0 -28
  63. package/dist/devops/utils/agents.js +0 -462
  64. package/dist/devops/utils/agents.js.map +1 -1
  65. package/dist/devops/utils/config.d.ts +9 -18
  66. package/dist/devops/utils/config.js +7 -20
  67. package/dist/devops/utils/config.js.map +1 -1
  68. package/dist/devops/utils/editor-cache.js +1 -1
  69. package/dist/devops/utils/editor-cache.js.map +1 -1
  70. package/dist/devops/utils/launch-error-dismiss.d.ts +2 -2
  71. package/dist/devops/utils/launch-error-dismiss.js +5 -5
  72. package/dist/devops/utils/manifest.d.ts +2 -2
  73. package/dist/devops/utils/manifest.js +3 -3
  74. package/dist/devops/utils/manifest.js.map +1 -1
  75. package/dist/devops/utils/port.d.ts +1 -1
  76. package/dist/devops/utils/port.js +1 -1
  77. package/dist/devops/utils/probe.d.ts +1 -1
  78. package/dist/devops/utils/probe.js +1 -1
  79. package/dist/devops/utils/ui.js +2 -2
  80. package/dist/devops/utils/ui.js.map +1 -1
  81. package/dist/devops/utils/unity-editor.js +4 -4
  82. package/dist/devops/utils/unity-editor.js.map +1 -1
  83. package/dist/devops/utils/unity-hub.js +1 -1
  84. package/dist/devops/utils/unity-hub.js.map +1 -1
  85. package/dist/devops/utils/unity-shutdown.d.ts +1 -1
  86. package/dist/devops/utils/unity-shutdown.js +1 -1
  87. package/dist/devops/utils/update-check.js +3 -3
  88. package/dist/devops/utils/update-check.js.map +1 -1
  89. package/dist/devops/utils/vendor.d.ts +2 -2
  90. package/dist/devops/utils/vendor.js +4 -4
  91. package/dist/devops/utils/vendor.js.map +1 -1
  92. package/dist/generated/tools.js +1 -1
  93. package/dist/generated/tools.js.map +1 -1
  94. package/dist/program.js +3 -3
  95. package/dist/program.js.map +1 -1
  96. package/dist/server/app.d.ts +5 -5
  97. package/dist/server/app.js +3 -3
  98. package/dist/server/app.js.map +1 -1
  99. package/dist/server/index.d.ts +2 -2
  100. package/dist/server/index.js +2 -2
  101. package/dist/server/index.js.map +1 -1
  102. package/dist/server/rest/auth.d.ts +1 -1
  103. package/dist/server/rest/auth.js +3 -3
  104. package/dist/server/rest/auth.js.map +1 -1
  105. package/dist/server/rest/context.d.ts +2 -2
  106. package/dist/server/rest/forward.d.ts +2 -2
  107. package/dist/server/session/store.d.ts +3 -3
  108. package/dist/server/session/store.js +4 -4
  109. package/dist/server/session/store.js.map +1 -1
  110. package/dist/server/stub-client/scenarios.js +8 -8
  111. package/dist/server/stub-client/scenarios.js.map +1 -1
  112. package/dist/server/types.d.ts +11 -11
  113. package/dist/server/types.js +9 -9
  114. package/dist/server/types.js.map +1 -1
  115. package/dist/server/ws/hub.d.ts +8 -8
  116. package/dist/server/ws/hub.js +13 -13
  117. package/dist/server/ws/hub.js.map +1 -1
  118. package/dist/server/ws/rpc.d.ts +3 -3
  119. package/dist/server/ws/rpc.js +4 -4
  120. package/dist/server/ws/rpc.js.map +1 -1
  121. package/dist/transport/index.d.ts +1 -1
  122. package/dist/transport/index.js +3 -3
  123. package/dist/transport/index.js.map +1 -1
  124. package/dist/transport/rest.js +1 -1
  125. package/dist/transport/rest.js.map +1 -1
  126. package/docs/INSTALL.zh-CN.md +2 -3
  127. package/package.json +1 -1
  128. package/skills/uco-setup/SKILL.md +1 -1
  129. package/skills/unity-editor/references/diagnostics.md +24 -24
  130. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Components/ExtensionPanel.cs +379 -379
  131. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/MenuItems.cs +72 -72
  132. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/UnityCopilotProjectSettingsProvider.cs +64 -64
  133. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotServer.cs +372 -372
  134. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/ReflectorNet.dll +0 -0
  135. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.Common.dll +0 -0
  136. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.dll +0 -0
  137. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Config.cs +175 -175
  138. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.cs +1 -1
  139. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Utils/EnvironmentUtils.cs +368 -368
  140. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +3 -3
  141. package/vendor/plugin/com.atelierai.unity.copilot/package.json +1 -1
  142. package/dist/commands/devops/login.d.ts +0 -2
  143. package/dist/commands/devops/login.js +0 -29
  144. package/dist/commands/devops/login.js.map +0 -1
  145. package/dist/commands/devops/setup-mcp.d.ts +0 -2
  146. package/dist/commands/devops/setup-mcp.js +0 -41
  147. package/dist/commands/devops/setup-mcp.js.map +0 -1
  148. package/dist/devops/commands-upstream/bootstrap-local.d.ts +0 -17
  149. package/dist/devops/commands-upstream/bootstrap-local.js +0 -87
  150. package/dist/devops/commands-upstream/bootstrap-local.js.map +0 -1
  151. package/dist/devops/commands-upstream/close.d.ts +0 -57
  152. package/dist/devops/commands-upstream/close.js +0 -188
  153. package/dist/devops/commands-upstream/close.js.map +0 -1
  154. package/dist/devops/commands-upstream/configure.d.ts +0 -2
  155. package/dist/devops/commands-upstream/configure.js +0 -87
  156. package/dist/devops/commands-upstream/configure.js.map +0 -1
  157. package/dist/devops/commands-upstream/create-project.d.ts +0 -2
  158. package/dist/devops/commands-upstream/create-project.js +0 -43
  159. package/dist/devops/commands-upstream/create-project.js.map +0 -1
  160. package/dist/devops/commands-upstream/install-plugin.d.ts +0 -2
  161. package/dist/devops/commands-upstream/install-plugin.js +0 -64
  162. package/dist/devops/commands-upstream/install-plugin.js.map +0 -1
  163. package/dist/devops/commands-upstream/install-unity.d.ts +0 -2
  164. package/dist/devops/commands-upstream/install-unity.js +0 -72
  165. package/dist/devops/commands-upstream/install-unity.js.map +0 -1
  166. package/dist/devops/commands-upstream/login.d.ts +0 -2
  167. package/dist/devops/commands-upstream/login.js +0 -33
  168. package/dist/devops/commands-upstream/login.js.map +0 -1
  169. package/dist/devops/commands-upstream/open.d.ts +0 -32
  170. package/dist/devops/commands-upstream/open.js +0 -282
  171. package/dist/devops/commands-upstream/open.js.map +0 -1
  172. package/dist/devops/commands-upstream/remove-plugin.d.ts +0 -2
  173. package/dist/devops/commands-upstream/remove-plugin.js +0 -41
  174. package/dist/devops/commands-upstream/remove-plugin.js.map +0 -1
  175. package/dist/devops/commands-upstream/run-system-tool.d.ts +0 -1
  176. package/dist/devops/commands-upstream/run-system-tool.js +0 -13
  177. package/dist/devops/commands-upstream/run-system-tool.js.map +0 -1
  178. package/dist/devops/commands-upstream/run-tool-builder.d.ts +0 -25
  179. package/dist/devops/commands-upstream/run-tool-builder.js +0 -125
  180. package/dist/devops/commands-upstream/run-tool-builder.js.map +0 -1
  181. package/dist/devops/commands-upstream/run-tool.d.ts +0 -1
  182. package/dist/devops/commands-upstream/run-tool.js +0 -13
  183. package/dist/devops/commands-upstream/run-tool.js.map +0 -1
  184. package/dist/devops/commands-upstream/setup-mcp.d.ts +0 -2
  185. package/dist/devops/commands-upstream/setup-mcp.js +0 -68
  186. package/dist/devops/commands-upstream/setup-mcp.js.map +0 -1
  187. package/dist/devops/commands-upstream/setup-skills.d.ts +0 -2
  188. package/dist/devops/commands-upstream/setup-skills.js +0 -167
  189. package/dist/devops/commands-upstream/setup-skills.js.map +0 -1
  190. package/dist/devops/commands-upstream/status.d.ts +0 -2
  191. package/dist/devops/commands-upstream/status.js +0 -87
  192. package/dist/devops/commands-upstream/status.js.map +0 -1
  193. package/dist/devops/commands-upstream/update.d.ts +0 -2
  194. package/dist/devops/commands-upstream/update.js +0 -77
  195. package/dist/devops/commands-upstream/update.js.map +0 -1
  196. package/dist/devops/commands-upstream/wait-for-ready.d.ts +0 -2
  197. package/dist/devops/commands-upstream/wait-for-ready.js +0 -93
  198. package/dist/devops/commands-upstream/wait-for-ready.js.map +0 -1
  199. package/dist/devops/lib/setup-mcp.d.ts +0 -35
  200. package/dist/devops/lib/setup-mcp.js +0 -177
  201. package/dist/devops/lib/setup-mcp.js.map +0 -1
  202. package/dist/devops/utils/cloud-login.d.ts +0 -7
  203. package/dist/devops/utils/cloud-login.js +0 -56
  204. package/dist/devops/utils/cloud-login.js.map +0 -1
@@ -107,14 +107,14 @@ namespace com.AtelierAI.Unity.Copilot.Editor.Tests
107
107
  EnvironmentUtils.ApplyEnvironmentOverrides(config, args, env);
108
108
 
109
109
  Assert.AreEqual("FLAG_TOKEN", config.LocalToken,
110
- "When both --token and UNITY_MCP_TOKEN are set, the flag must win.");
110
+ "When both --token and UNITY_COPILOT_TOKEN are set, the flag must win.");
111
111
  }
112
112
 
113
113
  [Test]
114
114
  public void Override_UnityMcpStyleFlag_BeatsEnvVar()
115
115
  {
116
- // CLI translates --token foo into UNITY_MCP_TOKEN env, but the plugin still
117
- // accepts --UNITY_MCP_TOKEN=foo style flags directly. They must beat env vars.
116
+ // CLI translates --token foo into UNITY_COPILOT_TOKEN env, but the plugin still
117
+ // accepts --UNITY_COPILOT_TOKEN=foo style flags directly. They must beat env vars.
118
118
  var config = BuildDiskConfig();
119
119
  var args = Args((EnvironmentUtils.EnvToken, "FLAG_VIA_FULL_NAME"));
120
120
  var env = Env((EnvironmentUtils.EnvToken, "ENV_TOKEN"));
@@ -15,7 +15,7 @@
15
15
  "Unity Skills",
16
16
  "uco"
17
17
  ],
18
- "version": "1.0.4",
18
+ "version": "1.0.5",
19
19
  "unity": "2022.3",
20
20
  "description": "uco — Unity Copilot: AI Skills, Tools, and CLI for the Unity Engine, driven over plain REST + WebSocket. Any C# method may be turned into a tool by a single line. Derived from IvanMurzak/Unity-MCP (Apache-2.0).",
21
21
  "documentationUrl": "https://github.com/DumoeDss/uco-plugin/tree/main/uco-unity-project/Packages/com.atelierai.unity.copilot#readme",
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerLogin(program: Command): void;
@@ -1,29 +0,0 @@
1
- // uco login — authenticate with Unity-MCP cloud (ai-game.dev).
2
- //
3
- // Only relevant if the user opts into the cloud mode of the upstream
4
- // uco bridge server. For local/custom-host usage, this command is a no-op.
5
- import { runCommand, CliError } from '../../util/cli-context.js';
6
- import { getOrCreateConfig, CLOUD_SERVER_BASE_URL } from '../../devops/utils/config.js';
7
- import { runCloudLogin } from '../../devops/utils/cloud-login.js';
8
- import { resolveProjectArg } from './_helpers.js';
9
- export function registerLogin(program) {
10
- program
11
- .command('login [project]')
12
- .description(`Authenticate with the Unity-MCP cloud server (${CLOUD_SERVER_BASE_URL}).`)
13
- .option('--force', 'Re-authenticate even if already logged in', false)
14
- .action(function (projectArg, opts) {
15
- return runCommand(this, async (ctx) => {
16
- const projectPath = resolveProjectArg(ctx, projectArg);
17
- const config = getOrCreateConfig(projectPath);
18
- if (config.cloudToken && !opts.force) {
19
- return { authenticated: true, alreadyLoggedIn: true, server: CLOUD_SERVER_BASE_URL };
20
- }
21
- const token = await runCloudLogin(projectPath);
22
- if (!token) {
23
- throw new CliError('Cloud login failed or was cancelled.', 'login-failed');
24
- }
25
- return { authenticated: true, alreadyLoggedIn: false, server: CLOUD_SERVER_BASE_URL };
26
- })();
27
- });
28
- }
29
- //# sourceMappingURL=login.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/devops/login.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,qEAAqE;AACrE,2EAA2E;AAG3E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAMlD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,iDAAiD,qBAAqB,IAAI,CAAC;SACvF,MAAM,CAAC,SAAS,EAAE,2CAA2C,EAAE,KAAK,CAAC;SACrE,MAAM,CAAC,UAAyB,UAA8B,EAAE,IAAe;QAC9E,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpC,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;YACvF,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,QAAQ,CAAC,sCAAsC,EAAE,cAAc,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACxF,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerSetupMcp(program: Command): void;
@@ -1,41 +0,0 @@
1
- // uco setup-mcp — write an MCP client config file for a chosen AI agent
2
- // (claude-code, cursor, codex, ...). Lets a normal MCP client connect to
3
- // the same uco bridge server uco targets, when the user wants to mix
4
- // both modalities.
5
- import { runCommand, CliError } from '../../util/cli-context.js';
6
- import { setupMcp, listAgentIds } from '../../devops/lib/setup-mcp.js';
7
- import { resolveProjectArg, progressLogger, unwrapResult } from './_helpers.js';
8
- export function registerSetupMcp(program) {
9
- program
10
- .command('setup-mcp [agent] [project]')
11
- .description('Write an MCP client config for the chosen agent. Run with --list to see supported agents.')
12
- .option('--list', 'List supported agent IDs and exit')
13
- .option('--transport <kind>', 'Transport: http (default) or stdio', 'http')
14
- .option('--url <url>', 'Server URL override')
15
- .option('--token <token>', 'Bearer token override')
16
- .action(function (agentArg, projectArg, opts) {
17
- return runCommand(this, async (ctx) => {
18
- if (opts.list) {
19
- return { agents: listAgentIds() };
20
- }
21
- if (!agentArg) {
22
- throw new CliError('Missing <agent>. Use `uco setup-mcp --list` to see available agents.', 'missing-agent');
23
- }
24
- const transport = (opts.transport ?? 'http');
25
- if (transport !== 'http' && transport !== 'stdio') {
26
- throw new CliError(`Invalid --transport: ${transport}. Use 'http' or 'stdio'.`, 'invalid-transport');
27
- }
28
- const projectPath = resolveProjectArg(ctx, projectArg);
29
- const result = await setupMcp({
30
- agentId: agentArg,
31
- unityProjectPath: projectPath,
32
- transport,
33
- ...(opts.url ? { url: opts.url } : {}),
34
- ...(opts.token ? { token: opts.token } : {}),
35
- onProgress: progressLogger(ctx),
36
- });
37
- return unwrapResult(result);
38
- })();
39
- });
40
- }
41
- //# sourceMappingURL=setup-mcp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-mcp.js","sourceRoot":"","sources":["../../../src/commands/devops/setup-mcp.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,yEAAyE;AACzE,qEAAqE;AACrE,mBAAmB;AAGnB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAShF,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,6BAA6B,CAAC;SACtC,WAAW,CAAC,2FAA2F,CAAC;SACxG,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,oBAAoB,EAAE,oCAAoC,EAAE,MAAM,CAAC;SAC1E,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC;SAC5C,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;SAClD,MAAM,CAAC,UAAyB,QAA4B,EAAE,UAA8B,EAAE,IAAkB;QAC/G,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,QAAQ,CAAC,sEAAsE,EAAE,eAAe,CAAC,CAAC;YAC9G,CAAC;YACD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAiB,CAAC;YAC7D,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAClD,MAAM,IAAI,QAAQ,CAAC,wBAAwB,SAAS,0BAA0B,EAAE,mBAAmB,CAAC,CAAC;YACvG,CAAC;YACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;gBAC5B,OAAO,EAAE,QAAQ;gBACjB,gBAAgB,EAAE,WAAW;gBAC7B,SAAS;gBACT,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,17 +0,0 @@
1
- import { Command } from 'commander';
2
- import { type UnityConnectionConfig } from '../utils/config.js';
3
- /**
4
- * Produce a new config object with local-mode fields pinned to `url` / `token`.
5
- * Preserves all other keys from `current` (immutable update — does not mutate `current`).
6
- *
7
- * The plugin-side ConnectionMode enum only accepts "Custom" (local) or "Cloud".
8
- * We intentionally normalize any integer (0 → Custom, 1 → Cloud) representation
9
- * to the canonical string "Custom" so the on-disk file is explicit.
10
- */
11
- export declare function pinLocalModeConfig(current: Readonly<UnityConnectionConfig>, url: string, token: string): UnityConnectionConfig;
12
- /**
13
- * Returns true iff `current` already reflects local mode with matching url + token.
14
- * Used to make bootstrap-local a no-op when nothing would change on disk.
15
- */
16
- export declare function isAlreadyPinned(current: Readonly<UnityConnectionConfig>, url: string, token: string): boolean;
17
- export declare const bootstrapLocalCommand: Command;
@@ -1,87 +0,0 @@
1
- // Copyright (c) 2025 Ivan Murzak. All rights reserved.
2
- // Licensed under the Apache License, Version 2.0.
3
- import { Command } from 'commander';
4
- import * as path from 'path';
5
- import * as fs from 'fs';
6
- import * as ui from '../utils/ui.js';
7
- import { verbose } from '../utils/ui.js';
8
- import { resolveAndValidateProjectPath } from '../utils/connection.js';
9
- import { readConfig, writeConfig, } from '../utils/config.js';
10
- /**
11
- * Produce a new config object with local-mode fields pinned to `url` / `token`.
12
- * Preserves all other keys from `current` (immutable update — does not mutate `current`).
13
- *
14
- * The plugin-side ConnectionMode enum only accepts "Custom" (local) or "Cloud".
15
- * We intentionally normalize any integer (0 → Custom, 1 → Cloud) representation
16
- * to the canonical string "Custom" so the on-disk file is explicit.
17
- */
18
- export function pinLocalModeConfig(current, url, token) {
19
- return {
20
- ...current,
21
- connectionMode: 'Custom',
22
- host: url,
23
- token,
24
- };
25
- }
26
- /**
27
- * Returns true iff `current` already reflects local mode with matching url + token.
28
- * Used to make bootstrap-local a no-op when nothing would change on disk.
29
- */
30
- export function isAlreadyPinned(current, url, token) {
31
- // Accept both "Custom" (string) and 0 (legacy int) as already-local.
32
- // Anything else (including "Cloud", 1, or unset) means we still need to pin.
33
- const mode = current.connectionMode;
34
- if (mode !== 'Custom' && mode !== 0)
35
- return false;
36
- return current.host === url && current.token === token;
37
- }
38
- export const bootstrapLocalCommand = new Command('bootstrap-local')
39
- .description('Pin a Unity project\'s MCP config to local mode with the given URL/token. Idempotent.')
40
- .argument('[path]', 'Unity project path (defaults to cwd)')
41
- .option('--path <path>', 'Unity project path (defaults to cwd)')
42
- .requiredOption('--url <url>', 'Local MCP server URL to pin (e.g. http://localhost:5140/)')
43
- .requiredOption('--token <token>', 'Local MCP bearer token to pin')
44
- .option('--dry-run', 'Report what would change without writing to disk')
45
- .action(async (positionalPath, options) => {
46
- const projectPath = resolveAndValidateProjectPath(positionalPath, options);
47
- // commander's requiredOption guarantees url/token are defined before the action runs.
48
- const url = options.url.replace(/\/$/, '');
49
- const token = options.token;
50
- verbose(`Project path: ${projectPath}`);
51
- verbose(`Target URL: ${url}`);
52
- verbose(`Target token: ${'*'.repeat(Math.min(token.length, 8))}... (length ${token.length})`);
53
- // uco 0.3.0 renamed the config file; write the new name, but honor a legacy
54
- // file when it is the only one present (the plugin migrates it on next start).
55
- const configPath = path.join(projectPath, 'UserSettings', fs.existsSync(path.join(projectPath, 'UserSettings', 'uco-config.json'))
56
- ? 'uco-config.json'
57
- : 'AI-Game-Developer-Config.json');
58
- const existedBefore = fs.existsSync(configPath);
59
- // Use readConfig (not getOrCreateConfig) so --dry-run truly has no side effects.
60
- // When the file doesn't exist we pin onto an empty base; this mirrors a fresh
61
- // worktree where the plugin has not yet written its default Cloud config.
62
- const current = readConfig(projectPath) ?? {};
63
- if (isAlreadyPinned(current, url, token)) {
64
- ui.success(`MCP config already pinned to local mode (${url}). No changes written.`);
65
- return;
66
- }
67
- const next = pinLocalModeConfig(current, url, token);
68
- if (options.dryRun) {
69
- ui.heading('bootstrap-local (dry run)');
70
- ui.label('Config file', configPath);
71
- ui.label('connectionMode', `${String(current.connectionMode ?? 'unset')} → Custom`);
72
- ui.label('host', `${String(current.host ?? 'unset')} → ${url}`);
73
- ui.label('token', `${current.token ? '<previous>' : '<unset>'} → <supplied>`);
74
- ui.info('No changes written (--dry-run).');
75
- return;
76
- }
77
- writeConfig(projectPath, next);
78
- ui.heading('bootstrap-local');
79
- ui.label('Config file', configPath);
80
- ui.label('connectionMode', 'Custom');
81
- ui.label('host', url);
82
- ui.label('token', '<supplied>');
83
- ui.success(existedBefore
84
- ? 'Config updated to pin local mode.'
85
- : 'Config created and pinned to local mode.');
86
- });
87
- //# sourceMappingURL=bootstrap-local.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap-local.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/bootstrap-local.ts"],"names":[],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- import { Command } from 'commander';
2
- import { type SupportedPlatform } from '../utils/unity-shutdown.js';
3
- export interface CloseOptions {
4
- timeout?: string;
5
- timeoutSeconds?: string;
6
- force?: boolean;
7
- }
8
- /**
9
- * Resolve the project path argument to an absolute, canonical path.
10
- *
11
- * Mirrors the convention used by `open` / `wait-for-ready` — accepts a
12
- * positional argument or `process.cwd()` fallback, normalises symlinks where
13
- * possible, and trims any trailing path separator. Exported for unit tests.
14
- */
15
- export declare function resolveCloseProjectPath(positionalPath: string | undefined, cwd: string): string;
16
- /**
17
- * Returns true when `<projectPath>/ProjectSettings/ProjectVersion.txt` exists.
18
- *
19
- * The issue's acceptance criteria require refusing to act on any path that
20
- * does not look like a Unity project root (`ProjectVersion.txt` is the
21
- * canonical marker). This is intentionally narrower than the `open`
22
- * subcommand's check — the goal here is to defend against accidental
23
- * "kill all Unity processes on host" invocations, so a positive ID of
24
- * "this is a Unity project" is required.
25
- *
26
- * Exported for unit tests.
27
- */
28
- export declare function isUnityProjectRoot(projectPath: string): boolean;
29
- /**
30
- * Parse a positive-integer `--timeout` value (seconds). Returns the parsed
31
- * value, or `null` when the input is not a valid positive integer.
32
- *
33
- * The `undefined` branch falls back to the default for ergonomic
34
- * direct-call use (e.g., unit tests). The action handler never reaches it
35
- * because commander always materialises the configured default string.
36
- *
37
- * Exported for unit tests.
38
- */
39
- export declare function parseTimeoutSeconds(raw: string | undefined): number | null;
40
- /**
41
- * Resolve the editor PID for a given project path.
42
- *
43
- * Reads `<project>/Temp/UnityLockfile` (4 bytes LE uint32) and enumerates
44
- * Unity processes by command line, then prefers the lockfile PID when it
45
- * is alive and matches the enumerated process for this project (handles
46
- * stale lockfiles); otherwise uses the enumerated PID.
47
- *
48
- * Symlink/realpath handling: `resolveCloseProjectPath` canonicalises via
49
- * `realpathSync` while `findUnityProcess` only `path.resolve`s the cmdline
50
- * `-projectPath` argument. If Unity was launched via a symlink, the first
51
- * lookup misses. We retry against the un-canonicalised form so a symlinked
52
- * launch path doesn't silently degrade close to a no-op.
53
- *
54
- * Returns `null` when no live editor matches the project. Exported for tests.
55
- */
56
- export declare function resolveEditorPid(projectPath: string, platform?: SupportedPlatform): number | null;
57
- export declare const closeCommand: Command;
@@ -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,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const configureCommand: Command;
@@ -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":"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"}
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const createProjectCommand: Command;