create-yss-spec 3.3.7 → 3.4.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 +12 -13
- package/package.json +1 -1
- package/template/.agents/skills/.strategic-design-skills-manifest.json +3 -13
- package/template/.agents/skills/implementation-repo-onboarding/SKILL.md +2 -2
- package/template/.agents/skills/yss-application/SKILL.md +1 -1
- package/template/.agents/skills/yss-application/references/profiles/existing-domain-driven-maven.md +5 -0
- package/template/.agents/skills/yss-application/references/profiles/existing-layered-mvc-maven.md +5 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
- package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
- package/template/.agents/skills/yss-design-system/SKILL.md +19 -19
- package/template/.agents/skills/yss-design-system/references/data-quality-theme.md +13 -0
- package/template/.agents/skills/yss-design-system/references/design-qa-theme.md +3 -1
- package/template/.agents/skills/yss-design-system/references/design-system.md +7 -9
- package/template/.agents/skills/yss-formily/SKILL.md +21 -258
- package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
- package/template/.agents/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
- package/template/.agents/skills/yss-hook/SKILL.md +1 -1
- package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
- package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +17 -5
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.agents/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
- package/template/.agents/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
- package/template/.agents/skills/yss-openapi-governance/SKILL.md +2 -0
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +49 -16
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +1 -1
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +22 -9
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
- package/template/.agents/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
- package/template/.agents/skills/yss-prototype-stage/references/antd-integration.md +61 -0
- package/template/.agents/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
- package/template/.agents/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
- package/template/.agents/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
- package/template/.agents/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
- package/template/.agents/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
- package/template/.agents/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
- package/template/.agents/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
- package/template/.agents/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
- package/template/.agents/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
- package/template/.agents/skills/yss-tactical-design/SKILL.md +1 -1
- package/template/.agents/skills/yss-technical-design/SKILL.md +2 -0
- package/template/.agents/skills/yss-technical-design/references/engineering-design.schema.json +224 -0
- package/template/.agents/skills/yss-technical-design/references/technical-design-common.schema.json +6 -0
- package/template/.agents/skills/yss-technical-design/references/technical-design.schema.json +288 -10
- package/template/.agents/skills/yss-technical-design/scripts/engineering-design.mjs +30 -0
- package/template/.agents/skills/yss-technical-design/scripts/generate-schema.mjs +2 -1
- package/template/.agents/skills/yss-technical-design/scripts/validate-technical-design.mjs +20 -8
- package/template/.agents/skills/yss-technical-design/tests/engineering-scenarios.mjs +12 -0
- package/template/.agents/skills/yss-ui/SKILL.md +3 -2
- package/template/.agents/skills/yss-ui/references/component-routing.md +11 -10
- package/template/.agents/skills/yss-ui/references/specialized-components.md +52 -0
- package/template/.agents/skills/yss-web-controller/SKILL.md +1 -1
- package/template/.agents/skills/yss-web-controller/references/profiles/existing-domain-driven-maven.md +5 -0
- package/template/.agents/skills/yss-web-controller/references/profiles/existing-layered-mvc-maven.md +5 -0
- package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
- package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
- package/template/.codex/skills/implementation-repo-onboarding/SKILL.md +2 -2
- package/template/.codex/skills/yss-application/SKILL.md +1 -1
- package/template/.codex/skills/yss-application/references/profiles/existing-domain-driven-maven.md +5 -0
- package/template/.codex/skills/yss-application/references/profiles/existing-layered-mvc-maven.md +5 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
- package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
- package/template/.codex/skills/yss-design-system/SKILL.md +19 -19
- package/template/.codex/skills/yss-design-system/references/data-quality-theme.md +13 -0
- package/template/.codex/skills/yss-design-system/references/design-qa-theme.md +3 -1
- package/template/.codex/skills/yss-design-system/references/design-system.md +7 -9
- package/template/.codex/skills/yss-formily/SKILL.md +21 -258
- package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
- package/template/.codex/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
- package/template/.codex/skills/yss-hook/SKILL.md +1 -1
- package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
- package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +17 -5
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.codex/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
- package/template/.codex/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
- package/template/.codex/skills/yss-openapi-governance/SKILL.md +2 -0
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +49 -16
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +1 -1
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +22 -9
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
- package/template/.codex/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
- package/template/.codex/skills/yss-prototype-stage/references/antd-integration.md +61 -0
- package/template/.codex/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
- package/template/.codex/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
- package/template/.codex/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
- package/template/.codex/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
- package/template/.codex/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
- package/template/.codex/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
- package/template/.codex/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
- package/template/.codex/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
- package/template/.codex/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
- package/template/.codex/skills/yss-tactical-design/SKILL.md +1 -1
- package/template/.codex/skills/yss-technical-design/SKILL.md +2 -0
- package/template/.codex/skills/yss-technical-design/references/engineering-design.schema.json +224 -0
- package/template/.codex/skills/yss-technical-design/references/technical-design-common.schema.json +6 -0
- package/template/.codex/skills/yss-technical-design/references/technical-design.schema.json +288 -10
- package/template/.codex/skills/yss-technical-design/scripts/engineering-design.mjs +30 -0
- package/template/.codex/skills/yss-technical-design/scripts/generate-schema.mjs +2 -1
- package/template/.codex/skills/yss-technical-design/scripts/validate-technical-design.mjs +20 -8
- package/template/.codex/skills/yss-technical-design/tests/engineering-scenarios.mjs +12 -0
- package/template/.codex/skills/yss-ui/SKILL.md +3 -2
- package/template/.codex/skills/yss-ui/references/component-routing.md +11 -10
- package/template/.codex/skills/yss-ui/references/specialized-components.md +52 -0
- package/template/.codex/skills/yss-web-controller/SKILL.md +1 -1
- package/template/.codex/skills/yss-web-controller/references/profiles/existing-domain-driven-maven.md +5 -0
- package/template/.codex/skills/yss-web-controller/references/profiles/existing-layered-mvc-maven.md +5 -0
- package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
- package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
- package/template/.cursor/skills/implementation-repo-onboarding/SKILL.md +2 -2
- package/template/.cursor/skills/yss-application/SKILL.md +1 -1
- package/template/.cursor/skills/yss-application/references/profiles/existing-domain-driven-maven.md +5 -0
- package/template/.cursor/skills/yss-application/references/profiles/existing-layered-mvc-maven.md +5 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
- package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
- package/template/.cursor/skills/yss-design-system/SKILL.md +19 -19
- package/template/.cursor/skills/yss-design-system/references/data-quality-theme.md +13 -0
- package/template/.cursor/skills/yss-design-system/references/design-qa-theme.md +3 -1
- package/template/.cursor/skills/yss-design-system/references/design-system.md +7 -9
- package/template/.cursor/skills/yss-formily/SKILL.md +21 -258
- package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
- package/template/.cursor/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
- package/template/.cursor/skills/yss-hook/SKILL.md +1 -1
- package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +17 -5
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.cursor/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
- package/template/.cursor/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
- package/template/.cursor/skills/yss-openapi-governance/SKILL.md +2 -0
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +49 -16
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +1 -1
- package/template/.cursor/skills/yss-prototype-stage/SKILL.md +22 -9
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
- package/template/.cursor/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
- package/template/.cursor/skills/yss-prototype-stage/references/antd-integration.md +61 -0
- package/template/.cursor/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
- package/template/.cursor/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
- package/template/.cursor/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
- package/template/.cursor/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
- package/template/.cursor/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
- package/template/.cursor/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
- package/template/.cursor/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
- package/template/.cursor/skills/yss-tactical-design/SKILL.md +1 -1
- package/template/.cursor/skills/yss-technical-design/SKILL.md +2 -0
- package/template/.cursor/skills/yss-technical-design/references/engineering-design.schema.json +224 -0
- package/template/.cursor/skills/yss-technical-design/references/technical-design-common.schema.json +6 -0
- package/template/.cursor/skills/yss-technical-design/references/technical-design.schema.json +288 -10
- package/template/.cursor/skills/yss-technical-design/scripts/engineering-design.mjs +30 -0
- package/template/.cursor/skills/yss-technical-design/scripts/generate-schema.mjs +2 -1
- package/template/.cursor/skills/yss-technical-design/scripts/validate-technical-design.mjs +20 -8
- package/template/.cursor/skills/yss-technical-design/tests/engineering-scenarios.mjs +12 -0
- package/template/.cursor/skills/yss-ui/SKILL.md +3 -2
- package/template/.cursor/skills/yss-ui/references/component-routing.md +11 -10
- package/template/.cursor/skills/yss-ui/references/specialized-components.md +52 -0
- package/template/.cursor/skills/yss-web-controller/SKILL.md +1 -1
- package/template/.cursor/skills/yss-web-controller/references/profiles/existing-domain-driven-maven.md +5 -0
- package/template/.cursor/skills/yss-web-controller/references/profiles/existing-layered-mvc-maven.md +5 -0
- package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
- package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
- package/template/.pi/skills/implementation-repo-onboarding/SKILL.md +2 -2
- package/template/.pi/skills/yss-application/SKILL.md +1 -1
- package/template/.pi/skills/yss-application/references/profiles/existing-domain-driven-maven.md +5 -0
- package/template/.pi/skills/yss-application/references/profiles/existing-layered-mvc-maven.md +5 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +3 -3
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/layer-skill-routing.md +18 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +1 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +13 -4
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +9 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +2 -1
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +6 -4
- package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +108 -12
- package/template/.pi/skills/yss-design-system/SKILL.md +19 -19
- package/template/.pi/skills/yss-design-system/references/data-quality-theme.md +13 -0
- package/template/.pi/skills/yss-design-system/references/design-qa-theme.md +3 -1
- package/template/.pi/skills/yss-design-system/references/design-system.md +7 -9
- package/template/.pi/skills/yss-formily/SKILL.md +21 -258
- package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +17 -13
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.eslintrc.cjs +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.npmrc.example +2 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/DESIGN.md +264 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/README.md +13 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore +6 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/micro-config.json +5 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/orval.config.ts +2 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/package.json +30 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.development +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.example +5 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/.env.production.standalone +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/index.html +2 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/package.json +34 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/public/favicon.svg +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/App.vue +15 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/api/mutator.ts +7 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/components/ThemeScope.vue +11 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/config/theme.json +41 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/env.d.ts +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/main.ts +40 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/router/index.ts +8 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/store/theme.ts +37 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/styles/index.less +6 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/types/microAppBridge.ts +28 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/utils/microAppRouterBridge.ts +266 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/NotFound.vue +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/src/views/Welcome.vue +1 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/tsconfig.json +23 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/packages/vite.config.ts +16 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-lock.yaml +9026 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/pnpm-workspace.yaml +7 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-baseline.md +17 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/references/data-quality-v1.manifest.json +49 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/generate_scaffold.mjs +41 -13
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/refresh_baseline.mjs +29 -0
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/run_scaffold_verification.mjs +5 -1
- package/template/.pi/skills/yss-frontend-scaffold-generator/scripts/scaffold-generator.test.mjs +32 -0
- package/template/.pi/skills/yss-hook/SKILL.md +1 -1
- package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +3 -3
- package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +5 -3
- package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +17 -5
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/SKILL.md +2 -2
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/agents/openai.yaml +1 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/generate_scaffold.mjs +12 -8
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
- package/template/.pi/skills/yss-layered-mvc-scaffold-generator/scripts/scaffold-generator.test.mjs +97 -9
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/SKILL.md +2 -2
- package/template/.pi/skills/yss-mvc-data-analysis-project-initializer/scripts/generate_project.mjs +1 -1
- package/template/.pi/skills/yss-openapi-governance/SKILL.md +2 -0
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +49 -16
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +1 -1
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +22 -9
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/package.json +16 -0
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +1678 -0
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/app.js +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/index.html +11 -0
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/styles.css +28 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/app.js +50 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/index.html +38 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/scenarios.js +7 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/styles.css +20 -0
- package/template/.pi/skills/yss-prototype-stage/references/antd-component-catalog.json +736 -0
- package/template/.pi/skills/yss-prototype-stage/references/antd-integration.md +61 -0
- package/template/.pi/skills/yss-prototype-stage/references/html-prototype-practices.md +14 -0
- package/template/.pi/skills/yss-prototype-stage/references/product-design-adapter.md +28 -51
- package/template/.pi/skills/yss-prototype-stage/references/prototype-profile-routing.md +15 -4
- package/template/.pi/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +71 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +26 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/offline-html.mjs +121 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/prototype-contract.mjs +52 -143
- package/template/.pi/skills/yss-prototype-stage/tests/antd-reference.test.mjs +24 -0
- package/template/.pi/skills/yss-prototype-stage/tests/browser-smoke.mjs +77 -0
- package/template/.pi/skills/yss-prototype-stage/tests/run-scenarios.mjs +73 -26
- package/template/.pi/skills/yss-prototype-stage/tests/workbench-smoke.mjs +57 -0
- package/template/.pi/skills/yss-skill-source-index-refresh/references/source-map-config.md +0 -1
- package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +0 -1
- package/template/.pi/skills/yss-tactical-design/SKILL.md +1 -1
- package/template/.pi/skills/yss-technical-design/SKILL.md +2 -0
- package/template/.pi/skills/yss-technical-design/references/engineering-design.schema.json +224 -0
- package/template/.pi/skills/yss-technical-design/references/technical-design-common.schema.json +6 -0
- package/template/.pi/skills/yss-technical-design/references/technical-design.schema.json +288 -10
- package/template/.pi/skills/yss-technical-design/scripts/engineering-design.mjs +30 -0
- package/template/.pi/skills/yss-technical-design/scripts/generate-schema.mjs +2 -1
- package/template/.pi/skills/yss-technical-design/scripts/validate-technical-design.mjs +20 -8
- package/template/.pi/skills/yss-technical-design/tests/engineering-scenarios.mjs +12 -0
- package/template/.pi/skills/yss-ui/SKILL.md +3 -2
- package/template/.pi/skills/yss-ui/references/component-routing.md +11 -10
- package/template/.pi/skills/yss-ui/references/specialized-components.md +52 -0
- package/template/.pi/skills/yss-web-controller/SKILL.md +1 -1
- package/template/.pi/skills/yss-web-controller/references/profiles/existing-domain-driven-maven.md +5 -0
- package/template/.pi/skills/yss-web-controller/references/profiles/existing-layered-mvc-maven.md +5 -0
- package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +4 -3
- package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +1 -1
- package/template/CONTEXT.md +1 -0
- package/template/DESIGN.md +31 -14
- package/template/README.md +4 -6
- package/template/__yss_dotfile__.gitignore +4 -0
- package/template/docs/agents/backend-architecture-profiles.md +4 -0
- package/template/docs/agents/digital-human-roles.yaml +4 -4
- package/template/docs/agents/skill-migrations.md +15 -2
- package/template/docs/agents/yss-skill-registry.yaml +19 -40
- package/template/docs/design/README.md +4 -4
- package/template/docs/design/design-system-sync.yaml +2 -1
- package/template/docs/design/design.md +23 -31
- package/template/docs/design/preview-dark.html +3 -3
- package/template/docs/design/preview.css +1 -1
- package/template/docs/design/preview.html +2 -2
- package/template/docs/design/templates/interaction-spec-template.md +2 -2
- package/template/docs/design/templates/prototype-confirmation-template.md +2 -2
- package/template/docs/design/templates/prototype-evidence-template.yaml +18 -22
- package/template/docs/design/templates/prototype-review-checklist.md +5 -3
- package/template/docs/design/templates/state-matrix-template.md +1 -1
- package/template/docs/design/templates/visual-baseline-template.yaml +3 -2
- package/template/docs/design/tokens/.design-md-projection.json +7 -7
- package/template/docs/design/tokens/theme.json +16 -10
- package/template/docs/design/tokens/tokens.compact.json +521 -237
- package/template/docs/design/tokens/tokens.dark.json +527 -240
- package/template/docs/design/tokens/tokens.default.json +513 -235
- package/template/docs/design/tokens/variables.css +67 -65
- package/template/docs/design/tokens/variables.dark.css +41 -41
- package/template/docs/plan/templates/market-analysis-template.md +3 -3
- package/template/docs/plan/templates/user-pain-points-template.md +3 -3
- package/template/docs/process/delivery-preflight.md +72 -0
- package/template/docs/process/document-writing.md +5 -1
- package/template/docs/process/existing-backend-architecture.md +31 -0
- package/template/docs/process/existing-ui-baseline.md +40 -0
- package/template/docs/process/frontend-backend-delivery.md +20 -6
- package/template/docs/process/implementation-repo-integration.md +6 -0
- package/template/docs/process/lifecycle-registry-baseline.json +1 -1
- package/template/docs/process/lifecycle-registry.yaml +5 -5
- package/template/docs/process/schemas/api-contract-decision.schema.json +74 -0
- package/template/docs/process/schemas/backend-architecture-identity.schema.json +111 -14
- package/template/docs/process/schemas/data-architecture-decision.schema.json +34 -0
- package/template/docs/process/schemas/delivery-preflight-input.schema.json +158 -0
- package/template/docs/process/schemas/delivery-preflight-result.schema.json +159 -0
- package/template/docs/process/schemas/digital-human-task-package.schema.json +1 -1
- package/template/docs/process/schemas/existing-ui-baseline.schema.json +365 -0
- package/template/docs/process/schemas/frontend-delivery-acceptance-v3.schema.json +308 -0
- package/template/docs/process/schemas/frontend-strategic-preflight-v2.schema.json +114 -0
- package/template/docs/process/schemas/implementation-repository-preparation-result.schema.json +80 -24
- package/template/docs/process/schemas/project-scaffold-contract.schema.json +85 -11
- package/template/docs/process/schemas/strategic-design-handoff-v5.schema.json +932 -0
- package/template/docs/process/schemas/strategic-design-handoff.schema.json +296 -107
- package/template/docs/process/schemas/strategic-handoff-delivery-verification.schema.json +19 -0
- package/template/docs/process/schemas/strategic-handoff-delivery.schema.json +84 -0
- package/template/docs/process/schemas/strategic-handoff-export-v2.schema.json +378 -0
- package/template/docs/process/schemas/strategic-handoff-import-receipt-v3.schema.json +42 -0
- package/template/docs/process/strategic-handoff-package.md +42 -17
- package/template/docs/user-guide//346/212/200/346/234/257/350/256/276/350/256/241/347/224/250/346/210/267/346/214/207/345/215/227.md +43 -0
- package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214.md +83 -67
- package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214/347/264/242/345/274/225.md +9 -10
- package/template/docs/user-guide//350/256/276/345/244/207/345/200/237/347/224/250/350/264/257/347/251/277/346/241/210/344/276/213.md +13 -10
- package/template/scripts/audit-legacy-backend-scaffold +29 -0
- package/template/scripts/backend-delivery +20 -4
- package/template/scripts/lib/api-contract-decision.mjs +49 -0
- package/template/scripts/lib/api-contract-decision.test.mjs +69 -0
- package/template/scripts/lib/approved-execution-context.mjs +106 -0
- package/template/scripts/lib/backend-architecture.mjs +12 -0
- package/template/scripts/lib/backend-delivery.mjs +10 -6
- package/template/scripts/lib/backend-scaffold-prerequisites.mjs +123 -0
- package/template/scripts/lib/delivery-preflight.mjs +238 -0
- package/template/scripts/lib/existing-backend-architecture.mjs +139 -0
- package/template/scripts/lib/existing-ui-baseline.mjs +84 -0
- package/template/scripts/lib/frontend-delivery.mjs +23 -15
- package/template/scripts/lib/implementation-contract-compiler.mjs +19 -5
- package/template/scripts/lib/json-schema.mjs +19 -4
- package/template/scripts/lib/legacy-backend-scaffold-audit.mjs +87 -0
- package/template/scripts/lib/legacy-backend-scaffold-audit.test.mjs +64 -0
- package/template/scripts/lib/lifecycle-transition.mjs +153 -5
- package/template/scripts/lib/openapi-draft-validation.mjs +111 -0
- package/template/scripts/lib/profile-skill-sync.mjs +26 -0
- package/template/scripts/lib/skill-registry.mjs +17 -3
- package/template/scripts/lib/skill-supply-chain.mjs +12 -1
- package/template/scripts/lib/strategic-feedback.mjs +2 -2
- package/template/scripts/lib/strategic-handoff-consumption.mjs +8 -7
- package/template/scripts/lib/strategic-handoff-design-targets.mjs +2 -3
- package/template/scripts/lib/strategic-handoff-io.mjs +10 -0
- package/template/scripts/lib/strategic-handoff.mjs +124 -32
- package/template/scripts/lib/task-package.mjs +11 -3
- package/template/scripts/lib/technical-design-boundary.mjs +9 -1
- package/template/scripts/lib/ui-baseline.mjs +26 -0
- package/template/scripts/lib/user-decision.mjs +4 -1
- package/template/scripts/preflight-delivery +14 -0
- package/template/scripts/strategic-handoff +23 -6
- package/template/scripts/sync-profile-skills +4 -5
- package/template/scripts/verify-openapi-draft-validation-record +10 -129
- package/template/scripts/verify-strategic-context-import +12 -14
- package/template/skills-lock.json +25 -80
- package/template/yss-public-skills.json +0 -6
- package/template.snapshot.json +8 -4
- package/template/.agents/skills/yss-antd-design/SKILL.md +0 -35
- package/template/.agents/skills/yss-antd-design/references/boundaries.md +0 -30
- package/template/.agents/skills/yss-antd-design/references/cli-matrix.md +0 -38
- package/template/.agents/skills/yss-antd-design/references/evidence.md +0 -35
- package/template/.agents/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
- package/template/.agents/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
- package/template/.agents/skills/yss-antdv-next-design/SKILL.md +0 -48
- package/template/.agents/skills/yss-antdv-next-design/references/boundaries.md +0 -25
- package/template/.agents/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
- package/template/.agents/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
- package/template/.agents/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
- package/template/.agents/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
- package/template/.agents/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
- package/template/.agents/skills/yss-components/SKILL.md +0 -386
- package/template/.agents/skills/yss-components/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-components/references/frontend-docs.md +0 -9
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
- package/template/.agents/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
- package/template/.agents/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
- package/template/.agents/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
- package/template/.agents/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
- package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
- package/template/.codex/skills/yss-antd-design/SKILL.md +0 -35
- package/template/.codex/skills/yss-antd-design/references/boundaries.md +0 -30
- package/template/.codex/skills/yss-antd-design/references/cli-matrix.md +0 -38
- package/template/.codex/skills/yss-antd-design/references/evidence.md +0 -35
- package/template/.codex/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
- package/template/.codex/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
- package/template/.codex/skills/yss-antdv-next-design/SKILL.md +0 -48
- package/template/.codex/skills/yss-antdv-next-design/references/boundaries.md +0 -25
- package/template/.codex/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
- package/template/.codex/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
- package/template/.codex/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
- package/template/.codex/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
- package/template/.codex/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
- package/template/.codex/skills/yss-components/SKILL.md +0 -386
- package/template/.codex/skills/yss-components/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-components/references/frontend-docs.md +0 -9
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
- package/template/.codex/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
- package/template/.codex/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
- package/template/.codex/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
- package/template/.codex/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
- package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
- package/template/.cursor/skills/yss-antd-design/SKILL.md +0 -35
- package/template/.cursor/skills/yss-antd-design/references/boundaries.md +0 -30
- package/template/.cursor/skills/yss-antd-design/references/cli-matrix.md +0 -38
- package/template/.cursor/skills/yss-antd-design/references/evidence.md +0 -35
- package/template/.cursor/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
- package/template/.cursor/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
- package/template/.cursor/skills/yss-antdv-next-design/SKILL.md +0 -48
- package/template/.cursor/skills/yss-antdv-next-design/references/boundaries.md +0 -25
- package/template/.cursor/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
- package/template/.cursor/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
- package/template/.cursor/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
- package/template/.cursor/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
- package/template/.cursor/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
- package/template/.cursor/skills/yss-components/SKILL.md +0 -386
- package/template/.cursor/skills/yss-components/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-components/references/frontend-docs.md +0 -9
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
- package/template/.cursor/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
- package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
- package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
- package/template/.cursor/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
- package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
- package/template/.pi/skills/yss-antd-design/SKILL.md +0 -35
- package/template/.pi/skills/yss-antd-design/references/boundaries.md +0 -30
- package/template/.pi/skills/yss-antd-design/references/cli-matrix.md +0 -38
- package/template/.pi/skills/yss-antd-design/references/evidence.md +0 -35
- package/template/.pi/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
- package/template/.pi/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
- package/template/.pi/skills/yss-antdv-next-design/SKILL.md +0 -48
- package/template/.pi/skills/yss-antdv-next-design/references/boundaries.md +0 -25
- package/template/.pi/skills/yss-antdv-next-design/references/cli-matrix.md +0 -34
- package/template/.pi/skills/yss-antdv-next-design/references/fact-pack.md +0 -38
- package/template/.pi/skills/yss-antdv-next-design/scripts/collect-antdv-next-facts.mjs +0 -213
- package/template/.pi/skills/yss-antdv-next-design/scripts/validate-fact-pack.mjs +0 -168
- package/template/.pi/skills/yss-antdv-next-design/tests/run-scenarios.mjs +0 -139
- package/template/.pi/skills/yss-components/SKILL.md +0 -386
- package/template/.pi/skills/yss-components/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-components/references/frontend-docs.md +0 -9
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-mvc-scaffold-generator/SKILL.md +0 -8
- package/template/.pi/skills/yss-mvc-scaffold-generator/agents/openai.yaml +0 -4
- package/template/.pi/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +0 -50
- package/template/.pi/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +0 -42
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/architecture.md +0 -28
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.mjs.txt +0 -137
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/generate_project.test.mjs.txt +0 -341
- package/template/.pi/skills/yss-mvc-scaffold-generator/references/history/skill.md +0 -87
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +0 -3
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +0 -9
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +0 -74
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.test.mjs +0 -36
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +0 -114
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +0 -90
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +0 -54
- package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +0 -103
- package/template/docs/user-guide//346/210/230/346/234/257/350/256/276/350/256/241/345/255/220/351/241/271/347/233/256/347/224/250/346/210/267/346/211/213/345/206/214.md +0 -35
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: yss-mvc-scaffold-generator
|
|
3
|
-
description: 从空目录初始化独立 Git 管理的 YSS Java 8 MVC 数据分析 project-instance,生成固定六模块、YSS 标准组件、Oracle/OceanBase Oracle 与 Mock HTTP API;不用于通用 DDD 服务。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# YSS MVC Scaffold Generator
|
|
7
|
-
|
|
8
|
-
本 Skill 是 YSS MVC 数据分析项目的确定性机械生成器。它生成独立 `project-instance`、独立 Git 仓库,并将项目根直接作为 Maven 工程根,包含 `server`、`core`、`client`、`repository`、`adapter`、`feign-client` 六模块;业务功能仍须回到 `yss-product-lifecycle` 与 `yss-implementation-contract-compiler` 按垂直切片实现。
|
|
9
|
-
|
|
10
|
-
生成器编排入口位于 `scripts/generate_project.mjs`,参数与环境解析、skillUtils 文件操作、项目治理封装和 Maven/Java 模板分别位于 `scripts/lib/`。初始化阶段只写入 staging 目录并在成功后原子重命名,不执行 Maven 或网络依赖下载。
|
|
11
|
-
|
|
12
|
-
用户以“初始化新项目”进入时,由 `product-service-artifacts` 调用本生成器并默认附加 `docs/service/` 服务级研发产物;不要要求用户在提示词中另行说明“初始化产物”。未提供职责时生成 `skeleton`,不阻断工程创建。
|
|
13
|
-
|
|
14
|
-
## 输入
|
|
15
|
-
|
|
16
|
-
- `project-name`:小写连字符项目名。
|
|
17
|
-
- `base-package`:合法 Java 包名。
|
|
18
|
-
- `target-dir`:最终项目根目录,必须显式给出。
|
|
19
|
-
- `database`:支持 `oracle`、`oceanbase-oracle`,默认 `oracle`。
|
|
20
|
-
- `with-mock`:生成 `mock` Profile、Mock 执行器及 HTTP 冒烟测试。
|
|
21
|
-
- `maven-settings`:可选的外部 Maven settings 绝对路径,仅用于后续验证;未显式提供时依次读取 `YSS_MAVEN_SETTINGS` 和用户目录 `.m2/settings.xml`。不复制进项目、不写入生成清单。
|
|
22
|
-
|
|
23
|
-
## 执行
|
|
24
|
-
|
|
25
|
-
先预演:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
node scripts/generate_project.mjs --project-name mvc-analysis-item1 --base-package com.yss.dataanalysis.item1 --target-dir /path/to/mvc-analysis-item1 --database oracle --with-mock --maven-settings /path/to/settings.xml --dry-run
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
确认目标目录后去掉 `--dry-run`。生成后运行:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
node scripts/verify_project.mjs --project-root /path/to/mvc-analysis-item1
|
|
35
|
-
cd /path/to/mvc-analysis-item1
|
|
36
|
-
./mvnw validate
|
|
37
|
-
./mvnw test
|
|
38
|
-
./mvnw package
|
|
39
|
-
./mvnw spring-boot:run -pl mvc-analysis-item1-server -Dspring-boot.run.profiles=mock
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Windows 使用 `mvnw.cmd`。指定外部 settings 时,Maven 命令必须加 `-s <settings.xml>`。启动后对 `POST /api/analysis/query` 执行 HTTP 冒烟测试。
|
|
43
|
-
|
|
44
|
-
生成项目进入 API/Controller 实现后,登记命令必须包含 Java Web/Javadoc 检查、`fmt:check`、测试和构建。Smart-doc 仅作为人工按需从 Controller 生成辅助文档的工具,不属于默认 AI Coding 验证链路;只有用户明确要求生成 Smart-doc 文档时才执行对应 goal。
|
|
45
|
-
|
|
46
|
-
生成结果包含根 `yss-project.yaml`、`AGENTS.md`、`CONTEXT.md`、生命周期事实源、共享 skills、本地 Ticket 入口、`external-repository` 实现仓库登记和 `.gitignore`。生成器执行 `git init --initial-branch=main`;旧版 Git自动回退到 `git init` 后重命名分支。只初始化仓库,不创建 commit 或 remote。
|
|
47
|
-
|
|
48
|
-
## 硬约束
|
|
49
|
-
|
|
50
|
-
- `target-dir` 是最终项目根,不在其下再次创建项目名目录。
|
|
51
|
-
- Windows 下优先使用纯 ASCII、长度可控且不属于其他项目 Git 根的父目录(例如 `C:\\projects`);旧 Maven 插件在非 ASCII 长路径上可能产生 reactor classpath 编码错误。
|
|
52
|
-
- 非空目标目录拒绝生成;本 Skill 不提供隐式覆盖或删除。
|
|
53
|
-
- 目标目录必须成为独立 Git 根;生成前必须能执行 `git --version`,生成后必须验证 Git 根等于 `target-dir`、分支为 `main`、commit 数为零且 remote 为空。
|
|
54
|
-
- 生成前必须从 `git config --get user.name` 读取非空作者名;作者名包含换行或 `*/` 时拒绝生成。生成的 Controller 类和公开接口方法以该值填写 `@author`,不得固定为 `system`。
|
|
55
|
-
- 项目根同时是 Maven 工程根和独立 Git 根,固定登记为 `repository_scope: external-repository`、`project_root: .`;六模块直接位于项目根目录。
|
|
56
|
-
- 生成内容先写入同父目录 staging,全部步骤成功后再原子重命名;失败时只清理本次 staging,不留下不可重试的半成品。Maven 依赖解析明确延后到验证阶段;settings 缺失只记录 `maven-default` / `maven_settings_available=false`,不会压缩或截断生成的文件结构。
|
|
57
|
-
- 每个项目持有自己的 `project-instance` 身份与业务资产;不得为了新项目改写模板工具仓库的项目名称或业务上下文。
|
|
58
|
-
- 模块名固定使用正确拼写 `feign-client`;旧项目中的 `fegin-client` 只作为迁移来源,不继续传播。
|
|
59
|
-
- Mock 与 Oracle 使用同一 Controller 和 DTO 契约,只替换 `AnalysisQueryExecutor` 实现。
|
|
60
|
-
- Mock 仅用于本地联调和契约验证,不得携带真实凭据或生产数据。
|
|
61
|
-
- 启用 Mock 时必须生成 `bootstrap-mock.yml`,并在 Spring Cloud Bootstrap 阶段同时禁用 Nacos Discovery、Nacos Config 和 Config import-check;不能只在 `application-mock.yml` 中禁用。
|
|
62
|
-
- `bootstrap.yml` 的默认顺序为 `${app.env:dev},datasource,nacos,<database-profile>,mock`,`mock` 必须最后以覆盖 Nacos Bootstrap 配置,且 profile 列表不得有尾随逗号。未启用 Mock 时不生成、不激活 `mock`。
|
|
63
|
-
- Mock 与数据库 profile 同时出现时,Mock 执行器优先;数据库执行器使用 `<database-profile> & !mock` 表达式,禁止两个 `AnalysisQueryExecutor` 同时注册。
|
|
64
|
-
- Mock 的 `application-mock.yml` 必须关闭 Leaf Segment/Snowflake,并在 `spring.autoconfigure.exclude` 中排除 `DataSourceAutoConfiguration`、`MybatisPlusConfiguration` 和 `LeafDataSourceConfiguration`;组件扫描同时排除 `com.yss.cloud.mybatis..*`、`com.yss.cloud.sankuai..*`,`@EnableDistributedId` 与 `MapperConfiguration` 只允许在 `!mock` 配置类中加载,确保无数据库时 Mock 测试和 HTTP 冒烟可运行。
|
|
65
|
-
- Oracle Adapter 只保留可编译 seam;连接信息通过环境变量注入,生成器不写真实账号密码。
|
|
66
|
-
- 工程版本、YSS 父 POM 和组件 BOM 固定为 `2.0.0-SNAPSHOT`,运行时固定 Java 8。
|
|
67
|
-
- 标准能力默认包含审计日志、分布式 ID、Excel、Nacos、Redis Cache、OpenFeign、Smart-doc、用户信息和 Actuator。
|
|
68
|
-
- server POM 必须保留 `spring-boot-maven-plugin`和默认激活的 `nacos` profile;Nacos 依赖只在该 profile 中声明。
|
|
69
|
-
- `bootstrap-nacos.yml` 默认使用 `${nacosserver:192.168.165.58:8848}`、`${nacos_group:yss-dm}` 和 `${namespace:yss-datamiddle}`,Discovery/Config 在 `nacos` profile 中开启,并由 `bootstrap-mock.yml` 在 Mock 模式覆盖关闭。
|
|
70
|
-
- Smart-doc 使用 `assets/smart-doc.json.template`的完整配置并动态生成项目名、Controller 包和修订时间;Torna Token 与内网地址不进入生成项目。Smart-doc 插件保留跨模块 `includes`,但不绑定 Maven `executions`,不进入默认 `validate` / `test` / `package` / CI / AI Coding 验证命令。
|
|
71
|
-
- Logback 使用 `assets/logback-spring.xml.template`;`dev,mock` 与 `uat,pro,oracle,oceanbase-oracle` 必须是并列 profile,项目名和基础包动态替换。
|
|
72
|
-
- Controller 类和公开接口方法必须按真实业务语义生成 Javadoc,`@author` 使用生成时读取的 Git 用户名,`@date` 使用 `yyyy/MM/dd HH:mm`,方法按签名完整生成 `@param`和 `@return`。
|
|
73
|
-
- API 实现不得交付单行 Javadoc block tag、Mapping 注解/方法同行或方法体单行压缩代码;相关规范由生成项目中的工程约定和实际验证命令约束。
|
|
74
|
-
- API 完成证据必须包含 `yss-skill-execution-result.yaml` 和 `fresh-verification.md`,并记录 Controller 路由、DTO、响应 Wrapper、错误响应及契约测试与冻结 OpenAPI 的一致性。Smart-doc 输出不是 OpenAPI Freeze、契约审查或功能完成证据。
|
|
75
|
-
- Maven settings 始终是项目外部的私密输入;不得复制到目标目录、写入 README/生成清单或提交 Git。
|
|
76
|
-
- 持久层固定使用 YSS MyBatis-Plus;标准 CRUD 使用 MP,复杂 SQL 写入 mapper.xml,主键策略为 `IdType.ASSIGN_ID`。
|
|
77
|
-
- 生成范围仅包含工程骨架、示例 Mock seam 和验证测试,不声称业务 Spec、OpenAPI Freeze 或 Slice Implementation Contract 已批准。
|
|
78
|
-
- 完成结论必须包含结构验证,以及实际执行的 Maven 命令;无法下载依赖时如实记录环境阻塞。
|
|
79
|
-
|
|
80
|
-
模块职责和依赖方向见 [references/architecture.md](references/architecture.md)。
|
|
81
|
-
|
|
82
|
-
## API 契约与人工文档边界
|
|
83
|
-
|
|
84
|
-
- 冻结的 OpenAPI 3.1 YAML 是接口契约的唯一事实来源;`yss-openapi-governance` 负责契约治理与 Freeze,`yss-openapi-draft-review` 负责冻结前审查,`yss-web-controller` 负责按冻结契约实现 Controller。
|
|
85
|
-
- Smart-doc 是人工可选的源码文档工具。其输出只用于查看当前 Controller 实现,不得反向定义、覆盖或批准冻结 OpenAPI。
|
|
86
|
-
- AI 默认不执行 `smart-doc:html`、`smart-doc:openapi` 或 `smart-doc:torna-rest`。`torna-rest` 涉及外部写入,执行前还必须获得对应授权。
|
|
87
|
-
- 本生成器只用于空目录初始化。生成项目使用已物化的 `project-instance` 资产和实现 skills 开发后续需求;其共享 `skillUtils` 不应再分发 `yss-mvc-scaffold-generator` 本身。
|
package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { spawnSync } from "node:child_process";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
test("退役入口拒绝旧数据库和 Mock,不作静默别名", () => {
|
|
6
|
-
const result = spawnSync(process.execPath, [fileURLToPath(new URL("./generate_project.mjs", import.meta.url)), "--database", "oracle", "--with-mock"], { encoding: "utf8" });
|
|
7
|
-
assert.equal(result.status, 1);
|
|
8
|
-
assert.match(result.stderr, /deprecated.*yss-mvc-data-analysis-project-initializer/);
|
|
9
|
-
});
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { cp, readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
|
|
4
|
-
import { HARNESS_ROOT, MODULES, PROJECT_SCRIPT_FILES, exists, fail } from "./runtime.mjs";
|
|
5
|
-
import { put } from "./storage.mjs";
|
|
6
|
-
|
|
7
|
-
const TEMPLATE_SOURCE_COMMAND = /scripts\/(?:verify-template(?:-fast|-candidate)?|sync-skills|update-skill-lock|export-yss-skills|verify-upstream-skill-source|verify-maintenance-checkpoint|verify-implementation-path-scenarios|gitworks)/g;
|
|
8
|
-
const TEMPLATE_SOURCE_SECTION = /(^## 4\. `template-source` 模板维护路由[^\S\r\n]*$)[\s\S]*?(?=^## 5\. `project-instance` 产品研发路由[^\S\r\n]*$)/m;
|
|
9
|
-
|
|
10
|
-
function removeTemplateSourceCommands(content) {
|
|
11
|
-
return content.replace(TEMPLATE_SOURCE_COMMAND, "上游 Harness 专用命令");
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function renderProjectInstanceAgents(content) {
|
|
15
|
-
if (!TEMPLATE_SOURCE_SECTION.test(content)) fail("无法定位 AGENTS.md 的模板维护章节边界");
|
|
16
|
-
return content.replace(
|
|
17
|
-
TEMPLATE_SOURCE_SECTION,
|
|
18
|
-
"$1\n\n当前仓库是 `project-instance`,模板维护只在上游 Harness 执行。\n\n"
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function writeProjectEnvelope(o) {
|
|
23
|
-
await put(o.targetDir, "yss-project.yaml", "schema_version: 1\nrepository_mode: project-instance");
|
|
24
|
-
await put(o.targetDir, ".artifact-workspace.yaml", `schema_version: 1\nkind: service\nservice_id: ${o.projectName}\nowner: ${JSON.stringify(o.gitAuthor)}`);
|
|
25
|
-
await cp(path.join(HARNESS_ROOT, "AGENTS.md"), path.join(o.targetDir, "AGENTS.md"));
|
|
26
|
-
const generatedAgents = await readFile(path.join(o.targetDir, "AGENTS.md"), "utf8");
|
|
27
|
-
await writeFile(path.join(o.targetDir, "AGENTS.md"), renderProjectInstanceAgents(generatedAgents)
|
|
28
|
-
.replaceAll(".agents/skills", "../skillUtils/.agents/skills")
|
|
29
|
-
.replaceAll(".codex/skills", "../skillUtils/.codex/skills"), "utf8");
|
|
30
|
-
await put(o.targetDir, "CONTEXT.md", "# 领域上下文\n\n## 业务术语\n\n| 术语 | 定义 | 英文标识 | 避免 / 备注 |\n|---|---|---|---|\n| 分析数据集 | 支撑一个数据分析功能的表结构、字段语义和查询边界。 | AnalysisDataset | 具体业务术语在需求分析后补充 |\n| 分析结果 | 数据分析接口返回的分页明细或聚合结果。 | AnalysisResult | 不表示未经约束的原始结果集 |");
|
|
31
|
-
for (const relative of ["docs/agents", "docs/process", "docs/templates", "docs/architecture/templates"]) {
|
|
32
|
-
const source = path.join(HARNESS_ROOT, relative);
|
|
33
|
-
if (!await exists(source)) fail(`项目实例治理资产不存在: ${source}`);
|
|
34
|
-
await cp(source, path.join(o.targetDir, relative), { recursive: true });
|
|
35
|
-
}
|
|
36
|
-
const integrationPath = path.join(o.targetDir, "docs/process/implementation-repo-integration.md");
|
|
37
|
-
const integration = (await readFile(integrationPath, "utf8"))
|
|
38
|
-
.replace("模板仓库至少执行:", "以下命令仅由上游 Harness 模板源执行,项目实例不分发这些模板维护工具:")
|
|
39
|
-
.replace(/scripts\/sync-skills --check\r?\nscripts\/update-skill-lock --check\r?\nscripts\/verify-template/, "在 Harness 模板源执行 Skill 投影同步、锁文件检查和模板发布校验。");
|
|
40
|
-
await writeFile(integrationPath, integration, "utf8");
|
|
41
|
-
const checklistPath = path.join(o.targetDir, "docs/templates/build-architecture-checklist-template.md");
|
|
42
|
-
await writeFile(checklistPath, (await readFile(checklistPath, "utf8")).replace("scripts/verify-implementation-path-scenarios", "node scripts/implementation-path-policy"), "utf8");
|
|
43
|
-
for (const relative of ["AGENTS.md", "docs/process/implementation-repo-integration.md", "docs/process/harness-process-tailoring.md", "docs/templates/build-architecture-checklist-template.md"]) {
|
|
44
|
-
const target = path.join(o.targetDir, relative);
|
|
45
|
-
await writeFile(target, removeTemplateSourceCommands(await readFile(target, "utf8")), "utf8");
|
|
46
|
-
}
|
|
47
|
-
const agentReadmePath = path.join(o.targetDir, "docs/agents/README.md");
|
|
48
|
-
const agentReadme = (await readFile(agentReadmePath, "utf8"))
|
|
49
|
-
.replace("Engineering Skills 的安装、升级和验证说明", "项目实例使用共享 `skillUtils` 的版本检查说明")
|
|
50
|
-
.replace("GitLab、MR、CI 和自动 gitworks 的技能配置与使用规则", "GitLab、MR 和 CI 的 `glab` 使用规则");
|
|
51
|
-
await writeFile(agentReadmePath, agentReadme, "utf8");
|
|
52
|
-
const issueTrackerPath = path.join(o.targetDir, "docs/agents/issue-tracker.md");
|
|
53
|
-
await writeFile(issueTrackerPath, (await readFile(issueTrackerPath, "utf8")).replace("当平台为 GitLab 时,优先使用 `glab` 或项目快捷入口 `scripts/gitworks`。", "当平台为 GitLab 时,使用已认证的 `glab`。"), "utf8");
|
|
54
|
-
const tailoringPath = path.join(o.targetDir, "docs/process/harness-process-tailoring.md");
|
|
55
|
-
await writeFile(tailoringPath, (await readFile(tailoringPath, "utf8")).replace("使用 `scripts/verify-maintenance-checkpoint <file>` 或通过 stdin 传入 YAML / JSON 做只读校验。触发项 ID 与最低等级只由 `docs/process/maintenance-intensity.yaml` 维护;校验器消费该策略。未知触发项必须先更新该权威策略和场景,不能静默接受。", "维护 checkpoint 校验只在上游 Harness 模板源执行。触发项 ID 与最低等级只由 `docs/process/maintenance-intensity.yaml` 维护;未知触发项必须先更新该权威策略和场景,不能静默接受。"), "utf8");
|
|
56
|
-
await put(o.targetDir, "docs/agents/skills-maintenance.md", "# 项目实例 Skill 环境\n\n本项目不维护或发布共享 Skill。共享 Skill 位于相邻的 `../skillUtils`,版本由项目根 `skills-lock.json` 锁定。\n\n开发前执行:\n\n```bash\nnpm run check-agent-environment\n```\n\n输出 `READY` 表示工具版本、兼容协议、Agent 投影和 canonical Skill hash 一致。输出 `NOT_READY` 时停止功能实现,使用上游 Harness 的项目初始化或刷新流程更新 `skillUtils`;不要在项目内手工同步、导出或覆盖共享 Skill。\n\n项目实例只消费已提交的 `scripts/lib/*.mjs` 和 `scripts/vendor/*.mjs`。模板发布、Skill 投影生成、上游来源验证和公开导出均属于 Harness 模板源维护,不在本项目执行。");
|
|
57
|
-
await put(o.targetDir, "docs/agents/gitlab-workflow-skills.md", "# GitLab 工作流\n\n本项目不分发 GitLab 包装脚本。需要查看 MR、Pipeline 或 CI 时,使用已认证的 `glab`,并先确认当前仓库的 `origin` 指向目标 GitLab 项目。\n\n常用只读命令:\n\n```bash\ngit status --short --branch\nglab mr list\nglab ci list\nglab ci status\n```\n\n创建分支、commit、push、MR 或触发 Pipeline 都必须遵守 `AGENTS.md` 的显式授权和 checkpoint 规则。Token 只通过 `glab auth login` 或环境变量管理,不写入仓库文件。");
|
|
58
|
-
for (const relative of PROJECT_SCRIPT_FILES) await cp(path.join(HARNESS_ROOT, "scripts", relative), path.join(o.targetDir, "scripts", relative));
|
|
59
|
-
for (const relative of ["lib", "vendor"]) await cp(path.join(HARNESS_ROOT, "scripts", relative), path.join(o.targetDir, "scripts", relative), { recursive: true });
|
|
60
|
-
for (const relative of ["package.json", "skills-lock.json", ".nvmrc"]) {
|
|
61
|
-
const source = path.join(HARNESS_ROOT, relative);
|
|
62
|
-
if (await exists(source)) await cp(source, path.join(o.targetDir, relative));
|
|
63
|
-
}
|
|
64
|
-
await put(o.targetDir, "skills-lock.json", JSON.stringify({ version: 1, distribution: { mode: "sibling-directory", skillUtilsDir: "../skillUtils", required: true, compatibility: "skill-utils-v1", requiredToolVersion: "1.0.0" }, skills: { source: "../skillUtils/skills-lock.json", validation: "scripts/check-agent-environment.mjs" } }, null, 2));
|
|
65
|
-
await put(o.targetDir, "package.json", JSON.stringify({ name: o.projectName, private: true, scripts: { "check-agent-environment": "node scripts/check-agent-environment.mjs", "verify-project": "node scripts/verify-lifecycle-registry", "verify-dto": "node scripts/verify-yss-dto-openapi-profile" } }, null, 2));
|
|
66
|
-
await put(o.targetDir, "docs/process/analysis-project.yaml", `project_name: ${o.projectName}\nproject_type: data-analysis\nrepository_scope: external-repository\nimplementation_root: .\nruntime_java: 8\npersistence_profile: yss-mybatis-plus\nid_strategy: ASSIGN_ID\ndatabase:\n type: ${o.database}\n runtime_connection: true\n metadata_contract: docs/data-model\nquery:\n sql_mode: readonly\n allowed_statement_types: [select, with]\n parameter_binding_required: true\nmodules:\n${MODULES.map((module) => ` - ${module}`).join("\n")}\nworkflow:\n - requirement-and-data-contract\n - specification-freeze\n - vertical-slice-implementation\n - automated-gates\n - single-release-confirmation\n - runtime-monitoring`);
|
|
67
|
-
await put(o.targetDir, "docs/process/implementation-repo-registry.yaml", `schema_version: 1\nprojects:\n - project_type: backend\n project_name: ${o.projectName}\n project_root: .\n git_root: .\n repository_scope: external-repository\n scaffold_status: initialized\n default_branch: main\n allowed_write_paths:\n - .\n verification_commands:\n - mvnw com.coveo:fmt-maven-plugin:2.9.1:check\n - mvnw validate\n - mvnw test\n - mvnw package\n expected_evidence_files:\n - docs/.scratch/<feature>/verification/yss-skill-execution-result.yaml\n - docs/.scratch/<feature>/verification/fresh-verification.md\n ci: not-configured\n rollback_point: initial-empty-repository`);
|
|
68
|
-
await put(o.targetDir, "docs/.scratch/.gitkeep", "# Local lifecycle artifacts are created in feature subdirectories.");
|
|
69
|
-
await put(o.targetDir, "docs/service/service-overview.md", `# ${o.projectName} 服务说明\n\nOwner: ${o.gitAuthor}\n\n## 职责\n\n提供数据分析服务能力;具体业务职责在产品服务登记和功能 Spec 中维护。\n\n## 非职责\n\n## 依赖服务\n`);
|
|
70
|
-
await put(o.targetDir, "docs/service/module-map.md", `# ${o.projectName} Module 地图\n\n| Module | 职责 | 主要 Interface |\n|---|---|---|\n| server | Web 入口与运行配置 | HTTP Controller |\n| core | 领域与应用行为 | Domain/Application Interface |\n| client | 对外 DTO 与客户端契约 | Request/Response |\n| repository | 数据持久化 | Gateway/Repository |\n| adapter | 外部系统适配 | Adapter |\n| feign-client | 服务间调用客户端 | Feign Interface |\n`);
|
|
71
|
-
await put(o.targetDir, "docs/service/current-capabilities.md", "# 当前能力\n\n本文件是发布时生成的派生阅读视图,普通功能开发不手工修改。功能详情位于 `docs/features/`,开发中功能位于 `docs/.scratch/`。\n");
|
|
72
|
-
await put(o.targetDir, "docs/engineering/data-analysis-java-conventions.md", `# 数据分析 Java 工程规范\n\n变量、参数和字段必须使用业务含义名称。public 类、接口和方法必须有简体中文 Javadoc;Controller 类和公开接口方法使用初始化时读取的 Git user.name(本项目为 @author ${o.gitAuthor})和生成时的 @date,方法参数、返回值分别使用 @param、@return 完整说明。Javadoc 正文、@author、@date、@param、@return 必须分行;Mapping 注解、方法签名、方法体不得压缩在同一行。\n`);
|
|
73
|
-
await put(o.targetDir, ".gitignore", "target/\n**/target/\n.idea/\n*.iml\n.env\n.env.*\n!.env.example\n.local/\n");
|
|
74
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
|
|
4
|
-
import { renderProjectInstanceAgents } from "./envelope.mjs";
|
|
5
|
-
|
|
6
|
-
test("按章节边界把模板维护路由转换为项目实例说明", () => {
|
|
7
|
-
const source = `# AGENTS.md
|
|
8
|
-
|
|
9
|
-
## 3. 上文
|
|
10
|
-
|
|
11
|
-
保留。
|
|
12
|
-
|
|
13
|
-
## 4. \`template-source\` 模板维护路由
|
|
14
|
-
|
|
15
|
-
这里的自然语言允许持续精简,不应参与匹配。
|
|
16
|
-
|
|
17
|
-
- 模板源命令也不应进入项目实例。
|
|
18
|
-
|
|
19
|
-
## 5. \`project-instance\` 产品研发路由
|
|
20
|
-
|
|
21
|
-
继续保留。
|
|
22
|
-
`;
|
|
23
|
-
|
|
24
|
-
const result = renderProjectInstanceAgents(source);
|
|
25
|
-
|
|
26
|
-
assert.match(result, /## 4\. `template-source` 模板维护路由\n\n当前仓库是 `project-instance`,模板维护只在上游 Harness 执行。/);
|
|
27
|
-
assert.doesNotMatch(result, /这里的自然语言允许持续精简/);
|
|
28
|
-
assert.match(result, /## 5\. `project-instance` 产品研发路由\n\n继续保留/);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
test("模板维护章节边界缺失时明确失败", () => {
|
|
32
|
-
assert.throws(
|
|
33
|
-
() => renderProjectInstanceAgents("# AGENTS.md\n\n## 5. `project-instance` 产品研发路由\n"),
|
|
34
|
-
/无法定位 AGENTS\.md 的模板维护章节边界/
|
|
35
|
-
);
|
|
36
|
-
});
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import { stat } from "node:fs/promises";
|
|
3
|
-
import { spawnSync } from "node:child_process";
|
|
4
|
-
import os from "node:os";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { fileURLToPath } from "node:url";
|
|
7
|
-
|
|
8
|
-
export const MODULES = ["server", "core", "client", "repository", "adapter", "feign-client"];
|
|
9
|
-
export const SKILL_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
|
10
|
-
export const HARNESS_ROOT = findHarnessRoot();
|
|
11
|
-
export const SHARED_SKILLS_ROOT = path.join(HARNESS_ROOT, ".agents", "skills");
|
|
12
|
-
export const SKILL_UTILS_NAME = "skillUtils";
|
|
13
|
-
export const SKILL_UTILS_DIRECTORIES = [
|
|
14
|
-
".agents/skills", ".codex/skills", ".cursor/skills", ".pi/skills"
|
|
15
|
-
];
|
|
16
|
-
export const PROJECT_SCRIPT_FILES = [
|
|
17
|
-
"check-agent-environment.mjs", "implementation-path-policy", "repository-mode", "repository-scope-policy",
|
|
18
|
-
"generate-lifecycle-artifacts", "node-generate-lifecycle-artifacts.mjs", "node-verify-lifecycle-registry.mjs",
|
|
19
|
-
"verify-lifecycle-registry", "verify-lifecycle-checkpoint", "verify-frontend-implementation-evidence",
|
|
20
|
-
"verify-yss-dto-openapi-profile"
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
export function findHarnessRoot() {
|
|
24
|
-
let candidate = SKILL_ROOT;
|
|
25
|
-
while (true) {
|
|
26
|
-
if (existsSync(path.join(candidate, ".agents", "skills")) && existsSync(path.join(candidate, "AGENTS.md"))) return candidate;
|
|
27
|
-
const parent = path.dirname(candidate);
|
|
28
|
-
if (parent === candidate) break;
|
|
29
|
-
candidate = parent;
|
|
30
|
-
}
|
|
31
|
-
throw new Error(`未找到插件 Harness 根目录: ${SKILL_ROOT}`);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function fail(message) { throw new Error(message); }
|
|
35
|
-
|
|
36
|
-
export function parseArgs(argv) {
|
|
37
|
-
const options = { database: "oracle", withMock: false, dryRun: false };
|
|
38
|
-
const fields = {
|
|
39
|
-
"--project-name": "projectName", "--base-package": "basePackage", "--target-dir": "targetDir",
|
|
40
|
-
"--database": "database", "--maven-settings": "mavenSettings"
|
|
41
|
-
};
|
|
42
|
-
for (let index = 0; index < argv.length; index += 1) {
|
|
43
|
-
let token = argv[index];
|
|
44
|
-
if (token === "--with-mock") { options.withMock = true; continue; }
|
|
45
|
-
if (token === "--dry-run") { options.dryRun = true; continue; }
|
|
46
|
-
if (token === "--help" || token === "-h") { options.help = true; continue; }
|
|
47
|
-
const equals = token.indexOf("=");
|
|
48
|
-
let value = equals >= 0 ? token.slice(equals + 1) : undefined;
|
|
49
|
-
if (equals >= 0) token = token.slice(0, equals);
|
|
50
|
-
if (!fields[token]) fail(`不支持的参数: ${token}`);
|
|
51
|
-
if (value === undefined) value = argv[++index];
|
|
52
|
-
if (!value || value.startsWith("--")) fail(`参数 ${token} 缺少值`);
|
|
53
|
-
options[fields[token]] = value;
|
|
54
|
-
}
|
|
55
|
-
if (options.help) return options;
|
|
56
|
-
if (!options.projectName || !/^[a-z][a-z0-9-]*$/.test(options.projectName)) fail("--project-name 必须是小写连字符名称");
|
|
57
|
-
if (!options.basePackage || !/^[a-zA-Z_$][\w$]*(\.[a-zA-Z_$][\w$]*)+$/.test(options.basePackage)) fail("--base-package 不是合法 Java 包名");
|
|
58
|
-
if (!options.targetDir) fail("必须提供 --target-dir");
|
|
59
|
-
if (!["oracle", "oceanbase-oracle"].includes(options.database)) fail("--database 只支持 oracle 或 oceanbase-oracle");
|
|
60
|
-
options.targetDir = path.resolve(options.targetDir);
|
|
61
|
-
if (options.mavenSettings) options.mavenSettings = path.resolve(options.mavenSettings);
|
|
62
|
-
return options;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export async function exists(target) {
|
|
66
|
-
try { await stat(target); return true; } catch (error) {
|
|
67
|
-
if (error.code === "ENOENT") return false;
|
|
68
|
-
throw error;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function xml(value) { return value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">"); }
|
|
73
|
-
export function packagePath(name) { return name.replaceAll(".", "/"); }
|
|
74
|
-
export function generatedAtLocal() {
|
|
75
|
-
const now = new Date();
|
|
76
|
-
const pad = (value) => String(value).padStart(2, "0");
|
|
77
|
-
return `${now.getFullYear()}/${pad(now.getMonth() + 1)}/${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}`;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export function runGit(args, cwd) { return spawnSync("git", args, { cwd, encoding: "utf8" }); }
|
|
81
|
-
export function assertGitAvailable() {
|
|
82
|
-
const result = runGit(["--version"], process.cwd());
|
|
83
|
-
if (result.status !== 0) fail("未检测到可用的 Git,无法初始化独立项目仓库");
|
|
84
|
-
}
|
|
85
|
-
export function resolveGitAuthor() {
|
|
86
|
-
const result = runGit(["config", "--get", "user.name"], process.cwd());
|
|
87
|
-
const author = result.status === 0 ? result.stdout.trim() : "";
|
|
88
|
-
if (!author) fail("未配置 Git user.name;请先执行 git config --global user.name \"你的姓名\"");
|
|
89
|
-
if (/[\r\n]|\*\//.test(author)) fail("Git user.name 包含不能安全写入 Javadoc 的字符");
|
|
90
|
-
return author;
|
|
91
|
-
}
|
|
92
|
-
export function initializeGit(root) {
|
|
93
|
-
let result = runGit(["init", "--initial-branch=main"], root);
|
|
94
|
-
if (result.status !== 0) {
|
|
95
|
-
result = runGit(["init"], root);
|
|
96
|
-
if (result.status === 0) result = runGit(["branch", "-M", "main"], root);
|
|
97
|
-
}
|
|
98
|
-
if (result.status !== 0) fail(`Git 仓库初始化失败: ${(result.stderr || result.stdout).trim()}`);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export async function resolveMavenSettings(options) {
|
|
102
|
-
if (options.mavenSettings) {
|
|
103
|
-
if (!await exists(options.mavenSettings)) fail(`Maven settings 不存在: ${options.mavenSettings}`);
|
|
104
|
-
return { path: options.mavenSettings, source: "explicit", available: true };
|
|
105
|
-
}
|
|
106
|
-
if (process.env.YSS_MAVEN_SETTINGS) {
|
|
107
|
-
const environmentPath = path.resolve(process.env.YSS_MAVEN_SETTINGS);
|
|
108
|
-
if (!await exists(environmentPath)) fail(`Maven settings 不存在: ${environmentPath}`);
|
|
109
|
-
return { path: environmentPath, source: "environment", available: true };
|
|
110
|
-
}
|
|
111
|
-
const userSettings = path.join(os.homedir(), ".m2", "settings.xml");
|
|
112
|
-
if (await exists(userSettings)) return { path: userSettings, source: "user-home", available: true };
|
|
113
|
-
return { path: null, source: "maven-default", available: false };
|
|
114
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { cp, mkdir, mkdtemp, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
HARNESS_ROOT,
|
|
6
|
-
SKILL_ROOT,
|
|
7
|
-
SKILL_UTILS_DIRECTORIES,
|
|
8
|
-
SKILL_UTILS_NAME,
|
|
9
|
-
fail,
|
|
10
|
-
exists
|
|
11
|
-
} from "./runtime.mjs";
|
|
12
|
-
|
|
13
|
-
const BOOTSTRAP_ONLY_SKILLS = ["yss-mvc-scaffold-generator"];
|
|
14
|
-
|
|
15
|
-
async function distributedSkillLock() {
|
|
16
|
-
const source = path.join(HARNESS_ROOT, "skills-lock.json");
|
|
17
|
-
if (!await exists(source)) fail(`技能工具包源锁文件不存在: ${source}`);
|
|
18
|
-
const lock = JSON.parse(await readFile(source, "utf8"));
|
|
19
|
-
for (const name of BOOTSTRAP_ONLY_SKILLS) {
|
|
20
|
-
delete lock.skills?.shared?.[name];
|
|
21
|
-
for (const platform of Object.values(lock.skills?.platform ?? {})) delete platform?.[name];
|
|
22
|
-
}
|
|
23
|
-
return `${JSON.stringify(lock, null, 2)}\n`;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export async function assertEmpty(target) {
|
|
27
|
-
if (!await exists(target)) return;
|
|
28
|
-
if ((await readdir(target)).length) fail(`目标目录非空,拒绝生成: ${target}`);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export async function put(root, relative, content, author) {
|
|
32
|
-
const target = path.join(root, relative);
|
|
33
|
-
const rendered = author ? content.replaceAll("@author system", `@author ${author}`) : content;
|
|
34
|
-
await mkdir(path.dirname(target), { recursive: true });
|
|
35
|
-
await writeFile(target, `${rendered.trim()}\n`, "utf8");
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export async function renderAsset(name, replacements) {
|
|
39
|
-
let content = await readFile(path.join(SKILL_ROOT, "assets", name), "utf8");
|
|
40
|
-
for (const [token, value] of Object.entries(replacements)) content = content.replaceAll(`{{${token}}}`, value);
|
|
41
|
-
return content;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async function populateSkillUtils(destination) {
|
|
45
|
-
await mkdir(destination, { recursive: true });
|
|
46
|
-
for (const relative of SKILL_UTILS_DIRECTORIES) {
|
|
47
|
-
const source = path.join(HARNESS_ROOT, relative);
|
|
48
|
-
if (!await exists(source)) fail(`技能工具包源目录不存在: ${source}`);
|
|
49
|
-
await cp(source, path.join(destination, relative), { recursive: true });
|
|
50
|
-
}
|
|
51
|
-
for (const root of SKILL_UTILS_DIRECTORIES) {
|
|
52
|
-
for (const name of BOOTSTRAP_ONLY_SKILLS) {
|
|
53
|
-
await rm(path.join(destination, root, name), { recursive: true, force: true });
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
await writeFile(path.join(destination, "skills-lock.json"), await distributedSkillLock(), "utf8");
|
|
57
|
-
const publicSkills = path.join(HARNESS_ROOT, "yss-public-skills.json");
|
|
58
|
-
if (!await exists(publicSkills)) fail(`技能工具包源文件不存在: ${publicSkills}`);
|
|
59
|
-
await cp(publicSkills, path.join(destination, "yss-public-skills.json"));
|
|
60
|
-
await writeFile(path.join(destination, "skill-utils.yaml"), `schema_version: 1\nkind: yss-skill-utils\ntool_version: 1.0.0\ncompatibility: skill-utils-v1\nsource: ${path.basename(HARNESS_ROOT)}\ncanonical_root: .agents/skills\nprojection_roots:\n - .codex/skills\n - .cursor/skills\n - .pi/skills\nexcluded_skills:\n - yss-mvc-scaffold-generator\n`, "utf8");
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export async function ensureSkillUtils(targetDir, { apply = true } = {}) {
|
|
64
|
-
const parent = path.dirname(targetDir);
|
|
65
|
-
const skillUtils = path.join(parent, SKILL_UTILS_NAME);
|
|
66
|
-
const marker = path.join(skillUtils, "skill-utils.yaml");
|
|
67
|
-
const expectedLock = await distributedSkillLock();
|
|
68
|
-
if (await exists(skillUtils)) {
|
|
69
|
-
if (!await exists(marker)) fail(`技能工具包目录已存在但不是受支持的 skillUtils: ${skillUtils}`);
|
|
70
|
-
const installedLock = path.join(skillUtils, "skills-lock.json");
|
|
71
|
-
const current = await exists(installedLock) ? await readFile(installedLock, "utf8") : "";
|
|
72
|
-
if (current === expectedLock) return { path: skillUtils, created: false, refreshed: false, backup: null };
|
|
73
|
-
if (!apply) return { path: skillUtils, created: false, refreshed: true, backup: null };
|
|
74
|
-
const staging = await mkdtemp(path.join(parent, ".skillUtils.refresh-"));
|
|
75
|
-
const backup = path.join(parent, `.skillUtils.backup-${Date.now()}`);
|
|
76
|
-
try {
|
|
77
|
-
await populateSkillUtils(staging);
|
|
78
|
-
await rename(skillUtils, backup);
|
|
79
|
-
try { await rename(staging, skillUtils); }
|
|
80
|
-
catch (error) { await rename(backup, skillUtils); throw error; }
|
|
81
|
-
} catch (error) {
|
|
82
|
-
if (await exists(staging)) await rm(staging, { recursive: true, force: true });
|
|
83
|
-
throw error;
|
|
84
|
-
}
|
|
85
|
-
return { path: skillUtils, created: false, refreshed: true, backup };
|
|
86
|
-
}
|
|
87
|
-
if (!apply) return { path: skillUtils, created: true, refreshed: false, backup: null };
|
|
88
|
-
await populateSkillUtils(skillUtils);
|
|
89
|
-
return { path: skillUtils, created: true, refreshed: false, backup: null };
|
|
90
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { generatedAtLocal, packagePath, xml } from "./runtime.mjs";
|
|
2
|
-
|
|
3
|
-
export function parentPom(o) {
|
|
4
|
-
const modules = o.modules.map((module) => ` <module>${module}</module>`).join("\n");
|
|
5
|
-
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
6
|
-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
7
|
-
<modelVersion>4.0.0</modelVersion><parent><groupId>com.yss.cloud</groupId><artifactId>yss-cloud-microservice</artifactId><version>2.0.0-SNAPSHOT</version><relativePath/></parent>
|
|
8
|
-
<groupId>${xml(o.basePackage)}</groupId><artifactId>${o.projectName}</artifactId><version>2.0.0-SNAPSHOT</version><packaging>pom</packaging>
|
|
9
|
-
<properties><java.version>1.8</java.version><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><yss-components.version>2.0.0-SNAPSHOT</yss-components.version></properties>
|
|
10
|
-
<modules>\n${modules}\n </modules>
|
|
11
|
-
<dependencyManagement><dependencies><dependency><groupId>com.yss.cloud</groupId><artifactId>yss-components-bom</artifactId><version>\${yss-components.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
|
|
12
|
-
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId></plugin><plugin><groupId>com.coveo</groupId><artifactId>fmt-maven-plugin</artifactId><version>2.9.1</version></plugin></plugins></build>
|
|
13
|
-
</project>`;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function modulePom(o, module) {
|
|
17
|
-
const artifact = (name) => `<dependency><groupId>${xml(o.basePackage)}</groupId><artifactId>${o.projectName}-${name}</artifactId><version>\${project.version}</version></dependency>`;
|
|
18
|
-
const yss = (name) => `<dependency><groupId>com.yss.cloud</groupId><artifactId>${name}</artifactId></dependency>`;
|
|
19
|
-
const databaseDriver = o.database === "oceanbase-oracle" ? `<dependency><groupId>com.oceanbase</groupId><artifactId>oceanbase-client</artifactId><version>2.4.3</version></dependency>` : `<dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><version>19.8.0.0</version></dependency>`;
|
|
20
|
-
const dependencies = {
|
|
21
|
-
client: `${yss("yss-component-dto")}\n${yss("yss-component-validation-jsr303")}\n<dependency><groupId>com.yss.cloud</groupId><artifactId>yss-component-excel-mvc</artifactId><version>\${yss-components.version}</version></dependency>\n<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency>`,
|
|
22
|
-
core: `${artifact("client")}\n${yss("yss-component-exception")}\n<dependency><groupId>com.yss.datamiddle</groupId><artifactId>yss-component-userinfo-starter</artifactId></dependency>\n<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId></dependency>`,
|
|
23
|
-
repository: `${artifact("core")}\n${artifact("client")}\n${yss("yss-component-mybatis-starter")}\n${yss("yss-component-distributed-id")}\n${databaseDriver}`,
|
|
24
|
-
adapter: `${artifact("core")}\n${artifact("client")}\n<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency>\n<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-openfeign-core</artifactId></dependency>`,
|
|
25
|
-
"feign-client": `${artifact("client")}\n<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-openfeign-core</artifactId></dependency>`,
|
|
26
|
-
server: `<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>\n<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>\n${artifact("repository")}\n${artifact("adapter")}\n${artifact("client")}\n${yss("yss-component-audit-log")}\n${yss("yss-component-cache-starter")}\n<dependency><groupId>com.yss.cloud</groupId><artifactId>yss-component-excel-mvc</artifactId><version>\${yss-components.version}</version></dependency>\n${yss("yss-component-distributed-id")}\n<dependency><groupId>com.yss.datamiddle</groupId><artifactId>yss-component-userinfo-starter</artifactId></dependency>\n<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>\n<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>\n<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>`
|
|
27
|
-
}[module];
|
|
28
|
-
const profiles = module === "server" ? `<profiles><profile><id>nacos</id><activation><activeByDefault>true</activeByDefault></activation><properties><app.env>dev</app.env><app.profiles>nacos</app.profiles></properties><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency></dependencies></profile></profiles>` : "";
|
|
29
|
-
const plugin = module === "server" ? `<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.ly.smart-doc</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>3.0.5</version><configuration><configFile>src/main/resources/smart-doc.json</configFile><includes><include>com.yss.cloud:yss-component-dto</include><include>com.yss.cloud:yss-component-exception</include><include>com.yss.cloud:yss-component-cache-starter</include><include>${xml(o.basePackage)}:${o.projectName}-client</include><include>${xml(o.basePackage)}:${o.projectName}-core</include><include>${xml(o.basePackage)}:${o.projectName}-repository</include></includes><projectName>\${project.artifactId}</projectName></configuration></plugin></plugins></build>` : "";
|
|
30
|
-
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
31
|
-
<project xmlns="http://maven.apache.org/POM/4.0.0"><modelVersion>4.0.0</modelVersion><parent><groupId>${xml(o.basePackage)}</groupId><artifactId>${o.projectName}</artifactId><version>2.0.0-SNAPSHOT</version></parent><artifactId>${o.projectName}-${module}</artifactId><dependencies>${dependencies}</dependencies>${profiles}${plugin}</project>`;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export async function writeJavaSources(o, put) {
|
|
35
|
-
const root = o.targetDir;
|
|
36
|
-
const pkg = o.basePackage;
|
|
37
|
-
const pp = packagePath(pkg);
|
|
38
|
-
const generatedAt = generatedAtLocal();
|
|
39
|
-
await put(root, `client/src/main/java/${pp}/client/query/AnalysisQuery.java`, `package ${pkg}.client.query;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n/** 数据分析分页查询。 */\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class AnalysisQuery {\n private int pageNo;\n private int pageSize;\n private String sql;\n}`, o.gitAuthor);
|
|
40
|
-
await put(root, `client/src/main/java/${pp}/client/response/AnalysisResult.java`, `package ${pkg}.client.response;\n\nimport java.util.List;\nimport java.util.Map;\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n/** 数据分析分页结果。 */\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class AnalysisResult {\n private int pageNo;\n private int pageSize;\n private long total;\n private List<Map<String, Object>> rows;\n private String source;\n}`, o.gitAuthor);
|
|
41
|
-
await put(root, `core/src/main/java/${pp}/core/gateway/AnalysisQueryExecutor.java`, `package ${pkg}.core.gateway;\n\nimport ${pkg}.client.query.AnalysisQuery;\nimport ${pkg}.client.response.AnalysisResult;\n\n/** 数据分析执行接口。 */\npublic interface AnalysisQueryExecutor {\n AnalysisResult execute(AnalysisQuery query);\n}`, o.gitAuthor);
|
|
42
|
-
await put(root, `core/src/main/java/${pp}/core/service/AnalysisQueryService.java`, `package ${pkg}.core.service;\n\nimport ${pkg}.client.query.AnalysisQuery;\nimport ${pkg}.client.response.AnalysisResult;\nimport ${pkg}.core.gateway.AnalysisQueryExecutor;\n\n/** 数据分析查询服务。 */\npublic final class AnalysisQueryService {\n private final AnalysisQueryExecutor analysisQueryExecutor;\n\n public AnalysisQueryService(AnalysisQueryExecutor analysisQueryExecutor) {\n this.analysisQueryExecutor = analysisQueryExecutor;\n }\n\n public AnalysisResult execute(AnalysisQuery query) {\n return analysisQueryExecutor.execute(query);\n }\n}`, o.gitAuthor);
|
|
43
|
-
await put(root, `adapter/src/main/java/${pp}/adapter/oracle/OracleAnalysisQueryExecutor.java`, `package ${pkg}.adapter.oracle;\n\nimport ${pkg}.client.query.AnalysisQuery;\nimport ${pkg}.client.response.AnalysisResult;\nimport ${pkg}.core.gateway.AnalysisQueryExecutor;\n\n/** Oracle 数据分析执行器占位实现。 */\npublic final class OracleAnalysisQueryExecutor implements AnalysisQueryExecutor {\n @Override\n public AnalysisResult execute(AnalysisQuery query) {\n throw new UnsupportedOperationException("Oracle execution requires an approved vertical slice");\n }\n}`, o.gitAuthor);
|
|
44
|
-
if (o.withMock) await put(root, `adapter/src/main/java/${pp}/adapter/mock/MockAnalysisQueryExecutor.java`, `package ${pkg}.adapter.mock;\n\nimport ${pkg}.client.query.AnalysisQuery;\nimport ${pkg}.client.response.AnalysisResult;\nimport ${pkg}.core.gateway.AnalysisQueryExecutor;\nimport java.util.ArrayList;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n/** 本地联调数据分析执行器。 */\npublic final class MockAnalysisQueryExecutor implements AnalysisQueryExecutor {\n @Override\n public AnalysisResult execute(AnalysisQuery query) {\n Map<String, Object> row = new HashMap<String, Object>();\n row.put("metric", "mock-value");\n row.put("value", 100);\n List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();\n rows.add(row);\n return new AnalysisResult(query.getPageNo(), query.getPageSize(), 1, rows, "mock");\n }\n}`, o.gitAuthor);
|
|
45
|
-
await put(root, `server/src/main/java/${pp}/Application.java`, `package ${pkg};\n\nimport com.yss.cloud.audit.EnableAuditLog;\nimport com.yss.cloud.cache.EnableYssCloudRedisCache;\nimport com.yss.cloud.excel.annotation.EnableExcelControl;\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.cloud.openfeign.EnableFeignClients;\nimport org.springframework.context.annotation.ComponentScan;\nimport org.springframework.context.annotation.FilterType;\n\n/** 数据分析服务启动入口。 */\n@EnableYssCloudRedisCache\n@EnableExcelControl\n@EnableAuditLog\n@EnableFeignClients\n@ComponentScan(\n value = {"${pkg}", "com.yss.cloud"},\n excludeFilters = @ComponentScan.Filter(\n type = FilterType.REGEX,\n pattern = {"com\\\\.yss\\\\.cloud\\\\.mybatis\\\\..*", "com\\\\.yss\\\\.cloud\\\\.sankuai\\\\..*"}))\n@SpringBootApplication\npublic class Application {\n public static void main(String[] args) {\n SpringApplication.run(Application.class, args);\n }\n}`, o.gitAuthor);
|
|
46
|
-
await put(root, `server/src/main/java/${pp}/server/configuration/DatabaseInfrastructureConfiguration.java`, `package ${pkg}.server.configuration;\n\nimport com.yss.cloud.EnableDistributedId;\nimport com.yss.cloud.mybatis.config.MapperConfiguration;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Import;\nimport org.springframework.context.annotation.Profile;\n\n/** 数据库及分布式 ID 基础设施配置。 */\n@Configuration\n@Profile("!mock")\n@EnableDistributedId\n@Import(MapperConfiguration.class)\npublic class DatabaseInfrastructureConfiguration {\n}`, o.gitAuthor);
|
|
47
|
-
const mockImport = o.withMock ? `import ${pkg}.adapter.mock.MockAnalysisQueryExecutor;\n` : "";
|
|
48
|
-
const mockBean = o.withMock ? `\n @Bean\n @Profile("mock")\n AnalysisQueryExecutor mockAnalysisQueryExecutor() {\n return new MockAnalysisQueryExecutor();\n }\n` : "";
|
|
49
|
-
const databaseRuntimeProfile = o.database === "oceanbase-oracle" ? "oceanbase-oracle" : "oracle";
|
|
50
|
-
const oracleProfile = o.withMock ? `${databaseRuntimeProfile} & !mock` : databaseRuntimeProfile;
|
|
51
|
-
await put(root, `server/src/main/java/${pp}/server/configuration/AnalysisConfiguration.java`, `package ${pkg}.server.configuration;\n\n${mockImport}import ${pkg}.adapter.oracle.OracleAnalysisQueryExecutor;\nimport ${pkg}.core.gateway.AnalysisQueryExecutor;\nimport ${pkg}.core.service.AnalysisQueryService;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Profile;\n\n/** 数据分析服务 Bean 配置。 */\n@Configuration\npublic class AnalysisConfiguration {${mockBean}\n @Bean\n @Profile("${oracleProfile}")\n AnalysisQueryExecutor oracleAnalysisQueryExecutor() {\n return new OracleAnalysisQueryExecutor();\n }\n\n @Bean\n AnalysisQueryService analysisQueryService(AnalysisQueryExecutor analysisQueryExecutor) {\n return new AnalysisQueryService(analysisQueryExecutor);\n }\n}`, o.gitAuthor);
|
|
52
|
-
await put(root, `server/src/main/java/${pp}/server/controller/AnalysisController.java`, `package ${pkg}.server.controller;\n\nimport ${pkg}.client.query.AnalysisQuery;\nimport ${pkg}.client.response.AnalysisResult;\nimport ${pkg}.core.service.AnalysisQueryService;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n/**\n * 数据分析查询接口。\n *\n * @author system\n * @date ${generatedAt}\n */\n@RestController\n@RequestMapping("/api/analysis")\npublic class AnalysisController {\n private final AnalysisQueryService analysisQueryService;\n\n public AnalysisController(AnalysisQueryService analysisQueryService) {\n this.analysisQueryService = analysisQueryService;\n }\n\n /**\n * 分页查询数据分析结果。\n *\n * @author system\n * @date ${generatedAt}\n * @param query 数据分析分页查询条件\n * @return 数据分析分页结果\n */\n @PostMapping("/query")\n public AnalysisResult query(@RequestBody AnalysisQuery query) {\n return analysisQueryService.execute(query);\n }\n}`, o.gitAuthor);
|
|
53
|
-
if (o.withMock) await put(root, `server/src/test/java/${pp}/server/controller/AnalysisControllerTest.java`, `package ${pkg}.server.controller;\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.ActiveProfiles;\nimport org.springframework.test.web.servlet.MockMvc;\n\nimport static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\n\n@SpringBootTest\n@AutoConfigureMockMvc\n@ActiveProfiles("mock")\nclass AnalysisControllerTest {\n @Autowired private MockMvc mockMvc;\n\n @Test\n void returnsMockAnalysis() throws Exception {\n mockMvc.perform(post("/api/analysis/query").contentType("application/json").content("{\\\"pageNo\\\":1,\\\"pageSize\\\":10}"))\n .andExpect(status().isOk())\n .andExpect(jsonPath("$.source").value("mock"));\n }\n}`, o.gitAuthor);
|
|
54
|
-
}
|