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,442 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: python-pro-engineering-spec
|
|
3
|
+
description: Full 21-section engineering spec — FastAPI/Django/Flask selection, async/sync classification, type hints, architecture layering
|
|
4
|
+
title: "Python Pro - Engineering Specification"
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: engineering, spec
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Python Pro — Engineering Specification
|
|
11
|
+
|
|
12
|
+
> Production-grade specification for Python development principles at FAANG scale.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. Overview
|
|
17
|
+
|
|
18
|
+
Python Pro provides structured decision frameworks for Python development: framework selection (FastAPI, Django, Flask), async vs sync routing (I/O-bound → async, CPU-bound → sync + multiprocessing), type hint strategy, project structure, and architecture patterns (routes → services → repos). The skill operates as an **Expert (decision tree)** — it produces framework recommendations, architecture decisions, and pattern guidance. It does not write code, install packages, or execute Python scripts.
|
|
19
|
+
|
|
20
|
+
**Contract Version:** 2.0.0
|
|
21
|
+
**Backward Compatibility:** breaking (first hardened version)
|
|
22
|
+
**Breaking Changes:** None — new spec for first hardening
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 2. Problem Statement
|
|
27
|
+
|
|
28
|
+
Python project decisions at scale face four quantified problems:
|
|
29
|
+
|
|
30
|
+
| Problem | Measurement | Impact |
|
|
31
|
+
|---------|-------------|--------|
|
|
32
|
+
| Wrong framework for context | 40% of projects use Django for simple APIs | Over-engineering, slow starts |
|
|
33
|
+
| Sync in async contexts | 35% of async projects use sync libraries | Blocked event loop, poor throughput |
|
|
34
|
+
| Missing type hints | 50% of public APIs lack type annotations | Runtime errors, poor DX |
|
|
35
|
+
| Business logic in routes | 45% of projects embed logic in views/routes | Untestable, tightly coupled |
|
|
36
|
+
|
|
37
|
+
Python Pro eliminates these with deterministic framework routing (5-branch decision tree), async/sync classification (I/O vs CPU), mandatory type hint rules, and layered architecture (routes → services → repos).
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 3. Design Goals
|
|
42
|
+
|
|
43
|
+
| ID | Goal | Measurable Constraint |
|
|
44
|
+
|----|------|-----------------------|
|
|
45
|
+
| G1 | Framework selection | 5-branch decision tree: API→FastAPI, Web→Django, Simple→Flask, AI/ML→FastAPI, Workers→Celery |
|
|
46
|
+
| G2 | Async/sync routing | I/O-bound → async; CPU-bound → sync + multiprocessing |
|
|
47
|
+
| G3 | Type hint coverage | All public APIs, Pydantic models, function signatures |
|
|
48
|
+
| G4 | Project structure | Layered: routes → services → repositories |
|
|
49
|
+
| G5 | Validation | Pydantic for all input/output boundaries |
|
|
50
|
+
| G6 | Reference collection | 7 reference files for deep-dive patterns |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 4. Non-Goals
|
|
55
|
+
|
|
56
|
+
| ID | Excluded | Rationale |
|
|
57
|
+
|----|----------|-----------|
|
|
58
|
+
| NG1 | API design patterns | Owned by `api-architect` skill |
|
|
59
|
+
| NG2 | Testing strategy | Owned by `test-architect` skill |
|
|
60
|
+
| NG3 | Database schema | Owned by `data-modeler` skill |
|
|
61
|
+
| NG4 | Code implementation | Guidance only; execution is caller's responsibility |
|
|
62
|
+
| NG5 | Package management (pip/poetry) | Tooling decision outside core scope |
|
|
63
|
+
| NG6 | DevOps/deployment | Owned by deployment skills |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 5. System Boundaries
|
|
68
|
+
|
|
69
|
+
| Boundary | Owned | Not Owned |
|
|
70
|
+
|----------|-------|-----------|
|
|
71
|
+
| Framework selection | Decision criteria | Framework installation |
|
|
72
|
+
| Async/sync routing | Classification | Async runtime configuration |
|
|
73
|
+
| Type hint guidance | Rules and patterns | Type checker execution |
|
|
74
|
+
| Project structure | Layout recommendations | File/directory creation |
|
|
75
|
+
| Architecture patterns | Layering rules | Code generation |
|
|
76
|
+
| Validation patterns | Pydantic guidance | Model creation |
|
|
77
|
+
|
|
78
|
+
**Side-effect boundary:** Python Pro produces decisions, recommendations, and architecture guidance. It does not create files, run commands, or modify code.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 6. Integration Model
|
|
83
|
+
|
|
84
|
+
### 6.1 Agent Contract
|
|
85
|
+
|
|
86
|
+
#### Input Schema
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Request_Type: string # "framework-select" | "async-sync" | "type-hints" |
|
|
90
|
+
# "project-structure" | "architecture" | "validation" |
|
|
91
|
+
# "full-guide"
|
|
92
|
+
Context: {
|
|
93
|
+
project_type: string # "api" | "web" | "script" | "ai-ml" | "workers"
|
|
94
|
+
scale: string | null # "small" | "medium" | "large"
|
|
95
|
+
async_needs: string | null # "io-bound" | "cpu-bound" | "mixed" | null
|
|
96
|
+
framework_preference: string | null # "fastapi" | "django" | "flask" | null
|
|
97
|
+
has_background_tasks: boolean
|
|
98
|
+
}
|
|
99
|
+
contract_version: string # "2.0.0"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### Output Schema
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
"agent": "python-pro",
|
|
106
|
+
"trace_id": "uuid",
|
|
107
|
+
"status": "success | failure | escalate",
|
|
108
|
+
"result": {
|
|
109
|
+
"framework": {
|
|
110
|
+
"recommended": "fastapi | django | flask",
|
|
111
|
+
"rationale": "...",
|
|
112
|
+
"with_celery": false
|
|
113
|
+
},
|
|
114
|
+
"async_decision": {
|
|
115
|
+
"mode": "async | sync | mixed",
|
|
116
|
+
"rationale": "...",
|
|
117
|
+
"warnings": []
|
|
118
|
+
},
|
|
119
|
+
"structure": {
|
|
120
|
+
"layout": "flat | layered | domain-driven",
|
|
121
|
+
"layers": ["routes", "services", "repositories"]
|
|
122
|
+
},
|
|
123
|
+
"type_hints": {
|
|
124
|
+
"coverage": "all-public | full",
|
|
125
|
+
"validation": "pydantic"
|
|
126
|
+
},
|
|
127
|
+
"reference_files": []
|
|
128
|
+
},
|
|
129
|
+
"security": {
|
|
130
|
+
"rules_of_engagement_followed": true
|
|
131
|
+
},
|
|
132
|
+
"code_quality": {
|
|
133
|
+
"problem_checker_run": true,
|
|
134
|
+
"errors_fixed": 0
|
|
135
|
+
},
|
|
136
|
+
"artifacts": ["architecture_decision.md"],
|
|
137
|
+
"next_action": "user approval | orchestrator execution",
|
|
138
|
+
"escalation_target": "lead | orchestrator | null",
|
|
139
|
+
"failure_reason": "string | null"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
#### Error Schema
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
Code: string # From Error Taxonomy (Section 11)
|
|
146
|
+
Message: string
|
|
147
|
+
Request_Type: string
|
|
148
|
+
Recoverable: boolean
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
#### Deterministic Guarantees
|
|
152
|
+
|
|
153
|
+
- Framework selection is deterministic: project_type → framework.
|
|
154
|
+
- Async/sync classification is deterministic: I/O-bound → async; CPU-bound → sync.
|
|
155
|
+
- Type hint rules are fixed: all public APIs use type annotations.
|
|
156
|
+
- Architecture layers are fixed: routes → services → repositories.
|
|
157
|
+
- Validation is fixed: Pydantic for all boundaries.
|
|
158
|
+
- Same project context = same recommendations.
|
|
159
|
+
|
|
160
|
+
#### What Agents May Assume
|
|
161
|
+
|
|
162
|
+
- Framework decision tree follows documented branches.
|
|
163
|
+
- Async recommendation follows I/O vs CPU classification.
|
|
164
|
+
- Reference files exist at documented paths.
|
|
165
|
+
- Layered architecture applies to all non-script projects.
|
|
166
|
+
|
|
167
|
+
#### What Agents Must NOT Assume
|
|
168
|
+
|
|
169
|
+
- User has framework preference (ask if unclear).
|
|
170
|
+
- Project is always async (check requirements).
|
|
171
|
+
- Django is always the right choice for web (check complexity).
|
|
172
|
+
- All frameworks support the same patterns.
|
|
173
|
+
|
|
174
|
+
#### Side-Effect Boundaries
|
|
175
|
+
|
|
176
|
+
| Operation | Side Effects |
|
|
177
|
+
|-----------|-------------|
|
|
178
|
+
| Framework selection | None; recommendation |
|
|
179
|
+
| Async/sync routing | None; classification |
|
|
180
|
+
| Type hints | None; rules output |
|
|
181
|
+
| Project structure | None; layout recommendation |
|
|
182
|
+
| Architecture | None; pattern guidance |
|
|
183
|
+
| Full guide | None; combined output |
|
|
184
|
+
|
|
185
|
+
### 6.2 Workflow Contract
|
|
186
|
+
|
|
187
|
+
#### Invocation Pattern
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
1. Identify project type (api/web/script/ai-ml/workers)
|
|
191
|
+
2. Ask user for framework preference if unclear
|
|
192
|
+
3. Invoke framework-select for recommendation
|
|
193
|
+
4. Invoke async-sync for concurrency classification
|
|
194
|
+
5. Invoke project-structure for layout
|
|
195
|
+
6. Load relevant reference files for deep patterns
|
|
196
|
+
7. Implement (caller's responsibility)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### Execution Guarantees
|
|
200
|
+
|
|
201
|
+
- Each invocation produces a complete recommendation.
|
|
202
|
+
- All decisions are independent (can be invoked in any order).
|
|
203
|
+
- User preference overrides decision tree when provided.
|
|
204
|
+
|
|
205
|
+
#### Failure Propagation Model
|
|
206
|
+
|
|
207
|
+
| Failure Severity | Propagation | Workflow Action |
|
|
208
|
+
|-----------------|-------------|-----------------|
|
|
209
|
+
| Unknown project type | Return error | Specify valid type |
|
|
210
|
+
| Unknown framework | Return error | Use fastapi, django, or flask |
|
|
211
|
+
| Invalid request type | Return error | Use supported type |
|
|
212
|
+
|
|
213
|
+
#### Retry Boundaries
|
|
214
|
+
|
|
215
|
+
- Zero internal retries. Deterministic output.
|
|
216
|
+
|
|
217
|
+
#### Isolation Model
|
|
218
|
+
|
|
219
|
+
- Each invocation is stateless and independent.
|
|
220
|
+
|
|
221
|
+
#### Idempotency Expectations
|
|
222
|
+
|
|
223
|
+
| Operation | Idempotent | Notes |
|
|
224
|
+
|-----------|-----------|-------|
|
|
225
|
+
| Framework selection | Yes | Same project type = same framework |
|
|
226
|
+
| Async/sync | Yes | Same needs = same mode |
|
|
227
|
+
| Project structure | Yes | Same context = same layout |
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 7. Execution Model
|
|
232
|
+
|
|
233
|
+
### 2-Phase Lifecycle
|
|
234
|
+
|
|
235
|
+
| Phase | Action | Output |
|
|
236
|
+
|-------|--------|--------|
|
|
237
|
+
| **Classify** | Parse project type, scale, async needs | Classification |
|
|
238
|
+
| **Guide** | Generate framework recommendation, patterns, structure | Complete output |
|
|
239
|
+
|
|
240
|
+
All phases synchronous. No async pipeline.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 8. Deterministic Design Principles
|
|
245
|
+
|
|
246
|
+
| Principle | Enforcement |
|
|
247
|
+
|-----------|-------------|
|
|
248
|
+
| Framework routing | API/microservices → FastAPI; Full-stack/CMS/admin → Django; Simple/scripts → Flask; AI/ML serving → FastAPI; Background workers → Celery + any |
|
|
249
|
+
| Async classification | I/O-bound (HTTP, DB, file) → async; CPU-bound (compute) → sync + multiprocessing |
|
|
250
|
+
| Async constraints | Never mix sync libraries in async code; never force async for CPU work |
|
|
251
|
+
| Type hints mandatory | All public APIs, all function signatures, all Pydantic models |
|
|
252
|
+
| Validation | Pydantic at all boundaries (input/output) |
|
|
253
|
+
| Architecture layering | Routes (HTTP) → Services (business logic) → Repositories (data access) |
|
|
254
|
+
| No logic in routes | Routes delegate to services; services contain business logic |
|
|
255
|
+
| User preference respected | Explicit preference overrides decision tree |
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 9. State & Idempotency Model
|
|
260
|
+
|
|
261
|
+
Stateless. Fully idempotent. No persistent state.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 10. Failure Handling Strategy
|
|
266
|
+
|
|
267
|
+
| Failure Class | Behavior | Caller Recovery |
|
|
268
|
+
|---------------|----------|-----------------|
|
|
269
|
+
| Unknown project type | Return `ERR_UNKNOWN_PROJECT_TYPE` | Specify api, web, script, ai-ml, or workers |
|
|
270
|
+
| Unknown framework | Return `ERR_UNKNOWN_FRAMEWORK` | Specify fastapi, django, or flask |
|
|
271
|
+
| Invalid request type | Return `ERR_INVALID_REQUEST_TYPE` | Use supported type |
|
|
272
|
+
|
|
273
|
+
**Invariant:** Every failure returns a structured error. No partial guidance.
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## 11. Error Taxonomy
|
|
278
|
+
|
|
279
|
+
| Code | Category | Recoverable | Description |
|
|
280
|
+
|------|----------|-------------|-------------|
|
|
281
|
+
| `ERR_INVALID_REQUEST_TYPE` | Validation | No | Request type not supported |
|
|
282
|
+
| `ERR_UNKNOWN_PROJECT_TYPE` | Validation | Yes | Project type not one of 5 |
|
|
283
|
+
| `ERR_UNKNOWN_FRAMEWORK` | Validation | Yes | Framework not fastapi, django, or flask |
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 12. Timeout & Retry Policy
|
|
288
|
+
|
|
289
|
+
| Parameter | Default | Maximum | Rationale |
|
|
290
|
+
|-----------|---------|---------|-----------|
|
|
291
|
+
| Decision generation | N/A | N/A | Synchronous; < 50ms |
|
|
292
|
+
| Internal retries | Zero | Zero | Deterministic output |
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 13. Observability & Logging Schema
|
|
297
|
+
|
|
298
|
+
### Log Entry Format
|
|
299
|
+
|
|
300
|
+
```json
|
|
301
|
+
{
|
|
302
|
+
"traceId": "uuid",
|
|
303
|
+
"spanId": "uuid",
|
|
304
|
+
"events": [
|
|
305
|
+
{
|
|
306
|
+
"name": "decision_started",
|
|
307
|
+
"timestamp": "ISO-8601",
|
|
308
|
+
"attributes": {
|
|
309
|
+
"project_type": "api",
|
|
310
|
+
"scale": "medium"
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"name": "arch_recommendation_provided",
|
|
315
|
+
"timestamp": "ISO-8601",
|
|
316
|
+
"attributes": {
|
|
317
|
+
"framework_recommended": "fastapi",
|
|
318
|
+
"async_mode": "async",
|
|
319
|
+
"duration_ms": 15
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
]
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Required Log Points
|
|
327
|
+
|
|
328
|
+
| Event | Log Level | Fields |
|
|
329
|
+
|-------|-----------|--------|
|
|
330
|
+
| Framework selected | INFO | project_type, framework_recommended |
|
|
331
|
+
| Async mode decided | INFO | async_needs, async_mode |
|
|
332
|
+
| Structure recommended | INFO | layout, layers |
|
|
333
|
+
| Decision failed | ERROR | error_code, message |
|
|
334
|
+
|
|
335
|
+
### Metrics
|
|
336
|
+
|
|
337
|
+
| Metric | Type | Unit |
|
|
338
|
+
|--------|------|------|
|
|
339
|
+
| `pythonpro.decision.duration` | Histogram | ms |
|
|
340
|
+
| `pythonpro.framework.distribution` | Counter | fastapi vs django vs flask |
|
|
341
|
+
| `pythonpro.async_mode.distribution` | Counter | async vs sync vs mixed |
|
|
342
|
+
| `pythonpro.project_type.distribution` | Counter | per project type |
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
## 14. Security & Trust Model
|
|
347
|
+
|
|
348
|
+
### Data Handling
|
|
349
|
+
|
|
350
|
+
- Python Pro processes no credentials, API keys, or PII.
|
|
351
|
+
- Framework recommendations contain no sensitive data.
|
|
352
|
+
- No network calls, no file access, no code execution.
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## 15. Scalability Model
|
|
357
|
+
|
|
358
|
+
| Dimension | Constraint | Mitigation |
|
|
359
|
+
|-----------|-----------|------------|
|
|
360
|
+
| Throughput | CPU-bound decision tree | < 50ms; scales linearly |
|
|
361
|
+
| Concurrency | Stateless invocations | Unlimited parallel |
|
|
362
|
+
| Reference files | 7 files (static) | No growth expected |
|
|
363
|
+
| Memory per invocation | < 1 MB | No accumulation |
|
|
364
|
+
| Network | Zero network calls | No external dependency |
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 16. Concurrency Model
|
|
369
|
+
|
|
370
|
+
Fully parallel. No shared state. No coordination required.
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## 17. Resource Lifecycle Management
|
|
375
|
+
|
|
376
|
+
All resources scoped to invocation. No persistent handles.
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## 18. Performance Constraints
|
|
381
|
+
|
|
382
|
+
| Operation | P50 Target | P99 Target | Hard Limit |
|
|
383
|
+
|-----------|-----------|-----------|------------|
|
|
384
|
+
| Framework selection | < 2 ms | < 5 ms | 20 ms |
|
|
385
|
+
| Async/sync routing | < 2 ms | < 5 ms | 20 ms |
|
|
386
|
+
| Full guide | < 10 ms | < 30 ms | 50 ms |
|
|
387
|
+
| Output size | ≤ 2,000 chars | ≤ 5,000 chars | 8,000 chars |
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## 19. Operational Risks
|
|
392
|
+
|
|
393
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
394
|
+
|------|-----------|--------|------------|
|
|
395
|
+
| New Python framework emerges | Low | Missing recommendation | Annual review |
|
|
396
|
+
| FastAPI/Django breaking changes | Medium | Outdated patterns | Track release notes |
|
|
397
|
+
| Async ecosystem changes | Low | Stale async guidance | Monitor PEP updates |
|
|
398
|
+
| Pydantic v3 | Low | Validation pattern changes | Track major releases |
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## 20. Compliance with skill-design-guide.md
|
|
403
|
+
|
|
404
|
+
| Requirement | Status | Evidence |
|
|
405
|
+
|-------------|--------|----------|
|
|
406
|
+
| YAML frontmatter complete | ✅ | name, description, metadata with category, version, triggers, coordinates_with, success_metrics |
|
|
407
|
+
| SKILL.md < 200 lines | ✅ | Entry point under 200 lines |
|
|
408
|
+
| Prerequisites documented | ✅ | No external dependencies for guidance |
|
|
409
|
+
| When to Use section | ✅ | Situation-based routing table |
|
|
410
|
+
| Core content matches skill type | ✅ | Expert type: framework decision tree, async routing |
|
|
411
|
+
| Troubleshooting section | ✅ | Anti-patterns with fix examples |
|
|
412
|
+
| Related section | ✅ | Cross-links to api-architect, test-architect, data-modeler |
|
|
413
|
+
| Content Map for multi-file | ✅ | Links to 7 reference files + engineering-spec.md |
|
|
414
|
+
| Contract versioning | ✅ | contract_version, backward_compatibility, breaking_changes |
|
|
415
|
+
| Compliance matrix structured | ✅ | This table with ✅/❌ + evidence |
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## 21. Production Readiness Checklist
|
|
420
|
+
|
|
421
|
+
| Category | Check | Status |
|
|
422
|
+
|----------|-------|--------|
|
|
423
|
+
| **Functionality** | 5-branch framework decision tree | ✅ |
|
|
424
|
+
| **Functionality** | Async/sync classification | ✅ |
|
|
425
|
+
| **Functionality** | Type hint rules | ✅ |
|
|
426
|
+
| **Functionality** | Architecture layering (routes → services → repos) | ✅ |
|
|
427
|
+
| **Functionality** | Pydantic validation guidance | ✅ |
|
|
428
|
+
| **Functionality** | 7 reference files | ✅ |
|
|
429
|
+
| **Contracts** | Input/output/error schemas in pseudo-schema format | ✅ |
|
|
430
|
+
| **Contracts** | Contract versioning with semver | ✅ |
|
|
431
|
+
| **Failure** | Error taxonomy with 3 categorized codes | ✅ |
|
|
432
|
+
| **Failure** | Zero internal retries | ✅ |
|
|
433
|
+
| **Determinism** | Fixed framework routing, fixed async rules | ✅ |
|
|
434
|
+
| **Security** | No credentials, no PII, no network access | ✅ |
|
|
435
|
+
| **Observability** | Structured log schema with 5 mandatory fields | ✅ |
|
|
436
|
+
| **Observability** | 4 metrics defined | ✅ |
|
|
437
|
+
| **Performance** | P50/P99 targets for all operations | ✅ |
|
|
438
|
+
| **Compliance** | All skill-design-guide.md sections mapped with evidence | ✅ |
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
⚡ PikaKit v3.9.134
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fastapi-patterns
|
|
3
|
+
description: FastAPI patterns — dependency injection, middleware, error handling, lifespan, and Pydantic integration
|
|
4
|
+
title: "Dependency injection for testability. Pydantic at boundaries. Async by default."
|
|
5
|
+
impact: MEDIUM
|
|
6
|
+
impactDescription: "Moderate improvement to quality or maintainability"
|
|
7
|
+
tags: fastapi, patterns
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# FastAPI Patterns
|
|
11
|
+
|
|
12
|
+
> Dependency injection for testability. Pydantic at boundaries. Async by default.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Dependency Injection
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
from fastapi import Depends, FastAPI, HTTPException
|
|
20
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
21
|
+
|
|
22
|
+
app = FastAPI()
|
|
23
|
+
|
|
24
|
+
# Database session dependency
|
|
25
|
+
async def get_db() -> AsyncGenerator[AsyncSession, None]:
|
|
26
|
+
async with async_session_maker() as session:
|
|
27
|
+
try:
|
|
28
|
+
yield session
|
|
29
|
+
finally:
|
|
30
|
+
await session.close()
|
|
31
|
+
|
|
32
|
+
# Current user dependency (reusable)
|
|
33
|
+
async def get_current_user(
|
|
34
|
+
token: str = Depends(oauth2_scheme),
|
|
35
|
+
db: AsyncSession = Depends(get_db),
|
|
36
|
+
) -> User:
|
|
37
|
+
user = await user_service.get_by_token(db, token)
|
|
38
|
+
if not user:
|
|
39
|
+
raise HTTPException(status_code=401, detail="Invalid token")
|
|
40
|
+
return user
|
|
41
|
+
|
|
42
|
+
# Use in route — clean, testable
|
|
43
|
+
@app.get("/users/me")
|
|
44
|
+
async def get_me(user: User = Depends(get_current_user)) -> UserResponse:
|
|
45
|
+
return UserResponse.model_validate(user)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Router Organization
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
# app/routes/users.py
|
|
54
|
+
from fastapi import APIRouter, Depends
|
|
55
|
+
from app.dependencies import get_db, get_current_user
|
|
56
|
+
from app.services.user_service import UserService
|
|
57
|
+
from app.schemas.user import UserCreate, UserResponse
|
|
58
|
+
|
|
59
|
+
router = APIRouter()
|
|
60
|
+
|
|
61
|
+
@router.post("/", status_code=201)
|
|
62
|
+
async def create_user(
|
|
63
|
+
data: UserCreate,
|
|
64
|
+
db: AsyncSession = Depends(get_db),
|
|
65
|
+
) -> UserResponse:
|
|
66
|
+
service = UserService(db)
|
|
67
|
+
user = await service.create(data)
|
|
68
|
+
return UserResponse.model_validate(user)
|
|
69
|
+
|
|
70
|
+
@router.get("/{user_id}")
|
|
71
|
+
async def get_user(
|
|
72
|
+
user_id: int,
|
|
73
|
+
db: AsyncSession = Depends(get_db),
|
|
74
|
+
) -> UserResponse:
|
|
75
|
+
service = UserService(db)
|
|
76
|
+
user = await service.get_or_404(user_id)
|
|
77
|
+
return UserResponse.model_validate(user)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Error Handling
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
from fastapi import Request
|
|
86
|
+
from fastapi.responses import JSONResponse
|
|
87
|
+
|
|
88
|
+
# Custom domain exception
|
|
89
|
+
class AppError(Exception):
|
|
90
|
+
def __init__(self, message: str, code: str, status_code: int = 400):
|
|
91
|
+
self.message = message
|
|
92
|
+
self.code = code
|
|
93
|
+
self.status_code = status_code
|
|
94
|
+
|
|
95
|
+
class NotFoundError(AppError):
|
|
96
|
+
def __init__(self, resource: str, id: int):
|
|
97
|
+
super().__init__(f"{resource} {id} not found", "NOT_FOUND", 404)
|
|
98
|
+
|
|
99
|
+
# Register handler
|
|
100
|
+
@app.exception_handler(AppError)
|
|
101
|
+
async def app_error_handler(request: Request, exc: AppError) -> JSONResponse:
|
|
102
|
+
return JSONResponse(
|
|
103
|
+
status_code=exc.status_code,
|
|
104
|
+
content={"error": exc.code, "message": exc.message},
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Usage in service layer
|
|
108
|
+
class UserService:
|
|
109
|
+
async def get_or_404(self, user_id: int) -> User:
|
|
110
|
+
user = await self.repo.get(user_id)
|
|
111
|
+
if not user:
|
|
112
|
+
raise NotFoundError("User", user_id)
|
|
113
|
+
return user
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Middleware
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
import time
|
|
122
|
+
from fastapi import Request
|
|
123
|
+
|
|
124
|
+
@app.middleware("http")
|
|
125
|
+
async def add_timing_header(request: Request, call_next):
|
|
126
|
+
start = time.perf_counter()
|
|
127
|
+
response = await call_next(request)
|
|
128
|
+
elapsed = time.perf_counter() - start
|
|
129
|
+
response.headers["X-Process-Time"] = f"{elapsed:.3f}s"
|
|
130
|
+
return response
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Lifespan (Startup/Shutdown)
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
from contextlib import asynccontextmanager
|
|
139
|
+
from fastapi import FastAPI
|
|
140
|
+
|
|
141
|
+
@asynccontextmanager
|
|
142
|
+
async def lifespan(app: FastAPI):
|
|
143
|
+
# Startup: initialize resources
|
|
144
|
+
app.state.db = await create_db_pool()
|
|
145
|
+
app.state.redis = await create_redis_pool()
|
|
146
|
+
yield
|
|
147
|
+
# Shutdown: cleanup
|
|
148
|
+
await app.state.db.close()
|
|
149
|
+
await app.state.redis.close()
|
|
150
|
+
|
|
151
|
+
app = FastAPI(lifespan=lifespan)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Anti-Patterns
|
|
157
|
+
|
|
158
|
+
| ❌ Don't | ✅ Do |
|
|
159
|
+
|---------|-------|
|
|
160
|
+
| Business logic in routes | Delegate to service layer |
|
|
161
|
+
| Catch all exceptions silently | Use domain exceptions + handlers |
|
|
162
|
+
| `@app.on_event("startup")` | Use `lifespan` context manager |
|
|
163
|
+
| Skip Depends for DB sessions | Always use DI for testability |
|
|
164
|
+
| Return raw dict | Return Pydantic model |
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 🔗 Related
|
|
169
|
+
|
|
170
|
+
| File | When to Read |
|
|
171
|
+
|------|-------------|
|
|
172
|
+
| [type-hints.md](type-hints.md) | Pydantic models |
|
|
173
|
+
| [async-patterns.md](async-patterns.md) | Async decisions |
|
|
174
|
+
| [project-structure.md](project-structure.md) | Directory layout |
|
|
175
|
+
| [testing-patterns.md](testing-patterns.md) | Testing FastAPI |
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
⚡ PikaKit v3.9.134
|