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.
- package/LICENSE +21 -0
- package/README.md +145 -0
- package/dist/batch-spawn.d.ts +33 -0
- package/dist/batch-spawn.js +329 -0
- package/dist/batch-spawn.js.map +1 -0
- package/dist/capabilities/build-capabilities.d.ts +155 -0
- package/dist/capabilities/build-capabilities.js +475 -0
- package/dist/capabilities/build-capabilities.js.map +1 -0
- package/dist/capabilities/list-rules.d.ts +45 -0
- package/dist/capabilities/list-rules.js +121 -0
- package/dist/capabilities/list-rules.js.map +1 -0
- package/dist/capabilities/rule-catalog.d.ts +44 -0
- package/dist/capabilities/rule-catalog.js +330 -0
- package/dist/capabilities/rule-catalog.js.map +1 -0
- package/dist/capabilities/tool-groups.d.ts +53 -0
- package/dist/capabilities/tool-groups.js +396 -0
- package/dist/capabilities/tool-groups.js.map +1 -0
- package/dist/cli/args.d.ts +36 -0
- package/dist/cli/args.js +239 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/cli.d.ts +23 -0
- package/dist/cli/cli.js +125 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands.d.ts +37 -0
- package/dist/cli/commands.js +277 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/ping-poller.d.ts +81 -0
- package/dist/cli/ping-poller.js +161 -0
- package/dist/cli/ping-poller.js.map +1 -0
- package/dist/compat.d.ts +32 -0
- package/dist/compat.js +121 -0
- package/dist/compat.js.map +1 -0
- package/dist/compiler-errors.d.ts +31 -0
- package/dist/compiler-errors.js +91 -0
- package/dist/compiler-errors.js.map +1 -0
- package/dist/compressible-router.d.ts +18 -0
- package/dist/compressible-router.js +191 -0
- package/dist/compressible-router.js.map +1 -0
- package/dist/compression/asset-model.d.ts +86 -0
- package/dist/compression/asset-model.js +15 -0
- package/dist/compression/asset-model.js.map +1 -0
- package/dist/compression/compact.d.ts +153 -0
- package/dist/compression/compact.js +501 -0
- package/dist/compression/compact.js.map +1 -0
- package/dist/dialog-dismiss.d.ts +197 -0
- package/dist/dialog-dismiss.js +533 -0
- package/dist/dialog-dismiss.js.map +1 -0
- package/dist/event-stream.d.ts +60 -0
- package/dist/event-stream.js +228 -0
- package/dist/event-stream.js.map +1 -0
- package/dist/gate-error.d.ts +18 -0
- package/dist/gate-error.js +11 -0
- package/dist/gate-error.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +146 -0
- package/dist/index.js.map +1 -0
- package/dist/instance-discovery.d.ts +117 -0
- package/dist/instance-discovery.js +202 -0
- package/dist/instance-discovery.js.map +1 -0
- package/dist/live-client.d.ts +68 -0
- package/dist/live-client.js +583 -0
- package/dist/live-client.js.map +1 -0
- package/dist/offline.d.ts +75 -0
- package/dist/offline.js +1495 -0
- package/dist/offline.js.map +1 -0
- package/dist/package-version.d.ts +8 -0
- package/dist/package-version.js +41 -0
- package/dist/package-version.js.map +1 -0
- package/dist/ping-cache.d.ts +15 -0
- package/dist/ping-cache.js +10 -0
- package/dist/ping-cache.js.map +1 -0
- package/dist/project-health.d.ts +52 -0
- package/dist/project-health.js +177 -0
- package/dist/project-health.js.map +1 -0
- package/dist/resource-router.d.ts +26 -0
- package/dist/resource-router.js +143 -0
- package/dist/resource-router.js.map +1 -0
- package/dist/resources/index.d.ts +6 -0
- package/dist/resources/index.js +40 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/results.d.ts +14 -0
- package/dist/results.js +22 -0
- package/dist/results.js.map +1 -0
- package/dist/router.d.ts +5 -0
- package/dist/router.js +2 -0
- package/dist/router.js.map +1 -0
- package/dist/routers.d.ts +44 -0
- package/dist/routers.js +73 -0
- package/dist/routers.js.map +1 -0
- package/dist/schema-defaults.d.ts +10 -0
- package/dist/schema-defaults.js +43 -0
- package/dist/schema-defaults.js.map +1 -0
- package/dist/skill/client-paths.d.ts +33 -0
- package/dist/skill/client-paths.js +131 -0
- package/dist/skill/client-paths.js.map +1 -0
- package/dist/skill/generate-skill.d.ts +38 -0
- package/dist/skill/generate-skill.js +389 -0
- package/dist/skill/generate-skill.js.map +1 -0
- package/dist/tool-router.d.ts +40 -0
- package/dist/tool-router.js +778 -0
- package/dist/tool-router.js.map +1 -0
- package/dist/tool-session-state.d.ts +55 -0
- package/dist/tool-session-state.js +116 -0
- package/dist/tool-session-state.js.map +1 -0
- package/dist/tools/agent-capabilities.d.ts +2 -0
- package/dist/tools/agent-capabilities.js +24 -0
- package/dist/tools/agent-capabilities.js.map +1 -0
- package/dist/tools/animation-create.d.ts +2 -0
- package/dist/tools/animation-create.js +31 -0
- package/dist/tools/animation-create.js.map +1 -0
- package/dist/tools/animation-get-data.d.ts +2 -0
- package/dist/tools/animation-get-data.js +23 -0
- package/dist/tools/animation-get-data.js.map +1 -0
- package/dist/tools/animation-modify.d.ts +2 -0
- package/dist/tools/animation-modify.js +45 -0
- package/dist/tools/animation-modify.js.map +1 -0
- package/dist/tools/animator-create.d.ts +2 -0
- package/dist/tools/animator-create.js +31 -0
- package/dist/tools/animator-create.js.map +1 -0
- package/dist/tools/animator-get-data.d.ts +2 -0
- package/dist/tools/animator-get-data.js +23 -0
- package/dist/tools/animator-get-data.js.map +1 -0
- package/dist/tools/animator-modify.d.ts +2 -0
- package/dist/tools/animator-modify.js +51 -0
- package/dist/tools/animator-modify.js.map +1 -0
- package/dist/tools/apply-fix.d.ts +2 -0
- package/dist/tools/apply-fix.js +39 -0
- package/dist/tools/apply-fix.js.map +1 -0
- package/dist/tools/assets-copy.d.ts +2 -0
- package/dist/tools/assets-copy.js +50 -0
- package/dist/tools/assets-copy.js.map +1 -0
- package/dist/tools/assets-create-folder.d.ts +2 -0
- package/dist/tools/assets-create-folder.js +53 -0
- package/dist/tools/assets-create-folder.js.map +1 -0
- package/dist/tools/assets-delete.d.ts +2 -0
- package/dist/tools/assets-delete.js +34 -0
- package/dist/tools/assets-delete.js.map +1 -0
- package/dist/tools/assets-move.d.ts +2 -0
- package/dist/tools/assets-move.js +50 -0
- package/dist/tools/assets-move.js.map +1 -0
- package/dist/tools/assets-refresh.d.ts +2 -0
- package/dist/tools/assets-refresh.js +37 -0
- package/dist/tools/assets-refresh.js.map +1 -0
- package/dist/tools/baseline-create.d.ts +2 -0
- package/dist/tools/baseline-create.js +20 -0
- package/dist/tools/baseline-create.js.map +1 -0
- package/dist/tools/bridge-status.d.ts +2 -0
- package/dist/tools/bridge-status.js +44 -0
- package/dist/tools/bridge-status.js.map +1 -0
- package/dist/tools/build-get-active-target.d.ts +2 -0
- package/dist/tools/build-get-active-target.js +16 -0
- package/dist/tools/build-get-active-target.js.map +1 -0
- package/dist/tools/build-get-defines.d.ts +2 -0
- package/dist/tools/build-get-defines.js +16 -0
- package/dist/tools/build-get-defines.js.map +1 -0
- package/dist/tools/build-get-scenes.d.ts +2 -0
- package/dist/tools/build-get-scenes.js +16 -0
- package/dist/tools/build-get-scenes.js.map +1 -0
- package/dist/tools/build-get-targets.d.ts +2 -0
- package/dist/tools/build-get-targets.js +18 -0
- package/dist/tools/build-get-targets.js.map +1 -0
- package/dist/tools/build-set-defines.d.ts +2 -0
- package/dist/tools/build-set-defines.js +50 -0
- package/dist/tools/build-set-defines.js.map +1 -0
- package/dist/tools/build-set-scenes.d.ts +2 -0
- package/dist/tools/build-set-scenes.js +60 -0
- package/dist/tools/build-set-scenes.js.map +1 -0
- package/dist/tools/build-set-target.d.ts +2 -0
- package/dist/tools/build-set-target.js +49 -0
- package/dist/tools/build-set-target.js.map +1 -0
- package/dist/tools/build-start.d.ts +2 -0
- package/dist/tools/build-start.js +64 -0
- package/dist/tools/build-start.js.map +1 -0
- package/dist/tools/capture-inline.d.ts +2 -0
- package/dist/tools/capture-inline.js +57 -0
- package/dist/tools/capture-inline.js.map +1 -0
- package/dist/tools/checkpoint-create.d.ts +2 -0
- package/dist/tools/checkpoint-create.js +16 -0
- package/dist/tools/checkpoint-create.js.map +1 -0
- package/dist/tools/compile-check.d.ts +2 -0
- package/dist/tools/compile-check.js +26 -0
- package/dist/tools/compile-check.js.map +1 -0
- package/dist/tools/component-add.d.ts +2 -0
- package/dist/tools/component-add.js +47 -0
- package/dist/tools/component-add.js.map +1 -0
- package/dist/tools/component-destroy.d.ts +2 -0
- package/dist/tools/component-destroy.js +46 -0
- package/dist/tools/component-destroy.js.map +1 -0
- package/dist/tools/component-get.d.ts +2 -0
- package/dist/tools/component-get.js +54 -0
- package/dist/tools/component-get.js.map +1 -0
- package/dist/tools/component-list-all.d.ts +2 -0
- package/dist/tools/component-list-all.js +38 -0
- package/dist/tools/component-list-all.js.map +1 -0
- package/dist/tools/component-modify.d.ts +2 -0
- package/dist/tools/component-modify.js +80 -0
- package/dist/tools/component-modify.js.map +1 -0
- package/dist/tools/console-clear.d.ts +2 -0
- package/dist/tools/console-clear.js +19 -0
- package/dist/tools/console-clear.js.map +1 -0
- package/dist/tools/console-log.d.ts +2 -0
- package/dist/tools/console-log.js +47 -0
- package/dist/tools/console-log.js.map +1 -0
- package/dist/tools/delta.d.ts +2 -0
- package/dist/tools/delta.js +17 -0
- package/dist/tools/delta.js.map +1 -0
- package/dist/tools/editor-add-layer.d.ts +2 -0
- package/dist/tools/editor-add-layer.js +51 -0
- package/dist/tools/editor-add-layer.js.map +1 -0
- package/dist/tools/editor-add-tag.d.ts +2 -0
- package/dist/tools/editor-add-tag.js +41 -0
- package/dist/tools/editor-add-tag.js.map +1 -0
- package/dist/tools/editor-get-layers.d.ts +2 -0
- package/dist/tools/editor-get-layers.js +22 -0
- package/dist/tools/editor-get-layers.js.map +1 -0
- package/dist/tools/editor-get-tags.d.ts +2 -0
- package/dist/tools/editor-get-tags.js +19 -0
- package/dist/tools/editor-get-tags.js.map +1 -0
- package/dist/tools/editor-redo.d.ts +2 -0
- package/dist/tools/editor-redo.js +27 -0
- package/dist/tools/editor-redo.js.map +1 -0
- package/dist/tools/editor-set-state.d.ts +2 -0
- package/dist/tools/editor-set-state.js +57 -0
- package/dist/tools/editor-set-state.js.map +1 -0
- package/dist/tools/editor-status.d.ts +2 -0
- package/dist/tools/editor-status.js +17 -0
- package/dist/tools/editor-status.js.map +1 -0
- package/dist/tools/editor-undo.d.ts +2 -0
- package/dist/tools/editor-undo.js +29 -0
- package/dist/tools/editor-undo.js.map +1 -0
- package/dist/tools/execute-csharp.d.ts +2 -0
- package/dist/tools/execute-csharp.js +74 -0
- package/dist/tools/execute-csharp.js.map +1 -0
- package/dist/tools/execute-menu.d.ts +2 -0
- package/dist/tools/execute-menu.js +40 -0
- package/dist/tools/execute-menu.js.map +1 -0
- package/dist/tools/find-members.d.ts +2 -0
- package/dist/tools/find-members.js +56 -0
- package/dist/tools/find-members.js.map +1 -0
- package/dist/tools/find-references.d.ts +2 -0
- package/dist/tools/find-references.js +29 -0
- package/dist/tools/find-references.js.map +1 -0
- package/dist/tools/gameobject-create.d.ts +2 -0
- package/dist/tools/gameobject-create.js +61 -0
- package/dist/tools/gameobject-create.js.map +1 -0
- package/dist/tools/gameobject-destroy.d.ts +2 -0
- package/dist/tools/gameobject-destroy.js +38 -0
- package/dist/tools/gameobject-destroy.js.map +1 -0
- package/dist/tools/gameobject-duplicate.d.ts +2 -0
- package/dist/tools/gameobject-duplicate.js +40 -0
- package/dist/tools/gameobject-duplicate.js.map +1 -0
- package/dist/tools/gameobject-find.d.ts +2 -0
- package/dist/tools/gameobject-find.js +59 -0
- package/dist/tools/gameobject-find.js.map +1 -0
- package/dist/tools/gameobject-modify.d.ts +2 -0
- package/dist/tools/gameobject-modify.js +76 -0
- package/dist/tools/gameobject-modify.js.map +1 -0
- package/dist/tools/gameobject-set-parent.d.ts +2 -0
- package/dist/tools/gameobject-set-parent.js +55 -0
- package/dist/tools/gameobject-set-parent.js.map +1 -0
- package/dist/tools/gate-budget-estimate.d.ts +2 -0
- package/dist/tools/gate-budget-estimate.js +59 -0
- package/dist/tools/gate-budget-estimate.js.map +1 -0
- package/dist/tools/generate-skill.d.ts +2 -0
- package/dist/tools/generate-skill.js +37 -0
- package/dist/tools/generate-skill.js.map +1 -0
- package/dist/tools/impact-preview.d.ts +2 -0
- package/dist/tools/impact-preview.js +50 -0
- package/dist/tools/impact-preview.js.map +1 -0
- package/dist/tools/index.d.ts +30 -0
- package/dist/tools/index.js +576 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inputsystem-action-add.d.ts +2 -0
- package/dist/tools/inputsystem-action-add.js +61 -0
- package/dist/tools/inputsystem-action-add.js.map +1 -0
- package/dist/tools/inputsystem-actionmap-add.d.ts +2 -0
- package/dist/tools/inputsystem-actionmap-add.js +31 -0
- package/dist/tools/inputsystem-actionmap-add.js.map +1 -0
- package/dist/tools/inputsystem-asset-create.d.ts +2 -0
- package/dist/tools/inputsystem-asset-create.js +35 -0
- package/dist/tools/inputsystem-asset-create.js.map +1 -0
- package/dist/tools/inputsystem-binding-add.d.ts +2 -0
- package/dist/tools/inputsystem-binding-add.js +48 -0
- package/dist/tools/inputsystem-binding-add.js.map +1 -0
- package/dist/tools/inputsystem-binding-composite-add.d.ts +2 -0
- package/dist/tools/inputsystem-binding-composite-add.js +51 -0
- package/dist/tools/inputsystem-binding-composite-add.js.map +1 -0
- package/dist/tools/inputsystem-controlscheme-add.d.ts +2 -0
- package/dist/tools/inputsystem-controlscheme-add.js +43 -0
- package/dist/tools/inputsystem-controlscheme-add.js.map +1 -0
- package/dist/tools/inputsystem-get.d.ts +2 -0
- package/dist/tools/inputsystem-get.js +22 -0
- package/dist/tools/inputsystem-get.js.map +1 -0
- package/dist/tools/invoke-method.d.ts +2 -0
- package/dist/tools/invoke-method.js +104 -0
- package/dist/tools/invoke-method.js.map +1 -0
- package/dist/tools/list-assets.d.ts +2 -0
- package/dist/tools/list-assets.js +30 -0
- package/dist/tools/list-assets.js.map +1 -0
- package/dist/tools/list-rules.d.ts +2 -0
- package/dist/tools/list-rules.js +27 -0
- package/dist/tools/list-rules.js.map +1 -0
- package/dist/tools/manage-tools.d.ts +2 -0
- package/dist/tools/manage-tools.js +47 -0
- package/dist/tools/manage-tools.js.map +1 -0
- package/dist/tools/material-create.d.ts +2 -0
- package/dist/tools/material-create.js +37 -0
- package/dist/tools/material-create.js.map +1 -0
- package/dist/tools/material-get-keywords.d.ts +2 -0
- package/dist/tools/material-get-keywords.js +23 -0
- package/dist/tools/material-get-keywords.js.map +1 -0
- package/dist/tools/material-get-properties.d.ts +2 -0
- package/dist/tools/material-get-properties.js +32 -0
- package/dist/tools/material-get-properties.js.map +1 -0
- package/dist/tools/material-set-keyword.d.ts +2 -0
- package/dist/tools/material-set-keyword.js +42 -0
- package/dist/tools/material-set-keyword.js.map +1 -0
- package/dist/tools/material-set-property.d.ts +2 -0
- package/dist/tools/material-set-property.js +49 -0
- package/dist/tools/material-set-property.js.map +1 -0
- package/dist/tools/material-set-shader.d.ts +2 -0
- package/dist/tools/material-set-shader.js +39 -0
- package/dist/tools/material-set-shader.js.map +1 -0
- package/dist/tools/mutation-explain.d.ts +2 -0
- package/dist/tools/mutation-explain.js +44 -0
- package/dist/tools/mutation-explain.js.map +1 -0
- package/dist/tools/navigation-agent-add.d.ts +2 -0
- package/dist/tools/navigation-agent-add.js +38 -0
- package/dist/tools/navigation-agent-add.js.map +1 -0
- package/dist/tools/navigation-agent-set-destination.d.ts +2 -0
- package/dist/tools/navigation-agent-set-destination.js +33 -0
- package/dist/tools/navigation-agent-set-destination.js.map +1 -0
- package/dist/tools/navigation-get.d.ts +2 -0
- package/dist/tools/navigation-get.js +20 -0
- package/dist/tools/navigation-get.js.map +1 -0
- package/dist/tools/navigation-link-add.d.ts +2 -0
- package/dist/tools/navigation-link-add.js +57 -0
- package/dist/tools/navigation-link-add.js.map +1 -0
- package/dist/tools/navigation-list.d.ts +2 -0
- package/dist/tools/navigation-list.js +16 -0
- package/dist/tools/navigation-list.js.map +1 -0
- package/dist/tools/navigation-modifier-add.d.ts +2 -0
- package/dist/tools/navigation-modifier-add.js +42 -0
- package/dist/tools/navigation-modifier-add.js.map +1 -0
- package/dist/tools/navigation-modifier-volume-add.d.ts +2 -0
- package/dist/tools/navigation-modifier-volume-add.js +41 -0
- package/dist/tools/navigation-modifier-volume-add.js.map +1 -0
- package/dist/tools/navigation-modify.d.ts +2 -0
- package/dist/tools/navigation-modify.js +47 -0
- package/dist/tools/navigation-modify.js.map +1 -0
- package/dist/tools/navigation-set-bake-settings.d.ts +2 -0
- package/dist/tools/navigation-set-bake-settings.js +42 -0
- package/dist/tools/navigation-set-bake-settings.js.map +1 -0
- package/dist/tools/navigation-surface-add.d.ts +2 -0
- package/dist/tools/navigation-surface-add.js +62 -0
- package/dist/tools/navigation-surface-add.js.map +1 -0
- package/dist/tools/navigation-surface-bake.d.ts +2 -0
- package/dist/tools/navigation-surface-bake.js +30 -0
- package/dist/tools/navigation-surface-bake.js.map +1 -0
- package/dist/tools/object-get-data.d.ts +2 -0
- package/dist/tools/object-get-data.js +59 -0
- package/dist/tools/object-get-data.js.map +1 -0
- package/dist/tools/object-modify.d.ts +2 -0
- package/dist/tools/object-modify.js +73 -0
- package/dist/tools/object-modify.js.map +1 -0
- package/dist/tools/package-add.d.ts +2 -0
- package/dist/tools/package-add.js +42 -0
- package/dist/tools/package-add.js.map +1 -0
- package/dist/tools/package-check.d.ts +2 -0
- package/dist/tools/package-check.js +27 -0
- package/dist/tools/package-check.js.map +1 -0
- package/dist/tools/package-get-dependencies.d.ts +2 -0
- package/dist/tools/package-get-dependencies.js +17 -0
- package/dist/tools/package-get-dependencies.js.map +1 -0
- package/dist/tools/package-get-info.d.ts +2 -0
- package/dist/tools/package-get-info.js +33 -0
- package/dist/tools/package-get-info.js.map +1 -0
- package/dist/tools/package-list.d.ts +2 -0
- package/dist/tools/package-list.js +57 -0
- package/dist/tools/package-list.js.map +1 -0
- package/dist/tools/package-remove.d.ts +2 -0
- package/dist/tools/package-remove.js +40 -0
- package/dist/tools/package-remove.js.map +1 -0
- package/dist/tools/package-search.d.ts +2 -0
- package/dist/tools/package-search.js +42 -0
- package/dist/tools/package-search.js.map +1 -0
- package/dist/tools/particle-system-get.d.ts +2 -0
- package/dist/tools/particle-system-get.js +42 -0
- package/dist/tools/particle-system-get.js.map +1 -0
- package/dist/tools/particle-system-modify.d.ts +2 -0
- package/dist/tools/particle-system-modify.js +73 -0
- package/dist/tools/particle-system-modify.js.map +1 -0
- package/dist/tools/ping.d.ts +2 -0
- package/dist/tools/ping.js +10 -0
- package/dist/tools/ping.js.map +1 -0
- package/dist/tools/prefab-apply.d.ts +2 -0
- package/dist/tools/prefab-apply.js +39 -0
- package/dist/tools/prefab-apply.js.map +1 -0
- package/dist/tools/prefab-close.d.ts +2 -0
- package/dist/tools/prefab-close.js +29 -0
- package/dist/tools/prefab-close.js.map +1 -0
- package/dist/tools/prefab-create.d.ts +2 -0
- package/dist/tools/prefab-create.js +52 -0
- package/dist/tools/prefab-create.js.map +1 -0
- package/dist/tools/prefab-get-overrides.d.ts +2 -0
- package/dist/tools/prefab-get-overrides.js +27 -0
- package/dist/tools/prefab-get-overrides.js.map +1 -0
- package/dist/tools/prefab-instantiate.d.ts +2 -0
- package/dist/tools/prefab-instantiate.js +52 -0
- package/dist/tools/prefab-instantiate.js.map +1 -0
- package/dist/tools/prefab-open.d.ts +2 -0
- package/dist/tools/prefab-open.js +30 -0
- package/dist/tools/prefab-open.js.map +1 -0
- package/dist/tools/prefab-revert.d.ts +2 -0
- package/dist/tools/prefab-revert.js +37 -0
- package/dist/tools/prefab-revert.js.map +1 -0
- package/dist/tools/prefab-save.d.ts +2 -0
- package/dist/tools/prefab-save.js +24 -0
- package/dist/tools/prefab-save.js.map +1 -0
- package/dist/tools/prefab-status.d.ts +2 -0
- package/dist/tools/prefab-status.js +29 -0
- package/dist/tools/prefab-status.js.map +1 -0
- package/dist/tools/prefab-unpack.d.ts +2 -0
- package/dist/tools/prefab-unpack.js +43 -0
- package/dist/tools/prefab-unpack.js.map +1 -0
- package/dist/tools/probuilder-create-shape.d.ts +2 -0
- package/dist/tools/probuilder-create-shape.js +40 -0
- package/dist/tools/probuilder-create-shape.js.map +1 -0
- package/dist/tools/probuilder-delete-faces.d.ts +2 -0
- package/dist/tools/probuilder-delete-faces.js +47 -0
- package/dist/tools/probuilder-delete-faces.js.map +1 -0
- package/dist/tools/probuilder-extrude.d.ts +2 -0
- package/dist/tools/probuilder-extrude.js +58 -0
- package/dist/tools/probuilder-extrude.js.map +1 -0
- package/dist/tools/probuilder-get-mesh-info.d.ts +2 -0
- package/dist/tools/probuilder-get-mesh-info.js +21 -0
- package/dist/tools/probuilder-get-mesh-info.js.map +1 -0
- package/dist/tools/probuilder-set-face-material.d.ts +2 -0
- package/dist/tools/probuilder-set-face-material.js +53 -0
- package/dist/tools/probuilder-set-face-material.js.map +1 -0
- package/dist/tools/profiler-capture.d.ts +2 -0
- package/dist/tools/profiler-capture.js +84 -0
- package/dist/tools/profiler-capture.js.map +1 -0
- package/dist/tools/profiler-clear-data.d.ts +2 -0
- package/dist/tools/profiler-clear-data.js +20 -0
- package/dist/tools/profiler-clear-data.js.map +1 -0
- package/dist/tools/profiler-enable-module.d.ts +2 -0
- package/dist/tools/profiler-enable-module.js +32 -0
- package/dist/tools/profiler-enable-module.js.map +1 -0
- package/dist/tools/profiler-get-config.d.ts +2 -0
- package/dist/tools/profiler-get-config.js +21 -0
- package/dist/tools/profiler-get-config.js.map +1 -0
- package/dist/tools/profiler-get-script-stats.d.ts +2 -0
- package/dist/tools/profiler-get-script-stats.js +20 -0
- package/dist/tools/profiler-get-script-stats.js.map +1 -0
- package/dist/tools/profiler-get-status.d.ts +2 -0
- package/dist/tools/profiler-get-status.js +22 -0
- package/dist/tools/profiler-get-status.js.map +1 -0
- package/dist/tools/profiler-list-modules.d.ts +2 -0
- package/dist/tools/profiler-list-modules.js +20 -0
- package/dist/tools/profiler-list-modules.js.map +1 -0
- package/dist/tools/profiler-load-data.d.ts +2 -0
- package/dist/tools/profiler-load-data.js +38 -0
- package/dist/tools/profiler-load-data.js.map +1 -0
- package/dist/tools/profiler-memory.d.ts +2 -0
- package/dist/tools/profiler-memory.js +21 -0
- package/dist/tools/profiler-memory.js.map +1 -0
- package/dist/tools/profiler-rendering.d.ts +2 -0
- package/dist/tools/profiler-rendering.js +14 -0
- package/dist/tools/profiler-rendering.js.map +1 -0
- package/dist/tools/profiler-save-data.d.ts +2 -0
- package/dist/tools/profiler-save-data.js +38 -0
- package/dist/tools/profiler-save-data.js.map +1 -0
- package/dist/tools/profiler-set-config.d.ts +2 -0
- package/dist/tools/profiler-set-config.js +72 -0
- package/dist/tools/profiler-set-config.js.map +1 -0
- package/dist/tools/profiler-start.d.ts +2 -0
- package/dist/tools/profiler-start.js +31 -0
- package/dist/tools/profiler-start.js.map +1 -0
- package/dist/tools/profiler-stop.d.ts +2 -0
- package/dist/tools/profiler-stop.js +20 -0
- package/dist/tools/profiler-stop.js.map +1 -0
- package/dist/tools/pull-events.d.ts +2 -0
- package/dist/tools/pull-events.js +43 -0
- package/dist/tools/pull-events.js.map +1 -0
- package/dist/tools/read-asset.d.ts +2 -0
- package/dist/tools/read-asset.js +62 -0
- package/dist/tools/read-asset.js.map +1 -0
- package/dist/tools/read-compile-errors.d.ts +2 -0
- package/dist/tools/read-compile-errors.js +59 -0
- package/dist/tools/read-compile-errors.js.map +1 -0
- package/dist/tools/read-console.d.ts +2 -0
- package/dist/tools/read-console.js +57 -0
- package/dist/tools/read-console.js.map +1 -0
- package/dist/tools/regression-check.d.ts +2 -0
- package/dist/tools/regression-check.js +36 -0
- package/dist/tools/regression-check.js.map +1 -0
- package/dist/tools/reserialize.d.ts +2 -0
- package/dist/tools/reserialize.js +31 -0
- package/dist/tools/reserialize.js.map +1 -0
- package/dist/tools/run-tests.d.ts +2 -0
- package/dist/tools/run-tests.js +49 -0
- package/dist/tools/run-tests.js.map +1 -0
- package/dist/tools/scan-all.d.ts +2 -0
- package/dist/tools/scan-all.js +25 -0
- package/dist/tools/scan-all.js.map +1 -0
- package/dist/tools/scan-paths.d.ts +2 -0
- package/dist/tools/scan-paths.js +40 -0
- package/dist/tools/scan-paths.js.map +1 -0
- package/dist/tools/scene-create.d.ts +2 -0
- package/dist/tools/scene-create.js +47 -0
- package/dist/tools/scene-create.js.map +1 -0
- package/dist/tools/scene-focus.d.ts +2 -0
- package/dist/tools/scene-focus.js +55 -0
- package/dist/tools/scene-focus.js.map +1 -0
- package/dist/tools/scene-get-data.d.ts +2 -0
- package/dist/tools/scene-get-data.js +52 -0
- package/dist/tools/scene-get-data.js.map +1 -0
- package/dist/tools/scene-get-dirty-summary.d.ts +2 -0
- package/dist/tools/scene-get-dirty-summary.js +17 -0
- package/dist/tools/scene-get-dirty-summary.js.map +1 -0
- package/dist/tools/scene-list-opened.d.ts +2 -0
- package/dist/tools/scene-list-opened.js +16 -0
- package/dist/tools/scene-list-opened.js.map +1 -0
- package/dist/tools/scene-open.d.ts +2 -0
- package/dist/tools/scene-open.js +48 -0
- package/dist/tools/scene-open.js.map +1 -0
- package/dist/tools/scene-save.d.ts +2 -0
- package/dist/tools/scene-save.js +38 -0
- package/dist/tools/scene-save.js.map +1 -0
- package/dist/tools/scene-set-active.d.ts +2 -0
- package/dist/tools/scene-set-active.js +33 -0
- package/dist/tools/scene-set-active.js.map +1 -0
- package/dist/tools/scene-unload.d.ts +2 -0
- package/dist/tools/scene-unload.js +33 -0
- package/dist/tools/scene-unload.js.map +1 -0
- package/dist/tools/screenshot-camera.d.ts +2 -0
- package/dist/tools/screenshot-camera.js +59 -0
- package/dist/tools/screenshot-camera.js.map +1 -0
- package/dist/tools/screenshot-window.d.ts +2 -0
- package/dist/tools/screenshot-window.js +54 -0
- package/dist/tools/screenshot-window.js.map +1 -0
- package/dist/tools/screenshot.d.ts +2 -0
- package/dist/tools/screenshot.js +47 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/script-delete.d.ts +2 -0
- package/dist/tools/script-delete.js +37 -0
- package/dist/tools/script-delete.js.map +1 -0
- package/dist/tools/script-read.d.ts +2 -0
- package/dist/tools/script-read.js +46 -0
- package/dist/tools/script-read.js.map +1 -0
- package/dist/tools/script-write.d.ts +2 -0
- package/dist/tools/script-write.js +56 -0
- package/dist/tools/script-write.js.map +1 -0
- package/dist/tools/search-assets.d.ts +2 -0
- package/dist/tools/search-assets.js +49 -0
- package/dist/tools/search-assets.js.map +1 -0
- package/dist/tools/selection-get.d.ts +2 -0
- package/dist/tools/selection-get.js +28 -0
- package/dist/tools/selection-get.js.map +1 -0
- package/dist/tools/selection-set.d.ts +2 -0
- package/dist/tools/selection-set.js +72 -0
- package/dist/tools/selection-set.js.map +1 -0
- package/dist/tools/settings-get-lighting.d.ts +2 -0
- package/dist/tools/settings-get-lighting.js +21 -0
- package/dist/tools/settings-get-lighting.js.map +1 -0
- package/dist/tools/settings-get-physics.d.ts +2 -0
- package/dist/tools/settings-get-physics.js +17 -0
- package/dist/tools/settings-get-physics.js.map +1 -0
- package/dist/tools/settings-get-player.d.ts +2 -0
- package/dist/tools/settings-get-player.js +16 -0
- package/dist/tools/settings-get-player.js.map +1 -0
- package/dist/tools/settings-get-quality.d.ts +2 -0
- package/dist/tools/settings-get-quality.js +16 -0
- package/dist/tools/settings-get-quality.js.map +1 -0
- package/dist/tools/settings-set-lighting.d.ts +2 -0
- package/dist/tools/settings-set-lighting.js +58 -0
- package/dist/tools/settings-set-lighting.js.map +1 -0
- package/dist/tools/settings-set-physics.d.ts +2 -0
- package/dist/tools/settings-set-physics.js +52 -0
- package/dist/tools/settings-set-physics.js.map +1 -0
- package/dist/tools/settings-set-player.d.ts +2 -0
- package/dist/tools/settings-set-player.js +62 -0
- package/dist/tools/settings-set-player.js.map +1 -0
- package/dist/tools/settings-set-quality.d.ts +2 -0
- package/dist/tools/settings-set-quality.js +51 -0
- package/dist/tools/settings-set-quality.js.map +1 -0
- package/dist/tools/shader-get-data.d.ts +2 -0
- package/dist/tools/shader-get-data.js +31 -0
- package/dist/tools/shader-get-data.js.map +1 -0
- package/dist/tools/shader-list-all.d.ts +2 -0
- package/dist/tools/shader-list-all.js +24 -0
- package/dist/tools/shader-list-all.js.map +1 -0
- package/dist/tools/spatial-query.d.ts +2 -0
- package/dist/tools/spatial-query.js +117 -0
- package/dist/tools/spatial-query.js.map +1 -0
- package/dist/tools/splines-add-knot.d.ts +2 -0
- package/dist/tools/splines-add-knot.js +44 -0
- package/dist/tools/splines-add-knot.js.map +1 -0
- package/dist/tools/splines-container-create.d.ts +2 -0
- package/dist/tools/splines-container-create.js +39 -0
- package/dist/tools/splines-container-create.js.map +1 -0
- package/dist/tools/splines-evaluate.d.ts +2 -0
- package/dist/tools/splines-evaluate.js +31 -0
- package/dist/tools/splines-evaluate.js.map +1 -0
- package/dist/tools/splines-get-knots.d.ts +2 -0
- package/dist/tools/splines-get-knots.js +25 -0
- package/dist/tools/splines-get-knots.js.map +1 -0
- package/dist/tools/splines-modify.d.ts +2 -0
- package/dist/tools/splines-modify.js +35 -0
- package/dist/tools/splines-modify.js.map +1 -0
- package/dist/tools/splines-set-knot.d.ts +2 -0
- package/dist/tools/splines-set-knot.js +41 -0
- package/dist/tools/splines-set-knot.js.map +1 -0
- package/dist/tools/splines-set-tangent-mode.d.ts +2 -0
- package/dist/tools/splines-set-tangent-mode.js +43 -0
- package/dist/tools/splines-set-tangent-mode.js.map +1 -0
- package/dist/tools/type-schema.d.ts +2 -0
- package/dist/tools/type-schema.js +62 -0
- package/dist/tools/type-schema.js.map +1 -0
- package/dist/tools/validate-edit.d.ts +2 -0
- package/dist/tools/validate-edit.js +43 -0
- package/dist/tools/validate-edit.js.map +1 -0
- package/dist/unity-install-discovery.d.ts +79 -0
- package/dist/unity-install-discovery.js +206 -0
- package/dist/unity-install-discovery.js.map +1 -0
- package/dist/unity-log.d.ts +35 -0
- package/dist/unity-log.js +110 -0
- package/dist/unity-log.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,583 @@
|
|
|
1
|
+
import { deriveIsError } from "./gate-error.js";
|
|
2
|
+
import { existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { pollAndDismissLaunchErrors, readDismissConfig, } from "./dialog-dismiss.js";
|
|
6
|
+
import { readInstanceLock, classifyInstance, lockPath } from "./instance-discovery.js";
|
|
7
|
+
import { makeErrorResult } from "./results.js";
|
|
8
|
+
import { checkBridgeCompat, isVersionCheckSuppressed, } from "./compat.js";
|
|
9
|
+
const MAX_COMPILE_WAIT_MS = 120_000;
|
|
10
|
+
const COMPILE_POLL_INTERVAL_MS = 2_000;
|
|
11
|
+
const PING_TIMEOUT_MS = 5_000;
|
|
12
|
+
const DIRECT_RESPONSE_TOOLS = new Set([
|
|
13
|
+
"unity_open_mcp_validate_edit",
|
|
14
|
+
"unity_open_mcp_checkpoint_create",
|
|
15
|
+
"unity_open_mcp_delta",
|
|
16
|
+
"unity_open_mcp_find_references",
|
|
17
|
+
"unity_open_mcp_scan_paths",
|
|
18
|
+
// Compact drill-down reads return a structured model JSON directly; the MCP
|
|
19
|
+
// ToolRouter applies the compression module on top (compressible-router.ts).
|
|
20
|
+
"unity_open_mcp_read_asset",
|
|
21
|
+
"unity_open_mcp_search_assets",
|
|
22
|
+
// Test runner returns { status, runId } directly; LiveClient polls the
|
|
23
|
+
// results file and returns the final result.
|
|
24
|
+
"unity_senses_run_tests",
|
|
25
|
+
// Agent senses (non-mutating): return tool JSON directly.
|
|
26
|
+
"unity_senses_screenshot",
|
|
27
|
+
// M20 Plan 1 / T20.1.1 — capture_inline returns an inlineImage field (base64
|
|
28
|
+
// PNG). The postTool handler unwraps it into an MCP image content block so
|
|
29
|
+
// the agent receives a viewable image without reading the filesystem.
|
|
30
|
+
"unity_senses_capture_inline",
|
|
31
|
+
"unity_senses_screenshot_camera",
|
|
32
|
+
// M20 Plan 1 / T20.1.2 — EditorWindow capture (file path). Read-only.
|
|
33
|
+
"unity_senses_screenshot_window",
|
|
34
|
+
"unity_senses_read_console",
|
|
35
|
+
"unity_senses_profiler_capture",
|
|
36
|
+
"unity_senses_profiler_memory",
|
|
37
|
+
"unity_senses_profiler_rendering",
|
|
38
|
+
"unity_senses_spatial_query",
|
|
39
|
+
]);
|
|
40
|
+
function sleep(ms) {
|
|
41
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
42
|
+
}
|
|
43
|
+
const OFFLINE_HINT = "Ensure the Unity Editor is open with the Agent Bridge running. " +
|
|
44
|
+
"The bridge port is per-project (20000 + sha256(projectPath) % 10000), not " +
|
|
45
|
+
"fixed — if Unity is open the MCP server may be aimed at the wrong port. " +
|
|
46
|
+
"Check the instance lock at ~/.unity-open-mcp/instances/<sha256(projectPath)>.json " +
|
|
47
|
+
"for the live port/pid, or set UNITY_OPEN_MCP_BRIDGE_PORT. If Unity is not " +
|
|
48
|
+
"open, launch it (or set UNITY_PATH + UNITY_PROJECT_PATH for batch fallback).";
|
|
49
|
+
/**
|
|
50
|
+
* Build a per-instance offline hint that names THIS project's lock file path
|
|
51
|
+
* and (when the lock is readable) its port/pid/state, so an agent debugging a
|
|
52
|
+
* `bridge_offline` knows exactly where to look. Falls back to OFFLINE_HINT
|
|
53
|
+
* when the project path is unknown (older callers / tests).
|
|
54
|
+
*/
|
|
55
|
+
function buildOfflineHint(projectPath) {
|
|
56
|
+
if (!projectPath)
|
|
57
|
+
return OFFLINE_HINT;
|
|
58
|
+
const lock = lockPath(projectPath);
|
|
59
|
+
const base = `${OFFLINE_HINT} This project's lock file: ${lock}`;
|
|
60
|
+
try {
|
|
61
|
+
const inst = readInstanceLock(projectPath);
|
|
62
|
+
if (inst) {
|
|
63
|
+
return `${base}. Lock state: pid=${inst.pid}, port=${inst.port}, state=${inst.state}`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// best-effort — fall through to the base hint
|
|
68
|
+
}
|
|
69
|
+
return `${base} (lock not readable — Unity may not be running).`;
|
|
70
|
+
}
|
|
71
|
+
export class LiveClient {
|
|
72
|
+
baseUrl;
|
|
73
|
+
pingCache;
|
|
74
|
+
dismissEnabled;
|
|
75
|
+
dismissTimeoutMs;
|
|
76
|
+
dismissIntervalMs;
|
|
77
|
+
/** M14 — per-session bearer token auto-discovered from the instance lock.
|
|
78
|
+
* Undefined when no live lock was found (older bridge / env port override);
|
|
79
|
+
* in that case no Authorization header is sent and the bridge must be in
|
|
80
|
+
* authMode "none" for requests to succeed. */
|
|
81
|
+
authToken;
|
|
82
|
+
/** Absolute Unity project path, used to read the instance lock mid-session
|
|
83
|
+
* for dead-bridge detection. Optional so existing callers/tests that don't
|
|
84
|
+
* exercise the fail-fast path keep working; when absent, a /ping failure
|
|
85
|
+
* falls back to the original bridge_offline behavior. */
|
|
86
|
+
projectPath;
|
|
87
|
+
/** One-shot guard so the version-compat warning (server vs bridge) is emitted
|
|
88
|
+
* at most once per process — every /ping would otherwise re-warn. */
|
|
89
|
+
compatWarned;
|
|
90
|
+
constructor(port, pingCache, authToken, projectPath) {
|
|
91
|
+
this.baseUrl = `http://127.0.0.1:${port}`;
|
|
92
|
+
this.pingCache = pingCache;
|
|
93
|
+
this.authToken = authToken;
|
|
94
|
+
this.projectPath = projectPath;
|
|
95
|
+
// M13 T4.5 — launch-errors / Safe Mode dialog auto-dismissal. Resolved
|
|
96
|
+
// once at construction; the env vars do not change mid-process. The
|
|
97
|
+
// feature is enabled by default (Unity-MCP parity) and runs concurrently
|
|
98
|
+
// with every compile/bridge readiness wait so it ticks on the same stall
|
|
99
|
+
// points agents hit, not only at process spawn.
|
|
100
|
+
const dismissCfg = readDismissConfig();
|
|
101
|
+
this.dismissEnabled = dismissCfg.enabled;
|
|
102
|
+
this.dismissTimeoutMs = dismissCfg.timeoutMs;
|
|
103
|
+
this.dismissIntervalMs = dismissCfg.intervalMs;
|
|
104
|
+
this.compatWarned = false;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Emit the server/bridge version-compatibility warning at most once per
|
|
108
|
+
* process. Advisory only — the caller never blocks on this. Suppressed
|
|
109
|
+
* entirely by UNITY_OPEN_MCP_SKIP_VERSION_CHECK=1. See docs/versioning.md.
|
|
110
|
+
*/
|
|
111
|
+
maybeWarnCompat(bridgeVersion) {
|
|
112
|
+
if (this.compatWarned)
|
|
113
|
+
return;
|
|
114
|
+
if (bridgeVersion === undefined || bridgeVersion === null)
|
|
115
|
+
return;
|
|
116
|
+
if (isVersionCheckSuppressed()) {
|
|
117
|
+
this.compatWarned = true;
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const result = checkBridgeCompat(String(bridgeVersion));
|
|
121
|
+
this.compatWarned = true;
|
|
122
|
+
if (result.message) {
|
|
123
|
+
console.warn(result.message);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async isLiveAvailable() {
|
|
127
|
+
try {
|
|
128
|
+
const res = await this.fetchWithTimeout("/ping", { method: "GET" });
|
|
129
|
+
if (res.status === 503)
|
|
130
|
+
return true;
|
|
131
|
+
if (!res.ok)
|
|
132
|
+
return false;
|
|
133
|
+
const body = (await res.json());
|
|
134
|
+
this.pingCache.record(body);
|
|
135
|
+
this.maybeWarnCompat(body.bridgeVersion);
|
|
136
|
+
return body.connected;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async route(toolName, args) {
|
|
143
|
+
if (toolName === "unity_open_mcp_ping") {
|
|
144
|
+
return this.handlePing();
|
|
145
|
+
}
|
|
146
|
+
if (toolName === "unity_senses_run_tests") {
|
|
147
|
+
return this.handleRunTests(args);
|
|
148
|
+
}
|
|
149
|
+
return this.handleToolCall(toolName, args);
|
|
150
|
+
}
|
|
151
|
+
async handlePing() {
|
|
152
|
+
try {
|
|
153
|
+
const res = await this.fetchWithTimeout("/ping", { method: "GET" });
|
|
154
|
+
const body = await res.json();
|
|
155
|
+
this.pingCache.record(body);
|
|
156
|
+
this.maybeWarnCompat(body.bridgeVersion);
|
|
157
|
+
return {
|
|
158
|
+
content: [{ type: "text", text: JSON.stringify(body) }],
|
|
159
|
+
isError: false,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return makeErrorResult({
|
|
164
|
+
code: "bridge_offline",
|
|
165
|
+
message: `Bridge is not reachable at ${this.baseUrl}. ${buildOfflineHint(this.projectPath)}`,
|
|
166
|
+
detail: {
|
|
167
|
+
error: {
|
|
168
|
+
code: "bridge_offline",
|
|
169
|
+
message: `Cannot connect to bridge at ${this.baseUrl}`,
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async handleToolCall(toolName, args) {
|
|
176
|
+
const readyError = await this.ensureReady();
|
|
177
|
+
if (readyError)
|
|
178
|
+
return readyError;
|
|
179
|
+
return this.postTool(toolName, args, true);
|
|
180
|
+
}
|
|
181
|
+
async handleRunTests(args) {
|
|
182
|
+
const readyError = await this.ensureReady();
|
|
183
|
+
if (readyError)
|
|
184
|
+
return readyError;
|
|
185
|
+
const startResult = await this.postTool("unity_senses_run_tests", args, true);
|
|
186
|
+
if (startResult.isError)
|
|
187
|
+
return startResult;
|
|
188
|
+
const text = startResult.content[0]?.type === "text"
|
|
189
|
+
? startResult.content[0].text
|
|
190
|
+
: "";
|
|
191
|
+
let body;
|
|
192
|
+
try {
|
|
193
|
+
body = JSON.parse(text);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return startResult;
|
|
197
|
+
}
|
|
198
|
+
if (body.status !== "started" || !body.runId) {
|
|
199
|
+
return startResult;
|
|
200
|
+
}
|
|
201
|
+
return this.pollTestResults(body.runId, args);
|
|
202
|
+
}
|
|
203
|
+
async pollTestResults(runId, args) {
|
|
204
|
+
const timeoutMs = typeof args.timeout_ms === "number" ? args.timeout_ms : 60_000;
|
|
205
|
+
const deadline = Date.now() + timeoutMs;
|
|
206
|
+
// Check before sleeping: an EditMode run often finishes within a second or
|
|
207
|
+
// two, and the previous fixed 1s-before-first-check + 1s interval added up
|
|
208
|
+
// to seconds of dead time per call. Back off 250ms -> 1s so fast runs return
|
|
209
|
+
// promptly without hammering the filesystem on long ones.
|
|
210
|
+
const minIntervalMs = 250;
|
|
211
|
+
const maxIntervalMs = 1_000;
|
|
212
|
+
const resultsPath = join(homedir(), ".unity-open-mcp", `test-results-${runId}.json`);
|
|
213
|
+
let intervalMs = minIntervalMs;
|
|
214
|
+
while (Date.now() < deadline) {
|
|
215
|
+
try {
|
|
216
|
+
if (existsSync(resultsPath)) {
|
|
217
|
+
const content = readFileSync(resultsPath, "utf-8");
|
|
218
|
+
try {
|
|
219
|
+
unlinkSync(resultsPath);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// best-effort cleanup
|
|
223
|
+
}
|
|
224
|
+
let isError = false;
|
|
225
|
+
try {
|
|
226
|
+
const parsed = JSON.parse(content);
|
|
227
|
+
isError = parsed.status === "error";
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// unparseable → treat as error
|
|
231
|
+
isError = true;
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
content: [{ type: "text", text: content }],
|
|
235
|
+
isError,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// continue polling
|
|
241
|
+
}
|
|
242
|
+
await sleep(intervalMs);
|
|
243
|
+
intervalMs = Math.min(intervalMs * 2, maxIntervalMs);
|
|
244
|
+
}
|
|
245
|
+
return makeErrorResult({
|
|
246
|
+
code: "test_results_timeout",
|
|
247
|
+
message: `Test results for run ${runId} were not available within ` +
|
|
248
|
+
`${timeoutMs / 1000}s. The test run may still be in progress or ` +
|
|
249
|
+
"the bridge may have lost the callback.",
|
|
250
|
+
detail: {
|
|
251
|
+
error: {
|
|
252
|
+
code: "test_results_timeout",
|
|
253
|
+
message: `Test results poll timed out after ${timeoutMs / 1000}s`,
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
async postTool(toolName, args, retryOn503) {
|
|
259
|
+
try {
|
|
260
|
+
const timeoutMs = typeof args.timeout_ms === "number" ? args.timeout_ms : 60_000;
|
|
261
|
+
const res = await this.fetchWithTimeout(`/tools/${toolName}`, {
|
|
262
|
+
method: "POST",
|
|
263
|
+
headers: { "Content-Type": "application/json; charset=utf-8" },
|
|
264
|
+
body: JSON.stringify(args),
|
|
265
|
+
}, timeoutMs + 10_000);
|
|
266
|
+
if (res.status === 503 && retryOn503) {
|
|
267
|
+
const compileError = await this.waitForCompile();
|
|
268
|
+
if (compileError)
|
|
269
|
+
return compileError;
|
|
270
|
+
return this.postTool(toolName, args, false);
|
|
271
|
+
}
|
|
272
|
+
if (!res.ok) {
|
|
273
|
+
const body = (await res
|
|
274
|
+
.json()
|
|
275
|
+
.catch(() => null));
|
|
276
|
+
return makeErrorResult({
|
|
277
|
+
code: "bridge_http_error",
|
|
278
|
+
message: body?.error?.message ?? `Bridge returned HTTP ${res.status}`,
|
|
279
|
+
detail: body ?? {
|
|
280
|
+
error: {
|
|
281
|
+
code: "bridge_http_error",
|
|
282
|
+
message: `HTTP ${res.status}`,
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
if (DIRECT_RESPONSE_TOOLS.has(toolName)) {
|
|
288
|
+
const directBody = (await res.json().catch(() => null));
|
|
289
|
+
// M20 Plan 1 / T20.1.1 — capture_inline returns an `inlineImage` base64
|
|
290
|
+
// PNG field. Unwrap it into an MCP image content block alongside a text
|
|
291
|
+
// metadata block (matching the AnkleBreaker unity_graphics_*_capture
|
|
292
|
+
// contract: [{type: image}, {type: text}]). The image carries the same
|
|
293
|
+
// viewable payload a file-path screenshot would; the metadata keeps the
|
|
294
|
+
// view / resolution / byteLength fields without the base64 blob.
|
|
295
|
+
const inlineImage = directBody?.inlineImage;
|
|
296
|
+
if (directBody != null &&
|
|
297
|
+
typeof inlineImage === "string" &&
|
|
298
|
+
inlineImage.length > 0 &&
|
|
299
|
+
directBody.error == null) {
|
|
300
|
+
const body = directBody;
|
|
301
|
+
const mimeType = typeof body.mimeType === "string" ? body.mimeType : "image/png";
|
|
302
|
+
const metadata = { ...body };
|
|
303
|
+
delete metadata.inlineImage;
|
|
304
|
+
return {
|
|
305
|
+
content: [
|
|
306
|
+
{ type: "image", data: inlineImage, mimeType },
|
|
307
|
+
{ type: "text", text: JSON.stringify(metadata) },
|
|
308
|
+
],
|
|
309
|
+
isError: false,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
return {
|
|
313
|
+
content: [
|
|
314
|
+
{
|
|
315
|
+
type: "text",
|
|
316
|
+
text: JSON.stringify(directBody ?? {}),
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
isError: directBody?.error != null,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
const body = (await res.json());
|
|
323
|
+
return {
|
|
324
|
+
content: [{ type: "text", text: JSON.stringify(body) }],
|
|
325
|
+
isError: deriveIsError(body),
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return makeErrorResult({
|
|
330
|
+
code: "bridge_offline",
|
|
331
|
+
message: `Failed to reach bridge at ${this.baseUrl}. ${buildOfflineHint(this.projectPath)}`,
|
|
332
|
+
detail: {
|
|
333
|
+
error: {
|
|
334
|
+
code: "bridge_offline",
|
|
335
|
+
message: `Cannot connect to bridge at ${this.baseUrl}`,
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
async ensureReady() {
|
|
342
|
+
try {
|
|
343
|
+
const res = await this.fetchWithTimeout("/ping", { method: "GET" });
|
|
344
|
+
if (res.status === 503) {
|
|
345
|
+
return this.waitForCompile();
|
|
346
|
+
}
|
|
347
|
+
if (!res.ok) {
|
|
348
|
+
return makeErrorResult({
|
|
349
|
+
code: "bridge_error",
|
|
350
|
+
message: `Bridge /ping returned unexpected HTTP ${res.status}`,
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
const body = (await res.json());
|
|
354
|
+
this.pingCache.record(body);
|
|
355
|
+
if (!body.connected) {
|
|
356
|
+
return makeErrorResult({
|
|
357
|
+
code: "bridge_not_connected",
|
|
358
|
+
message: "Bridge listener is running but session is not initialized.",
|
|
359
|
+
detail: {
|
|
360
|
+
error: {
|
|
361
|
+
code: "bridge_not_connected",
|
|
362
|
+
message: "Bridge session not connected",
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
if (body.compiling) {
|
|
368
|
+
return this.waitForCompile();
|
|
369
|
+
}
|
|
370
|
+
return null;
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
// Bridge is unreachable (ECONNREFUSED / timeout). Before falling back to
|
|
374
|
+
// the generic offline error, check whether the instance lock indicates a
|
|
375
|
+
// DEAD bridge assembly — the Unity process is still alive but the bridge
|
|
376
|
+
// failed to reload after a compile error. That case is NOT recoverable
|
|
377
|
+
// by waiting; surface it immediately so the agent can fetch the compiler
|
|
378
|
+
// errors and fix them instead of hanging on /ping.
|
|
379
|
+
const deadBridge = this.deadBridgeResult();
|
|
380
|
+
if (deadBridge)
|
|
381
|
+
return deadBridge;
|
|
382
|
+
return makeErrorResult({
|
|
383
|
+
code: "bridge_offline",
|
|
384
|
+
message: `Bridge is not reachable at ${this.baseUrl}. ${buildOfflineHint(this.projectPath)}`,
|
|
385
|
+
detail: {
|
|
386
|
+
error: {
|
|
387
|
+
code: "bridge_offline",
|
|
388
|
+
message: `Cannot connect to bridge at ${this.baseUrl}`,
|
|
389
|
+
},
|
|
390
|
+
},
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// Detect the dead-bridge-assembly signature from the on-disk instance lock:
|
|
395
|
+
// Unity process alive (PID running) but heartbeat stale (the bridge's
|
|
396
|
+
// [InitializeOnLoad] never re-ran after a compile failure, so the heartbeat
|
|
397
|
+
// writer is gone). Returns a structured error pointing the agent at
|
|
398
|
+
// read_compile_errors, or null when the signature is not present (no lock,
|
|
399
|
+
// dead PID, or a fresh/reloading heartbeat — i.e. the wait is still worth
|
|
400
|
+
// keeping). Requires projectPath to have been threaded in; without it we
|
|
401
|
+
// can't read the lock, so we return null and preserve the original behavior.
|
|
402
|
+
deadBridgeResult() {
|
|
403
|
+
if (!this.projectPath)
|
|
404
|
+
return null;
|
|
405
|
+
let classification;
|
|
406
|
+
try {
|
|
407
|
+
classification = classifyInstance(readInstanceLock(this.projectPath));
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
if (classification !== "dead_bridge")
|
|
413
|
+
return null;
|
|
414
|
+
return {
|
|
415
|
+
content: [
|
|
416
|
+
{
|
|
417
|
+
type: "text",
|
|
418
|
+
text: JSON.stringify({
|
|
419
|
+
error: {
|
|
420
|
+
code: "bridge_compile_failed",
|
|
421
|
+
message: "The bridge assembly failed to recompile and Unity is likely " +
|
|
422
|
+
"in a bad state (safe mode / compile errors). The HTTP listener " +
|
|
423
|
+
"will not return until the C# error is fixed. " +
|
|
424
|
+
"Call unity_open_mcp_read_compile_errors to retrieve the compiler " +
|
|
425
|
+
"errors from Unity's Editor.log, fix the cited file/line, then " +
|
|
426
|
+
"trigger a recompile (e.g. a no-op edit + focus Unity, or " +
|
|
427
|
+
"unity_open_mcp_compile_check once the source compiles).",
|
|
428
|
+
},
|
|
429
|
+
}),
|
|
430
|
+
},
|
|
431
|
+
],
|
|
432
|
+
isError: true,
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
async waitForCompile() {
|
|
436
|
+
const deadline = Date.now() + MAX_COMPILE_WAIT_MS;
|
|
437
|
+
// M13 T4.5 — run the launch-errors / Safe Mode dialog auto-dismiss loop
|
|
438
|
+
// CONCURRENTLY with the compile poll. The dismiss loop ticks on the same
|
|
439
|
+
// stall point this method represents (UCP bridge-wait pattern): if a
|
|
440
|
+
// native modal is blocking the Editor, the compile poll below will spin
|
|
441
|
+
// until timeout with no recovery. The dismiss loop clicks Ignore on that
|
|
442
|
+
// modal; the moment compile resolves (compiling → idle), we abort the
|
|
443
|
+
// loop — there is no launch dialog left to dismiss once Unity is idle.
|
|
444
|
+
//
|
|
445
|
+
// When auto-dismiss is opted out (UNITY_OPEN_MCP_NO_AUTO_DISMISS_LAUNCH_ERRORS=1),
|
|
446
|
+
// `dismissEnabled` is false and this branch is skipped entirely,
|
|
447
|
+
// preserving the pre-feature baseline.
|
|
448
|
+
let dismissAbort = null;
|
|
449
|
+
let dismissDone = null;
|
|
450
|
+
if (this.dismissEnabled) {
|
|
451
|
+
dismissAbort = new AbortController();
|
|
452
|
+
const dismissOpts = {
|
|
453
|
+
timeoutMs: this.dismissTimeoutMs,
|
|
454
|
+
intervalMs: this.dismissIntervalMs,
|
|
455
|
+
abortSignal: dismissAbort.signal,
|
|
456
|
+
};
|
|
457
|
+
dismissDone = this.runDismissLoop(dismissOpts);
|
|
458
|
+
}
|
|
459
|
+
try {
|
|
460
|
+
while (Date.now() < deadline) {
|
|
461
|
+
await sleep(COMPILE_POLL_INTERVAL_MS);
|
|
462
|
+
try {
|
|
463
|
+
const res = await this.fetchWithTimeout("/ping", { method: "GET" });
|
|
464
|
+
if (res.status === 503)
|
|
465
|
+
continue;
|
|
466
|
+
if (!res.ok)
|
|
467
|
+
continue;
|
|
468
|
+
const body = (await res.json());
|
|
469
|
+
if (!body.compiling && body.connected)
|
|
470
|
+
return null;
|
|
471
|
+
}
|
|
472
|
+
catch {
|
|
473
|
+
// Network failure during the poll — normal during a domain reload
|
|
474
|
+
// (the listener is torn down and rebuilt). But if the instance lock
|
|
475
|
+
// shows a dead bridge assembly (stale heartbeat + live PID), the
|
|
476
|
+
// reload will never complete: abort the wait immediately with the
|
|
477
|
+
// structured bridge_compile_failed error instead of spinning to the
|
|
478
|
+
// 120s deadline.
|
|
479
|
+
const deadBridge = this.deadBridgeResult();
|
|
480
|
+
if (deadBridge)
|
|
481
|
+
return deadBridge;
|
|
482
|
+
continue;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
// Final check before declaring a timeout: a dead-bridge signature here
|
|
486
|
+
// is a more useful error than the opaque compile_timeout.
|
|
487
|
+
const deadBridge = this.deadBridgeResult();
|
|
488
|
+
if (deadBridge)
|
|
489
|
+
return deadBridge;
|
|
490
|
+
return makeErrorResult({
|
|
491
|
+
code: "compile_timeout",
|
|
492
|
+
message: `Unity is still compiling after ${MAX_COMPILE_WAIT_MS / 1000}s. ` +
|
|
493
|
+
"The compile-wait timeout was exceeded.",
|
|
494
|
+
detail: {
|
|
495
|
+
error: {
|
|
496
|
+
code: "compile_timeout",
|
|
497
|
+
message: `Compile-wait exceeded ${MAX_COMPILE_WAIT_MS / 1000}s`,
|
|
498
|
+
},
|
|
499
|
+
},
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
finally {
|
|
503
|
+
// Compile wait resolved (idle) OR timed out — either way there is
|
|
504
|
+
// nothing more to dismiss. Aborting unblocks the dismiss loop's sleep.
|
|
505
|
+
dismissAbort?.abort();
|
|
506
|
+
await dismissDone;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Run the launch-errors dismiss polling loop. Indirected through a method
|
|
511
|
+
* so unit tests can stub the OS-clicking loop without invoking
|
|
512
|
+
* PowerShell / osascript / xdotool. Production uses the real
|
|
513
|
+
* `pollAndDismissLaunchErrors`.
|
|
514
|
+
*/
|
|
515
|
+
runDismissLoop(opts) {
|
|
516
|
+
return pollAndDismissLaunchErrors(opts);
|
|
517
|
+
}
|
|
518
|
+
async readResource(route) {
|
|
519
|
+
try {
|
|
520
|
+
const res = await this.fetchWithTimeout(`/resources/${route}`, { method: "GET" }, 10_000);
|
|
521
|
+
if (!res.ok) {
|
|
522
|
+
return {
|
|
523
|
+
status: "no_data",
|
|
524
|
+
asOf: null,
|
|
525
|
+
summary: null,
|
|
526
|
+
nextStep: "Run unity_open_mcp_scan_paths or a gated mutation to populate the cache.",
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
const text = await res.text();
|
|
530
|
+
return JSON.parse(text);
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
return {
|
|
534
|
+
status: "no_data",
|
|
535
|
+
asOf: null,
|
|
536
|
+
summary: null,
|
|
537
|
+
nextStep: "Run unity_open_mcp_scan_paths or a gated mutation to populate the cache.",
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* M18 Plan 2 / T18.2.3 — fetch the compiled-state tool inventory from the
|
|
543
|
+
* bridge (`GET /tools`). Returns the set of tool names the bridge compiled
|
|
544
|
+
* in (KnownTools ∪ BridgeToolRegistry), so the MCP server can report per-
|
|
545
|
+
* group availability in `unity_open_mcp_capabilities` and
|
|
546
|
+
* `unity_open_mcp_manage_tools(list_groups)`.
|
|
547
|
+
*
|
|
548
|
+
* Returns null when the bridge is unreachable or the response is malformed
|
|
549
|
+
* — callers fall back to `available: null` (unknown) so the agent is
|
|
550
|
+
* directed at manage_tools when the bridge comes back up.
|
|
551
|
+
*/
|
|
552
|
+
async listBridgeTools() {
|
|
553
|
+
try {
|
|
554
|
+
const res = await this.fetchWithTimeout("/tools", { method: "GET" }, 5_000);
|
|
555
|
+
if (!res.ok)
|
|
556
|
+
return null;
|
|
557
|
+
const body = (await res.json());
|
|
558
|
+
const tools = new Set(Array.isArray(body.tools) ? body.tools : []);
|
|
559
|
+
const groups = Array.isArray(body.groups) ? body.groups : [];
|
|
560
|
+
return { tools, groups };
|
|
561
|
+
}
|
|
562
|
+
catch {
|
|
563
|
+
return null;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
fetchWithTimeout(path, init, timeoutMs = PING_TIMEOUT_MS) {
|
|
567
|
+
const controller = new AbortController();
|
|
568
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
569
|
+
// M14 — attach the bearer token to every request when one was discovered
|
|
570
|
+
// from the instance lock. Merge with any caller-supplied headers so we
|
|
571
|
+
// never clobber a per-request value.
|
|
572
|
+
const headers = new Headers(init.headers);
|
|
573
|
+
if (this.authToken && !headers.has("Authorization")) {
|
|
574
|
+
headers.set("Authorization", `Bearer ${this.authToken}`);
|
|
575
|
+
}
|
|
576
|
+
return fetch(`${this.baseUrl}${path}`, {
|
|
577
|
+
...init,
|
|
578
|
+
headers,
|
|
579
|
+
signal: controller.signal,
|
|
580
|
+
}).finally(() => clearTimeout(timer));
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
//# sourceMappingURL=live-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-client.js","sourceRoot":"","sources":["../src/live-client.ts"],"names":[],"mappings":"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"}
|