create-yss-spec 2.2.0 → 2.2.1
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/README.md +1 -1
- package/package.json +1 -1
- package/template/.agents/rules/yss-ai-skills.md +59 -0
- package/template/.agents/skills/.yss-skills-manifest.json +28 -0
- package/template/.agents/skills/component-selection-imports/SKILL.md +64 -0
- package/template/.agents/skills/file-export-download/SKILL.md +160 -0
- package/template/.agents/skills/file-export-download/agents/openai.yaml +4 -0
- package/template/.agents/skills/formily-foundation/SKILL.md +176 -0
- package/template/.agents/skills/formily-foundation/references/examples.md +486 -0
- package/template/.agents/skills/formily-linkage-effects/SKILL.md +167 -0
- package/template/.agents/skills/formily-mode-slot-detail/SKILL.md +137 -0
- package/template/.agents/skills/formily-step-flow/SKILL.md +194 -0
- package/template/.agents/skills/frontend-commit/SKILL.md +118 -0
- package/template/.agents/skills/frontend-commit/agents/openai.yaml +7 -0
- package/template/.agents/skills/frontend-commit/references/scope-and-examples.md +111 -0
- package/template/.agents/skills/java-backend-commit/SKILL.md +121 -0
- package/template/.agents/skills/java-backend-commit/agents/openai.yaml +7 -0
- package/template/.agents/skills/java-backend-commit/references/scope-and-examples.md +118 -0
- package/template/.agents/skills/page-form-module/SKILL.md +168 -0
- package/template/.agents/skills/page-list-module/SKILL.md +137 -0
- package/template/.agents/skills/page-skeleton/SKILL.md +76 -0
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
- package/template/.agents/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
- package/template/.agents/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
- package/template/.agents/skills/prototype-page-acceptance/SKILL.md +62 -0
- package/template/.agents/skills/theme-token-usage/SKILL.md +123 -0
- package/template/.agents/skills/theme-token-usage/agents/openai.yaml +4 -0
- package/template/.agents/skills/vue3-best-practices/SKILL.md +68 -0
- package/template/.agents/skills/yedit-table-usage/SKILL.md +227 -0
- package/template/.agents/skills/yss-api-integration/SKILL.md +12 -2
- package/template/.agents/skills/yss-components/SKILL.md +1 -1
- package/template/.agents/skills/yss-design-system/SKILL.md +1 -1
- package/template/.agents/skills/yss-formily/SKILL.md +233 -265
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.agents/skills/yss-hook/SKILL.md +1 -1
- package/template/.agents/skills/yss-openapi-governance/SKILL.md +2 -2
- package/template/.agents/skills/yss-page-module-development/SKILL.md +12 -2
- package/template/.agents/skills/yss-page-module-development/references/component-map.md +34 -0
- package/template/.agents/skills/yss-page-module-development/references/hooks-map.md +11 -0
- package/template/.agents/skills/yss-page-module-development/references/utils-map.md +14 -0
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
- package/template/.agents/skills/yss-router/references/boundaries.md +1 -1
- package/template/.agents/skills/yss-router/references/router-contract.yaml +6 -2
- package/template/.agents/skills/yss-ui/SKILL.md +1 -1
- package/template/.agents/skills/yss-use-table-height/SKILL.md +9 -0
- package/template/.agents/skills/yss-use-tree-height/SKILL.md +9 -0
- package/template/.agents/skills/ytable-usage/SKILL.md +251 -0
- package/template/.agents/skills/ytree-usage/SKILL.md +132 -0
- package/template/.claude/skills/.yss-skills-manifest.json +29 -0
- package/template/.claude/skills/component-selection-imports/SKILL.md +64 -0
- package/template/.claude/skills/file-export-download/SKILL.md +160 -0
- package/template/.claude/skills/file-export-download/agents/openai.yaml +4 -0
- package/template/.claude/skills/formily-foundation/SKILL.md +176 -0
- package/template/.claude/skills/formily-foundation/references/examples.md +486 -0
- package/template/.claude/skills/formily-linkage-effects/SKILL.md +167 -0
- package/template/.claude/skills/formily-mode-slot-detail/SKILL.md +137 -0
- package/template/.claude/skills/formily-step-flow/SKILL.md +194 -0
- package/template/.claude/skills/frontend-commit/SKILL.md +118 -0
- package/template/.claude/skills/frontend-commit/agents/openai.yaml +7 -0
- package/template/.claude/skills/frontend-commit/references/scope-and-examples.md +111 -0
- package/template/.claude/skills/java-backend-commit/SKILL.md +121 -0
- package/template/.claude/skills/java-backend-commit/agents/openai.yaml +7 -0
- package/template/.claude/skills/java-backend-commit/references/scope-and-examples.md +118 -0
- package/template/.claude/skills/page-form-module/SKILL.md +168 -0
- package/template/.claude/skills/page-list-module/SKILL.md +137 -0
- package/template/.claude/skills/page-skeleton/SKILL.md +76 -0
- package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
- package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
- package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
- package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
- package/template/.claude/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
- package/template/.claude/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
- package/template/.claude/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
- package/template/.claude/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
- package/template/.claude/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
- package/template/.claude/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
- package/template/.claude/skills/prototype-page-acceptance/SKILL.md +62 -0
- package/template/.claude/skills/theme-token-usage/SKILL.md +123 -0
- package/template/.claude/skills/theme-token-usage/agents/openai.yaml +4 -0
- package/template/.claude/skills/vue3-best-practices/SKILL.md +68 -0
- package/template/.claude/skills/yedit-table-usage/SKILL.md +227 -0
- package/template/.claude/skills/yss-api-integration/SKILL.md +12 -2
- package/template/.claude/skills/yss-components/SKILL.md +1 -1
- package/template/.claude/skills/yss-design-system/SKILL.md +1 -1
- package/template/.claude/skills/yss-formily/SKILL.md +233 -265
- package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.claude/skills/yss-hook/SKILL.md +1 -1
- package/template/.claude/skills/yss-openapi-governance/SKILL.md +2 -2
- package/template/.claude/skills/yss-page-module-development/SKILL.md +12 -2
- package/template/.claude/skills/yss-page-module-development/references/component-map.md +34 -0
- package/template/.claude/skills/yss-page-module-development/references/hooks-map.md +11 -0
- package/template/.claude/skills/yss-page-module-development/references/utils-map.md +14 -0
- package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
- package/template/.claude/skills/yss-router/references/boundaries.md +1 -1
- package/template/.claude/skills/yss-router/references/router-contract.yaml +6 -2
- package/template/.claude/skills/yss-ui/SKILL.md +1 -1
- package/template/.claude/skills/yss-use-table-height/SKILL.md +9 -0
- package/template/.claude/skills/yss-use-tree-height/SKILL.md +9 -0
- package/template/.claude/skills/ytable-usage/SKILL.md +251 -0
- package/template/.claude/skills/ytree-usage/SKILL.md +132 -0
- package/template/.codex/skills/component-selection-imports/SKILL.md +64 -0
- package/template/.codex/skills/file-export-download/SKILL.md +160 -0
- package/template/.codex/skills/file-export-download/agents/openai.yaml +4 -0
- package/template/.codex/skills/formily-foundation/SKILL.md +176 -0
- package/template/.codex/skills/formily-foundation/references/examples.md +486 -0
- package/template/.codex/skills/formily-linkage-effects/SKILL.md +167 -0
- package/template/.codex/skills/formily-mode-slot-detail/SKILL.md +137 -0
- package/template/.codex/skills/formily-step-flow/SKILL.md +194 -0
- package/template/.codex/skills/frontend-commit/SKILL.md +118 -0
- package/template/.codex/skills/frontend-commit/agents/openai.yaml +7 -0
- package/template/.codex/skills/frontend-commit/references/scope-and-examples.md +111 -0
- package/template/.codex/skills/java-backend-commit/SKILL.md +121 -0
- package/template/.codex/skills/java-backend-commit/agents/openai.yaml +7 -0
- package/template/.codex/skills/java-backend-commit/references/scope-and-examples.md +118 -0
- package/template/.codex/skills/page-form-module/SKILL.md +168 -0
- package/template/.codex/skills/page-list-module/SKILL.md +137 -0
- package/template/.codex/skills/page-skeleton/SKILL.md +76 -0
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
- package/template/.codex/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
- package/template/.codex/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
- package/template/.codex/skills/prototype-page-acceptance/SKILL.md +62 -0
- package/template/.codex/skills/theme-token-usage/SKILL.md +123 -0
- package/template/.codex/skills/theme-token-usage/agents/openai.yaml +4 -0
- package/template/.codex/skills/vue3-best-practices/SKILL.md +68 -0
- package/template/.codex/skills/yedit-table-usage/SKILL.md +227 -0
- package/template/.codex/skills/yss-api-integration/SKILL.md +12 -2
- package/template/.codex/skills/yss-components/SKILL.md +1 -1
- package/template/.codex/skills/yss-design-system/SKILL.md +1 -1
- package/template/.codex/skills/yss-formily/SKILL.md +233 -265
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.codex/skills/yss-hook/SKILL.md +1 -1
- package/template/.codex/skills/yss-openapi-governance/SKILL.md +2 -2
- package/template/.codex/skills/yss-page-module-development/SKILL.md +12 -2
- package/template/.codex/skills/yss-page-module-development/references/component-map.md +34 -0
- package/template/.codex/skills/yss-page-module-development/references/hooks-map.md +11 -0
- package/template/.codex/skills/yss-page-module-development/references/utils-map.md +14 -0
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
- package/template/.codex/skills/yss-router/references/boundaries.md +1 -1
- package/template/.codex/skills/yss-router/references/router-contract.yaml +6 -2
- package/template/.codex/skills/yss-ui/SKILL.md +1 -1
- package/template/.codex/skills/yss-use-table-height/SKILL.md +9 -0
- package/template/.codex/skills/yss-use-tree-height/SKILL.md +9 -0
- package/template/.codex/skills/ytable-usage/SKILL.md +251 -0
- package/template/.codex/skills/ytree-usage/SKILL.md +132 -0
- package/template/.cursor/skills/.yss-skills-manifest.json +29 -0
- package/template/.cursor/skills/component-selection-imports/SKILL.md +64 -0
- package/template/.cursor/skills/file-export-download/SKILL.md +160 -0
- package/template/.cursor/skills/file-export-download/agents/openai.yaml +4 -0
- package/template/.cursor/skills/formily-foundation/SKILL.md +176 -0
- package/template/.cursor/skills/formily-foundation/references/examples.md +486 -0
- package/template/.cursor/skills/formily-linkage-effects/SKILL.md +167 -0
- package/template/.cursor/skills/formily-mode-slot-detail/SKILL.md +137 -0
- package/template/.cursor/skills/formily-step-flow/SKILL.md +194 -0
- package/template/.cursor/skills/frontend-commit/SKILL.md +118 -0
- package/template/.cursor/skills/frontend-commit/agents/openai.yaml +7 -0
- package/template/.cursor/skills/frontend-commit/references/scope-and-examples.md +111 -0
- package/template/.cursor/skills/java-backend-commit/SKILL.md +121 -0
- package/template/.cursor/skills/java-backend-commit/agents/openai.yaml +7 -0
- package/template/.cursor/skills/java-backend-commit/references/scope-and-examples.md +118 -0
- package/template/.cursor/skills/page-form-module/SKILL.md +168 -0
- package/template/.cursor/skills/page-list-module/SKILL.md +137 -0
- package/template/.cursor/skills/page-skeleton/SKILL.md +76 -0
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
- package/template/.cursor/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
- package/template/.cursor/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
- package/template/.cursor/skills/prototype-page-acceptance/SKILL.md +62 -0
- package/template/.cursor/skills/theme-token-usage/SKILL.md +123 -0
- package/template/.cursor/skills/theme-token-usage/agents/openai.yaml +4 -0
- package/template/.cursor/skills/vue3-best-practices/SKILL.md +68 -0
- package/template/.cursor/skills/yedit-table-usage/SKILL.md +227 -0
- package/template/.cursor/skills/yss-api-integration/SKILL.md +12 -2
- package/template/.cursor/skills/yss-components/SKILL.md +1 -1
- package/template/.cursor/skills/yss-design-system/SKILL.md +1 -1
- package/template/.cursor/skills/yss-formily/SKILL.md +233 -265
- package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.cursor/skills/yss-hook/SKILL.md +1 -1
- package/template/.cursor/skills/yss-openapi-governance/SKILL.md +2 -2
- package/template/.cursor/skills/yss-page-module-development/SKILL.md +12 -2
- package/template/.cursor/skills/yss-page-module-development/references/component-map.md +34 -0
- package/template/.cursor/skills/yss-page-module-development/references/hooks-map.md +11 -0
- package/template/.cursor/skills/yss-page-module-development/references/utils-map.md +14 -0
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
- package/template/.cursor/skills/yss-router/references/boundaries.md +1 -1
- package/template/.cursor/skills/yss-router/references/router-contract.yaml +6 -2
- package/template/.cursor/skills/yss-ui/SKILL.md +1 -1
- package/template/.cursor/skills/yss-use-table-height/SKILL.md +9 -0
- package/template/.cursor/skills/yss-use-tree-height/SKILL.md +9 -0
- package/template/.cursor/skills/ytable-usage/SKILL.md +251 -0
- package/template/.cursor/skills/ytree-usage/SKILL.md +132 -0
- package/template/.cursorrules +32 -0
- package/template/.hermes/skills/component-selection-imports/SKILL.md +64 -0
- package/template/.hermes/skills/file-export-download/SKILL.md +160 -0
- package/template/.hermes/skills/file-export-download/agents/openai.yaml +4 -0
- package/template/.hermes/skills/formily-foundation/SKILL.md +176 -0
- package/template/.hermes/skills/formily-foundation/references/examples.md +486 -0
- package/template/.hermes/skills/formily-linkage-effects/SKILL.md +167 -0
- package/template/.hermes/skills/formily-mode-slot-detail/SKILL.md +137 -0
- package/template/.hermes/skills/formily-step-flow/SKILL.md +194 -0
- package/template/.hermes/skills/frontend-commit/SKILL.md +118 -0
- package/template/.hermes/skills/frontend-commit/agents/openai.yaml +7 -0
- package/template/.hermes/skills/frontend-commit/references/scope-and-examples.md +111 -0
- package/template/.hermes/skills/java-backend-commit/SKILL.md +121 -0
- package/template/.hermes/skills/java-backend-commit/agents/openai.yaml +7 -0
- package/template/.hermes/skills/java-backend-commit/references/scope-and-examples.md +118 -0
- package/template/.hermes/skills/page-form-module/SKILL.md +168 -0
- package/template/.hermes/skills/page-list-module/SKILL.md +137 -0
- package/template/.hermes/skills/page-skeleton/SKILL.md +76 -0
- package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
- package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
- package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
- package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
- package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
- package/template/.hermes/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
- package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
- package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
- package/template/.hermes/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
- package/template/.hermes/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
- package/template/.hermes/skills/prototype-page-acceptance/SKILL.md +62 -0
- package/template/.hermes/skills/theme-token-usage/SKILL.md +123 -0
- package/template/.hermes/skills/theme-token-usage/agents/openai.yaml +4 -0
- package/template/.hermes/skills/vue3-best-practices/SKILL.md +68 -0
- package/template/.hermes/skills/yedit-table-usage/SKILL.md +227 -0
- package/template/.hermes/skills/yss-api-integration/SKILL.md +12 -2
- package/template/.hermes/skills/yss-components/SKILL.md +1 -1
- package/template/.hermes/skills/yss-design-system/SKILL.md +1 -1
- package/template/.hermes/skills/yss-formily/SKILL.md +233 -265
- package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.hermes/skills/yss-hook/SKILL.md +1 -1
- package/template/.hermes/skills/yss-openapi-governance/SKILL.md +2 -2
- package/template/.hermes/skills/yss-page-module-development/SKILL.md +12 -2
- package/template/.hermes/skills/yss-page-module-development/references/component-map.md +34 -0
- package/template/.hermes/skills/yss-page-module-development/references/hooks-map.md +11 -0
- package/template/.hermes/skills/yss-page-module-development/references/utils-map.md +14 -0
- package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
- package/template/.hermes/skills/yss-router/references/boundaries.md +1 -1
- package/template/.hermes/skills/yss-router/references/router-contract.yaml +6 -2
- package/template/.hermes/skills/yss-ui/SKILL.md +1 -1
- package/template/.hermes/skills/yss-use-table-height/SKILL.md +9 -0
- package/template/.hermes/skills/yss-use-tree-height/SKILL.md +9 -0
- package/template/.hermes/skills/ytable-usage/SKILL.md +251 -0
- package/template/.hermes/skills/ytree-usage/SKILL.md +132 -0
- package/template/.pi/skills/component-selection-imports/SKILL.md +64 -0
- package/template/.pi/skills/file-export-download/SKILL.md +160 -0
- package/template/.pi/skills/file-export-download/agents/openai.yaml +4 -0
- package/template/.pi/skills/formily-foundation/SKILL.md +176 -0
- package/template/.pi/skills/formily-foundation/references/examples.md +486 -0
- package/template/.pi/skills/formily-linkage-effects/SKILL.md +167 -0
- package/template/.pi/skills/formily-mode-slot-detail/SKILL.md +137 -0
- package/template/.pi/skills/formily-step-flow/SKILL.md +194 -0
- package/template/.pi/skills/frontend-commit/SKILL.md +118 -0
- package/template/.pi/skills/frontend-commit/agents/openai.yaml +7 -0
- package/template/.pi/skills/frontend-commit/references/scope-and-examples.md +111 -0
- package/template/.pi/skills/java-backend-commit/SKILL.md +121 -0
- package/template/.pi/skills/java-backend-commit/agents/openai.yaml +7 -0
- package/template/.pi/skills/java-backend-commit/references/scope-and-examples.md +118 -0
- package/template/.pi/skills/page-form-module/SKILL.md +168 -0
- package/template/.pi/skills/page-list-module/SKILL.md +137 -0
- package/template/.pi/skills/page-skeleton/SKILL.md +76 -0
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
- package/template/.pi/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
- package/template/.pi/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
- package/template/.pi/skills/prototype-page-acceptance/SKILL.md +62 -0
- package/template/.pi/skills/theme-token-usage/SKILL.md +123 -0
- package/template/.pi/skills/theme-token-usage/agents/openai.yaml +4 -0
- package/template/.pi/skills/vue3-best-practices/SKILL.md +68 -0
- package/template/.pi/skills/yedit-table-usage/SKILL.md +227 -0
- package/template/.pi/skills/yss-api-integration/SKILL.md +12 -2
- package/template/.pi/skills/yss-components/SKILL.md +1 -1
- package/template/.pi/skills/yss-design-system/SKILL.md +1 -1
- package/template/.pi/skills/yss-formily/SKILL.md +233 -265
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.pi/skills/yss-hook/SKILL.md +1 -1
- package/template/.pi/skills/yss-openapi-governance/SKILL.md +2 -2
- package/template/.pi/skills/yss-page-module-development/SKILL.md +12 -2
- package/template/.pi/skills/yss-page-module-development/references/component-map.md +34 -0
- package/template/.pi/skills/yss-page-module-development/references/hooks-map.md +11 -0
- package/template/.pi/skills/yss-page-module-development/references/utils-map.md +14 -0
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
- package/template/.pi/skills/yss-router/references/boundaries.md +1 -1
- package/template/.pi/skills/yss-router/references/router-contract.yaml +6 -2
- package/template/.pi/skills/yss-ui/SKILL.md +1 -1
- package/template/.pi/skills/yss-use-table-height/SKILL.md +9 -0
- package/template/.pi/skills/yss-use-tree-height/SKILL.md +9 -0
- package/template/.pi/skills/ytable-usage/SKILL.md +251 -0
- package/template/.pi/skills/ytree-usage/SKILL.md +132 -0
- package/template/.qoder/skills/component-selection-imports/SKILL.md +64 -0
- package/template/.qoder/skills/file-export-download/SKILL.md +160 -0
- package/template/.qoder/skills/file-export-download/agents/openai.yaml +4 -0
- package/template/.qoder/skills/formily-foundation/SKILL.md +176 -0
- package/template/.qoder/skills/formily-foundation/references/examples.md +486 -0
- package/template/.qoder/skills/formily-linkage-effects/SKILL.md +167 -0
- package/template/.qoder/skills/formily-mode-slot-detail/SKILL.md +137 -0
- package/template/.qoder/skills/formily-step-flow/SKILL.md +194 -0
- package/template/.qoder/skills/frontend-commit/SKILL.md +118 -0
- package/template/.qoder/skills/frontend-commit/agents/openai.yaml +7 -0
- package/template/.qoder/skills/frontend-commit/references/scope-and-examples.md +111 -0
- package/template/.qoder/skills/java-backend-commit/SKILL.md +121 -0
- package/template/.qoder/skills/java-backend-commit/agents/openai.yaml +7 -0
- package/template/.qoder/skills/java-backend-commit/references/scope-and-examples.md +118 -0
- package/template/.qoder/skills/page-form-module/SKILL.md +168 -0
- package/template/.qoder/skills/page-list-module/SKILL.md +137 -0
- package/template/.qoder/skills/page-skeleton/SKILL.md +76 -0
- package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
- package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
- package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
- package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
- package/template/.qoder/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
- package/template/.qoder/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
- package/template/.qoder/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
- package/template/.qoder/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
- package/template/.qoder/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
- package/template/.qoder/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
- package/template/.qoder/skills/prototype-page-acceptance/SKILL.md +62 -0
- package/template/.qoder/skills/theme-token-usage/SKILL.md +123 -0
- package/template/.qoder/skills/theme-token-usage/agents/openai.yaml +4 -0
- package/template/.qoder/skills/vue3-best-practices/SKILL.md +68 -0
- package/template/.qoder/skills/yedit-table-usage/SKILL.md +227 -0
- package/template/.qoder/skills/yss-api-integration/SKILL.md +12 -2
- package/template/.qoder/skills/yss-components/SKILL.md +1 -1
- package/template/.qoder/skills/yss-design-system/SKILL.md +1 -1
- package/template/.qoder/skills/yss-formily/SKILL.md +233 -265
- package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.qoder/skills/yss-hook/SKILL.md +1 -1
- package/template/.qoder/skills/yss-openapi-governance/SKILL.md +2 -2
- package/template/.qoder/skills/yss-page-module-development/SKILL.md +12 -2
- package/template/.qoder/skills/yss-page-module-development/references/component-map.md +34 -0
- package/template/.qoder/skills/yss-page-module-development/references/hooks-map.md +11 -0
- package/template/.qoder/skills/yss-page-module-development/references/utils-map.md +14 -0
- package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
- package/template/.qoder/skills/yss-router/references/boundaries.md +1 -1
- package/template/.qoder/skills/yss-router/references/router-contract.yaml +6 -2
- package/template/.qoder/skills/yss-ui/SKILL.md +1 -1
- package/template/.qoder/skills/yss-use-table-height/SKILL.md +9 -0
- package/template/.qoder/skills/yss-use-tree-height/SKILL.md +9 -0
- package/template/.qoder/skills/ytable-usage/SKILL.md +251 -0
- package/template/.qoder/skills/ytree-usage/SKILL.md +132 -0
- package/template/.trae/skills/.yss-skills-manifest.json +29 -0
- package/template/.trae/skills/component-selection-imports/SKILL.md +64 -0
- package/template/.trae/skills/file-export-download/SKILL.md +160 -0
- package/template/.trae/skills/file-export-download/agents/openai.yaml +4 -0
- package/template/.trae/skills/formily-foundation/SKILL.md +176 -0
- package/template/.trae/skills/formily-foundation/references/examples.md +486 -0
- package/template/.trae/skills/formily-linkage-effects/SKILL.md +167 -0
- package/template/.trae/skills/formily-mode-slot-detail/SKILL.md +137 -0
- package/template/.trae/skills/formily-step-flow/SKILL.md +194 -0
- package/template/.trae/skills/frontend-commit/SKILL.md +118 -0
- package/template/.trae/skills/frontend-commit/agents/openai.yaml +7 -0
- package/template/.trae/skills/frontend-commit/references/scope-and-examples.md +111 -0
- package/template/.trae/skills/java-backend-commit/SKILL.md +121 -0
- package/template/.trae/skills/java-backend-commit/agents/openai.yaml +7 -0
- package/template/.trae/skills/java-backend-commit/references/scope-and-examples.md +118 -0
- package/template/.trae/skills/page-form-module/SKILL.md +168 -0
- package/template/.trae/skills/page-list-module/SKILL.md +137 -0
- package/template/.trae/skills/page-skeleton/SKILL.md +76 -0
- package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +34 -0
- package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +75 -0
- package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/index.vue +107 -0
- package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +256 -0
- package/template/.trae/skills/page-skeleton/examples/AdvancedFormPage/style.less +30 -0
- package/template/.trae/skills/page-skeleton/examples/StandardListPage/constant.ts +28 -0
- package/template/.trae/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +58 -0
- package/template/.trae/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +65 -0
- package/template/.trae/skills/page-skeleton/examples/StandardListPage/index.vue +91 -0
- package/template/.trae/skills/page-skeleton/examples/StandardListPage/style.less +49 -0
- package/template/.trae/skills/prototype-page-acceptance/SKILL.md +62 -0
- package/template/.trae/skills/theme-token-usage/SKILL.md +123 -0
- package/template/.trae/skills/theme-token-usage/agents/openai.yaml +4 -0
- package/template/.trae/skills/vue3-best-practices/SKILL.md +68 -0
- package/template/.trae/skills/yedit-table-usage/SKILL.md +227 -0
- package/template/.trae/skills/yss-api-integration/SKILL.md +12 -2
- package/template/.trae/skills/yss-components/SKILL.md +1 -1
- package/template/.trae/skills/yss-design-system/SKILL.md +1 -1
- package/template/.trae/skills/yss-formily/SKILL.md +233 -265
- package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +1 -1
- package/template/.trae/skills/yss-hook/SKILL.md +1 -1
- package/template/.trae/skills/yss-openapi-governance/SKILL.md +2 -2
- package/template/.trae/skills/yss-page-module-development/SKILL.md +12 -2
- package/template/.trae/skills/yss-page-module-development/references/component-map.md +34 -0
- package/template/.trae/skills/yss-page-module-development/references/hooks-map.md +11 -0
- package/template/.trae/skills/yss-page-module-development/references/utils-map.md +14 -0
- package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +62 -1
- package/template/.trae/skills/yss-router/references/boundaries.md +1 -1
- package/template/.trae/skills/yss-router/references/router-contract.yaml +6 -2
- package/template/.trae/skills/yss-ui/SKILL.md +1 -1
- package/template/.trae/skills/yss-use-table-height/SKILL.md +9 -0
- package/template/.trae/skills/yss-use-tree-height/SKILL.md +9 -0
- package/template/.trae/skills/ytable-usage/SKILL.md +251 -0
- package/template/.trae/skills/ytree-usage/SKILL.md +132 -0
- package/template/docs/agents/skill-migrations.md +16 -0
- package/template/docs/agents/skills-maintenance.md +1 -1
- package/template/docs/agents/yss-skill-registry.yaml +125 -25
- package/template/docs/user-guide//344/272/247/345/223/201/347/240/224/345/217/221/345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/346/234/200/344/275/263/345/256/236/350/267/265.md +4 -4
- package/template/docs/user-guide//347/224/237/345/221/275/345/221/250/346/234/237/346/234/200/344/275/263/345/256/236/350/267/265.md +1 -1
- package/template/scripts/lib/scenario-checks.mjs +21 -0
- package/template/scripts/lib/skill-governance.mjs +50 -0
- package/template/scripts/lib/skill-registry.mjs +82 -5
- package/template/scripts/lib/skill-supply-chain.mjs +5 -1
- package/template/scripts/verify-skill-governance +10 -0
- package/template/scripts/verify-template +3 -2
- package/template/skills-lock.json +285 -29
- package/template.snapshot.json +4 -4
- package/template/.agents/skills/high-fidelity-html-prototype/SKILL.md +0 -89
- package/template/.agents/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-formily/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-formily/references/examples.md +0 -65
- package/template/.claude/skills/high-fidelity-html-prototype/SKILL.md +0 -89
- package/template/.claude/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
- package/template/.claude/skills/yss-formily/agents/openai.yaml +0 -5
- package/template/.claude/skills/yss-formily/references/examples.md +0 -65
- package/template/.codex/skills/high-fidelity-html-prototype/SKILL.md +0 -89
- package/template/.codex/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-formily/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-formily/references/examples.md +0 -65
- package/template/.cursor/skills/high-fidelity-html-prototype/SKILL.md +0 -89
- package/template/.cursor/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-formily/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-formily/references/examples.md +0 -65
- package/template/.hermes/skills/high-fidelity-html-prototype/SKILL.md +0 -89
- package/template/.hermes/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
- package/template/.hermes/skills/yss-formily/agents/openai.yaml +0 -5
- package/template/.hermes/skills/yss-formily/references/examples.md +0 -65
- package/template/.pi/skills/high-fidelity-html-prototype/SKILL.md +0 -89
- package/template/.pi/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-formily/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-formily/references/examples.md +0 -65
- package/template/.qoder/skills/high-fidelity-html-prototype/SKILL.md +0 -89
- package/template/.qoder/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
- package/template/.qoder/skills/yss-formily/agents/openai.yaml +0 -5
- package/template/.qoder/skills/yss-formily/references/examples.md +0 -65
- package/template/.trae/skills/high-fidelity-html-prototype/SKILL.md +0 -89
- package/template/.trae/skills/high-fidelity-html-prototype/agents/openai.yaml +0 -5
- package/template/.trae/skills/yss-formily/agents/openai.yaml +0 -5
- package/template/.trae/skills/yss-formily/references/examples.md +0 -65
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
schema_version: 1
|
|
2
2
|
registry_id: yss.skill-routing
|
|
3
|
-
status:
|
|
3
|
+
status: active
|
|
4
4
|
description: >-
|
|
5
|
-
技能分层、别名、默认可发现性和 Agent
|
|
6
|
-
本文件不替代 skills-lock.json 的来源、hash 与投影完整性职责;Router
|
|
5
|
+
技能分层、别名、默认可发现性和 Agent 运行时入口的可执行路由注册表。
|
|
6
|
+
本文件不替代 skills-lock.json 的来源、hash 与投影完整性职责;Router 与生命周期编排器只消费通过本表校验的 canonical 技能。
|
|
7
7
|
canonical_content_root: .agents/skills
|
|
8
8
|
runtime_policy:
|
|
9
|
-
consumed_by_router:
|
|
10
|
-
consumed_by_lifecycle:
|
|
11
|
-
discovery_enforced:
|
|
9
|
+
consumed_by_router: true
|
|
10
|
+
consumed_by_lifecycle: true
|
|
11
|
+
discovery_enforced: true
|
|
12
12
|
agent_runtime_roots:
|
|
13
13
|
claude: .claude/skills
|
|
14
14
|
codex: .codex/skills
|
|
@@ -27,7 +27,7 @@ skills:
|
|
|
27
27
|
- id: ask-matt
|
|
28
28
|
layer: compatibility
|
|
29
29
|
maturity: supported
|
|
30
|
-
instance_default_discoverable:
|
|
30
|
+
instance_default_discoverable: false
|
|
31
31
|
aliases: []
|
|
32
32
|
impacts: [lifecycle]
|
|
33
33
|
- id: code-review
|
|
@@ -75,13 +75,13 @@ skills:
|
|
|
75
75
|
- id: grill-me
|
|
76
76
|
layer: compatibility
|
|
77
77
|
maturity: supported
|
|
78
|
-
instance_default_discoverable:
|
|
78
|
+
instance_default_discoverable: false
|
|
79
79
|
aliases: []
|
|
80
80
|
impacts: [discovery]
|
|
81
81
|
- id: grill-with-docs
|
|
82
82
|
layer: compatibility
|
|
83
83
|
maturity: supported
|
|
84
|
-
instance_default_discoverable:
|
|
84
|
+
instance_default_discoverable: false
|
|
85
85
|
aliases: []
|
|
86
86
|
impacts: [discovery]
|
|
87
87
|
- id: grilling
|
|
@@ -96,17 +96,10 @@ skills:
|
|
|
96
96
|
instance_default_discoverable: true
|
|
97
97
|
aliases: []
|
|
98
98
|
impacts: [lifecycle]
|
|
99
|
-
- id: high-fidelity-html-prototype
|
|
100
|
-
layer: compatibility
|
|
101
|
-
maturity: deprecated
|
|
102
|
-
instance_default_discoverable: false
|
|
103
|
-
aliases: []
|
|
104
|
-
impacts: [prototype]
|
|
105
|
-
replaced_by: yss-prototype-stage
|
|
106
99
|
- id: implement
|
|
107
100
|
layer: compatibility
|
|
108
101
|
maturity: supported
|
|
109
|
-
instance_default_discoverable:
|
|
102
|
+
instance_default_discoverable: false
|
|
110
103
|
aliases: []
|
|
111
104
|
impacts: [lifecycle]
|
|
112
105
|
- id: implementation-repo-onboarding
|
|
@@ -118,7 +111,7 @@ skills:
|
|
|
118
111
|
- id: improve-codebase-architecture
|
|
119
112
|
layer: compatibility
|
|
120
113
|
maturity: supported
|
|
121
|
-
instance_default_discoverable:
|
|
114
|
+
instance_default_discoverable: false
|
|
122
115
|
aliases: []
|
|
123
116
|
impacts: [quality]
|
|
124
117
|
- id: llm-wiki
|
|
@@ -190,7 +183,7 @@ skills:
|
|
|
190
183
|
- id: setup-matt-pocock-skills
|
|
191
184
|
layer: compatibility
|
|
192
185
|
maturity: supported
|
|
193
|
-
instance_default_discoverable:
|
|
186
|
+
instance_default_discoverable: false
|
|
194
187
|
aliases: []
|
|
195
188
|
impacts: [setup]
|
|
196
189
|
- id: setup-pre-commit
|
|
@@ -226,19 +219,19 @@ skills:
|
|
|
226
219
|
- id: to-spec
|
|
227
220
|
layer: compatibility
|
|
228
221
|
maturity: supported
|
|
229
|
-
instance_default_discoverable:
|
|
222
|
+
instance_default_discoverable: false
|
|
230
223
|
aliases: []
|
|
231
224
|
impacts: [lifecycle]
|
|
232
225
|
- id: to-tickets
|
|
233
226
|
layer: compatibility
|
|
234
227
|
maturity: supported
|
|
235
|
-
instance_default_discoverable:
|
|
228
|
+
instance_default_discoverable: false
|
|
236
229
|
aliases: []
|
|
237
230
|
impacts: [lifecycle]
|
|
238
231
|
- id: triage
|
|
239
232
|
layer: compatibility
|
|
240
233
|
maturity: supported
|
|
241
|
-
instance_default_discoverable:
|
|
234
|
+
instance_default_discoverable: false
|
|
242
235
|
aliases: []
|
|
243
236
|
impacts: [lifecycle]
|
|
244
237
|
- id: using-git-worktrees
|
|
@@ -413,7 +406,7 @@ skills:
|
|
|
413
406
|
layer: specialist
|
|
414
407
|
maturity: supported
|
|
415
408
|
instance_default_discoverable: false
|
|
416
|
-
aliases: []
|
|
409
|
+
aliases: [page-module-development, yss-ui-business-page-generation]
|
|
417
410
|
impacts: [frontend]
|
|
418
411
|
- id: yss-product-lifecycle
|
|
419
412
|
layer: core
|
|
@@ -473,13 +466,13 @@ skills:
|
|
|
473
466
|
layer: specialist
|
|
474
467
|
maturity: supported
|
|
475
468
|
instance_default_discoverable: false
|
|
476
|
-
aliases: []
|
|
469
|
+
aliases: [use-table-height]
|
|
477
470
|
impacts: [frontend]
|
|
478
471
|
- id: yss-use-tree-height
|
|
479
472
|
layer: specialist
|
|
480
473
|
maturity: supported
|
|
481
474
|
instance_default_discoverable: false
|
|
482
|
-
aliases: []
|
|
475
|
+
aliases: [use-tree-height]
|
|
483
476
|
impacts: [frontend]
|
|
484
477
|
- id: yss-userinfo
|
|
485
478
|
layer: specialist
|
|
@@ -499,12 +492,119 @@ skills:
|
|
|
499
492
|
instance_default_discoverable: false
|
|
500
493
|
aliases: []
|
|
501
494
|
impacts: [backend, api]
|
|
495
|
+
- id: component-selection-imports
|
|
496
|
+
layer: specialist
|
|
497
|
+
maturity: supported
|
|
498
|
+
instance_default_discoverable: false
|
|
499
|
+
aliases: []
|
|
500
|
+
impacts: [frontend]
|
|
501
|
+
- id: file-export-download
|
|
502
|
+
layer: specialist
|
|
503
|
+
maturity: supported
|
|
504
|
+
instance_default_discoverable: false
|
|
505
|
+
aliases: []
|
|
506
|
+
impacts: [frontend, api]
|
|
507
|
+
- id: formily-foundation
|
|
508
|
+
layer: specialist
|
|
509
|
+
maturity: supported
|
|
510
|
+
instance_default_discoverable: false
|
|
511
|
+
aliases: []
|
|
512
|
+
impacts: [frontend]
|
|
513
|
+
- id: formily-linkage-effects
|
|
514
|
+
layer: specialist
|
|
515
|
+
maturity: supported
|
|
516
|
+
instance_default_discoverable: false
|
|
517
|
+
aliases: []
|
|
518
|
+
impacts: [frontend]
|
|
519
|
+
- id: formily-mode-slot-detail
|
|
520
|
+
layer: specialist
|
|
521
|
+
maturity: supported
|
|
522
|
+
instance_default_discoverable: false
|
|
523
|
+
aliases: []
|
|
524
|
+
impacts: [frontend]
|
|
525
|
+
- id: formily-step-flow
|
|
526
|
+
layer: specialist
|
|
527
|
+
maturity: supported
|
|
528
|
+
instance_default_discoverable: false
|
|
529
|
+
aliases: []
|
|
530
|
+
impacts: [frontend]
|
|
531
|
+
- id: frontend-commit
|
|
532
|
+
layer: maintainer-only
|
|
533
|
+
maturity: supported
|
|
534
|
+
instance_default_discoverable: false
|
|
535
|
+
aliases: []
|
|
536
|
+
impacts: [template-maintenance]
|
|
537
|
+
- id: java-backend-commit
|
|
538
|
+
layer: maintainer-only
|
|
539
|
+
maturity: supported
|
|
540
|
+
instance_default_discoverable: false
|
|
541
|
+
aliases: []
|
|
542
|
+
impacts: [template-maintenance]
|
|
543
|
+
- id: page-form-module
|
|
544
|
+
layer: specialist
|
|
545
|
+
maturity: supported
|
|
546
|
+
instance_default_discoverable: false
|
|
547
|
+
aliases: []
|
|
548
|
+
impacts: [frontend]
|
|
549
|
+
- id: page-list-module
|
|
550
|
+
layer: specialist
|
|
551
|
+
maturity: supported
|
|
552
|
+
instance_default_discoverable: false
|
|
553
|
+
aliases: []
|
|
554
|
+
impacts: [frontend]
|
|
555
|
+
- id: page-skeleton
|
|
556
|
+
layer: specialist
|
|
557
|
+
maturity: supported
|
|
558
|
+
instance_default_discoverable: false
|
|
559
|
+
aliases: []
|
|
560
|
+
impacts: [frontend]
|
|
561
|
+
- id: prototype-page-acceptance
|
|
562
|
+
layer: specialist
|
|
563
|
+
maturity: supported
|
|
564
|
+
instance_default_discoverable: false
|
|
565
|
+
aliases: []
|
|
566
|
+
impacts: [prototype, frontend]
|
|
567
|
+
- id: theme-token-usage
|
|
568
|
+
layer: specialist
|
|
569
|
+
maturity: supported
|
|
570
|
+
instance_default_discoverable: false
|
|
571
|
+
aliases: []
|
|
572
|
+
impacts: [frontend, prototype]
|
|
573
|
+
- id: vue3-best-practices
|
|
574
|
+
layer: specialist
|
|
575
|
+
maturity: supported
|
|
576
|
+
instance_default_discoverable: false
|
|
577
|
+
aliases: []
|
|
578
|
+
impacts: [frontend]
|
|
579
|
+
- id: yedit-table-usage
|
|
580
|
+
layer: specialist
|
|
581
|
+
maturity: supported
|
|
582
|
+
instance_default_discoverable: false
|
|
583
|
+
aliases: []
|
|
584
|
+
impacts: [frontend]
|
|
585
|
+
- id: ytable-usage
|
|
586
|
+
layer: specialist
|
|
587
|
+
maturity: supported
|
|
588
|
+
instance_default_discoverable: false
|
|
589
|
+
aliases: []
|
|
590
|
+
impacts: [frontend]
|
|
591
|
+
- id: ytree-usage
|
|
592
|
+
layer: specialist
|
|
593
|
+
maturity: supported
|
|
594
|
+
instance_default_discoverable: false
|
|
595
|
+
aliases: []
|
|
596
|
+
impacts: [frontend]
|
|
502
597
|
platform_skills:
|
|
503
598
|
- id: data-analytics
|
|
504
599
|
root: .codex/skills
|
|
505
600
|
layer: maintainer-only
|
|
506
601
|
instance_default_discoverable: false
|
|
602
|
+
aliases: []
|
|
507
603
|
- id: product-design
|
|
508
604
|
root: .codex/skills
|
|
509
605
|
layer: specialist
|
|
510
606
|
instance_default_discoverable: false
|
|
607
|
+
aliases: [product-design:index]
|
|
608
|
+
external_skills:
|
|
609
|
+
- id: yss-backend-scaffold-parent
|
|
610
|
+
source: .agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md
|
|
@@ -165,7 +165,7 @@ skills 是让 AI 按规程工作的“操作手册”,不是关键词装饰。
|
|
|
165
165
|
使用 yss-router,基于 `docs/.scratch/data-modeling/issues/04-validate-model.md`、
|
|
166
166
|
冻结 OpenAPI `docs/.scratch/data-modeling/api/data-modeling.yaml` 和架构设计,
|
|
167
167
|
选择最小 YSS 技能集。
|
|
168
|
-
请说明为什么需要或不需要 yss-domain、yss-repository、yss-mybatis、yss-web-controller、yss-ui、api-integration。
|
|
168
|
+
请说明为什么需要或不需要 yss-domain、yss-repository、yss-mybatis、yss-web-controller、yss-ui、yss-api-integration。
|
|
169
169
|
不要实现代码,只输出技能路由、实现顺序和验证建议。
|
|
170
170
|
```
|
|
171
171
|
|
|
@@ -804,8 +804,8 @@ TDD 顺序示例:
|
|
|
804
804
|
| 后端用例编排 | `yss-application` |
|
|
805
805
|
| 持久化 | `yss-repository`、需要分页/批量/数据源时加 `yss-mybatis` |
|
|
806
806
|
| Web 接口 | `yss-web-controller`、`yss-dto` |
|
|
807
|
-
| 前端页面 | `yss-ui`、`yss-page-module-development`、`api-integration` |
|
|
808
|
-
| OpenAPI client 刷新 | `yss-openapi-governance` 从冻结 YAML 派生 JSON,随后 `api-integration` 运行 Orval;只在 Freeze 后或按实现契约刷新时使用 |
|
|
807
|
+
| 前端页面 | `yss-ui`、`yss-page-module-development`、`yss-api-integration` |
|
|
808
|
+
| OpenAPI client 刷新 | `yss-openapi-governance` 从冻结 YAML 派生 JSON,随后 `yss-api-integration` 运行 Orval;只在 Freeze 后或按实现契约刷新时使用 |
|
|
809
809
|
|
|
810
810
|
阶段门禁:
|
|
811
811
|
|
|
@@ -1072,7 +1072,7 @@ docs/user-guide/
|
|
|
1072
1072
|
使用 yss-router。
|
|
1073
1073
|
输入资产:<Spec 路径>、<交互设计路径>、<OpenAPI Freeze 路径或无 API 影响记录>、<架构设计路径>、<垂直切片路径>。
|
|
1074
1074
|
目标:选择最小 YSS 技能集。
|
|
1075
|
-
请说明每个候选技能需要或不需要的理由,尤其是 yss-domain、yss-repository、yss-mybatis、yss-web-controller、yss-ui、yss-openapi-governance、api-integration。
|
|
1075
|
+
请说明每个候选技能需要或不需要的理由,尤其是 yss-domain、yss-repository、yss-mybatis、yss-web-controller、yss-ui、yss-openapi-governance、yss-api-integration。
|
|
1076
1076
|
边界:不要实现代码,只输出技能路由、实施顺序、测试 seam 和验证建议。
|
|
1077
1077
|
```
|
|
1078
1078
|
|
|
@@ -258,7 +258,7 @@ Competitive Matrix
|
|
|
258
258
|
|
|
259
259
|
| 场景 | 主技能 | 常见补充 |
|
|
260
260
|
|---|---|---|
|
|
261
|
-
| 新建完整 Vue 业务页面 | `yss-ui` | `yss-page-module-development`、`yss-openapi-governance`、`api-integration` |
|
|
261
|
+
| 新建完整 Vue 业务页面 | `yss-ui` | `yss-page-module-development`、`yss-openapi-governance`、`yss-api-integration` |
|
|
262
262
|
| YTable / YTree / YssFormily 页面 | `yss-ui` | `yss-use-table-height`、`yss-use-tree-height`、`yss-formily` |
|
|
263
263
|
| 从零创建后端服务 | `yss-ddd-scaffold-generator` | 后续接 `yss-domain`、`yss-repository`、`yss-web-controller` |
|
|
264
264
|
| 领域建模和状态规则 | `yss-domain` | — |
|
|
@@ -57,6 +57,11 @@ function validateInvocationBoundary(data) {
|
|
|
57
57
|
ensure(routes?.["work-unit.discovery-requirements"]?.skills?.includes("grilling") && routes?.["work-unit.discovery-requirements"]?.skills?.includes("domain-modeling"), "需求分析工作单元缺少 grilling/domain-modeling");
|
|
58
58
|
ensure(routes?.["work-unit.discovery-opportunity"]?.route_by?.market_or_competitor_fact === "competitive-intelligence" && routes["work-unit.discovery-opportunity"].route_by.technical_or_standard_fact === "research", "机会调研事实路由不准确");
|
|
59
59
|
ensure(routes?.["work-unit.slice-implementation"]?.skills?.includes("tdd") && routes?.["work-unit.slice-implementation"]?.skills?.includes("yss-ui"), "原生实现工作单元缺少 TDD 或 UI 路由");
|
|
60
|
+
const frontendRoute = routes?.["work-unit.slice-implementation"]?.frontend_route;
|
|
61
|
+
ensure(frontendRoute?.primary_skill === "yss-ui" && frontendRoute?.page_orchestration_skill === "yss-page-module-development", "前端实现路由缺少 yss-ui 主入口或页面编排技能");
|
|
62
|
+
for (const impact of ["api_impact", "formily_impact", "table_impact", "tree_impact", "height_impact", "export_impact", "theme_impact"]) {
|
|
63
|
+
ensure(Array.isArray(frontendRoute?.conditional_skills?.[impact]) && frontendRoute.conditional_skills[impact].length > 0 && typeof frontendRoute.not_applicable_reasons?.[impact] === "string", `前端条件专项路由缺少 ${impact}`);
|
|
64
|
+
}
|
|
60
65
|
ensure(routes?.["work-unit.frontend-implementation-verification"]?.skills?.includes("code-review") && routes?.["work-unit.frontend-implementation-verification"]?.applies_when === "ui_impact", "前端还原验证未绑定 UI fidelity 审查轴");
|
|
61
66
|
for (const id of ["work-unit.spec-synthesis", "work-unit.ticket-decomposition", "work-unit.slice-implementation"]) {
|
|
62
67
|
ensure(routes?.[id]?.native?.source === "yss-product-lifecycle" && routes[id].compatibility?.source === "mattpocock/skills" && routes[id].compatibility.formal_artifact_owner === "explicit-user-entry", `${id} 未分离原生执行定义与 Matt 兼容输入`);
|
|
@@ -70,6 +75,12 @@ function validateInvocationBoundary(data) {
|
|
|
70
75
|
function validateWorkflowExecutionResult(payload, contract, workUnitRoutes) {
|
|
71
76
|
for (const field of contract.required) ensure(Object.hasOwn(payload, field), `Workflow Execution Result 缺少 ${field}`);
|
|
72
77
|
ensure(contract.result_values.includes(payload.result), "Workflow Execution Result result 无效");
|
|
78
|
+
if (Object.hasOwn(payload, "unavailable_skill")) {
|
|
79
|
+
ensure(payload.result === contract.unavailable_skill.blocking_result, "技能不可用必须将 Workflow Execution Result 标记为 blocked");
|
|
80
|
+
for (const field of contract.unavailable_skill.required) {
|
|
81
|
+
ensure(typeof payload.unavailable_skill?.[field] === "string" && payload.unavailable_skill[field].trim(), `unavailable_skill.${field} 无效`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
73
84
|
for (const field of contract.workflow_reference.required) ensure(typeof payload.workflow_reference?.[field] === "string" && payload.workflow_reference[field].trim(), `workflow_reference.${field} 无效`);
|
|
74
85
|
const workUnit = workUnitRoutes?.[payload.work_unit];
|
|
75
86
|
ensure(workUnit, `未知 Workflow Execution Result work_unit: ${payload.work_unit}`);
|
|
@@ -189,6 +200,16 @@ export function runScenario(name) {
|
|
|
189
200
|
blocking_signals: []
|
|
190
201
|
};
|
|
191
202
|
validateWorkflowExecutionResult(validResult, data.workflow_execution_result, data.work_unit_routes);
|
|
203
|
+
const unavailableResult = structuredClone(validResult);
|
|
204
|
+
unavailableResult.result = "blocked";
|
|
205
|
+
unavailableResult.unavailable_skill = { skill: "yss-ui", provider: "codex", fallback: "manual-review", resolution: "needs-human" };
|
|
206
|
+
unavailableResult.blocking_signals = ["missing_evidence"];
|
|
207
|
+
validateWorkflowExecutionResult(unavailableResult, data.workflow_execution_result, data.work_unit_routes);
|
|
208
|
+
const malformedUnavailable = structuredClone(unavailableResult);
|
|
209
|
+
delete malformedUnavailable.unavailable_skill.fallback;
|
|
210
|
+
let unavailableRejected = false;
|
|
211
|
+
try { validateWorkflowExecutionResult(malformedUnavailable, data.workflow_execution_result, data.work_unit_routes); } catch { unavailableRejected = true; }
|
|
212
|
+
ensure(unavailableRejected, "技能不可用结果缺少 fallback 时未被拒绝");
|
|
192
213
|
const compatibleResult = structuredClone(validResult);
|
|
193
214
|
compatibleResult.workflow_reference = { source: "mattpocock/skills", skill: "to-spec", invocation_mode: "reference" };
|
|
194
215
|
validateWorkflowExecutionResult(compatibleResult, data.workflow_execution_result, data.work_unit_routes);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { loadSkillRegistry } from "./skill-registry.mjs";
|
|
5
|
+
|
|
6
|
+
export const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
|
7
|
+
|
|
8
|
+
function fail(message) {
|
|
9
|
+
throw new TypeError(message);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function validateSkillGovernance({ read = (relative) => readFileSync(path.join(ROOT, relative), "utf8"), exists = (relative) => existsSync(path.join(ROOT, relative)) } = {}) {
|
|
13
|
+
const globalRules = read(".agents/rules/yss-ai-skills.md");
|
|
14
|
+
const tableSkill = read(".agents/skills/ytable-usage/SKILL.md");
|
|
15
|
+
const pageSkill = read(".agents/skills/yss-page-module-development/SKILL.md");
|
|
16
|
+
|
|
17
|
+
if (/toolbar-config\.custom.{0,30}(必须|必需)|必须.{0,30}toolbar-config\.custom/.test(globalRules)) {
|
|
18
|
+
fail("全局规则不得把 toolbar-config.custom 作为无条件要求");
|
|
19
|
+
}
|
|
20
|
+
for (const marker of ["主操作必须放入 `#toolbar-right`", "只有确实需要列设置时才使用", "toolbar-config"] ) {
|
|
21
|
+
if (!globalRules.includes(marker)) fail(`全局规则缺少条件化表格工具栏规则: ${marker}`);
|
|
22
|
+
}
|
|
23
|
+
for (const marker of ["无需配置 `:toolbar-config=\"{ custom: true }\"`", "仅在业务明确需要列设置时才传入"]) {
|
|
24
|
+
if (!tableSkill.includes(marker)) fail(`YTable 专项技能缺少条件化工具栏规则: ${marker}`);
|
|
25
|
+
}
|
|
26
|
+
if (!pageSkill.includes("只有确实需要列设置时才启用 `toolbar-config.custom`")) {
|
|
27
|
+
fail("页面模块 canonical 技能缺少条件化 toolbar-config 规则");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const registry = loadSkillRegistry();
|
|
31
|
+
const canonicalIds = new Set(registry.skills.map((skill) => skill.id));
|
|
32
|
+
const aliases = new Map(registry.skills.flatMap((skill) => skill.aliases.map((alias) => [alias, skill.id])));
|
|
33
|
+
const legacy = new Set(["api-integration", "page-module-development", "use-table-height", "use-tree-height", "yss-ui-business-page-generation"]);
|
|
34
|
+
for (const alias of legacy) {
|
|
35
|
+
if (exists(`.agents/skills/${alias}`)) fail(`legacy alias 不得存在独立 canonical 目录: ${alias}`);
|
|
36
|
+
if (!aliases.has(alias)) fail(`legacy alias 未登记: ${alias}`);
|
|
37
|
+
}
|
|
38
|
+
if (exists(".agents/skills/high-fidelity-html-prototype") || aliases.has("high-fidelity-html-prototype")) {
|
|
39
|
+
fail("high-fidelity-html-prototype 已退役,不得保留物理目录或运行时 alias");
|
|
40
|
+
}
|
|
41
|
+
for (const skill of registry.skills) {
|
|
42
|
+
if (!canonicalIds.has(skill.id)) fail(`注册表 canonical skill 无效: ${skill.id}`);
|
|
43
|
+
if (skill.maturity === "deprecated") {
|
|
44
|
+
for (const field of ["replaced_by", "migration_deadline", "cleanup_status"]) {
|
|
45
|
+
if (!skill[field] || typeof skill[field] !== "string") fail(`deprecated 技能缺少 ${field}: ${skill.id}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { checked: true, legacy_aliases: legacy.size };
|
|
50
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { parseDocument } from "../vendor/yaml.mjs";
|
|
4
4
|
import { PROJECTION_ROOTS, ROOT } from "./skill-supply-chain.mjs";
|
|
@@ -6,9 +6,11 @@ import { PROJECTION_ROOTS, ROOT } from "./skill-supply-chain.mjs";
|
|
|
6
6
|
export const DEFAULT_REGISTRY = path.join(ROOT, "docs/agents/yss-skill-registry.yaml");
|
|
7
7
|
const LOCK_PATH = path.join(ROOT, "skills-lock.json");
|
|
8
8
|
const ROUTER_CONTRACT = path.join(ROOT, ".agents/skills/yss-router/references/router-contract.yaml");
|
|
9
|
+
const LIFECYCLE_CONTRACT = path.join(ROOT, ".agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml");
|
|
9
10
|
const LAYERS = new Set(["core", "specialist", "compatibility", "maintainer-only"]);
|
|
10
11
|
const MATURITIES = new Set(["draft", "verified", "supported", "deprecated"]);
|
|
11
12
|
const ID_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
|
|
13
|
+
const PLATFORM_ALIAS_PATTERN = /^[a-z0-9][a-z0-9-]*(?::[a-z0-9][a-z0-9-]*)?$/;
|
|
12
14
|
|
|
13
15
|
function fail(message) {
|
|
14
16
|
throw new TypeError(message);
|
|
@@ -45,7 +47,7 @@ function requireString(value, field) {
|
|
|
45
47
|
if (typeof value !== "string" || !value.trim()) fail(`${field} 不能为空`);
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
export function validateSkillRegistry(registry, { lock, routerContract, skillSource } = {}) {
|
|
50
|
+
export function validateSkillRegistry(registry, { lock, routerContract, lifecycleContract, skillSource } = {}) {
|
|
49
51
|
if (!registry || typeof registry !== "object" || Array.isArray(registry)) fail("技能路由注册表必须是对象");
|
|
50
52
|
if (registry.schema_version !== 1) fail("schema_version 必须为 1");
|
|
51
53
|
if (registry.registry_id !== "yss.skill-routing") fail("registry_id 必须为 yss.skill-routing");
|
|
@@ -99,10 +101,14 @@ export function validateSkillRegistry(registry, { lock, routerContract, skillSou
|
|
|
99
101
|
if (!MATURITIES.has(skill.maturity)) fail(`${skill.id} 未知 maturity: ${skill.maturity}`);
|
|
100
102
|
if (typeof skill.instance_default_discoverable !== "boolean") fail(`${skill.id} 缺少 instance_default_discoverable`);
|
|
101
103
|
if (skill.layer === "core" && skill.instance_default_discoverable !== true) fail(`${skill.id} 作为 core 必须默认可发现`);
|
|
102
|
-
if (
|
|
104
|
+
if (["specialist", "maintainer-only", "compatibility"].includes(skill.layer) && skill.instance_default_discoverable !== false) {
|
|
103
105
|
fail(`${skill.id} 作为 ${skill.layer} 不得默认可发现`);
|
|
104
106
|
}
|
|
105
|
-
if (skill.maturity === "deprecated")
|
|
107
|
+
if (skill.maturity === "deprecated") {
|
|
108
|
+
requireString(skill.replaced_by, `${skill.id}.replaced_by`);
|
|
109
|
+
requireString(skill.migration_deadline, `${skill.id}.migration_deadline`);
|
|
110
|
+
requireString(skill.cleanup_status, `${skill.id}.cleanup_status`);
|
|
111
|
+
}
|
|
106
112
|
if (skill.replaced_by && !ids.has(skill.replaced_by) && !skills.some((item) => item.id === skill.replaced_by)) {
|
|
107
113
|
// resolved in second pass
|
|
108
114
|
}
|
|
@@ -125,6 +131,7 @@ export function validateSkillRegistry(registry, { lock, routerContract, skillSou
|
|
|
125
131
|
const platform = registry.platform_skills ?? [];
|
|
126
132
|
if (!Array.isArray(platform)) fail("platform_skills 必须是数组");
|
|
127
133
|
const platformIds = new Set();
|
|
134
|
+
const platformAliases = new Map();
|
|
128
135
|
for (const skill of platform) {
|
|
129
136
|
requireString(skill.id, "platform_skills.id");
|
|
130
137
|
requireString(skill.root, `${skill.id}.root`);
|
|
@@ -132,9 +139,27 @@ export function validateSkillRegistry(registry, { lock, routerContract, skillSou
|
|
|
132
139
|
if (typeof skill.instance_default_discoverable !== "boolean" || skill.instance_default_discoverable !== false) {
|
|
133
140
|
fail(`${skill.id} 平台技能不得作为实例默认可发现`);
|
|
134
141
|
}
|
|
142
|
+
if (!Array.isArray(skill.aliases) || skill.aliases.some((alias) => typeof alias !== "string" || !PLATFORM_ALIAS_PATTERN.test(alias))) {
|
|
143
|
+
fail(`${skill.id} aliases 必须是合法 id 数组`);
|
|
144
|
+
}
|
|
135
145
|
if (platformIds.has(`${skill.root}:${skill.id}`)) fail(`重复平台技能: ${skill.root}/${skill.id}`);
|
|
136
146
|
platformIds.add(`${skill.root}:${skill.id}`);
|
|
137
147
|
}
|
|
148
|
+
const external = registry.external_skills ?? [];
|
|
149
|
+
if (!Array.isArray(external)) fail("external_skills 必须是数组");
|
|
150
|
+
const externalIds = new Set();
|
|
151
|
+
for (const skill of external) {
|
|
152
|
+
requireString(skill.id, "external_skills.id");
|
|
153
|
+
requireString(skill.source, `${skill.id}.source`);
|
|
154
|
+
if (externalIds.has(skill.id) || ids.has(skill.id) || aliases.has(skill.id) || platformAliases.has(skill.id)) fail(`external skill 冲突: ${skill.id}`);
|
|
155
|
+
externalIds.add(skill.id);
|
|
156
|
+
}
|
|
157
|
+
for (const skill of platform) {
|
|
158
|
+
for (const alias of skill.aliases) {
|
|
159
|
+
if (ids.has(alias) || aliases.has(alias) || platformAliases.has(alias)) fail(`alias 冲突: ${alias}`);
|
|
160
|
+
platformAliases.set(alias, `${skill.root}:${skill.id}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
138
163
|
|
|
139
164
|
if (lock) {
|
|
140
165
|
const shared = Object.keys(lock.skills?.shared ?? {}).sort();
|
|
@@ -179,7 +204,58 @@ export function validateSkillRegistry(registry, { lock, routerContract, skillSou
|
|
|
179
204
|
}
|
|
180
205
|
const closures = Object.keys(routerContract.dependency_closure ?? {});
|
|
181
206
|
for (const name of closures) {
|
|
182
|
-
if (!ids.has(name) && !aliases.has(name)) fail(`Router 闭包引用了未登记技能: ${name}`);
|
|
207
|
+
if (!ids.has(name) && !aliases.has(name) && !externalIds.has(name)) fail(`Router 闭包引用了未登记技能: ${name}`);
|
|
208
|
+
}
|
|
209
|
+
for (const dependencies of Object.values(routerContract.dependency_closure ?? {})) {
|
|
210
|
+
for (const names of Object.values(dependencies ?? {})) {
|
|
211
|
+
for (const name of names ?? []) if (!ids.has(name) && !aliases.has(name) && !externalIds.has(name)) fail(`Router 依赖引用了未登记技能: ${name}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (lifecycleContract || existsSync(LIFECYCLE_CONTRACT)) {
|
|
217
|
+
const lifecycle = lifecycleContract ?? yamlFromFile(LIFECYCLE_CONTRACT, "生命周期编排合同");
|
|
218
|
+
const routes = lifecycle.work_unit_routes;
|
|
219
|
+
if (!routes || typeof routes !== "object" || Array.isArray(routes)) fail("生命周期编排合同缺少 work_unit_routes");
|
|
220
|
+
const resolve = (name) => {
|
|
221
|
+
if (ids.has(name)) return name;
|
|
222
|
+
if (aliases.has(name)) return aliases.get(name);
|
|
223
|
+
if (platformAliases.has(name)) return platformAliases.get(name);
|
|
224
|
+
if (externalIds.has(name)) return name;
|
|
225
|
+
if ([...platformIds].some((key) => key.endsWith(`:${name}`))) return name;
|
|
226
|
+
return null;
|
|
227
|
+
};
|
|
228
|
+
for (const [routeId, route] of Object.entries(routes)) {
|
|
229
|
+
if (!route || typeof route !== "object") fail(`${routeId} 生命周期路由必须是对象`);
|
|
230
|
+
requireString(route.primary_skill, `${routeId}.primary_skill`);
|
|
231
|
+
if (!Array.isArray(route.supporting_skills)) fail(`${routeId}.supporting_skills 必须是数组`);
|
|
232
|
+
if (!Array.isArray(route.skills) || route.skills.length === 0) fail(`${routeId}.skills 不能为空`);
|
|
233
|
+
if (!route.applies_when || !route.not_applicable_reason) fail(`${routeId} 缺少 applies_when 或 not_applicable_reason`);
|
|
234
|
+
for (const name of [route.primary_skill, ...route.supporting_skills, ...route.skills]) {
|
|
235
|
+
if (!resolve(name)) fail(`生命周期路由引用了未登记技能: ${routeId} -> ${name}`);
|
|
236
|
+
}
|
|
237
|
+
if (route.frontend_route) {
|
|
238
|
+
requireString(route.frontend_route.primary_skill, `${routeId}.frontend_route.primary_skill`);
|
|
239
|
+
requireString(route.frontend_route.page_orchestration_skill, `${routeId}.frontend_route.page_orchestration_skill`);
|
|
240
|
+
const conditional = route.frontend_route.conditional_skills;
|
|
241
|
+
if (!conditional || typeof conditional !== "object" || Array.isArray(conditional)) fail(`${routeId}.frontend_route.conditional_skills 必须是对象`);
|
|
242
|
+
for (const [impact, names] of Object.entries(conditional)) {
|
|
243
|
+
if (!Array.isArray(names) || names.length === 0) fail(`${routeId}.frontend_route.conditional_skills.${impact} 必须是非空数组`);
|
|
244
|
+
for (const name of names) if (!resolve(name)) fail(`前端条件路由引用了未登记技能: ${routeId}.${impact} -> ${name}`);
|
|
245
|
+
if (route.frontend_route.not_applicable_reasons && typeof route.frontend_route.not_applicable_reasons[impact] !== "string") {
|
|
246
|
+
fail(`${routeId}.frontend_route.not_applicable_reasons.${impact} 必须是字符串`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (!resolve(route.frontend_route.primary_skill) || !resolve(route.frontend_route.page_orchestration_skill)) {
|
|
250
|
+
fail(`${routeId}.frontend_route 主入口引用了未登记技能`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (routeId === "work-unit.prototype-design") {
|
|
254
|
+
if (!route.skills.includes("prototype-review") || !route.supporting_skills.includes("prototype-review")) {
|
|
255
|
+
fail("原型工作单元必须包含独立 prototype-review supporting skill");
|
|
256
|
+
}
|
|
257
|
+
if (route.primary_skill === "prototype-review") fail("prototype-review 必须作为独立 supporting skill,不得成为生命周期主技能");
|
|
258
|
+
}
|
|
183
259
|
}
|
|
184
260
|
}
|
|
185
261
|
|
|
@@ -193,6 +269,7 @@ export function validateDefaultSkillRegistry() {
|
|
|
193
269
|
return validateSkillRegistry(registry, {
|
|
194
270
|
lock,
|
|
195
271
|
routerContract,
|
|
272
|
+
lifecycleContract: yamlFromFile(LIFECYCLE_CONTRACT, "生命周期编排合同"),
|
|
196
273
|
skillSource: (id) => readFileSync(path.join(ROOT, ".agents/skills", id, "SKILL.md"), "utf8")
|
|
197
274
|
});
|
|
198
275
|
}
|
|
@@ -49,6 +49,10 @@ export function unlockedProjectionEntries(candidates, allowedNames, isTracked) {
|
|
|
49
49
|
const allowed = new Set(allowedNames);
|
|
50
50
|
return candidates.filter((candidate) => candidate.isDirectory() || candidate.isSymbolicLink()).filter((candidate) => !allowed.has(candidate.name) && isTracked(candidate.name));
|
|
51
51
|
}
|
|
52
|
+
export function unlockedCanonicalEntries(names, allowedNames, hasSkillMd = () => true) {
|
|
53
|
+
const allowed = new Set(allowedNames);
|
|
54
|
+
return names.filter((name) => !allowed.has(name) && !OBSOLETE.has(name) && hasSkillMd(name)).sort();
|
|
55
|
+
}
|
|
52
56
|
export function syncSkills({ check = false } = {}) {
|
|
53
57
|
const lock = parseLock();
|
|
54
58
|
const shared = sharedFromLock(lock);
|
|
@@ -141,7 +145,7 @@ export function updateSkillLock(arguments_ = process.argv.slice(2)) {
|
|
|
141
145
|
const sharedNames = [...new Set([...existing, ...additions])].filter((name) => !removals.has(name) && !OBSOLETE.has(name)).sort();
|
|
142
146
|
const absent = sharedNames.filter((name) => !lstatSafe(path.join(SOURCE_ROOT, name))?.isDirectory());
|
|
143
147
|
if (absent.length) throw new TypeError(`锁文件声明的共享 skills 缺少权威内容: ${absent.join(", ")}`);
|
|
144
|
-
const unlocked = skillNames(SOURCE_ROOT)
|
|
148
|
+
const unlocked = unlockedCanonicalEntries(skillNames(SOURCE_ROOT), sharedNames, (name) => lstatSafe(path.join(SOURCE_ROOT, name, "SKILL.md"))?.isFile());
|
|
145
149
|
if (unlocked.length) throw new TypeError(`发现未登记到 skills-lock.json 的已跟踪共享 skills: ${unlocked.join(", ")}\n确认新增后运行 scripts/update-skill-lock --add=<skill-name>`);
|
|
146
150
|
const targets = [".agents/skills", ...PROJECTION_ROOTS];
|
|
147
151
|
const shared = Object.fromEntries(sharedNames.map((name) => {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { validateSkillGovernance } from "./lib/skill-governance.mjs";
|
|
3
|
+
|
|
4
|
+
try {
|
|
5
|
+
const result = validateSkillGovernance();
|
|
6
|
+
process.stdout.write(`技能规范冲突扫描通过(${result.legacy_aliases} 个兼容 alias)\n`);
|
|
7
|
+
} catch (error) {
|
|
8
|
+
process.stderr.write(`技能规范冲突扫描失败: ${error.message}\n`);
|
|
9
|
+
process.exitCode = 1;
|
|
10
|
+
}
|
|
@@ -5,7 +5,7 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
5
5
|
cd "$ROOT_DIR"
|
|
6
6
|
node -e 'const [major]=process.versions.node.split(".").map(Number); if (major < 22 || major >= 27) { console.error("模板工具需要 Node >=22 <27"); process.exit(1); }'
|
|
7
7
|
|
|
8
|
-
required_files=(yss-project.yaml AGENTS.md CONTEXT.md skills-lock.json docs/agents/yss-skill-registry.yaml docs/process/lifecycle-registry.yaml docs/process/lifecycle-registry-baseline.json docs/process/maintenance-intensity.yaml docs/process/schemas/lifecycle-checkpoint.schema.json docs/process/schemas/frontend-implementation-evidence.schema.json docs/process/templates/lifecycle-checkpoint-template.yaml docs/process/templates/frontend-implementation-plan-template.yaml docs/process/templates/frontend-implementation-verification-template.yaml scripts/repository-mode scripts/implementation-path-policy scripts/repository-scope-policy scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-skill-registry scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/export-yss-skills)
|
|
8
|
+
required_files=(yss-project.yaml AGENTS.md CONTEXT.md skills-lock.json docs/agents/yss-skill-registry.yaml docs/process/lifecycle-registry.yaml docs/process/lifecycle-registry-baseline.json docs/process/maintenance-intensity.yaml docs/process/schemas/lifecycle-checkpoint.schema.json docs/process/schemas/frontend-implementation-evidence.schema.json docs/process/templates/lifecycle-checkpoint-template.yaml docs/process/templates/frontend-implementation-plan-template.yaml docs/process/templates/frontend-implementation-verification-template.yaml scripts/repository-mode scripts/implementation-path-policy scripts/repository-scope-policy scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-skill-registry scripts/verify-skill-governance scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/export-yss-skills)
|
|
9
9
|
for required in "${required_files[@]}"; do test -f "$required" || { echo "缺少模板必需文件: $required" >&2; exit 1; }; done
|
|
10
10
|
|
|
11
11
|
repository_mode="$(scripts/repository-mode)"
|
|
@@ -19,6 +19,7 @@ fi
|
|
|
19
19
|
scripts/sync-skills --check
|
|
20
20
|
scripts/update-skill-lock --check
|
|
21
21
|
scripts/verify-skill-registry
|
|
22
|
+
scripts/verify-skill-governance
|
|
22
23
|
scripts/verify-yss-dto-openapi-profile
|
|
23
24
|
scripts/verify-yss-dto-openapi-scenarios
|
|
24
25
|
scripts/verify-lifecycle-registry
|
|
@@ -38,7 +39,7 @@ scripts/verify-yss-ui-scenarios
|
|
|
38
39
|
scripts/verify-openapi-yaml-first-scenarios
|
|
39
40
|
scripts/verify-openapi-json-handoff-scenarios
|
|
40
41
|
|
|
41
|
-
for entry in scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-skill-registry scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/verify-lifecycle-scenarios scripts/verify-matt-yss-integration-scenarios scripts/verify-prototype-backend-scaffold-scenarios scripts/verify-yss-router-scenarios scripts/verify-openapi-yaml-first-scenarios scripts/verify-openapi-json-handoff-scenarios scripts/verify-repository-scope-scenarios scripts/export-yss-skills; do node --check "$entry"; done
|
|
42
|
+
for entry in scripts/sync-skills scripts/update-skill-lock scripts/generate-lifecycle-artifacts scripts/verify-lifecycle-registry scripts/verify-lifecycle-checkpoint scripts/verify-frontend-implementation-evidence scripts/verify-maintenance-checkpoint scripts/verify-maintenance-intensity-scenarios scripts/verify-skill-registry scripts/verify-skill-governance scripts/verify-yss-dto-openapi-profile scripts/verify-yss-dto-openapi-scenarios scripts/verify-lifecycle-scenarios scripts/verify-matt-yss-integration-scenarios scripts/verify-prototype-backend-scaffold-scenarios scripts/verify-yss-router-scenarios scripts/verify-openapi-yaml-first-scenarios scripts/verify-openapi-json-handoff-scenarios scripts/verify-repository-scope-scenarios scripts/export-yss-skills; do node --check "$entry"; done
|
|
42
43
|
|
|
43
44
|
legacy_runtime="ru""by"
|
|
44
45
|
script_roots=(scripts)
|