@ruaruababa/vibe-kit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CATALOG.md +317 -0
- package/README.md +121 -0
- package/aliases.json +65 -0
- package/bin/vibe.js +2 -0
- package/bundles.json +265 -0
- package/catalog.json +1560 -0
- package/dist/antigravity-skills/bin/cli.js +438 -0
- package/dist/antigravity-skills/lib/skill-utils.js +158 -0
- package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
- package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
- package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
- package/dist/bin/vibe.js +2 -0
- package/dist/dist/src/cli/index.js +26 -0
- package/dist/lib/skill-utils.js +158 -0
- package/dist/scripts/build-catalog.js +50 -0
- package/dist/scripts/normalize-frontmatter.js +144 -0
- package/dist/scripts/validate-skills.js +56 -0
- package/dist/src/cli/index.js +146 -0
- package/dist/src/types/index.js +13 -0
- package/dist/src/utils/fs.js +1 -0
- package/package.json +43 -0
- package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
- package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
- package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
- package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
- package/skills/agent-orchestrator/SKILL.md +24 -0
- package/skills/ai-engineer/SKILL.md +171 -0
- package/skills/airflow-dag-patterns/SKILL.md +41 -0
- package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
- package/skills/angular-migration/SKILL.md +428 -0
- package/skills/anti-reversing-techniques/SKILL.md +42 -0
- package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
- package/skills/api-design-principles/SKILL.md +37 -0
- package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/skills/api-documenter/SKILL.md +184 -0
- package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
- package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
- package/skills/application-performance-performance-optimization/SKILL.md +154 -0
- package/skills/architect-review/SKILL.md +174 -0
- package/skills/architecture-decision-records/SKILL.md +441 -0
- package/skills/architecture-patterns/SKILL.md +37 -0
- package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
- package/skills/arm-cortex-expert/SKILL.md +306 -0
- package/skills/async-python-patterns/SKILL.md +39 -0
- package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
- package/skills/attack-tree-construction/SKILL.md +38 -0
- package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
- package/skills/auth-implementation-patterns/SKILL.md +39 -0
- package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
- package/skills/backend-architect/SKILL.md +333 -0
- package/skills/backend-development-feature-development/SKILL.md +180 -0
- package/skills/backend-security-coder/SKILL.md +156 -0
- package/skills/backtesting-frameworks/SKILL.md +39 -0
- package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
- package/skills/bash-defensive-patterns/SKILL.md +43 -0
- package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
- package/skills/bash-pro/SKILL.md +310 -0
- package/skills/bats-testing-patterns/SKILL.md +34 -0
- package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
- package/skills/bazel-build-optimization/SKILL.md +397 -0
- package/skills/billing-automation/SKILL.md +42 -0
- package/skills/billing-automation/resources/implementation-playbook.md +544 -0
- package/skills/binary-analysis-patterns/SKILL.md +450 -0
- package/skills/blockchain-developer/SKILL.md +208 -0
- package/skills/business-analyst/SKILL.md +182 -0
- package/skills/c-pro/SKILL.md +56 -0
- package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
- package/skills/c4-code/SKILL.md +244 -0
- package/skills/c4-component/SKILL.md +153 -0
- package/skills/c4-container/SKILL.md +171 -0
- package/skills/c4-context/SKILL.md +150 -0
- package/skills/changelog-automation/SKILL.md +38 -0
- package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
- package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
- package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
- package/skills/clean-markdown/SKILL.md +23 -0
- package/skills/cloud-architect/SKILL.md +135 -0
- package/skills/code-documentation-code-explain/SKILL.md +46 -0
- package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
- package/skills/code-documentation-doc-generate/SKILL.md +48 -0
- package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/code-refactoring-context-restore/SKILL.md +179 -0
- package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
- package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
- package/skills/code-review-ai-ai-review/SKILL.md +450 -0
- package/skills/code-review-excellence/SKILL.md +40 -0
- package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
- package/skills/code-reviewer/SKILL.md +178 -0
- package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
- package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
- package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
- package/skills/competitive-landscape/SKILL.md +34 -0
- package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
- package/skills/comprehensive-review-full-review/SKILL.md +146 -0
- package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
- package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
- package/skills/conductor-implement/SKILL.md +388 -0
- package/skills/conductor-manage/SKILL.md +39 -0
- package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
- package/skills/conductor-new-track/SKILL.md +433 -0
- package/skills/conductor-revert/SKILL.md +372 -0
- package/skills/conductor-setup/SKILL.md +426 -0
- package/skills/conductor-status/SKILL.md +338 -0
- package/skills/conductor-validator/SKILL.md +62 -0
- package/skills/content-marketer/SKILL.md +170 -0
- package/skills/context-driven-development/SKILL.md +400 -0
- package/skills/context-management-context-restore/SKILL.md +179 -0
- package/skills/context-management-context-save/SKILL.md +177 -0
- package/skills/context-manager/SKILL.md +185 -0
- package/skills/cost-optimization/SKILL.md +286 -0
- package/skills/cpp-pro/SKILL.md +59 -0
- package/skills/cqrs-implementation/SKILL.md +35 -0
- package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
- package/skills/csharp-pro/SKILL.md +59 -0
- package/skills/customer-support/SKILL.md +170 -0
- package/skills/data-engineer/SKILL.md +224 -0
- package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
- package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
- package/skills/data-quality-frameworks/SKILL.md +40 -0
- package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
- package/skills/data-scientist/SKILL.md +199 -0
- package/skills/data-storytelling/SKILL.md +465 -0
- package/skills/database-admin/SKILL.md +165 -0
- package/skills/database-architect/SKILL.md +268 -0
- package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
- package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
- package/skills/database-migration/SKILL.md +436 -0
- package/skills/database-migrations-migration-observability/SKILL.md +420 -0
- package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
- package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
- package/skills/database-optimizer/SKILL.md +167 -0
- package/skills/dbt-transformation-patterns/SKILL.md +34 -0
- package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
- package/skills/debugger/SKILL.md +49 -0
- package/skills/debugging-strategies/SKILL.md +34 -0
- package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
- package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
- package/skills/defi-protocol-templates/SKILL.md +466 -0
- package/skills/dependency-management-deps-audit/SKILL.md +44 -0
- package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/dependency-upgrade/SKILL.md +421 -0
- package/skills/deployment-engineer/SKILL.md +170 -0
- package/skills/deployment-pipeline-design/SKILL.md +371 -0
- package/skills/deployment-validation-config-validate/SKILL.md +496 -0
- package/skills/devops-troubleshooter/SKILL.md +161 -0
- package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
- package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
- package/skills/distributed-tracing/SKILL.md +450 -0
- package/skills/django-pro/SKILL.md +180 -0
- package/skills/docs-architect/SKILL.md +98 -0
- package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
- package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/dotnet-architect/SKILL.md +197 -0
- package/skills/dotnet-backend-patterns/SKILL.md +37 -0
- package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
- package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
- package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
- package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
- package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
- package/skills/dummy-skill/SKILL.md +5 -0
- package/skills/dx-optimizer/SKILL.md +83 -0
- package/skills/e2e-testing-patterns/SKILL.md +41 -0
- package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
- package/skills/elixir-pro/SKILL.md +59 -0
- package/skills/embedding-strategies/SKILL.md +491 -0
- package/skills/employment-contract-templates/SKILL.md +39 -0
- package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
- package/skills/error-debugging-error-analysis/SKILL.md +47 -0
- package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-debugging-error-trace/SKILL.md +43 -0
- package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
- package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
- package/skills/error-detective/SKILL.md +53 -0
- package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
- package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
- package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
- package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
- package/skills/error-handling-patterns/SKILL.md +35 -0
- package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
- package/skills/event-sourcing-architect/SKILL.md +58 -0
- package/skills/event-store-design/SKILL.md +449 -0
- package/skills/fastapi-pro/SKILL.md +192 -0
- package/skills/fastapi-templates/SKILL.md +32 -0
- package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
- package/skills/final-test/SKILL.md +5 -0
- package/skills/firmware-analyst/SKILL.md +320 -0
- package/skills/flutter-expert/SKILL.md +200 -0
- package/skills/framework-migration-code-migrate/SKILL.md +48 -0
- package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
- package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
- package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
- package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
- package/skills/frontend-developer/SKILL.md +171 -0
- package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
- package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
- package/skills/frontend-security-coder/SKILL.md +170 -0
- package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
- package/skills/gdpr-data-handling/SKILL.md +33 -0
- package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
- package/skills/git-advanced-workflows/SKILL.md +412 -0
- package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
- package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
- package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
- package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
- package/skills/github-actions-templates/SKILL.md +345 -0
- package/skills/gitlab-ci-patterns/SKILL.md +283 -0
- package/skills/gitops-workflow/SKILL.md +303 -0
- package/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/skills/go-concurrency-patterns/SKILL.md +33 -0
- package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
- package/skills/godot-gdscript-patterns/SKILL.md +33 -0
- package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
- package/skills/golang-pro/SKILL.md +179 -0
- package/skills/grafana-dashboards/SKILL.md +381 -0
- package/skills/graphql-architect/SKILL.md +182 -0
- package/skills/haskell-pro/SKILL.md +56 -0
- package/skills/helm-chart-scaffolding/SKILL.md +34 -0
- package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
- package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/skills/hr-pro/SKILL.md +126 -0
- package/skills/hybrid-cloud-architect/SKILL.md +168 -0
- package/skills/hybrid-cloud-networking/SKILL.md +238 -0
- package/skills/hybrid-search-implementation/SKILL.md +32 -0
- package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
- package/skills/incident-responder/SKILL.md +213 -0
- package/skills/incident-response-incident-response/SKILL.md +168 -0
- package/skills/incident-response-smart-fix/SKILL.md +29 -0
- package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
- package/skills/incident-runbook-templates/SKILL.md +395 -0
- package/skills/ios-developer/SKILL.md +219 -0
- package/skills/istio-traffic-management/SKILL.md +337 -0
- package/skills/java-pro/SKILL.md +177 -0
- package/skills/javascript-pro/SKILL.md +57 -0
- package/skills/javascript-testing-patterns/SKILL.md +35 -0
- package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
- package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
- package/skills/julia-pro/SKILL.md +209 -0
- package/skills/k8s-manifest-generator/SKILL.md +35 -0
- package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
- package/skills/k8s-security-policies/SKILL.md +346 -0
- package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/skills/kpi-dashboard-design/SKILL.md +440 -0
- package/skills/kubernetes-architect/SKILL.md +170 -0
- package/skills/langchain-architecture/SKILL.md +350 -0
- package/skills/legacy-modernizer/SKILL.md +53 -0
- package/skills/legal-advisor/SKILL.md +70 -0
- package/skills/linkerd-patterns/SKILL.md +321 -0
- package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
- package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
- package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
- package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
- package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
- package/skills/llm-evaluation/SKILL.md +483 -0
- package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
- package/skills/malware-analyst/SKILL.md +247 -0
- package/skills/market-sizing-analysis/SKILL.md +425 -0
- package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
- package/skills/market-sizing-analysis/references/data-sources.md +360 -0
- package/skills/memory-forensics/SKILL.md +491 -0
- package/skills/memory-safety-patterns/SKILL.md +33 -0
- package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
- package/skills/mermaid-expert/SKILL.md +59 -0
- package/skills/microservices-patterns/SKILL.md +35 -0
- package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
- package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
- package/skills/ml-engineer/SKILL.md +168 -0
- package/skills/ml-pipeline-workflow/SKILL.md +257 -0
- package/skills/mlops-engineer/SKILL.md +219 -0
- package/skills/mobile-developer/SKILL.md +205 -0
- package/skills/mobile-security-coder/SKILL.md +184 -0
- package/skills/modern-javascript-patterns/SKILL.md +35 -0
- package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
- package/skills/monorepo-architect/SKILL.md +61 -0
- package/skills/monorepo-management/SKILL.md +35 -0
- package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
- package/skills/mtls-configuration/SKILL.md +359 -0
- package/skills/multi-cloud-architecture/SKILL.md +189 -0
- package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
- package/skills/network-engineer/SKILL.md +169 -0
- package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
- package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
- package/skills/nft-standards/SKILL.md +395 -0
- package/skills/node-expert/SKILL.md +23 -0
- package/skills/nodejs-backend-patterns/SKILL.md +35 -0
- package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
- package/skills/nx-workspace-patterns/SKILL.md +464 -0
- package/skills/observability-engineer/SKILL.md +237 -0
- package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
- package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
- package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
- package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
- package/skills/on-call-handoff-patterns/SKILL.md +453 -0
- package/skills/openapi-spec-generation/SKILL.md +33 -0
- package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
- package/skills/payment-integration/SKILL.md +77 -0
- package/skills/paypal-integration/SKILL.md +479 -0
- package/skills/pci-compliance/SKILL.md +478 -0
- package/skills/performance-engineer/SKILL.md +180 -0
- package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
- package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
- package/skills/php-pro/SKILL.md +63 -0
- package/skills/posix-shell-pro/SKILL.md +304 -0
- package/skills/postgresql/SKILL.md +230 -0
- package/skills/postmortem-writing/SKILL.md +386 -0
- package/skills/projection-patterns/SKILL.md +33 -0
- package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
- package/skills/prometheus-configuration/SKILL.md +404 -0
- package/skills/prompt-engineer/SKILL.md +272 -0
- package/skills/prompt-engineering-patterns/SKILL.md +213 -0
- package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
- package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
- package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
- package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
- package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
- package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
- package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
- package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
- package/skills/protocol-reverse-engineering/SKILL.md +29 -0
- package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
- package/skills/python-development-python-scaffold/SKILL.md +331 -0
- package/skills/python-packaging/SKILL.md +36 -0
- package/skills/python-packaging/resources/implementation-playbook.md +869 -0
- package/skills/python-performance-optimization/SKILL.md +36 -0
- package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
- package/skills/python-pro/SKILL.md +158 -0
- package/skills/python-testing-patterns/SKILL.md +37 -0
- package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
- package/skills/quant-analyst/SKILL.md +53 -0
- package/skills/rag-implementation/SKILL.md +421 -0
- package/skills/react-modernization/SKILL.md +34 -0
- package/skills/react-modernization/resources/implementation-playbook.md +512 -0
- package/skills/react-native-architecture/SKILL.md +33 -0
- package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
- package/skills/react-state-management/SKILL.md +441 -0
- package/skills/reference-builder/SKILL.md +188 -0
- package/skills/reverse-engineer/SKILL.md +173 -0
- package/skills/risk-manager/SKILL.md +61 -0
- package/skills/risk-metrics-calculation/SKILL.md +33 -0
- package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
- package/skills/ruby-pro/SKILL.md +56 -0
- package/skills/rust-async-patterns/SKILL.md +33 -0
- package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
- package/skills/rust-pro/SKILL.md +178 -0
- package/skills/saga-orchestration/SKILL.md +496 -0
- package/skills/sales-automator/SKILL.md +55 -0
- package/skills/sast-configuration/SKILL.md +212 -0
- package/skills/scala-pro/SKILL.md +82 -0
- package/skills/screen-reader-testing/SKILL.md +33 -0
- package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
- package/skills/search-specialist/SKILL.md +80 -0
- package/skills/secrets-management/SKILL.md +364 -0
- package/skills/security-auditor/SKILL.md +169 -0
- package/skills/security-compliance-compliance-check/SKILL.md +55 -0
- package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
- package/skills/security-requirement-extraction/SKILL.md +33 -0
- package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
- package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
- package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
- package/skills/security-scanning-security-hardening/SKILL.md +147 -0
- package/skills/security-scanning-security-sast/SKILL.md +495 -0
- package/skills/seo-authority-builder/SKILL.md +136 -0
- package/skills/seo-cannibalization-detector/SKILL.md +123 -0
- package/skills/seo-content-auditor/SKILL.md +83 -0
- package/skills/seo-content-planner/SKILL.md +108 -0
- package/skills/seo-content-refresher/SKILL.md +118 -0
- package/skills/seo-content-writer/SKILL.md +96 -0
- package/skills/seo-keyword-strategist/SKILL.md +95 -0
- package/skills/seo-meta-optimizer/SKILL.md +92 -0
- package/skills/seo-snippet-hunter/SKILL.md +114 -0
- package/skills/seo-structure-architect/SKILL.md +108 -0
- package/skills/service-mesh-expert/SKILL.md +58 -0
- package/skills/service-mesh-observability/SKILL.md +395 -0
- package/skills/shellcheck-configuration/SKILL.md +466 -0
- package/skills/similarity-search-patterns/SKILL.md +33 -0
- package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
- package/skills/slo-implementation/SKILL.md +341 -0
- package/skills/solidity-security/SKILL.md +34 -0
- package/skills/solidity-security/resources/implementation-playbook.md +524 -0
- package/skills/spark-optimization/SKILL.md +427 -0
- package/skills/sql-optimization-patterns/SKILL.md +35 -0
- package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
- package/skills/sql-pro/SKILL.md +173 -0
- package/skills/startup-analyst/SKILL.md +328 -0
- package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
- package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
- package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
- package/skills/startup-financial-modeling/SKILL.md +467 -0
- package/skills/startup-metrics-framework/SKILL.md +34 -0
- package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
- package/skills/stride-analysis-patterns/SKILL.md +33 -0
- package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
- package/skills/stripe-integration/SKILL.md +454 -0
- package/skills/systems-programming-rust-project/SKILL.md +440 -0
- package/skills/tailwind-design-system/SKILL.md +33 -0
- package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
- package/skills/tdd-orchestrator/SKILL.md +205 -0
- package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
- package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
- package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
- package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
- package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
- package/skills/team-collaboration-issue/SKILL.md +37 -0
- package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
- package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
- package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
- package/skills/team-composition-analysis/SKILL.md +413 -0
- package/skills/temporal-python-pro/SKILL.md +370 -0
- package/skills/temporal-python-testing/SKILL.md +170 -0
- package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
- package/skills/temporal-python-testing/resources/local-setup.md +553 -0
- package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
- package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
- package/skills/terraform-module-library/SKILL.md +261 -0
- package/skills/terraform-module-library/references/aws-modules.md +63 -0
- package/skills/terraform-specialist/SKILL.md +166 -0
- package/skills/test-automator/SKILL.md +224 -0
- package/skills/threat-mitigation-mapping/SKILL.md +33 -0
- package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
- package/skills/threat-modeling-expert/SKILL.md +60 -0
- package/skills/track-management/SKILL.md +38 -0
- package/skills/track-management/resources/implementation-playbook.md +591 -0
- package/skills/turborepo-caching/SKILL.md +419 -0
- package/skills/tutorial-engineer/SKILL.md +139 -0
- package/skills/typescript-advanced-types/SKILL.md +35 -0
- package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
- package/skills/typescript-pro/SKILL.md +55 -0
- package/skills/ui-minimal/SKILL.md +23 -0
- package/skills/ui-ux-designer/SKILL.md +209 -0
- package/skills/ui-visual-validator/SKILL.md +214 -0
- package/skills/unit-testing-test-generate/SKILL.md +319 -0
- package/skills/unity-developer/SKILL.md +230 -0
- package/skills/unity-ecs-patterns/SKILL.md +33 -0
- package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
- package/skills/uv-package-manager/SKILL.md +37 -0
- package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
- package/skills/vector-database-engineer/SKILL.md +60 -0
- package/skills/vector-index-tuning/SKILL.md +42 -0
- package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
- package/skills/wcag-audit-patterns/SKILL.md +41 -0
- package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
- package/skills/web3-testing/SKILL.md +427 -0
- package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
- package/skills/workflow-patterns/SKILL.md +38 -0
- package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cqrs-implementation
|
|
3
|
+
description: Implement Command Query Responsibility Segregation for scalable architectures. Use when separating read and write models, optimizing query performance, or building event-sourced systems.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CQRS Implementation
|
|
7
|
+
|
|
8
|
+
Comprehensive guide to implementing CQRS (Command Query Responsibility Segregation) patterns.
|
|
9
|
+
|
|
10
|
+
## Use this skill when
|
|
11
|
+
|
|
12
|
+
- Separating read and write concerns
|
|
13
|
+
- Scaling reads independently from writes
|
|
14
|
+
- Building event-sourced systems
|
|
15
|
+
- Optimizing complex query scenarios
|
|
16
|
+
- Different read/write data models are needed
|
|
17
|
+
- High-performance reporting is required
|
|
18
|
+
|
|
19
|
+
## Do not use this skill when
|
|
20
|
+
|
|
21
|
+
- The domain is simple and CRUD is sufficient
|
|
22
|
+
- You cannot operate separate read/write models
|
|
23
|
+
- Strong immediate consistency is required everywhere
|
|
24
|
+
|
|
25
|
+
## Instructions
|
|
26
|
+
|
|
27
|
+
- Identify read/write workloads and consistency needs.
|
|
28
|
+
- Define command and query models with clear boundaries.
|
|
29
|
+
- Implement read model projections and synchronization.
|
|
30
|
+
- Validate performance, recovery, and failure modes.
|
|
31
|
+
- If detailed patterns are required, open `resources/implementation-playbook.md`.
|
|
32
|
+
|
|
33
|
+
## Resources
|
|
34
|
+
|
|
35
|
+
- `resources/implementation-playbook.md` for detailed CQRS patterns and templates.
|
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
# CQRS Implementation Playbook
|
|
2
|
+
|
|
3
|
+
This file contains detailed patterns, checklists, and code samples referenced by the skill.
|
|
4
|
+
|
|
5
|
+
## Core Concepts
|
|
6
|
+
|
|
7
|
+
### 1. CQRS Architecture
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────┐
|
|
11
|
+
│ Client │
|
|
12
|
+
└──────┬──────┘
|
|
13
|
+
│
|
|
14
|
+
┌────────────┴────────────┐
|
|
15
|
+
│ │
|
|
16
|
+
▼ ▼
|
|
17
|
+
┌─────────────┐ ┌─────────────┐
|
|
18
|
+
│ Commands │ │ Queries │
|
|
19
|
+
│ API │ │ API │
|
|
20
|
+
└──────┬──────┘ └──────┬──────┘
|
|
21
|
+
│ │
|
|
22
|
+
▼ ▼
|
|
23
|
+
┌─────────────┐ ┌─────────────┐
|
|
24
|
+
│ Command │ │ Query │
|
|
25
|
+
│ Handlers │ │ Handlers │
|
|
26
|
+
└──────┬──────┘ └──────┬──────┘
|
|
27
|
+
│ │
|
|
28
|
+
▼ ▼
|
|
29
|
+
┌─────────────┐ ┌─────────────┐
|
|
30
|
+
│ Write │─────────►│ Read │
|
|
31
|
+
│ Model │ Events │ Model │
|
|
32
|
+
└─────────────┘ └─────────────┘
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 2. Key Components
|
|
36
|
+
|
|
37
|
+
| Component | Responsibility |
|
|
38
|
+
| ------------------- | ------------------------------- |
|
|
39
|
+
| **Command** | Intent to change state |
|
|
40
|
+
| **Command Handler** | Validates and executes commands |
|
|
41
|
+
| **Event** | Record of state change |
|
|
42
|
+
| **Query** | Request for data |
|
|
43
|
+
| **Query Handler** | Retrieves data from read model |
|
|
44
|
+
| **Projector** | Updates read model from events |
|
|
45
|
+
|
|
46
|
+
## Templates
|
|
47
|
+
|
|
48
|
+
### Template 1: Command Infrastructure
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from abc import ABC, abstractmethod
|
|
52
|
+
from dataclasses import dataclass
|
|
53
|
+
from typing import TypeVar, Generic, Dict, Any, Type
|
|
54
|
+
from datetime import datetime
|
|
55
|
+
import uuid
|
|
56
|
+
|
|
57
|
+
# Command base
|
|
58
|
+
@dataclass
|
|
59
|
+
class Command:
|
|
60
|
+
command_id: str = None
|
|
61
|
+
timestamp: datetime = None
|
|
62
|
+
|
|
63
|
+
def __post_init__(self):
|
|
64
|
+
self.command_id = self.command_id or str(uuid.uuid4())
|
|
65
|
+
self.timestamp = self.timestamp or datetime.utcnow()
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# Concrete commands
|
|
69
|
+
@dataclass
|
|
70
|
+
class CreateOrder(Command):
|
|
71
|
+
customer_id: str
|
|
72
|
+
items: list
|
|
73
|
+
shipping_address: dict
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@dataclass
|
|
77
|
+
class AddOrderItem(Command):
|
|
78
|
+
order_id: str
|
|
79
|
+
product_id: str
|
|
80
|
+
quantity: int
|
|
81
|
+
price: float
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@dataclass
|
|
85
|
+
class CancelOrder(Command):
|
|
86
|
+
order_id: str
|
|
87
|
+
reason: str
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
# Command handler base
|
|
91
|
+
T = TypeVar('T', bound=Command)
|
|
92
|
+
|
|
93
|
+
class CommandHandler(ABC, Generic[T]):
|
|
94
|
+
@abstractmethod
|
|
95
|
+
async def handle(self, command: T) -> Any:
|
|
96
|
+
pass
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
# Command bus
|
|
100
|
+
class CommandBus:
|
|
101
|
+
def __init__(self):
|
|
102
|
+
self._handlers: Dict[Type[Command], CommandHandler] = {}
|
|
103
|
+
|
|
104
|
+
def register(self, command_type: Type[Command], handler: CommandHandler):
|
|
105
|
+
self._handlers[command_type] = handler
|
|
106
|
+
|
|
107
|
+
async def dispatch(self, command: Command) -> Any:
|
|
108
|
+
handler = self._handlers.get(type(command))
|
|
109
|
+
if not handler:
|
|
110
|
+
raise ValueError(f"No handler for {type(command).__name__}")
|
|
111
|
+
return await handler.handle(command)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
# Command handler implementation
|
|
115
|
+
class CreateOrderHandler(CommandHandler[CreateOrder]):
|
|
116
|
+
def __init__(self, order_repository, event_store):
|
|
117
|
+
self.order_repository = order_repository
|
|
118
|
+
self.event_store = event_store
|
|
119
|
+
|
|
120
|
+
async def handle(self, command: CreateOrder) -> str:
|
|
121
|
+
# Validate
|
|
122
|
+
if not command.items:
|
|
123
|
+
raise ValueError("Order must have at least one item")
|
|
124
|
+
|
|
125
|
+
# Create aggregate
|
|
126
|
+
order = Order.create(
|
|
127
|
+
customer_id=command.customer_id,
|
|
128
|
+
items=command.items,
|
|
129
|
+
shipping_address=command.shipping_address
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# Persist events
|
|
133
|
+
await self.event_store.append_events(
|
|
134
|
+
stream_id=f"Order-{order.id}",
|
|
135
|
+
stream_type="Order",
|
|
136
|
+
events=order.uncommitted_events
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
return order.id
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Template 2: Query Infrastructure
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
from abc import ABC, abstractmethod
|
|
146
|
+
from dataclasses import dataclass
|
|
147
|
+
from typing import TypeVar, Generic, List, Optional
|
|
148
|
+
|
|
149
|
+
# Query base
|
|
150
|
+
@dataclass
|
|
151
|
+
class Query:
|
|
152
|
+
pass
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
# Concrete queries
|
|
156
|
+
@dataclass
|
|
157
|
+
class GetOrderById(Query):
|
|
158
|
+
order_id: str
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@dataclass
|
|
162
|
+
class GetCustomerOrders(Query):
|
|
163
|
+
customer_id: str
|
|
164
|
+
status: Optional[str] = None
|
|
165
|
+
page: int = 1
|
|
166
|
+
page_size: int = 20
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@dataclass
|
|
170
|
+
class SearchOrders(Query):
|
|
171
|
+
query: str
|
|
172
|
+
filters: dict = None
|
|
173
|
+
sort_by: str = "created_at"
|
|
174
|
+
sort_order: str = "desc"
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
# Query result types
|
|
178
|
+
@dataclass
|
|
179
|
+
class OrderView:
|
|
180
|
+
order_id: str
|
|
181
|
+
customer_id: str
|
|
182
|
+
status: str
|
|
183
|
+
total_amount: float
|
|
184
|
+
item_count: int
|
|
185
|
+
created_at: datetime
|
|
186
|
+
shipped_at: Optional[datetime] = None
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
@dataclass
|
|
190
|
+
class PaginatedResult(Generic[T]):
|
|
191
|
+
items: List[T]
|
|
192
|
+
total: int
|
|
193
|
+
page: int
|
|
194
|
+
page_size: int
|
|
195
|
+
|
|
196
|
+
@property
|
|
197
|
+
def total_pages(self) -> int:
|
|
198
|
+
return (self.total + self.page_size - 1) // self.page_size
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
# Query handler base
|
|
202
|
+
T = TypeVar('T', bound=Query)
|
|
203
|
+
R = TypeVar('R')
|
|
204
|
+
|
|
205
|
+
class QueryHandler(ABC, Generic[T, R]):
|
|
206
|
+
@abstractmethod
|
|
207
|
+
async def handle(self, query: T) -> R:
|
|
208
|
+
pass
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
# Query bus
|
|
212
|
+
class QueryBus:
|
|
213
|
+
def __init__(self):
|
|
214
|
+
self._handlers: Dict[Type[Query], QueryHandler] = {}
|
|
215
|
+
|
|
216
|
+
def register(self, query_type: Type[Query], handler: QueryHandler):
|
|
217
|
+
self._handlers[query_type] = handler
|
|
218
|
+
|
|
219
|
+
async def dispatch(self, query: Query) -> Any:
|
|
220
|
+
handler = self._handlers.get(type(query))
|
|
221
|
+
if not handler:
|
|
222
|
+
raise ValueError(f"No handler for {type(query).__name__}")
|
|
223
|
+
return await handler.handle(query)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
# Query handler implementation
|
|
227
|
+
class GetOrderByIdHandler(QueryHandler[GetOrderById, Optional[OrderView]]):
|
|
228
|
+
def __init__(self, read_db):
|
|
229
|
+
self.read_db = read_db
|
|
230
|
+
|
|
231
|
+
async def handle(self, query: GetOrderById) -> Optional[OrderView]:
|
|
232
|
+
async with self.read_db.acquire() as conn:
|
|
233
|
+
row = await conn.fetchrow(
|
|
234
|
+
"""
|
|
235
|
+
SELECT order_id, customer_id, status, total_amount,
|
|
236
|
+
item_count, created_at, shipped_at
|
|
237
|
+
FROM order_views
|
|
238
|
+
WHERE order_id = $1
|
|
239
|
+
""",
|
|
240
|
+
query.order_id
|
|
241
|
+
)
|
|
242
|
+
if row:
|
|
243
|
+
return OrderView(**dict(row))
|
|
244
|
+
return None
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
class GetCustomerOrdersHandler(QueryHandler[GetCustomerOrders, PaginatedResult[OrderView]]):
|
|
248
|
+
def __init__(self, read_db):
|
|
249
|
+
self.read_db = read_db
|
|
250
|
+
|
|
251
|
+
async def handle(self, query: GetCustomerOrders) -> PaginatedResult[OrderView]:
|
|
252
|
+
async with self.read_db.acquire() as conn:
|
|
253
|
+
# Build query with optional status filter
|
|
254
|
+
where_clause = "customer_id = $1"
|
|
255
|
+
params = [query.customer_id]
|
|
256
|
+
|
|
257
|
+
if query.status:
|
|
258
|
+
where_clause += " AND status = $2"
|
|
259
|
+
params.append(query.status)
|
|
260
|
+
|
|
261
|
+
# Get total count
|
|
262
|
+
total = await conn.fetchval(
|
|
263
|
+
f"SELECT COUNT(*) FROM order_views WHERE {where_clause}",
|
|
264
|
+
*params
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
# Get paginated results
|
|
268
|
+
offset = (query.page - 1) * query.page_size
|
|
269
|
+
rows = await conn.fetch(
|
|
270
|
+
f"""
|
|
271
|
+
SELECT order_id, customer_id, status, total_amount,
|
|
272
|
+
item_count, created_at, shipped_at
|
|
273
|
+
FROM order_views
|
|
274
|
+
WHERE {where_clause}
|
|
275
|
+
ORDER BY created_at DESC
|
|
276
|
+
LIMIT ${len(params) + 1} OFFSET ${len(params) + 2}
|
|
277
|
+
""",
|
|
278
|
+
*params, query.page_size, offset
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
return PaginatedResult(
|
|
282
|
+
items=[OrderView(**dict(row)) for row in rows],
|
|
283
|
+
total=total,
|
|
284
|
+
page=query.page,
|
|
285
|
+
page_size=query.page_size
|
|
286
|
+
)
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Template 3: FastAPI CQRS Application
|
|
290
|
+
|
|
291
|
+
```python
|
|
292
|
+
from fastapi import FastAPI, HTTPException, Depends
|
|
293
|
+
from pydantic import BaseModel
|
|
294
|
+
from typing import List, Optional
|
|
295
|
+
|
|
296
|
+
app = FastAPI()
|
|
297
|
+
|
|
298
|
+
# Request/Response models
|
|
299
|
+
class CreateOrderRequest(BaseModel):
|
|
300
|
+
customer_id: str
|
|
301
|
+
items: List[dict]
|
|
302
|
+
shipping_address: dict
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
class OrderResponse(BaseModel):
|
|
306
|
+
order_id: str
|
|
307
|
+
customer_id: str
|
|
308
|
+
status: str
|
|
309
|
+
total_amount: float
|
|
310
|
+
item_count: int
|
|
311
|
+
created_at: datetime
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
# Dependency injection
|
|
315
|
+
def get_command_bus() -> CommandBus:
|
|
316
|
+
return app.state.command_bus
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
def get_query_bus() -> QueryBus:
|
|
320
|
+
return app.state.query_bus
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
# Command endpoints (POST, PUT, DELETE)
|
|
324
|
+
@app.post("/orders", response_model=dict)
|
|
325
|
+
async def create_order(
|
|
326
|
+
request: CreateOrderRequest,
|
|
327
|
+
command_bus: CommandBus = Depends(get_command_bus)
|
|
328
|
+
):
|
|
329
|
+
command = CreateOrder(
|
|
330
|
+
customer_id=request.customer_id,
|
|
331
|
+
items=request.items,
|
|
332
|
+
shipping_address=request.shipping_address
|
|
333
|
+
)
|
|
334
|
+
order_id = await command_bus.dispatch(command)
|
|
335
|
+
return {"order_id": order_id}
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
@app.post("/orders/{order_id}/items")
|
|
339
|
+
async def add_item(
|
|
340
|
+
order_id: str,
|
|
341
|
+
product_id: str,
|
|
342
|
+
quantity: int,
|
|
343
|
+
price: float,
|
|
344
|
+
command_bus: CommandBus = Depends(get_command_bus)
|
|
345
|
+
):
|
|
346
|
+
command = AddOrderItem(
|
|
347
|
+
order_id=order_id,
|
|
348
|
+
product_id=product_id,
|
|
349
|
+
quantity=quantity,
|
|
350
|
+
price=price
|
|
351
|
+
)
|
|
352
|
+
await command_bus.dispatch(command)
|
|
353
|
+
return {"status": "item_added"}
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
@app.delete("/orders/{order_id}")
|
|
357
|
+
async def cancel_order(
|
|
358
|
+
order_id: str,
|
|
359
|
+
reason: str,
|
|
360
|
+
command_bus: CommandBus = Depends(get_command_bus)
|
|
361
|
+
):
|
|
362
|
+
command = CancelOrder(order_id=order_id, reason=reason)
|
|
363
|
+
await command_bus.dispatch(command)
|
|
364
|
+
return {"status": "cancelled"}
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
# Query endpoints (GET)
|
|
368
|
+
@app.get("/orders/{order_id}", response_model=OrderResponse)
|
|
369
|
+
async def get_order(
|
|
370
|
+
order_id: str,
|
|
371
|
+
query_bus: QueryBus = Depends(get_query_bus)
|
|
372
|
+
):
|
|
373
|
+
query = GetOrderById(order_id=order_id)
|
|
374
|
+
result = await query_bus.dispatch(query)
|
|
375
|
+
if not result:
|
|
376
|
+
raise HTTPException(status_code=404, detail="Order not found")
|
|
377
|
+
return result
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
@app.get("/customers/{customer_id}/orders")
|
|
381
|
+
async def get_customer_orders(
|
|
382
|
+
customer_id: str,
|
|
383
|
+
status: Optional[str] = None,
|
|
384
|
+
page: int = 1,
|
|
385
|
+
page_size: int = 20,
|
|
386
|
+
query_bus: QueryBus = Depends(get_query_bus)
|
|
387
|
+
):
|
|
388
|
+
query = GetCustomerOrders(
|
|
389
|
+
customer_id=customer_id,
|
|
390
|
+
status=status,
|
|
391
|
+
page=page,
|
|
392
|
+
page_size=page_size
|
|
393
|
+
)
|
|
394
|
+
return await query_bus.dispatch(query)
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
@app.get("/orders/search")
|
|
398
|
+
async def search_orders(
|
|
399
|
+
q: str,
|
|
400
|
+
sort_by: str = "created_at",
|
|
401
|
+
query_bus: QueryBus = Depends(get_query_bus)
|
|
402
|
+
):
|
|
403
|
+
query = SearchOrders(query=q, sort_by=sort_by)
|
|
404
|
+
return await query_bus.dispatch(query)
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Template 4: Read Model Synchronization
|
|
408
|
+
|
|
409
|
+
```python
|
|
410
|
+
class ReadModelSynchronizer:
|
|
411
|
+
"""Keeps read models in sync with events."""
|
|
412
|
+
|
|
413
|
+
def __init__(self, event_store, read_db, projections: List[Projection]):
|
|
414
|
+
self.event_store = event_store
|
|
415
|
+
self.read_db = read_db
|
|
416
|
+
self.projections = {p.name: p for p in projections}
|
|
417
|
+
|
|
418
|
+
async def run(self):
|
|
419
|
+
"""Continuously sync read models."""
|
|
420
|
+
while True:
|
|
421
|
+
for name, projection in self.projections.items():
|
|
422
|
+
await self._sync_projection(projection)
|
|
423
|
+
await asyncio.sleep(0.1)
|
|
424
|
+
|
|
425
|
+
async def _sync_projection(self, projection: Projection):
|
|
426
|
+
checkpoint = await self._get_checkpoint(projection.name)
|
|
427
|
+
|
|
428
|
+
events = await self.event_store.read_all(
|
|
429
|
+
from_position=checkpoint,
|
|
430
|
+
limit=100
|
|
431
|
+
)
|
|
432
|
+
|
|
433
|
+
for event in events:
|
|
434
|
+
if event.event_type in projection.handles():
|
|
435
|
+
try:
|
|
436
|
+
await projection.apply(event)
|
|
437
|
+
except Exception as e:
|
|
438
|
+
# Log error, possibly retry or skip
|
|
439
|
+
logger.error(f"Projection error: {e}")
|
|
440
|
+
continue
|
|
441
|
+
|
|
442
|
+
await self._save_checkpoint(projection.name, event.global_position)
|
|
443
|
+
|
|
444
|
+
async def rebuild_projection(self, projection_name: str):
|
|
445
|
+
"""Rebuild a projection from scratch."""
|
|
446
|
+
projection = self.projections[projection_name]
|
|
447
|
+
|
|
448
|
+
# Clear existing data
|
|
449
|
+
await projection.clear()
|
|
450
|
+
|
|
451
|
+
# Reset checkpoint
|
|
452
|
+
await self._save_checkpoint(projection_name, 0)
|
|
453
|
+
|
|
454
|
+
# Rebuild
|
|
455
|
+
while True:
|
|
456
|
+
checkpoint = await self._get_checkpoint(projection_name)
|
|
457
|
+
events = await self.event_store.read_all(checkpoint, 1000)
|
|
458
|
+
|
|
459
|
+
if not events:
|
|
460
|
+
break
|
|
461
|
+
|
|
462
|
+
for event in events:
|
|
463
|
+
if event.event_type in projection.handles():
|
|
464
|
+
await projection.apply(event)
|
|
465
|
+
|
|
466
|
+
await self._save_checkpoint(
|
|
467
|
+
projection_name,
|
|
468
|
+
events[-1].global_position
|
|
469
|
+
)
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### Template 5: Eventual Consistency Handling
|
|
473
|
+
|
|
474
|
+
```python
|
|
475
|
+
class ConsistentQueryHandler:
|
|
476
|
+
"""Query handler that can wait for consistency."""
|
|
477
|
+
|
|
478
|
+
def __init__(self, read_db, event_store):
|
|
479
|
+
self.read_db = read_db
|
|
480
|
+
self.event_store = event_store
|
|
481
|
+
|
|
482
|
+
async def query_after_command(
|
|
483
|
+
self,
|
|
484
|
+
query: Query,
|
|
485
|
+
expected_version: int,
|
|
486
|
+
stream_id: str,
|
|
487
|
+
timeout: float = 5.0
|
|
488
|
+
):
|
|
489
|
+
"""
|
|
490
|
+
Execute query, ensuring read model is at expected version.
|
|
491
|
+
Used for read-your-writes consistency.
|
|
492
|
+
"""
|
|
493
|
+
start_time = time.time()
|
|
494
|
+
|
|
495
|
+
while time.time() - start_time < timeout:
|
|
496
|
+
# Check if read model is caught up
|
|
497
|
+
projection_version = await self._get_projection_version(stream_id)
|
|
498
|
+
|
|
499
|
+
if projection_version >= expected_version:
|
|
500
|
+
return await self.execute_query(query)
|
|
501
|
+
|
|
502
|
+
# Wait a bit and retry
|
|
503
|
+
await asyncio.sleep(0.1)
|
|
504
|
+
|
|
505
|
+
# Timeout - return stale data with warning
|
|
506
|
+
return {
|
|
507
|
+
"data": await self.execute_query(query),
|
|
508
|
+
"_warning": "Data may be stale"
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
async def _get_projection_version(self, stream_id: str) -> int:
|
|
512
|
+
"""Get the last processed event version for a stream."""
|
|
513
|
+
async with self.read_db.acquire() as conn:
|
|
514
|
+
return await conn.fetchval(
|
|
515
|
+
"SELECT last_event_version FROM projection_state WHERE stream_id = $1",
|
|
516
|
+
stream_id
|
|
517
|
+
) or 0
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
## Best Practices
|
|
521
|
+
|
|
522
|
+
### Do's
|
|
523
|
+
|
|
524
|
+
- **Separate command and query models** - Different needs
|
|
525
|
+
- **Use eventual consistency** - Accept propagation delay
|
|
526
|
+
- **Validate in command handlers** - Before state change
|
|
527
|
+
- **Denormalize read models** - Optimize for queries
|
|
528
|
+
- **Version your events** - For schema evolution
|
|
529
|
+
|
|
530
|
+
### Don'ts
|
|
531
|
+
|
|
532
|
+
- **Don't query in commands** - Use only for writes
|
|
533
|
+
- **Don't couple read/write schemas** - Independent evolution
|
|
534
|
+
- **Don't over-engineer** - Start simple
|
|
535
|
+
- **Don't ignore consistency SLAs** - Define acceptable lag
|
|
536
|
+
|
|
537
|
+
## Resources
|
|
538
|
+
|
|
539
|
+
- [CQRS Pattern](https://martinfowler.com/bliki/CQRS.html)
|
|
540
|
+
- [Microsoft CQRS Guidance](https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: csharp-pro
|
|
3
|
+
description: Write modern C# code with advanced features like records, pattern
|
|
4
|
+
matching, and async/await. Optimizes .NET applications, implements enterprise
|
|
5
|
+
patterns, and ensures comprehensive testing. Use PROACTIVELY for C#
|
|
6
|
+
refactoring, performance optimization, or complex .NET solutions.
|
|
7
|
+
metadata:
|
|
8
|
+
model: inherit
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Use this skill when
|
|
12
|
+
|
|
13
|
+
- Working on csharp pro tasks or workflows
|
|
14
|
+
- Needing guidance, best practices, or checklists for csharp pro
|
|
15
|
+
|
|
16
|
+
## Do not use this skill when
|
|
17
|
+
|
|
18
|
+
- The task is unrelated to csharp pro
|
|
19
|
+
- You need a different domain or tool outside this scope
|
|
20
|
+
|
|
21
|
+
## Instructions
|
|
22
|
+
|
|
23
|
+
- Clarify goals, constraints, and required inputs.
|
|
24
|
+
- Apply relevant best practices and validate outcomes.
|
|
25
|
+
- Provide actionable steps and verification.
|
|
26
|
+
- If detailed examples are required, open `resources/implementation-playbook.md`.
|
|
27
|
+
|
|
28
|
+
You are a C# expert specializing in modern .NET development and enterprise-grade applications.
|
|
29
|
+
|
|
30
|
+
## Focus Areas
|
|
31
|
+
|
|
32
|
+
- Modern C# features (records, pattern matching, nullable reference types)
|
|
33
|
+
- .NET ecosystem and frameworks (ASP.NET Core, Entity Framework, Blazor)
|
|
34
|
+
- SOLID principles and design patterns in C#
|
|
35
|
+
- Performance optimization and memory management
|
|
36
|
+
- Async/await and concurrent programming with TPL
|
|
37
|
+
- Comprehensive testing (xUnit, NUnit, Moq, FluentAssertions)
|
|
38
|
+
- Enterprise patterns and microservices architecture
|
|
39
|
+
|
|
40
|
+
## Approach
|
|
41
|
+
|
|
42
|
+
1. Leverage modern C# features for clean, expressive code
|
|
43
|
+
2. Follow SOLID principles and favor composition over inheritance
|
|
44
|
+
3. Use nullable reference types and comprehensive error handling
|
|
45
|
+
4. Optimize for performance with span, memory, and value types
|
|
46
|
+
5. Implement proper async patterns without blocking
|
|
47
|
+
6. Maintain high test coverage with meaningful unit tests
|
|
48
|
+
|
|
49
|
+
## Output
|
|
50
|
+
|
|
51
|
+
- Clean C# code with modern language features
|
|
52
|
+
- Comprehensive unit tests with proper mocking
|
|
53
|
+
- Performance benchmarks using BenchmarkDotNet
|
|
54
|
+
- Async/await implementations with proper exception handling
|
|
55
|
+
- NuGet package configuration and dependency management
|
|
56
|
+
- Code analysis and style configuration (EditorConfig, analyzers)
|
|
57
|
+
- Enterprise architecture patterns when applicable
|
|
58
|
+
|
|
59
|
+
Follow .NET coding standards and include comprehensive XML documentation.
|