@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,873 @@
1
+ import { createHash } from "node:crypto";
2
+ import { defaultDataDir } from "../platform.js";
3
+ import { EditorBlockerObserver, sanitizeEditorBlockers } from "../editor-blocker-observer.js";
4
+ import { clearInstanceHealthCache, selectInstanceForFlags, selectObservationInstanceForFlags, selectTransitionInstanceForFlags, } from "../instances.js";
5
+ import { rootAdmissionFingerprint } from "./admission.js";
6
+ export const EDITOR_STATE_OBSERVATION_BUDGET_MS = 10_000;
7
+ const BLOCKER_DIAGNOSTIC_BUDGET_MS = 10_000;
8
+ export const EDITOR_STATE_BRIDGE_PROBE_BUDGET_MS = 3_500;
9
+ const DEFAULT_EXECUTION_TIMEOUT_MS = 60_000;
10
+ const REGISTRY_POLL_INTERVAL_MS = 100;
11
+ const ADMISSION_POLL_MIN_MS = 80;
12
+ const ADMISSION_POLL_MAX_MS = 120;
13
+ const ADMISSION_COMPLETE_BUDGET_MS = 1_000;
14
+ const COMPLETION_CONTRACT_VERSION = 1;
15
+ const REQUEST_DIGEST_VERSION = 1;
16
+ const INJECTED_INSTANCE_ID = `unity-${"0".repeat(64)}`;
17
+ // 仅持久 root coordinator 及其 root-bound 文件 barrier 可以跨 domain reload 绑定同一 immutable deadline。
18
+ const ROOT_TRANSITION_COMMANDS = new Set([
19
+ "internal.build.run.start",
20
+ "internal.editor.compile.start",
21
+ "internal.editor.compile.status",
22
+ "internal.editor.refresh.start",
23
+ "internal.editor.refresh.status",
24
+ "internal.asset.refresh.start",
25
+ "internal.asset.refresh.status",
26
+ "internal.package.embed.start",
27
+ "internal.package.embed.status",
28
+ "internal.package.resolve.start",
29
+ "internal.package.resolve.status",
30
+ "internal.package.files.claim",
31
+ "internal.package.files.commit",
32
+ "internal.package.files.prove",
33
+ "internal.package.files.fail",
34
+ "internal.test.run.start",
35
+ "internal.test.run.status",
36
+ "internal.test.run.cancel.plan",
37
+ "internal.test.run.cancel",
38
+ "internal.test.run.cancel.status",
39
+ "internal.navmesh.bake.start",
40
+ "internal.navmesh.bake.status",
41
+ "internal.navmesh.bake.plan",
42
+ "internal.navmesh.bake.snapshot",
43
+ "internal.navmesh.bake.cancel",
44
+ "internal.occlusion.bake.start",
45
+ "internal.occlusion.bake.status",
46
+ "internal.occlusion.bake.plan",
47
+ "internal.occlusion.bake.snapshot",
48
+ "internal.occlusion.bake.cancel",
49
+ ]);
50
+ const ADMISSION_OBSERVATION_TOOLS = new Set(["editor.state", "editor.dialogs", "editor.dialog.click"]);
51
+ const TRANSITION_CODES = new Set([
52
+ "E_UNITY_DOMAIN_RELOAD",
53
+ "E_UNITY_COMPILING",
54
+ "E_UNITY_IMPORTING",
55
+ "E_UNITY_PLAY_MODE",
56
+ "E_QUEUE_START_TIMEOUT",
57
+ "E_RUNTIME_NOT_READY",
58
+ ]);
59
+ /** session supervisor 的结构化失败;上层只负责转换为公开 error envelope。 */
60
+ export class SessionSupervisorError extends Error {
61
+ code;
62
+ nextActions;
63
+ details;
64
+ transient;
65
+ retryAfterMs;
66
+ constructor(code, message, nextActions, details, transient = false, retryAfterMs = 0) {
67
+ super(message);
68
+ this.code = code;
69
+ this.nextActions = nextActions;
70
+ this.details = details;
71
+ this.transient = transient;
72
+ this.retryAfterMs = retryAfterMs;
73
+ this.name = "SessionSupervisorError";
74
+ }
75
+ }
76
+ /**
77
+ * Bridge-backed 调用的唯一 live session owner。
78
+ * 它冻结一个 absolute deadline 和 request body,并独占 registry wait、listener rebind 与 response identity 校验。
79
+ */
80
+ export class SessionSupervisor {
81
+ flags;
82
+ runtime;
83
+ dependencies;
84
+ constructor(flags, runtime, dependencies = {}) {
85
+ this.flags = flags;
86
+ this.runtime = runtime;
87
+ const injectedSelect = dependencies.select;
88
+ this.dependencies = {
89
+ now: dependencies.now ?? Date.now,
90
+ random: dependencies.random ?? Math.random,
91
+ sleep: dependencies.sleep ?? sleep,
92
+ select: injectedSelect ?? ((flags, dataDir, target) => selectInstanceForFlags(flags, dataDir, process.cwd(), target)),
93
+ selectObservation: dependencies.selectObservation ?? ((flags, dataDir, remainingMs, target) => selectObservationInstanceForFlags(flags, dataDir, remainingMs, process.cwd(), target)),
94
+ // 隔离测试若注入普通 selector,则 transition 路径复用该 fake;真实运行使用严格 transition selector。
95
+ selectTransition: dependencies.selectTransition ?? (injectedSelect
96
+ ? async (flags, dataDir, _remainingMs, target) => injectedSelect(flags, dataDir, target)
97
+ : (flags, dataDir, remainingMs, target) => selectTransitionInstanceForFlags(flags, dataDir, remainingMs, process.cwd(), target)),
98
+ post: dependencies.post ?? postFrozenBridgeRequest,
99
+ acquire: dependencies.acquire ?? postAdmissionAcquire,
100
+ revoke: dependencies.revoke ?? postAdmissionRevoke,
101
+ observer: dependencies.observer ?? new EditorBlockerObserver(),
102
+ };
103
+ }
104
+ /** Tool/action 入口;mutation 由 Bridge journal 按同一 root request/digest 去重并恢复 terminal。 */
105
+ execute(template) {
106
+ return this.run("execute", template);
107
+ }
108
+ /** 普通读取型Tool与live catalog入口;generation变化后只允许整次重新读取。 */
109
+ read(template) {
110
+ return this.run("read", { ...template, mutation: false });
111
+ }
112
+ /** editor.state 专用即时入口;固定预算内只观察一次,不等待状态改变。 */
113
+ observeNow(template) {
114
+ return this.run("observeNow", { ...template, mutation: false });
115
+ }
116
+ /** 在准入deadline内原子取得一个root grant;业务执行deadline只在grant返回后创建一次。 */
117
+ async acquireRootAdmission(request) {
118
+ const startedAtMs = this.dependencies.now();
119
+ if (this.runtime.bridgeExecute) {
120
+ const fingerprint = rootAdmissionFingerprint(request, INJECTED_INSTANCE_ID);
121
+ return {
122
+ requestId: request.requestId,
123
+ command: request.command,
124
+ rootFingerprint: fingerprint,
125
+ completionContractIdentity: request.completionContractIdentity,
126
+ target: request.target,
127
+ instanceId: INJECTED_INSTANCE_ID,
128
+ canonicalProjectPath: process.cwd(),
129
+ sessionId: "injected-session",
130
+ token: "injected-admission",
131
+ consumed: false,
132
+ grantExpiresAtMs: this.dependencies.now() + 2_000,
133
+ executionAbsoluteDeadlineMs: this.dependencies.now() + request.timeoutMs,
134
+ injected: true,
135
+ };
136
+ }
137
+ let target;
138
+ let binding;
139
+ if (request.target === "editor" && ADMISSION_OBSERVATION_TOOLS.has(request.command)) {
140
+ const selection = await this.dependencies.selectObservation(this.flags, this.runtime.dataDir ?? defaultDataDir(), remainingBudget(request.admissionAbsoluteDeadlineMs, this.dependencies.now()), "editor");
141
+ target = { target: "editor", instanceId: selection.instance.instanceId, initialSelection: selection, injected: false };
142
+ binding = bindingFrom(selection.instance);
143
+ }
144
+ else {
145
+ target = await this.resolveTarget(request.target, request.admissionAbsoluteDeadlineMs, startedAtMs, request.admissionAbsoluteDeadlineMs, false);
146
+ binding = await this.bind(target, request.admissionAbsoluteDeadlineMs, false, target.initialSelection);
147
+ }
148
+ const fingerprint = rootAdmissionFingerprint(request, binding.instanceId);
149
+ for (;;) {
150
+ const remainingMs = remainingBudget(request.admissionAbsoluteDeadlineMs, this.dependencies.now());
151
+ if (remainingMs <= 0)
152
+ throw admissionBusy(target.instanceId, request.timeoutMs);
153
+ try {
154
+ const reply = await this.dependencies.acquire(binding, request, fingerprint, remainingMs);
155
+ if (!attestationMatches(binding, reply.attestation)) {
156
+ binding = await this.bindReplacement(target, request.admissionAbsoluteDeadlineMs, binding);
157
+ continue;
158
+ }
159
+ if (reply.granted && reply.token) {
160
+ return {
161
+ requestId: request.requestId,
162
+ command: request.command,
163
+ rootFingerprint: fingerprint,
164
+ completionContractIdentity: request.completionContractIdentity,
165
+ target: binding.target,
166
+ instanceId: binding.instanceId,
167
+ canonicalProjectPath: binding.canonicalProjectPath,
168
+ sessionId: binding.sessionId,
169
+ token: reply.token,
170
+ consumed: false,
171
+ grantExpiresAtMs: this.dependencies.now() + reply.grantExpiresInMs,
172
+ executionAbsoluteDeadlineMs: this.dependencies.now() + request.timeoutMs,
173
+ injected: false,
174
+ };
175
+ }
176
+ const delayMs = admissionPollDelay(this.dependencies.random());
177
+ await this.dependencies.sleep(Math.min(delayMs, remainingMs));
178
+ }
179
+ catch (error) {
180
+ if (error instanceof SessionSupervisorError)
181
+ throw error;
182
+ const remainingAfterFailureMs = remainingBudget(request.admissionAbsoluteDeadlineMs, this.dependencies.now());
183
+ if (remainingAfterFailureMs <= 0)
184
+ throw admissionBusy(target.instanceId, request.timeoutMs);
185
+ await this.dependencies.sleep(Math.min(admissionPollDelay(this.dependencies.random()), remainingAfterFailureMs));
186
+ clearInstanceHealthCache();
187
+ binding = await this.bind(target, request.admissionAbsoluteDeadlineMs, false, undefined);
188
+ }
189
+ }
190
+ }
191
+ /** CLI只撤销尚未消费的本地root;Consumed只能由Unity声明的terminal owner释放。 */
192
+ async completeRootAdmission(admission) {
193
+ if (admission.injected || this.runtime.bridgeExecute || admission.consumed)
194
+ return;
195
+ const deadlineMs = this.dependencies.now() + ADMISSION_COMPLETE_BUDGET_MS;
196
+ try {
197
+ const selection = await this.dependencies.selectObservation({ instance: admission.instanceId }, this.runtime.dataDir ?? defaultDataDir(), remainingBudget(deadlineMs, this.dependencies.now()), admission.target);
198
+ if (!selection.instance.activeSession)
199
+ return;
200
+ const binding = bindingFrom(selection.instance);
201
+ if (binding.sessionId !== admission.sessionId)
202
+ return;
203
+ const reply = await this.dependencies.revoke(binding, admission, remainingBudget(deadlineMs, this.dependencies.now()));
204
+ if (!attestationMatches(binding, reply.attestation))
205
+ return;
206
+ }
207
+ catch {
208
+ // cleanup失败不能覆盖已返回给调用方的可信业务terminal。
209
+ }
210
+ }
211
+ /** 首次调用时冻结 identity、deadline 与逐字节 request body;恢复过程不得重建。 */
212
+ async run(mode, template) {
213
+ const startedAtMs = this.dependencies.now();
214
+ if (template.allowTransitionBinding === true && !ROOT_TRANSITION_COMMANDS.has(template.command)) {
215
+ throw new SessionSupervisorError("E_INTERNAL_INVOCATION_INVALID", "Transition binding is restricted to private durable root coordinator commands.", [], { command: template.command });
216
+ }
217
+ const timeoutMs = normalizeTimeoutMs(template.timeoutMs, mode);
218
+ // caller 已冻结业务 deadline 时,未显式提供更短 timeout 不得被 Supervisor 默认预算再次截断。
219
+ const absoluteDeadlineMs = mode === "observeNow"
220
+ ? Math.min(template.observationAbsoluteDeadlineMs ?? startedAtMs + timeoutMs, startedAtMs + EDITOR_STATE_OBSERVATION_BUDGET_MS)
221
+ : template.absoluteDeadlineMs !== undefined && template.timeoutMs === undefined
222
+ ? template.absoluteDeadlineMs
223
+ : Math.min(template.absoluteDeadlineMs ?? Number.POSITIVE_INFINITY, startedAtMs + timeoutMs);
224
+ if (mode === "observeNow")
225
+ return this.runObservation(template, startedAtMs, absoluteDeadlineMs);
226
+ // 首次 dispatch 前必须保留一次 bounded blocker probe;ready 快路径不会等待这段预算。
227
+ const preDispatchDeadlineMs = reserveBlockerObservationBudget(startedAtMs, absoluteDeadlineMs);
228
+ const sessionTarget = bridgeTarget(template.command);
229
+ const target = await this.resolveTarget(sessionTarget, preDispatchDeadlineMs, startedAtMs, absoluteDeadlineMs, template.allowTransitionBinding === true);
230
+ const request = freezeRequest(template, target.instanceId, absoluteDeadlineMs);
231
+ if (target.injected) {
232
+ return this.dispatchInjected(request);
233
+ }
234
+ let binding;
235
+ try {
236
+ binding = await this.bind(target, preDispatchDeadlineMs, false, target.initialSelection, template.allowTransitionBinding === true);
237
+ }
238
+ catch (error) {
239
+ const observed = target.initialSelection
240
+ ? await this.observeInstance(target.initialSelection.instance, absoluteDeadlineMs)
241
+ : undefined;
242
+ if (observed?.outcome === "observed-blocked")
243
+ throw blockedObservation(target.instanceId, observed, target.initialSelection?.instance.blockers);
244
+ if (observed?.outcome === "conflict")
245
+ throw blockerObservationConflict(target.instanceId, observed);
246
+ throw error;
247
+ }
248
+ assertAdmissionBinding(template.rootAdmission, binding);
249
+ const dispatchSessionId = binding.sessionId;
250
+ let dispatchAttempted = false;
251
+ let postAttempts = 0;
252
+ for (;;) {
253
+ const remainingMs = remainingBudget(absoluteDeadlineMs, this.dependencies.now());
254
+ if (remainingMs <= 0) {
255
+ if (mode === "execute" && template.mutation !== false && dispatchAttempted)
256
+ throw await this.executionTimeoutWithObservation(target.instanceId, binding, absoluteDeadlineMs, "The absolute deadline elapsed after dispatch without a terminal response.");
257
+ throw deadlineError(mode, target.instanceId, startedAtMs, absoluteDeadlineMs);
258
+ }
259
+ if (mode === "execute" && template.mutation !== false && dispatchAttempted && binding.sessionId !== dispatchSessionId) {
260
+ throw await this.executionTimeoutWithObservation(target.instanceId, binding, absoluteDeadlineMs, "The selected Unity process session changed after the first mutation POST; automatic redelivery is forbidden.");
261
+ }
262
+ try {
263
+ dispatchAttempted = true;
264
+ postAttempts += 1;
265
+ const requestAdmission = template.rootAdmission?.requestId === template.requestId ? template.rootAdmission : undefined;
266
+ const reply = await this.dependencies.post(binding, request, remainingMs, requestAdmission);
267
+ if (!attestationMatches(binding, reply.attestation)) {
268
+ binding = await this.bindReplacement(target, absoluteDeadlineMs, binding, template.allowTransitionBinding === true);
269
+ continue;
270
+ }
271
+ assertResponseRequestId(request.payload.requestId, reply.response);
272
+ if (postAttempts === 1 && requestAdmission && admissionWasRejected(reply.response)) {
273
+ const reacquired = await this.reacquireAdmission(binding, requestAdmission, absoluteDeadlineMs);
274
+ if (reacquired)
275
+ continue;
276
+ }
277
+ if (requestAdmission)
278
+ requestAdmission.consumed = true;
279
+ // Bridge 已给出 canonical terminal response 时优先返回。
280
+ if (!shouldRecoverTransition(reply.response))
281
+ return reply.response;
282
+ await this.waitBeforeRecovery(reply.response, absoluteDeadlineMs);
283
+ clearInstanceHealthCache();
284
+ binding = await this.bind(target, absoluteDeadlineMs, false, undefined, template.allowTransitionBinding === true);
285
+ }
286
+ catch (error) {
287
+ const mutationWasDispatched = mode === "execute" && template.mutation !== false && dispatchAttempted;
288
+ if (error instanceof SessionSupervisorError) {
289
+ if (mutationWasDispatched)
290
+ throw await this.executionTimeoutWithObservation(target.instanceId, binding, absoluteDeadlineMs, `Post-dispatch recovery failed with ${error.code}.`);
291
+ if (!mutationWasDispatched && error.code === "E_UNITY_BLOCKED") {
292
+ const observed = await this.observeBlockers(binding, absoluteDeadlineMs);
293
+ if (observed?.outcome === "observed-blocked")
294
+ throw blockedObservation(target.instanceId, observed, error.details?.blockers);
295
+ if (observed?.outcome === "conflict")
296
+ throw blockerObservationConflict(target.instanceId, observed);
297
+ }
298
+ throw error;
299
+ }
300
+ const observed = await this.observeBlockers(binding, absoluteDeadlineMs);
301
+ if (observed?.outcome === "observed-blocked") {
302
+ if (mutationWasDispatched)
303
+ throw executionTimeout(target.instanceId, "A modal blocker was observed after POST began before a terminal response.", observed);
304
+ throw blockedObservation(target.instanceId, observed);
305
+ }
306
+ const remainingAfterFailureMs = remainingBudget(absoluteDeadlineMs, this.dependencies.now());
307
+ if (remainingAfterFailureMs > 0) {
308
+ await this.dependencies.sleep(Math.min(REGISTRY_POLL_INTERVAL_MS, remainingAfterFailureMs));
309
+ }
310
+ clearInstanceHealthCache();
311
+ try {
312
+ binding = await this.bind(target, absoluteDeadlineMs, false, undefined, template.allowTransitionBinding === true);
313
+ }
314
+ catch (bindError) {
315
+ if (mutationWasDispatched)
316
+ throw await this.executionTimeoutWithObservation(target.instanceId, binding, absoluteDeadlineMs, `Post-dispatch listener rebind failed with ${errorCode(bindError)}.`);
317
+ throw bindError;
318
+ }
319
+ }
320
+ }
321
+ }
322
+ /** 首个POST被admission层明确拒绝时可在原执行deadline内换取新token;不得刷新deadline。 */
323
+ async reacquireAdmission(binding, admission, absoluteDeadlineMs) {
324
+ const remainingMs = remainingBudget(absoluteDeadlineMs, this.dependencies.now());
325
+ if (remainingMs <= 0)
326
+ return false;
327
+ const request = {
328
+ requestId: admission.requestId,
329
+ command: admission.command,
330
+ input: {},
331
+ dryRun: false,
332
+ target: admission.target,
333
+ completionContractIdentity: admission.completionContractIdentity,
334
+ timeoutMs: remainingMs,
335
+ admissionAbsoluteDeadlineMs: absoluteDeadlineMs,
336
+ };
337
+ const reply = await this.dependencies.acquire(binding, request, admission.rootFingerprint, remainingMs);
338
+ if (!attestationMatches(binding, reply.attestation) || !reply.granted || !reply.token)
339
+ return false;
340
+ admission.token = reply.token;
341
+ return true;
342
+ }
343
+ /** 业务 deadline 之后只执行一次独立的只读诊断;绝不重放或延长业务请求。 */
344
+ async executionTimeoutWithObservation(instanceId, binding, _deadlineMs, reason) {
345
+ const observationDeadlineMs = this.dependencies.now() + BLOCKER_DIAGNOSTIC_BUDGET_MS;
346
+ return executionTimeout(instanceId, reason, await this.observeBlockers(binding, observationDeadlineMs));
347
+ }
348
+ /** 失败路径的 observer 严格复用调用 deadline。 */
349
+ async observeBlockers(binding, deadlineMs) {
350
+ if (binding.target === "runtime")
351
+ return undefined;
352
+ return this.observeIdentity({
353
+ instanceId: binding.instanceId,
354
+ canonicalProjectPath: binding.canonicalProjectPath,
355
+ displayProjectPath: binding.canonicalProjectPath,
356
+ }, deadlineMs, { processId: binding.processId, processStartedAt: binding.processStartedAt });
357
+ }
358
+ /** selector/bind 尚未建立 listener 时仍可基于 canonical identity 观察唯一进程。 */
359
+ async observeInstance(instance, deadlineMs) {
360
+ if (instance.target === "runtime")
361
+ return undefined;
362
+ const session = instance.activeSession
363
+ ? { processId: instance.activeSession.processId, processStartedAt: instance.activeSession.processStartedAt }
364
+ : undefined;
365
+ return this.observeIdentity({
366
+ instanceId: instance.instanceId,
367
+ canonicalProjectPath: instance.canonicalProjectPath,
368
+ displayProjectPath: instance.displayProjectPath,
369
+ }, deadlineMs, session);
370
+ }
371
+ /** observer 失败本身不得覆盖原 selector/transport 错误。 */
372
+ async observeIdentity(identity, deadlineMs, session) {
373
+ if (remainingBudget(deadlineMs, this.dependencies.now()) < 1)
374
+ return undefined;
375
+ try {
376
+ return await this.dependencies.observer.observe(identity, deadlineMs, session);
377
+ }
378
+ catch {
379
+ return undefined;
380
+ }
381
+ }
382
+ /** editor.state 只进行一次 selector、bind 和 POST;不等待、重绑或重投。 */
383
+ async runObservation(template, startedAtMs, absoluteDeadlineMs) {
384
+ const selection = template.observationSelection ?? await this.selectObservation(absoluteDeadlineMs, startedAtMs);
385
+ const instance = selection.instance;
386
+ if (instance.status === "offline" || instance.status === "conflict" || instance.status === "unverifiable" || !instance.activeSession) {
387
+ const code = instance.status === "conflict" ? "E_INSTANCE_CONFLICT" : instance.status === "unverifiable" ? "E_INSTANCE_UNVERIFIABLE" : "E_INSTANCE_NOT_RUNNING";
388
+ throw new SessionSupervisorError(code, "No uniquely verified live Unity session is available for a Bridge observation.", [], publicSessionDetails(instance));
389
+ }
390
+ const request = freezeRequest(template, instance.instanceId, absoluteDeadlineMs);
391
+ const binding = bindingFrom(instance);
392
+ const remainingMs = remainingBudget(absoluteDeadlineMs, this.dependencies.now());
393
+ if (remainingMs <= 0)
394
+ throw deadlineError("observeNow", instance.instanceId, startedAtMs, absoluteDeadlineMs);
395
+ const probeTimeoutMs = Math.min(remainingMs, EDITOR_STATE_BRIDGE_PROBE_BUDGET_MS);
396
+ if (this.runtime.bridgeExecute)
397
+ return this.dispatchInjected(request, probeTimeoutMs);
398
+ try {
399
+ assertAdmissionBinding(template.rootAdmission, binding);
400
+ const requestAdmission = template.rootAdmission?.requestId === template.requestId ? template.rootAdmission : undefined;
401
+ const reply = await this.dependencies.post(binding, request, probeTimeoutMs, requestAdmission);
402
+ if (!attestationMatches(binding, reply.attestation))
403
+ throw identityMismatch(instance.instanceId);
404
+ assertResponseRequestId(request.payload.requestId, reply.response);
405
+ if (requestAdmission && !admissionWasRejected(reply.response))
406
+ requestAdmission.consumed = true;
407
+ return reply.response;
408
+ }
409
+ catch (error) {
410
+ if (error instanceof SessionSupervisorError)
411
+ throw error;
412
+ throw connectionFailure(instance.instanceId, error);
413
+ }
414
+ }
415
+ async selectObservation(absoluteDeadlineMs, startedAtMs) {
416
+ const selectorBudgetMs = remainingBudget(absoluteDeadlineMs, this.dependencies.now());
417
+ if (selectorBudgetMs <= 0)
418
+ throw deadlineError("observeNow", "unknown", startedAtMs, absoluteDeadlineMs);
419
+ return this.dependencies.selectObservation(this.flags, this.runtime.dataDir ?? defaultDataDir(), selectorBudgetMs, "editor");
420
+ }
421
+ /** 测试 transport 仍通过 supervisor,但不伪造 registry/listener generation。 */
422
+ async dispatchInjected(request, timeoutMs) {
423
+ if (!this.runtime.bridgeExecute)
424
+ throw connectionFailure(request.payload.instanceId, new Error("Injected Bridge transport is unavailable."));
425
+ try {
426
+ const operation = this.runtime.bridgeExecute(request.payload);
427
+ const response = timeoutMs === undefined ? await operation : await Promise.race([
428
+ operation,
429
+ sleep(timeoutMs).then(() => { throw new SessionSupervisorError("E_EXECUTION_TIMEOUT", "The injected Bridge observation exceeded its absolute deadline.", ["Inspect editor.state and retry only after Unity is responsive."], { instanceId: request.payload.instanceId, timeoutMs }); }),
430
+ ]);
431
+ assertResponseRequestId(request.payload.requestId, response);
432
+ return response;
433
+ }
434
+ catch (error) {
435
+ if (error instanceof SessionSupervisorError)
436
+ throw error;
437
+ throw connectionFailure(request.payload.instanceId, error);
438
+ }
439
+ }
440
+ /** 首次 selector 解析只发生一次;后续恢复固定使用 instanceId,alias 变化不会改绑目标。 */
441
+ async resolveTarget(target, selectionDeadlineMs, startedAtMs, observationDeadlineMs, allowTransitionBinding) {
442
+ if (this.runtime.bridgeExecute)
443
+ return { target, instanceId: INJECTED_INSTANCE_ID, injected: true };
444
+ try {
445
+ const selection = await this.selectWithinDeadline(this.flags, target, selectionDeadlineMs, () => deadlineError("execute", "unknown", startedAtMs, observationDeadlineMs), allowTransitionBinding);
446
+ return { target, instanceId: selection.instance.instanceId, initialSelection: selection, injected: false };
447
+ }
448
+ catch (selectionError) {
449
+ // registry尚未注册时,普通Tool仍应在同一次失败中报告唯一canonical Unity process的modal。
450
+ const remainingMs = remainingBudget(observationDeadlineMs, this.dependencies.now());
451
+ if (target === "editor" && remainingMs > 0) {
452
+ try {
453
+ const observationSelection = await this.dependencies.selectObservation(this.flags, this.runtime.dataDir ?? defaultDataDir(), remainingMs, target);
454
+ const observed = await this.observeInstance(observationSelection.instance, observationDeadlineMs);
455
+ if (observed?.outcome === "observed-blocked")
456
+ throw blockedObservation(observationSelection.instance.instanceId, observed);
457
+ if (observed?.outcome === "conflict")
458
+ throw blockerObservationConflict(observationSelection.instance.instanceId, observed);
459
+ }
460
+ catch (observationError) {
461
+ if (observationError instanceof SessionSupervisorError)
462
+ throw observationError;
463
+ }
464
+ }
465
+ throw selectionError;
466
+ }
467
+ }
468
+ /** selector 也消费 immutable deadline;超时后的后台读取结果不得触发 POST。 */
469
+ async selectWithinDeadline(flags, target, absoluteDeadlineMs, timeoutError, allowTransitionBinding = false) {
470
+ const remainingMs = remainingBudget(absoluteDeadlineMs, this.dependencies.now());
471
+ if (remainingMs <= 0)
472
+ throw timeoutError();
473
+ let timer;
474
+ try {
475
+ const selection = allowTransitionBinding
476
+ ? this.dependencies.selectTransition(flags, this.runtime.dataDir ?? defaultDataDir(), remainingMs, target)
477
+ : this.dependencies.select(flags, this.runtime.dataDir ?? defaultDataDir(), target);
478
+ return await Promise.race([
479
+ selection,
480
+ new Promise((_resolve, reject) => { timer = setTimeout(() => reject(timeoutError()), remainingMs); }),
481
+ ]);
482
+ }
483
+ finally {
484
+ if (timer)
485
+ clearTimeout(timer);
486
+ }
487
+ }
488
+ /** blocked/conflict/offline 不等待;仅 transitioning 在同一 absolute deadline 内轮询。 */
489
+ async bind(target, absoluteDeadlineMs, observeOnly, initialSelection, allowTransitionBinding = false) {
490
+ let selection = initialSelection;
491
+ for (;;) {
492
+ if (!selection) {
493
+ selection = await this.selectWithinDeadline({ instance: target.instanceId }, target.target, absoluteDeadlineMs, () => selectionTransitionTimeout(target.instanceId, absoluteDeadlineMs), allowTransitionBinding);
494
+ }
495
+ const instance = selection.instance;
496
+ if (instance.status === "blocked")
497
+ throw blocked(instance);
498
+ if (instance.status === "unverifiable")
499
+ throw unverifiable(instance);
500
+ if (instance.status === "ready" || (allowTransitionBinding && instance.status === "transitioning" && instance.activeSession))
501
+ return bindingFrom(instance);
502
+ if (observeOnly)
503
+ throw instance.status === "unresponsive" ? unresponsive(instance) : observedTransition(instance);
504
+ if (remainingBudget(absoluteDeadlineMs, this.dependencies.now()) <= 0) {
505
+ throw instance.status === "unresponsive" ? unresponsive(instance) : transitionTimeout(instance, absoluteDeadlineMs);
506
+ }
507
+ await this.dependencies.sleep(Math.min(REGISTRY_POLL_INTERVAL_MS, remainingBudget(absoluteDeadlineMs, this.dependencies.now())));
508
+ selection = undefined;
509
+ }
510
+ }
511
+ /** response attestation 不匹配时必须等到 registry 出现不同 generation,禁止向同一旧 listener 反复 POST。 */
512
+ async bindReplacement(target, absoluteDeadlineMs, previous, allowTransitionBinding = false) {
513
+ for (;;) {
514
+ const selection = await this.selectWithinDeadline({ instance: target.instanceId }, target.target, absoluteDeadlineMs, () => selectionTransitionTimeout(target.instanceId, absoluteDeadlineMs), allowTransitionBinding);
515
+ if (selection.instance.status === "blocked")
516
+ throw blocked(selection.instance);
517
+ if (selection.instance.status === "unverifiable")
518
+ throw unverifiable(selection.instance);
519
+ if (selection.instance.status === "ready" || (allowTransitionBinding && selection.instance.status === "transitioning" && selection.instance.activeSession)) {
520
+ const candidate = bindingFrom(selection.instance);
521
+ if (bindingKey(candidate) !== bindingKey(previous))
522
+ return candidate;
523
+ }
524
+ if (remainingBudget(absoluteDeadlineMs, this.dependencies.now()) <= 0) {
525
+ throw selection.instance.status === "unresponsive" ? unresponsive(selection.instance) : transitionTimeout(selection.instance, absoluteDeadlineMs);
526
+ }
527
+ await this.dependencies.sleep(Math.min(REGISTRY_POLL_INTERVAL_MS, remainingBudget(absoluteDeadlineMs, this.dependencies.now())));
528
+ clearInstanceHealthCache();
529
+ }
530
+ }
531
+ /** Bridge 建议等待只消耗已有 deadline,不创建新的 attempt budget。 */
532
+ async waitBeforeRecovery(response, absoluteDeadlineMs) {
533
+ const retryAfterMs = response.ok === false && Number.isFinite(response.error.retryAfterMs)
534
+ ? Math.max(0, response.error.retryAfterMs)
535
+ : REGISTRY_POLL_INTERVAL_MS;
536
+ const remainingMs = remainingBudget(absoluteDeadlineMs, this.dependencies.now());
537
+ if (remainingMs <= 0)
538
+ return;
539
+ await this.dependencies.sleep(Math.min(retryAfterMs, remainingMs));
540
+ }
541
+ }
542
+ /** immutable Bridge request v2;任何 recovery 都复用这里生成的 body。 */
543
+ export function freezeRequest(template, instanceId, absoluteDeadlineMs) {
544
+ const payload = {
545
+ protocolVersion: 2,
546
+ requestId: template.requestId,
547
+ instanceId,
548
+ command: template.command,
549
+ input: template.input,
550
+ execution: {
551
+ absoluteDeadlineUtc: new Date(absoluteDeadlineMs).toISOString(),
552
+ completionContractVersion: COMPLETION_CONTRACT_VERSION,
553
+ requestDigestVersion: REQUEST_DIGEST_VERSION,
554
+ ...(template.dryRun ? { dryRun: true } : {}),
555
+ },
556
+ };
557
+ const body = JSON.stringify(payload);
558
+ const requestDigest = computeRequestDigestV1(instanceId, Buffer.from(body, "utf8"));
559
+ return { payload: deepFreeze(JSON.parse(body)), body, requestDigest, absoluteDeadlineMs };
560
+ }
561
+ /** RequestDigest v1 使用 exact request bytes;只用于验证与 journal correlation,不进入 public envelope。 */
562
+ export function computeRequestDigestV1(instanceId, exactRequestBytes) {
563
+ return createHash("sha256")
564
+ .update("unity-cli-request-v1", "utf8")
565
+ .update(Buffer.from([0]))
566
+ .update(instanceId, "utf8")
567
+ .update(Buffer.from([0]))
568
+ .update(exactRequestBytes)
569
+ .digest("hex");
570
+ }
571
+ /** HTTP timeout 始终取 immutable absolute deadline 的剩余预算。 */
572
+ export function bridgeHttpTimeoutMs(payload, now = Date.now()) {
573
+ const deadline = Date.parse(payload.execution.absoluteDeadlineUtc);
574
+ return Number.isFinite(deadline) ? Math.max(0, deadline - now) : 0;
575
+ }
576
+ /** 真实 transport 只接收 supervisor 私有 binding,并返回不进入业务 envelope 的 identity attestation。 */
577
+ async function postFrozenBridgeRequest(binding, request, remainingMs, admission) {
578
+ const response = await postJson(binding, "/bridge/execute", request.body, remainingMs, admission);
579
+ const envelope = await response.json();
580
+ if (!response.ok && envelope.ok !== false)
581
+ throw new Error(`Bridge returned HTTP ${response.status}.`);
582
+ return { response: envelope, attestation: responseAttestation(response) };
583
+ }
584
+ /** acquire只操作listener后台线程的有界内存;未放行不是公开错误。 */
585
+ async function postAdmissionAcquire(binding, request, rootFingerprint, remainingMs) {
586
+ const response = await postJson(binding, "/bridge/admission/acquire", JSON.stringify({
587
+ protocolVersion: 1,
588
+ requestId: request.requestId,
589
+ instanceId: binding.instanceId,
590
+ target: binding.target,
591
+ command: request.command,
592
+ rootFingerprint,
593
+ }), remainingMs);
594
+ const envelope = await response.json();
595
+ if (!response.ok || envelope.ok !== true || envelope.requestId !== request.requestId || !exactKeys(envelope, "ok", "requestId", "data")
596
+ || !envelope.data || !exactKeys(envelope.data, "protocolVersion", "granted", "grantExpiresInMs", "retryAfterMs")
597
+ || envelope.data.protocolVersion !== 1 || typeof envelope.data.granted !== "boolean"
598
+ || !Number.isSafeInteger(envelope.data.grantExpiresInMs) || envelope.data.grantExpiresInMs < 0 || envelope.data.grantExpiresInMs > 2000
599
+ || !Number.isSafeInteger(envelope.data.retryAfterMs) || envelope.data.retryAfterMs < 0) {
600
+ throw new Error(`Admission acquire returned HTTP ${response.status} or an invalid envelope.`);
601
+ }
602
+ const token = response.headers.get("x-unity-cli-admission-token") ?? undefined;
603
+ const grantExpiresInMs = envelope.data.grantExpiresInMs;
604
+ if ((envelope.data.granted && (typeof token !== "string" || token.length < 32 || token.length > 256 || grantExpiresInMs < 1))
605
+ || (!envelope.data.granted && (token !== undefined || grantExpiresInMs !== 0))) {
606
+ throw new Error("Admission acquire returned an invalid token header.");
607
+ }
608
+ return {
609
+ granted: envelope.data.granted,
610
+ ...(typeof token === "string" ? { token } : {}),
611
+ grantExpiresInMs,
612
+ retryAfterMs: Number.isFinite(envelope.data.retryAfterMs) ? Math.max(0, envelope.data.retryAfterMs) : REGISTRY_POLL_INTERVAL_MS,
613
+ attestation: responseAttestation(response),
614
+ };
615
+ }
616
+ async function postAdmissionRevoke(binding, admission, remainingMs) {
617
+ const response = await postJson(binding, "/bridge/admission/revoke", JSON.stringify({
618
+ protocolVersion: 1,
619
+ requestId: admission.requestId,
620
+ instanceId: admission.instanceId,
621
+ target: admission.target,
622
+ rootFingerprint: admission.rootFingerprint,
623
+ }), remainingMs, admission, true);
624
+ const envelope = await response.json();
625
+ if (!response.ok || envelope.ok !== true || envelope.requestId !== admission.requestId || !exactKeys(envelope, "ok", "requestId", "data")
626
+ || !envelope.data || !exactKeys(envelope.data, "revoked") || typeof envelope.data.revoked !== "boolean") {
627
+ throw new Error(`Admission revoke returned HTTP ${response.status} or an invalid envelope.`);
628
+ }
629
+ return { revoked: envelope.data.revoked, attestation: responseAttestation(response) };
630
+ }
631
+ async function postJson(binding, route, body, remainingMs, admission, includeConsumedToken = false) {
632
+ const controller = new AbortController();
633
+ const timeout = setTimeout(() => controller.abort(), Math.max(1, remainingMs));
634
+ try {
635
+ return await fetch(new URL(route, binding.endpoint), {
636
+ method: "POST",
637
+ headers: transportHeaders(binding, admission, includeConsumedToken),
638
+ body,
639
+ signal: controller.signal,
640
+ });
641
+ }
642
+ finally {
643
+ clearTimeout(timeout);
644
+ }
645
+ }
646
+ function transportHeaders(binding, admission, includeConsumedToken = false) {
647
+ return {
648
+ "content-type": "application/json",
649
+ "x-unity-cli-expected-instance-id": binding.instanceId,
650
+ "x-unity-cli-expected-session-id": binding.sessionId,
651
+ "x-unity-cli-expected-target": binding.target,
652
+ "x-unity-cli-expected-listener-id": binding.listenerId,
653
+ "x-unity-cli-expected-listener-generation": String(binding.listenerGeneration),
654
+ ...(admission ? {
655
+ "x-unity-cli-admission-root-id": admission.requestId,
656
+ "x-unity-cli-admission-fingerprint": admission.rootFingerprint,
657
+ ...((!admission.consumed || includeConsumedToken) ? { "x-unity-cli-admission-token": admission.token } : {}),
658
+ "x-unity-cli-admission-deadline-utc": new Date(admission.executionAbsoluteDeadlineMs).toISOString(),
659
+ } : {}),
660
+ };
661
+ }
662
+ function exactKeys(value, ...expected) {
663
+ const actual = Object.keys(value).sort();
664
+ const required = [...expected].sort();
665
+ return actual.length === required.length && actual.every((key, index) => key === required[index]);
666
+ }
667
+ function responseAttestation(response) {
668
+ return {
669
+ target: (response.headers.get("x-unity-cli-target") ?? ""),
670
+ instanceId: response.headers.get("x-unity-cli-instance-id") ?? "",
671
+ sessionId: response.headers.get("x-unity-cli-session-id") ?? "",
672
+ listenerId: response.headers.get("x-unity-cli-listener-id") ?? "",
673
+ listenerGeneration: Number(response.headers.get("x-unity-cli-listener-generation")),
674
+ };
675
+ }
676
+ function bindingFrom(instance) {
677
+ const session = instance.activeSession;
678
+ if (!session) {
679
+ throw new SessionSupervisorError("E_INSTANCE_NOT_RUNNING", "The selected Unity project has no validated Bridge listener.", [
680
+ "Open this exact Unity project in Unity Editor.",
681
+ "Run unitycli instances list to inspect its current state.",
682
+ ], publicSessionDetails(instance));
683
+ }
684
+ return {
685
+ target: session.target,
686
+ instanceId: instance.instanceId,
687
+ canonicalProjectPath: instance.canonicalProjectPath,
688
+ sessionId: session.sessionId,
689
+ listenerId: session.listener.listenerId,
690
+ listenerGeneration: session.listener.generation,
691
+ endpoint: session.listener.endpoint.url,
692
+ processId: session.processId,
693
+ processStartedAt: session.processStartedAt,
694
+ };
695
+ }
696
+ function bindingKey(binding) {
697
+ return `${binding.target}:${binding.sessionId}:${binding.listenerId}:${binding.listenerGeneration}`;
698
+ }
699
+ function attestationMatches(binding, attestation) {
700
+ return attestation.target === binding.target
701
+ && attestation.instanceId === binding.instanceId
702
+ && attestation.sessionId === binding.sessionId
703
+ && attestation.listenerId === binding.listenerId
704
+ && attestation.listenerGeneration === binding.listenerGeneration;
705
+ }
706
+ function assertAdmissionBinding(admission, binding) {
707
+ if (!admission)
708
+ return;
709
+ if (admission.instanceId !== binding.instanceId || admission.target !== binding.target || admission.sessionId !== binding.sessionId) {
710
+ throw new SessionSupervisorError("E_EXECUTION_TIMEOUT", "The admitted Unity root no longer matches the selected target session.", [
711
+ "Inspect the selected Unity session and affected business state before submitting a new request.",
712
+ ], { instanceId: admission.instanceId, outcome: "unknown" });
713
+ }
714
+ }
715
+ function admissionPollDelay(randomValue) {
716
+ const bounded = Number.isFinite(randomValue) ? Math.min(0.999999999, Math.max(0, randomValue)) : 0.5;
717
+ return ADMISSION_POLL_MIN_MS + Math.floor(bounded * (ADMISSION_POLL_MAX_MS - ADMISSION_POLL_MIN_MS + 1));
718
+ }
719
+ function admissionBusy(instanceId, timeoutMs) {
720
+ return new SessionSupervisorError("E_UNITY_BUSY", "The Unity task pool did not reopen before the admission deadline; no business request was sent.", [
721
+ "Wait for active UnityCLI tasks to finish, then submit a new request.",
722
+ ], { instanceId, phase: "admission", businessRequestSent: false, waitedMs: timeoutMs }, true, REGISTRY_POLL_INTERVAL_MS);
723
+ }
724
+ /** runtime-tool namespace 始终绑定独立 development Player;其余命令绑定 Editor。 */
725
+ function bridgeTarget(command) {
726
+ return command === "runtime-tool.list" || command === "runtime-tool.run" ? "runtime" : "editor";
727
+ }
728
+ function normalizeTimeoutMs(value, mode) {
729
+ if (mode === "observeNow") {
730
+ if (value === undefined)
731
+ return EDITOR_STATE_OBSERVATION_BUDGET_MS;
732
+ if (!Number.isFinite(value) || value <= 0)
733
+ return 0;
734
+ return Math.min(value, EDITOR_STATE_OBSERVATION_BUDGET_MS);
735
+ }
736
+ if (value === undefined)
737
+ return DEFAULT_EXECUTION_TIMEOUT_MS;
738
+ if (!Number.isSafeInteger(value) || value <= 0) {
739
+ throw new SessionSupervisorError("E_SCHEMA_INVALID", "--timeout-ms must be a positive integer.", [
740
+ "Pass --timeout-ms with a positive integer within the Tool descriptor limit.",
741
+ ], { field: "execution.timeoutMs", actual: value });
742
+ }
743
+ return value;
744
+ }
745
+ function publicSessionDetails(instance) {
746
+ return {
747
+ instanceId: instance.instanceId,
748
+ target: instance.target ?? null,
749
+ sessionId: instance.sessionId ?? null,
750
+ status: instance.status,
751
+ progress: instance.progress,
752
+ blockers: sanitizeEditorBlockers(instance.blockers),
753
+ publishedAt: instance.publishedAt ?? null,
754
+ };
755
+ }
756
+ function blocked(instance) {
757
+ return new SessionSupervisorError("E_UNITY_BLOCKED", "Unity Editor is blocked by an external modal window or non-recoverable session condition.", [
758
+ "Run unitycli tools run editor.state for the current blocker snapshot.",
759
+ "Resolve the reported blocker in the selected Unity Editor process, then retry.",
760
+ ], publicSessionDetails(instance));
761
+ }
762
+ function observedTransition(instance) {
763
+ return new SessionSupervisorError("E_UNITY_TRANSITIONING", "Unity Editor is currently transitioning.", [
764
+ "Use the editor.state snapshot to inspect current progress.",
765
+ ], publicSessionDetails(instance), true, REGISTRY_POLL_INTERVAL_MS);
766
+ }
767
+ function unverifiable(instance) {
768
+ return new SessionSupervisorError("E_INSTANCE_UNVERIFIABLE", "Unity process ownership could not be verified safely.", [
769
+ "Run unitycli instances list or tools run editor.state to observe the identity again.",
770
+ "Do not retry a prior mutation whose outcome is unknown.",
771
+ ], publicSessionDetails(instance), true, REGISTRY_POLL_INTERVAL_MS);
772
+ }
773
+ function unresponsive(instance) {
774
+ return new SessionSupervisorError("E_UNITY_UNRESPONSIVE", "Unity transport is present but the selected main thread did not become responsive before the request deadline.", [
775
+ "Run unitycli tools run editor.state to check for a transition or external modal blocker.",
776
+ ], publicSessionDetails(instance), true, REGISTRY_POLL_INTERVAL_MS);
777
+ }
778
+ function selectionTransitionTimeout(instanceId, absoluteDeadlineMs) {
779
+ return new SessionSupervisorError("E_UNITY_TRANSITION_TIMEOUT", "Unity instance selection did not complete before the request deadline.", [
780
+ "Run unitycli tools run editor.state to inspect current progress or blockers.",
781
+ ], { instanceId, absoluteDeadlineUtc: new Date(absoluteDeadlineMs).toISOString() });
782
+ }
783
+ function transitionTimeout(instance, absoluteDeadlineMs) {
784
+ return new SessionSupervisorError("E_UNITY_TRANSITION_TIMEOUT", "Unity Editor did not reach a validated ready generation before the request deadline.", [
785
+ "Run unitycli tools run editor.state to inspect current progress or blockers.",
786
+ "Retry with a larger --timeout-ms only when the transition is expected to take longer.",
787
+ ], { ...publicSessionDetails(instance), absoluteDeadlineUtc: new Date(absoluteDeadlineMs).toISOString() });
788
+ }
789
+ function deadlineError(mode, instanceId, startedAtMs, absoluteDeadlineMs) {
790
+ return new SessionSupervisorError("E_EXECUTION_TIMEOUT", "The absolute request deadline elapsed before a terminal result was proven.", ["Inspect editor.state and retry only after Unity is responsive."], { instanceId, elapsedMs: Math.max(0, absoluteDeadlineMs - startedAtMs), absoluteDeadlineUtc: new Date(absoluteDeadlineMs).toISOString() });
791
+ }
792
+ function executionTimeout(instanceId, reason, observation) {
793
+ const blockers = observation?.outcome === "observed-blocked" ? sanitizeEditorBlockers(observation.blockers) : [];
794
+ const title = blockers[0]?.title;
795
+ return new SessionSupervisorError("E_EXECUTION_TIMEOUT", title
796
+ ? `The request did not return a terminal result before its deadline; modal dialog '${title}' was observed.`
797
+ : "The request did not return a terminal result before its deadline.", outcomeUnknownNextActions(), { instanceId, reason, outcome: "unknown", dispatch: "may-have-started", replay: "new-decision-required", ...(blockers.length > 0 ? { blockers } : {}) });
798
+ }
799
+ function blockedObservation(instanceId, observation, existing) {
800
+ const blockers = sanitizeEditorBlockers([...(Array.isArray(existing) ? existing : []), ...observation.blockers]);
801
+ const title = blockers[0]?.title ?? "an external modal window";
802
+ return new SessionSupervisorError("E_UNITY_BLOCKED", `Unity Editor is blocked by observed dialog '${title}'.`, blockerNextActions(), { instanceId, blockers });
803
+ }
804
+ function blockerNextActions() {
805
+ return [
806
+ "Run unitycli tools run editor.state to check whether the Editor is still transitioning and wait until it reports ready.",
807
+ "Run unitycli tools run editor.dialogs to inspect the current modal dialog.",
808
+ "Run unitycli tools run editor.dialog.click with a current dialogId and exact button label.",
809
+ ];
810
+ }
811
+ /** effect可能已发生时只建议状态观察,不暗示自动重投或用dialog操作替代业务readback。 */
812
+ function outcomeUnknownNextActions() {
813
+ return [
814
+ "Run unitycli tools run editor.state to observe the selected Editor before making a new submission decision.",
815
+ "Use the affected capability's read-only Tool or artifact readback to determine whether the prior mutation took effect.",
816
+ ];
817
+ }
818
+ function blockerObservationConflict(instanceId, observation) {
819
+ return new SessionSupervisorError("E_INSTANCE_CONFLICT", "Multiple verified Unity processes claim the selected canonical project identity.", [
820
+ "Close duplicate Unity Editor processes and retry only after a single process owns this project.",
821
+ ], { instanceId, reason: observation.reason ?? "process-claim-conflict" });
822
+ }
823
+ function identityMismatch(instanceId) {
824
+ return new SessionSupervisorError("E_INSTANCE_IDENTITY_MISMATCH", "Bridge response identity does not match the validated listener generation.", [
825
+ "Run unitycli instances list and retry after the selected session is stable.",
826
+ ], { instanceId });
827
+ }
828
+ function connectionFailure(instanceId, error) {
829
+ return new SessionSupervisorError("BRIDGE_CONNECTION_FAILED", errorMessage(error), [
830
+ "Run unitycli instances list and inspect the selected Unity session.",
831
+ "Run unitycli tools run editor.state for transition or blocker details.",
832
+ ], { instanceId }, true, REGISTRY_POLL_INTERVAL_MS);
833
+ }
834
+ function admissionWasRejected(response) {
835
+ return response.ok === false && (response.error.code === "E_ADMISSION_REQUIRED" || response.error.code === "E_ADMISSION_IDENTITY_MISMATCH");
836
+ }
837
+ function shouldRecoverTransition(response) {
838
+ return response.ok === false && response.error.transient === true && TRANSITION_CODES.has(response.error.code);
839
+ }
840
+ function assertResponseRequestId(requestId, response) {
841
+ if (response.requestId !== requestId) {
842
+ throw new SessionSupervisorError("E_BRIDGE_RESPONSE_MISMATCH", "Bridge response requestId does not match the immutable root request.", [
843
+ "Inspect UnityCliBridge.log and retry only after the selected listener is stable.",
844
+ ], { expectedRequestId: requestId, actualRequestId: response.requestId });
845
+ }
846
+ }
847
+ /** 初始 selector/bind 失败时至少保留一次 Windows blocker observation;短调用按总预算三分之一封顶。 */
848
+ function reserveBlockerObservationBudget(startedAtMs, absoluteDeadlineMs) {
849
+ const total = Math.max(1, absoluteDeadlineMs - startedAtMs);
850
+ const reserve = Math.min(EDITOR_STATE_OBSERVATION_BUDGET_MS, Math.max(1, Math.floor(total / 3)));
851
+ return Math.max(startedAtMs + 1, absoluteDeadlineMs - reserve);
852
+ }
853
+ function remainingBudget(absoluteDeadlineMs, now) {
854
+ return Math.max(0, absoluteDeadlineMs - now);
855
+ }
856
+ function deepFreeze(value) {
857
+ if (value && typeof value === "object") {
858
+ Object.freeze(value);
859
+ for (const child of Object.values(value))
860
+ deepFreeze(child);
861
+ }
862
+ return value;
863
+ }
864
+ function errorCode(error) {
865
+ return error instanceof SessionSupervisorError ? error.code : error instanceof Error ? error.name : "UNKNOWN_ERROR";
866
+ }
867
+ function errorMessage(error) {
868
+ return error instanceof Error ? error.message : String(error);
869
+ }
870
+ function sleep(ms) {
871
+ return new Promise((resolve) => setTimeout(resolve, ms));
872
+ }
873
+ //# sourceMappingURL=session-supervisor.js.map