@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,674 @@
1
+ #if UNITY_EDITOR
2
+ using System;
3
+ using System.Collections.Generic;
4
+ using System.Linq;
5
+ using System.Reflection;
6
+ using UnityEngine;
7
+ using UnityEngine.ProBuilder;
8
+
9
+ namespace UnityCli.ProBuilder
10
+ {
11
+ /// <summary>为 ProBuilder 5.2.4 的 face/edge vertex insertion 冻结请求并验证完整 fresh 拓扑。</summary>
12
+ internal static class ProBuilderInsertCompletionProof
13
+ {
14
+ internal sealed class Request
15
+ {
16
+ internal CanonicalMeshSnapshot Before;
17
+ internal bool EdgeMode;
18
+ internal int SourceFaceOccurrence;
19
+ internal int[] AffectedOccurrences;
20
+ internal int SharedA;
21
+ internal int SharedB;
22
+ internal int RawA;
23
+ internal int RawB;
24
+ internal Vector3 LocalA;
25
+ internal Vector3 LocalB;
26
+ internal Vector3 RequestedPoint;
27
+ internal PointPayloadClaim ExpectedPoint;
28
+ internal Dictionary<int, Vector3> SourceNormals;
29
+ }
30
+
31
+ internal sealed class PointPayloadClaim
32
+ {
33
+ internal readonly Vector3 Position;
34
+ internal readonly CanonicalMeshSnapshot.ChannelValue Color;
35
+ private readonly CanonicalMeshSnapshot.ChannelValue[] uvs;
36
+ internal CanonicalMeshSnapshot.ChannelValue[] Uvs { get { return (CanonicalMeshSnapshot.ChannelValue[])uvs.Clone(); } }
37
+ internal PointPayloadClaim(Vector3 position, CanonicalMeshSnapshot.ChannelValue color, CanonicalMeshSnapshot.ChannelValue[] values)
38
+ { Position = position; Color = color; uvs = (CanonicalMeshSnapshot.ChannelValue[])values.Clone(); }
39
+ }
40
+
41
+ private struct Point2
42
+ {
43
+ internal float X;
44
+ internal float Y;
45
+ internal Point2(float x, float y) { X = x; Y = y; }
46
+ }
47
+
48
+ /// <summary>effect 前冻结 affected face 闭集;存在 UV sharing 或值级身份歧义时拒绝调用有损的 5.2.4 API。</summary>
49
+ internal static Request Capture(GameObject go, int[] edge, int face, out string failureReason)
50
+ {
51
+ failureReason = null;
52
+ if (go == null || (edge == null) != (face >= 0)) { failureReason = "exactly one insertion mode is required"; return null; }
53
+ var initial = CanonicalMeshSnapshot.Capture(go, face >= 0 ? new[] { face } : Array.Empty<int>());
54
+ if (initial == null || !initial.HasSharedTextures || initial.RawVertices.Any(raw => raw.Uvs[1].IsPresent)
55
+ || !CanonicalMeshSnapshot.RefreshArithmeticFinite(initial) || !ProBuilderRefreshUvProof.RefreshUvsAreTerminal(initial))
56
+ { failureReason = "canonical mesh state must have initialized sharedTextures, absent UV1, auto-UV terminal data, and fully finite bounded 5.2.4 refresh arithmetic"; return null; }
57
+ if (!SharedPositionsAreUnique(initial)) { failureReason = "coincident shared handles make cross-snapshot identity ambiguous"; return null; }
58
+
59
+ if (face >= 0)
60
+ {
61
+ if (HasSharedTextureGroups(initial)) { failureReason = "face insertion cannot preserve existing shared texture groups in ProBuilder 5.2.4"; return null; }
62
+ var source = initial.Faces.SingleOrDefault(value => value.OccurrenceIndex == face);
63
+ if (source == null || !source.ManualUv) { failureReason = "requested face occurrence must use manual UVs"; return null; }
64
+ if (!FacesHaveExclusiveRawOwnership(initial, new[] { face })) { failureReason = "requested face raw vertices must not be referenced by another face"; return null; }
65
+ if (!TryPlanarFace(initial, source, out var normal) || !IsCompleteTriangulation(initial, source, source, normal))
66
+ { failureReason = "requested face is not a complete planar simple triangulation"; return null; }
67
+ return new Request
68
+ {
69
+ Before = initial,
70
+ EdgeMode = false,
71
+ SourceFaceOccurrence = face,
72
+ AffectedOccurrences = new[] { face },
73
+ SourceNormals = new Dictionary<int, Vector3> { { face, normal } }
74
+ };
75
+ }
76
+
77
+ if (edge.Length != 2 || edge[0] == edge[1]) { failureReason = "edge must contain two different raw vertex indices"; return null; }
78
+ var rawA = initial.RawVertices.SingleOrDefault(value => value.RawIndex == edge[0]);
79
+ var rawB = initial.RawVertices.SingleOrDefault(value => value.RawIndex == edge[1]);
80
+ if (rawA == null || rawB == null || rawA.SharedHandle == rawB.SharedHandle)
81
+ { failureReason = "edge endpoints do not resolve to two distinct shared vertices"; return null; }
82
+ var sharedEdge = initial.Edges.SingleOrDefault(value => SameEdge(value.SharedMin, value.SharedMax, rawA.SharedHandle, rawB.SharedHandle));
83
+ if (sharedEdge == null || sharedEdge.Incidences.Length == 0) { failureReason = "requested edge has no readable face incidence"; return null; }
84
+ var affected = sharedEdge.Incidences.Select(value => value.FaceOccurrenceIndex).ToArray();
85
+ if (affected.Distinct().Count() != affected.Length) { failureReason = "requested edge has duplicate face incidence"; return null; }
86
+
87
+ var before = CanonicalMeshSnapshot.Capture(go, affected);
88
+ if (before == null) { failureReason = "affected edge faces are degenerate, non-simple, or unreadable"; return null; }
89
+ if (!SharedPositionsAreUnique(before)) { failureReason = "affected edge faces have ambiguous coincident shared handles"; return null; }
90
+ var capturedEdge = before.Edges.SingleOrDefault(value => SameEdge(value.SharedMin, value.SharedMax, rawA.SharedHandle, rawB.SharedHandle));
91
+ if (capturedEdge == null || capturedEdge.Incidences.Length != affected.Length)
92
+ { failureReason = "edge incidence changed during preflight"; return null; }
93
+ if (!AffectedTextureCoverageIsEmpty(before, affected))
94
+ { failureReason = "an affected edge face has shared texture mappings whose 5.2.4 boundary reorder cannot be proven"; return null; }
95
+ if (!FacesHaveExclusiveRawOwnership(before, affected))
96
+ { failureReason = "affected edge face raw vertices must be exclusively owned by one affected face"; return null; }
97
+ var normals = new Dictionary<int, Vector3>();
98
+ foreach (var occurrence in affected)
99
+ {
100
+ var source = before.Faces.SingleOrDefault(value => value.OccurrenceIndex == occurrence);
101
+ if (source == null || !source.ManualUv || source.DirectedRawTriangleStream.Length != 3 || source.Boundary.Length != 3 || !TryPlanarFace(before, source, out var normal)
102
+ || !IsCompleteTriangulation(before, source, source, normal))
103
+ { failureReason = "an affected edge face is not a complete planar simple triangulation"; return null; }
104
+ normals.Add(occurrence, normal);
105
+ }
106
+ return new Request
107
+ {
108
+ Before = before,
109
+ EdgeMode = true,
110
+ SourceFaceOccurrence = -1,
111
+ AffectedOccurrences = affected,
112
+ SharedA = rawA.SharedHandle,
113
+ SharedB = rawB.SharedHandle,
114
+ RawA = rawA.RawIndex,
115
+ RawB = rawB.RawIndex,
116
+ LocalA = rawA.LocalPosition,
117
+ LocalB = rawB.LocalPosition,
118
+ SourceNormals = normals
119
+ };
120
+ }
121
+
122
+ /// <summary>5.2.4 edge insertion 会重置 face metadata;在 ToMesh/Refresh 前按 effect 前 occurrence 原位恢复。</summary>
123
+ internal static bool RestoreEdgeFaceAttributes(object value, Request request)
124
+ {
125
+ var mesh = value as ProBuilderMesh;
126
+ if (mesh == null || request == null || !request.EdgeMode || request.Before == null || request.AffectedOccurrences == null) return false;
127
+ var faces = mesh.faces;
128
+ var elementGroup = typeof(Face).GetField("elementGroup", BindingFlags.Instance | BindingFlags.NonPublic);
129
+ if (faces == null || elementGroup == null) return false;
130
+ try
131
+ {
132
+ foreach (var occurrence in request.AffectedOccurrences)
133
+ {
134
+ if (occurrence < 0 || occurrence >= faces.Count) return false;
135
+ var source = request.Before.Faces.SingleOrDefault(item => item.OccurrenceIndex == occurrence);
136
+ var face = faces[occurrence];
137
+ if (source == null || face == null) return false;
138
+ face.submeshIndex = source.SubmeshIndex;
139
+ face.smoothingGroup = source.SmoothingGroup;
140
+ face.manualUV = source.ManualUv;
141
+ face.textureGroup = source.TextureGroup;
142
+ face.uv = new AutoUnwrapSettings(source.Uv);
143
+ elementGroup.SetValue(face, source.ElementGroup);
144
+ }
145
+ return true;
146
+ }
147
+ catch { return false; }
148
+ }
149
+
150
+ /// <summary>face mode 要求同平面且严格位于 polygon 内;edge mode 要求严格位于请求 segment 内部。</summary>
151
+ internal static bool PointIsStrictlyInterior(Request request, Vector3 point)
152
+ {
153
+ if (request == null || request.Before == null || !Finite(point)
154
+ || request.Before.SharedVertices.Any(value => CanonicalMeshSnapshot.ExactEquals(value.CanonicalPosition, point))) return false;
155
+ if (request.EdgeMode) return OnSegmentInterior(point, request.LocalA, request.LocalB);
156
+ var source = request.Before.Faces.SingleOrDefault(value => value.OccurrenceIndex == request.SourceFaceOccurrence);
157
+ return source != null && request.SourceNormals != null && request.SourceNormals.TryGetValue(source.OccurrenceIndex, out var normal)
158
+ && PointInFaceInterior(point, request.Before, source, normal);
159
+ }
160
+
161
+ /// <summary>按 5.2.4 新 raw payload 与两个 insertion 分支冻结真实 point payload,并预演每个新 triangle 的全 Refresh 算术。</summary>
162
+ internal static bool TerminalCanRefresh(Request request, Vector3 point)
163
+ {
164
+ if (request == null || request.Before == null || !Finite(point) || !CanonicalMeshSnapshot.RefreshArithmeticFinite(request.Before)) return false;
165
+ request.RequestedPoint = point;
166
+ request.ExpectedPoint = null;
167
+ if (!request.EdgeMode)
168
+ {
169
+ var source = request.Before.Faces.SingleOrDefault(face => face.OccurrenceIndex == request.SourceFaceOccurrence);
170
+ var expectedPoint = FreezePointPayload(request.Before, point, null);
171
+ if (source == null || expectedPoint == null || !source.Boundary.All(edge => TriangleRefreshFinite(
172
+ request.Before.RawVertices[edge.RawA].LocalPosition,
173
+ request.Before.RawVertices[edge.RawB].LocalPosition,
174
+ expectedPoint.Position,
175
+ request.Before.RawVertices[edge.RawA].Uvs[0],
176
+ request.Before.RawVertices[edge.RawB].Uvs[0],
177
+ expectedPoint.Uvs[0],
178
+ source.SmoothingGroup))) return false;
179
+ request.ExpectedPoint = expectedPoint;
180
+ return true;
181
+ }
182
+ var vertices = CanonicalMeshSnapshot.BuildManagedVertices(request.Before);
183
+ if (vertices == null || request.RawA < 0 || request.RawB < 0 || request.RawA >= vertices.Count || request.RawB >= vertices.Count) return false;
184
+ var a = point - vertices[request.RawA].position; var b = vertices[request.RawB].position - vertices[request.RawA].position;
185
+ var weight = Vector3.Magnitude(a) * Mathf.Cos(Vector3.Angle(b, a) * Mathf.Deg2Rad) / Vector3.Magnitude(b);
186
+ var mixed = Vertex.Mix(vertices[request.RawA], vertices[request.RawB], weight);
187
+ var expected = FreezePointPayload(request.Before, point, mixed);
188
+ if (expected == null) return false;
189
+ foreach (var occurrence in request.AffectedOccurrences)
190
+ {
191
+ var source = request.Before.Faces.SingleOrDefault(face => face.OccurrenceIndex == occurrence);
192
+ var edge = source?.Boundary.SingleOrDefault(value => SameEdge(value.SharedA, value.SharedB, request.SharedA, request.SharedB));
193
+ if (source == null || edge == null || source.DirectedRawTriangleStream.Length != 3) return false;
194
+ var other = source.DirectedRawTriangleStream.SingleOrDefault(raw => raw != edge.RawA && raw != edge.RawB);
195
+ if (other == edge.RawA || other == edge.RawB) return false;
196
+ var first = TriangleRefreshFinite(request.Before.RawVertices[edge.RawA].LocalPosition, expected.Position, request.Before.RawVertices[other].LocalPosition,
197
+ request.Before.RawVertices[edge.RawA].Uvs[0], expected.Uvs[0], request.Before.RawVertices[other].Uvs[0], source.SmoothingGroup);
198
+ var second = TriangleRefreshFinite(expected.Position, request.Before.RawVertices[edge.RawB].LocalPosition, request.Before.RawVertices[other].LocalPosition,
199
+ expected.Uvs[0], request.Before.RawVertices[edge.RawB].Uvs[0], request.Before.RawVertices[other].Uvs[0], source.SmoothingGroup);
200
+ if (!first || !second) return false;
201
+ }
202
+ request.ExpectedPoint = expected;
203
+ return true;
204
+ }
205
+
206
+ /// <summary>SetVertices 使用首个 raw 的全局 channel profile;Mix 的隐藏字段值仍会进入最终数组,UV1 则由 ToMesh 清除。</summary>
207
+ private static PointPayloadClaim FreezePointPayload(CanonicalMeshSnapshot before, Vector3 requestedPoint, Vertex mixed)
208
+ {
209
+ if (before == null || before.RawVertices.Length == 0 || before.RawVertices.Any(raw => raw.Uvs[1].IsPresent)) return null;
210
+ var profile = before.RawVertices[0]; var profileUvs = profile.Uvs;
211
+ var position = mixed == null ? requestedPoint : mixed.position;
212
+ var colorValue = mixed == null ? Vector4.zero : new Vector4(mixed.color.r, mixed.color.g, mixed.color.b, mixed.color.a);
213
+ var uvs = new[]
214
+ {
215
+ new CanonicalMeshSnapshot.ChannelValue(profileUvs[0].IsPresent, mixed == null ? Vector4.zero : (Vector4)mixed.uv0),
216
+ new CanonicalMeshSnapshot.ChannelValue(false, Vector4.zero),
217
+ new CanonicalMeshSnapshot.ChannelValue(profileUvs[2].IsPresent, mixed == null ? Vector4.zero : mixed.uv3),
218
+ new CanonicalMeshSnapshot.ChannelValue(profileUvs[3].IsPresent, mixed == null ? Vector4.zero : mixed.uv4)
219
+ };
220
+ var color = new CanonicalMeshSnapshot.ChannelValue(profile.Color.IsPresent, colorValue);
221
+ if (!Finite(position) || before.SharedVertices.Any(shared => CanonicalMeshSnapshot.ExactEquals(shared.CanonicalPosition, position))
222
+ || !Finite(color) || uvs.Any(value => !Finite(value))) return null;
223
+ return new PointPayloadClaim(position, color, uvs);
224
+ }
225
+
226
+ private static bool TriangleRefreshFinite(Vector3 a, Vector3 b, Vector3 c, CanonicalMeshSnapshot.ChannelValue uvA, CanonicalMeshSnapshot.ChannelValue uvB, CanonicalMeshSnapshot.ChannelValue uvC, int smoothing)
227
+ => CanonicalMeshSnapshot.RefreshArithmeticFinite(new[] { a, b, c }, new[] { uvA, uvB, uvC }, new[] { new[] { 0, 1, 2 } }, new[] { smoothing });
228
+
229
+ /// <summary>fresh result 必须完整消费 affected face,并证明新 shared point、raw remap、winding、属性和未选 face。</summary>
230
+ internal static bool Matches(Request request, CanonicalMeshSnapshot after, Vector3 point, out string failureReason)
231
+ {
232
+ failureReason = null;
233
+ if (request == null || request.Before == null || request.ExpectedPoint == null || after == null || !Finite(point)
234
+ || !CanonicalMeshSnapshot.ExactEquals(request.RequestedPoint, point)) { failureReason = "request, frozen point payload, or fresh canonical snapshot is unavailable"; return false; }
235
+ var terminalPoint = request.ExpectedPoint.Position;
236
+ if (!Stable(request.Before, after)) { failureReason = "fresh object, scene, component, or transform identity changed"; return false; }
237
+ if (!SharedPositionsAreUnique(after)) { failureReason = "fresh shared positions are ambiguous"; return false; }
238
+ if (!SharedLayoutMatches(request, after, terminalPoint)) { failureReason = "shared/raw member budget or point allocation differs from the 5.2.4 result"; return false; }
239
+ if (!SharedTextureLayoutMatches(request, after, terminalPoint)) { failureReason = "shared texture groups differ from the 5.2.4 result: " + SharedTextureDiagnostic(request, after, terminalPoint); return false; }
240
+
241
+ var remaining = new List<CanonicalMeshSnapshot.FaceOccurrence>(after.Faces);
242
+ var affected = new HashSet<int>(request.AffectedOccurrences);
243
+ foreach (var source in request.Before.Faces.Where(value => !affected.Contains(value.OccurrenceIndex)))
244
+ {
245
+ var matches = remaining.Where(candidate => PreservedFaceEquals(request.Before, source, after, candidate)).ToArray();
246
+ if (matches.Length != 1) { failureReason = "an unselected face did not have exactly one preserved fresh match"; return false; }
247
+ remaining.Remove(matches[0]);
248
+ }
249
+
250
+ if (request.EdgeMode)
251
+ {
252
+ var sources = request.AffectedOccurrences.Select(occurrence => request.Before.Faces.Single(value => value.OccurrenceIndex == occurrence)).ToArray();
253
+ if (remaining.Count != sources.Length) { failureReason = "fresh edge face count differs from the affected face count"; return false; }
254
+ if (!CanonicalMeshSnapshot.ExactMultisetEquals(sources, remaining, (source, candidate) => EdgeReplacementMatches(request, source, after, candidate, terminalPoint)))
255
+ { failureReason = "affected edge faces do not form an exact boundary-replacement bijection"; return false; }
256
+ if (HasValueEdge(after, request.LocalA, request.LocalB)) { failureReason = "the original edge still exists after insertion"; return false; }
257
+ if (!TerminalChannelsAndMaterials(request.Before, after)) { failureReason = "renderer materials or derived channels differ from the 5.2.4 terminal"; return false; }
258
+ return true;
259
+ }
260
+
261
+ var face = request.Before.Faces.Single(value => value.OccurrenceIndex == request.SourceFaceOccurrence);
262
+ if (remaining.Count != face.Boundary.Length) { failureReason = "fresh face child count differs from the source boundary count"; return false; }
263
+ if (!ExactBijection(face.Boundary, remaining, (edge, child) => FaceChildMatches(request, face, edge, after, child, terminalPoint)))
264
+ {
265
+ var candidateCounts = face.Boundary.Select(edge => remaining.Count(child => FaceChildMatches(request, face, edge, after, child, terminalPoint))).ToArray();
266
+ failureReason = "face children do not form an exact boundary-edge bijection; candidate counts=" + string.Join(",", candidateCounts);
267
+ return false;
268
+ }
269
+ if (!TerminalChannelsAndMaterials(request.Before, after)) { failureReason = "renderer materials or derived channels differ from the 5.2.4 terminal"; return false; }
270
+ return true;
271
+ }
272
+
273
+ private static bool TerminalChannelsAndMaterials(CanonicalMeshSnapshot before, CanonicalMeshSnapshot after)
274
+ => CanonicalMeshSnapshot.RendererMaterialsEqual(before, after) && CanonicalMeshSnapshot.DerivedChannelsMatch(after);
275
+
276
+ /// <summary>旧 shared groups 必须按值保留;face fan 只允许每个 boundary endpoint 多一个副本,并新增唯一 point group。</summary>
277
+ private static bool SharedLayoutMatches(Request request, CanonicalMeshSnapshot after, Vector3 point)
278
+ {
279
+ var before = request.Before;
280
+ var source = request.EdgeMode ? null : before.Faces.Single(value => value.OccurrenceIndex == request.SourceFaceOccurrence);
281
+ var duplicatedHandles = source == null ? new HashSet<int>() : new HashSet<int>(source.Boundary.Select(value => value.SharedA));
282
+ var expectedAdditionalRaw = request.EdgeMode ? request.AffectedOccurrences.Length : source.Boundary.Length * 2;
283
+ if (after.SharedVertices.Length != before.SharedVertices.Length + 1 || after.RawVertices.Length != before.RawVertices.Length + expectedAdditionalRaw) return false;
284
+
285
+ foreach (var group in before.SharedVertices)
286
+ {
287
+ var candidates = after.SharedVertices.Where(value => CanonicalMeshSnapshot.ExactEquals(value.CanonicalPosition, group.CanonicalPosition)).ToArray();
288
+ if (candidates.Length != 1) return false;
289
+ var expected = group.MemberRawIndexes.Select(index => before.RawVertices[index]).ToList();
290
+ if (duplicatedHandles.Contains(group.Handle))
291
+ {
292
+ var duplicateRaw = BoundaryRawForHandle(source, group.Handle);
293
+ if (duplicateRaw < 0) return false;
294
+ expected.Add(before.RawVertices[duplicateRaw]);
295
+ }
296
+ var actual = candidates[0].MemberRawIndexes.Select(index => after.RawVertices[index]).ToArray();
297
+ if (!CanonicalMeshSnapshot.ExactMultisetEquals(expected, actual, RawValueEquals)) return false;
298
+ }
299
+
300
+ var pointGroups = after.SharedVertices.Where(value => CanonicalMeshSnapshot.ExactEquals(value.CanonicalPosition, point)).ToArray();
301
+ var expectedPointMembers = request.EdgeMode ? request.AffectedOccurrences.Length : source.Boundary.Length;
302
+ if (pointGroups.Length != 1 || pointGroups[0].MemberRawIndexes.Length != expectedPointMembers) return false;
303
+ var pointMembers = pointGroups[0].MemberRawIndexes.Select(index => after.RawVertices[index]).ToArray();
304
+ return pointMembers.Length > 0 && pointMembers.All(value => PointMemberMatches(request, value));
305
+ }
306
+
307
+ /// <summary>edge insertion 重建每个 incident face;边界只允许 A-B 被 A-P、P-B 替换。</summary>
308
+ private static bool EdgeReplacementMatches(Request request, CanonicalMeshSnapshot.FaceOccurrence source, CanonicalMeshSnapshot after, CanonicalMeshSnapshot.FaceOccurrence candidate, Vector3 point)
309
+ {
310
+ var rebuiltMaterial = CanonicalMeshSnapshot.WithSerializedFaceMaterial(source.Material, null);
311
+ if (rebuiltMaterial == null || !SameFaceAttributes(source, candidate) || !CanonicalMeshSnapshot.MaterialValueEquals(rebuiltMaterial, candidate.Material)
312
+ || !CanonicalMeshSnapshot.UvValueEquals(source.Uv, candidate.Uv)) return false;
313
+ var expected = new List<Vector3[]>();
314
+ var replaced = 0;
315
+ foreach (var edge in source.Boundary)
316
+ {
317
+ var a = request.Before.RawVertices[edge.RawA].LocalPosition;
318
+ var b = request.Before.RawVertices[edge.RawB].LocalPosition;
319
+ if (SameEdge(edge.SharedA, edge.SharedB, request.SharedA, request.SharedB))
320
+ {
321
+ expected.Add(new[] { a, point });
322
+ expected.Add(new[] { point, b });
323
+ replaced++;
324
+ }
325
+ else expected.Add(new[] { a, b });
326
+ }
327
+ return replaced == 1 && request.SourceNormals != null && request.SourceNormals.TryGetValue(source.OccurrenceIndex, out var normal)
328
+ && BoundaryEquals(after, candidate, expected)
329
+ && IsCompleteTriangulation(after, candidate, source, normal, request.Before)
330
+ && !HasBoundaryValue(after, candidate, request.LocalA, request.LocalB);
331
+ }
332
+
333
+ /// <summary>face insertion 必须为每条原 boundary edge 分配一个且仅一个同向 triangle child。</summary>
334
+ private static bool FaceChildMatches(Request request, CanonicalMeshSnapshot.FaceOccurrence source, CanonicalMeshSnapshot.BoundaryReference sourceEdge, CanonicalMeshSnapshot after, CanonicalMeshSnapshot.FaceOccurrence child, Vector3 point)
335
+ {
336
+ var a = request.Before.RawVertices[sourceEdge.RawA].LocalPosition;
337
+ var b = request.Before.RawVertices[sourceEdge.RawB].LocalPosition;
338
+ if (child.SubmeshIndex != source.SubmeshIndex || child.SmoothingGroup != source.SmoothingGroup || child.ManualUv != source.ManualUv
339
+ || child.TextureGroup != source.TextureGroup || child.ElementGroup != -1 || child.Boundary.Length != 3 || child.DirectedSharedTriangleStream.Length != 3
340
+ || !CanonicalMeshSnapshot.MaterialValueEquals(CanonicalMeshSnapshot.WithSerializedFaceMaterial(source.Material, null), child.Material) || !CanonicalMeshSnapshot.UvValueEquals(source.Uv, child.Uv)) return false;
341
+ var expected = new List<Vector3[]> { new[] { a, b }, new[] { b, point }, new[] { point, a } };
342
+ return request.SourceNormals != null && request.SourceNormals.TryGetValue(source.OccurrenceIndex, out var normal)
343
+ && BoundaryEquals(after, child, expected)
344
+ && UsesOnlyValues(after, child, new[] { a, b, point })
345
+ && IsCompleteTriangulation(after, child, source, normal, request.Before);
346
+ }
347
+
348
+ /// <summary>未选 face 用局部 raw payload 比较,避免 affected face 合法增加 shared member 时产生假阴性。</summary>
349
+ private static bool PreservedFaceEquals(CanonicalMeshSnapshot before, CanonicalMeshSnapshot.FaceOccurrence source, CanonicalMeshSnapshot after, CanonicalMeshSnapshot.FaceOccurrence candidate)
350
+ {
351
+ return SameFaceAttributes(source, candidate) && CanonicalMeshSnapshot.MaterialValueEquals(source.Material, candidate.Material)
352
+ && CanonicalMeshSnapshot.UvValueEquals(source.Uv, candidate.Uv)
353
+ && CanonicalMeshSnapshot.ExactMultisetEquals(Split(source.DirectedRawTriangleStream), Split(candidate.DirectedRawTriangleStream),
354
+ (left, right) => RawTriangleCyclicEquals(before, left, after, right))
355
+ && CanonicalMeshSnapshot.ExactMultisetEquals(source.Boundary, candidate.Boundary,
356
+ (left, right) => RawValueEquals(before.RawVertices[left.RawA], after.RawVertices[right.RawA])
357
+ && RawValueEquals(before.RawVertices[left.RawB], after.RawVertices[right.RawB]));
358
+ }
359
+
360
+ /// <summary>验证候选 face 是 source polygon 内的完整同向 triangulation,而非只看数量或面积。</summary>
361
+ private static bool IsCompleteTriangulation(CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence candidate, CanonicalMeshSnapshot.FaceOccurrence source, Vector3 sourceNormal, CanonicalMeshSnapshot sourceSnapshot = null)
362
+ {
363
+ sourceSnapshot = sourceSnapshot ?? snapshot;
364
+ if (candidate == null || source == null || candidate.Boundary.Length < 3 || candidate.DirectedSharedTriangleStream.Length / 3 != candidate.Boundary.Length - 2
365
+ || !TryPlanarFace(snapshot, candidate, out var candidateNormal) || !CanonicalMeshSnapshot.ExactEquals(candidateNormal, sourceNormal)) return false;
366
+ var sourceBoundary = OrderedBoundaryPositions(sourceSnapshot, source);
367
+ if (sourceBoundary == null) return false;
368
+ var stream = candidate.DirectedRawTriangleStream;
369
+ for (var index = 0; index < stream.Length; index += 3)
370
+ {
371
+ var a = snapshot.RawVertices[stream[index]].LocalPosition;
372
+ var b = snapshot.RawVertices[stream[index + 1]].LocalPosition;
373
+ var c = snapshot.RawVertices[stream[index + 2]].LocalPosition;
374
+ var normal = Vector3.Cross(b - a, c - a);
375
+ if (!(UnityEngine.ProBuilder.Math.TriangleArea(a, b, c) > Mathf.Epsilon)
376
+ || !CanonicalMeshSnapshot.ExactEquals(normal.normalized, sourceNormal)
377
+ || !PointInPolygon((a + b + c) / 3f, sourceBoundary, sourceNormal, true)) return false;
378
+ }
379
+ return true;
380
+ }
381
+
382
+ private static bool TryPlanarFace(CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence face, out Vector3 normal)
383
+ {
384
+ normal = Vector3.zero;
385
+ if (snapshot == null || face == null || face.DirectedRawTriangleStream.Length < 3) return false;
386
+ var stream = face.DirectedRawTriangleStream;
387
+ var origin = snapshot.RawVertices[stream[0]].LocalPosition;
388
+ for (var index = 0; index < stream.Length; index += 3)
389
+ {
390
+ var a = snapshot.RawVertices[stream[index]].LocalPosition;
391
+ var b = snapshot.RawVertices[stream[index + 1]].LocalPosition;
392
+ var c = snapshot.RawVertices[stream[index + 2]].LocalPosition;
393
+ var triangleNormal = Vector3.Cross(b - a, c - a);
394
+ if (!(UnityEngine.ProBuilder.Math.TriangleArea(a, b, c) > Mathf.Epsilon)) return false;
395
+ triangleNormal.Normalize();
396
+ if (normal == Vector3.zero) normal = triangleNormal;
397
+ else if (!CanonicalMeshSnapshot.ExactEquals(normal, triangleNormal)) return false;
398
+ }
399
+ if (normal == Vector3.zero) return false;
400
+ var capturedNormal = normal;
401
+ foreach (var edge in face.Boundary)
402
+ if (!PlaneContains(snapshot.RawVertices[edge.RawA].LocalPosition, origin, capturedNormal)
403
+ || !PlaneContains(snapshot.RawVertices[edge.RawB].LocalPosition, origin, capturedNormal)) return false;
404
+ return true;
405
+ }
406
+
407
+ private static bool PointInFaceInterior(Vector3 point, CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence face, Vector3 normal)
408
+ {
409
+ var boundary = OrderedBoundaryPositions(snapshot, face);
410
+ return boundary != null && PlaneContains(point, boundary[0], normal) && PointInPolygon(point, boundary, normal, false);
411
+ }
412
+
413
+ private static Vector3[] OrderedBoundaryPositions(CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence face)
414
+ {
415
+ if (snapshot == null || face == null || face.Boundary.Length < 3) return null;
416
+ var remaining = face.Boundary.ToList();
417
+ var first = remaining[0];
418
+ var handles = new List<int> { first.SharedA, first.SharedB };
419
+ remaining.RemoveAt(0);
420
+ while (remaining.Count > 0)
421
+ {
422
+ var nextIndex = remaining.FindIndex(value => value.SharedA == handles[handles.Count - 1]);
423
+ if (nextIndex < 0) return null;
424
+ handles.Add(remaining[nextIndex].SharedB);
425
+ remaining.RemoveAt(nextIndex);
426
+ }
427
+ if (handles[handles.Count - 1] != handles[0] || handles.Take(handles.Count - 1).Distinct().Count() != handles.Count - 1) return null;
428
+ return handles.Take(handles.Count - 1).Select(handle => Position(snapshot, handle)).ToArray();
429
+ }
430
+
431
+ private static bool PointInPolygon(Vector3 point, Vector3[] boundary, Vector3 normal, bool includeBoundary)
432
+ {
433
+ if (boundary == null || boundary.Length < 3) return false;
434
+ var projectedPoint = Project(point, normal);
435
+ var projected = boundary.Select(value => Project(value, normal)).ToArray();
436
+ for (var index = 0; index < projected.Length; index++)
437
+ if (OnSegment(projectedPoint, projected[index], projected[(index + 1) % projected.Length])) return includeBoundary;
438
+ var inside = false;
439
+ for (int left = 0, right = projected.Length - 1; left < projected.Length; right = left++)
440
+ {
441
+ var a = projected[left]; var b = projected[right];
442
+ if ((a.Y > projectedPoint.Y) != (b.Y > projectedPoint.Y)
443
+ && projectedPoint.X < (b.X - a.X) * (projectedPoint.Y - a.Y) / (b.Y - a.Y) + a.X) inside = !inside;
444
+ }
445
+ return inside;
446
+ }
447
+
448
+ private static Point2 Project(Vector3 value, Vector3 normal)
449
+ {
450
+ var x = Mathf.Abs(normal.x); var y = Mathf.Abs(normal.y); var z = Mathf.Abs(normal.z);
451
+ return x >= y && x >= z ? new Point2(value.y, value.z) : y >= z ? new Point2(value.x, value.z) : new Point2(value.x, value.y);
452
+ }
453
+
454
+ private static bool OnSegment(Point2 point, Point2 a, Point2 b)
455
+ {
456
+ var cross = (point.X - a.X) * (b.Y - a.Y) - (point.Y - a.Y) * (b.X - a.X);
457
+ if (!CanonicalMeshSnapshot.ExactEquals(cross, 0f)) return false;
458
+ var dot = (point.X - a.X) * (point.X - b.X) + (point.Y - a.Y) * (point.Y - b.Y);
459
+ return dot <= 0f;
460
+ }
461
+
462
+ private static bool OnSegmentInterior(Vector3 point, Vector3 a, Vector3 b)
463
+ {
464
+ var direction = b - a;
465
+ if (direction.sqrMagnitude == 0f) return false;
466
+ var t = Vector3.Dot(point - a, direction) / direction.sqrMagnitude;
467
+ return t > 0f && t < 1f
468
+ && CanonicalMeshSnapshot.ExactEquals(point, Vector3.Lerp(a, b, t));
469
+ }
470
+
471
+ private static bool IsCompleteTriangulation(CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence candidate, CanonicalMeshSnapshot.FaceOccurrence source, Vector3 normal)
472
+ {
473
+ return IsCompleteTriangulation(snapshot, candidate, source, normal, snapshot);
474
+ }
475
+
476
+ private static bool BoundaryEquals(CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence face, IList<Vector3[]> expected)
477
+ {
478
+ return expected != null && face.Boundary.Length == expected.Count
479
+ && ExactBijection(expected, face.Boundary,
480
+ (edge, actual) => CanonicalMeshSnapshot.ExactEquals(edge[0], snapshot.RawVertices[actual.RawA].LocalPosition)
481
+ && CanonicalMeshSnapshot.ExactEquals(edge[1], snapshot.RawVertices[actual.RawB].LocalPosition));
482
+ }
483
+
484
+ private static bool UsesOnlyValues(CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence face, IList<Vector3> values)
485
+ {
486
+ return face.DirectedSharedTriangleStream.All(handle => values.Count(value => CanonicalMeshSnapshot.ExactEquals(value, Position(snapshot, handle))) == 1);
487
+ }
488
+
489
+ private static bool HasBoundaryValue(CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence face, Vector3 a, Vector3 b)
490
+ {
491
+ return face.Boundary.Any(edge => (CanonicalMeshSnapshot.ExactEquals(snapshot.RawVertices[edge.RawA].LocalPosition, a)
492
+ && CanonicalMeshSnapshot.ExactEquals(snapshot.RawVertices[edge.RawB].LocalPosition, b))
493
+ || (CanonicalMeshSnapshot.ExactEquals(snapshot.RawVertices[edge.RawA].LocalPosition, b)
494
+ && CanonicalMeshSnapshot.ExactEquals(snapshot.RawVertices[edge.RawB].LocalPosition, a)));
495
+ }
496
+
497
+ private static bool HasValueEdge(CanonicalMeshSnapshot snapshot, Vector3 a, Vector3 b)
498
+ {
499
+ return snapshot.Edges.Any(edge => (CanonicalMeshSnapshot.ExactEquals(Position(snapshot, edge.SharedMin), a)
500
+ && CanonicalMeshSnapshot.ExactEquals(Position(snapshot, edge.SharedMax), b))
501
+ || (CanonicalMeshSnapshot.ExactEquals(Position(snapshot, edge.SharedMin), b)
502
+ && CanonicalMeshSnapshot.ExactEquals(Position(snapshot, edge.SharedMax), a)));
503
+ }
504
+
505
+ private static bool RawTriangleCyclicEquals(CanonicalMeshSnapshot leftSnapshot, int[] left, CanonicalMeshSnapshot rightSnapshot, int[] right)
506
+ {
507
+ for (var offset = 0; offset < 3; offset++)
508
+ if (RawValueEquals(leftSnapshot.RawVertices[left[0]], rightSnapshot.RawVertices[right[offset]])
509
+ && RawValueEquals(leftSnapshot.RawVertices[left[1]], rightSnapshot.RawVertices[right[(offset + 1) % 3]])
510
+ && RawValueEquals(leftSnapshot.RawVertices[left[2]], rightSnapshot.RawVertices[right[(offset + 2) % 3]])) return true;
511
+ return false;
512
+ }
513
+
514
+ private static bool RawValueEquals(CanonicalMeshSnapshot.RawVertex left, CanonicalMeshSnapshot.RawVertex right)
515
+ {
516
+ return left != null && right != null && CanonicalMeshSnapshot.ExactEquals(left.LocalPosition, right.LocalPosition)
517
+ && CanonicalMeshSnapshot.RawChannelValueEquals(left, right);
518
+ }
519
+
520
+ /// <summary>fresh point raw 必须逐值等于 effect 前冻结的 Vertex.Mix 或 new Vertex payload;normal/tangent 由全局 derived-channel proof 负责。</summary>
521
+ private static bool PointMemberMatches(Request request, CanonicalMeshSnapshot.RawVertex actual)
522
+ {
523
+ if (request == null || request.ExpectedPoint == null || actual == null
524
+ || !CanonicalMeshSnapshot.ExactEquals(actual.LocalPosition, request.ExpectedPoint.Position)
525
+ || !CanonicalMeshSnapshot.ChannelValueEquals(actual.Color, request.ExpectedPoint.Color)) return false;
526
+ var expectedUvs = request.ExpectedPoint.Uvs; var actualUvs = actual.Uvs;
527
+ return actualUvs.Length == expectedUvs.Length && actualUvs.Zip(expectedUvs, CanonicalMeshSnapshot.ChannelValueEquals).All(value => value);
528
+ }
529
+
530
+ /// <summary>异类型关系同样使用增广路径求完整双射,不能按枚举顺序贪心消费。</summary>
531
+ private static bool ExactBijection<TLeft, TRight>(IEnumerable<TLeft> left, IEnumerable<TRight> right, Func<TLeft, TRight, bool> equals)
532
+ {
533
+ if (left == null || right == null || equals == null) return false;
534
+ var leftValues = left.ToArray(); var rightValues = right.ToArray();
535
+ if (leftValues.Length != rightValues.Length) return false;
536
+ var matchedLeftByRight = Enumerable.Repeat(-1, rightValues.Length).ToArray();
537
+ for (var leftIndex = 0; leftIndex < leftValues.Length; leftIndex++)
538
+ if (!TryAugment(leftIndex, leftValues, rightValues, equals, matchedLeftByRight, new bool[rightValues.Length])) return false;
539
+ return true;
540
+ }
541
+
542
+ private static bool TryAugment<TLeft, TRight>(int leftIndex, TLeft[] left, TRight[] right, Func<TLeft, TRight, bool> equals, int[] matchedLeftByRight, bool[] visitedRight)
543
+ {
544
+ for (var rightIndex = 0; rightIndex < right.Length; rightIndex++)
545
+ {
546
+ if (visitedRight[rightIndex] || !equals(left[leftIndex], right[rightIndex])) continue;
547
+ visitedRight[rightIndex] = true;
548
+ if (matchedLeftByRight[rightIndex] < 0 || TryAugment(matchedLeftByRight[rightIndex], left, right, equals, matchedLeftByRight, visitedRight))
549
+ { matchedLeftByRight[rightIndex] = leftIndex; return true; }
550
+ }
551
+ return false;
552
+ }
553
+
554
+ private static int[][] Split(int[] stream)
555
+ {
556
+ return Enumerable.Range(0, stream.Length / 3).Select(index => new[] { stream[index * 3], stream[index * 3 + 1], stream[index * 3 + 2] }).ToArray();
557
+ }
558
+
559
+ private static int BoundaryRawForHandle(CanonicalMeshSnapshot.FaceOccurrence face, int handle)
560
+ {
561
+ var edge = face.Boundary.FirstOrDefault(value => value.SharedA == handle || value.SharedB == handle);
562
+ return edge == null ? -1 : edge.SharedA == handle ? edge.RawA : edge.RawB;
563
+ }
564
+
565
+ /// <summary>5.2.4 会删除每个重建 face 的 distinct raw;预算只在这些 raw 不被其他 face 复用时可精确重放。</summary>
566
+ private static bool FacesHaveExclusiveRawOwnership(CanonicalMeshSnapshot snapshot, IEnumerable<int> occurrences)
567
+ {
568
+ if (snapshot == null || occurrences == null) return false;
569
+ var selected = new HashSet<int>(occurrences);
570
+ if (selected.Count == 0 || selected.Any(occurrence => !snapshot.Faces.Any(face => face.OccurrenceIndex == occurrence))) return false;
571
+ var ownerCounts = snapshot.Faces
572
+ .SelectMany(face => face.DirectedRawTriangleStream.Distinct().Select(raw => new { raw, face.OccurrenceIndex }))
573
+ .GroupBy(value => value.raw)
574
+ .ToDictionary(group => group.Key, group => group.Count());
575
+ return snapshot.Faces.Where(face => selected.Contains(face.OccurrenceIndex))
576
+ .SelectMany(face => face.DirectedRawTriangleStream).Distinct()
577
+ .All(raw => ownerCounts.TryGetValue(raw, out var count) && count == 1);
578
+ }
579
+
580
+ private static bool SharedPositionsAreUnique(CanonicalMeshSnapshot snapshot)
581
+ {
582
+ return snapshot != null && snapshot.SharedVertices.All(left => snapshot.SharedVertices.Count(right => CanonicalMeshSnapshot.ExactEquals(left.CanonicalPosition, right.CanonicalPosition)) == 1);
583
+ }
584
+
585
+ /// <summary>face insertion 的 5.2.4 实现会清空全 mesh sharedTexture lookup;必须在 effect 前显式拒绝。</summary>
586
+ internal static bool HasFaceInsertionSharedTextureConflict(GameObject go, int face)
587
+ {
588
+ var snapshot = CanonicalMeshSnapshot.Capture(go, new[] { face });
589
+ return snapshot != null && snapshot.SharedTextures.Length != 0;
590
+ }
591
+
592
+ private static bool HasSharedTextureGroups(CanonicalMeshSnapshot snapshot)
593
+ {
594
+ return snapshot == null || snapshot.SharedTextures.Length != 0;
595
+ }
596
+
597
+ /// <summary>face 分支令全部新点共享 vertices.Count UV id,并把每个 `-1` 端点 mapping 转为 singleton;edge 分支精确保留旧 groups。</summary>
598
+ private static bool SharedTextureLayoutMatches(Request request, CanonicalMeshSnapshot after, Vector3 point)
599
+ {
600
+ if (request == null || request.Before == null || after == null || !Finite(point)) return false;
601
+ var before = request.Before;
602
+ if (!request.EdgeMode)
603
+ {
604
+ var generatedRaw = after.Faces.Where(face => FaceContainsValue(after, face, point))
605
+ .SelectMany(face => face.DirectedRawTriangleStream).Distinct().ToArray();
606
+ var members = after.SharedTextures.SelectMany(group => group.MemberRawIndexes).ToArray();
607
+ var boundaryCount = before.Faces.Single(face => face.OccurrenceIndex == request.SourceFaceOccurrence).Boundary.Length;
608
+ var pointGroups = after.SharedTextures.Where(group => group.MemberRawIndexes.All(raw => CanonicalMeshSnapshot.ExactEquals(after.RawVertices[raw].LocalPosition, point))).ToArray();
609
+ var endpointGroups = after.SharedTextures.Except(pointGroups).ToArray();
610
+ return before.HasSharedTextures && before.SharedTextures.Length == 0 && after.HasSharedTextures
611
+ && generatedRaw.Length == boundaryCount * 3 && after.SharedTextures.Length == boundaryCount * 2 + 1
612
+ && pointGroups.Length == 1 && pointGroups[0].MemberRawIndexes.Length == boundaryCount
613
+ && endpointGroups.Length == boundaryCount * 2 && endpointGroups.All(group => group.MemberRawIndexes.Length == 1)
614
+ && members.Length == generatedRaw.Length && members.Distinct().Count() == members.Length
615
+ && generatedRaw.All(raw => members.Contains(raw));
616
+ }
617
+ return CanonicalMeshSnapshot.ExactMultisetEquals(before.SharedTextures, after.SharedTextures,
618
+ (left, right) => TextureGroupValueEquals(before, left, after, right));
619
+ }
620
+
621
+ /// <summary>5.2.4 edge insertion 会重排 boundary vertices 却不重排 sharedIndexesUV,因此 affected faces 只能接受空映射。</summary>
622
+ private static bool AffectedTextureCoverageIsEmpty(CanonicalMeshSnapshot snapshot, IEnumerable<int> occurrences)
623
+ {
624
+ var mapped = new HashSet<int>(snapshot.SharedTextures.SelectMany(group => group.MemberRawIndexes));
625
+ return occurrences.All(occurrence => snapshot.Faces.Single(face => face.OccurrenceIndex == occurrence)
626
+ .DirectedRawTriangleStream.Distinct().All(raw => !mapped.Contains(raw)));
627
+ }
628
+
629
+ private static bool TextureGroupValueEquals(CanonicalMeshSnapshot leftSnapshot, CanonicalMeshSnapshot.SharedTextureSnapshot left, CanonicalMeshSnapshot rightSnapshot, CanonicalMeshSnapshot.SharedTextureSnapshot right)
630
+ {
631
+ return CanonicalMeshSnapshot.ExactMultisetEquals(
632
+ left.MemberRawIndexes.Select(index => leftSnapshot.RawVertices[index]),
633
+ right.MemberRawIndexes.Select(index => rightSnapshot.RawVertices[index]),
634
+ RawValueEquals);
635
+ }
636
+
637
+ private static bool FaceContainsValue(CanonicalMeshSnapshot snapshot, CanonicalMeshSnapshot.FaceOccurrence face, Vector3 value)
638
+ {
639
+ return face.DirectedRawTriangleStream.Any(raw => CanonicalMeshSnapshot.ExactEquals(snapshot.RawVertices[raw].LocalPosition, value));
640
+ }
641
+
642
+ private static string SharedTextureDiagnostic(Request request, CanonicalMeshSnapshot after, Vector3 point)
643
+ {
644
+ var before = request.Before;
645
+ var pointFaces = after.Faces.Where(face => FaceContainsValue(after, face, point)).ToArray();
646
+ var pointRaw = pointFaces.SelectMany(face => face.DirectedRawTriangleStream).Distinct().Count();
647
+ return "beforePresent=" + before.HasSharedTextures + ",beforeGroups=" + before.SharedTextures.Length
648
+ + ",afterPresent=" + after.HasSharedTextures + ",afterGroups=" + after.SharedTextures.Length
649
+ + ",afterMembers=" + after.SharedTextures.Sum(group => group.MemberRawIndexes.Length)
650
+ + ",singletonGroups=" + after.SharedTextures.Count(group => group.MemberRawIndexes.Length == 1)
651
+ + ",pointFaces=" + pointFaces.Length + ",pointRaw=" + pointRaw;
652
+ }
653
+
654
+ private static bool SameFaceAttributes(CanonicalMeshSnapshot.FaceOccurrence left, CanonicalMeshSnapshot.FaceOccurrence right)
655
+ {
656
+ return left != null && right != null && left.SubmeshIndex == right.SubmeshIndex && left.SmoothingGroup == right.SmoothingGroup
657
+ && left.ManualUv == right.ManualUv && left.TextureGroup == right.TextureGroup && left.ElementGroup == right.ElementGroup;
658
+ }
659
+
660
+ private static bool Stable(CanonicalMeshSnapshot before, CanonicalMeshSnapshot after)
661
+ {
662
+ return CanonicalMeshSnapshot.IdentityAndTransformEqual(before, after);
663
+ }
664
+
665
+ private static bool SameEdge(int a, int b, int c, int d) { return a == c && b == d || a == d && b == c; }
666
+ private static Vector3 Position(CanonicalMeshSnapshot snapshot, int handle) { return snapshot.SharedVertices.Single(value => value.Handle == handle).CanonicalPosition; }
667
+ private static bool PlaneContains(Vector3 point, Vector3 origin, Vector3 normal) { return CanonicalMeshSnapshot.ExactEquals(Vector3.Dot(point - origin, normal), 0f); }
668
+ private static bool Finite(CanonicalMeshSnapshot.ChannelValue value) { return value != null && (!value.IsPresent || Finite(value.Value)); }
669
+ private static bool Finite(Vector2 value) { return !float.IsNaN(value.x) && !float.IsInfinity(value.x) && !float.IsNaN(value.y) && !float.IsInfinity(value.y); }
670
+ private static bool Finite(Vector3 value) { return !float.IsNaN(value.x) && !float.IsInfinity(value.x) && !float.IsNaN(value.y) && !float.IsInfinity(value.y) && !float.IsNaN(value.z) && !float.IsInfinity(value.z); }
671
+ private static bool Finite(Vector4 value) { return !float.IsNaN(value.x) && !float.IsInfinity(value.x) && !float.IsNaN(value.y) && !float.IsInfinity(value.y) && !float.IsNaN(value.z) && !float.IsInfinity(value.z) && !float.IsNaN(value.w) && !float.IsInfinity(value.w); }
672
+ }
673
+ }
674
+ #endif