qualia-framework 2.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/README.md +50 -0
- package/bin/cli.js +519 -0
- package/framework/agents/architecture-strategist.md +53 -0
- package/framework/agents/backend-agent.md +150 -0
- package/framework/agents/code-simplicity-reviewer.md +86 -0
- package/framework/agents/frontend-agent.md +111 -0
- package/framework/agents/kieran-typescript-reviewer.md +96 -0
- package/framework/agents/performance-oracle.md +111 -0
- package/framework/agents/qualia-codebase-mapper.md +760 -0
- package/framework/agents/qualia-debugger.md +1203 -0
- package/framework/agents/qualia-executor.md +881 -0
- package/framework/agents/qualia-integration-checker.md +423 -0
- package/framework/agents/qualia-phase-researcher.md +453 -0
- package/framework/agents/qualia-plan-checker.md +699 -0
- package/framework/agents/qualia-planner.md +1241 -0
- package/framework/agents/qualia-project-researcher.md +602 -0
- package/framework/agents/qualia-research-synthesizer.md +236 -0
- package/framework/agents/qualia-roadmapper.md +605 -0
- package/framework/agents/qualia-verifier.md +685 -0
- package/framework/agents/team-orchestrator.md +228 -0
- package/framework/agents/teams/full-stack-team.md +48 -0
- package/framework/agents/teams/optimize-team.md +53 -0
- package/framework/agents/teams/review-team.md +62 -0
- package/framework/agents/teams/ship-team.md +86 -0
- package/framework/agents/test-agent.md +182 -0
- package/framework/askpass.sh +2 -0
- package/framework/commands/design.md +53 -0
- package/framework/commands/quick-db.md +22 -0
- package/framework/config/retention.json +35 -0
- package/framework/core/PRINCIPLES.md +77 -0
- package/framework/hooks/auto-format.sh +45 -0
- package/framework/hooks/block-env-edit.sh +42 -0
- package/framework/hooks/branch-guard.sh +46 -0
- package/framework/hooks/confirm-delete.sh +56 -0
- package/framework/hooks/migration-validate.sh +68 -0
- package/framework/hooks/notification-speak.sh +15 -0
- package/framework/hooks/pre-commit.sh +80 -0
- package/framework/hooks/pre-compact.sh +55 -0
- package/framework/hooks/pre-deploy-gate.sh +151 -0
- package/framework/hooks/qualia-colors.sh +32 -0
- package/framework/hooks/retention-cleanup.sh +43 -0
- package/framework/hooks/save-session-state.sh +153 -0
- package/framework/hooks/session-context-loader.sh +28 -0
- package/framework/hooks/session-learn.sh +30 -0
- package/framework/knowledge/claudecode-bible.md +1384 -0
- package/framework/knowledge/client-prefs.md +22 -0
- package/framework/knowledge/common-fixes.md +25 -0
- package/framework/knowledge/deployment-map.md +35 -0
- package/framework/knowledge/email-signature.html +1 -0
- package/framework/knowledge/employees.md +8 -0
- package/framework/knowledge/learned-patterns.md +51 -0
- package/framework/knowledge/optimization-research-2026.md +137 -0
- package/framework/knowledge/qualia-context.md +67 -0
- package/framework/knowledge/supabase-patterns.md +50 -0
- package/framework/knowledge/voice-agent-patterns.md +46 -0
- package/framework/qualia-engine/VERSION +1 -0
- package/framework/qualia-engine/bin/qualia-tools.js +2160 -0
- package/framework/qualia-engine/bin/qualia-tools.test.js +1054 -0
- package/framework/qualia-engine/references/checkpoints.md +775 -0
- package/framework/qualia-engine/references/continuation-format.md +249 -0
- package/framework/qualia-engine/references/decimal-phase-calculation.md +65 -0
- package/framework/qualia-engine/references/design-quality.md +56 -0
- package/framework/qualia-engine/references/git-integration.md +254 -0
- package/framework/qualia-engine/references/git-planning-commit.md +50 -0
- package/framework/qualia-engine/references/model-profile-resolution.md +32 -0
- package/framework/qualia-engine/references/model-profiles.md +73 -0
- package/framework/qualia-engine/references/phase-argument-parsing.md +61 -0
- package/framework/qualia-engine/references/planning-config.md +195 -0
- package/framework/qualia-engine/references/questioning.md +141 -0
- package/framework/qualia-engine/references/tdd.md +263 -0
- package/framework/qualia-engine/references/ui-brand.md +160 -0
- package/framework/qualia-engine/references/verification-patterns.md +612 -0
- package/framework/qualia-engine/templates/DEBUG.md +159 -0
- package/framework/qualia-engine/templates/DESIGN.md +81 -0
- package/framework/qualia-engine/templates/UAT.md +247 -0
- package/framework/qualia-engine/templates/codebase/architecture.md +255 -0
- package/framework/qualia-engine/templates/codebase/concerns.md +310 -0
- package/framework/qualia-engine/templates/codebase/conventions.md +307 -0
- package/framework/qualia-engine/templates/codebase/integrations.md +280 -0
- package/framework/qualia-engine/templates/codebase/stack.md +186 -0
- package/framework/qualia-engine/templates/codebase/structure.md +285 -0
- package/framework/qualia-engine/templates/codebase/testing.md +480 -0
- package/framework/qualia-engine/templates/config.json +35 -0
- package/framework/qualia-engine/templates/context.md +283 -0
- package/framework/qualia-engine/templates/continue-here.md +78 -0
- package/framework/qualia-engine/templates/debug-subagent-prompt.md +91 -0
- package/framework/qualia-engine/templates/discovery.md +146 -0
- package/framework/qualia-engine/templates/milestone-archive.md +123 -0
- package/framework/qualia-engine/templates/milestone.md +115 -0
- package/framework/qualia-engine/templates/phase-prompt.md +567 -0
- package/framework/qualia-engine/templates/planner-subagent-prompt.md +117 -0
- package/framework/qualia-engine/templates/project.md +184 -0
- package/framework/qualia-engine/templates/projects/ai-agent.md +156 -0
- package/framework/qualia-engine/templates/projects/mobile-app.md +181 -0
- package/framework/qualia-engine/templates/projects/voice-agent.md +134 -0
- package/framework/qualia-engine/templates/projects/website.md +137 -0
- package/framework/qualia-engine/templates/requirements.md +231 -0
- package/framework/qualia-engine/templates/research-project/ARCHITECTURE.md +204 -0
- package/framework/qualia-engine/templates/research-project/FEATURES.md +147 -0
- package/framework/qualia-engine/templates/research-project/PITFALLS.md +200 -0
- package/framework/qualia-engine/templates/research-project/STACK.md +120 -0
- package/framework/qualia-engine/templates/research-project/SUMMARY.md +170 -0
- package/framework/qualia-engine/templates/research.md +552 -0
- package/framework/qualia-engine/templates/roadmap.md +202 -0
- package/framework/qualia-engine/templates/state.md +176 -0
- package/framework/qualia-engine/templates/summary-complex.md +59 -0
- package/framework/qualia-engine/templates/summary-minimal.md +41 -0
- package/framework/qualia-engine/templates/summary-standard.md +48 -0
- package/framework/qualia-engine/templates/summary.md +246 -0
- package/framework/qualia-engine/templates/user-setup.md +311 -0
- package/framework/qualia-engine/templates/verification-report.md +322 -0
- package/framework/qualia-engine/workflows/add-phase.md +179 -0
- package/framework/qualia-engine/workflows/add-todo.md +157 -0
- package/framework/qualia-engine/workflows/audit-milestone.md +241 -0
- package/framework/qualia-engine/workflows/check-todos.md +176 -0
- package/framework/qualia-engine/workflows/complete-milestone.md +858 -0
- package/framework/qualia-engine/workflows/diagnose-issues.md +219 -0
- package/framework/qualia-engine/workflows/discovery-phase.md +289 -0
- package/framework/qualia-engine/workflows/discuss-phase.md +534 -0
- package/framework/qualia-engine/workflows/execute-phase.md +559 -0
- package/framework/qualia-engine/workflows/execute-plan.md +438 -0
- package/framework/qualia-engine/workflows/help.md +470 -0
- package/framework/qualia-engine/workflows/insert-phase.md +220 -0
- package/framework/qualia-engine/workflows/list-phase-assumptions.md +178 -0
- package/framework/qualia-engine/workflows/map-codebase.md +327 -0
- package/framework/qualia-engine/workflows/new-milestone.md +363 -0
- package/framework/qualia-engine/workflows/new-project.md +1037 -0
- package/framework/qualia-engine/workflows/pause-work.md +122 -0
- package/framework/qualia-engine/workflows/plan-milestone-gaps.md +256 -0
- package/framework/qualia-engine/workflows/plan-phase.md +422 -0
- package/framework/qualia-engine/workflows/progress.md +354 -0
- package/framework/qualia-engine/workflows/quick.md +252 -0
- package/framework/qualia-engine/workflows/remove-phase.md +326 -0
- package/framework/qualia-engine/workflows/research-phase.md +74 -0
- package/framework/qualia-engine/workflows/resume-project.md +306 -0
- package/framework/qualia-engine/workflows/set-profile.md +80 -0
- package/framework/qualia-engine/workflows/settings.md +145 -0
- package/framework/qualia-engine/workflows/transition.md +556 -0
- package/framework/qualia-engine/workflows/update.md +197 -0
- package/framework/qualia-engine/workflows/verify-phase.md +195 -0
- package/framework/qualia-engine/workflows/verify-work.md +625 -0
- package/framework/rules/context7.md +11 -0
- package/framework/rules/deployment.md +29 -0
- package/framework/rules/frontend.md +33 -0
- package/framework/rules/security.md +12 -0
- package/framework/rules/speed.md +20 -0
- package/framework/scripts/__pycache__/say.cpython-314.pyc +0 -0
- package/framework/scripts/apply-retention.sh +120 -0
- package/framework/scripts/bootstrap-pop-os.sh +354 -0
- package/framework/scripts/claude-voice +13 -0
- package/framework/scripts/cleanup.sh +131 -0
- package/framework/scripts/cowork-mode.sh +141 -0
- package/framework/scripts/generate-project-claude-md.sh +153 -0
- package/framework/scripts/load-test-webhook.js +172 -0
- package/framework/scripts/say.py +236 -0
- package/framework/scripts/showcase-video-recorder/ffmpeg-builder.js +167 -0
- package/framework/scripts/showcase-video-recorder/playwright-helpers.js +216 -0
- package/framework/scripts/speak.py +55 -0
- package/framework/scripts/speak.sh +18 -0
- package/framework/scripts/status.sh +138 -0
- package/framework/scripts/sync-to-framework.sh +65 -0
- package/framework/scripts/voice-hotkey.py +227 -0
- package/framework/scripts/voice-input.sh +51 -0
- package/framework/skills/animate/SKILL.md +202 -0
- package/framework/skills/bolder/SKILL.md +144 -0
- package/framework/skills/browser-qa/SKILL.md +536 -0
- package/framework/skills/clarify/SKILL.md +179 -0
- package/framework/skills/colorize/SKILL.md +170 -0
- package/framework/skills/critique/SKILL.md +126 -0
- package/framework/skills/deep-research/SKILL.md +271 -0
- package/framework/skills/delight/SKILL.md +329 -0
- package/framework/skills/deploy/SKILL.md +261 -0
- package/framework/skills/deploy-verify/SKILL.md +377 -0
- package/framework/skills/deploy-verify/scripts/canary-check.sh +206 -0
- package/framework/skills/deploy-verify/scripts/check-console-errors.js +147 -0
- package/framework/skills/deploy-verify/scripts/check-cwv.js +139 -0
- package/framework/skills/deploy-verify/scripts/project-detect.sh +84 -0
- package/framework/skills/deploy-verify/scripts/verify.sh +548 -0
- package/framework/skills/design-quieter/SKILL.md +130 -0
- package/framework/skills/distill/SKILL.md +149 -0
- package/framework/skills/docs-lookup/SKILL.md +78 -0
- package/framework/skills/fcm-notifications/SKILL.md +125 -0
- package/framework/skills/financial-ledger/SKILL.md +1039 -0
- package/framework/skills/frontend-master/NOTICE.md +4 -0
- package/framework/skills/frontend-master/SKILL.md +127 -0
- package/framework/skills/frontend-master/reference/color-and-contrast.md +132 -0
- package/framework/skills/frontend-master/reference/interaction-design.md +123 -0
- package/framework/skills/frontend-master/reference/motion-design.md +99 -0
- package/framework/skills/frontend-master/reference/responsive-design.md +114 -0
- package/framework/skills/frontend-master/reference/spatial-design.md +100 -0
- package/framework/skills/frontend-master/reference/typography.md +131 -0
- package/framework/skills/frontend-master/reference/ux-writing.md +107 -0
- package/framework/skills/harden/SKILL.md +357 -0
- package/framework/skills/i18n-rtl/SKILL.md +752 -0
- package/framework/skills/learn/SKILL.md +71 -0
- package/framework/skills/memory/SKILL.md +50 -0
- package/framework/skills/mobile-expo/SKILL.md +864 -0
- package/framework/skills/mobile-expo/references/store-checklist.md +550 -0
- package/framework/skills/nestjs-backend/README.md +73 -0
- package/framework/skills/nestjs-backend/SKILL.md +446 -0
- package/framework/skills/nestjs-backend/references/templates.md +1173 -0
- package/framework/skills/normalize/SKILL.md +79 -0
- package/framework/skills/onboard/SKILL.md +242 -0
- package/framework/skills/polish/SKILL.md +209 -0
- package/framework/skills/pr/SKILL.md +66 -0
- package/framework/skills/qualia/SKILL.md +153 -0
- package/framework/skills/qualia-add-todo/SKILL.md +68 -0
- package/framework/skills/qualia-audit-milestone/SKILL.md +92 -0
- package/framework/skills/qualia-check-todos/SKILL.md +55 -0
- package/framework/skills/qualia-complete-milestone/SKILL.md +108 -0
- package/framework/skills/qualia-debug/SKILL.md +149 -0
- package/framework/skills/qualia-design/SKILL.md +203 -0
- package/framework/skills/qualia-discuss-phase/SKILL.md +72 -0
- package/framework/skills/qualia-execute-phase/SKILL.md +86 -0
- package/framework/skills/qualia-help/SKILL.md +67 -0
- package/framework/skills/qualia-idk/SKILL.md +352 -0
- package/framework/skills/qualia-list-phase-assumptions/SKILL.md +67 -0
- package/framework/skills/qualia-new-milestone/SKILL.md +72 -0
- package/framework/skills/qualia-new-project/SKILL.md +92 -0
- package/framework/skills/qualia-optimize/SKILL.md +417 -0
- package/framework/skills/qualia-pause-work/SKILL.md +96 -0
- package/framework/skills/qualia-plan-milestone-gaps/SKILL.md +57 -0
- package/framework/skills/qualia-plan-phase/SKILL.md +101 -0
- package/framework/skills/qualia-progress/SKILL.md +53 -0
- package/framework/skills/qualia-quick/SKILL.md +89 -0
- package/framework/skills/qualia-research-phase/SKILL.md +88 -0
- package/framework/skills/qualia-resume-work/SKILL.md +62 -0
- package/framework/skills/qualia-review/SKILL.md +263 -0
- package/framework/skills/qualia-start/SKILL.md +182 -0
- package/framework/skills/qualia-verify-work/SKILL.md +105 -0
- package/framework/skills/qualia-workflow/SKILL.md +130 -0
- package/framework/skills/rag/SKILL.md +750 -0
- package/framework/skills/responsive/SKILL.md +231 -0
- package/framework/skills/retro/SKILL.md +284 -0
- package/framework/skills/sakani-conventions/SKILL.md +136 -0
- package/framework/skills/sakani-conventions/evals/evals.json +23 -0
- package/framework/skills/sakani-conventions/references/entities.md +365 -0
- package/framework/skills/sakani-conventions/references/error-codes.md +95 -0
- package/framework/skills/seo-master/SKILL.md +490 -0
- package/framework/skills/seo-master/references/checklist.md +199 -0
- package/framework/skills/seo-master/references/structured-data.md +609 -0
- package/framework/skills/ship/SKILL.md +202 -0
- package/framework/skills/stack-researcher/SKILL.md +215 -0
- package/framework/skills/status/SKILL.md +154 -0
- package/framework/skills/status/scripts/health-check.sh +562 -0
- package/framework/skills/subscription-payments/SKILL.md +250 -0
- package/framework/skills/supabase/SKILL.md +973 -0
- package/framework/skills/supabase/references/templates.md +159 -0
- package/framework/skills/team/SKILL.md +67 -0
- package/framework/skills/test-runner/SKILL.md +202 -0
- package/framework/skills/voice-agent/SKILL.md +407 -0
- package/framework/skills/zoho-workflow/SKILL.md +51 -0
- package/framework/statusline-command.sh +117 -0
- package/package.json +24 -0
- package/profiles/fawzi.json +16 -0
- package/profiles/hasan.json +16 -0
- package/profiles/moayad.json +16 -0
- package/templates/CLAUDE-owner.md +52 -0
- package/templates/CLAUDE.md.hbs +58 -0
- package/templates/env.claude.template +12 -0
- package/templates/settings.json +141 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Supabase Code Templates
|
|
2
|
+
|
|
3
|
+
> Claude: Read this file on-demand when you need specific code patterns.
|
|
4
|
+
|
|
5
|
+
## Table + RLS Pattern
|
|
6
|
+
|
|
7
|
+
```sql
|
|
8
|
+
CREATE TABLE items (
|
|
9
|
+
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
10
|
+
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE NOT NULL,
|
|
11
|
+
title TEXT NOT NULL,
|
|
12
|
+
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
ALTER TABLE items ENABLE ROW LEVEL SECURITY;
|
|
16
|
+
|
|
17
|
+
CREATE POLICY "Users manage own items" ON items
|
|
18
|
+
FOR ALL USING (auth.uid() = user_id)
|
|
19
|
+
WITH CHECK (auth.uid() = user_id);
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Auth Setup (Next.js)
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { createClient } from '@supabase/supabase-js'
|
|
26
|
+
|
|
27
|
+
const supabase = createClient(
|
|
28
|
+
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
|
29
|
+
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
|
|
30
|
+
{ auth: { flowType: 'pkce', autoRefreshToken: true, persistSession: true, detectSessionInUrl: true } }
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
// OAuth
|
|
34
|
+
await supabase.auth.signInWithOAuth({
|
|
35
|
+
provider: 'google',
|
|
36
|
+
options: { redirectTo: `${window.location.origin}/auth/callback` }
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
// Token refresh
|
|
40
|
+
supabase.auth.onAuthStateChange((event, session) => {
|
|
41
|
+
if (event === 'TOKEN_REFRESHED') console.log('Token refreshed')
|
|
42
|
+
})
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Auto-create Profile on Signup
|
|
46
|
+
|
|
47
|
+
```sql
|
|
48
|
+
CREATE OR REPLACE FUNCTION handle_new_user()
|
|
49
|
+
RETURNS TRIGGER AS $$
|
|
50
|
+
BEGIN
|
|
51
|
+
INSERT INTO public.profiles (id, email, full_name)
|
|
52
|
+
VALUES (NEW.id, NEW.email, NEW.raw_user_meta_data->>'full_name');
|
|
53
|
+
RETURN NEW;
|
|
54
|
+
END;
|
|
55
|
+
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
|
56
|
+
|
|
57
|
+
CREATE TRIGGER on_auth_user_created
|
|
58
|
+
AFTER INSERT ON auth.users
|
|
59
|
+
FOR EACH ROW EXECUTE FUNCTION handle_new_user();
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Realtime Subscriptions
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// Postgres changes
|
|
66
|
+
supabase.channel('changes')
|
|
67
|
+
.on('postgres_changes', { event: '*', schema: 'public', table: 'messages' },
|
|
68
|
+
payload => console.log('Change:', payload))
|
|
69
|
+
.subscribe()
|
|
70
|
+
|
|
71
|
+
// Presence
|
|
72
|
+
const channel = supabase.channel(`room:${roomId}`)
|
|
73
|
+
.on('presence', { event: 'sync' }, () => console.log('Online:', channel.presenceState()))
|
|
74
|
+
.subscribe(async (status) => {
|
|
75
|
+
if (status === 'SUBSCRIBED') await channel.track({ user_id: user.id })
|
|
76
|
+
})
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Storage Upload
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
const { data, error } = await supabase.storage
|
|
83
|
+
.from('avatars')
|
|
84
|
+
.upload(path, file, { cacheControl: '3600' })
|
|
85
|
+
|
|
86
|
+
const { data: { publicUrl } } = supabase.storage.from('avatars').getPublicUrl(path)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Edge Function Template
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import "jsr:@supabase/functions-js/edge-runtime.d.ts"
|
|
93
|
+
import { createClient } from "https://esm.sh/@supabase/supabase-js@2"
|
|
94
|
+
|
|
95
|
+
Deno.serve(async (req: Request) => {
|
|
96
|
+
if (req.method === "OPTIONS") {
|
|
97
|
+
return new Response(null, {
|
|
98
|
+
headers: {
|
|
99
|
+
"Access-Control-Allow-Origin": Deno.env.get("ALLOWED_ORIGIN") || "*",
|
|
100
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
101
|
+
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
|
102
|
+
},
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
const body = await req.json()
|
|
108
|
+
// Use user-context client (respects RLS):
|
|
109
|
+
const supabase = createClient(
|
|
110
|
+
Deno.env.get("SUPABASE_URL")!,
|
|
111
|
+
Deno.env.get("SUPABASE_ANON_KEY")!,
|
|
112
|
+
{ global: { headers: { Authorization: req.headers.get("Authorization")! } } }
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
return new Response(JSON.stringify({ success: true }), {
|
|
116
|
+
headers: { "Content-Type": "application/json" },
|
|
117
|
+
})
|
|
118
|
+
} catch (error) {
|
|
119
|
+
console.error("Function error:", error)
|
|
120
|
+
return new Response(JSON.stringify({ error: "Internal server error" }), {
|
|
121
|
+
status: 500,
|
|
122
|
+
headers: { "Content-Type": "application/json" },
|
|
123
|
+
})
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Deno Imports (NOT npm)
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
import { createClient } from "https://esm.sh/@supabase/supabase-js@2"
|
|
132
|
+
import Anthropic from "https://esm.sh/@anthropic-ai/sdk"
|
|
133
|
+
import { z } from "https://deno.land/x/zod/mod.ts"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Common Error Fixes
|
|
137
|
+
|
|
138
|
+
| Error | Fix |
|
|
139
|
+
|-------|-----|
|
|
140
|
+
| `PGRST116: 0 rows` | Use `.maybeSingle()` not `.single()` |
|
|
141
|
+
| `duplicate key` | Use `.upsert({ ... }, { onConflict: 'id' })` |
|
|
142
|
+
| `violates RLS policy` | Check `auth.uid()` in policy, verify INSERT has `WITH CHECK` |
|
|
143
|
+
| `Invalid login credentials` | Check email confirmed, JWT not expired, PKCE flow |
|
|
144
|
+
|
|
145
|
+
## Query Optimization
|
|
146
|
+
|
|
147
|
+
```sql
|
|
148
|
+
-- Analyze slow queries
|
|
149
|
+
EXPLAIN ANALYZE SELECT ...;
|
|
150
|
+
|
|
151
|
+
-- Composite index
|
|
152
|
+
CREATE INDEX idx_posts_created_likes ON posts(created_at DESC, likes_count DESC)
|
|
153
|
+
WHERE deleted_at IS NULL;
|
|
154
|
+
|
|
155
|
+
-- Materialized view for aggregations
|
|
156
|
+
CREATE MATERIALIZED VIEW post_stats AS
|
|
157
|
+
SELECT user_id, COUNT(*) as total_posts FROM posts GROUP BY user_id;
|
|
158
|
+
REFRESH MATERIALIZED VIEW CONCURRENTLY post_stats;
|
|
159
|
+
```
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team
|
|
3
|
+
description: "Coordinate specialist agent teams for complex tasks — full-stack development, code review, or deployment. Use this skill whenever the user says 'team', 'spawn agents', 'full-stack build', 'team review', 'team ship', or wants to orchestrate multiple specialist agents working in parallel. Also trigger when user needs fan-out parallel work (frontend + backend + test), multi-perspective code review, or pipeline deployment coordination."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Team — Agent Team Orchestration
|
|
7
|
+
|
|
8
|
+
Coordinate specialist agent teams to handle complex tasks through parallel or pipeline patterns.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
`/team full-stack "Build user dashboard with CRUD"`
|
|
13
|
+
`/team review "Audit the auth module"`
|
|
14
|
+
`/team ship`
|
|
15
|
+
|
|
16
|
+
## Available Templates
|
|
17
|
+
|
|
18
|
+
| Template | Pattern | Agents | Use Case |
|
|
19
|
+
|----------|---------|--------|----------|
|
|
20
|
+
| `full-stack` | fan-out → test | frontend + backend + test | Building features |
|
|
21
|
+
| `review` | fan-out → synthesize | simplicity + performance + TS quality | Code review |
|
|
22
|
+
| `ship` | pipeline | quality gate → deploy → verify | Deployment |
|
|
23
|
+
|
|
24
|
+
## Process
|
|
25
|
+
|
|
26
|
+
### 1. Parse Arguments
|
|
27
|
+
|
|
28
|
+
Extract from arguments:
|
|
29
|
+
|
|
30
|
+
- **template** — First word: `full-stack`, `review`, or `ship`
|
|
31
|
+
- **task** — Remaining text (optional for `ship`)
|
|
32
|
+
|
|
33
|
+
If no arguments: show usage and available templates.
|
|
34
|
+
|
|
35
|
+
### 2. Load Team Template
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
TEMPLATE_PATH="$HOME/.claude/agents/teams/${TEMPLATE}-team.md"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Read the template file. If not found, error with available templates.
|
|
42
|
+
|
|
43
|
+
### 3. Load Project Context
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
STATE=$(cat .planning/STATE.md 2>/dev/null || echo "No STATE.md found")
|
|
47
|
+
PROJECT_DIR=$(pwd)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 4. Spawn Team Orchestrator
|
|
51
|
+
|
|
52
|
+
Launch a general-purpose subagent with:
|
|
53
|
+
|
|
54
|
+
- The team orchestrator instructions from `/home/qualia/.claude/agents/team-orchestrator.md`
|
|
55
|
+
- The team template content
|
|
56
|
+
- The task description (or "Ship current project to production" for ship template)
|
|
57
|
+
- Current project state and directory
|
|
58
|
+
|
|
59
|
+
The orchestrator spawns specialist agents, coordinates their work, resolves conflicts, and produces summary output.
|
|
60
|
+
|
|
61
|
+
### 5. Report Results
|
|
62
|
+
|
|
63
|
+
Read the produced summary and present to user:
|
|
64
|
+
|
|
65
|
+
- `full-stack` → TEAM-SUMMARY.md
|
|
66
|
+
- `review` → REVIEW-REPORT.md
|
|
67
|
+
- `ship` → SHIP-REPORT.md
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-runner
|
|
3
|
+
description: Automate testing for Qualia Solutions projects - runs unit tests, integration tests, generates coverage reports, and creates missing tests
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Automated Testing Skill
|
|
7
|
+
|
|
8
|
+
Handles all testing operations for your projects.
|
|
9
|
+
|
|
10
|
+
## Run Tests (canonical reference)
|
|
11
|
+
|
|
12
|
+
This is the single source of truth for test detection and execution in the Qualia workflow.
|
|
13
|
+
Referenced by: `/qualia-verify-work`, `/ship`.
|
|
14
|
+
|
|
15
|
+
### Detection
|
|
16
|
+
```bash
|
|
17
|
+
# Unit/Integration
|
|
18
|
+
[ -f package.json ] && grep -q '"test"' package.json && echo "HAS_UNIT=true"
|
|
19
|
+
|
|
20
|
+
# E2E - Playwright
|
|
21
|
+
ls playwright.config.* 2>/dev/null && echo "HAS_PLAYWRIGHT=true"
|
|
22
|
+
|
|
23
|
+
# E2E - Cypress
|
|
24
|
+
ls cypress.config.* 2>/dev/null && echo "HAS_CYPRESS=true"
|
|
25
|
+
|
|
26
|
+
# Python
|
|
27
|
+
[ -f pytest.ini ] || [ -f setup.cfg ] || [ -f pyproject.toml ] && echo "HAS_PYTEST=true"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Execution Order
|
|
31
|
+
1. Unit/Integration: `npm test` (or `pytest --cov`)
|
|
32
|
+
2. E2E Playwright: `npx playwright test`
|
|
33
|
+
3. E2E Cypress: `npx cypress run`
|
|
34
|
+
4. Report: X passed, Y failed, Z skipped per runner
|
|
35
|
+
|
|
36
|
+
### Result Format
|
|
37
|
+
```
|
|
38
|
+
Test Results: {runner}
|
|
39
|
+
- Passed: X
|
|
40
|
+
- Failed: Y
|
|
41
|
+
- Skipped: Z
|
|
42
|
+
{If failures: list names}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Auto-detect and Run Tests
|
|
46
|
+
|
|
47
|
+
When you say "run tests", I automatically:
|
|
48
|
+
|
|
49
|
+
### For JavaScript/TypeScript Projects
|
|
50
|
+
```bash
|
|
51
|
+
# Detect test runner
|
|
52
|
+
if [ -f "package.json" ]; then
|
|
53
|
+
if grep -q "jest" package.json; then
|
|
54
|
+
npm test -- --coverage
|
|
55
|
+
elif grep -q "vitest" package.json; then
|
|
56
|
+
npm run test -- --coverage
|
|
57
|
+
elif grep -q "mocha" package.json; then
|
|
58
|
+
npm test
|
|
59
|
+
fi
|
|
60
|
+
fi
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### For Python Projects
|
|
64
|
+
```bash
|
|
65
|
+
# Run pytest with coverage
|
|
66
|
+
if [ -f "requirements.txt" ]; then
|
|
67
|
+
pytest --cov=src --cov-report=html --cov-report=term
|
|
68
|
+
fi
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Generate Missing Tests
|
|
72
|
+
|
|
73
|
+
When you say "create tests for X", I generate:
|
|
74
|
+
|
|
75
|
+
### React Component Test
|
|
76
|
+
```typescript
|
|
77
|
+
// Button.test.tsx
|
|
78
|
+
import { render, screen, fireEvent } from '@testing-library/react'
|
|
79
|
+
import { Button } from './Button'
|
|
80
|
+
|
|
81
|
+
describe('Button', () => {
|
|
82
|
+
it('renders with text', () => {
|
|
83
|
+
render(<Button>Click me</Button>)
|
|
84
|
+
expect(screen.getByText('Click me')).toBeInTheDocument()
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
it('handles click events', () => {
|
|
88
|
+
const handleClick = jest.fn()
|
|
89
|
+
render(<Button onClick={handleClick}>Click</Button>)
|
|
90
|
+
fireEvent.click(screen.getByText('Click'))
|
|
91
|
+
expect(handleClick).toHaveBeenCalledTimes(1)
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Python Function Test
|
|
97
|
+
```python
|
|
98
|
+
# test_agent.py
|
|
99
|
+
import pytest
|
|
100
|
+
from agent import QualiaAgent
|
|
101
|
+
|
|
102
|
+
class TestQualiaAgent:
|
|
103
|
+
@pytest.fixture
|
|
104
|
+
def agent(self):
|
|
105
|
+
return QualiaAgent("test")
|
|
106
|
+
|
|
107
|
+
async def test_process_input(self, agent):
|
|
108
|
+
response = await agent.process("Hello")
|
|
109
|
+
assert response is not None
|
|
110
|
+
assert isinstance(response, str)
|
|
111
|
+
|
|
112
|
+
async def test_error_handling(self, agent):
|
|
113
|
+
with pytest.raises(ValueError):
|
|
114
|
+
await agent.process("")
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Coverage Reports
|
|
118
|
+
|
|
119
|
+
### Generate Coverage
|
|
120
|
+
```bash
|
|
121
|
+
# JavaScript
|
|
122
|
+
npm test -- --coverage --coverageReporters=html
|
|
123
|
+
|
|
124
|
+
# Python
|
|
125
|
+
pytest --cov --cov-report=html
|
|
126
|
+
|
|
127
|
+
# Open report
|
|
128
|
+
open coverage/index.html # or htmlcov/index.html
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Coverage Requirements
|
|
132
|
+
- Minimum 80% overall
|
|
133
|
+
- 90% for critical paths
|
|
134
|
+
- 100% for utility functions
|
|
135
|
+
|
|
136
|
+
## Test Types
|
|
137
|
+
|
|
138
|
+
### Unit Tests
|
|
139
|
+
- Test individual functions
|
|
140
|
+
- Mock external dependencies
|
|
141
|
+
- Fast execution (<1s per test)
|
|
142
|
+
|
|
143
|
+
### Integration Tests
|
|
144
|
+
```javascript
|
|
145
|
+
// API integration test
|
|
146
|
+
describe('API Integration', () => {
|
|
147
|
+
it('creates user successfully', async () => {
|
|
148
|
+
const response = await request(app)
|
|
149
|
+
.post('/api/users')
|
|
150
|
+
.send({ email: 'test@example.com' })
|
|
151
|
+
|
|
152
|
+
expect(response.status).toBe(201)
|
|
153
|
+
expect(response.body).toHaveProperty('id')
|
|
154
|
+
})
|
|
155
|
+
})
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### E2E Tests
|
|
159
|
+
```javascript
|
|
160
|
+
// Playwright E2E test
|
|
161
|
+
test('user can complete signup flow', async ({ page }) => {
|
|
162
|
+
await page.goto('/')
|
|
163
|
+
await page.click('text=Sign Up')
|
|
164
|
+
await page.fill('[name=email]', 'test@example.com')
|
|
165
|
+
await page.fill('[name=password]', 'password123')
|
|
166
|
+
await page.click('button[type=submit]')
|
|
167
|
+
await expect(page).toHaveURL('/dashboard')
|
|
168
|
+
})
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## CI/CD Integration
|
|
172
|
+
|
|
173
|
+
### GitHub Actions
|
|
174
|
+
```yaml
|
|
175
|
+
name: Tests
|
|
176
|
+
on: [push, pull_request]
|
|
177
|
+
jobs:
|
|
178
|
+
test:
|
|
179
|
+
runs-on: ubuntu-latest
|
|
180
|
+
steps:
|
|
181
|
+
- uses: actions/checkout@v2
|
|
182
|
+
- run: npm ci
|
|
183
|
+
- run: npm test -- --coverage
|
|
184
|
+
- uses: codecov/codecov-action@v2
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Quick Commands
|
|
188
|
+
|
|
189
|
+
- "test" → Run all tests
|
|
190
|
+
- "test unit" → Run unit tests only
|
|
191
|
+
- "test integration" → Run integration tests
|
|
192
|
+
- "test e2e" → Run end-to-end tests
|
|
193
|
+
- "create tests" → Generate missing tests
|
|
194
|
+
- "coverage" → Generate coverage report
|
|
195
|
+
|
|
196
|
+
## Test Watching
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Watch mode for development
|
|
200
|
+
npm test -- --watch
|
|
201
|
+
# or
|
|
202
|
+
pytest-watch
|