agent-skill-kit 3.9.135
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/.agent/global.d.ts +80 -0
- package/.agent/rules/GEMINI.md +210 -0
- package/.agent/rules/autopilot.md +287 -0
- package/.agent/rules/code-rules.md +227 -0
- package/.agent/scripts/audit_workflows.ts +23 -0
- package/.agent/scripts/auto_preview.ts +170 -0
- package/.agent/scripts/checklist.ts +180 -0
- package/.agent/scripts/compile-agents.ts +237 -0
- package/.agent/scripts/fix_skills.ts +49 -0
- package/.agent/scripts/session_manager.ts +222 -0
- package/.agent/scripts/skill-audit.ts +255 -0
- package/.agent/scripts/sync_workflows.ts +54 -0
- package/.agent/scripts/utils/colors.ts +58 -0
- package/.agent/scripts/utils/process-manager.ts +131 -0
- package/.agent/scripts/utils/reporter.ts +192 -0
- package/.agent/scripts/utils/runner.ts +128 -0
- package/.agent/scripts/verify_all.ts +243 -0
- package/.agent/scripts/version-sync.ts +256 -0
- package/.agent/skills/SKILL_INDEX.md +129 -0
- package/.agent/skills/agent-browser/AGENTS.md +728 -0
- package/.agent/skills/agent-browser/SKILL.md +193 -0
- package/.agent/skills/agent-browser/rules/_sections.md +15 -0
- package/.agent/skills/agent-browser/rules/_template.md +32 -0
- package/.agent/skills/agent-browser/rules/engineering-spec.md +528 -0
- package/.agent/skills/agent-browser/scripts/browser_cli.ts +52 -0
- package/.agent/skills/agent-browser/scripts/session_manager.ts +166 -0
- package/.agent/skills/ai-artist/AGENTS.md +1082 -0
- package/.agent/skills/ai-artist/SKILL.md +186 -0
- package/.agent/skills/ai-artist/rules/_sections.md +30 -0
- package/.agent/skills/ai-artist/rules/_template.md +32 -0
- package/.agent/skills/ai-artist/rules/domain-code.md +118 -0
- package/.agent/skills/ai-artist/rules/domain-marketing.md +105 -0
- package/.agent/skills/ai-artist/rules/engineering-spec.md +519 -0
- package/.agent/skills/ai-artist/rules/image-prompts.md +195 -0
- package/.agent/skills/ai-artist/rules/model-syntax.md +115 -0
- package/.agent/skills/ai-artist/scripts/prompt_compiler.ts +72 -0
- package/.agent/skills/ai-artist/templates/image-core.txt +1 -0
- package/.agent/skills/ai-artist/templates/llm-core.txt +6 -0
- package/.agent/skills/api-architect/AGENTS.md +1896 -0
- package/.agent/skills/api-architect/SKILL.md +173 -0
- package/.agent/skills/api-architect/rules/_sections.md +35 -0
- package/.agent/skills/api-architect/rules/_template.md +32 -0
- package/.agent/skills/api-architect/rules/api-style.md +115 -0
- package/.agent/skills/api-architect/rules/auth.md +134 -0
- package/.agent/skills/api-architect/rules/documentation.md +131 -0
- package/.agent/skills/api-architect/rules/engineering-spec.md +505 -0
- package/.agent/skills/api-architect/rules/graphql.md +154 -0
- package/.agent/skills/api-architect/rules/rate-limiting.md +76 -0
- package/.agent/skills/api-architect/rules/response.md +138 -0
- package/.agent/skills/api-architect/rules/rest.md +113 -0
- package/.agent/skills/api-architect/rules/security-testing.md +146 -0
- package/.agent/skills/api-architect/rules/trpc.md +129 -0
- package/.agent/skills/api-architect/rules/versioning.md +100 -0
- package/.agent/skills/api-architect/scripts/api_validator.ts +413 -0
- package/.agent/skills/auth-patterns/AGENTS.md +1830 -0
- package/.agent/skills/auth-patterns/SKILL.md +163 -0
- package/.agent/skills/auth-patterns/rules/_sections.md +30 -0
- package/.agent/skills/auth-patterns/rules/_template.md +32 -0
- package/.agent/skills/auth-patterns/rules/engineering-spec.md +515 -0
- package/.agent/skills/auth-patterns/rules/jwt-deep.md +196 -0
- package/.agent/skills/auth-patterns/rules/mfa.md +174 -0
- package/.agent/skills/auth-patterns/rules/oauth2.md +134 -0
- package/.agent/skills/auth-patterns/rules/passkey.md +243 -0
- package/.agent/skills/auth-patterns/rules/rbac-abac.md +206 -0
- package/.agent/skills/auth-patterns/rules/session.md +183 -0
- package/.agent/skills/auth-patterns/scripts/auth_validator.ts +121 -0
- package/.agent/skills/chrome-devtools/AGENTS.md +952 -0
- package/.agent/skills/chrome-devtools/SKILL.md +160 -0
- package/.agent/skills/chrome-devtools/rules/_sections.md +25 -0
- package/.agent/skills/chrome-devtools/rules/_template.md +32 -0
- package/.agent/skills/chrome-devtools/rules/aria-snapshot.md +95 -0
- package/.agent/skills/chrome-devtools/rules/engineering-spec.md +510 -0
- package/.agent/skills/chrome-devtools/rules/scripts-guide.md +174 -0
- package/.agent/skills/chrome-devtools/scripts/aria-snapshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/click.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/console.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/core_cli.ts +79 -0
- package/.agent/skills/chrome-devtools/scripts/evaluate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/fill.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/navigate.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/network.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/performance.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/screenshot.ts +3 -0
- package/.agent/skills/chrome-devtools/scripts/select-ref.ts +3 -0
- package/.agent/skills/cicd-pipeline/AGENTS.md +809 -0
- package/.agent/skills/cicd-pipeline/SKILL.md +164 -0
- package/.agent/skills/cicd-pipeline/rules/_sections.md +15 -0
- package/.agent/skills/cicd-pipeline/rules/_template.md +32 -0
- package/.agent/skills/cicd-pipeline/rules/engineering-spec.md +477 -0
- package/.agent/skills/cicd-pipeline/scripts/flag-manager.ts +253 -0
- package/.agent/skills/cicd-pipeline/scripts/pipeline_validator.ts +133 -0
- package/.agent/skills/code-constitution/AGENTS.md +597 -0
- package/.agent/skills/code-constitution/CHANGELOG.md +216 -0
- package/.agent/skills/code-constitution/SKILL.md +191 -0
- package/.agent/skills/code-constitution/VERSION +3 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/after.tsx +59 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/before.tsx +42 -0
- package/.agent/skills/code-constitution/examples/violation-backend-mutation/explanation.md +91 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/after.tsx +99 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/before.tsx +57 -0
- package/.agent/skills/code-constitution/examples/violation-chart-injection/explanation.md +120 -0
- package/.agent/skills/code-constitution/knowledge/lessons-learned.yaml +3 -0
- package/.agent/skills/code-constitution/metadata/precedence.yaml +117 -0
- package/.agent/skills/code-constitution/metadata/scope-map.yaml +156 -0
- package/.agent/skills/code-constitution/proposals/v1.1-change-proposal-template.md +201 -0
- package/.agent/skills/code-constitution/resources/AUTHORITY_MODEL.md +115 -0
- package/.agent/skills/code-constitution/resources/ENFORCEMENT_GUIDE.md +246 -0
- package/.agent/skills/code-constitution/resources/LOAD_ORDER.md +86 -0
- package/.agent/skills/code-constitution/rules/_sections.md +15 -0
- package/.agent/skills/code-constitution/rules/_template.md +32 -0
- package/.agent/skills/code-constitution/rules/constitution/master-constitution.md +210 -0
- package/.agent/skills/code-constitution/rules/doctrines/architecture/architecture-doctrine.md +188 -0
- package/.agent/skills/code-constitution/rules/doctrines/backend/backend-data-engine-doctrine.md +218 -0
- package/.agent/skills/code-constitution/rules/doctrines/commercial/commercial-guardrails-doctrine.md +196 -0
- package/.agent/skills/code-constitution/rules/doctrines/data/data-integrity-doctrine.md +202 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/frontend-mobile-doctrine.md +169 -0
- package/.agent/skills/code-constitution/rules/doctrines/frontend/interaction-patterns-doctrine.md +176 -0
- package/.agent/skills/code-constitution/rules/doctrines/learning/learning-engine-doctrine.md +192 -0
- package/.agent/skills/code-constitution/rules/doctrines/performance/performance-doctrine.md +180 -0
- package/.agent/skills/code-constitution/rules/doctrines/review/code-review-doctrine.md +174 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-enforcement-protocol.md +218 -0
- package/.agent/skills/code-constitution/rules/enforcement/agents/agent-system-prompt.md +196 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/backend-api-review-checklist.md +131 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/chart-component-review-checklist.md +147 -0
- package/.agent/skills/code-constitution/rules/enforcement/checklists/frontend-review-checklist.md +194 -0
- package/.agent/skills/code-constitution/rules/enforcement/playbooks/doctrine-violation-playbook.md +236 -0
- package/.agent/skills/code-constitution/rules/engineering-spec.md +561 -0
- package/.agent/skills/code-constitution/scripts/audit_pr.ts +219 -0
- package/.agent/skills/code-constitution/scripts/check_boundaries.ts +134 -0
- package/.agent/skills/code-constitution/scripts/learn.ts +202 -0
- package/.agent/skills/code-constitution/scripts/validate_doctrine.ts +287 -0
- package/.agent/skills/code-craft/AGENTS.md +803 -0
- package/.agent/skills/code-craft/SKILL.md +170 -0
- package/.agent/skills/code-craft/rules/_sections.md +20 -0
- package/.agent/skills/code-craft/rules/_template.md +32 -0
- package/.agent/skills/code-craft/rules/engineering-spec.md +447 -0
- package/.agent/skills/code-craft/rules/verification-scripts.md +83 -0
- package/.agent/skills/code-craft/scripts/code_quality_checker.ts +193 -0
- package/.agent/skills/code-review/AGENTS.md +1664 -0
- package/.agent/skills/code-review/SKILL.md +152 -0
- package/.agent/skills/code-review/rules/_sections.md +15 -0
- package/.agent/skills/code-review/rules/_template.md +32 -0
- package/.agent/skills/code-review/rules/engineering-spec.md +466 -0
- package/.agent/skills/code-review/scripts/lint_runner.ts +213 -0
- package/.agent/skills/code-review/scripts/type_coverage.ts +118 -0
- package/.agent/skills/context-engineering/AGENTS.md +499 -0
- package/.agent/skills/context-engineering/SKILL.md +147 -0
- package/.agent/skills/context-engineering/rules/_sections.md +15 -0
- package/.agent/skills/context-engineering/rules/_template.md +32 -0
- package/.agent/skills/context-engineering/rules/engineering-spec.md +463 -0
- package/.agent/skills/context-engineering/scripts/context_analyzer.ts +127 -0
- package/.agent/skills/copywriting/AGENTS.md +501 -0
- package/.agent/skills/copywriting/SKILL.md +188 -0
- package/.agent/skills/copywriting/rules/_sections.md +15 -0
- package/.agent/skills/copywriting/rules/_template.md +32 -0
- package/.agent/skills/copywriting/rules/engineering-spec.md +465 -0
- package/.agent/skills/copywriting/scripts/copy_validator.ts +185 -0
- package/.agent/skills/data-modeler/AGENTS.md +814 -0
- package/.agent/skills/data-modeler/SKILL.md +195 -0
- package/.agent/skills/data-modeler/rules/_sections.md +15 -0
- package/.agent/skills/data-modeler/rules/_template.md +32 -0
- package/.agent/skills/data-modeler/rules/database-selection.md +124 -0
- package/.agent/skills/data-modeler/rules/engineering-spec.md +479 -0
- package/.agent/skills/data-modeler/rules/indexing.md +166 -0
- package/.agent/skills/data-modeler/rules/migrations.md +176 -0
- package/.agent/skills/data-modeler/rules/optimization.md +161 -0
- package/.agent/skills/data-modeler/rules/orm-selection.md +155 -0
- package/.agent/skills/data-modeler/rules/schema-design.md +162 -0
- package/.agent/skills/data-modeler/scripts/schema_validator.ts +357 -0
- package/.agent/skills/debug-pro/AGENTS.md +798 -0
- package/.agent/skills/debug-pro/SKILL.md +193 -0
- package/.agent/skills/debug-pro/defense-in-depth/SKILL.md +148 -0
- package/.agent/skills/debug-pro/root-cause-tracing/SKILL.md +196 -0
- package/.agent/skills/debug-pro/root-cause-tracing/find-polluter.sh +63 -0
- package/.agent/skills/debug-pro/rules/_sections.md +15 -0
- package/.agent/skills/debug-pro/rules/_template.md +32 -0
- package/.agent/skills/debug-pro/rules/engineering-spec.md +491 -0
- package/.agent/skills/debug-pro/scripts/debug_verifier.ts +148 -0
- package/.agent/skills/debug-pro/verification-before-completion/SKILL.md +160 -0
- package/.agent/skills/design-system/AGENTS.md +4216 -0
- package/.agent/skills/design-system/SKILL.md +186 -0
- package/.agent/skills/design-system/rules/_sections.md +65 -0
- package/.agent/skills/design-system/rules/_template.md +32 -0
- package/.agent/skills/design-system/rules/animation-guide.md +355 -0
- package/.agent/skills/design-system/rules/color-system.md +335 -0
- package/.agent/skills/design-system/rules/color-systems.md +133 -0
- package/.agent/skills/design-system/rules/decision-trees.md +442 -0
- package/.agent/skills/design-system/rules/design-extraction.md +152 -0
- package/.agent/skills/design-system/rules/engineering-spec.md +484 -0
- package/.agent/skills/design-system/rules/motion-design.md +161 -0
- package/.agent/skills/design-system/rules/motion-graphics.md +330 -0
- package/.agent/skills/design-system/rules/spatial-composition.md +184 -0
- package/.agent/skills/design-system/rules/typography-system.md +369 -0
- package/.agent/skills/design-system/rules/typography.md +124 -0
- package/.agent/skills/design-system/rules/ux-psychology.md +565 -0
- package/.agent/skills/design-system/rules/visual-effects.md +407 -0
- package/.agent/skills/design-system/scripts/accessibility_checker.ts +292 -0
- package/.agent/skills/design-system/scripts/ux_audit.ts +356 -0
- package/.agent/skills/doc-templates/AGENTS.md +820 -0
- package/.agent/skills/doc-templates/SKILL.md +260 -0
- package/.agent/skills/doc-templates/rules/_sections.md +20 -0
- package/.agent/skills/doc-templates/rules/_template.md +32 -0
- package/.agent/skills/doc-templates/rules/doc.md +355 -0
- package/.agent/skills/doc-templates/rules/engineering-spec.md +422 -0
- package/.agent/skills/doc-templates/scripts/editor-server.ts +162 -0
- package/.agent/skills/doc-templates/scripts/inject_otel.ts +22 -0
- package/.agent/skills/doc-templates/scripts/kanban-server.ts +171 -0
- package/.agent/skills/doc-templates/scripts/markdown-server.ts +185 -0
- package/.agent/skills/e2e-automation/AGENTS.md +882 -0
- package/.agent/skills/e2e-automation/SKILL.md +175 -0
- package/.agent/skills/e2e-automation/rules/_sections.md +20 -0
- package/.agent/skills/e2e-automation/rules/_template.md +32 -0
- package/.agent/skills/e2e-automation/rules/aria-snapshot.md +185 -0
- package/.agent/skills/e2e-automation/rules/engineering-spec.md +501 -0
- package/.agent/skills/e2e-automation/scripts/playwright_runner.ts +208 -0
- package/.agent/skills/execution-reporter/AGENTS.md +419 -0
- package/.agent/skills/execution-reporter/SKILL.md +152 -0
- package/.agent/skills/execution-reporter/rules/_sections.md +15 -0
- package/.agent/skills/execution-reporter/rules/_template.md +32 -0
- package/.agent/skills/execution-reporter/rules/engineering-spec.md +389 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +140 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +156 -0
- package/.agent/skills/game-development/AGENTS.md +783 -0
- package/.agent/skills/game-development/SKILL.md +178 -0
- package/.agent/skills/game-development/game-art/SKILL.md +207 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +211 -0
- package/.agent/skills/game-development/game-design/SKILL.md +151 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +130 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +154 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +167 -0
- package/.agent/skills/game-development/rules/_sections.md +15 -0
- package/.agent/skills/game-development/rules/_template.md +32 -0
- package/.agent/skills/game-development/rules/engineering-spec.md +480 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +144 -0
- package/.agent/skills/game-development/web-games/SKILL.md +173 -0
- package/.agent/skills/git-workflow/AGENTS.md +554 -0
- package/.agent/skills/git-workflow/SKILL.md +181 -0
- package/.agent/skills/git-workflow/rules/_sections.md +15 -0
- package/.agent/skills/git-workflow/rules/_template.md +32 -0
- package/.agent/skills/git-workflow/rules/engineering-spec.md +518 -0
- package/.agent/skills/gitops/AGENTS.md +921 -0
- package/.agent/skills/gitops/SKILL.md +163 -0
- package/.agent/skills/gitops/rules/_sections.md +25 -0
- package/.agent/skills/gitops/rules/_template.md +32 -0
- package/.agent/skills/gitops/rules/argocd-setup.md +148 -0
- package/.agent/skills/gitops/rules/engineering-spec.md +450 -0
- package/.agent/skills/gitops/rules/sync-policies.md +145 -0
- package/.agent/skills/google-adk-python/AGENTS.md +1054 -0
- package/.agent/skills/google-adk-python/SKILL.md +168 -0
- package/.agent/skills/google-adk-python/rules/_sections.md +25 -0
- package/.agent/skills/google-adk-python/rules/_template.md +32 -0
- package/.agent/skills/google-adk-python/rules/deployment.md +138 -0
- package/.agent/skills/google-adk-python/rules/engineering-spec.md +451 -0
- package/.agent/skills/google-adk-python/rules/multi-agent.md +146 -0
- package/.agent/skills/google-adk-python/rules/tools.md +131 -0
- package/.agent/skills/idea-storm/AGENTS.md +995 -0
- package/.agent/skills/idea-storm/SKILL.md +160 -0
- package/.agent/skills/idea-storm/rules/_sections.md +25 -0
- package/.agent/skills/idea-storm/rules/_template.md +32 -0
- package/.agent/skills/idea-storm/rules/architecture-debate.md +122 -0
- package/.agent/skills/idea-storm/rules/dynamic-questioning.md +374 -0
- package/.agent/skills/idea-storm/rules/engineering-spec.md +466 -0
- package/.agent/skills/knowledge-compiler/SKILL.md +320 -0
- package/.agent/skills/knowledge-graph/AGENTS.md +762 -0
- package/.agent/skills/knowledge-graph/SKILL.md +157 -0
- package/.agent/skills/knowledge-graph/rules/_sections.md +15 -0
- package/.agent/skills/knowledge-graph/rules/_template.md +32 -0
- package/.agent/skills/knowledge-graph/rules/engineering-spec.md +439 -0
- package/.agent/skills/knowledge-linter/SKILL.md +217 -0
- package/.agent/skills/lifecycle-orchestrator/AGENTS.md +989 -0
- package/.agent/skills/lifecycle-orchestrator/SKILL.md +169 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_sections.md +15 -0
- package/.agent/skills/lifecycle-orchestrator/rules/_template.md +32 -0
- package/.agent/skills/lifecycle-orchestrator/rules/engineering-spec.md +525 -0
- package/.agent/skills/lifecycle-orchestrator/scripts/state_manager.ts +189 -0
- package/.agent/skills/mcp-builder/AGENTS.md +1653 -0
- package/.agent/skills/mcp-builder/SKILL.md +166 -0
- package/.agent/skills/mcp-builder/rules/_sections.md +40 -0
- package/.agent/skills/mcp-builder/rules/_template.md +32 -0
- package/.agent/skills/mcp-builder/rules/best-practices.md +157 -0
- package/.agent/skills/mcp-builder/rules/design-principles.md +105 -0
- package/.agent/skills/mcp-builder/rules/engineering-spec.md +473 -0
- package/.agent/skills/mcp-builder/rules/evaluation.md +103 -0
- package/.agent/skills/mcp-builder/rules/python-implementation.md +249 -0
- package/.agent/skills/mcp-builder/rules/quickstart.md +111 -0
- package/.agent/skills/mcp-builder/rules/typescript-implementation.md +280 -0
- package/.agent/skills/mcp-management/AGENTS.md +837 -0
- package/.agent/skills/mcp-management/SKILL.md +164 -0
- package/.agent/skills/mcp-management/rules/_sections.md +25 -0
- package/.agent/skills/mcp-management/rules/_template.md +32 -0
- package/.agent/skills/mcp-management/rules/cli-usage.md +146 -0
- package/.agent/skills/mcp-management/rules/engineering-spec.md +501 -0
- package/.agent/skills/mcp-management/rules/protocol.md +159 -0
- package/.agent/skills/media-processing/AGENTS.md +479 -0
- package/.agent/skills/media-processing/SKILL.md +176 -0
- package/.agent/skills/media-processing/rules/_sections.md +15 -0
- package/.agent/skills/media-processing/rules/_template.md +32 -0
- package/.agent/skills/media-processing/rules/engineering-spec.md +452 -0
- package/.agent/skills/media-processing/scripts/convert-video.ts +155 -0
- package/.agent/skills/media-processing/scripts/optimize-image.ts +127 -0
- package/.agent/skills/mobile-design/AGENTS.md +6531 -0
- package/.agent/skills/mobile-design/SKILL.md +165 -0
- package/.agent/skills/mobile-design/rules/_sections.md +45 -0
- package/.agent/skills/mobile-design/rules/_template.md +32 -0
- package/.agent/skills/mobile-design/rules/decision-trees.md +540 -0
- package/.agent/skills/mobile-design/rules/engineering-spec.md +467 -0
- package/.agent/skills/mobile-design/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-design/rules/mobile-color-system.md +436 -0
- package/.agent/skills/mobile-design/rules/mobile-debugging.md +146 -0
- package/.agent/skills/mobile-design/rules/mobile-design-thinking.md +381 -0
- package/.agent/skills/mobile-design/rules/mobile-navigation.md +474 -0
- package/.agent/skills/mobile-design/rules/mobile-performance.md +783 -0
- package/.agent/skills/mobile-design/rules/mobile-testing.md +380 -0
- package/.agent/skills/mobile-design/rules/mobile-typography.md +449 -0
- package/.agent/skills/mobile-design/rules/platform-android.md +682 -0
- package/.agent/skills/mobile-design/rules/platform-ios.md +577 -0
- package/.agent/skills/mobile-design/rules/touch-psychology.md +553 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.ts +309 -0
- package/.agent/skills/mobile-developer/AGENTS.md +904 -0
- package/.agent/skills/mobile-developer/SKILL.md +194 -0
- package/.agent/skills/mobile-developer/rules/_sections.md +75 -0
- package/.agent/skills/mobile-developer/rules/_template.md +32 -0
- package/.agent/skills/mobile-developer/rules/anti-patterns.md +70 -0
- package/.agent/skills/mobile-developer/rules/app-store-optimization.md +319 -0
- package/.agent/skills/mobile-developer/rules/decision-trees.md +545 -0
- package/.agent/skills/mobile-developer/rules/deep-linking.md +441 -0
- package/.agent/skills/mobile-developer/rules/engineering-spec.md +477 -0
- package/.agent/skills/mobile-developer/rules/flutter.md +475 -0
- package/.agent/skills/mobile-developer/rules/mobile-backend.md +516 -0
- package/.agent/skills/mobile-developer/rules/mobile-color-system.md +444 -0
- package/.agent/skills/mobile-developer/rules/mobile-debugging.md +428 -0
- package/.agent/skills/mobile-developer/rules/mobile-design-thinking.md +367 -0
- package/.agent/skills/mobile-developer/rules/mobile-navigation.md +483 -0
- package/.agent/skills/mobile-developer/rules/mobile-performance.md +778 -0
- package/.agent/skills/mobile-developer/rules/mobile-testing.md +382 -0
- package/.agent/skills/mobile-developer/rules/mobile-typography.md +457 -0
- package/.agent/skills/mobile-developer/rules/native.md +572 -0
- package/.agent/skills/mobile-developer/rules/platform-android.md +676 -0
- package/.agent/skills/mobile-developer/rules/platform-ios.md +571 -0
- package/.agent/skills/mobile-developer/rules/push-notifications.md +599 -0
- package/.agent/skills/mobile-developer/rules/react-native.md +422 -0
- package/.agent/skills/mobile-developer/rules/touch-psychology.md +547 -0
- package/.agent/skills/mobile-developer/scripts/mobile_audit.ts +701 -0
- package/.agent/skills/nextjs-pro/AGENTS.md +3932 -0
- package/.agent/skills/nextjs-pro/SKILL.md +171 -0
- package/.agent/skills/nextjs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nextjs-pro/rules/_template.md +32 -0
- package/.agent/skills/nextjs-pro/rules/advanced-event-handler-refs.md +59 -0
- package/.agent/skills/nextjs-pro/rules/advanced-init-once.md +46 -0
- package/.agent/skills/nextjs-pro/rules/advanced-use-latest.md +43 -0
- package/.agent/skills/nextjs-pro/rules/async-api-routes.md +42 -0
- package/.agent/skills/nextjs-pro/rules/async-defer-await.md +84 -0
- package/.agent/skills/nextjs-pro/rules/async-dependencies.md +55 -0
- package/.agent/skills/nextjs-pro/rules/async-parallel.md +32 -0
- package/.agent/skills/nextjs-pro/rules/async-suspense-boundaries.md +103 -0
- package/.agent/skills/nextjs-pro/rules/bundle-barrel-imports.md +63 -0
- package/.agent/skills/nextjs-pro/rules/bundle-conditional.md +35 -0
- package/.agent/skills/nextjs-pro/rules/bundle-defer-third-party.md +53 -0
- package/.agent/skills/nextjs-pro/rules/bundle-dynamic-imports.md +39 -0
- package/.agent/skills/nextjs-pro/rules/bundle-preload.md +54 -0
- package/.agent/skills/nextjs-pro/rules/client-event-listeners.md +78 -0
- package/.agent/skills/nextjs-pro/rules/client-localstorage-schema.md +75 -0
- package/.agent/skills/nextjs-pro/rules/client-passive-event-listeners.md +52 -0
- package/.agent/skills/nextjs-pro/rules/client-swr-dedup.md +60 -0
- package/.agent/skills/nextjs-pro/rules/engineering-spec.md +440 -0
- package/.agent/skills/nextjs-pro/rules/js-batch-dom-css.md +111 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-function-results.md +84 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-property-access.md +32 -0
- package/.agent/skills/nextjs-pro/rules/js-cache-storage.md +74 -0
- package/.agent/skills/nextjs-pro/rules/js-combine-iterations.md +36 -0
- package/.agent/skills/nextjs-pro/rules/js-early-exit.md +54 -0
- package/.agent/skills/nextjs-pro/rules/js-hoist-regexp.md +49 -0
- package/.agent/skills/nextjs-pro/rules/js-index-maps.md +41 -0
- package/.agent/skills/nextjs-pro/rules/js-length-check-first.md +53 -0
- package/.agent/skills/nextjs-pro/rules/js-min-max-loop.md +86 -0
- package/.agent/skills/nextjs-pro/rules/js-set-map-lookups.md +28 -0
- package/.agent/skills/nextjs-pro/rules/js-tosorted-immutable.md +61 -0
- package/.agent/skills/nextjs-pro/rules/rendering-activity.md +30 -0
- package/.agent/skills/nextjs-pro/rules/rendering-animate-svg-wrapper.md +51 -0
- package/.agent/skills/nextjs-pro/rules/rendering-conditional-render.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rendering-content-visibility.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hoist-jsx.md +50 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-no-flicker.md +86 -0
- package/.agent/skills/nextjs-pro/rules/rendering-hydration-suppress-warning.md +34 -0
- package/.agent/skills/nextjs-pro/rules/rendering-svg-precision.md +32 -0
- package/.agent/skills/nextjs-pro/rules/rendering-usetransition-loading.md +79 -0
- package/.agent/skills/nextjs-pro/rules/rerender-defer-reads.md +43 -0
- package/.agent/skills/nextjs-pro/rules/rerender-dependencies.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state-no-effect.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-derived-state.md +33 -0
- package/.agent/skills/nextjs-pro/rules/rerender-functional-setstate.md +78 -0
- package/.agent/skills/nextjs-pro/rules/rerender-lazy-state-init.md +62 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo-with-default-value.md +42 -0
- package/.agent/skills/nextjs-pro/rules/rerender-memo.md +48 -0
- package/.agent/skills/nextjs-pro/rules/rerender-move-effect-to-event.md +49 -0
- package/.agent/skills/nextjs-pro/rules/rerender-simple-expression-in-memo.md +39 -0
- package/.agent/skills/nextjs-pro/rules/rerender-transitions.md +44 -0
- package/.agent/skills/nextjs-pro/rules/rerender-use-ref-transient-values.md +77 -0
- package/.agent/skills/nextjs-pro/rules/schema.json +34 -0
- package/.agent/skills/nextjs-pro/rules/server-after-nonblocking.md +77 -0
- package/.agent/skills/nextjs-pro/rules/server-auth-actions.md +100 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-lru.md +45 -0
- package/.agent/skills/nextjs-pro/rules/server-cache-react.md +80 -0
- package/.agent/skills/nextjs-pro/rules/server-dedup-props.md +69 -0
- package/.agent/skills/nextjs-pro/rules/server-parallel-fetching.md +87 -0
- package/.agent/skills/nextjs-pro/rules/server-serialization.md +42 -0
- package/.agent/skills/nodejs-pro/AGENTS.md +866 -0
- package/.agent/skills/nodejs-pro/SKILL.md +172 -0
- package/.agent/skills/nodejs-pro/rules/_sections.md +50 -0
- package/.agent/skills/nodejs-pro/rules/_template.md +32 -0
- package/.agent/skills/nodejs-pro/rules/architecture-patterns.md +229 -0
- package/.agent/skills/nodejs-pro/rules/async-patterns.md +246 -0
- package/.agent/skills/nodejs-pro/rules/engineering-spec.md +438 -0
- package/.agent/skills/nodejs-pro/rules/error-handling.md +257 -0
- package/.agent/skills/nodejs-pro/rules/framework-selection.md +220 -0
- package/.agent/skills/nodejs-pro/rules/runtime-modules.md +176 -0
- package/.agent/skills/nodejs-pro/rules/testing-strategy.md +266 -0
- package/.agent/skills/nodejs-pro/rules/validation-security.md +205 -0
- package/.agent/skills/observability/AGENTS.md +607 -0
- package/.agent/skills/observability/SKILL.md +178 -0
- package/.agent/skills/observability/rules/_sections.md +15 -0
- package/.agent/skills/observability/rules/_template.md +32 -0
- package/.agent/skills/observability/rules/engineering-spec.md +440 -0
- package/.agent/skills/offensive-sec/AGENTS.md +849 -0
- package/.agent/skills/offensive-sec/SKILL.md +191 -0
- package/.agent/skills/offensive-sec/rules/_sections.md +15 -0
- package/.agent/skills/offensive-sec/rules/_template.md +32 -0
- package/.agent/skills/offensive-sec/rules/engineering-spec.md +470 -0
- package/.agent/skills/perf-optimizer/AGENTS.md +870 -0
- package/.agent/skills/perf-optimizer/SKILL.md +189 -0
- package/.agent/skills/perf-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/perf-optimizer/rules/_template.md +32 -0
- package/.agent/skills/perf-optimizer/rules/backend-patterns.md +312 -0
- package/.agent/skills/perf-optimizer/rules/engineering-spec.md +428 -0
- package/.agent/skills/perf-optimizer/scripts/lighthouse_audit.ts +201 -0
- package/.agent/skills/problem-checker/AGENTS.md +519 -0
- package/.agent/skills/problem-checker/SKILL.md +189 -0
- package/.agent/skills/problem-checker/rules/_sections.md +15 -0
- package/.agent/skills/problem-checker/rules/_template.md +32 -0
- package/.agent/skills/problem-checker/rules/engineering-spec.md +483 -0
- package/.agent/skills/problem-checker/scripts/check_problems.ts +396 -0
- package/.agent/skills/project-planner/AGENTS.md +2698 -0
- package/.agent/skills/project-planner/SKILL.md +166 -0
- package/.agent/skills/project-planner/rules/_sections.md +15 -0
- package/.agent/skills/project-planner/rules/_template.md +32 -0
- package/.agent/skills/project-planner/rules/engineering-spec.md +420 -0
- package/.agent/skills/python-pro/AGENTS.md +1871 -0
- package/.agent/skills/python-pro/SKILL.md +182 -0
- package/.agent/skills/python-pro/rules/_sections.md +50 -0
- package/.agent/skills/python-pro/rules/_template.md +32 -0
- package/.agent/skills/python-pro/rules/async-patterns.md +168 -0
- package/.agent/skills/python-pro/rules/django-patterns.md +194 -0
- package/.agent/skills/python-pro/rules/engineering-spec.md +442 -0
- package/.agent/skills/python-pro/rules/fastapi-patterns.md +179 -0
- package/.agent/skills/python-pro/rules/framework-selection.md +167 -0
- package/.agent/skills/python-pro/rules/project-structure.md +181 -0
- package/.agent/skills/python-pro/rules/testing-patterns.md +212 -0
- package/.agent/skills/python-pro/rules/type-hints.md +159 -0
- package/.agent/skills/react-pro/AGENTS.md +963 -0
- package/.agent/skills/react-pro/SKILL.md +232 -0
- package/.agent/skills/react-pro/rules/_sections.md +40 -0
- package/.agent/skills/react-pro/rules/_template.md +32 -0
- package/.agent/skills/react-pro/rules/component-patterns.md +145 -0
- package/.agent/skills/react-pro/rules/composition-compound.md +82 -0
- package/.agent/skills/react-pro/rules/data-fetching.md +133 -0
- package/.agent/skills/react-pro/rules/engineering-spec.md +453 -0
- package/.agent/skills/react-pro/rules/error-boundary.md +61 -0
- package/.agent/skills/react-pro/rules/file-organization.md +158 -0
- package/.agent/skills/react-pro/rules/hooks-custom.md +61 -0
- package/.agent/skills/react-pro/rules/mui-styling.md +138 -0
- package/.agent/skills/react-pro/rules/patterns.md +24 -0
- package/.agent/skills/react-pro/rules/performance-optimization.md +65 -0
- package/.agent/skills/react-pro/rules/performance.md +137 -0
- package/.agent/skills/react-pro/rules/react19-hooks.md +85 -0
- package/.agent/skills/react-pro/rules/state-management.md +90 -0
- package/.agent/skills/react-pro/rules/testing-patterns.md +52 -0
- package/.agent/skills/registry.json +1251 -0
- package/.agent/skills/security-scanner/AGENTS.md +851 -0
- package/.agent/skills/security-scanner/SKILL.md +182 -0
- package/.agent/skills/security-scanner/rules/_sections.md +15 -0
- package/.agent/skills/security-scanner/rules/_template.md +32 -0
- package/.agent/skills/security-scanner/rules/auth-patterns.md +281 -0
- package/.agent/skills/security-scanner/rules/checklists.md +186 -0
- package/.agent/skills/security-scanner/rules/engineering-spec.md +440 -0
- package/.agent/skills/security-scanner/scripts/security_scan.ts +513 -0
- package/.agent/skills/seo-optimizer/AGENTS.md +839 -0
- package/.agent/skills/seo-optimizer/SKILL.md +180 -0
- package/.agent/skills/seo-optimizer/rules/_sections.md +15 -0
- package/.agent/skills/seo-optimizer/rules/_template.md +32 -0
- package/.agent/skills/seo-optimizer/rules/engineering-spec.md +433 -0
- package/.agent/skills/seo-optimizer/scripts/geo_checker.ts +109 -0
- package/.agent/skills/seo-optimizer/scripts/seo_checker.ts +308 -0
- package/.agent/skills/server-ops/AGENTS.md +643 -0
- package/.agent/skills/server-ops/SKILL.md +194 -0
- package/.agent/skills/server-ops/rules/_sections.md +15 -0
- package/.agent/skills/server-ops/rules/_template.md +32 -0
- package/.agent/skills/server-ops/rules/engineering-spec.md +450 -0
- package/.agent/skills/shell-script/AGENTS.md +499 -0
- package/.agent/skills/shell-script/SKILL.md +205 -0
- package/.agent/skills/shell-script/rules/_sections.md +15 -0
- package/.agent/skills/shell-script/rules/_template.md +32 -0
- package/.agent/skills/shell-script/rules/engineering-spec.md +463 -0
- package/.agent/skills/skill-generator/SKILL.md +147 -0
- package/.agent/skills/smart-router/SKILL.md +95 -0
- package/.agent/skills/studio/AGENTS.md +636 -0
- package/.agent/skills/studio/SKILL.md +178 -0
- package/.agent/skills/studio/data/charts.csv +26 -0
- package/.agent/skills/studio/data/colors.csv +97 -0
- package/.agent/skills/studio/data/icons.csv +101 -0
- package/.agent/skills/studio/data/landing.csv +31 -0
- package/.agent/skills/studio/data/products.csv +97 -0
- package/.agent/skills/studio/data/prompts.csv +24 -0
- package/.agent/skills/studio/data/react-performance.csv +45 -0
- package/.agent/skills/studio/data/stacks/flutter.csv +52 -0
- package/.agent/skills/studio/data/stacks/html-tailwind.csv +56 -0
- package/.agent/skills/studio/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/skills/studio/data/stacks/nextjs.csv +53 -0
- package/.agent/skills/studio/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/skills/studio/data/stacks/nuxtjs.csv +59 -0
- package/.agent/skills/studio/data/stacks/react-native.csv +52 -0
- package/.agent/skills/studio/data/stacks/react.csv +54 -0
- package/.agent/skills/studio/data/stacks/shadcn.csv +61 -0
- package/.agent/skills/studio/data/stacks/svelte.csv +54 -0
- package/.agent/skills/studio/data/stacks/swiftui.csv +51 -0
- package/.agent/skills/studio/data/stacks/vue.csv +50 -0
- package/.agent/skills/studio/data/styles.csv +59 -0
- package/.agent/skills/studio/data/typography.csv +58 -0
- package/.agent/skills/studio/data/ui-reasoning.csv +101 -0
- package/.agent/skills/studio/data/ux-guidelines.csv +100 -0
- package/.agent/skills/studio/data/web-interface.csv +31 -0
- package/.agent/skills/studio/rules/_sections.md +15 -0
- package/.agent/skills/studio/rules/_template.md +32 -0
- package/.agent/skills/studio/rules/engineering-spec.md +455 -0
- package/.agent/skills/studio/scripts/core.ts +345 -0
- package/.agent/skills/studio/scripts/design_system.ts +953 -0
- package/.agent/skills/studio/scripts/search.ts +197 -0
- package/.agent/skills/studio/scripts/types.ts +147 -0
- package/.agent/skills/studio/scripts/utils/component-specs.ts +154 -0
- package/.agent/skills/studio/scripts/utils/config-loader.ts +165 -0
- package/.agent/skills/studio/scripts/utils/css-templates.ts +169 -0
- package/.agent/skills/studio/scripts/utils/css-validator.ts +95 -0
- package/.agent/skills/studio/scripts/utils/csv-loader.ts +52 -0
- package/.agent/skills/studio/scripts/utils/intelligent-overrides.ts +129 -0
- package/.agent/skills/studio/scripts/utils/page-override-formatter.ts +143 -0
- package/.agent/skills/studio/scripts/utils/page-type-detector.ts +124 -0
- package/.agent/skills/studio/scripts/utils/search-cache.ts +165 -0
- package/.agent/skills/studio/scripts/utils/text-utils.ts +44 -0
- package/.agent/skills/system-design/AGENTS.md +597 -0
- package/.agent/skills/system-design/SKILL.md +153 -0
- package/.agent/skills/system-design/rules/_sections.md +15 -0
- package/.agent/skills/system-design/rules/_template.md +32 -0
- package/.agent/skills/system-design/rules/context-discovery.md +117 -0
- package/.agent/skills/system-design/rules/engineering-spec.md +437 -0
- package/.agent/skills/system-design/rules/examples.md +180 -0
- package/.agent/skills/system-design/rules/pattern-selection.md +130 -0
- package/.agent/skills/system-design/rules/patterns-reference.md +110 -0
- package/.agent/skills/system-design/rules/trade-off-analysis.md +169 -0
- package/.agent/skills/tailwind-kit/AGENTS.md +1135 -0
- package/.agent/skills/tailwind-kit/SKILL.md +171 -0
- package/.agent/skills/tailwind-kit/rules/_sections.md +20 -0
- package/.agent/skills/tailwind-kit/rules/_template.md +32 -0
- package/.agent/skills/tailwind-kit/rules/components.md +232 -0
- package/.agent/skills/tailwind-kit/rules/engineering-spec.md +435 -0
- package/.agent/skills/tailwind-kit/rules/responsive.md +221 -0
- package/.agent/skills/tailwind-kit/rules/v4-config.md +72 -0
- package/.agent/skills/test-architect/AGENTS.md +851 -0
- package/.agent/skills/test-architect/SKILL.md +176 -0
- package/.agent/skills/test-architect/rules/_sections.md +15 -0
- package/.agent/skills/test-architect/rules/_template.md +32 -0
- package/.agent/skills/test-architect/rules/engineering-spec.md +434 -0
- package/.agent/skills/test-architect/scripts/test_runner.ts +265 -0
- package/.agent/skills/typescript-expert/AGENTS.md +1045 -0
- package/.agent/skills/typescript-expert/SKILL.md +200 -0
- package/.agent/skills/typescript-expert/rules/_sections.md +20 -0
- package/.agent/skills/typescript-expert/rules/_template.md +32 -0
- package/.agent/skills/typescript-expert/rules/engineering-spec.md +433 -0
- package/.agent/skills/typescript-expert/rules/tsconfig-strict.json +92 -0
- package/.agent/skills/typescript-expert/rules/typescript-cheatsheet.md +407 -0
- package/.agent/skills/typescript-expert/rules/utility-types.ts +264 -0
- package/.agent/skills/typescript-expert/scripts/ts_diagnostic.ts +321 -0
- package/.agent/skills/vercel-deploy/AGENTS.md +490 -0
- package/.agent/skills/vercel-deploy/SKILL.md +175 -0
- package/.agent/skills/vercel-deploy/rules/_sections.md +15 -0
- package/.agent/skills/vercel-deploy/rules/_template.md +32 -0
- package/.agent/skills/vercel-deploy/rules/engineering-spec.md +463 -0
- package/.agent/skills/vercel-deploy/scripts/deploy.sh +310 -0
- package/.agent/workflows/api.md +377 -0
- package/.agent/workflows/autopilot.md +344 -0
- package/.agent/workflows/build.md +338 -0
- package/.agent/workflows/chronicle.md +279 -0
- package/.agent/workflows/cook.md +217 -0
- package/.agent/workflows/diagnose.md +302 -0
- package/.agent/workflows/fix.md +253 -0
- package/.agent/workflows/game.md +329 -0
- package/.agent/workflows/inspect.md +276 -0
- package/.agent/workflows/knowledge.md +212 -0
- package/.agent/workflows/launch.md +345 -0
- package/.agent/workflows/mobile.md +354 -0
- package/.agent/workflows/monitor.md +239 -0
- package/.agent/workflows/optimize.md +269 -0
- package/.agent/workflows/plan.md +278 -0
- package/.agent/workflows/stage.md +286 -0
- package/.agent/workflows/studio.md +276 -0
- package/.agent/workflows/think.md +262 -0
- package/.agent/workflows/validate.md +289 -0
- package/.agentignore +161 -0
- package/.gitattributes +16 -0
- package/CHANGELOG.md +198 -0
- package/LICENSE +40 -0
- package/README.md +173 -0
- package/docs/SKILL_DESIGN_GUIDE.md +561 -0
- package/docs/The-Complete-Guide-to-Building-Skills-for-Claude.md +1207 -0
- package/docs/WORKFLOW_DESIGN_GUIDE.md +325 -0
- package/package.json +33 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: python-pro
|
|
3
|
+
description: >-
|
|
4
|
+
Python development with FastAPI, Django, or Flask. Async patterns, type hints, project structure.
|
|
5
|
+
Use when building Python backends, scripts, or choosing Python frameworks.
|
|
6
|
+
NOT for Node.js projects (use nodejs-pro) or general AI agents (use google-adk-python).
|
|
7
|
+
category: backend-specialist
|
|
8
|
+
triggers: ["Python", "pip", "FastAPI", "Django", "Flask"]
|
|
9
|
+
coordinates_with: ["api-architect", "test-architect", "data-modeler", "problem-checker", "knowledge-compiler"]
|
|
10
|
+
success_metrics: ["Correct Framework Selection", "Type Hint Coverage"]
|
|
11
|
+
metadata:
|
|
12
|
+
author: pikakit
|
|
13
|
+
version: "3.9.134"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Python Pro — Framework Selection & Architecture
|
|
17
|
+
|
|
18
|
+
> Decision-making principles. Not patterns to copy. Ask, classify, decide.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 5 Must-Ask Questions (Before Decision)
|
|
23
|
+
|
|
24
|
+
| # | Question | Options |
|
|
25
|
+
|---|----------|---------|
|
|
26
|
+
| 1 | Target Scope? | Single Script / API / Full-Stack / Workers |
|
|
27
|
+
| 2 | Project Scale? | MVP / Production / FAANG Scale |
|
|
28
|
+
| 3 | Current Framework? | Green field vs Legacy modification? |
|
|
29
|
+
| 4 | Async Requirements? | High I/O throughput vs CPU heavy? |
|
|
30
|
+
| 5 | DB Dependencies? | Relational vs NoSQL, Async DB drivers? |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## When to Use
|
|
35
|
+
|
|
36
|
+
| Situation | Approach |
|
|
37
|
+
|-----------|----------|
|
|
38
|
+
| Choosing Python framework | Use decision tree |
|
|
39
|
+
| API-first / microservices | Consider FastAPI |
|
|
40
|
+
| Full-stack web / CMS | Consider Django |
|
|
41
|
+
| Async vs sync decision | Check I/O vs CPU classification |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## System Boundaries
|
|
46
|
+
|
|
47
|
+
| Owned by This Skill | NOT Owned |
|
|
48
|
+
|---------------------|-----------|
|
|
49
|
+
| Framework selection (5 branches) | API design (→ api-architect) |
|
|
50
|
+
| Async/sync classification | Testing strategy (→ test-architect) |
|
|
51
|
+
| Type hint rules | Database schema (→ data-modeler) |
|
|
52
|
+
| Architecture layering | Code implementation |
|
|
53
|
+
|
|
54
|
+
**Expert decision skill:** Produces recommendations. Does not write code.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Framework Decision Tree (Deterministic)
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
What are you building?
|
|
62
|
+
│
|
|
63
|
+
├── API-first / Microservices → FastAPI
|
|
64
|
+
├── Full-stack web / CMS → Django
|
|
65
|
+
├── Simple / Script / Learning → Flask
|
|
66
|
+
├── AI/ML API serving → FastAPI
|
|
67
|
+
└── Background workers → Celery + any
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**If user has explicit preference → respect it.** Ask when unclear.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Async vs Sync (Deterministic)
|
|
75
|
+
|
|
76
|
+
| Workload | Decision | Rationale |
|
|
77
|
+
|----------|----------|-----------|
|
|
78
|
+
| I/O-bound (HTTP, DB, file) | `async` | Waiting for external |
|
|
79
|
+
| CPU-bound (compute) | `sync` + multiprocessing | Number crunching |
|
|
80
|
+
| Mixed | Async with sync offload | `run_in_executor` |
|
|
81
|
+
|
|
82
|
+
**Constraints:** Never use sync libraries in async code. Never force async for CPU work.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Architecture Layering (Fixed)
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Routes (HTTP handlers)
|
|
90
|
+
└→ Services (business logic)
|
|
91
|
+
└→ Repositories (data access)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Rule:** No business logic in routes/views. Routes delegate to services.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Type Hints & Validation (Mandatory)
|
|
99
|
+
|
|
100
|
+
| Rule | Scope |
|
|
101
|
+
|------|-------|
|
|
102
|
+
| Type hints on all public APIs | Functions, methods, return types |
|
|
103
|
+
| Pydantic for validation | All input/output boundaries |
|
|
104
|
+
| No `Any` in public signatures | Use specific types or generics |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Decision Checklist
|
|
109
|
+
|
|
110
|
+
- [ ] Asked user about framework preference?
|
|
111
|
+
- [ ] Chosen framework for THIS context?
|
|
112
|
+
- [ ] Decided async vs sync?
|
|
113
|
+
- [ ] Planned type hint strategy?
|
|
114
|
+
- [ ] Defined project structure?
|
|
115
|
+
- [ ] Considered background tasks (Celery)?
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Error Taxonomy
|
|
120
|
+
|
|
121
|
+
| Code | Recoverable | Trigger |
|
|
122
|
+
|------|-------------|---------|
|
|
123
|
+
| `ERR_INVALID_REQUEST_TYPE` | No | Request type not supported |
|
|
124
|
+
| `ERR_UNKNOWN_PROJECT_TYPE` | Yes | Project type not one of 5 |
|
|
125
|
+
| `ERR_UNKNOWN_FRAMEWORK` | Yes | Framework not fastapi/django/flask |
|
|
126
|
+
|
|
127
|
+
**Zero internal retries.** Same context = same recommendation.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Audit Logging (OpenTelemetry)
|
|
132
|
+
|
|
133
|
+
| Event | Metadata Payload | Severity |
|
|
134
|
+
|-------|------------------|----------|
|
|
135
|
+
| `decision_started` | `{"project_type": "...", "scale": "..."}` | `INFO` |
|
|
136
|
+
| `framework_selected` | `{"framework": "fastapi", "rationale": "..."}` | `INFO` |
|
|
137
|
+
| `async_sync_classified` | `{"mode": "async", "mix_workload": false}` | `WARN` |
|
|
138
|
+
| `arch_recommendation_provided` | `{"layer_complexity": "high"}` | `INFO` |
|
|
139
|
+
|
|
140
|
+
All architectural decision outputs MUST emit a `decision_started` and `arch_recommendation_provided` event.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Anti-Patterns
|
|
145
|
+
|
|
146
|
+
| ❌ Don't | ✅ Do |
|
|
147
|
+
|---------|-------|
|
|
148
|
+
| Default to Django for simple APIs | Choose framework per context |
|
|
149
|
+
| Use sync libraries in async code | Use async-compatible libraries |
|
|
150
|
+
| Skip type hints on public APIs | Annotate all public functions |
|
|
151
|
+
| Put business logic in routes/views | Separate: routes → services → repos |
|
|
152
|
+
| Always pick the same framework | Ask user, evaluate context |
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
## 📑 Content Map
|
|
156
|
+
|
|
157
|
+
| File | Description | When to Read |
|
|
158
|
+
|------|-------------|--------------|
|
|
159
|
+
| [framework-selection.md](rules/framework-selection.md) | Framework comparison | Choosing framework |
|
|
160
|
+
| [async-patterns.md](rules/async-patterns.md) | Async/sync patterns | Concurrency decisions |
|
|
161
|
+
| [type-hints.md](rules/type-hints.md) | Type annotation rules | Type strategy |
|
|
162
|
+
| [project-structure.md](rules/project-structure.md) | Directory layouts | New project |
|
|
163
|
+
| [fastapi-patterns.md](rules/fastapi-patterns.md) | FastAPI specifics | FastAPI project |
|
|
164
|
+
| [django-patterns.md](rules/django-patterns.md) | Django specifics | Django project |
|
|
165
|
+
| [testing-patterns.md](rules/testing-patterns.md) | Python testing | Writing tests |
|
|
166
|
+
| [engineering-spec.md](rules/engineering-spec.md) | Full spec | Architecture review |
|
|
167
|
+
|
|
168
|
+
**Selective reading:** Load ONLY the reference file matching your current decision.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 🔗 Related
|
|
173
|
+
|
|
174
|
+
| Item | Type | Purpose |
|
|
175
|
+
|------|------|---------|
|
|
176
|
+
| `api-architect` | Skill | API design |
|
|
177
|
+
| `test-architect` | Skill | Testing |
|
|
178
|
+
| `data-modeler` | Skill | Database |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Sections
|
|
2
|
+
|
|
3
|
+
This file defines all sections, their ordering, impact levels, and descriptions.
|
|
4
|
+
The section ID (in parentheses) is the filename prefix used to group rules.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. Eliminating Waterfalls (async)
|
|
9
|
+
|
|
10
|
+
**Impact:** CRITICAL
|
|
11
|
+
**Description:** Waterfalls are the #1 performance killer. Each sequential await adds full network latency.
|
|
12
|
+
|
|
13
|
+
## 2. Django (django)
|
|
14
|
+
|
|
15
|
+
**Impact:** LOW
|
|
16
|
+
**Description:** Django patterns and best practices.
|
|
17
|
+
|
|
18
|
+
## 3. Engineering Specification (engineering)
|
|
19
|
+
|
|
20
|
+
**Impact:** MEDIUM
|
|
21
|
+
**Description:** Full engineering specification covering contracts, security, and scalability.
|
|
22
|
+
|
|
23
|
+
## 4. Fastapi (fastapi)
|
|
24
|
+
|
|
25
|
+
**Impact:** LOW
|
|
26
|
+
**Description:** Fastapi patterns and best practices.
|
|
27
|
+
|
|
28
|
+
## 5. Framework (framework)
|
|
29
|
+
|
|
30
|
+
**Impact:** LOW
|
|
31
|
+
**Description:** Framework patterns and best practices.
|
|
32
|
+
|
|
33
|
+
## 6. Project (project)
|
|
34
|
+
|
|
35
|
+
**Impact:** LOW
|
|
36
|
+
**Description:** Project patterns and best practices.
|
|
37
|
+
|
|
38
|
+
## 7. Testing (testing)
|
|
39
|
+
|
|
40
|
+
**Impact:** LOW
|
|
41
|
+
**Description:** Testing patterns and best practices.
|
|
42
|
+
|
|
43
|
+
## 8. Type (type)
|
|
44
|
+
|
|
45
|
+
**Impact:** LOW
|
|
46
|
+
**Description:** Type patterns and best practices.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Rule Title Here
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: Optional description of impact (e.g., "20-50% improvement")
|
|
5
|
+
tags: tag1, tag2
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Rule Title Here
|
|
9
|
+
|
|
10
|
+
**Impact: MEDIUM (optional impact description)**
|
|
11
|
+
|
|
12
|
+
Brief explanation of the rule and why it matters. This should be clear and concise, explaining the performance implications.
|
|
13
|
+
|
|
14
|
+
**Incorrect (description of what's wrong):**
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// Bad code example here
|
|
18
|
+
const bad = example()
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Correct (description of what's right):**
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Good code example here
|
|
25
|
+
const good = example()
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Reference: [Link to documentation or resource](https://example.com)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: async-patterns
|
|
3
|
+
description: Python async patterns — asyncio, gather, TaskGroup, run_in_executor, and async library selection
|
|
4
|
+
title: "Python Async Patterns"
|
|
5
|
+
impact: CRITICAL
|
|
6
|
+
impactDescription: "Significant performance or security impact"
|
|
7
|
+
tags: async, patterns
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Python Async Patterns
|
|
11
|
+
|
|
12
|
+
> I/O-bound → async. CPU-bound → sync + multiprocessing. Never mix carelessly.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
| Workload | Decision | Example |
|
|
19
|
+
|----------|----------|---------|
|
|
20
|
+
| I/O-bound | `async def` | DB queries, HTTP calls, file I/O |
|
|
21
|
+
| CPU-bound | `def` + multiprocessing | ML inference, image processing |
|
|
22
|
+
| Mixed | Async + `run_in_executor` | Web scraping + parsing |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Core Patterns
|
|
27
|
+
|
|
28
|
+
### Basic Async Function
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
import asyncio
|
|
32
|
+
import httpx
|
|
33
|
+
|
|
34
|
+
async def fetch_user(user_id: int) -> dict:
|
|
35
|
+
async with httpx.AsyncClient() as client:
|
|
36
|
+
response = await client.get(f"https://api.example.com/users/{user_id}")
|
|
37
|
+
response.raise_for_status()
|
|
38
|
+
return response.json()
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Concurrent Execution (asyncio.gather)
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
async def fetch_all_users(user_ids: list[int]) -> list[dict]:
|
|
45
|
+
"""Fetch multiple users concurrently — much faster than sequential."""
|
|
46
|
+
async with httpx.AsyncClient() as client:
|
|
47
|
+
tasks = [
|
|
48
|
+
client.get(f"https://api.example.com/users/{uid}")
|
|
49
|
+
for uid in user_ids
|
|
50
|
+
]
|
|
51
|
+
responses = await asyncio.gather(*tasks, return_exceptions=True)
|
|
52
|
+
|
|
53
|
+
results = []
|
|
54
|
+
for resp in responses:
|
|
55
|
+
if isinstance(resp, Exception):
|
|
56
|
+
continue # Skip failed requests
|
|
57
|
+
results.append(resp.json())
|
|
58
|
+
return results
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### TaskGroup (Python 3.11+, preferred)
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
async def fetch_all_users_v2(user_ids: list[int]) -> list[dict]:
|
|
65
|
+
"""TaskGroup: structured concurrency with automatic cancellation on failure."""
|
|
66
|
+
results: list[dict] = []
|
|
67
|
+
|
|
68
|
+
async with asyncio.TaskGroup() as tg:
|
|
69
|
+
async def fetch_one(uid: int):
|
|
70
|
+
async with httpx.AsyncClient() as client:
|
|
71
|
+
resp = await client.get(f"https://api.example.com/users/{uid}")
|
|
72
|
+
results.append(resp.json())
|
|
73
|
+
|
|
74
|
+
for uid in user_ids:
|
|
75
|
+
tg.create_task(fetch_one(uid))
|
|
76
|
+
|
|
77
|
+
return results
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### CPU-Bound Offload (run_in_executor)
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
import asyncio
|
|
84
|
+
from concurrent.futures import ProcessPoolExecutor
|
|
85
|
+
|
|
86
|
+
# CPU-heavy work runs in separate process
|
|
87
|
+
def compute_hash(data: bytes) -> str:
|
|
88
|
+
import hashlib
|
|
89
|
+
return hashlib.sha256(data).hexdigest()
|
|
90
|
+
|
|
91
|
+
async def process_file(file_path: str) -> str:
|
|
92
|
+
"""Offload CPU work to avoid blocking the event loop."""
|
|
93
|
+
loop = asyncio.get_event_loop()
|
|
94
|
+
data = await asyncio.to_thread(open(file_path, 'rb').read)
|
|
95
|
+
|
|
96
|
+
with ProcessPoolExecutor() as pool:
|
|
97
|
+
result = await loop.run_in_executor(pool, compute_hash, data)
|
|
98
|
+
return result
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Async Library Selection
|
|
104
|
+
|
|
105
|
+
| Need | Sync Library | Async Library |
|
|
106
|
+
|------|-------------|---------------|
|
|
107
|
+
| HTTP client | requests | **httpx** |
|
|
108
|
+
| PostgreSQL | psycopg2 | **asyncpg** / psycopg3 async |
|
|
109
|
+
| MySQL | mysql-connector | **aiomysql** |
|
|
110
|
+
| Redis | redis-py (sync) | **redis-py** (async mode) / aioredis |
|
|
111
|
+
| File I/O | open() | **aiofiles** |
|
|
112
|
+
| ORM | SQLAlchemy sync | **SQLAlchemy 2.0** async / **Tortoise** |
|
|
113
|
+
| MongoDB | pymongo | **motor** |
|
|
114
|
+
| WebSockets | — | **websockets** |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## FastAPI: async def vs def
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
from fastapi import FastAPI
|
|
122
|
+
|
|
123
|
+
app = FastAPI()
|
|
124
|
+
|
|
125
|
+
# ✅ Use async def — for I/O-bound with async drivers
|
|
126
|
+
@app.get("/users/{user_id}")
|
|
127
|
+
async def get_user(user_id: int):
|
|
128
|
+
user = await db.fetch_one("SELECT * FROM users WHERE id = $1", user_id)
|
|
129
|
+
return user
|
|
130
|
+
|
|
131
|
+
# ✅ Use def — for sync operations (FastAPI runs in threadpool automatically)
|
|
132
|
+
@app.get("/report")
|
|
133
|
+
def generate_report():
|
|
134
|
+
# This blocks, but FastAPI handles it in a thread
|
|
135
|
+
return create_pdf_report()
|
|
136
|
+
|
|
137
|
+
# ❌ Don't — use sync DB driver in async def (blocks event loop!)
|
|
138
|
+
@app.get("/bad")
|
|
139
|
+
async def bad_example():
|
|
140
|
+
user = db.execute("SELECT ...") # BLOCKS the entire event loop!
|
|
141
|
+
return user
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Anti-Patterns
|
|
147
|
+
|
|
148
|
+
| ❌ Don't | ✅ Do |
|
|
149
|
+
|---------|-------|
|
|
150
|
+
| Use `requests` in async code | Use `httpx` (async) |
|
|
151
|
+
| `await` CPU-bound functions | Use `run_in_executor` |
|
|
152
|
+
| Sync DB driver in `async def` | Use async driver or `def` |
|
|
153
|
+
| `time.sleep()` in async | `await asyncio.sleep()` |
|
|
154
|
+
| Create event loop inside async | Use `asyncio.get_event_loop()` |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 🔗 Related
|
|
159
|
+
|
|
160
|
+
| File | When to Read |
|
|
161
|
+
|------|-------------|
|
|
162
|
+
| [fastapi-patterns.md](fastapi-patterns.md) | FastAPI async specifics |
|
|
163
|
+
| [framework-selection.md](framework-selection.md) | Framework decision |
|
|
164
|
+
| [testing-patterns.md](testing-patterns.md) | Testing async code |
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: django-patterns
|
|
3
|
+
description: Django patterns — models, views, DRF serializers, async views, query optimization, signals, and migrations
|
|
4
|
+
title: "Django Patterns (2025)"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: django, patterns
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Django Patterns (2025)
|
|
11
|
+
|
|
12
|
+
> Fat models, thin views. Use managers for queries. DRF for APIs.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Model Design
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
from django.db import models
|
|
20
|
+
from django.utils import timezone
|
|
21
|
+
|
|
22
|
+
class UserManager(models.Manager):
|
|
23
|
+
"""Custom manager — encapsulate common queries."""
|
|
24
|
+
def active(self):
|
|
25
|
+
return self.filter(is_active=True)
|
|
26
|
+
|
|
27
|
+
def recently_joined(self, days: int = 7):
|
|
28
|
+
cutoff = timezone.now() - timezone.timedelta(days=days)
|
|
29
|
+
return self.filter(created_at__gte=cutoff, is_active=True)
|
|
30
|
+
|
|
31
|
+
class User(models.Model):
|
|
32
|
+
email = models.EmailField(unique=True)
|
|
33
|
+
name = models.CharField(max_length=100)
|
|
34
|
+
is_active = models.BooleanField(default=True)
|
|
35
|
+
created_at = models.DateTimeField(auto_now_add=True)
|
|
36
|
+
updated_at = models.DateTimeField(auto_now=True)
|
|
37
|
+
|
|
38
|
+
objects = UserManager()
|
|
39
|
+
|
|
40
|
+
class Meta:
|
|
41
|
+
ordering = ["-created_at"]
|
|
42
|
+
indexes = [models.Index(fields=["email"])]
|
|
43
|
+
|
|
44
|
+
def __str__(self) -> str:
|
|
45
|
+
return self.name
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def display_name(self) -> str:
|
|
49
|
+
"""Business logic belongs in model, not views."""
|
|
50
|
+
return self.name or self.email.split("@")[0]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## DRF Serializers
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
from rest_framework import serializers
|
|
59
|
+
|
|
60
|
+
class UserSerializer(serializers.ModelSerializer):
|
|
61
|
+
display_name = serializers.CharField(read_only=True)
|
|
62
|
+
|
|
63
|
+
class Meta:
|
|
64
|
+
model = User
|
|
65
|
+
fields = ["id", "email", "name", "display_name", "created_at"]
|
|
66
|
+
read_only_fields = ["id", "created_at"]
|
|
67
|
+
|
|
68
|
+
class UserCreateSerializer(serializers.ModelSerializer):
|
|
69
|
+
class Meta:
|
|
70
|
+
model = User
|
|
71
|
+
fields = ["email", "name", "password"]
|
|
72
|
+
extra_kwargs = {"password": {"write_only": True}}
|
|
73
|
+
|
|
74
|
+
def create(self, validated_data):
|
|
75
|
+
return User.objects.create_user(**validated_data)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Views / ViewSets
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from rest_framework import viewsets, status
|
|
84
|
+
from rest_framework.decorators import action
|
|
85
|
+
from rest_framework.response import Response
|
|
86
|
+
|
|
87
|
+
class UserViewSet(viewsets.ModelViewSet):
|
|
88
|
+
queryset = User.objects.active()
|
|
89
|
+
serializer_class = UserSerializer
|
|
90
|
+
|
|
91
|
+
def get_serializer_class(self):
|
|
92
|
+
if self.action == "create":
|
|
93
|
+
return UserCreateSerializer
|
|
94
|
+
return UserSerializer
|
|
95
|
+
|
|
96
|
+
@action(detail=False, methods=["get"])
|
|
97
|
+
def recent(self, request):
|
|
98
|
+
"""Custom action: GET /users/recent/"""
|
|
99
|
+
users = User.objects.recently_joined()
|
|
100
|
+
serializer = self.get_serializer(users, many=True)
|
|
101
|
+
return Response(serializer.data)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Django Async Views (5.0+)
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
# Async function-based view
|
|
110
|
+
from django.http import JsonResponse
|
|
111
|
+
import httpx
|
|
112
|
+
|
|
113
|
+
async def external_api_view(request):
|
|
114
|
+
"""Use async for I/O-bound views."""
|
|
115
|
+
async with httpx.AsyncClient() as client:
|
|
116
|
+
response = await client.get("https://api.example.com/data")
|
|
117
|
+
return JsonResponse(response.json())
|
|
118
|
+
|
|
119
|
+
# ASGI deployment required:
|
|
120
|
+
# uvicorn myproject.asgi:application --workers 4
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Query Optimization
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
# ❌ N+1 Problem
|
|
129
|
+
users = User.objects.all()
|
|
130
|
+
for user in users:
|
|
131
|
+
print(user.profile.bio) # Each access = 1 query!
|
|
132
|
+
print(user.posts.count()) # Each access = 1 query!
|
|
133
|
+
|
|
134
|
+
# ✅ Fix: select_related (ForeignKey / OneToOne)
|
|
135
|
+
users = User.objects.select_related("profile").all()
|
|
136
|
+
|
|
137
|
+
# ✅ Fix: prefetch_related (ManyToMany / Reverse FK)
|
|
138
|
+
users = User.objects.prefetch_related("posts").all()
|
|
139
|
+
|
|
140
|
+
# ✅ Select specific fields
|
|
141
|
+
users = User.objects.only("id", "email", "name").all()
|
|
142
|
+
|
|
143
|
+
# ✅ Annotate counts without extra queries
|
|
144
|
+
from django.db.models import Count
|
|
145
|
+
users = User.objects.annotate(post_count=Count("posts")).all()
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Signals (Use Sparingly)
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
from django.db.models.signals import post_save
|
|
154
|
+
from django.dispatch import receiver
|
|
155
|
+
|
|
156
|
+
@receiver(post_save, sender=User)
|
|
157
|
+
def create_user_profile(sender, instance, created, **kwargs):
|
|
158
|
+
"""Auto-create profile when user is created."""
|
|
159
|
+
if created:
|
|
160
|
+
Profile.objects.create(user=instance)
|
|
161
|
+
|
|
162
|
+
# Register in apps.py:
|
|
163
|
+
# class UsersConfig(AppConfig):
|
|
164
|
+
# def ready(self):
|
|
165
|
+
# import users.signals
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Anti-Patterns
|
|
171
|
+
|
|
172
|
+
| ❌ Don't | ✅ Do |
|
|
173
|
+
|---------|-------|
|
|
174
|
+
| Business logic in views | Fat models, thin views |
|
|
175
|
+
| Raw SQL everywhere | Use ORM + managers |
|
|
176
|
+
| Forget `select_related` | Profile queries, fix N+1 |
|
|
177
|
+
| Overuse signals | Prefer explicit service calls |
|
|
178
|
+
| `settings.py` monolith | Split: base/dev/prod |
|
|
179
|
+
| Skip migrations | Always `makemigrations` + `migrate` |
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 🔗 Related
|
|
184
|
+
|
|
185
|
+
| File | When to Read |
|
|
186
|
+
|------|-------------|
|
|
187
|
+
| [framework-selection.md](framework-selection.md) | Why Django |
|
|
188
|
+
| [project-structure.md](project-structure.md) | Django directory layout |
|
|
189
|
+
| [testing-patterns.md](testing-patterns.md) | Testing Django |
|
|
190
|
+
| [async-patterns.md](async-patterns.md) | Async in Django |
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
⚡ PikaKit v3.9.134
|