adevkit 0.1.0__py3-none-any.whl
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.
- adevkit-0.1.0.dist-info/METADATA +171 -0
- adevkit-0.1.0.dist-info/RECORD +731 -0
- adevkit-0.1.0.dist-info/WHEEL +5 -0
- adevkit-0.1.0.dist-info/entry_points.txt +3 -0
- adevkit-0.1.0.dist-info/top_level.txt +1 -0
- devkit/__init__.py +4 -0
- devkit/cli.py +442 -0
- devkit/config.py +21 -0
- devkit/prompts.py +197 -0
- devkit/scaffold/__init__.py +16 -0
- devkit/scaffold/agents_md.py +152 -0
- devkit/scaffold/env_setup.py +59 -0
- devkit/scaffold/git_setup.py +69 -0
- devkit/scaffold/prd_md.py +85 -0
- devkit/scaffold/vscode_setup.py +38 -0
- devkit/skills/__init__.py +10 -0
- devkit/skills/catalog.py +156 -0
- devkit/skills/embedded/SKILL.md +52 -0
- devkit/skills/embedded/animate/RECIPES.md +324 -0
- devkit/skills/embedded/animate/SKILL.md +207 -0
- devkit/skills/embedded/animate-expo/RECIPES.md +385 -0
- devkit/skills/embedded/animate-expo/SKILL.md +263 -0
- devkit/skills/embedded/animation-performance/SKILL.md +222 -0
- devkit/skills/embedded/animation-vocabulary/SKILL.md +181 -0
- devkit/skills/embedded/apple-design/SKILL.md +290 -0
- devkit/skills/embedded/ask-sonner/API.md +64 -0
- devkit/skills/embedded/ask-sonner/SKILL.md +88 -0
- devkit/skills/embedded/banner-design/SKILL.md +145 -0
- devkit/skills/embedded/banner-design/references/banner-sizes-and-styles.md +118 -0
- devkit/skills/embedded/brand/SKILL.md +108 -0
- devkit/skills/embedded/brand/references/approval-checklist.md +169 -0
- devkit/skills/embedded/brand/references/asset-organization.md +157 -0
- devkit/skills/embedded/brand/references/brand-guideline-template.md +140 -0
- devkit/skills/embedded/brand/references/color-palette-management.md +186 -0
- devkit/skills/embedded/brand/references/consistency-checklist.md +94 -0
- devkit/skills/embedded/brand/references/logo-usage-rules.md +185 -0
- devkit/skills/embedded/brand/references/messaging-framework.md +85 -0
- devkit/skills/embedded/brand/references/typography-specifications.md +214 -0
- devkit/skills/embedded/brand/references/update.md +129 -0
- devkit/skills/embedded/brand/references/visual-identity.md +96 -0
- devkit/skills/embedded/brand/references/voice-framework.md +88 -0
- devkit/skills/embedded/brand/scripts/extract-colors.cjs +337 -0
- devkit/skills/embedded/brand/scripts/inject-brand-context.cjs +349 -0
- devkit/skills/embedded/brand/scripts/sync-brand-to-tokens.cjs +415 -0
- devkit/skills/embedded/brand/scripts/tests/test_sync_brand_to_tokens.py +368 -0
- devkit/skills/embedded/brand/scripts/validate-asset.cjs +387 -0
- devkit/skills/embedded/brand/templates/brand-guidelines-starter.md +275 -0
- devkit/skills/embedded/break-ui/CATALOG.md +135 -0
- devkit/skills/embedded/break-ui/SKILL.md +175 -0
- devkit/skills/embedded/chrome-devtools/SKILL.md +74 -0
- devkit/skills/embedded/deploy-to-vercel/Archive.zip +0 -0
- devkit/skills/embedded/deploy-to-vercel/SKILL.md +296 -0
- devkit/skills/embedded/deploy-to-vercel/resources/deploy-codex.sh +301 -0
- devkit/skills/embedded/deploy-to-vercel/resources/deploy.sh +301 -0
- devkit/skills/embedded/design/SKILL.md +333 -0
- devkit/skills/embedded/design/data/cip/deliverables.csv +51 -0
- devkit/skills/embedded/design/data/cip/industries.csv +21 -0
- devkit/skills/embedded/design/data/cip/mockup-contexts.csv +21 -0
- devkit/skills/embedded/design/data/cip/styles.csv +21 -0
- devkit/skills/embedded/design/data/icon/styles.csv +16 -0
- devkit/skills/embedded/design/data/logo/colors.csv +56 -0
- devkit/skills/embedded/design/data/logo/industries.csv +56 -0
- devkit/skills/embedded/design/data/logo/styles.csv +56 -0
- devkit/skills/embedded/design/references/banner-sizes-and-styles.md +118 -0
- devkit/skills/embedded/design/references/cip-deliverable-guide.md +95 -0
- devkit/skills/embedded/design/references/cip-design.md +123 -0
- devkit/skills/embedded/design/references/cip-prompt-engineering.md +84 -0
- devkit/skills/embedded/design/references/cip-style-guide.md +68 -0
- devkit/skills/embedded/design/references/design-routing.md +207 -0
- devkit/skills/embedded/design/references/icon-design.md +122 -0
- devkit/skills/embedded/design/references/logo-color-psychology.md +101 -0
- devkit/skills/embedded/design/references/logo-design.md +110 -0
- devkit/skills/embedded/design/references/logo-prompt-engineering.md +158 -0
- devkit/skills/embedded/design/references/logo-style-guide.md +109 -0
- devkit/skills/embedded/design/references/slides-copywriting-formulas.md +84 -0
- devkit/skills/embedded/design/references/slides-create.md +4 -0
- devkit/skills/embedded/design/references/slides-html-template.md +295 -0
- devkit/skills/embedded/design/references/slides-layout-patterns.md +137 -0
- devkit/skills/embedded/design/references/slides-strategies.md +94 -0
- devkit/skills/embedded/design/references/slides.md +42 -0
- devkit/skills/embedded/design/references/social-photos-design.md +329 -0
- devkit/skills/embedded/design/scripts/cip/core.py +215 -0
- devkit/skills/embedded/design/scripts/cip/generate.py +504 -0
- devkit/skills/embedded/design/scripts/cip/render-html.py +424 -0
- devkit/skills/embedded/design/scripts/cip/search.py +127 -0
- devkit/skills/embedded/design/scripts/icon/generate.py +535 -0
- devkit/skills/embedded/design/scripts/logo/core.py +175 -0
- devkit/skills/embedded/design/scripts/logo/generate.py +812 -0
- devkit/skills/embedded/design/scripts/logo/search.py +114 -0
- devkit/skills/embedded/design/scripts/logo/tests/test_generate.py +454 -0
- devkit/skills/embedded/design/scripts/tests/test_cip_generate.py +134 -0
- devkit/skills/embedded/design/scripts/tests/test_icon_generate.py +178 -0
- devkit/skills/embedded/design-system/SKILL.md +248 -0
- devkit/skills/embedded/design-system/data/slide-backgrounds.csv +11 -0
- devkit/skills/embedded/design-system/data/slide-charts.csv +26 -0
- devkit/skills/embedded/design-system/data/slide-color-logic.csv +14 -0
- devkit/skills/embedded/design-system/data/slide-copy.csv +26 -0
- devkit/skills/embedded/design-system/data/slide-layout-logic.csv +16 -0
- devkit/skills/embedded/design-system/data/slide-layouts.csv +26 -0
- devkit/skills/embedded/design-system/data/slide-strategies.csv +16 -0
- devkit/skills/embedded/design-system/data/slide-typography.csv +15 -0
- devkit/skills/embedded/design-system/references/component-specs.md +236 -0
- devkit/skills/embedded/design-system/references/component-tokens.md +214 -0
- devkit/skills/embedded/design-system/references/primitive-tokens.md +203 -0
- devkit/skills/embedded/design-system/references/semantic-tokens.md +215 -0
- devkit/skills/embedded/design-system/references/states-and-variants.md +241 -0
- devkit/skills/embedded/design-system/references/tailwind-integration.md +251 -0
- devkit/skills/embedded/design-system/references/token-architecture.md +224 -0
- devkit/skills/embedded/design-system/scripts/embed-tokens.cjs +103 -0
- devkit/skills/embedded/design-system/scripts/fetch-background.py +339 -0
- devkit/skills/embedded/design-system/scripts/generate-slide.py +770 -0
- devkit/skills/embedded/design-system/scripts/generate-tokens.cjs +205 -0
- devkit/skills/embedded/design-system/scripts/html-token-validator.py +359 -0
- devkit/skills/embedded/design-system/scripts/search-slides.py +228 -0
- devkit/skills/embedded/design-system/scripts/slide-token-validator.py +35 -0
- devkit/skills/embedded/design-system/scripts/slide_search_core.py +453 -0
- devkit/skills/embedded/design-system/scripts/tests/test_validate_tokens.py +52 -0
- devkit/skills/embedded/design-system/scripts/validate-tokens.cjs +246 -0
- devkit/skills/embedded/design-system/templates/design-tokens-starter.json +143 -0
- devkit/skills/embedded/design-taste-frontend/README.md +81 -0
- devkit/skills/embedded/design-taste-frontend/SKILL.md +542 -0
- devkit/skills/embedded/design-taste-frontend/assets/app.css +216 -0
- devkit/skills/embedded/design-taste-frontend/assets/base.css +105 -0
- devkit/skills/embedded/design-taste-frontend/assets/base.js +37 -0
- devkit/skills/embedded/design-taste-frontend/assets/charts.js +619 -0
- devkit/skills/embedded/design-taste-frontend/assets/scenes/stage.css +28 -0
- devkit/skills/embedded/design-taste-frontend/assets/scenes/stage.js +134 -0
- devkit/skills/embedded/design-taste-frontend/evals/evals.json +76 -0
- devkit/skills/embedded/design-taste-frontend/library/app.json +1327 -0
- devkit/skills/embedded/design-taste-frontend/library/directions.json +1078 -0
- devkit/skills/embedded/design-taste-frontend/library/heroes.json +1086 -0
- devkit/skills/embedded/design-taste-frontend/library/motions.json +92 -0
- devkit/skills/embedded/design-taste-frontend/library/palettes.json +1485 -0
- devkit/skills/embedded/design-taste-frontend/library/photos.json +7240 -0
- devkit/skills/embedded/design-taste-frontend/library/sections.json +4429 -0
- devkit/skills/embedded/design-taste-frontend/library/sites.json +8350 -0
- devkit/skills/embedded/design-taste-frontend/library/type.json +2024 -0
- devkit/skills/embedded/design-taste-frontend/references/app-screens.md +1199 -0
- devkit/skills/embedded/design-taste-frontend/references/colour.md +141 -0
- devkit/skills/embedded/design-taste-frontend/references/copy.md +177 -0
- devkit/skills/embedded/design-taste-frontend/references/critique.md +182 -0
- devkit/skills/embedded/design-taste-frontend/references/imagery.md +791 -0
- devkit/skills/embedded/design-taste-frontend/references/layout.md +292 -0
- devkit/skills/embedded/design-taste-frontend/references/motion.md +980 -0
- devkit/skills/embedded/design-taste-frontend/references/research.md +356 -0
- devkit/skills/embedded/design-taste-frontend/references/scenes.md +174 -0
- devkit/skills/embedded/design-taste-frontend/references/tells.md +115 -0
- devkit/skills/embedded/design-taste-frontend/references/type.md +170 -0
- devkit/skills/embedded/design-taste-frontend/scripts/assets.mjs +865 -0
- devkit/skills/embedded/design-taste-frontend/scripts/draw.mjs +584 -0
- devkit/skills/embedded/design-taste-frontend/scripts/inspect.mjs +308 -0
- devkit/skills/embedded/design-taste-frontend/scripts/lib/app-draw.mjs +203 -0
- devkit/skills/embedded/design-taste-frontend/scripts/lib/cdp.mjs +248 -0
- devkit/skills/embedded/design-taste-frontend/scripts/lib/inspection-files.mjs +9 -0
- devkit/skills/embedded/design-taste-frontend/scripts/lib/probe.mjs +929 -0
- devkit/skills/embedded/design-taste-frontend/scripts/lib/rules.mjs +243 -0
- devkit/skills/embedded/design-taste-frontend/scripts/lint.mjs +119 -0
- devkit/skills/embedded/design-taste-frontend/scripts/scenes.mjs +124 -0
- devkit/skills/embedded/emil-design-eng/SKILL.md +674 -0
- devkit/skills/embedded/find-animation-opportunities/SKILL.md +140 -0
- devkit/skills/embedded/gemini-api-dev/SKILL.md +458 -0
- devkit/skills/embedded/gemini-api-dev/references/migration.md +180 -0
- devkit/skills/embedded/impeccable/SKILL.md +86 -0
- devkit/skills/embedded/impeccable/agents/impeccable_asset_producer.toml +47 -0
- devkit/skills/embedded/impeccable/agents/impeccable_documenter.toml +27 -0
- devkit/skills/embedded/impeccable/agents/impeccable_finish_reviewer.toml +41 -0
- devkit/skills/embedded/impeccable/agents/impeccable_manual_edit_applier.toml +95 -0
- devkit/skills/embedded/impeccable/agents/openai.yaml +4 -0
- devkit/skills/embedded/impeccable/reference/adapt.md +318 -0
- devkit/skills/embedded/impeccable/reference/adapt.native.md +58 -0
- devkit/skills/embedded/impeccable/reference/android.md +46 -0
- devkit/skills/embedded/impeccable/reference/animate.md +89 -0
- devkit/skills/embedded/impeccable/reference/audit.md +139 -0
- devkit/skills/embedded/impeccable/reference/audit.native.md +139 -0
- devkit/skills/embedded/impeccable/reference/bolder.md +33 -0
- devkit/skills/embedded/impeccable/reference/clarify.md +94 -0
- devkit/skills/embedded/impeccable/reference/colorize.md +86 -0
- devkit/skills/embedded/impeccable/reference/component-review.md +63 -0
- devkit/skills/embedded/impeccable/reference/craft-floor.md +50 -0
- devkit/skills/embedded/impeccable/reference/craft.md +5 -0
- devkit/skills/embedded/impeccable/reference/critique.md +841 -0
- devkit/skills/embedded/impeccable/reference/degraded/asset-producer.md +44 -0
- devkit/skills/embedded/impeccable/reference/degraded/documenter.md +24 -0
- devkit/skills/embedded/impeccable/reference/degraded/finish-reviewer.md +38 -0
- devkit/skills/embedded/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- devkit/skills/embedded/impeccable/reference/delight.md +70 -0
- devkit/skills/embedded/impeccable/reference/distill.md +111 -0
- devkit/skills/embedded/impeccable/reference/doctor.md +54 -0
- devkit/skills/embedded/impeccable/reference/document.md +416 -0
- devkit/skills/embedded/impeccable/reference/extract.md +69 -0
- devkit/skills/embedded/impeccable/reference/generate.md +101 -0
- devkit/skills/embedded/impeccable/reference/harden.md +362 -0
- devkit/skills/embedded/impeccable/reference/hooks.md +113 -0
- devkit/skills/embedded/impeccable/reference/init.md +131 -0
- devkit/skills/embedded/impeccable/reference/ios.md +51 -0
- devkit/skills/embedded/impeccable/reference/layout.md +84 -0
- devkit/skills/embedded/impeccable/reference/live-setup.md +104 -0
- devkit/skills/embedded/impeccable/reference/live.md +327 -0
- devkit/skills/embedded/impeccable/reference/mode-operate.md +21 -0
- devkit/skills/embedded/impeccable/reference/mode-persuade.md +19 -0
- devkit/skills/embedded/impeccable/reference/mode-read.md +21 -0
- devkit/skills/embedded/impeccable/reference/new-work.md +152 -0
- devkit/skills/embedded/impeccable/reference/onboard.md +234 -0
- devkit/skills/embedded/impeccable/reference/operate.md +61 -0
- devkit/skills/embedded/impeccable/reference/optimize.md +257 -0
- devkit/skills/embedded/impeccable/reference/overdrive.md +127 -0
- devkit/skills/embedded/impeccable/reference/polish.md +105 -0
- devkit/skills/embedded/impeccable/reference/quieter.md +99 -0
- devkit/skills/embedded/impeccable/reference/region-map.md +26 -0
- devkit/skills/embedded/impeccable/reference/routing.md +24 -0
- devkit/skills/embedded/impeccable/reference/shape.md +59 -0
- devkit/skills/embedded/impeccable/reference/typeset.md +90 -0
- devkit/skills/embedded/impeccable/reference/visualize.md +47 -0
- devkit/skills/embedded/impeccable/scripts/VERSION +1 -0
- devkit/skills/embedded/impeccable/scripts/command-metadata.json +98 -0
- devkit/skills/embedded/impeccable/scripts/data/font-index-failures.json +121 -0
- devkit/skills/embedded/impeccable/scripts/data/font-index.json +1 -0
- devkit/skills/embedded/impeccable/scripts/impeccable +213 -0
- devkit/skills/embedded/impeccable/scripts/impeccable.cmd +239 -0
- devkit/skills/embedded/impeccable/scripts/live-browser-dom.js +320 -0
- devkit/skills/embedded/impeccable/scripts/live-browser-ignores.js +246 -0
- devkit/skills/embedded/impeccable/scripts/live-browser-session.js +183 -0
- devkit/skills/embedded/impeccable/scripts/live-browser.js +13645 -0
- devkit/skills/embedded/impeccable/scripts/modern-screenshot.umd.js +14 -0
- devkit/skills/embedded/improve-animations/AUDIT.md +115 -0
- devkit/skills/embedded/improve-animations/PLAN-TEMPLATE.md +73 -0
- devkit/skills/embedded/improve-animations/SKILL.md +109 -0
- devkit/skills/embedded/mobile-native/SKILL.md +311 -0
- devkit/skills/embedded/modern-web-guidance/SKILL.md +135 -0
- devkit/skills/embedded/pick-ui-library/SKILL.md +85 -0
- devkit/skills/embedded/ponytail/SKILL.md +52 -0
- devkit/skills/embedded/ponytail-audit/SKILL.md +103 -0
- devkit/skills/embedded/ponytail-debt/SKILL.md +44 -0
- devkit/skills/embedded/ponytail-gain/SKILL.md +52 -0
- devkit/skills/embedded/ponytail-help/SKILL.md +76 -0
- devkit/skills/embedded/ponytail-review/SKILL.md +101 -0
- devkit/skills/embedded/prototype/PICKER.md +197 -0
- devkit/skills/embedded/prototype/SKILL.md +98 -0
- devkit/skills/embedded/review-animations/SKILL.md +120 -0
- devkit/skills/embedded/review-animations/STANDARDS.md +187 -0
- devkit/skills/embedded/skills-lock.json +239 -0
- devkit/skills/embedded/slides/SKILL.md +44 -0
- devkit/skills/embedded/slides/references/copywriting-formulas.md +84 -0
- devkit/skills/embedded/slides/references/create.md +4 -0
- devkit/skills/embedded/slides/references/html-template.md +295 -0
- devkit/skills/embedded/slides/references/layout-patterns.md +137 -0
- devkit/skills/embedded/slides/references/slide-strategies.md +94 -0
- devkit/skills/embedded/ui-styling/LICENSE.txt +202 -0
- devkit/skills/embedded/ui-styling/SKILL.md +336 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- devkit/skills/embedded/ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- devkit/skills/embedded/ui-styling/references/canvas-design-system.md +320 -0
- devkit/skills/embedded/ui-styling/references/shadcn-accessibility.md +471 -0
- devkit/skills/embedded/ui-styling/references/shadcn-components.md +424 -0
- devkit/skills/embedded/ui-styling/references/shadcn-theming.md +373 -0
- devkit/skills/embedded/ui-styling/references/tailwind-customization.md +483 -0
- devkit/skills/embedded/ui-styling/references/tailwind-responsive.md +382 -0
- devkit/skills/embedded/ui-styling/references/tailwind-utilities.md +455 -0
- devkit/skills/embedded/ui-styling/scripts/.coverage +0 -0
- devkit/skills/embedded/ui-styling/scripts/requirements.txt +17 -0
- devkit/skills/embedded/ui-styling/scripts/shadcn_add.py +308 -0
- devkit/skills/embedded/ui-styling/scripts/tailwind_config_gen.py +508 -0
- devkit/skills/embedded/ui-styling/scripts/tests/coverage-ui.json +1 -0
- devkit/skills/embedded/ui-styling/scripts/tests/requirements.txt +3 -0
- devkit/skills/embedded/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- devkit/skills/embedded/ui-styling/scripts/tests/test_tailwind_config_gen.py +508 -0
- devkit/skills/embedded/ui-ux-pro-max/SKILL.md +214 -0
- devkit/skills/embedded/ui-ux-pro-max/data/app-interface.csv +33 -0
- devkit/skills/embedded/ui-ux-pro-max/data/catalog-summary.json +78 -0
- devkit/skills/embedded/ui-ux-pro-max/data/charts.csv +26 -0
- devkit/skills/embedded/ui-ux-pro-max/data/colors.csv +193 -0
- devkit/skills/embedded/ui-ux-pro-max/data/data-provenance.json +1348 -0
- devkit/skills/embedded/ui-ux-pro-max/data/google-font-licenses.json +20185 -0
- devkit/skills/embedded/ui-ux-pro-max/data/google-fonts.csv +1935 -0
- devkit/skills/embedded/ui-ux-pro-max/data/icons.csv +106 -0
- devkit/skills/embedded/ui-ux-pro-max/data/landing.csv +35 -0
- devkit/skills/embedded/ui-ux-pro-max/data/motion.csv +18 -0
- devkit/skills/embedded/ui-ux-pro-max/data/phosphor-icons-upstream.json +32582 -0
- devkit/skills/embedded/ui-ux-pro-max/data/products.csv +193 -0
- devkit/skills/embedded/ui-ux-pro-max/data/react-performance.csv +45 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/angular.csv +51 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/avalonia.csv +57 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/html-tailwind.csv +60 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/javafx.csv +76 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/nextjs.csv +62 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/nuxt-ui.csv +77 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/nuxtjs.csv +68 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/react.csv +67 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/shadcn.csv +69 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/svelte.csv +56 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/uno.csv +60 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/uwp.csv +56 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/winui.csv +60 -0
- devkit/skills/embedded/ui-ux-pro-max/data/stacks/wpf.csv +57 -0
- devkit/skills/embedded/ui-ux-pro-max/data/styles.csv +89 -0
- devkit/skills/embedded/ui-ux-pro-max/data/typography.csv +75 -0
- devkit/skills/embedded/ui-ux-pro-max/data/ui-reasoning.csv +193 -0
- devkit/skills/embedded/ui-ux-pro-max/data/ux-guidelines.csv +120 -0
- devkit/skills/embedded/ui-ux-pro-max/references/pro-rules.md +117 -0
- devkit/skills/embedded/ui-ux-pro-max/references/quick-reference.md +256 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/core.py +993 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/design_system.py +1668 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/reasoning_contract.py +123 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/search.py +177 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/google-api.json +36 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/google-catalog.json +33 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/google-existing.csv +3 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/google-metadata.json +17 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/google-overrides.json +7 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/icons-curated.csv +4 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/phosphor-core.json +23 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/phosphor-package.json +13 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/phosphor-react-exports.json +4 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/catalogs/phosphor-react-package.json +5 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/relevance-baseline.json +3366 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/relevance-cases.json +111 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/fixtures/relevance-thresholds.json +100 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_catalog_refresh.py +354 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_catalog_summary_line_endings.py +78 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_core.py +343 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_core_data_quality.py +198 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_data_contracts.py +421 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_design_system_mode.py +233 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_design_system_stack.py +61 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_native_desktop_stack_freshness.py +179 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_relevance_evaluator.py +182 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_skill_script_paths.py +82 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_style_taxonomy.py +175 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_text_layout_resilience.py +120 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/tests/test_web_stack_freshness.py +177 -0
- devkit/skills/embedded/ui-ux-pro-max/scripts/validate_data.py +1095 -0
- devkit/skills/embedded/vercel-cli-with-tokens/SKILL.md +353 -0
- devkit/skills/embedded/vercel-composition-patterns/AGENTS.md +946 -0
- devkit/skills/embedded/vercel-composition-patterns/README.md +60 -0
- devkit/skills/embedded/vercel-composition-patterns/SKILL.md +89 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/_sections.md +29 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/_template.md +24 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- devkit/skills/embedded/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- devkit/skills/embedded/vercel-optimize/AGENTS.md +48 -0
- devkit/skills/embedded/vercel-optimize/CONTRIBUTING.md +41 -0
- devkit/skills/embedded/vercel-optimize/README.md +91 -0
- devkit/skills/embedded/vercel-optimize/SKILL.md +322 -0
- devkit/skills/embedded/vercel-optimize/lib/auth-route.mjs +23 -0
- devkit/skills/embedded/vercel-optimize/lib/budget-summary.mjs +182 -0
- devkit/skills/embedded/vercel-optimize/lib/citations.mjs +139 -0
- devkit/skills/embedded/vercel-optimize/lib/cost-coverage.mjs +143 -0
- devkit/skills/embedded/vercel-optimize/lib/dedup-recs.mjs +325 -0
- devkit/skills/embedded/vercel-optimize/lib/deep-dive.mjs +350 -0
- devkit/skills/embedded/vercel-optimize/lib/display-labels.mjs +185 -0
- devkit/skills/embedded/vercel-optimize/lib/extract-claims.mjs +550 -0
- devkit/skills/embedded/vercel-optimize/lib/framework-support.mjs +67 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/build-minutes-fanout.mjs +69 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/cold-start.mjs +66 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/contract.mjs +79 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/cwv-poor.mjs +87 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/external-api-slow.mjs +55 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/hard-gates.mjs +73 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/index.mjs +45 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/middleware-heavy.mjs +51 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/observability-events-attribution.mjs +56 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/platform-bot-protection.mjs +115 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/platform-fluid-compute.mjs +83 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/region-misconfig.mjs +64 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/route-errors.mjs +80 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/scanner-driven.mjs +122 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/select-candidates.mjs +134 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/slow-route.mjs +88 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/types.d.ts +38 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/uncached-route.mjs +93 -0
- devkit/skills/embedded/vercel-optimize/lib/gates/usage-spike-triage.mjs +121 -0
- devkit/skills/embedded/vercel-optimize/lib/grade-recommendation.mjs +155 -0
- devkit/skills/embedded/vercel-optimize/lib/impact-label.mjs +126 -0
- devkit/skills/embedded/vercel-optimize/lib/impact-magnitude.mjs +60 -0
- devkit/skills/embedded/vercel-optimize/lib/investigation-brief.mjs +610 -0
- devkit/skills/embedded/vercel-optimize/lib/observation-safety.mjs +174 -0
- devkit/skills/embedded/vercel-optimize/lib/project-facts.mjs +99 -0
- devkit/skills/embedded/vercel-optimize/lib/queries.mjs +315 -0
- devkit/skills/embedded/vercel-optimize/lib/reconcile-candidates.mjs +372 -0
- devkit/skills/embedded/vercel-optimize/lib/render-report.mjs +955 -0
- devkit/skills/embedded/vercel-optimize/lib/repo-root.mjs +86 -0
- devkit/skills/embedded/vercel-optimize/lib/route-normalize.mjs +220 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +38 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +30 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/count-correct.mjs +52 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +38 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/index.mjs +79 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +36 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/pre-release.mjs +74 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/rate-limit.mjs +67 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +38 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +78 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -0
- devkit/skills/embedded/vercel-optimize/lib/sanitizers/window-units.mjs +32 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +109 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/edge-heavy-import.mjs +94 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/force-dynamic.mjs +42 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/headers-in-page.mjs +44 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/index.mjs +35 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/large-static-asset.mjs +92 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +42 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +55 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/missing-cache-headers.mjs +90 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/prisma-include-tree.mjs +42 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/region-pin-in-config.mjs +88 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/source-maps-production.mjs +36 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +43 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +129 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/unoptimized-image.mjs +113 -0
- devkit/skills/embedded/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +106 -0
- devkit/skills/embedded/vercel-optimize/lib/support-topics.mjs +355 -0
- devkit/skills/embedded/vercel-optimize/lib/throttle.mjs +273 -0
- devkit/skills/embedded/vercel-optimize/lib/util.mjs +17 -0
- devkit/skills/embedded/vercel-optimize/lib/vercel.mjs +864 -0
- devkit/skills/embedded/vercel-optimize/lib/verify-claim.mjs +1296 -0
- devkit/skills/embedded/vercel-optimize/lib/workspace-resolver.mjs +521 -0
- devkit/skills/embedded/vercel-optimize/references/candidates.md +176 -0
- devkit/skills/embedded/vercel-optimize/references/data-collection.md +218 -0
- devkit/skills/embedded/vercel-optimize/references/docs-library.json +683 -0
- devkit/skills/embedded/vercel-optimize/references/doctrine.md +105 -0
- devkit/skills/embedded/vercel-optimize/references/observability-plus.md +108 -0
- devkit/skills/embedded/vercel-optimize/references/playbooks/README.md +53 -0
- devkit/skills/embedded/vercel-optimize/references/playbooks/ai-application.md +32 -0
- devkit/skills/embedded/vercel-optimize/references/playbooks/api-service.md +30 -0
- devkit/skills/embedded/vercel-optimize/references/playbooks/content-site.md +30 -0
- devkit/skills/embedded/vercel-optimize/references/playbooks/ecommerce.md +30 -0
- devkit/skills/embedded/vercel-optimize/references/playbooks/marketing.md +30 -0
- devkit/skills/embedded/vercel-optimize/references/playbooks/saas.md +31 -0
- devkit/skills/embedded/vercel-optimize/references/playbooks/sveltekit.md +75 -0
- devkit/skills/embedded/vercel-optimize/references/recommendations.md +203 -0
- devkit/skills/embedded/vercel-optimize/references/scanner-patterns.md +251 -0
- devkit/skills/embedded/vercel-optimize/references/scoring.md +205 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/README.md +46 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/database-egress-pooling-region.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/external-api-critical-path.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/fluid-compute-caveats.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/function-duration-io-and-after.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/function-invocation-reduction.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/image-optimization-cost-control.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/post-response-work-waituntil.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/route-error-durable-offload.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/route-error-runtime-limits.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/usage-spike-triage.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +22 -0
- devkit/skills/embedded/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +23 -0
- devkit/skills/embedded/vercel-optimize/references/verification.md +102 -0
- devkit/skills/embedded/vercel-optimize/references/voice.md +76 -0
- devkit/skills/embedded/vercel-optimize/scripts/budget-summary.mjs +56 -0
- devkit/skills/embedded/vercel-optimize/scripts/build-docs.mjs +74 -0
- devkit/skills/embedded/vercel-optimize/scripts/check-citations.mjs +81 -0
- devkit/skills/embedded/vercel-optimize/scripts/check-docs-fresh.mjs +93 -0
- devkit/skills/embedded/vercel-optimize/scripts/collect-signals.mjs +576 -0
- devkit/skills/embedded/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +296 -0
- devkit/skills/embedded/vercel-optimize/scripts/deep-dive.mjs +319 -0
- devkit/skills/embedded/vercel-optimize/scripts/gate-investigations.mjs +166 -0
- devkit/skills/embedded/vercel-optimize/scripts/merge-signals.mjs +192 -0
- devkit/skills/embedded/vercel-optimize/scripts/prepare-investigation-brief.mjs +231 -0
- devkit/skills/embedded/vercel-optimize/scripts/reconcile-candidates.mjs +62 -0
- devkit/skills/embedded/vercel-optimize/scripts/render-report.mjs +437 -0
- devkit/skills/embedded/vercel-optimize/scripts/scan-codebase.mjs +313 -0
- devkit/skills/embedded/vercel-optimize/scripts/verify-and-regen.mjs +346 -0
- devkit/skills/embedded/vercel-optimize/scripts/verify-finding.mjs +19 -0
- devkit/skills/embedded/vercel-react-best-practices/AGENTS.md +3810 -0
- devkit/skills/embedded/vercel-react-best-practices/README.md +123 -0
- devkit/skills/embedded/vercel-react-best-practices/SKILL.md +149 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/_sections.md +46 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/_template.md +28 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/async-parallel.md +28 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- devkit/skills/embedded/vercel-react-best-practices/rules/server-serialization.md +38 -0
- devkit/skills/embedded/vercel-react-native-skills/AGENTS.md +2897 -0
- devkit/skills/embedded/vercel-react-native-skills/README.md +165 -0
- devkit/skills/embedded/vercel-react-native-skills/SKILL.md +121 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/_sections.md +86 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/_template.md +28 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/animation-derived-value.md +53 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/animation-gesture-detector-press.md +95 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/animation-gpu-properties.md +65 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/design-system-compound-components.md +66 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/fonts-config-plugin.md +71 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/imports-design-system-folder.md +68 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/js-hoist-intl.md +61 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/list-performance-callbacks.md +44 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/list-performance-function-references.md +132 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/list-performance-images.md +53 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/list-performance-inline-objects.md +97 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/list-performance-item-expensive.md +94 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/list-performance-item-memo.md +82 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/list-performance-item-types.md +104 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/list-performance-virtualize.md +67 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/navigation-native-navigators.md +188 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/react-state-dispatcher.md +91 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/react-state-fallback.md +56 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/react-state-minimize.md +65 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/rendering-no-falsy-and.md +74 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/rendering-text-in-text-component.md +36 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/scroll-position-no-state.md +82 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/state-ground-truth.md +80 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-expo-image.md +66 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-image-gallery.md +104 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-measure-views.md +78 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-menus.md +174 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-native-modals.md +77 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-pressable.md +61 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-safe-area-scroll.md +65 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
- devkit/skills/embedded/vercel-react-native-skills/rules/ui-styling.md +87 -0
- devkit/skills/embedded/vercel-react-view-transitions/AGENTS.md +1380 -0
- devkit/skills/embedded/vercel-react-view-transitions/README.md +44 -0
- devkit/skills/embedded/vercel-react-view-transitions/SKILL.md +332 -0
- devkit/skills/embedded/vercel-react-view-transitions/references/css-recipes.md +312 -0
- devkit/skills/embedded/vercel-react-view-transitions/references/implementation.md +170 -0
- devkit/skills/embedded/vercel-react-view-transitions/references/nextjs.md +233 -0
- devkit/skills/embedded/vercel-react-view-transitions/references/patterns.md +274 -0
- devkit/skills/embedded/vercel-react-view-transitions/references/troubleshooting.md +47 -0
- devkit/skills/embedded/web-design-guidelines/SKILL.md +39 -0
- devkit/skills/embedded/write-swift/SKILL.md +396 -0
- devkit/skills/embedded/writing-guidelines/SKILL.md +39 -0
- devkit/skills/installer.py +110 -0
- devkit/templates/__init__.py +76 -0
- devkit/templates/ai_agents_python.py +160 -0
- devkit/templates/base.py +37 -0
- devkit/templates/content_site.py +117 -0
- devkit/templates/custom.py +129 -0
- devkit/templates/design_system.py +167 -0
- devkit/templates/expo_fullstack.py +278 -0
- devkit/templates/expo_mobile.py +127 -0
- devkit/templates/minimal_agentic.py +34 -0
- devkit/templates/nextjs.py +219 -0
- devkit/templates/python_fastapi.py +125 -0
- devkit/templates/saas_fullstack.py +212 -0
- devkit/templates/vite_react.py +176 -0
- devkit/ui.py +61 -0
- devkit/utils/__init__.py +15 -0
- devkit/utils/system.py +48 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from .agents_md import generate_agents_md
|
|
2
|
+
from .prd_md import generate_prd_template, import_prd_file
|
|
3
|
+
from .git_setup import setup_git_repository
|
|
4
|
+
from .env_setup import setup_python_environment, setup_node_environment, setup_dotenv_file
|
|
5
|
+
from .vscode_setup import setup_vscode_config
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"generate_agents_md",
|
|
9
|
+
"generate_prd_template",
|
|
10
|
+
"import_prd_file",
|
|
11
|
+
"setup_git_repository",
|
|
12
|
+
"setup_python_environment",
|
|
13
|
+
"setup_node_environment",
|
|
14
|
+
"setup_dotenv_file",
|
|
15
|
+
"setup_vscode_config",
|
|
16
|
+
]
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from typing import List
|
|
3
|
+
from ..skills.catalog import AVAILABLE_SKILLS
|
|
4
|
+
|
|
5
|
+
def generate_agents_md(
|
|
6
|
+
target_dir: Path,
|
|
7
|
+
project_name: str,
|
|
8
|
+
template_id: str,
|
|
9
|
+
installed_skills: List[str],
|
|
10
|
+
) -> Path:
|
|
11
|
+
"""Generate a comprehensive AGENTS.md guide tailored to the project stack and skills."""
|
|
12
|
+
target_dir = Path(target_dir)
|
|
13
|
+
file_path = target_dir / "AGENTS.md"
|
|
14
|
+
|
|
15
|
+
# Stack-specific run commands
|
|
16
|
+
commands_section = ""
|
|
17
|
+
if "python" in template_id or "ai_agents" in template_id:
|
|
18
|
+
commands_section = """### Environment & Commands
|
|
19
|
+
- **Activate Virtual Environment**: `.\\.venv\\Scripts\\activate` (Windows) or `source .venv/bin/activate` (POSIX)
|
|
20
|
+
- **Run API Server**: `python -m app.main` or `uvicorn app.main:app --reload`
|
|
21
|
+
- **Run Tests**: `pytest tests/ -v`
|
|
22
|
+
- **Install Dependencies**: `pip install -r requirements.txt`
|
|
23
|
+
"""
|
|
24
|
+
elif "nextjs" in template_id or "saas" in template_id:
|
|
25
|
+
commands_section = """### Environment & Commands
|
|
26
|
+
- **Dev Server**: `npm run dev` (or `pnpm dev` / `bun dev`)
|
|
27
|
+
- **Build Production**: `npm run build`
|
|
28
|
+
- **Lint**: `npm run lint`
|
|
29
|
+
- **Typecheck**: `npx tsc --noEmit`
|
|
30
|
+
"""
|
|
31
|
+
elif "vite" in template_id or "design_system" in template_id:
|
|
32
|
+
commands_section = """### Environment & Commands
|
|
33
|
+
- **Dev Server**: `npm run dev`
|
|
34
|
+
- **Build Production**: `npm run build`
|
|
35
|
+
- **Preview Build**: `npm run preview`
|
|
36
|
+
"""
|
|
37
|
+
elif "content" in template_id or "astro" in template_id:
|
|
38
|
+
commands_section = """### Environment & Commands
|
|
39
|
+
- **Dev Server**: `npm run dev`
|
|
40
|
+
- **Build Production**: `npm run build`
|
|
41
|
+
- **Preview**: `npm run preview`
|
|
42
|
+
"""
|
|
43
|
+
elif "expo_fullstack" in template_id:
|
|
44
|
+
commands_section = """### Environment & Commands
|
|
45
|
+
- **Mobile Dev**: `npm run dev:mobile`
|
|
46
|
+
- **Backend Dev**: `npm run dev:backend`
|
|
47
|
+
"""
|
|
48
|
+
elif "expo" in template_id:
|
|
49
|
+
commands_section = """### Environment & Commands
|
|
50
|
+
- **Start Expo Metro**: `npm start`
|
|
51
|
+
- **Run Android**: `npm run android`
|
|
52
|
+
- **Run iOS**: `npm run ios`
|
|
53
|
+
- **Run Web**: `npm run web`
|
|
54
|
+
"""
|
|
55
|
+
else:
|
|
56
|
+
commands_section = """### Environment & Commands
|
|
57
|
+
- Inspect `package.json`, `pyproject.toml`, or `requirements.txt` for available build and run scripts.
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
# Skills descriptions
|
|
61
|
+
skills_lines = []
|
|
62
|
+
has_design_skills = False
|
|
63
|
+
has_vercel_skills = False
|
|
64
|
+
has_ponytail_skills = False
|
|
65
|
+
|
|
66
|
+
for sid in installed_skills:
|
|
67
|
+
info = AVAILABLE_SKILLS.get(sid)
|
|
68
|
+
desc = info.description if info else "Curated skill"
|
|
69
|
+
name = info.name if info else sid
|
|
70
|
+
skills_lines.append(f"- **`{sid}`** ({name}): {desc}")
|
|
71
|
+
|
|
72
|
+
if sid in ["impeccable", "design-taste-frontend", "ui-ux-pro-max", "emil-design-eng", "animate", "design", "design-system"]:
|
|
73
|
+
has_design_skills = True
|
|
74
|
+
if "vercel" in sid:
|
|
75
|
+
has_vercel_skills = True
|
|
76
|
+
if "ponytail" in sid:
|
|
77
|
+
has_ponytail_skills = True
|
|
78
|
+
|
|
79
|
+
skills_section = "\n".join(skills_lines) if skills_lines else "- No special skills installed."
|
|
80
|
+
|
|
81
|
+
design_directives = ""
|
|
82
|
+
if has_design_skills:
|
|
83
|
+
design_directives = """
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 4. Design Craftsmanship & Aesthetic Directives
|
|
87
|
+
*(Activated via `impeccable`, `design-taste-frontend`, `ui-ux-pro-max`, `emil-design-eng`)*
|
|
88
|
+
|
|
89
|
+
1. **Anti-Generic Aesthetic**:
|
|
90
|
+
- Reject generic AI templates: avoid purple/cyan pill-shaped gradients on pure black cards.
|
|
91
|
+
- Use high-contrast editorial typography, curated warm dark-modes, and deliberate whitespace.
|
|
92
|
+
2. **Micro-Interactions & Spring Motion**:
|
|
93
|
+
- Use snappiness over sluggishness: micro-interactions must resolve in 120ms–200ms.
|
|
94
|
+
- Prefer spring physics over linear easing for natural responsiveness.
|
|
95
|
+
3. **Ergonomics & Accessibility**:
|
|
96
|
+
- Ensure touch targets are at least 44x44px.
|
|
97
|
+
- Guarantee WCAG AA contrast (minimum 4.5:1 on text) and visible `:focus-visible` rings.
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
vercel_directives = ""
|
|
101
|
+
if has_vercel_skills:
|
|
102
|
+
vercel_directives = """
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 5. Vercel & React Architecture Directives
|
|
106
|
+
*(Activated via `vercel-labs/agent-skills`)*
|
|
107
|
+
|
|
108
|
+
1. **Server-First (RSC)**: Keep components server-side by default; only push `'use client'` to the leaf interaction nodes.
|
|
109
|
+
2. **Server Actions & Mutations**: Mutate data through Server Actions with proper revalidation (`revalidatePath`).
|
|
110
|
+
3. **Streaming UI**: Wrap slower database / API calls in `<Suspense fallback={<Skeleton />}>` for instant perceived performance.
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
content = f"""# AGENTS.md — AI Agent Pairing Guidelines for {project_name}
|
|
114
|
+
|
|
115
|
+
Welcome! This document provides essential architectural context, commands, and rules for AI coding assistants (Antigravity, Cursor, Claude Code, Gemini CLI, Copilot) collaborating on **{project_name}**.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 1. Project Context & Stack
|
|
120
|
+
- **Project Name**: {project_name}
|
|
121
|
+
- **Template / Architecture**: {template_id}
|
|
122
|
+
- **Scaffolded by**: Aayush's DevKit
|
|
123
|
+
|
|
124
|
+
{commands_section}
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 2. Active Agent Skills (`.agents/skills/`)
|
|
129
|
+
The following skills are installed in `.agents/skills/` and tracked in `skills-lock.json`:
|
|
130
|
+
|
|
131
|
+
{skills_section}
|
|
132
|
+
|
|
133
|
+
> **Directive**: Before performing complex architectural decisions, refactors, or audits, consult the relevant skill in `.agents/skills/<skill-name>/SKILL.md`.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 3. General Agent Principles & Coding Standards
|
|
138
|
+
1. **Minimal, High-Leverage Changes**:
|
|
139
|
+
- Write the smallest amount of code that cleanly solves the problem.
|
|
140
|
+
- Avoid speculative abstractions, unnecessary wrapper layers, or bloat.
|
|
141
|
+
2. **Preserve Integrity**:
|
|
142
|
+
- Never remove existing docstrings, tests, or comments unrelated to your task.
|
|
143
|
+
- Keep TypeScript types strict and Python type hints explicit.
|
|
144
|
+
3. **Verification First**:
|
|
145
|
+
- Always run tests or build verification commands before claiming completion.
|
|
146
|
+
- If tests fail, diagnose root causes rather than disabling the tests.
|
|
147
|
+
4. **Product Alignment**:
|
|
148
|
+
- Consult `PRD.md` for functional requirements and scope constraints.
|
|
149
|
+
{design_directives}{vercel_directives}
|
|
150
|
+
"""
|
|
151
|
+
file_path.write_text(content, encoding="utf-8")
|
|
152
|
+
return file_path
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import shutil
|
|
2
|
+
import sys
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Tuple, Optional
|
|
5
|
+
from ..utils.system import detect_node_package_manager, which_tool, run_command
|
|
6
|
+
|
|
7
|
+
def setup_python_environment(target_dir: Path) -> Tuple[bool, str]:
|
|
8
|
+
"""Create .venv and install requirements if present."""
|
|
9
|
+
target_dir = Path(target_dir)
|
|
10
|
+
python_exe = sys.executable
|
|
11
|
+
|
|
12
|
+
# 1. Create .venv
|
|
13
|
+
venv_dir = target_dir / ".venv"
|
|
14
|
+
if not venv_dir.exists():
|
|
15
|
+
code, out, err = run_command([python_exe, "-m", "venv", ".venv"], cwd=target_dir)
|
|
16
|
+
if code != 0:
|
|
17
|
+
return False, f"Failed to create virtual environment: {err}"
|
|
18
|
+
|
|
19
|
+
# 2. Determine pip path
|
|
20
|
+
if sys.platform == "win32":
|
|
21
|
+
pip_path = venv_dir / "Scripts" / "pip.exe"
|
|
22
|
+
else:
|
|
23
|
+
pip_path = venv_dir / "bin" / "pip"
|
|
24
|
+
|
|
25
|
+
req_file = target_dir / "requirements.txt"
|
|
26
|
+
if req_file.exists() and pip_path.exists():
|
|
27
|
+
code, out, err = run_command([str(pip_path), "install", "-r", "requirements.txt"], cwd=target_dir)
|
|
28
|
+
if code != 0:
|
|
29
|
+
return False, f"Failed to install requirements: {err}"
|
|
30
|
+
|
|
31
|
+
return True, "Python virtual environment and requirements configured."
|
|
32
|
+
|
|
33
|
+
def setup_node_environment(target_dir: Path) -> Tuple[bool, str]:
|
|
34
|
+
"""Detect package manager and install node modules."""
|
|
35
|
+
target_dir = Path(target_dir)
|
|
36
|
+
pkg_json = target_dir / "package.json"
|
|
37
|
+
if not pkg_json.exists():
|
|
38
|
+
return True, "No package.json found; skipping Node dependencies."
|
|
39
|
+
|
|
40
|
+
pm = detect_node_package_manager()
|
|
41
|
+
pm_bin = which_tool(pm)
|
|
42
|
+
if not pm_bin:
|
|
43
|
+
return False, f"No Node.js package manager found in PATH (tried bun, pnpm, yarn, npm)."
|
|
44
|
+
|
|
45
|
+
code, out, err = run_command([pm, "install"], cwd=target_dir)
|
|
46
|
+
if code != 0:
|
|
47
|
+
return False, f"Failed to install node modules via {pm}: {err}"
|
|
48
|
+
|
|
49
|
+
return True, f"Installed node modules via {pm}."
|
|
50
|
+
|
|
51
|
+
def setup_dotenv_file(target_dir: Path) -> bool:
|
|
52
|
+
"""Copy .env.example to .env if .env doesn't exist yet."""
|
|
53
|
+
target_dir = Path(target_dir)
|
|
54
|
+
env_example = target_dir / ".env.example"
|
|
55
|
+
env_file = target_dir / ".env"
|
|
56
|
+
if env_example.exists() and not env_file.exists():
|
|
57
|
+
shutil.copy2(env_example, env_file)
|
|
58
|
+
return True
|
|
59
|
+
return False
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from typing import Optional
|
|
3
|
+
from ..utils.system import detect_git, run_command
|
|
4
|
+
|
|
5
|
+
def setup_git_repository(target_dir: Path, has_python: bool, has_node: bool) -> bool:
|
|
6
|
+
"""Initialize git repository and write stack-tailored .gitignore."""
|
|
7
|
+
target_dir = Path(target_dir)
|
|
8
|
+
|
|
9
|
+
gitignore_lines = [
|
|
10
|
+
"# General & OS",
|
|
11
|
+
".DS_Store",
|
|
12
|
+
"Thumbs.db",
|
|
13
|
+
"*.log",
|
|
14
|
+
".env",
|
|
15
|
+
".env.local",
|
|
16
|
+
".env.*.local",
|
|
17
|
+
"",
|
|
18
|
+
"# Editor & IDE",
|
|
19
|
+
".idea/",
|
|
20
|
+
"*.suo",
|
|
21
|
+
"*.ntvs*",
|
|
22
|
+
"*.njsproj",
|
|
23
|
+
"*.sln",
|
|
24
|
+
"*.sw?",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
if has_node:
|
|
28
|
+
gitignore_lines.extend([
|
|
29
|
+
"",
|
|
30
|
+
"# Node & Frontend",
|
|
31
|
+
"node_modules/",
|
|
32
|
+
"npm-debug.log*",
|
|
33
|
+
"yarn-debug.log*",
|
|
34
|
+
"yarn-error.log*",
|
|
35
|
+
"pnpm-debug.log*",
|
|
36
|
+
"dist/",
|
|
37
|
+
"build/",
|
|
38
|
+
".next/",
|
|
39
|
+
"out/",
|
|
40
|
+
".expo/",
|
|
41
|
+
"web-build/",
|
|
42
|
+
".turbo/",
|
|
43
|
+
])
|
|
44
|
+
|
|
45
|
+
if has_python:
|
|
46
|
+
gitignore_lines.extend([
|
|
47
|
+
"",
|
|
48
|
+
"# Python",
|
|
49
|
+
".venv/",
|
|
50
|
+
"env/",
|
|
51
|
+
"venv/",
|
|
52
|
+
"__pycache__/",
|
|
53
|
+
"*.py[cod]",
|
|
54
|
+
"*$py.class",
|
|
55
|
+
".pytest_cache/",
|
|
56
|
+
".coverage",
|
|
57
|
+
"htmlcov/",
|
|
58
|
+
"*.egg-info/",
|
|
59
|
+
"dist/",
|
|
60
|
+
"build/",
|
|
61
|
+
])
|
|
62
|
+
|
|
63
|
+
gitignore_path = target_dir / ".gitignore"
|
|
64
|
+
gitignore_path.write_text("\n".join(gitignore_lines) + "\n", encoding="utf-8")
|
|
65
|
+
|
|
66
|
+
if detect_git():
|
|
67
|
+
exit_code, _, _ = run_command(["git", "init"], cwd=target_dir)
|
|
68
|
+
return exit_code == 0
|
|
69
|
+
return False
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import shutil
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
def generate_prd_template(
|
|
6
|
+
target_dir: Path,
|
|
7
|
+
project_name: str,
|
|
8
|
+
overview: str = "",
|
|
9
|
+
target_users: str = "",
|
|
10
|
+
core_features: str = "",
|
|
11
|
+
) -> Path:
|
|
12
|
+
"""Generate a structured, professional PRD.md."""
|
|
13
|
+
target_dir = Path(target_dir)
|
|
14
|
+
file_path = target_dir / "PRD.md"
|
|
15
|
+
|
|
16
|
+
ov = overview.strip() or f"High-level vision and objectives for {project_name}."
|
|
17
|
+
users = target_users.strip() or "Primary target users and stakeholders."
|
|
18
|
+
features = core_features.strip() or "- Core Feature 1\n- Core Feature 2\n- Core Feature 3"
|
|
19
|
+
|
|
20
|
+
content = f"""# Product Requirements Document (PRD): {project_name}
|
|
21
|
+
|
|
22
|
+
**Status**: Draft / In Progress
|
|
23
|
+
**Author**: Aayush
|
|
24
|
+
**Last Updated**: Auto-generated by Aayush's DevKit
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Executive Summary & Problem Statement
|
|
29
|
+
### Overview
|
|
30
|
+
{ov}
|
|
31
|
+
|
|
32
|
+
### The Problem
|
|
33
|
+
- Clearly define the pain points this project addresses.
|
|
34
|
+
- What friction exists in current alternatives?
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 2. Target Audience & Personas
|
|
39
|
+
### Target Users
|
|
40
|
+
{users}
|
|
41
|
+
|
|
42
|
+
### Key User Scenarios
|
|
43
|
+
1. **Scenario A**: Primary day-to-day workflow.
|
|
44
|
+
2. **Scenario B**: Edge-case or administrator workflow.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 3. Core Functional Requirements (MVP)
|
|
49
|
+
{features}
|
|
50
|
+
|
|
51
|
+
### Requirements Breakdown
|
|
52
|
+
| ID | Feature | Priority | Description | Acceptance Criteria |
|
|
53
|
+
|---|---|---|---|---|
|
|
54
|
+
| F-01 | Initial Scaffolding | P0 | Project bootstraps cleanly with zero errors | Commands run cleanly |
|
|
55
|
+
| F-02 | Core Logic | P0 | Core business logic implementation | Tests pass |
|
|
56
|
+
| F-03 | Polish & Verification | P1 | UI / API polishing and edge cases | Verified manually & automated |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 4. Technical & Non-Functional Requirements
|
|
61
|
+
- **Performance**: Instantaneous responses, lean bundle size.
|
|
62
|
+
- **Reliability**: Graceful error handling and robust tests.
|
|
63
|
+
- **Security**: No hardcoded secrets; use environment variables (`.env`).
|
|
64
|
+
- **Maintainability**: Clear folder hierarchy, clean type definitions.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 5. Milestones & Success Metrics
|
|
69
|
+
- [ ] **Milestone 1**: Scaffolding & environment verified.
|
|
70
|
+
- [ ] **Milestone 2**: Core MVP functionality completed.
|
|
71
|
+
- [ ] **Milestone 3**: Automated test suite passing.
|
|
72
|
+
- [ ] **Milestone 4**: Final documentation and deployment.
|
|
73
|
+
"""
|
|
74
|
+
file_path.write_text(content, encoding="utf-8")
|
|
75
|
+
return file_path
|
|
76
|
+
|
|
77
|
+
def import_prd_file(target_dir: Path, source_path: Path) -> Optional[Path]:
|
|
78
|
+
"""Copy an existing PRD file from source_path to target_dir/PRD.md."""
|
|
79
|
+
target_dir = Path(target_dir)
|
|
80
|
+
source_path = Path(source_path).expanduser().resolve()
|
|
81
|
+
if not source_path.exists() or not source_path.is_file():
|
|
82
|
+
return None
|
|
83
|
+
dest_path = target_dir / "PRD.md"
|
|
84
|
+
shutil.copy2(source_path, dest_path)
|
|
85
|
+
return dest_path
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Dict, Any
|
|
4
|
+
|
|
5
|
+
def setup_vscode_config(target_dir: Path, has_python: bool, has_node: bool) -> Path:
|
|
6
|
+
"""Write customized .vscode/settings.json and extensions.json."""
|
|
7
|
+
target_dir = Path(target_dir)
|
|
8
|
+
vscode_dir = target_dir / ".vscode"
|
|
9
|
+
vscode_dir.mkdir(parents=True, exist_ok=True)
|
|
10
|
+
|
|
11
|
+
settings: Dict[str, Any] = {
|
|
12
|
+
"editor.formatOnSave": True,
|
|
13
|
+
"editor.tabSize": 2,
|
|
14
|
+
"files.eol": "\n",
|
|
15
|
+
"files.trimTrailingWhitespace": True,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
extensions = [
|
|
19
|
+
"eamodio.gitlens",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
if has_python:
|
|
23
|
+
settings["python.defaultInterpreterPath"] = "${workspaceFolder}/.venv/Scripts/python.exe"
|
|
24
|
+
settings["python.testing.pytestEnabled"] = True
|
|
25
|
+
settings["python.testing.pytestArgs"] = ["tests"]
|
|
26
|
+
extensions.extend(["ms-python.python", "ms-python.vscode-pylance", "charliermarsh.ruff"])
|
|
27
|
+
|
|
28
|
+
if has_node:
|
|
29
|
+
settings["editor.defaultFormatter"] = "esbenp.prettier-vscode"
|
|
30
|
+
extensions.extend(["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "bradlc.vscode-tailwindcss"])
|
|
31
|
+
|
|
32
|
+
settings_file = vscode_dir / "settings.json"
|
|
33
|
+
settings_file.write_text(json.dumps(settings, indent=2), encoding="utf-8")
|
|
34
|
+
|
|
35
|
+
extensions_file = vscode_dir / "extensions.json"
|
|
36
|
+
extensions_file.write_text(json.dumps({"recommendations": extensions}, indent=2), encoding="utf-8")
|
|
37
|
+
|
|
38
|
+
return vscode_dir
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from .catalog import AVAILABLE_SKILLS, SKILL_BUNDLES, get_recommended_skills_for_template, SkillInfo
|
|
2
|
+
from .installer import install_skills
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
"AVAILABLE_SKILLS",
|
|
6
|
+
"SKILL_BUNDLES",
|
|
7
|
+
"get_recommended_skills_for_template",
|
|
8
|
+
"SkillInfo",
|
|
9
|
+
"install_skills",
|
|
10
|
+
]
|
devkit/skills/catalog.py
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import re
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import List, Dict, Optional
|
|
6
|
+
from ..config import EMBEDDED_SKILLS_DIR
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class SkillInfo:
|
|
10
|
+
id: str
|
|
11
|
+
name: str
|
|
12
|
+
description: str
|
|
13
|
+
category: str
|
|
14
|
+
source: str = "embedded"
|
|
15
|
+
source_type: str = "local"
|
|
16
|
+
recommended_for: Optional[List[str]] = None
|
|
17
|
+
|
|
18
|
+
def _categorize_skill(skill_id: str) -> str:
|
|
19
|
+
"""Categorize skills by their domain."""
|
|
20
|
+
if any(k in skill_id for k in ["animat", "motion"]):
|
|
21
|
+
return "Animations & Motion"
|
|
22
|
+
elif any(k in skill_id for k in ["taste", "impeccable", "design", "ui-ux", "styling", "apple-design"]):
|
|
23
|
+
return "Design & UI/UX"
|
|
24
|
+
elif "vercel" in skill_id or "deploy" in skill_id or "web-design" in skill_id:
|
|
25
|
+
return "Vercel & Next.js"
|
|
26
|
+
elif "ponytail" in skill_id:
|
|
27
|
+
return "Code Quality (Ponytail)"
|
|
28
|
+
elif any(k in skill_id for k in ["mobile", "native", "swift"]):
|
|
29
|
+
return "Mobile & Native"
|
|
30
|
+
elif any(k in skill_id for k in ["gemini", "ai", "agent"]):
|
|
31
|
+
return "AI & Agentic"
|
|
32
|
+
elif any(k in skill_id for k in ["devtools", "guidance"]):
|
|
33
|
+
return "Browser & Web Standards"
|
|
34
|
+
return "Developer Tools"
|
|
35
|
+
|
|
36
|
+
def _extract_skill_meta(skill_id: str, skill_dir: Path) -> tuple[str, str]:
|
|
37
|
+
"""Extract name and description from SKILL.md frontmatter."""
|
|
38
|
+
skill_md = skill_dir / "SKILL.md"
|
|
39
|
+
name = skill_id.replace("-", " ").title()
|
|
40
|
+
desc = f"Curated skill for {skill_id}."
|
|
41
|
+
|
|
42
|
+
if skill_md.exists():
|
|
43
|
+
try:
|
|
44
|
+
content = skill_md.read_text(encoding="utf-8", errors="ignore")
|
|
45
|
+
# Match frontmatter YAML block
|
|
46
|
+
fm_match = re.search(r"^---\s*\n(.*?)\n---", content, re.DOTALL)
|
|
47
|
+
if fm_match:
|
|
48
|
+
fm_text = fm_match.group(1)
|
|
49
|
+
for line in fm_text.splitlines():
|
|
50
|
+
if line.startswith("name:"):
|
|
51
|
+
name = line.split(":", 1)[1].strip().strip('"').strip("'")
|
|
52
|
+
elif line.startswith("description:"):
|
|
53
|
+
desc = line.split(":", 1)[1].strip().strip('"').strip("'")
|
|
54
|
+
# Handle multiline YAML folded scalar >-
|
|
55
|
+
if desc in [">-", "|-", ">", "|"]:
|
|
56
|
+
# Look at next lines
|
|
57
|
+
lines = fm_text.splitlines()
|
|
58
|
+
idx = lines.index(line)
|
|
59
|
+
collected = []
|
|
60
|
+
for nxt in lines[idx + 1:]:
|
|
61
|
+
if nxt.startswith(" "):
|
|
62
|
+
collected.append(nxt.strip())
|
|
63
|
+
else:
|
|
64
|
+
break
|
|
65
|
+
if collected:
|
|
66
|
+
desc = " ".join(collected)
|
|
67
|
+
except Exception:
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
# Truncate overly long descriptions for display
|
|
71
|
+
if len(desc) > 160:
|
|
72
|
+
desc = desc[:157] + "..."
|
|
73
|
+
|
|
74
|
+
return name, desc
|
|
75
|
+
|
|
76
|
+
def load_all_skills() -> Dict[str, SkillInfo]:
|
|
77
|
+
"""Dynamically discover and build the full catalog of embedded skills."""
|
|
78
|
+
skills: Dict[str, SkillInfo] = {}
|
|
79
|
+
|
|
80
|
+
lock_file = EMBEDDED_SKILLS_DIR / "skills-lock.json"
|
|
81
|
+
lock_data: Dict = {}
|
|
82
|
+
if lock_file.exists():
|
|
83
|
+
try:
|
|
84
|
+
with open(lock_file, "r", encoding="utf-8") as f:
|
|
85
|
+
lock_data = json.load(f).get("skills", {})
|
|
86
|
+
except Exception:
|
|
87
|
+
lock_data = {}
|
|
88
|
+
|
|
89
|
+
if EMBEDDED_SKILLS_DIR.exists():
|
|
90
|
+
for item in sorted(EMBEDDED_SKILLS_DIR.iterdir()):
|
|
91
|
+
if item.is_dir():
|
|
92
|
+
sid = item.name
|
|
93
|
+
name, desc = _extract_skill_meta(sid, item)
|
|
94
|
+
cat = _categorize_skill(sid)
|
|
95
|
+
|
|
96
|
+
lock_entry = lock_data.get(sid, {})
|
|
97
|
+
source = lock_entry.get("source", f"embedded/{sid}")
|
|
98
|
+
source_type = lock_entry.get("sourceType", "builtin")
|
|
99
|
+
|
|
100
|
+
# Setup recommendation tags
|
|
101
|
+
recs = ["all"] if "ponytail" in sid else []
|
|
102
|
+
if sid in ["impeccable", "design-taste-frontend", "ui-ux-pro-max", "emil-design-eng", "animate"]:
|
|
103
|
+
recs.extend(["nextjs", "vite_react", "saas_fullstack", "design_system", "content_site", "expo_mobile", "expo_fullstack"])
|
|
104
|
+
if "vercel" in sid or sid in ["web-design-guidelines"]:
|
|
105
|
+
recs.extend(["nextjs", "saas_fullstack", "design_system", "content_site"])
|
|
106
|
+
if sid in ["modern-web-guidance", "chrome-devtools"]:
|
|
107
|
+
recs.extend(["nextjs", "vite_react", "saas_fullstack", "content_site", "design_system"])
|
|
108
|
+
if "gemini" in sid:
|
|
109
|
+
recs.extend(["all"])
|
|
110
|
+
if sid in ["mobile-native", "animate-expo", "vercel-react-native-skills"]:
|
|
111
|
+
recs.extend(["expo_mobile", "expo_fullstack"])
|
|
112
|
+
|
|
113
|
+
skills[sid] = SkillInfo(
|
|
114
|
+
id=sid,
|
|
115
|
+
name=name,
|
|
116
|
+
description=desc,
|
|
117
|
+
category=cat,
|
|
118
|
+
source=source,
|
|
119
|
+
source_type=source_type,
|
|
120
|
+
recommended_for=recs,
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
return skills
|
|
124
|
+
|
|
125
|
+
AVAILABLE_SKILLS: Dict[str, SkillInfo] = load_all_skills()
|
|
126
|
+
|
|
127
|
+
SKILL_BUNDLES: Dict[str, Dict] = {
|
|
128
|
+
"ponytail_suite": {
|
|
129
|
+
"title": "Ponytail Suite (Lazy Senior Dev Mode)",
|
|
130
|
+
"skills": ["ponytail", "ponytail-audit", "ponytail-review", "ponytail-debt"],
|
|
131
|
+
"description": "Essential code quality, minimal architecture, and anti-bloat review suite.",
|
|
132
|
+
},
|
|
133
|
+
"design_craft_suite": {
|
|
134
|
+
"title": "Design Craftsmanship & Aesthetics Suite",
|
|
135
|
+
"skills": ["impeccable", "design-taste-frontend", "ui-ux-pro-max", "emil-design-eng", "animate"],
|
|
136
|
+
"description": "World-class UI design, anti-generic art direction, and micro-interactions.",
|
|
137
|
+
},
|
|
138
|
+
"vercel_fullstack_suite": {
|
|
139
|
+
"title": "Vercel & Next.js Performance Suite",
|
|
140
|
+
"skills": ["vercel-react-best-practices", "vercel-composition-patterns", "vercel-optimize", "deploy-to-vercel"],
|
|
141
|
+
"description": "Production Next.js App Router patterns, RSC, and deployment optimization.",
|
|
142
|
+
},
|
|
143
|
+
"mobile_native_suite": {
|
|
144
|
+
"title": "Mobile Native & Fluid Interaction Suite",
|
|
145
|
+
"skills": ["animate-expo", "mobile-native", "vercel-react-native-skills", "apple-design"],
|
|
146
|
+
"description": "Touch physics, haptics, responsive gestures, and native performance.",
|
|
147
|
+
},
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
def get_recommended_skills_for_template(template_id: str) -> List[str]:
|
|
151
|
+
"""Get the list of skill IDs recommended for a particular template."""
|
|
152
|
+
recommended = []
|
|
153
|
+
for skill_id, skill in AVAILABLE_SKILLS.items():
|
|
154
|
+
if skill.recommended_for and ("all" in skill.recommended_for or template_id in skill.recommended_for):
|
|
155
|
+
recommended.append(skill_id)
|
|
156
|
+
return recommended
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ponytail
|
|
3
|
+
description: >
|
|
4
|
+
Lazy senior dev mode: the smallest change that fully solves the task, and a
|
|
5
|
+
reply a busy human understands in one read. Use on any coding task (writing,
|
|
6
|
+
fixing, refactoring, reviewing, choosing dependencies) and when the user says
|
|
7
|
+
"ponytail", "be lazy", "simplest solution", "yagni", or complains about
|
|
8
|
+
over-engineering or bloat. Levels: lite, full (default), ultra.
|
|
9
|
+
argument-hint: "[lite|full|ultra|off]"
|
|
10
|
+
license: MIT
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Ponytail
|
|
14
|
+
|
|
15
|
+
You are a lazy senior developer. The best code is the code never written. You solve the whole problem with the least new code. End your reply with one or two lines: what you skipped or did not check, and any risk the user must know.
|
|
16
|
+
|
|
17
|
+
Active for the whole session until the user says "stop ponytail" or "normal mode". Switch level: `/ponytail lite|full|ultra`.
|
|
18
|
+
|
|
19
|
+
## Before you write
|
|
20
|
+
|
|
21
|
+
Read the task and the code it touches. List every place your change must reach: callers, tests, fixtures, config, exports. Check what your change could break for users: data it would destroy or expose, callers that stop working. That is scope. Extra features are not.
|
|
22
|
+
|
|
23
|
+
## The smallest complete change
|
|
24
|
+
|
|
25
|
+
Take the first option that fully works:
|
|
26
|
+
|
|
27
|
+
1. Does it need to exist? Skip features, options and flexibility nobody asked for, and name them in one line. A vague request ("build me X") gets the smallest version that does the core job.
|
|
28
|
+
2. Already in this codebase (a helper, component, service, pattern)? Use it the way the surrounding code does.
|
|
29
|
+
3. Standard library or a platform feature? Use it, unless the project has its own. A house component beats a native widget.
|
|
30
|
+
4. An installed dependency? Use it. Never add a dependency for a few lines.
|
|
31
|
+
5. Can it be one line a reader gets at a glance? One line.
|
|
32
|
+
6. Otherwise: the minimum code that works.
|
|
33
|
+
|
|
34
|
+
- Be lazy about the solution, never about the change itself: finish every part the task needs, including the callers, tests and fixtures your change breaks.
|
|
35
|
+
- No abstraction, wrapper, type conversion, option, config, boilerplate or "for later" code nobody asked for. Keep values in the form the platform already gives you. Deletion beats addition. Keep the structure the codebase already has: its layers, interfaces and conventions.
|
|
36
|
+
- The shortest working diff wins, once you know everything it must touch. A one-liner that needs decoding is not short.
|
|
37
|
+
- Comment only the why the code cannot show, in one line.
|
|
38
|
+
- Bug fix: before you edit, grep every caller of the function you touch, then fix the root cause once in the shared code.
|
|
39
|
+
- Code you move or merge keeps its error handling and validation.
|
|
40
|
+
- Between options of equal size, take the one that is correct on edge cases.
|
|
41
|
+
- Lazy code without its check is unfinished: new non-trivial logic (a branch, a loop, a parser, money or security, or a whole new script or app) leaves one small test or an assert-based self-check. Trivial changes need none.
|
|
42
|
+
- A shortcut with a known limit gets a code comment in this form: `shortcut: <the limit>, <when to upgrade>`.
|
|
43
|
+
|
|
44
|
+
Never cut: validation at trust boundaries, error handling that prevents data loss, security, accessibility, the calibration real hardware needs, anything the user asked for.
|
|
45
|
+
|
|
46
|
+
## Levels
|
|
47
|
+
|
|
48
|
+
| Level | Behavior |
|
|
49
|
+
|-------|----------|
|
|
50
|
+
| **lite** | Build what was asked. Name the smaller option in one line and let the user pick. |
|
|
51
|
+
| **full** | The rules above. Default. |
|
|
52
|
+
| **ultra** | Also question the request: before building, push back on any part the need does not justify. |
|