@aqian0/dsh-unity 0.0.0-stage → 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/CHANGELOG.md +53 -0
- package/LICENSE-UNITY-COMPANION.md +122 -0
- package/LICENSE.md +31 -0
- package/NOTICE.md +90 -0
- package/README.md +273 -2
- package/cordis.patch.yml +22 -0
- package/docs/design.md +297 -0
- package/icon.svg +16 -0
- package/lib/frontmatter.js +392 -0
- package/lib/gating.js +105 -0
- package/lib/harness.js +16 -0
- package/lib/index.js +171 -0
- package/lib/project.js +210 -0
- package/lib/registry.js +268 -0
- package/lib/requirements.js +214 -0
- package/lib/skills.js +191 -0
- package/lib/types/frontmatter.d.ts +84 -0
- package/lib/types/gating.d.ts +80 -0
- package/lib/types/harness.d.ts +152 -0
- package/lib/types/index.d.ts +75 -0
- package/lib/types/project.d.ts +93 -0
- package/lib/types/registry.d.ts +96 -0
- package/lib/types/requirements.d.ts +67 -0
- package/lib/types/skills.d.ts +54 -0
- package/lib/types/watch.d.ts +34 -0
- package/lib/watch.js +84 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +70 -4
- package/skills/2d-pixel-perfect/SKILL.md +208 -0
- package/skills/2d-pixel-perfect/references/api-reference.md +81 -0
- package/skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
- package/skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
- package/skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
- package/skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
- package/skills/asset-transformer-toolkit/SECURITY.md +15 -0
- package/skills/asset-transformer-toolkit/SKILL.md +39 -0
- package/skills/asset-transformer-toolkit/references/create-importer.md +121 -0
- package/skills/asset-transformer-toolkit/references/lods.md +61 -0
- package/skills/asset-transformer-toolkit/references/rule-api.md +154 -0
- package/skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
- package/skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
- package/skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
- package/skills/audio-setup-mixers/SECURITY.md +16 -0
- package/skills/audio-setup-mixers/SKILL.md +127 -0
- package/skills/audio-setup-mixers/references/api.md +162 -0
- package/skills/build-gtk/SECURITY.md +16 -0
- package/skills/build-gtk/SKILL.md +200 -0
- package/skills/build-gtk/references/api-reference.md +33 -0
- package/skills/build-gtk/references/graph-api-gaps.md +96 -0
- package/skills/build-gtk/references/runtime-and-visualization.md +191 -0
- package/skills/build-gtk/references/state-machine-api.md +270 -0
- package/skills/build-gtk/references/where-the-docs-stop.md +49 -0
- package/skills/build-live-game/SKILL.md +159 -0
- package/skills/build-live-game/references/achievements.md +757 -0
- package/skills/build-live-game/references/apis.md +271 -0
- package/skills/build-live-game/references/authentication.md +431 -0
- package/skills/build-live-game/references/battlepass.md +904 -0
- package/skills/build-live-game/references/blueprints-and-samples.md +75 -0
- package/skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
- package/skills/build-live-game/references/cloud-code-modules.md +1276 -0
- package/skills/build-live-game/references/cloud-code.md +58 -0
- package/skills/build-live-game/references/cloud-save.md +464 -0
- package/skills/build-live-game/references/deployment.md +231 -0
- package/skills/build-live-game/references/orientation.md +30 -0
- package/skills/build-live-game/references/player-account.md +821 -0
- package/skills/build-live-game/references/remote-config.md +96 -0
- package/skills/build-live-game/references/services-overview.md +76 -0
- package/skills/build-live-game/references/tooling.md +375 -0
- package/skills/build-live-game/references/ugs-cli.md +86 -0
- package/skills/craft-game-floors/SECURITY.md +23 -0
- package/skills/craft-game-floors/SKILL.md +134 -0
- package/skills/craft-game-floors/references/art-direction.md +85 -0
- package/skills/craft-game-floors/references/camera-rigs.md +51 -0
- package/skills/craft-game-floors/references/character-motion.md +35 -0
- package/skills/craft-game-floors/references/game-audio.md +47 -0
- package/skills/craft-game-floors/references/game-feel.md +68 -0
- package/skills/craft-game-floors/references/game-shell.md +45 -0
- package/skills/craft-game-floors/references/live-floor.md +35 -0
- package/skills/craft-game-floors/references/placeholder-assets.md +35 -0
- package/skills/craft-game-floors/references/scene-lighting.md +52 -0
- package/skills/craft-game-floors/references/toon-shading.md +34 -0
- package/skills/craft-game-floors/references/vfx.md +40 -0
- package/skills/craft-game-floors/references/visual-scorecard.md +43 -0
- package/skills/create-2d-physics/SECURITY.md +16 -0
- package/skills/create-2d-physics/SKILL.md +128 -0
- package/skills/create-2d-physics/references/2d-physics-core.md +155 -0
- package/skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
- package/skills/create-tile-palette-or-rule-tiles/SKILL.md +95 -0
- package/skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
- package/skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
- package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +37 -0
- package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +219 -0
- package/skills/create-tile-palette-or-rule-tiles/references/ruletile.md +95 -0
- package/skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
- package/skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
- package/skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
- package/skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
- package/skills/fix-3d-physics-collisions/SECURITY.md +17 -0
- package/skills/fix-3d-physics-collisions/SKILL.md +139 -0
- package/skills/fix-3d-physics-collisions/references/collision-checklist.md +80 -0
- package/skills/fix-3d-physics-collisions/references/collision-debugger.md +18 -0
- package/skills/fix-3d-physics-collisions/references/console-errors-table.md +9 -0
- package/skills/fix-3d-physics-collisions/references/kinematic-trigger-facts.md +18 -0
- package/skills/fix-3d-physics-collisions/references/other-symptoms.md +29 -0
- package/skills/fix-3d-physics-collisions/references/raycast-checklist.md +8 -0
- package/skills/fix-3d-physics-collisions/references/topic-map.md +42 -0
- package/skills/fix-3d-physics-collisions/references/trigger-checklist.md +9 -0
- package/skills/fix-3d-physics-collisions/scripts/CollisionDebugger.cs +561 -0
- package/skills/generate-editor-search-query/SECURITY.md +17 -0
- package/skills/generate-editor-search-query/SKILL.md +117 -0
- package/skills/generate-editor-search-query/references/open-search-window.md +70 -0
- package/skills/generate-editor-search-query/references/query-patterns.md +124 -0
- package/skills/implement-in-app-purchases/SKILL.md +82 -0
- package/skills/implement-in-app-purchases/references/api-details.md +41 -0
- package/skills/implement-in-app-purchases/references/api-notes.md +105 -0
- package/skills/implement-in-app-purchases/references/codeless-catalog.md +197 -0
- package/skills/implement-in-app-purchases/references/convert-adapty.md +270 -0
- package/skills/implement-in-app-purchases/references/convert-essentialkit.md +239 -0
- package/skills/implement-in-app-purchases/references/convert-revenuecat.md +277 -0
- package/skills/implement-in-app-purchases/references/convert-unipay.md +145 -0
- package/skills/implement-in-app-purchases/references/migration-v4-to-v5.md +46 -0
- package/skills/implement-in-app-purchases/references/path-add-iap-to-new-project.md +197 -0
- package/skills/implement-in-app-purchases/references/path-convert-native-google-billing.md +302 -0
- package/skills/implement-in-app-purchases/references/path-convert-native-storekit.md +357 -0
- package/skills/implement-in-app-purchases/references/path-implement-iap-d2c.md +253 -0
- package/skills/implement-in-app-purchases/references/platform-notes.md +55 -0
- package/skills/implement-in-app-purchases/references/pre-check.md +207 -0
- package/skills/implement-in-app-purchases/references/topic-map.md +46 -0
- package/skills/initialize-ai-navigation/SKILL.md +109 -0
- package/skills/initialize-ai-navigation/references/navigation-system.md +793 -0
- package/skills/initialize-ai-navigation/references/topic-map.md +66 -0
- package/skills/levelplay-unity-integration/SKILL.md +122 -0
- package/skills/levelplay-unity-integration/references/adding-more-ad-formats.md +15 -0
- package/skills/levelplay-unity-integration/references/banner-api.md +927 -0
- package/skills/levelplay-unity-integration/references/best-practices.md +604 -0
- package/skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
- package/skills/levelplay-unity-integration/references/examples.md +10 -0
- package/skills/levelplay-unity-integration/references/ilrd-api.md +337 -0
- package/skills/levelplay-unity-integration/references/initialization-api.md +851 -0
- package/skills/levelplay-unity-integration/references/interstitial-api.md +907 -0
- package/skills/levelplay-unity-integration/references/ios-setup.md +463 -0
- package/skills/levelplay-unity-integration/references/migration-sdk-9.md +666 -0
- package/skills/levelplay-unity-integration/references/privacy-settings.md +593 -0
- package/skills/levelplay-unity-integration/references/production-release-checklist.md +22 -0
- package/skills/levelplay-unity-integration/references/rewarded-api.md +918 -0
- package/skills/levelplay-unity-integration/references/step-0-new-or-migration.md +8 -0
- package/skills/levelplay-unity-integration/references/step-1-verify-environment.md +4 -0
- package/skills/levelplay-unity-integration/references/step-10-testing.md +15 -0
- package/skills/levelplay-unity-integration/references/step-2-business-goals.md +12 -0
- package/skills/levelplay-unity-integration/references/step-3-install-sdk.md +55 -0
- package/skills/levelplay-unity-integration/references/step-4-native-dependencies.md +22 -0
- package/skills/levelplay-unity-integration/references/step-5-app-key-and-ad-units.md +18 -0
- package/skills/levelplay-unity-integration/references/step-6-5-privacy-and-regulation.md +51 -0
- package/skills/levelplay-unity-integration/references/step-6-admob-keys.md +16 -0
- package/skills/levelplay-unity-integration/references/step-7-initialize.md +50 -0
- package/skills/levelplay-unity-integration/references/step-8-ad-unit-strategy.md +16 -0
- package/skills/levelplay-unity-integration/references/step-9-implement-ad-units.md +66 -0
- package/skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
- package/skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
- package/skills/localize-unity-project/SKILL.md +159 -0
- package/skills/localize-unity-project/references/api-notes.md +15 -0
- package/skills/localize-unity-project/references/cjk-fonts.md +83 -0
- package/skills/localize-unity-project/references/docs-map.md +42 -0
- package/skills/localize-unity-project/references/documentation-lookup.md +33 -0
- package/skills/localize-unity-project/references/locale-switching.md +17 -0
- package/skills/localize-unity-project/references/table-completeness-check.md +47 -0
- package/skills/localize-unity-project/references/translating-existing-project.md +47 -0
- package/skills/localize-unity-project/references/translation-strategy.md +41 -0
- package/skills/localize-unity-project/references/troubleshooting.md +12 -0
- package/skills/localize-unity-project/scripts/L10nBatchProcessor.cs +191 -0
- package/skills/localize-unity-project/scripts/LocalizedFontAsset.cs +18 -0
- package/skills/manage-sprite-atlas/SKILL.md +202 -0
- package/skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
- package/skills/manage-sprite-atlas/references/advanced-manual-authoring.md +19 -0
- package/skills/manage-sprite-atlas/references/api.md +382 -0
- package/skills/manage-sprite-atlas/references/best-practices.md +183 -0
- package/skills/manage-sprite-atlas/references/common-errors.md +123 -0
- package/skills/manage-sprite-atlas/references/complete-workflow.md +61 -0
- package/skills/manage-sprite-atlas/references/custom-packing.md +147 -0
- package/skills/manage-sprite-atlas/references/delivery-mechanism.md +30 -0
- package/skills/manage-sprite-atlas/references/key-requirements.md +21 -0
- package/skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
- package/skills/manage-sprite-atlas/references/namespaces.md +15 -0
- package/skills/manage-sprite-atlas/references/v2-architecture.md +21 -0
- package/skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
- package/skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
- package/skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
- package/skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
- package/skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
- package/skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
- package/skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
- package/skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
- package/skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
- package/skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
- package/skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
- package/skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
- package/skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
- package/skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
- package/skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
- package/skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
- package/skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
- package/skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
- package/skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
- package/skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
- package/skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
- package/skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
- package/skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
- package/skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
- package/skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
- package/skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
- package/skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
- package/skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
- package/skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
- package/skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
- package/skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
- package/skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
- package/skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
- package/skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
- package/skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
- package/skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
- package/skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
- package/skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
- package/skills/migrate-birp-to-urp/SECURITY.md +16 -0
- package/skills/migrate-birp-to-urp/SKILL.md +167 -0
- package/skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
- package/skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
- package/skills/migrate-birp-to-urp/references/conversion-and-rendering-triage.md +113 -0
- package/skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
- package/skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
- package/skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
- package/skills/migrate-birp-to-urp/references/parity-validation-and-troubleshooting.md +114 -0
- package/skills/migrate-birp-to-urp/references/preflight-and-urp-setup.md +195 -0
- package/skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
- package/skills/new-unity-project/SECURITY.md +26 -0
- package/skills/new-unity-project/SKILL.md +171 -0
- package/skills/new-unity-project/references/checklist.md +18 -0
- package/skills/new-unity-project/references/common-mistakes.md +15 -0
- package/skills/new-unity-project/references/skill-setup.md +66 -0
- package/skills/new-unity-project/references/step-1-concept.md +13 -0
- package/skills/new-unity-project/references/step-2-platforms-and-create.md +31 -0
- package/skills/new-unity-project/references/step-3-join-and-reconcile.md +16 -0
- package/skills/new-unity-project/references/step-4-source-control.md +9 -0
- package/skills/new-unity-project/references/step-5-packages.md +18 -0
- package/skills/new-unity-project/references/step-6-identity-and-floors.md +20 -0
- package/skills/new-unity-project/references/step-7-visual-baseline.md +75 -0
- package/skills/new-unity-project/references/step-8-first-commit.md +21 -0
- package/skills/new-unity-project/references/step-9-handoff.md +23 -0
- package/skills/optimize-audio/SECURITY.md +16 -0
- package/skills/optimize-audio/SKILL.md +120 -0
- package/skills/optimize-audio/references/diagnostics.md +42 -0
- package/skills/optimize-audio/references/troubleshooting.md +41 -0
- package/skills/optimize-audio/resources/audio-import-api.md +149 -0
- package/skills/optimize-audio/resources/platform-settings.md +48 -0
- package/skills/optimize-text-mesh-pro/SKILL.md +181 -0
- package/skills/optimize-text-mesh-pro/references/dynamic-atlas-and-profiling.md +28 -0
- package/skills/optimize-text-mesh-pro/references/topic-map.md +36 -0
- package/skills/optimize-web/SECURITY.md +16 -0
- package/skills/optimize-web/SKILL.md +157 -0
- package/skills/optimize-web/references/editor-csharp.md +120 -0
- package/skills/optimize-web/references/topic-map.md +49 -0
- package/skills/optimize-web/references/troubleshooting.md +45 -0
- package/skills/optimize-web/references/understand-request.md +19 -0
- package/skills/optimize-web/references/web-assets-quality.md +59 -0
- package/skills/optimize-web/references/web-player-settings.md +39 -0
- package/skills/optimize-web/references/web-profiling-memory.md +71 -0
- package/skills/optimize-web/scripts/WebOptimizer.cs +46 -0
- package/skills/optimize-web/scripts/toktx-examples.sh +11 -0
- package/skills/setup-multiplayer-services/SKILL.md +36 -0
- package/skills/setup-multiplayer-services/references/dgs-entrypoint.md +79 -0
- package/skills/setup-multiplayer-services/references/entrypoints.md +213 -0
- package/skills/setup-multiplayer-services/references/examples.md +33 -0
- package/skills/setup-multiplayer-services/references/implementation-fit.md +30 -0
- package/skills/setup-multiplayer-services/references/underlying-services.md +11 -0
- package/skills/setup-multiplayer-services/references/workflows-prerequisites.md +17 -0
- package/skills/setup-vivox-voice-chat/SECURITY.md +16 -0
- package/skills/setup-vivox-voice-chat/SKILL.md +166 -0
- package/skills/setup-vivox-voice-chat/references/api-reference-lookup.md +28 -0
- package/skills/setup-vivox-voice-chat/references/docs-topic-map.md +13 -0
- package/skills/setup-vivox-voice-chat/references/events-and-participants.md +79 -0
- package/skills/setup-vivox-voice-chat/references/init-and-login.md +92 -0
- package/skills/setup-vivox-voice-chat/references/text-chat.md +93 -0
- package/skills/setup-vivox-voice-chat/references/troubleshooting.md +47 -0
- package/skills/setup-vivox-voice-chat/references/voice-channels.md +92 -0
- package/skills/shader-graph-create-custom-node/SKILL.md +25 -0
- package/skills/shader-graph-create-custom-node/resources/all_hints.hlsl +182 -0
- package/skills/sprite-editor/SECURITY.md +16 -0
- package/skills/sprite-editor/SKILL.md +66 -0
- package/skills/sprite-editor/references/api_reference.md +151 -0
- package/skills/sprite-editor/references/background.md +112 -0
- package/skills/sprite-editor/references/templates.md +72 -0
- package/skills/sprite-editor/scripts/AutomaticSliceTexture.cs +40 -0
- package/skills/sprite-editor/scripts/GenerateNewSpriteRects.cs +200 -0
- package/skills/sprite-editor/scripts/GetTextureSourceImageSize.cs +32 -0
- package/skills/sprite-editor/scripts/GetTextureToSlice.cs +55 -0
- package/skills/sprite-editor/scripts/GridSliceTexture.cs +40 -0
- package/skills/sprite-editor/scripts/IsometricSliceTexture.cs +141 -0
- package/skills/sprite-editor/scripts/README.md +134 -0
- package/skills/sprite-editor/scripts/SetPivotExample.cs +58 -0
- package/skills/sprite-editor/scripts/SpriteToPng.cs +88 -0
- package/skills/sprite-segment-3x3grid/SKILL.md +177 -0
- package/skills/sprite-segment-3x3grid/references/topic-map.md +37 -0
- package/skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
- package/skills/ui/SKILL.md +142 -0
- package/skills/ui-imgui/SKILL.md +180 -0
- package/skills/ui-imgui/references/gui-elements.md +156 -0
- package/skills/ui-imgui/references/templates.md +141 -0
- package/skills/ui-ugui/SKILL.md +217 -0
- package/skills/ui-ugui/references/layout-and-anchors.md +61 -0
- package/skills/ui-ugui/references/scrollview-setup.md +29 -0
- package/skills/ui-uitk/SKILL.md +229 -0
- package/skills/ui-uitk/references/common-issues.md +74 -0
- package/skills/ui-uitk/references/custom-elements.md +241 -0
- package/skills/ui-uitk/references/painter2d.md +282 -0
- package/skills/ui-uitk/references/pointermanipulator-guide.md +94 -0
- package/skills/ui-uitk/references/svg-icons.md +136 -0
- package/skills/ui-uitk/references/ui-runtime-binding.md +234 -0
- package/skills/ui-uitk/references/uss-guide.md +138 -0
- package/skills/unity-cli/CHANGELOG.md +524 -0
- package/skills/unity-cli/SECURITY.md +68 -0
- package/skills/unity-cli/SKILL.md +160 -0
- package/skills/unity-cli/references/auth-license-cloud.md +318 -0
- package/skills/unity-cli/references/bootstrap-project.md +177 -0
- package/skills/unity-cli/references/build-run-test.md +555 -0
- package/skills/unity-cli/references/catalog-plugins.md +86 -0
- package/skills/unity-cli/references/ci-recipes.md +76 -0
- package/skills/unity-cli/references/cloud-automation.md +819 -0
- package/skills/unity-cli/references/cloud-workflows.md +19 -0
- package/skills/unity-cli/references/collaboration.md +533 -0
- package/skills/unity-cli/references/config-hub.md +239 -0
- package/skills/unity-cli/references/diagnostics-maintenance.md +718 -0
- package/skills/unity-cli/references/docs-workflow.md +179 -0
- package/skills/unity-cli/references/editor-targeting.md +29 -0
- package/skills/unity-cli/references/editors-install.md +490 -0
- package/skills/unity-cli/references/environment-variables.md +42 -0
- package/skills/unity-cli/references/exit-codes.md +47 -0
- package/skills/unity-cli/references/global-flags.md +32 -0
- package/skills/unity-cli/references/integration-advanced.md +1130 -0
- package/skills/unity-cli/references/notes.md +20 -0
- package/skills/unity-cli/references/notifications.md +39 -0
- package/skills/unity-cli/references/playmode-verification-loop.md +279 -0
- package/skills/unity-cli/references/projects-templates.md +997 -0
- package/skills/unity-cli/references/scene-editing-preflight.md +25 -0
- package/skills/unity-cli/references/setup-and-help.md +54 -0
- package/skills/unity-cli/references/version-control.md +612 -0
- package/skills/unity-package-management/SKILL.md +169 -0
- package/skills/unity-package-management/references/discovering-packages.md +66 -0
- package/skills/unity-package-management/references/headless-run.md +31 -0
- package/skills/unity-package-management/references/installer-script.md +92 -0
- package/skills/unity-package-management/references/select-packages.md +126 -0
- package/skills/unity-pipeline/SECURITY.md +17 -0
- package/skills/unity-pipeline/SKILL.md +205 -0
- package/skills/unity-pipeline/references/csharp-eval.md +23 -0
- package/skills/unity-pipeline/references/multiplayer-play-mode.md +103 -0
- package/skills/urp-postprocessing/SECURITY.md +16 -0
- package/skills/urp-postprocessing/SKILL.md +188 -0
- package/skills/urp-postprocessing/references/code-templates.md +150 -0
- package/skills/urp-postprocessing/references/effect-reference.md +86 -0
- package/skills/validate-urp-render-graph-renderer-feature/SKILL.md +92 -0
- package/skills/validate-urp-render-graph-renderer-feature/references/validation-checklist.md +179 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Inspect and run cloud builds and Pipeline Automation jobs
|
|
2
|
+
|
|
3
|
+
Read [cloud-automation.md](cloud-automation.md) for every command in
|
|
4
|
+
both groups, context/authentication, per-command filters and sorting,
|
|
5
|
+
output fields, pagination (including the leaves that refuse `--page`/`--limit`
|
|
6
|
+
rather than ignoring them), errors, and redaction. `pipeline cloud-build` works with Build Automation;
|
|
7
|
+
`pipeline automation` works with Pipeline Automation. Neither needs a running Editor
|
|
8
|
+
or the local Pipeline package. Use numeric organization IDs for service accounts.
|
|
9
|
+
The inventory commands are read-only. The commands that act on work start and
|
|
10
|
+
cancel builds, download artifacts, trigger pipelines, and follow or act on jobs;
|
|
11
|
+
`builds cancel`, `jobs terminate` and `jobs reject` ask first unless `--yes` is
|
|
12
|
+
given, and none of them change configuration.
|
|
13
|
+
|
|
14
|
+
JSON/NDJSON return full API-shaped results under `data`, as Collab does; NDJSON
|
|
15
|
+
has one terminal result, without item frames. Preserve native fields and free-form
|
|
16
|
+
metadata, subject to the reference's bounded secret protections and public-API
|
|
17
|
+
redaction assumption. Table projections remain separate. Explicit local build
|
|
18
|
+
targets retain `_local`; missing targets aren't local. These conventions apply
|
|
19
|
+
to follow-up cloud-automation work too.
|
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
# Collaboration — unity-cli command reference
|
|
2
|
+
|
|
3
|
+
Part of the **`unity-cli`** skill. See that skill's `SKILL.md` for CLI install, global flags,
|
|
4
|
+
environment variables, exit codes, and common workflows. All global flags (`--format json`,
|
|
5
|
+
`--non-interactive`, `--proxy`, …) apply to every command below. **`--yes` is not a global flag** —
|
|
6
|
+
it is bound per-command elsewhere in the CLI and no collaboration command accepts it, so passing it
|
|
7
|
+
here is an unknown-option usage error (exit 2). Use `--non-interactive` to skip confirmations.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
`unity collaboration` (alias **`unity collab`** — both accepted everywhere; examples below use the
|
|
12
|
+
canonical name) manages Unity Collaboration resources: review **annotations** on project assets,
|
|
13
|
+
their **attachments** (files, sketches, spatial anchors), **Jira** integration, emoji
|
|
14
|
+
**reactions**, **thumbnails**, and per-thread read/notification state.
|
|
15
|
+
|
|
16
|
+
**In-Editor counterpart.** These commands operate on the same annotation data as the
|
|
17
|
+
[`com.unity.cloud.collaboration.tools`](https://packages.unity.com/com.unity.cloud.collaboration.tools)
|
|
18
|
+
package, which lets users view, create, and reply to annotations from inside the Unity Editor —
|
|
19
|
+
including the 3D pins and sketch overlays whose payloads are described under
|
|
20
|
+
[Data model](#data-model). Install it through the Package Manager in a cloud-linked project; it is
|
|
21
|
+
**experimental** (latest `0.2.0-exp.1`), needs **Unity 6000.0+**, and pulls in
|
|
22
|
+
`com.unity.cloud.collaboration` — the service SDK, a separate package id — as a dependency. The CLI
|
|
23
|
+
needs no package: it talks to the collaboration service directly, so it works with or without the
|
|
24
|
+
Editor open. Annotations created either way are visible to both.
|
|
25
|
+
|
|
26
|
+
Relative links in this file resolve to the skill directory's `references/` folder, so `../SKILL.md` is the skill's main page.
|
|
27
|
+
|
|
28
|
+
### Contents
|
|
29
|
+
|
|
30
|
+
- Shared behavior
|
|
31
|
+
- Data model
|
|
32
|
+
- Annotations
|
|
33
|
+
- Attachments
|
|
34
|
+
- Reactions, thumbnails, read state
|
|
35
|
+
- Jira
|
|
36
|
+
|
|
37
|
+
### Shared behavior
|
|
38
|
+
|
|
39
|
+
**Project scoping — `--cloud-project` OR an inferred project.** The project-scoped commands
|
|
40
|
+
(`annotations`, `attachments`, `reactions`, `thumbnail`, `read`, `subscribe`, `unsubscribe`, and
|
|
41
|
+
`jira issues create/get/link/unlink/search/types`) take both `--cloud-project <id>` (Unity Cloud
|
|
42
|
+
project id — find one with `unity cloud projects`, see [auth-license-cloud.md](auth-license-cloud.md))
|
|
43
|
+
and `--project-path <path>`. It takes an id only, not a project name. Neither is required: resolution
|
|
44
|
+
order is
|
|
45
|
+
|
|
46
|
+
1. explicit `--cloud-project`, else
|
|
47
|
+
2. the `UNITY_CLOUD_PROJECT` env var, else
|
|
48
|
+
3. `--project-path` → `UNITY_PROJECT_PATH` env var → the current directory, reading
|
|
49
|
+
`ProjectSettings/ProjectSettings.asset` for the project's `cloudProjectId`, else
|
|
50
|
+
4. the stored default cloud project for your active organization
|
|
51
|
+
(`unity cloud project set-default`, see [auth-license-cloud.md](auth-license-cloud.md)).
|
|
52
|
+
|
|
53
|
+
An empty or whitespace-only `--cloud-project` or `UNITY_CLOUD_PROJECT` counts as not set, so the next
|
|
54
|
+
step applies.
|
|
55
|
+
|
|
56
|
+
If none yields an id it fails with: `Could not determine the Unity Cloud project for '<path>'.
|
|
57
|
+
Pass --cloud-project explicitly, or --project-path to point at a project linked to Unity Cloud.` So
|
|
58
|
+
inside a cloud-linked Unity project you can drop the flag entirely, and with a default set you can
|
|
59
|
+
drop it outside one too. Note the link outranks the default: it is the more specific fact about the
|
|
60
|
+
directory you pointed the command at. Most of `jira` is scoped
|
|
61
|
+
differently — see [Jira](#jira).
|
|
62
|
+
|
|
63
|
+
**`--all` — auto-paginate.** `annotations`, `annotations replies`, and `jira issues` accept
|
|
64
|
+
`--all` to stream every page instead of one. It is **mutually exclusive with `--next` and
|
|
65
|
+
`--limit`** — passing either alongside it is an error.
|
|
66
|
+
|
|
67
|
+
**`--full` and `--resolve-users`** (table output helpers): `--full` prints annotation/reply text
|
|
68
|
+
untruncated (whitespace still collapsed to one line); `--resolve-users` replaces user ids with
|
|
69
|
+
display names. `--resolve-users` is on `annotations`/`replies`/`get`/`export` and
|
|
70
|
+
`attachments`; `--full` only on `annotations`/`replies`.
|
|
71
|
+
|
|
72
|
+
**Delete confirmations.** `annotations delete`, `annotations delete-fields`, `attachments delete`,
|
|
73
|
+
`jira server delete`, and `jira project delete` prompt for confirmation (default **No**) only when
|
|
74
|
+
all three hold: output format is `human`, `--non-interactive` was not passed, and both stdin and
|
|
75
|
+
stdout are TTYs. In scripts/CI (piped output, `--format json`, or `--non-interactive`) they delete
|
|
76
|
+
immediately without prompting.
|
|
77
|
+
|
|
78
|
+
**`key=value` flags — typed vs string.** Two repeatable pair collectors look identical but behave
|
|
79
|
+
differently:
|
|
80
|
+
|
|
81
|
+
- `--metadata k=v` (typed): each value goes through `JSON.parse`, so `count=3` becomes the number
|
|
82
|
+
`3`, `done=true` a boolean, `tags=["a","b"]` an array. Unparseable values stay strings. To force
|
|
83
|
+
a numeric-looking string to stay a string, quote it as JSON: `--metadata 'k="2"'`.
|
|
84
|
+
- `--target-context k=v` (string-only): values are always kept as raw strings.
|
|
85
|
+
|
|
86
|
+
Both split on the first `=` only (values may contain `=`); repeating a key means last value wins;
|
|
87
|
+
a pair without `=` or with an empty key fails with `Invalid key=value pair: <pair>`.
|
|
88
|
+
|
|
89
|
+
**Raw-JSON flags.** `--camera`, `--local`, `--time`, `--position`,
|
|
90
|
+
`--attachments`, and `annotations --query` take a JSON value and fail with
|
|
91
|
+
`Invalid JSON for --<flag>` when it doesn't parse. Shapes:
|
|
92
|
+
|
|
93
|
+
| Flag | JSON shape |
|
|
94
|
+
|---|---|
|
|
95
|
+
| `--camera` | `{"position":{"x":0,"y":0,"z":0},"rotation":{"x":0,"y":0,"z":0},"fieldOfView":60,"target":{...},"projection":"...","verticalSize":1}` — position + rotation required, rest optional |
|
|
96
|
+
| `--local` (annotations, attachments spatial) | `{"parentId":"...","position":{"x":0,"y":0,"z":0},"cameraPosition":{"x":0,"y":0,"z":0}}` |
|
|
97
|
+
| `--time` | `{"timeScale":1,"timeStamp":0}` |
|
|
98
|
+
| `--position` (attachments spatial) | `{"x":0,"y":0,"z":0}` |
|
|
99
|
+
| `--attachments` (annotations create) | JSON array of `{"type":"...", ...}` attachment objects |
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
### Data model
|
|
104
|
+
|
|
105
|
+
#### Root vs reply
|
|
106
|
+
|
|
107
|
+
Every annotation — root or reply — is the same type. The distinguishing field is
|
|
108
|
+
`rootAnnotationId`:
|
|
109
|
+
|
|
110
|
+
| Field | Root thread | Reply |
|
|
111
|
+
|---|---|---|
|
|
112
|
+
| `rootAnnotationId` | `null` | ID of the root annotation |
|
|
113
|
+
| `target` | asset or project path | more specific path, often includes `/files/<filename>` |
|
|
114
|
+
| `replyCount` | populated | `null` |
|
|
115
|
+
| `replyUserIds` | populated | `null` |
|
|
116
|
+
| `threadAttachmentsCount` | populated (thread-wide; see caveat below) | `null` |
|
|
117
|
+
| `hasDraftReply` | populated | `null` |
|
|
118
|
+
| `integrations` | `{}` or populated (Jira lives here) | `null` |
|
|
119
|
+
| `resolved` / `resolvedBy` | meaningful (thread-level op) | `null` |
|
|
120
|
+
| `camera` / `metadata` | minimal | rich — full viewer state snapshot |
|
|
121
|
+
|
|
122
|
+
Thread-level operations (resolve/unresolve, subscribe/unsubscribe, Jira linking, thumbnails) act on
|
|
123
|
+
the root. Replies capture a richer viewport snapshot (`camera`, `metadata` with `materialOverride`,
|
|
124
|
+
lighting, grid state) because they usually represent a specific view at time of writing. Both root
|
|
125
|
+
and reply can independently hold `attachments`, `reactions`, and `hasThumbnail`.
|
|
126
|
+
|
|
127
|
+
#### Target paths
|
|
128
|
+
|
|
129
|
+
`target` always starts with `<prefix>/projects/<projectId>/...`. The prefix sets the context:
|
|
130
|
+
|
|
131
|
+
| Prefix | Context | Example |
|
|
132
|
+
|---|---|---|
|
|
133
|
+
| `assets/projects/<id>/...` | Asset Manager asset | `assets/projects/<projectId>/assets/<assetId>` |
|
|
134
|
+
| `assets/projects/<id>/.../files/<name>` | Specific file within an AM asset | `assets/projects/<projectId>/assets/<assetId>/files/mesh.fbx` |
|
|
135
|
+
| `unity/projects/<id>/...` | Unity Editor | `unity/projects/<projectId>/assets/<assetId>` |
|
|
136
|
+
|
|
137
|
+
`**` as a trailing segment matches all descendants (`annotations count` target arg).
|
|
138
|
+
|
|
139
|
+
The two prefixes are **separate trees, and no glob spans both.** A project routinely holds
|
|
140
|
+
annotations under each, so any count or listing is scoped to whichever prefix you name — see the
|
|
141
|
+
`count` caveat under [Annotations](#annotations).
|
|
142
|
+
|
|
143
|
+
#### Mention syntax in `--text`
|
|
144
|
+
|
|
145
|
+
| Type | Syntax | Example |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| User | `:user[Display Name]{#userId}` | `:user[Alex Rivera]{#2475297437902}` |
|
|
148
|
+
| Asset | `:asset[Asset Name]{#assetId}` | `:asset[Unity Tower]{#68de9f5d476ac89c752cbf88}` |
|
|
149
|
+
|
|
150
|
+
#### Attachment payload shapes
|
|
151
|
+
|
|
152
|
+
`threadAttachmentsCount` on the root counts the **whole thread**, while `attachments <id>`
|
|
153
|
+
returns only the attachments owned by that one annotation. A root reporting 5 can list just its own
|
|
154
|
+
single sketch, with the other four hanging off replies — that mismatch is expected, not a bug. To
|
|
155
|
+
reach them, list the replies (`annotations replies <id>`) and call `attachments` per reply id,
|
|
156
|
+
or read the `attachments` field directly via `annotations --include-fields attachments`.
|
|
157
|
+
|
|
158
|
+
**Don't index it.** `threadAttachmentsCount` is normally a number (or `null`), but a per-type object
|
|
159
|
+
(`{ "sketch": 4, "spatial-3d": 3, "file": 1 }`) also shows up in real payloads. Guard the type
|
|
160
|
+
before reading it rather than assuming either shape.
|
|
161
|
+
|
|
162
|
+
Every attachment object also carries its type under **two** keys, `type` and `Type`, with the same
|
|
163
|
+
value — the API emits both and the CLI passes responses through verbatim. Key off lowercase `type`;
|
|
164
|
+
that is what the formatters use.
|
|
165
|
+
|
|
166
|
+
**`sketch`** — 2D drawing overlay captured over a 3D viewport. `sketchData` is a JSON *string*
|
|
167
|
+
(stroke/arrow records with positions, colors, widths):
|
|
168
|
+
```json
|
|
169
|
+
{
|
|
170
|
+
"type": "sketch",
|
|
171
|
+
"attachmentId": "689f4236496f6d50dcbd6e20",
|
|
172
|
+
"sketchData": "<JSON string>",
|
|
173
|
+
"camera": { "position": {}, "rotation": {}, "fieldOfView": 60, "target": {}, "projection": "perspective" },
|
|
174
|
+
"preview": { "filePath": "..._preview.png", "fileSize": 42770, "contentType": "image/png", "status": "Uploaded" },
|
|
175
|
+
"sketchImage": { "filePath": "..._sketch.png", "fileSize": 42770, "contentType": "image/png", "status": "Uploaded" },
|
|
176
|
+
"metadata": { "materialOverride": "default", "wireframe": -1 },
|
|
177
|
+
"created": "2025-08-15T14:20:38.806Z",
|
|
178
|
+
"createdBy": "2475297437902"
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**`spatial-3d`** — numbered 3D pin on a mesh in world space. Multiple pins per annotation, each
|
|
183
|
+
with an incrementing `label`. `camera.target` points at the pin's `position`; no
|
|
184
|
+
`preview`/`sketchImage` (it's a point, not an image):
|
|
185
|
+
```json
|
|
186
|
+
{
|
|
187
|
+
"type": "spatial-3d",
|
|
188
|
+
"attachmentId": "6a1effe63e164caf9cea8aee",
|
|
189
|
+
"label": "1",
|
|
190
|
+
"position": { "x": -0.403, "y": 2.763, "z": 0.066 },
|
|
191
|
+
"camera": { "position": {}, "rotation": {}, "fieldOfView": 60, "target": { "x": -0.403, "y": 2.763, "z": 0.066 } },
|
|
192
|
+
"metadata": { "materialOverride": "default", "wireframe": -1 },
|
|
193
|
+
"created": "2026-06-02T16:08:06.935Z",
|
|
194
|
+
"createdBy": "2475297437902"
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**`file`** — generic upload (image, document). The annotation's top-level `camera` is `null` for
|
|
199
|
+
these — not tied to a 3D viewport:
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"type": "file",
|
|
203
|
+
"attachmentId": "6a1effcfe9693f7f4d84ad13",
|
|
204
|
+
"filePath": "qa_no_replies.jpg",
|
|
205
|
+
"fileSize": 348842,
|
|
206
|
+
"fileType": "image",
|
|
207
|
+
"contentType": "image/jpeg",
|
|
208
|
+
"status": "Uploaded",
|
|
209
|
+
"metadata": {},
|
|
210
|
+
"created": "2026-06-02T16:07:43.657Z",
|
|
211
|
+
"createdBy": "2475297437902"
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### Annotations
|
|
218
|
+
|
|
219
|
+
An annotation is a review comment anchored to a target path (e.g.
|
|
220
|
+
`unity/projects/<projectId>/assets/<assetId>`). A **reply** is an annotation whose
|
|
221
|
+
`rootAnnotationId` points at the thread root — `create --reply-to <id>` makes one, and
|
|
222
|
+
`replies <id>` lists a thread. Status lifecycle: `Draft` → `Sending` → `Active`.
|
|
223
|
+
|
|
224
|
+
Annotation objects returned by `get`/`list`/`replies` (`--format json`) carry: `annotationId`,
|
|
225
|
+
`messageType`, `target`, `targetContext`, `rootAnnotationId`, `status`, `text`, `created`/
|
|
226
|
+
`createdBy`, `updated`/`updatedBy`, `resolved`/`resolvedBy`, `metadata`, plus include-only fields
|
|
227
|
+
(below).
|
|
228
|
+
|
|
229
|
+
| Command | Args | Key options |
|
|
230
|
+
|---|---|---|
|
|
231
|
+
| `annotations count` | `[target]` (glob `**` at end OK) — **defaults to `unity/projects/<id>/**` only**, see below | `--grouped` (per-target breakdown), `--offset <n>`, `--limit <n>` |
|
|
232
|
+
| `annotations create` | `<target>` | `--text`, `--reply-to <id>`, `--status Active\|Draft`, `--metadata k=v`…, `--target-context k=v`…, `--camera`, `--local`, `--time`, `--attachments`, `--unresolve-root-annotation` |
|
|
233
|
+
| `annotations delete` | `<annotationId>` | (confirmation — see Shared behavior) |
|
|
234
|
+
| `annotations delete-fields` | `<annotationId> <field...>` | removes metadata fields; variadic; confirmation |
|
|
235
|
+
| `annotations export` | — | `--target <path>` — omitted, no target is sent and the export covers the whole project, see below; `--out <file>` (else stdout), `--resolve-users`; the service returns `assetId` + `assetName` here that `list` does not — the CLI copies the response page verbatim, so treat those as service behavior |
|
|
236
|
+
| `annotations get` | `<annotationId>` | `--fields a,b,c` or `--fields all` (table output only), `--resolve-users` |
|
|
237
|
+
| `annotations` | — | `--query <json>` (optional — defaults to root threads only), `--next <cursor>`, `--limit 1-100` (default 10), `--all`, `--sort Ascending\|Descending`, `--sort-field annotationId\|latestReply`, `--include-fields a,b`, `--fields a,b` or `--fields all` (table output only), `--full`, `--resolve-users` |
|
|
238
|
+
| `annotations replies` | `<annotationId>` | `--next`, `--limit 1-100`, `--all`, `--sort`, `--status-filter All\|Active\|Sending\|Draft` (repeat flag), `--fields a,b` or `--fields all` (table output only), `--full`, `--resolve-users` |
|
|
239
|
+
| `annotations resolve` / `annotations unresolve` | `<annotationId>` | — (echoes only `annotationId`, see below) |
|
|
240
|
+
| `annotations status` | `<annotationId> <Active\|Sending\|Draft>` | — |
|
|
241
|
+
| `annotations update` | `<annotationId>` | `--text`, `--metadata k=v`…, `--camera`, `--local`, `--time` — at least one required |
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# Create a thread on an asset, with typed metadata (count is a number, build stays a string)
|
|
245
|
+
unity collaboration annotations create "unity/projects/$PROJ/assets/$ASSET" \
|
|
246
|
+
--cloud-project $PROJ --text "Texture seam visible here" \
|
|
247
|
+
--metadata severity=2 --metadata 'build="2024.1"' \
|
|
248
|
+
--camera '{"position":{"x":0,"y":1,"z":-5},"rotation":{"x":0,"y":0,"z":0}}'
|
|
249
|
+
|
|
250
|
+
# Reply to it
|
|
251
|
+
unity collaboration annotations create "unity/projects/$PROJ/assets/$ASSET" \
|
|
252
|
+
--cloud-project $PROJ --reply-to $ANNOTATION_ID --text "Fixed in latest import"
|
|
253
|
+
|
|
254
|
+
# List root threads (default query) from inside a cloud-linked project — no --cloud-project needed
|
|
255
|
+
unity collaboration annotations --include-fields replyCount,latestReply --format json
|
|
256
|
+
|
|
257
|
+
# Custom query — must be a JSON ARRAY of clauses; the default is
|
|
258
|
+
# [{"type":"hasNot","field":"annotationParentId"}] (root threads only)
|
|
259
|
+
unity collaboration annotations --cloud-project $PROJ \
|
|
260
|
+
--query '[{"type":"hasNot","field":"annotationParentId"}]' --all --format ndjson
|
|
261
|
+
|
|
262
|
+
# Export for offline analysis: the bare command sends no target (the whole project)
|
|
263
|
+
unity collaboration annotations export --cloud-project $PROJ --out annotations.json
|
|
264
|
+
# Restrict it to one asset
|
|
265
|
+
unity collaboration annotations export --cloud-project $PROJ \
|
|
266
|
+
--target "unity/projects/$PROJ/assets/<assetId>/**" --out annotations-asset.json
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**`export` with no `--target` sends no target.** The request carries only the page size, which asks
|
|
270
|
+
the service for the whole project; no path prefix decides what is included. Compare its `count` with
|
|
271
|
+
`annotations count --grouped` per prefix when completeness matters. A `--target` the service finds no
|
|
272
|
+
assets for fails with HTTP 500 "No assets found for the provided ids"; the error then names the target
|
|
273
|
+
and suggests running without `--target`.
|
|
274
|
+
|
|
275
|
+
When the service answers an export with HTTP 500 "No assets found for the provided ids", an annotation points
|
|
276
|
+
at an asset that no longer exists and the service refuses the whole export without naming it. The CLI
|
|
277
|
+
appends a hint: list the targets with `annotations count "<target>" --grouped` (the target the export asked for; `count` defaults to another tree), then export the ones that still exist
|
|
278
|
+
with `--target`.
|
|
279
|
+
|
|
280
|
+
**`--query` shape.** A JSON *array* of clauses (a bare object is rejected:
|
|
281
|
+
`The --query value must be a JSON array of query clauses.`). Clause vocabulary is the
|
|
282
|
+
collaboration API's — e.g. `{"type":"hasNot","field":"annotationParentId"}`. Omitting `--query`
|
|
283
|
+
applies exactly that root-threads-only clause.
|
|
284
|
+
|
|
285
|
+
A supplied `--query` **replaces** that default rather than adding to it, so a lone filter clause
|
|
286
|
+
(e.g. `[{"type":"glob","field":"target","value":"assets/**"}]`) returns replies interleaved with
|
|
287
|
+
roots. Re-add `{"type":"hasNot","field":"annotationParentId"}` alongside your clause to keep
|
|
288
|
+
thread-roots-only results.
|
|
289
|
+
|
|
290
|
+
**Include-only fields.** `replyCount`, `replyUserIds`, `latestReply`, `attachments`,
|
|
291
|
+
`threadAttachmentsCount`, `replyLastReadTimestamp`, and `replyUnreadCount` come back null/absent
|
|
292
|
+
unless named in `--include-fields` on `list` (server omits them by default). If `replyCount` is
|
|
293
|
+
unexpectedly null, that's why.
|
|
294
|
+
|
|
295
|
+
**`delete-fields`** removes **`metadata` sub-keys**, not top-level annotation fields — the variadic
|
|
296
|
+
args are metadata key names (`delete-fields <id> severity build`). A name that isn't a metadata key
|
|
297
|
+
is a silent no-op (it is echoed back in `data.fields` and the command still exits 0), including
|
|
298
|
+
`metadata` itself: passing it does **not** clear the object.
|
|
299
|
+
|
|
300
|
+
**`count` with no target counts one prefix tree only.** It defaults to
|
|
301
|
+
`unity/projects/<projectId>/**`, so it reads like a project-wide total but omits everything under
|
|
302
|
+
`assets/projects/<projectId>/**` — in a project with annotations on both, the bare command can
|
|
303
|
+
report 16 while 34 more exist. Pass the target explicitly (once per prefix) when you want a real
|
|
304
|
+
total, and prefer `--grouped` to see which trees are populated.
|
|
305
|
+
|
|
306
|
+
**`count --grouped` is a listing.** Its `--format json` `data` keeps the service's `targets` and adds
|
|
307
|
+
them as `items`, with `total`, `nextPage` and `partial`. `nextPage` is the next `--offset`, so pass it
|
|
308
|
+
back as `--offset <nextPage>` (with the same `--limit`) until it is `null`. With no `--limit` and no
|
|
309
|
+
total from the service it is `null`, so pass `--limit` when you need every page. Without `--grouped`,
|
|
310
|
+
`count` is a single result, not a listing.
|
|
311
|
+
|
|
312
|
+
**The mutators echo ids, not the annotation.** `resolve` and `unresolve` return just
|
|
313
|
+
`{ "annotationId": … }`; `status` adds `status`, and `delete-fields` adds the `fields` it was asked to
|
|
314
|
+
remove. None return a `resolved` timestamp or the updated object. A read-after-write therefore needs a follow-up `get`; an id-only response is success, not a
|
|
315
|
+
silent failure. Re-resolving an already-resolved thread is an error (`HTTP 409 … is already
|
|
316
|
+
resolved`), which is one way to confirm the first call landed.
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
### Attachments
|
|
321
|
+
|
|
322
|
+
Attachments hang off an annotation. Three kinds: **file** (uploaded blob), **sketch** (2D drawing
|
|
323
|
+
over a camera view), **spatial** (labeled 3D anchor) — payload shapes in
|
|
324
|
+
[Data model](#attachment-payload-shapes). All commands take `--cloud-project`.
|
|
325
|
+
|
|
326
|
+
| Command | Args | Key options |
|
|
327
|
+
|---|---|---|
|
|
328
|
+
| `attachments` | `<annotationId>` | `--resolve-users` |
|
|
329
|
+
| `attachments delete` | `<annotationId> <attachmentId>` | (confirmation — see Shared behavior) |
|
|
330
|
+
| `attachments download` | `<annotationId> <attachmentId>` | `--out <path>` (default: the attachment's original filename in CWD, falling back to `<attachmentId>` when it has no file path), `--force` (overwrite), `--width <px>` (resize image) |
|
|
331
|
+
| `attachments upload` | `<annotationId> <file>` | `--name` (display name), `--content-type` (override inferred MIME) |
|
|
332
|
+
| `attachments add file` | `<annotationId> <file>` | same options and **same handler** as `upload`; only the reported command label, the success message, and the JSON error code (`COLLAB_ATTACHMENTS_ADD_ERROR`) differ — use either |
|
|
333
|
+
| `attachments add sketch` | `<annotationId>` | `--sketch-data <json>` **(required)**, `--camera <json>` **(required)**, `--time <json>`, `--preview <file>`, `--sketch-image <file>`: pass **both files or neither** (one alone exits 2, `COLLAB_SKETCH_FILES_INCOMPLETE`, before any request) |
|
|
334
|
+
| `attachments add spatial` | `<annotationId>` | `--label` **(required)**, `--position <json>` **(required)**, `--camera <json>` **(required)**, `--time <json>`, `--local <json>` |
|
|
335
|
+
| `attachments update [file]` | `<annotationId> <attachmentId>` | `--content-type`, `--metadata k=v`… — **at least one required**; `file` is the **default variant**: `update <ids…>` without a subcommand means `update file` |
|
|
336
|
+
| `attachments update sketch` | `<annotationId> <attachmentId>` | `--sketch-data`, `--camera`, `--time`, `--metadata k=v`… — each individually optional, but **at least one required** |
|
|
337
|
+
| `attachments update spatial` | `<annotationId> <attachmentId>` | `--label`, `--position`, `--camera`, `--time`, `--local`, `--metadata k=v`… — each individually optional, but **at least one required** |
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
# Attach a screenshot (upload and `add file` are interchangeable)
|
|
341
|
+
unity collaboration attachments upload $ANNOTATION_ID ./screenshot.png --cloud-project $PROJ
|
|
342
|
+
|
|
343
|
+
# Add a labeled 3D anchor
|
|
344
|
+
unity collaboration attachments add spatial $ANNOTATION_ID --cloud-project $PROJ \
|
|
345
|
+
--label "Broken collider" --position '{"x":1.2,"y":0,"z":3.4}' \
|
|
346
|
+
--camera '{"position":{"x":0,"y":2,"z":-4},"rotation":{"x":15,"y":0,"z":0}}'
|
|
347
|
+
|
|
348
|
+
# Download; refuses to overwrite an existing file unless --force
|
|
349
|
+
unity collaboration attachments download $ANNOTATION_ID $ATTACHMENT_ID --cloud-project $PROJ \
|
|
350
|
+
--out ./shot.png --force
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Notes:
|
|
354
|
+
|
|
355
|
+
- Under `--format ndjson` each attachment is one row line carrying its own `type` (`file`, `sketch`,
|
|
356
|
+
`spatial-3d`) and no `"type":"row"` marker, then the `{"type":"result",…}` frame closes the stream.
|
|
357
|
+
- `--sketch-data` is passed through as a raw string, not parsed as JSON — only `--camera`/`--time`/
|
|
358
|
+
`--position`/`--local` get JSON validation at the CLI layer.
|
|
359
|
+
- Options required on `add sketch`/`add spatial` become *individually* optional on the matching
|
|
360
|
+
`update` variant — but every variant, `file` included, rejects a flagless invocation with a
|
|
361
|
+
`NO_FIELDS` error. Pass at least one change flag.
|
|
362
|
+
- `update sketch` without `--sketch-data` reads the annotation first and resends the attachment's
|
|
363
|
+
stored sketch data, since the service rejects a sketch update that lacks it.
|
|
364
|
+
- The local-space anchor is `--local` here and on annotations (same JSON shape).
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
### Reactions, thumbnails, read state
|
|
369
|
+
|
|
370
|
+
All use the same optional project resolution as `annotations` — `--cloud-project` or `--project-path`,
|
|
371
|
+
else inferred from the current project (see [Shared behavior](#shared-behavior)).
|
|
372
|
+
|
|
373
|
+
| Command | Args | Key options |
|
|
374
|
+
|---|---|---|
|
|
375
|
+
| `reactions add` / `reactions remove` | `<annotationId> <emoji>` | emoji is a single Unicode emoji, e.g. `👍` |
|
|
376
|
+
| `thumbnail upload` | `<annotationId> <file>` | image file; MIME inferred from extension (jpg/png/gif/webp) |
|
|
377
|
+
| `thumbnail download` | `<annotationId>` | `--out <path>` (default `./thumbnail`), `--width <pixels>` (an integer of at least 50); **no `--force`** — errors if the file exists ("Delete it first") |
|
|
378
|
+
| `read` | `<annotationId>` | `--timestamp <iso8601>` (default now) — marks the thread read up to that time (per-user read receipt) |
|
|
379
|
+
| `subscribe` / `unsubscribe` | `<annotationId>` | per-thread notification subscription for the current user |
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
unity collaboration reactions add $ANNOTATION_ID 👍 --cloud-project $PROJ
|
|
383
|
+
unity collaboration read $ANNOTATION_ID --cloud-project $PROJ # mark thread read as of now
|
|
384
|
+
|
|
385
|
+
# Per-thread notification subscription for the current user
|
|
386
|
+
unity collaboration subscribe $ANNOTATION_ID --cloud-project $PROJ
|
|
387
|
+
unity collaboration unsubscribe $ANNOTATION_ID --cloud-project $PROJ
|
|
388
|
+
|
|
389
|
+
# Thread thumbnails
|
|
390
|
+
unity collaboration thumbnail upload $ANNOTATION_ID ./shot.png --cloud-project $PROJ
|
|
391
|
+
unity collaboration thumbnail download $ANNOTATION_ID --out ./thumb.png
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
### Jira
|
|
397
|
+
|
|
398
|
+
Connects Collaboration annotations to Jira. Three layers, three id types — don't mix them up:
|
|
399
|
+
|
|
400
|
+
1. **Server config** (`serverConfigId`): a Jira server + credentials, scoped to a Unity
|
|
401
|
+
**organization** (`--cloud-org`).
|
|
402
|
+
2. **Project config** (`projectConfigId`, flag `--jira-project-config-id`): a Jira project
|
|
403
|
+
(`--jira-project-id` — the Jira-side id) under a server config, linkable to Unity projects.
|
|
404
|
+
3. **Issues**: created from / linked to annotations, scoped by Unity `--cloud-project`. The resulting
|
|
405
|
+
link lands in `annotation.integrations.jiraIssues[]` — see
|
|
406
|
+
[Jira integration payload](#jira-integration-payload) below.
|
|
407
|
+
|
|
408
|
+
**Scoping — most of `jira` does not use the project resolver** (no `--project-path`, no inference):
|
|
409
|
+
|
|
410
|
+
| Group | Scoping |
|
|
411
|
+
|---|---|
|
|
412
|
+
| `jira server *` | an organization, required (rejected at parse time) |
|
|
413
|
+
| `jira project add` / `delete` / `update` | an organization, required (validated by the handler) |
|
|
414
|
+
| `jira project link` / `unlink` | Unity project id is a **positional** (`<unityProjectId> <projectConfigId>`); no `--cloud-org` at all |
|
|
415
|
+
| `jira issues` | an organization, required (rejected at parse time) |
|
|
416
|
+
| `jira configs` | exactly **one** of `--cloud-org` or `--cloud-project` typed, **no `--project-path`** and no inference |
|
|
417
|
+
| `jira issues create/get/link/unlink/search/types` | `--cloud-project` / `--project-path`, or inferred — see [Shared behavior](#shared-behavior) |
|
|
418
|
+
|
|
419
|
+
**The organization** of `jira server *`, `jira project add`/`delete`/`update` and `jira issues`
|
|
420
|
+
is `--cloud-org <id>`, else the `UNITY_CLOUD_ORG` env var, else the stored default organization
|
|
421
|
+
(`unity cloud org set-default`, see [auth-license-cloud.md](auth-license-cloud.md)). It takes an
|
|
422
|
+
organization id only, not a name. An empty or whitespace-only flag or variable counts as not set.
|
|
423
|
+
Only when none of the three gives one is it missing.
|
|
424
|
+
`jira configs` is the exception: it reads its scope only from what you type, apart from
|
|
425
|
+
`UNITY_CLOUD_PROJECT` when you type neither option.
|
|
426
|
+
|
|
427
|
+
**`--help` never tells you which options are required.** No collaboration option is annotated as
|
|
428
|
+
required in help output, on any command — so the tables in this file are the only place that
|
|
429
|
+
distinction is written down. What *does* differ is where a missing option is caught, and therefore
|
|
430
|
+
which exit code you get:
|
|
431
|
+
|
|
432
|
+
| Enforcement | Commands | Behavior when omitted |
|
|
433
|
+
|---|---|---|
|
|
434
|
+
| Parse time | `jira server add/delete/update/test/users/projects/permissions`, `jira issues create/get/search/types`, `jira issues --cloud-org`, `attachments add sketch` / `add spatial` required flags | usage error, **exit 2** |
|
|
435
|
+
| Handler | `jira project add/delete/update --cloud-org`, `jira configs` | command failure (error envelope), not a usage error |
|
|
436
|
+
|
|
437
|
+
`jira project link` / `unlink` take positionals instead, so a missing id is always a parse-time
|
|
438
|
+
usage error.
|
|
439
|
+
|
|
440
|
+
#### `jira server` — server configurations
|
|
441
|
+
|
|
442
|
+
| Command | Args | Key options |
|
|
443
|
+
|---|---|---|
|
|
444
|
+
| `jira server add` | none | `--cloud-org`, `--url`, `--username`, `--name`, and the API token through `--key-from-stdin` (preferred) or `--key`; all required |
|
|
445
|
+
| `jira server delete` | `<serverConfigId>` | `--cloud-org` (required); confirmation |
|
|
446
|
+
| `jira server update` | `<serverConfigId>` | `--cloud-org` (required) + at least one of `--url`/`--username`/`--key-from-stdin`/`--key`/`--name` |
|
|
447
|
+
| `jira server test` | none | `--cloud-org`, `--url`, `--username`, and the API token through `--key-from-stdin` (preferred) or `--key`; all required; validates credentials **without persisting** |
|
|
448
|
+
| `jira server users` | `<serverConfigId>` | `--cloud-org` (required), `--query <text>` — search Jira users |
|
|
449
|
+
| `jira server projects` | `<serverConfigId>` | `--cloud-org` (required) — lists **Jira-side** projects on the server |
|
|
450
|
+
| `jira server permissions` | `<serverConfigId>` | `--cloud-org`, `--jira-project-id` — both required; checks required Jira permissions |
|
|
451
|
+
|
|
452
|
+
> **Warning: `--key` exposes the API token.** Its value is part of the command line, so other
|
|
453
|
+
> users on the same host can read it in the process list, and CI runners that echo commands write
|
|
454
|
+
> it into their logs. Pipe the token with `--key-from-stdin` instead. It reads all of stdin, drops
|
|
455
|
+
> one trailing newline, and waits up to 30 seconds for stdin to close. It's a usage error
|
|
456
|
+
> (exit 2) when stdin is a terminal, the piped value is empty, or both `--key` and
|
|
457
|
+
> `--key-from-stdin` are given, and no error message includes the token. `--key` still works for
|
|
458
|
+
> compatibility.
|
|
459
|
+
|
|
460
|
+
#### `jira project` — project configurations
|
|
461
|
+
|
|
462
|
+
| Command | Args | Key options |
|
|
463
|
+
|---|---|---|
|
|
464
|
+
| `jira project add` | `<serverConfigId>` | `--cloud-org`, `--jira-project-id`, `--default-reporter-id` — all required, though `--help` doesn't say so (fallback reporter when an annotation author has no Jira match) |
|
|
465
|
+
| `jira project delete` | `<projectConfigId>` | `--cloud-org` (required, not marked in `--help`); confirmation |
|
|
466
|
+
| `jira project link` / `jira project unlink` | `<unityProjectId> <projectConfigId>` | — (Unity project id is positional here, not a flag). `unlink` fails with HTTP 404 (exit 6) when the project isn't linked to that configuration |
|
|
467
|
+
| `jira project update` | `<projectConfigId>` | `--cloud-org` (required, not marked in `--help`), `--default-reporter-id`, `--linked-unity-project-id <id>` (repeatable — **replaces** the whole linked list), `--clear-linked-unity-projects` (mutually exclusive with the previous flag); at least one change flag required |
|
|
468
|
+
|
|
469
|
+
#### `jira issues`
|
|
470
|
+
|
|
471
|
+
| Command | Args | Key options |
|
|
472
|
+
|---|---|---|
|
|
473
|
+
| `jira issues create` | `<annotationId>` | `--jira-project-config-id`, `--summary`, `--type <issueTypeId>` — required; `--cloud-project`/`--project-path` optional (inferred); `--description`, `--assignee-user-id`, `--reporter-user-id`, `--parent-issue-id` (sub-task) |
|
|
474
|
+
| `jira issues get` | `<jiraIssueId>` | `--jira-project-config-id` required; `--cloud-project`/`--project-path` optional (inferred) |
|
|
475
|
+
| `jira issues link` / `jira issues unlink` | `<annotationId> <jiraIssueId>` | `--cloud-project`/`--project-path` optional (inferred); `link` also takes optional `--jira-project-config-id`. `unlink` does **not** delete the issue in Jira, and fails with HTTP 404 (exit 6) for an issue the annotation's thread doesn't have linked |
|
|
476
|
+
| `jira issues` | — | `--cloud-org` **(required, org-scoped — no `--cloud-project`/`--project-path` here)**, `--profile all\|active\|resolved\|unresolved\|draft\|sending` (repeat flag), `--next <token>`, `--limit 1-100` (default 10), `--all`, `--sort Ascending\|Descending` |
|
|
477
|
+
| `jira issues search` | — | `--jira-project-config-id` required; `--cloud-project`/`--project-path` optional (inferred); `--query <text>` (plain text, **not JQL**), `--include-subtasks` |
|
|
478
|
+
| `jira issues types` | — | `--jira-project-config-id` required; `--cloud-project`/`--project-path` optional (inferred); lists issue type ids for `create --type` |
|
|
479
|
+
|
|
480
|
+
#### `jira configs`
|
|
481
|
+
|
|
482
|
+
`unity collaboration jira configs` — single command. Pass **exactly one** of `--cloud-org` (all
|
|
483
|
+
configs in the org) or `--cloud-project` (configs available to that Unity project).
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
# One-time setup: validate credentials, persist server, add a Jira project, link Unity project.
|
|
487
|
+
# The API token is piped on stdin, so it never appears in the process list or CI logs.
|
|
488
|
+
printf '%s' "$JIRA_TOKEN" | unity collaboration jira server test --cloud-org "$ORG" \
|
|
489
|
+
--url https://jira.example.com --username bot@example.com --key-from-stdin
|
|
490
|
+
printf '%s' "$JIRA_TOKEN" | unity collaboration jira server add --cloud-org "$ORG" \
|
|
491
|
+
--url https://jira.example.com --username bot@example.com --name "Main Jira" --key-from-stdin
|
|
492
|
+
unity collaboration jira project add $SERVER_CONFIG_ID --cloud-org $ORG \
|
|
493
|
+
--jira-project-id 10042 --default-reporter-id $JIRA_ACCOUNT_ID
|
|
494
|
+
unity collaboration jira project link $PROJ $PROJECT_CONFIG_ID
|
|
495
|
+
|
|
496
|
+
# Rotate the stored API token
|
|
497
|
+
printf '%s' "$NEW_JIRA_TOKEN" | unity collaboration jira server update $SERVER_CONFIG_ID \
|
|
498
|
+
--cloud-org "$ORG" --key-from-stdin
|
|
499
|
+
|
|
500
|
+
# File an issue from an annotation (get valid type ids from `issues types` first)
|
|
501
|
+
unity collaboration jira issues create $ANNOTATION_ID --cloud-project $PROJ \
|
|
502
|
+
--jira-project-config-id $PROJECT_CONFIG_ID --summary "Texture seam" --type 10001
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
#### Jira integration payload
|
|
506
|
+
|
|
507
|
+
Lives in `annotation.integrations.jiraIssues[]` on the root (`integrations` is `null` on replies).
|
|
508
|
+
Multiple issues can be linked to one thread.
|
|
509
|
+
|
|
510
|
+
```json
|
|
511
|
+
{
|
|
512
|
+
"integrations": {
|
|
513
|
+
"jiraIssues": [
|
|
514
|
+
{
|
|
515
|
+
"type": "Jira",
|
|
516
|
+
"jiraIssueId": "18955",
|
|
517
|
+
"jiraProjectConfigId": "6997204de238d85bc249625b",
|
|
518
|
+
"jiraIssueKey": "PROJ-1",
|
|
519
|
+
"jiraIssueUrl": "https://yourcompany.atlassian.net/browse/PROJ-1",
|
|
520
|
+
"sourceAnnotationId": "698e04cb85335d04c814ea67",
|
|
521
|
+
"createdBy": "2474131300352"
|
|
522
|
+
}
|
|
523
|
+
]
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
- `jiraIssueKey` — human-readable key (e.g. `PROJ-1`); use for display.
|
|
529
|
+
- `jiraIssueUrl` — direct link to the issue.
|
|
530
|
+
- `sourceAnnotationId` — the annotation the issue was created/linked from; may differ from the
|
|
531
|
+
annotation carrying the integration when linked from a reply.
|
|
532
|
+
|
|
533
|
+
---
|