@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,496 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: saga-orchestration
|
|
3
|
+
description: Implement saga patterns for distributed transactions and cross-aggregate workflows. Use when coordinating multi-step business processes, handling compensating transactions, or managing long-running workflows.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Saga Orchestration
|
|
7
|
+
|
|
8
|
+
Patterns for managing distributed transactions and long-running business processes.
|
|
9
|
+
|
|
10
|
+
## Do not use this skill when
|
|
11
|
+
|
|
12
|
+
- The task is unrelated to saga orchestration
|
|
13
|
+
- You need a different domain or tool outside this scope
|
|
14
|
+
|
|
15
|
+
## Instructions
|
|
16
|
+
|
|
17
|
+
- Clarify goals, constraints, and required inputs.
|
|
18
|
+
- Apply relevant best practices and validate outcomes.
|
|
19
|
+
- Provide actionable steps and verification.
|
|
20
|
+
- If detailed examples are required, open `resources/implementation-playbook.md`.
|
|
21
|
+
|
|
22
|
+
## Use this skill when
|
|
23
|
+
|
|
24
|
+
- Coordinating multi-service transactions
|
|
25
|
+
- Implementing compensating transactions
|
|
26
|
+
- Managing long-running business workflows
|
|
27
|
+
- Handling failures in distributed systems
|
|
28
|
+
- Building order fulfillment processes
|
|
29
|
+
- Implementing approval workflows
|
|
30
|
+
|
|
31
|
+
## Core Concepts
|
|
32
|
+
|
|
33
|
+
### 1. Saga Types
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Choreography Orchestration
|
|
37
|
+
┌─────┐ ┌─────┐ ┌─────┐ ┌─────────────┐
|
|
38
|
+
│Svc A│─►│Svc B│─►│Svc C│ │ Orchestrator│
|
|
39
|
+
└─────┘ └─────┘ └─────┘ └──────┬──────┘
|
|
40
|
+
│ │ │ │
|
|
41
|
+
▼ ▼ ▼ ┌─────┼─────┐
|
|
42
|
+
Event Event Event ▼ ▼ ▼
|
|
43
|
+
┌────┐┌────┐┌────┐
|
|
44
|
+
│Svc1││Svc2││Svc3│
|
|
45
|
+
└────┘└────┘└────┘
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 2. Saga Execution States
|
|
49
|
+
|
|
50
|
+
| State | Description |
|
|
51
|
+
| ---------------- | ------------------------------ |
|
|
52
|
+
| **Started** | Saga initiated |
|
|
53
|
+
| **Pending** | Waiting for step completion |
|
|
54
|
+
| **Compensating** | Rolling back due to failure |
|
|
55
|
+
| **Completed** | All steps succeeded |
|
|
56
|
+
| **Failed** | Saga failed after compensation |
|
|
57
|
+
|
|
58
|
+
## Templates
|
|
59
|
+
|
|
60
|
+
### Template 1: Saga Orchestrator Base
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
from abc import ABC, abstractmethod
|
|
64
|
+
from dataclasses import dataclass, field
|
|
65
|
+
from enum import Enum
|
|
66
|
+
from typing import List, Dict, Any, Optional
|
|
67
|
+
from datetime import datetime
|
|
68
|
+
import uuid
|
|
69
|
+
|
|
70
|
+
class SagaState(Enum):
|
|
71
|
+
STARTED = "started"
|
|
72
|
+
PENDING = "pending"
|
|
73
|
+
COMPENSATING = "compensating"
|
|
74
|
+
COMPLETED = "completed"
|
|
75
|
+
FAILED = "failed"
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@dataclass
|
|
79
|
+
class SagaStep:
|
|
80
|
+
name: str
|
|
81
|
+
action: str
|
|
82
|
+
compensation: str
|
|
83
|
+
status: str = "pending"
|
|
84
|
+
result: Optional[Dict] = None
|
|
85
|
+
error: Optional[str] = None
|
|
86
|
+
executed_at: Optional[datetime] = None
|
|
87
|
+
compensated_at: Optional[datetime] = None
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@dataclass
|
|
91
|
+
class Saga:
|
|
92
|
+
saga_id: str
|
|
93
|
+
saga_type: str
|
|
94
|
+
state: SagaState
|
|
95
|
+
data: Dict[str, Any]
|
|
96
|
+
steps: List[SagaStep]
|
|
97
|
+
current_step: int = 0
|
|
98
|
+
created_at: datetime = field(default_factory=datetime.utcnow)
|
|
99
|
+
updated_at: datetime = field(default_factory=datetime.utcnow)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class SagaOrchestrator(ABC):
|
|
103
|
+
"""Base class for saga orchestrators."""
|
|
104
|
+
|
|
105
|
+
def __init__(self, saga_store, event_publisher):
|
|
106
|
+
self.saga_store = saga_store
|
|
107
|
+
self.event_publisher = event_publisher
|
|
108
|
+
|
|
109
|
+
@abstractmethod
|
|
110
|
+
def define_steps(self, data: Dict) -> List[SagaStep]:
|
|
111
|
+
"""Define the saga steps."""
|
|
112
|
+
pass
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
@abstractmethod
|
|
116
|
+
def saga_type(self) -> str:
|
|
117
|
+
"""Unique saga type identifier."""
|
|
118
|
+
pass
|
|
119
|
+
|
|
120
|
+
async def start(self, data: Dict) -> Saga:
|
|
121
|
+
"""Start a new saga."""
|
|
122
|
+
saga = Saga(
|
|
123
|
+
saga_id=str(uuid.uuid4()),
|
|
124
|
+
saga_type=self.saga_type,
|
|
125
|
+
state=SagaState.STARTED,
|
|
126
|
+
data=data,
|
|
127
|
+
steps=self.define_steps(data)
|
|
128
|
+
)
|
|
129
|
+
await self.saga_store.save(saga)
|
|
130
|
+
await self._execute_next_step(saga)
|
|
131
|
+
return saga
|
|
132
|
+
|
|
133
|
+
async def handle_step_completed(self, saga_id: str, step_name: str, result: Dict):
|
|
134
|
+
"""Handle successful step completion."""
|
|
135
|
+
saga = await self.saga_store.get(saga_id)
|
|
136
|
+
|
|
137
|
+
# Update step
|
|
138
|
+
for step in saga.steps:
|
|
139
|
+
if step.name == step_name:
|
|
140
|
+
step.status = "completed"
|
|
141
|
+
step.result = result
|
|
142
|
+
step.executed_at = datetime.utcnow()
|
|
143
|
+
break
|
|
144
|
+
|
|
145
|
+
saga.current_step += 1
|
|
146
|
+
saga.updated_at = datetime.utcnow()
|
|
147
|
+
|
|
148
|
+
# Check if saga is complete
|
|
149
|
+
if saga.current_step >= len(saga.steps):
|
|
150
|
+
saga.state = SagaState.COMPLETED
|
|
151
|
+
await self.saga_store.save(saga)
|
|
152
|
+
await self._on_saga_completed(saga)
|
|
153
|
+
else:
|
|
154
|
+
saga.state = SagaState.PENDING
|
|
155
|
+
await self.saga_store.save(saga)
|
|
156
|
+
await self._execute_next_step(saga)
|
|
157
|
+
|
|
158
|
+
async def handle_step_failed(self, saga_id: str, step_name: str, error: str):
|
|
159
|
+
"""Handle step failure - start compensation."""
|
|
160
|
+
saga = await self.saga_store.get(saga_id)
|
|
161
|
+
|
|
162
|
+
# Mark step as failed
|
|
163
|
+
for step in saga.steps:
|
|
164
|
+
if step.name == step_name:
|
|
165
|
+
step.status = "failed"
|
|
166
|
+
step.error = error
|
|
167
|
+
break
|
|
168
|
+
|
|
169
|
+
saga.state = SagaState.COMPENSATING
|
|
170
|
+
saga.updated_at = datetime.utcnow()
|
|
171
|
+
await self.saga_store.save(saga)
|
|
172
|
+
|
|
173
|
+
# Start compensation from current step backwards
|
|
174
|
+
await self._compensate(saga)
|
|
175
|
+
|
|
176
|
+
async def _execute_next_step(self, saga: Saga):
|
|
177
|
+
"""Execute the next step in the saga."""
|
|
178
|
+
if saga.current_step >= len(saga.steps):
|
|
179
|
+
return
|
|
180
|
+
|
|
181
|
+
step = saga.steps[saga.current_step]
|
|
182
|
+
step.status = "executing"
|
|
183
|
+
await self.saga_store.save(saga)
|
|
184
|
+
|
|
185
|
+
# Publish command to execute step
|
|
186
|
+
await self.event_publisher.publish(
|
|
187
|
+
step.action,
|
|
188
|
+
{
|
|
189
|
+
"saga_id": saga.saga_id,
|
|
190
|
+
"step_name": step.name,
|
|
191
|
+
**saga.data
|
|
192
|
+
}
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
async def _compensate(self, saga: Saga):
|
|
196
|
+
"""Execute compensation for completed steps."""
|
|
197
|
+
# Compensate in reverse order
|
|
198
|
+
for i in range(saga.current_step - 1, -1, -1):
|
|
199
|
+
step = saga.steps[i]
|
|
200
|
+
if step.status == "completed":
|
|
201
|
+
step.status = "compensating"
|
|
202
|
+
await self.saga_store.save(saga)
|
|
203
|
+
|
|
204
|
+
await self.event_publisher.publish(
|
|
205
|
+
step.compensation,
|
|
206
|
+
{
|
|
207
|
+
"saga_id": saga.saga_id,
|
|
208
|
+
"step_name": step.name,
|
|
209
|
+
"original_result": step.result,
|
|
210
|
+
**saga.data
|
|
211
|
+
}
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
async def handle_compensation_completed(self, saga_id: str, step_name: str):
|
|
215
|
+
"""Handle compensation completion."""
|
|
216
|
+
saga = await self.saga_store.get(saga_id)
|
|
217
|
+
|
|
218
|
+
for step in saga.steps:
|
|
219
|
+
if step.name == step_name:
|
|
220
|
+
step.status = "compensated"
|
|
221
|
+
step.compensated_at = datetime.utcnow()
|
|
222
|
+
break
|
|
223
|
+
|
|
224
|
+
# Check if all compensations complete
|
|
225
|
+
all_compensated = all(
|
|
226
|
+
s.status in ("compensated", "pending", "failed")
|
|
227
|
+
for s in saga.steps
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
if all_compensated:
|
|
231
|
+
saga.state = SagaState.FAILED
|
|
232
|
+
await self._on_saga_failed(saga)
|
|
233
|
+
|
|
234
|
+
await self.saga_store.save(saga)
|
|
235
|
+
|
|
236
|
+
async def _on_saga_completed(self, saga: Saga):
|
|
237
|
+
"""Called when saga completes successfully."""
|
|
238
|
+
await self.event_publisher.publish(
|
|
239
|
+
f"{self.saga_type}Completed",
|
|
240
|
+
{"saga_id": saga.saga_id, **saga.data}
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
async def _on_saga_failed(self, saga: Saga):
|
|
244
|
+
"""Called when saga fails after compensation."""
|
|
245
|
+
await self.event_publisher.publish(
|
|
246
|
+
f"{self.saga_type}Failed",
|
|
247
|
+
{"saga_id": saga.saga_id, "error": "Saga failed", **saga.data}
|
|
248
|
+
)
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Template 2: Order Fulfillment Saga
|
|
252
|
+
|
|
253
|
+
```python
|
|
254
|
+
class OrderFulfillmentSaga(SagaOrchestrator):
|
|
255
|
+
"""Orchestrates order fulfillment across services."""
|
|
256
|
+
|
|
257
|
+
@property
|
|
258
|
+
def saga_type(self) -> str:
|
|
259
|
+
return "OrderFulfillment"
|
|
260
|
+
|
|
261
|
+
def define_steps(self, data: Dict) -> List[SagaStep]:
|
|
262
|
+
return [
|
|
263
|
+
SagaStep(
|
|
264
|
+
name="reserve_inventory",
|
|
265
|
+
action="InventoryService.ReserveItems",
|
|
266
|
+
compensation="InventoryService.ReleaseReservation"
|
|
267
|
+
),
|
|
268
|
+
SagaStep(
|
|
269
|
+
name="process_payment",
|
|
270
|
+
action="PaymentService.ProcessPayment",
|
|
271
|
+
compensation="PaymentService.RefundPayment"
|
|
272
|
+
),
|
|
273
|
+
SagaStep(
|
|
274
|
+
name="create_shipment",
|
|
275
|
+
action="ShippingService.CreateShipment",
|
|
276
|
+
compensation="ShippingService.CancelShipment"
|
|
277
|
+
),
|
|
278
|
+
SagaStep(
|
|
279
|
+
name="send_confirmation",
|
|
280
|
+
action="NotificationService.SendOrderConfirmation",
|
|
281
|
+
compensation="NotificationService.SendCancellationNotice"
|
|
282
|
+
)
|
|
283
|
+
]
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
# Usage
|
|
287
|
+
async def create_order(order_data: Dict):
|
|
288
|
+
saga = OrderFulfillmentSaga(saga_store, event_publisher)
|
|
289
|
+
return await saga.start({
|
|
290
|
+
"order_id": order_data["order_id"],
|
|
291
|
+
"customer_id": order_data["customer_id"],
|
|
292
|
+
"items": order_data["items"],
|
|
293
|
+
"payment_method": order_data["payment_method"],
|
|
294
|
+
"shipping_address": order_data["shipping_address"]
|
|
295
|
+
})
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
# Event handlers in each service
|
|
299
|
+
class InventoryService:
|
|
300
|
+
async def handle_reserve_items(self, command: Dict):
|
|
301
|
+
try:
|
|
302
|
+
# Reserve inventory
|
|
303
|
+
reservation = await self.reserve(
|
|
304
|
+
command["items"],
|
|
305
|
+
command["order_id"]
|
|
306
|
+
)
|
|
307
|
+
# Report success
|
|
308
|
+
await self.event_publisher.publish(
|
|
309
|
+
"SagaStepCompleted",
|
|
310
|
+
{
|
|
311
|
+
"saga_id": command["saga_id"],
|
|
312
|
+
"step_name": "reserve_inventory",
|
|
313
|
+
"result": {"reservation_id": reservation.id}
|
|
314
|
+
}
|
|
315
|
+
)
|
|
316
|
+
except InsufficientInventoryError as e:
|
|
317
|
+
await self.event_publisher.publish(
|
|
318
|
+
"SagaStepFailed",
|
|
319
|
+
{
|
|
320
|
+
"saga_id": command["saga_id"],
|
|
321
|
+
"step_name": "reserve_inventory",
|
|
322
|
+
"error": str(e)
|
|
323
|
+
}
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
async def handle_release_reservation(self, command: Dict):
|
|
327
|
+
# Compensating action
|
|
328
|
+
await self.release_reservation(
|
|
329
|
+
command["original_result"]["reservation_id"]
|
|
330
|
+
)
|
|
331
|
+
await self.event_publisher.publish(
|
|
332
|
+
"SagaCompensationCompleted",
|
|
333
|
+
{
|
|
334
|
+
"saga_id": command["saga_id"],
|
|
335
|
+
"step_name": "reserve_inventory"
|
|
336
|
+
}
|
|
337
|
+
)
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Template 3: Choreography-Based Saga
|
|
341
|
+
|
|
342
|
+
```python
|
|
343
|
+
from dataclasses import dataclass
|
|
344
|
+
from typing import Dict, Any
|
|
345
|
+
import asyncio
|
|
346
|
+
|
|
347
|
+
@dataclass
|
|
348
|
+
class SagaContext:
|
|
349
|
+
"""Passed through choreographed saga events."""
|
|
350
|
+
saga_id: str
|
|
351
|
+
step: int
|
|
352
|
+
data: Dict[str, Any]
|
|
353
|
+
completed_steps: list
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
class OrderChoreographySaga:
|
|
357
|
+
"""Choreography-based saga using events."""
|
|
358
|
+
|
|
359
|
+
def __init__(self, event_bus):
|
|
360
|
+
self.event_bus = event_bus
|
|
361
|
+
self._register_handlers()
|
|
362
|
+
|
|
363
|
+
def _register_handlers(self):
|
|
364
|
+
self.event_bus.subscribe("OrderCreated", self._on_order_created)
|
|
365
|
+
self.event_bus.subscribe("InventoryReserved", self._on_inventory_reserved)
|
|
366
|
+
self.event_bus.subscribe("PaymentProcessed", self._on_payment_processed)
|
|
367
|
+
self.event_bus.subscribe("ShipmentCreated", self._on_shipment_created)
|
|
368
|
+
|
|
369
|
+
# Compensation handlers
|
|
370
|
+
self.event_bus.subscribe("PaymentFailed", self._on_payment_failed)
|
|
371
|
+
self.event_bus.subscribe("ShipmentFailed", self._on_shipment_failed)
|
|
372
|
+
|
|
373
|
+
async def _on_order_created(self, event: Dict):
|
|
374
|
+
"""Step 1: Order created, reserve inventory."""
|
|
375
|
+
await self.event_bus.publish("ReserveInventory", {
|
|
376
|
+
"saga_id": event["order_id"],
|
|
377
|
+
"order_id": event["order_id"],
|
|
378
|
+
"items": event["items"]
|
|
379
|
+
})
|
|
380
|
+
|
|
381
|
+
async def _on_inventory_reserved(self, event: Dict):
|
|
382
|
+
"""Step 2: Inventory reserved, process payment."""
|
|
383
|
+
await self.event_bus.publish("ProcessPayment", {
|
|
384
|
+
"saga_id": event["saga_id"],
|
|
385
|
+
"order_id": event["order_id"],
|
|
386
|
+
"amount": event["total_amount"],
|
|
387
|
+
"reservation_id": event["reservation_id"]
|
|
388
|
+
})
|
|
389
|
+
|
|
390
|
+
async def _on_payment_processed(self, event: Dict):
|
|
391
|
+
"""Step 3: Payment done, create shipment."""
|
|
392
|
+
await self.event_bus.publish("CreateShipment", {
|
|
393
|
+
"saga_id": event["saga_id"],
|
|
394
|
+
"order_id": event["order_id"],
|
|
395
|
+
"payment_id": event["payment_id"]
|
|
396
|
+
})
|
|
397
|
+
|
|
398
|
+
async def _on_shipment_created(self, event: Dict):
|
|
399
|
+
"""Step 4: Complete - send confirmation."""
|
|
400
|
+
await self.event_bus.publish("OrderFulfilled", {
|
|
401
|
+
"saga_id": event["saga_id"],
|
|
402
|
+
"order_id": event["order_id"],
|
|
403
|
+
"tracking_number": event["tracking_number"]
|
|
404
|
+
})
|
|
405
|
+
|
|
406
|
+
# Compensation handlers
|
|
407
|
+
async def _on_payment_failed(self, event: Dict):
|
|
408
|
+
"""Payment failed - release inventory."""
|
|
409
|
+
await self.event_bus.publish("ReleaseInventory", {
|
|
410
|
+
"saga_id": event["saga_id"],
|
|
411
|
+
"reservation_id": event["reservation_id"]
|
|
412
|
+
})
|
|
413
|
+
await self.event_bus.publish("OrderFailed", {
|
|
414
|
+
"order_id": event["order_id"],
|
|
415
|
+
"reason": "Payment failed"
|
|
416
|
+
})
|
|
417
|
+
|
|
418
|
+
async def _on_shipment_failed(self, event: Dict):
|
|
419
|
+
"""Shipment failed - refund payment and release inventory."""
|
|
420
|
+
await self.event_bus.publish("RefundPayment", {
|
|
421
|
+
"saga_id": event["saga_id"],
|
|
422
|
+
"payment_id": event["payment_id"]
|
|
423
|
+
})
|
|
424
|
+
await self.event_bus.publish("ReleaseInventory", {
|
|
425
|
+
"saga_id": event["saga_id"],
|
|
426
|
+
"reservation_id": event["reservation_id"]
|
|
427
|
+
})
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Template 4: Saga with Timeouts
|
|
431
|
+
|
|
432
|
+
```python
|
|
433
|
+
class TimeoutSagaOrchestrator(SagaOrchestrator):
|
|
434
|
+
"""Saga orchestrator with step timeouts."""
|
|
435
|
+
|
|
436
|
+
def __init__(self, saga_store, event_publisher, scheduler):
|
|
437
|
+
super().__init__(saga_store, event_publisher)
|
|
438
|
+
self.scheduler = scheduler
|
|
439
|
+
|
|
440
|
+
async def _execute_next_step(self, saga: Saga):
|
|
441
|
+
if saga.current_step >= len(saga.steps):
|
|
442
|
+
return
|
|
443
|
+
|
|
444
|
+
step = saga.steps[saga.current_step]
|
|
445
|
+
step.status = "executing"
|
|
446
|
+
step.timeout_at = datetime.utcnow() + timedelta(minutes=5)
|
|
447
|
+
await self.saga_store.save(saga)
|
|
448
|
+
|
|
449
|
+
# Schedule timeout check
|
|
450
|
+
await self.scheduler.schedule(
|
|
451
|
+
f"saga_timeout_{saga.saga_id}_{step.name}",
|
|
452
|
+
self._check_timeout,
|
|
453
|
+
{"saga_id": saga.saga_id, "step_name": step.name},
|
|
454
|
+
run_at=step.timeout_at
|
|
455
|
+
)
|
|
456
|
+
|
|
457
|
+
await self.event_publisher.publish(
|
|
458
|
+
step.action,
|
|
459
|
+
{"saga_id": saga.saga_id, "step_name": step.name, **saga.data}
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
async def _check_timeout(self, data: Dict):
|
|
463
|
+
"""Check if step has timed out."""
|
|
464
|
+
saga = await self.saga_store.get(data["saga_id"])
|
|
465
|
+
step = next(s for s in saga.steps if s.name == data["step_name"])
|
|
466
|
+
|
|
467
|
+
if step.status == "executing":
|
|
468
|
+
# Step timed out - fail it
|
|
469
|
+
await self.handle_step_failed(
|
|
470
|
+
data["saga_id"],
|
|
471
|
+
data["step_name"],
|
|
472
|
+
"Step timed out"
|
|
473
|
+
)
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
## Best Practices
|
|
477
|
+
|
|
478
|
+
### Do's
|
|
479
|
+
|
|
480
|
+
- **Make steps idempotent** - Safe to retry
|
|
481
|
+
- **Design compensations carefully** - They must work
|
|
482
|
+
- **Use correlation IDs** - For tracing across services
|
|
483
|
+
- **Implement timeouts** - Don't wait forever
|
|
484
|
+
- **Log everything** - For debugging failures
|
|
485
|
+
|
|
486
|
+
### Don'ts
|
|
487
|
+
|
|
488
|
+
- **Don't assume instant completion** - Sagas take time
|
|
489
|
+
- **Don't skip compensation testing** - Most critical part
|
|
490
|
+
- **Don't couple services** - Use async messaging
|
|
491
|
+
- **Don't ignore partial failures** - Handle gracefully
|
|
492
|
+
|
|
493
|
+
## Resources
|
|
494
|
+
|
|
495
|
+
- [Saga Pattern](https://microservices.io/patterns/data/saga.html)
|
|
496
|
+
- [Designing Data-Intensive Applications](https://dataintensive.net/)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sales-automator
|
|
3
|
+
description: Draft cold emails, follow-ups, and proposal templates. Creates
|
|
4
|
+
pricing pages, case studies, and sales scripts. Use PROACTIVELY for sales
|
|
5
|
+
outreach or lead nurturing.
|
|
6
|
+
metadata:
|
|
7
|
+
model: haiku
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Use this skill when
|
|
11
|
+
|
|
12
|
+
- Working on sales automator tasks or workflows
|
|
13
|
+
- Needing guidance, best practices, or checklists for sales automator
|
|
14
|
+
|
|
15
|
+
## Do not use this skill when
|
|
16
|
+
|
|
17
|
+
- The task is unrelated to sales automator
|
|
18
|
+
- You need a different domain or tool outside this scope
|
|
19
|
+
|
|
20
|
+
## Instructions
|
|
21
|
+
|
|
22
|
+
- Clarify goals, constraints, and required inputs.
|
|
23
|
+
- Apply relevant best practices and validate outcomes.
|
|
24
|
+
- Provide actionable steps and verification.
|
|
25
|
+
- If detailed examples are required, open `resources/implementation-playbook.md`.
|
|
26
|
+
|
|
27
|
+
You are a sales automation specialist focused on conversions and relationships.
|
|
28
|
+
|
|
29
|
+
## Focus Areas
|
|
30
|
+
|
|
31
|
+
- Cold email sequences with personalization
|
|
32
|
+
- Follow-up campaigns and cadences
|
|
33
|
+
- Proposal and quote templates
|
|
34
|
+
- Case studies and social proof
|
|
35
|
+
- Sales scripts and objection handling
|
|
36
|
+
- A/B testing subject lines
|
|
37
|
+
|
|
38
|
+
## Approach
|
|
39
|
+
|
|
40
|
+
1. Lead with value, not features
|
|
41
|
+
2. Personalize using research
|
|
42
|
+
3. Keep emails short and scannable
|
|
43
|
+
4. Focus on one clear CTA
|
|
44
|
+
5. Track what converts
|
|
45
|
+
|
|
46
|
+
## Output
|
|
47
|
+
|
|
48
|
+
- Email sequence (3-5 touchpoints)
|
|
49
|
+
- Subject lines for A/B testing
|
|
50
|
+
- Personalization variables
|
|
51
|
+
- Follow-up schedule
|
|
52
|
+
- Objection handling scripts
|
|
53
|
+
- Tracking metrics to monitor
|
|
54
|
+
|
|
55
|
+
Write conversationally. Show empathy for customer problems.
|