@alpsckr/unitycli 0.4.5 → 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 (341) 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 +4 -4
  76. package/dist/bridge/session-supervisor.js.map +1 -1
  77. package/dist/bridge/types.d.ts +1 -1
  78. package/dist/catalog-protocol.js +3 -3
  79. package/dist/catalog-protocol.js.map +1 -1
  80. package/dist/extensions/.generated-bridge-domains/cinemachine.js +14 -14
  81. package/dist/extensions/.generated-bridge-domains/cinemachine.js.map +1 -1
  82. package/dist/extensions/.generated-bridge-domains/hdrp.js +7 -7
  83. package/dist/extensions/.generated-bridge-domains/hdrp.js.map +1 -1
  84. package/dist/extensions/.generated-bridge-domains/probuilder.d.ts +3 -3
  85. package/dist/extensions/.generated-bridge-domains/probuilder.js +40 -40
  86. package/dist/extensions/.generated-bridge-domains/probuilder.js.map +1 -1
  87. package/dist/extensions/.generated-bridge-domains/urp.js +12 -12
  88. package/dist/extensions/.generated-bridge-domains/urp.js.map +1 -1
  89. package/dist/extensions/.generated-bridge-domains/vfx.js +27 -27
  90. package/dist/extensions/.generated-bridge-domains/vfx.js.map +1 -1
  91. package/dist/package-manager.js +1 -1
  92. package/dist/project-tool-discovery.d.ts +1 -1
  93. package/dist/project-tool-discovery.js +5 -5
  94. package/dist/project-tool-discovery.js.map +1 -1
  95. package/dist/runtime-code.js +2 -2
  96. package/dist/runtime-code.js.map +1 -1
  97. package/dist/services/reflect-service.d.ts +3 -3
  98. package/dist/services/reflect-service.js +5 -5
  99. package/dist/services/reflect-service.js.map +1 -1
  100. package/dist/tools/.generated-completion-registry.js +689 -689
  101. package/dist/tools/.generated-completion-registry.js.map +1 -1
  102. package/dist/tools/.generated-registry.d.ts +12 -12
  103. package/dist/tools/.generated-registry.js +12 -12
  104. package/dist/tools/.generated-registry.js.map +1 -1
  105. package/dist/tools/.generated-schemas.js +13 -13
  106. package/dist/tools/.generated-schemas.js.map +1 -1
  107. package/dist/tools/catalog.d.ts +1 -1
  108. package/dist/tools/catalog.js +1 -1
  109. package/dist/tools/code/{exec.d.ts → execute.d.ts} +1 -1
  110. package/dist/tools/code/{exec.js → execute.js} +5 -5
  111. package/dist/tools/code/execute.js.map +1 -0
  112. package/dist/tools/dispatcher.js +12 -8
  113. package/dist/tools/dispatcher.js.map +1 -1
  114. package/dist/tools/editor/compile.d.ts +3 -2
  115. package/dist/tools/editor/compile.js +23 -13
  116. package/dist/tools/editor/compile.js.map +1 -1
  117. package/dist/tools/editor/play-mode-status.js +2 -2
  118. package/dist/tools/editor/play-mode-status.js.map +1 -1
  119. package/dist/tools/editor/refresh.js +2 -2
  120. package/dist/tools/editor/refresh.js.map +1 -1
  121. package/dist/tools/metadata/derived.d.ts +0 -7
  122. package/dist/tools/metadata/derived.js +7 -16
  123. package/dist/tools/metadata/derived.js.map +1 -1
  124. package/dist/tools/metadata/index.d.ts +1 -1
  125. package/dist/tools/metadata/index.js +1 -1
  126. package/dist/tools/metadata/index.js.map +1 -1
  127. package/dist/tools/metadata/status.js +1 -1
  128. package/dist/tools/metadata/status.js.map +1 -1
  129. package/dist/tools/{runtime → player-runtime}/console.js +4 -4
  130. package/dist/tools/player-runtime/console.js.map +1 -0
  131. package/dist/tools/{runtime → player-runtime}/input/key.js +4 -4
  132. package/dist/tools/player-runtime/input/key.js.map +1 -0
  133. package/dist/tools/{runtime → player-runtime}/input/pointer.js +4 -4
  134. package/dist/tools/player-runtime/input/pointer.js.map +1 -0
  135. package/dist/tools/{runtime → player-runtime}/log.js +5 -5
  136. package/dist/tools/player-runtime/log.js.map +1 -0
  137. package/dist/tools/{runtime → player-runtime}/state.js +4 -4
  138. package/dist/tools/player-runtime/state.js.map +1 -0
  139. package/dist/tools/{runtime → player-runtime}/target-framerate/set.js +4 -4
  140. package/dist/tools/player-runtime/target-framerate/set.js.map +1 -0
  141. package/dist/tools/{runtime → player-runtime}/time-scale/set.js +4 -4
  142. package/dist/tools/player-runtime/time-scale/set.js.map +1 -0
  143. package/dist/tools/{runtime → player-runtime}/ui/capture-element.js +4 -4
  144. package/dist/tools/player-runtime/ui/capture-element.js.map +1 -0
  145. package/dist/tools/tools/group-summaries.js +17 -14
  146. package/dist/tools/tools/group-summaries.js.map +1 -1
  147. package/dist/tools/{reflect/member.js → type-inspection/get-member.js} +6 -6
  148. package/dist/tools/type-inspection/get-member.js.map +1 -0
  149. package/dist/tools/{reflect/type.js → type-inspection/get-type.js} +6 -6
  150. package/dist/tools/type-inspection/get-type.js.map +1 -0
  151. package/dist/tools/{reflect → type-inspection}/search.js +5 -5
  152. package/dist/tools/type-inspection/search.js.map +1 -0
  153. package/docs/README.md +1 -2
  154. package/docs/architecture.md +1 -1
  155. package/docs/availability-differences.md +2 -2
  156. package/docs/development.md +1 -1
  157. package/docs/error-codes.md +5 -5
  158. package/docs/extensions.md +2 -2
  159. package/docs/risk-and-side-effects.md +12 -12
  160. package/docs/safety-boundaries.md +7 -7
  161. package/docs/tool-discovery.md +1 -1
  162. package/docs/tool-execution.md +16 -16
  163. package/extensions/cinemachine/bridge/domains/cinemachine.ts +14 -14
  164. package/extensions/hdrp/bridge/domains/hdrp.ts +7 -7
  165. package/extensions/hdrp/unitypkg/Editor/Hdrp/HdrpToolSupport.cs +2 -2
  166. package/extensions/probuilder/bridge/domains/probuilder.ts +40 -40
  167. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderErrors.cs +1 -1
  168. package/extensions/urp/bridge/domains/urp.ts +12 -12
  169. package/extensions/urp/unitypkg/Editor/Urp/UrpToolSupport.cs +2 -2
  170. package/extensions/vfx-graph/bridge/domains/vfx.ts +27 -27
  171. package/package.json +1 -1
  172. package/skills/unitycli/SKILL.md +1 -1
  173. package/skills/unitycli/manifest.json +1 -1
  174. package/skills/unitycli/references/operation-protocol.md +1 -1
  175. package/unitypkg/Editor/Bridge/BridgeHttpServer.cs +2 -2
  176. package/unitypkg/Editor/Commands/ProjectToolCommands.cs +7 -7
  177. package/unitypkg/Editor/Commands/RuntimeToolCommands.cs +6 -6
  178. package/unitypkg/Editor/Generated/UnityCliToolCompletionRegistry.g.cs +147 -147
  179. package/unitypkg/Editor/Infrastructure/CodeExecSupport.cs +4 -4
  180. package/unitypkg/Editor/Infrastructure/UnityCliAdmission.cs +17 -17
  181. package/unitypkg/Editor/Infrastructure/UnityCliCompileCoordinator.cs +61 -54
  182. package/unitypkg/Editor/Infrastructure/UnityCliJson.cs +0 -18
  183. package/unitypkg/Editor/Infrastructure/UnityCliLiveRefreshCoordinator.cs +26 -21
  184. package/unitypkg/Editor/Infrastructure/UnityCliObjectPatch.cs +1 -1
  185. package/unitypkg/Editor/Infrastructure/UnityCliObjectRef.cs +5 -5
  186. package/unitypkg/Editor/Infrastructure/UnityCliOperationCoordinator.cs +32 -32
  187. package/unitypkg/Editor/Infrastructure/UnityCliReflection.cs +12 -12
  188. package/unitypkg/Editor/Infrastructure/UnityCliRuntimeExecutor.cs +1 -1
  189. package/unitypkg/Editor/ProjectTools/ProjectToolRegistry.cs +5 -5
  190. package/unitypkg/Editor/Tools/{animation → animation-clip}/AnimationToolSupport.cs +3 -3
  191. package/unitypkg/Editor/Tools/{animation/clip → animation-clip}/create.cs +4 -4
  192. package/unitypkg/Editor/Tools/{animation/clip.cs → animation-clip/read.cs} +3 -3
  193. package/unitypkg/Editor/Tools/{animation/clip/modify.cs → animation-clip/update.cs} +5 -5
  194. package/unitypkg/Editor/Tools/{animation/animator → animator}/crossfade.cs +1 -1
  195. package/unitypkg/Editor/Tools/{animation/animator → animator}/get-info.cs +1 -1
  196. package/unitypkg/Editor/Tools/{animation/animator → animator}/get-parameter.cs +1 -1
  197. package/unitypkg/Editor/Tools/{animation/state.cs → animator/get-state.cs} +3 -3
  198. package/unitypkg/Editor/Tools/{animation → animator}/play.cs +5 -5
  199. package/unitypkg/Editor/Tools/{animation/animator → animator}/set-enabled.cs +1 -1
  200. package/unitypkg/Editor/Tools/{animation/animator → animator}/set-parameter.cs +1 -1
  201. package/unitypkg/Editor/Tools/{animation/animator → animator}/set-speed.cs +1 -1
  202. package/unitypkg/Editor/Tools/{animation → animator}/stop.cs +4 -4
  203. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-blend-tree-child.cs +10 -10
  204. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-layer.cs +6 -6
  205. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-parameter.cs +6 -6
  206. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-state.cs +7 -7
  207. package/unitypkg/Editor/Tools/{controller → animator-controller}/add-transition.cs +9 -9
  208. package/unitypkg/Editor/Tools/{controller → animator-controller}/assign.cs +6 -6
  209. package/unitypkg/Editor/Tools/{controller → animator-controller}/create-blend-tree-1d.cs +7 -7
  210. package/unitypkg/Editor/Tools/{controller → animator-controller}/create-blend-tree-2d.cs +7 -7
  211. package/unitypkg/Editor/Tools/{controller → animator-controller}/create.cs +4 -4
  212. package/unitypkg/Editor/Tools/{controller → animator-controller}/get-info.cs +4 -4
  213. package/unitypkg/Editor/Tools/{controller → animator-controller}/remove-layer.cs +8 -8
  214. package/unitypkg/Editor/Tools/{controller → animator-controller}/set-layer-weight.cs +6 -6
  215. package/unitypkg/Editor/Tools/asset/preview.cs +1 -1
  216. package/unitypkg/Editor/Tools/asset/{modify.cs → write-text.cs} +6 -6
  217. package/unitypkg/Editor/Tools/component/get.cs +1 -1
  218. package/unitypkg/Editor/Tools/component/list-types.cs +2 -2
  219. package/unitypkg/Editor/Tools/component/modify.cs +1 -1
  220. package/unitypkg/Editor/Tools/component/set.cs +1 -1
  221. package/unitypkg/Editor/Tools/console/{get.cs → read.cs} +3 -3
  222. package/unitypkg/Editor/Tools/editor/{play.cs → play-mode/start.cs} +5 -5
  223. package/unitypkg/Editor/Tools/editor/{stop.cs → play-mode/stop.cs} +5 -5
  224. package/unitypkg/Editor/Tools/editor/search.cs +1 -1
  225. package/unitypkg/Editor/Tools/{go → game-object}/GameObjectToolSupport.cs +5 -22
  226. package/unitypkg/Editor/Tools/{go → game-object}/create.cs +11 -11
  227. package/unitypkg/Editor/Tools/{go → game-object}/delete.cs +7 -7
  228. package/unitypkg/Editor/Tools/{go → game-object}/duplicate.cs +6 -6
  229. package/unitypkg/Editor/Tools/{go → game-object}/find.cs +5 -5
  230. package/unitypkg/Editor/Tools/{go → game-object}/look-at.cs +8 -8
  231. package/unitypkg/Editor/Tools/{go → game-object}/modify.cs +9 -9
  232. package/unitypkg/Editor/Tools/{go → game-object}/move-relative.cs +7 -7
  233. package/unitypkg/Editor/Tools/{scene/move-object.cs → game-object/move-to-scene.cs} +7 -7
  234. package/unitypkg/Editor/Tools/{go → game-object}/set-parent.cs +9 -9
  235. package/unitypkg/Editor/Tools/{graphics/bake-cancel.cs → lighting/bake/cancel.cs} +4 -4
  236. package/unitypkg/Editor/Tools/{graphics/bake-clear.cs → lighting/bake/clear.cs} +4 -4
  237. package/unitypkg/Editor/Tools/{graphics/bake-reflection-probe.cs → lighting/bake/reflection-probe.cs} +3 -3
  238. package/unitypkg/Editor/Tools/{graphics/bake-settings.cs → lighting/bake/settings.cs} +12 -12
  239. package/unitypkg/Editor/Tools/{graphics/bake-start.cs → lighting/bake/start.cs} +5 -5
  240. package/unitypkg/Editor/Tools/{graphics/bake-status.cs → lighting/bake/status.cs} +3 -3
  241. package/unitypkg/Editor/Tools/{graphics → lighting}/light-probe-group.cs +7 -7
  242. package/unitypkg/Editor/Tools/{graphics → lighting}/reflection-probe.cs +12 -12
  243. package/unitypkg/Editor/Tools/{graphics/skybox-get.cs → lighting/skybox/get.cs} +3 -3
  244. package/unitypkg/Editor/Tools/{graphics/skybox-set-ambient.cs → lighting/skybox/set-ambient.cs} +3 -3
  245. package/unitypkg/Editor/Tools/{graphics/skybox-set-fog.cs → lighting/skybox/set-fog.cs} +3 -3
  246. package/unitypkg/Editor/Tools/{graphics/skybox-set-material.cs → lighting/skybox/set-material.cs} +5 -5
  247. package/unitypkg/Editor/Tools/{graphics/skybox-set-properties.cs → lighting/skybox/set-properties.cs} +5 -5
  248. package/unitypkg/Editor/Tools/{graphics/skybox-set-reflection.cs → lighting/skybox/set-reflection.cs} +3 -3
  249. package/unitypkg/Editor/Tools/{graphics/skybox-set-sun.cs → lighting/skybox/set-sun.cs} +5 -5
  250. package/unitypkg/Editor/Tools/{project → project-settings}/ProjectSettingsToolSupport.cs +5 -5
  251. package/unitypkg/Editor/Tools/{project → project-settings}/audio-settings/set.cs +3 -3
  252. package/unitypkg/Editor/Tools/{project → project-settings}/audio-settings.cs +4 -4
  253. package/unitypkg/Editor/Tools/{project → project-settings}/info.cs +4 -4
  254. package/unitypkg/Editor/Tools/{project → project-settings}/input-settings/set.cs +3 -3
  255. package/unitypkg/Editor/Tools/{project → project-settings}/input-settings.cs +4 -4
  256. package/unitypkg/Editor/Tools/project-settings/layer/add.cs +3 -0
  257. package/unitypkg/Editor/Tools/project-settings/layer/remove.cs +3 -0
  258. package/unitypkg/Editor/Tools/{project → project-settings}/layers.cs +4 -4
  259. package/unitypkg/Editor/Tools/{project → project-settings}/player-settings/set.cs +4 -4
  260. package/unitypkg/Editor/Tools/{project → project-settings}/player-settings.cs +4 -4
  261. package/unitypkg/Editor/Tools/project-settings/tag/add.cs +3 -0
  262. package/unitypkg/Editor/Tools/project-settings/tag/remove.cs +3 -0
  263. package/unitypkg/Editor/Tools/{project → project-settings}/tags.cs +4 -4
  264. package/unitypkg/Editor/Tools/{project → project-settings}/time-settings/set.cs +3 -3
  265. package/unitypkg/Editor/Tools/{project → project-settings}/time-settings.cs +4 -4
  266. package/unitypkg/Editor/Tools/{graphics → rendering}/GraphicsToolSupport.cs +3 -3
  267. package/unitypkg/Editor/Tools/rendering/pipeline/info.cs +19 -0
  268. package/unitypkg/Editor/Tools/{graphics/pipeline-settings.cs → rendering/pipeline/settings.cs} +4 -4
  269. package/unitypkg/Editor/Tools/{graphics → rendering}/quality.cs +17 -17
  270. package/unitypkg/Editor/Tools/{graphics → rendering}/scene-debug.cs +4 -4
  271. package/unitypkg/Editor/Tools/rendering/stats.cs +17 -0
  272. package/unitypkg/Editor/Tools/{reflection → runtime-reflection}/method/find.cs +5 -5
  273. package/unitypkg/Editor/Tools/{reflection/method/call.cs → runtime-reflection/method/invoke.cs} +7 -7
  274. package/unitypkg/Editor/Tools/{reflection → runtime-reflection}/type/schema.cs +5 -5
  275. package/unitypkg/Editor/Tools/scene/gameobject-support.cs +1 -1
  276. package/unitypkg/Editor/Tools/scene/gameobject.cs +1 -1
  277. package/unitypkg/Editor/Tools/scene/hierarchy.cs +1 -1
  278. package/unitypkg/Editor/Tools/{camera/screenshot.cs → screenshot/from-camera.cs} +4 -4
  279. package/unitypkg/Editor/Tools/{object/modify.cs → serialized-object/patch.cs} +8 -8
  280. package/unitypkg/Editor/Tools/{object/get-data.cs → serialized-object/read.cs} +4 -4
  281. package/unitypkg/Editor/Tools/{graphics/volume.cs → volume/list.cs} +3 -3
  282. package/unitypkg/Editor/UnityCliBridge.cs +3 -22
  283. package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeBridge.cs +15 -15
  284. package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeRegistry.cs +1 -1
  285. package/unitypkg/Runtime/Tools/UnityCliRuntimeTools.cs +22 -22
  286. package/unitypkg/Shared/UnityCliBridgeQueuePolicy.cs +1 -1
  287. package/unitypkg/Tests/Editor/UnityCliAdmissionCoordinatorIntegrationTests.cs +7 -7
  288. package/unitypkg/Tests/Editor/UnityCliBridgeAdmissionIntegrationTests.cs +6 -6
  289. package/unitypkg/Tests/Editor/UnityCliBridgeQueuePolicyTests.cs +3 -3
  290. package/unitypkg/Tests/Editor/UnityCliContinuationIntegrationTests.cs +1 -1
  291. package/unitypkg/Tests/Editor/UnityCliRequestBudgetTests.cs +4 -4
  292. package/unitypkg/Tests/Editor/UnityCliRuntimeBridgeIntegrationTests.cs +15 -15
  293. package/unitypkg/Tests/Runtime/UnityCliRuntimeCatalogValidationTests.cs +5 -5
  294. package/unitypkg/package.json +1 -1
  295. package/dist/bridge/domains/graphics.d.ts +0 -2
  296. package/dist/bridge/domains/graphics.js +0 -170
  297. package/dist/bridge/domains/graphics.js.map +0 -1
  298. package/dist/bridge/domains/object.d.ts +0 -2
  299. package/dist/bridge/domains/object.js.map +0 -1
  300. package/dist/bridge/domains/package.d.ts +0 -2
  301. package/dist/bridge/domains/package.js +0 -2
  302. package/dist/bridge/domains/package.js.map +0 -1
  303. package/dist/bridge/domains/project-tool.d.ts +0 -2
  304. package/dist/bridge/domains/project-tool.js.map +0 -1
  305. package/dist/bridge/domains/reflection.d.ts +0 -2
  306. package/dist/bridge/domains/reflection.js.map +0 -1
  307. package/dist/bridge/domains/runtime-tool.d.ts +0 -2
  308. package/dist/bridge/domains/runtime-tool.js.map +0 -1
  309. package/dist/tools/code/exec.js.map +0 -1
  310. package/dist/tools/reflect/member.js.map +0 -1
  311. package/dist/tools/reflect/search.js.map +0 -1
  312. package/dist/tools/reflect/type.js.map +0 -1
  313. package/dist/tools/runtime/console.js.map +0 -1
  314. package/dist/tools/runtime/input/key.js.map +0 -1
  315. package/dist/tools/runtime/input/pointer.js.map +0 -1
  316. package/dist/tools/runtime/log.js.map +0 -1
  317. package/dist/tools/runtime/state.js.map +0 -1
  318. package/dist/tools/runtime/target-framerate/set.js.map +0 -1
  319. package/dist/tools/runtime/time-scale/set.js.map +0 -1
  320. package/dist/tools/runtime/ui/capture-element.js.map +0 -1
  321. package/unitypkg/Editor/Tools/graphics/pipeline-info.cs +0 -19
  322. package/unitypkg/Editor/Tools/graphics/stats.cs +0 -17
  323. package/unitypkg/Editor/Tools/project/layer/add.cs +0 -3
  324. package/unitypkg/Editor/Tools/project/layer/remove.cs +0 -3
  325. package/unitypkg/Editor/Tools/project/tag/add.cs +0 -3
  326. package/unitypkg/Editor/Tools/project/tag/remove.cs +0 -3
  327. /package/dist/tools/{runtime → player-runtime}/console.d.ts +0 -0
  328. /package/dist/tools/{runtime → player-runtime}/input/key.d.ts +0 -0
  329. /package/dist/tools/{runtime → player-runtime}/input/pointer.d.ts +0 -0
  330. /package/dist/tools/{runtime → player-runtime}/log.d.ts +0 -0
  331. /package/dist/tools/{runtime → player-runtime}/state.d.ts +0 -0
  332. /package/dist/tools/{runtime → player-runtime}/target-framerate/set.d.ts +0 -0
  333. /package/dist/tools/{runtime → player-runtime}/time-scale/set.d.ts +0 -0
  334. /package/dist/tools/{runtime → player-runtime}/ui/capture-element.d.ts +0 -0
  335. /package/dist/tools/{reflect/member.d.ts → type-inspection/get-member.d.ts} +0 -0
  336. /package/dist/tools/{reflect/type.d.ts → type-inspection/get-type.d.ts} +0 -0
  337. /package/dist/tools/{reflect → type-inspection}/search.d.ts +0 -0
  338. /package/unitypkg/Editor/Tools/{animation → animator}/AnimatorRuntimeToolSupport.cs +0 -0
  339. /package/unitypkg/Editor/Tools/{project → project-settings}/ProjectSettingsReader.cs +0 -0
  340. /package/unitypkg/Editor/Tools/{project → project-settings}/ProjectTagLayerToolSupport.cs +0 -0
  341. /package/unitypkg/Editor/Tools/{object → serialized-object}/ObjectToolSupport.cs +0 -0
@@ -73,7 +73,7 @@ alps-unity-cli 使用结构化错误码,包含机器可读的 `code`、`transi
73
73
 
74
74
  | 错误码 | 含义 | 恢复 |
75
75
  |--------|------|------|
76
- | `E_RUNTIME_NOT_READY` | Runtime 工具需 Play Mode | 先 `tools run editor.play`,transient 可重试 |
76
+ | `E_RUNTIME_NOT_READY` | Runtime 工具需 Play Mode | 先 `tools run editor.play-mode.start`,transient 可重试 |
77
77
  | `E_RUNTIME_SESSION_STALE` | 运行时会话过期 | 重新进入 Play Mode |
78
78
  | `E_RUNTIME_TIMEOUT` | 运行时操作超时 | 增加 `--timeout-ms` 或重试 |
79
79
 
@@ -135,9 +135,9 @@ alps-unity-cli 使用结构化错误码,包含机器可读的 `code`、`transi
135
135
  | `E_PROJECT_SETTINGS_NO_FIELDS` | setter没有提供任何批准字段 | 按`tools describe project.*-settings.set`提供至少一个字段 |
136
136
  | `E_PROJECT_SETTINGS_INVALID` | 数值边界、分页、axis或Player enum输入非法 | 按错误中的精确字段约束修正输入 |
137
137
  | `E_PROJECT_SETTINGS_LIMIT_EXCEEDED` | legacy Input Manager超过4096个axis,无法在公开有界读取内安全扫描 | 减少Input Manager axis数量后重试 |
138
- | `E_PROJECT_INPUT_AXIS_NOT_FOUND` | 没有完全同名的legacy Input Manager axis | 先分页读取`project.input-settings`并传精确名称 |
138
+ | `E_PROJECT_INPUT_AXIS_NOT_FOUND` | 没有完全同名的legacy Input Manager axis | 先分页读取`project-settings.input-settings`并传精确名称 |
139
139
  | `E_PROJECT_SETTINGS_TARGET_CHANGED` | 冻结的Input axis index/name在effect前漂移 | fresh读取Input设置后提交新请求 |
140
- | `E_PROJECT_SETTINGS_VERIFY_FAILED` | typed readback或ProjectSettings文件SHA未证明持久化终态 | 读取对应`project.*-settings`后再决定是否重试 |
140
+ | `E_PROJECT_SETTINGS_VERIFY_FAILED` | typed readback或ProjectSettings文件SHA未证明持久化终态 | 读取对应`project-settings.*`后再决定是否重试 |
141
141
 
142
142
  ### Editor Utility 错误
143
143
 
@@ -183,7 +183,7 @@ alps-unity-cli 使用结构化错误码,包含机器可读的 `code`、`transi
183
183
 
184
184
  | 错误码 | 含义 | 恢复 |
185
185
  |--------|------|------|
186
- | `E_METHOD_NOT_FOUND` | 方法名或显式参数签名不存在 | 运行 `reflection.method.find` 并核对 `parameterType` |
186
+ | `E_METHOD_NOT_FOUND` | 方法名或显式参数签名不存在 | 运行 `runtime-reflection.method.find` 并核对 `parameterType` |
187
187
  | `E_METHOD_AMBIGUOUS` | 多个 overload 与参数数量匹配 | 将选中签名的 `parameterType` 数组作为 `parameterTypes` 重试 |
188
188
  | `E_TYPE_NOT_FOUND` | 目标类型或参数类型不存在 | 使用完整 C# type name |
189
189
 
@@ -214,7 +214,7 @@ alps-unity-cli 使用结构化错误码,包含机器可读的 `code`、`transi
214
214
  ### nextActions 规则
215
215
 
216
216
  - Instance 错误的 `nextActions` 必须指向 `instances list`、显式 `--instance`、项目路径或关闭重复 Editor
217
- - Runtime 错误的 `nextActions` 必须指向 `tools run editor.play` 或 Play Mode 相关操作
217
+ - Runtime 错误的 `nextActions` 必须指向 `tools run editor.play-mode.start` 或 Play Mode 相关操作
218
218
  - Discovery 错误的 `nextActions` 必须指向 `tools group`、`tools group list`、`tools search <k1|k2|...>` 或 `tools describe`
219
219
  - 弹窗 blocker 的 `nextActions` 必须指向先 `tools run editor.dialogs`,再 `tools run editor.dialog.click`;不得要求人工处理、预定义按钮列表、launch-only 入口或额外确认
220
220
  - 诊断错误的 `nextActions` 必须指向顶层 `doctor` 或对应 owner(`instances list`、`editor.state`、`extensions doctor`、Unity Console)
@@ -103,7 +103,7 @@ unitycli extensions doctor --project <path> # 扩展诊断
103
103
 
104
104
  | 扩展 | 状态 | 说明 |
105
105
  |------|------|------|
106
- | ProBuilder | ✅ 已实现 | 36 个扩展工具(create-shape/extrude-faces/delete-faces 等),只接受 `com.unity.probuilder@5.2.4` |
106
+ | ProBuilder | ✅ 已实现 | 37 个扩展工具(create-shape/extrude-faces/delete-faces 等),只接受 `com.unity.probuilder@5.2.4` |
107
107
  | Cinemachine | ✅ 已实现 | Cinemachine camera/target/lens/shot 等工具,需要 `com.unity.cinemachine` |
108
108
  | VFX Graph | ✅ 已实现 | VFX Graph、ParticleSystem、LineRenderer、TrailRenderer 相关工具;VFX Graph 子集需要 `com.unity.visualeffectgraph` |
109
109
  | URP | ✅ 已实现 | URP renderer feature、volume、settings 等工具,需要 `com.unity.render-pipelines.universal` |
@@ -121,6 +121,6 @@ unitycli extensions doctor --project <path> # 扩展诊断
121
121
  ## 取证与依赖
122
122
 
123
123
  - 扩展基础设施:`extensions list/install/remove/doctor`、`init --auto-detect`、缺依赖 descriptor 的 `available:false` / `unavailableReason` 与执行错误的 `nextActions`。
124
- - ProBuilder:源码位于 `extensions/probuilder/`,安装后位于 `Packages/com.alpsckr.unitycli/Extensions/probuilder/`,通过 project-tool bridge 路由提供扩展工具;所有 operation replay 固定于 `com.unity.probuilder@5.2.4`,版本不匹配时在 effect 前拒绝。
124
+ - ProBuilder:源码位于 `extensions/probuilder/`,安装后位于 `Packages/com.alpsckr.unitycli/Extensions/probuilder/`,通过 catalog bridge 路由提供扩展工具;所有 operation replay 固定于 `com.unity.probuilder@5.2.4`,版本不匹配时在 effect 前拒绝。
125
125
  - Cinemachine/VFX/URP/HDRP:源码位于对应 `extensions/<id>/` 目录,安装后位于 `Packages/com.alpsckr.unitycli/Extensions/<id>/`,通过 metadata、bridge domain 和 C# command handler 提供 live Bridge 工具。
126
126
  - 验证入口:`npm test`、`npm run contracts:validate`、extension availability tests。
@@ -21,18 +21,18 @@ Every tool carries risk hints in its descriptor. Public Tool and CLI control-pla
21
21
  |---------|-------|----------------------|
22
22
  | `tools run asset.delete` | Delete Asset | ✅ |
23
23
  | `tools run scene.save` | Save Scene | ✅ |
24
- | `tools run code.exec` | Execute Live Code | ✅ |
24
+ | `tools run code.execute` | Execute Live Code | ✅ |
25
25
  | `tools run scriptable-object.create` | Create ScriptableObject Asset | ✅ |
26
26
  | `tools run scriptable-object.modify` | Modify ScriptableObject Asset | ✅ |
27
27
  | `tools run texture.modify` | Modify Texture Asset | ✅ |
28
28
  | `tools run texture.delete` | Delete Texture Asset | ✅ |
29
29
  | `tools run shader.delete` | Delete Shader Asset | ✅ |
30
- | `tools run object.modify` | Modify Object (deep patch) | ✅ |
31
- | `tools run reflection.method.call` | Call Method via Reflection | ✅ |
32
- | `tools run graphics.bake-clear` | Clear Baked Lighting | ❌ |
33
- | `tools run graphics.bake-start` | Start Light Bake | ❌ |
34
- | `tools run graphics.bake-reflection-probe` | Bake Reflection Probe | ❌ |
35
- | `tools run controller.remove-layer` | Remove Animator Controller Layer | ❌ |
30
+ | `tools run serialized-object.patch` | Modify Object (deep patch) | ✅ |
31
+ | `tools run runtime-reflection.method.invoke` | Call Method via Reflection | ✅ |
32
+ | `tools run lighting.bake.clear` | Clear Baked Lighting | ❌ |
33
+ | `tools run lighting.bake.start` | Start Light Bake | ❌ |
34
+ | `tools run lighting.bake.reflection-probe` | Bake Reflection Probe | ❌ |
35
+ | `tools run animator-controller.remove-layer` | Remove Animator Controller Layer | ❌ |
36
36
  | `tools run editor.menu` | Execute Editor Menu | ❌ |
37
37
  | `tools run package.embed` | Embed Package | ✅ |
38
38
  | `tools run package.install` | Package Install | ❌ |
@@ -41,9 +41,9 @@ Every tool carries risk hints in its descriptor. Public Tool and CLI control-pla
41
41
  | `tools run package.restore` | Package Restore | ✅ |
42
42
  | `tools run package.bridge-remove` | Package Bridge Remove | ✅ |
43
43
 
44
- `code.exec` keeps unrestricted synchronous C# execution. It does not reject infinite loops, long sleeps, blocking waits, lock contention, synchronous I/O, or long-running Unity API calls. Before submitting such code, the caller must decide whether it is necessary for the requested result and consider a bounded implementation or an existing Tool; necessary code may still be executed unchanged. After `Run` starts on the Unity Editor main thread, `--timeout-ms` can stop the CLI from waiting but cannot stop the C# code. The Editor can remain unresponsive, the mutation owner can remain active, Unity state can be partial or unknown, and recovery can require terminating the Editor process. A timeout is not proof that the code stopped, so inspect business state before retrying. Dry-run only previews the source hash and planned effect; it does not compile, execute, or prove termination.
44
+ `code.execute` keeps unrestricted synchronous C# execution. It does not reject infinite loops, long sleeps, blocking waits, lock contention, synchronous I/O, or long-running Unity API calls. Before submitting such code, the caller must decide whether it is necessary for the requested result and consider a bounded implementation or an existing Tool; necessary code may still be executed unchanged. After `Run` starts on the Unity Editor main thread, `--timeout-ms` can stop the CLI from waiting but cannot stop the C# code. The Editor can remain unresponsive, the mutation owner can remain active, Unity state can be partial or unknown, and recovery can require terminating the Editor process. A timeout is not proof that the code stopped, so inspect business state before retrying. Dry-run only previews the source hash and planned effect; it does not compile, execute, or prove termination.
45
45
 
46
- The `reflection.method.call` tool performs no scope restriction on the invoked method (public/private/static/instance, any namespace/assembly, Editor/Runtime). Its risk metadata describes that effect; invoking the public Tool authorizes execution. When a method name has overloads, pass the selected signature's `parameterType` values as `parameterTypes`.
46
+ The `runtime-reflection.method.invoke` tool performs no scope restriction on the invoked method (public/private/static/instance, any namespace/assembly, Editor/Runtime). Its risk metadata describes that effect; invoking the public Tool authorizes execution. When a method name has overloads, pass the selected signature's `parameterType` values as `parameterTypes`.
47
47
 
48
48
  ### Optional Preview
49
49
 
@@ -88,7 +88,7 @@ Each Unity domain validates the complete Tool table before publishing its single
88
88
  ## Cross-Reference
89
89
 
90
90
  - Runtime and execution errors: [error-codes](./error-codes.md)
91
- - Tool descriptor field coverage: [tool-discovery](./tool-discovery.md) §Descriptor field coverage
91
+ - Tool descriptor field coverage: [tool-discovery](./tool-discovery.md) §tools describe
92
92
  - Tool metadata schema: [../schemas/tool-metadata.schema.json](../schemas/tool-metadata.schema.json)
93
- - Security policy source: `src/security-policy.ts` and `src/security.ts`
94
- - AI skill (compact version): [/skills/unitycli/SKILL.md](../skills/unitycli/SKILL.md)
93
+ - Destructive metadata source: TS tool metadata and bridge specs (`src/tools/**`, `src/bridge/domains/*.ts`) plus C# `ToolDescriptor.DestructiveHint`, cross-checked by `src/contracts/command-contract.ts`
94
+ - AI skill entry: [skills/unitycli/SKILL.md](../skills/unitycli/SKILL.md)
@@ -32,25 +32,25 @@ alps-unity-cli的安全模型围绕三个核心原则:Tool副作用必须准
32
32
  | `tools run texture.modify` | 修改 Texture 资产 |
33
33
  | `tools run texture.delete` | 删除 Texture 资产 |
34
34
  | `tools run shader.delete` | 删除 Shader 资产 |
35
- | `tools run object.modify` | 修改场景对象或持久资产数据 |
35
+ | `tools run serialized-object.patch` | 修改场景对象或持久资产数据 |
36
36
  | `tools run component.modify` | 修改场景组件或持久 Prefab/资产组件 |
37
37
  | `tools run texture.import-settings` | 持久化 TextureImporter 设置 |
38
38
  | `tools run texture.sprite` | 持久化 Sprite importer 与切片设置 |
39
- | `tools run graphics.quality` | 持久化 QualitySettings |
40
- | `tools run graphics.pipeline-settings` | 持久化默认 RenderPipelineAsset 并触发资产导入 |
41
- | `tools run graphics.bake-settings` | 持久化 LightingSettings 与场景绑定 |
39
+ | `tools run rendering.quality` | 持久化 QualitySettings |
40
+ | `tools run rendering.pipeline.settings` | 持久化默认 RenderPipelineAsset 并触发资产导入 |
41
+ | `tools run lighting.bake.settings` | 持久化 LightingSettings 与场景绑定 |
42
42
  | `tools run build.platform.set` | 持久切换 active BuildTarget |
43
43
  | `tools run build.profile.switch` | 持久切换 active Build Profile |
44
44
  | `tools run editor.menu` | 执行编辑器菜单项 |
45
- | `tools run reflection.method.call` | 调用精确同步 C# overload,并要求独立 completion proof |
45
+ | `tools run runtime-reflection.method.invoke` | 调用精确同步 C# overload,并要求独立 completion proof |
46
46
  | `tools run package.install` | 安装包 |
47
47
  | `tools run package.remove` | 移除包 |
48
48
  | `tools run package.deploy` | 复制本地 package 源到项目 Packages 目录 |
49
49
  | `tools run package.restore` | 从 package.deploy 备份恢复或移除部署目录 |
50
50
  | `tools run package.bridge-remove` | 移除 init 复制的 Bridge 包 |
51
- | `tools run code.exec` | 在已打开的 Unity Editor 中执行代码 |
51
+ | `tools run code.execute` | 在已打开的 Unity Editor 中执行代码 |
52
52
 
53
- `code.exec`保留完整的同步C#执行能力,不按代码内容拒绝死循环、长时间sleep、阻塞等待、锁等待、同步I/O或长期占用Unity API。调用方在提交这类代码前必须先判断它对当前结果是否确有必要,并考虑有界写法或现有Tool能否达到同一结果;确有必要时仍可原样执行。代码一旦在Unity Editor主线程开始,`--timeout-ms`和取消只能停止CLI等待,不能强制中止正在运行的C#。Unity可能无响应,mutation owner可能无法收尾,业务状态可能部分改变或无法证明,恢复可能需要结束Editor进程。此时timeout不表示代码已经停止,不能据此直接重试。`--dry-run`只返回source hash和planned effect,不编译、不执行,也不验证代码能够结束。
53
+ `code.execute`保留完整的同步C#执行能力,不按代码内容拒绝死循环、长时间sleep、阻塞等待、锁等待、同步I/O或长期占用Unity API。调用方在提交这类代码前必须先判断它对当前结果是否确有必要,并考虑有界写法或现有Tool能否达到同一结果;确有必要时仍可原样执行。代码一旦在Unity Editor主线程开始,`--timeout-ms`和取消只能停止CLI等待,不能强制中止正在运行的C#。Unity可能无响应,mutation owner可能无法收尾,业务状态可能部分改变或无法证明,恢复可能需要结束Editor进程。此时timeout不表示代码已经停止,不能据此直接重试。`--dry-run`只返回source hash和planned effect,不编译、不执行,也不验证代码能够结束。
54
54
 
55
55
  ### 可选预览
56
56
 
@@ -60,7 +60,7 @@ unitycli tools search 'project-summary|scene' --page-size 20 --cursor <nextCurso
60
60
  执行前读取单个 Tool 的完整 descriptor:
61
61
 
62
62
  ```powershell
63
- unitycli tools describe camera.screenshot
63
+ unitycli tools describe screenshot.from-camera
64
64
  ```
65
65
 
66
66
  公开字段:
@@ -9,10 +9,10 @@
9
9
  unitycli tools run camera.list --input '{}'
10
10
 
11
11
  # 通过 --input-file 传参(JSON 文件)
12
- unitycli tools run camera.screenshot --input-file params.json
12
+ unitycli tools run screenshot.from-camera --input-file params.json
13
13
 
14
14
  # 通过 --stdin 传参
15
- echo '{"target":"Main Camera"}' | unitycli tools run camera.screenshot --stdin
15
+ echo '{"target":"Main Camera"}' | unitycli tools run screenshot.from-camera --stdin
16
16
  ```
17
17
 
18
18
  ## 执行路由
@@ -33,10 +33,10 @@ echo '{"target":"Main Camera"}' | unitycli tools run camera.screenshot --stdin
33
33
 
34
34
  ```powershell
35
35
  # 正确:提供 inputSchema 要求的字段
36
- unitycli tools run camera.screenshot --input '{"target":"Main Camera","output":"shot.png"}'
36
+ unitycli tools run screenshot.from-camera --input '{"target":"Main Camera","output":"shot.png"}'
37
37
 
38
38
  # 错误:缺少必需字段
39
- unitycli tools run camera.screenshot --input '{}'
39
+ unitycli tools run screenshot.from-camera --input '{}'
40
40
  # → E_SCHEMA_INVALID, nextActions 指向 tools describe
41
41
  ```
42
42
 
@@ -66,10 +66,10 @@ Bridge-backed Tool由Unity Editor主线程执行。业务请求发送前,sessi
66
66
 
67
67
  ### `editor.compile`
68
68
 
69
- `editor.compile` 是唯一公开编译 Tool。一次调用在同一 root request 下等待 pre-existing import/compile、触发 owned compilation cycle、跨 domain reload 恢复、收集本次 `CompilationPipeline` diagnostics,并等待 Editor listener 重新稳定。公开成功要求 `compile.completed=true`、`errorCount=0`、`editorState.status=ready`;warning 可作为 diagnostics 返回。compiler error 返回 `E_UNITY_COMPILE_FAILED`,不会用旧 Console 历史判断本次结果。
69
+ `editor.compile` 是唯一公开编译 Tool。一次调用在同一 root request 下等待 pre-existing import/compile、刷新 Asset Database,并由 Unity 判断导入的脚本变化是否需要编译。Tool 只观察刷新后出现的新 `CompilationPipeline` cycle,不额外调用 `RequestScriptCompilation()`;有编译时跨 domain reload 恢复并收集本次 diagnostics,没有编译时返回 `compile.status="unchanged"`、`compilationTriggered=false` 和 `noOpReason="no-script-changes"`。公开成功要求 `compile.completed=true`、`errorCount=0`、`editorState.status=ready`;warning 可作为 diagnostics 返回。compiler error 返回 `E_UNITY_COMPILE_FAILED`,不会用旧 Console 历史判断本次结果。
70
70
 
71
71
  ```powershell
72
- unitycli tools run editor.compile --input '{"refresh":true,"includeWarnings":true}' --timeout-ms 120000
72
+ unitycli tools run editor.compile --input '{"includeWarnings":true}' --timeout-ms 120000
73
73
  ```
74
74
 
75
75
  accepted、queued、phase、run ID 和 listener 字段仅属于内部 coordinator,不会成为公开成功。稳定 Play Mode 调用返回 `E_UNITY_COMPILE_REQUIRES_EDIT_MODE`;dry-run 只返回 planned effects,不触发 refresh 或 compile。
@@ -107,8 +107,8 @@ unitycli tools run asset.delete --input '{"path":"Assets/Temp.mat"}'
107
107
  通用规则:
108
108
 
109
109
  - discovery 的 `tools group list`、`tools search` 和省略name的`command`列表默认每页20项、最大100项;继续读取时将`pageInfo.nextCursor`原值传回CLI `--cursor`。
110
- - `console.get`、`scene.hierarchy`、`go.find`、`profiler.hierarchy`、`profiler.frame-debugger.events`、`profiler.memory-snapshot.list`、`type.schema` 和 `reflection.method.find` 使用 opaque string `nextCursor`。游标绑定原始位置、selector 与 Unity/assembly generation;Frame Debugger 游标还绑定 Editor listener、CLI enable/disable generation、事件数与捕获首尾签名。游标必须原样传回,改变 selector、generation 或捕获后返回 `E_CONTINUATION_STALE`。`truncated=true` 表示还有原始位置;不能把当前页数量当作总数。
111
- - 深度序列化工具(`object.get-data`、`asset.get-data`、`component.get`)优先传 `paths` 或 `viewQuery`。`maxDepth` 为 `0..16`,`maxArrayItems` 为 `1..1000`,`paths` 最多128条并保持输入顺序;cycle/depth 在展开前裁决,所有路径共享同一预算,非 `IList` enumerable 不会预 materialize。`truncated` 与 `nextPath` 表示被截断子树。
110
+ - `console.read`、`scene.hierarchy`、`game-object.find`、`profiler.hierarchy`、`profiler.frame-debugger.events`、`profiler.memory-snapshot.list`、`runtime-reflection.type.schema` 和 `runtime-reflection.method.find` 使用 opaque string `nextCursor`。游标绑定原始位置、selector 与 Unity/assembly generation;Frame Debugger 游标还绑定 Editor listener、CLI enable/disable generation、事件数与捕获首尾签名。游标必须原样传回,改变 selector、generation 或捕获后返回 `E_CONTINUATION_STALE`。`truncated=true` 表示还有原始位置;不能把当前页数量当作总数。
111
+ - 深度序列化工具(`serialized-object.read`、`asset.get-data`、`component.get`)优先传 `paths` 或 `viewQuery`。`maxDepth` 为 `0..16`,`maxArrayItems` 为 `1..1000`,`paths` 最多128条并保持输入顺序;cycle/depth 在展开前裁决,所有路径共享同一预算,非 `IList` enumerable 不会预 materialize。`truncated` 与 `nextPath` 表示被截断子树。
112
112
  - 上述 Unity 主线程读取默认共用 `10000` scanned records、`4096` nodes、`2048` getters、`4096` reflection calls、`250ms` monotonic main-thread work 和 `1 MiB` serialized UTF-8。`budget` 可收紧或提高到公开上限 `100000`、`20000`、`10000`、`20000`、`2000ms`、`8 MiB`;零、负数或超限值在读取/effect前返回 `E_SCHEMA_INVALID` 或 `E_REQUEST_BUDGET_INVALID`。
113
113
  - 文本源码工具(如 `shader.read`)使用 `offset` 和 `maxBytes` 分段读取。输出 `truncated=true` 时,下一次把 `nextOffset` 作为新的 `offset`。
114
114
  - 截图/相机捕获的单图边长最多8192且最多16777216像素,capture count最多36。完整计划必须在首个effect前满足默认33554432 total pixels、128 MiB peak temporary memory、64 MiB artifact bytes;公开上限为67108864、256 MiB、256 MiB。`orbit`逐图释放,`surround`逐图写入contact sheet后释放,不同时保留所有tile。内联图片仍限512 KiB。
@@ -142,7 +142,7 @@ unitycli tools run shader.read --input '{"path":"Assets/Shaders/Probe.shader","m
142
142
  | 错误码 | 原因 | 恢复方式 |
143
143
  |--------|------|---------|
144
144
  | `E_TOOL_NOT_FOUND_FOR_TARGET` | 名称不属于当前实例完整 Tool 目录 | 运行 `tools search <k1|k2|...>` 发现相关 Tool,再用 `tools describe` 检查 requiresPackages 和 available |
145
- | `E_RUNTIME_NOT_READY` | Runtime 工具但非 Play Mode | 先执行 `tools run editor.play`,transient 可重试 |
145
+ | `E_RUNTIME_NOT_READY` | Runtime 工具但非 Play Mode | 先执行 `tools run editor.play-mode.start`,transient 可重试 |
146
146
  | `E_SCHEMA_INVALID` | 输入缺少 inputSchema.required 字段 | 查看 `tools describe` 的 inputSchema |
147
147
  | `E_DRY_RUN_UNSUPPORTED` | 工具不支持 dry-run | 去除可选 `--dry-run` 后直接调用 |
148
148
  | `E_INSTANCE_CONFLICT` | 至少两个verified live process claim属于同一canonical project | 关闭重复Editor,只保留目标session |
@@ -157,24 +157,24 @@ unitycli tools run shader.read --input '{"path":"Assets/Shaders/Probe.shader","m
157
157
 
158
158
  ## Object 与 Component 修改
159
159
 
160
- `object.modify` 和 `component.modify` 只接受非空 `pathPatches`。每一项必须是可由 Unity `SerializedObject.FindProperty` 定位并 fresh readback 的 direct `replace`;不提供 merge、add、remove、reflection member path 或 diff 旁路。支持的值类型以当前 `inputSchema` 和错误 `nextActions` 为准。
160
+ `serialized-object.patch` 和 `component.modify` 只接受非空 `pathPatches`。每一项必须是可由 Unity `SerializedObject.FindProperty` 定位并 fresh readback 的 direct `replace`;不提供 merge、add、remove、reflection member path 或 diff 旁路。支持的值类型以当前 `inputSchema` 和错误 `nextActions` 为准。
161
161
 
162
- `path` 使用 Unity serialized property path,例如 `m_Name`、`m_LocalPosition.x` 或数组的 `Array.data[0]`。它不是 `/` 分隔的 C# member path。`asset.modify` 是独立的文本资产覆写 Tool,不使用 ObjectPatch。
162
+ `path` 使用 Unity serialized property path,例如 `m_Name`、`m_LocalPosition.x` 或数组的 `Array.data[0]`。它不是 `/` 分隔的 C# member path。`asset.write-text` 是独立的文本资产覆写 Tool,不使用 ObjectPatch。
163
163
 
164
164
  ```powershell
165
165
  # 先读后改
166
166
  unitycli tools run component.get --input '{"path":"Player","component":"Rigidbody"}'
167
167
  unitycli tools run component.modify --input '{"path":"Player","component":"Rigidbody","pathPatches":[{"path":"m_Mass","op":"replace","value":10}]}'
168
168
 
169
- unitycli tools run object.modify --input '{"path":"Player","pathPatches":[{"path":"m_Name","op":"replace","value":"PlayerModified"}]}'
169
+ unitycli tools run serialized-object.patch --input '{"path":"Player","pathPatches":[{"path":"m_Name","op":"replace","value":"PlayerModified"}]}'
170
170
  ```
171
171
 
172
- ## reflection.method.call
172
+ ## runtime-reflection.method.invoke
173
173
 
174
- `reflection.method.call` 不做调用范围限制(public/private/static/instance、任意 namespace/assembly、Editor/Runtime),且 `destructiveHint: true`。先用 `reflection.method.find` 获取签名;存在同名 overload 时,将选中签名的 `parameterType` 数组作为 `parameterTypes`。公开调用即授权:
174
+ `runtime-reflection.method.invoke` 不做调用范围限制(public/private/static/instance、任意 namespace/assembly、Editor/Runtime),且 `destructiveHint: true`。先用 `runtime-reflection.method.find` 获取签名;存在同名 overload 时,将选中签名的 `parameterType` 数组作为 `parameterTypes`。公开调用即授权:
175
175
 
176
176
  ```powershell
177
- unitycli tools run reflection.method.call --input '{
177
+ unitycli tools run runtime-reflection.method.invoke --input '{
178
178
  "typeName":"UnityEngine.Transform",
179
179
  "methodName":"Translate",
180
180
  "parameterTypes":["UnityEngine.Vector3","UnityEngine.Space"],
@@ -187,4 +187,4 @@ unitycli tools run reflection.method.call --input '{
187
187
 
188
188
  ## asset.get-data 复用 serializer
189
189
 
190
- `asset.get-data` 是 asset-friendly wrapper,底层复用 `object.get-data` 的 `ObjectSerializer`,不重复实现序列化。`object.get-data` 是任意 `UnityEngine.Object` 深序列化主入口,`asset.get-data` 提供按 assetPath 解析的便捷入口。
190
+ `asset.get-data` 是 asset-friendly wrapper,底层复用 `serialized-object.read` 的 `ObjectSerializer`,不重复实现序列化。`serialized-object.read` 是任意 `UnityEngine.Object` 深序列化主入口,`asset.get-data` 提供按 assetPath 解析的便捷入口。
@@ -2,20 +2,20 @@ import { boolFlag, compactArgs, floatFlag, numberFlag, stringFlag, targetArgs }
2
2
  import type { BridgeCommandSpec } from "../types.js";
3
3
 
4
4
  export const cinemachineBridgeSpecs: BridgeCommandSpec[] = markToolsOnly([
5
- { group: "cinemachine", command: "ping", bridgeCommand: "project-tool.run", toolName: "cinemachine.ping", buildArgs: cinemachinePingArgs },
6
- { group: "cinemachine", command: "create", bridgeCommand: "project-tool.run", toolName: "cinemachine.create", buildArgs: cinemachineCreateArgs },
7
- { group: "cinemachine", command: "target", bridgeCommand: "project-tool.run", toolName: "cinemachine.target", buildArgs: cinemachineTargetArgs },
8
- { group: "cinemachine", command: "lens", bridgeCommand: "project-tool.run", toolName: "cinemachine.lens", buildArgs: cinemachineLensArgs },
9
- { group: "cinemachine", command: "priority", bridgeCommand: "project-tool.run", toolName: "cinemachine.priority", buildArgs: cinemachinePriorityArgs },
10
- { group: "cinemachine", command: "blend", bridgeCommand: "project-tool.run", toolName: "cinemachine.blend", buildArgs: cinemachineBlendArgs },
11
- { group: "cinemachine", command: "body", bridgeCommand: "project-tool.run", toolName: "cinemachine.body", buildArgs: cinemachineBodyArgs },
12
- { group: "cinemachine", command: "aim", bridgeCommand: "project-tool.run", toolName: "cinemachine.aim", buildArgs: cinemachineAimArgs },
13
- { group: "cinemachine", command: "noise", bridgeCommand: "project-tool.run", toolName: "cinemachine.noise", buildArgs: cinemachineNoiseArgs },
14
- { group: "cinemachine", command: "brain.ensure", bridgeCommand: "project-tool.run", toolName: "cinemachine.brain.ensure", buildArgs: cinemachineTargetOnlyArgs },
15
- { group: "cinemachine", command: "brain.status", bridgeCommand: "project-tool.run", toolName: "cinemachine.brain.status", buildArgs: cinemachineTargetOnlyArgs },
16
- { group: "cinemachine", command: "extension.list", bridgeCommand: "project-tool.run", toolName: "cinemachine.extension.list", buildArgs: cinemachineTargetOnlyArgs },
17
- { group: "cinemachine", command: "extension.add", bridgeCommand: "project-tool.run", toolName: "cinemachine.extension.add", buildArgs: cinemachineExtensionTypeArgs },
18
- { group: "cinemachine", command: "extension.remove", bridgeCommand: "project-tool.run", toolName: "cinemachine.extension.remove", buildArgs: cinemachineExtensionTypeArgs }
5
+ { group: "cinemachine", command: "ping", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.ping", buildArgs: cinemachinePingArgs },
6
+ { group: "cinemachine", command: "create", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.create", buildArgs: cinemachineCreateArgs },
7
+ { group: "cinemachine", command: "target", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.target", buildArgs: cinemachineTargetArgs },
8
+ { group: "cinemachine", command: "lens", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.lens", buildArgs: cinemachineLensArgs },
9
+ { group: "cinemachine", command: "priority", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.priority", buildArgs: cinemachinePriorityArgs },
10
+ { group: "cinemachine", command: "blend", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.blend", buildArgs: cinemachineBlendArgs },
11
+ { group: "cinemachine", command: "body", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.body", buildArgs: cinemachineBodyArgs },
12
+ { group: "cinemachine", command: "aim", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.aim", buildArgs: cinemachineAimArgs },
13
+ { group: "cinemachine", command: "noise", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.noise", buildArgs: cinemachineNoiseArgs },
14
+ { group: "cinemachine", command: "brain.ensure", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.brain.ensure", buildArgs: cinemachineTargetOnlyArgs },
15
+ { group: "cinemachine", command: "brain.status", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.brain.status", buildArgs: cinemachineTargetOnlyArgs },
16
+ { group: "cinemachine", command: "extension.list", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.extension.list", buildArgs: cinemachineTargetOnlyArgs },
17
+ { group: "cinemachine", command: "extension.add", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.extension.add", buildArgs: cinemachineExtensionTypeArgs },
18
+ { group: "cinemachine", command: "extension.remove", bridgeCommand: "catalog.editor.run", toolName: "cinemachine.extension.remove", buildArgs: cinemachineExtensionTypeArgs }
19
19
  ]);
20
20
 
21
21
  function markToolsOnly(specs: BridgeCommandSpec[]): BridgeCommandSpec[] {
@@ -2,13 +2,13 @@ import { boolFlag, compactArgs, floatFlag, stringFlag } from "../args.js";
2
2
  import type { BridgeCommandSpec } from "../types.js";
3
3
 
4
4
  export const hdrpBridgeSpecs: BridgeCommandSpec[] = markToolsOnly([
5
- { group: "hdrp", command: "volume-list", bridgeCommand: "project-tool.run", toolName: "hdrp.volume.list", buildArgs: emptyArgs },
6
- { group: "hdrp", command: "volume-create", bridgeCommand: "project-tool.run", toolName: "hdrp.volume.create", buildArgs: volumeCreateArgs },
7
- { group: "hdrp", command: "volume-info", bridgeCommand: "project-tool.run", toolName: "hdrp.volume.info", buildArgs: volumeTargetArgs },
8
- { group: "hdrp", command: "volume-add-effect", bridgeCommand: "project-tool.run", toolName: "hdrp.volume.add-effect", buildArgs: volumeEffectArgs },
9
- { group: "hdrp", command: "volume-set", bridgeCommand: "project-tool.run", toolName: "hdrp.volume.set", buildArgs: volumeSetArgs },
10
- { group: "hdrp", command: "settings-get", bridgeCommand: "project-tool.run", toolName: "hdrp.settings.get", buildArgs: emptyArgs },
11
- { group: "hdrp", command: "settings-set", bridgeCommand: "project-tool.run", toolName: "hdrp.settings.set", buildArgs: hdrpSettingsArgs, destructiveHint: true, supportsDryRun: true }
5
+ { group: "hdrp", command: "volume.list", bridgeCommand: "catalog.editor.run", toolName: "hdrp.volume.list", buildArgs: emptyArgs },
6
+ { group: "hdrp", command: "volume.create", bridgeCommand: "catalog.editor.run", toolName: "hdrp.volume.create", buildArgs: volumeCreateArgs },
7
+ { group: "hdrp", command: "volume.info", bridgeCommand: "catalog.editor.run", toolName: "hdrp.volume.info", buildArgs: volumeTargetArgs },
8
+ { group: "hdrp", command: "volume.add-effect", bridgeCommand: "catalog.editor.run", toolName: "hdrp.volume.add-effect", buildArgs: volumeEffectArgs },
9
+ { group: "hdrp", command: "volume.set", bridgeCommand: "catalog.editor.run", toolName: "hdrp.volume.set", buildArgs: volumeSetArgs },
10
+ { group: "hdrp", command: "settings.get", bridgeCommand: "catalog.editor.run", toolName: "hdrp.settings.get", buildArgs: emptyArgs },
11
+ { group: "hdrp", command: "settings.set", bridgeCommand: "catalog.editor.run", toolName: "hdrp.settings.set", buildArgs: hdrpSettingsArgs, destructiveHint: true, supportsDryRun: true }
12
12
  ]);
13
13
 
14
14
  function markToolsOnly(specs: BridgeCommandSpec[]): BridgeCommandSpec[] {
@@ -415,7 +415,7 @@ namespace UnityCli
415
415
  var profile = HdrpToolSupport.GetProfileForPlanning(volume.GetComponent(HdrpToolSupport.VolumeType)) as VolumeProfile;
416
416
  var addMethod = HdrpToolSupport.VolumeProfileType.GetMethod("Add", new[] { typeof(Type), typeof(bool) });
417
417
  if (profile == null || addMethod == null) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_PROFILE_NOT_FOUND", "The target Volume has no writable Add API.", "Create a Volume or assign a profile before adding an effect.");
418
- if (profile.components.Any(component => component != null && effectType.IsInstanceOfType(component))) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_EFFECT_EXISTS", "The requested effect is already present: " + effectTypeName, "Use volume.set to modify the existing effect.");
418
+ if (profile.components.Any(component => component != null && effectType.IsInstanceOfType(component))) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_EFFECT_EXISTS", "The requested effect is already present: " + effectTypeName, "Use hdrp.volume.set to modify the existing effect.");
419
419
  }
420
420
 
421
421
  internal sealed class VolumeSetMutationPlan { internal int GameObjectId { get; set; } internal int PlanningProfileId { get; set; } internal int SharedProfileId { get; set; } internal Type EffectType { get; set; } internal string PropertyPath { get; set; } internal SerializedPropertyType PropertyType { get; set; } internal object ExpectedValue { get; set; } internal string ExpectedReadback { get; set; } }
@@ -488,7 +488,7 @@ namespace UnityCli
488
488
  var addMethod = HdrpToolSupport.VolumeProfileType.GetMethod("Add", new[] { typeof(Type), typeof(bool) });
489
489
  if (profile == null || addMethod == null) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_PROFILE_NOT_FOUND", "The target Volume has no writable in-memory profile.", "Create a Volume with hdrp.volume.create or assign a profile before adding an effect.");
490
490
  var countBefore = profile.components.Count(component => component != null && effectType.IsInstanceOfType(component));
491
- if (countBefore != 0) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_EFFECT_EXISTS", "The requested effect is already present: " + effectTypeName, "Use volume.set to modify the existing effect.");
491
+ if (countBefore != 0) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_EFFECT_EXISTS", "The requested effect is already present: " + effectTypeName, "Use hdrp.volume.set to modify the existing effect.");
492
492
  addMethod.Invoke(profile, new object[] { effectType, true });
493
493
  var observedObject = ResolveVolume(gameObject.GetInstanceID().ToString(CultureInfo.InvariantCulture), errorPrefix);
494
494
  var observedProfile = HdrpToolSupport.GetVolumeProfile(observedObject.GetComponent(HdrpToolSupport.VolumeType)) as VolumeProfile;
@@ -4,10 +4,10 @@ import type { BridgeCommandSpec, BridgeFlags } from "../types.js";
4
4
  /**
5
5
  * ProBuilder extension bridge specs — 37 single-action tools.
6
6
  *
7
- * Each CLI command is routed through the project-tool.run bridge command
7
+ * Each CLI command is routed through the catalog.editor.run bridge command
8
8
  * to reach ProBuilder IUnityCliTool handlers in the Unity package. The
9
- * bridgeCommand field is always "project-tool.run";
10
- * the toolName field carries the underlying project-tool name (e.g.
9
+ * bridgeCommand field is always "catalog.editor.run";
10
+ * the toolName field carries the underlying catalog tool name (e.g.
11
11
  * "probuilder.ping"). The buildArgs output is wrapped into { name, input }
12
12
  * so the C# ProjectToolRun handler receives both the tool name and its
13
13
  * JSON input payload.
@@ -15,63 +15,63 @@ import type { BridgeCommandSpec, BridgeFlags } from "../types.js";
15
15
 
16
16
  export const probuilderBridgeSpecs: BridgeCommandSpec[] = markToolsOnly([
17
17
  // ─── Utility ───────────────────────────────────────────
18
- { group: "probuilder", command: "ping", bridgeCommand: "project-tool.run", toolName: "probuilder.ping", buildArgs: probuilderPingArgs },
19
- { group: "probuilder", command: "scene", bridgeCommand: "project-tool.run", toolName: "probuilder.scene", buildArgs: probuilderSceneArgs },
18
+ { group: "probuilder", command: "ping", bridgeCommand: "catalog.editor.run", toolName: "probuilder.ping", buildArgs: probuilderPingArgs },
19
+ { group: "probuilder", command: "scene", bridgeCommand: "catalog.editor.run", toolName: "probuilder.scene", buildArgs: probuilderSceneArgs },
20
20
 
21
21
  // ─── Shape Creation ────────────────────────────────────
22
- { group: "probuilder", command: "create-shape", bridgeCommand: "project-tool.run", toolName: "probuilder.create-shape", buildArgs: probuilderCreateShapeArgs },
23
- { group: "probuilder", command: "create-poly-shape", bridgeCommand: "project-tool.run", toolName: "probuilder.create-poly-shape", buildArgs: probuilderCreatePolyShapeArgs },
22
+ { group: "probuilder", command: "create-shape", bridgeCommand: "catalog.editor.run", toolName: "probuilder.create-shape", buildArgs: probuilderCreateShapeArgs },
23
+ { group: "probuilder", command: "create-poly-shape", bridgeCommand: "catalog.editor.run", toolName: "probuilder.create-poly-shape", buildArgs: probuilderCreatePolyShapeArgs },
24
24
 
25
25
  // ─── Face Operations ──────────────────────────────────
26
- { group: "probuilder", command: "extrude-faces", bridgeCommand: "project-tool.run", toolName: "probuilder.extrude-faces", buildArgs: probuilderTargetWithIndicesArgs },
27
- { group: "probuilder", command: "delete-faces", bridgeCommand: "project-tool.run", toolName: "probuilder.delete-faces", buildArgs: probuilderTargetWithIndicesArgs },
28
- { group: "probuilder", command: "detach-faces", bridgeCommand: "project-tool.run", toolName: "probuilder.detach-faces", buildArgs: probuilderDetachFacesArgs },
29
- { group: "probuilder", command: "merge-faces", bridgeCommand: "project-tool.run", toolName: "probuilder.merge-faces", buildArgs: probuilderTargetWithIndicesArgs },
30
- { group: "probuilder", command: "subdivide", bridgeCommand: "project-tool.run", toolName: "probuilder.subdivide", buildArgs: probuilderTargetWithOptionalIndicesArgs },
31
- { group: "probuilder", command: "flip-normals", bridgeCommand: "project-tool.run", toolName: "probuilder.flip-normals", buildArgs: probuilderTargetWithOptionalIndicesArgs },
32
- { group: "probuilder", command: "select-faces", bridgeCommand: "project-tool.run", toolName: "probuilder.select-faces", buildArgs: probuilderSelectFacesArgs },
33
- { group: "probuilder", command: "set-face-material", bridgeCommand: "project-tool.run", toolName: "probuilder.set-face-material", buildArgs: probuilderSetFaceMaterialArgs },
34
- { group: "probuilder", command: "set-face-color", bridgeCommand: "project-tool.run", toolName: "probuilder.set-face-color", buildArgs: probuilderSetFaceColorArgs },
35
- { group: "probuilder", command: "set-face-uvs", bridgeCommand: "project-tool.run", toolName: "probuilder.set-face-uvs", buildArgs: probuilderSetFaceUvsArgs },
26
+ { group: "probuilder", command: "extrude-faces", bridgeCommand: "catalog.editor.run", toolName: "probuilder.extrude-faces", buildArgs: probuilderTargetWithIndicesArgs },
27
+ { group: "probuilder", command: "delete-faces", bridgeCommand: "catalog.editor.run", toolName: "probuilder.delete-faces", buildArgs: probuilderTargetWithIndicesArgs },
28
+ { group: "probuilder", command: "detach-faces", bridgeCommand: "catalog.editor.run", toolName: "probuilder.detach-faces", buildArgs: probuilderDetachFacesArgs },
29
+ { group: "probuilder", command: "merge-faces", bridgeCommand: "catalog.editor.run", toolName: "probuilder.merge-faces", buildArgs: probuilderTargetWithIndicesArgs },
30
+ { group: "probuilder", command: "subdivide", bridgeCommand: "catalog.editor.run", toolName: "probuilder.subdivide", buildArgs: probuilderTargetWithOptionalIndicesArgs },
31
+ { group: "probuilder", command: "flip-normals", bridgeCommand: "catalog.editor.run", toolName: "probuilder.flip-normals", buildArgs: probuilderTargetWithOptionalIndicesArgs },
32
+ { group: "probuilder", command: "select-faces", bridgeCommand: "catalog.editor.run", toolName: "probuilder.select-faces", buildArgs: probuilderSelectFacesArgs },
33
+ { group: "probuilder", command: "set-face-material", bridgeCommand: "catalog.editor.run", toolName: "probuilder.set-face-material", buildArgs: probuilderSetFaceMaterialArgs },
34
+ { group: "probuilder", command: "set-face-color", bridgeCommand: "catalog.editor.run", toolName: "probuilder.set-face-color", buildArgs: probuilderSetFaceColorArgs },
35
+ { group: "probuilder", command: "set-face-uvs", bridgeCommand: "catalog.editor.run", toolName: "probuilder.set-face-uvs", buildArgs: probuilderSetFaceUvsArgs },
36
36
 
37
37
  // ─── Edge Operations ──────────────────────────────────
38
- { group: "probuilder", command: "extrude-edges", bridgeCommand: "project-tool.run", toolName: "probuilder.extrude-edges", buildArgs: probuilderEdgeArgs },
39
- { group: "probuilder", command: "bevel-edges", bridgeCommand: "project-tool.run", toolName: "probuilder.bevel-edges", buildArgs: probuilderBevelArgs },
40
- { group: "probuilder", command: "bridge-edges", bridgeCommand: "project-tool.run", toolName: "probuilder.bridge-edges", buildArgs: probuilderBridgeEdgesArgs },
41
- { group: "probuilder", command: "connect-elements", bridgeCommand: "project-tool.run", toolName: "probuilder.connect-elements", buildArgs: probuilderConnectArgs },
38
+ { group: "probuilder", command: "extrude-edges", bridgeCommand: "catalog.editor.run", toolName: "probuilder.extrude-edges", buildArgs: probuilderEdgeArgs },
39
+ { group: "probuilder", command: "bevel-edges", bridgeCommand: "catalog.editor.run", toolName: "probuilder.bevel-edges", buildArgs: probuilderBevelArgs },
40
+ { group: "probuilder", command: "bridge-edges", bridgeCommand: "catalog.editor.run", toolName: "probuilder.bridge-edges", buildArgs: probuilderBridgeEdgesArgs },
41
+ { group: "probuilder", command: "connect-elements", bridgeCommand: "catalog.editor.run", toolName: "probuilder.connect-elements", buildArgs: probuilderConnectArgs },
42
42
 
43
43
  // ─── Mesh Combine / Merge ─────────────────────────────
44
- { group: "probuilder", command: "combine-meshes", bridgeCommand: "project-tool.run", toolName: "probuilder.combine-meshes", buildArgs: probuilderMultiTargetArgs },
45
- { group: "probuilder", command: "merge-objects", bridgeCommand: "project-tool.run", toolName: "probuilder.merge-objects", buildArgs: probuilderMergeObjectsArgs },
46
- { group: "probuilder", command: "duplicate-and-flip", bridgeCommand: "project-tool.run", toolName: "probuilder.duplicate-and-flip", buildArgs: probuilderTargetWithOptionalIndicesArgs },
47
- { group: "probuilder", command: "create-polygon", bridgeCommand: "project-tool.run", toolName: "probuilder.create-polygon", buildArgs: probuilderCreatePolygonArgs },
44
+ { group: "probuilder", command: "combine-meshes", bridgeCommand: "catalog.editor.run", toolName: "probuilder.combine-meshes", buildArgs: probuilderMultiTargetArgs },
45
+ { group: "probuilder", command: "merge-objects", bridgeCommand: "catalog.editor.run", toolName: "probuilder.merge-objects", buildArgs: probuilderMergeObjectsArgs },
46
+ { group: "probuilder", command: "duplicate-and-flip", bridgeCommand: "catalog.editor.run", toolName: "probuilder.duplicate-and-flip", buildArgs: probuilderTargetWithOptionalIndicesArgs },
47
+ { group: "probuilder", command: "create-polygon", bridgeCommand: "catalog.editor.run", toolName: "probuilder.create-polygon", buildArgs: probuilderCreatePolygonArgs },
48
48
 
49
49
  // ─── Vertex Operations ────────────────────────────────
50
- { group: "probuilder", command: "merge-vertices", bridgeCommand: "project-tool.run", toolName: "probuilder.merge-vertices", buildArgs: probuilderVertexIndicesArgs },
51
- { group: "probuilder", command: "weld-vertices", bridgeCommand: "project-tool.run", toolName: "probuilder.weld-vertices", buildArgs: probuilderWeldArgs },
52
- { group: "probuilder", command: "split-vertices", bridgeCommand: "project-tool.run", toolName: "probuilder.split-vertices", buildArgs: probuilderVertexIndicesArgs },
53
- { group: "probuilder", command: "move-vertices", bridgeCommand: "project-tool.run", toolName: "probuilder.move-vertices", buildArgs: probuilderMoveVerticesArgs },
54
- { group: "probuilder", command: "insert-vertex", bridgeCommand: "project-tool.run", toolName: "probuilder.insert-vertex", buildArgs: probuilderInsertVertexArgs },
55
- { group: "probuilder", command: "append-vertices-to-edge", bridgeCommand: "project-tool.run", toolName: "probuilder.append-vertices-to-edge", buildArgs: probuilderAppendVerticesArgs },
50
+ { group: "probuilder", command: "merge-vertices", bridgeCommand: "catalog.editor.run", toolName: "probuilder.merge-vertices", buildArgs: probuilderVertexIndicesArgs },
51
+ { group: "probuilder", command: "weld-vertices", bridgeCommand: "catalog.editor.run", toolName: "probuilder.weld-vertices", buildArgs: probuilderWeldArgs },
52
+ { group: "probuilder", command: "split-vertices", bridgeCommand: "catalog.editor.run", toolName: "probuilder.split-vertices", buildArgs: probuilderVertexIndicesArgs },
53
+ { group: "probuilder", command: "move-vertices", bridgeCommand: "catalog.editor.run", toolName: "probuilder.move-vertices", buildArgs: probuilderMoveVerticesArgs },
54
+ { group: "probuilder", command: "insert-vertex", bridgeCommand: "catalog.editor.run", toolName: "probuilder.insert-vertex", buildArgs: probuilderInsertVertexArgs },
55
+ { group: "probuilder", command: "append-vertices-to-edge", bridgeCommand: "catalog.editor.run", toolName: "probuilder.append-vertices-to-edge", buildArgs: probuilderAppendVerticesArgs },
56
56
 
57
57
  // ─── Info / Inspection ────────────────────────────────
58
- { group: "probuilder", command: "mesh-info", bridgeCommand: "project-tool.run", toolName: "probuilder.mesh-info", buildArgs: probuilderMeshInfoArgs },
59
- { group: "probuilder", command: "validate-mesh", bridgeCommand: "project-tool.run", toolName: "probuilder.validate-mesh", buildArgs: probuilderTargetOnlyArgs },
58
+ { group: "probuilder", command: "mesh-info", bridgeCommand: "catalog.editor.run", toolName: "probuilder.mesh-info", buildArgs: probuilderMeshInfoArgs },
59
+ { group: "probuilder", command: "validate-mesh", bridgeCommand: "catalog.editor.run", toolName: "probuilder.validate-mesh", buildArgs: probuilderTargetOnlyArgs },
60
60
 
61
61
  // ─── Conversion ───────────────────────────────────────
62
- { group: "probuilder", command: "convert-to-probuilder", bridgeCommand: "project-tool.run", toolName: "probuilder.convert-to-probuilder", buildArgs: probuilderTargetOnlyArgs },
62
+ { group: "probuilder", command: "convert-to-probuilder", bridgeCommand: "catalog.editor.run", toolName: "probuilder.convert-to-probuilder", buildArgs: probuilderTargetOnlyArgs },
63
63
 
64
64
  // ─── Smoothing ────────────────────────────────────────
65
- { group: "probuilder", command: "set-smoothing", bridgeCommand: "project-tool.run", toolName: "probuilder.set-smoothing", buildArgs: probuilderSetSmoothingArgs },
66
- { group: "probuilder", command: "auto-smooth", bridgeCommand: "project-tool.run", toolName: "probuilder.auto-smooth", buildArgs: probuilderAutoSmoothArgs },
65
+ { group: "probuilder", command: "set-smoothing", bridgeCommand: "catalog.editor.run", toolName: "probuilder.set-smoothing", buildArgs: probuilderSetSmoothingArgs },
66
+ { group: "probuilder", command: "auto-smooth", bridgeCommand: "catalog.editor.run", toolName: "probuilder.auto-smooth", buildArgs: probuilderAutoSmoothArgs },
67
67
 
68
68
  // ─── Pivot / Transform ────────────────────────────────
69
- { group: "probuilder", command: "center-pivot", bridgeCommand: "project-tool.run", toolName: "probuilder.center-pivot", buildArgs: probuilderTargetOnlyArgs },
70
- { group: "probuilder", command: "freeze-transform", bridgeCommand: "project-tool.run", toolName: "probuilder.freeze-transform", buildArgs: probuilderTargetOnlyArgs },
71
- { group: "probuilder", command: "set-pivot", bridgeCommand: "project-tool.run", toolName: "probuilder.set-pivot", buildArgs: probuilderSetPivotArgs },
69
+ { group: "probuilder", command: "center-pivot", bridgeCommand: "catalog.editor.run", toolName: "probuilder.center-pivot", buildArgs: probuilderTargetOnlyArgs },
70
+ { group: "probuilder", command: "freeze-transform", bridgeCommand: "catalog.editor.run", toolName: "probuilder.freeze-transform", buildArgs: probuilderTargetOnlyArgs },
71
+ { group: "probuilder", command: "set-pivot", bridgeCommand: "catalog.editor.run", toolName: "probuilder.set-pivot", buildArgs: probuilderSetPivotArgs },
72
72
 
73
73
  // ─── Repair ───────────────────────────────────────────
74
- { group: "probuilder", command: "repair-mesh", bridgeCommand: "project-tool.run", toolName: "probuilder.repair-mesh", buildArgs: probuilderTargetOnlyArgs }
74
+ { group: "probuilder", command: "repair-mesh", bridgeCommand: "catalog.editor.run", toolName: "probuilder.repair-mesh", buildArgs: probuilderTargetOnlyArgs }
75
75
  ]);
76
76
 
77
77
  function markToolsOnly(specs: BridgeCommandSpec[]): BridgeCommandSpec[] {
@@ -5,7 +5,7 @@ namespace UnityCli.ProBuilder
5
5
  /// <summary>
6
6
  /// ProBuilder 工具 handler 的结构化错误工厂。
7
7
  /// 统一返回 <see cref="UnityCliBridge.BridgeCommandException"/>,由调用处 throw 出去,
8
- /// 经 project-tool.run / runtime-tool.run 的 catch 块转成标准错误 envelope。
8
+ /// 经 catalog.editor.run / catalog.player.run 的 catch 块转成标准错误 envelope。
9
9
  /// 错误码统一使用当前 extension dependency、target、schema、operation 与 outcome unknown 契约,
10
10
  /// details 与多个 nextActions 通过 exception 字段透传。
11
11
  /// </summary>
@@ -2,18 +2,18 @@ import { boolFlag, compactArgs, floatFlag, numberFlag, stringFlag } from "../arg
2
2
  import type { BridgeCommandSpec } from "../types.js";
3
3
 
4
4
  export const urpBridgeSpecs: BridgeCommandSpec[] = markToolsOnly([
5
- { group: "urp", command: "feature-list", bridgeCommand: "project-tool.run", toolName: "urp.feature.list", buildArgs: emptyArgs },
6
- { group: "urp", command: "feature-add", bridgeCommand: "project-tool.run", toolName: "urp.feature.add", buildArgs: urpFeatureAddArgs, destructiveHint: true, supportsDryRun: true },
7
- { group: "urp", command: "feature-toggle", bridgeCommand: "project-tool.run", toolName: "urp.feature.toggle", buildArgs: urpFeatureToggleArgs, destructiveHint: true, supportsDryRun: true },
8
- { group: "urp", command: "feature-configure", bridgeCommand: "project-tool.run", toolName: "urp.feature.configure", buildArgs: urpFeatureConfigureArgs, destructiveHint: true, supportsDryRun: true },
9
- { group: "urp", command: "feature-remove", bridgeCommand: "project-tool.run", toolName: "urp.feature.remove", buildArgs: urpFeatureIndexArgs, destructiveHint: true, supportsDryRun: true },
10
- { group: "urp", command: "volume-list", bridgeCommand: "project-tool.run", toolName: "urp.volume.list", buildArgs: emptyArgs },
11
- { group: "urp", command: "volume-create", bridgeCommand: "project-tool.run", toolName: "urp.volume.create", buildArgs: volumeCreateArgs },
12
- { group: "urp", command: "volume-info", bridgeCommand: "project-tool.run", toolName: "urp.volume.info", buildArgs: volumeTargetArgs },
13
- { group: "urp", command: "volume-add-effect", bridgeCommand: "project-tool.run", toolName: "urp.volume.add-effect", buildArgs: volumeEffectArgs },
14
- { group: "urp", command: "volume-set", bridgeCommand: "project-tool.run", toolName: "urp.volume.set", buildArgs: volumeSetArgs },
15
- { group: "urp", command: "settings-get", bridgeCommand: "project-tool.run", toolName: "urp.settings.get", buildArgs: emptyArgs },
16
- { group: "urp", command: "settings-set", bridgeCommand: "project-tool.run", toolName: "urp.settings.set", buildArgs: urpSettingsArgs, destructiveHint: true, supportsDryRun: true }
5
+ { group: "urp", command: "feature.list", bridgeCommand: "catalog.editor.run", toolName: "urp.feature.list", buildArgs: emptyArgs },
6
+ { group: "urp", command: "feature.add", bridgeCommand: "catalog.editor.run", toolName: "urp.feature.add", buildArgs: urpFeatureAddArgs, destructiveHint: true, supportsDryRun: true },
7
+ { group: "urp", command: "feature.toggle", bridgeCommand: "catalog.editor.run", toolName: "urp.feature.toggle", buildArgs: urpFeatureToggleArgs, destructiveHint: true, supportsDryRun: true },
8
+ { group: "urp", command: "feature.configure", bridgeCommand: "catalog.editor.run", toolName: "urp.feature.configure", buildArgs: urpFeatureConfigureArgs, destructiveHint: true, supportsDryRun: true },
9
+ { group: "urp", command: "feature.remove", bridgeCommand: "catalog.editor.run", toolName: "urp.feature.remove", buildArgs: urpFeatureIndexArgs, destructiveHint: true, supportsDryRun: true },
10
+ { group: "urp", command: "volume.list", bridgeCommand: "catalog.editor.run", toolName: "urp.volume.list", buildArgs: emptyArgs },
11
+ { group: "urp", command: "volume.create", bridgeCommand: "catalog.editor.run", toolName: "urp.volume.create", buildArgs: volumeCreateArgs },
12
+ { group: "urp", command: "volume.info", bridgeCommand: "catalog.editor.run", toolName: "urp.volume.info", buildArgs: volumeTargetArgs },
13
+ { group: "urp", command: "volume.add-effect", bridgeCommand: "catalog.editor.run", toolName: "urp.volume.add-effect", buildArgs: volumeEffectArgs },
14
+ { group: "urp", command: "volume.set", bridgeCommand: "catalog.editor.run", toolName: "urp.volume.set", buildArgs: volumeSetArgs },
15
+ { group: "urp", command: "settings.get", bridgeCommand: "catalog.editor.run", toolName: "urp.settings.get", buildArgs: emptyArgs },
16
+ { group: "urp", command: "settings.set", bridgeCommand: "catalog.editor.run", toolName: "urp.settings.set", buildArgs: urpSettingsArgs, destructiveHint: true, supportsDryRun: true }
17
17
  ]);
18
18
 
19
19
  function markToolsOnly(specs: BridgeCommandSpec[]): BridgeCommandSpec[] {
@@ -592,7 +592,7 @@ namespace UnityCli
592
592
  var addMethod = UrpToolSupport.VolumeProfileType.GetMethod("Add", new[] { typeof(Type), typeof(bool) });
593
593
  if (profile == null || addMethod == null) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_PROFILE_NOT_FOUND", "The target Volume has no writable in-memory profile.", "Create a Volume with urp.volume.create or assign a profile before adding an effect.");
594
594
  var countBefore = profile.components.Count(component => component != null && effectType.IsInstanceOfType(component));
595
- if (countBefore != 0) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_EFFECT_EXISTS", "The requested effect is already present: " + effectTypeName, "Use volume.set to modify the existing effect.");
595
+ if (countBefore != 0) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_EFFECT_EXISTS", "The requested effect is already present: " + effectTypeName, "Use urp.volume.set to modify the existing effect.");
596
596
  addMethod.Invoke(profile, new object[] { effectType, true });
597
597
  var observedObject = ResolveVolume(gameObject.GetInstanceID().ToString(CultureInfo.InvariantCulture), errorPrefix);
598
598
  var observedProfile = UrpToolSupport.GetVolumeProfile(observedObject.GetComponent(UrpToolSupport.VolumeType)) as VolumeProfile;
@@ -613,7 +613,7 @@ namespace UnityCli
613
613
  var profile = UrpToolSupport.GetProfileForPlanning(ResolveVolume(target, errorPrefix).GetComponent(UrpToolSupport.VolumeType)) as VolumeProfile;
614
614
  var addMethod = UrpToolSupport.VolumeProfileType.GetMethod("Add", new[] { typeof(Type), typeof(bool) });
615
615
  if (profile == null || addMethod == null) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_PROFILE_NOT_FOUND", "The target Volume has no writable Add API.", "Create a Volume with urp.volume.create or assign a profile before adding an effect.");
616
- if (profile.components.Any(component => component != null && effectType.IsInstanceOfType(component))) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_EFFECT_EXISTS", "The requested effect is already present: " + effectTypeName, "Use volume.set to modify the existing effect.");
616
+ if (profile.components.Any(component => component != null && effectType.IsInstanceOfType(component))) throw new UnityCliBridge.BridgeCommandException(errorPrefix + "_VOLUME_EFFECT_EXISTS", "The requested effect is already present: " + effectTypeName, "Use urp.volume.set to modify the existing effect.");
617
617
  }
618
618
 
619
619
  internal sealed class VolumeSetMutationPlan