@trieungoctam/vibekit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/agents/debugger.md +158 -0
- package/agents/docs-manager.md +220 -0
- package/agents/planner.md +129 -0
- package/agents/researcher.md +58 -0
- package/agents/reviewer.md +152 -0
- package/agents/tester.md +126 -0
- package/bin/vibekit.js +18 -0
- package/hooks/lib/ck-config-utils.cjs +831 -0
- package/hooks/lib/colors.cjs +95 -0
- package/hooks/lib/config-counter.cjs +103 -0
- package/hooks/lib/context-builder.cjs +616 -0
- package/hooks/lib/git-info-cache.cjs +143 -0
- package/hooks/lib/hook-logger.cjs +92 -0
- package/hooks/lib/privacy-checker.cjs +297 -0
- package/hooks/lib/project-detector.cjs +474 -0
- package/hooks/lib/scout-checker.cjs +263 -0
- package/hooks/lib/transcript-parser.cjs +181 -0
- package/hooks/post-edit-simplify-reminder.cjs +156 -0
- package/hooks/privacy-block.cjs +166 -0
- package/hooks/scout-block.cjs +147 -0
- package/hooks/session-init.cjs +360 -0
- package/package.json +41 -0
- package/rules/development-rules.md +52 -0
- package/rules/documentation-management.md +121 -0
- package/rules/orchestration-protocol.md +43 -0
- package/rules/primary-workflow.md +57 -0
- package/rules/team-coordination-rules.md +90 -0
- package/skills/ai/agent-browser/SKILL.md +294 -0
- package/skills/ai/agent-browser/references/.gitkeep +0 -0
- package/skills/ai/agent-browser/references/agent-browser-vs-chrome-devtools.md +112 -0
- package/skills/ai/agent-browser/references/browserbase-cloud-setup.md +161 -0
- package/skills/ai/ai-artist/SKILL.md +122 -0
- package/skills/ai/ai-artist/data/awesome-prompts.csv +3592 -0
- package/skills/ai/ai-artist/data/lighting.csv +19 -0
- package/skills/ai/ai-artist/data/nano-banana-templates.csv +17 -0
- package/skills/ai/ai-artist/data/platforms.csv +11 -0
- package/skills/ai/ai-artist/data/styles.csv +26 -0
- package/skills/ai/ai-artist/data/techniques.csv +19 -0
- package/skills/ai/ai-artist/data/use-cases.csv +16 -0
- package/skills/ai/ai-artist/references/advanced-techniques.md +184 -0
- package/skills/ai/ai-artist/references/awesome-nano-banana-pro-prompts.md +8575 -0
- package/skills/ai/ai-artist/references/domain-code.md +66 -0
- package/skills/ai/ai-artist/references/domain-data.md +72 -0
- package/skills/ai/ai-artist/references/domain-marketing.md +66 -0
- package/skills/ai/ai-artist/references/domain-patterns.md +33 -0
- package/skills/ai/ai-artist/references/domain-writing.md +68 -0
- package/skills/ai/ai-artist/references/image-prompting.md +141 -0
- package/skills/ai/ai-artist/references/llm-prompting.md +165 -0
- package/skills/ai/ai-artist/references/nano-banana.md +136 -0
- package/skills/ai/ai-artist/references/reasoning-techniques.md +201 -0
- package/skills/ai/ai-artist/references/validation-workflow.md +117 -0
- package/skills/ai/ai-artist/scripts/core.py +197 -0
- package/skills/ai/ai-artist/scripts/extract_prompts.py +102 -0
- package/skills/ai/ai-artist/scripts/generate.py +370 -0
- package/skills/ai/ai-artist/scripts/search.py +147 -0
- package/skills/ai/ai-multimodal/.env.example +204 -0
- package/skills/ai/ai-multimodal/SKILL.md +110 -0
- package/skills/ai/ai-multimodal/references/audio-processing.md +387 -0
- package/skills/ai/ai-multimodal/references/image-generation.md +939 -0
- package/skills/ai/ai-multimodal/references/music-generation.md +311 -0
- package/skills/ai/ai-multimodal/references/video-analysis.md +515 -0
- package/skills/ai/ai-multimodal/references/video-generation.md +457 -0
- package/skills/ai/ai-multimodal/references/vision-understanding.md +492 -0
- package/skills/ai/ai-multimodal/scripts/.coverage +0 -0
- package/skills/ai/ai-multimodal/scripts/check_setup.py +315 -0
- package/skills/ai/ai-multimodal/scripts/document_converter.py +395 -0
- package/skills/ai/ai-multimodal/scripts/gemini_batch_process.py +1185 -0
- package/skills/ai/ai-multimodal/scripts/media_optimizer.py +506 -0
- package/skills/ai/ai-multimodal/scripts/requirements.txt +26 -0
- package/skills/ai/ai-multimodal/scripts/tests/.coverage +0 -0
- package/skills/ai/ai-multimodal/scripts/tests/requirements.txt +20 -0
- package/skills/ai/ai-multimodal/scripts/tests/test_document_converter.py +74 -0
- package/skills/ai/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -0
- package/skills/ai/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -0
- package/skills/ai/mcp-management/README.md +219 -0
- package/skills/ai/mcp-management/SKILL.md +210 -0
- package/skills/ai/mcp-management/assets/tools.json +3146 -0
- package/skills/ai/mcp-management/references/configuration.md +114 -0
- package/skills/ai/mcp-management/references/gemini-cli-integration.md +221 -0
- package/skills/ai/mcp-management/references/mcp-protocol.md +116 -0
- package/skills/ai/mcp-management/scripts/.env.example +10 -0
- package/skills/ai/mcp-management/scripts/cli.ts +195 -0
- package/skills/ai/mcp-management/scripts/dist/analyze-tools.js +70 -0
- package/skills/ai/mcp-management/scripts/dist/cli.js +160 -0
- package/skills/ai/mcp-management/scripts/dist/mcp-client.js +183 -0
- package/skills/ai/mcp-management/scripts/mcp-client.ts +230 -0
- package/skills/ai/mcp-management/scripts/package.json +20 -0
- package/skills/ai/mcp-management/scripts/tsconfig.json +15 -0
- package/skills/core/brainstorm/SKILL.md +164 -0
- package/skills/core/brainstorm/scripts/frame-template.html +214 -0
- package/skills/core/brainstorm/scripts/helper.js +88 -0
- package/skills/core/brainstorm/scripts/server.cjs +338 -0
- package/skills/core/brainstorm/scripts/start-server.sh +153 -0
- package/skills/core/brainstorm/scripts/stop-server.sh +55 -0
- package/skills/core/brainstorm/spec-document-reviewer-prompt.md +49 -0
- package/skills/core/brainstorm/visual-companion.md +286 -0
- package/skills/core/code-review/SKILL.md +147 -0
- package/skills/core/code-review/references/code-review-reception.md +113 -0
- package/skills/core/code-review/references/codebase-scan-workflow.md +29 -0
- package/skills/core/code-review/references/edge-case-scouting.md +119 -0
- package/skills/core/code-review/references/parallel-review-workflow.md +69 -0
- package/skills/core/code-review/references/requesting-code-review.md +116 -0
- package/skills/core/code-review/references/task-management-reviews.md +140 -0
- package/skills/core/code-review/references/verification-before-completion.md +139 -0
- package/skills/core/cook/README.md +86 -0
- package/skills/core/cook/SKILL.md +113 -0
- package/skills/core/cook/references/intent-detection.md +101 -0
- package/skills/core/cook/references/review-cycle.md +75 -0
- package/skills/core/cook/references/subagent-patterns.md +75 -0
- package/skills/core/cook/references/workflow-steps.md +172 -0
- package/skills/core/debug/SKILL.md +121 -0
- package/skills/core/debug/references/defense-in-depth.md +124 -0
- package/skills/core/debug/references/frontend-verification.md +103 -0
- package/skills/core/debug/references/investigation-methodology.md +101 -0
- package/skills/core/debug/references/log-and-ci-analysis.md +97 -0
- package/skills/core/debug/references/performance-diagnostics.md +113 -0
- package/skills/core/debug/references/reporting-standards.md +122 -0
- package/skills/core/debug/references/root-cause-tracing.md +122 -0
- package/skills/core/debug/references/systematic-debugging.md +102 -0
- package/skills/core/debug/references/task-management-debugging.md +155 -0
- package/skills/core/debug/references/verification.md +123 -0
- package/skills/core/debug/scripts/find-polluter.sh +63 -0
- package/skills/core/debug/scripts/find-polluter.test.md +102 -0
- package/skills/core/execute/SKILL.md +70 -0
- package/skills/core/fix/SKILL.md +111 -0
- package/skills/core/fix/references/complexity-assessment.md +72 -0
- package/skills/core/fix/references/mode-selection.md +46 -0
- package/skills/core/fix/references/parallel-exploration.md +100 -0
- package/skills/core/fix/references/review-cycle.md +77 -0
- package/skills/core/fix/references/skill-activation-matrix.md +78 -0
- package/skills/core/fix/references/task-orchestration.md +103 -0
- package/skills/core/fix/references/workflow-ci.md +28 -0
- package/skills/core/fix/references/workflow-deep.md +122 -0
- package/skills/core/fix/references/workflow-logs.md +72 -0
- package/skills/core/fix/references/workflow-quick.md +59 -0
- package/skills/core/fix/references/workflow-standard.md +111 -0
- package/skills/core/fix/references/workflow-test.md +75 -0
- package/skills/core/fix/references/workflow-types.md +33 -0
- package/skills/core/fix/references/workflow-ui.md +75 -0
- package/skills/core/plan/SKILL.md +145 -0
- package/skills/core/plan/plan-document-reviewer-prompt.md +49 -0
- package/skills/core/subagent-dev/SKILL.md +277 -0
- package/skills/core/subagent-dev/code-quality-reviewer-prompt.md +26 -0
- package/skills/core/subagent-dev/implementer-prompt.md +113 -0
- package/skills/core/subagent-dev/spec-reviewer-prompt.md +61 -0
- package/skills/core/tdd/SKILL.md +371 -0
- package/skills/core/tdd/testing-anti-patterns.md +299 -0
- package/skills/core/test/SKILL.md +109 -0
- package/skills/core/test/references/report-format.md +58 -0
- package/skills/core/test/references/test-execution-workflow.md +103 -0
- package/skills/core/test/references/ui-testing-workflow.md +65 -0
- package/skills/core/verify/SKILL.md +139 -0
- package/skills/dev/backend-dev/SKILL.md +96 -0
- package/skills/dev/backend-dev/references/backend-api-design.md +495 -0
- package/skills/dev/backend-dev/references/backend-architecture.md +454 -0
- package/skills/dev/backend-dev/references/backend-authentication.md +338 -0
- package/skills/dev/backend-dev/references/backend-code-quality.md +659 -0
- package/skills/dev/backend-dev/references/backend-debugging.md +904 -0
- package/skills/dev/backend-dev/references/backend-devops.md +494 -0
- package/skills/dev/backend-dev/references/backend-mindset.md +387 -0
- package/skills/dev/backend-dev/references/backend-performance.md +397 -0
- package/skills/dev/backend-dev/references/backend-security.md +290 -0
- package/skills/dev/backend-dev/references/backend-technologies.md +256 -0
- package/skills/dev/backend-dev/references/backend-testing.md +429 -0
- package/skills/dev/context-engineering/SKILL.md +108 -0
- package/skills/dev/context-engineering/references/context-compression.md +84 -0
- package/skills/dev/context-engineering/references/context-degradation.md +93 -0
- package/skills/dev/context-engineering/references/context-fundamentals.md +75 -0
- package/skills/dev/context-engineering/references/context-optimization.md +82 -0
- package/skills/dev/context-engineering/references/evaluation.md +89 -0
- package/skills/dev/context-engineering/references/memory-systems.md +88 -0
- package/skills/dev/context-engineering/references/multi-agent-patterns.md +90 -0
- package/skills/dev/context-engineering/references/project-development.md +97 -0
- package/skills/dev/context-engineering/references/runtime-awareness.md +202 -0
- package/skills/dev/context-engineering/references/tool-design.md +86 -0
- package/skills/dev/context-engineering/scripts/compression_evaluator.py +349 -0
- package/skills/dev/context-engineering/scripts/context_analyzer.py +317 -0
- package/skills/dev/context-engineering/scripts/tests/test_edge_cases.py +246 -0
- package/skills/dev/databases/SKILL.md +84 -0
- package/skills/dev/databases/analytics.md +198 -0
- package/skills/dev/databases/db-design.md +188 -0
- package/skills/dev/databases/incremental-etl.md +213 -0
- package/skills/dev/databases/references/mongodb-aggregation.md +447 -0
- package/skills/dev/databases/references/mongodb-atlas.md +465 -0
- package/skills/dev/databases/references/mongodb-crud.md +408 -0
- package/skills/dev/databases/references/mongodb-indexing.md +442 -0
- package/skills/dev/databases/references/postgresql-administration.md +594 -0
- package/skills/dev/databases/references/postgresql-performance.md +527 -0
- package/skills/dev/databases/references/postgresql-psql-cli.md +467 -0
- package/skills/dev/databases/references/postgresql-queries.md +475 -0
- package/skills/dev/databases/scripts/.coverage +0 -0
- package/skills/dev/databases/scripts/db_backup.py +502 -0
- package/skills/dev/databases/scripts/db_migrate.py +426 -0
- package/skills/dev/databases/scripts/db_performance_check.py +457 -0
- package/skills/dev/databases/scripts/requirements.txt +20 -0
- package/skills/dev/databases/scripts/tests/coverage-db.json +1 -0
- package/skills/dev/databases/scripts/tests/requirements.txt +4 -0
- package/skills/dev/databases/scripts/tests/test_db_backup.py +340 -0
- package/skills/dev/databases/scripts/tests/test_db_migrate.py +277 -0
- package/skills/dev/databases/scripts/tests/test_db_performance_check.py +370 -0
- package/skills/dev/databases/stacks/bigquery.md +231 -0
- package/skills/dev/databases/stacks/d1_cloudflare.md +137 -0
- package/skills/dev/databases/stacks/mysql.md +216 -0
- package/skills/dev/databases/stacks/postgres.md +235 -0
- package/skills/dev/databases/stacks/sqlite.md +244 -0
- package/skills/dev/databases/transactional.md +176 -0
- package/skills/dev/devops/.env.example +76 -0
- package/skills/dev/devops/SKILL.md +97 -0
- package/skills/dev/devops/references/browser-rendering.md +305 -0
- package/skills/dev/devops/references/cloudflare-d1-kv.md +123 -0
- package/skills/dev/devops/references/cloudflare-platform.md +271 -0
- package/skills/dev/devops/references/cloudflare-r2-storage.md +280 -0
- package/skills/dev/devops/references/cloudflare-workers-advanced.md +312 -0
- package/skills/dev/devops/references/cloudflare-workers-apis.md +309 -0
- package/skills/dev/devops/references/cloudflare-workers-basics.md +418 -0
- package/skills/dev/devops/references/docker-basics.md +297 -0
- package/skills/dev/devops/references/docker-compose.md +292 -0
- package/skills/dev/devops/references/gcloud-platform.md +297 -0
- package/skills/dev/devops/references/gcloud-services.md +304 -0
- package/skills/dev/devops/references/kubernetes-basics.md +99 -0
- package/skills/dev/devops/references/kubernetes-helm-advanced.md +75 -0
- package/skills/dev/devops/references/kubernetes-helm.md +81 -0
- package/skills/dev/devops/references/kubernetes-kubectl.md +74 -0
- package/skills/dev/devops/references/kubernetes-security-advanced.md +98 -0
- package/skills/dev/devops/references/kubernetes-security.md +95 -0
- package/skills/dev/devops/references/kubernetes-troubleshooting-advanced.md +74 -0
- package/skills/dev/devops/references/kubernetes-troubleshooting.md +49 -0
- package/skills/dev/devops/references/kubernetes-workflows-advanced.md +75 -0
- package/skills/dev/devops/references/kubernetes-workflows.md +78 -0
- package/skills/dev/devops/scripts/cloudflare_deploy.py +269 -0
- package/skills/dev/devops/scripts/docker_optimize.py +332 -0
- package/skills/dev/devops/scripts/requirements.txt +20 -0
- package/skills/dev/devops/scripts/tests/requirements.txt +3 -0
- package/skills/dev/devops/scripts/tests/test_cloudflare_deploy.py +285 -0
- package/skills/dev/devops/scripts/tests/test_docker_optimize.py +436 -0
- package/skills/dev/frontend-design/SKILL.md +78 -0
- package/skills/dev/frontend-design/references/ai-multimodal-overview.md +165 -0
- package/skills/dev/frontend-design/references/analysis-best-practices.md +80 -0
- package/skills/dev/frontend-design/references/analysis-prompts.md +141 -0
- package/skills/dev/frontend-design/references/analysis-techniques.md +118 -0
- package/skills/dev/frontend-design/references/animejs.md +396 -0
- package/skills/dev/frontend-design/references/asset-generation.md +337 -0
- package/skills/dev/frontend-design/references/design-extraction-overview.md +71 -0
- package/skills/dev/frontend-design/references/extraction-best-practices.md +141 -0
- package/skills/dev/frontend-design/references/extraction-output-templates.md +162 -0
- package/skills/dev/frontend-design/references/extraction-prompts.md +127 -0
- package/skills/dev/frontend-design/references/technical-accessibility.md +119 -0
- package/skills/dev/frontend-design/references/technical-best-practices.md +97 -0
- package/skills/dev/frontend-design/references/technical-optimization.md +44 -0
- package/skills/dev/frontend-design/references/technical-overview.md +90 -0
- package/skills/dev/frontend-design/references/technical-workflows.md +150 -0
- package/skills/dev/frontend-design/references/visual-analysis-overview.md +95 -0
- package/skills/dev/frontend-design/references/workflow-3d.md +102 -0
- package/skills/dev/frontend-design/references/workflow-describe.md +87 -0
- package/skills/dev/frontend-design/references/workflow-immersive.md +87 -0
- package/skills/dev/frontend-design/references/workflow-quick.md +57 -0
- package/skills/dev/frontend-design/references/workflow-screenshot.md +63 -0
- package/skills/dev/frontend-design/references/workflow-video.md +74 -0
- package/skills/dev/frontend-dev/SKILL.md +400 -0
- package/skills/dev/frontend-dev/resources/common-patterns.md +331 -0
- package/skills/dev/frontend-dev/resources/complete-examples.md +872 -0
- package/skills/dev/frontend-dev/resources/component-patterns.md +502 -0
- package/skills/dev/frontend-dev/resources/data-fetching.md +767 -0
- package/skills/dev/frontend-dev/resources/file-organization.md +502 -0
- package/skills/dev/frontend-dev/resources/loading-and-error-states.md +501 -0
- package/skills/dev/frontend-dev/resources/performance.md +406 -0
- package/skills/dev/frontend-dev/resources/routing-guide.md +364 -0
- package/skills/dev/frontend-dev/resources/styling-guide.md +428 -0
- package/skills/dev/frontend-dev/resources/typescript-standards.md +418 -0
- package/skills/dev/git/SKILL.md +114 -0
- package/skills/dev/git/references/branch-management.md +88 -0
- package/skills/dev/git/references/commit-standards.md +46 -0
- package/skills/dev/git/references/gh-cli-guide.md +109 -0
- package/skills/dev/git/references/safety-protocols.md +69 -0
- package/skills/dev/git/references/workflow-commit.md +58 -0
- package/skills/dev/git/references/workflow-merge.md +48 -0
- package/skills/dev/git/references/workflow-pr.md +58 -0
- package/skills/dev/git/references/workflow-push.md +52 -0
- package/skills/dev/git-worktree/SKILL.md +218 -0
- package/skills/utils/ask/SKILL.md +58 -0
- package/skills/utils/bootstrap/SKILL.md +101 -0
- package/skills/utils/bootstrap/references/shared-phases.md +59 -0
- package/skills/utils/bootstrap/references/workflow-auto.md +52 -0
- package/skills/utils/bootstrap/references/workflow-fast.md +50 -0
- package/skills/utils/bootstrap/references/workflow-full.md +60 -0
- package/skills/utils/bootstrap/references/workflow-parallel.md +59 -0
- package/skills/utils/ck-help/SKILL.md +102 -0
- package/skills/utils/ck-help/scripts/ck-help.py +1321 -0
- package/skills/utils/ck-help/scripts/commands_data.yaml +3 -0
- package/skills/utils/ck-help/scripts/skills_data.yaml +593 -0
- package/skills/utils/copywriting/SKILL.md +94 -0
- package/skills/utils/copywriting/references/copy-formulas.md +150 -0
- package/skills/utils/copywriting/references/cta-patterns.md +168 -0
- package/skills/utils/copywriting/references/email-copy.md +193 -0
- package/skills/utils/copywriting/references/headline-templates.md +140 -0
- package/skills/utils/copywriting/references/landing-page-copy.md +175 -0
- package/skills/utils/copywriting/references/power-words.md +189 -0
- package/skills/utils/copywriting/references/social-media-copy.md +222 -0
- package/skills/utils/copywriting/references/workflow-cro.md +83 -0
- package/skills/utils/copywriting/references/workflow-enhance.md +32 -0
- package/skills/utils/copywriting/references/workflow-fast.md +29 -0
- package/skills/utils/copywriting/references/workflow-good.md +39 -0
- package/skills/utils/copywriting/references/writing-styles.md +247 -0
- package/skills/utils/copywriting/scripts/extract-writing-styles.py +308 -0
- package/skills/utils/copywriting/templates/copy-brief.md +49 -0
- package/skills/utils/docs/SKILL.md +55 -0
- package/skills/utils/docs/references/init-workflow.md +32 -0
- package/skills/utils/docs/references/summarize-workflow.md +18 -0
- package/skills/utils/docs/references/update-workflow.md +59 -0
- package/skills/utils/journal/SKILL.md +11 -0
- package/skills/utils/kanban/SKILL.md +99 -0
- package/skills/utils/preview/SKILL.md +75 -0
- package/skills/utils/preview/references/generation-modes.md +95 -0
- package/skills/utils/preview/references/view-mode.md +42 -0
- package/skills/utils/repomix/SKILL.md +248 -0
- package/skills/utils/repomix/references/configuration.md +211 -0
- package/skills/utils/repomix/references/usage-patterns.md +232 -0
- package/skills/utils/repomix/scripts/.coverage +0 -0
- package/skills/utils/repomix/scripts/README.md +179 -0
- package/skills/utils/repomix/scripts/repomix_batch.py +455 -0
- package/skills/utils/repomix/scripts/repos.example.json +15 -0
- package/skills/utils/repomix/scripts/requirements.txt +15 -0
- package/skills/utils/repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/skills/utils/research/SKILL.md +171 -0
- package/skills/utils/scout/SKILL.md +89 -0
- package/skills/utils/scout/references/external-scouting.md +140 -0
- package/skills/utils/scout/references/internal-scouting.md +119 -0
- package/skills/utils/scout/references/task-management-scouting.md +125 -0
- package/skills/utils/sequential-thinking/.env.example +8 -0
- package/skills/utils/sequential-thinking/README.md +183 -0
- package/skills/utils/sequential-thinking/SKILL.md +95 -0
- package/skills/utils/sequential-thinking/package.json +31 -0
- package/skills/utils/sequential-thinking/references/advanced-strategies.md +79 -0
- package/skills/utils/sequential-thinking/references/advanced-techniques.md +76 -0
- package/skills/utils/sequential-thinking/references/core-patterns.md +95 -0
- package/skills/utils/sequential-thinking/references/examples-api.md +88 -0
- package/skills/utils/sequential-thinking/references/examples-architecture.md +94 -0
- package/skills/utils/sequential-thinking/references/examples-debug.md +90 -0
- package/skills/utils/sequential-thinking/scripts/format-thought.js +159 -0
- package/skills/utils/sequential-thinking/scripts/process-thought.js +236 -0
- package/skills/utils/sequential-thinking/tests/format-thought.test.js +133 -0
- package/skills/utils/sequential-thinking/tests/process-thought.test.js +215 -0
- package/skills/utils/write-skill/SKILL.md +655 -0
- package/skills/utils/write-skill/anthropic-best-practices.md +1150 -0
- package/skills/utils/write-skill/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/utils/write-skill/graphviz-conventions.dot +172 -0
- package/skills/utils/write-skill/persuasion-principles.md +187 -0
- package/skills/utils/write-skill/render-graphs.js +168 -0
- package/skills/utils/write-skill/testing-skills-with-subagents.md +384 -0
- package/src/commands/init.js +238 -0
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Tests for docker-optimize.py
|
|
3
|
+
|
|
4
|
+
Run with: pytest test_docker_optimize.py -v
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
import json
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
# Add parent directory to path for imports
|
|
13
|
+
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
14
|
+
|
|
15
|
+
from docker_optimize import DockerfileAnalyzer
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@pytest.fixture
|
|
19
|
+
def temp_dockerfile(tmp_path):
|
|
20
|
+
"""Create temporary Dockerfile"""
|
|
21
|
+
dockerfile = tmp_path / "Dockerfile"
|
|
22
|
+
return dockerfile
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def write_dockerfile(filepath, content):
|
|
26
|
+
"""Helper to write Dockerfile content"""
|
|
27
|
+
with open(filepath, 'w') as f:
|
|
28
|
+
f.write(content)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class TestDockerfileAnalyzerInit:
|
|
32
|
+
"""Test DockerfileAnalyzer initialization"""
|
|
33
|
+
|
|
34
|
+
def test_init(self, temp_dockerfile):
|
|
35
|
+
write_dockerfile(temp_dockerfile, "FROM node:20\n")
|
|
36
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
37
|
+
|
|
38
|
+
assert analyzer.dockerfile_path == temp_dockerfile
|
|
39
|
+
assert analyzer.verbose is False
|
|
40
|
+
assert analyzer.lines == []
|
|
41
|
+
assert analyzer.issues == []
|
|
42
|
+
assert analyzer.suggestions == []
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class TestLoadDockerfile:
|
|
46
|
+
"""Test Dockerfile loading"""
|
|
47
|
+
|
|
48
|
+
def test_load_success(self, temp_dockerfile):
|
|
49
|
+
content = "FROM node:20\nWORKDIR /app\n"
|
|
50
|
+
write_dockerfile(temp_dockerfile, content)
|
|
51
|
+
|
|
52
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
53
|
+
result = analyzer.load_dockerfile()
|
|
54
|
+
|
|
55
|
+
assert result is True
|
|
56
|
+
assert len(analyzer.lines) == 2
|
|
57
|
+
|
|
58
|
+
def test_load_nonexistent(self, tmp_path):
|
|
59
|
+
analyzer = DockerfileAnalyzer(tmp_path / "nonexistent")
|
|
60
|
+
|
|
61
|
+
with pytest.raises(FileNotFoundError):
|
|
62
|
+
analyzer.load_dockerfile()
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class TestAnalyzeBaseImage:
|
|
66
|
+
"""Test base image analysis"""
|
|
67
|
+
|
|
68
|
+
def test_latest_tag(self, temp_dockerfile):
|
|
69
|
+
write_dockerfile(temp_dockerfile, "FROM node:latest\n")
|
|
70
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
71
|
+
analyzer.load_dockerfile()
|
|
72
|
+
analyzer.analyze_base_image()
|
|
73
|
+
|
|
74
|
+
assert len(analyzer.issues) == 1
|
|
75
|
+
assert analyzer.issues[0]['category'] == 'base_image'
|
|
76
|
+
assert 'latest' in analyzer.issues[0]['message']
|
|
77
|
+
|
|
78
|
+
def test_no_tag(self, temp_dockerfile):
|
|
79
|
+
write_dockerfile(temp_dockerfile, "FROM node\n")
|
|
80
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
81
|
+
analyzer.load_dockerfile()
|
|
82
|
+
analyzer.analyze_base_image()
|
|
83
|
+
|
|
84
|
+
assert len(analyzer.issues) == 1
|
|
85
|
+
assert 'no tag' in analyzer.issues[0]['message']
|
|
86
|
+
|
|
87
|
+
def test_specific_tag(self, temp_dockerfile):
|
|
88
|
+
write_dockerfile(temp_dockerfile, "FROM node:20-alpine\n")
|
|
89
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
90
|
+
analyzer.load_dockerfile()
|
|
91
|
+
analyzer.analyze_base_image()
|
|
92
|
+
|
|
93
|
+
# Should have no issues with specific tag
|
|
94
|
+
base_image_issues = [i for i in analyzer.issues if i['category'] == 'base_image']
|
|
95
|
+
assert len(base_image_issues) == 0
|
|
96
|
+
|
|
97
|
+
def test_non_alpine_suggestion(self, temp_dockerfile):
|
|
98
|
+
write_dockerfile(temp_dockerfile, "FROM node:20\n")
|
|
99
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
100
|
+
analyzer.load_dockerfile()
|
|
101
|
+
analyzer.analyze_base_image()
|
|
102
|
+
|
|
103
|
+
assert len(analyzer.suggestions) >= 1
|
|
104
|
+
assert any('Alpine' in s['message'] for s in analyzer.suggestions)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class TestAnalyzeMultiStage:
|
|
108
|
+
"""Test multi-stage build analysis"""
|
|
109
|
+
|
|
110
|
+
def test_single_stage_with_build_tools(self, temp_dockerfile):
|
|
111
|
+
content = """
|
|
112
|
+
FROM node:20
|
|
113
|
+
WORKDIR /app
|
|
114
|
+
COPY package.json .
|
|
115
|
+
RUN npm install
|
|
116
|
+
COPY . .
|
|
117
|
+
CMD ["node", "server.js"]
|
|
118
|
+
"""
|
|
119
|
+
write_dockerfile(temp_dockerfile, content)
|
|
120
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
121
|
+
analyzer.load_dockerfile()
|
|
122
|
+
analyzer.analyze_multi_stage()
|
|
123
|
+
|
|
124
|
+
assert len(analyzer.issues) == 1
|
|
125
|
+
assert analyzer.issues[0]['category'] == 'optimization'
|
|
126
|
+
assert 'multi-stage' in analyzer.issues[0]['message'].lower()
|
|
127
|
+
|
|
128
|
+
def test_multi_stage_no_issues(self, temp_dockerfile):
|
|
129
|
+
content = """
|
|
130
|
+
FROM node:20 AS build
|
|
131
|
+
WORKDIR /app
|
|
132
|
+
COPY package.json .
|
|
133
|
+
RUN npm install
|
|
134
|
+
COPY . .
|
|
135
|
+
RUN npm run build
|
|
136
|
+
|
|
137
|
+
FROM node:20-alpine
|
|
138
|
+
WORKDIR /app
|
|
139
|
+
COPY --from=build /app/dist ./dist
|
|
140
|
+
CMD ["node", "dist/server.js"]
|
|
141
|
+
"""
|
|
142
|
+
write_dockerfile(temp_dockerfile, content)
|
|
143
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
144
|
+
analyzer.load_dockerfile()
|
|
145
|
+
analyzer.analyze_multi_stage()
|
|
146
|
+
|
|
147
|
+
multi_stage_issues = [i for i in analyzer.issues if i['category'] == 'optimization']
|
|
148
|
+
assert len(multi_stage_issues) == 0
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class TestAnalyzeLayerCaching:
|
|
152
|
+
"""Test layer caching analysis"""
|
|
153
|
+
|
|
154
|
+
def test_source_before_dependencies(self, temp_dockerfile):
|
|
155
|
+
content = """
|
|
156
|
+
FROM node:20
|
|
157
|
+
WORKDIR /app
|
|
158
|
+
COPY . .
|
|
159
|
+
RUN npm install
|
|
160
|
+
"""
|
|
161
|
+
write_dockerfile(temp_dockerfile, content)
|
|
162
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
163
|
+
analyzer.load_dockerfile()
|
|
164
|
+
analyzer.analyze_layer_caching()
|
|
165
|
+
|
|
166
|
+
assert len(analyzer.issues) == 1
|
|
167
|
+
assert analyzer.issues[0]['category'] == 'caching'
|
|
168
|
+
|
|
169
|
+
def test_correct_order(self, temp_dockerfile):
|
|
170
|
+
content = """
|
|
171
|
+
FROM node:20
|
|
172
|
+
WORKDIR /app
|
|
173
|
+
COPY package.json .
|
|
174
|
+
RUN npm install
|
|
175
|
+
COPY . .
|
|
176
|
+
"""
|
|
177
|
+
write_dockerfile(temp_dockerfile, content)
|
|
178
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
179
|
+
analyzer.load_dockerfile()
|
|
180
|
+
analyzer.analyze_layer_caching()
|
|
181
|
+
|
|
182
|
+
caching_issues = [i for i in analyzer.issues if i['category'] == 'caching']
|
|
183
|
+
assert len(caching_issues) == 0
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
class TestAnalyzeSecurity:
|
|
187
|
+
"""Test security analysis"""
|
|
188
|
+
|
|
189
|
+
def test_no_user_instruction(self, temp_dockerfile):
|
|
190
|
+
content = """
|
|
191
|
+
FROM node:20
|
|
192
|
+
WORKDIR /app
|
|
193
|
+
COPY . .
|
|
194
|
+
CMD ["node", "server.js"]
|
|
195
|
+
"""
|
|
196
|
+
write_dockerfile(temp_dockerfile, content)
|
|
197
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
198
|
+
analyzer.load_dockerfile()
|
|
199
|
+
analyzer.analyze_security()
|
|
200
|
+
|
|
201
|
+
assert len(analyzer.issues) >= 1
|
|
202
|
+
security_issues = [i for i in analyzer.issues if i['category'] == 'security']
|
|
203
|
+
assert any('root' in i['message'] for i in security_issues)
|
|
204
|
+
|
|
205
|
+
def test_with_user_instruction(self, temp_dockerfile):
|
|
206
|
+
content = """
|
|
207
|
+
FROM node:20
|
|
208
|
+
WORKDIR /app
|
|
209
|
+
COPY . .
|
|
210
|
+
USER node
|
|
211
|
+
CMD ["node", "server.js"]
|
|
212
|
+
"""
|
|
213
|
+
write_dockerfile(temp_dockerfile, content)
|
|
214
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
215
|
+
analyzer.load_dockerfile()
|
|
216
|
+
analyzer.analyze_security()
|
|
217
|
+
|
|
218
|
+
# Should not have root user issue
|
|
219
|
+
root_issues = [i for i in analyzer.issues
|
|
220
|
+
if i['category'] == 'security' and 'root' in i['message']]
|
|
221
|
+
assert len(root_issues) == 0
|
|
222
|
+
|
|
223
|
+
def test_detect_secrets(self, temp_dockerfile):
|
|
224
|
+
content = """
|
|
225
|
+
FROM node:20
|
|
226
|
+
ENV API_KEY=secret123
|
|
227
|
+
ENV PASSWORD=mypassword
|
|
228
|
+
"""
|
|
229
|
+
write_dockerfile(temp_dockerfile, content)
|
|
230
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
231
|
+
analyzer.load_dockerfile()
|
|
232
|
+
analyzer.analyze_security()
|
|
233
|
+
|
|
234
|
+
secret_issues = [i for i in analyzer.issues
|
|
235
|
+
if i['category'] == 'security' and 'secret' in i['message'].lower()]
|
|
236
|
+
assert len(secret_issues) >= 1
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
class TestAnalyzeAptCache:
|
|
240
|
+
"""Test apt cache cleanup analysis"""
|
|
241
|
+
|
|
242
|
+
def test_apt_without_cleanup(self, temp_dockerfile):
|
|
243
|
+
content = """
|
|
244
|
+
FROM ubuntu:22.04
|
|
245
|
+
RUN apt-get update && apt-get install -y curl
|
|
246
|
+
"""
|
|
247
|
+
write_dockerfile(temp_dockerfile, content)
|
|
248
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
249
|
+
analyzer.load_dockerfile()
|
|
250
|
+
analyzer.analyze_apt_cache()
|
|
251
|
+
|
|
252
|
+
assert len(analyzer.suggestions) >= 1
|
|
253
|
+
assert any('apt cache' in s['message'] for s in analyzer.suggestions)
|
|
254
|
+
|
|
255
|
+
def test_apt_with_cleanup(self, temp_dockerfile):
|
|
256
|
+
content = """
|
|
257
|
+
FROM ubuntu:22.04
|
|
258
|
+
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
|
|
259
|
+
"""
|
|
260
|
+
write_dockerfile(temp_dockerfile, content)
|
|
261
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
262
|
+
analyzer.load_dockerfile()
|
|
263
|
+
analyzer.analyze_apt_cache()
|
|
264
|
+
|
|
265
|
+
apt_suggestions = [s for s in analyzer.suggestions if 'apt cache' in s['message']]
|
|
266
|
+
assert len(apt_suggestions) == 0
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class TestAnalyzeCombineRun:
|
|
270
|
+
"""Test RUN command combination analysis"""
|
|
271
|
+
|
|
272
|
+
def test_consecutive_runs(self, temp_dockerfile):
|
|
273
|
+
content = """
|
|
274
|
+
FROM node:20
|
|
275
|
+
RUN apt-get update
|
|
276
|
+
RUN apt-get install -y curl
|
|
277
|
+
RUN apt-get clean
|
|
278
|
+
"""
|
|
279
|
+
write_dockerfile(temp_dockerfile, content)
|
|
280
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
281
|
+
analyzer.load_dockerfile()
|
|
282
|
+
analyzer.analyze_combine_run()
|
|
283
|
+
|
|
284
|
+
assert len(analyzer.suggestions) >= 1
|
|
285
|
+
assert any('consecutive' in s['message'] for s in analyzer.suggestions)
|
|
286
|
+
|
|
287
|
+
def test_non_consecutive_runs(self, temp_dockerfile):
|
|
288
|
+
content = """
|
|
289
|
+
FROM node:20
|
|
290
|
+
RUN apt-get update
|
|
291
|
+
COPY package.json .
|
|
292
|
+
RUN npm install
|
|
293
|
+
"""
|
|
294
|
+
write_dockerfile(temp_dockerfile, content)
|
|
295
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
296
|
+
analyzer.load_dockerfile()
|
|
297
|
+
analyzer.analyze_combine_run()
|
|
298
|
+
|
|
299
|
+
consecutive_suggestions = [s for s in analyzer.suggestions
|
|
300
|
+
if 'consecutive' in s['message']]
|
|
301
|
+
assert len(consecutive_suggestions) == 0
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
class TestAnalyzeWorkdir:
|
|
305
|
+
"""Test WORKDIR analysis"""
|
|
306
|
+
|
|
307
|
+
def test_no_workdir(self, temp_dockerfile):
|
|
308
|
+
content = """
|
|
309
|
+
FROM node:20
|
|
310
|
+
COPY . /app
|
|
311
|
+
CMD ["node", "/app/server.js"]
|
|
312
|
+
"""
|
|
313
|
+
write_dockerfile(temp_dockerfile, content)
|
|
314
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
315
|
+
analyzer.load_dockerfile()
|
|
316
|
+
analyzer.analyze_workdir()
|
|
317
|
+
|
|
318
|
+
assert len(analyzer.suggestions) >= 1
|
|
319
|
+
assert any('WORKDIR' in s['message'] for s in analyzer.suggestions)
|
|
320
|
+
|
|
321
|
+
def test_with_workdir(self, temp_dockerfile):
|
|
322
|
+
content = """
|
|
323
|
+
FROM node:20
|
|
324
|
+
WORKDIR /app
|
|
325
|
+
COPY . .
|
|
326
|
+
CMD ["node", "server.js"]
|
|
327
|
+
"""
|
|
328
|
+
write_dockerfile(temp_dockerfile, content)
|
|
329
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
330
|
+
analyzer.load_dockerfile()
|
|
331
|
+
analyzer.analyze_workdir()
|
|
332
|
+
|
|
333
|
+
workdir_suggestions = [s for s in analyzer.suggestions if 'WORKDIR' in s['message']]
|
|
334
|
+
assert len(workdir_suggestions) == 0
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
class TestFullAnalyze:
|
|
338
|
+
"""Test complete analysis"""
|
|
339
|
+
|
|
340
|
+
def test_analyze_poor_dockerfile(self, temp_dockerfile):
|
|
341
|
+
content = """
|
|
342
|
+
FROM node:latest
|
|
343
|
+
COPY . .
|
|
344
|
+
RUN npm install
|
|
345
|
+
CMD ["node", "server.js"]
|
|
346
|
+
"""
|
|
347
|
+
write_dockerfile(temp_dockerfile, content)
|
|
348
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
349
|
+
results = analyzer.analyze()
|
|
350
|
+
|
|
351
|
+
assert 'dockerfile' in results
|
|
352
|
+
assert 'total_lines' in results
|
|
353
|
+
assert 'issues' in results
|
|
354
|
+
assert 'suggestions' in results
|
|
355
|
+
assert 'summary' in results
|
|
356
|
+
|
|
357
|
+
# Should have multiple issues and suggestions
|
|
358
|
+
assert results['summary']['warnings'] > 0
|
|
359
|
+
assert results['summary']['suggestions'] > 0
|
|
360
|
+
|
|
361
|
+
def test_analyze_good_dockerfile(self, temp_dockerfile):
|
|
362
|
+
content = """
|
|
363
|
+
FROM node:20-alpine AS build
|
|
364
|
+
WORKDIR /app
|
|
365
|
+
COPY package.json .
|
|
366
|
+
RUN npm ci --only=production
|
|
367
|
+
COPY . .
|
|
368
|
+
RUN npm run build
|
|
369
|
+
|
|
370
|
+
FROM node:20-alpine
|
|
371
|
+
WORKDIR /app
|
|
372
|
+
COPY --from=build /app/dist ./dist
|
|
373
|
+
COPY --from=build /app/node_modules ./node_modules
|
|
374
|
+
USER node
|
|
375
|
+
EXPOSE 3000
|
|
376
|
+
CMD ["node", "dist/server.js"]
|
|
377
|
+
"""
|
|
378
|
+
write_dockerfile(temp_dockerfile, content)
|
|
379
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
380
|
+
results = analyzer.analyze()
|
|
381
|
+
|
|
382
|
+
# Should have minimal issues
|
|
383
|
+
assert results['summary']['errors'] == 0
|
|
384
|
+
# May have some suggestions, but fewer issues overall
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
class TestPrintResults:
|
|
388
|
+
"""Test results printing"""
|
|
389
|
+
|
|
390
|
+
def test_print_results(self, temp_dockerfile, capsys):
|
|
391
|
+
content = "FROM node:latest\n"
|
|
392
|
+
write_dockerfile(temp_dockerfile, content)
|
|
393
|
+
|
|
394
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile)
|
|
395
|
+
results = analyzer.analyze()
|
|
396
|
+
analyzer.print_results(results)
|
|
397
|
+
|
|
398
|
+
captured = capsys.readouterr()
|
|
399
|
+
assert "Dockerfile Analysis" in captured.out
|
|
400
|
+
assert "Summary:" in captured.out
|
|
401
|
+
assert "ISSUES:" in captured.out or "SUGGESTIONS:" in captured.out
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
class TestIntegration:
|
|
405
|
+
"""Integration tests"""
|
|
406
|
+
|
|
407
|
+
def test_full_analysis_workflow(self, temp_dockerfile):
|
|
408
|
+
content = """
|
|
409
|
+
FROM python:3.11
|
|
410
|
+
COPY . /app
|
|
411
|
+
RUN pip install -r /app/requirements.txt
|
|
412
|
+
ENV API_KEY=secret
|
|
413
|
+
CMD ["python", "/app/app.py"]
|
|
414
|
+
"""
|
|
415
|
+
write_dockerfile(temp_dockerfile, content)
|
|
416
|
+
|
|
417
|
+
analyzer = DockerfileAnalyzer(temp_dockerfile, verbose=True)
|
|
418
|
+
results = analyzer.analyze()
|
|
419
|
+
|
|
420
|
+
# Verify all expected checks ran
|
|
421
|
+
assert len(analyzer.issues) > 0
|
|
422
|
+
assert len(analyzer.suggestions) > 0
|
|
423
|
+
|
|
424
|
+
# Should flag multiple categories
|
|
425
|
+
categories = {i['category'] for i in analyzer.issues}
|
|
426
|
+
assert 'security' in categories
|
|
427
|
+
|
|
428
|
+
# Verify summary calculations
|
|
429
|
+
total_findings = (results['summary']['errors'] +
|
|
430
|
+
results['summary']['warnings'] +
|
|
431
|
+
results['summary']['suggestions'])
|
|
432
|
+
assert total_findings > 0
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
if __name__ == "__main__":
|
|
436
|
+
pytest.main([__file__, "-v"])
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-design
|
|
3
|
+
description: Create polished frontend interfaces from designs/screenshots/videos. Use for web components, 3D experiences, replicating UI designs, quick prototypes, immersive interfaces, avoiding AI slop.
|
|
4
|
+
license: Complete terms in LICENSE.txt
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Create distinctive, production-grade frontend interfaces. Implement real working code with exceptional aesthetic attention.
|
|
8
|
+
|
|
9
|
+
## Workflow Selection
|
|
10
|
+
|
|
11
|
+
Choose workflow based on input type:
|
|
12
|
+
|
|
13
|
+
| Input | Workflow | Reference |
|
|
14
|
+
|-------|----------|-----------|
|
|
15
|
+
| Screenshot | Replicate exactly | `./references/workflow-screenshot.md` |
|
|
16
|
+
| Video | Replicate with animations | `./references/workflow-video.md` |
|
|
17
|
+
| Screenshot/Video (describe only) | Document for devs | `./references/workflow-describe.md` |
|
|
18
|
+
| 3D/WebGL request | Three.js immersive | `./references/workflow-3d.md` |
|
|
19
|
+
| Quick task | Rapid implementation | `./references/workflow-quick.md` |
|
|
20
|
+
| Complex/award-quality | Full immersive | `./references/workflow-immersive.md` |
|
|
21
|
+
| From scratch | Design Thinking below | - |
|
|
22
|
+
|
|
23
|
+
**All workflows**: Activate `ck:ui-ux-pro-max` skill FIRST for design intelligence.
|
|
24
|
+
|
|
25
|
+
## Screenshot/Video Replication (Quick Reference)
|
|
26
|
+
|
|
27
|
+
1. **Analyze** with `ck:ai-multimodal` skill - extract colors, fonts, spacing, effects
|
|
28
|
+
2. **Plan** with `ui-ux-designer` subagent - create phased implementation
|
|
29
|
+
3. **Implement** - match source precisely
|
|
30
|
+
4. **Verify** - compare to original
|
|
31
|
+
5. **Document** - update `./docs/design-guidelines.md` if approved
|
|
32
|
+
|
|
33
|
+
See specific workflow files for detailed steps.
|
|
34
|
+
|
|
35
|
+
## Design Thinking (From Scratch)
|
|
36
|
+
|
|
37
|
+
Before coding, commit to a BOLD aesthetic direction:
|
|
38
|
+
- **Purpose**: What problem does this interface solve? Who uses it?
|
|
39
|
+
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
|
|
40
|
+
- **Constraints**: Technical requirements (framework, performance, accessibility).
|
|
41
|
+
- **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
|
|
42
|
+
|
|
43
|
+
**CRITICAL**: Execute with precision. Bold maximalism and refined minimalism both work - intentionality is key.
|
|
44
|
+
|
|
45
|
+
## Aesthetics Guidelines
|
|
46
|
+
|
|
47
|
+
- **Typography**: Avoid Arial/Inter; use distinctive, characterful fonts. Pair display + body fonts.
|
|
48
|
+
- **Color**: Commit to cohesive palette. CSS variables. Dominant colors with sharp accents.
|
|
49
|
+
- **Motion**: CSS-first, anime.js for complex (`./references/animejs.md`). Orchestrated page loads > scattered micro-interactions.
|
|
50
|
+
- **Spatial**: Unexpected layouts. Asymmetry. Overlap. Negative space OR controlled density.
|
|
51
|
+
- **Backgrounds**: Atmosphere over solid colors. Gradients, noise, patterns, shadows, grain.
|
|
52
|
+
- **Assets**: Generate with `ck:ai-multimodal`, process with `ck:media-processing`
|
|
53
|
+
|
|
54
|
+
## Asset & Analysis References
|
|
55
|
+
|
|
56
|
+
| Task | Reference |
|
|
57
|
+
|------|-----------|
|
|
58
|
+
| Generate assets | `./references/asset-generation.md` |
|
|
59
|
+
| Analyze quality | `./references/visual-analysis-overview.md` |
|
|
60
|
+
| Extract guidelines | `./references/design-extraction-overview.md` |
|
|
61
|
+
| Optimization | `./references/technical-overview.md` |
|
|
62
|
+
| Animations | `./references/animejs.md` |
|
|
63
|
+
|
|
64
|
+
Quick start: `./references/ai-multimodal-overview.md`
|
|
65
|
+
|
|
66
|
+
## Anti-Patterns (AI Slop)
|
|
67
|
+
|
|
68
|
+
NEVER use:
|
|
69
|
+
- Overused fonts: Inter, Roboto, Arial, Space Grotesk
|
|
70
|
+
- Cliched colors: purple gradients on white
|
|
71
|
+
- Predictable layouts, cookie-cutter patterns
|
|
72
|
+
|
|
73
|
+
DO:
|
|
74
|
+
- Vary themes (light/dark), fonts, aesthetics per project
|
|
75
|
+
- Match complexity to vision (maximalist = elaborate; minimalist = precise)
|
|
76
|
+
- Make unexpected, context-specific choices
|
|
77
|
+
|
|
78
|
+
Remember: Claude is capable of extraordinary creative work. Commit fully to distinctive visions.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# AI Multimodal Integration for Frontend Design
|
|
2
|
+
|
|
3
|
+
Entry point for using the `ck:ai-multimodal` skill to generate and analyze visual assets that align with frontend design thinking and aesthetic guidelines.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
Use `ck:ai-multimodal` in frontend design when you need to:
|
|
8
|
+
|
|
9
|
+
**Asset Generation**:
|
|
10
|
+
- Generate hero images, background assets, decorative elements
|
|
11
|
+
- Create placeholder images with specific aesthetic qualities
|
|
12
|
+
- Produce marketing visuals that match UI design language
|
|
13
|
+
- Generate icon sets, illustrations, or graphic elements
|
|
14
|
+
- Create texture overlays, gradient meshes, or background patterns
|
|
15
|
+
- Prototype visual concepts before implementing in code
|
|
16
|
+
|
|
17
|
+
**Visual Analysis**:
|
|
18
|
+
- Analyze generated assets to verify they meet design standards
|
|
19
|
+
- Compare multiple variations objectively with ratings
|
|
20
|
+
- Extract exact color palettes with hex codes for implementation
|
|
21
|
+
- Test assets with UI overlays for readability and contrast
|
|
22
|
+
|
|
23
|
+
**Design Extraction**:
|
|
24
|
+
- Extract design guidelines from existing images or videos
|
|
25
|
+
- Analyze competitor designs to understand their approach
|
|
26
|
+
- Reverse-engineer design systems from inspiration screenshots
|
|
27
|
+
- Create documented guidelines based on visual analysis
|
|
28
|
+
- Establish consistent aesthetic direction from references
|
|
29
|
+
|
|
30
|
+
## Core Principles
|
|
31
|
+
|
|
32
|
+
### 1. Design-Driven Generation
|
|
33
|
+
**NEVER** generate generic AI imagery. Every asset must align with:
|
|
34
|
+
- The chosen aesthetic direction (brutalism, maximalism, retro-futurism, etc.)
|
|
35
|
+
- Typography system and visual hierarchy
|
|
36
|
+
- Color palette and theme consistency
|
|
37
|
+
- Overall design story and purpose
|
|
38
|
+
|
|
39
|
+
### 2. Contextual Asset Creation
|
|
40
|
+
Assets aren't standalone—they're part of a cohesive interface. Consider:
|
|
41
|
+
- **Purpose**: Hero image vs. background texture vs. decorative element
|
|
42
|
+
- **Integration**: How it interacts with overlaid text, buttons, forms
|
|
43
|
+
- **Technical constraints**: File size, aspect ratio, responsive behavior
|
|
44
|
+
- **Accessibility**: Color contrast, text readability, decorative vs. informative
|
|
45
|
+
|
|
46
|
+
### 3. Analysis is Mandatory
|
|
47
|
+
Never integrate assets without comprehensive analysis:
|
|
48
|
+
- Score quality objectively (1-10 scale, minimum 7/10)
|
|
49
|
+
- Extract specific values: hex codes, not "blue"; px sizes, not "large"
|
|
50
|
+
- Compare multiple variations before deciding
|
|
51
|
+
- Test with UI overlays, not in isolation
|
|
52
|
+
|
|
53
|
+
### 4. Learn from Excellence
|
|
54
|
+
Extract design systems systematically from high-quality references:
|
|
55
|
+
- Analyze 3-5 screens to identify patterns
|
|
56
|
+
- Document actionably with CSS variables and exact values
|
|
57
|
+
- Validate predictions (fonts, colors) manually
|
|
58
|
+
- Adapt principles contextually, don't copy blindly
|
|
59
|
+
|
|
60
|
+
## Workflow Quick Reference
|
|
61
|
+
|
|
62
|
+
### For Asset Generation
|
|
63
|
+
**See**: `asset-generation.md`
|
|
64
|
+
|
|
65
|
+
1. Define design context (aesthetic, colors, typography, tone)
|
|
66
|
+
2. Craft design-driven prompts (not generic)
|
|
67
|
+
3. Generate with appropriate Imagen 4 model
|
|
68
|
+
4. Analyze and verify quality (score ≥ 7/10)
|
|
69
|
+
5. Iterate or integrate based on results
|
|
70
|
+
|
|
71
|
+
**Models**: imagen-4.0-generate-001 (standard), imagen-4.0-ultra-generate-001 (production), imagen-4.0-fast-generate-001 (iteration)
|
|
72
|
+
|
|
73
|
+
### For Visual Analysis
|
|
74
|
+
**See**: `visual-analysis.md`
|
|
75
|
+
|
|
76
|
+
1. Define evaluation criteria (context-specific)
|
|
77
|
+
2. Run comprehensive analysis with structured prompts
|
|
78
|
+
3. Compare multiple variations objectively
|
|
79
|
+
4. Extract color palettes with hex codes
|
|
80
|
+
5. Test integration with UI elements
|
|
81
|
+
|
|
82
|
+
**Model**: gemini-2.5-flash (vision understanding)
|
|
83
|
+
|
|
84
|
+
### For Design Extraction
|
|
85
|
+
**See**: `design-extraction.md`
|
|
86
|
+
|
|
87
|
+
1. Capture high-quality reference screenshots
|
|
88
|
+
2. Extract comprehensive design elements systematically
|
|
89
|
+
3. Analyze multiple screens for consistent patterns
|
|
90
|
+
4. Extract motion guidelines from videos (if applicable)
|
|
91
|
+
5. Document actionably with CSS-ready specifications
|
|
92
|
+
|
|
93
|
+
**Model**: gemini-2.5-flash (vision understanding)
|
|
94
|
+
|
|
95
|
+
## Integration with Other Skills
|
|
96
|
+
|
|
97
|
+
### With `aesthetic` Skill
|
|
98
|
+
Use `aesthetic` for overall design system guidance and quality evaluation framework. Then use `ck:frontend-design` with `ck:ai-multimodal` for asset generation and analysis that follows those guidelines.
|
|
99
|
+
|
|
100
|
+
### With `ck:chrome-devtools` Skill
|
|
101
|
+
Use `ck:chrome-devtools` to capture full-screen screenshots from inspiration websites for design extraction. Capture at actual viewport size, not full-page scrolls.
|
|
102
|
+
|
|
103
|
+
### With `ui-styling` Skill
|
|
104
|
+
Generate and analyze assets first, then implement using shadcn/ui + Tailwind with colors/styles that complement the generated imagery.
|
|
105
|
+
|
|
106
|
+
### With `web-frameworks` Skill
|
|
107
|
+
Optimize generated assets for Next.js App Router: image optimization, responsive images, lazy loading.
|
|
108
|
+
|
|
109
|
+
### With `ck:media-processing` Skill
|
|
110
|
+
Post-process generated assets: resize, compress, add filters, create compositions using FFmpeg/ImageMagick.
|
|
111
|
+
|
|
112
|
+
## Navigation
|
|
113
|
+
|
|
114
|
+
**Detailed Workflows**:
|
|
115
|
+
- `asset-generation.md` - Complete generation workflow with prompt strategies
|
|
116
|
+
- `visual-analysis.md` - Analysis and verification workflow
|
|
117
|
+
- `design-extraction.md` - Extract guidelines from existing designs
|
|
118
|
+
|
|
119
|
+
**Additional Resources**:
|
|
120
|
+
- `technical-guide.md` - File optimization, examples, checklists, common pitfalls
|
|
121
|
+
- `animejs.md` - Animation implementation for frontend
|
|
122
|
+
|
|
123
|
+
## Quick Commands
|
|
124
|
+
|
|
125
|
+
**Generate asset**:
|
|
126
|
+
```bash
|
|
127
|
+
python scripts/gemini_batch_process.py \
|
|
128
|
+
--task generate \
|
|
129
|
+
--prompt "[design-driven prompt]" \
|
|
130
|
+
--output docs/assets/[name] \
|
|
131
|
+
--model imagen-4.0-generate-001 \
|
|
132
|
+
--aspect-ratio 16:9
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Analyze asset**:
|
|
136
|
+
```bash
|
|
137
|
+
python scripts/gemini_batch_process.py \
|
|
138
|
+
--files docs/assets/[image].png \
|
|
139
|
+
--task analyze \
|
|
140
|
+
--prompt "[evaluation criteria]" \
|
|
141
|
+
--output docs/assets/analysis.md \
|
|
142
|
+
--model gemini-2.5-flash
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Extract design guidelines**:
|
|
146
|
+
```bash
|
|
147
|
+
python scripts/gemini_batch_process.py \
|
|
148
|
+
--files docs/inspiration/[reference].png \
|
|
149
|
+
--task analyze \
|
|
150
|
+
--prompt "[extraction criteria from design-extraction.md]" \
|
|
151
|
+
--output docs/design-guidelines/extracted.md \
|
|
152
|
+
--model gemini-2.5-flash
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Remember
|
|
156
|
+
|
|
157
|
+
1. **Design First, Generate Second**: Start with design thinking, not generation capabilities
|
|
158
|
+
2. **Context is King**: Every asset serves the interface, not itself
|
|
159
|
+
3. **Iterate Ruthlessly**: First generation is rarely final—evaluate and refine
|
|
160
|
+
4. **Analysis is Mandatory**: Never integrate without comprehensive verification (≥7/10)
|
|
161
|
+
5. **Demand Specifics**: Hex codes not "blue", px not "large", ms not "fast"
|
|
162
|
+
6. **Learn from Excellence**: Extract design systems from high-quality references systematically
|
|
163
|
+
7. **Adapt, Don't Copy**: Understand principles, apply contextually to your unique design
|
|
164
|
+
|
|
165
|
+
Generate assets that elevate frontend design, maintain aesthetic consistency, and serve user experience—never generic, always contextual.
|