@hivehub/rulebook 4.1.0 → 4.2.1
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/commands/continue.md +33 -33
- package/.claude/commands/ralph-config.md +112 -112
- package/.claude/commands/ralph-history.md +110 -110
- package/.claude/commands/ralph-init.md +72 -72
- package/.claude/commands/ralph-pause-resume.md +105 -105
- package/.claude/commands/ralph-run.md +101 -101
- package/.claude/commands/ralph-status.md +76 -76
- package/.claude/commands/rulebook-memory-save.md +48 -48
- package/.claude/commands/rulebook-memory-search.md +47 -47
- package/.claude/commands/rulebook-task-apply.md +67 -67
- package/.claude/commands/rulebook-task-archive.md +70 -70
- package/.claude/commands/rulebook-task-create.md +93 -93
- package/.claude/commands/rulebook-task-list.md +42 -42
- package/.claude/commands/rulebook-task-show.md +52 -52
- package/.claude/commands/rulebook-task-validate.md +53 -53
- package/.claude-plugin/marketplace.json +28 -28
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +137 -1
- package/dist/cli/commands.d.ts +18 -6
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +727 -406
- package/dist/cli/commands.js.map +1 -1
- package/dist/core/claude-mcp.d.ts +4 -2
- package/dist/core/claude-mcp.d.ts.map +1 -1
- package/dist/core/claude-mcp.js +14 -9
- package/dist/core/claude-mcp.js.map +1 -1
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +13 -0
- package/dist/core/generator.js.map +1 -1
- package/dist/core/indexer/background-indexer.d.ts.map +1 -1
- package/dist/core/indexer/background-indexer.js +26 -5
- package/dist/core/indexer/background-indexer.js.map +1 -1
- package/dist/core/indexer/file-parser.d.ts.map +1 -1
- package/dist/core/indexer/file-parser.js +1 -1
- package/dist/core/indexer/file-parser.js.map +1 -1
- package/dist/core/indexer/indexer-types.d.ts.map +1 -1
- package/dist/core/workspace/legacy-migrator.d.ts +29 -0
- package/dist/core/workspace/legacy-migrator.d.ts.map +1 -0
- package/dist/core/workspace/legacy-migrator.js +142 -0
- package/dist/core/workspace/legacy-migrator.js.map +1 -0
- package/dist/core/workspace/project-worker.d.ts +49 -0
- package/dist/core/workspace/project-worker.d.ts.map +1 -0
- package/dist/core/workspace/project-worker.js +108 -0
- package/dist/core/workspace/project-worker.js.map +1 -0
- package/dist/core/workspace/workspace-manager.d.ts +90 -0
- package/dist/core/workspace/workspace-manager.d.ts.map +1 -0
- package/dist/core/workspace/workspace-manager.js +347 -0
- package/dist/core/workspace/workspace-manager.js.map +1 -0
- package/dist/core/workspace/workspace-types.d.ts +37 -0
- package/dist/core/workspace/workspace-types.d.ts.map +1 -0
- package/dist/core/workspace/workspace-types.js +8 -0
- package/dist/core/workspace/workspace-types.js.map +1 -0
- package/dist/index.js +43 -7
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.d.ts.map +1 -1
- package/dist/mcp/rulebook-server.js +367 -100
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/memory-manager.js +2 -2
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/memory-search.js.map +1 -1
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +1 -1
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +22 -21
- package/templates/agents/implementer.md +35 -35
- package/templates/agents/researcher.md +34 -34
- package/templates/agents/team-lead.md +34 -34
- package/templates/agents/tester.md +42 -42
- package/templates/ci/rulebook-review.yml +26 -26
- package/templates/cli/AIDER.md +49 -49
- package/templates/cli/AMAZON_Q.md +25 -25
- package/templates/cli/AUGGIE.md +32 -32
- package/templates/cli/CLAUDE.md +117 -117
- package/templates/cli/CLINE.md +99 -99
- package/templates/cli/CODEBUDDY.md +20 -20
- package/templates/cli/CODEIUM.md +20 -20
- package/templates/cli/CODEX.md +21 -21
- package/templates/cli/CONTINUE.md +34 -34
- package/templates/cli/CURSOR_CLI.md +62 -62
- package/templates/cli/FACTORY.md +18 -18
- package/templates/cli/GEMINI.md +35 -35
- package/templates/cli/KILOCODE.md +18 -18
- package/templates/cli/OPENCODE.md +18 -18
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
- package/templates/commands/rulebook-memory-save.md +48 -48
- package/templates/commands/rulebook-memory-search.md +47 -47
- package/templates/commands/rulebook-task-apply.md +67 -67
- package/templates/commands/rulebook-task-archive.md +94 -94
- package/templates/commands/rulebook-task-create.md +93 -93
- package/templates/commands/rulebook-task-list.md +42 -42
- package/templates/commands/rulebook-task-show.md +52 -52
- package/templates/commands/rulebook-task-validate.md +53 -53
- package/templates/core/AGENTS_LEAN.md +25 -25
- package/templates/core/AGENTS_OVERRIDE.md +16 -16
- package/templates/core/AGENT_AUTOMATION.md +288 -288
- package/templates/core/DAG.md +304 -304
- package/templates/core/DOCUMENTATION_RULES.md +36 -36
- package/templates/core/MULTI_AGENT.md +74 -74
- package/templates/core/PLANS.md +28 -28
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
- package/templates/core/RALPH.md +471 -471
- package/templates/core/RULEBOOK.md +1935 -1935
- package/templates/core/WORKSPACE.md +69 -0
- package/templates/frameworks/ANGULAR.md +36 -36
- package/templates/frameworks/DJANGO.md +83 -83
- package/templates/frameworks/ELECTRON.md +147 -147
- package/templates/frameworks/FLASK.md +38 -38
- package/templates/frameworks/FLUTTER.md +55 -55
- package/templates/frameworks/JQUERY.md +32 -32
- package/templates/frameworks/LARAVEL.md +38 -38
- package/templates/frameworks/NESTJS.md +43 -43
- package/templates/frameworks/NEXTJS.md +127 -127
- package/templates/frameworks/NUXT.md +40 -40
- package/templates/frameworks/RAILS.md +66 -66
- package/templates/frameworks/REACT.md +38 -38
- package/templates/frameworks/REACT_NATIVE.md +47 -47
- package/templates/frameworks/SPRING.md +39 -39
- package/templates/frameworks/SYMFONY.md +36 -36
- package/templates/frameworks/VUE.md +36 -36
- package/templates/frameworks/ZEND.md +35 -35
- package/templates/git/CI_CD_PATTERNS.md +661 -661
- package/templates/git/GITHUB_ACTIONS.md +728 -728
- package/templates/git/GITLAB_CI.md +730 -730
- package/templates/git/GIT_WORKFLOW.md +1157 -1157
- package/templates/git/SECRETS_MANAGEMENT.md +585 -585
- package/templates/hooks/COMMIT_MSG.md +530 -530
- package/templates/hooks/POST_CHECKOUT.md +546 -546
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
- package/templates/hooks/PRE_COMMIT.md +414 -414
- package/templates/hooks/PRE_PUSH.md +601 -601
- package/templates/ides/CONTINUE_RULES.md +16 -16
- package/templates/ides/COPILOT.md +37 -37
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
- package/templates/ides/CURSOR.md +43 -43
- package/templates/ides/GEMINI_RULES.md +17 -17
- package/templates/ides/JETBRAINS_AI.md +35 -35
- package/templates/ides/REPLIT.md +36 -36
- package/templates/ides/TABNINE.md +29 -29
- package/templates/ides/VSCODE.md +40 -40
- package/templates/ides/WINDSURF.md +36 -36
- package/templates/ides/WINDSURF_RULES.md +14 -14
- package/templates/ides/ZED.md +32 -32
- package/templates/ides/cursor-mdc/go.mdc +24 -24
- package/templates/ides/cursor-mdc/python.mdc +24 -24
- package/templates/ides/cursor-mdc/quality.mdc +25 -25
- package/templates/ides/cursor-mdc/ralph.mdc +39 -39
- package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
- package/templates/ides/cursor-mdc/rust.mdc +24 -24
- package/templates/ides/cursor-mdc/typescript.mdc +25 -25
- package/templates/languages/C.md +333 -333
- package/templates/languages/CPP.md +743 -743
- package/templates/languages/CSHARP.md +417 -417
- package/templates/languages/ELIXIR.md +454 -454
- package/templates/languages/ERLANG.md +361 -361
- package/templates/languages/GO.md +645 -645
- package/templates/languages/HASKELL.md +177 -177
- package/templates/languages/JAVA.md +607 -607
- package/templates/languages/JAVASCRIPT.md +631 -631
- package/templates/languages/JULIA.md +97 -97
- package/templates/languages/KOTLIN.md +511 -511
- package/templates/languages/LISP.md +100 -100
- package/templates/languages/LUA.md +74 -74
- package/templates/languages/OBJECTIVEC.md +90 -90
- package/templates/languages/PHP.md +416 -416
- package/templates/languages/PYTHON.md +682 -682
- package/templates/languages/RUBY.md +421 -421
- package/templates/languages/RUST.md +477 -477
- package/templates/languages/SAS.md +73 -73
- package/templates/languages/SCALA.md +348 -348
- package/templates/languages/SOLIDITY.md +580 -580
- package/templates/languages/SQL.md +137 -137
- package/templates/languages/SWIFT.md +466 -466
- package/templates/languages/TYPESCRIPT.md +591 -591
- package/templates/languages/ZIG.md +265 -265
- package/templates/modules/ATLASSIAN.md +255 -255
- package/templates/modules/CONTEXT7.md +54 -54
- package/templates/modules/FIGMA.md +267 -267
- package/templates/modules/GITHUB_MCP.md +64 -64
- package/templates/modules/GRAFANA.md +328 -328
- package/templates/modules/MEMORY.md +126 -126
- package/templates/modules/NOTION.md +247 -247
- package/templates/modules/PLAYWRIGHT.md +90 -90
- package/templates/modules/RULEBOOK_MCP.md +156 -156
- package/templates/modules/SERENA.md +337 -337
- package/templates/modules/SUPABASE.md +223 -223
- package/templates/modules/SYNAP.md +69 -69
- package/templates/modules/VECTORIZER.md +63 -63
- package/templates/modules/sequential-thinking.md +42 -42
- package/templates/ralph/ralph-history.bat +4 -4
- package/templates/ralph/ralph-history.sh +5 -5
- package/templates/ralph/ralph-init.bat +5 -5
- package/templates/ralph/ralph-init.sh +5 -5
- package/templates/ralph/ralph-pause.bat +5 -5
- package/templates/ralph/ralph-pause.sh +5 -5
- package/templates/ralph/ralph-run.bat +5 -5
- package/templates/ralph/ralph-run.sh +5 -5
- package/templates/ralph/ralph-status.bat +4 -4
- package/templates/ralph/ralph-status.sh +5 -5
- package/templates/services/AZURE_BLOB.md +184 -184
- package/templates/services/CASSANDRA.md +239 -239
- package/templates/services/DATADOG.md +26 -26
- package/templates/services/DOCKER.md +124 -124
- package/templates/services/DOCKER_COMPOSE.md +168 -168
- package/templates/services/DYNAMODB.md +308 -308
- package/templates/services/ELASTICSEARCH.md +347 -347
- package/templates/services/GCS.md +178 -178
- package/templates/services/HELM.md +194 -194
- package/templates/services/INFLUXDB.md +265 -265
- package/templates/services/KAFKA.md +341 -341
- package/templates/services/KUBERNETES.md +208 -208
- package/templates/services/MARIADB.md +183 -183
- package/templates/services/MEMCACHED.md +242 -242
- package/templates/services/MINIO.md +201 -201
- package/templates/services/MONGODB.md +268 -268
- package/templates/services/MYSQL.md +358 -358
- package/templates/services/NEO4J.md +247 -247
- package/templates/services/OPENTELEMETRY.md +25 -25
- package/templates/services/ORACLE.md +290 -290
- package/templates/services/PINO.md +24 -24
- package/templates/services/POSTGRESQL.md +326 -326
- package/templates/services/PROMETHEUS.md +33 -33
- package/templates/services/RABBITMQ.md +286 -286
- package/templates/services/REDIS.md +292 -292
- package/templates/services/S3.md +298 -298
- package/templates/services/SENTRY.md +23 -23
- package/templates/services/SQLITE.md +294 -294
- package/templates/services/SQLSERVER.md +294 -294
- package/templates/services/WINSTON.md +30 -30
- package/templates/skills/cli/aider/SKILL.md +59 -59
- package/templates/skills/cli/amazon-q/SKILL.md +35 -35
- package/templates/skills/cli/auggie/SKILL.md +42 -42
- package/templates/skills/cli/claude/SKILL.md +42 -42
- package/templates/skills/cli/cline/SKILL.md +42 -42
- package/templates/skills/cli/codebuddy/SKILL.md +30 -30
- package/templates/skills/cli/codeium/SKILL.md +30 -30
- package/templates/skills/cli/codex/SKILL.md +31 -31
- package/templates/skills/cli/continue/SKILL.md +44 -44
- package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
- package/templates/skills/cli/factory/SKILL.md +28 -28
- package/templates/skills/cli/gemini/SKILL.md +45 -45
- package/templates/skills/cli/kilocode/SKILL.md +28 -28
- package/templates/skills/cli/opencode/SKILL.md +28 -28
- package/templates/skills/core/agent-automation/SKILL.md +194 -194
- package/templates/skills/core/dag/SKILL.md +314 -314
- package/templates/skills/core/documentation-rules/SKILL.md +46 -46
- package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
- package/templates/skills/core/rulebook/SKILL.md +176 -176
- package/templates/skills/frameworks/angular/SKILL.md +46 -46
- package/templates/skills/frameworks/django/SKILL.md +93 -93
- package/templates/skills/frameworks/electron/SKILL.md +157 -157
- package/templates/skills/frameworks/flask/SKILL.md +48 -48
- package/templates/skills/frameworks/flutter/SKILL.md +65 -65
- package/templates/skills/frameworks/jquery/SKILL.md +42 -42
- package/templates/skills/frameworks/laravel/SKILL.md +48 -48
- package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
- package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
- package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
- package/templates/skills/frameworks/rails/SKILL.md +76 -76
- package/templates/skills/frameworks/react/SKILL.md +48 -48
- package/templates/skills/frameworks/react-native/SKILL.md +57 -57
- package/templates/skills/frameworks/spring/SKILL.md +49 -49
- package/templates/skills/frameworks/symfony/SKILL.md +46 -46
- package/templates/skills/frameworks/vue/SKILL.md +46 -46
- package/templates/skills/frameworks/zend/SKILL.md +45 -45
- package/templates/skills/ides/copilot/SKILL.md +47 -47
- package/templates/skills/ides/cursor/SKILL.md +53 -53
- package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
- package/templates/skills/ides/replit/SKILL.md +46 -46
- package/templates/skills/ides/tabnine/SKILL.md +39 -39
- package/templates/skills/ides/vscode/SKILL.md +50 -50
- package/templates/skills/ides/windsurf/SKILL.md +46 -46
- package/templates/skills/ides/zed/SKILL.md +42 -42
- package/templates/skills/languages/c/SKILL.md +343 -343
- package/templates/skills/languages/cpp/SKILL.md +753 -753
- package/templates/skills/languages/csharp/SKILL.md +427 -427
- package/templates/skills/languages/elixir/SKILL.md +464 -464
- package/templates/skills/languages/erlang/SKILL.md +371 -371
- package/templates/skills/languages/go/SKILL.md +655 -655
- package/templates/skills/languages/haskell/SKILL.md +187 -187
- package/templates/skills/languages/java/SKILL.md +617 -617
- package/templates/skills/languages/javascript/SKILL.md +641 -641
- package/templates/skills/languages/julia/SKILL.md +107 -107
- package/templates/skills/languages/kotlin/SKILL.md +521 -521
- package/templates/skills/languages/lisp/SKILL.md +110 -110
- package/templates/skills/languages/lua/SKILL.md +84 -84
- package/templates/skills/languages/objectivec/SKILL.md +100 -100
- package/templates/skills/languages/php/SKILL.md +426 -426
- package/templates/skills/languages/python/SKILL.md +692 -692
- package/templates/skills/languages/ruby/SKILL.md +431 -431
- package/templates/skills/languages/rust/SKILL.md +487 -487
- package/templates/skills/languages/sas/SKILL.md +83 -83
- package/templates/skills/languages/scala/SKILL.md +358 -358
- package/templates/skills/languages/solidity/SKILL.md +590 -590
- package/templates/skills/languages/sql/SKILL.md +147 -147
- package/templates/skills/languages/swift/SKILL.md +476 -476
- package/templates/skills/languages/typescript/SKILL.md +302 -302
- package/templates/skills/languages/zig/SKILL.md +275 -275
- package/templates/skills/modules/atlassian/SKILL.md +265 -265
- package/templates/skills/modules/context7/SKILL.md +64 -64
- package/templates/skills/modules/figma/SKILL.md +277 -277
- package/templates/skills/modules/github-mcp/SKILL.md +74 -74
- package/templates/skills/modules/grafana/SKILL.md +338 -338
- package/templates/skills/modules/memory/SKILL.md +73 -73
- package/templates/skills/modules/notion/SKILL.md +257 -257
- package/templates/skills/modules/playwright/SKILL.md +100 -100
- package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
- package/templates/skills/modules/serena/SKILL.md +347 -347
- package/templates/skills/modules/supabase/SKILL.md +233 -233
- package/templates/skills/modules/synap/SKILL.md +79 -79
- package/templates/skills/modules/vectorizer/SKILL.md +73 -73
- package/templates/skills/services/azure-blob/SKILL.md +194 -194
- package/templates/skills/services/cassandra/SKILL.md +249 -249
- package/templates/skills/services/dynamodb/SKILL.md +318 -318
- package/templates/skills/services/elasticsearch/SKILL.md +357 -357
- package/templates/skills/services/gcs/SKILL.md +188 -188
- package/templates/skills/services/influxdb/SKILL.md +275 -275
- package/templates/skills/services/kafka/SKILL.md +351 -351
- package/templates/skills/services/mariadb/SKILL.md +193 -193
- package/templates/skills/services/memcached/SKILL.md +252 -252
- package/templates/skills/services/minio/SKILL.md +211 -211
- package/templates/skills/services/mongodb/SKILL.md +278 -278
- package/templates/skills/services/mysql/SKILL.md +368 -368
- package/templates/skills/services/neo4j/SKILL.md +257 -257
- package/templates/skills/services/oracle/SKILL.md +300 -300
- package/templates/skills/services/postgresql/SKILL.md +336 -336
- package/templates/skills/services/rabbitmq/SKILL.md +296 -296
- package/templates/skills/services/redis/SKILL.md +302 -302
- package/templates/skills/services/s3/SKILL.md +308 -308
- package/templates/skills/services/sqlite/SKILL.md +304 -304
- package/templates/skills/services/sqlserver/SKILL.md +304 -304
- package/templates/skills/workflows/ralph/SKILL.md +309 -309
- package/templates/skills/workflows/ralph/install.sh +87 -87
- package/templates/skills/workflows/ralph/manifest.json +158 -158
|
@@ -1,233 +1,233 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Supabase"
|
|
3
|
-
description: "Use MCP Supabase for database operations, authentication, and storage."
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
category: "modules"
|
|
6
|
-
author: "Rulebook"
|
|
7
|
-
tags: ["modules", "mcp"]
|
|
8
|
-
dependencies: []
|
|
9
|
-
conflicts: []
|
|
10
|
-
---
|
|
11
|
-
<!-- SUPABASE:START -->
|
|
12
|
-
# Supabase MCP Instructions
|
|
13
|
-
|
|
14
|
-
**CRITICAL**: Use MCP Supabase for database operations, authentication, and storage.
|
|
15
|
-
|
|
16
|
-
## Core Features
|
|
17
|
-
|
|
18
|
-
### Database Operations
|
|
19
|
-
```typescript
|
|
20
|
-
// Query data
|
|
21
|
-
supabase.from('users').select('*')
|
|
22
|
-
supabase.from('users').select('id, name, email')
|
|
23
|
-
|
|
24
|
-
// Insert
|
|
25
|
-
supabase.from('users').insert({ name: 'John', email: 'john@example.com' })
|
|
26
|
-
|
|
27
|
-
// Update
|
|
28
|
-
supabase.from('users').update({ name: 'Jane' }).eq('id', 1)
|
|
29
|
-
|
|
30
|
-
// Delete
|
|
31
|
-
supabase.from('users').delete().eq('id', 1)
|
|
32
|
-
|
|
33
|
-
// Filters
|
|
34
|
-
supabase.from('users').select('*').eq('status', 'active')
|
|
35
|
-
supabase.from('users').select('*').gt('age', 18)
|
|
36
|
-
supabase.from('users').select('*').like('name', '%John%')
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Authentication
|
|
40
|
-
```typescript
|
|
41
|
-
// Sign up
|
|
42
|
-
supabase.auth.signUp({ email, password })
|
|
43
|
-
|
|
44
|
-
// Sign in
|
|
45
|
-
supabase.auth.signInWithPassword({ email, password })
|
|
46
|
-
|
|
47
|
-
// Sign out
|
|
48
|
-
supabase.auth.signOut()
|
|
49
|
-
|
|
50
|
-
// Get session
|
|
51
|
-
supabase.auth.getSession()
|
|
52
|
-
|
|
53
|
-
// Get user
|
|
54
|
-
supabase.auth.getUser()
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Storage
|
|
58
|
-
```typescript
|
|
59
|
-
// Upload file
|
|
60
|
-
supabase.storage.from('avatars').upload('path/file.jpg', file)
|
|
61
|
-
|
|
62
|
-
// Download file
|
|
63
|
-
supabase.storage.from('avatars').download('path/file.jpg')
|
|
64
|
-
|
|
65
|
-
// List files
|
|
66
|
-
supabase.storage.from('avatars').list('folder')
|
|
67
|
-
|
|
68
|
-
// Delete file
|
|
69
|
-
supabase.storage.from('avatars').remove(['path/file.jpg'])
|
|
70
|
-
|
|
71
|
-
// Get public URL
|
|
72
|
-
supabase.storage.from('avatars').getPublicUrl('path/file.jpg')
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Real-time Subscriptions
|
|
76
|
-
```typescript
|
|
77
|
-
// Subscribe to changes
|
|
78
|
-
supabase
|
|
79
|
-
.channel('room1')
|
|
80
|
-
.on('postgres_changes', {
|
|
81
|
-
event: '*',
|
|
82
|
-
schema: 'public',
|
|
83
|
-
table: 'users'
|
|
84
|
-
}, (payload) => {
|
|
85
|
-
console.log('Change received!', payload)
|
|
86
|
-
})
|
|
87
|
-
.subscribe()
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Common Patterns
|
|
91
|
-
|
|
92
|
-
### CRUD Operations
|
|
93
|
-
```typescript
|
|
94
|
-
// Create
|
|
95
|
-
const { data, error } = await supabase
|
|
96
|
-
.from('tasks')
|
|
97
|
-
.insert({ title: 'New Task', completed: false })
|
|
98
|
-
.select()
|
|
99
|
-
|
|
100
|
-
// Read
|
|
101
|
-
const { data, error } = await supabase
|
|
102
|
-
.from('tasks')
|
|
103
|
-
.select('*')
|
|
104
|
-
.eq('completed', false)
|
|
105
|
-
|
|
106
|
-
// Update
|
|
107
|
-
const { data, error } = await supabase
|
|
108
|
-
.from('tasks')
|
|
109
|
-
.update({ completed: true })
|
|
110
|
-
.eq('id', taskId)
|
|
111
|
-
|
|
112
|
-
// Delete
|
|
113
|
-
const { data, error } = await supabase
|
|
114
|
-
.from('tasks')
|
|
115
|
-
.delete()
|
|
116
|
-
.eq('id', taskId)
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### Authentication Flow
|
|
120
|
-
```typescript
|
|
121
|
-
// 1. Sign up user
|
|
122
|
-
const { data: signUpData, error: signUpError } = await supabase.auth.signUp({
|
|
123
|
-
email: 'user@example.com',
|
|
124
|
-
password: 'secure-password'
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
// 2. Sign in
|
|
128
|
-
const { data: signInData, error: signInError } = await supabase.auth.signInWithPassword({
|
|
129
|
-
email: 'user@example.com',
|
|
130
|
-
password: 'secure-password'
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
// 3. Check session
|
|
134
|
-
const { data: { session } } = await supabase.auth.getSession()
|
|
135
|
-
|
|
136
|
-
// 4. Sign out
|
|
137
|
-
await supabase.auth.signOut()
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### File Upload with Validation
|
|
141
|
-
```typescript
|
|
142
|
-
// 1. Validate file
|
|
143
|
-
if (file.size > 5 * 1024 * 1024) {
|
|
144
|
-
throw new Error('File too large (max 5MB)')
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// 2. Upload
|
|
148
|
-
const { data, error } = await supabase.storage
|
|
149
|
-
.from('uploads')
|
|
150
|
-
.upload(`${userId}/${file.name}`, file, {
|
|
151
|
-
cacheControl: '3600',
|
|
152
|
-
upsert: false
|
|
153
|
-
})
|
|
154
|
-
|
|
155
|
-
// 3. Get public URL
|
|
156
|
-
if (!error) {
|
|
157
|
-
const { data: { publicUrl } } = supabase.storage
|
|
158
|
-
.from('uploads')
|
|
159
|
-
.getPublicUrl(`${userId}/${file.name}`)
|
|
160
|
-
}
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
## Best Practices
|
|
164
|
-
|
|
165
|
-
✅ **DO:**
|
|
166
|
-
- Use Row Level Security (RLS) policies
|
|
167
|
-
- Handle errors properly (`if (error) throw error`)
|
|
168
|
-
- Use `.select()` after insert/update to get returned data
|
|
169
|
-
- Use prepared statements (automatic with Supabase)
|
|
170
|
-
- Enable real-time only when needed
|
|
171
|
-
- Use storage buckets with proper permissions
|
|
172
|
-
|
|
173
|
-
❌ **DON'T:**
|
|
174
|
-
- Expose service role key in client code
|
|
175
|
-
- Skip RLS policies (always enable)
|
|
176
|
-
- Ignore error responses
|
|
177
|
-
- Store sensitive data without encryption
|
|
178
|
-
- Use anon key for admin operations
|
|
179
|
-
|
|
180
|
-
## Configuration
|
|
181
|
-
|
|
182
|
-
```json
|
|
183
|
-
{
|
|
184
|
-
"mcpServers": {
|
|
185
|
-
"supabase": {
|
|
186
|
-
"command": "npx",
|
|
187
|
-
"args": ["-y", "@modelcontextprotocol/server-supabase"],
|
|
188
|
-
"env": {
|
|
189
|
-
"SUPABASE_URL": "https://your-project.supabase.co",
|
|
190
|
-
"SUPABASE_ANON_KEY": "your-anon-key",
|
|
191
|
-
"SUPABASE_SERVICE_ROLE_KEY": "your-service-role-key"
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
**Security:**
|
|
199
|
-
- Use `SUPABASE_ANON_KEY` for client-side operations
|
|
200
|
-
- Use `SUPABASE_SERVICE_ROLE_KEY` only server-side
|
|
201
|
-
- Never commit keys to version control
|
|
202
|
-
- Enable RLS on all tables
|
|
203
|
-
|
|
204
|
-
## Integration with Development
|
|
205
|
-
|
|
206
|
-
### Testing
|
|
207
|
-
```typescript
|
|
208
|
-
// Use test database for development
|
|
209
|
-
const supabase = createClient(
|
|
210
|
-
process.env.SUPABASE_TEST_URL,
|
|
211
|
-
process.env.SUPABASE_TEST_KEY
|
|
212
|
-
)
|
|
213
|
-
|
|
214
|
-
// Clean up after tests
|
|
215
|
-
afterEach(async () => {
|
|
216
|
-
await supabase.from('test_table').delete().neq('id', 0)
|
|
217
|
-
})
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### Migrations
|
|
221
|
-
```bash
|
|
222
|
-
# Create migration
|
|
223
|
-
supabase migration new add_users_table
|
|
224
|
-
|
|
225
|
-
# Apply migrations
|
|
226
|
-
supabase db push
|
|
227
|
-
|
|
228
|
-
# Reset database
|
|
229
|
-
supabase db reset
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
<!-- SUPABASE:END -->
|
|
233
|
-
|
|
1
|
+
---
|
|
2
|
+
name: "Supabase"
|
|
3
|
+
description: "Use MCP Supabase for database operations, authentication, and storage."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
category: "modules"
|
|
6
|
+
author: "Rulebook"
|
|
7
|
+
tags: ["modules", "mcp"]
|
|
8
|
+
dependencies: []
|
|
9
|
+
conflicts: []
|
|
10
|
+
---
|
|
11
|
+
<!-- SUPABASE:START -->
|
|
12
|
+
# Supabase MCP Instructions
|
|
13
|
+
|
|
14
|
+
**CRITICAL**: Use MCP Supabase for database operations, authentication, and storage.
|
|
15
|
+
|
|
16
|
+
## Core Features
|
|
17
|
+
|
|
18
|
+
### Database Operations
|
|
19
|
+
```typescript
|
|
20
|
+
// Query data
|
|
21
|
+
supabase.from('users').select('*')
|
|
22
|
+
supabase.from('users').select('id, name, email')
|
|
23
|
+
|
|
24
|
+
// Insert
|
|
25
|
+
supabase.from('users').insert({ name: 'John', email: 'john@example.com' })
|
|
26
|
+
|
|
27
|
+
// Update
|
|
28
|
+
supabase.from('users').update({ name: 'Jane' }).eq('id', 1)
|
|
29
|
+
|
|
30
|
+
// Delete
|
|
31
|
+
supabase.from('users').delete().eq('id', 1)
|
|
32
|
+
|
|
33
|
+
// Filters
|
|
34
|
+
supabase.from('users').select('*').eq('status', 'active')
|
|
35
|
+
supabase.from('users').select('*').gt('age', 18)
|
|
36
|
+
supabase.from('users').select('*').like('name', '%John%')
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Authentication
|
|
40
|
+
```typescript
|
|
41
|
+
// Sign up
|
|
42
|
+
supabase.auth.signUp({ email, password })
|
|
43
|
+
|
|
44
|
+
// Sign in
|
|
45
|
+
supabase.auth.signInWithPassword({ email, password })
|
|
46
|
+
|
|
47
|
+
// Sign out
|
|
48
|
+
supabase.auth.signOut()
|
|
49
|
+
|
|
50
|
+
// Get session
|
|
51
|
+
supabase.auth.getSession()
|
|
52
|
+
|
|
53
|
+
// Get user
|
|
54
|
+
supabase.auth.getUser()
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Storage
|
|
58
|
+
```typescript
|
|
59
|
+
// Upload file
|
|
60
|
+
supabase.storage.from('avatars').upload('path/file.jpg', file)
|
|
61
|
+
|
|
62
|
+
// Download file
|
|
63
|
+
supabase.storage.from('avatars').download('path/file.jpg')
|
|
64
|
+
|
|
65
|
+
// List files
|
|
66
|
+
supabase.storage.from('avatars').list('folder')
|
|
67
|
+
|
|
68
|
+
// Delete file
|
|
69
|
+
supabase.storage.from('avatars').remove(['path/file.jpg'])
|
|
70
|
+
|
|
71
|
+
// Get public URL
|
|
72
|
+
supabase.storage.from('avatars').getPublicUrl('path/file.jpg')
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Real-time Subscriptions
|
|
76
|
+
```typescript
|
|
77
|
+
// Subscribe to changes
|
|
78
|
+
supabase
|
|
79
|
+
.channel('room1')
|
|
80
|
+
.on('postgres_changes', {
|
|
81
|
+
event: '*',
|
|
82
|
+
schema: 'public',
|
|
83
|
+
table: 'users'
|
|
84
|
+
}, (payload) => {
|
|
85
|
+
console.log('Change received!', payload)
|
|
86
|
+
})
|
|
87
|
+
.subscribe()
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Common Patterns
|
|
91
|
+
|
|
92
|
+
### CRUD Operations
|
|
93
|
+
```typescript
|
|
94
|
+
// Create
|
|
95
|
+
const { data, error } = await supabase
|
|
96
|
+
.from('tasks')
|
|
97
|
+
.insert({ title: 'New Task', completed: false })
|
|
98
|
+
.select()
|
|
99
|
+
|
|
100
|
+
// Read
|
|
101
|
+
const { data, error } = await supabase
|
|
102
|
+
.from('tasks')
|
|
103
|
+
.select('*')
|
|
104
|
+
.eq('completed', false)
|
|
105
|
+
|
|
106
|
+
// Update
|
|
107
|
+
const { data, error } = await supabase
|
|
108
|
+
.from('tasks')
|
|
109
|
+
.update({ completed: true })
|
|
110
|
+
.eq('id', taskId)
|
|
111
|
+
|
|
112
|
+
// Delete
|
|
113
|
+
const { data, error } = await supabase
|
|
114
|
+
.from('tasks')
|
|
115
|
+
.delete()
|
|
116
|
+
.eq('id', taskId)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Authentication Flow
|
|
120
|
+
```typescript
|
|
121
|
+
// 1. Sign up user
|
|
122
|
+
const { data: signUpData, error: signUpError } = await supabase.auth.signUp({
|
|
123
|
+
email: 'user@example.com',
|
|
124
|
+
password: 'secure-password'
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
// 2. Sign in
|
|
128
|
+
const { data: signInData, error: signInError } = await supabase.auth.signInWithPassword({
|
|
129
|
+
email: 'user@example.com',
|
|
130
|
+
password: 'secure-password'
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
// 3. Check session
|
|
134
|
+
const { data: { session } } = await supabase.auth.getSession()
|
|
135
|
+
|
|
136
|
+
// 4. Sign out
|
|
137
|
+
await supabase.auth.signOut()
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### File Upload with Validation
|
|
141
|
+
```typescript
|
|
142
|
+
// 1. Validate file
|
|
143
|
+
if (file.size > 5 * 1024 * 1024) {
|
|
144
|
+
throw new Error('File too large (max 5MB)')
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// 2. Upload
|
|
148
|
+
const { data, error } = await supabase.storage
|
|
149
|
+
.from('uploads')
|
|
150
|
+
.upload(`${userId}/${file.name}`, file, {
|
|
151
|
+
cacheControl: '3600',
|
|
152
|
+
upsert: false
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
// 3. Get public URL
|
|
156
|
+
if (!error) {
|
|
157
|
+
const { data: { publicUrl } } = supabase.storage
|
|
158
|
+
.from('uploads')
|
|
159
|
+
.getPublicUrl(`${userId}/${file.name}`)
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Best Practices
|
|
164
|
+
|
|
165
|
+
✅ **DO:**
|
|
166
|
+
- Use Row Level Security (RLS) policies
|
|
167
|
+
- Handle errors properly (`if (error) throw error`)
|
|
168
|
+
- Use `.select()` after insert/update to get returned data
|
|
169
|
+
- Use prepared statements (automatic with Supabase)
|
|
170
|
+
- Enable real-time only when needed
|
|
171
|
+
- Use storage buckets with proper permissions
|
|
172
|
+
|
|
173
|
+
❌ **DON'T:**
|
|
174
|
+
- Expose service role key in client code
|
|
175
|
+
- Skip RLS policies (always enable)
|
|
176
|
+
- Ignore error responses
|
|
177
|
+
- Store sensitive data without encryption
|
|
178
|
+
- Use anon key for admin operations
|
|
179
|
+
|
|
180
|
+
## Configuration
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"mcpServers": {
|
|
185
|
+
"supabase": {
|
|
186
|
+
"command": "npx",
|
|
187
|
+
"args": ["-y", "@modelcontextprotocol/server-supabase"],
|
|
188
|
+
"env": {
|
|
189
|
+
"SUPABASE_URL": "https://your-project.supabase.co",
|
|
190
|
+
"SUPABASE_ANON_KEY": "your-anon-key",
|
|
191
|
+
"SUPABASE_SERVICE_ROLE_KEY": "your-service-role-key"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Security:**
|
|
199
|
+
- Use `SUPABASE_ANON_KEY` for client-side operations
|
|
200
|
+
- Use `SUPABASE_SERVICE_ROLE_KEY` only server-side
|
|
201
|
+
- Never commit keys to version control
|
|
202
|
+
- Enable RLS on all tables
|
|
203
|
+
|
|
204
|
+
## Integration with Development
|
|
205
|
+
|
|
206
|
+
### Testing
|
|
207
|
+
```typescript
|
|
208
|
+
// Use test database for development
|
|
209
|
+
const supabase = createClient(
|
|
210
|
+
process.env.SUPABASE_TEST_URL,
|
|
211
|
+
process.env.SUPABASE_TEST_KEY
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
// Clean up after tests
|
|
215
|
+
afterEach(async () => {
|
|
216
|
+
await supabase.from('test_table').delete().neq('id', 0)
|
|
217
|
+
})
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Migrations
|
|
221
|
+
```bash
|
|
222
|
+
# Create migration
|
|
223
|
+
supabase migration new add_users_table
|
|
224
|
+
|
|
225
|
+
# Apply migrations
|
|
226
|
+
supabase db push
|
|
227
|
+
|
|
228
|
+
# Reset database
|
|
229
|
+
supabase db reset
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
<!-- SUPABASE:END -->
|
|
233
|
+
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "Synap"
|
|
3
|
-
description: "Use MCP Synap for persistent task and data storage across context windows."
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
category: "modules"
|
|
6
|
-
author: "Rulebook"
|
|
7
|
-
tags: ["modules", "mcp"]
|
|
8
|
-
dependencies: []
|
|
9
|
-
conflicts: []
|
|
10
|
-
---
|
|
11
|
-
<!-- SYNAP:START -->
|
|
12
|
-
# Synap Instructions
|
|
13
|
-
|
|
14
|
-
**CRITICAL**: Use MCP Synap for persistent task and data storage across context windows.
|
|
15
|
-
|
|
16
|
-
## Core Features
|
|
17
|
-
|
|
18
|
-
### Key-Value Store
|
|
19
|
-
```
|
|
20
|
-
synap_kv_set(key, value, ttl?) # Store with optional TTL
|
|
21
|
-
synap_kv_get(key) # Retrieve
|
|
22
|
-
synap_kv_delete(key) # Remove
|
|
23
|
-
synap_kv_scan(prefix) # List by prefix
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### Queue & Pub/Sub
|
|
27
|
-
```
|
|
28
|
-
synap_queue_publish(queue, message, priority) # Add to queue
|
|
29
|
-
synap_queue_consume(queue) # Process from queue
|
|
30
|
-
synap_pubsub_publish(topic, message) # Broadcast
|
|
31
|
-
synap_stream_publish(room, event) # Stream events
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Common Patterns
|
|
35
|
-
|
|
36
|
-
### Task Tracking
|
|
37
|
-
```
|
|
38
|
-
Pattern: "task:<feature>:<subtask-id>"
|
|
39
|
-
|
|
40
|
-
synap_kv_set("task:auth:login", JSON.stringify({
|
|
41
|
-
status: "in_progress",
|
|
42
|
-
tests: ["test_login_success"],
|
|
43
|
-
coverage: 95.2
|
|
44
|
-
}))
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Session State
|
|
48
|
-
```
|
|
49
|
-
Pattern: "session:<id>:<data-type>"
|
|
50
|
-
|
|
51
|
-
synap_kv_set("session:abc:current-file", "/src/auth.ts")
|
|
52
|
-
synap_kv_set("session:abc:todo-list", JSON.stringify([...]))
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Test Results
|
|
56
|
-
```
|
|
57
|
-
Pattern: "test:<suite>:<timestamp>"
|
|
58
|
-
|
|
59
|
-
synap_kv_set("test:integration:latest", JSON.stringify({
|
|
60
|
-
passed: 42,
|
|
61
|
-
failed: 0,
|
|
62
|
-
coverage: 96.5
|
|
63
|
-
}), 86400) // TTL: 24 hours
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Best Practices
|
|
67
|
-
|
|
68
|
-
✅ **DO:**
|
|
69
|
-
- Use TTL for temporary data
|
|
70
|
-
- Use prefixes for organization
|
|
71
|
-
- Store session state before context switch
|
|
72
|
-
- Clean up old data regularly
|
|
73
|
-
|
|
74
|
-
❌ **DON'T:**
|
|
75
|
-
- Store large binary data
|
|
76
|
-
- Use random keys (use structured prefixes)
|
|
77
|
-
- Skip TTL for temporary data
|
|
78
|
-
|
|
79
|
-
<!-- SYNAP:END -->
|
|
1
|
+
---
|
|
2
|
+
name: "Synap"
|
|
3
|
+
description: "Use MCP Synap for persistent task and data storage across context windows."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
category: "modules"
|
|
6
|
+
author: "Rulebook"
|
|
7
|
+
tags: ["modules", "mcp"]
|
|
8
|
+
dependencies: []
|
|
9
|
+
conflicts: []
|
|
10
|
+
---
|
|
11
|
+
<!-- SYNAP:START -->
|
|
12
|
+
# Synap Instructions
|
|
13
|
+
|
|
14
|
+
**CRITICAL**: Use MCP Synap for persistent task and data storage across context windows.
|
|
15
|
+
|
|
16
|
+
## Core Features
|
|
17
|
+
|
|
18
|
+
### Key-Value Store
|
|
19
|
+
```
|
|
20
|
+
synap_kv_set(key, value, ttl?) # Store with optional TTL
|
|
21
|
+
synap_kv_get(key) # Retrieve
|
|
22
|
+
synap_kv_delete(key) # Remove
|
|
23
|
+
synap_kv_scan(prefix) # List by prefix
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Queue & Pub/Sub
|
|
27
|
+
```
|
|
28
|
+
synap_queue_publish(queue, message, priority) # Add to queue
|
|
29
|
+
synap_queue_consume(queue) # Process from queue
|
|
30
|
+
synap_pubsub_publish(topic, message) # Broadcast
|
|
31
|
+
synap_stream_publish(room, event) # Stream events
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Common Patterns
|
|
35
|
+
|
|
36
|
+
### Task Tracking
|
|
37
|
+
```
|
|
38
|
+
Pattern: "task:<feature>:<subtask-id>"
|
|
39
|
+
|
|
40
|
+
synap_kv_set("task:auth:login", JSON.stringify({
|
|
41
|
+
status: "in_progress",
|
|
42
|
+
tests: ["test_login_success"],
|
|
43
|
+
coverage: 95.2
|
|
44
|
+
}))
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Session State
|
|
48
|
+
```
|
|
49
|
+
Pattern: "session:<id>:<data-type>"
|
|
50
|
+
|
|
51
|
+
synap_kv_set("session:abc:current-file", "/src/auth.ts")
|
|
52
|
+
synap_kv_set("session:abc:todo-list", JSON.stringify([...]))
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Test Results
|
|
56
|
+
```
|
|
57
|
+
Pattern: "test:<suite>:<timestamp>"
|
|
58
|
+
|
|
59
|
+
synap_kv_set("test:integration:latest", JSON.stringify({
|
|
60
|
+
passed: 42,
|
|
61
|
+
failed: 0,
|
|
62
|
+
coverage: 96.5
|
|
63
|
+
}), 86400) // TTL: 24 hours
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Best Practices
|
|
67
|
+
|
|
68
|
+
✅ **DO:**
|
|
69
|
+
- Use TTL for temporary data
|
|
70
|
+
- Use prefixes for organization
|
|
71
|
+
- Store session state before context switch
|
|
72
|
+
- Clean up old data regularly
|
|
73
|
+
|
|
74
|
+
❌ **DON'T:**
|
|
75
|
+
- Store large binary data
|
|
76
|
+
- Use random keys (use structured prefixes)
|
|
77
|
+
- Skip TTL for temporary data
|
|
78
|
+
|
|
79
|
+
<!-- SYNAP:END -->
|