@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,561 @@
1
+ #if UNITY_EDITOR
2
+ using System;
3
+ using System.Collections.Generic;
4
+ using System.Globalization;
5
+ using System.IO;
6
+ using System.Linq;
7
+ using System.Security.Cryptography;
8
+ using System.Text;
9
+ using UnityEditor;
10
+ using UnityEditor.PackageManager;
11
+ using UnityEditor.PackageManager.Requests;
12
+ using UnityCli.Protocol;
13
+ using PackageInfo = UnityEditor.PackageManager.PackageInfo;
14
+
15
+ namespace UnityCli
16
+ {
17
+ public static partial class UnityCliBridge
18
+ {
19
+ internal static partial class UnityCliPackageResolveCoordinator
20
+ {
21
+ private const string ActiveScope = "package-resolve";
22
+ private static readonly Dictionary<string, ActivePackageOperationRecord> TerminalRoots = new Dictionary<string, ActivePackageOperationRecord>(StringComparer.Ordinal);
23
+
24
+ private sealed class PackageActiveDecision { internal bool Execute; internal object TerminalEnvelope; }
25
+ private sealed class ActivePackageOperationRecord
26
+ {
27
+ internal string RequestId; internal string RequestDigest; internal string EditorSessionId; internal DateTimeOffset AbsoluteDeadlineUtc;
28
+ internal string State; internal string Phase; internal DateTimeOffset? AcceptedAt; internal DateTimeOffset? StartedAt;
29
+ internal object TerminalEnvelope; internal Dictionary<string, object> PackageOperation;
30
+ }
31
+
32
+ /// <summary>每帧只推进当前全局 lease owner;status/read 不进入 mutation lane。</summary>
33
+ private static void TickPackageRoots()
34
+ {
35
+ var roots = OpenRoots().OrderBy(root => root.AcceptedAt).ThenBy(root => root.RequestId, StringComparer.Ordinal).ToList();
36
+ foreach (var root in roots.Where(root => !string.Equals(root.EditorSessionId, EditorSessionId(), StringComparison.Ordinal)))
37
+ {
38
+ if (PackageEffectStarted(root.RequestId)) TerminalTimeout(root, "The Editor session changed after the Package root crossed effect_started.");
39
+ else TerminalError(root, "E_EDITOR_SESSION_REPLACED", "The Editor session changed before Package files or Resolve began.", null);
40
+ }
41
+ foreach (var root in roots.Where(root => string.Equals(root.EditorSessionId, EditorSessionId(), StringComparison.Ordinal) && !IsTerminal(root)))
42
+ if (UnityCliSessionMutationLease.IsOwnedBy(root.RequestId, root.RequestDigest)) TickRoot(root);
43
+ }
44
+
45
+ private static void TickRoot(ActivePackageOperationRecord root)
46
+ {
47
+ var phase = Text(root.PackageOperation, "phase");
48
+ if (!Same(Text(root.PackageOperation, "reloadEpoch"), CurrentReloadEpoch()))
49
+ {
50
+ if (phase == "resolve_returned" || phase == "list_pending" || phase == "list_succeeded" || phase == "reload_observed")
51
+ {
52
+ AdvancePackageOperation(root.RequestId, current => { current.PackageOperation["reloadObserved"] = true; current.PackageOperation["reloadEpoch"] = CurrentReloadEpoch(); current.PackageOperation["phase"] = "reload_observed"; });
53
+ }
54
+ else TerminalTimeout(root, "Package root crossed a domain reload before its mutation effect obtained a read-only recovery fence.");
55
+ return;
56
+ }
57
+ var expired = DateTimeOffset.UtcNow >= root.AbsoluteDeadlineUtc;
58
+ if (expired && !PackageEffectStarted(root.RequestId)) { TerminalError(root, "E_EXECUTION_TIMEOUT", "Package root did not begin before its immutable deadline.", null); return; }
59
+ if (phase == "awaiting_files") return;
60
+ if (phase == "files_committing")
61
+ {
62
+ if (expired)
63
+ {
64
+ TerminalTimeout(root, FileExecutorAlive(root.PackageOperation)
65
+ ? "Package file executor did not settle before the immutable deadline."
66
+ : "Package file executor exited without fresh proof before the immutable deadline.");
67
+ }
68
+ return;
69
+ }
70
+ if (expired && (phase == "files_proven" || phase == "resolve_dispatching")) { TerminalTimeout(root, "Package root reached its immutable deadline before Resolve dispatch completed."); return; }
71
+ if (phase == "files_proven") { DispatchResolve(root); return; }
72
+ if (phase == "resolve_returned") { StartList(root, false); return; }
73
+ if (phase == "reload_observed") { if (!UnityBusy()) StartList(root, true); return; }
74
+ if (phase == "list_succeeded")
75
+ {
76
+ ObserveStablePackageInfo(root);
77
+ if (expired && !UnityBusy())
78
+ {
79
+ var current = RequiredRoot(root.RequestId);
80
+ if (!IsTerminal(current) && Long(current.PackageOperation, "stableFrames") == 0) TerminalTimeout(current, "PackageInfo, manifest, or lock readback did not converge after explicit List success.");
81
+ }
82
+ return;
83
+ }
84
+ if (phase == "list_pending") ObserveList(root);
85
+ }
86
+
87
+ /// <summary>先持久化 dispatching,再唯一调用 void Resolve;返回后才允许建立 List fence。</summary>
88
+ private static void DispatchResolve(ActivePackageOperationRecord root)
89
+ {
90
+ if (UnityBusy()) return;
91
+ // PlayMode 下 PackageManager.Resolve 无法完成;同步调用会永久阻塞主线程(heartbeat/queue 全停)。
92
+ // pump 每帧重试:PlayMode 期间不 dispatch,immutable deadline 到期由 TickRoot 判超时,主线程保持可用。
93
+ if (EditorApplication.isPlayingOrWillChangePlaymode) return;
94
+ if (!Same(Text(root.PackageOperation, "expectedManifestSha256"), HashFile(ManifestPath())))
95
+ {
96
+ TerminalTimeout(root, "manifest.json changed after files_proven and before PackageManager.Resolve.");
97
+ return;
98
+ }
99
+ if (root.Phase == "accepted_before_effect")
100
+ MarkPackageResolveEffectStarted(root.RequestId, "package-resolve-v1", new Dictionary<string, object> { { "operation", Text(root.PackageOperation, "operation") }, { "expectedManifestSha256", Text(root.PackageOperation, "expectedManifestSha256") } });
101
+ AdvancePackageOperation(root.RequestId, current => current.PackageOperation["phase"] = "resolve_dispatching");
102
+ try
103
+ {
104
+ var dispatchRoot = RequiredRoot(root.RequestId);
105
+ RequireLease(dispatchRoot);
106
+ Client.Resolve();
107
+ AdvancePackageOperation(root.RequestId, current => { current.PackageOperation["resolveReturned"] = true; current.PackageOperation["phase"] = "resolve_returned"; });
108
+ }
109
+ catch (Exception exception)
110
+ {
111
+ TerminalTimeout(RequiredRoot(root.RequestId), "PackageManager.Resolve threw after effect_started: " + exception.GetType().Name + ".");
112
+ return;
113
+ }
114
+ StartList(RequiredRoot(root.RequestId), false);
115
+ }
116
+
117
+ /// <summary>reload 后只允许 read-only List recovery fence,绝不重放 Resolve。</summary>
118
+ private static void StartList(ActivePackageOperationRecord root, bool afterReload)
119
+ {
120
+ try
121
+ {
122
+ var request = Client.List(false, true);
123
+ if (request == null) { TerminalTimeout(root, "PackageManager.List did not return a completion fence."); return; }
124
+ ActiveLists[root.RequestId] = request;
125
+ AdvancePackageOperation(root.RequestId, current => { current.PackageOperation["phase"] = "list_pending"; current.PackageOperation["listAfterReload"] = afterReload; });
126
+ }
127
+ catch (Exception exception) { TerminalTimeout(root, "PackageManager.List could not establish a completion fence: " + exception.GetType().Name + "."); }
128
+ }
129
+
130
+ private static void ObserveList(ActivePackageOperationRecord root)
131
+ {
132
+ ListRequest request;
133
+ if (!ActiveLists.TryGetValue(root.RequestId, out request) || request == null)
134
+ {
135
+ if (Bool(root.PackageOperation, "reloadObserved")) { AdvancePackageOperation(root.RequestId, current => current.PackageOperation["phase"] = "reload_observed"); return; }
136
+ TerminalTimeout(root, "The PackageManager List completion fence was lost before terminal observation.");
137
+ return;
138
+ }
139
+ if (!request.IsCompleted) return;
140
+ ActiveLists.Remove(root.RequestId);
141
+ if (request.Status >= StatusCode.Failure)
142
+ {
143
+ if (Bool(root.PackageOperation, "listAfterReload")) { TerminalTimeout(root, "The recovery PackageManager List fence failed after reload."); return; }
144
+ var error = request.Error;
145
+ ResolveFailure(root, error == null ? "unknown" : error.errorCode.ToString(), error == null ? "PackageManager List failed." : error.message);
146
+ return;
147
+ }
148
+ List<Dictionary<string, object>> listed;
149
+ var predicateNames = new HashSet<string>(Dictionaries(root.PackageOperation, "predicates").Where(predicate => predicate.ContainsKey("packageTreeHash")).Select(predicate => Text(predicate, "name")), StringComparer.Ordinal);
150
+ try { listed = Snapshot(request.Result, predicateNames).OrderBy(package => Text(package, "name"), StringComparer.Ordinal).ToList(); }
151
+ catch (Exception exception) { TerminalTimeout(root, "PackageManager List success could not be persisted: " + exception.GetType().Name + "."); return; }
152
+ AdvancePackageOperation(root.RequestId, current =>
153
+ {
154
+ current.PackageOperation["listPackages"] = listed.Cast<object>().ToList();
155
+ current.PackageOperation["listSucceeded"] = true;
156
+ current.PackageOperation["stableFrames"] = (long)0;
157
+ current.PackageOperation["phase"] = "list_succeeded";
158
+ });
159
+ }
160
+
161
+ /// <summary>显式 List success 先持久化,再等待 fresh PackageInfo、manifest 与 lock 连续稳定。</summary>
162
+ private static void ObserveStablePackageInfo(ActivePackageOperationRecord root)
163
+ {
164
+ if (UnityBusy()) return;
165
+ if (RefreshListAfterRegisteredSnapshotMoves(root)) return;
166
+ Dictionary<string, object> proof;
167
+ try { proof = Observe(root.PackageOperation, Dictionaries(root.PackageOperation, "listPackages"), PackageInfo.GetAllRegisteredPackages()); }
168
+ catch (Exception exception) { TerminalTimeout(root, "Fresh PackageInfo readback failed: " + exception.GetType().Name + "."); return; }
169
+ if (proof == null) { AdvancePackageOperation(root.RequestId, current => current.PackageOperation["stableFrames"] = (long)0); return; }
170
+ var snapshotHash = HashJson(proof);
171
+ var previousHash = Text(root.PackageOperation, "observedPackageSnapshotHash");
172
+ var frames = Same(snapshotHash, previousHash) ? Long(root.PackageOperation, "stableFrames") + 1 : 1L;
173
+ AdvancePackageOperation(root.RequestId, current => { current.PackageOperation["observedPackageSnapshotHash"] = snapshotHash; current.PackageOperation["stableFrames"] = frames; });
174
+ if (frames < 3) return;
175
+ var terminalData = PublicTerminalData(root.PackageOperation, proof);
176
+ var envelope = ProtocolEnvelopeFactory.Success(root.RequestId, terminalData);
177
+ MarkPackageResolveEffectProven(root.RequestId, "package-list-packageinfo-files-v1", Encoding.UTF8.GetBytes(UnityCliSerializer.Serialize(terminalData)), envelope);
178
+ PersistPackageTerminal(root.RequestId, envelope, "completed");
179
+ }
180
+
181
+ /// <summary>
182
+ /// PackageInfo 在文件替换后可能晚于首个 List fence 更新。只有 fresh snapshot 连续稳定且仍与
183
+ /// 已持久化 List 不同,才重建一个 read-only List fence;不得重放 Resolve 或文件 effect。
184
+ /// </summary>
185
+ private static bool RefreshListAfterRegisteredSnapshotMoves(ActivePackageOperationRecord root)
186
+ {
187
+ var predicates = Dictionaries(root.PackageOperation, "predicates");
188
+ var predicateNames = new HashSet<string>(predicates.Where(predicate => predicate.ContainsKey("packageTreeHash")).Select(predicate => Text(predicate, "name")), StringComparer.Ordinal);
189
+ List<Dictionary<string, object>> registered;
190
+ try { registered = Snapshot(PackageInfo.GetAllRegisteredPackages(), predicateNames).OrderBy(package => Text(package, "name"), StringComparer.Ordinal).ToList(); }
191
+ catch (Exception exception) { TerminalTimeout(root, "Fresh PackageInfo convergence snapshot failed: " + exception.GetType().Name + "."); return true; }
192
+ var listed = Dictionaries(root.PackageOperation, "listPackages").OrderBy(package => Text(package, "name"), StringComparer.Ordinal).ToList();
193
+ if (SameJson(listed, registered)) return false;
194
+
195
+ var snapshotHash = HashJson(registered);
196
+ var frames = Same(snapshotHash, Text(root.PackageOperation, "registeredMismatchHash"))
197
+ ? Long(root.PackageOperation, "registeredMismatchStableFrames") + 1
198
+ : 1L;
199
+ AdvancePackageOperation(root.RequestId, current =>
200
+ {
201
+ current.PackageOperation["registeredMismatchHash"] = snapshotHash;
202
+ current.PackageOperation["registeredMismatchStableFrames"] = frames;
203
+ current.PackageOperation["stableFrames"] = (long)0;
204
+ });
205
+ if (frames < 2) return true;
206
+
207
+ var currentRoot = RequiredRoot(root.RequestId);
208
+ if (Long(currentRoot.PackageOperation, "listRefreshAttempts") >= 8) return true;
209
+ AdvancePackageOperation(root.RequestId, current =>
210
+ {
211
+ current.PackageOperation["listRefreshAttempts"] = Long(current.PackageOperation, "listRefreshAttempts") + 1;
212
+ current.PackageOperation["registeredMismatchHash"] = string.Empty;
213
+ current.PackageOperation["registeredMismatchStableFrames"] = (long)0;
214
+ });
215
+ StartList(RequiredRoot(root.RequestId), false);
216
+ return true;
217
+ }
218
+
219
+ private static Dictionary<string, object> Observe(Dictionary<string, object> operation, IEnumerable<Dictionary<string, object>> listed, IEnumerable<PackageInfo> registered)
220
+ {
221
+ if (!Same(Text(operation, "expectedManifestSha256"), HashFile(ManifestPath()))) return null;
222
+ var predicates = Dictionaries(operation, "predicates");
223
+ var predicateNames = new HashSet<string>(predicates.Where(predicate => predicate.ContainsKey("packageTreeHash")).Select(predicate => Text(predicate, "name")), StringComparer.Ordinal);
224
+ var left = (listed ?? Enumerable.Empty<Dictionary<string, object>>()).OrderBy(x => Text(x, "name"), StringComparer.Ordinal).ToList();
225
+ var right = Snapshot(registered, predicateNames).OrderBy(x => Text(x, "name"), StringComparer.Ordinal).ToList();
226
+ if (!SameJson(left, right)) return null;
227
+ foreach (var predicate in predicates) if (!PredicateHolds(predicate, right)) return null;
228
+ var selectedNames = new HashSet<string>(predicates.Select(p => Text(p, "name")), StringComparer.Ordinal);
229
+ var selected = (predicates.Count == 0 ? right : right.Where(p => selectedNames.Contains(Text(p, "name"))).ToList())
230
+ .Select(package => new Dictionary<string, object> { { "name", Text(package, "name") }, { "version", Text(package, "version") }, { "source", Text(package, "source") } }).ToList();
231
+ var lockHash = HashFile(Path.Combine(ProjectPath(), "Packages", "packages-lock.json"));
232
+ if (!IsSha256Text(lockHash)) return null;
233
+ return new Dictionary<string, object> { { "status", "resolved" }, { "manifestHash", Text(operation, "expectedManifestSha256") }, { "lockHash", lockHash }, { "packageSnapshotHash", HashJson(right) }, { "packageCount", (long)right.Count }, { "packages", selected } };
234
+ }
235
+
236
+ private static List<Dictionary<string, object>> Snapshot(IEnumerable<PackageInfo> packages, HashSet<string> treeProofNames)
237
+ {
238
+ return (packages ?? Enumerable.Empty<PackageInfo>()).Where(package => package != null).Select(package => new Dictionary<string, object>
239
+ {
240
+ { "name", package.name ?? string.Empty }, { "version", package.version ?? string.Empty },
241
+ { "source", package.source.ToString().ToLowerInvariant() }, { "resolvedPath", package.resolvedPath ?? string.Empty },
242
+ { "packageTreeHash", treeProofNames != null && treeProofNames.Contains(package.name ?? string.Empty) ? HashDirectory(package.resolvedPath) : null }
243
+ }).ToList();
244
+ }
245
+
246
+ private static bool PredicateHolds(Dictionary<string, object> predicate, List<Dictionary<string, object>> packages)
247
+ {
248
+ var package = packages.FirstOrDefault(item => Same(Text(item, "name"), Text(predicate, "name")));
249
+ object presentValue;
250
+ if (predicate.TryGetValue("present", out presentValue) && presentValue is bool && !(bool)presentValue) return package == null;
251
+ if (package == null) return false;
252
+ foreach (var key in new[] { "version", "packageTreeHash" })
253
+ if (predicate.ContainsKey(key) && !Same(Text(predicate, key), Text(package, key))) return false;
254
+ if (predicate.ContainsKey("resolvedPath") && !SamePath(Text(predicate, "resolvedPath"), Text(package, "resolvedPath"))) return false;
255
+ if (predicate.ContainsKey("requestedVersion") && !Same(Text(predicate, "requestedVersion"), Text(package, "version"))) return false;
256
+ return true;
257
+ }
258
+
259
+ private static object PublicTerminalData(Dictionary<string, object> operation, Dictionary<string, object> resolve)
260
+ {
261
+ object seed;
262
+ if (!operation.TryGetValue("publicResultSeed", out seed) || seed == null) return resolve;
263
+ var source = seed as Dictionary<string, object>;
264
+ if (source == null) throw new InvalidDataException("Package public result seed is invalid.");
265
+ var result = source.ToDictionary(pair => pair.Key, pair => pair.Value, StringComparer.Ordinal);
266
+ result["resolve"] = resolve;
267
+ return result;
268
+ }
269
+
270
+ private static void InitializeRoot(ActivePackageOperationRecord root, StartArgs args)
271
+ {
272
+ if (root.PackageOperation != null) return;
273
+ root.State = "accepted"; root.Phase = "accepted_before_effect"; root.AcceptedAt = DateTimeOffset.UtcNow;
274
+ root.PackageOperation = new Dictionary<string, object> {
275
+ { "phase", args.Operation == "resolve" ? "files_proven" : "awaiting_files" }, { "operation", args.Operation },
276
+ { "input", args.Input ?? new Dictionary<string, object>() }, { "resolveReturned", false }, { "reloadObserved", false }, { "reloadEpoch", CurrentReloadEpoch() }
277
+ };
278
+ if (args.Operation == "resolve") { root.PackageOperation["expectedManifestSha256"] = HashFile(ManifestPath()); root.PackageOperation["predicates"] = new List<object>(); root.PackageOperation["filesProof"] = null; root.PackageOperation["publicResultSeed"] = null; }
279
+ }
280
+
281
+ private static void ValidateStart(StartArgs args)
282
+ {
283
+ if (args == null || string.IsNullOrWhiteSpace(args.ExpectedEditorSessionId) || !(args.Operation == "resolve" || args.Operation == "install" || args.Operation == "remove" || args.Operation == "deploy" || args.Operation == "restore") || args.Input == null) throw Schema("Package root input is invalid.");
284
+ if (!string.Equals(args.ExpectedEditorSessionId, EditorSessionId(), StringComparison.Ordinal)) throw new BridgeCommandException("E_EDITOR_SESSION_REPLACED", "The selected Editor session changed before Package execution.");
285
+ }
286
+
287
+ private static void ValidateProve(ProveArgs args)
288
+ {
289
+ if (args == null || !IsSafeId(args.RootRequestId) || args.ExecutorPid <= 0 || !IsSha256Text(args.ExecutorCapability) || !IsSha256Text(args.ExpectedManifestSha256) || args.FilesProof == null || args.PublicResultSeed == null) throw Schema("Package file proof input is invalid.");
290
+ }
291
+
292
+ /// <summary>文件 proof 必须由 Editor fresh readback重算,不能把 TS request echo 当作成功依据。</summary>
293
+ private static void VerifyFileProof(string operation, string expectedManifestHash, Dictionary<string, object> proof, Dictionary<string, object> seed)
294
+ {
295
+ if (!Same(expectedManifestHash, HashFile(ManifestPath()))) throw Unknown("manifest.json does not match the claimed Package file proof.");
296
+ object seedFiles;
297
+ var publicProof = PublicFileProof(proof);
298
+ if (!seed.TryGetValue("files", out seedFiles) || !SameJson(seedFiles, publicProof)) throw Unknown("Package public result files do not match the claimed file proof.");
299
+ if (operation == "install" || operation == "remove") return;
300
+ var target = Text(proof, "targetPath");
301
+ if (!IsUnderPackages(target)) throw Unknown("Package target path is outside the project Packages directory.");
302
+ if (operation == "deploy")
303
+ {
304
+ if (!Same(Text(proof, "targetHash"), HashDirectory(target)) || Long(proof, "copiedFileCount") != CountFiles(target)) throw Unknown("Deployed package tree does not match the claimed file proof.");
305
+ if (!OptionalSame(Text(proof, "backupPackageVersion"), Text(seed, "backupPackageVersion"))) throw Unknown("Deployed package backup version does not match the public result seed.");
306
+ }
307
+ else
308
+ {
309
+ if (Bool(proof, "restoredFromBackup")) { if (!Same(Text(proof, "targetHash"), HashDirectory(target))) throw Unknown("Restored package tree does not match the claimed file proof."); }
310
+ else if (Directory.Exists(target)) throw Unknown("Package target still exists after a remove-only restore.");
311
+ var backup = Text(proof, "backupPath");
312
+ if (!string.IsNullOrEmpty(backup) && Directory.Exists(backup)) throw Unknown("Package backup still exists after restore.");
313
+ }
314
+ var metadata = Text(proof, "metadataPath");
315
+ if (!string.IsNullOrEmpty(metadata) && !Same(Text(proof, "metadataHash"), HashFile(metadata))) throw Unknown("Package deployment metadata does not match the claimed proof.");
316
+ }
317
+
318
+ /// <summary>内部 proof 保留绝对路径;公开 seed 只允许当前项目内的相对业务路径。</summary>
319
+ private static Dictionary<string, object> PublicFileProof(Dictionary<string, object> proof)
320
+ {
321
+ var result = proof.ToDictionary(pair => pair.Key, pair => pair.Value, StringComparer.Ordinal);
322
+ foreach (var field in new[] { "manifestPath", "targetPath", "metadataPath", "backupPath" })
323
+ {
324
+ object value;
325
+ if (result.TryGetValue(field, out value) && value is string && !string.IsNullOrEmpty((string)value))
326
+ result[field] = PublicProjectPath((string)value, field);
327
+ }
328
+ return result;
329
+ }
330
+
331
+ /// <summary>Package 公开路径必须位于当前项目内,越界值按未证明终态处理。</summary>
332
+ private static string PublicProjectPath(string value, string field)
333
+ {
334
+ var root = Path.GetFullPath(ProjectRoot()).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
335
+ var full = Path.GetFullPath(value);
336
+ if (string.Equals(full, root, StringComparison.OrdinalIgnoreCase)
337
+ || !full.StartsWith(root + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase))
338
+ throw Unknown("Package public " + field + " is outside the selected project.");
339
+ return Path.GetRelativePath(root, full).Replace('\\', '/');
340
+ }
341
+
342
+ private static void ResolveFailure(ActivePackageOperationRecord root, string errorCode, string message)
343
+ {
344
+ var effects = CommittedEffects(root.PackageOperation);
345
+ var details = new Dictionary<string, object> { { "packageErrorCode", errorCode }, { "committedEffects", effects } };
346
+ TerminalError(root, "E_PACKAGE_RESOLVE_FAILED", string.IsNullOrWhiteSpace(message) ? "PackageManager resolution failed." : message, details);
347
+ }
348
+
349
+ private static object CommittedEffects(Dictionary<string, object> operation)
350
+ {
351
+ object proof;
352
+ return operation.TryGetValue("filesProof", out proof) && proof != null ? proof : new Dictionary<string, object> { { "resolveRequested", true } };
353
+ }
354
+
355
+ private static void TerminalTimeout(ActivePackageOperationRecord root, string message)
356
+ {
357
+ var details = new Dictionary<string, object> { { "committedEffects", CommittedEffects(root.PackageOperation) } };
358
+ PersistPackageTerminal(root.RequestId, ProtocolEnvelopeFactory.Error(root.RequestId, "E_EXECUTION_TIMEOUT", message + " The result could not be confirmed.", details, new[] { "Inspect Package Manager and package files before submitting a new request." }), "failed");
359
+ }
360
+
361
+ private static void TerminalError(ActivePackageOperationRecord root, string code, string message, object details, IEnumerable<string> nextActions = null)
362
+ {
363
+ PersistPackageTerminal(root.RequestId, ProtocolEnvelopeFactory.Error(root.RequestId, code, message, details, nextActions ?? new[] { "Inspect Package Manager and package files before retrying." }), "failed");
364
+ }
365
+
366
+ private static string BusyEnvelope(string requestId) { return UnityCliSerializer.Serialize(ProtocolEnvelopeFactory.Error(requestId, "E_UNITY_BUSY", "Another mutation owns the selected Unity instance.", null, new[] { "Wait for the current mutation to reach its terminal result, then retry." }, true, 250)); }
367
+ private static bool UnityBusy() { return EditorApplication.isCompiling || EditorApplication.isUpdating; }
368
+ private static void RequireLease(ActivePackageOperationRecord root) { if (root == null || !UnityCliSessionMutationLease.IsOwnedBy(root.RequestId, root.RequestDigest)) throw new BridgeCommandException("E_UNITY_BUSY", "Package root no longer owns the exact session mutation lease."); }
369
+ private static ActivePackageOperationRecord RequiredRoot(string requestId)
370
+ {
371
+ ActivePackageOperationRecord terminal;
372
+ if (TerminalRoots.TryGetValue(requestId, out terminal)) return terminal;
373
+ var root = LoadPackageActiveOperation();
374
+ if (root == null || !string.Equals(root.RequestId, requestId, StringComparison.Ordinal)) throw new BridgeCommandException("E_REQUEST_NOT_FOUND", "Package active operation was not found.");
375
+ return root;
376
+ }
377
+ private static List<ActivePackageOperationRecord> OpenRoots()
378
+ {
379
+ var root = LoadPackageActiveOperation();
380
+ return root == null ? new List<ActivePackageOperationRecord>() : new List<ActivePackageOperationRecord> { root };
381
+ }
382
+ private static PackageActiveDecision AcceptPackageActiveOperation(BridgeRequest request, byte[] raw, UnityCliToolCompletionContract contract, bool allowCreate, Action beforeAccess, Action beforeCreate, Action<ActivePackageOperationRecord> initialize)
383
+ {
384
+ var requestDigest = UnityCliRequestDigest.Compute(raw, request.InstanceId);
385
+ ActivePackageOperationRecord terminal;
386
+ if (TerminalRoots.TryGetValue(request.RequestId, out terminal))
387
+ {
388
+ if (!string.Equals(terminal.RequestDigest, requestDigest, StringComparison.Ordinal))
389
+ throw new BridgeCommandException("E_REQUEST_ID_REUSED", "Package requestId was reused with different input.");
390
+ return new PackageActiveDecision { TerminalEnvelope = terminal.TerminalEnvelope };
391
+ }
392
+ var root = LoadPackageActiveOperation();
393
+ if (root == null)
394
+ {
395
+ if (!allowCreate) throw new BridgeCommandException("E_EXECUTION_TIMEOUT", "Package active state is missing while the exact lease still exists; outcome is unknown.");
396
+ if (beforeCreate != null) beforeCreate();
397
+ if (beforeAccess != null) beforeAccess();
398
+ DateTimeOffset deadline;
399
+ if (!DateTimeOffset.TryParse(request.Execution.AbsoluteDeadlineUtc, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out deadline)) throw Schema("Package deadline is invalid.");
400
+ root = new ActivePackageOperationRecord { RequestId = request.RequestId, RequestDigest = requestDigest, EditorSessionId = EditorSessionId(), AbsoluteDeadlineUtc = deadline, State = "accepted", Phase = "accepted_before_effect", AcceptedAt = DateTimeOffset.UtcNow };
401
+ initialize(root);
402
+ SavePackageActiveOperation(root);
403
+ return new PackageActiveDecision { Execute = true };
404
+ }
405
+ if (!string.Equals(root.EditorSessionId, EditorSessionId(), StringComparison.Ordinal))
406
+ {
407
+ TerminalTimeout(root, "The Editor session changed while a Package operation was active.");
408
+ return new PackageActiveDecision { TerminalEnvelope = RequiredRoot(root.RequestId).TerminalEnvelope };
409
+ }
410
+ if (string.Equals(root.RequestId, request.RequestId, StringComparison.Ordinal))
411
+ {
412
+ if (!string.Equals(root.RequestDigest, requestDigest, StringComparison.Ordinal))
413
+ throw new BridgeCommandException("E_REQUEST_ID_REUSED", "Package requestId was reused with different input.");
414
+ return new PackageActiveDecision { Execute = true };
415
+ }
416
+ return new PackageActiveDecision { TerminalEnvelope = ProtocolEnvelopeFactory.Error(request.RequestId, "E_UNITY_BUSY", "Another Package operation is active.", null) };
417
+ }
418
+
419
+ private static void AdvancePackageOperation(string requestId, Action<ActivePackageOperationRecord> change)
420
+ {
421
+ var root = RequiredRoot(requestId);
422
+ if (IsTerminal(root)) return;
423
+ change(root);
424
+ SavePackageActiveOperation(root);
425
+ }
426
+ private static bool PackageEffectStarted(string requestId)
427
+ {
428
+ var root = RequiredRoot(requestId);
429
+ return root.StartedAt.HasValue || root.Phase == "effect_started" || root.Phase == "effect_proven";
430
+ }
431
+ private static void MarkPackageFileEffectStartedActive(string requestId, Dictionary<string, object> plan, string operation)
432
+ {
433
+ AdvancePackageOperation(requestId, root =>
434
+ {
435
+ RequireLease(root);
436
+ if (root.Phase != "accepted_before_effect" || Text(root.PackageOperation, "phase") != "awaiting_files" || root.PackageOperation.ContainsKey("filePlan")) throw new BridgeCommandException("E_EXECUTION_FAILED", "Package active operation is not awaiting its file barrier.");
437
+ root.PackageOperation["filePlan"] = plan; root.PackageOperation["phase"] = "files_committing";
438
+ root.Phase = "effect_started"; root.State = "running"; root.StartedAt = DateTimeOffset.UtcNow;
439
+ });
440
+ }
441
+ private static void MarkPackageResolveEffectStarted(string requestId, string kind, object continuation)
442
+ {
443
+ AdvancePackageOperation(requestId, root => { RequireLease(root); root.Phase = "effect_started"; root.State = "running"; root.StartedAt = DateTimeOffset.UtcNow; });
444
+ }
445
+ private static void MarkPackageResolveEffectProven(string requestId, string kind, byte[] proof, object envelope)
446
+ {
447
+ AdvancePackageOperation(requestId, root => { root.Phase = "effect_proven"; });
448
+ }
449
+ private static object PersistPackageTerminal(string requestId, object envelope, string state)
450
+ {
451
+ var root = RequiredRoot(requestId);
452
+ bool isOwned;
453
+ if (!UnityCliSessionMutationLease.TryIsOwnedBy(root.RequestId, root.RequestDigest, out isOwned) || !isOwned)
454
+ envelope = ProtocolEnvelopeFactory.Error(root.RequestId, "E_EXECUTION_TIMEOUT", "Package operation lost its exact mutation lease after effect; outcome is unknown.", null, new[] { "Inspect Package Manager and package files before submitting another mutation." });
455
+ root.State = state; root.Phase = "result_persisted"; root.TerminalEnvelope = envelope;
456
+ SavePackageActiveOperation(root);
457
+ var selectorDigest = UnityCliSerializer.Sha256Canonical(root.PackageOperation["input"]);
458
+ var first = UnityCliActiveOperation.StoreTerminalFirst(ActiveScope, root.RequestId, root.RequestDigest, selectorDigest, envelope);
459
+ root.TerminalEnvelope = first;
460
+ TerminalRoots[requestId] = root;
461
+ UnityCliActiveOperation.BeginExactTerminalCleanup(ActiveScope, root.RequestId, root.RequestDigest);
462
+ return first;
463
+ }
464
+ private static bool IsTerminal(ActivePackageOperationRecord root) { return root != null && root.Phase == "result_persisted"; }
465
+ private static void SavePackageActiveOperation(ActivePackageOperationRecord root)
466
+ {
467
+ ValidatePackageActiveOperation(root);
468
+ UnityCliActiveOperation.Save(ActiveScope, new Dictionary<string, object> {
469
+ { "requestId", root.RequestId }, { "requestDigest", root.RequestDigest }, { "editorSessionId", root.EditorSessionId }, { "absoluteDeadlineUtc", root.AbsoluteDeadlineUtc.ToString("O", CultureInfo.InvariantCulture) },
470
+ { "state", root.State }, { "phase", root.Phase }, { "acceptedAt", root.AcceptedAt.Value.ToString("O", CultureInfo.InvariantCulture) },
471
+ { "startedAt", root.StartedAt.HasValue ? (object)root.StartedAt.Value.ToString("O", CultureInfo.InvariantCulture) : null }, { "terminalEnvelope", root.TerminalEnvelope }, { "packageOperation", root.PackageOperation }
472
+ });
473
+ }
474
+ private static ActivePackageOperationRecord LoadPackageActiveOperation()
475
+ {
476
+ try
477
+ {
478
+ var data = UnityCliActiveOperation.Load(ActiveScope);
479
+ if (data == null) return null;
480
+ var allowed = new HashSet<string>(new[] { "requestId", "requestDigest", "editorSessionId", "absoluteDeadlineUtc", "state", "phase", "acceptedAt", "startedAt", "terminalEnvelope", "packageOperation" }, StringComparer.Ordinal);
481
+ if (data.Keys.Any(key => !allowed.Contains(key))) throw new InvalidDataException("Package active state has unknown fields.");
482
+ DateTimeOffset deadline; DateTimeOffset accepted; DateTimeOffset started;
483
+ if (!DateTimeOffset.TryParse(Text(data, "absoluteDeadlineUtc"), CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out deadline) || !DateTimeOffset.TryParse(Text(data, "acceptedAt"), CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out accepted)) throw new InvalidDataException("Package active state timestamps are invalid.");
484
+ var root = new ActivePackageOperationRecord { RequestId = Text(data, "requestId"), RequestDigest = Text(data, "requestDigest"), EditorSessionId = Text(data, "editorSessionId"), AbsoluteDeadlineUtc = deadline, State = Text(data, "state"), Phase = Text(data, "phase"), AcceptedAt = accepted, TerminalEnvelope = data.ContainsKey("terminalEnvelope") ? data["terminalEnvelope"] : null, PackageOperation = data.ContainsKey("packageOperation") ? data["packageOperation"] as Dictionary<string, object> : null };
485
+ if (data.ContainsKey("startedAt") && data["startedAt"] != null) { if (!DateTimeOffset.TryParse(Text(data, "startedAt"), CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out started)) throw new InvalidDataException("Package active state start time is invalid."); root.StartedAt = started; }
486
+ ValidatePackageActiveOperation(root); return root;
487
+ }
488
+ catch (IOException) { throw new BridgeCommandException("E_EXECUTION_TIMEOUT", "Package active state cannot be read; outcome is unknown."); }
489
+ catch (UnauthorizedAccessException) { throw new BridgeCommandException("E_EXECUTION_TIMEOUT", "Package active state cannot be read; outcome is unknown."); }
490
+ catch (BridgeCommandException) { throw; }
491
+ catch (Exception) { throw new BridgeCommandException("E_EXECUTION_TIMEOUT", "Package active state is corrupt; outcome is unknown."); }
492
+ }
493
+ private static void ValidatePackageActiveOperation(ActivePackageOperationRecord root)
494
+ {
495
+ if (root == null || !IsSafeId(root.RequestId) || !IsSha256Text(root.RequestDigest) || !IsPrefixedLowerHex(root.EditorSessionId, "session-", 64) || root.AcceptedAt == null || root.PackageOperation == null || (root.Phase != "accepted_before_effect" && root.Phase != "effect_started" && root.Phase != "effect_proven" && root.Phase != "result_persisted")) throw new InvalidDataException("Package active state is incomplete.");
496
+ if (root.Phase == "result_persisted" && root.TerminalEnvelope == null) throw new InvalidDataException("Package terminal envelope is missing.");
497
+ var operation = root.PackageOperation; var allowed = new HashSet<string>(new[] { "phase", "operation", "input", "filePlan", "fileExecutorPid", "fileExecutorStartIdentity", "fileExecutorCapabilitySha256", "expectedManifestSha256", "predicates", "filesProof", "publicResultSeed", "resolveReturned", "reloadObserved", "reloadEpoch", "listAfterReload", "listSucceeded", "listPackages", "stableFrames", "observedPackageSnapshotHash", "registeredMismatchHash", "registeredMismatchStableFrames", "listRefreshAttempts" }, StringComparer.Ordinal);
498
+ if (operation.Keys.Any(key => !allowed.Contains(key)) || !operation.ContainsKey("phase") || !operation.ContainsKey("operation") || !operation.ContainsKey("input") || !operation.ContainsKey("resolveReturned") || !operation.ContainsKey("reloadObserved") || string.IsNullOrWhiteSpace(Text(operation, "reloadEpoch"))) throw new InvalidDataException("Package active operation fields are incomplete or unknown.");
499
+ var phase = Text(operation, "phase"); if (new[] { "awaiting_files", "files_committing", "files_proven", "resolve_dispatching", "resolve_returned", "list_pending", "list_succeeded", "reload_observed" }.All(value => value != phase)) throw new InvalidDataException("Package active operation phase is invalid.");
500
+ var operationName = Text(operation, "operation"); if (operationName != "resolve" && operationName != "install" && operationName != "remove" && operationName != "deploy" && operationName != "restore") throw new InvalidDataException("Package active operation kind is invalid.");
501
+ if (!(operation["input"] is Dictionary<string, object>) || !(operation["resolveReturned"] is bool) || !(operation["reloadObserved"] is bool)) throw new InvalidDataException("Package active operation input is invalid.");
502
+ var ownerCount = new[] { "fileExecutorPid", "fileExecutorStartIdentity", "fileExecutorCapabilitySha256" }.Count(operation.ContainsKey);
503
+ if (ownerCount != 0 && ownerCount != 3) throw new InvalidDataException("Package active executor identity is incomplete.");
504
+ if (ownerCount == 3 && (!(operation["fileExecutorPid"] is long) || (long)operation["fileExecutorPid"] <= 0 || string.IsNullOrWhiteSpace(Text(operation, "fileExecutorStartIdentity")) || !IsSha256Text(Text(operation, "fileExecutorCapabilitySha256")))) throw new InvalidDataException("Package active executor identity is invalid.");
505
+ if (operation.ContainsKey("expectedManifestSha256") && !IsSha256Text(Text(operation, "expectedManifestSha256"))) throw new InvalidDataException("Package active manifest hash is invalid.");
506
+ if (phase != "awaiting_files" && operationName != "resolve" && (!operation.ContainsKey("filePlan") || ownerCount != 3)) throw new InvalidDataException("Package active file effect fields are missing.");
507
+ var proofPhase = phase == "files_proven" || phase == "resolve_dispatching" || phase == "resolve_returned" || phase == "list_pending" || phase == "list_succeeded" || phase == "reload_observed";
508
+ if (proofPhase && (!operation.ContainsKey("expectedManifestSha256") || !(operation["predicates"] is System.Collections.IList))) throw new InvalidDataException("Package active proof fields are incomplete.");
509
+ if (phase == "list_succeeded" && (!operation.ContainsKey("listPackages") || !(operation["listPackages"] is System.Collections.IList) || !operation.ContainsKey("stableFrames") || !(operation["stableFrames"] is long) || (long)operation["stableFrames"] < 0)) throw new InvalidDataException("Package active List state is incomplete.");
510
+ }
511
+
512
+ private static string ProjectPath() { return Directory.GetParent(UnityEngine.Application.dataPath).FullName; }
513
+ private static string ManifestPath() { return Path.Combine(ProjectPath(), "Packages", "manifest.json"); }
514
+ private static bool IsUnderPackages(string path) { if (string.IsNullOrWhiteSpace(path)) return false; var root = Path.GetFullPath(Path.Combine(ProjectPath(), "Packages") + Path.DirectorySeparatorChar); return Path.GetFullPath(path).StartsWith(root, StringComparison.OrdinalIgnoreCase); }
515
+ private static string HashFile(string path) { if (string.IsNullOrEmpty(path) || !File.Exists(path)) return null; using (var sha = SHA256.Create()) using (var stream = File.OpenRead(path)) return HexText(sha.ComputeHash(stream)); }
516
+ /// <summary>与Node逐目录Ordinal排序和深度优先遍历完全一致,目录.meta不得跨过目录子树。</summary>
517
+ private static string HashDirectory(string root)
518
+ {
519
+ if (string.IsNullOrEmpty(root) || !Directory.Exists(root)) return null;
520
+ using (var sha = SHA256.Create())
521
+ {
522
+ HashDirectoryEntries(sha, root, root);
523
+ sha.TransformFinalBlock(new byte[0], 0, 0);
524
+ return HexText(sha.Hash);
525
+ }
526
+ }
527
+ private static void HashDirectoryEntries(HashAlgorithm sha, string root, string directory)
528
+ {
529
+ foreach (var path in Directory.GetFileSystemEntries(directory).OrderBy(Path.GetFileName, StringComparer.Ordinal))
530
+ {
531
+ var relative = path.Substring(root.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar).Replace('\\', '/');
532
+ var isDirectory = Directory.Exists(path);
533
+ var prefix = Encoding.UTF8.GetBytes(isDirectory ? "dir:" + relative + "/\n" : "file:" + relative + "\n");
534
+ sha.TransformBlock(prefix, 0, prefix.Length, null, 0);
535
+ if (isDirectory) HashDirectoryEntries(sha, root, path);
536
+ else
537
+ {
538
+ var bytes = File.ReadAllBytes(path);
539
+ sha.TransformBlock(bytes, 0, bytes.Length, null, 0);
540
+ var newline = new byte[] { 10 };
541
+ sha.TransformBlock(newline, 0, 1, null, 0);
542
+ }
543
+ }
544
+ }
545
+ private static long CountFiles(string root) { return Directory.Exists(root) ? Directory.GetFiles(root, "*", SearchOption.AllDirectories).LongLength : 0L; }
546
+ private static string HashJson(object value) { using (var sha = SHA256.Create()) return HexText(sha.ComputeHash(Encoding.UTF8.GetBytes(UnityCliSerializer.Serialize(value)))); }
547
+ private static string HexText(byte[] bytes) { return string.Concat(bytes.Select(value => value.ToString("x2", CultureInfo.InvariantCulture))); }
548
+ private static string Text(Dictionary<string, object> data, string key) { object value; return data != null && data.TryGetValue(key, out value) ? value as string : null; }
549
+ private static bool Bool(Dictionary<string, object> data, string key) { object value; return data != null && data.TryGetValue(key, out value) && value is bool && (bool)value; }
550
+ private static long Long(Dictionary<string, object> data, string key) { object value; return data != null && data.TryGetValue(key, out value) ? Convert.ToInt64(value, CultureInfo.InvariantCulture) : -1L; }
551
+ private static bool Same(string left, string right) { return !string.IsNullOrEmpty(left) && string.Equals(left, right, StringComparison.Ordinal); }
552
+ private static bool SamePath(string left, string right) { return !string.IsNullOrEmpty(left) && !string.IsNullOrEmpty(right) && string.Equals(Path.GetFullPath(left), Path.GetFullPath(right), StringComparison.OrdinalIgnoreCase); }
553
+ private static bool SameJson(object left, object right) { return string.Equals(UnityCliSerializer.Serialize(left), UnityCliSerializer.Serialize(right), StringComparison.Ordinal); }
554
+ private static bool IsSha256Text(string value) { return value != null && value.Length == 64 && value.All(ch => (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f')); }
555
+ private static List<Dictionary<string, object>> Dictionaries(Dictionary<string, object> data, string key) { object value; if (data == null || !data.TryGetValue(key, out value)) return new List<Dictionary<string, object>>(); var list = value as System.Collections.IEnumerable; return list == null ? new List<Dictionary<string, object>>() : list.Cast<object>().OfType<Dictionary<string, object>>().ToList(); }
556
+ private static BridgeCommandException Schema(string message) { return new BridgeCommandException("E_SCHEMA_INVALID", message); }
557
+ private static BridgeCommandException Unknown(string message) { return new BridgeCommandException("E_EXECUTION_TIMEOUT", message + " The result could not be confirmed.", null, new[] { "Inspect Package files before submitting a new request." }); }
558
+ }
559
+ }
560
+ }
561
+ #endif