@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.
Files changed (360) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/LICENSE-UNITY-COMPANION.md +122 -0
  3. package/LICENSE.md +31 -0
  4. package/NOTICE.md +90 -0
  5. package/README.md +273 -2
  6. package/cordis.patch.yml +22 -0
  7. package/docs/design.md +297 -0
  8. package/icon.svg +16 -0
  9. package/lib/frontmatter.js +392 -0
  10. package/lib/gating.js +105 -0
  11. package/lib/harness.js +16 -0
  12. package/lib/index.js +171 -0
  13. package/lib/project.js +210 -0
  14. package/lib/registry.js +268 -0
  15. package/lib/requirements.js +214 -0
  16. package/lib/skills.js +191 -0
  17. package/lib/types/frontmatter.d.ts +84 -0
  18. package/lib/types/gating.d.ts +80 -0
  19. package/lib/types/harness.d.ts +152 -0
  20. package/lib/types/index.d.ts +75 -0
  21. package/lib/types/project.d.ts +93 -0
  22. package/lib/types/registry.d.ts +96 -0
  23. package/lib/types/requirements.d.ts +67 -0
  24. package/lib/types/skills.d.ts +54 -0
  25. package/lib/types/watch.d.ts +34 -0
  26. package/lib/watch.js +84 -0
  27. package/locale/en.json +6 -0
  28. package/locale/zh.json +6 -0
  29. package/package.json +70 -4
  30. package/skills/2d-pixel-perfect/SKILL.md +208 -0
  31. package/skills/2d-pixel-perfect/references/api-reference.md +81 -0
  32. package/skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
  33. package/skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
  34. package/skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
  35. package/skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
  36. package/skills/asset-transformer-toolkit/SECURITY.md +15 -0
  37. package/skills/asset-transformer-toolkit/SKILL.md +39 -0
  38. package/skills/asset-transformer-toolkit/references/create-importer.md +121 -0
  39. package/skills/asset-transformer-toolkit/references/lods.md +61 -0
  40. package/skills/asset-transformer-toolkit/references/rule-api.md +154 -0
  41. package/skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
  42. package/skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
  43. package/skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
  44. package/skills/audio-setup-mixers/SECURITY.md +16 -0
  45. package/skills/audio-setup-mixers/SKILL.md +127 -0
  46. package/skills/audio-setup-mixers/references/api.md +162 -0
  47. package/skills/build-gtk/SECURITY.md +16 -0
  48. package/skills/build-gtk/SKILL.md +200 -0
  49. package/skills/build-gtk/references/api-reference.md +33 -0
  50. package/skills/build-gtk/references/graph-api-gaps.md +96 -0
  51. package/skills/build-gtk/references/runtime-and-visualization.md +191 -0
  52. package/skills/build-gtk/references/state-machine-api.md +270 -0
  53. package/skills/build-gtk/references/where-the-docs-stop.md +49 -0
  54. package/skills/build-live-game/SKILL.md +159 -0
  55. package/skills/build-live-game/references/achievements.md +757 -0
  56. package/skills/build-live-game/references/apis.md +271 -0
  57. package/skills/build-live-game/references/authentication.md +431 -0
  58. package/skills/build-live-game/references/battlepass.md +904 -0
  59. package/skills/build-live-game/references/blueprints-and-samples.md +75 -0
  60. package/skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
  61. package/skills/build-live-game/references/cloud-code-modules.md +1276 -0
  62. package/skills/build-live-game/references/cloud-code.md +58 -0
  63. package/skills/build-live-game/references/cloud-save.md +464 -0
  64. package/skills/build-live-game/references/deployment.md +231 -0
  65. package/skills/build-live-game/references/orientation.md +30 -0
  66. package/skills/build-live-game/references/player-account.md +821 -0
  67. package/skills/build-live-game/references/remote-config.md +96 -0
  68. package/skills/build-live-game/references/services-overview.md +76 -0
  69. package/skills/build-live-game/references/tooling.md +375 -0
  70. package/skills/build-live-game/references/ugs-cli.md +86 -0
  71. package/skills/craft-game-floors/SECURITY.md +23 -0
  72. package/skills/craft-game-floors/SKILL.md +134 -0
  73. package/skills/craft-game-floors/references/art-direction.md +85 -0
  74. package/skills/craft-game-floors/references/camera-rigs.md +51 -0
  75. package/skills/craft-game-floors/references/character-motion.md +35 -0
  76. package/skills/craft-game-floors/references/game-audio.md +47 -0
  77. package/skills/craft-game-floors/references/game-feel.md +68 -0
  78. package/skills/craft-game-floors/references/game-shell.md +45 -0
  79. package/skills/craft-game-floors/references/live-floor.md +35 -0
  80. package/skills/craft-game-floors/references/placeholder-assets.md +35 -0
  81. package/skills/craft-game-floors/references/scene-lighting.md +52 -0
  82. package/skills/craft-game-floors/references/toon-shading.md +34 -0
  83. package/skills/craft-game-floors/references/vfx.md +40 -0
  84. package/skills/craft-game-floors/references/visual-scorecard.md +43 -0
  85. package/skills/create-2d-physics/SECURITY.md +16 -0
  86. package/skills/create-2d-physics/SKILL.md +128 -0
  87. package/skills/create-2d-physics/references/2d-physics-core.md +155 -0
  88. package/skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
  89. package/skills/create-tile-palette-or-rule-tiles/SKILL.md +95 -0
  90. package/skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
  91. package/skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
  92. package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +37 -0
  93. package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +219 -0
  94. package/skills/create-tile-palette-or-rule-tiles/references/ruletile.md +95 -0
  95. package/skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
  96. package/skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
  97. package/skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
  98. package/skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
  99. package/skills/fix-3d-physics-collisions/SECURITY.md +17 -0
  100. package/skills/fix-3d-physics-collisions/SKILL.md +139 -0
  101. package/skills/fix-3d-physics-collisions/references/collision-checklist.md +80 -0
  102. package/skills/fix-3d-physics-collisions/references/collision-debugger.md +18 -0
  103. package/skills/fix-3d-physics-collisions/references/console-errors-table.md +9 -0
  104. package/skills/fix-3d-physics-collisions/references/kinematic-trigger-facts.md +18 -0
  105. package/skills/fix-3d-physics-collisions/references/other-symptoms.md +29 -0
  106. package/skills/fix-3d-physics-collisions/references/raycast-checklist.md +8 -0
  107. package/skills/fix-3d-physics-collisions/references/topic-map.md +42 -0
  108. package/skills/fix-3d-physics-collisions/references/trigger-checklist.md +9 -0
  109. package/skills/fix-3d-physics-collisions/scripts/CollisionDebugger.cs +561 -0
  110. package/skills/generate-editor-search-query/SECURITY.md +17 -0
  111. package/skills/generate-editor-search-query/SKILL.md +117 -0
  112. package/skills/generate-editor-search-query/references/open-search-window.md +70 -0
  113. package/skills/generate-editor-search-query/references/query-patterns.md +124 -0
  114. package/skills/implement-in-app-purchases/SKILL.md +82 -0
  115. package/skills/implement-in-app-purchases/references/api-details.md +41 -0
  116. package/skills/implement-in-app-purchases/references/api-notes.md +105 -0
  117. package/skills/implement-in-app-purchases/references/codeless-catalog.md +197 -0
  118. package/skills/implement-in-app-purchases/references/convert-adapty.md +270 -0
  119. package/skills/implement-in-app-purchases/references/convert-essentialkit.md +239 -0
  120. package/skills/implement-in-app-purchases/references/convert-revenuecat.md +277 -0
  121. package/skills/implement-in-app-purchases/references/convert-unipay.md +145 -0
  122. package/skills/implement-in-app-purchases/references/migration-v4-to-v5.md +46 -0
  123. package/skills/implement-in-app-purchases/references/path-add-iap-to-new-project.md +197 -0
  124. package/skills/implement-in-app-purchases/references/path-convert-native-google-billing.md +302 -0
  125. package/skills/implement-in-app-purchases/references/path-convert-native-storekit.md +357 -0
  126. package/skills/implement-in-app-purchases/references/path-implement-iap-d2c.md +253 -0
  127. package/skills/implement-in-app-purchases/references/platform-notes.md +55 -0
  128. package/skills/implement-in-app-purchases/references/pre-check.md +207 -0
  129. package/skills/implement-in-app-purchases/references/topic-map.md +46 -0
  130. package/skills/initialize-ai-navigation/SKILL.md +109 -0
  131. package/skills/initialize-ai-navigation/references/navigation-system.md +793 -0
  132. package/skills/initialize-ai-navigation/references/topic-map.md +66 -0
  133. package/skills/levelplay-unity-integration/SKILL.md +122 -0
  134. package/skills/levelplay-unity-integration/references/adding-more-ad-formats.md +15 -0
  135. package/skills/levelplay-unity-integration/references/banner-api.md +927 -0
  136. package/skills/levelplay-unity-integration/references/best-practices.md +604 -0
  137. package/skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
  138. package/skills/levelplay-unity-integration/references/examples.md +10 -0
  139. package/skills/levelplay-unity-integration/references/ilrd-api.md +337 -0
  140. package/skills/levelplay-unity-integration/references/initialization-api.md +851 -0
  141. package/skills/levelplay-unity-integration/references/interstitial-api.md +907 -0
  142. package/skills/levelplay-unity-integration/references/ios-setup.md +463 -0
  143. package/skills/levelplay-unity-integration/references/migration-sdk-9.md +666 -0
  144. package/skills/levelplay-unity-integration/references/privacy-settings.md +593 -0
  145. package/skills/levelplay-unity-integration/references/production-release-checklist.md +22 -0
  146. package/skills/levelplay-unity-integration/references/rewarded-api.md +918 -0
  147. package/skills/levelplay-unity-integration/references/step-0-new-or-migration.md +8 -0
  148. package/skills/levelplay-unity-integration/references/step-1-verify-environment.md +4 -0
  149. package/skills/levelplay-unity-integration/references/step-10-testing.md +15 -0
  150. package/skills/levelplay-unity-integration/references/step-2-business-goals.md +12 -0
  151. package/skills/levelplay-unity-integration/references/step-3-install-sdk.md +55 -0
  152. package/skills/levelplay-unity-integration/references/step-4-native-dependencies.md +22 -0
  153. package/skills/levelplay-unity-integration/references/step-5-app-key-and-ad-units.md +18 -0
  154. package/skills/levelplay-unity-integration/references/step-6-5-privacy-and-regulation.md +51 -0
  155. package/skills/levelplay-unity-integration/references/step-6-admob-keys.md +16 -0
  156. package/skills/levelplay-unity-integration/references/step-7-initialize.md +50 -0
  157. package/skills/levelplay-unity-integration/references/step-8-ad-unit-strategy.md +16 -0
  158. package/skills/levelplay-unity-integration/references/step-9-implement-ad-units.md +66 -0
  159. package/skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
  160. package/skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
  161. package/skills/localize-unity-project/SKILL.md +159 -0
  162. package/skills/localize-unity-project/references/api-notes.md +15 -0
  163. package/skills/localize-unity-project/references/cjk-fonts.md +83 -0
  164. package/skills/localize-unity-project/references/docs-map.md +42 -0
  165. package/skills/localize-unity-project/references/documentation-lookup.md +33 -0
  166. package/skills/localize-unity-project/references/locale-switching.md +17 -0
  167. package/skills/localize-unity-project/references/table-completeness-check.md +47 -0
  168. package/skills/localize-unity-project/references/translating-existing-project.md +47 -0
  169. package/skills/localize-unity-project/references/translation-strategy.md +41 -0
  170. package/skills/localize-unity-project/references/troubleshooting.md +12 -0
  171. package/skills/localize-unity-project/scripts/L10nBatchProcessor.cs +191 -0
  172. package/skills/localize-unity-project/scripts/LocalizedFontAsset.cs +18 -0
  173. package/skills/manage-sprite-atlas/SKILL.md +202 -0
  174. package/skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
  175. package/skills/manage-sprite-atlas/references/advanced-manual-authoring.md +19 -0
  176. package/skills/manage-sprite-atlas/references/api.md +382 -0
  177. package/skills/manage-sprite-atlas/references/best-practices.md +183 -0
  178. package/skills/manage-sprite-atlas/references/common-errors.md +123 -0
  179. package/skills/manage-sprite-atlas/references/complete-workflow.md +61 -0
  180. package/skills/manage-sprite-atlas/references/custom-packing.md +147 -0
  181. package/skills/manage-sprite-atlas/references/delivery-mechanism.md +30 -0
  182. package/skills/manage-sprite-atlas/references/key-requirements.md +21 -0
  183. package/skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
  184. package/skills/manage-sprite-atlas/references/namespaces.md +15 -0
  185. package/skills/manage-sprite-atlas/references/v2-architecture.md +21 -0
  186. package/skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
  187. package/skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
  188. package/skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
  189. package/skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
  190. package/skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
  191. package/skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
  192. package/skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
  193. package/skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
  194. package/skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
  195. package/skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
  196. package/skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
  197. package/skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
  198. package/skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
  199. package/skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
  200. package/skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
  201. package/skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
  202. package/skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
  203. package/skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
  204. package/skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
  205. package/skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
  206. package/skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
  207. package/skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
  208. package/skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
  209. package/skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
  210. package/skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
  211. package/skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
  212. package/skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
  213. package/skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
  214. package/skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
  215. package/skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
  216. package/skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
  217. package/skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
  218. package/skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
  219. package/skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
  220. package/skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
  221. package/skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
  222. package/skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
  223. package/skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
  224. package/skills/migrate-birp-to-urp/SECURITY.md +16 -0
  225. package/skills/migrate-birp-to-urp/SKILL.md +167 -0
  226. package/skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
  227. package/skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
  228. package/skills/migrate-birp-to-urp/references/conversion-and-rendering-triage.md +113 -0
  229. package/skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
  230. package/skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
  231. package/skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
  232. package/skills/migrate-birp-to-urp/references/parity-validation-and-troubleshooting.md +114 -0
  233. package/skills/migrate-birp-to-urp/references/preflight-and-urp-setup.md +195 -0
  234. package/skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
  235. package/skills/new-unity-project/SECURITY.md +26 -0
  236. package/skills/new-unity-project/SKILL.md +171 -0
  237. package/skills/new-unity-project/references/checklist.md +18 -0
  238. package/skills/new-unity-project/references/common-mistakes.md +15 -0
  239. package/skills/new-unity-project/references/skill-setup.md +66 -0
  240. package/skills/new-unity-project/references/step-1-concept.md +13 -0
  241. package/skills/new-unity-project/references/step-2-platforms-and-create.md +31 -0
  242. package/skills/new-unity-project/references/step-3-join-and-reconcile.md +16 -0
  243. package/skills/new-unity-project/references/step-4-source-control.md +9 -0
  244. package/skills/new-unity-project/references/step-5-packages.md +18 -0
  245. package/skills/new-unity-project/references/step-6-identity-and-floors.md +20 -0
  246. package/skills/new-unity-project/references/step-7-visual-baseline.md +75 -0
  247. package/skills/new-unity-project/references/step-8-first-commit.md +21 -0
  248. package/skills/new-unity-project/references/step-9-handoff.md +23 -0
  249. package/skills/optimize-audio/SECURITY.md +16 -0
  250. package/skills/optimize-audio/SKILL.md +120 -0
  251. package/skills/optimize-audio/references/diagnostics.md +42 -0
  252. package/skills/optimize-audio/references/troubleshooting.md +41 -0
  253. package/skills/optimize-audio/resources/audio-import-api.md +149 -0
  254. package/skills/optimize-audio/resources/platform-settings.md +48 -0
  255. package/skills/optimize-text-mesh-pro/SKILL.md +181 -0
  256. package/skills/optimize-text-mesh-pro/references/dynamic-atlas-and-profiling.md +28 -0
  257. package/skills/optimize-text-mesh-pro/references/topic-map.md +36 -0
  258. package/skills/optimize-web/SECURITY.md +16 -0
  259. package/skills/optimize-web/SKILL.md +157 -0
  260. package/skills/optimize-web/references/editor-csharp.md +120 -0
  261. package/skills/optimize-web/references/topic-map.md +49 -0
  262. package/skills/optimize-web/references/troubleshooting.md +45 -0
  263. package/skills/optimize-web/references/understand-request.md +19 -0
  264. package/skills/optimize-web/references/web-assets-quality.md +59 -0
  265. package/skills/optimize-web/references/web-player-settings.md +39 -0
  266. package/skills/optimize-web/references/web-profiling-memory.md +71 -0
  267. package/skills/optimize-web/scripts/WebOptimizer.cs +46 -0
  268. package/skills/optimize-web/scripts/toktx-examples.sh +11 -0
  269. package/skills/setup-multiplayer-services/SKILL.md +36 -0
  270. package/skills/setup-multiplayer-services/references/dgs-entrypoint.md +79 -0
  271. package/skills/setup-multiplayer-services/references/entrypoints.md +213 -0
  272. package/skills/setup-multiplayer-services/references/examples.md +33 -0
  273. package/skills/setup-multiplayer-services/references/implementation-fit.md +30 -0
  274. package/skills/setup-multiplayer-services/references/underlying-services.md +11 -0
  275. package/skills/setup-multiplayer-services/references/workflows-prerequisites.md +17 -0
  276. package/skills/setup-vivox-voice-chat/SECURITY.md +16 -0
  277. package/skills/setup-vivox-voice-chat/SKILL.md +166 -0
  278. package/skills/setup-vivox-voice-chat/references/api-reference-lookup.md +28 -0
  279. package/skills/setup-vivox-voice-chat/references/docs-topic-map.md +13 -0
  280. package/skills/setup-vivox-voice-chat/references/events-and-participants.md +79 -0
  281. package/skills/setup-vivox-voice-chat/references/init-and-login.md +92 -0
  282. package/skills/setup-vivox-voice-chat/references/text-chat.md +93 -0
  283. package/skills/setup-vivox-voice-chat/references/troubleshooting.md +47 -0
  284. package/skills/setup-vivox-voice-chat/references/voice-channels.md +92 -0
  285. package/skills/shader-graph-create-custom-node/SKILL.md +25 -0
  286. package/skills/shader-graph-create-custom-node/resources/all_hints.hlsl +182 -0
  287. package/skills/sprite-editor/SECURITY.md +16 -0
  288. package/skills/sprite-editor/SKILL.md +66 -0
  289. package/skills/sprite-editor/references/api_reference.md +151 -0
  290. package/skills/sprite-editor/references/background.md +112 -0
  291. package/skills/sprite-editor/references/templates.md +72 -0
  292. package/skills/sprite-editor/scripts/AutomaticSliceTexture.cs +40 -0
  293. package/skills/sprite-editor/scripts/GenerateNewSpriteRects.cs +200 -0
  294. package/skills/sprite-editor/scripts/GetTextureSourceImageSize.cs +32 -0
  295. package/skills/sprite-editor/scripts/GetTextureToSlice.cs +55 -0
  296. package/skills/sprite-editor/scripts/GridSliceTexture.cs +40 -0
  297. package/skills/sprite-editor/scripts/IsometricSliceTexture.cs +141 -0
  298. package/skills/sprite-editor/scripts/README.md +134 -0
  299. package/skills/sprite-editor/scripts/SetPivotExample.cs +58 -0
  300. package/skills/sprite-editor/scripts/SpriteToPng.cs +88 -0
  301. package/skills/sprite-segment-3x3grid/SKILL.md +177 -0
  302. package/skills/sprite-segment-3x3grid/references/topic-map.md +37 -0
  303. package/skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
  304. package/skills/ui/SKILL.md +142 -0
  305. package/skills/ui-imgui/SKILL.md +180 -0
  306. package/skills/ui-imgui/references/gui-elements.md +156 -0
  307. package/skills/ui-imgui/references/templates.md +141 -0
  308. package/skills/ui-ugui/SKILL.md +217 -0
  309. package/skills/ui-ugui/references/layout-and-anchors.md +61 -0
  310. package/skills/ui-ugui/references/scrollview-setup.md +29 -0
  311. package/skills/ui-uitk/SKILL.md +229 -0
  312. package/skills/ui-uitk/references/common-issues.md +74 -0
  313. package/skills/ui-uitk/references/custom-elements.md +241 -0
  314. package/skills/ui-uitk/references/painter2d.md +282 -0
  315. package/skills/ui-uitk/references/pointermanipulator-guide.md +94 -0
  316. package/skills/ui-uitk/references/svg-icons.md +136 -0
  317. package/skills/ui-uitk/references/ui-runtime-binding.md +234 -0
  318. package/skills/ui-uitk/references/uss-guide.md +138 -0
  319. package/skills/unity-cli/CHANGELOG.md +524 -0
  320. package/skills/unity-cli/SECURITY.md +68 -0
  321. package/skills/unity-cli/SKILL.md +160 -0
  322. package/skills/unity-cli/references/auth-license-cloud.md +318 -0
  323. package/skills/unity-cli/references/bootstrap-project.md +177 -0
  324. package/skills/unity-cli/references/build-run-test.md +555 -0
  325. package/skills/unity-cli/references/catalog-plugins.md +86 -0
  326. package/skills/unity-cli/references/ci-recipes.md +76 -0
  327. package/skills/unity-cli/references/cloud-automation.md +819 -0
  328. package/skills/unity-cli/references/cloud-workflows.md +19 -0
  329. package/skills/unity-cli/references/collaboration.md +533 -0
  330. package/skills/unity-cli/references/config-hub.md +239 -0
  331. package/skills/unity-cli/references/diagnostics-maintenance.md +718 -0
  332. package/skills/unity-cli/references/docs-workflow.md +179 -0
  333. package/skills/unity-cli/references/editor-targeting.md +29 -0
  334. package/skills/unity-cli/references/editors-install.md +490 -0
  335. package/skills/unity-cli/references/environment-variables.md +42 -0
  336. package/skills/unity-cli/references/exit-codes.md +47 -0
  337. package/skills/unity-cli/references/global-flags.md +32 -0
  338. package/skills/unity-cli/references/integration-advanced.md +1130 -0
  339. package/skills/unity-cli/references/notes.md +20 -0
  340. package/skills/unity-cli/references/notifications.md +39 -0
  341. package/skills/unity-cli/references/playmode-verification-loop.md +279 -0
  342. package/skills/unity-cli/references/projects-templates.md +997 -0
  343. package/skills/unity-cli/references/scene-editing-preflight.md +25 -0
  344. package/skills/unity-cli/references/setup-and-help.md +54 -0
  345. package/skills/unity-cli/references/version-control.md +612 -0
  346. package/skills/unity-package-management/SKILL.md +169 -0
  347. package/skills/unity-package-management/references/discovering-packages.md +66 -0
  348. package/skills/unity-package-management/references/headless-run.md +31 -0
  349. package/skills/unity-package-management/references/installer-script.md +92 -0
  350. package/skills/unity-package-management/references/select-packages.md +126 -0
  351. package/skills/unity-pipeline/SECURITY.md +17 -0
  352. package/skills/unity-pipeline/SKILL.md +205 -0
  353. package/skills/unity-pipeline/references/csharp-eval.md +23 -0
  354. package/skills/unity-pipeline/references/multiplayer-play-mode.md +103 -0
  355. package/skills/urp-postprocessing/SECURITY.md +16 -0
  356. package/skills/urp-postprocessing/SKILL.md +188 -0
  357. package/skills/urp-postprocessing/references/code-templates.md +150 -0
  358. package/skills/urp-postprocessing/references/effect-reference.md +86 -0
  359. package/skills/validate-urp-render-graph-renderer-feature/SKILL.md +92 -0
  360. package/skills/validate-urp-render-graph-renderer-feature/references/validation-checklist.md +179 -0
package/docs/design.md ADDED
@@ -0,0 +1,297 @@
1
+ # dsh-unity 设计说明
2
+
3
+ `@aqian0/dsh-unity` 把 34 个 Unity 技能作为 DSH 技能提供出去。它与"把 Markdown 目录挂进技能注册表"的区别在于**在哪注册**和**怎么服务**:注册按 agent 进行,目录按会话所在工程筛选,工程事实写进该会话的运行时上下文,技能目录的变化实时刷新。本文记录这套设计。
4
+
5
+ 代码是唯一事实来源:`src/index.ts`、`src/registry.ts`、`src/project.ts`、`src/gating.ts`、`src/requirements.ts`、`src/watch.ts`、`src/skills.ts`、`src/frontmatter.ts`、`src/harness.ts`;本文与代码冲突时以代码为准。文中提到"代码"时指 `src/*.ts`,`lib/*.js` 只在讨论构建产物时出现。
6
+
7
+ ## 1. 目标与范围
8
+
9
+ - **一个包,34 个技能**:装进 profile 后,技能出现在会话目录里,按需加载。
10
+ - **目录跟随会话**:不在 Unity 工程里只保留起步技能;在工程里按 Editor 版本与已装包筛掉不适用的技能。
11
+ - **事实交给模型**:把检测到的工程事实与"哪些技能被隐藏、为什么"写进运行时上下文,让模型陈述而不是猜。
12
+ - **零运行时依赖**:只用 Node 内置模块(`node:fs`、`node:path`、`node:child_process` 经服务封装);构建只在仓库侧发生(`npm run build` / `prepack` 产出 `lib/`),安装已发布的包时不再编译,也没有第三方安装依赖。
13
+ - **可卸载**:所有监听、watcher 与注册都在 `ctx.effect` 里,fiber 释放时统一注销。
14
+
15
+ 不在范围内:技能正文怎么写、什么时候该用哪个技能(由模型按描述判断),以及技能的版本管理。
16
+
17
+ ## 2. 组成
18
+
19
+ | 文件 | 作用 |
20
+ | --- | --- |
21
+ | `src/index.ts` | 行入口:校验配置、共享解析缓存、创建 agent registry、监听 `agent/created`/`agent/disposed`、启动 watcher、在 fiber 释放时统一注销 |
22
+ | `src/registry.ts` | 每个 agent 一份注册;事实与项目覆盖的缓存;provider 实现;全局回退 provider |
23
+ | `src/project.ts` | 工程检测(向上找 marker、Editor 版本、manifest、Editor 锁、`unity` CLI)、工程自有技能名、`factsKey` |
24
+ | `src/gating.ts` | 可见性决策(工作区技能、需求、项目覆盖)、候选改写、运行时上下文渲染 |
25
+ | `src/requirements.ts` | 版本与包的解析、比较,需求的读取与求值 |
26
+ | `src/watch.ts` | `skills/` 的 `fs.watch`,200ms 防抖,只在 `SKILL.md` 变化时触发 |
27
+ | `src/skills.ts` | 技能发现与加载,外加按 (path, mtime, size) 命中的共享解析缓存 |
28
+ | `src/frontmatter.ts` | 自包含的 YAML 子集读取器与 invocation 解析 |
29
+ | `src/harness.ts` | 本包用到的 harness 契约的结构化声明(provider、prompt context、agent scope、可选服务),使构建不需要依赖 `@deepseek-ai/*` |
30
+ | `cordis.patch.yml` | 只插入一个 Host 行 `unity-skills`(`config: {}`) |
31
+ | `skills/` | 34 个技能目录,每个是 `<name>/SKILL.md` + 可选的 `references/`、`scripts/`、`resources/` |
32
+
33
+ **构建形态**与官方插件包一致:仓库里是 `src/` 下的 TypeScript,`npm run build`(`tsc -p tsconfig.json`)产出 `lib/*.js` 与 `lib/types/*.d.ts`,`prepack` 会再跑一次构建,因此 `npm pack` 出来的 tarball 只有编译产物、`cordis.patch.yml`、`locale/`、`skills/`、图标,以及 `README.md`、`docs/`、`CHANGELOG.md` 与 `LICENSE.md`、`LICENSE-UNITY-COMPANION.md`、`NOTICE.md`。`lib/` 被 `.gitignore` 忽略,不随仓库提交;按目录安装前需要先构建。`tsconfig.test.json` 只做类型检查(`src/`、`test/`、`scripts/`),测试与脚本由 Node 内置的类型剥离直接运行 `.ts`(`engines` 要求 Node.js >=22.18)。
34
+
35
+ 此外,`locale/en.json` / `locale/zh.json` 与 `icon.svg` 提供插件页的标题、描述与图标(图标使用 Lucide 的 `gamepad-2` 图形,按 ISC 许可,见 `NOTICE.md`)。许可证按路径划分:整合代码(`src/`、`test/`、`scripts/`、配置与文档)是 MIT,全文见 `LICENSE.md`;`skills/` 下的技能内容版权属于 Unity Technologies,按 Unity Companion License 使用,全文见 `LICENSE-UNITY-COMPANION.md`;各覆盖哪些路径由 `NOTICE.md` 记录。这些文件与 `CHANGELOG.md` 一起随包发布。`scripts/validate-skills.ts` 与 `test/*.test.ts` 是开发期工具(见 7.3 与第 9 节)。
36
+
37
+ ## 3. 为什么用 provider,为什么必须按 agent 注册
38
+
39
+ ### 3.1 为什么不是纯配置
40
+
41
+ **备选 A:纯配置 bundle** —— 把某个目录加进 `skill-filesystem` 的 `customSkillDirs`。
42
+
43
+ - 需要绝对路径(或用 `!!js` 在补丁里求值),路径随 checkout 变,换机器就断。
44
+ - `customSkillDirs` 是固定的扫描根,不能按工程(Editor 版本、已装包)决定目录内容。
45
+ - `source` 标签只能是 `custom`,和项目/用户的自定义根混在一起,无法单独启停或标识。
46
+
47
+ **备选 B:在 `apply()` 里逐个 `ctx.skills.register()`** —— 把 34 个技能注册成 runtime 条目。
48
+
49
+ - 启动时要把 34 份正文读进内存,失去"目录只放名称与描述、正文按需加载"的收益。
50
+ - runtime 条目的排序语义是固定的(同层内 project > runtime > user),没有可配置的 rank 落点。
51
+ - 每个条目都要手工程造 `SkillDefinition`,与"把磁盘上的技能目录当作目录包"的模型不符。
52
+
53
+ **结论**:注册一个 provider。它解析包内技能目录(`import.meta.url`),延迟发现、懒加载,自带 rank、`source` 标签与 `resourceBase`。
54
+
55
+ ### 3.2 为什么必须按 agent 注册
56
+
57
+ DSH 把技能注册按**层**组织:一次注册落在调用上下文所在的层。bundle 行是 host 行,落在全局层;agent 预设的 standing composition 落在该预设的层。读取时把全局层和观察 scope 的层链合并,规则是——**最近的层直接胜出重名,rank 只在同一层内比较**。
58
+
59
+ 两个后果决定了设计:
60
+
61
+ 1. **只在全局层注册会输掉同名技能**:预设层里挂着 `skill-filesystem`,它扫描到的同名技能属于更近的层,"最近的层胜出"让全局 provider 的 rank 形同虚设。
62
+ 2. **全局注册无法按工程变化**:一份全局目录要被所有会话共用,不能按某个会话的 Editor 版本和包列表裁剪。
63
+
64
+ 所以 `apply()` 不做"注册一次",而是监听 agent 生命周期,拿到每个 agent 后经 `agent.ctx` 把 provider 注册进**该 agent 自己的层**。这样它在该层里赢得自己拥有的名字,目录也可以按这个 agent 的工程计算。这条胜负关系由层的位置决定,不靠 `rank` 或运气:插件注册在 agent 自己的层,比全局层和外部技能根都近,所以外部根里的同名副本不会盖掉插件的版本。
65
+
66
+ ### 3.3 回退路径
67
+
68
+ 如果某个 profile 里 `agent.ctx` 够不到 `skills`(或者根本没有 `agents` 服务),插件注册**一份全局 provider** 并记录一条警告(每行只注册一次)。这条路径:
69
+
70
+ - 仍按每次查询的 `cwd` 做工程门控;
71
+ - 没有 `unity:project` 上下文(上下文是 agent 作用域的贡献);
72
+ - 同名的预设层技能会重新胜出(因为回到了全局层)。
73
+
74
+ ## 4. provider 契约与 per-agent 生命周期
75
+
76
+ ### 4.1 注册表契约
77
+
78
+ `ctx.skills.registerProvider(create)` 在插件 `apply()` 期间**同步**注册,注册进入调用上下文所在层。同层重名与保留名会抛错。`create` 收到 `control`:`signal` 是本注册的生命周期,`invalidate()` 用来主动让注册表丢弃已缓存的目录;fiber 释放时注销 provider 并让缓存失效。
79
+
80
+ 本包的 provider 是 `{ name, list(options), get(candidate, options) }`:
81
+
82
+ - `list()` 返回**裸数组**也是合法观察结果——注册表把它归一化为 `{ candidates, complete: true }`,即"这轮发现是完整的",允许进缓存。本包按目录整体读取,没有"部分根失败"这种半完成状态。
83
+ - `get()` 直接落到共享 reader 的 `load()`,每次重读文件。
84
+
85
+ ### 4.2 每个 agent 的注册状态
86
+
87
+ `src/registry.ts` 为每个 agent 保存:会话 id、agent 引用、provider 注册的 `control`、最近一次的工程事实与隐藏列表、`factsKey`、以及两个 disposer(provider 注册和上下文条目)。
88
+
89
+ - **解析工作目录**:优先 `ctx.workingDirectory.get(session)`,退回 `session.header.cwd`;每次 `list()` 都重新解析,所以会话切换工作目录会立即重新门控。
90
+ - **注册**:`agent.ctx.skills.registerProvider(...)`。拿不到 `skills` 时 `add()` 返回 `unavailable`,由 `src/index.ts` 触发一次全局回退。
91
+ - **上下文**:若 `injectContext` 且 `agent.ctx.systemPrompt` 可用,注册 `{ name: 'unity:project', order: 180, text: () => renderContext(...) ?? '' }`,每次组装提示词时重算。
92
+ - **预热**:注册完成后立刻读一次工程事实,让第一次提示词组装就带上上下文。
93
+ - **注销**:`agent/disposed` 时释放该 agent 的 provider 注册与上下文条目;fiber 释放时释放全部监听、watcher 与注册。
94
+ - **启动时已存在的 agent**:用 `ctx.agents.list()` 逐个 bootstrap,不需要等新会话。
95
+
96
+ ### 4.3 候选字段
97
+
98
+ | 字段 | 值 |
99
+ | --- | --- |
100
+ | `name` | frontmatter `name`(kebab-case) |
101
+ | `description` | frontmatter `description` |
102
+ | `whenToUse` | frontmatter `whenToUse`,有才带(当前 34 个都没写) |
103
+ | `invocation` | 由 `disable-model-invocation` / `user-invocable` 解析,门控会再叠加 `modelInvocable` |
104
+ | `requirements` | 从 `required_editor_version` / `required_packages` 读出的需求声明,供门控使用 |
105
+ | `provider` | `providerName`,默认 `unity` |
106
+ | `source` | 固定 `unity`(自定义标签,不参与优先级) |
107
+ | `rank` | `rank` 配置,默认 240 |
108
+ | `locator` | `{ dir, file }`,加载时传回 provider |
109
+ | `resourceBase` | `{ kind: 'directory', path: <技能目录> }` |
110
+ | `path` | `SKILL.md` 路径(加载时换成 `realpath`,便于预览) |
111
+ | `metadata` | frontmatter `metadata`(纯映射时透传) |
112
+
113
+ ## 5. 技能 frontmatter 的处理
114
+
115
+ ### 5.1 读了哪些字段
116
+
117
+ 对 34 个 `SKILL.md` 解析后的统计(字段 / 出现次数 / 处理):
118
+
119
+ | 字段 | 次数 | 处理 |
120
+ | --- | --- | --- |
121
+ | `name` | 34 | 读取;必须是 kebab-case,与目录名不一致时告警但仍收录 |
122
+ | `description` | 34 | 读取;为空则跳过该技能 |
123
+ | `required_editor_version` | 2 | 读取并**执行**:与工程 Editor 版本比较,不满足则隐藏该技能 |
124
+ | `required_packages` | 5 | 读取并**执行**:包缺失或版本不满足则隐藏该技能 |
125
+ | `allowed-tools` | 5 | 解析但不执行(DSH 没有技能级工具白名单) |
126
+ | `modes` | 2 | 解析但不执行(`[agent, ask]` 形式的模式声明) |
127
+ | `metadata` | 1 | 纯映射时透传到候选与定义 |
128
+ | `enabled` | 1 | 解析但不执行 |
129
+ | `whenToUse` | 0 | DSH 支持,没有技能使用 |
130
+ | `disable-model-invocation` | 0 | DSH 支持,没有技能使用 |
131
+ | `user-invocable` | 0 | DSH 支持,没有技能使用 |
132
+
133
+ ### 5.2 需求声明
134
+
135
+ 有需求的技能共 7 个:
136
+
137
+ | 技能 | 声明 |
138
+ | --- | --- |
139
+ | `build-gtk` | Editor `>=6000.6` |
140
+ | `fix-3d-physics-collisions` | Editor `>=6000.3` |
141
+ | `asset-transformer-toolkit` | `com.unity.industry.toolkit >=4.0.0` |
142
+ | `create-tile-palette-or-rule-tiles` | `com.unity.2d.tilemap >=1.0.0`、`com.unity.2d.tilemap.extras >=4.0.0` |
143
+ | `setup-vivox-voice-chat` | `com.unity.services.vivox >=16.4.0` |
144
+ | `shader-graph-create-custom-node` | `com.unity.shadergraph >=17.5.0` |
145
+ | `urp-postprocessing` | `com.unity.render-pipelines.universal >=14.0.0` |
146
+
147
+ `src/requirements.ts` 只支持这些技能用到的形状:算子 `>=`、`>`、`<=`、`<`、`=`、`^`、`~`,逗号或空格分隔多个比较,算子与版本之间可以有空格。两段版本(`6000.6`)表示一条发布线(`>=6000.6 <6000.7`),三段版本是精确版本。Editor 版本会去掉 `f1`/`b5` 这类构建通道后缀再比较;包版本保留预发布标签,且发布版高于预发布版。
148
+
149
+ 求值结果有三种,而不是两种:
150
+
151
+ - **满足**:技能可见;
152
+ - **不满足**:技能隐藏,并给出原因(缺哪个包、要求什么版本、工程是什么版本);
153
+ - **未知**(manifest 缺失、版本或范围解析不了):**不隐藏**,只记录"无法检查"。
154
+
155
+ 未知不隐藏是刻意的:一个写错的范围或临时的 manifest 损坏,不应该让技能从目录里静默消失。
156
+
157
+ ### 5.3 invocation 与门控的叠加
158
+
159
+ `parseInvocation()` 先按 frontmatter 得到技能自己的策略:
160
+
161
+ | frontmatter | `modelInvocable` | `userInvocable` |
162
+ | --- | --- | --- |
163
+ | (两者都没写) | `true` | `true` |
164
+ | `disable-model-invocation: true` | `false` | `true` |
165
+ | `user-invocable: false` | `true` | `false` |
166
+ | 两者都写 | 按各自值 | 按各自值 |
167
+
168
+ 只接受 `frontmatterBoolean` 的严格语法(YAML 布尔,以及大小写不敏感的 `true/false`、`yes/no`、`on/off`、`1/0`);拼错的 camelCase 写法会直接报错并跳过该技能,而不是"静默允许"。
169
+
170
+ 门控只在模型可见性上叠加:被隐藏的技能保持 `userInvocable: true`、`modelInvocable: false`,因此它离开模型的目录,但 `/技能名` 仍能载入。34 个技能都没写这两个字段,所以门控是它们唯一的隐藏来源。
171
+
172
+ ### 5.4 resourceBase 与相对路径
173
+
174
+ 技能正文里大量使用技能内相对路径(`references/api-reference.md`、`references/camera-setup-urp.cs` 等)。DSH 的技能消费者在加载正文时会把 `resourceBase` 作为"资源目录"提示一起给出,因此模型可以直接按相对路径读取这些文件,不需要改写正文里的链接。这也是候选与定义都要带 `resourceBase: { kind: 'directory', path: <技能目录> }` 的原因:只给正文不给资源根,`references/` 就成了断链。
175
+
176
+ ### 5.5 解析器的边界
177
+
178
+ `src/frontmatter.ts` 是一个自包含的 YAML 子集读取器,覆盖这些技能用到的语法:顶层 `key: value` 与多层嵌套块映射、块序列与流序列、单/双引号与纯标量、字面块(`|`、`|-`、`|+`)与折叠块(`>`、`>-`、`>+`)、整行注释与纯标量后的行内注释;标量按 YAML 1.2 core schema 解析。
179
+
180
+ 不支持的语法(锚点/别名、多文档、复杂键、tab 缩进)会抛 `SyntaxError`:发现阶段由 `list()` 捕获、跳过该技能并告警;加载阶段直接抛给调用方,不在 provider 里猜值。包不能带 YAML 依赖,而"猜错一个描述"比"少一个技能"更糟。
181
+
182
+ ### 5.6 保留不执行字段的理由
183
+
184
+ `allowed-tools`、`modes`、`enabled` 在技能文件里存在,DSH 不执行它们。删掉只会让信息消失,不会让 DSH 更强;限制写在文档里(README 的"已知限制"与校验脚本的信息项),不是静默行为。校验脚本仍把它们(以及已执行的 `required_*`)列在"信息项"里,因为它按 DSH 认识的键判定,而 DSH 本身不消费这几个键。
185
+
186
+ ## 6. rank 与层边界
187
+
188
+ 同名技能的归属由**层**决定,`rank` 只解决同一层内的先后。
189
+
190
+ | 情况 | 结果 |
191
+ | --- | --- |
192
+ | 与工程自己的 `<工程>/.dsh/skills`、`.agents/skills` 同名 | 插件不提供该名字(`respectProjectRoots`),工程那份生效 |
193
+ | 与 `~/.dsh/skills`、`~/.agents/skills` 等外部副本同名 | 插件在 agent 自己的层里,最近层胜出 → 插件赢 |
194
+ | 与同层 runtime 注册(rank 250)同名 | 同层内按 rank:本包 240 排在前 |
195
+ | 回退到全局 provider 时 | 预设层的同名技能重新胜出 |
196
+
197
+ 默认 `rank: 240` 就是按上表选的:正常路径下重名由层解决,这个值只需排在 runtime 注册(250)之前;它不承担"跨层竞争"的职责,也没有那个能力。
198
+
199
+ 工程自有技能名来自 `<工程>/.dsh/skills` 与 `.agents/skills` 下带 `SKILL.md` 的目录(`readProjectSkillNames`),按工程根缓存 2 秒。命中的名字**整个不提供**,而不是降级为隐藏——这样工程的定制不会被本包遮住。
200
+
201
+ ## 7. 错误与降级
202
+
203
+ 原则:**单个技能坏掉不能拖垮目录;配置写错快速失败;事实未知不隐藏技能。**
204
+
205
+ ### 7.1 检测
206
+
207
+ | 场景 | 行为 | 日志 |
208
+ | --- | --- | --- |
209
+ | 目录不在任何 Unity 工程(找不到 marker) | 返回"无工程",按非工程门控(只留工作区技能) | 无 |
210
+ | `ProjectVersion.txt` 读不出 `m_EditorVersion:` | Editor 版本记为未知,其余事实照常 | 无 |
211
+ | `Packages/manifest.json` 缺失或不是合法 JSON | 包事实未知、渲染管线未知;Editor 版本仍保留 | 无 |
212
+ | `Temp/UnityLockfile` 不存在 | 记为 Editor 未打开 | 无 |
213
+ | `unity` 不在 PATH 或不提供服务 | 记为 CLI 不可用 | 无 |
214
+ | 工程检测本身抛错 | 本次查询按"无工程"处理 | `unity skills: project detection failed for <cwd>: <error>` |
215
+
216
+ 检测全程只读、尽力而为:能读到什么就报什么,读不到就是未知,不抛给调用方。
217
+
218
+ ### 7.2 门控、注册与监视
219
+
220
+ | 场景 | 行为 | 日志 |
221
+ | --- | --- | --- |
222
+ | 需求不满足 | 该候选保留在列表里,但 `modelInvocable: false`,理由写进 hidden 列表 | 无 |
223
+ | 需求无法检查(事实未知) | 不隐藏 | 无 |
224
+ | 工程提供了同名技能 | 该候选被丢弃(不提供) | 无 |
225
+ | agent 的 context 里没有 `skills` 服务 | 触发一次全局回退 | `unity skills: per-agent registration is unavailable …` |
226
+ | 没有 `agents` 服务 | 直接注册全局 provider | 同上 |
227
+ | agent 注册过程中抛错 | 跳过该 agent,不影响其他 agent | `unity skills: agent registration failed: <error>` |
228
+ | 注销时 disposer 抛错 | 继续注销其余部分 | `unity skills: registration cleanup failed: <error>` |
229
+ | watcher 起不来(平台/沙箱限制) | 退回"重启后生效",其余功能不受影响 | `unity skills: cannot watch <dir>, catalog changes need a restart: <error>` |
230
+ | watcher 运行中报错 | 关闭 watcher | `unity skills: skill watcher stopped on <dir>: <error>` |
231
+ | 刷新回调抛错 | 记录警告,watcher 继续 | `unity skills: catalog refresh failed: <error>` |
232
+ | 配置不合法 | 抛 `TypeError`,该插件行加载失败 | 宿主记录加载错误 |
233
+
234
+ 技能文件自身的降级仍由 reader 负责:缺 `SKILL.md`、无 frontmatter、名称不合法、描述为空都会跳过该技能并告警;目录不存在视为空目录;加载时文件消失返回 `undefined`。
235
+
236
+ ### 7.3 校验脚本
237
+
238
+ `scripts/validate-skills.ts` 走插件的真实代码路径(`src/skills.ts` 里 `createUnitySkillReader` 的 `list()`/`load()`、`src/frontmatter.ts` 的 `parseSkillMarkdown`)。
239
+
240
+ | 场景 | 行为 |
241
+ | --- | --- |
242
+ | 缺 `SKILL.md`、frontmatter 不可解析、`name` 不是 kebab-case 或与目录不符、`description` 为空或含 `<`/`>`、重名、正文为空、provider 列不出/载不出某个技能 | failure,退出码 1 |
243
+ | 技能内相对资源引用缺失 | warning |
244
+ | `SKILL.md` 超过 16384 字节 | `size` warning(见第 10 节) |
245
+ | 出现 DSH 不执行的 frontmatter 字段 | 单独作为"信息项"汇总 |
246
+
247
+ ## 8. 刷新、缓存与重启
248
+
249
+ 缓存与失效方式:正文不缓存,其余四层各有各的失效条件。
250
+
251
+ | 缓存 | 键 | 失效方式 |
252
+ | --- | --- | --- |
253
+ | 正文 | 无缓存 | 每次 `load()` 重读文件 |
254
+ | 解析结果 | 文件路径 + `mtimeMs` + `size` | 文件变化或 watcher 清空 |
255
+ | 目录(注册表) | `cwd` + scope 链 + revision | provider 的 `control.invalidate()`、注册变化、provider 注销 |
256
+ | 工程事实 | 工作目录 | 2 秒 TTL(`FACTS_TTL_MS`);`factsKey` 变化时主动 `invalidate()` |
257
+ | 工程自有技能名 | 工程根 | 2 秒 TTL |
258
+
259
+ `factsKey` 由工程根、Editor 版本、渲染管线、Editor 开关状态和包列表拼成。`list()` 每次都重新取事实;键变了就排一个 `queueMicrotask` 调 `control.invalidate()`,让下一次快照按新事实重新门控,而不是等重启。
260
+
261
+ `src/watch.ts` 用 `fs.watch(dir, { recursive: true, persistent: false })` 监视 `skills/`,只对路径以 `SKILL.md` 结尾的事件(或拿不到文件名的整目录事件)反应,按 200ms 防抖合并,随后 `parseCache.clear()` 并让每个 agent 的 `control.invalidate()`。资源文件(`references/` 等)不参与发现,靠加载时读取,不需要刷新。
262
+
263
+ 仍需重启的情况:
264
+
265
+ - 改了 `src/` 里的代码(进程内模块;改完要先 `npm run build`,再重启 DSH 才会加载新的 `lib/`);
266
+ - watcher 起不来或被关闭(退回重启时发现);
267
+ - 替换已安装的包(换 checkout)。
268
+
269
+ ## 9. 验证方式
270
+
271
+ 以下命令都在仓库根目录执行,对任意 checkout 都适用:
272
+
273
+ ```bash
274
+ npm run build # src/ → lib/*.js + lib/types/*.d.ts(发布产物)
275
+ npm run typecheck # tsc -p tsconfig.test.json 检查 src/、test/、scripts/
276
+ npm test # 单元测试,直接运行 TypeScript(Node 内置类型剥离)
277
+ npm run validate # 技能合规性:结构、frontmatter、需求字段、正文体积、资源引用
278
+ npm pack --dry-run # 打包清单:确认 lib/、skills/、文档与许可证文件都在包里
279
+ ```
280
+
281
+ - **`npm run build` / `npm run typecheck`**:TypeScript 无错误;构建产物加载后 provider 能 `list()` 出全部技能。
282
+ - **`npm test`**:覆盖 frontmatter 解析、需求解析与求值、工程检测、门控、per-agent 注册与生命周期、watcher 注销与 catalog 装配。
283
+ - **`npm run validate`**:技能结构与 frontmatter 合规、`required_*` 可解析、正文体积在阈值内、技能内资源引用都能在磁盘上解析;失败退出码 1,警告不影响退出码。
284
+ - **`npm pack --dry-run`**:发布前核对 tarball 内容与 `files` 字段一致。
285
+
286
+ 技能在真实会话里的表现(非 Unity 目录下可见几条、进入工程后隐藏哪些、`skills/` 变更是否即时生效)按第 5、7、8 节的规则观察,本文不记录某台机器上的运行结果。
287
+
288
+ ## 10. 已知缺口
289
+
290
+ - **正文体积靠约定与告警维持**:载入的 `SKILL.md` 是工具结果,压缩在超过 8192 字符时会裁剪,所以技能采用“`SKILL.md` 只做路由 + 细节放 `references/`”的结构。34 个 `SKILL.md` 都按这个结构保持在远小于 16384 字节的规模,校验脚本在超过 16384 字节时告警;新增技能若把细节写回 `SKILL.md`,长会话里会被裁断。
291
+ - **watcher 的边界**:只关心 `SKILL.md` 的增删改;`fs.watch` 在部分平台/沙箱不可用或会停止,此时只能退回重启时发现(各记录一条警告)。防抖窗口 200ms,突发写入会被合并。
292
+ - **回退路径更弱**:`agent.ctx` 够不到 `skills` 时只有一份全局 provider:没有 `unity:project` 上下文,同名的预设层技能重新胜出。
293
+ - **非 Unity 会话只有 3 个技能**:这是默认的 `workspaceSkills`;需要更多就显式点名或用配置调整。
294
+ - **隐藏不等于不可用**:`/技能名` 仍可载入被隐藏的技能;如果它确实不适用于当前工程,责任在使用者。
295
+ - **未知即放行**:需求无法检查时选择不隐藏,而且不产出任何提示——写错的范围不会让技能消失,但也不会有人告诉你这项检查没有做成。
296
+ - **事实有 2 秒陈旧窗口**:刚切换工程或装完包的两秒内,目录可能仍按旧事实门控。
297
+ - **profile 级影响**:安装、启停影响该 profile 的所有会话;替换已安装的包需要重启。
package/icon.svg ADDED
@@ -0,0 +1,16 @@
1
+ <svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <!--
3
+ Bundle icon: the gamepad-2 glyph from Lucide (https://lucide.dev), ISC license,
4
+ Copyright (c) 2026 Lucide Icons and Contributors. Modified: scaled, recolored,
5
+ and placed on a rounded white tile. The full license text is in NOTICE.md.
6
+ This is a neutral game-development glyph, not the Unity logo.
7
+ -->
8
+ <rect x="13" y="13" width="102" height="102" rx="22" fill="#FFFFFF"/>
9
+ <g transform="translate(28.04 28) scale(3)" stroke="#0B0B0F" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
10
+ <line x1="6" x2="10" y1="11" y2="11"/>
11
+ <line x1="8" x2="8" y1="9" y2="13"/>
12
+ <line x1="15" x2="15.01" y1="12" y2="12"/>
13
+ <line x1="18" x2="18.01" y1="10" y2="10"/>
14
+ <path d="M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z"/>
15
+ </g>
16
+ </svg>