@alpsckr/unitycli 0.4.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 (1066) hide show
  1. package/README.md +389 -0
  2. package/contracts/command-contract.json +3972 -0
  3. package/contracts/stable-session/admission-acquire-v1.schema.json +16 -0
  4. package/contracts/stable-session/admission-response-v1.schema.json +30 -0
  5. package/contracts/stable-session/admission-revoke-v1.schema.json +15 -0
  6. package/contracts/stable-session/admission-transport-v1.json +36 -0
  7. package/contracts/stable-session/bridge-request-v2.schema.json +26 -0
  8. package/contracts/stable-session/canonical-path-v1-golden.json +23 -0
  9. package/contracts/stable-session/completion-contract.schema.json +46 -0
  10. package/contracts/stable-session/direct-call-semantics.json +102 -0
  11. package/contracts/stable-session/editor-state.schema.json +92 -0
  12. package/contracts/stable-session/health-v3.schema.json +47 -0
  13. package/contracts/stable-session/instance-registry-v3.schema.json +152 -0
  14. package/contracts/stable-session/removal-map.json +27 -0
  15. package/contracts/stable-session/request-digest-v1-golden.json +7 -0
  16. package/contracts/stable-session/runtime-config-v2.schema.json +27 -0
  17. package/contracts/static-capability-catalog.json +48226 -0
  18. package/contracts/tool-completion-contract.json +11322 -0
  19. package/dist/args.d.ts +27 -0
  20. package/dist/args.js +109 -0
  21. package/dist/args.js.map +1 -0
  22. package/dist/bridge/admission.d.ts +28 -0
  23. package/dist/bridge/admission.js +29 -0
  24. package/dist/bridge/admission.js.map +1 -0
  25. package/dist/bridge/args.d.ts +16 -0
  26. package/dist/bridge/args.js +123 -0
  27. package/dist/bridge/args.js.map +1 -0
  28. package/dist/bridge/domains/animation.d.ts +2 -0
  29. package/dist/bridge/domains/animation.js +199 -0
  30. package/dist/bridge/domains/animation.js.map +1 -0
  31. package/dist/bridge/domains/asset.d.ts +2 -0
  32. package/dist/bridge/domains/asset.js +85 -0
  33. package/dist/bridge/domains/asset.js.map +1 -0
  34. package/dist/bridge/domains/build.d.ts +2 -0
  35. package/dist/bridge/domains/build.js +35 -0
  36. package/dist/bridge/domains/build.js.map +1 -0
  37. package/dist/bridge/domains/camera.d.ts +2 -0
  38. package/dist/bridge/domains/camera.js +54 -0
  39. package/dist/bridge/domains/camera.js.map +1 -0
  40. package/dist/bridge/domains/code.d.ts +2 -0
  41. package/dist/bridge/domains/code.js +17 -0
  42. package/dist/bridge/domains/code.js.map +1 -0
  43. package/dist/bridge/domains/console.d.ts +2 -0
  44. package/dist/bridge/domains/console.js +34 -0
  45. package/dist/bridge/domains/console.js.map +1 -0
  46. package/dist/bridge/domains/diagnose.d.ts +2 -0
  47. package/dist/bridge/domains/diagnose.js +11 -0
  48. package/dist/bridge/domains/diagnose.js.map +1 -0
  49. package/dist/bridge/domains/editor.d.ts +2 -0
  50. package/dist/bridge/domains/editor.js +66 -0
  51. package/dist/bridge/domains/editor.js.map +1 -0
  52. package/dist/bridge/domains/extension.d.ts +8 -0
  53. package/dist/bridge/domains/extension.js +20 -0
  54. package/dist/bridge/domains/extension.js.map +1 -0
  55. package/dist/bridge/domains/game-object.d.ts +2 -0
  56. package/dist/bridge/domains/game-object.js +179 -0
  57. package/dist/bridge/domains/game-object.js.map +1 -0
  58. package/dist/bridge/domains/graphics.d.ts +2 -0
  59. package/dist/bridge/domains/graphics.js +185 -0
  60. package/dist/bridge/domains/graphics.js.map +1 -0
  61. package/dist/bridge/domains/material.d.ts +2 -0
  62. package/dist/bridge/domains/material.js +70 -0
  63. package/dist/bridge/domains/material.js.map +1 -0
  64. package/dist/bridge/domains/navmesh.d.ts +2 -0
  65. package/dist/bridge/domains/navmesh.js +34 -0
  66. package/dist/bridge/domains/navmesh.js.map +1 -0
  67. package/dist/bridge/domains/object.d.ts +2 -0
  68. package/dist/bridge/domains/object.js +43 -0
  69. package/dist/bridge/domains/object.js.map +1 -0
  70. package/dist/bridge/domains/occlusion.d.ts +2 -0
  71. package/dist/bridge/domains/occlusion.js +12 -0
  72. package/dist/bridge/domains/occlusion.js.map +1 -0
  73. package/dist/bridge/domains/package.d.ts +2 -0
  74. package/dist/bridge/domains/package.js +2 -0
  75. package/dist/bridge/domains/package.js.map +1 -0
  76. package/dist/bridge/domains/physics.d.ts +2 -0
  77. package/dist/bridge/domains/physics.js +139 -0
  78. package/dist/bridge/domains/physics.js.map +1 -0
  79. package/dist/bridge/domains/prefab.d.ts +2 -0
  80. package/dist/bridge/domains/prefab.js +104 -0
  81. package/dist/bridge/domains/prefab.js.map +1 -0
  82. package/dist/bridge/domains/profiler.d.ts +2 -0
  83. package/dist/bridge/domains/profiler.js +105 -0
  84. package/dist/bridge/domains/profiler.js.map +1 -0
  85. package/dist/bridge/domains/project-tool.d.ts +2 -0
  86. package/dist/bridge/domains/project-tool.js +46 -0
  87. package/dist/bridge/domains/project-tool.js.map +1 -0
  88. package/dist/bridge/domains/reflection.d.ts +2 -0
  89. package/dist/bridge/domains/reflection.js +48 -0
  90. package/dist/bridge/domains/reflection.js.map +1 -0
  91. package/dist/bridge/domains/runtime-tool.d.ts +2 -0
  92. package/dist/bridge/domains/runtime-tool.js +48 -0
  93. package/dist/bridge/domains/runtime-tool.js.map +1 -0
  94. package/dist/bridge/domains/scene.d.ts +2 -0
  95. package/dist/bridge/domains/scene.js +100 -0
  96. package/dist/bridge/domains/scene.js.map +1 -0
  97. package/dist/bridge/domains/screenshot.d.ts +2 -0
  98. package/dist/bridge/domains/screenshot.js +85 -0
  99. package/dist/bridge/domains/screenshot.js.map +1 -0
  100. package/dist/bridge/domains/scriptable-object.d.ts +2 -0
  101. package/dist/bridge/domains/scriptable-object.js +53 -0
  102. package/dist/bridge/domains/scriptable-object.js.map +1 -0
  103. package/dist/bridge/domains/shader.d.ts +2 -0
  104. package/dist/bridge/domains/shader.js +66 -0
  105. package/dist/bridge/domains/shader.js.map +1 -0
  106. package/dist/bridge/domains/texture.d.ts +2 -0
  107. package/dist/bridge/domains/texture.js +78 -0
  108. package/dist/bridge/domains/texture.js.map +1 -0
  109. package/dist/bridge/domains/timeline.d.ts +2 -0
  110. package/dist/bridge/domains/timeline.js +75 -0
  111. package/dist/bridge/domains/timeline.js.map +1 -0
  112. package/dist/bridge/domains/ui.d.ts +2 -0
  113. package/dist/bridge/domains/ui.js +193 -0
  114. package/dist/bridge/domains/ui.js.map +1 -0
  115. package/dist/bridge/index.d.ts +9 -0
  116. package/dist/bridge/index.js +124 -0
  117. package/dist/bridge/index.js.map +1 -0
  118. package/dist/bridge/registry.d.ts +19 -0
  119. package/dist/bridge/registry.js +114 -0
  120. package/dist/bridge/registry.js.map +1 -0
  121. package/dist/bridge/session-supervisor.d.ts +138 -0
  122. package/dist/bridge/session-supervisor.js +873 -0
  123. package/dist/bridge/session-supervisor.js.map +1 -0
  124. package/dist/bridge/types.d.ts +61 -0
  125. package/dist/bridge/types.js +17 -0
  126. package/dist/bridge/types.js.map +1 -0
  127. package/dist/capabilities.d.ts +5 -0
  128. package/dist/capabilities.js +84 -0
  129. package/dist/capabilities.js.map +1 -0
  130. package/dist/cli-commands/command.d.ts +7 -0
  131. package/dist/cli-commands/command.js +513 -0
  132. package/dist/cli-commands/command.js.map +1 -0
  133. package/dist/cli-commands/extension-auto-detect.d.ts +62 -0
  134. package/dist/cli-commands/extension-auto-detect.js +119 -0
  135. package/dist/cli-commands/extension-auto-detect.js.map +1 -0
  136. package/dist/cli-commands/extensions.d.ts +24 -0
  137. package/dist/cli-commands/extensions.js +428 -0
  138. package/dist/cli-commands/extensions.js.map +1 -0
  139. package/dist/cli-commands/package.d.ts +4 -0
  140. package/dist/cli-commands/package.js +151 -0
  141. package/dist/cli-commands/package.js.map +1 -0
  142. package/dist/cli-commands/skill-installer.d.ts +83 -0
  143. package/dist/cli-commands/skill-installer.js +703 -0
  144. package/dist/cli-commands/skill-installer.js.map +1 -0
  145. package/dist/cli-commands/types.d.ts +17 -0
  146. package/dist/cli-commands/types.js +2 -0
  147. package/dist/cli-commands/types.js.map +1 -0
  148. package/dist/cli.d.ts +17 -0
  149. package/dist/cli.js +302 -0
  150. package/dist/cli.js.map +1 -0
  151. package/dist/contracts/command-contract.d.ts +21 -0
  152. package/dist/contracts/command-contract.js +143 -0
  153. package/dist/contracts/command-contract.js.map +1 -0
  154. package/dist/contracts/csharp-command-extractor.d.ts +1 -0
  155. package/dist/contracts/csharp-command-extractor.js +89 -0
  156. package/dist/contracts/csharp-command-extractor.js.map +1 -0
  157. package/dist/contracts/validate-command-contract.d.ts +1 -0
  158. package/dist/contracts/validate-command-contract.js +86 -0
  159. package/dist/contracts/validate-command-contract.js.map +1 -0
  160. package/dist/doctor.d.ts +22 -0
  161. package/dist/doctor.js +498 -0
  162. package/dist/doctor.js.map +1 -0
  163. package/dist/editor-blocker-observer.d.ts +45 -0
  164. package/dist/editor-blocker-observer.js +55 -0
  165. package/dist/editor-blocker-observer.js.map +1 -0
  166. package/dist/editor-dialogs.d.ts +53 -0
  167. package/dist/editor-dialogs.js +79 -0
  168. package/dist/editor-dialogs.js.map +1 -0
  169. package/dist/extension-availability.d.ts +30 -0
  170. package/dist/extension-availability.js +83 -0
  171. package/dist/extension-availability.js.map +1 -0
  172. package/dist/extensions/.generated-bridge-domains/cinemachine.d.ts +2 -0
  173. package/dist/extensions/.generated-bridge-domains/cinemachine.js +104 -0
  174. package/dist/extensions/.generated-bridge-domains/cinemachine.js.map +1 -0
  175. package/dist/extensions/.generated-bridge-domains/hdrp.d.ts +2 -0
  176. package/dist/extensions/.generated-bridge-domains/hdrp.js +35 -0
  177. package/dist/extensions/.generated-bridge-domains/hdrp.js.map +1 -0
  178. package/dist/extensions/.generated-bridge-domains/probuilder.d.ts +13 -0
  179. package/dist/extensions/.generated-bridge-domains/probuilder.js +342 -0
  180. package/dist/extensions/.generated-bridge-domains/probuilder.js.map +1 -0
  181. package/dist/extensions/.generated-bridge-domains/urp.d.ts +2 -0
  182. package/dist/extensions/.generated-bridge-domains/urp.js +52 -0
  183. package/dist/extensions/.generated-bridge-domains/urp.js.map +1 -0
  184. package/dist/extensions/.generated-bridge-domains/vfx.d.ts +2 -0
  185. package/dist/extensions/.generated-bridge-domains/vfx.js +312 -0
  186. package/dist/extensions/.generated-bridge-domains/vfx.js.map +1 -0
  187. package/dist/extensions/.generated-registry-data.d.ts +7 -0
  188. package/dist/extensions/.generated-registry-data.js +895 -0
  189. package/dist/extensions/.generated-registry-data.js.map +1 -0
  190. package/dist/extensions/contribution-loader.d.ts +27 -0
  191. package/dist/extensions/contribution-loader.js +60 -0
  192. package/dist/extensions/contribution-loader.js.map +1 -0
  193. package/dist/extensions/descriptor-loader.d.ts +73 -0
  194. package/dist/extensions/descriptor-loader.js +126 -0
  195. package/dist/extensions/descriptor-loader.js.map +1 -0
  196. package/dist/extensions/index.d.ts +19 -0
  197. package/dist/extensions/index.js +23 -0
  198. package/dist/extensions/index.js.map +1 -0
  199. package/dist/extensions/installer.d.ts +80 -0
  200. package/dist/extensions/installer.js +594 -0
  201. package/dist/extensions/installer.js.map +1 -0
  202. package/dist/extensions/metadata/index.d.ts +15 -0
  203. package/dist/extensions/metadata/index.js +41 -0
  204. package/dist/extensions/metadata/index.js.map +1 -0
  205. package/dist/extensions/metadata/types.d.ts +38 -0
  206. package/dist/extensions/metadata/types.js +11 -0
  207. package/dist/extensions/metadata/types.js.map +1 -0
  208. package/dist/extensions/project-resolver.d.ts +35 -0
  209. package/dist/extensions/project-resolver.js +61 -0
  210. package/dist/extensions/project-resolver.js.map +1 -0
  211. package/dist/extensions/registry.d.ts +86 -0
  212. package/dist/extensions/registry.js +262 -0
  213. package/dist/extensions/registry.js.map +1 -0
  214. package/dist/extensions/tool-manifest.d.ts +29 -0
  215. package/dist/extensions/tool-manifest.js +53 -0
  216. package/dist/extensions/tool-manifest.js.map +1 -0
  217. package/dist/extensions/types.d.ts +115 -0
  218. package/dist/extensions/types.js +12 -0
  219. package/dist/extensions/types.js.map +1 -0
  220. package/dist/instances.d.ts +163 -0
  221. package/dist/instances.js +1137 -0
  222. package/dist/instances.js.map +1 -0
  223. package/dist/output.d.ts +119 -0
  224. package/dist/output.js +204 -0
  225. package/dist/output.js.map +1 -0
  226. package/dist/package-manager.d.ts +280 -0
  227. package/dist/package-manager.js +1832 -0
  228. package/dist/package-manager.js.map +1 -0
  229. package/dist/platform.d.ts +3 -0
  230. package/dist/platform.js +19 -0
  231. package/dist/platform.js.map +1 -0
  232. package/dist/project-identity.d.ts +48 -0
  233. package/dist/project-identity.js +254 -0
  234. package/dist/project-identity.js.map +1 -0
  235. package/dist/project-tool-discovery.d.ts +23 -0
  236. package/dist/project-tool-discovery.js +292 -0
  237. package/dist/project-tool-discovery.js.map +1 -0
  238. package/dist/protocol/envelope.d.ts +64 -0
  239. package/dist/protocol/envelope.js +8 -0
  240. package/dist/protocol/envelope.js.map +1 -0
  241. package/dist/protocol/index.d.ts +7 -0
  242. package/dist/protocol/index.js +2 -0
  243. package/dist/protocol/index.js.map +1 -0
  244. package/dist/runtime-code.d.ts +20 -0
  245. package/dist/runtime-code.js +232 -0
  246. package/dist/runtime-code.js.map +1 -0
  247. package/dist/schema/any-json.d.ts +4 -0
  248. package/dist/schema/any-json.js +2 -0
  249. package/dist/schema/any-json.js.map +1 -0
  250. package/dist/schema/validator.d.ts +7 -0
  251. package/dist/schema/validator.js +135 -0
  252. package/dist/schema/validator.js.map +1 -0
  253. package/dist/services/docs-reflect-cache.d.ts +106 -0
  254. package/dist/services/docs-reflect-cache.js +301 -0
  255. package/dist/services/docs-reflect-cache.js.map +1 -0
  256. package/dist/services/docs-service.d.ts +16 -0
  257. package/dist/services/docs-service.js +208 -0
  258. package/dist/services/docs-service.js.map +1 -0
  259. package/dist/services/reflect-service.d.ts +12 -0
  260. package/dist/services/reflect-service.js +122 -0
  261. package/dist/services/reflect-service.js.map +1 -0
  262. package/dist/static-capability-catalog.d.ts +13 -0
  263. package/dist/static-capability-catalog.js +41 -0
  264. package/dist/static-capability-catalog.js.map +1 -0
  265. package/dist/test-results.d.ts +13 -0
  266. package/dist/test-results.js +44 -0
  267. package/dist/test-results.js.map +1 -0
  268. package/dist/tools/.generated-completion-registry.d.ts +17 -0
  269. package/dist/tools/.generated-completion-registry.js +5862 -0
  270. package/dist/tools/.generated-completion-registry.js.map +1 -0
  271. package/dist/tools/.generated-registry.d.ts +53 -0
  272. package/dist/tools/.generated-registry.js +55 -0
  273. package/dist/tools/.generated-registry.js.map +1 -0
  274. package/dist/tools/.generated-schemas.d.ts +1 -0
  275. package/dist/tools/.generated-schemas.js +56 -0
  276. package/dist/tools/.generated-schemas.js.map +1 -0
  277. package/dist/tools/asset/refresh.d.ts +26 -0
  278. package/dist/tools/asset/refresh.js +97 -0
  279. package/dist/tools/asset/refresh.js.map +1 -0
  280. package/dist/tools/build/run.d.ts +45 -0
  281. package/dist/tools/build/run.js +115 -0
  282. package/dist/tools/build/run.js.map +1 -0
  283. package/dist/tools/catalog.d.ts +33 -0
  284. package/dist/tools/catalog.js +202 -0
  285. package/dist/tools/catalog.js.map +1 -0
  286. package/dist/tools/code/exec.d.ts +53 -0
  287. package/dist/tools/code/exec.js +59 -0
  288. package/dist/tools/code/exec.js.map +1 -0
  289. package/dist/tools/commands.d.ts +5 -0
  290. package/dist/tools/commands.js +45 -0
  291. package/dist/tools/commands.js.map +1 -0
  292. package/dist/tools/completion-probe.d.ts +22 -0
  293. package/dist/tools/completion-probe.js +2 -0
  294. package/dist/tools/completion-probe.js.map +1 -0
  295. package/dist/tools/define.d.ts +77 -0
  296. package/dist/tools/define.js +58 -0
  297. package/dist/tools/define.js.map +1 -0
  298. package/dist/tools/diagnose/capabilities.d.ts +13 -0
  299. package/dist/tools/diagnose/capabilities.js +34 -0
  300. package/dist/tools/diagnose/capabilities.js.map +1 -0
  301. package/dist/tools/dispatcher.d.ts +27 -0
  302. package/dist/tools/dispatcher.js +971 -0
  303. package/dist/tools/dispatcher.js.map +1 -0
  304. package/dist/tools/docs/get.d.ts +22 -0
  305. package/dist/tools/docs/get.js +22 -0
  306. package/dist/tools/docs/get.js.map +1 -0
  307. package/dist/tools/docs/search.d.ts +31 -0
  308. package/dist/tools/docs/search.js +22 -0
  309. package/dist/tools/docs/search.js.map +1 -0
  310. package/dist/tools/editor/compile.d.ts +66 -0
  311. package/dist/tools/editor/compile.js +225 -0
  312. package/dist/tools/editor/compile.js.map +1 -0
  313. package/dist/tools/editor/dialog/click.d.ts +12 -0
  314. package/dist/tools/editor/dialog/click.js +71 -0
  315. package/dist/tools/editor/dialog/click.js.map +1 -0
  316. package/dist/tools/editor/dialogs.d.ts +12 -0
  317. package/dist/tools/editor/dialogs.js +58 -0
  318. package/dist/tools/editor/dialogs.js.map +1 -0
  319. package/dist/tools/editor/readiness.d.ts +13 -0
  320. package/dist/tools/editor/readiness.js +24 -0
  321. package/dist/tools/editor/readiness.js.map +1 -0
  322. package/dist/tools/editor/refresh.d.ts +25 -0
  323. package/dist/tools/editor/refresh.js +154 -0
  324. package/dist/tools/editor/refresh.js.map +1 -0
  325. package/dist/tools/editor/state.d.ts +63 -0
  326. package/dist/tools/editor/state.js +286 -0
  327. package/dist/tools/editor/state.js.map +1 -0
  328. package/dist/tools/errors.d.ts +30 -0
  329. package/dist/tools/errors.js +46 -0
  330. package/dist/tools/errors.js.map +1 -0
  331. package/dist/tools/metadata/derived.d.ts +34 -0
  332. package/dist/tools/metadata/derived.js +136 -0
  333. package/dist/tools/metadata/derived.js.map +1 -0
  334. package/dist/tools/metadata/index.d.ts +34 -0
  335. package/dist/tools/metadata/index.js +130 -0
  336. package/dist/tools/metadata/index.js.map +1 -0
  337. package/dist/tools/metadata/schemas.d.ts +3 -0
  338. package/dist/tools/metadata/schemas.js +19 -0
  339. package/dist/tools/metadata/schemas.js.map +1 -0
  340. package/dist/tools/metadata/status.d.ts +4 -0
  341. package/dist/tools/metadata/status.js +61 -0
  342. package/dist/tools/metadata/status.js.map +1 -0
  343. package/dist/tools/metadata/types.d.ts +79 -0
  344. package/dist/tools/metadata/types.js +2 -0
  345. package/dist/tools/metadata/types.js.map +1 -0
  346. package/dist/tools/navmesh/bake-cancel.d.ts +7 -0
  347. package/dist/tools/navmesh/bake-cancel.js +21 -0
  348. package/dist/tools/navmesh/bake-cancel.js.map +1 -0
  349. package/dist/tools/navmesh/bake-status.d.ts +5 -0
  350. package/dist/tools/navmesh/bake-status.js +18 -0
  351. package/dist/tools/navmesh/bake-status.js.map +1 -0
  352. package/dist/tools/navmesh/bake.d.ts +5 -0
  353. package/dist/tools/navmesh/bake.js +23 -0
  354. package/dist/tools/navmesh/bake.js.map +1 -0
  355. package/dist/tools/navmesh/live.d.ts +86 -0
  356. package/dist/tools/navmesh/live.js +206 -0
  357. package/dist/tools/navmesh/live.js.map +1 -0
  358. package/dist/tools/navmesh/surface-bake.d.ts +5 -0
  359. package/dist/tools/navmesh/surface-bake.js +24 -0
  360. package/dist/tools/navmesh/surface-bake.js.map +1 -0
  361. package/dist/tools/occlusion/bake-cancel.d.ts +7 -0
  362. package/dist/tools/occlusion/bake-cancel.js +21 -0
  363. package/dist/tools/occlusion/bake-cancel.js.map +1 -0
  364. package/dist/tools/occlusion/bake-status.d.ts +5 -0
  365. package/dist/tools/occlusion/bake-status.js +18 -0
  366. package/dist/tools/occlusion/bake-status.js.map +1 -0
  367. package/dist/tools/occlusion/bake.d.ts +11 -0
  368. package/dist/tools/occlusion/bake.js +23 -0
  369. package/dist/tools/occlusion/bake.js.map +1 -0
  370. package/dist/tools/occlusion/live.d.ts +74 -0
  371. package/dist/tools/occlusion/live.js +201 -0
  372. package/dist/tools/occlusion/live.js.map +1 -0
  373. package/dist/tools/package/bridge-remove.d.ts +26 -0
  374. package/dist/tools/package/bridge-remove.js +32 -0
  375. package/dist/tools/package/bridge-remove.js.map +1 -0
  376. package/dist/tools/package/deploy.d.ts +49 -0
  377. package/dist/tools/package/deploy.js +134 -0
  378. package/dist/tools/package/deploy.js.map +1 -0
  379. package/dist/tools/package/embed.d.ts +14 -0
  380. package/dist/tools/package/embed.js +93 -0
  381. package/dist/tools/package/embed.js.map +1 -0
  382. package/dist/tools/package/file-mutation-worker.d.ts +6 -0
  383. package/dist/tools/package/file-mutation-worker.js +154 -0
  384. package/dist/tools/package/file-mutation-worker.js.map +1 -0
  385. package/dist/tools/package/info.d.ts +19 -0
  386. package/dist/tools/package/info.js +27 -0
  387. package/dist/tools/package/info.js.map +1 -0
  388. package/dist/tools/package/install.d.ts +24 -0
  389. package/dist/tools/package/install.js +65 -0
  390. package/dist/tools/package/install.js.map +1 -0
  391. package/dist/tools/package/list.d.ts +27 -0
  392. package/dist/tools/package/list.js +21 -0
  393. package/dist/tools/package/list.js.map +1 -0
  394. package/dist/tools/package/live-resolve.d.ts +46 -0
  395. package/dist/tools/package/live-resolve.js +497 -0
  396. package/dist/tools/package/live-resolve.js.map +1 -0
  397. package/dist/tools/package/public-result.d.ts +4 -0
  398. package/dist/tools/package/public-result.js +25 -0
  399. package/dist/tools/package/public-result.js.map +1 -0
  400. package/dist/tools/package/registry-clear.d.ts +15 -0
  401. package/dist/tools/package/registry-clear.js +27 -0
  402. package/dist/tools/package/registry-clear.js.map +1 -0
  403. package/dist/tools/package/registry-get.d.ts +10 -0
  404. package/dist/tools/package/registry-get.js +22 -0
  405. package/dist/tools/package/registry-get.js.map +1 -0
  406. package/dist/tools/package/registry-set.d.ts +17 -0
  407. package/dist/tools/package/registry-set.js +28 -0
  408. package/dist/tools/package/registry-set.js.map +1 -0
  409. package/dist/tools/package/remove.d.ts +47 -0
  410. package/dist/tools/package/remove.js +67 -0
  411. package/dist/tools/package/remove.js.map +1 -0
  412. package/dist/tools/package/resolve.d.ts +6 -0
  413. package/dist/tools/package/resolve.js +14 -0
  414. package/dist/tools/package/resolve.js.map +1 -0
  415. package/dist/tools/package/restore.d.ts +42 -0
  416. package/dist/tools/package/restore.js +122 -0
  417. package/dist/tools/package/restore.js.map +1 -0
  418. package/dist/tools/package/scoped-registry-add.d.ts +25 -0
  419. package/dist/tools/package/scoped-registry-add.js +30 -0
  420. package/dist/tools/package/scoped-registry-add.js.map +1 -0
  421. package/dist/tools/package/scoped-registry-list.d.ts +14 -0
  422. package/dist/tools/package/scoped-registry-list.js +22 -0
  423. package/dist/tools/package/scoped-registry-list.js.map +1 -0
  424. package/dist/tools/package/scoped-registry-remove.d.ts +29 -0
  425. package/dist/tools/package/scoped-registry-remove.js +31 -0
  426. package/dist/tools/package/scoped-registry-remove.js.map +1 -0
  427. package/dist/tools/package/search.d.ts +17 -0
  428. package/dist/tools/package/search.js +39 -0
  429. package/dist/tools/package/search.js.map +1 -0
  430. package/dist/tools/package/status.d.ts +21 -0
  431. package/dist/tools/package/status.js +37 -0
  432. package/dist/tools/package/status.js.map +1 -0
  433. package/dist/tools/reflect/member.d.ts +22 -0
  434. package/dist/tools/reflect/member.js +22 -0
  435. package/dist/tools/reflect/member.js.map +1 -0
  436. package/dist/tools/reflect/search.d.ts +30 -0
  437. package/dist/tools/reflect/search.js +22 -0
  438. package/dist/tools/reflect/search.js.map +1 -0
  439. package/dist/tools/reflect/type.d.ts +21 -0
  440. package/dist/tools/reflect/type.js +22 -0
  441. package/dist/tools/reflect/type.js.map +1 -0
  442. package/dist/tools/runtime/console.d.ts +24 -0
  443. package/dist/tools/runtime/console.js +17 -0
  444. package/dist/tools/runtime/console.js.map +1 -0
  445. package/dist/tools/runtime/input/key.d.ts +23 -0
  446. package/dist/tools/runtime/input/key.js +18 -0
  447. package/dist/tools/runtime/input/key.js.map +1 -0
  448. package/dist/tools/runtime/input/pointer.d.ts +34 -0
  449. package/dist/tools/runtime/input/pointer.js +18 -0
  450. package/dist/tools/runtime/input/pointer.js.map +1 -0
  451. package/dist/tools/runtime/log.d.ts +20 -0
  452. package/dist/tools/runtime/log.js +17 -0
  453. package/dist/tools/runtime/log.js.map +1 -0
  454. package/dist/tools/runtime/state.d.ts +45 -0
  455. package/dist/tools/runtime/state.js +17 -0
  456. package/dist/tools/runtime/state.js.map +1 -0
  457. package/dist/tools/runtime/target-framerate/set.d.ts +16 -0
  458. package/dist/tools/runtime/target-framerate/set.js +17 -0
  459. package/dist/tools/runtime/target-framerate/set.js.map +1 -0
  460. package/dist/tools/runtime/time-scale/set.d.ts +16 -0
  461. package/dist/tools/runtime/time-scale/set.js +17 -0
  462. package/dist/tools/runtime/time-scale/set.js.map +1 -0
  463. package/dist/tools/runtime/ui/capture-element.d.ts +31 -0
  464. package/dist/tools/runtime/ui/capture-element.js +17 -0
  465. package/dist/tools/runtime/ui/capture-element.js.map +1 -0
  466. package/dist/tools/test/cancel.d.ts +19 -0
  467. package/dist/tools/test/cancel.js +94 -0
  468. package/dist/tools/test/cancel.js.map +1 -0
  469. package/dist/tools/test/run.d.ts +39 -0
  470. package/dist/tools/test/run.js +101 -0
  471. package/dist/tools/test/run.js.map +1 -0
  472. package/dist/tools/tools/describe.d.ts +27 -0
  473. package/dist/tools/tools/describe.js +35 -0
  474. package/dist/tools/tools/describe.js.map +1 -0
  475. package/dist/tools/tools/group-list.d.ts +20 -0
  476. package/dist/tools/tools/group-list.js +39 -0
  477. package/dist/tools/tools/group-list.js.map +1 -0
  478. package/dist/tools/tools/group-summaries.d.ts +3 -0
  479. package/dist/tools/tools/group-summaries.js +52 -0
  480. package/dist/tools/tools/group-summaries.js.map +1 -0
  481. package/dist/tools/tools/group.d.ts +13 -0
  482. package/dist/tools/tools/group.js +34 -0
  483. package/dist/tools/tools/group.js.map +1 -0
  484. package/dist/tools/tools/search.d.ts +17 -0
  485. package/dist/tools/tools/search.js +42 -0
  486. package/dist/tools/tools/search.js.map +1 -0
  487. package/dist/types.d.ts +5 -0
  488. package/dist/types.js +2 -0
  489. package/dist/types.js.map +1 -0
  490. package/dist/unity-project-processes.d.ts +12 -0
  491. package/dist/unity-project-processes.js +59 -0
  492. package/dist/unity-project-processes.js.map +1 -0
  493. package/dist/util.d.ts +11 -0
  494. package/dist/util.js +22 -0
  495. package/dist/util.js.map +1 -0
  496. package/dist/windows-editor-state.d.ts +31 -0
  497. package/dist/windows-editor-state.js +98 -0
  498. package/dist/windows-editor-state.js.map +1 -0
  499. package/docs/README.md +43 -0
  500. package/docs/availability-differences.md +97 -0
  501. package/docs/command-execution.md +89 -0
  502. package/docs/error-codes.md +204 -0
  503. package/docs/extensions.md +132 -0
  504. package/docs/risk-and-side-effects.md +93 -0
  505. package/docs/safety-boundaries.md +103 -0
  506. package/docs/target-and-instance.md +83 -0
  507. package/docs/tool-discovery.md +104 -0
  508. package/docs/tool-execution.md +178 -0
  509. package/extensions/cinemachine/bridge/domains/cinemachine.ts +115 -0
  510. package/extensions/cinemachine/docs/cinemachine.md +50 -0
  511. package/extensions/cinemachine/extension.json +129 -0
  512. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/CinemachineExtensionToolSupport.cs +15 -0
  513. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/CinemachineToolSupport.cs +854 -0
  514. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/aim.cs +96 -0
  515. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/blend.cs +140 -0
  516. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/body.cs +96 -0
  517. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/brain-ensure.cs +16 -0
  518. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/brain-status.cs +12 -0
  519. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/create.cs +147 -0
  520. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/extension-add.cs +13 -0
  521. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/extension-list.cs +13 -0
  522. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/extension-remove.cs +13 -0
  523. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/lens.cs +142 -0
  524. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/noise.cs +126 -0
  525. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/ping.cs +43 -0
  526. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/priority.cs +113 -0
  527. package/extensions/cinemachine/unitypkg/Editor/Cinemachine/target.cs +84 -0
  528. package/extensions/cinemachine/unitypkg/UnityCli.Extensions.Cinemachine.Editor.asmdef +18 -0
  529. package/extensions/hdrp/bridge/domains/hdrp.ts +41 -0
  530. package/extensions/hdrp/docs/hdrp.md +15 -0
  531. package/extensions/hdrp/extension.json +31 -0
  532. package/extensions/hdrp/unitypkg/Editor/Hdrp/HdrpToolSupport.cs +607 -0
  533. package/extensions/hdrp/unitypkg/Editor/Hdrp/settings-get.cs +29 -0
  534. package/extensions/hdrp/unitypkg/Editor/Hdrp/settings-set.cs +47 -0
  535. package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-add-effect.cs +28 -0
  536. package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-create.cs +28 -0
  537. package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-info.cs +25 -0
  538. package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-list.cs +25 -0
  539. package/extensions/hdrp/unitypkg/Editor/Hdrp/volume-set.cs +28 -0
  540. package/extensions/hdrp/unitypkg/UnityCli.Extensions.Hdrp.Editor.asmdef +19 -0
  541. package/extensions/probuilder/bridge/domains/probuilder.ts +386 -0
  542. package/extensions/probuilder/docs/probuilder.md +125 -0
  543. package/extensions/probuilder/extension.json +291 -0
  544. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderAppendCompletionProof.cs +254 -0
  545. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderAtomicReadback.cs +293 -0
  546. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderBevelCompletionProof.cs +299 -0
  547. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderCanonicalMeshSnapshot.cs +951 -0
  548. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderConnectCompletionProof.cs +407 -0
  549. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderEdgeCompletionProof.cs +318 -0
  550. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderErrors.cs +83 -0
  551. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderFaceCompletionProof.cs +152 -0
  552. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderFaceExtrudeCompletionProof.cs +283 -0
  553. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderFlipCompletionProof.cs +170 -0
  554. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderInput.cs +85 -0
  555. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderInsertCompletionProof.cs +674 -0
  556. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderOperationProof.cs +137 -0
  557. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderReflection.cs +1064 -0
  558. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderRefreshUvProof.cs +53 -0
  559. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderSceneTool.cs +184 -0
  560. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderShapeTopologyRecords.g.cs +82 -0
  561. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ProBuilderVertexObjectCompletionProof.cs +346 -0
  562. package/extensions/probuilder/unitypkg/Editor/ProBuilder/append-vertices-to-edge.cs +118 -0
  563. package/extensions/probuilder/unitypkg/Editor/ProBuilder/auto-smooth.cs +104 -0
  564. package/extensions/probuilder/unitypkg/Editor/ProBuilder/bevel-edges.cs +119 -0
  565. package/extensions/probuilder/unitypkg/Editor/ProBuilder/bridge-edges.cs +113 -0
  566. package/extensions/probuilder/unitypkg/Editor/ProBuilder/center-pivot.cs +43 -0
  567. package/extensions/probuilder/unitypkg/Editor/ProBuilder/combine-meshes.cs +58 -0
  568. package/extensions/probuilder/unitypkg/Editor/ProBuilder/connect-elements.cs +128 -0
  569. package/extensions/probuilder/unitypkg/Editor/ProBuilder/convert-to-probuilder.cs +40 -0
  570. package/extensions/probuilder/unitypkg/Editor/ProBuilder/create-poly-shape.cs +55 -0
  571. package/extensions/probuilder/unitypkg/Editor/ProBuilder/create-polygon.cs +28 -0
  572. package/extensions/probuilder/unitypkg/Editor/ProBuilder/create-shape.cs +168 -0
  573. package/extensions/probuilder/unitypkg/Editor/ProBuilder/delete-faces.cs +42 -0
  574. package/extensions/probuilder/unitypkg/Editor/ProBuilder/detach-faces.cs +46 -0
  575. package/extensions/probuilder/unitypkg/Editor/ProBuilder/duplicate-and-flip.cs +100 -0
  576. package/extensions/probuilder/unitypkg/Editor/ProBuilder/extrude-edges.cs +118 -0
  577. package/extensions/probuilder/unitypkg/Editor/ProBuilder/extrude-faces.cs +110 -0
  578. package/extensions/probuilder/unitypkg/Editor/ProBuilder/flip-normals.cs +102 -0
  579. package/extensions/probuilder/unitypkg/Editor/ProBuilder/freeze-transform.cs +45 -0
  580. package/extensions/probuilder/unitypkg/Editor/ProBuilder/insert-vertex.cs +132 -0
  581. package/extensions/probuilder/unitypkg/Editor/ProBuilder/merge-faces.cs +44 -0
  582. package/extensions/probuilder/unitypkg/Editor/ProBuilder/merge-objects.cs +130 -0
  583. package/extensions/probuilder/unitypkg/Editor/ProBuilder/merge-vertices.cs +109 -0
  584. package/extensions/probuilder/unitypkg/Editor/ProBuilder/mesh-info.cs +117 -0
  585. package/extensions/probuilder/unitypkg/Editor/ProBuilder/move-vertices.cs +33 -0
  586. package/extensions/probuilder/unitypkg/Editor/ProBuilder/ping.cs +51 -0
  587. package/extensions/probuilder/unitypkg/Editor/ProBuilder/repair-mesh.cs +40 -0
  588. package/extensions/probuilder/unitypkg/Editor/ProBuilder/select-faces.cs +161 -0
  589. package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-face-color.cs +24 -0
  590. package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-face-material.cs +23 -0
  591. package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-face-uvs.cs +28 -0
  592. package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-pivot.cs +42 -0
  593. package/extensions/probuilder/unitypkg/Editor/ProBuilder/set-smoothing.cs +23 -0
  594. package/extensions/probuilder/unitypkg/Editor/ProBuilder/split-vertices.cs +64 -0
  595. package/extensions/probuilder/unitypkg/Editor/ProBuilder/subdivide.cs +111 -0
  596. package/extensions/probuilder/unitypkg/Editor/ProBuilder/validate-mesh.cs +75 -0
  597. package/extensions/probuilder/unitypkg/Editor/ProBuilder/weld-vertices.cs +112 -0
  598. package/extensions/probuilder/unitypkg/UnityCli.Extensions.ProBuilder.Editor.asmdef +25 -0
  599. package/extensions/urp/bridge/domains/urp.ts +62 -0
  600. package/extensions/urp/docs/urp.md +20 -0
  601. package/extensions/urp/extension.json +41 -0
  602. package/extensions/urp/unitypkg/Editor/Urp/UrpFeatureToolSupport.cs +336 -0
  603. package/extensions/urp/unitypkg/Editor/Urp/UrpToolSupport.cs +801 -0
  604. package/extensions/urp/unitypkg/Editor/Urp/feature-add.cs +12 -0
  605. package/extensions/urp/unitypkg/Editor/Urp/feature-configure.cs +12 -0
  606. package/extensions/urp/unitypkg/Editor/Urp/feature-list.cs +12 -0
  607. package/extensions/urp/unitypkg/Editor/Urp/feature-remove.cs +12 -0
  608. package/extensions/urp/unitypkg/Editor/Urp/feature-toggle.cs +12 -0
  609. package/extensions/urp/unitypkg/Editor/Urp/settings-get.cs +27 -0
  610. package/extensions/urp/unitypkg/Editor/Urp/settings-set.cs +47 -0
  611. package/extensions/urp/unitypkg/Editor/Urp/volume-add-effect.cs +33 -0
  612. package/extensions/urp/unitypkg/Editor/Urp/volume-create.cs +33 -0
  613. package/extensions/urp/unitypkg/Editor/Urp/volume-info.cs +31 -0
  614. package/extensions/urp/unitypkg/Editor/Urp/volume-list.cs +39 -0
  615. package/extensions/urp/unitypkg/Editor/Urp/volume-set.cs +33 -0
  616. package/extensions/urp/unitypkg/UnityCli.Extensions.Urp.Editor.asmdef +19 -0
  617. package/extensions/vfx-graph/bridge/domains/vfx.ts +337 -0
  618. package/extensions/vfx-graph/docs/vfx.md +28 -0
  619. package/extensions/vfx-graph/extension.json +72 -0
  620. package/extensions/vfx-graph/unitypkg/Editor/Vfx/VfxActionToolSupport.cs +248 -0
  621. package/extensions/vfx-graph/unitypkg/Editor/Vfx/VfxToolSupport.cs +1325 -0
  622. package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-pause.cs +37 -0
  623. package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-play.cs +40 -0
  624. package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-reinitialize.cs +37 -0
  625. package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-set-rate.cs +36 -0
  626. package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-set-seed.cs +42 -0
  627. package/extensions/vfx-graph/unitypkg/Editor/Vfx/control-stop.cs +37 -0
  628. package/extensions/vfx-graph/unitypkg/Editor/Vfx/effect-add.cs +55 -0
  629. package/extensions/vfx-graph/unitypkg/Editor/Vfx/effect-assign.cs +44 -0
  630. package/extensions/vfx-graph/unitypkg/Editor/Vfx/effect-info.cs +30 -0
  631. package/extensions/vfx-graph/unitypkg/Editor/Vfx/graph-create.cs +62 -0
  632. package/extensions/vfx-graph/unitypkg/Editor/Vfx/graph-info.cs +32 -0
  633. package/extensions/vfx-graph/unitypkg/Editor/Vfx/line-create.cs +75 -0
  634. package/extensions/vfx-graph/unitypkg/Editor/Vfx/line-positions.cs +100 -0
  635. package/extensions/vfx-graph/unitypkg/Editor/Vfx/parameter.cs +216 -0
  636. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-clear.cs +39 -0
  637. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-create.cs +80 -0
  638. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-emission.cs +126 -0
  639. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-info.cs +55 -0
  640. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-main.cs +75 -0
  641. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-pause.cs +38 -0
  642. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-play.cs +38 -0
  643. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-shape.cs +148 -0
  644. package/extensions/vfx-graph/unitypkg/Editor/Vfx/particle-stop.cs +41 -0
  645. package/extensions/vfx-graph/unitypkg/Editor/Vfx/template-create.cs +58 -0
  646. package/extensions/vfx-graph/unitypkg/Editor/Vfx/template-list.cs +31 -0
  647. package/extensions/vfx-graph/unitypkg/Editor/Vfx/trail-create.cs +41 -0
  648. package/extensions/vfx-graph/unitypkg/Editor/Vfx/trail-set.cs +44 -0
  649. package/extensions/vfx-graph/unitypkg/UnityCli.Extensions.VfxGraph.Editor.asmdef +18 -0
  650. package/package.json +46 -0
  651. package/schemas/error-code.schema.json +70 -0
  652. package/schemas/extension-descriptor.schema.json +88 -0
  653. package/schemas/extension-manifest.schema.json +125 -0
  654. package/schemas/request-envelope.schema.json +34 -0
  655. package/schemas/response-envelope.schema.json +42 -0
  656. package/schemas/tool-metadata.schema.json +111 -0
  657. package/skills/unitycli/SKILL.md +61 -0
  658. package/skills/unitycli/agents/interface.yaml +30 -0
  659. package/skills/unitycli/evals/history/2026-08-05-governed-baseline.json +44 -0
  660. package/skills/unitycli/evals/output/cases.jsonl +5 -0
  661. package/skills/unitycli/evals/output/fixtures/feedback-scenario.json +27 -0
  662. package/skills/unitycli/evals/output/schema.json +32 -0
  663. package/skills/unitycli/evals/semantic_config.json +46 -0
  664. package/skills/unitycli/evals/trigger_cases.json +39 -0
  665. package/skills/unitycli/examples/feedback-event.input.json +8 -0
  666. package/skills/unitycli/examples/feedback-record.output.json +12 -0
  667. package/skills/unitycli/manifest.json +112 -0
  668. package/skills/unitycli/references/custom-tools.md +111 -0
  669. package/skills/unitycli/references/feedback.md +59 -0
  670. package/skills/unitycli/references/operation-protocol.md +83 -0
  671. package/skills/unitycli/reports/output_quality_scorecard.md +56 -0
  672. package/skills/unitycli/reports/trust-report.md +57 -0
  673. package/skills/unitycli/scripts/record-feedback.ps1 +210 -0
  674. package/skills/unitycli/security/network_policy.json +18 -0
  675. package/skills/unitycli/security/permission_policy.json +40 -0
  676. package/unitypkg/Editor/Bridge/BridgeCommandContext.cs +64 -0
  677. package/unitypkg/Editor/Bridge/BridgeCommandException.cs +39 -0
  678. package/unitypkg/Editor/Bridge/BridgeCommandRegistry.cs +172 -0
  679. package/unitypkg/Editor/Bridge/BridgeHttpServer.cs +534 -0
  680. package/unitypkg/Editor/Bridge/BridgeResponse.cs +58 -0
  681. package/unitypkg/Editor/Bridge/BridgeWorkQueue.cs +325 -0
  682. package/unitypkg/Editor/BridgeStartupStateMachine.cs +81 -0
  683. package/unitypkg/Editor/Commands/ProjectToolCommands.cs +43 -0
  684. package/unitypkg/Editor/Commands/RuntimeToolCommands.cs +43 -0
  685. package/unitypkg/Editor/Generated/UnityCliToolCompletionRegistry.g.cs +428 -0
  686. package/unitypkg/Editor/Infrastructure/CodeExecSupport.cs +664 -0
  687. package/unitypkg/Editor/Infrastructure/RegistryOwnershipResolver.cs +148 -0
  688. package/unitypkg/Editor/Infrastructure/UnityCliActiveOperation.cs +411 -0
  689. package/unitypkg/Editor/Infrastructure/UnityCliAdmission.cs +485 -0
  690. package/unitypkg/Editor/Infrastructure/UnityCliArtifacts.cs +110 -0
  691. package/unitypkg/Editor/Infrastructure/UnityCliAssetRefreshCoordinator.cs +106 -0
  692. package/unitypkg/Editor/Infrastructure/UnityCliBridgeHelpers.cs +155 -0
  693. package/unitypkg/Editor/Infrastructure/UnityCliCanonicalProjectPath.cs +325 -0
  694. package/unitypkg/Editor/Infrastructure/UnityCliCompilationEventBroker.cs +192 -0
  695. package/unitypkg/Editor/Infrastructure/UnityCliCompileCoordinator.cs +271 -0
  696. package/unitypkg/Editor/Infrastructure/UnityCliCompletionProbe.cs +515 -0
  697. package/unitypkg/Editor/Infrastructure/UnityCliEditorStateSnapshot.cs +84 -0
  698. package/unitypkg/Editor/Infrastructure/UnityCliInstanceRegistry.cs +558 -0
  699. package/unitypkg/Editor/Infrastructure/UnityCliJson.cs +155 -0
  700. package/unitypkg/Editor/Infrastructure/UnityCliLargeOutput.cs +128 -0
  701. package/unitypkg/Editor/Infrastructure/UnityCliLiveBuildCoordinator.cs +230 -0
  702. package/unitypkg/Editor/Infrastructure/UnityCliLiveRefreshCoordinator.cs +164 -0
  703. package/unitypkg/Editor/Infrastructure/UnityCliLog.cs +127 -0
  704. package/unitypkg/Editor/Infrastructure/UnityCliNavMeshBakeCoordinator.cs +2073 -0
  705. package/unitypkg/Editor/Infrastructure/UnityCliObjectPatch.cs +193 -0
  706. package/unitypkg/Editor/Infrastructure/UnityCliObjectRef.cs +278 -0
  707. package/unitypkg/Editor/Infrastructure/UnityCliObjectSerializer.cs +620 -0
  708. package/unitypkg/Editor/Infrastructure/UnityCliOcclusionBakeCoordinator.cs +1739 -0
  709. package/unitypkg/Editor/Infrastructure/UnityCliOperationCoordinator.cs +828 -0
  710. package/unitypkg/Editor/Infrastructure/UnityCliPackageEmbedCoordinator.cs +147 -0
  711. package/unitypkg/Editor/Infrastructure/UnityCliPackageResolveCoordinator.cs +454 -0
  712. package/unitypkg/Editor/Infrastructure/UnityCliPackageResolveState.cs +561 -0
  713. package/unitypkg/Editor/Infrastructure/UnityCliPipelineHandoff.cs +742 -0
  714. package/unitypkg/Editor/Infrastructure/UnityCliProjectSettings.cs +92 -0
  715. package/unitypkg/Editor/Infrastructure/UnityCliProtocolRequest.cs +116 -0
  716. package/unitypkg/Editor/Infrastructure/UnityCliReflection.cs +477 -0
  717. package/unitypkg/Editor/Infrastructure/UnityCliReloadOperation.cs +664 -0
  718. package/unitypkg/Editor/Infrastructure/UnityCliRequestDigest.cs +34 -0
  719. package/unitypkg/Editor/Infrastructure/UnityCliRuntimeBuildInjection.cs +121 -0
  720. package/unitypkg/Editor/Infrastructure/UnityCliRuntimeExecutor.cs +391 -0
  721. package/unitypkg/Editor/Infrastructure/UnityCliSceneMutation.cs +84 -0
  722. package/unitypkg/Editor/Infrastructure/UnityCliScriptableObjectHelpers.cs +235 -0
  723. package/unitypkg/Editor/Infrastructure/UnityCliSerializer.cs +580 -0
  724. package/unitypkg/Editor/Infrastructure/UnityCliSessionMutationLease.cs +568 -0
  725. package/unitypkg/Editor/Infrastructure/UnityCliStateIO.cs +73 -0
  726. package/unitypkg/Editor/Infrastructure/UnityCliTestRunCoordinator.cs +598 -0
  727. package/unitypkg/Editor/Infrastructure/UnityCliTransactionLog.cs +112 -0
  728. package/unitypkg/Editor/Infrastructure/UnityCliValueConverter.cs +146 -0
  729. package/unitypkg/Editor/Infrastructure/UnityCliWaiter.cs +716 -0
  730. package/unitypkg/Editor/ProjectTools/IUnityCliTool.cs +152 -0
  731. package/unitypkg/Editor/ProjectTools/OfficialAttributeToolRegistry.cs +992 -0
  732. package/unitypkg/Editor/ProjectTools/ProjectToolRegistry.cs +938 -0
  733. package/unitypkg/Editor/ProjectTools/ProjectToolSchemaValidator.cs +258 -0
  734. package/unitypkg/Editor/ProjectTools/RegisteredTool.cs +75 -0
  735. package/unitypkg/Editor/ProjectTools/UnityCliProjectToolContext.cs +68 -0
  736. package/unitypkg/Editor/ProjectTools/UnityCliSchemaDeriver.cs +297 -0
  737. package/unitypkg/Editor/Protocol/ProtocolEnvelopeFactory.cs +92 -0
  738. package/unitypkg/Editor/Protocol/envelope.cs +50 -0
  739. package/unitypkg/Editor/Roslyn/LICENSE.txt +23 -0
  740. package/unitypkg/Editor/Roslyn/Microsoft.CodeAnalysis.CSharp.dll +0 -0
  741. package/unitypkg/Editor/Roslyn/Microsoft.CodeAnalysis.dll +0 -0
  742. package/unitypkg/Editor/Roslyn/System.Collections.Immutable.dll +0 -0
  743. package/unitypkg/Editor/Roslyn/System.Reflection.Metadata.dll +0 -0
  744. package/unitypkg/Editor/Tools/animation/AnimationToolSupport.cs +335 -0
  745. package/unitypkg/Editor/Tools/animation/AnimatorRuntimeToolSupport.cs +24 -0
  746. package/unitypkg/Editor/Tools/animation/animator/crossfade.cs +117 -0
  747. package/unitypkg/Editor/Tools/animation/animator/get-info.cs +24 -0
  748. package/unitypkg/Editor/Tools/animation/animator/get-parameter.cs +36 -0
  749. package/unitypkg/Editor/Tools/animation/animator/set-enabled.cs +33 -0
  750. package/unitypkg/Editor/Tools/animation/animator/set-parameter.cs +71 -0
  751. package/unitypkg/Editor/Tools/animation/animator/set-speed.cs +33 -0
  752. package/unitypkg/Editor/Tools/animation/clip/create.cs +48 -0
  753. package/unitypkg/Editor/Tools/animation/clip/modify.cs +43 -0
  754. package/unitypkg/Editor/Tools/animation/clip.cs +23 -0
  755. package/unitypkg/Editor/Tools/animation/play.cs +41 -0
  756. package/unitypkg/Editor/Tools/animation/state.cs +25 -0
  757. package/unitypkg/Editor/Tools/animation/stop.cs +45 -0
  758. package/unitypkg/Editor/Tools/asset/AssetImportSettingsToolSupport.cs +633 -0
  759. package/unitypkg/Editor/Tools/asset/AssetToolSupport.cs +253 -0
  760. package/unitypkg/Editor/Tools/asset/create.cs +84 -0
  761. package/unitypkg/Editor/Tools/asset/delete.cs +88 -0
  762. package/unitypkg/Editor/Tools/asset/duplicate.cs +68 -0
  763. package/unitypkg/Editor/Tools/asset/get-components.cs +177 -0
  764. package/unitypkg/Editor/Tools/asset/get-data.cs +73 -0
  765. package/unitypkg/Editor/Tools/asset/import-settings/set.cs +127 -0
  766. package/unitypkg/Editor/Tools/asset/import-settings.cs +54 -0
  767. package/unitypkg/Editor/Tools/asset/import.cs +132 -0
  768. package/unitypkg/Editor/Tools/asset/info.cs +48 -0
  769. package/unitypkg/Editor/Tools/asset/modify.cs +69 -0
  770. package/unitypkg/Editor/Tools/asset/move.cs +70 -0
  771. package/unitypkg/Editor/Tools/asset/preview.cs +86 -0
  772. package/unitypkg/Editor/Tools/asset/rename.cs +84 -0
  773. package/unitypkg/Editor/Tools/asset/search-built-in.cs +90 -0
  774. package/unitypkg/Editor/Tools/asset/search.cs +83 -0
  775. package/unitypkg/Editor/Tools/build/BuildSceneStateTool.cs +37 -0
  776. package/unitypkg/Editor/Tools/build/BuildSettingsToolSupport.cs +4 -0
  777. package/unitypkg/Editor/Tools/build/BuildToolDtos.cs +15 -0
  778. package/unitypkg/Editor/Tools/build/BuildToolSupport.cs +111 -0
  779. package/unitypkg/Editor/Tools/build/platform/get.cs +12 -0
  780. package/unitypkg/Editor/Tools/build/platform/set.cs +45 -0
  781. package/unitypkg/Editor/Tools/build/profile/create.cs +44 -0
  782. package/unitypkg/Editor/Tools/build/profile/list.cs +12 -0
  783. package/unitypkg/Editor/Tools/build/profile/modify.cs +42 -0
  784. package/unitypkg/Editor/Tools/build/profile/switch.cs +30 -0
  785. package/unitypkg/Editor/Tools/build/scene/add.cs +45 -0
  786. package/unitypkg/Editor/Tools/build/scene/disable.cs +3 -0
  787. package/unitypkg/Editor/Tools/build/scene/enable.cs +4 -0
  788. package/unitypkg/Editor/Tools/build/scene/list.cs +4 -0
  789. package/unitypkg/Editor/Tools/build/scene/remove.cs +29 -0
  790. package/unitypkg/Editor/Tools/build/settings/get.cs +3 -0
  791. package/unitypkg/Editor/Tools/build/settings/set.cs +74 -0
  792. package/unitypkg/Editor/Tools/camera/CameraToolSupport.cs +292 -0
  793. package/unitypkg/Editor/Tools/camera/create.cs +114 -0
  794. package/unitypkg/Editor/Tools/camera/info.cs +49 -0
  795. package/unitypkg/Editor/Tools/camera/lens.cs +119 -0
  796. package/unitypkg/Editor/Tools/camera/list.cs +52 -0
  797. package/unitypkg/Editor/Tools/camera/multiview.cs +96 -0
  798. package/unitypkg/Editor/Tools/camera/screenshot.cs +65 -0
  799. package/unitypkg/Editor/Tools/camera/target.cs +94 -0
  800. package/unitypkg/Editor/Tools/component/add.cs +125 -0
  801. package/unitypkg/Editor/Tools/component/get.cs +73 -0
  802. package/unitypkg/Editor/Tools/component/list-types.cs +90 -0
  803. package/unitypkg/Editor/Tools/component/modify.cs +103 -0
  804. package/unitypkg/Editor/Tools/component/remove.cs +147 -0
  805. package/unitypkg/Editor/Tools/component/set.cs +93 -0
  806. package/unitypkg/Editor/Tools/console/clear.cs +38 -0
  807. package/unitypkg/Editor/Tools/console/get.cs +28 -0
  808. package/unitypkg/Editor/Tools/controller/add-blend-tree-child.cs +88 -0
  809. package/unitypkg/Editor/Tools/controller/add-layer.cs +43 -0
  810. package/unitypkg/Editor/Tools/controller/add-parameter.cs +51 -0
  811. package/unitypkg/Editor/Tools/controller/add-state.cs +44 -0
  812. package/unitypkg/Editor/Tools/controller/add-transition.cs +71 -0
  813. package/unitypkg/Editor/Tools/controller/assign.cs +38 -0
  814. package/unitypkg/Editor/Tools/controller/create-blend-tree-1d.cs +40 -0
  815. package/unitypkg/Editor/Tools/controller/create-blend-tree-2d.cs +42 -0
  816. package/unitypkg/Editor/Tools/controller/create.cs +31 -0
  817. package/unitypkg/Editor/Tools/controller/get-info.cs +27 -0
  818. package/unitypkg/Editor/Tools/controller/remove-layer.cs +57 -0
  819. package/unitypkg/Editor/Tools/controller/set-layer-weight.cs +42 -0
  820. package/unitypkg/Editor/Tools/diagnose/preflight.cs +269 -0
  821. package/unitypkg/Editor/Tools/editor/EditorActionToolSupport.cs +117 -0
  822. package/unitypkg/Editor/Tools/editor/EditorSearchToolSupport.cs +146 -0
  823. package/unitypkg/Editor/Tools/editor/EditorToolSupport.cs +132 -0
  824. package/unitypkg/Editor/Tools/editor/EditorWindowFocusToolSupport.cs +194 -0
  825. package/unitypkg/Editor/Tools/editor/active-tool/set.cs +33 -0
  826. package/unitypkg/Editor/Tools/editor/active-tool.cs +100 -0
  827. package/unitypkg/Editor/Tools/editor/autotick/set.cs +102 -0
  828. package/unitypkg/Editor/Tools/editor/console.cs +26 -0
  829. package/unitypkg/Editor/Tools/editor/focus.cs +80 -0
  830. package/unitypkg/Editor/Tools/editor/menu-items.cs +50 -0
  831. package/unitypkg/Editor/Tools/editor/menu.cs +53 -0
  832. package/unitypkg/Editor/Tools/editor/pause.cs +38 -0
  833. package/unitypkg/Editor/Tools/editor/play.cs +43 -0
  834. package/unitypkg/Editor/Tools/editor/redo.cs +56 -0
  835. package/unitypkg/Editor/Tools/editor/resolution.cs +34 -0
  836. package/unitypkg/Editor/Tools/editor/search.cs +55 -0
  837. package/unitypkg/Editor/Tools/editor/selection/set.cs +37 -0
  838. package/unitypkg/Editor/Tools/editor/selection.cs +153 -0
  839. package/unitypkg/Editor/Tools/editor/stop.cs +43 -0
  840. package/unitypkg/Editor/Tools/editor/tool-states.cs +140 -0
  841. package/unitypkg/Editor/Tools/editor/undo.cs +56 -0
  842. package/unitypkg/Editor/Tools/editor/windows.cs +87 -0
  843. package/unitypkg/Editor/Tools/extension/status.cs +87 -0
  844. package/unitypkg/Editor/Tools/go/GameObjectToolSupport.cs +524 -0
  845. package/unitypkg/Editor/Tools/go/create.cs +333 -0
  846. package/unitypkg/Editor/Tools/go/delete.cs +87 -0
  847. package/unitypkg/Editor/Tools/go/duplicate.cs +76 -0
  848. package/unitypkg/Editor/Tools/go/find.cs +152 -0
  849. package/unitypkg/Editor/Tools/go/inspect.cs +49 -0
  850. package/unitypkg/Editor/Tools/go/look-at.cs +76 -0
  851. package/unitypkg/Editor/Tools/go/modify.cs +156 -0
  852. package/unitypkg/Editor/Tools/go/move-relative.cs +74 -0
  853. package/unitypkg/Editor/Tools/go/set-parent.cs +84 -0
  854. package/unitypkg/Editor/Tools/graphics/GraphicsToolSupport.cs +396 -0
  855. package/unitypkg/Editor/Tools/graphics/bake-cancel.cs +27 -0
  856. package/unitypkg/Editor/Tools/graphics/bake-clear.cs +31 -0
  857. package/unitypkg/Editor/Tools/graphics/bake-reflection-probe.cs +35 -0
  858. package/unitypkg/Editor/Tools/graphics/bake-settings.cs +131 -0
  859. package/unitypkg/Editor/Tools/graphics/bake-start.cs +27 -0
  860. package/unitypkg/Editor/Tools/graphics/bake-status.cs +31 -0
  861. package/unitypkg/Editor/Tools/graphics/light-probe-group.cs +56 -0
  862. package/unitypkg/Editor/Tools/graphics/pipeline-info.cs +19 -0
  863. package/unitypkg/Editor/Tools/graphics/pipeline-quality.cs +24 -0
  864. package/unitypkg/Editor/Tools/graphics/pipeline-settings.cs +46 -0
  865. package/unitypkg/Editor/Tools/graphics/probe-positions.cs +58 -0
  866. package/unitypkg/Editor/Tools/graphics/quality.cs +85 -0
  867. package/unitypkg/Editor/Tools/graphics/reflection-probe.cs +73 -0
  868. package/unitypkg/Editor/Tools/graphics/scene-debug.cs +37 -0
  869. package/unitypkg/Editor/Tools/graphics/settings.cs +104 -0
  870. package/unitypkg/Editor/Tools/graphics/skybox-get.cs +33 -0
  871. package/unitypkg/Editor/Tools/graphics/skybox-set-ambient.cs +24 -0
  872. package/unitypkg/Editor/Tools/graphics/skybox-set-fog.cs +24 -0
  873. package/unitypkg/Editor/Tools/graphics/skybox-set-material.cs +33 -0
  874. package/unitypkg/Editor/Tools/graphics/skybox-set-properties.cs +51 -0
  875. package/unitypkg/Editor/Tools/graphics/skybox-set-reflection.cs +31 -0
  876. package/unitypkg/Editor/Tools/graphics/skybox-set-sun.cs +35 -0
  877. package/unitypkg/Editor/Tools/graphics/stats-counters.cs +28 -0
  878. package/unitypkg/Editor/Tools/graphics/stats-memory.cs +21 -0
  879. package/unitypkg/Editor/Tools/graphics/stats.cs +17 -0
  880. package/unitypkg/Editor/Tools/graphics/volume.cs +59 -0
  881. package/unitypkg/Editor/Tools/instances/list.cs +71 -0
  882. package/unitypkg/Editor/Tools/material/MaterialToolSupport.cs +401 -0
  883. package/unitypkg/Editor/Tools/material/assign.cs +124 -0
  884. package/unitypkg/Editor/Tools/material/create.cs +82 -0
  885. package/unitypkg/Editor/Tools/material/info.cs +55 -0
  886. package/unitypkg/Editor/Tools/material/set-renderer-color.cs +108 -0
  887. package/unitypkg/Editor/Tools/material/set.cs +114 -0
  888. package/unitypkg/Editor/Tools/navmesh/NavMeshToolSupport.cs +404 -0
  889. package/unitypkg/Editor/Tools/navmesh/bake-clear.cs +70 -0
  890. package/unitypkg/Editor/Tools/navmesh/settings/set.cs +73 -0
  891. package/unitypkg/Editor/Tools/navmesh/settings.cs +37 -0
  892. package/unitypkg/Editor/Tools/object/ObjectToolSupport.cs +99 -0
  893. package/unitypkg/Editor/Tools/object/get-data.cs +69 -0
  894. package/unitypkg/Editor/Tools/object/modify.cs +126 -0
  895. package/unitypkg/Editor/Tools/occlusion/OcclusionToolSupport.cs +422 -0
  896. package/unitypkg/Editor/Tools/occlusion/bake-clear.cs +67 -0
  897. package/unitypkg/Editor/Tools/physics/PhysicsJointToolSupport.cs +13 -0
  898. package/unitypkg/Editor/Tools/physics/PhysicsToolSupport.cs +389 -0
  899. package/unitypkg/Editor/Tools/physics/assign-material.cs +88 -0
  900. package/unitypkg/Editor/Tools/physics/collision-matrix.cs +90 -0
  901. package/unitypkg/Editor/Tools/physics/force.cs +127 -0
  902. package/unitypkg/Editor/Tools/physics/joint/add.cs +99 -0
  903. package/unitypkg/Editor/Tools/physics/joint/remove.cs +4 -0
  904. package/unitypkg/Editor/Tools/physics/linecast.cs +59 -0
  905. package/unitypkg/Editor/Tools/physics/material.cs +73 -0
  906. package/unitypkg/Editor/Tools/physics/overlap.cs +84 -0
  907. package/unitypkg/Editor/Tools/physics/raycast-all.cs +67 -0
  908. package/unitypkg/Editor/Tools/physics/raycast.cs +96 -0
  909. package/unitypkg/Editor/Tools/physics/rigidbody.cs +116 -0
  910. package/unitypkg/Editor/Tools/physics/settings.cs +116 -0
  911. package/unitypkg/Editor/Tools/physics/shapecast.cs +127 -0
  912. package/unitypkg/Editor/Tools/physics/simulation.cs +89 -0
  913. package/unitypkg/Editor/Tools/physics/validate.cs +67 -0
  914. package/unitypkg/Editor/Tools/prefab/PrefabOverrideToolSupport.cs +355 -0
  915. package/unitypkg/Editor/Tools/prefab/PrefabToolSupport.cs +446 -0
  916. package/unitypkg/Editor/Tools/prefab/create.cs +125 -0
  917. package/unitypkg/Editor/Tools/prefab/hierarchy.cs +157 -0
  918. package/unitypkg/Editor/Tools/prefab/info.cs +44 -0
  919. package/unitypkg/Editor/Tools/prefab/instantiate.cs +106 -0
  920. package/unitypkg/Editor/Tools/prefab/modify.cs +112 -0
  921. package/unitypkg/Editor/Tools/prefab/overrides/apply.cs +51 -0
  922. package/unitypkg/Editor/Tools/prefab/overrides/revert.cs +51 -0
  923. package/unitypkg/Editor/Tools/prefab/stage-close.cs +67 -0
  924. package/unitypkg/Editor/Tools/prefab/stage-open.cs +69 -0
  925. package/unitypkg/Editor/Tools/prefab/stage-save.cs +64 -0
  926. package/unitypkg/Editor/Tools/prefab/stage.cs +68 -0
  927. package/unitypkg/Editor/Tools/prefab/unpack.cs +80 -0
  928. package/unitypkg/Editor/Tools/prefab/variant/create.cs +53 -0
  929. package/unitypkg/Editor/Tools/profiler/ProfilerFrameDebuggerSupport.cs +68 -0
  930. package/unitypkg/Editor/Tools/profiler/ProfilerMemorySnapshotSupport.cs +30 -0
  931. package/unitypkg/Editor/Tools/profiler/ProfilerToolSupport.cs +515 -0
  932. package/unitypkg/Editor/Tools/profiler/areas.cs +36 -0
  933. package/unitypkg/Editor/Tools/profiler/capture.cs +188 -0
  934. package/unitypkg/Editor/Tools/profiler/clear.cs +57 -0
  935. package/unitypkg/Editor/Tools/profiler/counter.cs +34 -0
  936. package/unitypkg/Editor/Tools/profiler/deep.cs +48 -0
  937. package/unitypkg/Editor/Tools/profiler/export.cs +85 -0
  938. package/unitypkg/Editor/Tools/profiler/frame-debugger/disable.cs +53 -0
  939. package/unitypkg/Editor/Tools/profiler/frame-debugger/enable.cs +66 -0
  940. package/unitypkg/Editor/Tools/profiler/frame-debugger/events.cs +140 -0
  941. package/unitypkg/Editor/Tools/profiler/frame.cs +38 -0
  942. package/unitypkg/Editor/Tools/profiler/hierarchy.cs +183 -0
  943. package/unitypkg/Editor/Tools/profiler/load.cs +85 -0
  944. package/unitypkg/Editor/Tools/profiler/memory-snapshot/compare.cs +78 -0
  945. package/unitypkg/Editor/Tools/profiler/memory-snapshot/list.cs +73 -0
  946. package/unitypkg/Editor/Tools/profiler/memory-snapshot/take.cs +147 -0
  947. package/unitypkg/Editor/Tools/profiler/memory.cs +34 -0
  948. package/unitypkg/Editor/Tools/profiler/module-enable.cs +52 -0
  949. package/unitypkg/Editor/Tools/profiler/modules.cs +33 -0
  950. package/unitypkg/Editor/Tools/profiler/object-memory.cs +49 -0
  951. package/unitypkg/Editor/Tools/profiler/pause.cs +49 -0
  952. package/unitypkg/Editor/Tools/profiler/rendering-stats.cs +109 -0
  953. package/unitypkg/Editor/Tools/profiler/script-stats.cs +35 -0
  954. package/unitypkg/Editor/Tools/profiler/start.cs +55 -0
  955. package/unitypkg/Editor/Tools/profiler/status.cs +36 -0
  956. package/unitypkg/Editor/Tools/profiler/stop.cs +53 -0
  957. package/unitypkg/Editor/Tools/project/ProjectSettingsReader.cs +31 -0
  958. package/unitypkg/Editor/Tools/project/ProjectSettingsToolSupport.cs +757 -0
  959. package/unitypkg/Editor/Tools/project/ProjectTagLayerToolSupport.cs +23 -0
  960. package/unitypkg/Editor/Tools/project/audio-settings/set.cs +35 -0
  961. package/unitypkg/Editor/Tools/project/audio-settings.cs +31 -0
  962. package/unitypkg/Editor/Tools/project/info.cs +52 -0
  963. package/unitypkg/Editor/Tools/project/input-settings/set.cs +35 -0
  964. package/unitypkg/Editor/Tools/project/input-settings.cs +35 -0
  965. package/unitypkg/Editor/Tools/project/layer/add.cs +3 -0
  966. package/unitypkg/Editor/Tools/project/layer/remove.cs +3 -0
  967. package/unitypkg/Editor/Tools/project/layers.cs +61 -0
  968. package/unitypkg/Editor/Tools/project/player-settings/set.cs +35 -0
  969. package/unitypkg/Editor/Tools/project/player-settings.cs +31 -0
  970. package/unitypkg/Editor/Tools/project/tag/add.cs +3 -0
  971. package/unitypkg/Editor/Tools/project/tag/remove.cs +3 -0
  972. package/unitypkg/Editor/Tools/project/tags.cs +45 -0
  973. package/unitypkg/Editor/Tools/project/time-settings/set.cs +35 -0
  974. package/unitypkg/Editor/Tools/project/time-settings.cs +31 -0
  975. package/unitypkg/Editor/Tools/reflection/method/call.cs +114 -0
  976. package/unitypkg/Editor/Tools/reflection/method/find.cs +72 -0
  977. package/unitypkg/Editor/Tools/reflection/type/schema.cs +56 -0
  978. package/unitypkg/Editor/Tools/scene/SceneToolSupport.cs +181 -0
  979. package/unitypkg/Editor/Tools/scene/active.cs +62 -0
  980. package/unitypkg/Editor/Tools/scene/build-settings.cs +69 -0
  981. package/unitypkg/Editor/Tools/scene/create.cs +78 -0
  982. package/unitypkg/Editor/Tools/scene/data.cs +125 -0
  983. package/unitypkg/Editor/Tools/scene/gameobject/component.cs +63 -0
  984. package/unitypkg/Editor/Tools/scene/gameobject/components.cs +77 -0
  985. package/unitypkg/Editor/Tools/scene/gameobject-support.cs +101 -0
  986. package/unitypkg/Editor/Tools/scene/gameobject.cs +83 -0
  987. package/unitypkg/Editor/Tools/scene/hierarchy.cs +250 -0
  988. package/unitypkg/Editor/Tools/scene/list-opened.cs +77 -0
  989. package/unitypkg/Editor/Tools/scene/load.cs +68 -0
  990. package/unitypkg/Editor/Tools/scene/move-object.cs +122 -0
  991. package/unitypkg/Editor/Tools/scene/save.cs +231 -0
  992. package/unitypkg/Editor/Tools/scene/set-active.cs +76 -0
  993. package/unitypkg/Editor/Tools/scene/unload.cs +109 -0
  994. package/unitypkg/Editor/Tools/scene/validate.cs +115 -0
  995. package/unitypkg/Editor/Tools/scene/view-frame.cs +218 -0
  996. package/unitypkg/Editor/Tools/screenshot/EditorElementCaptureToolSupport.cs +181 -0
  997. package/unitypkg/Editor/Tools/screenshot/ScreenshotToolSupport.cs +196 -0
  998. package/unitypkg/Editor/Tools/screenshot/editor-element.cs +87 -0
  999. package/unitypkg/Editor/Tools/screenshot/game-view.cs +116 -0
  1000. package/unitypkg/Editor/Tools/screenshot/isolated-object.cs +93 -0
  1001. package/unitypkg/Editor/Tools/screenshot/orbit.cs +103 -0
  1002. package/unitypkg/Editor/Tools/screenshot/scene-view.cs +99 -0
  1003. package/unitypkg/Editor/Tools/screenshot/screen.cs +89 -0
  1004. package/unitypkg/Editor/Tools/screenshot/surround.cs +181 -0
  1005. package/unitypkg/Editor/Tools/scriptable-object/ScriptableObjectToolSupport.cs +196 -0
  1006. package/unitypkg/Editor/Tools/scriptable-object/create.cs +79 -0
  1007. package/unitypkg/Editor/Tools/scriptable-object/info.cs +49 -0
  1008. package/unitypkg/Editor/Tools/scriptable-object/list-types.cs +103 -0
  1009. package/unitypkg/Editor/Tools/scriptable-object/modify.cs +208 -0
  1010. package/unitypkg/Editor/Tools/shader/ShaderToolSupport.cs +326 -0
  1011. package/unitypkg/Editor/Tools/shader/create.cs +82 -0
  1012. package/unitypkg/Editor/Tools/shader/delete.cs +90 -0
  1013. package/unitypkg/Editor/Tools/shader/get-data.cs +125 -0
  1014. package/unitypkg/Editor/Tools/shader/info.cs +48 -0
  1015. package/unitypkg/Editor/Tools/shader/list.cs +82 -0
  1016. package/unitypkg/Editor/Tools/shader/read.cs +84 -0
  1017. package/unitypkg/Editor/Tools/shader/update.cs +71 -0
  1018. package/unitypkg/Editor/Tools/tests/list.cs +98 -0
  1019. package/unitypkg/Editor/Tools/texture/TextureToolSupport.cs +327 -0
  1020. package/unitypkg/Editor/Tools/texture/create.cs +182 -0
  1021. package/unitypkg/Editor/Tools/texture/delete.cs +89 -0
  1022. package/unitypkg/Editor/Tools/texture/generate.cs +189 -0
  1023. package/unitypkg/Editor/Tools/texture/import-settings.cs +104 -0
  1024. package/unitypkg/Editor/Tools/texture/info.cs +50 -0
  1025. package/unitypkg/Editor/Tools/texture/modify.cs +154 -0
  1026. package/unitypkg/Editor/Tools/texture/sprite.cs +132 -0
  1027. package/unitypkg/Editor/Tools/timeline/TimelineMutationToolSupport.cs +696 -0
  1028. package/unitypkg/Editor/Tools/timeline/TimelineReadToolSupport.cs +439 -0
  1029. package/unitypkg/Editor/Tools/timeline/TimelineToolSupport.cs +203 -0
  1030. package/unitypkg/Editor/Tools/timeline/clip/add.cs +93 -0
  1031. package/unitypkg/Editor/Tools/timeline/create.cs +88 -0
  1032. package/unitypkg/Editor/Tools/timeline/info.cs +54 -0
  1033. package/unitypkg/Editor/Tools/timeline/track/add.cs +91 -0
  1034. package/unitypkg/Editor/Tools/ui/UiToolSupport.cs +162 -0
  1035. package/unitypkg/Editor/Tools/ui/UiUguiToolSupport.cs +24 -0
  1036. package/unitypkg/Editor/Tools/ui/attach-document.cs +46 -0
  1037. package/unitypkg/Editor/Tools/ui/button/create.cs +58 -0
  1038. package/unitypkg/Editor/Tools/ui/canvas/create.cs +40 -0
  1039. package/unitypkg/Editor/Tools/ui/create-panel-settings.cs +44 -0
  1040. package/unitypkg/Editor/Tools/ui/detach-document.cs +41 -0
  1041. package/unitypkg/Editor/Tools/ui/document/create.cs +49 -0
  1042. package/unitypkg/Editor/Tools/ui/document/delete.cs +33 -0
  1043. package/unitypkg/Editor/Tools/ui/document/info.cs +33 -0
  1044. package/unitypkg/Editor/Tools/ui/document/update.cs +36 -0
  1045. package/unitypkg/Editor/Tools/ui/get-visual-tree.cs +34 -0
  1046. package/unitypkg/Editor/Tools/ui/hierarchy.cs +27 -0
  1047. package/unitypkg/Editor/Tools/ui/image/create.cs +47 -0
  1048. package/unitypkg/Editor/Tools/ui/link-stylesheet.cs +54 -0
  1049. package/unitypkg/Editor/Tools/ui/list-documents.cs +34 -0
  1050. package/unitypkg/Editor/Tools/ui/modify-visual-element.cs +76 -0
  1051. package/unitypkg/Editor/Tools/ui/render-preview.cs +128 -0
  1052. package/unitypkg/Editor/Tools/ui/text/create.cs +45 -0
  1053. package/unitypkg/Editor/Tools/ui/update-panel-settings.cs +49 -0
  1054. package/unitypkg/Editor/UnityCliBridge.cs +431 -0
  1055. package/unitypkg/Editor/UnityCliBridgeBuildInfo.cs +9 -0
  1056. package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeBridge.cs +580 -0
  1057. package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeJson.cs +232 -0
  1058. package/unitypkg/Runtime/Infrastructure/UnityCliRuntimeRegistry.cs +297 -0
  1059. package/unitypkg/Runtime/Tools/UnityCliRuntimeTools.cs +701 -0
  1060. package/unitypkg/Runtime/UnityCli.Runtime.asmdef +14 -0
  1061. package/unitypkg/Shared/UnityCli.Shared.asmdef +14 -0
  1062. package/unitypkg/Shared/UnityCliAdmissionPool.cs +426 -0
  1063. package/unitypkg/Tests/Editor/UnityCli.Editor.Tests.asmdef +15 -0
  1064. package/unitypkg/Tests/Editor/UnityCliAdmissionPoolTests.cs +262 -0
  1065. package/unitypkg/UnityCli.Editor.asmdef +26 -0
  1066. package/unitypkg/package.json +11 -0
@@ -0,0 +1,1064 @@
1
+ #if UNITY_EDITOR
2
+ using System;
3
+ using System.Collections;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using System.Reflection;
7
+ using UnityEditor;
8
+ using UnityEngine;
9
+
10
+ namespace UnityCli.ProBuilder
11
+ {
12
+ /// <summary>
13
+ /// Reflection-based optional dependency helper for the ProBuilder package.
14
+ /// All ProBuilder types are resolved via reflection so the CLI extension
15
+ /// compiles and runs even when com.unity.probuilder is not installed.
16
+ /// When the package is absent, tools report unavailable with nextActions.
17
+ /// </summary>
18
+ internal static class ProBuilderReflection
19
+ {
20
+ // 未加载到 optional assembly 时不缓存 null;domain reload 完成后下一次调用会重新解析。
21
+ private sealed class RetryingType
22
+ {
23
+ private readonly string fullName;
24
+ private readonly object gate = new object();
25
+ private Type value;
26
+
27
+ public RetryingType(string fullName)
28
+ {
29
+ this.fullName = fullName;
30
+ }
31
+
32
+ public Type Value
33
+ {
34
+ get
35
+ {
36
+ if (value != null) return value;
37
+ lock (gate)
38
+ {
39
+ if (value == null) value = FindType(fullName);
40
+ return value;
41
+ }
42
+ }
43
+ }
44
+ }
45
+
46
+ // ─── Cached successful type lookups ─────────────────────────
47
+ private static readonly RetryingType ProBuilderMeshType = new RetryingType("UnityEngine.ProBuilder.ProBuilderMesh");
48
+ private static readonly RetryingType ShapeGeneratorType = new RetryingType("UnityEngine.ProBuilder.ShapeGenerator");
49
+ private static readonly RetryingType SmoothingType = new RetryingType("UnityEngine.ProBuilder.Smoothing");
50
+ private static readonly RetryingType MeshValidationType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.MeshValidation");
51
+ private static readonly RetryingType FaceType = new RetryingType("UnityEngine.ProBuilder.Face");
52
+ private static readonly RetryingType EdgeType = new RetryingType("UnityEngine.ProBuilder.Edge");
53
+ private static readonly RetryingType PivotType = new RetryingType("UnityEngine.ProBuilder.PivotType");
54
+ private static readonly RetryingType ShapeTypeType = new RetryingType("UnityEngine.ProBuilder.ShapeType");
55
+ private static readonly RetryingType ExtrudeElementsType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.ExtrudeElements");
56
+ private static readonly RetryingType DeleteElementsType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.DeleteElements");
57
+ private static readonly RetryingType AppendElementsType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.AppendElements");
58
+ private static readonly RetryingType CombineMeshesType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.CombineMeshes");
59
+ private static readonly RetryingType VertexEditingType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.VertexEditing");
60
+ private static readonly RetryingType MeshImporterType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.MeshImporter");
61
+ private static readonly RetryingType MeshImportSettingsType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.MeshImportSettings");
62
+ private static readonly RetryingType ElementSelectionType = new RetryingType("UnityEngine.ProBuilder.MeshOperations.ElementSelection");
63
+ private static readonly RetryingType PivotLocationType = new RetryingType("UnityEngine.ProBuilder.PivotLocation");
64
+
65
+ internal const string SupportedPackageVersion = "5.2.4";
66
+
67
+ /// <summary>版本由 asmdef exact versionDefine 在编译期证明,Tool request 路径不得重入 PackageManager。</summary>
68
+ internal static string InstalledPackageVersion
69
+ {
70
+ get
71
+ {
72
+ #if UNITY_CLI_PROBUILDER_5_2_4
73
+ return SupportedPackageVersion;
74
+ #else
75
+ return null;
76
+ #endif
77
+ }
78
+ }
79
+
80
+ /// <summary>本扩展的 operation replay 只对精确 ProBuilder 5.2.4 闭合。</summary>
81
+ public static bool IsAvailable
82
+ {
83
+ get { return ProBuilderMeshType.Value != null && string.Equals(InstalledPackageVersion, SupportedPackageVersion, StringComparison.Ordinal); }
84
+ }
85
+
86
+ /// <summary>
87
+ /// Returns the ProBuilderMesh type or null if the package is missing.
88
+ /// </summary>
89
+ public static Type GetProBuilderMeshType() { return ProBuilderMeshType.Value; }
90
+
91
+ /// <summary>返回 Face type,供逐面 UV 操作使用。</summary>
92
+ public static Type GetFaceType() { return FaceType.Value; }
93
+
94
+ // ─── Core reflection operations ─────────────────────────────
95
+
96
+ /// <summary>
97
+ /// Get the ProBuilderMesh component from a GameObject via reflection.
98
+ /// Returns null if the component is not present or the package is missing.
99
+ /// </summary>
100
+ public static object GetProBuilderMesh(GameObject go)
101
+ {
102
+ var type = ProBuilderMeshType.Value;
103
+ if (type == null || go == null) return null;
104
+ return go.GetComponent(type);
105
+ }
106
+
107
+ /// <summary>
108
+ /// Check if a GameObject has a ProBuilderMesh component.
109
+ /// </summary>
110
+ public static bool HasProBuilderMesh(GameObject go)
111
+ {
112
+ return GetProBuilderMesh(go) != null;
113
+ }
114
+
115
+ /// <summary>
116
+ /// Call ShapeGenerator.CreateShape via reflection to create a ProBuilder primitive.
117
+ /// Returns the created GameObject, or null on failure.
118
+ /// </summary>
119
+ public static GameObject CreateShape(string shapeType, Vector3 position, Quaternion rotation)
120
+ {
121
+ var type = ShapeGeneratorType.Value;
122
+ if (type == null) return null;
123
+ try
124
+ {
125
+ // ProBuilder 5.x 返回 ProBuilderMesh,并要求显式 PivotLocation。
126
+ var shapeTypeEnum = ParseShapeType(shapeType);
127
+ if (shapeTypeEnum != null && ShapeTypeType.Value != null && PivotLocationType.Value != null)
128
+ {
129
+ var methodInfo = type.GetMethod("CreateShape", new[] { ShapeTypeType.Value, PivotLocationType.Value });
130
+ if (methodInfo != null)
131
+ {
132
+ var pivot = Enum.Parse(PivotLocationType.Value, "Center", true);
133
+ var created = methodInfo.Invoke(null, new[] { shapeTypeEnum, pivot });
134
+ var go = created as GameObject ?? (created as Component)?.gameObject;
135
+ if (go != null)
136
+ {
137
+ go.transform.position = position;
138
+ go.transform.rotation = rotation;
139
+ }
140
+ return go;
141
+ }
142
+ }
143
+
144
+ return null;
145
+ }
146
+ catch (Exception) { }
147
+ return null;
148
+ }
149
+
150
+ /// <summary>
151
+ /// Parse a string shape name into the ShapeType enum value via reflection.
152
+ /// Returns null if the type cannot be resolved.
153
+ /// </summary>
154
+ public static object ParseShapeType(string shapeName)
155
+ {
156
+ var shapeTypeEnumType = ShapeTypeType.Value;
157
+ if (shapeTypeEnumType == null || string.IsNullOrEmpty(shapeName)) return null;
158
+ try
159
+ {
160
+ // Normalize
161
+ var normalized = shapeName.Trim();
162
+ // Map common aliases
163
+ switch (normalized.ToLowerInvariant())
164
+ {
165
+ case "cube":
166
+ case "box":
167
+ return Enum.Parse(shapeTypeEnumType, "Cube");
168
+ case "sphere":
169
+ return Enum.Parse(shapeTypeEnumType, "Sphere");
170
+ case "cylinder":
171
+ return Enum.Parse(shapeTypeEnumType, "Cylinder");
172
+ case "plane":
173
+ case "quad":
174
+ return Enum.Parse(shapeTypeEnumType, "Plane");
175
+ case "cone":
176
+ return Enum.Parse(shapeTypeEnumType, "Cone");
177
+ case "torus":
178
+ return Enum.Parse(shapeTypeEnumType, "Torus");
179
+ case "pipe":
180
+ return Enum.Parse(shapeTypeEnumType, "Pipe");
181
+ case "arch":
182
+ return Enum.Parse(shapeTypeEnumType, "Arch");
183
+ case "stair":
184
+ return Enum.Parse(shapeTypeEnumType, "Stair");
185
+ case "curvedstair":
186
+ case "curved_stair":
187
+ return Enum.Parse(shapeTypeEnumType, "CurvedStair");
188
+ case "door":
189
+ return Enum.Parse(shapeTypeEnumType, "Door");
190
+ case "prism":
191
+ return Enum.Parse(shapeTypeEnumType, "Prism");
192
+ default:
193
+ // Try direct enum parse
194
+ return Enum.Parse(shapeTypeEnumType, normalized, true);
195
+ }
196
+ }
197
+ catch (Exception) { return null; }
198
+ }
199
+
200
+ /// <summary>通过 ProBuilder 5.x DeleteElements 删除面。</summary>
201
+ public static bool DeleteFaces(object mesh, int[] faceIndices)
202
+ {
203
+ var type = DeleteElementsType.Value;
204
+ if (type == null || mesh == null || faceIndices == null || faceIndices.Length == 0) return false;
205
+ try
206
+ {
207
+ var methodInfo = type.GetMethod("DeleteFaces", BindingFlags.Static | BindingFlags.Public, null,
208
+ new[] { ProBuilderMeshType.Value, typeof(IList<int>) }, null);
209
+ return methodInfo != null && methodInfo.Invoke(null, new object[] { mesh, faceIndices.ToList() }) is int[];
210
+ }
211
+ catch (Exception) { return false; }
212
+ }
213
+
214
+ /// <summary>通过 ProBuilder 5.x Face.smoothingGroup 设置平滑组。</summary>
215
+ public static bool ApplySmoothingGroup(object mesh, int[] faceIndices, int smoothingGroup)
216
+ {
217
+ var faces = GetFacesByIndices(mesh, faceIndices);
218
+ if (mesh == null || faces == null || faces.Length == 0) return false;
219
+ try
220
+ {
221
+ var property = FaceType.Value?.GetProperty("smoothingGroup");
222
+ if (property == null || !property.CanWrite) return false;
223
+ foreach (var face in faces) property.SetValue(face, smoothingGroup);
224
+ return true;
225
+ }
226
+ catch (Exception) { return false; }
227
+ }
228
+
229
+ /// <summary>通过 ProBuilder 5.x Smoothing.ApplySmoothingGroups 自动分组。</summary>
230
+ public static bool ApplySmoothingGroups(object mesh, int[] faceIndices, float angleThreshold)
231
+ {
232
+ var type = SmoothingType.Value;
233
+ var faces = GetFacesByIndices(mesh, faceIndices);
234
+ if (type == null || mesh == null || faces == null || faces.Length == 0) return false;
235
+ try
236
+ {
237
+ var faceEnumerableType = typeof(IEnumerable<>).MakeGenericType(FaceType.Value);
238
+ var methodInfo = type.GetMethod("ApplySmoothingGroups", BindingFlags.Static | BindingFlags.Public, null,
239
+ new[] { ProBuilderMeshType.Value, faceEnumerableType, typeof(float) }, null);
240
+ if (methodInfo == null) return false;
241
+ methodInfo.Invoke(null, new object[] { mesh, faces, angleThreshold });
242
+ return true;
243
+ }
244
+ catch (Exception) { return false; }
245
+ }
246
+
247
+ /// <summary>统计包含退化三角形的面数量。</summary>
248
+ public static int CountDegenerateFaces(object mesh)
249
+ {
250
+ var faces = GetAllFaces(mesh);
251
+ if (MeshValidationType.Value == null || mesh == null || faces == null) return -1;
252
+ try
253
+ {
254
+ var method = MeshValidationType.Value.GetMethod("ContainsDegenerateTriangles", BindingFlags.Static | BindingFlags.Public, null,
255
+ new[] { ProBuilderMeshType.Value, FaceType.Value }, null);
256
+ if (method == null) return -1;
257
+ var count = 0;
258
+ foreach (var face in faces)
259
+ {
260
+ if (method.Invoke(null, new[] { mesh, face }) is bool contains && contains) count++;
261
+ }
262
+ return count;
263
+ }
264
+ catch (Exception) { return -1; }
265
+ }
266
+
267
+ /// <summary>按 face indexes 统计未被任何面引用的顶点。</summary>
268
+ public static int CountUnusedVertices(object mesh)
269
+ {
270
+ var faces = GetAllFaces(mesh);
271
+ var vertexCount = GetVertexCount(mesh);
272
+ if (mesh == null || faces == null || vertexCount < 0) return -1;
273
+ try
274
+ {
275
+ var indexesProperty = FaceType.Value?.GetProperty("indexes");
276
+ if (indexesProperty == null) return -1;
277
+ var referenced = new HashSet<int>();
278
+ foreach (var face in faces)
279
+ {
280
+ if (!(indexesProperty.GetValue(face) is System.Collections.IEnumerable indexes)) return -1;
281
+ foreach (var index in indexes) referenced.Add((int)index);
282
+ }
283
+ return Math.Max(0, vertexCount - referenced.Count);
284
+ }
285
+ catch (Exception) { return -1; }
286
+ }
287
+
288
+ // ─── Mesh property accessors via reflection ──────────────────
289
+
290
+ /// <summary>
291
+ /// Get the face count from a ProBuilderMesh via reflection.
292
+ /// </summary>
293
+ public static int GetFaceCount(object mesh)
294
+ {
295
+ if (mesh == null) return -1;
296
+ try
297
+ {
298
+ return ProBuilderMeshType.Value?.GetProperty("faceCount")?.GetValue(mesh) is int count ? count : -1;
299
+ }
300
+ catch (Exception) { return -1; }
301
+ }
302
+
303
+ /// <summary>读取 ProBuilder 5.x vertexCount。</summary>
304
+ public static int GetVertexCount(object mesh)
305
+ {
306
+ if (mesh == null) return -1;
307
+ try
308
+ {
309
+ return ProBuilderMeshType.Value?.GetProperty("vertexCount")?.GetValue(mesh) is int count ? count : -1;
310
+ }
311
+ catch (Exception) { return -1; }
312
+ }
313
+
314
+ /// <summary>读取 ProBuilder 5.x edgeCount。</summary>
315
+ public static int GetEdgeCount(object mesh)
316
+ {
317
+ if (mesh == null) return -1;
318
+ try
319
+ {
320
+ return ProBuilderMeshType.Value?.GetProperty("edgeCount")?.GetValue(mesh) is int count ? count : -1;
321
+ }
322
+ catch (Exception) { return -1; }
323
+ }
324
+
325
+ /// <summary>
326
+ /// Get faces by indices from a ProBuilderMesh via reflection.
327
+ /// Returns an Array of Face objects or null.
328
+ /// </summary>
329
+ public static Array GetFacesByIndices(object mesh, int[] indices)
330
+ {
331
+ if (mesh == null || indices == null) return null;
332
+ try
333
+ {
334
+ var facesProp = ProBuilderMeshType.Value?.GetProperty("faces");
335
+ if (facesProp == null) return null;
336
+ var allFaces = facesProp.GetValue(mesh) as System.Collections.IList;
337
+ if (allFaces == null) return null;
338
+ var faceType = FaceType.Value;
339
+ if (faceType == null) return null;
340
+ var result = Array.CreateInstance(faceType, indices.Length);
341
+ for (var i = 0; i < indices.Length; i++)
342
+ {
343
+ if (indices[i] < 0 || indices[i] >= allFaces.Count) return null;
344
+ result.SetValue(allFaces[indices[i]], i);
345
+ }
346
+ return result;
347
+ }
348
+ catch (Exception) { return null; }
349
+ }
350
+
351
+ /// <summary>
352
+ /// Get all faces from a ProBuilderMesh via reflection.
353
+ /// </summary>
354
+ public static Array GetAllFaces(object mesh)
355
+ {
356
+ if (mesh == null) return null;
357
+ try
358
+ {
359
+ var faces = ProBuilderMeshType.Value?.GetProperty("faces")?.GetValue(mesh) as System.Collections.IList;
360
+ if (faces == null || FaceType.Value == null) return null;
361
+ var result = Array.CreateInstance(FaceType.Value, faces.Count);
362
+ faces.CopyTo(result, 0);
363
+ return result;
364
+ }
365
+ catch (Exception) { return null; }
366
+ }
367
+
368
+ /// <summary>通过 ProBuilder 5.x 精确签名重建并刷新全部派生通道。</summary>
369
+ public static bool RefreshMesh(object mesh) => RefreshMesh(mesh, "All", false);
370
+
371
+ /// <summary>保留 raw Vertex payload,并在派生通道刷新后同步回 compiled Mesh。</summary>
372
+ public static bool RefreshMeshPreservingVertexPayload(object mesh) => RefreshMesh(mesh, "Normals, Tangents, Collisions, Bounds", true);
373
+
374
+ /// <summary>按固定 RefreshMask 刷新;payload-preserving 路径不执行 Auto UV。</summary>
375
+ private static bool RefreshMesh(object mesh, string mask, bool applyVertexPayload)
376
+ {
377
+ if (mesh == null) return false;
378
+ try
379
+ {
380
+ var meshType = ProBuilderMeshType.Value;
381
+ var refreshMaskType = FindType("UnityEngine.ProBuilder.RefreshMask");
382
+ var vertexType = applyVertexPayload ? FindType("UnityEngine.ProBuilder.Vertex") : null;
383
+ var vertexListType = vertexType == null ? null : typeof(IList<>).MakeGenericType(vertexType);
384
+ var toMesh = meshType?.GetMethod("ToMesh", new[] { typeof(MeshTopology) });
385
+ var refresh = meshType?.GetMethod("Refresh", new[] { refreshMaskType });
386
+ var getVertices = applyVertexPayload ? meshType?.GetMethod("GetVertices", new[] { typeof(IList<int>) }) : null;
387
+ var setVertices = applyVertexPayload && vertexListType != null
388
+ ? meshType?.GetMethod("SetVertices", new[] { vertexListType, typeof(bool) })
389
+ : null;
390
+ if (toMesh == null || refresh == null || (applyVertexPayload && (getVertices == null || setVertices == null))) return false;
391
+ toMesh.Invoke(mesh, new object[] { MeshTopology.Triangles });
392
+ var refreshMask = Enum.Parse(refresh.GetParameters()[0].ParameterType, mask, true);
393
+ refresh.Invoke(mesh, new[] { refreshMask });
394
+ if (applyVertexPayload)
395
+ {
396
+ var vertices = getVertices.Invoke(mesh, new object[] { null });
397
+ if (vertices == null) return false;
398
+ setVertices.Invoke(mesh, new[] { vertices, (object)true });
399
+ }
400
+ return true;
401
+ }
402
+ catch (Exception) { return false; }
403
+ }
404
+
405
+ /// <summary>通过 ProBuilder 5.x MeshImporter(GameObject) 导入普通 Mesh。</summary>
406
+ public static object ConvertToProBuilderMesh(GameObject go)
407
+ {
408
+ if (go == null || MeshImporterType.Value == null || MeshImportSettingsType.Value == null) return null;
409
+ if (GetProBuilderMesh(go) != null) return null;
410
+ UnityEngine.Object component = null;
411
+ try
412
+ {
413
+ var constructor = MeshImporterType.Value.GetConstructor(new[] { typeof(GameObject) });
414
+ var import = MeshImporterType.Value.GetMethod("Import", new[] { MeshImportSettingsType.Value });
415
+ if (constructor == null || import == null) return null;
416
+ var importer = constructor.Invoke(new object[] { go });
417
+ component = GetProBuilderMesh(go) as UnityEngine.Object;
418
+ if (component == null) return null;
419
+ import.Invoke(importer, new object[] { null });
420
+ Undo.RegisterCreatedObjectUndo(component, "ProBuilder Convert to ProBuilder");
421
+ return component;
422
+ }
423
+ catch (Exception)
424
+ {
425
+ if (component != null) UnityEngine.Object.DestroyImmediate(component);
426
+ return null;
427
+ }
428
+ }
429
+
430
+ // ─── Edge resolution helpers ────────────────────────────────────
431
+
432
+ /// <summary>
433
+ /// Create an Edge object from two vertex indices via reflection.
434
+ /// </summary>
435
+ public static object CreateEdge(int a, int b)
436
+ {
437
+ var edgeType = EdgeType.Value;
438
+ if (edgeType == null) return null;
439
+ try
440
+ {
441
+ var ctor = edgeType.GetConstructor(new[] { typeof(int), typeof(int) });
442
+ return ctor?.Invoke(new object[] { a, b });
443
+ }
444
+ catch (Exception) { return null; }
445
+ }
446
+
447
+ /// <summary>
448
+ /// Get field/property value 'a' from an Edge object.
449
+ /// </summary>
450
+ public static int GetEdgeVertexA(object edge)
451
+ {
452
+ if (edge == null) return -1;
453
+ var edgeType = EdgeType.Value;
454
+ if (edgeType == null) return -1;
455
+ var f = edgeType.GetField("a");
456
+ if (f != null) return (int)f.GetValue(edge);
457
+ var p = edgeType.GetProperty("a");
458
+ return p != null ? (int)p.GetValue(edge) : -1;
459
+ }
460
+
461
+ /// <summary>
462
+ /// Get field/property value 'b' from an Edge object.
463
+ /// </summary>
464
+ public static int GetEdgeVertexB(object edge)
465
+ {
466
+ if (edge == null) return -1;
467
+ var edgeType = EdgeType.Value;
468
+ if (edgeType == null) return -1;
469
+ var f = edgeType.GetField("b");
470
+ if (f != null) return (int)f.GetValue(edge);
471
+ var p = edgeType.GetProperty("b");
472
+ return p != null ? (int)p.GetValue(edge) : -1;
473
+ }
474
+
475
+ /// <summary>
476
+ /// Collect unique (deduplicated) edges from the mesh.
477
+ /// Edges shared between faces appear only once.
478
+ /// </summary>
479
+ public static List<object> CollectUniqueEdges(object mesh)
480
+ {
481
+ var allFaces = GetAllFaces(mesh);
482
+ if (allFaces == null) return new List<object>();
483
+ var uniqueEdges = new List<object>();
484
+ var edgeSet = new HashSet<(int, int)>();
485
+ var faceType = FaceType.Value;
486
+ if (faceType == null) return new List<object>();
487
+ var edgesProp = faceType.GetProperty("edges");
488
+ if (edgesProp == null) return new List<object>();
489
+
490
+ // Build shared vertex lookup for correct deduplication
491
+ var sharedLookup = BuildSharedVertexLookup(mesh);
492
+
493
+ foreach (var face in allFaces)
494
+ {
495
+ var faceEdges = edgesProp.GetValue(face) as System.Collections.IList;
496
+ if (faceEdges == null) continue;
497
+ foreach (var edge in faceEdges)
498
+ {
499
+ int a = GetEdgeVertexA(edge);
500
+ int b = GetEdgeVertexB(edge);
501
+ int sa = sharedLookup != null && sharedLookup.ContainsKey(a) ? sharedLookup[a] : a;
502
+ int sb = sharedLookup != null && sharedLookup.ContainsKey(b) ? sharedLookup[b] : b;
503
+ var key = (Math.Min(sa, sb), Math.Max(sa, sb));
504
+ if (edgeSet.Add(key))
505
+ uniqueEdges.Add(edge);
506
+ }
507
+ }
508
+ return uniqueEdges;
509
+ }
510
+
511
+ /// <summary>
512
+ /// Build a shared vertex lookup: maps vertex index -> shared vertex group index.
513
+ /// </summary>
514
+ private static Dictionary<int, int> BuildSharedVertexLookup(object mesh)
515
+ {
516
+ var meshType = ProBuilderMeshType.Value;
517
+ if (meshType == null) return null;
518
+ try
519
+ {
520
+ var sharedVerticesProp = meshType.GetProperty("sharedVertices");
521
+ var sharedVertices = sharedVerticesProp?.GetValue(mesh) as System.Collections.IList;
522
+ if (sharedVertices == null) return null;
523
+ var lookup = new Dictionary<int, int>();
524
+ for (int groupIdx = 0; groupIdx < sharedVertices.Count; groupIdx++)
525
+ {
526
+ var group = sharedVertices[groupIdx] as System.Collections.IEnumerable;
527
+ if (group == null) continue;
528
+ foreach (object vertIdx in group)
529
+ lookup[(int)vertIdx] = groupIdx;
530
+ }
531
+ return lookup;
532
+ }
533
+ catch (Exception) { return null; }
534
+ }
535
+
536
+ /// <summary>
537
+ /// Resolve edges from int[] edgeIndices (indices into the unique edge list) or
538
+ /// vertex pair objects [{a,b},...]. Returns a typed Edge[] array.
539
+ /// </summary>
540
+ public static Array ResolveEdges(object mesh, int[] edgeIndices, ProBuilderInput.EdgePair[] edgePairs)
541
+ {
542
+ var edgeType = EdgeType.Value;
543
+ if (edgeType == null || mesh == null) return null;
544
+ // 两种选择编码同时出现时不能猜测优先级;调用方必须在 effect 前修正请求。
545
+ if (edgeIndices != null && edgeIndices.Length > 0 && edgePairs != null && edgePairs.Length > 0) return null;
546
+ var edgeList = new List<object>();
547
+
548
+ if (edgePairs != null && edgePairs.Length > 0)
549
+ {
550
+ var allEdges = CollectUniqueEdges(mesh);
551
+ foreach (var pair in edgePairs)
552
+ {
553
+ if (pair.a == pair.b) return null;
554
+ // Edge 是值类型,构造成功并不代表该 pair 是当前网格的真实 unique edge。
555
+ var edge = allEdges.FirstOrDefault(candidate =>
556
+ (GetEdgeVertexA(candidate) == pair.a && GetEdgeVertexB(candidate) == pair.b) ||
557
+ (GetEdgeVertexA(candidate) == pair.b && GetEdgeVertexB(candidate) == pair.a));
558
+ if (edge == null) return null;
559
+ edgeList.Add(edge);
560
+ }
561
+ }
562
+ else if (edgeIndices != null && edgeIndices.Length > 0)
563
+ {
564
+ var allEdges = CollectUniqueEdges(mesh);
565
+ foreach (int idx in edgeIndices)
566
+ {
567
+ if (idx >= 0 && idx < allEdges.Count)
568
+ edgeList.Add(allEdges[idx]);
569
+ }
570
+ }
571
+
572
+ if (edgeList.Count == 0 || edgeList.Select(edge =>
573
+ {
574
+ var a = GetEdgeVertexA(edge); var b = GetEdgeVertexB(edge);
575
+ return a < b ? a + ":" + b : b + ":" + a;
576
+ }).Distinct().Count() != edgeList.Count) return null;
577
+ var edgeArray = Array.CreateInstance(edgeType, edgeList.Count);
578
+ for (int i = 0; i < edgeList.Count; i++)
579
+ edgeArray.SetValue(edgeList[i], i);
580
+ return edgeArray;
581
+ }
582
+
583
+ /// <summary>
584
+ /// Convert a Face[] array to a typed List&lt;Face&gt; for APIs that require IList&lt;Face&gt;.
585
+ /// </summary>
586
+ public static System.Collections.IList ToTypedFaceList(Array faces)
587
+ {
588
+ var faceType = FaceType.Value;
589
+ if (faceType == null || faces == null) return null;
590
+ var faceListType = typeof(List<>).MakeGenericType(faceType);
591
+ var faceList = Activator.CreateInstance(faceListType) as System.Collections.IList;
592
+ foreach (var face in faces) faceList.Add(face);
593
+ return faceList;
594
+ }
595
+
596
+ /// <summary>通过 ProBuilder 5.x ElementSelection 执行种子面选择。</summary>
597
+ public static Array SelectFaces(object mesh, Array seeds, string operation, int growIterations)
598
+ {
599
+ var selectionType = ElementSelectionType.Value;
600
+ var faceType = FaceType.Value;
601
+ if (selectionType == null || faceType == null || mesh == null || seeds == null || seeds.Length == 0) return null;
602
+ try
603
+ {
604
+ if (operation == "grow")
605
+ {
606
+ var enumerableType = typeof(IEnumerable<>).MakeGenericType(faceType);
607
+ var method = selectionType.GetMethod("GrowSelection", BindingFlags.Static | BindingFlags.Public, null,
608
+ new[] { ProBuilderMeshType.Value, enumerableType, typeof(float) }, null);
609
+ if (method == null) return null;
610
+ var current = seeds;
611
+ for (var iteration = 0; iteration < growIterations; iteration++)
612
+ {
613
+ var neighboring = ToTypedFaceArray(method.Invoke(null, new object[] { mesh, current, -1f }));
614
+ if (neighboring == null) return null;
615
+ current = UnionFaceArrays(current, neighboring);
616
+ }
617
+ return current;
618
+ }
619
+
620
+ if (operation == "flood")
621
+ {
622
+ var listType = typeof(IList<>).MakeGenericType(faceType);
623
+ var method = selectionType.GetMethod("FloodSelection", BindingFlags.Static | BindingFlags.Public, null,
624
+ new[] { ProBuilderMeshType.Value, listType, typeof(float) }, null);
625
+ return method == null ? null : ToTypedFaceArray(method.Invoke(null, new object[] { mesh, ToTypedFaceList(seeds), -1f }));
626
+ }
627
+
628
+ var loopMethod = selectionType.GetMethod("GetFaceLoop", BindingFlags.Static | BindingFlags.Public, null,
629
+ new[] { ProBuilderMeshType.Value, faceType.MakeArrayType(), typeof(bool) }, null);
630
+ return loopMethod == null ? null : ToTypedFaceArray(loopMethod.Invoke(null, new object[] { mesh, seeds, operation == "ring" }));
631
+ }
632
+ catch (Exception) { return null; }
633
+ }
634
+
635
+ /// <summary>合并当前面与增长结果,保持 grow selection 包含原种子。</summary>
636
+ private static Array UnionFaceArrays(Array current, Array neighboring)
637
+ {
638
+ var faces = new List<object>();
639
+ foreach (var face in current) faces.Add(face);
640
+ foreach (var face in neighboring)
641
+ {
642
+ if (!faces.Any(existing => ReferenceEquals(existing, face))) faces.Add(face);
643
+ }
644
+ var result = Array.CreateInstance(FaceType.Value, faces.Count);
645
+ for (var index = 0; index < faces.Count; index++) result.SetValue(faces[index], index);
646
+ return result;
647
+ }
648
+
649
+ /// <summary>把 Face 集合转换为强类型 Face[]。</summary>
650
+ private static Array ToTypedFaceArray(object value)
651
+ {
652
+ if (!(value is System.Collections.IEnumerable enumerable) || FaceType.Value == null) return null;
653
+ var faces = new List<object>();
654
+ foreach (var face in enumerable) faces.Add(face);
655
+ var result = Array.CreateInstance(FaceType.Value, faces.Count);
656
+ for (var index = 0; index < faces.Count; index++) result.SetValue(faces[index], index);
657
+ return result;
658
+ }
659
+
660
+ /// <summary>
661
+ /// Convert an Edge[] array to a typed List&lt;Edge&gt; for APIs that require IList&lt;Edge&gt;.
662
+ /// </summary>
663
+ public static System.Collections.IList ToTypedEdgeList(Array edges)
664
+ {
665
+ var edgeType = EdgeType.Value;
666
+ if (edgeType == null) return null;
667
+ var edgeListType = typeof(List<>).MakeGenericType(edgeType);
668
+ var typedList = Activator.CreateInstance(edgeListType) as System.Collections.IList;
669
+ foreach (var e in edges)
670
+ typedList.Add(e);
671
+ return typedList;
672
+ }
673
+
674
+ // ─── ProBuilder API methods via reflection ────────────────────────
675
+
676
+ /// <summary>
677
+ /// Call ExtrudeElements.Extrude for edges via reflection.
678
+ /// Supports edgeIndices or vertex pair [{a,b}] specification.
679
+ /// </summary>
680
+ public static bool TryExtrudeFrozenEdges(object mesh, Array frozenEdges, float distance, bool asGroup, out int actualCount)
681
+ {
682
+ actualCount = 0;
683
+ var extrudeElements = ExtrudeElementsType.Value;
684
+ if (extrudeElements == null || mesh == null || frozenEdges == null || frozenEdges.Length == 0 || EdgeType.Value == null || frozenEdges.GetType().GetElementType() != EdgeType.Value) return false;
685
+ try
686
+ {
687
+ var edgeEnumerableType = typeof(IEnumerable<>).MakeGenericType(EdgeType.Value);
688
+ var method = extrudeElements.GetMethod("Extrude", BindingFlags.Static | BindingFlags.Public, null,
689
+ new[] { ProBuilderMeshType.Value, edgeEnumerableType, typeof(float), typeof(bool), typeof(bool) }, null);
690
+ if (method == null) return false;
691
+ var result = method.Invoke(null, new object[] { mesh, frozenEdges, distance, asGroup, false }) as Array;
692
+ actualCount = result == null ? 0 : result.Length;
693
+ return true;
694
+ }
695
+ catch (Exception) { return false; }
696
+ }
697
+
698
+ /// <summary>
699
+ /// Call AppendElements.Bridge via reflection.
700
+ /// </summary>
701
+ public static bool TryBridgeFrozenEdges(object mesh, object frozenEdgeA, object frozenEdgeB, bool allowNonManifold, out bool createdFace)
702
+ {
703
+ createdFace = false;
704
+ var appendElements = AppendElementsType.Value;
705
+ var edgeType = EdgeType.Value;
706
+ if (appendElements == null || mesh == null || edgeType == null || frozenEdgeA == null || frozenEdgeB == null || frozenEdgeA.GetType() != edgeType || frozenEdgeB.GetType() != edgeType) return false;
707
+ try
708
+ {
709
+ var method = appendElements.GetMethod("Bridge", BindingFlags.Static | BindingFlags.Public, null,
710
+ new[] { ProBuilderMeshType.Value, edgeType, edgeType, typeof(bool) }, null);
711
+ if (method == null) return false;
712
+ createdFace = method.Invoke(null, new object[] { mesh, frozenEdgeA, frozenEdgeB, allowNonManifold }) != null;
713
+ return true;
714
+ }
715
+ catch (Exception) { return false; }
716
+ }
717
+ /// <summary>
718
+ /// Call AppendElements.CreatePolygon via reflection.
719
+ /// </summary>
720
+ public static bool CreatePolygon(object mesh, int[] vertexIndices, bool unordered)
721
+ {
722
+ var appendType = AppendElementsType.Value;
723
+ if (appendType == null || mesh == null) return false;
724
+
725
+ try
726
+ {
727
+ var method = appendType.GetMethod("CreatePolygon",
728
+ BindingFlags.Static | BindingFlags.Public,
729
+ null,
730
+ new[] { ProBuilderMeshType.Value, typeof(IList<int>), typeof(bool) },
731
+ null);
732
+
733
+ if (method != null)
734
+ {
735
+ method.Invoke(null, new object[] { mesh, vertexIndices.ToList(), unordered });
736
+ return true;
737
+ }
738
+ }
739
+ catch (Exception) { }
740
+ return false;
741
+ }
742
+
743
+ /// <summary>
744
+ /// Call AppendElements.AppendVerticesToEdge via reflection.
745
+ /// </summary>
746
+ public static bool AppendVerticesToEdge(object mesh, Array edgeArray, int count)
747
+ {
748
+ var appendType = AppendElementsType.Value;
749
+ if (appendType == null || mesh == null) return false;
750
+
751
+ var typedList = ToTypedEdgeList(edgeArray);
752
+ if (typedList == null) return false;
753
+
754
+ try
755
+ {
756
+ var edgeListType = typeof(IList<>).MakeGenericType(EdgeType.Value);
757
+ var method = appendType.GetMethod("AppendVerticesToEdge", BindingFlags.Static | BindingFlags.Public, null,
758
+ new[] { ProBuilderMeshType.Value, edgeListType, typeof(int) }, null);
759
+ return method != null && method.Invoke(null, new object[] { mesh, typedList, count }) != null;
760
+ }
761
+ catch (Exception) { return false; }
762
+ }
763
+
764
+ /// <summary>通过 ProBuilder 5.x AppendElements 在边上插入顶点。</summary>
765
+ public static bool InsertVertexOnEdgeByPair(object mesh, int edgeA, int edgeB, Vector3 point)
766
+ {
767
+ var appendType = AppendElementsType.Value;
768
+ var edge = CreateEdge(edgeA, edgeB);
769
+ if (appendType == null || mesh == null || edge == null) return false;
770
+ try
771
+ {
772
+ var method = appendType.GetMethod("InsertVertexOnEdge", BindingFlags.Static | BindingFlags.Public, null,
773
+ new[] { ProBuilderMeshType.Value, EdgeType.Value, typeof(Vector3) }, null);
774
+ return method != null && method.Invoke(null, new object[] { mesh, edge, point }) != null;
775
+ }
776
+ catch (Exception) { return false; }
777
+ }
778
+
779
+ /// <summary>
780
+ /// Call AppendElements.InsertVertexInFace via reflection.
781
+ /// </summary>
782
+ public static bool InsertVertexInFace(object mesh, int faceIndex, Vector3 point)
783
+ {
784
+ var appendType = AppendElementsType.Value;
785
+ if (appendType == null || mesh == null) return false;
786
+
787
+ var allFaces = GetAllFaces(mesh) as System.Collections.IList;
788
+ if (allFaces == null || faceIndex < 0 || faceIndex >= allFaces.Count) return false;
789
+ var face = allFaces[faceIndex];
790
+
791
+ try
792
+ {
793
+ var method = appendType.GetMethod("InsertVertexInFace",
794
+ BindingFlags.Static | BindingFlags.Public,
795
+ null,
796
+ new[] { ProBuilderMeshType.Value, FaceType.Value, typeof(Vector3) },
797
+ null);
798
+
799
+ return method?.Invoke(null, new object[] { mesh, face, point }) is Array insertedFaces && insertedFaces.Length > 0;
800
+ }
801
+ catch (Exception) { return false; }
802
+ }
803
+
804
+ /// <summary>
805
+ /// Call VertexEditing.MergeVertices via reflection.
806
+ /// </summary>
807
+ public static bool TryMergeVerticesWithCollapse(object mesh, int[] vertexIndices, bool collapseToFirst, out int mergedIndex)
808
+ {
809
+ mergedIndex = -1;
810
+ var vertexEditing = VertexEditingType.Value;
811
+ if (vertexEditing == null || mesh == null) return false;
812
+
813
+ try
814
+ {
815
+ var method = vertexEditing.GetMethod("MergeVertices", BindingFlags.Static | BindingFlags.Public, null,
816
+ new[] { ProBuilderMeshType.Value, typeof(int[]), typeof(bool) }, null);
817
+ if (method == null) return false;
818
+ var value = method.Invoke(null, new object[] { mesh, vertexIndices, collapseToFirst });
819
+ if (!(value is int)) return false;
820
+ mergedIndex = (int)value;
821
+ return true;
822
+ }
823
+ catch (Exception) { return false; }
824
+ }
825
+
826
+ /// <summary>
827
+ /// Call VertexEditing.WeldVertices via reflection (with radius).
828
+ /// </summary>
829
+ public static bool TryWeldVerticesWithRadius(object mesh, int[] vertexIndices, float radius, out int weldedCount)
830
+ {
831
+ weldedCount = 0;
832
+ var vertexEditing = VertexEditingType.Value;
833
+ if (vertexEditing == null || mesh == null) return false;
834
+
835
+ try
836
+ {
837
+ var vertexEnumerableType = typeof(IEnumerable<int>);
838
+ var method = vertexEditing.GetMethod("WeldVertices", BindingFlags.Static | BindingFlags.Public, null,
839
+ new[] { ProBuilderMeshType.Value, vertexEnumerableType, typeof(float) }, null);
840
+ if (method == null) return false;
841
+ var welded = method.Invoke(null, new object[] { mesh, vertexIndices, radius }) as int[];
842
+ if (welded == null) return false;
843
+ weldedCount = welded.Length;
844
+ return true;
845
+ }
846
+ catch (Exception) { return false; }
847
+ }
848
+
849
+ /// <summary>
850
+ /// Call VertexEditing.SplitVertices via reflection (with IList overload).
851
+ /// </summary>
852
+ public static int SplitVerticesWithList(object mesh, int[] vertexIndices)
853
+ {
854
+ var vertexEditing = VertexEditingType.Value;
855
+ if (vertexEditing == null || mesh == null) return -1;
856
+
857
+ try
858
+ {
859
+ var method = vertexEditing.GetMethod("SplitVertices", BindingFlags.Static | BindingFlags.Public, null,
860
+ new[] { ProBuilderMeshType.Value, typeof(IEnumerable<int>) }, null);
861
+ if (method == null) return -1;
862
+ method.Invoke(null, new object[] { mesh, vertexIndices });
863
+ return vertexIndices.Length;
864
+ }
865
+ catch (Exception) { return -1; }
866
+ }
867
+
868
+ /// <summary>
869
+ /// Call MeshOperations.SetVertexPositions properly via the positions property.
870
+ /// Gets positions, modifies them, then sets back via property setter or method.
871
+ /// </summary>
872
+ public static int MoveVerticesByOffset(object mesh, int[] vertexIndices, Vector3 offset)
873
+ {
874
+ if (mesh == null) return 0;
875
+ try
876
+ {
877
+ var positionsProp = ProBuilderMeshType.Value?.GetProperty("positions");
878
+ if (positionsProp == null) return 0;
879
+ var positions = positionsProp.GetValue(mesh) as IList<Vector3>;
880
+ if (positions == null) return 0;
881
+ var posList = new List<Vector3>(positions);
882
+ foreach (int idx in vertexIndices)
883
+ {
884
+ if (idx >= 0 && idx < posList.Count)
885
+ posList[idx] += offset;
886
+ }
887
+ if (positionsProp.CanWrite)
888
+ positionsProp.SetValue(mesh, posList);
889
+ else
890
+ {
891
+ var setPositionsMethod = ProBuilderMeshType.Value?.GetMethod("SetPositions",
892
+ BindingFlags.Instance | BindingFlags.Public);
893
+ if (setPositionsMethod != null)
894
+ setPositionsMethod.Invoke(mesh, new object[] { posList.ToArray() });
895
+ }
896
+ return vertexIndices.Length;
897
+ }
898
+ catch (Exception) { return 0; }
899
+ }
900
+
901
+ /// <summary>移除退化三角形并返回 ProBuilder 报告的索引数量。</summary>
902
+ public static int RemoveDegenerateTriangles(object mesh)
903
+ {
904
+ return InvokeMeshRepair("RemoveDegenerateTriangles", mesh);
905
+ }
906
+
907
+ /// <summary>移除未使用顶点并返回 ProBuilder 报告的索引数量。</summary>
908
+ public static int RemoveUnusedVertices(object mesh)
909
+ {
910
+ return InvokeMeshRepair("RemoveUnusedVertices", mesh);
911
+ }
912
+
913
+ /// <summary>调用 ProBuilder 5.x MeshValidation 修复 API。</summary>
914
+ private static int InvokeMeshRepair(string methodName, object mesh)
915
+ {
916
+ if (MeshValidationType.Value == null || mesh == null) return -1;
917
+ try
918
+ {
919
+ var method = MeshValidationType.Value.GetMethod(methodName, BindingFlags.Static | BindingFlags.Public, null,
920
+ new[] { ProBuilderMeshType.Value, typeof(List<int>) }, null);
921
+ if (method == null) return -1;
922
+ var removed = new List<int>();
923
+ method.Invoke(null, new object[] { mesh, removed });
924
+ return removed.Count;
925
+ }
926
+ catch (Exception) { return -1; }
927
+ }
928
+
929
+ /// <summary>
930
+ /// Call CombineMeshes.Combine via reflection.
931
+ /// </summary>
932
+ public static bool CombineMeshesViaReflection(object[] pbMeshes, object targetMesh)
933
+ {
934
+ var combineType = CombineMeshesType.Value;
935
+ var meshType = ProBuilderMeshType.Value;
936
+ if (combineType == null || meshType == null || pbMeshes == null || targetMesh == null) return false;
937
+ try
938
+ {
939
+ var listType = typeof(List<>).MakeGenericType(meshType);
940
+ var typedList = Activator.CreateInstance(listType) as System.Collections.IList;
941
+ foreach (var mesh in pbMeshes) typedList.Add(mesh);
942
+ var enumerableType = typeof(IEnumerable<>).MakeGenericType(meshType);
943
+ var method = combineType.GetMethod("Combine", BindingFlags.Static | BindingFlags.Public, null,
944
+ new[] { enumerableType, meshType }, null);
945
+ var result = method?.Invoke(null, new object[] { typedList, targetMesh }) as System.Collections.IList;
946
+ return result != null && result.Count == 1 && ReferenceEquals(result[0], targetMesh);
947
+ }
948
+ catch (Exception) { return false; }
949
+ }
950
+
951
+ /// <summary>
952
+ /// Set vertex color on faces using ProBuilderMesh.SetFaceColor via reflection.
953
+ /// </summary>
954
+ public static bool SetFaceColor(object mesh, Array faces, Color color)
955
+ {
956
+ if (mesh == null) return false;
957
+ try
958
+ {
959
+ var method = ProBuilderMeshType.Value?.GetMethod("SetFaceColor",
960
+ BindingFlags.Instance | BindingFlags.Public,
961
+ null,
962
+ new[] { FaceType.Value, typeof(Color) },
963
+ null);
964
+
965
+ if (method != null)
966
+ {
967
+ foreach (var face in faces)
968
+ method.Invoke(mesh, new object[] { face, color });
969
+ return true;
970
+ }
971
+ }
972
+ catch (Exception) { }
973
+ return false;
974
+ }
975
+
976
+ /// <summary>
977
+ /// Set face material using ProBuilderMesh.SetMaterial via reflection.
978
+ /// </summary>
979
+ public static bool SetFaceMaterial(object mesh, Array faces, Material material)
980
+ {
981
+ if (mesh == null || faces == null || faces.Length == 0) return false;
982
+ try
983
+ {
984
+ var faceEnumerableType = typeof(IEnumerable<>).MakeGenericType(FaceType.Value);
985
+ var method = ProBuilderMeshType.Value?.GetMethod("SetMaterial", BindingFlags.Instance | BindingFlags.Public, null,
986
+ new[] { faceEnumerableType, typeof(Material) }, null);
987
+ if (method == null) return false;
988
+ method.Invoke(mesh, new object[] { faces, material });
989
+ return true;
990
+ }
991
+ catch (Exception) { return false; }
992
+ }
993
+
994
+ /// <summary>
995
+ /// Get the faceCount property directly from ProBuilderMesh.
996
+ /// </summary>
997
+ public static int GetFaceCountProperty(object mesh)
998
+ {
999
+ return GetFaceCount(mesh);
1000
+ }
1001
+
1002
+ /// <summary>
1003
+ /// Get the vertexCount property directly from ProBuilderMesh.
1004
+ /// </summary>
1005
+ public static int GetVertexCountProperty(object mesh)
1006
+ {
1007
+ return GetVertexCount(mesh);
1008
+ }
1009
+
1010
+ /// <summary>
1011
+ /// Compute a face normal by reading vertex positions and face indexes.
1012
+ /// </summary>
1013
+ public static Vector3 ComputeFaceNormal(object mesh, object face)
1014
+ {
1015
+ try
1016
+ {
1017
+ var positionsProp = ProBuilderMeshType.Value?.GetProperty("positions");
1018
+ var positions = positionsProp?.GetValue(mesh) as System.Collections.IList;
1019
+ var indexesProp = FaceType.Value?.GetProperty("indexes");
1020
+ var indexes = indexesProp?.GetValue(face) as System.Collections.IList;
1021
+ if (positions == null || indexes == null || indexes.Count < 3) return Vector3.up;
1022
+ var p0 = (Vector3)positions[(int)indexes[0]];
1023
+ var p1 = (Vector3)positions[(int)indexes[1]];
1024
+ var p2 = (Vector3)positions[(int)indexes[2]]; var component = mesh as Component;
1025
+ var rotation = component != null ? component.transform.rotation : Quaternion.identity;
1026
+ var localNormal = Vector3.Cross(p1 - p0, p2 - p0).normalized;
1027
+ return rotation * localNormal;
1028
+ }
1029
+ catch (Exception) { return Vector3.up; }
1030
+ }
1031
+
1032
+ /// <summary>
1033
+ /// Get the positions array from a ProBuilderMesh.
1034
+ /// </summary>
1035
+ public static IList<Vector3> GetPositions(object mesh)
1036
+ {
1037
+ try
1038
+ {
1039
+ var positionsProp = ProBuilderMeshType.Value?.GetProperty("positions");
1040
+ return positionsProp?.GetValue(mesh) as IList<Vector3>;
1041
+ }
1042
+ catch (Exception) { return null; }
1043
+ }
1044
+
1045
+ // ─── Helpers ─────────────────────────────────────────────────
1046
+
1047
+ private static Type FindType(string fullName)
1048
+ {
1049
+ var type = Type.GetType(fullName);
1050
+ if (type != null) return type;
1051
+ foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
1052
+ {
1053
+ try
1054
+ {
1055
+ type = assembly.GetType(fullName);
1056
+ if (type != null) return type;
1057
+ }
1058
+ catch (Exception) { }
1059
+ }
1060
+ return null;
1061
+ }
1062
+ }
1063
+ }
1064
+ #endif