@skyroc/scripts 2.5.0 → 2.5.2
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 +6 -3
- package/dist/cli.mjs +2 -2
- package/dist/{config-BKkdncJS.mjs → config-Cj9IzlRz.mjs} +105 -5
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/templates/admin/package.json +5 -3
- package/templates/admin/src/assets/svg-icon/logo.svg +2 -14
- package/templates/admin/src/features/router/routeTree.gen.ts +71 -1
- package/templates/admin/src/pages/(auth)/login/code-login.tsx +79 -0
- package/templates/admin/src/pages/(auth)/login/index.tsx +22 -1
- package/templates/admin/src/pages/(auth)/login/layout.tsx +25 -23
- package/templates/admin/src/pages/(auth)/login/modules/Header.tsx +25 -0
- package/templates/admin/src/pages/(auth)/login/register.tsx +86 -0
- package/templates/admin/src/pages/(auth)/login/reset-pwd.tsx +73 -0
- package/templates/admin/uno.config.ts +1 -1
- package/templates/admin-root/.agents/skills/component-doc/SKILL.md +304 -0
- package/templates/admin-root/.agents/skills/component-refactoring/SKILL.md +483 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/complexity-patterns.md +493 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/component-splitting.md +477 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/hook-extraction.md +317 -0
- package/templates/admin-root/.agents/skills/doc-coauthoring/SKILL.md +375 -0
- package/templates/admin-root/.agents/skills/feature-dev/SKILL.md +78 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/SKILL.md +73 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/business-logic.md +15 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/code-quality.md +44 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/performance.md +45 -0
- package/templates/admin-root/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/templates/admin-root/.agents/skills/frontend-design/SKILL.md +42 -0
- package/templates/admin-root/.agents/skills/frontend-testing/SKILL.md +325 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/component-test.template.tsx +293 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/hook-test.template.ts +207 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/utility-test.template.ts +154 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/async-testing.md +345 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/checklist.md +205 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/common-patterns.md +449 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/domain-components.md +523 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/mocking.md +512 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/workflow.md +269 -0
- package/templates/admin-root/.agents/skills/migrate-nativewind-to-uniwind/SKILL.md +734 -0
- package/templates/admin-root/.agents/skills/migrate-oxfmt/SKILL.md +202 -0
- package/templates/admin-root/.agents/skills/migrate-oxlint/SKILL.md +196 -0
- package/templates/admin-root/.agents/skills/native-component-doc/SKILL.md +245 -0
- package/templates/admin-root/.agents/skills/senior-frontend/SKILL.md +209 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/frontend_best_practices.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/react_patterns.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/component_generator.py +114 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
- package/templates/admin-root/.agents/skills/skill-creator/SKILL.md +355 -0
- package/templates/admin-root/.agents/skills/skill-creator/references/output-patterns.md +86 -0
- package/templates/admin-root/.agents/skills/skill-creator/references/workflows.md +28 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/init_skill.py +300 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/quick_validate.py +97 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/SKILL.md +163 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/acceptance-checklist.md +75 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/evidence-order.md +109 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prd-rules.md +103 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prototype-rules.md +85 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/scripts/verify-prototypes.mjs +144 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/admin-page.html +771 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/prd.md +182 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/SKILL.md +292 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/templates/admin-root/.agents/skills/uniwind/SKILL.md +64 -0
- package/templates/admin-root/.agents/skills/uniwind/references/component-bindings.md +338 -0
- package/templates/admin-root/.agents/skills/uniwind/references/css-and-utilities.md +325 -0
- package/templates/admin-root/.agents/skills/uniwind/references/integrations.md +75 -0
- package/templates/admin-root/.agents/skills/uniwind/references/pro.md +354 -0
- package/templates/admin-root/.agents/skills/uniwind/references/setup.md +144 -0
- package/templates/admin-root/.agents/skills/uniwind/references/styling-patterns.md +237 -0
- package/templates/admin-root/.agents/skills/uniwind/references/theming.md +309 -0
- package/templates/admin-root/.agents/skills/uniwind/references/troubleshooting.md +179 -0
- package/templates/admin-root/.agents/skills/uniwind/references/variants-and-selectors.md +224 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/templates/admin-root/.claude/settings.json +5 -0
- package/templates/admin-root/.claude/skills/component-doc/SKILL.md +304 -0
- package/templates/admin-root/.claude/skills/component-refactoring/SKILL.md +483 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/complexity-patterns.md +493 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/component-splitting.md +477 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/hook-extraction.md +317 -0
- package/templates/admin-root/.claude/skills/doc-coauthoring/SKILL.md +375 -0
- package/templates/admin-root/.claude/skills/feature-dev/SKILL.md +78 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/SKILL.md +73 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/business-logic.md +15 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/code-quality.md +44 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/performance.md +45 -0
- package/templates/admin-root/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/templates/admin-root/.claude/skills/frontend-design/SKILL.md +42 -0
- package/templates/admin-root/.claude/skills/frontend-testing/SKILL.md +325 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/component-test.template.tsx +293 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/hook-test.template.ts +207 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/utility-test.template.ts +154 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/async-testing.md +345 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/checklist.md +205 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/common-patterns.md +449 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/domain-components.md +523 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/mocking.md +512 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/workflow.md +269 -0
- package/templates/admin-root/.claude/skills/migrate-nativewind-to-uniwind +1 -0
- package/templates/admin-root/.claude/skills/native-component-doc/SKILL.md +245 -0
- package/templates/admin-root/.claude/skills/senior-frontend/SKILL.md +209 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/frontend_best_practices.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/react_patterns.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/component_generator.py +114 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
- package/templates/admin-root/.claude/skills/skill-creator/SKILL.md +355 -0
- package/templates/admin-root/.claude/skills/skill-creator/references/output-patterns.md +86 -0
- package/templates/admin-root/.claude/skills/skill-creator/references/workflows.md +28 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/init_skill.py +300 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/quick_validate.py +97 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/SKILL.md +386 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/data +1 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/scripts +1 -0
- package/templates/admin-root/.claude/skills/uniwind +1 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/templates/admin-root/.cursor/settings.json +10 -0
- package/templates/admin-root/.editorconfig +19 -0
- package/templates/admin-root/.gitattributes +16 -0
- package/templates/admin-root/.oxfmtrc.json +35 -0
- package/templates/admin-root/AGENTS.md +297 -0
- package/templates/admin-root/CLAUDE.md +1 -0
- package/templates/admin-root/skills-lock.json +27 -0
- package/templates/admin-root.manifest.json +1317 -0
- package/templates/admin-shell/theme/antd/AntdProvider.tsx +1 -0
- package/templates/admin-shell/theme/antd/shared.ts +3 -3
- package/templates/admin-shell/theme/antd-algorithm/algorithm/dark/colors.ts +3 -3
- package/templates/admin-shell/theme/antd-algorithm/algorithm/default/colors.ts +1 -1
- package/templates/admin-shell/theme/presets/default.json +1 -1
- package/templates/admin.meta.json +10 -6
- package/LICENSE +0 -21
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skyroc-admin-prd-prototype
|
|
3
|
+
description: 为 Skyroc Admin / RuoYi Plus Fast 模块编写来源可追溯的 PRD,并生成可独立打开、可交互、经过桌面端和移动端验收的 HTML 设计原型。仅在用户明确要求使用本 Skill 时启用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skyroc Admin PRD 与 HTML 原型
|
|
7
|
+
|
|
8
|
+
本 Skill 用于把当前 FastAPI 契约、React 实现、仓库设计规范以及可用的历史或外部参考整理成一套可实施的 PRD,并为每个真实页面生成独立 HTML 原型。
|
|
9
|
+
|
|
10
|
+
不要把历史接口、字段或权限字符当作永久事实。每次任务都必须重新读取当前源码。
|
|
11
|
+
|
|
12
|
+
## 适用范围
|
|
13
|
+
|
|
14
|
+
在用户明确说出以下任一表达时使用本 Skill:
|
|
15
|
+
|
|
16
|
+
- “使用 `skyroc-admin-prd-prototype`”
|
|
17
|
+
- “按 Skyroc Admin PRD 原型 Skill 做”
|
|
18
|
+
- “用之前那套 PRD 和 HTML 设计流程”且明确指向本 Skill
|
|
19
|
+
|
|
20
|
+
典型任务包括:
|
|
21
|
+
|
|
22
|
+
- 为一个管理模块编写 PRD。
|
|
23
|
+
- 判断模块需要拆成几个页面。
|
|
24
|
+
- 生成一个或多个独立 HTML 设计图。
|
|
25
|
+
- 在已有 PRD 或原型基础上继续设计。
|
|
26
|
+
- 对照当前 FastAPI、React 实现和可用参考资料修订设计。
|
|
27
|
+
|
|
28
|
+
本 Skill 不负责把 HTML 原型直接改造成生产 React 页面,除非用户同时明确要求实施前端功能。
|
|
29
|
+
|
|
30
|
+
## 默认交付物
|
|
31
|
+
|
|
32
|
+
没有另行指定时,交付:
|
|
33
|
+
|
|
34
|
+
1. 一份 Markdown PRD。
|
|
35
|
+
2. 每个真实页面一份独立的 `index.html`。
|
|
36
|
+
3. 必要的桌面端和移动端验收截图。
|
|
37
|
+
4. 一份简短验收结论,区分已验证内容和未验证内容。
|
|
38
|
+
|
|
39
|
+
默认路径:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
design/ruoyi-plus-fast/pages/<domain>/<module>.md
|
|
43
|
+
design/ruoyi-plus-fast/prototypes/<page-slug>/index.html
|
|
44
|
+
design/ruoyi-plus-fast/prototypes/<page-slug>/qa/*.png
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
如果相邻模块使用不同目录层级,沿用相邻模块,不为统一路径而搬动旧文件。
|
|
48
|
+
|
|
49
|
+
## 必须读取的资料
|
|
50
|
+
|
|
51
|
+
开始设计前,完整执行 [证据读取顺序](references/evidence-order.md)。至少确认:
|
|
52
|
+
|
|
53
|
+
- 当前设计系统和信息架构。
|
|
54
|
+
- 至少一个业务形态相近的 PRD 和一个视觉或交互形态相近的原型;需要比较设计模式时再读取两个以上样例。
|
|
55
|
+
- FastAPI 当前 routes、schemas、service/use case、权限,以及与当前模块直接相关的测试或接口文档。
|
|
56
|
+
- 当前 React 路由、页面、API 类型与请求封装(如果已经存在)。
|
|
57
|
+
- 用户提供或仓库中确实存在的历史、外部参考实现(如果有)。
|
|
58
|
+
|
|
59
|
+
用户给出的路径优先于默认路径。路径不存在时,先在相邻仓库中搜索实际位置,不要直接向用户索要可自行发现的信息。
|
|
60
|
+
|
|
61
|
+
## 工作流
|
|
62
|
+
|
|
63
|
+
### 1. 明确架构和事实边界
|
|
64
|
+
|
|
65
|
+
在动手写文件前,用简短说明明确:
|
|
66
|
+
|
|
67
|
+
- 模块解决什么问题。
|
|
68
|
+
- 前端、后端、基础设施各自负责什么。
|
|
69
|
+
- 哪些是当前源码确认的事实。
|
|
70
|
+
- 哪些是为了补齐体验提出的设计假设。
|
|
71
|
+
- 哪些能力当前不存在,原型不得伪装成已经对接。
|
|
72
|
+
|
|
73
|
+
创建一份内部事实表,至少包含:
|
|
74
|
+
|
|
75
|
+
| 证据 | 已确认能力 | 缺口或冲突 | 对设计的影响 |
|
|
76
|
+
| ---------------- | ---------- | ---------- | ------------ |
|
|
77
|
+
| 当前 FastAPI | | | |
|
|
78
|
+
| 当前 React | | | |
|
|
79
|
+
| 设计系统和旧原型 | | | |
|
|
80
|
+
| 可选参考资料 | | | |
|
|
81
|
+
|
|
82
|
+
遇到冲突时,以当前目标系统的真实后端契约为实现事实;历史或外部参考只用于理解业务边界和比较设计方案。不要为了视觉一致而虚构接口。
|
|
83
|
+
|
|
84
|
+
### 2. 决定页面数量
|
|
85
|
+
|
|
86
|
+
按照任务目标而不是参考页面的文件数量拆分页面:
|
|
87
|
+
|
|
88
|
+
- 不同菜单入口、权限边界、用户角色或长期工作区通常是独立页面。
|
|
89
|
+
- 新增、编辑、详情、确认等短任务通常使用抽屉或弹窗。
|
|
90
|
+
- 用户明确要求两个页面时,必须生成两个能独立打开的 HTML 文件;不能用一个页面里的 Tab 或状态切换冒充两个页面。
|
|
91
|
+
- 独立页面之间需要真实导航关系时,使用相对链接互相跳转。
|
|
92
|
+
|
|
93
|
+
在 PRD 中先给出页面清单、页面 ID、路由、使用者和边界,再展开页面细节。
|
|
94
|
+
|
|
95
|
+
### 3. 编写 PRD
|
|
96
|
+
|
|
97
|
+
以 [PRD 产物规范](references/prd-rules.md) 为准,并从 [PRD 模板](templates/prd.md) 起草。
|
|
98
|
+
|
|
99
|
+
PRD 必须做到:
|
|
100
|
+
|
|
101
|
+
- 来源可追溯,事实与假设分开。
|
|
102
|
+
- 页面结构、字段、表格列、筛选、状态和交互足够具体。
|
|
103
|
+
- 接口、权限、错误、空状态、并发和危险操作有明确设计。
|
|
104
|
+
- 同时说明桌面端和窄屏行为。
|
|
105
|
+
- 明确原型与当前生产实现之间的差距。
|
|
106
|
+
|
|
107
|
+
### 4. 生成独立 HTML 原型
|
|
108
|
+
|
|
109
|
+
以 [HTML 原型规范](references/prototype-rules.md) 为准。
|
|
110
|
+
|
|
111
|
+
优先参考当前仓库中的黄金样例:
|
|
112
|
+
|
|
113
|
+
- `design/ruoyi-plus-fast/prototypes/user/index.html`
|
|
114
|
+
- `design/ruoyi-plus-fast/prototypes/role/index.html`
|
|
115
|
+
- `design/ruoyi-plus-fast/prototypes/menu-final/index.html`
|
|
116
|
+
- `design/ruoyi-plus-fast/prototypes/oss/index.html`
|
|
117
|
+
- `design/ruoyi-plus-fast/prototypes/oss-config/index.html`
|
|
118
|
+
|
|
119
|
+
黄金样例用于理解布局、层级、信息密度和交互质量,不是复制固定业务内容。新页面应保持同一产品家族感,同时让业务特征决定局部布局。
|
|
120
|
+
|
|
121
|
+
可以从 [后台页面骨架](templates/admin-page.html) 起步。交付前必须替换模板占位内容,并删除未使用的演示结构。
|
|
122
|
+
|
|
123
|
+
### 5. 验收
|
|
124
|
+
|
|
125
|
+
完整执行 [验收清单](references/acceptance-checklist.md)。最低要求:
|
|
126
|
+
|
|
127
|
+
1. 使用 Oxfmt 检查 PRD 和 HTML。
|
|
128
|
+
2. 使用本 Skill 的静态检查脚本检查每个原型。
|
|
129
|
+
3. 启动本地静态服务,通过浏览器访问,不只使用文件预览。
|
|
130
|
+
4. 分别检查桌面、窄屏和手机宽度。
|
|
131
|
+
5. 点击查询、重置、新增、编辑、详情、危险操作、关闭浮层等主要交互。
|
|
132
|
+
6. 检查浏览器控制台错误和页面横向溢出。
|
|
133
|
+
7. 截取能证明主页面、关键浮层和移动端状态的图片。
|
|
134
|
+
|
|
135
|
+
静态检查命令示例:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
node .agents/skills/skyroc-admin-prd-prototype/scripts/verify-prototypes.mjs \
|
|
139
|
+
design/ruoyi-plus-fast/prototypes/example-a \
|
|
140
|
+
design/ruoyi-plus-fast/prototypes/example-b
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## 不可妥协的规则
|
|
144
|
+
|
|
145
|
+
- 不复制旧 PRD 中可能已经过期的接口事实。
|
|
146
|
+
- 不把历史或外部参考行为描述成 FastAPI 已实现行为。
|
|
147
|
+
- 不把静态 HTML 描述成已经完成后端联调。
|
|
148
|
+
- 不用 Tab 冒充用户要求的多个页面。
|
|
149
|
+
- 不把所有业务塞进一个超长弹窗。
|
|
150
|
+
- 不生成只有视觉、没有关键点击反馈的“截图式页面”。
|
|
151
|
+
- 不使用外部图标 CDN 作为关键依赖;优先内联 SVG。
|
|
152
|
+
- 不在原型中写入真实密钥、Token、个人信息或生产地址。
|
|
153
|
+
- 不因制作原型而修改当前 React 生产代码,除非用户明确要求。
|
|
154
|
+
|
|
155
|
+
## 完成报告
|
|
156
|
+
|
|
157
|
+
最终只需要说明:
|
|
158
|
+
|
|
159
|
+
1. PRD 和页面数量。
|
|
160
|
+
2. 每个页面的主要内容和关键交互。
|
|
161
|
+
3. 生成文件的绝对路径。
|
|
162
|
+
4. 执行过的格式、静态和浏览器验证。
|
|
163
|
+
5. 当前仍属于设计假设或尚未真实联调的部分。
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# 验收清单
|
|
2
|
+
|
|
3
|
+
## 1. 文件与格式
|
|
4
|
+
|
|
5
|
+
- [ ] PRD 位于约定路径,链接有效。
|
|
6
|
+
- [ ] 每个真实页面都有独立 `index.html`。
|
|
7
|
+
- [ ] 页面之间的相对链接指向存在的文件。
|
|
8
|
+
- [ ] Oxfmt 检查通过。
|
|
9
|
+
- [ ] 静态检查脚本通过。
|
|
10
|
+
- [ ] 没有遗留 `TODO`、模板占位符或真实敏感信息。
|
|
11
|
+
|
|
12
|
+
## 2. 内容一致性
|
|
13
|
+
|
|
14
|
+
- [ ] 页面数量与 PRD 页面清单一致。
|
|
15
|
+
- [ ] 查询字段、表格列、表单字段和状态与 PRD 一致。
|
|
16
|
+
- [ ] 当前 FastAPI 已实现与未实现能力没有混写。
|
|
17
|
+
- [ ] 历史或外部参考能力(如果使用)已标明只是参考。
|
|
18
|
+
- [ ] 权限字符、接口路径和响应字段来自当前源码。
|
|
19
|
+
- [ ] 危险操作的影响和阻塞原因可见。
|
|
20
|
+
|
|
21
|
+
## 3. 浏览器尺寸
|
|
22
|
+
|
|
23
|
+
至少逐一检查:
|
|
24
|
+
|
|
25
|
+
- [ ] `1440 × 1000` 桌面端。
|
|
26
|
+
- [ ] `1024 × 768` 窄屏。
|
|
27
|
+
- [ ] `390 × 844` 手机端。
|
|
28
|
+
|
|
29
|
+
每个尺寸确认:
|
|
30
|
+
|
|
31
|
+
- [ ] 没有意外的页面级横向滚动。
|
|
32
|
+
- [ ] 固定区、抽屉和弹窗没有超出可视区域。
|
|
33
|
+
- [ ] 文字没有严重截断或覆盖。
|
|
34
|
+
- [ ] 主操作始终可发现。
|
|
35
|
+
- [ ] 手机端触控目标足够大。
|
|
36
|
+
|
|
37
|
+
## 4. 关键交互
|
|
38
|
+
|
|
39
|
+
根据页面实际能力检查:
|
|
40
|
+
|
|
41
|
+
- [ ] 查询、重置和更多筛选。
|
|
42
|
+
- [ ] 分页、刷新、列设置和批量选择。
|
|
43
|
+
- [ ] 新增、编辑、详情和保存校验。
|
|
44
|
+
- [ ] 浮层关闭、遮罩关闭和 Escape。
|
|
45
|
+
- [ ] 删除、停用、设为默认等危险确认。
|
|
46
|
+
- [ ] 成功、错误和警告反馈。
|
|
47
|
+
- [ ] 明暗主题或密度切换(页面提供时)。
|
|
48
|
+
- [ ] 跨页面相对链接。
|
|
49
|
+
|
|
50
|
+
## 5. 浏览器技术检查
|
|
51
|
+
|
|
52
|
+
- [ ] 控制台没有未处理异常。
|
|
53
|
+
- [ ] 本地资源没有 404。
|
|
54
|
+
- [ ] 所有图标和图片可见,失败时有降级。
|
|
55
|
+
- [ ] 焦点样式可见,Tab 顺序基本合理。
|
|
56
|
+
- [ ] 抽屉和弹窗有可访问名称。
|
|
57
|
+
- [ ] `prefers-reduced-motion` 下没有强制大动画。
|
|
58
|
+
|
|
59
|
+
## 6. 截图证据
|
|
60
|
+
|
|
61
|
+
每个页面至少保存:
|
|
62
|
+
|
|
63
|
+
- [ ] 桌面端主页面。
|
|
64
|
+
- [ ] 一个关键抽屉或弹窗。
|
|
65
|
+
- [ ] 手机端主页面或关键任务。
|
|
66
|
+
|
|
67
|
+
截图默认放在对应原型目录的 `qa/` 下,使用能表达内容的文件名,例如:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
qa/file-list-desktop.png
|
|
71
|
+
qa/upload-drawer.png
|
|
72
|
+
qa/file-list-mobile.png
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
截图只能证明视觉状态,不能替代真实点击、控制台和接口验证。
|
package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/evidence-order.md
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# 证据读取顺序
|
|
2
|
+
|
|
3
|
+
目标是先确认当前事实,再设计体验。不要从单一参考项目直接推导最终页面。
|
|
4
|
+
|
|
5
|
+
## 1. 用户输入
|
|
6
|
+
|
|
7
|
+
先整理用户明确提供的:
|
|
8
|
+
|
|
9
|
+
- 目标模块和期望产物。
|
|
10
|
+
- 设计文档、PRD、原型、FastAPI、React 和可选参考资料路径。
|
|
11
|
+
- 明确要求的页面数量和命名。
|
|
12
|
+
- 只做设计还是还要实施生产代码。
|
|
13
|
+
|
|
14
|
+
用户指定路径是本次任务的首要范围。不要擅自扩大到无关模块。
|
|
15
|
+
|
|
16
|
+
## 2. 仓库级约束
|
|
17
|
+
|
|
18
|
+
读取最近的 `AGENTS.md`、设计系统和信息架构:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
AGENTS.md
|
|
22
|
+
design/ruoyi-plus-fast/design-system.md
|
|
23
|
+
design/ruoyi-plus-fast/design/04-feature-map.md
|
|
24
|
+
design/ruoyi-plus-fast/design/05-information-architecture.md
|
|
25
|
+
design/ruoyi-plus-fast/design/07-page-registry.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
只读取与当前页面决策有关的设计文档。已有文档与运行时不一致时,把差异记录为设计或实现漂移。
|
|
29
|
+
|
|
30
|
+
## 3. 当前 FastAPI
|
|
31
|
+
|
|
32
|
+
从当前目标后端重新读取:
|
|
33
|
+
|
|
34
|
+
- `routes.py` 或路由包。
|
|
35
|
+
- 请求/响应 schema。
|
|
36
|
+
- service、use case、repository 和 model。
|
|
37
|
+
- 权限依赖、错误映射,以及与当前模块直接相关的测试或接口文档。
|
|
38
|
+
|
|
39
|
+
至少核对:
|
|
40
|
+
|
|
41
|
+
- 实际 HTTP 方法和路径。
|
|
42
|
+
- 查询、路径和请求体字段。
|
|
43
|
+
- 响应包裹结构、分页结构和字段可空性。
|
|
44
|
+
- 权限字符与租户边界。
|
|
45
|
+
- 业务校验、受保护记录和错误状态。
|
|
46
|
+
- 已实现、部分实现和未实现能力。
|
|
47
|
+
|
|
48
|
+
接口事实必须来自当前代码、接口文档或运行时证据,不从旧 PRD 反向推断。某类资料不存在时记录证据缺口,不为满足清单而虚构事实。
|
|
49
|
+
|
|
50
|
+
## 4. 当前 React
|
|
51
|
+
|
|
52
|
+
如果目标页面或 API 封装已经存在,读取:
|
|
53
|
+
|
|
54
|
+
- TanStack Router 路由与菜单路径。
|
|
55
|
+
- 页面组件、局部组件和查询参数。
|
|
56
|
+
- API 类型、请求函数和 TanStack Query 封装。
|
|
57
|
+
- 权限组件、字典、状态映射和共用 UI。
|
|
58
|
+
|
|
59
|
+
记录现有实现可复用部分和与后端不一致之处。不要为了原型顺手修改生产页面。
|
|
60
|
+
|
|
61
|
+
## 5. 运行时证据
|
|
62
|
+
|
|
63
|
+
当本地服务、OpenAPI 或已有浏览器会话可用且与任务有关时,核对:
|
|
64
|
+
|
|
65
|
+
- 实际请求和响应结构。
|
|
66
|
+
- 权限不足、空数据和错误状态。
|
|
67
|
+
- 当前页面已经呈现的字段、状态和交互。
|
|
68
|
+
|
|
69
|
+
运行时证据用于确认当前行为,不能替代源码中的权限、业务约束和未覆盖分支。服务不可用时记录未验证项,不阻塞纯设计工作。
|
|
70
|
+
|
|
71
|
+
## 6. 相邻 PRD 和原型
|
|
72
|
+
|
|
73
|
+
至少选择:
|
|
74
|
+
|
|
75
|
+
- 一个业务形态相近的 PRD。
|
|
76
|
+
- 一个视觉或交互形态相近的 HTML 原型。
|
|
77
|
+
|
|
78
|
+
需要在多个既有模式之间取舍时,再读取两个以上样例。选择依据优先于目录距离。例如,带树形筛选的页面应优先参考用户或菜单页面,密钥配置页面应优先参考 OSS 配置,而不是机械参考文件名最接近的页面。
|
|
79
|
+
|
|
80
|
+
需要提取:
|
|
81
|
+
|
|
82
|
+
- 文档章节和事实表达方式。
|
|
83
|
+
- 页面壳层尺寸、筛选区、表格区、抽屉和弹窗模式。
|
|
84
|
+
- 危险操作、空状态、加载状态和反馈方式。
|
|
85
|
+
- 移动端降级策略。
|
|
86
|
+
|
|
87
|
+
## 7. 可选参考资料
|
|
88
|
+
|
|
89
|
+
仅当用户提供路径,或仓库中确实存在与任务直接相关的历史、外部参考实现时读取。参考资料可以是旧系统源码、产品文档、竞品截图或其他已确认来源。
|
|
90
|
+
|
|
91
|
+
提取业务边界和设计启发,不复制参考系统的视觉或技术实现。记录:
|
|
92
|
+
|
|
93
|
+
- 查询条件、数据字段和主要任务。
|
|
94
|
+
- 行操作、批量操作和危险操作。
|
|
95
|
+
- 系统记录保护、唯一性校验、状态变更和删除约束。
|
|
96
|
+
- 与当前 FastAPI、React 和产品规范的差异。
|
|
97
|
+
|
|
98
|
+
可选参考只能说明来源系统的行为,不能证明当前系统已实现。没有参考资料时跳过本节,不把缺少参考实现视为任务阻塞。
|
|
99
|
+
|
|
100
|
+
## 8. 证据冲突处理
|
|
101
|
+
|
|
102
|
+
按以下原则裁决:
|
|
103
|
+
|
|
104
|
+
1. 当前 FastAPI 和可复现的运行时证据决定“现在能够联调什么”。
|
|
105
|
+
2. 当前产品设计系统决定视觉和交互语言。
|
|
106
|
+
3. 当前 React 决定已有实现和接入成本。
|
|
107
|
+
4. 旧 PRD、旧原型和可选参考资料是历史或外部证据,不是实时接口契约。
|
|
108
|
+
|
|
109
|
+
不能确定时,在 PRD 中写成“设计假设”或“待后端补齐”,不要伪装为事实。
|
package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prd-rules.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# PRD 产物规范
|
|
2
|
+
|
|
3
|
+
PRD 是实现依据,不是页面截图说明。内容应让产品、设计、前端和后端能够对齐同一个范围。
|
|
4
|
+
|
|
5
|
+
## 必要章节
|
|
6
|
+
|
|
7
|
+
### 1. 文档信息
|
|
8
|
+
|
|
9
|
+
包含页面族、页面 ID、页面名称、路由、终端、优先级、状态、日期和关联资料。
|
|
10
|
+
|
|
11
|
+
### 2. 架构结论
|
|
12
|
+
|
|
13
|
+
用简洁文字或文本图说明:
|
|
14
|
+
|
|
15
|
+
- 模块在系统中的位置。
|
|
16
|
+
- 前端、后端、基础设施和相邻模块的职责边界。
|
|
17
|
+
- 为什么拆成当前这些页面。
|
|
18
|
+
|
|
19
|
+
### 3. 已知事实与设计假设
|
|
20
|
+
|
|
21
|
+
必须分开写:
|
|
22
|
+
|
|
23
|
+
- 当前 FastAPI 事实。
|
|
24
|
+
- 当前 React 事实。
|
|
25
|
+
- 当前设计系统和既有页面事实。
|
|
26
|
+
- 可选参考资料事实(存在时)。
|
|
27
|
+
- 设计假设、接口缺口和风险。
|
|
28
|
+
|
|
29
|
+
没有使用历史或外部参考资料时,省略对应的关联资料和事实章节,不生成空章节或“暂无”占位内容。
|
|
30
|
+
|
|
31
|
+
如果字段只存在于参考系统,不要直接放入“当前接口字段”。
|
|
32
|
+
|
|
33
|
+
### 4. 页面清单与目标
|
|
34
|
+
|
|
35
|
+
每个页面列出:
|
|
36
|
+
|
|
37
|
+
- 页面 ID、名称和路径。
|
|
38
|
+
- 主要使用者。
|
|
39
|
+
- 核心任务。
|
|
40
|
+
- 页面内浮层。
|
|
41
|
+
- 与其他页面的导航关系。
|
|
42
|
+
|
|
43
|
+
### 5. 信息架构和布局
|
|
44
|
+
|
|
45
|
+
使用树形文本和桌面端线框描述页面层级。多个页面分别描述,不把全部结构混成一个大图。
|
|
46
|
+
|
|
47
|
+
### 6. 字段与数据展示
|
|
48
|
+
|
|
49
|
+
分别定义:
|
|
50
|
+
|
|
51
|
+
- 查询字段。
|
|
52
|
+
- 表格列及格式。
|
|
53
|
+
- 新增/编辑字段、必填、默认值和校验。
|
|
54
|
+
- 详情展示字段。
|
|
55
|
+
- 状态、字典、空值和敏感字段显示规则。
|
|
56
|
+
|
|
57
|
+
### 7. 交互与状态
|
|
58
|
+
|
|
59
|
+
至少覆盖:
|
|
60
|
+
|
|
61
|
+
- 首次加载、刷新、搜索、重置和分页。
|
|
62
|
+
- 新增、编辑、详情和关闭未保存表单。
|
|
63
|
+
- 批量操作、权限不足和受保护数据。
|
|
64
|
+
- 删除、停用、密钥轮换等危险操作。
|
|
65
|
+
- 空数据、加载中、局部失败、整体失败和重试。
|
|
66
|
+
- 成功反馈及数据刷新策略。
|
|
67
|
+
|
|
68
|
+
### 8. 接口与权限
|
|
69
|
+
|
|
70
|
+
使用表格列出:
|
|
71
|
+
|
|
72
|
+
| 页面能力 | HTTP 方法与路径 | 请求 | 响应 | 权限 | 当前状态 |
|
|
73
|
+
| -------- | --------------- | ---- | ---- | ---- | -------- |
|
|
74
|
+
|
|
75
|
+
“当前状态”使用:已实现、部分实现、未实现、需要确认。接口路径和权限必须重新从当前源码确认。
|
|
76
|
+
|
|
77
|
+
### 9. 响应式与可访问性
|
|
78
|
+
|
|
79
|
+
说明:
|
|
80
|
+
|
|
81
|
+
- 宽屏、常规桌面、窄屏和手机的布局变化。
|
|
82
|
+
- 表格如何滚动或转为摘要卡片。
|
|
83
|
+
- 抽屉在小屏是否全屏。
|
|
84
|
+
- 键盘焦点、可访问名称、状态是否只依赖颜色。
|
|
85
|
+
|
|
86
|
+
### 10. 验收标准
|
|
87
|
+
|
|
88
|
+
验收项应可观察,例如:
|
|
89
|
+
|
|
90
|
+
- 用户能从列表进入详情并返回原查询状态。
|
|
91
|
+
- 删除受保护记录时显示阻塞原因且不改变列表。
|
|
92
|
+
- 390px 宽度下没有页面级横向溢出。
|
|
93
|
+
|
|
94
|
+
避免“体验良好”“布局美观”等不可验证表述。
|
|
95
|
+
|
|
96
|
+
## 写作规则
|
|
97
|
+
|
|
98
|
+
- 先给结论,再展开证据。
|
|
99
|
+
- 中文业务名后保留必要的代码字段名。
|
|
100
|
+
- 使用完整路径或相对链接指向实际资料。
|
|
101
|
+
- 明确区分原型行为与真实后端行为。
|
|
102
|
+
- 不粘贴大段后端源码,只提取契约和约束。
|
|
103
|
+
- 发现参考系统与当前系统冲突时,写清取舍原因。
|
package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prototype-rules.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# HTML 原型规范
|
|
2
|
+
|
|
3
|
+
HTML 原型是能独立查看和操作的设计稿,不是生产页面,也不是只有一张静态截图的布局。
|
|
4
|
+
|
|
5
|
+
## 页面独立性
|
|
6
|
+
|
|
7
|
+
- 每个真实页面必须有独立目录和 `index.html`。
|
|
8
|
+
- 用户要求多个页面时,每个文件直接打开都应呈现完整页面壳层。
|
|
9
|
+
- 不使用 Tab、查询参数或隐藏区块冒充独立页面。
|
|
10
|
+
- 页面间需要互通时使用相对链接,并保证离线静态服务下可访问。
|
|
11
|
+
|
|
12
|
+
## 产品一致性
|
|
13
|
+
|
|
14
|
+
优先使用 `design/ruoyi-plus-fast/design-system.md` 的语义:
|
|
15
|
+
|
|
16
|
+
- 页面背景、容器、边框、文字、主色和反馈色使用 CSS 变量。
|
|
17
|
+
- 默认字号、间距、圆角、表格密度和抽屉尺寸与相邻原型协调。
|
|
18
|
+
- 同一页面最多保留一个主要操作。
|
|
19
|
+
- 删除、停用和配置变更必须说明影响。
|
|
20
|
+
- 图标优先使用内联 SVG,不依赖图标字体或外部 CDN。
|
|
21
|
+
|
|
22
|
+
不要因为通用模板而牺牲业务辨识度。树形资源、文件预览、密钥配置、日志时间线等任务可以采用不同主工作区。
|
|
23
|
+
|
|
24
|
+
## 页面结构
|
|
25
|
+
|
|
26
|
+
完整管理页面通常包括:
|
|
27
|
+
|
|
28
|
+
1. 侧边栏和品牌区。
|
|
29
|
+
2. 顶部工具栏和已打开页签。
|
|
30
|
+
3. 页面标题、说明和上下文。
|
|
31
|
+
4. 可选的概览指标。
|
|
32
|
+
5. 查询区。
|
|
33
|
+
6. 表格、树、卡片或其他主工作区。
|
|
34
|
+
7. 分页或加载更多。
|
|
35
|
+
8. 新增/编辑/详情抽屉。
|
|
36
|
+
9. 危险操作确认弹窗。
|
|
37
|
+
10. 成功、警告和错误反馈。
|
|
38
|
+
|
|
39
|
+
只保留业务真正需要的部分,不为了齐全而堆组件。
|
|
40
|
+
|
|
41
|
+
## 交互要求
|
|
42
|
+
|
|
43
|
+
以下可见控件必须有合理反馈:
|
|
44
|
+
|
|
45
|
+
- 查询和重置改变列表或条件摘要。
|
|
46
|
+
- 新增、编辑和详情打开对应浮层。
|
|
47
|
+
- 浮层的关闭按钮、遮罩和 Escape 行为一致。
|
|
48
|
+
- 保存执行基础校验并反馈结果。
|
|
49
|
+
- 删除、停用等危险操作先确认,再更新演示状态。
|
|
50
|
+
- 刷新、复制、列设置、展开筛选等按钮不能无响应。
|
|
51
|
+
- 页面间导航指向真实存在的相对路径。
|
|
52
|
+
|
|
53
|
+
原型数据可以在内存中变化,但应明确“原型不会提交真实数据”。
|
|
54
|
+
|
|
55
|
+
## 响应式要求
|
|
56
|
+
|
|
57
|
+
至少设计三个宽度:
|
|
58
|
+
|
|
59
|
+
| 场景 | 建议宽度 | 重点 |
|
|
60
|
+
| ---- | -------- | -------------------------------------- |
|
|
61
|
+
| 桌面 | 1440px | 完整信息密度和主要工作流 |
|
|
62
|
+
| 窄屏 | 1024px | 侧栏、筛选和表格压缩策略 |
|
|
63
|
+
| 手机 | 390px | 单列、全屏抽屉、触控尺寸和无页面级溢出 |
|
|
64
|
+
|
|
65
|
+
手机端允许主表格区域内部横向滚动,但页面本身不能出现不可控横向溢出。高频操作保留,低频操作收进更多菜单。
|
|
66
|
+
|
|
67
|
+
## 可访问性基线
|
|
68
|
+
|
|
69
|
+
- 根元素包含 `lang="zh-CN"`、字符集和 viewport。
|
|
70
|
+
- 所有按钮显式声明 `type="button"` 或 `type="submit"`。
|
|
71
|
+
- 纯图标按钮有 `aria-label`。
|
|
72
|
+
- 当前导航使用 `aria-current="page"`。
|
|
73
|
+
- 抽屉和弹窗使用 `role="dialog"` 或 `alertdialog`、`aria-modal` 和可访问标题。
|
|
74
|
+
- Toast 使用 `role="status"` 或 `aria-live`。
|
|
75
|
+
- 键盘焦点可见。
|
|
76
|
+
- 状态不能只用颜色表达。
|
|
77
|
+
- 动画尊重 `prefers-reduced-motion`。
|
|
78
|
+
|
|
79
|
+
## 技术边界
|
|
80
|
+
|
|
81
|
+
- 默认使用原生 HTML、CSS 和 JavaScript,确保单文件可查看。
|
|
82
|
+
- 不调用真实写接口,不嵌入真实 Token 或密钥。
|
|
83
|
+
- 可以使用当前仓库已有本地资产;避免外部网络依赖。
|
|
84
|
+
- 原型中的字段、状态和提示语必须与 PRD 对齐。
|
|
85
|
+
- HTML 不是 React 生产实现,不要声称已完成接口接入。
|
package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/scripts/verify-prototypes.mjs
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import process from "node:process";
|
|
7
|
+
|
|
8
|
+
const rawArguments = process.argv.slice(2);
|
|
9
|
+
const skipFormat = rawArguments.includes("--no-format");
|
|
10
|
+
const targets = rawArguments.filter((argument) => argument !== "--no-format");
|
|
11
|
+
|
|
12
|
+
if (targets.length === 0) {
|
|
13
|
+
console.error(
|
|
14
|
+
"用法: node verify-prototypes.mjs [--no-format] <原型目录或 index.html> [更多原型目录或文件]",
|
|
15
|
+
);
|
|
16
|
+
process.exit(2);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function collectHtmlFiles(targetPath) {
|
|
20
|
+
const absolutePath = resolve(targetPath);
|
|
21
|
+
|
|
22
|
+
if (!existsSync(absolutePath)) {
|
|
23
|
+
return { errors: [`路径不存在: ${absolutePath}`], files: [] };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (statSync(absolutePath).isFile()) {
|
|
27
|
+
return absolutePath.endsWith(".html")
|
|
28
|
+
? { errors: [], files: [absolutePath] }
|
|
29
|
+
: { errors: [`不是 HTML 文件: ${absolutePath}`], files: [] };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const indexPath = resolve(absolutePath, "index.html");
|
|
33
|
+
if (existsSync(indexPath)) {
|
|
34
|
+
return { errors: [], files: [indexPath] };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const childFiles = readdirSync(absolutePath, { withFileTypes: true }).flatMap((entry) => {
|
|
38
|
+
if (!entry.isDirectory() || entry.name === "node_modules" || entry.name === "qa") return [];
|
|
39
|
+
return collectHtmlFiles(resolve(absolutePath, entry.name)).files;
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
if (childFiles.length === 0) {
|
|
43
|
+
return { errors: [`目录中没有找到 index.html: ${absolutePath}`], files: [] };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return { errors: [], files: childFiles };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function hasPattern(source, pattern) {
|
|
50
|
+
return pattern.test(source);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function validateHtml(filePath) {
|
|
54
|
+
const source = readFileSync(filePath, "utf8");
|
|
55
|
+
const errors = [];
|
|
56
|
+
const warnings = [];
|
|
57
|
+
|
|
58
|
+
const requiredPatterns = [
|
|
59
|
+
["缺少 HTML5 doctype", /<!doctype html>/i],
|
|
60
|
+
['根元素必须声明 lang="zh-CN"', /<html\b[^>]*\blang=["']zh-CN["']/i],
|
|
61
|
+
["缺少 UTF-8 字符集", /<meta\b[^>]*charset=["']?UTF-8["']?/i],
|
|
62
|
+
["缺少移动端 viewport", /<meta\b[^>]*name=["']viewport["'][^>]*content=/i],
|
|
63
|
+
["缺少非空页面标题", /<title>\s*[^<\s][^<]*<\/title>/i],
|
|
64
|
+
["缺少全局 box-sizing", /box-sizing\s*:\s*border-box/i],
|
|
65
|
+
["缺少可见键盘焦点样式", /:focus-visible/i],
|
|
66
|
+
["缺少响应式媒体查询", /@media\s*\([^)]*max-width/i],
|
|
67
|
+
["缺少减少动画偏好处理", /prefers-reduced-motion/i],
|
|
68
|
+
["缺少页面主内容 main", /<main\b/i],
|
|
69
|
+
["缺少可交互按钮", /<button\b/i],
|
|
70
|
+
["缺少原型交互脚本", /<script\b/i],
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
for (const [message, pattern] of requiredPatterns) {
|
|
74
|
+
if (!hasPattern(source, pattern)) errors.push(message);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (/\{\{[A-Z0-9_]+\}\}/.test(source)) errors.push("仍包含模板占位符");
|
|
78
|
+
if (/\b(?:TODO|FIXME)\b/.test(source)) errors.push("仍包含 TODO 或 FIXME");
|
|
79
|
+
if (/https?:\/\/(?:cdn|unpkg|jsdelivr)\./i.test(source))
|
|
80
|
+
warnings.push("存在外部 CDN 依赖,请确认离线可用性");
|
|
81
|
+
if (/role=["'](?:alert)?dialog["']/i.test(source)) {
|
|
82
|
+
if (!/aria-modal=["']true["']/i.test(source)) errors.push('弹窗或抽屉缺少 aria-modal="true"');
|
|
83
|
+
if (!/aria-labelledby=["'][^"']+["']/i.test(source))
|
|
84
|
+
errors.push("弹窗或抽屉缺少 aria-labelledby");
|
|
85
|
+
}
|
|
86
|
+
if (!/(?:role=["']status["']|aria-live=["'](?:polite|assertive)["'])/i.test(source)) {
|
|
87
|
+
warnings.push("未发现 Toast 或状态反馈的可访问声明");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const buttonTags = source.match(/<button\b[\s\S]*?>/gi) ?? [];
|
|
91
|
+
const buttonsWithoutType = buttonTags.filter(
|
|
92
|
+
(tag) => !/\btype=["'](?:button|submit|reset)["']/i.test(tag),
|
|
93
|
+
);
|
|
94
|
+
if (buttonsWithoutType.length > 0) {
|
|
95
|
+
warnings.push(`${buttonsWithoutType.length} 个 button 没有显式 type`);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return { errors, warnings };
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const collectionResults = targets.map(collectHtmlFiles);
|
|
102
|
+
const collectionErrors = collectionResults.flatMap((result) => result.errors);
|
|
103
|
+
const htmlFiles = [...new Set(collectionResults.flatMap((result) => result.files))];
|
|
104
|
+
|
|
105
|
+
let failed = false;
|
|
106
|
+
|
|
107
|
+
for (const error of collectionErrors) {
|
|
108
|
+
failed = true;
|
|
109
|
+
console.error(`✗ ${error}`);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
for (const filePath of htmlFiles) {
|
|
113
|
+
const result = validateHtml(filePath);
|
|
114
|
+
|
|
115
|
+
if (result.errors.length === 0) {
|
|
116
|
+
console.log(`✓ 静态规范通过: ${filePath}`);
|
|
117
|
+
} else {
|
|
118
|
+
failed = true;
|
|
119
|
+
console.error(`✗ 静态规范失败: ${filePath}`);
|
|
120
|
+
for (const error of result.errors) console.error(` - ${error}`);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for (const warning of result.warnings) console.warn(` ! ${warning}`);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (!skipFormat && htmlFiles.length > 0) {
|
|
127
|
+
const formatResult = spawnSync("pnpm", ["exec", "oxfmt", "--check", ...htmlFiles], {
|
|
128
|
+
encoding: "utf8",
|
|
129
|
+
stdio: "pipe",
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
if (formatResult.status === 0) {
|
|
133
|
+
console.log(`✓ Oxfmt 通过: ${htmlFiles.length} 个 HTML 文件`);
|
|
134
|
+
} else {
|
|
135
|
+
failed = true;
|
|
136
|
+
console.error("✗ Oxfmt 检查失败");
|
|
137
|
+
if (formatResult.stdout.trim()) console.error(formatResult.stdout.trim());
|
|
138
|
+
if (formatResult.stderr.trim()) console.error(formatResult.stderr.trim());
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (failed) process.exit(1);
|
|
143
|
+
|
|
144
|
+
console.log(`完成: ${htmlFiles.length} 个原型通过基础检查。仍需执行浏览器尺寸、交互和控制台验收。`);
|