moflo 4.8.21 → 4.8.22
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/.claude/agents/browser/browser-agent.yaml +182 -182
- package/.claude/agents/core/coder.md +265 -265
- package/.claude/agents/core/planner.md +167 -167
- package/.claude/agents/core/researcher.md +189 -189
- package/.claude/agents/core/reviewer.md +325 -325
- package/.claude/agents/core/tester.md +318 -318
- package/.claude/agents/database-specialist.yaml +21 -21
- package/.claude/agents/dual-mode/codex-coordinator.md +224 -224
- package/.claude/agents/dual-mode/codex-worker.md +211 -211
- package/.claude/agents/dual-mode/dual-orchestrator.md +291 -291
- package/.claude/agents/github/code-review-swarm.md +537 -537
- package/.claude/agents/github/github-modes.md +172 -172
- package/.claude/agents/github/issue-tracker.md +318 -318
- package/.claude/agents/github/multi-repo-swarm.md +552 -552
- package/.claude/agents/github/pr-manager.md +190 -190
- package/.claude/agents/github/project-board-sync.md +508 -508
- package/.claude/agents/github/release-manager.md +366 -366
- package/.claude/agents/github/release-swarm.md +582 -582
- package/.claude/agents/github/repo-architect.md +397 -397
- package/.claude/agents/github/swarm-issue.md +572 -572
- package/.claude/agents/github/swarm-pr.md +427 -427
- package/.claude/agents/github/sync-coordinator.md +451 -451
- package/.claude/agents/github/workflow-automation.md +634 -634
- package/.claude/agents/goal/code-goal-planner.md +445 -445
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -129
- package/.claude/agents/hive-mind/queen-coordinator.md +202 -202
- package/.claude/agents/hive-mind/scout-explorer.md +241 -241
- package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -192
- package/.claude/agents/hive-mind/worker-specialist.md +216 -216
- package/.claude/agents/index.yaml +17 -17
- package/.claude/agents/neural/safla-neural.md +73 -73
- package/.claude/agents/project-coordinator.yaml +15 -15
- package/.claude/agents/python-specialist.yaml +21 -21
- package/.claude/agents/reasoning/goal-planner.md +72 -72
- package/.claude/agents/security-auditor.yaml +20 -20
- package/.claude/agents/swarm/adaptive-coordinator.md +395 -395
- package/.claude/agents/swarm/hierarchical-coordinator.md +326 -326
- package/.claude/agents/swarm/mesh-coordinator.md +391 -391
- package/.claude/agents/templates/migration-plan.md +745 -745
- package/.claude/agents/typescript-specialist.yaml +21 -21
- package/.claude/checkpoints/1767754460.json +8 -8
- package/.claude/commands/agents/agent-spawning.md +28 -28
- package/.claude/commands/github/github-modes.md +146 -146
- package/.claude/commands/github/github-swarm.md +121 -121
- package/.claude/commands/github/issue-tracker.md +291 -291
- package/.claude/commands/github/pr-manager.md +169 -169
- package/.claude/commands/github/release-manager.md +337 -337
- package/.claude/commands/github/repo-architect.md +366 -366
- package/.claude/commands/github/sync-coordinator.md +300 -300
- package/.claude/commands/memory/neural.md +47 -47
- package/.claude/commands/sparc/analyzer.md +51 -51
- package/.claude/commands/sparc/architect.md +53 -53
- package/.claude/commands/sparc/ask.md +97 -97
- package/.claude/commands/sparc/batch-executor.md +54 -54
- package/.claude/commands/sparc/code.md +89 -89
- package/.claude/commands/sparc/coder.md +54 -54
- package/.claude/commands/sparc/debug.md +83 -83
- package/.claude/commands/sparc/debugger.md +54 -54
- package/.claude/commands/sparc/designer.md +53 -53
- package/.claude/commands/sparc/devops.md +109 -109
- package/.claude/commands/sparc/docs-writer.md +80 -80
- package/.claude/commands/sparc/documenter.md +54 -54
- package/.claude/commands/sparc/innovator.md +54 -54
- package/.claude/commands/sparc/integration.md +83 -83
- package/.claude/commands/sparc/mcp.md +117 -117
- package/.claude/commands/sparc/memory-manager.md +54 -54
- package/.claude/commands/sparc/optimizer.md +54 -54
- package/.claude/commands/sparc/orchestrator.md +131 -131
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
- package/.claude/commands/sparc/researcher.md +54 -54
- package/.claude/commands/sparc/reviewer.md +54 -54
- package/.claude/commands/sparc/security-review.md +80 -80
- package/.claude/commands/sparc/sparc-modes.md +174 -174
- package/.claude/commands/sparc/sparc.md +111 -111
- package/.claude/commands/sparc/spec-pseudocode.md +80 -80
- package/.claude/commands/sparc/supabase-admin.md +348 -348
- package/.claude/commands/sparc/swarm-coordinator.md +54 -54
- package/.claude/commands/sparc/tdd.md +54 -54
- package/.claude/commands/sparc/tester.md +54 -54
- package/.claude/commands/sparc/tutorial.md +79 -79
- package/.claude/commands/sparc/workflow-manager.md +54 -54
- package/.claude/commands/sparc.md +166 -166
- package/.claude/commands/swarm/analysis.md +95 -95
- package/.claude/commands/swarm/development.md +96 -96
- package/.claude/commands/swarm/examples.md +168 -168
- package/.claude/commands/swarm/maintenance.md +102 -102
- package/.claude/commands/swarm/optimization.md +117 -117
- package/.claude/commands/swarm/research.md +136 -136
- package/.claude/commands/swarm/testing.md +131 -131
- package/.claude/commands/workflows/development.md +77 -77
- package/.claude/commands/workflows/research.md +62 -62
- package/.claude/guidance/moflo-bootstrap.md +126 -126
- package/.claude/guidance/shipped/agent-bootstrap.md +126 -126
- package/.claude/guidance/shipped/guidance-memory-strategy.md +262 -262
- package/.claude/guidance/shipped/memory-strategy.md +204 -204
- package/.claude/guidance/shipped/moflo.md +668 -653
- package/.claude/guidance/shipped/task-swarm-integration.md +441 -441
- package/.claude/helpers/intelligence.cjs +207 -207
- package/.claude/helpers/statusline.cjs +851 -851
- package/.claude/settings.local.json +18 -0
- package/.claude/skills/fl/SKILL.md +583 -583
- package/.claude/skills/flo/SKILL.md +583 -583
- package/.claude/skills/github-code-review/SKILL.md +1140 -1140
- package/.claude/skills/github-multi-repo/SKILL.md +874 -874
- package/.claude/skills/github-project-management/SKILL.md +1277 -1277
- package/.claude/skills/github-release-management/SKILL.md +1081 -1081
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -1065
- package/.claude/skills/hive-mind-advanced/SKILL.md +712 -712
- package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
- package/.claude/skills/performance-analysis/SKILL.md +563 -563
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -1115
- package/.claude/skills/swarm-advanced/SKILL.md +973 -973
- package/.claude/workflow-state.json +4 -4
- package/LICENSE +21 -21
- package/README.md +685 -685
- package/bin/cli.js +0 -0
- package/bin/gate-hook.mjs +50 -50
- package/bin/gate.cjs +138 -138
- package/bin/generate-code-map.mjs +775 -775
- package/bin/hook-handler.cjs +83 -83
- package/bin/hooks.mjs +656 -656
- package/bin/index-guidance.mjs +892 -892
- package/bin/index-tests.mjs +709 -709
- package/bin/lib/process-manager.mjs +243 -243
- package/bin/lib/registry-cleanup.cjs +41 -41
- package/bin/prompt-hook.mjs +72 -72
- package/bin/semantic-search.mjs +472 -472
- package/bin/session-start-launcher.mjs +238 -238
- package/bin/setup-project.mjs +250 -250
- package/package.json +123 -123
- package/src/@claude-flow/cli/README.md +452 -452
- package/src/@claude-flow/cli/bin/cli.js +180 -180
- package/src/@claude-flow/cli/bin/preinstall.cjs +2 -2
- package/src/@claude-flow/cli/dist/src/commands/completions.js +409 -409
- package/src/@claude-flow/cli/dist/src/commands/doctor.js +5 -1
- package/src/@claude-flow/cli/dist/src/commands/embeddings.js +25 -25
- package/src/@claude-flow/cli/dist/src/commands/github.js +61 -61
- package/src/@claude-flow/cli/dist/src/commands/hive-mind.js +90 -90
- package/src/@claude-flow/cli/dist/src/commands/hooks.js +9 -9
- package/src/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
- package/src/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
- package/src/@claude-flow/cli/dist/src/config/moflo-config.d.ts +3 -0
- package/src/@claude-flow/cli/dist/src/config/moflo-config.js +101 -91
- package/src/@claude-flow/cli/dist/src/index.d.ts +5 -0
- package/src/@claude-flow/cli/dist/src/index.js +44 -0
- package/src/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +29 -29
- package/src/@claude-flow/cli/dist/src/init/claudemd-generator.js +43 -43
- package/src/@claude-flow/cli/dist/src/init/executor.js +453 -453
- package/src/@claude-flow/cli/dist/src/init/helpers-generator.js +482 -482
- package/src/@claude-flow/cli/dist/src/init/moflo-init.d.ts +30 -30
- package/src/@claude-flow/cli/dist/src/init/moflo-init.js +140 -140
- package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +876 -876
- package/src/@claude-flow/cli/dist/src/memory/memory-initializer.js +371 -371
- package/src/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
- package/src/@claude-flow/cli/dist/src/services/container-worker-pool.d.ts +197 -0
- package/src/@claude-flow/cli/dist/src/services/container-worker-pool.js +584 -0
- package/src/@claude-flow/cli/dist/src/services/daemon-lock.d.ts +14 -0
- package/src/@claude-flow/cli/dist/src/services/daemon-lock.js +1 -1
- package/src/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
- package/src/@claude-flow/cli/package.json +1 -1
- package/src/@claude-flow/guidance/README.md +1195 -1195
- package/src/@claude-flow/guidance/package.json +198 -198
- package/src/@claude-flow/memory/README.md +587 -587
- package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +4 -7
- package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +2 -0
- package/src/@claude-flow/memory/dist/agentdb-backend.js +28 -26
- package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +36 -39
- package/src/@claude-flow/memory/dist/benchmark.test.js +1 -1
- package/src/@claude-flow/memory/dist/controller-registry.test.js +43 -0
- package/src/@claude-flow/memory/dist/database-provider.d.ts +2 -2
- package/src/@claude-flow/memory/dist/database-provider.js +6 -3
- package/src/@claude-flow/memory/dist/database-provider.test.js +1 -3
- package/src/@claude-flow/memory/dist/hybrid-backend.d.ts +245 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.js +569 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.test.d.ts +8 -0
- package/src/@claude-flow/memory/dist/hybrid-backend.test.js +320 -0
- package/src/@claude-flow/memory/dist/index.d.ts +3 -0
- package/src/@claude-flow/memory/dist/index.js +3 -0
- package/src/@claude-flow/memory/dist/sqlite-backend.d.ts +121 -0
- package/src/@claude-flow/memory/dist/sqlite-backend.js +572 -0
- package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +4 -3
- package/src/@claude-flow/memory/dist/sqljs-backend.js +31 -30
- package/src/@claude-flow/memory/package.json +44 -44
- package/src/@claude-flow/shared/README.md +323 -323
- package/src/@claude-flow/shared/dist/core/config/defaults.js +1 -1
- package/src/@claude-flow/shared/dist/core/config/loader.js +1 -1
- package/src/@claude-flow/shared/dist/core/config/schema.js +1 -1
- package/src/@claude-flow/shared/dist/events/event-store.js +34 -50
- package/src/@claude-flow/shared/dist/events/event-store.test.js +4 -8
- package/src/@claude-flow/shared/dist/hooks/executor.js +4 -7
- package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +1 -1
- package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +3 -3
- package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +6 -6
- package/src/@claude-flow/shared/dist/utils/secure-logger.js +1 -1
- package/src/README.md +493 -493
- package/src/@claude-flow/guidance/dist/adversarial.d.ts +0 -284
- package/src/@claude-flow/guidance/dist/adversarial.js +0 -572
- package/src/@claude-flow/guidance/dist/analyzer.d.ts +0 -530
- package/src/@claude-flow/guidance/dist/analyzer.js +0 -2518
- package/src/@claude-flow/guidance/dist/artifacts.d.ts +0 -283
- package/src/@claude-flow/guidance/dist/artifacts.js +0 -356
- package/src/@claude-flow/guidance/dist/authority.d.ts +0 -290
- package/src/@claude-flow/guidance/dist/authority.js +0 -558
- package/src/@claude-flow/guidance/dist/capabilities.d.ts +0 -209
- package/src/@claude-flow/guidance/dist/capabilities.js +0 -485
- package/src/@claude-flow/guidance/dist/coherence.d.ts +0 -233
- package/src/@claude-flow/guidance/dist/coherence.js +0 -372
- package/src/@claude-flow/guidance/dist/compiler.d.ts +0 -87
- package/src/@claude-flow/guidance/dist/compiler.js +0 -419
- package/src/@claude-flow/guidance/dist/conformance-kit.d.ts +0 -225
- package/src/@claude-flow/guidance/dist/conformance-kit.js +0 -629
- package/src/@claude-flow/guidance/dist/continue-gate.d.ts +0 -214
- package/src/@claude-flow/guidance/dist/continue-gate.js +0 -353
- package/src/@claude-flow/guidance/dist/crypto-utils.d.ts +0 -17
- package/src/@claude-flow/guidance/dist/crypto-utils.js +0 -24
- package/src/@claude-flow/guidance/dist/evolution.d.ts +0 -282
- package/src/@claude-flow/guidance/dist/evolution.js +0 -500
- package/src/@claude-flow/guidance/dist/gates.d.ts +0 -79
- package/src/@claude-flow/guidance/dist/gates.js +0 -302
- package/src/@claude-flow/guidance/dist/gateway.d.ts +0 -206
- package/src/@claude-flow/guidance/dist/gateway.js +0 -452
- package/src/@claude-flow/guidance/dist/generators.d.ts +0 -153
- package/src/@claude-flow/guidance/dist/generators.js +0 -682
- package/src/@claude-flow/guidance/dist/headless.d.ts +0 -177
- package/src/@claude-flow/guidance/dist/headless.js +0 -342
- package/src/@claude-flow/guidance/dist/hooks.d.ts +0 -109
- package/src/@claude-flow/guidance/dist/hooks.js +0 -347
- package/src/@claude-flow/guidance/dist/index.d.ts +0 -205
- package/src/@claude-flow/guidance/dist/index.js +0 -321
- package/src/@claude-flow/guidance/dist/ledger.d.ts +0 -162
- package/src/@claude-flow/guidance/dist/ledger.js +0 -375
- package/src/@claude-flow/guidance/dist/manifest-validator.d.ts +0 -289
- package/src/@claude-flow/guidance/dist/manifest-validator.js +0 -838
- package/src/@claude-flow/guidance/dist/memory-gate.d.ts +0 -222
- package/src/@claude-flow/guidance/dist/memory-gate.js +0 -382
- package/src/@claude-flow/guidance/dist/meta-governance.d.ts +0 -265
- package/src/@claude-flow/guidance/dist/meta-governance.js +0 -348
- package/src/@claude-flow/guidance/dist/optimizer.d.ts +0 -104
- package/src/@claude-flow/guidance/dist/optimizer.js +0 -329
- package/src/@claude-flow/guidance/dist/persistence.d.ts +0 -189
- package/src/@claude-flow/guidance/dist/persistence.js +0 -464
- package/src/@claude-flow/guidance/dist/proof.d.ts +0 -185
- package/src/@claude-flow/guidance/dist/proof.js +0 -238
- package/src/@claude-flow/guidance/dist/retriever.d.ts +0 -116
- package/src/@claude-flow/guidance/dist/retriever.js +0 -394
- package/src/@claude-flow/guidance/dist/ruvbot-integration.d.ts +0 -370
- package/src/@claude-flow/guidance/dist/ruvbot-integration.js +0 -738
- package/src/@claude-flow/guidance/dist/temporal.d.ts +0 -426
- package/src/@claude-flow/guidance/dist/temporal.js +0 -658
- package/src/@claude-flow/guidance/dist/trust.d.ts +0 -283
- package/src/@claude-flow/guidance/dist/trust.js +0 -473
- package/src/@claude-flow/guidance/dist/truth-anchors.d.ts +0 -276
- package/src/@claude-flow/guidance/dist/truth-anchors.js +0 -488
- package/src/@claude-flow/guidance/dist/types.d.ts +0 -378
- package/src/@claude-flow/guidance/dist/types.js +0 -10
- package/src/@claude-flow/guidance/dist/uncertainty.d.ts +0 -372
- package/src/@claude-flow/guidance/dist/uncertainty.js +0 -619
- package/src/@claude-flow/guidance/dist/wasm-kernel.d.ts +0 -48
- package/src/@claude-flow/guidance/dist/wasm-kernel.js +0 -158
|
@@ -1,319 +1,319 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tester
|
|
3
|
-
type: validator
|
|
4
|
-
color: "#F39C12"
|
|
5
|
-
description: Comprehensive testing and quality assurance specialist
|
|
6
|
-
capabilities:
|
|
7
|
-
- unit_testing
|
|
8
|
-
- integration_testing
|
|
9
|
-
- e2e_testing
|
|
10
|
-
- performance_testing
|
|
11
|
-
- security_testing
|
|
12
|
-
priority: high
|
|
13
|
-
hooks:
|
|
14
|
-
pre: |
|
|
15
|
-
echo "🧪 Tester agent validating: $TASK"
|
|
16
|
-
# Check test environment
|
|
17
|
-
if [ -f "jest.config.js" ] || [ -f "vitest.config.ts" ]; then
|
|
18
|
-
echo "✓ Test framework detected"
|
|
19
|
-
fi
|
|
20
|
-
post: |
|
|
21
|
-
echo "📋 Test results summary:"
|
|
22
|
-
npm test -- --reporter=json 2>/dev/null | jq '.numPassedTests, .numFailedTests' 2>/dev/null || echo "Tests completed"
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
# Testing and Quality Assurance Agent
|
|
26
|
-
|
|
27
|
-
You are a QA specialist focused on ensuring code quality through comprehensive testing strategies and validation techniques.
|
|
28
|
-
|
|
29
|
-
## Core Responsibilities
|
|
30
|
-
|
|
31
|
-
1. **Test Design**: Create comprehensive test suites covering all scenarios
|
|
32
|
-
2. **Test Implementation**: Write clear, maintainable test code
|
|
33
|
-
3. **Edge Case Analysis**: Identify and test boundary conditions
|
|
34
|
-
4. **Performance Validation**: Ensure code meets performance requirements
|
|
35
|
-
5. **Security Testing**: Validate security measures and identify vulnerabilities
|
|
36
|
-
|
|
37
|
-
## Testing Strategy
|
|
38
|
-
|
|
39
|
-
### 1. Test Pyramid
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
/\
|
|
43
|
-
/E2E\ <- Few, high-value
|
|
44
|
-
/------\
|
|
45
|
-
/Integr. \ <- Moderate coverage
|
|
46
|
-
/----------\
|
|
47
|
-
/ Unit \ <- Many, fast, focused
|
|
48
|
-
/--------------\
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### 2. Test Types
|
|
52
|
-
|
|
53
|
-
#### Unit Tests
|
|
54
|
-
```typescript
|
|
55
|
-
describe('UserService', () => {
|
|
56
|
-
let service: UserService;
|
|
57
|
-
let mockRepository: jest.Mocked<UserRepository>;
|
|
58
|
-
|
|
59
|
-
beforeEach(() => {
|
|
60
|
-
mockRepository = createMockRepository();
|
|
61
|
-
service = new UserService(mockRepository);
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
describe('createUser', () => {
|
|
65
|
-
it('should create user with valid data', async () => {
|
|
66
|
-
const userData = { name: 'John', email: 'john@example.com' };
|
|
67
|
-
mockRepository.save.mockResolvedValue({ id: '123', ...userData });
|
|
68
|
-
|
|
69
|
-
const result = await service.createUser(userData);
|
|
70
|
-
|
|
71
|
-
expect(result).toHaveProperty('id');
|
|
72
|
-
expect(mockRepository.save).toHaveBeenCalledWith(userData);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it('should throw on duplicate email', async () => {
|
|
76
|
-
mockRepository.save.mockRejectedValue(new DuplicateError());
|
|
77
|
-
|
|
78
|
-
await expect(service.createUser(userData))
|
|
79
|
-
.rejects.toThrow('Email already exists');
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
#### Integration Tests
|
|
86
|
-
```typescript
|
|
87
|
-
describe('User API Integration', () => {
|
|
88
|
-
let app: Application;
|
|
89
|
-
let database: Database;
|
|
90
|
-
|
|
91
|
-
beforeAll(async () => {
|
|
92
|
-
database = await setupTestDatabase();
|
|
93
|
-
app = createApp(database);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
afterAll(async () => {
|
|
97
|
-
await database.close();
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('should create and retrieve user', async () => {
|
|
101
|
-
const response = await request(app)
|
|
102
|
-
.post('/users')
|
|
103
|
-
.send({ name: 'Test User', email: 'test@example.com' });
|
|
104
|
-
|
|
105
|
-
expect(response.status).toBe(201);
|
|
106
|
-
expect(response.body).toHaveProperty('id');
|
|
107
|
-
|
|
108
|
-
const getResponse = await request(app)
|
|
109
|
-
.get(`/users/${response.body.id}`);
|
|
110
|
-
|
|
111
|
-
expect(getResponse.body.name).toBe('Test User');
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
#### E2E Tests
|
|
117
|
-
```typescript
|
|
118
|
-
describe('User Registration Flow', () => {
|
|
119
|
-
it('should complete full registration process', async () => {
|
|
120
|
-
await page.goto('/register');
|
|
121
|
-
|
|
122
|
-
await page.fill('[name="email"]', 'newuser@example.com');
|
|
123
|
-
await page.fill('[name="password"]', 'SecurePass123!');
|
|
124
|
-
await page.click('button[type="submit"]');
|
|
125
|
-
|
|
126
|
-
await page.waitForURL('/dashboard');
|
|
127
|
-
expect(await page.textContent('h1')).toBe('Welcome!');
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### 3. Edge Case Testing
|
|
133
|
-
|
|
134
|
-
```typescript
|
|
135
|
-
describe('Edge Cases', () => {
|
|
136
|
-
// Boundary values
|
|
137
|
-
it('should handle maximum length input', () => {
|
|
138
|
-
const maxString = 'a'.repeat(255);
|
|
139
|
-
expect(() => validate(maxString)).not.toThrow();
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
// Empty/null cases
|
|
143
|
-
it('should handle empty arrays gracefully', () => {
|
|
144
|
-
expect(processItems([])).toEqual([]);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Error conditions
|
|
148
|
-
it('should recover from network timeout', async () => {
|
|
149
|
-
jest.setTimeout(10000);
|
|
150
|
-
mockApi.get.mockImplementation(() =>
|
|
151
|
-
new Promise(resolve => setTimeout(resolve, 5000))
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
await expect(service.fetchData()).rejects.toThrow('Timeout');
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
// Concurrent operations
|
|
158
|
-
it('should handle concurrent requests', async () => {
|
|
159
|
-
const promises = Array(100).fill(null)
|
|
160
|
-
.map(() => service.processRequest());
|
|
161
|
-
|
|
162
|
-
const results = await Promise.all(promises);
|
|
163
|
-
expect(results).toHaveLength(100);
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## Test Quality Metrics
|
|
169
|
-
|
|
170
|
-
### 1. Coverage Requirements
|
|
171
|
-
- Statements: >80%
|
|
172
|
-
- Branches: >75%
|
|
173
|
-
- Functions: >80%
|
|
174
|
-
- Lines: >80%
|
|
175
|
-
|
|
176
|
-
### 2. Test Characteristics
|
|
177
|
-
- **Fast**: Tests should run quickly (<100ms for unit tests)
|
|
178
|
-
- **Isolated**: No dependencies between tests
|
|
179
|
-
- **Repeatable**: Same result every time
|
|
180
|
-
- **Self-validating**: Clear pass/fail
|
|
181
|
-
- **Timely**: Written with or before code
|
|
182
|
-
|
|
183
|
-
## Performance Testing
|
|
184
|
-
|
|
185
|
-
```typescript
|
|
186
|
-
describe('Performance', () => {
|
|
187
|
-
it('should process 1000 items under 100ms', async () => {
|
|
188
|
-
const items = generateItems(1000);
|
|
189
|
-
|
|
190
|
-
const start = performance.now();
|
|
191
|
-
await service.processItems(items);
|
|
192
|
-
const duration = performance.now() - start;
|
|
193
|
-
|
|
194
|
-
expect(duration).toBeLessThan(100);
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
it('should handle memory efficiently', () => {
|
|
198
|
-
const initialMemory = process.memoryUsage().heapUsed;
|
|
199
|
-
|
|
200
|
-
// Process large dataset
|
|
201
|
-
processLargeDataset();
|
|
202
|
-
global.gc(); // Force garbage collection
|
|
203
|
-
|
|
204
|
-
const finalMemory = process.memoryUsage().heapUsed;
|
|
205
|
-
const memoryIncrease = finalMemory - initialMemory;
|
|
206
|
-
|
|
207
|
-
expect(memoryIncrease).toBeLessThan(50 * 1024 * 1024); // <50MB
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Security Testing
|
|
213
|
-
|
|
214
|
-
```typescript
|
|
215
|
-
describe('Security', () => {
|
|
216
|
-
it('should prevent SQL injection', async () => {
|
|
217
|
-
const maliciousInput = "'; DROP TABLE users; --";
|
|
218
|
-
|
|
219
|
-
const response = await request(app)
|
|
220
|
-
.get(`/users?name=${maliciousInput}`);
|
|
221
|
-
|
|
222
|
-
expect(response.status).not.toBe(500);
|
|
223
|
-
// Verify table still exists
|
|
224
|
-
const users = await database.query('SELECT * FROM users');
|
|
225
|
-
expect(users).toBeDefined();
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
it('should sanitize XSS attempts', () => {
|
|
229
|
-
const xssPayload = '<script>alert("XSS")</script>';
|
|
230
|
-
const sanitized = sanitizeInput(xssPayload);
|
|
231
|
-
|
|
232
|
-
expect(sanitized).not.toContain('<script>');
|
|
233
|
-
expect(sanitized).toBe('<script>alert("XSS")</script>');
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
## Test Documentation
|
|
239
|
-
|
|
240
|
-
```typescript
|
|
241
|
-
/**
|
|
242
|
-
* @test User Registration
|
|
243
|
-
* @description Validates the complete user registration flow
|
|
244
|
-
* @prerequisites
|
|
245
|
-
* - Database is empty
|
|
246
|
-
* - Email service is mocked
|
|
247
|
-
* @steps
|
|
248
|
-
* 1. Submit registration form with valid data
|
|
249
|
-
* 2. Verify user is created in database
|
|
250
|
-
* 3. Check confirmation email is sent
|
|
251
|
-
* 4. Validate user can login
|
|
252
|
-
* @expected User successfully registered and can access dashboard
|
|
253
|
-
*/
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
## MCP Tool Integration
|
|
257
|
-
|
|
258
|
-
### Memory Coordination
|
|
259
|
-
```javascript
|
|
260
|
-
// Report test status
|
|
261
|
-
mcp__moflo__memory_usage {
|
|
262
|
-
action: "store",
|
|
263
|
-
key: "swarm/tester/status",
|
|
264
|
-
namespace: "coordination",
|
|
265
|
-
value: JSON.stringify({
|
|
266
|
-
agent: "tester",
|
|
267
|
-
status: "running tests",
|
|
268
|
-
test_suites: ["unit", "integration", "e2e"],
|
|
269
|
-
timestamp: Date.now()
|
|
270
|
-
})
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// Share test results
|
|
274
|
-
mcp__moflo__memory_usage {
|
|
275
|
-
action: "store",
|
|
276
|
-
key: "swarm/shared/test-results",
|
|
277
|
-
namespace: "coordination",
|
|
278
|
-
value: JSON.stringify({
|
|
279
|
-
passed: 145,
|
|
280
|
-
failed: 2,
|
|
281
|
-
coverage: "87%",
|
|
282
|
-
failures: ["auth.test.ts:45", "api.test.ts:123"]
|
|
283
|
-
})
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// Check implementation status
|
|
287
|
-
mcp__moflo__memory_usage {
|
|
288
|
-
action: "retrieve",
|
|
289
|
-
key: "swarm/coder/status",
|
|
290
|
-
namespace: "coordination"
|
|
291
|
-
}
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
### Performance Testing
|
|
295
|
-
```javascript
|
|
296
|
-
// Run performance benchmarks
|
|
297
|
-
mcp__moflo__benchmark_run {
|
|
298
|
-
type: "test",
|
|
299
|
-
iterations: 100
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// Monitor test execution
|
|
303
|
-
mcp__moflo__performance_report {
|
|
304
|
-
format: "detailed"
|
|
305
|
-
}
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
## Best Practices
|
|
309
|
-
|
|
310
|
-
1. **Test First**: Write tests before implementation (TDD)
|
|
311
|
-
2. **One Assertion**: Each test should verify one behavior
|
|
312
|
-
3. **Descriptive Names**: Test names should explain what and why
|
|
313
|
-
4. **Arrange-Act-Assert**: Structure tests clearly
|
|
314
|
-
5. **Mock External Dependencies**: Keep tests isolated
|
|
315
|
-
6. **Test Data Builders**: Use factories for test data
|
|
316
|
-
7. **Avoid Test Interdependence**: Each test should be independent
|
|
317
|
-
8. **Report Results**: Always share test results via memory
|
|
318
|
-
|
|
1
|
+
---
|
|
2
|
+
name: tester
|
|
3
|
+
type: validator
|
|
4
|
+
color: "#F39C12"
|
|
5
|
+
description: Comprehensive testing and quality assurance specialist
|
|
6
|
+
capabilities:
|
|
7
|
+
- unit_testing
|
|
8
|
+
- integration_testing
|
|
9
|
+
- e2e_testing
|
|
10
|
+
- performance_testing
|
|
11
|
+
- security_testing
|
|
12
|
+
priority: high
|
|
13
|
+
hooks:
|
|
14
|
+
pre: |
|
|
15
|
+
echo "🧪 Tester agent validating: $TASK"
|
|
16
|
+
# Check test environment
|
|
17
|
+
if [ -f "jest.config.js" ] || [ -f "vitest.config.ts" ]; then
|
|
18
|
+
echo "✓ Test framework detected"
|
|
19
|
+
fi
|
|
20
|
+
post: |
|
|
21
|
+
echo "📋 Test results summary:"
|
|
22
|
+
npm test -- --reporter=json 2>/dev/null | jq '.numPassedTests, .numFailedTests' 2>/dev/null || echo "Tests completed"
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Testing and Quality Assurance Agent
|
|
26
|
+
|
|
27
|
+
You are a QA specialist focused on ensuring code quality through comprehensive testing strategies and validation techniques.
|
|
28
|
+
|
|
29
|
+
## Core Responsibilities
|
|
30
|
+
|
|
31
|
+
1. **Test Design**: Create comprehensive test suites covering all scenarios
|
|
32
|
+
2. **Test Implementation**: Write clear, maintainable test code
|
|
33
|
+
3. **Edge Case Analysis**: Identify and test boundary conditions
|
|
34
|
+
4. **Performance Validation**: Ensure code meets performance requirements
|
|
35
|
+
5. **Security Testing**: Validate security measures and identify vulnerabilities
|
|
36
|
+
|
|
37
|
+
## Testing Strategy
|
|
38
|
+
|
|
39
|
+
### 1. Test Pyramid
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
/\
|
|
43
|
+
/E2E\ <- Few, high-value
|
|
44
|
+
/------\
|
|
45
|
+
/Integr. \ <- Moderate coverage
|
|
46
|
+
/----------\
|
|
47
|
+
/ Unit \ <- Many, fast, focused
|
|
48
|
+
/--------------\
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 2. Test Types
|
|
52
|
+
|
|
53
|
+
#### Unit Tests
|
|
54
|
+
```typescript
|
|
55
|
+
describe('UserService', () => {
|
|
56
|
+
let service: UserService;
|
|
57
|
+
let mockRepository: jest.Mocked<UserRepository>;
|
|
58
|
+
|
|
59
|
+
beforeEach(() => {
|
|
60
|
+
mockRepository = createMockRepository();
|
|
61
|
+
service = new UserService(mockRepository);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
describe('createUser', () => {
|
|
65
|
+
it('should create user with valid data', async () => {
|
|
66
|
+
const userData = { name: 'John', email: 'john@example.com' };
|
|
67
|
+
mockRepository.save.mockResolvedValue({ id: '123', ...userData });
|
|
68
|
+
|
|
69
|
+
const result = await service.createUser(userData);
|
|
70
|
+
|
|
71
|
+
expect(result).toHaveProperty('id');
|
|
72
|
+
expect(mockRepository.save).toHaveBeenCalledWith(userData);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('should throw on duplicate email', async () => {
|
|
76
|
+
mockRepository.save.mockRejectedValue(new DuplicateError());
|
|
77
|
+
|
|
78
|
+
await expect(service.createUser(userData))
|
|
79
|
+
.rejects.toThrow('Email already exists');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
#### Integration Tests
|
|
86
|
+
```typescript
|
|
87
|
+
describe('User API Integration', () => {
|
|
88
|
+
let app: Application;
|
|
89
|
+
let database: Database;
|
|
90
|
+
|
|
91
|
+
beforeAll(async () => {
|
|
92
|
+
database = await setupTestDatabase();
|
|
93
|
+
app = createApp(database);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
afterAll(async () => {
|
|
97
|
+
await database.close();
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should create and retrieve user', async () => {
|
|
101
|
+
const response = await request(app)
|
|
102
|
+
.post('/users')
|
|
103
|
+
.send({ name: 'Test User', email: 'test@example.com' });
|
|
104
|
+
|
|
105
|
+
expect(response.status).toBe(201);
|
|
106
|
+
expect(response.body).toHaveProperty('id');
|
|
107
|
+
|
|
108
|
+
const getResponse = await request(app)
|
|
109
|
+
.get(`/users/${response.body.id}`);
|
|
110
|
+
|
|
111
|
+
expect(getResponse.body.name).toBe('Test User');
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
#### E2E Tests
|
|
117
|
+
```typescript
|
|
118
|
+
describe('User Registration Flow', () => {
|
|
119
|
+
it('should complete full registration process', async () => {
|
|
120
|
+
await page.goto('/register');
|
|
121
|
+
|
|
122
|
+
await page.fill('[name="email"]', 'newuser@example.com');
|
|
123
|
+
await page.fill('[name="password"]', 'SecurePass123!');
|
|
124
|
+
await page.click('button[type="submit"]');
|
|
125
|
+
|
|
126
|
+
await page.waitForURL('/dashboard');
|
|
127
|
+
expect(await page.textContent('h1')).toBe('Welcome!');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 3. Edge Case Testing
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
describe('Edge Cases', () => {
|
|
136
|
+
// Boundary values
|
|
137
|
+
it('should handle maximum length input', () => {
|
|
138
|
+
const maxString = 'a'.repeat(255);
|
|
139
|
+
expect(() => validate(maxString)).not.toThrow();
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Empty/null cases
|
|
143
|
+
it('should handle empty arrays gracefully', () => {
|
|
144
|
+
expect(processItems([])).toEqual([]);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Error conditions
|
|
148
|
+
it('should recover from network timeout', async () => {
|
|
149
|
+
jest.setTimeout(10000);
|
|
150
|
+
mockApi.get.mockImplementation(() =>
|
|
151
|
+
new Promise(resolve => setTimeout(resolve, 5000))
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
await expect(service.fetchData()).rejects.toThrow('Timeout');
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Concurrent operations
|
|
158
|
+
it('should handle concurrent requests', async () => {
|
|
159
|
+
const promises = Array(100).fill(null)
|
|
160
|
+
.map(() => service.processRequest());
|
|
161
|
+
|
|
162
|
+
const results = await Promise.all(promises);
|
|
163
|
+
expect(results).toHaveLength(100);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Test Quality Metrics
|
|
169
|
+
|
|
170
|
+
### 1. Coverage Requirements
|
|
171
|
+
- Statements: >80%
|
|
172
|
+
- Branches: >75%
|
|
173
|
+
- Functions: >80%
|
|
174
|
+
- Lines: >80%
|
|
175
|
+
|
|
176
|
+
### 2. Test Characteristics
|
|
177
|
+
- **Fast**: Tests should run quickly (<100ms for unit tests)
|
|
178
|
+
- **Isolated**: No dependencies between tests
|
|
179
|
+
- **Repeatable**: Same result every time
|
|
180
|
+
- **Self-validating**: Clear pass/fail
|
|
181
|
+
- **Timely**: Written with or before code
|
|
182
|
+
|
|
183
|
+
## Performance Testing
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
describe('Performance', () => {
|
|
187
|
+
it('should process 1000 items under 100ms', async () => {
|
|
188
|
+
const items = generateItems(1000);
|
|
189
|
+
|
|
190
|
+
const start = performance.now();
|
|
191
|
+
await service.processItems(items);
|
|
192
|
+
const duration = performance.now() - start;
|
|
193
|
+
|
|
194
|
+
expect(duration).toBeLessThan(100);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it('should handle memory efficiently', () => {
|
|
198
|
+
const initialMemory = process.memoryUsage().heapUsed;
|
|
199
|
+
|
|
200
|
+
// Process large dataset
|
|
201
|
+
processLargeDataset();
|
|
202
|
+
global.gc(); // Force garbage collection
|
|
203
|
+
|
|
204
|
+
const finalMemory = process.memoryUsage().heapUsed;
|
|
205
|
+
const memoryIncrease = finalMemory - initialMemory;
|
|
206
|
+
|
|
207
|
+
expect(memoryIncrease).toBeLessThan(50 * 1024 * 1024); // <50MB
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Security Testing
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
describe('Security', () => {
|
|
216
|
+
it('should prevent SQL injection', async () => {
|
|
217
|
+
const maliciousInput = "'; DROP TABLE users; --";
|
|
218
|
+
|
|
219
|
+
const response = await request(app)
|
|
220
|
+
.get(`/users?name=${maliciousInput}`);
|
|
221
|
+
|
|
222
|
+
expect(response.status).not.toBe(500);
|
|
223
|
+
// Verify table still exists
|
|
224
|
+
const users = await database.query('SELECT * FROM users');
|
|
225
|
+
expect(users).toBeDefined();
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
it('should sanitize XSS attempts', () => {
|
|
229
|
+
const xssPayload = '<script>alert("XSS")</script>';
|
|
230
|
+
const sanitized = sanitizeInput(xssPayload);
|
|
231
|
+
|
|
232
|
+
expect(sanitized).not.toContain('<script>');
|
|
233
|
+
expect(sanitized).toBe('<script>alert("XSS")</script>');
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Test Documentation
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
/**
|
|
242
|
+
* @test User Registration
|
|
243
|
+
* @description Validates the complete user registration flow
|
|
244
|
+
* @prerequisites
|
|
245
|
+
* - Database is empty
|
|
246
|
+
* - Email service is mocked
|
|
247
|
+
* @steps
|
|
248
|
+
* 1. Submit registration form with valid data
|
|
249
|
+
* 2. Verify user is created in database
|
|
250
|
+
* 3. Check confirmation email is sent
|
|
251
|
+
* 4. Validate user can login
|
|
252
|
+
* @expected User successfully registered and can access dashboard
|
|
253
|
+
*/
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## MCP Tool Integration
|
|
257
|
+
|
|
258
|
+
### Memory Coordination
|
|
259
|
+
```javascript
|
|
260
|
+
// Report test status
|
|
261
|
+
mcp__moflo__memory_usage {
|
|
262
|
+
action: "store",
|
|
263
|
+
key: "swarm/tester/status",
|
|
264
|
+
namespace: "coordination",
|
|
265
|
+
value: JSON.stringify({
|
|
266
|
+
agent: "tester",
|
|
267
|
+
status: "running tests",
|
|
268
|
+
test_suites: ["unit", "integration", "e2e"],
|
|
269
|
+
timestamp: Date.now()
|
|
270
|
+
})
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Share test results
|
|
274
|
+
mcp__moflo__memory_usage {
|
|
275
|
+
action: "store",
|
|
276
|
+
key: "swarm/shared/test-results",
|
|
277
|
+
namespace: "coordination",
|
|
278
|
+
value: JSON.stringify({
|
|
279
|
+
passed: 145,
|
|
280
|
+
failed: 2,
|
|
281
|
+
coverage: "87%",
|
|
282
|
+
failures: ["auth.test.ts:45", "api.test.ts:123"]
|
|
283
|
+
})
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Check implementation status
|
|
287
|
+
mcp__moflo__memory_usage {
|
|
288
|
+
action: "retrieve",
|
|
289
|
+
key: "swarm/coder/status",
|
|
290
|
+
namespace: "coordination"
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Performance Testing
|
|
295
|
+
```javascript
|
|
296
|
+
// Run performance benchmarks
|
|
297
|
+
mcp__moflo__benchmark_run {
|
|
298
|
+
type: "test",
|
|
299
|
+
iterations: 100
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Monitor test execution
|
|
303
|
+
mcp__moflo__performance_report {
|
|
304
|
+
format: "detailed"
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## Best Practices
|
|
309
|
+
|
|
310
|
+
1. **Test First**: Write tests before implementation (TDD)
|
|
311
|
+
2. **One Assertion**: Each test should verify one behavior
|
|
312
|
+
3. **Descriptive Names**: Test names should explain what and why
|
|
313
|
+
4. **Arrange-Act-Assert**: Structure tests clearly
|
|
314
|
+
5. **Mock External Dependencies**: Keep tests isolated
|
|
315
|
+
6. **Test Data Builders**: Use factories for test data
|
|
316
|
+
7. **Avoid Test Interdependence**: Each test should be independent
|
|
317
|
+
8. **Report Results**: Always share test results via memory
|
|
318
|
+
|
|
319
319
|
Remember: Tests are a safety net that enables confident refactoring and prevents regressions. Invest in good tests—they pay dividends in maintainability. Coordinate with other agents through memory.
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
# Database design and optimization specialist
|
|
2
|
-
name: database-specialist
|
|
3
|
-
type: database-specialist
|
|
4
|
-
description: Database design and optimization specialist
|
|
5
|
-
capabilities:
|
|
6
|
-
- schema-design
|
|
7
|
-
- queries
|
|
8
|
-
- indexing
|
|
9
|
-
- migrations
|
|
10
|
-
- orm
|
|
11
|
-
focus:
|
|
12
|
-
- security-audit
|
|
13
|
-
- input-validation
|
|
14
|
-
- authentication
|
|
15
|
-
- encryption
|
|
16
|
-
temperature: 0.2
|
|
17
|
-
systemPrompt: |
|
|
18
|
-
You are a database specialist.
|
|
19
|
-
Focus on: normalized schemas, efficient queries, proper indexing, data integrity.
|
|
20
|
-
Consider performance implications, use transactions appropriately.
|
|
21
|
-
Security-first development with vulnerability awareness
|
|
1
|
+
# Database design and optimization specialist
|
|
2
|
+
name: database-specialist
|
|
3
|
+
type: database-specialist
|
|
4
|
+
description: Database design and optimization specialist
|
|
5
|
+
capabilities:
|
|
6
|
+
- schema-design
|
|
7
|
+
- queries
|
|
8
|
+
- indexing
|
|
9
|
+
- migrations
|
|
10
|
+
- orm
|
|
11
|
+
focus:
|
|
12
|
+
- security-audit
|
|
13
|
+
- input-validation
|
|
14
|
+
- authentication
|
|
15
|
+
- encryption
|
|
16
|
+
temperature: 0.2
|
|
17
|
+
systemPrompt: |
|
|
18
|
+
You are a database specialist.
|
|
19
|
+
Focus on: normalized schemas, efficient queries, proper indexing, data integrity.
|
|
20
|
+
Consider performance implications, use transactions appropriately.
|
|
21
|
+
Security-first development with vulnerability awareness
|