@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
@@ -3,11 +3,11 @@ using System.Collections.Generic;
3
3
  using UnityEngine;
4
4
  namespace UnityCli
5
5
  {
6
- public class GraphicsSkyboxSetFogTool : IUnityCliTool<GraphicsSkyboxSetFogTool.Request, GraphicsSkyboxSetFogTool.Result>
6
+ public class LightingSkyboxSetFogTool : IUnityCliTool<LightingSkyboxSetFogTool.Request, LightingSkyboxSetFogTool.Result>
7
7
  {
8
8
  public sealed class Request { public bool? Enabled { get; set; } public string Mode { get; set; } public string Color { get; set; } public float? Density { get; set; } public float? StartDistance { get; set; } public float? EndDistance { get; set; } }
9
9
  public sealed class Result { public bool Fog { get; set; } public string FogMode { get; set; } public string FogColor { get; set; } public double FogDensity { get; set; } public double FogStartDistance { get; set; } public double FogEndDistance { get; set; } public List<GraphicsPlannedEffect> PlannedEffects { get; set; } }
10
- public ToolDescriptor Describe() => new() { Name = "graphics.skybox-set-fog", Summary = "Set fog.", Description = "Set RenderSettings fog values.", Group = "graphics",SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Enable linear fog", Input = new Request { Enabled = true, Mode = "Linear", Color = "#808080", StartDistance = 0f, EndDistance = 100f } } } };
10
+ public ToolDescriptor Describe() => new() { Name = "lighting.skybox.set-fog", Summary = "Set fog.", Description = "Set RenderSettings fog values.", Group = "lighting",SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Enable linear fog", Input = new Request { Enabled = true, Mode = "Linear", Color = "#808080", StartDistance = 0f, EndDistance = 100f } } } };
11
11
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
12
12
  {
13
13
  FogMode? mode = string.IsNullOrEmpty(r.Mode) ? (FogMode?)null : GraphicsToolSupport.ParseEnum<FogMode>(r.Mode, "mode"); var color = string.IsNullOrEmpty(r.Color) ? (Color?)null : GraphicsToolSupport.ParseColor(r.Color);
@@ -16,7 +16,7 @@ namespace UnityCli
16
16
  if (!r.Enabled.HasValue && !mode.HasValue && !color.HasValue && !density.HasValue && !start.HasValue && !end.HasValue) return new System.Threading.Tasks.ValueTask<Result>(Read(new List<GraphicsPlannedEffect>()));
17
17
  ctx.CommitEffect(); if (r.Enabled.HasValue) RenderSettings.fog = r.Enabled.Value; if (mode.HasValue) RenderSettings.fogMode = mode.Value; if (color.HasValue) RenderSettings.fogColor = color.Value; if (density.HasValue) RenderSettings.fogDensity = density.Value; if (start.HasValue) RenderSettings.fogStartDistance = start.Value; if (end.HasValue) RenderSettings.fogEndDistance = end.Value;
18
18
  if ((r.Enabled.HasValue && RenderSettings.fog != r.Enabled.Value) || (mode.HasValue && RenderSettings.fogMode != mode.Value) || (color.HasValue && !GraphicsToolSupport.SameColor(RenderSettings.fogColor, color.Value)) || (density.HasValue && !Mathf.Approximately(RenderSettings.fogDensity, density.Value)) || (start.HasValue && !Mathf.Approximately(RenderSettings.fogStartDistance, start.Value)) || (end.HasValue && !Mathf.Approximately(RenderSettings.fogEndDistance, end.Value))) throw new UnityCliBridge.BridgeCommandException("E_FOG_STATE_MISMATCH", "Fog settings readback did not match the request.", "Retry after the editor is idle.");
19
- return new System.Threading.Tasks.ValueTask<Result>(Read(new List<GraphicsPlannedEffect> { new GraphicsPlannedEffect { Type = "graphics.skybox-set-fog", Property = "fog", Value = "updated" } }));
19
+ return new System.Threading.Tasks.ValueTask<Result>(Read(new List<GraphicsPlannedEffect> { new GraphicsPlannedEffect { Type = "lighting.skybox.set-fog", Property = "fog", Value = "updated" } }));
20
20
  }
21
21
  private static Result Read(List<GraphicsPlannedEffect> effects) { return new Result { Fog = RenderSettings.fog, FogMode = RenderSettings.fogMode.ToString(), FogColor = GraphicsToolSupport.ColorHtml(RenderSettings.fogColor), FogDensity = RenderSettings.fogDensity, FogStartDistance = RenderSettings.fogStartDistance, FogEndDistance = RenderSettings.fogEndDistance, PlannedEffects = effects }; }
22
22
  }
@@ -6,15 +6,15 @@ using UnityEngine.Rendering;
6
6
 
7
7
  namespace UnityCli
8
8
  {
9
- /// <summary>graphics.skybox-set-material — 设置 RenderSettings.skybox 材质。</summary>
10
- public class GraphicsSkyboxSetMaterialTool : IUnityCliTool<GraphicsSkyboxSetMaterialTool.Request, GraphicsSkyboxSetMaterialTool.Result>
9
+ /// <summary>lighting.skybox.set-material — 设置 RenderSettings.skybox 材质。</summary>
10
+ public class LightingSkyboxSetMaterialTool : IUnityCliTool<LightingSkyboxSetMaterialTool.Request, LightingSkyboxSetMaterialTool.Result>
11
11
  {
12
12
  public sealed class Request { public string Material { get; set; } }
13
13
  public sealed class Result { public string Skybox { get; set; } public List<GraphicsPlannedEffect> PlannedEffects { get; set; } }
14
- public ToolDescriptor Describe() => new() { Name = "graphics.skybox-set-material", Summary = "Set the RenderSettings skybox material from an Assets/*.mat path.", Description = "Set RenderSettings.skybox. Accepts builtin:Default-Skybox to restore the built-in skybox.", Group = "graphics",DestructiveHint = false, SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Set skybox material", Input = new Request { Material = "Assets/Skyboxes/Day.mat" } } } };
14
+ public ToolDescriptor Describe() => new() { Name = "lighting.skybox.set-material", Summary = "Set the RenderSettings skybox material from an Assets/*.mat path.", Description = "Set RenderSettings.skybox. Accepts builtin:Default-Skybox to restore the built-in skybox.", Group = "lighting",DestructiveHint = false, SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Set skybox material", Input = new Request { Material = "Assets/Skyboxes/Day.mat" } } } };
15
15
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
16
16
  {
17
- if (string.IsNullOrEmpty(r.Material)) throw new UnityCliBridge.BridgeCommandException("E_MATERIAL_PATH_REQUIRED", "Pass --material <Assets/*.mat path>.", "Use tools run graphics.skybox-set-material --input '{\"material\":\"Assets/Skyboxes/Day.mat\"}'.");
17
+ if (string.IsNullOrEmpty(r.Material)) throw new UnityCliBridge.BridgeCommandException("E_MATERIAL_PATH_REQUIRED", "Pass --material <Assets/*.mat path>.", "Use tools run lighting.skybox.set-material --input '{\"material\":\"Assets/Skyboxes/Day.mat\"}'.");
18
18
  var material = GraphicsToolSupport.ResolveSkyboxMaterial(r.Material);
19
19
  if (material == null) throw new UnityCliBridge.BridgeCommandException("E_MATERIAL_NOT_FOUND", "Skybox material not found: " + r.Material, "Pass an existing Assets/*.mat path.");
20
20
  var materialPath = AssetDatabase.GetAssetPath(material);
@@ -26,7 +26,7 @@ namespace UnityCli
26
26
  var observedPath = observed == null ? null : AssetDatabase.GetAssetPath(observed);
27
27
  var observedGuid = string.IsNullOrEmpty(observedPath) ? null : AssetDatabase.AssetPathToGUID(observedPath);
28
28
  if (observed == null || !string.Equals(observedGuid, materialGuid, System.StringComparison.Ordinal) || (materialGuid == null && observed != material)) throw new UnityCliBridge.BridgeCommandException("E_SKYBOX_MATERIAL_STATE_MISMATCH", "Skybox material GUID readback did not match the request.", "Retry after the editor is idle.");
29
- return new System.Threading.Tasks.ValueTask<Result>(new Result { Skybox = observed.name, PlannedEffects = new List<GraphicsPlannedEffect> { new GraphicsPlannedEffect { Type = "graphics.skybox-set-material", Property = "skybox", Value = r.Material } } });
29
+ return new System.Threading.Tasks.ValueTask<Result>(new Result { Skybox = observed.name, PlannedEffects = new List<GraphicsPlannedEffect> { new GraphicsPlannedEffect { Type = "lighting.skybox.set-material", Property = "skybox", Value = r.Material } } });
30
30
  }
31
31
  }
32
32
  }
@@ -6,16 +6,16 @@ using UnityEngine.Rendering;
6
6
 
7
7
  namespace UnityCli
8
8
  {
9
- /// <summary>graphics.skybox-set-properties — 设置当前 skybox 材质的 shader 属性。</summary>
10
- public class GraphicsSkyboxSetPropertiesTool : IUnityCliTool<GraphicsSkyboxSetPropertiesTool.Request, GraphicsSkyboxSetPropertiesTool.Result>
9
+ /// <summary>lighting.skybox.set-properties — 设置当前 skybox 材质的 shader 属性。</summary>
10
+ public class LightingSkyboxSetPropertiesTool : IUnityCliTool<LightingSkyboxSetPropertiesTool.Request, LightingSkyboxSetPropertiesTool.Result>
11
11
  {
12
12
  public sealed class Request { public string Property { get; set; } public string Value { get; set; } }
13
13
  public sealed class Result { public string Skybox { get; set; } public List<GraphicsPlannedEffect> PlannedEffects { get; set; } }
14
- public ToolDescriptor Describe() => new() { Name = "graphics.skybox-set-properties", Summary = "Set a shader property on the current skybox material.", Description = "Set a float or color property on RenderSettings.skybox. Requires a skybox to be assigned first.", Group = "graphics",DestructiveHint = true, SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Set exposure", Input = new Request { Property = "_Exposure", Value = "1.5" } } } };
14
+ public ToolDescriptor Describe() => new() { Name = "lighting.skybox.set-properties", Summary = "Set a shader property on the current skybox material.", Description = "Set a float or color property on RenderSettings.skybox. Requires a skybox to be assigned first.", Group = "lighting",DestructiveHint = true, SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Set exposure", Input = new Request { Property = "_Exposure", Value = "1.5" } } } };
15
15
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
16
16
  {
17
17
  var skybox = RenderSettings.skybox;
18
- if (skybox == null) throw new UnityCliBridge.BridgeCommandException("E_SKYBOX_NOT_SET", "No skybox material is assigned to RenderSettings.", "Use graphics.skybox-set-material first.");
18
+ if (skybox == null) throw new UnityCliBridge.BridgeCommandException("E_SKYBOX_NOT_SET", "No skybox material is assigned to RenderSettings.", "Use lighting.skybox.set-material first.");
19
19
  var effects = new List<GraphicsPlannedEffect>();
20
20
  if (string.IsNullOrEmpty(r.Property) != string.IsNullOrEmpty(r.Value)) throw new UnityCliBridge.BridgeCommandException("E_SKYBOX_PROPERTY_INPUT_INVALID", "property and value must be provided together.", "Pass a material property and value.");
21
21
  if (!string.IsNullOrEmpty(r.Property))
@@ -42,7 +42,7 @@ namespace UnityCli
42
42
  var observed = GraphicsToolSupport.ReloadAsset<Material>(skyboxPath, skyboxGuid);
43
43
  if (observed == null || (color.HasValue && !GraphicsToolSupport.SameColor(observed.GetColor(r.Property), color.Value)) || (number.HasValue && !Mathf.Approximately(observed.GetFloat(r.Property), number.Value)) || (isInt && observed.GetInt(r.Property) != parsedInt)) throw new UnityCliBridge.BridgeCommandException("E_SKYBOX_PROPERTY_STATE_MISMATCH", "Skybox property readback did not match the request.", "Retry after the editor is idle.");
44
44
  skybox = observed;
45
- effects.Add(new GraphicsPlannedEffect { Type = "graphics.skybox-set-properties", Property = r.Property, Value = r.Value });
45
+ effects.Add(new GraphicsPlannedEffect { Type = "lighting.skybox.set-properties", Property = r.Property, Value = r.Value });
46
46
  }
47
47
  return new System.Threading.Tasks.ValueTask<Result>(new Result { Skybox = skybox.name, PlannedEffects = effects });
48
48
  }
@@ -4,11 +4,11 @@ using UnityEngine;
4
4
  using UnityEngine.Rendering;
5
5
  namespace UnityCli
6
6
  {
7
- public class GraphicsSkyboxSetReflectionTool : IUnityCliTool<GraphicsSkyboxSetReflectionTool.Request, GraphicsSkyboxSetReflectionTool.Result>
7
+ public class LightingSkyboxSetReflectionTool : IUnityCliTool<LightingSkyboxSetReflectionTool.Request, LightingSkyboxSetReflectionTool.Result>
8
8
  {
9
9
  public sealed class Request { public string Mode { get; set; } public int? Bounces { get; set; } public float? Intensity { get; set; } public string Resolution { get; set; } }
10
10
  public sealed class Result { public string DefaultReflectionMode { get; set; } public long ReflectionBounces { get; set; } public double ReflectionIntensity { get; set; } public List<GraphicsPlannedEffect> PlannedEffects { get; set; } }
11
- public ToolDescriptor Describe() => new() { Name = "graphics.skybox-set-reflection", Summary = "Set reflection settings.", Description = "Set RenderSettings reflection values.", Group = "graphics",SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Configure skybox reflections", Input = new Request { Mode = "Skybox", Bounces = 1, Intensity = 1f, Resolution = "128" } } } };
11
+ public ToolDescriptor Describe() => new() { Name = "lighting.skybox.set-reflection", Summary = "Set reflection settings.", Description = "Set RenderSettings reflection values.", Group = "lighting",SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Configure skybox reflections", Input = new Request { Mode = "Skybox", Bounces = 1, Intensity = 1f, Resolution = "128" } } } };
12
12
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
13
13
  {
14
14
  DefaultReflectionMode? mode = string.IsNullOrEmpty(r.Mode) ? (DefaultReflectionMode?)null : GraphicsToolSupport.ParseEnum<DefaultReflectionMode>(r.Mode, "mode"); if (r.Bounces.HasValue && (r.Bounces.Value < 0 || r.Bounces.Value > 100)) throw new UnityCliBridge.BridgeCommandException("E_GRAPHICS_RANGE_INVALID", "Invalid reflection bounces.", "Pass bounces from 0 to 100."); var intensity = r.Intensity.HasValue ? GraphicsToolSupport.ParseFinite(r.Intensity.Value.ToString(System.Globalization.CultureInfo.InvariantCulture), "intensity", 0f, 8f) : (float?)null;
@@ -23,7 +23,7 @@ namespace UnityCli
23
23
  if (!mode.HasValue && !r.Bounces.HasValue && !intensity.HasValue && !resolution.HasValue) return new System.Threading.Tasks.ValueTask<Result>(Read(new List<GraphicsPlannedEffect>()));
24
24
  ctx.CommitEffect(); if (mode.HasValue) RenderSettings.defaultReflectionMode = mode.Value; if (r.Bounces.HasValue) RenderSettings.reflectionBounces = r.Bounces.Value; if (intensity.HasValue) RenderSettings.reflectionIntensity = intensity.Value; if (resolution.HasValue) RenderSettings.defaultReflectionResolution = resolution.Value;
25
25
  if ((mode.HasValue && RenderSettings.defaultReflectionMode != mode.Value) || (r.Bounces.HasValue && RenderSettings.reflectionBounces != r.Bounces.Value) || (intensity.HasValue && !Mathf.Approximately(RenderSettings.reflectionIntensity, intensity.Value)) || (resolution.HasValue && RenderSettings.defaultReflectionResolution != resolution.Value)) throw new UnityCliBridge.BridgeCommandException("E_REFLECTION_STATE_MISMATCH", "Reflection settings readback did not match the request.", "Retry after the editor is idle.");
26
- return new System.Threading.Tasks.ValueTask<Result>(Read(new List<GraphicsPlannedEffect> { new GraphicsPlannedEffect { Type = "graphics.skybox-set-reflection", Property = "reflection", Value = "updated" } }));
26
+ return new System.Threading.Tasks.ValueTask<Result>(Read(new List<GraphicsPlannedEffect> { new GraphicsPlannedEffect { Type = "lighting.skybox.set-reflection", Property = "reflection", Value = "updated" } }));
27
27
  }
28
28
  private static Result Read(List<GraphicsPlannedEffect> effects) { return new Result { DefaultReflectionMode = RenderSettings.defaultReflectionMode.ToString(), ReflectionBounces = RenderSettings.reflectionBounces, ReflectionIntensity = RenderSettings.reflectionIntensity, PlannedEffects = effects }; }
29
29
  }
@@ -6,19 +6,19 @@ using UnityEngine.Rendering;
6
6
 
7
7
  namespace UnityCli
8
8
  {
9
- /// <summary>graphics.skybox-set-sun — 设置 RenderSettings.sun 方向光。</summary>
10
- public class GraphicsSkyboxSetSunTool : IUnityCliTool<GraphicsSkyboxSetSunTool.Request, GraphicsSkyboxSetSunTool.Result>
9
+ /// <summary>lighting.skybox.set-sun — 设置 RenderSettings.sun 方向光。</summary>
10
+ public class LightingSkyboxSetSunTool : IUnityCliTool<LightingSkyboxSetSunTool.Request, LightingSkyboxSetSunTool.Result>
11
11
  {
12
12
  public sealed class Request { public string Target { get; set; } }
13
13
  public sealed class Result { public string Sun { get; set; } public List<GraphicsPlannedEffect> PlannedEffects { get; set; } }
14
- public ToolDescriptor Describe() => new() { Name = "graphics.skybox-set-sun", Summary = "Set the directional Light used as the scene sun for RenderSettings.", Description = "Set RenderSettings.sun from a target GameObject with a Light component. Pass null/empty to clear.", Group = "graphics",DestructiveHint = false, SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Set sun light", Input = new Request { Target = "DirectionalLight" } } } };
14
+ public ToolDescriptor Describe() => new() { Name = "lighting.skybox.set-sun", Summary = "Set the directional Light used as the scene sun for RenderSettings.", Description = "Set RenderSettings.sun from a target GameObject with a Light component. Pass null/empty to clear.", Group = "lighting",DestructiveHint = false, SideEffects = new[] { "settings-write" }, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Set sun light", Input = new Request { Target = "DirectionalLight" } } } };
15
15
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
16
16
  {
17
17
  Light sun = null;
18
18
  var expectedId = 0;
19
19
  if (!string.IsNullOrEmpty(r.Target))
20
20
  {
21
- var go = GameObjectToolSupport.ResolveUniqueTarget(r.Target, "graphics.skybox-set-sun requires --target <go>.");
21
+ var go = GameObjectToolSupport.ResolveUniqueTarget(r.Target, "lighting.skybox.set-sun requires --target <go>.");
22
22
  sun = go.GetComponent<Light>();
23
23
  if (sun == null || sun.type != LightType.Directional) throw new UnityCliBridge.BridgeCommandException("E_DIRECTIONAL_LIGHT_REQUIRED", "Target must have a Directional Light component: " + GameObjectToolSupport.HierarchyPath(go), "Pass a GameObject with a directional Light component.");
24
24
  expectedId = sun.GetInstanceID();
@@ -28,7 +28,7 @@ namespace UnityCli
28
28
  var observed = RenderSettings.sun;
29
29
  if ((expectedId == 0 && observed != null) || (expectedId != 0 && (observed == null || observed.GetInstanceID() != expectedId))) throw new UnityCliBridge.BridgeCommandException("E_SKYBOX_SUN_STATE_MISMATCH", "Skybox sun readback did not match the requested target.", "Retry after the editor is idle.");
30
30
  var sunPath = observed == null ? "null" : GameObjectToolSupport.HierarchyPath(observed.gameObject);
31
- return new System.Threading.Tasks.ValueTask<Result>(new Result { Sun = sunPath, PlannedEffects = new List<GraphicsPlannedEffect> { new GraphicsPlannedEffect { Type = "graphics.skybox-set-sun", Property = "sun", Value = sunPath } } });
31
+ return new System.Threading.Tasks.ValueTask<Result>(new Result { Sun = sunPath, PlannedEffects = new List<GraphicsPlannedEffect> { new GraphicsPlannedEffect { Type = "lighting.skybox.set-sun", Property = "sun", Value = sunPath } } });
32
32
  }
33
33
  }
34
34
  }
@@ -61,7 +61,7 @@ namespace UnityCli
61
61
  /// <summary>只更新显式提供的三个 Audio 字段,并从新 SerializedObject 与磁盘文件验证终态。</summary>
62
62
  internal static ProjectAudioSettingsSetResult SetAudio(ProjectAudioSettingsSetRequest request, UnityCliProjectToolContext ctx)
63
63
  {
64
- const string toolName = "project.audio-settings.set";
64
+ const string toolName = "project-settings.audio-settings.set";
65
65
  EnsureReady(toolName);
66
66
  request = request ?? new ProjectAudioSettingsSetRequest();
67
67
  if (!request.Volume.HasValue && !request.RolloffScale.HasValue && !request.DopplerFactor.HasValue)
@@ -149,7 +149,7 @@ namespace UnityCli
149
149
  /// <summary>冻结唯一命名axis和三个批准字段,effect后按index/name/value与文件身份重新证明。</summary>
150
150
  internal static ProjectInputSettingsSetResult SetInput(ProjectInputSettingsSetRequest request, UnityCliProjectToolContext ctx)
151
151
  {
152
- const string toolName = "project.input-settings.set";
152
+ const string toolName = "project-settings.input-settings.set";
153
153
  EnsureReady(toolName);
154
154
  request = request ?? new ProjectInputSettingsSetRequest();
155
155
  if (string.IsNullOrEmpty(request.Axis))
@@ -171,7 +171,7 @@ namespace UnityCli
171
171
  {
172
172
  var axes = RequireArray(inspect, surface.InputAxes);
173
173
  var matches = FindAxes(axes, request.Axis, surface);
174
- if (matches.Count == 0) throw new UnityCliBridge.BridgeCommandException("E_PROJECT_INPUT_AXIS_NOT_FOUND", "No legacy Input Manager axis exactly matches '" + request.Axis + "'.", "Run project.input-settings with an axis filter or inspect a bounded page before retrying.");
174
+ if (matches.Count == 0) throw new UnityCliBridge.BridgeCommandException("E_PROJECT_INPUT_AXIS_NOT_FOUND", "No legacy Input Manager axis exactly matches '" + request.Axis + "'.", "Run project-settings.input-settings with an axis filter or inspect a bounded page before retrying.");
175
175
  // 官方name selector固定选择配置顺序中的首项;index/name在barrier前共同冻结。
176
176
  beforeAxis = ReadAxis(axes.GetArrayElementAtIndex(matches[0]), matches[0], surface);
177
177
  }
@@ -261,7 +261,7 @@ namespace UnityCli
261
261
  /// <summary>PlayerSettings enum按当前Unity定义精确解析;reload风险显式投影但不在断线后重放。</summary>
262
262
  internal static ProjectPlayerSettingsSetResult SetPlayer(ProjectPlayerSettingsSetRequest request, UnityCliProjectToolContext ctx)
263
263
  {
264
- const string toolName = "project.player-settings.set";
264
+ const string toolName = "project-settings.player-settings.set";
265
265
  EnsureReady(toolName);
266
266
  request = request ?? new ProjectPlayerSettingsSetRequest();
267
267
  if (request.CompanyName == null && request.ProductName == null && request.BundleVersion == null && request.ScriptingBackend == null && request.ApiCompatibilityLevel == null)
@@ -323,7 +323,7 @@ namespace UnityCli
323
323
  /// <summary>Time写入先验证effective fixed/maximum关系,再保存唯一TimeManager asset并fresh证明。</summary>
324
324
  internal static ProjectTimeSettingsSetResult SetTime(ProjectTimeSettingsSetRequest request, UnityCliProjectToolContext ctx)
325
325
  {
326
- const string toolName = "project.time-settings.set";
326
+ const string toolName = "project-settings.time-settings.set";
327
327
  EnsureReady(toolName);
328
328
  request = request ?? new ProjectTimeSettingsSetRequest();
329
329
  if (!request.FixedDeltaTime.HasValue && !request.MaximumDeltaTime.HasValue && !request.TimeScale.HasValue)
@@ -2,14 +2,14 @@
2
2
  namespace UnityCli
3
3
  {
4
4
  /// <summary>修改AudioManager批准字段并证明精确文件持久化。</summary>
5
- public sealed class ProjectAudioSettingsSetTool : IUnityCliTool<ProjectAudioSettingsSetRequest, ProjectAudioSettingsSetResult>
5
+ public sealed class ProjectSettingsAudioSettingsSetTool : IUnityCliTool<ProjectAudioSettingsSetRequest, ProjectAudioSettingsSetResult>
6
6
  {
7
7
  public ToolDescriptor Describe() => new()
8
8
  {
9
- Name = "project.audio-settings.set",
9
+ Name = "project-settings.audio-settings.set",
10
10
  Summary = "Set declared project Audio fields and prove persisted AudioManager readback.",
11
11
  Description = "Changes only provided volume, rolloffScale, or dopplerFactor fields. volume accepts 0..1 and the other fields accept non-negative finite Unity floats. Framework dry-run returns the exact planned fields without crossing the effect barrier.",
12
- Group = "project",
12
+ Group = "project-settings",
13
13
  DestructiveHint = true,
14
14
  SupportsDryRun = true,
15
15
  SideEffects = new[] { "project-settings-write" },
@@ -2,14 +2,14 @@
2
2
  namespace UnityCli
3
3
  {
4
4
  /// <summary>读取AudioManager批准字段和磁盘身份。</summary>
5
- public sealed class ProjectAudioSettingsTool : IUnityCliTool<ProjectSettingsReadRequest, ProjectAudioSettingsSnapshot>
5
+ public sealed class ProjectSettingsAudioSettingsTool : IUnityCliTool<ProjectSettingsReadRequest, ProjectAudioSettingsSnapshot>
6
6
  {
7
7
  public ToolDescriptor Describe() => new()
8
8
  {
9
- Name = "project.audio-settings",
9
+ Name = "project-settings.audio-settings",
10
10
  Summary = "Read bounded project Audio settings with exact settings-file identity.",
11
11
  Description = "Reads only volume, rolloffScale, and dopplerFactor from the verified AudioManager surface for the current Unity version. The result includes the exact ProjectSettings file SHA-256 and performs no write, import, or reload.",
12
- Group = "project",
12
+ Group = "project-settings",
13
13
  DestructiveHint = false,
14
14
  SupportsDryRun = false,
15
15
  SideEffects = System.Array.Empty<string>(),
@@ -24,7 +24,7 @@ namespace UnityCli
24
24
  public System.Threading.Tasks.ValueTask<ProjectAudioSettingsSnapshot> ExecuteAsync(ProjectSettingsReadRequest request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
25
25
  {
26
26
  ct.ThrowIfCancellationRequested();
27
- return new System.Threading.Tasks.ValueTask<ProjectAudioSettingsSnapshot>(ProjectSettingsReader.ReadAudio("project.audio-settings"));
27
+ return new System.Threading.Tasks.ValueTask<ProjectAudioSettingsSnapshot>(ProjectSettingsReader.ReadAudio("project-settings.audio-settings"));
28
28
  }
29
29
  }
30
30
  }
@@ -5,9 +5,9 @@ using UnityEngine;
5
5
  namespace UnityCli.Tools.Project
6
6
  {
7
7
  /// <summary>
8
- /// project.info 只读 Tool:读取 Unity 项目基础元数据。
8
+ /// project-settings.info 只读 Tool:读取 Unity 项目基础元数据。
9
9
  /// </summary>
10
- public class ProjectInfoTool : IUnityCliTool<ProjectInfoTool.Request, ProjectInfoTool.Result>
10
+ public class ProjectSettingsInfoTool : IUnityCliTool<ProjectSettingsInfoTool.Request, ProjectSettingsInfoTool.Result>
11
11
  {
12
12
  public sealed class Request { }
13
13
 
@@ -23,10 +23,10 @@ namespace UnityCli.Tools.Project
23
23
  // ── desc:只声明人工字段,source=built-in 表示进入只读 Tool 表 ──
24
24
  public ToolDescriptor Describe() => new()
25
25
  {
26
- Name = "project.info", Summary = "Project metadata: name, path, Unity version, and overall project structure.",
26
+ Name = "project-settings.info", Summary = "Project metadata: name, path, Unity version, and overall project structure.",
27
27
  Description = "Project metadata: name, path, Unity version, and overall project structure.",
28
28
  DestructiveHint = false,
29
- Group = "project",
29
+ Group = "project-settings",
30
30
  Target = "editor",
31
31
  PlayModeSupport = "supported",
32
32
  Examples = new[] { new ToolExample { Description = "Read project metadata", Input = new Request { } } }
@@ -2,14 +2,14 @@
2
2
  namespace UnityCli
3
3
  {
4
4
  /// <summary>按唯一axis名称修改legacy Input Manager批准字段。</summary>
5
- public sealed class ProjectInputSettingsSetTool : IUnityCliTool<ProjectInputSettingsSetRequest, ProjectInputSettingsSetResult>
5
+ public sealed class ProjectSettingsInputSettingsSetTool : IUnityCliTool<ProjectInputSettingsSetRequest, ProjectInputSettingsSetResult>
6
6
  {
7
7
  public ToolDescriptor Describe() => new()
8
8
  {
9
- Name = "project.input-settings.set",
9
+ Name = "project-settings.input-settings.set",
10
10
  Summary = "Set declared fields on one exact legacy Input Manager axis and prove persistence.",
11
11
  Description = "Requires one exact case-sensitive axis name and changes only provided sensitivity, gravity, or dead. If the legacy Input Manager contains duplicate names, the first configured entry is selected and its index/name identity is frozen before the effect. InputManager scanning fails closed above 4096 entries. Framework dry-run returns the exact planned fields without writing InputManager.asset.",
12
- Group = "project",
12
+ Group = "project-settings",
13
13
  DestructiveHint = true,
14
14
  SupportsDryRun = true,
15
15
  SideEffects = new[] { "project-settings-write" },
@@ -2,14 +2,14 @@
2
2
  namespace UnityCli
3
3
  {
4
4
  /// <summary>分页读取legacy Input Manager批准字段。</summary>
5
- public sealed class ProjectInputSettingsTool : IUnityCliTool<ProjectInputSettingsRequest, ProjectInputSettingsResult>
5
+ public sealed class ProjectSettingsInputSettingsTool : IUnityCliTool<ProjectInputSettingsRequest, ProjectInputSettingsResult>
6
6
  {
7
7
  public ToolDescriptor Describe() => new()
8
8
  {
9
- Name = "project.input-settings",
9
+ Name = "project-settings.input-settings",
10
10
  Summary = "Read a bounded page of legacy Input Manager axis settings.",
11
11
  Description = "Returns only axis name, index, sensitivity, gravity, and dead with total/matched counts and pagination. axis is an optional exact case-sensitive name filter; offset defaults to 0 and limit defaults to 50 with a maximum of 200. InputManager scanning fails closed above 4096 entries.",
12
- Group = "project",
12
+ Group = "project-settings",
13
13
  DestructiveHint = false,
14
14
  SupportsDryRun = false,
15
15
  SideEffects = System.Array.Empty<string>(),
@@ -28,7 +28,7 @@ namespace UnityCli
28
28
  public System.Threading.Tasks.ValueTask<ProjectInputSettingsResult> ExecuteAsync(ProjectInputSettingsRequest request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
29
29
  {
30
30
  ct.ThrowIfCancellationRequested();
31
- return new System.Threading.Tasks.ValueTask<ProjectInputSettingsResult>(ProjectSettingsReader.ReadInput(request, "project.input-settings"));
31
+ return new System.Threading.Tasks.ValueTask<ProjectInputSettingsResult>(ProjectSettingsReader.ReadInput(request, "project-settings.input-settings"));
32
32
  }
33
33
  }
34
34
  }
@@ -0,0 +1,3 @@
1
+ #if UNITY_EDITOR
2
+ namespace UnityCli { public class ProjectSettingsLayerAddTool : IUnityCliTool<ProjectSettingsLayerAddTool.Request, ProjectTagLayerResult> { public sealed class Request { [UnityCliRequired] public string Name { get; set; } public int? Index { get; set; } } public ToolDescriptor Describe() => new() { Name = "project-settings.layer.add", Summary = "Add a persistent Unity user layer.", Description = "Adds name to ProjectSettings/TagManager.asset user layers at index 8 through 31, optionally using index. Available in Edit and Play mode.", Group = "project-settings",DestructiveHint = true, SideEffects = new[] { "project-settings-write" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Add water layer", Input = new Request { Name = "Water" } } } }; public System.Threading.Tasks.ValueTask<ProjectTagLayerResult> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default) => ProjectTagLayerToolSupport.Apply(true, true, request.Name, request.Index, "project-settings.layer.add", ctx); } }
3
+ #endif
@@ -0,0 +1,3 @@
1
+ #if UNITY_EDITOR
2
+ namespace UnityCli { public class ProjectSettingsLayerRemoveTool : IUnityCliTool<ProjectSettingsLayerRemoveTool.Request, ProjectTagLayerResult> { public sealed class Request { [UnityCliRequired] public string Name { get; set; } public int? Index { get; set; } } public ToolDescriptor Describe() => new() { Name = "project-settings.layer.remove", Summary = "Remove a persistent Unity user layer.", Description = "Removes name from ProjectSettings/TagManager.asset user layers. index selects a layer slot when needed. Available in Edit and Play mode.", Group = "project-settings",DestructiveHint = true, SideEffects = new[] { "project-settings-write" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Remove water layer", Input = new Request { Name = "Water" } } } }; public System.Threading.Tasks.ValueTask<ProjectTagLayerResult> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default) => ProjectTagLayerToolSupport.Apply(true, false, request.Name, request.Index, "project-settings.layer.remove", ctx); } }
3
+ #endif
@@ -5,9 +5,9 @@ using UnityEngine;
5
5
  namespace UnityCli.Tools.Project
6
6
  {
7
7
  /// <summary>
8
- /// project.layers 只读 Tool:读取 TagManager 中定义的 Layer 索引和名称。
8
+ /// project-settings.layers 只读 Tool:读取 TagManager 中定义的 Layer 索引和名称。
9
9
  /// </summary>
10
- public class ProjectLayersTool : IUnityCliTool<ProjectLayersTool.Request, ProjectLayersTool.Result>
10
+ public class ProjectSettingsLayersTool : IUnityCliTool<ProjectSettingsLayersTool.Request, ProjectSettingsLayersTool.Result>
11
11
  {
12
12
  public sealed class Request { }
13
13
 
@@ -26,10 +26,10 @@ namespace UnityCli.Tools.Project
26
26
  // ── desc:只声明人工字段,source=built-in 表示进入只读 Tool 表 ──
27
27
  public ToolDescriptor Describe() => new()
28
28
  {
29
- Name = "project.layers", Summary = "List all layers defined in the project's Tag Manager.",
29
+ Name = "project-settings.layers", Summary = "List all layers defined in the project's Tag Manager.",
30
30
  Description = "List all layers defined in the project's Tag Manager.",
31
31
  DestructiveHint = false,
32
- Group = "project",
32
+ Group = "project-settings",
33
33
  Target = "editor",
34
34
  PlayModeSupport = "supported",
35
35
  Examples = new[] { new ToolExample { Description = "List configured project layers", Input = new Request { } } }
@@ -2,14 +2,14 @@
2
2
  namespace UnityCli
3
3
  {
4
4
  /// <summary>修改active build target的PlayerSettings批准字段。</summary>
5
- public sealed class ProjectPlayerSettingsSetTool : IUnityCliTool<ProjectPlayerSettingsSetRequest, ProjectPlayerSettingsSetResult>
5
+ public sealed class ProjectSettingsPlayerSettingsSetTool : IUnityCliTool<ProjectPlayerSettingsSetRequest, ProjectPlayerSettingsSetResult>
6
6
  {
7
7
  public ToolDescriptor Describe() => new()
8
8
  {
9
- Name = "project.player-settings.set",
9
+ Name = "project-settings.player-settings.set",
10
10
  Summary = "Set declared active-target PlayerSettings and return persisted typed readback.",
11
- Description = "Changes only provided companyName, productName, bundleVersion, scriptingBackend, or apiCompatibilityLevel. Enum names must exactly match values supported by the current Unity version. Backend or API changes may trigger a domain reload; after timeout callers must read project.player-settings before deciding whether to retry.",
12
- Group = "project",
11
+ Description = "Changes only provided companyName, productName, bundleVersion, scriptingBackend, or apiCompatibilityLevel. Enum names must exactly match values supported by the current Unity version. Backend or API changes may trigger a domain reload; after timeout callers must read project-settings.player-settings before deciding whether to retry.",
12
+ Group = "project-settings",
13
13
  DestructiveHint = true,
14
14
  SupportsDryRun = true,
15
15
  SideEffects = new[] { "project-settings-write", "domain-reload" },
@@ -2,14 +2,14 @@
2
2
  namespace UnityCli
3
3
  {
4
4
  /// <summary>读取active build target的PlayerSettings批准字段。</summary>
5
- public sealed class ProjectPlayerSettingsTool : IUnityCliTool<ProjectSettingsReadRequest, ProjectPlayerSettingsSnapshot>
5
+ public sealed class ProjectSettingsPlayerSettingsTool : IUnityCliTool<ProjectSettingsReadRequest, ProjectPlayerSettingsSnapshot>
6
6
  {
7
7
  public ToolDescriptor Describe() => new()
8
8
  {
9
- Name = "project.player-settings",
9
+ Name = "project-settings.player-settings",
10
10
  Summary = "Read bounded PlayerSettings for the active named build target.",
11
11
  Description = "Returns companyName, productName, bundleVersion, scriptingBackend, and apiCompatibilityLevel for the active build target plus the verified ProjectSettings file identity. It does not change build target or project state.",
12
- Group = "project",
12
+ Group = "project-settings",
13
13
  DestructiveHint = false,
14
14
  SupportsDryRun = false,
15
15
  SideEffects = System.Array.Empty<string>(),
@@ -24,7 +24,7 @@ namespace UnityCli
24
24
  public System.Threading.Tasks.ValueTask<ProjectPlayerSettingsSnapshot> ExecuteAsync(ProjectSettingsReadRequest request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
25
25
  {
26
26
  ct.ThrowIfCancellationRequested();
27
- return new System.Threading.Tasks.ValueTask<ProjectPlayerSettingsSnapshot>(ProjectSettingsReader.ReadPlayer("project.player-settings"));
27
+ return new System.Threading.Tasks.ValueTask<ProjectPlayerSettingsSnapshot>(ProjectSettingsReader.ReadPlayer("project-settings.player-settings"));
28
28
  }
29
29
  }
30
30
  }
@@ -0,0 +1,3 @@
1
+ #if UNITY_EDITOR
2
+ namespace UnityCli { public class ProjectSettingsTagAddTool : IUnityCliTool<ProjectSettingsTagAddTool.Request, ProjectTagLayerResult> { public sealed class Request { [UnityCliRequired] public string Name { get; set; } } public ToolDescriptor Describe() => new() { Name = "project-settings.tag.add", Summary = "Add a persistent Unity Tag Manager tag.", Description = "Adds name to ProjectSettings/TagManager.asset tags. Available in Edit and Play mode.", Group = "project-settings",DestructiveHint = true, SideEffects = new[] { "project-settings-write" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Add enemy tag", Input = new Request { Name = "Enemy" } } } }; public System.Threading.Tasks.ValueTask<ProjectTagLayerResult> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default) => ProjectTagLayerToolSupport.Apply(false, true, request.Name, null, "project-settings.tag.add", ctx); } }
3
+ #endif
@@ -0,0 +1,3 @@
1
+ #if UNITY_EDITOR
2
+ namespace UnityCli { public class ProjectSettingsTagRemoveTool : IUnityCliTool<ProjectSettingsTagRemoveTool.Request, ProjectTagLayerResult> { public sealed class Request { [UnityCliRequired] public string Name { get; set; } } public ToolDescriptor Describe() => new() { Name = "project-settings.tag.remove", Summary = "Remove a persistent Unity Tag Manager tag.", Description = "Removes name from ProjectSettings/TagManager.asset tags. Available in Edit and Play mode.", Group = "project-settings",DestructiveHint = true, SideEffects = new[] { "project-settings-write" }, Target = "editor", PlayModeSupport = "editor-only", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Remove enemy tag", Input = new Request { Name = "Enemy" } } } }; public System.Threading.Tasks.ValueTask<ProjectTagLayerResult> ExecuteAsync(Request request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default) => ProjectTagLayerToolSupport.Apply(false, false, request.Name, null, "project-settings.tag.remove", ctx); } }
3
+ #endif
@@ -4,9 +4,9 @@ using UnityEditorInternal;
4
4
  namespace UnityCli.Tools.Project
5
5
  {
6
6
  /// <summary>
7
- /// project.tags 只读 Tool:读取 TagManager 中定义的标签列表。
7
+ /// project-settings.tags 只读 Tool:读取 TagManager 中定义的标签列表。
8
8
  /// </summary>
9
- public class ProjectTagsTool : IUnityCliTool<ProjectTagsTool.Request, ProjectTagsTool.Result>
9
+ public class ProjectSettingsTagsTool : IUnityCliTool<ProjectSettingsTagsTool.Request, ProjectSettingsTagsTool.Result>
10
10
  {
11
11
  public sealed class Request { }
12
12
 
@@ -19,10 +19,10 @@ namespace UnityCli.Tools.Project
19
19
  // ── desc:只声明人工字段,source=built-in 表示进入只读 Tool 表 ──
20
20
  public ToolDescriptor Describe() => new()
21
21
  {
22
- Name = "project.tags", Summary = "List all tags defined in the project's Tag Manager.",
22
+ Name = "project-settings.tags", Summary = "List all tags defined in the project's Tag Manager.",
23
23
  Description = "List all tags defined in the project's Tag Manager.",
24
24
  DestructiveHint = false,
25
- Group = "project",
25
+ Group = "project-settings",
26
26
  Target = "editor",
27
27
  PlayModeSupport = "supported",
28
28
  Examples = new[] { new ToolExample { Description = "List configured project tags", Input = new Request { } } }
@@ -2,14 +2,14 @@
2
2
  namespace UnityCli
3
3
  {
4
4
  /// <summary>修改TimeManager批准字段并证明持久化。</summary>
5
- public sealed class ProjectTimeSettingsSetTool : IUnityCliTool<ProjectTimeSettingsSetRequest, ProjectTimeSettingsSetResult>
5
+ public sealed class ProjectSettingsTimeSettingsSetTool : IUnityCliTool<ProjectTimeSettingsSetRequest, ProjectTimeSettingsSetResult>
6
6
  {
7
7
  public ToolDescriptor Describe() => new()
8
8
  {
9
- Name = "project.time-settings.set",
9
+ Name = "project-settings.time-settings.set",
10
10
  Summary = "Set declared project Time fields and prove persisted TimeManager readback.",
11
11
  Description = "Changes only provided fixedDeltaTime, maximumDeltaTime, or timeScale. Delta values must be positive, maximumDeltaTime must not be below the effective fixedDeltaTime, and timeScale accepts 0..100. Framework dry-run returns the exact planned fields without writing TimeManager.asset.",
12
- Group = "project",
12
+ Group = "project-settings",
13
13
  DestructiveHint = true,
14
14
  SupportsDryRun = true,
15
15
  SideEffects = new[] { "project-settings-write" },
@@ -2,14 +2,14 @@
2
2
  namespace UnityCli
3
3
  {
4
4
  /// <summary>读取TimeManager批准的持久化字段。</summary>
5
- public sealed class ProjectTimeSettingsTool : IUnityCliTool<ProjectSettingsReadRequest, ProjectTimeSettingsSnapshot>
5
+ public sealed class ProjectSettingsTimeSettingsTool : IUnityCliTool<ProjectSettingsReadRequest, ProjectTimeSettingsSnapshot>
6
6
  {
7
7
  public ToolDescriptor Describe() => new()
8
8
  {
9
- Name = "project.time-settings",
9
+ Name = "project-settings.time-settings",
10
10
  Summary = "Read persisted project Time settings from the verified TimeManager surface.",
11
11
  Description = "Reads only fixedDeltaTime, maximumDeltaTime, and timeScale from TimeManager.asset. Values are project configuration rather than transient Play Mode runtime state, and the result includes the exact file SHA-256.",
12
- Group = "project",
12
+ Group = "project-settings",
13
13
  DestructiveHint = false,
14
14
  SupportsDryRun = false,
15
15
  SideEffects = System.Array.Empty<string>(),
@@ -24,7 +24,7 @@ namespace UnityCli
24
24
  public System.Threading.Tasks.ValueTask<ProjectTimeSettingsSnapshot> ExecuteAsync(ProjectSettingsReadRequest request, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
25
25
  {
26
26
  ct.ThrowIfCancellationRequested();
27
- return new System.Threading.Tasks.ValueTask<ProjectTimeSettingsSnapshot>(ProjectSettingsReader.ReadTime("project.time-settings"));
27
+ return new System.Threading.Tasks.ValueTask<ProjectTimeSettingsSnapshot>(ProjectSettingsReader.ReadTime("project-settings.time-settings"));
28
28
  }
29
29
  }
30
30
  }
@@ -12,8 +12,8 @@ using UnityEngine.Rendering;
12
12
  namespace UnityCli
13
13
  {
14
14
  /// <summary>
15
- /// graphics IUnityCliTool 共享 helper:渲染管线摘要、QualitySettings、Volume 反射、
16
- /// 渲染统计、颜色解析、天空盒环境设置。仅供 graphics 域自包含工具复用。
15
+ /// rendering、lighting、volume IUnityCliTool 共享 helper:渲染管线摘要、QualitySettings、
16
+ /// Volume 反射、渲染统计、颜色解析、天空盒环境设置。仅供这些 graphics 域自包含工具复用。
17
17
  /// </summary>
18
18
  public static class GraphicsToolSupport
19
19
  {
@@ -111,7 +111,7 @@ namespace UnityCli
111
111
  {
112
112
  if (string.Equals(QualitySettings.names[i], rawLevel, StringComparison.OrdinalIgnoreCase)) return i;
113
113
  }
114
- throw new UnityCliBridge.BridgeCommandException("E_QUALITY_LEVEL_INVALID", "Quality level is invalid: " + rawLevel, "Run tools run graphics.quality --input '{}' to inspect available quality level names and indexes.");
114
+ throw new UnityCliBridge.BridgeCommandException("E_QUALITY_LEVEL_INVALID", "Quality level is invalid: " + rawLevel, "Run tools run rendering.quality --input '{}' to inspect available quality level names and indexes.");
115
115
  }
116
116
 
117
117
  /// <summary>构造渲染管线摘要 DTO。</summary>
@@ -0,0 +1,19 @@
1
+ #if UNITY_EDITOR
2
+ using System.Collections.Generic;
3
+ using System.Reflection;
4
+ using UnityEditor;
5
+ using UnityEngine;
6
+ using UnityEngine.Rendering;
7
+
8
+ namespace UnityCli
9
+ {
10
+ /// <summary>rendering.pipeline.info — 读取渲染管线摘要与 QualitySettings(只读)。</summary>
11
+ public class RenderingPipelineInfoTool : IUnityCliTool<RenderingPipelineInfoTool.Request, RenderingPipelineInfoTool.Result>
12
+ {
13
+ public sealed class Request { }
14
+ public sealed class Result { public GraphicsSummary Graphics { get; set; } public QualitySettingsInfo QualitySettings { get; set; } }
15
+ public ToolDescriptor Describe() => new() { Name = "rendering.pipeline.info", Summary = "Read active/default render pipeline identity and current quality settings.", Description = "Read-only in Edit and Play mode. Returns the active/default render pipeline identity plus current QualitySettings; use rendering.pipeline.settings for default pipeline writes and rendering.quality for quality writes.", Group = "rendering",DestructiveHint = false, Target = "editor", PlayModeSupport = "supported", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Read pipeline info", Input = new Request { } } } };
16
+ public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default) => new System.Threading.Tasks.ValueTask<Result>(new Result { Graphics = GraphicsToolSupport.BuildGraphicsSummary(), QualitySettings = GraphicsToolSupport.BuildQualitySettings() });
17
+ }
18
+ }
19
+ #endif
@@ -8,12 +8,12 @@ using UnityEngine.Rendering;
8
8
 
9
9
  namespace UnityCli
10
10
  {
11
- /// <summary>graphics.pipeline-settings — 设置 GraphicsSettings.defaultRenderPipeline。</summary>
12
- public class GraphicsPipelineSettingsTool : IUnityCliTool<GraphicsPipelineSettingsTool.Request, GraphicsPipelineSettingsTool.Result>
11
+ /// <summary>rendering.pipeline.settings — 设置 GraphicsSettings.defaultRenderPipeline。</summary>
12
+ public class RenderingPipelineSettingsTool : IUnityCliTool<RenderingPipelineSettingsTool.Request, RenderingPipelineSettingsTool.Result>
13
13
  {
14
14
  public sealed class Request { public string RenderPipeline { get; set; } }
15
15
  public sealed class Result { public GraphicsSummary Graphics { get; set; } public List<GraphicsPlannedEffect> PlannedEffects { get; set; } }
16
- public ToolDescriptor Describe() => new() { Name = "graphics.pipeline-settings", Summary = "Read or set the project's default render pipeline asset.", Description = "Dedicated GraphicsSettings.defaultRenderPipeline reader/writer for Edit and Play mode. Omit renderPipeline for a pure read; pass one imported Assets/*.asset RenderPipelineAsset, or built-in/null to reset. Success re-resolves the asset by path and GUID before returning the fresh pipeline summary; QualitySettings belong to graphics.quality.", Group = "graphics",DestructiveHint = true, SideEffects = new[] { "settings-write", "asset-import", "session-affecting" }, Target = "editor", PlayModeSupport = "session-affecting", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Set URP pipeline", Input = new Request { RenderPipeline = "Assets/Settings/URP.asset" } } } };
16
+ public ToolDescriptor Describe() => new() { Name = "rendering.pipeline.settings", Summary = "Read or set the project's default render pipeline asset.", Description = "Dedicated GraphicsSettings.defaultRenderPipeline reader/writer for Edit and Play mode. Omit renderPipeline for a pure read; pass one imported Assets/*.asset RenderPipelineAsset, or built-in/null to reset. Success re-resolves the asset by path and GUID before returning the fresh pipeline summary; QualitySettings belong to rendering.quality.", Group = "rendering",DestructiveHint = true, SideEffects = new[] { "settings-write", "asset-import", "session-affecting" }, Target = "editor", PlayModeSupport = "session-affecting", DefaultTimeoutMs = 30000, MaxTimeoutMs = 600000, Examples = new[] { new ToolExample { Description = "Set URP pipeline", Input = new Request { RenderPipeline = "Assets/Settings/URP.asset" } } } };
17
17
  public System.Threading.Tasks.ValueTask<Result> ExecuteAsync(Request r, UnityCliProjectToolContext ctx, System.Threading.CancellationToken ct = default)
18
18
  {
19
19
  var effects = new List<GraphicsPlannedEffect>();
@@ -38,7 +38,7 @@ namespace UnityCli
38
38
  if ((resetToBuiltIn && observedPipeline != null) || (!resetToBuiltIn && (reloadedPipeline == null || observedPipeline != reloadedPipeline)))
39
39
  throw new UnityCliBridge.BridgeCommandException("E_RENDER_PIPELINE_STATE_MISMATCH", "GraphicsSettings.defaultRenderPipeline did not match the requested asset after path/GUID reload.", "Check Unity Console diagnostics and retry after the editor is idle.");
40
40
 
41
- effects.Add(new GraphicsPlannedEffect { Type = "graphics.pipeline-settings", Property = "renderPipeline", Value = resetToBuiltIn ? "built-in" : pipelinePath });
41
+ effects.Add(new GraphicsPlannedEffect { Type = "rendering.pipeline.settings", Property = "renderPipeline", Value = resetToBuiltIn ? "built-in" : pipelinePath });
42
42
  return new System.Threading.Tasks.ValueTask<Result>(new Result { Graphics = GraphicsToolSupport.BuildGraphicsSummary(), PlannedEffects = effects });
43
43
  }
44
44
  }