@alpsckr/unitycli 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/contracts/command-contract.json +591 -591
  2. package/contracts/package-files.json +367 -367
  3. package/contracts/stable-session/direct-call-semantics.json +3 -3
  4. package/contracts/stable-session/request-digest-v1-golden.json +2 -2
  5. package/contracts/tool-completion-contract.json +322 -322
  6. package/dist/bridge/domains/animation.js +37 -37
  7. package/dist/bridge/domains/animation.js.map +1 -1
  8. package/dist/bridge/domains/asset.js +15 -16
  9. package/dist/bridge/domains/asset.js.map +1 -1
  10. package/dist/bridge/domains/build.js +13 -13
  11. package/dist/bridge/domains/build.js.map +1 -1
  12. package/dist/bridge/domains/camera.js +7 -7
  13. package/dist/bridge/domains/camera.js.map +1 -1
  14. package/dist/bridge/domains/catalog-editor.d.ts +2 -0
  15. package/dist/bridge/domains/{project-tool.js → catalog-editor.js} +10 -10
  16. package/dist/bridge/domains/catalog-editor.js.map +1 -0
  17. package/dist/bridge/domains/catalog-player.d.ts +2 -0
  18. package/dist/bridge/domains/{runtime-tool.js → catalog-player.js} +9 -9
  19. package/dist/bridge/domains/catalog-player.js.map +1 -0
  20. package/dist/bridge/domains/code.js +1 -1
  21. package/dist/bridge/domains/code.js.map +1 -1
  22. package/dist/bridge/domains/console.js +2 -2
  23. package/dist/bridge/domains/console.js.map +1 -1
  24. package/dist/bridge/domains/doctor.js +3 -3
  25. package/dist/bridge/domains/doctor.js.map +1 -1
  26. package/dist/bridge/domains/editor.js +14 -14
  27. package/dist/bridge/domains/editor.js.map +1 -1
  28. package/dist/bridge/domains/game-object.js +16 -16
  29. package/dist/bridge/domains/game-object.js.map +1 -1
  30. package/dist/bridge/domains/lighting.d.ts +2 -0
  31. package/dist/bridge/domains/lighting.js +127 -0
  32. package/dist/bridge/domains/lighting.js.map +1 -0
  33. package/dist/bridge/domains/material.js +5 -5
  34. package/dist/bridge/domains/material.js.map +1 -1
  35. package/dist/bridge/domains/navmesh.js +3 -3
  36. package/dist/bridge/domains/navmesh.js.map +1 -1
  37. package/dist/bridge/domains/occlusion.js +1 -9
  38. package/dist/bridge/domains/occlusion.js.map +1 -1
  39. package/dist/bridge/domains/physics.js +14 -14
  40. package/dist/bridge/domains/physics.js.map +1 -1
  41. package/dist/bridge/domains/prefab.js +12 -12
  42. package/dist/bridge/domains/prefab.js.map +1 -1
  43. package/dist/bridge/domains/profiler.js +25 -25
  44. package/dist/bridge/domains/profiler.js.map +1 -1
  45. package/dist/bridge/domains/rendering.d.ts +2 -0
  46. package/dist/bridge/domains/rendering.js +71 -0
  47. package/dist/bridge/domains/rendering.js.map +1 -0
  48. package/dist/bridge/domains/runtime-reflection.d.ts +2 -0
  49. package/dist/bridge/domains/{reflection.js → runtime-reflection.js} +7 -7
  50. package/dist/bridge/domains/runtime-reflection.js.map +1 -0
  51. package/dist/bridge/domains/scene.js +15 -15
  52. package/dist/bridge/domains/scene.js.map +1 -1
  53. package/dist/bridge/domains/screenshot.js +6 -6
  54. package/dist/bridge/domains/screenshot.js.map +1 -1
  55. package/dist/bridge/domains/scriptable-object.js +4 -4
  56. package/dist/bridge/domains/scriptable-object.js.map +1 -1
  57. package/dist/bridge/domains/serialized-object.d.ts +2 -0
  58. package/dist/bridge/domains/{object.js → serialized-object.js} +6 -6
  59. package/dist/bridge/domains/serialized-object.js.map +1 -0
  60. package/dist/bridge/domains/shader.js +7 -7
  61. package/dist/bridge/domains/shader.js.map +1 -1
  62. package/dist/bridge/domains/texture.js +7 -7
  63. package/dist/bridge/domains/texture.js.map +1 -1
  64. package/dist/bridge/domains/timeline.js +4 -4
  65. package/dist/bridge/domains/timeline.js.map +1 -1
  66. package/dist/bridge/domains/ui.js +18 -18
  67. package/dist/bridge/domains/ui.js.map +1 -1
  68. package/dist/bridge/domains/volume.d.ts +2 -0
  69. package/dist/bridge/domains/volume.js +26 -0
  70. package/dist/bridge/domains/volume.js.map +1 -0
  71. package/dist/bridge/index.js +3 -3
  72. package/dist/bridge/index.js.map +1 -1
  73. package/dist/bridge/registry.js +15 -13
  74. package/dist/bridge/registry.js.map +1 -1
  75. package/dist/bridge/session-supervisor.js +27 -9
  76. package/dist/bridge/session-supervisor.js.map +1 -1
  77. package/dist/bridge/start-diagnostics.d.ts +19 -0
  78. package/dist/bridge/start-diagnostics.js +96 -0
  79. package/dist/bridge/start-diagnostics.js.map +1 -0
  80. package/dist/bridge/types.d.ts +1 -1
  81. package/dist/catalog-protocol.js +3 -3
  82. package/dist/catalog-protocol.js.map +1 -1
  83. package/dist/cli-commands/package.js +10 -2
  84. package/dist/cli-commands/package.js.map +1 -1
  85. package/dist/doctor.js +23 -1
  86. package/dist/doctor.js.map +1 -1
  87. package/dist/extensions/.generated-bridge-domains/cinemachine.js +14 -14
  88. package/dist/extensions/.generated-bridge-domains/cinemachine.js.map +1 -1
  89. package/dist/extensions/.generated-bridge-domains/hdrp.js +7 -7
  90. package/dist/extensions/.generated-bridge-domains/hdrp.js.map +1 -1
  91. package/dist/extensions/.generated-bridge-domains/probuilder.d.ts +3 -3
  92. package/dist/extensions/.generated-bridge-domains/probuilder.js +40 -40
  93. package/dist/extensions/.generated-bridge-domains/probuilder.js.map +1 -1
  94. package/dist/extensions/.generated-bridge-domains/urp.js +12 -12
  95. package/dist/extensions/.generated-bridge-domains/urp.js.map +1 -1
  96. package/dist/extensions/.generated-bridge-domains/vfx.js +27 -27
  97. package/dist/extensions/.generated-bridge-domains/vfx.js.map +1 -1
  98. package/dist/extensions/installer.d.ts +35 -0
  99. package/dist/extensions/installer.js +123 -0
  100. package/dist/extensions/installer.js.map +1 -1
  101. package/dist/instances.d.ts +6 -0
  102. package/dist/instances.js +13 -0
  103. package/dist/instances.js.map +1 -1
  104. package/dist/package-manager.js +1 -1
  105. package/dist/project-tool-discovery.d.ts +1 -1
  106. package/dist/project-tool-discovery.js +5 -5
  107. package/dist/project-tool-discovery.js.map +1 -1
  108. package/dist/runtime-code.js +2 -2
  109. package/dist/runtime-code.js.map +1 -1
  110. package/dist/services/reflect-service.d.ts +3 -3
  111. package/dist/services/reflect-service.js +5 -5
  112. package/dist/services/reflect-service.js.map +1 -1
  113. package/dist/tools/.generated-completion-registry.js +689 -689
  114. package/dist/tools/.generated-completion-registry.js.map +1 -1
  115. package/dist/tools/.generated-registry.d.ts +12 -12
  116. package/dist/tools/.generated-registry.js +12 -12
  117. package/dist/tools/.generated-registry.js.map +1 -1
  118. package/dist/tools/.generated-schemas.js +13 -13
  119. package/dist/tools/.generated-schemas.js.map +1 -1
  120. package/dist/tools/catalog.d.ts +1 -1
  121. package/dist/tools/catalog.js +1 -1
  122. package/dist/tools/code/{exec.d.ts → execute.d.ts} +1 -1
  123. package/dist/tools/code/{exec.js → execute.js} +5 -5
  124. package/dist/tools/code/execute.js.map +1 -0
  125. package/dist/tools/dispatcher.js +12 -8
  126. package/dist/tools/dispatcher.js.map +1 -1
  127. package/dist/tools/editor/compile.d.ts +3 -2
  128. package/dist/tools/editor/compile.js +23 -13
  129. package/dist/tools/editor/compile.js.map +1 -1
  130. package/dist/tools/editor/play-mode-status.js +2 -2
  131. package/dist/tools/editor/play-mode-status.js.map +1 -1
  132. package/dist/tools/editor/refresh.js +2 -2
  133. package/dist/tools/editor/refresh.js.map +1 -1
  134. package/dist/tools/metadata/derived.d.ts +0 -7
  135. package/dist/tools/metadata/derived.js +7 -16
  136. package/dist/tools/metadata/derived.js.map +1 -1
  137. package/dist/tools/metadata/index.d.ts +1 -1
  138. package/dist/tools/metadata/index.js +1 -1
  139. package/dist/tools/metadata/index.js.map +1 -1
  140. package/dist/tools/metadata/status.js +1 -1
  141. package/dist/tools/metadata/status.js.map +1 -1
  142. package/dist/tools/{runtime → player-runtime}/console.js +4 -4
  143. package/dist/tools/player-runtime/console.js.map +1 -0
  144. package/dist/tools/{runtime → player-runtime}/input/key.js +4 -4
  145. package/dist/tools/player-runtime/input/key.js.map +1 -0
  146. package/dist/tools/{runtime → player-runtime}/input/pointer.js +4 -4
  147. package/dist/tools/player-runtime/input/pointer.js.map +1 -0
  148. package/dist/tools/{runtime → player-runtime}/log.js +5 -5
  149. package/dist/tools/player-runtime/log.js.map +1 -0
  150. package/dist/tools/{runtime → player-runtime}/state.js +4 -4
  151. package/dist/tools/player-runtime/state.js.map +1 -0
  152. package/dist/tools/{runtime → player-runtime}/target-framerate/set.js +4 -4
  153. package/dist/tools/player-runtime/target-framerate/set.js.map +1 -0
  154. package/dist/tools/{runtime → player-runtime}/time-scale/set.js +4 -4
  155. package/dist/tools/player-runtime/time-scale/set.js.map +1 -0
  156. package/dist/tools/{runtime → player-runtime}/ui/capture-element.js +4 -4
  157. package/dist/tools/player-runtime/ui/capture-element.js.map +1 -0
  158. package/dist/tools/tools/group-summaries.js +17 -14
  159. package/dist/tools/tools/group-summaries.js.map +1 -1
  160. package/dist/tools/{reflect/member.js → type-inspection/get-member.js} +6 -6
  161. package/dist/tools/type-inspection/get-member.js.map +1 -0
  162. package/dist/tools/{reflect/type.js → type-inspection/get-type.js} +6 -6
  163. package/dist/tools/type-inspection/get-type.js.map +1 -0
  164. package/dist/tools/{reflect → type-inspection}/search.js +5 -5
  165. package/dist/tools/type-inspection/search.js.map +1 -0
  166. package/docs/README.md +1 -2
  167. package/docs/architecture.md +1 -1
  168. package/docs/availability-differences.md +2 -2
  169. package/docs/development.md +1 -1
  170. package/docs/error-codes.md +5 -5
  171. package/docs/extensions.md +2 -2
  172. package/docs/risk-and-side-effects.md +12 -12
  173. package/docs/safety-boundaries.md +7 -7
  174. package/docs/tool-discovery.md +1 -1
  175. package/docs/tool-execution.md +16 -16
  176. package/extensions/cinemachine/bridge/domains/cinemachine.ts +14 -14
  177. package/extensions/hdrp/bridge/domains/hdrp.ts +7 -7
  178. package/extensions/hdrp/unitypkg/Editor/Hdrp/HdrpToolSupport.cs +2 -2
  179. package/extensions/probuilder/bridge/domains/probuilder.ts +40 -40
  180. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderErrors.cs +1 -1
  181. package/extensions/urp/bridge/domains/urp.ts +12 -12
  182. package/extensions/urp/unitypkg/Editor/Urp/UrpToolSupport.cs +2 -2
  183. package/extensions/vfx-graph/bridge/domains/vfx.ts +27 -27
  184. package/package.json +1 -1
  185. package/skills/unitycli/SKILL.md +1 -1
  186. package/skills/unitycli/manifest.json +1 -1
  187. package/skills/unitycli/references/operation-protocol.md +1 -1
  188. package/unitypkg/Editor/Bridge/BridgeHttpServer.cs +2 -2
  189. package/unitypkg/Editor/Commands/ProjectToolCommands.cs +7 -7
  190. package/unitypkg/Editor/Commands/RuntimeToolCommands.cs +6 -6
  191. package/unitypkg/Editor/Generated/UnityCliToolCompletionRegistry.g.cs +147 -147
  192. package/unitypkg/Editor/Infrastructure/CodeExecSupport.cs +4 -4
  193. package/unitypkg/Editor/Infrastructure/UnityCliAdmission.cs +17 -17
  194. package/unitypkg/Editor/Infrastructure/UnityCliCompileCoordinator.cs +61 -54
  195. package/unitypkg/Editor/Infrastructure/UnityCliJson.cs +0 -18
  196. package/unitypkg/Editor/Infrastructure/UnityCliLiveRefreshCoordinator.cs +26 -21
  197. package/unitypkg/Editor/Infrastructure/UnityCliObjectPatch.cs +1 -1
  198. package/unitypkg/Editor/Infrastructure/UnityCliObjectRef.cs +5 -5
  199. package/unitypkg/Editor/Infrastructure/UnityCliOperationCoordinator.cs +32 -32
  200. package/unitypkg/Editor/Infrastructure/UnityCliReflection.cs +12 -12
  201. package/unitypkg/Editor/Infrastructure/UnityCliRuntimeExecutor.cs +1 -1
  202. package/unitypkg/Editor/ProjectTools/ProjectToolRegistry.cs +5 -5
  203. package/unitypkg/Editor/Tools/{animation → animation-clip}/AnimationToolSupport.cs +3 -3
  204. package/unitypkg/Editor/Tools/{animation/clip → animation-clip}/create.cs +4 -4
  205. package/unitypkg/Editor/Tools/{animation/clip.cs → animation-clip/read.cs} +3 -3
  206. package/unitypkg/Editor/Tools/{animation/clip/modify.cs → animation-clip/update.cs} +5 -5
  207. package/unitypkg/Editor/Tools/{animation/animator → animator}/crossfade.cs +1 -1
  208. package/unitypkg/Editor/Tools/{animation/animator → animator}/get-info.cs +1 -1
  209. package/unitypkg/Editor/Tools/{animation/animator → animator}/get-parameter.cs +1 -1
  210. package/unitypkg/Editor/Tools/{animation/state.cs → animator/get-state.cs} +3 -3
  211. package/unitypkg/Editor/Tools/{animation → animator}/play.cs +5 -5
  212. package/unitypkg/Editor/Tools/{animation/animator → animator}/set-enabled.cs +1 -1
  213. package/unitypkg/Editor/Tools/{animation/animator → animator}/set-parameter.cs +1 -1
  214. package/unitypkg/Editor/Tools/{animation/animator → animator}/set-speed.cs +1 -1
  215. package/unitypkg/Editor/Tools/{animation → animator}/stop.cs +4 -4
  216. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-blend-tree-child.cs +10 -10
  217. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-layer.cs +6 -6
  218. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-parameter.cs +6 -6
  219. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-state.cs +7 -7
  220. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-transition.cs +9 -9
  221. package/unitypkg/Editor/Tools/{controller → animator-controller}/assign.cs +6 -6
  222. package/unitypkg/Editor/Tools/{controller → animator-controller}/create-blend-tree-1d.cs +7 -7
  223. package/unitypkg/Editor/Tools/{controller → animator-controller}/create-blend-tree-2d.cs +7 -7
  224. package/unitypkg/Editor/Tools/{controller → animator-controller}/create.cs +4 -4
  225. package/unitypkg/Editor/Tools/{controller → animator-controller}/get-info.cs +4 -4
  226. package/unitypkg/Editor/Tools/{controller → animator-controller}/remove-layer.cs +8 -8
  227. package/unitypkg/Editor/Tools/{controller → animator-controller}/set-layer-weight.cs +6 -6
  228. package/unitypkg/Editor/Tools/asset/preview.cs +1 -1
  229. package/unitypkg/Editor/Tools/asset/{modify.cs → write-text.cs} +6 -6
  230. package/unitypkg/Editor/Tools/component/get.cs +1 -1
  231. package/unitypkg/Editor/Tools/component/list-types.cs +2 -2
  232. package/unitypkg/Editor/Tools/component/modify.cs +1 -1
  233. package/unitypkg/Editor/Tools/component/set.cs +1 -1
  234. package/unitypkg/Editor/Tools/console/{get.cs → read.cs} +3 -3
  235. package/unitypkg/Editor/Tools/editor/{play.cs → play-mode/start.cs} +5 -5
  236. package/unitypkg/Editor/Tools/editor/{stop.cs → play-mode/stop.cs} +5 -5
  237. package/unitypkg/Editor/Tools/editor/search.cs +1 -1
  238. package/unitypkg/Editor/Tools/{go → game-object}/GameObjectToolSupport.cs +5 -22
  239. package/unitypkg/Editor/Tools/{go → game-object}/create.cs +11 -11
  240. package/unitypkg/Editor/Tools/{go → game-object}/delete.cs +7 -7
  241. package/unitypkg/Editor/Tools/{go → game-object}/duplicate.cs +6 -6
  242. package/unitypkg/Editor/Tools/{go → game-object}/find.cs +5 -5
  243. package/unitypkg/Editor/Tools/{go → game-object}/look-at.cs +8 -8
  244. package/unitypkg/Editor/Tools/{go → game-object}/modify.cs +9 -9
  245. package/unitypkg/Editor/Tools/{go → game-object}/move-relative.cs +7 -7
  246. package/unitypkg/Editor/Tools/{scene/move-object.cs → game-object/move-to-scene.cs} +7 -7
  247. package/unitypkg/Editor/Tools/{go → game-object}/set-parent.cs +9 -9
  248. package/unitypkg/Editor/Tools/{graphics/bake-cancel.cs → lighting/bake/cancel.cs} +4 -4
  249. package/unitypkg/Editor/Tools/{graphics/bake-clear.cs → lighting/bake/clear.cs} +4 -4
  250. package/unitypkg/Editor/Tools/{graphics/bake-reflection-probe.cs → lighting/bake/reflection-probe.cs} +3 -3
  251. package/unitypkg/Editor/Tools/{graphics/bake-settings.cs → lighting/bake/settings.cs} +12 -12
  252. package/unitypkg/Editor/Tools/{graphics/bake-start.cs → lighting/bake/start.cs} +5 -5
  253. package/unitypkg/Editor/Tools/{graphics/bake-status.cs → lighting/bake/status.cs} +3 -3
  254. package/unitypkg/Editor/Tools/{graphics → lighting}/light-probe-group.cs +7 -7
  255. package/unitypkg/Editor/Tools/{graphics → lighting}/reflection-probe.cs +12 -12
  256. package/unitypkg/Editor/Tools/{graphics/skybox-get.cs → lighting/skybox/get.cs} +3 -3
  257. package/unitypkg/Editor/Tools/{graphics/skybox-set-ambient.cs → lighting/skybox/set-ambient.cs} +3 -3
  258. package/unitypkg/Editor/Tools/{graphics/skybox-set-fog.cs → lighting/skybox/set-fog.cs} +3 -3
  259. package/unitypkg/Editor/Tools/{graphics/skybox-set-material.cs → lighting/skybox/set-material.cs} +5 -5
  260. package/unitypkg/Editor/Tools/{graphics/skybox-set-properties.cs → lighting/skybox/set-properties.cs} +5 -5
  261. package/unitypkg/Editor/Tools/{graphics/skybox-set-reflection.cs → lighting/skybox/set-reflection.cs} +3 -3
  262. package/unitypkg/Editor/Tools/{graphics/skybox-set-sun.cs → lighting/skybox/set-sun.cs} +5 -5
  263. package/unitypkg/Editor/Tools/{project → project-settings}/ProjectSettingsToolSupport.cs +5 -5
  264. package/unitypkg/Editor/Tools/{project → project-settings}/audio-settings/set.cs +3 -3
  265. package/unitypkg/Editor/Tools/{project → project-settings}/audio-settings.cs +4 -4
  266. package/unitypkg/Editor/Tools/{project → project-settings}/info.cs +4 -4
  267. package/unitypkg/Editor/Tools/{project → project-settings}/input-settings/set.cs +3 -3
  268. package/unitypkg/Editor/Tools/{project → project-settings}/input-settings.cs +4 -4
  269. package/unitypkg/Editor/Tools/project-settings/layer/add.cs +3 -0
  270. package/unitypkg/Editor/Tools/project-settings/layer/remove.cs +3 -0
  271. package/unitypkg/Editor/Tools/{project → project-settings}/layers.cs +4 -4
  272. package/unitypkg/Editor/Tools/{project → project-settings}/player-settings/set.cs +4 -4
  273. package/unitypkg/Editor/Tools/{project → project-settings}/player-settings.cs +4 -4
  274. package/unitypkg/Editor/Tools/project-settings/tag/add.cs +3 -0
  275. package/unitypkg/Editor/Tools/project-settings/tag/remove.cs +3 -0
  276. package/unitypkg/Editor/Tools/{project → project-settings}/tags.cs +4 -4
  277. package/unitypkg/Editor/Tools/{project → project-settings}/time-settings/set.cs +3 -3
  278. package/unitypkg/Editor/Tools/{project → project-settings}/time-settings.cs +4 -4
  279. package/unitypkg/Editor/Tools/{graphics → rendering}/GraphicsToolSupport.cs +3 -3
  280. package/unitypkg/Editor/Tools/rendering/pipeline/info.cs +19 -0
  281. package/unitypkg/Editor/Tools/{graphics/pipeline-settings.cs → rendering/pipeline/settings.cs} +4 -4
  282. package/unitypkg/Editor/Tools/{graphics → rendering}/quality.cs +17 -17
  283. package/unitypkg/Editor/Tools/{graphics → rendering}/scene-debug.cs +4 -4
  284. package/unitypkg/Editor/Tools/rendering/stats.cs +17 -0
  285. package/unitypkg/Editor/Tools/{reflection → runtime-reflection}/method/find.cs +5 -5
  286. package/unitypkg/Editor/Tools/{reflection/method/call.cs → runtime-reflection/method/invoke.cs} +7 -7
  287. package/unitypkg/Editor/Tools/{reflection → runtime-reflection}/type/schema.cs +5 -5
  288. package/unitypkg/Editor/Tools/scene/gameobject-support.cs +1 -1
  289. package/unitypkg/Editor/Tools/scene/gameobject.cs +1 -1
  290. package/unitypkg/Editor/Tools/scene/hierarchy.cs +1 -1
  291. package/unitypkg/Editor/Tools/{camera/screenshot.cs → screenshot/from-camera.cs} +4 -4
  292. package/unitypkg/Editor/Tools/{object/modify.cs → serialized-object/patch.cs} +8 -8
  293. package/unitypkg/Editor/Tools/{object/get-data.cs → serialized-object/read.cs} +4 -4
  294. package/unitypkg/Editor/Tools/{graphics/volume.cs → volume/list.cs} +3 -3
  295. package/unitypkg/Editor/UnityCliBridge.cs +3 -22
  296. package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeBridge.cs +15 -15
  297. package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeRegistry.cs +1 -1
  298. package/unitypkg/Runtime/Tools/UnityCliRuntimeTools.cs +22 -22
  299. package/unitypkg/Shared/UnityCliBridgeQueuePolicy.cs +1 -1
  300. package/unitypkg/Tests/Editor/UnityCliAdmissionCoordinatorIntegrationTests.cs +7 -7
  301. package/unitypkg/Tests/Editor/UnityCliBridgeAdmissionIntegrationTests.cs +6 -6
  302. package/unitypkg/Tests/Editor/UnityCliBridgeQueuePolicyTests.cs +3 -3
  303. package/unitypkg/Tests/Editor/UnityCliContinuationIntegrationTests.cs +1 -1
  304. package/unitypkg/Tests/Editor/UnityCliRequestBudgetTests.cs +4 -4
  305. package/unitypkg/Tests/Editor/UnityCliRuntimeBridgeIntegrationTests.cs +15 -15
  306. package/unitypkg/Tests/Runtime/UnityCliRuntimeCatalogValidationTests.cs +5 -5
  307. package/unitypkg/package.json +1 -1
  308. package/dist/bridge/domains/graphics.d.ts +0 -2
  309. package/dist/bridge/domains/graphics.js +0 -170
  310. package/dist/bridge/domains/graphics.js.map +0 -1
  311. package/dist/bridge/domains/object.d.ts +0 -2
  312. package/dist/bridge/domains/object.js.map +0 -1
  313. package/dist/bridge/domains/package.d.ts +0 -2
  314. package/dist/bridge/domains/package.js +0 -2
  315. package/dist/bridge/domains/package.js.map +0 -1
  316. package/dist/bridge/domains/project-tool.d.ts +0 -2
  317. package/dist/bridge/domains/project-tool.js.map +0 -1
  318. package/dist/bridge/domains/reflection.d.ts +0 -2
  319. package/dist/bridge/domains/reflection.js.map +0 -1
  320. package/dist/bridge/domains/runtime-tool.d.ts +0 -2
  321. package/dist/bridge/domains/runtime-tool.js.map +0 -1
  322. package/dist/tools/code/exec.js.map +0 -1
  323. package/dist/tools/reflect/member.js.map +0 -1
  324. package/dist/tools/reflect/search.js.map +0 -1
  325. package/dist/tools/reflect/type.js.map +0 -1
  326. package/dist/tools/runtime/console.js.map +0 -1
  327. package/dist/tools/runtime/input/key.js.map +0 -1
  328. package/dist/tools/runtime/input/pointer.js.map +0 -1
  329. package/dist/tools/runtime/log.js.map +0 -1
  330. package/dist/tools/runtime/state.js.map +0 -1
  331. package/dist/tools/runtime/target-framerate/set.js.map +0 -1
  332. package/dist/tools/runtime/time-scale/set.js.map +0 -1
  333. package/dist/tools/runtime/ui/capture-element.js.map +0 -1
  334. package/unitypkg/Editor/Tools/graphics/pipeline-info.cs +0 -19
  335. package/unitypkg/Editor/Tools/graphics/stats.cs +0 -17
  336. package/unitypkg/Editor/Tools/project/layer/add.cs +0 -3
  337. package/unitypkg/Editor/Tools/project/layer/remove.cs +0 -3
  338. package/unitypkg/Editor/Tools/project/tag/add.cs +0 -3
  339. package/unitypkg/Editor/Tools/project/tag/remove.cs +0 -3
  340. /package/dist/tools/{runtime → player-runtime}/console.d.ts +0 -0
  341. /package/dist/tools/{runtime → player-runtime}/input/key.d.ts +0 -0
  342. /package/dist/tools/{runtime → player-runtime}/input/pointer.d.ts +0 -0
  343. /package/dist/tools/{runtime → player-runtime}/log.d.ts +0 -0
  344. /package/dist/tools/{runtime → player-runtime}/state.d.ts +0 -0
  345. /package/dist/tools/{runtime → player-runtime}/target-framerate/set.d.ts +0 -0
  346. /package/dist/tools/{runtime → player-runtime}/time-scale/set.d.ts +0 -0
  347. /package/dist/tools/{runtime → player-runtime}/ui/capture-element.d.ts +0 -0
  348. /package/dist/tools/{reflect/member.d.ts → type-inspection/get-member.d.ts} +0 -0
  349. /package/dist/tools/{reflect/type.d.ts → type-inspection/get-type.d.ts} +0 -0
  350. /package/dist/tools/{reflect → type-inspection}/search.d.ts +0 -0
  351. /package/unitypkg/Editor/Tools/{animation → animator}/AnimatorRuntimeToolSupport.cs +0 -0
  352. /package/unitypkg/Editor/Tools/{project → project-settings}/ProjectSettingsReader.cs +0 -0
  353. /package/unitypkg/Editor/Tools/{project → project-settings}/ProjectTagLayerToolSupport.cs +0 -0
  354. /package/unitypkg/Editor/Tools/{object → serialized-object}/ObjectToolSupport.cs +0 -0
@@ -7,9 +7,9 @@ using UnityEngine.Rendering;
7
7
  namespace UnityCli
8
8
  {
9
9
  /// <summary>
10
- /// graphics.quality — 读取/写入 QualitySettings(qualityLevel/vSync/antiAliasing/shadowDistance 等)。
10
+ /// rendering.quality — 读取/写入 QualitySettings(qualityLevel/vSync/antiAliasing/shadowDistance 等)。
11
11
  /// </summary>
12
- public class GraphicsQualityTool : IUnityCliTool<GraphicsQualityTool.Request, GraphicsQualityTool.Result>
12
+ public class RenderingQualityTool : IUnityCliTool<RenderingQualityTool.Request, RenderingQualityTool.Result>
13
13
  {
14
14
  public sealed class Request
15
15
  {
@@ -36,9 +36,9 @@ namespace UnityCli
36
36
 
37
37
  public ToolDescriptor Describe() => new()
38
38
  {
39
- Name = "graphics.quality", Summary = "Read and update Unity QualitySettings (quality level, vSync, anti-aliasing, shadows, LOD).",
40
- Description = "Dedicated QualitySettings reader/writer for Edit and Play mode. Pass qualityLevel (name or index) and individual quality fields to update; omit every field for a pure read. Success returns a fresh QualitySettings snapshot and the applied effects; render-pipeline assignment belongs to graphics.pipeline-settings.",
41
- Group = "graphics",DestructiveHint = true, SideEffects = new[] { "settings-write" },
39
+ Name = "rendering.quality", Summary = "Read and update Unity QualitySettings (quality level, vSync, anti-aliasing, shadows, LOD).",
40
+ Description = "Dedicated QualitySettings reader/writer for Edit and Play mode. Pass qualityLevel (name or index) and individual quality fields to update; omit every field for a pure read. Success returns a fresh QualitySettings snapshot and the applied effects; render-pipeline assignment belongs to rendering.pipeline.settings.",
41
+ Group = "rendering",DestructiveHint = true, SideEffects = new[] { "settings-write" },
42
42
  Target = "editor", PlayModeSupport = "session-affecting",
43
43
  DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000,
44
44
  Examples = new[] { new ToolExample { Description = "Read quality settings", Input = new Request { } } }
@@ -62,19 +62,19 @@ namespace UnityCli
62
62
  if (level.HasValue)
63
63
  {
64
64
  QualitySettings.SetQualityLevel(level.Value, true);
65
- effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "qualityLevel", Value = level.Value.ToString() });
65
+ effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "qualityLevel", Value = level.Value.ToString() });
66
66
  }
67
- if (request.VSyncCount.HasValue) { QualitySettings.vSyncCount = request.VSyncCount.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "vSyncCount", Value = request.VSyncCount.Value.ToString() }); }
68
- if (request.AntiAliasing.HasValue) { QualitySettings.antiAliasing = request.AntiAliasing.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "antiAliasing", Value = request.AntiAliasing.Value.ToString() }); }
69
- if (request.ShadowDistance.HasValue) { QualitySettings.shadowDistance = request.ShadowDistance.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "shadowDistance", Value = request.ShadowDistance.Value.ToString(System.Globalization.CultureInfo.InvariantCulture) }); }
70
- if (request.MasterTextureLimit.HasValue) { QualitySettings.globalTextureMipmapLimit = request.MasterTextureLimit.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "masterTextureLimit", Value = request.MasterTextureLimit.Value.ToString() }); }
71
- if (request.LodBias.HasValue) { QualitySettings.lodBias = request.LodBias.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "lodBias", Value = request.LodBias.Value.ToString(System.Globalization.CultureInfo.InvariantCulture) }); }
72
- if (request.MaximumLODLevel.HasValue) { QualitySettings.maximumLODLevel = request.MaximumLODLevel.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "maximumLODLevel", Value = request.MaximumLODLevel.Value.ToString() }); }
73
- if (anisotropic.HasValue) { QualitySettings.anisotropicFiltering = anisotropic.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "anisotropicFiltering", Value = request.AnisotropicFiltering }); }
74
- if (shadows.HasValue) { QualitySettings.shadows = shadows.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "shadows", Value = request.Shadows }); }
75
- if (shadowResolution.HasValue) { QualitySettings.shadowResolution = shadowResolution.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "shadowResolution", Value = request.ShadowResolution }); }
76
- if (request.RealtimeReflectionProbes.HasValue) { QualitySettings.realtimeReflectionProbes = request.RealtimeReflectionProbes.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "realtimeReflectionProbes", Value = request.RealtimeReflectionProbes.Value.ToString().ToLowerInvariant() }); }
77
- if (request.SoftParticles.HasValue) { QualitySettings.softParticles = request.SoftParticles.Value; effects.Add(new GraphicsPlannedEffect { Type = "graphics.quality", Property = "softParticles", Value = request.SoftParticles.Value.ToString().ToLowerInvariant() }); }
67
+ if (request.VSyncCount.HasValue) { QualitySettings.vSyncCount = request.VSyncCount.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "vSyncCount", Value = request.VSyncCount.Value.ToString() }); }
68
+ if (request.AntiAliasing.HasValue) { QualitySettings.antiAliasing = request.AntiAliasing.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "antiAliasing", Value = request.AntiAliasing.Value.ToString() }); }
69
+ if (request.ShadowDistance.HasValue) { QualitySettings.shadowDistance = request.ShadowDistance.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "shadowDistance", Value = request.ShadowDistance.Value.ToString(System.Globalization.CultureInfo.InvariantCulture) }); }
70
+ if (request.MasterTextureLimit.HasValue) { QualitySettings.globalTextureMipmapLimit = request.MasterTextureLimit.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "masterTextureLimit", Value = request.MasterTextureLimit.Value.ToString() }); }
71
+ if (request.LodBias.HasValue) { QualitySettings.lodBias = request.LodBias.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "lodBias", Value = request.LodBias.Value.ToString(System.Globalization.CultureInfo.InvariantCulture) }); }
72
+ if (request.MaximumLODLevel.HasValue) { QualitySettings.maximumLODLevel = request.MaximumLODLevel.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "maximumLODLevel", Value = request.MaximumLODLevel.Value.ToString() }); }
73
+ if (anisotropic.HasValue) { QualitySettings.anisotropicFiltering = anisotropic.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "anisotropicFiltering", Value = request.AnisotropicFiltering }); }
74
+ if (shadows.HasValue) { QualitySettings.shadows = shadows.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "shadows", Value = request.Shadows }); }
75
+ if (shadowResolution.HasValue) { QualitySettings.shadowResolution = shadowResolution.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "shadowResolution", Value = request.ShadowResolution }); }
76
+ if (request.RealtimeReflectionProbes.HasValue) { QualitySettings.realtimeReflectionProbes = request.RealtimeReflectionProbes.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "realtimeReflectionProbes", Value = request.RealtimeReflectionProbes.Value.ToString().ToLowerInvariant() }); }
77
+ if (request.SoftParticles.HasValue) { QualitySettings.softParticles = request.SoftParticles.Value; effects.Add(new GraphicsPlannedEffect { Type = "rendering.quality", Property = "softParticles", Value = request.SoftParticles.Value.ToString().ToLowerInvariant() }); }
78
78
  if (effects.Count > 0) AssetDatabase.SaveAssets();
79
79
  var observed = GraphicsToolSupport.BuildQualitySettings();
80
80
  if ((level.HasValue && observed.CurrentLevel != level.Value) || (request.VSyncCount.HasValue && observed.VSyncCount != request.VSyncCount.Value) || (request.AntiAliasing.HasValue && observed.AntiAliasing != request.AntiAliasing.Value) || (request.ShadowDistance.HasValue && !Mathf.Approximately((float)observed.ShadowDistance, request.ShadowDistance.Value)) || (request.MasterTextureLimit.HasValue && observed.MasterTextureLimit != request.MasterTextureLimit.Value) || (request.LodBias.HasValue && !Mathf.Approximately((float)observed.LodBias, request.LodBias.Value)) || (request.MaximumLODLevel.HasValue && observed.MaximumLODLevel != request.MaximumLODLevel.Value) || (anisotropic.HasValue && observed.AnisotropicFiltering != anisotropic.Value.ToString()) || (shadows.HasValue && observed.Shadows != shadows.Value.ToString()) || (shadowResolution.HasValue && observed.ShadowResolution != shadowResolution.Value.ToString()) || (request.RealtimeReflectionProbes.HasValue && observed.RealtimeReflectionProbes != request.RealtimeReflectionProbes.Value) || (request.SoftParticles.HasValue && observed.SoftParticles != request.SoftParticles.Value)) throw new UnityCliBridge.BridgeCommandException("E_QUALITY_STATE_MISMATCH", "Quality settings readback did not match the request.", "Retry after the editor is idle.");
@@ -4,11 +4,11 @@ using UnityEditor;
4
4
  using UnityEngine;
5
5
  namespace UnityCli
6
6
  {
7
- public class GraphicsSceneDebugTool : IUnityCliTool<GraphicsSceneDebugTool.Request, GraphicsSceneDebugTool.Result>
7
+ public class RenderingSceneDebugTool : IUnityCliTool<RenderingSceneDebugTool.Request, RenderingSceneDebugTool.Result>
8
8
  {
9
9
  public sealed class Request { public string ShadingMode { get; set; } public string DrawMode { get; set; } }
10
10
  public sealed class Result { public bool SceneViewAvailable { get; set; } public string CurrentDrawMode { get; set; } public List<GraphicsPlannedEffect> PlannedEffects { get; set; } }
11
- public ToolDescriptor Describe() => new() { Name = "graphics.scene-debug", Summary = "Set the SceneView shading or draw mode for debugging.", Description = "Change the current Editor SceneView camera mode.", Group = "graphics",SideEffects = new[] { "scene-view-state" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Show SceneView wireframe", Input = new Request { DrawMode = "Wireframe" } } } };
11
+ public ToolDescriptor Describe() => new() { Name = "rendering.scene-debug", Summary = "Set the SceneView shading or draw mode for debugging.", Description = "Change the current Editor SceneView camera mode.", Group = "rendering",SideEffects = new[] { "scene-view-state" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Show SceneView wireframe", Input = new Request { DrawMode = "Wireframe" } } } };
12
12
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
13
13
  {
14
14
  var view = SceneView.lastActiveSceneView;
@@ -28,8 +28,8 @@ namespace UnityCli
28
28
  var observed = SceneView.lastActiveSceneView;
29
29
  if (observed == null || observed.cameraMode.drawMode != expected) throw new UnityCliBridge.BridgeCommandException("E_SCENE_DEBUG_STATE_MISMATCH", "SceneView draw mode readback did not match the request.", "Retry when a SceneView is active.");
30
30
  var effects = new List<GraphicsPlannedEffect>();
31
- if (shading.HasValue) effects.Add(new GraphicsPlannedEffect { Type = "graphics.scene-debug", Property = "shadingMode", Value = shading.Value.ToString() });
32
- if (draw.HasValue) effects.Add(new GraphicsPlannedEffect { Type = "graphics.scene-debug", Property = "drawMode", Value = draw.Value.ToString() });
31
+ if (shading.HasValue) effects.Add(new GraphicsPlannedEffect { Type = "rendering.scene-debug", Property = "shadingMode", Value = shading.Value.ToString() });
32
+ if (draw.HasValue) effects.Add(new GraphicsPlannedEffect { Type = "rendering.scene-debug", Property = "drawMode", Value = draw.Value.ToString() });
33
33
  return new System.Threading.Tasks.ValueTask<Result>(new Result { SceneViewAvailable = true, CurrentDrawMode = observed.cameraMode.name, PlannedEffects = effects });
34
34
  }
35
35
  }
@@ -0,0 +1,17 @@
1
+ #if UNITY_EDITOR
2
+ using System.Collections.Generic;
3
+ using UnityEditor;
4
+ using UnityEngine;
5
+
6
+ namespace UnityCli
7
+ {
8
+ /// <summary>rendering.stats — 读取渲染统计(drawCalls/batches/triangles/vertices 等)。</summary>
9
+ public class RenderingStatsTool : IUnityCliTool<RenderingStatsTool.Request, RenderingStatsTool.Result>
10
+ {
11
+ public sealed class Request { }
12
+ public sealed class Result { public RenderStatsInfo Stats { get; set; } }
13
+ public ToolDescriptor Describe() => new() { Name = "rendering.stats", Summary = "Read one unified render counter and memory snapshot.", Description = "Read-only in Edit and Play mode. Returns one bounded snapshot containing draw calls, batches, set-pass calls, triangles, vertices, screen resolution, texture/render-texture memory, and vertex-buffer memory from RenderStats (Unity 6) or UnityStats (2022.3).", Group = "rendering",DestructiveHint = false, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Read render stats", Input = new Request { } } } };
14
+ public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default) => new System.Threading.Tasks.ValueTask<Result>(new Result { Stats = GraphicsToolSupport.BuildRenderStats() });
15
+ }
16
+ }
17
+ #endif
@@ -4,8 +4,8 @@ using System.Reflection;
4
4
 
5
5
  namespace UnityCli
6
6
  {
7
- /// <summary>reflection.method.find — stable raw method ordinal pagination under one reflection budget。</summary>
8
- public class ReflectionMethodFindTool : IUnityCliTool<ReflectionMethodFindTool.Request, ReflectionMethodFindTool.Result>
7
+ /// <summary>runtime-reflection.method.find — stable raw method ordinal pagination under one reflection budget。</summary>
8
+ public class RuntimeReflectionMethodFindTool : IUnityCliTool<RuntimeReflectionMethodFindTool.Request, RuntimeReflectionMethodFindTool.Result>
9
9
  {
10
10
  public sealed class Request
11
11
  {
@@ -32,10 +32,10 @@ namespace UnityCli
32
32
 
33
33
  public ToolDescriptor Describe() => new()
34
34
  {
35
- Name = "reflection.method.find",
35
+ Name = "runtime-reflection.method.find",
36
36
  Summary = "Page live C# method signatures by exact type/name and visibility/static scope under one reflection budget.",
37
37
  Description = "Find methods on one exact live type. includePrivate defaults false; includeStatic/includeInstance default true. pageSize is 1..500 (default 100). Filtering advances over raw MethodInfo ordinals, so sparse searches remain bounded and total is the raw method count rather than a fabricated filtered total. Each method and parameter descriptor consumes the shared scan/node/reflection/monotonic-time/UTF-8 budget; defaults are 10000/4096/4096/250 ms/1 MiB and maxima are 100000/20000/20000/2000 ms/8 MiB. A parameter-heavy method may return parametersTruncated with parameterCount. nextCursor binds type, flags, name filter and listener/assembly generation. Read-only in Edit and Play Mode.",
38
- Group = "reflection", DestructiveHint = false, Target = "editor", PlayModeSupport = "supported",
38
+ Group = "runtime-reflection", DestructiveHint = false, Target = "editor", PlayModeSupport = "supported",
39
39
  DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000,
40
40
  Examples = new[] { new ToolExample { Description = "Find Translate overloads", Input = new Request { TypeName = "UnityEngine.Transform", MethodName = "Translate", PageSize = 100 } } }
41
41
  };
@@ -43,7 +43,7 @@ namespace UnityCli
43
43
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
44
44
  {
45
45
  if (request == null || string.IsNullOrEmpty(request.TypeName))
46
- throw new UnityCliBridge.BridgeCommandException("E_TYPE_NAME_REQUIRED", "reflection.method.find requires typeName.", "Pass a full live C# type name.");
46
+ throw new UnityCliBridge.BridgeCommandException("E_TYPE_NAME_REQUIRED", "runtime-reflection.method.find requires typeName.", "Pass a full live C# type name.");
47
47
  var bindings = (request.IncludePrivate ? BindingFlags.Public | BindingFlags.NonPublic : BindingFlags.Public)
48
48
  | (request.IncludeStatic ? BindingFlags.Static : BindingFlags.Default)
49
49
  | (request.IncludeInstance ? BindingFlags.Instance : BindingFlags.Default);
@@ -7,7 +7,7 @@ namespace UnityCli
7
7
  /// <summary>
8
8
  /// <summary>通过反射调用任意 C# 方法。</summary>
9
9
  /// </summary>
10
- public class ReflectionMethodCallTool : IUnityCliTool<ReflectionMethodCallTool.Request, ReflectionMethodCallTool.Result>
10
+ public class RuntimeReflectionMethodInvokeTool : IUnityCliTool<RuntimeReflectionMethodInvokeTool.Request, RuntimeReflectionMethodInvokeTool.Result>
11
11
  {
12
12
  public sealed class Request
13
13
  {
@@ -38,10 +38,10 @@ namespace UnityCli
38
38
 
39
39
  public ToolDescriptor Describe() => new()
40
40
  {
41
- Name = "reflection.method.call",
41
+ Name = "runtime-reflection.method.invoke",
42
42
  Summary = "Call one synchronous C# method in the live Editor and prove declared state through a read Tool.",
43
43
  Description = "Resolve the exact type, overload, arguments, and optional instance under one request budget before invoking one synchronous method. completionProbe is mandatory and proves declared before/after state through an eligible read Tool in the same Editor turn. Candidate methods, parameters, signatures, reflection work, monotonic main-thread time, and output bytes are globally bounded in dry-run and execution. Task/ValueTask, iterator, yield, and AsyncOperation methods are rejected; a method return value is never accepted as completion proof.",
44
- Group = "reflection",
44
+ Group = "runtime-reflection",
45
45
  DestructiveHint = true,
46
46
  SideEffects = new[] { "arbitrary-method-invocation" },
47
47
  Target = "editor",
@@ -76,8 +76,8 @@ namespace UnityCli
76
76
  if (string.IsNullOrEmpty(request.TypeName) || string.IsNullOrEmpty(request.MethodName))
77
77
  {
78
78
  throw new UnityCliBridge.BridgeCommandException("E_METHOD_TARGET_REQUIRED",
79
- "reflection.method.call requires typeName and methodName.",
80
- "Run tools run reflection.method.find to discover methods, then retry with the required target fields.");
79
+ "runtime-reflection.method.invoke requires typeName and methodName.",
80
+ "Run tools run runtime-reflection.method.find to discover methods, then retry with the required target fields.");
81
81
  }
82
82
 
83
83
  var readBudget = ctx.UseReadBudget(request.Budget);
@@ -94,7 +94,7 @@ namespace UnityCli
94
94
  {
95
95
  PlannedEffects = new List<PlannedEffect>
96
96
  {
97
- new PlannedEffect { Type = "reflection.method.call", Target = request.TypeName + "." + request.MethodName, SideEffects = "arbitrary-method-invocation" }
97
+ new PlannedEffect { Type = "runtime-reflection.method.invoke", Target = request.TypeName + "." + request.MethodName, SideEffects = "arbitrary-method-invocation" }
98
98
  }
99
99
  });
100
100
  }
@@ -107,7 +107,7 @@ namespace UnityCli
107
107
  Completion = completion,
108
108
  PlannedEffects = new List<PlannedEffect>
109
109
  {
110
- new PlannedEffect { Type = "reflection.method.call", Target = request.TypeName + "." + request.MethodName, SideEffects = "arbitrary-method-invocation" }
110
+ new PlannedEffect { Type = "runtime-reflection.method.invoke", Target = request.TypeName + "." + request.MethodName, SideEffects = "arbitrary-method-invocation" }
111
111
  }
112
112
  });
113
113
  }
@@ -1,8 +1,8 @@
1
1
  #if UNITY_EDITOR
2
2
  namespace UnityCli
3
3
  {
4
- /// <summary>type.schema — live 类型 schema 的有界成员/definition 分页。</summary>
5
- public class TypeSchemaTool : IUnityCliTool<TypeSchemaTool.Request, TypeSchemaTool.Result>
4
+ /// <summary>runtime-reflection.type.schema — live 类型 schema 的有界成员/definition 分页。</summary>
5
+ public class RuntimeReflectionTypeSchemaTool : IUnityCliTool<RuntimeReflectionTypeSchemaTool.Request, RuntimeReflectionTypeSchemaTool.Result>
6
6
  {
7
7
  public sealed class Request
8
8
  {
@@ -26,10 +26,10 @@ namespace UnityCli
26
26
 
27
27
  public ToolDescriptor Describe() => new()
28
28
  {
29
- Name = "type.schema",
29
+ Name = "runtime-reflection.type.schema",
30
30
  Summary = "Page a live C# type schema under global depth, member, definition, reflection and byte ceilings.",
31
31
  Description = "Generate a JSON Schema page for one live C# type. maxDepth is 0..16 (default 3), maxMembers 1..512 (default 256), maxDefinitions 1..256 (default 128), and pageSize 1..256 (default 64). Primitive, enum, array, and dictionary roots use the same classification as recursive values and do not expose continuation; only object roots page bounded public member metadata by raw ordinal. nextCursor binds listener/assembly generation, the member fingerprint, and all structural limits. Recursive definitions, member candidates, interfaces, and friendly type names share the same scan/member/node/reflection/monotonic-time/UTF-8 budget (defaults 10000/4096/4096/250 ms/1 MiB; maxima 100000/20000/20000/2000 ms/8 MiB). Assembly reload or compilation invalidates the bounded type cache and old cursors. Read-only in Edit and Play Mode.",
32
- Group = "reflection", DestructiveHint = false, Target = "editor", PlayModeSupport = "supported",
32
+ Group = "runtime-reflection", DestructiveHint = false, Target = "editor", PlayModeSupport = "supported",
33
33
  DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000,
34
34
  Examples = new[] { new ToolExample { Description = "Read the first Rigidbody schema page", Input = new Request { TypeName = "UnityEngine.Rigidbody", PageSize = 64 } } }
35
35
  };
@@ -37,7 +37,7 @@ namespace UnityCli
37
37
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
38
38
  {
39
39
  if (request == null || string.IsNullOrEmpty(request.TypeName))
40
- throw new UnityCliBridge.BridgeCommandException("E_TYPE_NAME_REQUIRED", "type.schema requires typeName.", "Pass a full live C# type name.");
40
+ throw new UnityCliBridge.BridgeCommandException("E_TYPE_NAME_REQUIRED", "runtime-reflection.type.schema requires typeName.", "Pass a full live C# type name.");
41
41
  var budget = ctx.UseReadBudget(request.Budget);
42
42
  var page = UnityCliBridge.TypeSchemaGenerator.Generate(request.TypeName, request.MaxDepth ?? 3, request.MaxMembers ?? 256,
43
43
  request.MaxDefinitions ?? 128, request.PageSize ?? 64, request.Cursor, budget);
@@ -41,7 +41,7 @@ namespace UnityCli
41
41
  }
42
42
  if (gameObject == null)
43
43
  {
44
- throw new BridgeCommandException("E_TARGET_NOT_FOUND", "GameObject context target not found.", "Pass input target, path, or id. Use a scene context such as scene.cameras to discover reusable scene object references.");
44
+ throw new BridgeCommandException("E_TARGET_NOT_FOUND", "GameObject context target not found.", "Pass input target, path, or id. Use a scene context such as scene.hierarchy to discover reusable scene object references.");
45
45
  }
46
46
  return gameObject;
47
47
  }
@@ -27,7 +27,7 @@ namespace UnityCli
27
27
  public ToolDescriptor Describe() => new()
28
28
  {
29
29
  Name = "scene.gameobject", Summary = "Read one GameObject summary by id, hierarchy path, or name without modifying the scene.",
30
- Description = "Read one GameObject's lightweight scene summary by id, hierarchy path, or name in Edit or Play mode. Use this after scene.hierarchy or go.find discovery and before component.get, object.get-data, or mutation tools to confirm a stable path/id. Does not modify the scene; set includeComponents=false when only the reusable reference is needed.",
30
+ Description = "Read one GameObject's lightweight scene summary by id, hierarchy path, or name in Edit or Play mode. Use this after scene.hierarchy or game-object.find discovery and before component.get, serialized-object.read, or mutation tools to confirm a stable path/id. Does not modify the scene; set includeComponents=false when only the reusable reference is needed.",
31
31
  DestructiveHint = false,
32
32
  Group = "scene", Target = "editor", PlayModeSupport = "supported",
33
33
  Examples = new[] { new ToolExample { Description = "Read the main camera object", Input = new Request { Target = "Main Camera", IncludeComponents = true } }, new ToolExample { Description = "Read only the reusable object reference", Input = new Request { Target = "Main Camera", IncludeComponents = false } } }
@@ -68,7 +68,7 @@ namespace UnityCli
68
68
  {
69
69
  Name = "scene.hierarchy",
70
70
  Summary = "Read a lightweight, paged active scene hierarchy from stable raw GameObject positions.",
71
- Description = "Read a lightweight active-scene hierarchy in Edit or Play mode. Use parent for one subtree, maxDepth to limit recursion, query/name/component filters to narrow results, and includeComponents only when component previews are needed. Read one selected object with scene.gameobject; use object.get-data or component.get for deep fields. pageSize is 1..500 (default 50), maxDepth is 0..16 (default 1), each page scans only forward from nextCursor, pageInfo never fabricates a filtered total, and old generations return E_CONTINUATION_STALE. All pages share scan/node/getter/reflection/time/UTF-8 budgets.",
71
+ Description = "Read a lightweight active-scene hierarchy in Edit or Play mode. Use parent for one subtree, maxDepth to limit recursion, query/name/component filters to narrow results, and includeComponents only when component previews are needed. Read one selected object with scene.gameobject; use serialized-object.read or component.get for deep fields. pageSize is 1..500 (default 50), maxDepth is 0..16 (default 1), each page scans only forward from nextCursor, pageInfo never fabricates a filtered total, and old generations return E_CONTINUATION_STALE. All pages share scan/node/getter/reflection/time/UTF-8 budgets.",
72
72
  Group = "scene",
73
73
  DestructiveHint = false,
74
74
  Target = "editor",
@@ -5,9 +5,9 @@ using UnityEngine;
5
5
  namespace UnityCli
6
6
  {
7
7
  /// <summary>
8
- /// camera.screenshot — 从指定 Camera 渲染 PNG/JPG 截图到文件。
8
+ /// screenshot.from-camera — 从指定 Camera 渲染 PNG/JPG 截图到文件。
9
9
  /// </summary>
10
- public class CameraScreenshotTool : IUnityCliTool<CameraScreenshotTool.Request, CameraCapture>
10
+ public class ScreenshotFromCameraTool : IUnityCliTool<ScreenshotFromCameraTool.Request, CameraCapture>
11
11
  {
12
12
  public sealed class Request
13
13
  {
@@ -27,10 +27,10 @@ namespace UnityCli
27
27
 
28
28
  public ToolDescriptor Describe() => new()
29
29
  {
30
- Name = "camera.screenshot",
30
+ Name = "screenshot.from-camera",
31
31
  Summary = "Render a PNG/JPG artifact from one specific Camera; use screenshot.* for view-based captures.",
32
32
  Description = "Render one Camera to PNG/JPG. Before the first effect, dimensions must be 1..8192 with at most 16777216 pixels, and the aggregate plan must fit default ceilings of 33554432 total pixels, 128 MiB temporary memory and 64 MiB artifacts (public maxima 67108864, 256 MiB and 256 MiB). limits may only tighten or raise within those maxima; zero, negative and excessive values fail before capture. The texture and Camera state are released/restored in finally. Available in Edit and Play Mode with session render effects.",
33
- Group = "camera",
33
+ Group = "screenshot",
34
34
  DestructiveHint = true,
35
35
  SideEffects = new[] { "artifact-write", "render-texture" },
36
36
  Target = "editor",
@@ -6,9 +6,9 @@ using UnityEngine;
6
6
  namespace UnityCli
7
7
  {
8
8
  /// <summary>
9
- /// object.modify — 使用可验证的 SerializedProperty pathPatches 修改 Unity Object。
9
+ /// serialized-object.patch — 使用可验证的 SerializedProperty pathPatches 修改 Unity Object。
10
10
  /// </summary>
11
- public class ObjectModifyTool : IUnityCliTool<ObjectModifyTool.Request, ObjectModifyTool.Result>
11
+ public class SerializedObjectPatchTool : IUnityCliTool<SerializedObjectPatchTool.Request, SerializedObjectPatchTool.Result>
12
12
  {
13
13
  public sealed class Request : IUnityCliObjectReferenceInput, IUnityCliObjectSerializationInput
14
14
  {
@@ -52,10 +52,10 @@ namespace UnityCli
52
52
 
53
53
  public ToolDescriptor Describe() => new()
54
54
  {
55
- Name = "object.modify",
55
+ Name = "serialized-object.patch",
56
56
  Summary = "Modify any Unity Object via verified serialized pathPatches; supports dry-run.",
57
57
  Description = "Modify an object using non-empty direct replace pathPatches on verifiable SerializedProperties. Resolves the target by instanceId, assetPath/guid, or path/name. Supports dry-run to preview without applying. Marks scene objects dirty.",
58
- Group = "object",
58
+ Group = "serialized-object",
59
59
  DestructiveHint = true,
60
60
  SideEffects = new[] { "object-modify" },
61
61
  Target = "editor",
@@ -71,16 +71,16 @@ namespace UnityCli
71
71
 
72
72
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
73
73
  {
74
- ObjectToolSupport.EnsureEditorNotBusy("object.modify");
74
+ ObjectToolSupport.EnsureEditorNotBusy("serialized-object.patch");
75
75
  var readBudget = ctx.UseReadBudget(request.Budget);
76
76
  var target = UnityCliBridge.ObjectRefResolver.ResolveObject(request, readBudget);
77
77
  if (EditorApplication.isPlaying && EditorUtility.IsPersistent(target))
78
78
  {
79
- throw new UnityCliBridge.BridgeCommandException("E_TOOL_PLAYMODE_UNAVAILABLE", "object.modify cannot modify persistent assets during Play Mode.", "Target a scene object or exit Play Mode before modifying an asset.");
79
+ throw new UnityCliBridge.BridgeCommandException("E_TOOL_PLAYMODE_UNAVAILABLE", "serialized-object.patch cannot modify persistent assets during Play Mode.", "Target a scene object or exit Play Mode before modifying an asset.");
80
80
  }
81
81
 
82
82
  if (request.PathPatches == null || request.PathPatches.Count == 0)
83
- throw new UnityCliBridge.BridgeCommandException("E_OBJECT_PATCH_REQUIRED", "object.modify requires non-empty pathPatches.", "Pass direct replace pathPatches for writable serialized properties.");
83
+ throw new UnityCliBridge.BridgeCommandException("E_OBJECT_PATCH_REQUIRED", "serialized-object.patch requires non-empty pathPatches.", "Pass direct replace pathPatches for writable serialized properties.");
84
84
 
85
85
  var hasPathPatches = true;
86
86
  UnityCliBridge.ObjectPatch.ValidateOnly(target, request.PathPatches, null);
@@ -94,7 +94,7 @@ namespace UnityCli
94
94
  TypeName = target.GetType().FullName,
95
95
  PlannedEffects = new List<PlannedEffect>
96
96
  {
97
- new PlannedEffect { Type = "object.modify", Target = target.name, HasPathPatches = hasPathPatches }
97
+ new PlannedEffect { Type = "serialized-object.patch", Target = target.name, HasPathPatches = hasPathPatches }
98
98
  }
99
99
  });
100
100
  }
@@ -4,9 +4,9 @@ using System.Collections.Generic;
4
4
  namespace UnityCli
5
5
  {
6
6
  /// <summary>
7
- /// object.get-data — 读取任意 UnityEngine.Object 的深序列化数据。只读。
7
+ /// serialized-object.read — 读取任意 UnityEngine.Object 的深序列化数据。只读。
8
8
  /// </summary>
9
- public class ObjectGetDataTool : IUnityCliTool<ObjectGetDataTool.Request, ObjectGetDataTool.Result>
9
+ public class SerializedObjectReadTool : IUnityCliTool<SerializedObjectReadTool.Request, SerializedObjectReadTool.Result>
10
10
  {
11
11
  public sealed class Request : IUnityCliObjectReferenceInput, IUnityCliObjectSerializationInput
12
12
  {
@@ -39,10 +39,10 @@ namespace UnityCli
39
39
 
40
40
  public ToolDescriptor Describe() => new()
41
41
  {
42
- Name = "object.get-data",
42
+ Name = "serialized-object.read",
43
43
  Summary = "Read deep serialized data from any Unity Object by instanceId, assetPath, guid or path.",
44
44
  Description = "Read deep serialized data from any UnityEngine.Object. maxDepth is 0..16 and maxArrayItems is 1..1000. paths accepts at most 128 ordered exact reads; all paths and recursive branches share one budget (10000 scans, 4096 nodes, 2048 getters, 4096 reflection calls, 250 main-thread ms, 1 MiB UTF-8 by default; public maxima are 100000/20000/10000/20000/2000 ms/8 MiB). Truncated nodes return nextPath. Read-only in Edit and Play Mode.",
45
- Group = "object",
45
+ Group = "serialized-object",
46
46
  DestructiveHint = false,
47
47
  Target = "editor",
48
48
  PlayModeSupport = "supported",
@@ -7,13 +7,13 @@ using UnityEngine.Rendering;
7
7
 
8
8
  namespace UnityCli
9
9
  {
10
- /// <summary>graphics.volume — 列出场景中的 Volume 组件(通过反射,兼容 URP/HDRP)。</summary>
11
- public class GraphicsVolumeTool : IUnityCliTool<GraphicsVolumeTool.Request, GraphicsVolumeTool.Result>
10
+ /// <summary>volume.list — 列出场景中的 Volume 组件(通过反射,兼容 URP/HDRP)。</summary>
11
+ public class VolumeListTool : IUnityCliTool<VolumeListTool.Request, VolumeListTool.Result>
12
12
  {
13
13
  public sealed class Request { public string Target { get; set; } public int PageSize { get; set; } public string Cursor { get; set; } }
14
14
  public sealed class Result { public List<VolumeInfo> Volumes { get; set; } public long Count { get; set; } public PageInfo PageInfo { get; set; } }
15
15
  public sealed class PageInfo { public bool HasMore { get; set; } public long PageSize { get; set; } }
16
- public ToolDescriptor Describe() => new() { Name = "graphics.volume", Summary = "List Volume components in the scene, optionally filtered by target.", Description = "Find Volume components (URP/HDRP) via reflection. Filter by GameObject name or hierarchy path and return count plus page metadata. This Tool is read-only.", Group = "graphics",DestructiveHint = false, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "List all volumes", Input = new Request { PageSize = 100 } } } };
16
+ public ToolDescriptor Describe() => new() { Name = "volume.list", Summary = "List Volume components in the scene, optionally filtered by target.", Description = "Find Volume components (URP/HDRP) via reflection. Filter by GameObject name or hierarchy path and return count plus page metadata. This Tool is read-only.", Group = "volume",DestructiveHint = false, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "List all volumes", Input = new Request { PageSize = 100 } } } };
17
17
  /// <summary>读取 pipeline-neutral Volume 列表,并保留旧读取入口的 count/pageInfo contract。</summary>
18
18
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
19
19
  {
@@ -33,25 +33,6 @@ namespace UnityCli
33
33
  private const int PreferredPortRange = 4096;
34
34
  private const int PreferredPortRetryCount = 4;
35
35
  private const int DeterministicFallbackCount = 64;
36
- private static readonly string[] CameraCommands = { "camera.list", "camera.info", "camera.screenshot", "camera.create", "camera.target", "camera.lens", "camera.multiview" };
37
- private static readonly string[] SceneCommands = { "scene.active", "scene.hierarchy", "scene.create", "scene.load", "scene.save" };
38
- private static readonly string[] GameObjectCommands = { "go.find", "go.create", "go.modify", "go.duplicate", "go.move-relative", "go.look-at", "go.delete", "component.add", "component.remove", "component.set" };
39
- private static readonly string[] AssetCommands = { "asset.search", "asset.info", "asset.create", "asset.import", "asset.modify", "asset.delete", "asset.duplicate", "asset.move", "asset.rename", "asset.refresh" };
40
- private static readonly string[] ScreenshotCommands = { "screenshot.game-view", "screenshot.scene-view", "screenshot.isolated-object", "screenshot.orbit", "screenshot.surround" };
41
- private static readonly string[] PrefabCommands = { "prefab.info", "prefab.hierarchy", "prefab.create", "prefab.modify", "prefab.stage-open", "prefab.stage-save", "prefab.stage-close" };
42
- private static readonly string[] UiCommands = { "ui.canvas.create", "ui.text.create", "ui.button.create", "ui.image.create", "ui.document.info", "ui.document.create", "ui.hierarchy" };
43
- private static readonly string[] MaterialCommands = { "material.info", "material.create", "material.assign", "material.set" };
44
- private static readonly string[] GraphicsCommands = { "graphics.quality", "graphics.volume", "graphics.bake-start", "graphics.bake-cancel", "graphics.bake-status", "graphics.bake-clear", "graphics.bake-reflection-probe", "graphics.bake-settings", "graphics.light-probe-group", "graphics.reflection-probe", "graphics.stats", "graphics.scene-debug", "graphics.skybox-get", "graphics.skybox-set-material", "graphics.skybox-set-properties", "graphics.skybox-set-ambient", "graphics.skybox-set-fog", "graphics.skybox-set-reflection", "graphics.skybox-set-sun", "graphics.pipeline-settings", "graphics.pipeline-info" };
45
- private static readonly string[] PhysicsCommands = { "physics.settings", "physics.collision-matrix", "physics.material", "physics.assign-material", "physics.joint.add", "physics.joint.remove", "physics.force", "physics.overlap", "physics.rigidbody", "physics.raycast", "physics.simulation", "physics.linecast", "physics.shapecast", "physics.validate" };
46
- private static readonly string[] ProfilerCommands = { "profiler.start", "profiler.stop", "profiler.pause", "profiler.counter", "profiler.memory", "profiler.frame", "profiler.capture", "profiler.export", "profiler.status" };
47
- private static readonly string[] AnimationCommands = { "animation.clip", "animation.clip.create", "animation.clip.modify", "animation.state", "animation.play", "animation.stop", "animator.get-info", "animator.get-parameter", "animator.set-parameter", "animator.crossfade", "animator.set-speed", "animator.set-enabled", "controller.create", "controller.add-state", "controller.add-transition", "controller.add-parameter", "controller.get-info", "controller.assign", "controller.add-layer", "controller.remove-layer", "controller.set-layer-weight", "controller.create-blend-tree-1d", "controller.create-blend-tree-2d", "controller.add-blend-tree-child" };
48
- private static readonly string[] ShaderCommands = { "shader.info", "shader.read", "shader.create", "shader.update" };
49
- private static readonly string[] TextureCommands = { "texture.info", "texture.create", "texture.sprite", "texture.import-settings" };
50
- private static readonly string[] EditorCommands = { "editor.play", "editor.pause", "editor.stop", "editor.undo", "editor.redo", "editor.resolution", "editor.menu", "project.tag.add", "project.tag.remove", "project.layer.add", "project.layer.remove" };
51
- private static readonly string[] ScriptableObjectCommands = { "scriptable-object.create", "scriptable-object.info", "scriptable-object.list-types", "scriptable-object.modify" };
52
- private static readonly string[] CodeCommands = { "code.exec" };
53
- private static readonly string[] ProjectToolCommands = { "project-tool.health", "project-tool.groups", "project-tool.summary", "project-tool.describe", "project-tool.list", "project-tool.run" };
54
- private static readonly string[] RuntimeToolCommands = { "runtime-tool.groups", "runtime-tool.summary", "runtime-tool.describe", "runtime-tool.list", "runtime-tool.run" };
55
36
  private const string BridgeDiagnosticsFingerprint = "health-fingerprint-play-mode-guard-v3";
56
37
  private static readonly BridgeCommandRegistry CommandRegistry = CreateCommandRegistry();
57
38
  private static readonly string ListenerId = "listener-" + Guid.NewGuid().ToString("N");
@@ -370,7 +351,7 @@ namespace UnityCli
370
351
  private static CancellationTokenSource CreateExecutionLifetime(UnityCli.Protocol.BridgeRequest request)
371
352
  {
372
353
  var tokens = new List<CancellationToken> { BridgeLifetime.Token };
373
- if (request != null && string.Equals(request.Command, "runtime-tool.run", StringComparison.Ordinal)) tokens.Add(runtimeSession.Token);
354
+ if (request != null && string.Equals(request.Command, "catalog.player.run", StringComparison.Ordinal)) tokens.Add(runtimeSession.Token);
374
355
  return CancellationTokenSource.CreateLinkedTokenSource(tokens.ToArray());
375
356
  }
376
357
 
@@ -466,9 +447,9 @@ namespace UnityCli
466
447
  var allowedDuringPlayModeTransition = UnityCliDurableStatusCoordinator.IsCommand(request.Command) || UnityCliCompileCoordinator.IsCommand(request.Command) || UnityCliLiveRefreshCoordinator.IsCommand(request.Command) || UnityCliAssetRefreshCoordinator.IsCommand(request.Command) || UnityCliPackageEmbedCoordinator.IsCommand(request.Command) || UnityCliPackageResolveCoordinator.IsCommand(request.Command) || UnityCliTestRunCoordinator.IsCommand(request.Command) || UnityCliNavMeshBakeCoordinator.IsCommand(request.Command) || UnityCliOcclusionBakeCoordinator.IsCommand(request.Command)
467
448
  || IsEditorStateSnapshotCommand(request.Command)
468
449
  || request.Command == "editor.pause"
469
- || request.Command == "editor.stop"
450
+ || request.Command == "editor.play-mode.stop"
470
451
  || IsProjectToolCatalogReadCommand(request.Command)
471
- || request.Command == "runtime-tool.run"
452
+ || request.Command == "catalog.player.run"
472
453
  || IsDoctorAdmissionBypassCommand(request.Command);
473
454
 
474
455
  if (!allowedDuringPlayModeTransition)
@@ -246,7 +246,7 @@ namespace UnityCli
246
246
  var remaining = work.AbsoluteDeadlineMs - dependencies.UtcNowMs();
247
247
  if (remaining <= 0L || dependencies.IsStopping())
248
248
  {
249
- var timeout = Error(requestId, "E_EXECUTION_TIMEOUT", "Runtime request did not reach a proven terminal before its immutable deadline or session shutdown.", new[] { "Inspect runtime.state before submitting a new request." }, true, 100);
249
+ var timeout = Error(requestId, "E_EXECUTION_TIMEOUT", "Runtime request did not reach a proven terminal before its immutable deadline or session shutdown.", new[] { "Inspect player-runtime.state before submitting a new request." }, true, 100);
250
250
  if (work.Owner.FinalizeRuntimeRequest(work, timeout, 0)) return work.Completion.Task.Result;
251
251
  return timeout;
252
252
  }
@@ -435,22 +435,22 @@ namespace UnityCli
435
435
  var expectedGeneration = ReadString(input, "expectedCatalogGeneration");
436
436
  if (!string.IsNullOrEmpty(expectedGeneration) && !string.Equals(expectedGeneration, generation, StringComparison.Ordinal))
437
437
  terminal = Error(requestId, "E_TOOL_CATALOG_CHANGED", "The Tool catalog generation changed before this continuation page was read.", new[] { "Restart this discovery query from its first page against the current Runtime generation." });
438
- else if (string.Equals(command, "runtime-tool.groups", StringComparison.Ordinal))
438
+ else if (string.Equals(command, "catalog.player.groups", StringComparison.Ordinal))
439
439
  terminal = Success(requestId, new Dictionary<string, object> { { "catalogGeneration", generation }, { "groups", new List<object>() } });
440
- else if (string.Equals(command, "runtime-tool.summary", StringComparison.Ordinal))
440
+ else if (string.Equals(command, "catalog.player.summary", StringComparison.Ordinal))
441
441
  terminal = Success(requestId, RuntimeCatalogSummaryData(input, generation));
442
- else if (string.Equals(command, "runtime-tool.describe", StringComparison.Ordinal))
442
+ else if (string.Equals(command, "catalog.player.describe", StringComparison.Ordinal))
443
443
  terminal = Success(requestId, new Dictionary<string, object> { { "catalogGeneration", generation }, { "found", false } });
444
444
  else
445
445
  terminal = Success(requestId, new Dictionary<string, object> { { "tools", new List<object>() }, { "target", "runtime" }, { "runtimeSessionId", sessionId } });
446
446
  }
447
- else if (string.Equals(command, "runtime-tool.run", StringComparison.Ordinal))
447
+ else if (string.Equals(command, "catalog.player.run", StringComparison.Ordinal))
448
448
  {
449
449
  var wrapper = ReadObject(request, "input");
450
- if (wrapper == null || !HasOnlyKeys(wrapper, "name", "input", "artifactDir", "playModeSessionId")) throw new FormatException("runtime-tool.run wrapper is invalid.");
450
+ if (wrapper == null || !HasOnlyKeys(wrapper, "name", "input", "artifactDir", "playModeSessionId")) throw new FormatException("catalog.player.run wrapper is invalid.");
451
451
  var name = RequiredString(wrapper, "name", 256);
452
452
  var toolInput = ReadObject(wrapper, "input");
453
- if (toolInput == null) throw new FormatException("runtime-tool.run input must be an object.");
453
+ if (toolInput == null) throw new FormatException("catalog.player.run input must be an object.");
454
454
  var execution = ReadObject(request, "execution");
455
455
  object dryRunValue;
456
456
  var dryRun = execution != null && execution.TryGetValue("dryRun", out dryRunValue) && dryRunValue is bool && (bool)dryRunValue;
@@ -472,10 +472,10 @@ namespace UnityCli
472
472
 
473
473
  private static bool RuntimeCatalogReadCommand(string command)
474
474
  {
475
- return string.Equals(command, "runtime-tool.groups", StringComparison.Ordinal)
476
- || string.Equals(command, "runtime-tool.summary", StringComparison.Ordinal)
477
- || string.Equals(command, "runtime-tool.describe", StringComparison.Ordinal)
478
- || string.Equals(command, "runtime-tool.list", StringComparison.Ordinal);
475
+ return string.Equals(command, "catalog.player.groups", StringComparison.Ordinal)
476
+ || string.Equals(command, "catalog.player.summary", StringComparison.Ordinal)
477
+ || string.Equals(command, "catalog.player.describe", StringComparison.Ordinal)
478
+ || string.Equals(command, "catalog.player.list", StringComparison.Ordinal);
479
479
  }
480
480
 
481
481
  /// <summary>Runtime catalog是私有闭集协议;空执行器也必须拒绝畸形或无界输入。</summary>
@@ -490,12 +490,12 @@ namespace UnityCli
490
490
  if (reserved == null || reserved.Count > 4096 || reserved.Any(value => !(value is string) || string.IsNullOrWhiteSpace((string)value) || Encoding.UTF8.GetByteCount((string)value) > 256))
491
491
  throw new FormatException("Catalog reserved names exceed their bounded item or string limits.");
492
492
  }
493
- if (string.Equals(command, "runtime-tool.groups", StringComparison.Ordinal))
493
+ if (string.Equals(command, "catalog.player.groups", StringComparison.Ordinal))
494
494
  {
495
495
  if (!HasOnlyKeys(input, "expectedCatalogGeneration", "reservedNames")) throw new FormatException("Runtime catalog groups input contains an unknown field.");
496
496
  return;
497
497
  }
498
- if (string.Equals(command, "runtime-tool.summary", StringComparison.Ordinal))
498
+ if (string.Equals(command, "catalog.player.summary", StringComparison.Ordinal))
499
499
  {
500
500
  if (!HasOnlyKeys(input, "group", "keyword", "limit", "expectedCatalogGeneration", "reservedNames", "localNames", "cursorContext", "cursorToken"))
501
501
  throw new FormatException("Runtime catalog summary input contains an unknown field.");
@@ -514,7 +514,7 @@ namespace UnityCli
514
514
  RuntimeCatalogStringList(input, "localNames", true);
515
515
  return;
516
516
  }
517
- if (string.Equals(command, "runtime-tool.describe", StringComparison.Ordinal))
517
+ if (string.Equals(command, "catalog.player.describe", StringComparison.Ordinal))
518
518
  {
519
519
  if (!HasOnlyKeys(input, "name")) throw new FormatException("Runtime catalog describe input contains an unknown field.");
520
520
  var name = RequiredString(input, "name", 256);
@@ -1077,7 +1077,7 @@ namespace UnityCli
1077
1077
  {
1078
1078
  if (newlyConsumed && admissionOwner != null && pool != null && !TryCompensateRuntimeAdmission(pool, admissionOwner))
1079
1079
  {
1080
- var terminal = Error(requestId, "E_RUNTIME_BRIDGE_FAILED", "Runtime queue publication failed and exact admission cleanup is pending.", new[] { "Inspect runtime.state before submitting a new request." });
1080
+ var terminal = Error(requestId, "E_RUNTIME_BRIDGE_FAILED", "Runtime queue publication failed and exact admission cleanup is pending.", new[] { "Inspect player-runtime.state before submitting a new request." });
1081
1081
  FinalizeRuntimeRequest(work, terminal, 0);
1082
1082
  return Publication(RuntimePublicationOutcome.Rejected, work, null);
1083
1083
  }
@@ -131,7 +131,7 @@ namespace UnityCli
131
131
  },
132
132
  { "progress", new List<object>() }, { "blockers", new List<object>() },
133
133
  { "unityVersion", Application.unityVersion }, { "buildStamp", buildStamp },
134
- { "toolCatalogFingerprint", "runtime-tool-executor" }, { "executablePath", executablePath }, { "buildId", buildId }
134
+ { "toolCatalogFingerprint", "player-runtime-executor" }, { "executablePath", executablePath }, { "buildId", buildId }
135
135
  };
136
136
  }
137
137