unity-open-mcp 0.1.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 (630) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/dist/batch-spawn.d.ts +33 -0
  4. package/dist/batch-spawn.js +329 -0
  5. package/dist/batch-spawn.js.map +1 -0
  6. package/dist/capabilities/build-capabilities.d.ts +155 -0
  7. package/dist/capabilities/build-capabilities.js +475 -0
  8. package/dist/capabilities/build-capabilities.js.map +1 -0
  9. package/dist/capabilities/list-rules.d.ts +45 -0
  10. package/dist/capabilities/list-rules.js +121 -0
  11. package/dist/capabilities/list-rules.js.map +1 -0
  12. package/dist/capabilities/rule-catalog.d.ts +44 -0
  13. package/dist/capabilities/rule-catalog.js +330 -0
  14. package/dist/capabilities/rule-catalog.js.map +1 -0
  15. package/dist/capabilities/tool-groups.d.ts +53 -0
  16. package/dist/capabilities/tool-groups.js +396 -0
  17. package/dist/capabilities/tool-groups.js.map +1 -0
  18. package/dist/cli/args.d.ts +36 -0
  19. package/dist/cli/args.js +239 -0
  20. package/dist/cli/args.js.map +1 -0
  21. package/dist/cli/cli.d.ts +23 -0
  22. package/dist/cli/cli.js +125 -0
  23. package/dist/cli/cli.js.map +1 -0
  24. package/dist/cli/commands.d.ts +37 -0
  25. package/dist/cli/commands.js +277 -0
  26. package/dist/cli/commands.js.map +1 -0
  27. package/dist/cli/ping-poller.d.ts +81 -0
  28. package/dist/cli/ping-poller.js +161 -0
  29. package/dist/cli/ping-poller.js.map +1 -0
  30. package/dist/compat.d.ts +32 -0
  31. package/dist/compat.js +121 -0
  32. package/dist/compat.js.map +1 -0
  33. package/dist/compiler-errors.d.ts +31 -0
  34. package/dist/compiler-errors.js +91 -0
  35. package/dist/compiler-errors.js.map +1 -0
  36. package/dist/compressible-router.d.ts +18 -0
  37. package/dist/compressible-router.js +191 -0
  38. package/dist/compressible-router.js.map +1 -0
  39. package/dist/compression/asset-model.d.ts +86 -0
  40. package/dist/compression/asset-model.js +15 -0
  41. package/dist/compression/asset-model.js.map +1 -0
  42. package/dist/compression/compact.d.ts +153 -0
  43. package/dist/compression/compact.js +501 -0
  44. package/dist/compression/compact.js.map +1 -0
  45. package/dist/dialog-dismiss.d.ts +197 -0
  46. package/dist/dialog-dismiss.js +533 -0
  47. package/dist/dialog-dismiss.js.map +1 -0
  48. package/dist/event-stream.d.ts +60 -0
  49. package/dist/event-stream.js +228 -0
  50. package/dist/event-stream.js.map +1 -0
  51. package/dist/gate-error.d.ts +18 -0
  52. package/dist/gate-error.js +11 -0
  53. package/dist/gate-error.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.js +146 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/instance-discovery.d.ts +117 -0
  58. package/dist/instance-discovery.js +202 -0
  59. package/dist/instance-discovery.js.map +1 -0
  60. package/dist/live-client.d.ts +68 -0
  61. package/dist/live-client.js +583 -0
  62. package/dist/live-client.js.map +1 -0
  63. package/dist/offline.d.ts +75 -0
  64. package/dist/offline.js +1495 -0
  65. package/dist/offline.js.map +1 -0
  66. package/dist/package-version.d.ts +8 -0
  67. package/dist/package-version.js +41 -0
  68. package/dist/package-version.js.map +1 -0
  69. package/dist/ping-cache.d.ts +15 -0
  70. package/dist/ping-cache.js +10 -0
  71. package/dist/ping-cache.js.map +1 -0
  72. package/dist/project-health.d.ts +52 -0
  73. package/dist/project-health.js +177 -0
  74. package/dist/project-health.js.map +1 -0
  75. package/dist/resource-router.d.ts +26 -0
  76. package/dist/resource-router.js +143 -0
  77. package/dist/resource-router.js.map +1 -0
  78. package/dist/resources/index.d.ts +6 -0
  79. package/dist/resources/index.js +40 -0
  80. package/dist/resources/index.js.map +1 -0
  81. package/dist/results.d.ts +14 -0
  82. package/dist/results.js +22 -0
  83. package/dist/results.js.map +1 -0
  84. package/dist/router.d.ts +5 -0
  85. package/dist/router.js +2 -0
  86. package/dist/router.js.map +1 -0
  87. package/dist/routers.d.ts +44 -0
  88. package/dist/routers.js +73 -0
  89. package/dist/routers.js.map +1 -0
  90. package/dist/schema-defaults.d.ts +10 -0
  91. package/dist/schema-defaults.js +43 -0
  92. package/dist/schema-defaults.js.map +1 -0
  93. package/dist/skill/client-paths.d.ts +33 -0
  94. package/dist/skill/client-paths.js +131 -0
  95. package/dist/skill/client-paths.js.map +1 -0
  96. package/dist/skill/generate-skill.d.ts +38 -0
  97. package/dist/skill/generate-skill.js +389 -0
  98. package/dist/skill/generate-skill.js.map +1 -0
  99. package/dist/tool-router.d.ts +40 -0
  100. package/dist/tool-router.js +778 -0
  101. package/dist/tool-router.js.map +1 -0
  102. package/dist/tool-session-state.d.ts +55 -0
  103. package/dist/tool-session-state.js +116 -0
  104. package/dist/tool-session-state.js.map +1 -0
  105. package/dist/tools/agent-capabilities.d.ts +2 -0
  106. package/dist/tools/agent-capabilities.js +24 -0
  107. package/dist/tools/agent-capabilities.js.map +1 -0
  108. package/dist/tools/animation-create.d.ts +2 -0
  109. package/dist/tools/animation-create.js +31 -0
  110. package/dist/tools/animation-create.js.map +1 -0
  111. package/dist/tools/animation-get-data.d.ts +2 -0
  112. package/dist/tools/animation-get-data.js +23 -0
  113. package/dist/tools/animation-get-data.js.map +1 -0
  114. package/dist/tools/animation-modify.d.ts +2 -0
  115. package/dist/tools/animation-modify.js +45 -0
  116. package/dist/tools/animation-modify.js.map +1 -0
  117. package/dist/tools/animator-create.d.ts +2 -0
  118. package/dist/tools/animator-create.js +31 -0
  119. package/dist/tools/animator-create.js.map +1 -0
  120. package/dist/tools/animator-get-data.d.ts +2 -0
  121. package/dist/tools/animator-get-data.js +23 -0
  122. package/dist/tools/animator-get-data.js.map +1 -0
  123. package/dist/tools/animator-modify.d.ts +2 -0
  124. package/dist/tools/animator-modify.js +51 -0
  125. package/dist/tools/animator-modify.js.map +1 -0
  126. package/dist/tools/apply-fix.d.ts +2 -0
  127. package/dist/tools/apply-fix.js +39 -0
  128. package/dist/tools/apply-fix.js.map +1 -0
  129. package/dist/tools/assets-copy.d.ts +2 -0
  130. package/dist/tools/assets-copy.js +50 -0
  131. package/dist/tools/assets-copy.js.map +1 -0
  132. package/dist/tools/assets-create-folder.d.ts +2 -0
  133. package/dist/tools/assets-create-folder.js +53 -0
  134. package/dist/tools/assets-create-folder.js.map +1 -0
  135. package/dist/tools/assets-delete.d.ts +2 -0
  136. package/dist/tools/assets-delete.js +34 -0
  137. package/dist/tools/assets-delete.js.map +1 -0
  138. package/dist/tools/assets-move.d.ts +2 -0
  139. package/dist/tools/assets-move.js +50 -0
  140. package/dist/tools/assets-move.js.map +1 -0
  141. package/dist/tools/assets-refresh.d.ts +2 -0
  142. package/dist/tools/assets-refresh.js +37 -0
  143. package/dist/tools/assets-refresh.js.map +1 -0
  144. package/dist/tools/baseline-create.d.ts +2 -0
  145. package/dist/tools/baseline-create.js +20 -0
  146. package/dist/tools/baseline-create.js.map +1 -0
  147. package/dist/tools/bridge-status.d.ts +2 -0
  148. package/dist/tools/bridge-status.js +44 -0
  149. package/dist/tools/bridge-status.js.map +1 -0
  150. package/dist/tools/build-get-active-target.d.ts +2 -0
  151. package/dist/tools/build-get-active-target.js +16 -0
  152. package/dist/tools/build-get-active-target.js.map +1 -0
  153. package/dist/tools/build-get-defines.d.ts +2 -0
  154. package/dist/tools/build-get-defines.js +16 -0
  155. package/dist/tools/build-get-defines.js.map +1 -0
  156. package/dist/tools/build-get-scenes.d.ts +2 -0
  157. package/dist/tools/build-get-scenes.js +16 -0
  158. package/dist/tools/build-get-scenes.js.map +1 -0
  159. package/dist/tools/build-get-targets.d.ts +2 -0
  160. package/dist/tools/build-get-targets.js +18 -0
  161. package/dist/tools/build-get-targets.js.map +1 -0
  162. package/dist/tools/build-set-defines.d.ts +2 -0
  163. package/dist/tools/build-set-defines.js +50 -0
  164. package/dist/tools/build-set-defines.js.map +1 -0
  165. package/dist/tools/build-set-scenes.d.ts +2 -0
  166. package/dist/tools/build-set-scenes.js +60 -0
  167. package/dist/tools/build-set-scenes.js.map +1 -0
  168. package/dist/tools/build-set-target.d.ts +2 -0
  169. package/dist/tools/build-set-target.js +49 -0
  170. package/dist/tools/build-set-target.js.map +1 -0
  171. package/dist/tools/build-start.d.ts +2 -0
  172. package/dist/tools/build-start.js +64 -0
  173. package/dist/tools/build-start.js.map +1 -0
  174. package/dist/tools/capture-inline.d.ts +2 -0
  175. package/dist/tools/capture-inline.js +57 -0
  176. package/dist/tools/capture-inline.js.map +1 -0
  177. package/dist/tools/checkpoint-create.d.ts +2 -0
  178. package/dist/tools/checkpoint-create.js +16 -0
  179. package/dist/tools/checkpoint-create.js.map +1 -0
  180. package/dist/tools/compile-check.d.ts +2 -0
  181. package/dist/tools/compile-check.js +26 -0
  182. package/dist/tools/compile-check.js.map +1 -0
  183. package/dist/tools/component-add.d.ts +2 -0
  184. package/dist/tools/component-add.js +47 -0
  185. package/dist/tools/component-add.js.map +1 -0
  186. package/dist/tools/component-destroy.d.ts +2 -0
  187. package/dist/tools/component-destroy.js +46 -0
  188. package/dist/tools/component-destroy.js.map +1 -0
  189. package/dist/tools/component-get.d.ts +2 -0
  190. package/dist/tools/component-get.js +54 -0
  191. package/dist/tools/component-get.js.map +1 -0
  192. package/dist/tools/component-list-all.d.ts +2 -0
  193. package/dist/tools/component-list-all.js +38 -0
  194. package/dist/tools/component-list-all.js.map +1 -0
  195. package/dist/tools/component-modify.d.ts +2 -0
  196. package/dist/tools/component-modify.js +80 -0
  197. package/dist/tools/component-modify.js.map +1 -0
  198. package/dist/tools/console-clear.d.ts +2 -0
  199. package/dist/tools/console-clear.js +19 -0
  200. package/dist/tools/console-clear.js.map +1 -0
  201. package/dist/tools/console-log.d.ts +2 -0
  202. package/dist/tools/console-log.js +47 -0
  203. package/dist/tools/console-log.js.map +1 -0
  204. package/dist/tools/delta.d.ts +2 -0
  205. package/dist/tools/delta.js +17 -0
  206. package/dist/tools/delta.js.map +1 -0
  207. package/dist/tools/editor-add-layer.d.ts +2 -0
  208. package/dist/tools/editor-add-layer.js +51 -0
  209. package/dist/tools/editor-add-layer.js.map +1 -0
  210. package/dist/tools/editor-add-tag.d.ts +2 -0
  211. package/dist/tools/editor-add-tag.js +41 -0
  212. package/dist/tools/editor-add-tag.js.map +1 -0
  213. package/dist/tools/editor-get-layers.d.ts +2 -0
  214. package/dist/tools/editor-get-layers.js +22 -0
  215. package/dist/tools/editor-get-layers.js.map +1 -0
  216. package/dist/tools/editor-get-tags.d.ts +2 -0
  217. package/dist/tools/editor-get-tags.js +19 -0
  218. package/dist/tools/editor-get-tags.js.map +1 -0
  219. package/dist/tools/editor-redo.d.ts +2 -0
  220. package/dist/tools/editor-redo.js +27 -0
  221. package/dist/tools/editor-redo.js.map +1 -0
  222. package/dist/tools/editor-set-state.d.ts +2 -0
  223. package/dist/tools/editor-set-state.js +57 -0
  224. package/dist/tools/editor-set-state.js.map +1 -0
  225. package/dist/tools/editor-status.d.ts +2 -0
  226. package/dist/tools/editor-status.js +17 -0
  227. package/dist/tools/editor-status.js.map +1 -0
  228. package/dist/tools/editor-undo.d.ts +2 -0
  229. package/dist/tools/editor-undo.js +29 -0
  230. package/dist/tools/editor-undo.js.map +1 -0
  231. package/dist/tools/execute-csharp.d.ts +2 -0
  232. package/dist/tools/execute-csharp.js +74 -0
  233. package/dist/tools/execute-csharp.js.map +1 -0
  234. package/dist/tools/execute-menu.d.ts +2 -0
  235. package/dist/tools/execute-menu.js +40 -0
  236. package/dist/tools/execute-menu.js.map +1 -0
  237. package/dist/tools/find-members.d.ts +2 -0
  238. package/dist/tools/find-members.js +56 -0
  239. package/dist/tools/find-members.js.map +1 -0
  240. package/dist/tools/find-references.d.ts +2 -0
  241. package/dist/tools/find-references.js +29 -0
  242. package/dist/tools/find-references.js.map +1 -0
  243. package/dist/tools/gameobject-create.d.ts +2 -0
  244. package/dist/tools/gameobject-create.js +61 -0
  245. package/dist/tools/gameobject-create.js.map +1 -0
  246. package/dist/tools/gameobject-destroy.d.ts +2 -0
  247. package/dist/tools/gameobject-destroy.js +38 -0
  248. package/dist/tools/gameobject-destroy.js.map +1 -0
  249. package/dist/tools/gameobject-duplicate.d.ts +2 -0
  250. package/dist/tools/gameobject-duplicate.js +40 -0
  251. package/dist/tools/gameobject-duplicate.js.map +1 -0
  252. package/dist/tools/gameobject-find.d.ts +2 -0
  253. package/dist/tools/gameobject-find.js +59 -0
  254. package/dist/tools/gameobject-find.js.map +1 -0
  255. package/dist/tools/gameobject-modify.d.ts +2 -0
  256. package/dist/tools/gameobject-modify.js +76 -0
  257. package/dist/tools/gameobject-modify.js.map +1 -0
  258. package/dist/tools/gameobject-set-parent.d.ts +2 -0
  259. package/dist/tools/gameobject-set-parent.js +55 -0
  260. package/dist/tools/gameobject-set-parent.js.map +1 -0
  261. package/dist/tools/gate-budget-estimate.d.ts +2 -0
  262. package/dist/tools/gate-budget-estimate.js +59 -0
  263. package/dist/tools/gate-budget-estimate.js.map +1 -0
  264. package/dist/tools/generate-skill.d.ts +2 -0
  265. package/dist/tools/generate-skill.js +37 -0
  266. package/dist/tools/generate-skill.js.map +1 -0
  267. package/dist/tools/impact-preview.d.ts +2 -0
  268. package/dist/tools/impact-preview.js +50 -0
  269. package/dist/tools/impact-preview.js.map +1 -0
  270. package/dist/tools/index.d.ts +30 -0
  271. package/dist/tools/index.js +576 -0
  272. package/dist/tools/index.js.map +1 -0
  273. package/dist/tools/inputsystem-action-add.d.ts +2 -0
  274. package/dist/tools/inputsystem-action-add.js +61 -0
  275. package/dist/tools/inputsystem-action-add.js.map +1 -0
  276. package/dist/tools/inputsystem-actionmap-add.d.ts +2 -0
  277. package/dist/tools/inputsystem-actionmap-add.js +31 -0
  278. package/dist/tools/inputsystem-actionmap-add.js.map +1 -0
  279. package/dist/tools/inputsystem-asset-create.d.ts +2 -0
  280. package/dist/tools/inputsystem-asset-create.js +35 -0
  281. package/dist/tools/inputsystem-asset-create.js.map +1 -0
  282. package/dist/tools/inputsystem-binding-add.d.ts +2 -0
  283. package/dist/tools/inputsystem-binding-add.js +48 -0
  284. package/dist/tools/inputsystem-binding-add.js.map +1 -0
  285. package/dist/tools/inputsystem-binding-composite-add.d.ts +2 -0
  286. package/dist/tools/inputsystem-binding-composite-add.js +51 -0
  287. package/dist/tools/inputsystem-binding-composite-add.js.map +1 -0
  288. package/dist/tools/inputsystem-controlscheme-add.d.ts +2 -0
  289. package/dist/tools/inputsystem-controlscheme-add.js +43 -0
  290. package/dist/tools/inputsystem-controlscheme-add.js.map +1 -0
  291. package/dist/tools/inputsystem-get.d.ts +2 -0
  292. package/dist/tools/inputsystem-get.js +22 -0
  293. package/dist/tools/inputsystem-get.js.map +1 -0
  294. package/dist/tools/invoke-method.d.ts +2 -0
  295. package/dist/tools/invoke-method.js +104 -0
  296. package/dist/tools/invoke-method.js.map +1 -0
  297. package/dist/tools/list-assets.d.ts +2 -0
  298. package/dist/tools/list-assets.js +30 -0
  299. package/dist/tools/list-assets.js.map +1 -0
  300. package/dist/tools/list-rules.d.ts +2 -0
  301. package/dist/tools/list-rules.js +27 -0
  302. package/dist/tools/list-rules.js.map +1 -0
  303. package/dist/tools/manage-tools.d.ts +2 -0
  304. package/dist/tools/manage-tools.js +47 -0
  305. package/dist/tools/manage-tools.js.map +1 -0
  306. package/dist/tools/material-create.d.ts +2 -0
  307. package/dist/tools/material-create.js +37 -0
  308. package/dist/tools/material-create.js.map +1 -0
  309. package/dist/tools/material-get-keywords.d.ts +2 -0
  310. package/dist/tools/material-get-keywords.js +23 -0
  311. package/dist/tools/material-get-keywords.js.map +1 -0
  312. package/dist/tools/material-get-properties.d.ts +2 -0
  313. package/dist/tools/material-get-properties.js +32 -0
  314. package/dist/tools/material-get-properties.js.map +1 -0
  315. package/dist/tools/material-set-keyword.d.ts +2 -0
  316. package/dist/tools/material-set-keyword.js +42 -0
  317. package/dist/tools/material-set-keyword.js.map +1 -0
  318. package/dist/tools/material-set-property.d.ts +2 -0
  319. package/dist/tools/material-set-property.js +49 -0
  320. package/dist/tools/material-set-property.js.map +1 -0
  321. package/dist/tools/material-set-shader.d.ts +2 -0
  322. package/dist/tools/material-set-shader.js +39 -0
  323. package/dist/tools/material-set-shader.js.map +1 -0
  324. package/dist/tools/mutation-explain.d.ts +2 -0
  325. package/dist/tools/mutation-explain.js +44 -0
  326. package/dist/tools/mutation-explain.js.map +1 -0
  327. package/dist/tools/navigation-agent-add.d.ts +2 -0
  328. package/dist/tools/navigation-agent-add.js +38 -0
  329. package/dist/tools/navigation-agent-add.js.map +1 -0
  330. package/dist/tools/navigation-agent-set-destination.d.ts +2 -0
  331. package/dist/tools/navigation-agent-set-destination.js +33 -0
  332. package/dist/tools/navigation-agent-set-destination.js.map +1 -0
  333. package/dist/tools/navigation-get.d.ts +2 -0
  334. package/dist/tools/navigation-get.js +20 -0
  335. package/dist/tools/navigation-get.js.map +1 -0
  336. package/dist/tools/navigation-link-add.d.ts +2 -0
  337. package/dist/tools/navigation-link-add.js +57 -0
  338. package/dist/tools/navigation-link-add.js.map +1 -0
  339. package/dist/tools/navigation-list.d.ts +2 -0
  340. package/dist/tools/navigation-list.js +16 -0
  341. package/dist/tools/navigation-list.js.map +1 -0
  342. package/dist/tools/navigation-modifier-add.d.ts +2 -0
  343. package/dist/tools/navigation-modifier-add.js +42 -0
  344. package/dist/tools/navigation-modifier-add.js.map +1 -0
  345. package/dist/tools/navigation-modifier-volume-add.d.ts +2 -0
  346. package/dist/tools/navigation-modifier-volume-add.js +41 -0
  347. package/dist/tools/navigation-modifier-volume-add.js.map +1 -0
  348. package/dist/tools/navigation-modify.d.ts +2 -0
  349. package/dist/tools/navigation-modify.js +47 -0
  350. package/dist/tools/navigation-modify.js.map +1 -0
  351. package/dist/tools/navigation-set-bake-settings.d.ts +2 -0
  352. package/dist/tools/navigation-set-bake-settings.js +42 -0
  353. package/dist/tools/navigation-set-bake-settings.js.map +1 -0
  354. package/dist/tools/navigation-surface-add.d.ts +2 -0
  355. package/dist/tools/navigation-surface-add.js +62 -0
  356. package/dist/tools/navigation-surface-add.js.map +1 -0
  357. package/dist/tools/navigation-surface-bake.d.ts +2 -0
  358. package/dist/tools/navigation-surface-bake.js +30 -0
  359. package/dist/tools/navigation-surface-bake.js.map +1 -0
  360. package/dist/tools/object-get-data.d.ts +2 -0
  361. package/dist/tools/object-get-data.js +59 -0
  362. package/dist/tools/object-get-data.js.map +1 -0
  363. package/dist/tools/object-modify.d.ts +2 -0
  364. package/dist/tools/object-modify.js +73 -0
  365. package/dist/tools/object-modify.js.map +1 -0
  366. package/dist/tools/package-add.d.ts +2 -0
  367. package/dist/tools/package-add.js +42 -0
  368. package/dist/tools/package-add.js.map +1 -0
  369. package/dist/tools/package-check.d.ts +2 -0
  370. package/dist/tools/package-check.js +27 -0
  371. package/dist/tools/package-check.js.map +1 -0
  372. package/dist/tools/package-get-dependencies.d.ts +2 -0
  373. package/dist/tools/package-get-dependencies.js +17 -0
  374. package/dist/tools/package-get-dependencies.js.map +1 -0
  375. package/dist/tools/package-get-info.d.ts +2 -0
  376. package/dist/tools/package-get-info.js +33 -0
  377. package/dist/tools/package-get-info.js.map +1 -0
  378. package/dist/tools/package-list.d.ts +2 -0
  379. package/dist/tools/package-list.js +57 -0
  380. package/dist/tools/package-list.js.map +1 -0
  381. package/dist/tools/package-remove.d.ts +2 -0
  382. package/dist/tools/package-remove.js +40 -0
  383. package/dist/tools/package-remove.js.map +1 -0
  384. package/dist/tools/package-search.d.ts +2 -0
  385. package/dist/tools/package-search.js +42 -0
  386. package/dist/tools/package-search.js.map +1 -0
  387. package/dist/tools/particle-system-get.d.ts +2 -0
  388. package/dist/tools/particle-system-get.js +42 -0
  389. package/dist/tools/particle-system-get.js.map +1 -0
  390. package/dist/tools/particle-system-modify.d.ts +2 -0
  391. package/dist/tools/particle-system-modify.js +73 -0
  392. package/dist/tools/particle-system-modify.js.map +1 -0
  393. package/dist/tools/ping.d.ts +2 -0
  394. package/dist/tools/ping.js +10 -0
  395. package/dist/tools/ping.js.map +1 -0
  396. package/dist/tools/prefab-apply.d.ts +2 -0
  397. package/dist/tools/prefab-apply.js +39 -0
  398. package/dist/tools/prefab-apply.js.map +1 -0
  399. package/dist/tools/prefab-close.d.ts +2 -0
  400. package/dist/tools/prefab-close.js +29 -0
  401. package/dist/tools/prefab-close.js.map +1 -0
  402. package/dist/tools/prefab-create.d.ts +2 -0
  403. package/dist/tools/prefab-create.js +52 -0
  404. package/dist/tools/prefab-create.js.map +1 -0
  405. package/dist/tools/prefab-get-overrides.d.ts +2 -0
  406. package/dist/tools/prefab-get-overrides.js +27 -0
  407. package/dist/tools/prefab-get-overrides.js.map +1 -0
  408. package/dist/tools/prefab-instantiate.d.ts +2 -0
  409. package/dist/tools/prefab-instantiate.js +52 -0
  410. package/dist/tools/prefab-instantiate.js.map +1 -0
  411. package/dist/tools/prefab-open.d.ts +2 -0
  412. package/dist/tools/prefab-open.js +30 -0
  413. package/dist/tools/prefab-open.js.map +1 -0
  414. package/dist/tools/prefab-revert.d.ts +2 -0
  415. package/dist/tools/prefab-revert.js +37 -0
  416. package/dist/tools/prefab-revert.js.map +1 -0
  417. package/dist/tools/prefab-save.d.ts +2 -0
  418. package/dist/tools/prefab-save.js +24 -0
  419. package/dist/tools/prefab-save.js.map +1 -0
  420. package/dist/tools/prefab-status.d.ts +2 -0
  421. package/dist/tools/prefab-status.js +29 -0
  422. package/dist/tools/prefab-status.js.map +1 -0
  423. package/dist/tools/prefab-unpack.d.ts +2 -0
  424. package/dist/tools/prefab-unpack.js +43 -0
  425. package/dist/tools/prefab-unpack.js.map +1 -0
  426. package/dist/tools/probuilder-create-shape.d.ts +2 -0
  427. package/dist/tools/probuilder-create-shape.js +40 -0
  428. package/dist/tools/probuilder-create-shape.js.map +1 -0
  429. package/dist/tools/probuilder-delete-faces.d.ts +2 -0
  430. package/dist/tools/probuilder-delete-faces.js +47 -0
  431. package/dist/tools/probuilder-delete-faces.js.map +1 -0
  432. package/dist/tools/probuilder-extrude.d.ts +2 -0
  433. package/dist/tools/probuilder-extrude.js +58 -0
  434. package/dist/tools/probuilder-extrude.js.map +1 -0
  435. package/dist/tools/probuilder-get-mesh-info.d.ts +2 -0
  436. package/dist/tools/probuilder-get-mesh-info.js +21 -0
  437. package/dist/tools/probuilder-get-mesh-info.js.map +1 -0
  438. package/dist/tools/probuilder-set-face-material.d.ts +2 -0
  439. package/dist/tools/probuilder-set-face-material.js +53 -0
  440. package/dist/tools/probuilder-set-face-material.js.map +1 -0
  441. package/dist/tools/profiler-capture.d.ts +2 -0
  442. package/dist/tools/profiler-capture.js +84 -0
  443. package/dist/tools/profiler-capture.js.map +1 -0
  444. package/dist/tools/profiler-clear-data.d.ts +2 -0
  445. package/dist/tools/profiler-clear-data.js +20 -0
  446. package/dist/tools/profiler-clear-data.js.map +1 -0
  447. package/dist/tools/profiler-enable-module.d.ts +2 -0
  448. package/dist/tools/profiler-enable-module.js +32 -0
  449. package/dist/tools/profiler-enable-module.js.map +1 -0
  450. package/dist/tools/profiler-get-config.d.ts +2 -0
  451. package/dist/tools/profiler-get-config.js +21 -0
  452. package/dist/tools/profiler-get-config.js.map +1 -0
  453. package/dist/tools/profiler-get-script-stats.d.ts +2 -0
  454. package/dist/tools/profiler-get-script-stats.js +20 -0
  455. package/dist/tools/profiler-get-script-stats.js.map +1 -0
  456. package/dist/tools/profiler-get-status.d.ts +2 -0
  457. package/dist/tools/profiler-get-status.js +22 -0
  458. package/dist/tools/profiler-get-status.js.map +1 -0
  459. package/dist/tools/profiler-list-modules.d.ts +2 -0
  460. package/dist/tools/profiler-list-modules.js +20 -0
  461. package/dist/tools/profiler-list-modules.js.map +1 -0
  462. package/dist/tools/profiler-load-data.d.ts +2 -0
  463. package/dist/tools/profiler-load-data.js +38 -0
  464. package/dist/tools/profiler-load-data.js.map +1 -0
  465. package/dist/tools/profiler-memory.d.ts +2 -0
  466. package/dist/tools/profiler-memory.js +21 -0
  467. package/dist/tools/profiler-memory.js.map +1 -0
  468. package/dist/tools/profiler-rendering.d.ts +2 -0
  469. package/dist/tools/profiler-rendering.js +14 -0
  470. package/dist/tools/profiler-rendering.js.map +1 -0
  471. package/dist/tools/profiler-save-data.d.ts +2 -0
  472. package/dist/tools/profiler-save-data.js +38 -0
  473. package/dist/tools/profiler-save-data.js.map +1 -0
  474. package/dist/tools/profiler-set-config.d.ts +2 -0
  475. package/dist/tools/profiler-set-config.js +72 -0
  476. package/dist/tools/profiler-set-config.js.map +1 -0
  477. package/dist/tools/profiler-start.d.ts +2 -0
  478. package/dist/tools/profiler-start.js +31 -0
  479. package/dist/tools/profiler-start.js.map +1 -0
  480. package/dist/tools/profiler-stop.d.ts +2 -0
  481. package/dist/tools/profiler-stop.js +20 -0
  482. package/dist/tools/profiler-stop.js.map +1 -0
  483. package/dist/tools/pull-events.d.ts +2 -0
  484. package/dist/tools/pull-events.js +43 -0
  485. package/dist/tools/pull-events.js.map +1 -0
  486. package/dist/tools/read-asset.d.ts +2 -0
  487. package/dist/tools/read-asset.js +62 -0
  488. package/dist/tools/read-asset.js.map +1 -0
  489. package/dist/tools/read-compile-errors.d.ts +2 -0
  490. package/dist/tools/read-compile-errors.js +59 -0
  491. package/dist/tools/read-compile-errors.js.map +1 -0
  492. package/dist/tools/read-console.d.ts +2 -0
  493. package/dist/tools/read-console.js +57 -0
  494. package/dist/tools/read-console.js.map +1 -0
  495. package/dist/tools/regression-check.d.ts +2 -0
  496. package/dist/tools/regression-check.js +36 -0
  497. package/dist/tools/regression-check.js.map +1 -0
  498. package/dist/tools/reserialize.d.ts +2 -0
  499. package/dist/tools/reserialize.js +31 -0
  500. package/dist/tools/reserialize.js.map +1 -0
  501. package/dist/tools/run-tests.d.ts +2 -0
  502. package/dist/tools/run-tests.js +49 -0
  503. package/dist/tools/run-tests.js.map +1 -0
  504. package/dist/tools/scan-all.d.ts +2 -0
  505. package/dist/tools/scan-all.js +25 -0
  506. package/dist/tools/scan-all.js.map +1 -0
  507. package/dist/tools/scan-paths.d.ts +2 -0
  508. package/dist/tools/scan-paths.js +40 -0
  509. package/dist/tools/scan-paths.js.map +1 -0
  510. package/dist/tools/scene-create.d.ts +2 -0
  511. package/dist/tools/scene-create.js +47 -0
  512. package/dist/tools/scene-create.js.map +1 -0
  513. package/dist/tools/scene-focus.d.ts +2 -0
  514. package/dist/tools/scene-focus.js +55 -0
  515. package/dist/tools/scene-focus.js.map +1 -0
  516. package/dist/tools/scene-get-data.d.ts +2 -0
  517. package/dist/tools/scene-get-data.js +52 -0
  518. package/dist/tools/scene-get-data.js.map +1 -0
  519. package/dist/tools/scene-get-dirty-summary.d.ts +2 -0
  520. package/dist/tools/scene-get-dirty-summary.js +17 -0
  521. package/dist/tools/scene-get-dirty-summary.js.map +1 -0
  522. package/dist/tools/scene-list-opened.d.ts +2 -0
  523. package/dist/tools/scene-list-opened.js +16 -0
  524. package/dist/tools/scene-list-opened.js.map +1 -0
  525. package/dist/tools/scene-open.d.ts +2 -0
  526. package/dist/tools/scene-open.js +48 -0
  527. package/dist/tools/scene-open.js.map +1 -0
  528. package/dist/tools/scene-save.d.ts +2 -0
  529. package/dist/tools/scene-save.js +38 -0
  530. package/dist/tools/scene-save.js.map +1 -0
  531. package/dist/tools/scene-set-active.d.ts +2 -0
  532. package/dist/tools/scene-set-active.js +33 -0
  533. package/dist/tools/scene-set-active.js.map +1 -0
  534. package/dist/tools/scene-unload.d.ts +2 -0
  535. package/dist/tools/scene-unload.js +33 -0
  536. package/dist/tools/scene-unload.js.map +1 -0
  537. package/dist/tools/screenshot-camera.d.ts +2 -0
  538. package/dist/tools/screenshot-camera.js +59 -0
  539. package/dist/tools/screenshot-camera.js.map +1 -0
  540. package/dist/tools/screenshot-window.d.ts +2 -0
  541. package/dist/tools/screenshot-window.js +54 -0
  542. package/dist/tools/screenshot-window.js.map +1 -0
  543. package/dist/tools/screenshot.d.ts +2 -0
  544. package/dist/tools/screenshot.js +47 -0
  545. package/dist/tools/screenshot.js.map +1 -0
  546. package/dist/tools/script-delete.d.ts +2 -0
  547. package/dist/tools/script-delete.js +37 -0
  548. package/dist/tools/script-delete.js.map +1 -0
  549. package/dist/tools/script-read.d.ts +2 -0
  550. package/dist/tools/script-read.js +46 -0
  551. package/dist/tools/script-read.js.map +1 -0
  552. package/dist/tools/script-write.d.ts +2 -0
  553. package/dist/tools/script-write.js +56 -0
  554. package/dist/tools/script-write.js.map +1 -0
  555. package/dist/tools/search-assets.d.ts +2 -0
  556. package/dist/tools/search-assets.js +49 -0
  557. package/dist/tools/search-assets.js.map +1 -0
  558. package/dist/tools/selection-get.d.ts +2 -0
  559. package/dist/tools/selection-get.js +28 -0
  560. package/dist/tools/selection-get.js.map +1 -0
  561. package/dist/tools/selection-set.d.ts +2 -0
  562. package/dist/tools/selection-set.js +72 -0
  563. package/dist/tools/selection-set.js.map +1 -0
  564. package/dist/tools/settings-get-lighting.d.ts +2 -0
  565. package/dist/tools/settings-get-lighting.js +21 -0
  566. package/dist/tools/settings-get-lighting.js.map +1 -0
  567. package/dist/tools/settings-get-physics.d.ts +2 -0
  568. package/dist/tools/settings-get-physics.js +17 -0
  569. package/dist/tools/settings-get-physics.js.map +1 -0
  570. package/dist/tools/settings-get-player.d.ts +2 -0
  571. package/dist/tools/settings-get-player.js +16 -0
  572. package/dist/tools/settings-get-player.js.map +1 -0
  573. package/dist/tools/settings-get-quality.d.ts +2 -0
  574. package/dist/tools/settings-get-quality.js +16 -0
  575. package/dist/tools/settings-get-quality.js.map +1 -0
  576. package/dist/tools/settings-set-lighting.d.ts +2 -0
  577. package/dist/tools/settings-set-lighting.js +58 -0
  578. package/dist/tools/settings-set-lighting.js.map +1 -0
  579. package/dist/tools/settings-set-physics.d.ts +2 -0
  580. package/dist/tools/settings-set-physics.js +52 -0
  581. package/dist/tools/settings-set-physics.js.map +1 -0
  582. package/dist/tools/settings-set-player.d.ts +2 -0
  583. package/dist/tools/settings-set-player.js +62 -0
  584. package/dist/tools/settings-set-player.js.map +1 -0
  585. package/dist/tools/settings-set-quality.d.ts +2 -0
  586. package/dist/tools/settings-set-quality.js +51 -0
  587. package/dist/tools/settings-set-quality.js.map +1 -0
  588. package/dist/tools/shader-get-data.d.ts +2 -0
  589. package/dist/tools/shader-get-data.js +31 -0
  590. package/dist/tools/shader-get-data.js.map +1 -0
  591. package/dist/tools/shader-list-all.d.ts +2 -0
  592. package/dist/tools/shader-list-all.js +24 -0
  593. package/dist/tools/shader-list-all.js.map +1 -0
  594. package/dist/tools/spatial-query.d.ts +2 -0
  595. package/dist/tools/spatial-query.js +117 -0
  596. package/dist/tools/spatial-query.js.map +1 -0
  597. package/dist/tools/splines-add-knot.d.ts +2 -0
  598. package/dist/tools/splines-add-knot.js +44 -0
  599. package/dist/tools/splines-add-knot.js.map +1 -0
  600. package/dist/tools/splines-container-create.d.ts +2 -0
  601. package/dist/tools/splines-container-create.js +39 -0
  602. package/dist/tools/splines-container-create.js.map +1 -0
  603. package/dist/tools/splines-evaluate.d.ts +2 -0
  604. package/dist/tools/splines-evaluate.js +31 -0
  605. package/dist/tools/splines-evaluate.js.map +1 -0
  606. package/dist/tools/splines-get-knots.d.ts +2 -0
  607. package/dist/tools/splines-get-knots.js +25 -0
  608. package/dist/tools/splines-get-knots.js.map +1 -0
  609. package/dist/tools/splines-modify.d.ts +2 -0
  610. package/dist/tools/splines-modify.js +35 -0
  611. package/dist/tools/splines-modify.js.map +1 -0
  612. package/dist/tools/splines-set-knot.d.ts +2 -0
  613. package/dist/tools/splines-set-knot.js +41 -0
  614. package/dist/tools/splines-set-knot.js.map +1 -0
  615. package/dist/tools/splines-set-tangent-mode.d.ts +2 -0
  616. package/dist/tools/splines-set-tangent-mode.js +43 -0
  617. package/dist/tools/splines-set-tangent-mode.js.map +1 -0
  618. package/dist/tools/type-schema.d.ts +2 -0
  619. package/dist/tools/type-schema.js +62 -0
  620. package/dist/tools/type-schema.js.map +1 -0
  621. package/dist/tools/validate-edit.d.ts +2 -0
  622. package/dist/tools/validate-edit.js +43 -0
  623. package/dist/tools/validate-edit.js.map +1 -0
  624. package/dist/unity-install-discovery.d.ts +79 -0
  625. package/dist/unity-install-discovery.js +206 -0
  626. package/dist/unity-install-discovery.js.map +1 -0
  627. package/dist/unity-log.d.ts +35 -0
  628. package/dist/unity-log.js +110 -0
  629. package/dist/unity-log.js.map +1 -0
  630. package/package.json +54 -0
@@ -0,0 +1,161 @@
1
+ // M15 T6.1 — compile-aware bridge readiness polling, shared by `ping` and
2
+ // `wait-for-ready`.
3
+ //
4
+ // Polling the bridge is its own concern: it must respect compile state (a 503
5
+ // or `compiling: true` /ping is NOT readiness), tolerate transient network
6
+ // errors during a domain reload, and fail fast on a dead-bridge signature.
7
+ // Pulling it out of the command implementations keeps the command code thin
8
+ // and lets the poll loop be unit-tested without touching the network.
9
+ import { readInstanceLock, classifyInstance, } from "../instance-discovery.js";
10
+ export const DEFAULT_WAIT_TIMEOUT_MS = 120_000;
11
+ export const DEFAULT_POLL_INTERVAL_MS = 1_000;
12
+ export const PING_FETCH_TIMEOUT_MS = 5_000;
13
+ function defaultSleep(ms) {
14
+ return new Promise((resolve) => setTimeout(resolve, ms));
15
+ }
16
+ /**
17
+ * Poll the bridge until it is ready (connected, not compiling) or the deadline
18
+ * passes. A 503 from /ping and `compiling: true` both keep the wait alive —
19
+ * "ready" means usable, not just listening. The poll fails fast on a
20
+ * dead-bridge signature (live PID, stale heartbeat) because /ping will never
21
+ * recover in that state.
22
+ *
23
+ * @param live LiveClient pointed at the resolved bridge port.
24
+ * @param projectPath Project path, used to read the instance lock for
25
+ * dead-bridge classification. Optional; when absent the
26
+ * dead-bridge shortcut is skipped.
27
+ * @param singlePoll One /ping attempt. Returns `{ ok, status, body }`:
28
+ * `ok` true only when connected AND not compiling.
29
+ * Indirected so tests can stub the network hop.
30
+ * @param opts Timing + clock injection.
31
+ */
32
+ export async function pollUntilReady(live, projectPath, singlePoll, opts) {
33
+ const now = opts.now ?? Date.now;
34
+ const sleep = opts.sleep ?? defaultSleep;
35
+ const start = now();
36
+ const deadline = start + opts.timeoutMs;
37
+ let lastPing = null;
38
+ let sawCompiling = false;
39
+ let sawOffline = false;
40
+ while (true) {
41
+ const t = now();
42
+ if (t >= deadline) {
43
+ return {
44
+ ready: false,
45
+ status: "timeout",
46
+ lastPing,
47
+ elapsedMs: t - start,
48
+ reason: formatTimeoutReason(opts.timeoutMs, sawCompiling, sawOffline),
49
+ };
50
+ }
51
+ const result = await singlePoll(live);
52
+ if (result.body)
53
+ lastPing = result.body;
54
+ if (result.status === "compiling")
55
+ sawCompiling = true;
56
+ if (result.status === "offline" || result.status === "error") {
57
+ sawOffline = true;
58
+ }
59
+ if (result.status === "ready") {
60
+ return {
61
+ ready: true,
62
+ status: "ready",
63
+ lastPing: result.body ?? lastPing,
64
+ elapsedMs: now() - start,
65
+ reason: "Bridge is ready (connected, idle).",
66
+ };
67
+ }
68
+ // Dead-bridge signature: the Unity process is alive but the bridge's
69
+ // [InitializeOnLoad] never re-ran after a compile failure. /ping will not
70
+ // recover until the C# error is fixed, so waiting is pointless.
71
+ if (projectPath) {
72
+ let classification;
73
+ try {
74
+ classification = classifyInstance(readInstanceLock(projectPath));
75
+ }
76
+ catch {
77
+ classification = null;
78
+ }
79
+ if (classification === "dead_bridge") {
80
+ return {
81
+ ready: false,
82
+ status: "dead_bridge",
83
+ lastPing,
84
+ elapsedMs: now() - start,
85
+ reason: "Bridge assembly failed to recompile — Unity is in a bad state " +
86
+ "(safe mode / compile errors). Run 'unity-open-mcp run-tool " +
87
+ "unity_open_mcp_read_compile_errors --json' to retrieve the " +
88
+ "compiler errors, fix them, then re-run wait-for-ready.",
89
+ };
90
+ }
91
+ }
92
+ await sleep(Math.min(opts.intervalMs, Math.max(0, deadline - now())));
93
+ }
94
+ }
95
+ /**
96
+ * Single /ping attempt translated into a poll status. Centralizes the
97
+ * "connected AND not compiling" readiness rule so every command agrees on it.
98
+ *
99
+ * Implementation note: this calls `live.isLiveAvailable()` first to get the
100
+ * ping-cache population side effect + 503/compiling handling, then falls back
101
+ * to a direct route of `unity_open_mcp_ping`. The LiveClient's ping handler
102
+ * already returns the full body; we re-read it from the ping cache so a single
103
+ * network round-trip answers both "is it up?" and "what's its state?".
104
+ */
105
+ export async function singlePing(live, fetchTimeoutMs = PING_FETCH_TIMEOUT_MS) {
106
+ // `isLiveAvailable` populates the ping cache and returns the connected flag.
107
+ // A 503 (compile in progress) returns true from isLiveAvailable but is NOT
108
+ // readiness — we still need the body to check `compiling`.
109
+ try {
110
+ const available = await live.isLiveAvailable();
111
+ if (!available) {
112
+ return { status: "offline", body: null };
113
+ }
114
+ // Reuse the populated ping cache rather than a second round-trip. The
115
+ // cache was just written by isLiveAvailable.
116
+ const pingResult = await live.route("unity_open_mcp_ping", {});
117
+ const body = extractPingBody(pingResult);
118
+ if (!body) {
119
+ // isLiveAvailable said true but the explicit ping didn't yield a body —
120
+ // treat as compiling/unknown and keep polling.
121
+ return { status: "compiling", body: null };
122
+ }
123
+ if (body.compiling === true) {
124
+ return { status: "compiling", body };
125
+ }
126
+ if (body.connected === false) {
127
+ return { status: "offline", body };
128
+ }
129
+ return { status: "ready", body };
130
+ }
131
+ catch {
132
+ return { status: "error", body: null };
133
+ }
134
+ }
135
+ /** Extract the typed ping body from a CallToolResult's first text content. */
136
+ export function extractPingBody(result) {
137
+ const first = result.content[0];
138
+ if (!first || first.type !== "text" || typeof first.text !== "string") {
139
+ return null;
140
+ }
141
+ try {
142
+ const parsed = JSON.parse(first.text);
143
+ if (parsed && typeof parsed === "object") {
144
+ return parsed;
145
+ }
146
+ }
147
+ catch {
148
+ // fall through
149
+ }
150
+ return null;
151
+ }
152
+ function formatTimeoutReason(timeoutMs, sawCompiling, sawOffline) {
153
+ if (sawCompiling && !sawOffline) {
154
+ return `Bridge was still compiling after ${Math.round(timeoutMs / 1000)}s.`;
155
+ }
156
+ if (sawOffline && !sawCompiling) {
157
+ return `Bridge never became reachable within ${Math.round(timeoutMs / 1000)}s.`;
158
+ }
159
+ return `Bridge did not become ready within ${Math.round(timeoutMs / 1000)}s.`;
160
+ }
161
+ //# sourceMappingURL=ping-poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping-poller.js","sourceRoot":"","sources":["../../src/cli/ping-poller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The trio version this server belongs to. Resolved once at module load from
3
+ * package.json (same value the bridge package.json should carry). We do not
4
+ * re-read per call — package.json does not change while the process runs.
5
+ */
6
+ export declare const SHARED_VERSION: string;
7
+ /** When non-empty, the version check is suppressed entirely. */
8
+ export declare function isVersionCheckSuppressed(): boolean;
9
+ export interface CompatResult {
10
+ /** true when the pair is considered compatible (patch-only or equal). */
11
+ ok: boolean;
12
+ serverVersion: string;
13
+ bridgeVersion: string;
14
+ /** Human-readable guidance; present when not ok or when the pair differs at all. */
15
+ message: string;
16
+ }
17
+ /**
18
+ * Compare the running server's version against the bridge's reported version.
19
+ *
20
+ * Rule (pre-1.0): for `0.x`, the whole `0.minor` pair must match. Patch
21
+ * differences are compatible (warn only). After 1.0, the major digit must
22
+ * match. Unparseable bridge versions are treated as compatible with a warning
23
+ * (an ancient bridge that predates bridgeVersion reporting shouldn't be hard
24
+ * blocked) — this keeps the check forward-compatible with older installs.
25
+ *
26
+ * Always returns a structured result; the caller decides whether to print it.
27
+ * The result is advisory regardless — the connection proceeds either way.
28
+ */
29
+ export declare function checkBridgeCompat(bridgeVersion: string, serverVersion?: string): CompatResult;
30
+ /** True when the bridge version differs from the server at all. Used by callers
31
+ * that only want to know whether to render a compat line. */
32
+ export declare function versionsDiffer(bridgeVersion: string, serverVersion?: string): boolean;
package/dist/compat.js ADDED
@@ -0,0 +1,121 @@
1
+ // Runtime version-compatibility check between the npm MCP server and the live
2
+ // Unity bridge.
3
+ //
4
+ // The npm MCP server, the bridge Unity package, and the verify Unity package
5
+ // ship as a tightly-coupled trio on ONE shared version (see <repo>/version.json
6
+ // and docs/versioning.md). The bridge reports its version on /ping as
7
+ // `bridgeVersion` (BridgeSession.BridgeVersion, which the sync script keeps
8
+ // equal to the bridge package.json version). The server reads its own version
9
+ // from its package.json at runtime (package-version.ts). This module compares
10
+ // the two and produces an advisory result — we WARN and continue rather than
11
+ // hard-failing, so a mixed pair never silently misbehaves but also never blocks
12
+ // a user who knows what they are doing. The check is advisory by design.
13
+ //
14
+ // The matching rule follows the pre-1.0 semver convention used across the repo:
15
+ // while the major version is 0, the MINOR digit is the breaking axis. So for
16
+ // `0.x`, both sides must agree on the full `0.minor` pair to be considered
17
+ // compatible; patch differences (0.5.0 vs 0.5.1) are compatible and only warn.
18
+ // Once the project reaches 1.0, the major digit becomes the breaking axis (the
19
+ // standard reading).
20
+ //
21
+ // Escape hatch: setting UNITY_OPEN_MCP_SKIP_VERSION_CHECK=1 in the environment
22
+ // fully suppresses the warning. See docs/versioning.md.
23
+ import { readPackageVersion } from "./package-version.js";
24
+ /**
25
+ * The trio version this server belongs to. Resolved once at module load from
26
+ * package.json (same value the bridge package.json should carry). We do not
27
+ * re-read per call — package.json does not change while the process runs.
28
+ */
29
+ export const SHARED_VERSION = readPackageVersion();
30
+ /** When non-empty, the version check is suppressed entirely. */
31
+ export function isVersionCheckSuppressed() {
32
+ return process.env.UNITY_OPEN_MCP_SKIP_VERSION_CHECK === "1";
33
+ }
34
+ /**
35
+ * Parse `X.Y.Z` (ignoring any prerelease/build metadata) into a tuple, or
36
+ * `undefined` when the string is not a recognizable version. Used by the
37
+ * comparison below; not a full semver implementation on purpose.
38
+ */
39
+ function parseLoose(v) {
40
+ const m = /^(\d+)\.(\d+)\.(\d+)/.exec(v);
41
+ if (!m)
42
+ return undefined;
43
+ return [Number(m[1]), Number(m[2]), Number(m[3])];
44
+ }
45
+ /**
46
+ * Compare the running server's version against the bridge's reported version.
47
+ *
48
+ * Rule (pre-1.0): for `0.x`, the whole `0.minor` pair must match. Patch
49
+ * differences are compatible (warn only). After 1.0, the major digit must
50
+ * match. Unparseable bridge versions are treated as compatible with a warning
51
+ * (an ancient bridge that predates bridgeVersion reporting shouldn't be hard
52
+ * blocked) — this keeps the check forward-compatible with older installs.
53
+ *
54
+ * Always returns a structured result; the caller decides whether to print it.
55
+ * The result is advisory regardless — the connection proceeds either way.
56
+ */
57
+ export function checkBridgeCompat(bridgeVersion, serverVersion = SHARED_VERSION) {
58
+ const server = parseLoose(serverVersion);
59
+ const bridge = parseLoose(bridgeVersion);
60
+ if (!bridge || !server) {
61
+ return {
62
+ ok: true,
63
+ serverVersion,
64
+ bridgeVersion,
65
+ message: `unity-open-mcp: could not compare versions ` +
66
+ `(server ${serverVersion}, bridge ${bridgeVersion}). ` +
67
+ `Continuing; if tools misbehave, align both to the same release.`,
68
+ };
69
+ }
70
+ const equal = serverVersion === bridgeVersion;
71
+ if (equal) {
72
+ return {
73
+ ok: true,
74
+ serverVersion,
75
+ bridgeVersion,
76
+ message: "",
77
+ };
78
+ }
79
+ // Determine the breaking axis. Pre-1.0 (major === 0 on either side) uses the
80
+ // minor digit as the breaking axis; otherwise the major digit. We take the
81
+ // max of both majors so a 0.x server talking to a 1.0 bridge is treated as
82
+ // a major mismatch (which it is).
83
+ const breakingAxis = server[0] === 0 || bridge[0] === 0 ? "minor" : "major";
84
+ const majorMismatch = server[0] !== bridge[0];
85
+ const minorMismatch = server[1] !== bridge[1];
86
+ const incompatible = breakingAxis === "major" ? majorMismatch : majorMismatch || minorMismatch;
87
+ if (!incompatible) {
88
+ // Patch-only difference — compatible, advisory only.
89
+ return {
90
+ ok: true,
91
+ serverVersion,
92
+ bridgeVersion,
93
+ message: `unity-open-mcp: version drift (server ${serverVersion}, bridge ${bridgeVersion}). ` +
94
+ `Compatible (patch difference only). To silence this, align both releases.`,
95
+ };
96
+ }
97
+ // Determine which side is older so the message can name the exact fix.
98
+ const serverNewer = server[0] > bridge[0] ||
99
+ (server[0] === bridge[0] && server[1] > bridge[1]) ||
100
+ (server[0] === bridge[0] && server[1] === bridge[1] && server[2] > bridge[2]);
101
+ const older = serverNewer ? "bridge" : "server";
102
+ const targetVersion = serverNewer ? serverVersion : bridgeVersion;
103
+ const fix = older === "bridge"
104
+ ? `In Unity: Window → Package Manager → update the bridge package ` +
105
+ `(tag bridge-v${targetVersion}).`
106
+ : `Run: npm i -g unity-open-mcp@${targetVersion}`;
107
+ return {
108
+ ok: false,
109
+ serverVersion,
110
+ bridgeVersion,
111
+ message: `unity-open-mcp: INCOMPATIBLE versions — server ${serverVersion}, bridge ${bridgeVersion}.\n` +
112
+ ` The ${older} is older. To fix: ${fix}\n` +
113
+ ` (Set UNITY_OPEN_MCP_SKIP_VERSION_CHECK=1 to suppress this warning.)`,
114
+ };
115
+ }
116
+ /** True when the bridge version differs from the server at all. Used by callers
117
+ * that only want to know whether to render a compat line. */
118
+ export function versionsDiffer(bridgeVersion, serverVersion = SHARED_VERSION) {
119
+ return bridgeVersion !== serverVersion;
120
+ }
121
+ //# sourceMappingURL=compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.js","sourceRoot":"","sources":["../src/compat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /** Maximum number of distinct errors we surface. Bounded so a giant wall of
2
+ * errors can't blow up the tool response; the agent can fix-and-recheck. */
3
+ export declare const MAX_COMPILER_ERRORS = 50;
4
+ /** A single compiler diagnostic, parsed from a Unity diagnostic line. */
5
+ export interface CompilerError {
6
+ /** The full original line, e.g.
7
+ * `Assets/Foo.cs(10,14): error CS0246: ...`. */
8
+ raw: string;
9
+ /** Asset-relative file path, e.g. `Assets/Foo.cs`. Empty when the line had
10
+ * no parseable locator. */
11
+ file: string;
12
+ /** 1-based line number, or 0 when unparseable. */
13
+ line: number;
14
+ /** Error code, e.g. `CS0246`. */
15
+ code: string;
16
+ /** The message after the code. */
17
+ message: string;
18
+ }
19
+ /**
20
+ * Extract CSxxxx diagnostics as structured records, deduped by raw line, in
21
+ * first-seen order, capped at MAX_COMPILER_ERRORS. Lines that don't match the
22
+ * full `path(line,col): error CSxxxx: message` shape (rare — Unity is
23
+ * consistent) still contribute via a best-effort record with empty file/line.
24
+ */
25
+ export declare function extractStructuredCompilerErrors(output: string): CompilerError[];
26
+ /**
27
+ * Legacy raw-substring extractor. Returns the matched `error CSxxxx: ...`
28
+ * substrings (without the leading asset locator), deduped, capped. Kept for
29
+ * the batch-spawn fallback path and its existing tests.
30
+ */
31
+ export declare function extractCompilerErrors(output: string): string[];
@@ -0,0 +1,91 @@
1
+ // C# compiler-error extraction, shared between the batch compile_check path
2
+ // (batch-spawn.ts) and the offline read_compile_errors tool (unity-log.ts /
3
+ // read-compile-errors.ts). Both consume raw Unity compiler output that looks
4
+ // like:
5
+ //
6
+ // Assets/Path.cs(line,col): error CSxxxx: message
7
+ //
8
+ // Unity formats every diagnostic this way regardless of where it is emitted —
9
+ // stdout of a -batchmode Unity, the platform Editor.log, or the Editor
10
+ // console. A single extractor therefore serves both the "second Unity we
11
+ // spawned" and "the live Editor's log file" sources.
12
+ //
13
+ // The raw-line extractor (extractCompilerErrors) returns the matched
14
+ // substrings as-is and is what batch-spawn uses for its best-effort fallback
15
+ // when the batch entry point never printed JSON markers. The structured
16
+ // extractor (extractStructuredCompilerErrors) additionally parses out the
17
+ // leading asset locator (file, line, column) and the CS code, which is what
18
+ // an agent needs to fix the offending file.
19
+ /** Maximum number of distinct errors we surface. Bounded so a giant wall of
20
+ * errors can't blow up the tool response; the agent can fix-and-recheck. */
21
+ export const MAX_COMPILER_ERRORS = 50;
22
+ // Match the full diagnostic line, capturing:
23
+ // group 1: asset locator — `path(line,col)` or `path(line,line)` (Unity
24
+ // sometimes emits a range). The path is everything up to the last
25
+ // `(` before `):`.
26
+ // group 2: file path (the part of the locator before the paren)
27
+ // group 3: line number
28
+ // group 4: CS error code (CSxxxx)
29
+ // group 5: message
30
+ // `error CSxxxx:` may appear mid-line (Unity prints the asset locator first),
31
+ // so we do not anchor to line start. Lines are matched on a single-line basis
32
+ // (no [^\n]* prefix that would run across newlines).
33
+ const COMPILER_ERROR_RE = /(([^()\r\n]+)\((\d+)[^\)]*\)):\s*error\s+(CS\d{4}):\s*([^\r\n]+)/g;
34
+ // The raw-substring regex retained for the legacy extractCompilerErrors API
35
+ // (batch-spawn). It matches the tail `error CSxxxx: ...` without the asset
36
+ // locator; the structured extractor above supersedes it for new callers.
37
+ const COMPILER_ERROR_TAIL_RE = /error\s+CS\d{4}:[^\n]+/g;
38
+ /**
39
+ * Extract CSxxxx diagnostics as structured records, deduped by raw line, in
40
+ * first-seen order, capped at MAX_COMPILER_ERRORS. Lines that don't match the
41
+ * full `path(line,col): error CSxxxx: message` shape (rare — Unity is
42
+ * consistent) still contribute via a best-effort record with empty file/line.
43
+ */
44
+ export function extractStructuredCompilerErrors(output) {
45
+ if (!output)
46
+ return [];
47
+ const seen = new Set();
48
+ const errors = [];
49
+ COMPILER_ERROR_RE.lastIndex = 0;
50
+ let m;
51
+ while ((m = COMPILER_ERROR_RE.exec(output)) !== null) {
52
+ const raw = m[0].trim();
53
+ if (!raw || seen.has(raw))
54
+ continue;
55
+ seen.add(raw);
56
+ errors.push({
57
+ raw,
58
+ file: (m[2] ?? "").trim(),
59
+ line: m[3] ? parseInt(m[3], 10) : 0,
60
+ code: m[4] ?? "",
61
+ message: (m[5] ?? "").trim(),
62
+ });
63
+ if (errors.length >= MAX_COMPILER_ERRORS)
64
+ break;
65
+ }
66
+ return errors;
67
+ }
68
+ /**
69
+ * Legacy raw-substring extractor. Returns the matched `error CSxxxx: ...`
70
+ * substrings (without the leading asset locator), deduped, capped. Kept for
71
+ * the batch-spawn fallback path and its existing tests.
72
+ */
73
+ export function extractCompilerErrors(output) {
74
+ if (!output)
75
+ return [];
76
+ const seen = new Set();
77
+ const errors = [];
78
+ COMPILER_ERROR_TAIL_RE.lastIndex = 0;
79
+ let m;
80
+ while ((m = COMPILER_ERROR_TAIL_RE.exec(output)) !== null) {
81
+ const line = m[0].trim();
82
+ if (line && !seen.has(line)) {
83
+ seen.add(line);
84
+ errors.push(line);
85
+ if (errors.length >= MAX_COMPILER_ERRORS)
86
+ break;
87
+ }
88
+ }
89
+ return errors;
90
+ }
91
+ //# sourceMappingURL=compiler-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler-errors.js","sourceRoot":"","sources":["../src/compiler-errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { LiveClient } from "./live-client.js";
3
+ import type { AssetModel } from "./compression/asset-model.js";
4
+ export declare function isCompressible(toolName: string): boolean;
5
+ /** Session-scoped LRU for the last few AssetModels read by `read_asset`. */
6
+ export declare class AssetModelCache {
7
+ private entries;
8
+ get(key: string): AssetModel | null;
9
+ set(key: string, model: AssetModel): void;
10
+ clear(): void;
11
+ get size(): number;
12
+ }
13
+ /**
14
+ * Route a compressible tool: try offline parser first for text-serialized
15
+ * assets, fall back to the live bridge for binary formats. Cache the model
16
+ * (read_asset only), apply the compression module, and return.
17
+ */
18
+ export declare function routeCompressible(toolName: string, args: Record<string, unknown>, live: LiveClient, cache: AssetModelCache, projectPath: string): Promise<CallToolResult>;