specweave 0.1.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/INSTALL.md +848 -0
- package/LICENSE +21 -0
- package/README.md +675 -0
- package/SPECWEAVE.md +665 -0
- package/bin/install-agents.sh +57 -0
- package/bin/install-all.sh +49 -0
- package/bin/install-commands.sh +56 -0
- package/bin/install-skills.sh +57 -0
- package/bin/specweave.js +81 -0
- package/dist/adapters/adapter-base.d.ts +50 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -0
- package/dist/adapters/adapter-base.js +146 -0
- package/dist/adapters/adapter-base.js.map +1 -0
- package/dist/adapters/adapter-interface.d.ts +108 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -0
- package/dist/adapters/adapter-interface.js +9 -0
- package/dist/adapters/adapter-interface.js.map +1 -0
- package/dist/adapters/claude/adapter.d.ts +54 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -0
- package/dist/adapters/claude/adapter.js +184 -0
- package/dist/adapters/claude/adapter.js.map +1 -0
- package/dist/adapters/copilot/adapter.d.ts +42 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -0
- package/dist/adapters/copilot/adapter.js +239 -0
- package/dist/adapters/copilot/adapter.js.map +1 -0
- package/dist/adapters/cursor/adapter.d.ts +42 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -0
- package/dist/adapters/cursor/adapter.js +297 -0
- package/dist/adapters/cursor/adapter.js.map +1 -0
- package/dist/adapters/generic/adapter.d.ts +40 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -0
- package/dist/adapters/generic/adapter.js +155 -0
- package/dist/adapters/generic/adapter.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +247 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +7 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +160 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +154 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/package.json +90 -0
- package/src/adapters/README.md +312 -0
- package/src/adapters/adapter-base.ts +146 -0
- package/src/adapters/adapter-interface.ts +120 -0
- package/src/adapters/claude/README.md +241 -0
- package/src/adapters/claude/adapter.ts +157 -0
- package/src/adapters/copilot/.github/copilot/instructions.md +376 -0
- package/src/adapters/copilot/README.md +200 -0
- package/src/adapters/copilot/adapter.ts +210 -0
- package/src/adapters/cursor/.cursor/context/docs-context.md +62 -0
- package/src/adapters/cursor/.cursor/context/increments-context.md +71 -0
- package/src/adapters/cursor/.cursor/context/strategy-context.md +73 -0
- package/src/adapters/cursor/.cursor/context/tests-context.md +89 -0
- package/src/adapters/cursor/.cursorrules +325 -0
- package/src/adapters/cursor/README.md +243 -0
- package/src/adapters/cursor/adapter.ts +268 -0
- package/src/adapters/generic/README.md +277 -0
- package/src/adapters/generic/SPECWEAVE-MANUAL.md +676 -0
- package/src/adapters/generic/adapter.ts +159 -0
- package/src/adapters/registry.yaml +126 -0
- package/src/agents/architect/AGENT.md +416 -0
- package/src/agents/devops/AGENT.md +1738 -0
- package/src/agents/docs-writer/AGENT.md +239 -0
- package/src/agents/performance/AGENT.md +228 -0
- package/src/agents/pm/AGENT.md +751 -0
- package/src/agents/qa-lead/AGENT.md +150 -0
- package/src/agents/security/AGENT.md +179 -0
- package/src/agents/sre/AGENT.md +582 -0
- package/src/agents/sre/modules/backend-diagnostics.md +481 -0
- package/src/agents/sre/modules/database-diagnostics.md +509 -0
- package/src/agents/sre/modules/infrastructure.md +561 -0
- package/src/agents/sre/modules/monitoring.md +439 -0
- package/src/agents/sre/modules/security-incidents.md +421 -0
- package/src/agents/sre/modules/ui-diagnostics.md +302 -0
- package/src/agents/sre/playbooks/01-high-cpu-usage.md +204 -0
- package/src/agents/sre/playbooks/02-database-deadlock.md +241 -0
- package/src/agents/sre/playbooks/03-memory-leak.md +252 -0
- package/src/agents/sre/playbooks/04-slow-api-response.md +269 -0
- package/src/agents/sre/playbooks/05-ddos-attack.md +293 -0
- package/src/agents/sre/playbooks/06-disk-full.md +314 -0
- package/src/agents/sre/playbooks/07-service-down.md +333 -0
- package/src/agents/sre/playbooks/08-data-corruption.md +337 -0
- package/src/agents/sre/playbooks/09-cascade-failure.md +430 -0
- package/src/agents/sre/playbooks/10-rate-limit-exceeded.md +464 -0
- package/src/agents/sre/scripts/health-check.sh +230 -0
- package/src/agents/sre/scripts/log-analyzer.py +213 -0
- package/src/agents/sre/scripts/metrics-collector.sh +294 -0
- package/src/agents/sre/scripts/trace-analyzer.js +257 -0
- package/src/agents/sre/templates/incident-report.md +249 -0
- package/src/agents/sre/templates/mitigation-plan.md +375 -0
- package/src/agents/sre/templates/post-mortem.md +418 -0
- package/src/agents/sre/templates/runbook-template.md +412 -0
- package/src/agents/tech-lead/AGENT.md +263 -0
- package/src/commands/add-tasks.md +176 -0
- package/src/commands/close-increment.md +347 -0
- package/src/commands/create-increment.md +223 -0
- package/src/commands/create-project.md +528 -0
- package/src/commands/generate-docs.md +623 -0
- package/src/commands/list-increments.md +180 -0
- package/src/commands/review-docs.md +331 -0
- package/src/commands/start-increment.md +139 -0
- package/src/commands/sync-github.md +115 -0
- package/src/commands/validate-increment.md +800 -0
- package/src/hooks/README.md +252 -0
- package/src/hooks/docs-changed.sh +59 -0
- package/src/hooks/human-input-required.sh +55 -0
- package/src/hooks/post-task-completion.sh +57 -0
- package/src/hooks/pre-implementation.sh +47 -0
- package/src/skills/ado-sync/README.md +449 -0
- package/src/skills/ado-sync/SKILL.md +245 -0
- package/src/skills/ado-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/ado-sync/test-cases/test-2.yaml +8 -0
- package/src/skills/ado-sync/test-cases/test-3.yaml +9 -0
- package/src/skills/bmad-method-expert/SKILL.md +628 -0
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
- package/src/skills/bmad-method-expert/scripts/check-setup.js +208 -0
- package/src/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
- package/src/skills/bmad-method-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/bmad-method-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/SKILL.md +523 -0
- package/src/skills/brownfield-analyzer/test-cases/test-1-basic-analysis.yaml +48 -0
- package/src/skills/brownfield-analyzer/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-analyzer/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/SKILL.md +625 -0
- package/src/skills/brownfield-onboarder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/brownfield-onboarder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/calendar-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/context-loader/SKILL.md +734 -0
- package/src/skills/context-loader/test-cases/test-1-basic-loading.yaml +39 -0
- package/src/skills/context-loader/test-cases/test-2-token-budget-exceeded.yaml +44 -0
- package/src/skills/context-loader/test-cases/test-3-section-anchors.yaml +45 -0
- package/src/skills/context-optimizer/SKILL.md +618 -0
- package/src/skills/context-optimizer/test-cases/test-1-bug-fix-narrow.yaml +97 -0
- package/src/skills/context-optimizer/test-cases/test-2-feature-focused.yaml +109 -0
- package/src/skills/context-optimizer/test-cases/test-3-architecture-broad.yaml +98 -0
- package/src/skills/cost-optimizer/SKILL.md +190 -0
- package/src/skills/cost-optimizer/test-cases/test-1-basic-comparison.yaml +75 -0
- package/src/skills/cost-optimizer/test-cases/test-2-budget-constraint.yaml +52 -0
- package/src/skills/cost-optimizer/test-cases/test-3-scale-requirement.yaml +63 -0
- package/src/skills/cost-optimizer/test-results/README.md +46 -0
- package/src/skills/design-system-architect/SKILL.md +107 -0
- package/src/skills/design-system-architect/test-cases/test-1-token-structure.yaml +23 -0
- package/src/skills/design-system-architect/test-cases/test-2-component-hierarchy.yaml +24 -0
- package/src/skills/design-system-architect/test-cases/test-3-accessibility-checklist.yaml +23 -0
- package/src/skills/diagrams-architect/SKILL.md +763 -0
- package/src/skills/diagrams-generator/SKILL.md +25 -0
- package/src/skills/diagrams-generator/test-cases/test-1.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-2.yaml +9 -0
- package/src/skills/diagrams-generator/test-cases/test-3.yaml +8 -0
- package/src/skills/docs-updater/README.md +48 -0
- package/src/skills/docs-updater/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/docs-updater/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/dotnet-backend/SKILL.md +250 -0
- package/src/skills/e2e-playwright/README.md +506 -0
- package/src/skills/e2e-playwright/SKILL.md +457 -0
- package/src/skills/e2e-playwright/execute.js +373 -0
- package/src/skills/e2e-playwright/lib/utils.js +514 -0
- package/src/skills/e2e-playwright/package.json +33 -0
- package/src/skills/e2e-playwright/test-cases/TC-001-basic-navigation.yaml +54 -0
- package/src/skills/e2e-playwright/test-cases/TC-002-form-interaction.yaml +64 -0
- package/src/skills/e2e-playwright/test-cases/TC-003-specweave-integration.yaml +74 -0
- package/src/skills/e2e-playwright/test-cases/TC-004-accessibility-check.yaml +98 -0
- package/src/skills/figma-designer/SKILL.md +149 -0
- package/src/skills/figma-implementer/SKILL.md +148 -0
- package/src/skills/figma-mcp-connector/SKILL.md +136 -0
- package/src/skills/figma-mcp-connector/test-cases/test-1-read-file-desktop.yaml +22 -0
- package/src/skills/figma-mcp-connector/test-cases/test-2-read-file-framelink.yaml +21 -0
- package/src/skills/figma-mcp-connector/test-cases/test-3-error-handling.yaml +18 -0
- package/src/skills/figma-to-code/SKILL.md +128 -0
- package/src/skills/figma-to-code/test-cases/test-1-token-generation.yaml +29 -0
- package/src/skills/figma-to-code/test-cases/test-2-component-generation.yaml +27 -0
- package/src/skills/figma-to-code/test-cases/test-3-typescript-generation.yaml +28 -0
- package/src/skills/frontend/SKILL.md +177 -0
- package/src/skills/github-sync/SKILL.md +252 -0
- package/src/skills/github-sync/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/github-sync/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/hetzner-provisioner/README.md +308 -0
- package/src/skills/hetzner-provisioner/SKILL.md +251 -0
- package/src/skills/hetzner-provisioner/test-cases/test-1-basic-provision.yaml +71 -0
- package/src/skills/hetzner-provisioner/test-cases/test-2-postgres-provision.yaml +85 -0
- package/src/skills/hetzner-provisioner/test-cases/test-3-ssl-config.yaml +126 -0
- package/src/skills/hetzner-provisioner/test-results/README.md +259 -0
- package/src/skills/increment-planner/SKILL.md +889 -0
- package/src/skills/increment-planner/scripts/feature-utils.js +250 -0
- package/src/skills/increment-planner/test-cases/test-1-basic-feature.yaml +27 -0
- package/src/skills/increment-planner/test-cases/test-2-complex-feature.yaml +30 -0
- package/src/skills/increment-planner/test-cases/test-3-auto-numbering.yaml +24 -0
- package/src/skills/increment-quality-judge/SKILL.md +566 -0
- package/src/skills/increment-quality-judge/test-cases/test-1-good-spec.yaml +95 -0
- package/src/skills/increment-quality-judge/test-cases/test-2-poor-spec.yaml +108 -0
- package/src/skills/increment-quality-judge/test-cases/test-3-export-suggestions.yaml +87 -0
- package/src/skills/jira-sync/README.md +328 -0
- package/src/skills/jira-sync/SKILL.md +209 -0
- package/src/skills/jira-sync/test-cases/test-1.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-2.yaml +9 -0
- package/src/skills/jira-sync/test-cases/test-3.yaml +10 -0
- package/src/skills/nextjs/SKILL.md +176 -0
- package/src/skills/nodejs-backend/SKILL.md +181 -0
- package/src/skills/notification-system/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/notification-system/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/python-backend/SKILL.md +226 -0
- package/src/skills/role-orchestrator/README.md +197 -0
- package/src/skills/role-orchestrator/SKILL.md +1184 -0
- package/src/skills/role-orchestrator/test-cases/test-1-simple-product.yaml +98 -0
- package/src/skills/role-orchestrator/test-cases/test-2-quality-gate-failure.yaml +73 -0
- package/src/skills/role-orchestrator/test-cases/test-3-security-workflow.yaml +121 -0
- package/src/skills/role-orchestrator/test-cases/test-4-parallel-execution.yaml +145 -0
- package/src/skills/role-orchestrator/test-cases/test-5-feedback-loops.yaml +149 -0
- package/src/skills/skill-creator/LICENSE.txt +202 -0
- package/src/skills/skill-creator/SKILL.md +209 -0
- package/src/skills/skill-creator/scripts/init_skill.py +303 -0
- package/src/skills/skill-creator/scripts/package_skill.py +110 -0
- package/src/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/src/skills/skill-creator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/skill-creator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/skill-router/SKILL.md +497 -0
- package/src/skills/skill-router/test-cases/test-1-basic-routing.yaml +33 -0
- package/src/skills/skill-router/test-cases/test-2-ambiguous-request.yaml +42 -0
- package/src/skills/skill-router/test-cases/test-3-nested-orchestration.yaml +50 -0
- package/src/skills/spec-driven-brainstorming/README.md +264 -0
- package/src/skills/spec-driven-brainstorming/SKILL.md +439 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-001-simple-idea-to-design.yaml +148 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-002-complex-ultrathink-design.yaml +190 -0
- package/src/skills/spec-driven-brainstorming/test-cases/TC-003-unclear-requirements-socratic.yaml +233 -0
- package/src/skills/spec-driven-debugging/README.md +479 -0
- package/src/skills/spec-driven-debugging/SKILL.md +652 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-001-simple-auth-bug.yaml +212 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-002-race-condition-ultrathink.yaml +461 -0
- package/src/skills/spec-driven-debugging/test-cases/TC-003-brownfield-missing-spec.yaml +366 -0
- package/src/skills/spec-kit-expert/SKILL.md +1012 -0
- package/src/skills/spec-kit-expert/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/spec-kit-expert/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/specweave-ado-mapper/SKILL.md +501 -0
- package/src/skills/specweave-detector/SKILL.md +420 -0
- package/src/skills/specweave-detector/test-cases/test-1-basic-detection.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-2-missing-config.yaml +37 -0
- package/src/skills/specweave-detector/test-cases/test-3-non-specweave-project.yaml +34 -0
- package/src/skills/specweave-jira-mapper/SKILL.md +500 -0
- package/src/skills/stripe-integrator/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/stripe-integrator/test-cases/test-3-placeholder.yaml +12 -0
- package/src/skills/task-builder/README.md +90 -0
- package/src/skills/task-builder/test-cases/test-1-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-2-placeholder.yaml +12 -0
- package/src/skills/task-builder/test-cases/test-3-placeholder.yaml +12 -0
- package/src/templates/.env.example +144 -0
- package/src/templates/.gitignore.template +81 -0
- package/src/templates/CLAUDE.md.template +383 -0
- package/src/templates/README.md.template +240 -0
- package/src/templates/config.yaml +333 -0
- package/src/templates/docs/README.md +124 -0
- package/src/templates/docs/adr-template.md +118 -0
- package/src/templates/docs/hld-template.md +220 -0
- package/src/templates/docs/lld-template.md +580 -0
- package/src/templates/docs/prd-template.md +132 -0
- package/src/templates/docs/rfc-template.md +229 -0
- package/src/templates/docs/runbook-template.md +298 -0
- package/src/templates/environments/minimal/.env.production +16 -0
- package/src/templates/environments/minimal/README.md +54 -0
- package/src/templates/environments/minimal/deploy-production.yml +52 -0
- package/src/templates/environments/progressive/.env.qa +28 -0
- package/src/templates/environments/progressive/README.md +129 -0
- package/src/templates/environments/progressive/deploy-production.yml +93 -0
- package/src/templates/environments/progressive/deploy-qa.yml +62 -0
- package/src/templates/environments/progressive/deploy-staging.yml +67 -0
- package/src/templates/environments/standard/.env.development +20 -0
- package/src/templates/environments/standard/.env.production +30 -0
- package/src/templates/environments/standard/.env.staging +23 -0
- package/src/templates/environments/standard/README.md +97 -0
- package/src/templates/environments/standard/deploy-production.yml +68 -0
- package/src/templates/environments/standard/deploy-staging.yml +61 -0
- package/src/templates/environments/standard/docker-compose.yml +43 -0
- package/src/templates/increment-metadata-template.yaml +138 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: python-backend
|
|
3
|
+
description: Python backend developer for FastAPI, Django, Flask APIs with SQLAlchemy, Django ORM, Pydantic validation. Implements REST APIs, async operations, database integration, authentication, data processing with pandas/numpy, machine learning integration, background tasks with Celery, API documentation with OpenAPI/Swagger. Activates for: Python, Python backend, FastAPI, Django, Flask, SQLAlchemy, Django ORM, Pydantic, async Python, asyncio, uvicorn, REST API Python, authentication Python, pandas, numpy, data processing, machine learning, ML API, Celery, Redis Python, PostgreSQL Python, MongoDB Python, type hints, Python typing.
|
|
4
|
+
tools: Read, Write, Edit, Bash
|
|
5
|
+
model: claude-sonnet-4-5-20250929
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Python Backend Agent - API & Data Processing Expert
|
|
9
|
+
|
|
10
|
+
You are an expert Python backend developer with 8+ years of experience building APIs, data processing pipelines, and ML-integrated services.
|
|
11
|
+
|
|
12
|
+
## Your Expertise
|
|
13
|
+
|
|
14
|
+
- **Frameworks**: FastAPI (preferred), Django, Flask, Starlette
|
|
15
|
+
- **ORMs**: SQLAlchemy 2.0, Django ORM, Tortoise ORM
|
|
16
|
+
- **Validation**: Pydantic v2, Marshmallow
|
|
17
|
+
- **Async**: asyncio, aiohttp, async database drivers
|
|
18
|
+
- **Databases**: PostgreSQL (asyncpg), MySQL, MongoDB (motor), Redis
|
|
19
|
+
- **Authentication**: JWT (python-jose), OAuth2, Django authentication
|
|
20
|
+
- **Data Processing**: pandas, numpy, polars
|
|
21
|
+
- **ML Integration**: scikit-learn, TensorFlow, PyTorch
|
|
22
|
+
- **Background Jobs**: Celery, RQ, Dramatiq
|
|
23
|
+
- **Testing**: pytest, pytest-asyncio, httpx
|
|
24
|
+
- **Type Hints**: Python typing, mypy
|
|
25
|
+
|
|
26
|
+
## Your Responsibilities
|
|
27
|
+
|
|
28
|
+
1. **Build FastAPI Applications**
|
|
29
|
+
- Async route handlers
|
|
30
|
+
- Pydantic models for validation
|
|
31
|
+
- Dependency injection
|
|
32
|
+
- OpenAPI documentation
|
|
33
|
+
- CORS and middleware configuration
|
|
34
|
+
|
|
35
|
+
2. **Database Operations**
|
|
36
|
+
- SQLAlchemy async sessions
|
|
37
|
+
- Alembic migrations
|
|
38
|
+
- Query optimization
|
|
39
|
+
- Connection pooling
|
|
40
|
+
- Database transactions
|
|
41
|
+
|
|
42
|
+
3. **Data Processing**
|
|
43
|
+
- pandas DataFrames for ETL
|
|
44
|
+
- numpy for numerical computations
|
|
45
|
+
- Data validation and cleaning
|
|
46
|
+
- CSV/Excel processing
|
|
47
|
+
- API pagination for large datasets
|
|
48
|
+
|
|
49
|
+
4. **ML Model Integration**
|
|
50
|
+
- Load trained models (pickle, joblib, ONNX)
|
|
51
|
+
- Inference endpoints
|
|
52
|
+
- Batch prediction
|
|
53
|
+
- Model versioning
|
|
54
|
+
- Feature extraction
|
|
55
|
+
|
|
56
|
+
5. **Background Tasks**
|
|
57
|
+
- Celery workers and beat
|
|
58
|
+
- Async task queues
|
|
59
|
+
- Scheduled jobs
|
|
60
|
+
- Long-running operations
|
|
61
|
+
|
|
62
|
+
## Code Patterns You Follow
|
|
63
|
+
|
|
64
|
+
### FastAPI + SQLAlchemy + Pydantic
|
|
65
|
+
```python
|
|
66
|
+
from fastapi import FastAPI, Depends, HTTPException
|
|
67
|
+
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
|
68
|
+
from sqlalchemy.orm import sessionmaker
|
|
69
|
+
from pydantic import BaseModel, EmailStr
|
|
70
|
+
import bcrypt
|
|
71
|
+
|
|
72
|
+
app = FastAPI()
|
|
73
|
+
|
|
74
|
+
# Database setup
|
|
75
|
+
engine = create_async_engine("postgresql+asyncpg://user:pass@localhost/db")
|
|
76
|
+
AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
|
|
77
|
+
|
|
78
|
+
# Dependency
|
|
79
|
+
async def get_db():
|
|
80
|
+
async with AsyncSessionLocal() as session:
|
|
81
|
+
yield session
|
|
82
|
+
|
|
83
|
+
# Pydantic models
|
|
84
|
+
class UserCreate(BaseModel):
|
|
85
|
+
email: EmailStr
|
|
86
|
+
password: str
|
|
87
|
+
name: str
|
|
88
|
+
|
|
89
|
+
class UserResponse(BaseModel):
|
|
90
|
+
id: int
|
|
91
|
+
email: str
|
|
92
|
+
name: str
|
|
93
|
+
|
|
94
|
+
# Create user endpoint
|
|
95
|
+
@app.post("/api/users", response_model=UserResponse, status_code=201)
|
|
96
|
+
async def create_user(user: UserCreate, db: AsyncSession = Depends(get_db)):
|
|
97
|
+
# Hash password
|
|
98
|
+
hashed = bcrypt.hashpw(user.password.encode(), bcrypt.gensalt())
|
|
99
|
+
|
|
100
|
+
# Create user
|
|
101
|
+
new_user = User(
|
|
102
|
+
email=user.email,
|
|
103
|
+
password=hashed.decode(),
|
|
104
|
+
name=user.name
|
|
105
|
+
)
|
|
106
|
+
db.add(new_user)
|
|
107
|
+
await db.commit()
|
|
108
|
+
await db.refresh(new_user)
|
|
109
|
+
|
|
110
|
+
return new_user
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Authentication (JWT)
|
|
114
|
+
```python
|
|
115
|
+
from datetime import datetime, timedelta
|
|
116
|
+
from jose import JWTError, jwt
|
|
117
|
+
from fastapi import HTTPException, Depends
|
|
118
|
+
from fastapi.security import OAuth2PasswordBearer
|
|
119
|
+
|
|
120
|
+
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
|
|
121
|
+
|
|
122
|
+
def create_access_token(data: dict, expires_delta: timedelta = None):
|
|
123
|
+
to_encode = data.copy()
|
|
124
|
+
expire = datetime.utcnow() + (expires_delta or timedelta(hours=1))
|
|
125
|
+
to_encode.update({"exp": expire})
|
|
126
|
+
return jwt.encode(to_encode, SECRET_KEY, algorithm="HS256")
|
|
127
|
+
|
|
128
|
+
async def get_current_user(token: str = Depends(oauth2_scheme)):
|
|
129
|
+
try:
|
|
130
|
+
payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
|
|
131
|
+
user_id: str = payload.get("sub")
|
|
132
|
+
if user_id is None:
|
|
133
|
+
raise HTTPException(status_code=401, detail="Invalid token")
|
|
134
|
+
return user_id
|
|
135
|
+
except JWTError:
|
|
136
|
+
raise HTTPException(status_code=401, detail="Invalid token")
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Data Processing with pandas
|
|
140
|
+
```python
|
|
141
|
+
import pandas as pd
|
|
142
|
+
from fastapi import UploadFile
|
|
143
|
+
|
|
144
|
+
@app.post("/api/upload-csv")
|
|
145
|
+
async def process_csv(file: UploadFile):
|
|
146
|
+
# Read CSV
|
|
147
|
+
df = pd.read_csv(file.file)
|
|
148
|
+
|
|
149
|
+
# Data validation
|
|
150
|
+
required_columns = ['id', 'name', 'email']
|
|
151
|
+
if not all(col in df.columns for col in required_columns):
|
|
152
|
+
raise HTTPException(400, "Missing required columns")
|
|
153
|
+
|
|
154
|
+
# Clean data
|
|
155
|
+
df = df.dropna(subset=['email'])
|
|
156
|
+
df['email'] = df['email'].str.lower().str.strip()
|
|
157
|
+
|
|
158
|
+
# Process
|
|
159
|
+
results = {
|
|
160
|
+
"total_rows": len(df),
|
|
161
|
+
"unique_emails": df['email'].nunique(),
|
|
162
|
+
"summary": df.describe().to_dict()
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return results
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Background Tasks (Celery)
|
|
169
|
+
```python
|
|
170
|
+
from celery import Celery
|
|
171
|
+
|
|
172
|
+
celery_app = Celery('tasks', broker='redis://localhost:6379/0')
|
|
173
|
+
|
|
174
|
+
@celery_app.task
|
|
175
|
+
def send_email_task(user_id: int):
|
|
176
|
+
# Long-running email task
|
|
177
|
+
send_email(user_id)
|
|
178
|
+
|
|
179
|
+
# From FastAPI endpoint
|
|
180
|
+
@app.post("/api/send-email/{user_id}")
|
|
181
|
+
async def trigger_email(user_id: int):
|
|
182
|
+
send_email_task.delay(user_id)
|
|
183
|
+
return {"message": "Email queued"}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### ML Model Inference
|
|
187
|
+
```python
|
|
188
|
+
import pickle
|
|
189
|
+
import numpy as np
|
|
190
|
+
|
|
191
|
+
# Load model at startup
|
|
192
|
+
with open('model.pkl', 'rb') as f:
|
|
193
|
+
model = pickle.load(f)
|
|
194
|
+
|
|
195
|
+
class PredictionRequest(BaseModel):
|
|
196
|
+
features: list[float]
|
|
197
|
+
|
|
198
|
+
@app.post("/api/predict")
|
|
199
|
+
async def predict(request: PredictionRequest):
|
|
200
|
+
# Convert to numpy array
|
|
201
|
+
X = np.array([request.features])
|
|
202
|
+
|
|
203
|
+
# Predict
|
|
204
|
+
prediction = model.predict(X)
|
|
205
|
+
probability = model.predict_proba(X)
|
|
206
|
+
|
|
207
|
+
return {
|
|
208
|
+
"prediction": int(prediction[0]),
|
|
209
|
+
"probability": float(probability[0][1])
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Best Practices You Follow
|
|
214
|
+
|
|
215
|
+
- ✅ Use async/await for I/O operations
|
|
216
|
+
- ✅ Type hints everywhere (mypy validation)
|
|
217
|
+
- ✅ Pydantic models for validation
|
|
218
|
+
- ✅ Environment variables via pydantic-settings
|
|
219
|
+
- ✅ Alembic for database migrations
|
|
220
|
+
- ✅ pytest for testing (pytest-asyncio for async)
|
|
221
|
+
- ✅ Black for code formatting
|
|
222
|
+
- ✅ ruff for linting
|
|
223
|
+
- ✅ Virtual environments (venv, poetry, pipenv)
|
|
224
|
+
- ✅ requirements.txt or poetry.lock for dependencies
|
|
225
|
+
|
|
226
|
+
You build high-performance Python backend services for APIs, data processing, and ML applications.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# role-orchestrator Skill
|
|
2
|
+
|
|
3
|
+
**Status**: To be developed
|
|
4
|
+
**Priority**: CRITICAL (Highest priority)
|
|
5
|
+
**Claude Model**: Sonnet (reasoning + efficiency)
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
**Determines which role-based agents are needed** based on user prompt context
|
|
10
|
+
|
|
11
|
+
This is the **entry point** for the role-based agent system.
|
|
12
|
+
|
|
13
|
+
## How It Works
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
User: "Build a SaaS for project management with real-time collaboration"
|
|
17
|
+
|
|
18
|
+
↓ role-orchestrator analyzes:
|
|
19
|
+
- Type: new-product
|
|
20
|
+
- Complexity: high
|
|
21
|
+
- Features: real-time, collaboration, multi-user
|
|
22
|
+
- Domain: saas, project-management
|
|
23
|
+
|
|
24
|
+
↓ Determines roles needed:
|
|
25
|
+
✅ pm-agent (product strategy)
|
|
26
|
+
✅ architect-agent (system design for real-time)
|
|
27
|
+
✅ qa-lead-agent (E2E testing for real-time)
|
|
28
|
+
✅ devops-agent (infrastructure for SaaS)
|
|
29
|
+
✅ security-agent (auth for multi-user)
|
|
30
|
+
|
|
31
|
+
↓ Orchestrates execution:
|
|
32
|
+
1. PM agent → pm-analysis.md
|
|
33
|
+
2. Architect agent → architecture.md
|
|
34
|
+
3. QA lead agent → test-strategy.md
|
|
35
|
+
4. DevOps agent → infrastructure.md
|
|
36
|
+
5. Security agent → security.md
|
|
37
|
+
|
|
38
|
+
↓ Consolidates into increment
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Role Detection Rules
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
const roleRules = {
|
|
45
|
+
'pm-agent': {
|
|
46
|
+
keywords: ['saas', 'product', 'business', 'customers', 'market', 'mvp'],
|
|
47
|
+
contexts: ['new-product', 'startup', 'business-model'],
|
|
48
|
+
priority: 'high'
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
'architect-agent': {
|
|
52
|
+
keywords: ['scalable', 'distributed', 'real-time', 'microservices', 'architecture'],
|
|
53
|
+
contexts: ['new-product', 'complex-feature', 'system-design'],
|
|
54
|
+
priority: 'high'
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
'qa-lead-agent': {
|
|
58
|
+
keywords: ['quality', 'reliable', 'testing', 'e2e', 'test-strategy'],
|
|
59
|
+
contexts: ['new-product', 'critical-feature'],
|
|
60
|
+
priority: 'high'
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
'devops-agent': {
|
|
64
|
+
keywords: ['deploy', 'infrastructure', 'kubernetes', 'ci/cd', 'saas', 'production'],
|
|
65
|
+
contexts: ['new-product', 'scaling', 'deployment'],
|
|
66
|
+
priority: 'medium'
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
'security-agent': {
|
|
70
|
+
keywords: ['auth', 'security', 'payment', 'pci', 'gdpr', 'compliance'],
|
|
71
|
+
contexts: ['auth-feature', 'payment', 'compliance', 'multi-user'],
|
|
72
|
+
priority: 'high'
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
'tech-lead-agent': {
|
|
76
|
+
keywords: ['refactor', 'code-review', 'best-practices', 'patterns'],
|
|
77
|
+
contexts: ['code-quality', 'refactoring'],
|
|
78
|
+
priority: 'medium'
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
'performance-agent': {
|
|
82
|
+
keywords: ['performance', 'optimization', 'fast', 'cache', 'slow'],
|
|
83
|
+
contexts: ['performance-issue', 'optimization'],
|
|
84
|
+
priority: 'medium'
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
'docs-writer-agent': {
|
|
88
|
+
keywords: [], // Always include for documentation
|
|
89
|
+
contexts: ['always'],
|
|
90
|
+
priority: 'low'
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Example Scenarios
|
|
96
|
+
|
|
97
|
+
### Scenario 1: New SaaS Product
|
|
98
|
+
|
|
99
|
+
**User**: "Build a SaaS for project management"
|
|
100
|
+
|
|
101
|
+
**Roles activated**:
|
|
102
|
+
- ✅ pm-agent (product strategy)
|
|
103
|
+
- ✅ architect-agent (system architecture)
|
|
104
|
+
- ✅ qa-lead-agent (quality strategy)
|
|
105
|
+
- ✅ devops-agent (SaaS infrastructure)
|
|
106
|
+
- ✅ docs-writer-agent (documentation)
|
|
107
|
+
|
|
108
|
+
### Scenario 2: Add Feature
|
|
109
|
+
|
|
110
|
+
**User**: "Add payment processing with Stripe"
|
|
111
|
+
|
|
112
|
+
**Roles activated**:
|
|
113
|
+
- ✅ architect-agent (Stripe integration design)
|
|
114
|
+
- ✅ security-agent (PCI compliance)
|
|
115
|
+
- ✅ backend-agent (nodejs-backend for implementation)
|
|
116
|
+
- ✅ qa-lead-agent (payment testing strategy)
|
|
117
|
+
|
|
118
|
+
### Scenario 3: Optimization
|
|
119
|
+
|
|
120
|
+
**User**: "Optimize performance - app is slow"
|
|
121
|
+
|
|
122
|
+
**Roles activated**:
|
|
123
|
+
- ✅ performance-agent (profiling, optimization)
|
|
124
|
+
- ✅ architect-agent (caching strategy)
|
|
125
|
+
- ✅ tech-lead-agent (code review)
|
|
126
|
+
|
|
127
|
+
### Scenario 4: Simple Feature
|
|
128
|
+
|
|
129
|
+
**User**: "Add dark mode toggle"
|
|
130
|
+
|
|
131
|
+
**Roles activated**:
|
|
132
|
+
- ✅ frontend-agent (implementation only)
|
|
133
|
+
- ✅ docs-writer-agent (document the feature)
|
|
134
|
+
|
|
135
|
+
## Execution Order
|
|
136
|
+
|
|
137
|
+
**Strategic roles first** (define WHAT and WHY):
|
|
138
|
+
1. pm-agent
|
|
139
|
+
2. architect-agent
|
|
140
|
+
3. qa-lead-agent
|
|
141
|
+
4. devops-agent
|
|
142
|
+
5. security-agent
|
|
143
|
+
|
|
144
|
+
**Then execution roles** (define HOW):
|
|
145
|
+
6. task-builder (creates tasks.md based on strategic outputs)
|
|
146
|
+
7. implementation agents (backend, frontend, etc.)
|
|
147
|
+
|
|
148
|
+
**Finally support roles**:
|
|
149
|
+
8. tech-lead-agent (code review)
|
|
150
|
+
9. docs-writer-agent (documentation)
|
|
151
|
+
10. performance-agent (optimization)
|
|
152
|
+
|
|
153
|
+
## Integration
|
|
154
|
+
|
|
155
|
+
**Called by**: specweave-detector (when new increment created)
|
|
156
|
+
|
|
157
|
+
**Calls**: PM, Architect, QA, DevOps, Security agents as needed
|
|
158
|
+
|
|
159
|
+
**Outputs**: Orchestration plan in `.specweave/increments/####-feature/orchestration.md`
|
|
160
|
+
|
|
161
|
+
## Configuration
|
|
162
|
+
|
|
163
|
+
```yaml
|
|
164
|
+
# .specweave/config.yaml
|
|
165
|
+
role_orchestrator:
|
|
166
|
+
enabled: true
|
|
167
|
+
|
|
168
|
+
# Model selection per role
|
|
169
|
+
models:
|
|
170
|
+
pm: "claude-opus-4"
|
|
171
|
+
architect: "claude-opus-4"
|
|
172
|
+
security: "claude-opus-4"
|
|
173
|
+
qa_lead: "claude-sonnet-4"
|
|
174
|
+
devops: "claude-sonnet-4"
|
|
175
|
+
tech_lead: "claude-sonnet-4"
|
|
176
|
+
backend: "claude-haiku-4"
|
|
177
|
+
frontend: "claude-haiku-4"
|
|
178
|
+
|
|
179
|
+
# Auto-detect roles or ask user
|
|
180
|
+
auto_detect: true
|
|
181
|
+
|
|
182
|
+
# Ask user confirmation before running expensive roles (Opus)
|
|
183
|
+
confirm_opus_roles: true
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Future Enhancements
|
|
187
|
+
|
|
188
|
+
- Machine learning to improve role detection
|
|
189
|
+
- User can override role selection
|
|
190
|
+
- Role templates for common scenarios (SaaS, mobile app, API, etc.)
|
|
191
|
+
- Cost estimation before running roles
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
**To implement**: See `.specweave/increments/` (when created)
|
|
196
|
+
|
|
197
|
+
**Critical dependency**: All other role-based agents depend on this
|