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,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":"AAAA,0EAA0E;AAC1E,oBAAoB;AACpB,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,sEAAsE;AAItE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AA0BlC,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAe3C,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAgB,EAChB,WAA+B,EAC/B,UAA2D,EAC3D,IAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC;IACzC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;IAExC,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;YAClB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,SAAS;gBACjB,QAAQ;gBACR,SAAS,EAAE,CAAC,GAAG,KAAK;gBACpB,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC;aACtE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,MAAM,CAAC,IAAI;YAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;YAAE,YAAY,GAAG,IAAI,CAAC;QACvD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC7D,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ;gBACjC,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK;gBACxB,MAAM,EAAE,oCAAoC;aAC7C,CAAC;QACJ,CAAC;QAED,qEAAqE;QACrE,0EAA0E;QAC1E,gEAAgE;QAChE,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,cAAc,CAAC;YACnB,IAAI,CAAC;gBACH,cAAc,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;gBACrC,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,aAAa;oBACrB,QAAQ;oBACR,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK;oBACxB,MAAM,EACJ,gEAAgE;wBAChE,6DAA6D;wBAC7D,6DAA6D;wBAC7D,wDAAwD;iBAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAQD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAgB,EAChB,iBAAyB,qBAAqB;IAE9C,6EAA6E;IAC7E,2EAA2E;IAC3E,2DAA2D;IAC3D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC3C,CAAC;QACD,sEAAsE;QACtE,6CAA6C;QAC7C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,wEAAwE;YACxE,+CAA+C;YAC/C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC7C,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,MAE/B;IACC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO,MAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAC1B,SAAiB,EACjB,YAAqB,EACrB,UAAmB;IAEnB,IAAI,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,oCAAoC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;IAC9E,CAAC;IACD,IAAI,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,wCAAwC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;IAClF,CAAC;IACD,OAAO,sCAAsC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;AAChF,CAAC"}
|
package/dist/compat.d.ts
ADDED
|
@@ -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>;
|