opencode-skills-collection 1.0.186 → 1.0.187
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/bundled-skills/.antigravity-install-manifest.json +5 -1
- package/bundled-skills/3d-web-experience/SKILL.md +152 -37
- package/bundled-skills/agent-evaluation/SKILL.md +1088 -26
- package/bundled-skills/agent-memory-systems/SKILL.md +1037 -25
- package/bundled-skills/agent-tool-builder/SKILL.md +668 -16
- package/bundled-skills/ai-agents-architect/SKILL.md +271 -31
- package/bundled-skills/ai-product/SKILL.md +716 -26
- package/bundled-skills/ai-wrapper-product/SKILL.md +450 -44
- package/bundled-skills/algolia-search/SKILL.md +867 -15
- package/bundled-skills/autonomous-agents/SKILL.md +1033 -26
- package/bundled-skills/aws-serverless/SKILL.md +1046 -35
- package/bundled-skills/azure-functions/SKILL.md +1318 -19
- package/bundled-skills/browser-automation/SKILL.md +1065 -28
- package/bundled-skills/browser-extension-builder/SKILL.md +159 -32
- package/bundled-skills/bullmq-specialist/SKILL.md +347 -16
- package/bundled-skills/clerk-auth/SKILL.md +796 -15
- package/bundled-skills/computer-use-agents/SKILL.md +1870 -28
- package/bundled-skills/context-window-management/SKILL.md +271 -18
- package/bundled-skills/conversation-memory/SKILL.md +453 -24
- package/bundled-skills/crewai/SKILL.md +252 -46
- package/bundled-skills/discord-bot-architect/SKILL.md +1207 -34
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/bundles.md +1 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +4 -4
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/email-systems/SKILL.md +646 -26
- package/bundled-skills/faf-expert/SKILL.md +221 -0
- package/bundled-skills/faf-wizard/SKILL.md +252 -0
- package/bundled-skills/file-uploads/SKILL.md +212 -11
- package/bundled-skills/firebase/SKILL.md +646 -16
- package/bundled-skills/gcp-cloud-run/SKILL.md +1117 -32
- package/bundled-skills/graphql/SKILL.md +1026 -27
- package/bundled-skills/hubspot-integration/SKILL.md +804 -19
- package/bundled-skills/idea-darwin/SKILL.md +120 -0
- package/bundled-skills/inngest/SKILL.md +431 -16
- package/bundled-skills/interactive-portfolio/SKILL.md +342 -44
- package/bundled-skills/langfuse/SKILL.md +296 -41
- package/bundled-skills/langgraph/SKILL.md +259 -50
- package/bundled-skills/micro-saas-launcher/SKILL.md +343 -44
- package/bundled-skills/neon-postgres/SKILL.md +572 -15
- package/bundled-skills/nextjs-supabase-auth/SKILL.md +269 -21
- package/bundled-skills/notion-template-business/SKILL.md +371 -44
- package/bundled-skills/personal-tool-builder/SKILL.md +537 -44
- package/bundled-skills/plaid-fintech/SKILL.md +825 -19
- package/bundled-skills/prompt-caching/SKILL.md +438 -25
- package/bundled-skills/rag-engineer/SKILL.md +271 -29
- package/bundled-skills/salesforce-development/SKILL.md +912 -19
- package/bundled-skills/satori/SKILL.md +54 -0
- package/bundled-skills/scroll-experience/SKILL.md +381 -44
- package/bundled-skills/segment-cdp/SKILL.md +817 -19
- package/bundled-skills/shopify-apps/SKILL.md +1475 -19
- package/bundled-skills/slack-bot-builder/SKILL.md +1162 -28
- package/bundled-skills/telegram-bot-builder/SKILL.md +152 -37
- package/bundled-skills/telegram-mini-app/SKILL.md +445 -44
- package/bundled-skills/trigger-dev/SKILL.md +916 -27
- package/bundled-skills/twilio-communications/SKILL.md +1310 -28
- package/bundled-skills/upstash-qstash/SKILL.md +898 -27
- package/bundled-skills/vercel-deployment/SKILL.md +637 -39
- package/bundled-skills/viral-generator-builder/SKILL.md +132 -37
- package/bundled-skills/voice-agents/SKILL.md +937 -27
- package/bundled-skills/voice-ai-development/SKILL.md +375 -46
- package/bundled-skills/workflow-automation/SKILL.md +982 -29
- package/bundled-skills/zapier-make-patterns/SKILL.md +772 -27
- package/package.json +1 -1
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: browser-extension-builder
|
|
3
|
-
description:
|
|
3
|
+
description: Expert in building browser extensions that solve real problems -
|
|
4
|
+
Chrome, Firefox, and cross-browser extensions. Covers extension architecture,
|
|
5
|
+
manifest v3, content scripts, popup UIs, monetization strategies, and Chrome
|
|
6
|
+
Web Store publishing.
|
|
4
7
|
risk: unknown
|
|
5
|
-
source:
|
|
6
|
-
date_added:
|
|
8
|
+
source: vibeship-spawner-skills (Apache 2.0)
|
|
9
|
+
date_added: 2026-02-27
|
|
7
10
|
---
|
|
8
11
|
|
|
9
12
|
# Browser Extension Builder
|
|
10
13
|
|
|
14
|
+
Expert in building browser extensions that solve real problems - Chrome, Firefox,
|
|
15
|
+
and cross-browser extensions. Covers extension architecture, manifest v3, content
|
|
16
|
+
scripts, popup UIs, monetization strategies, and Chrome Web Store publishing.
|
|
17
|
+
|
|
11
18
|
**Role**: Browser Extension Architect
|
|
12
19
|
|
|
13
20
|
You extend the browser to give users superpowers. You understand the
|
|
@@ -15,6 +22,15 @@ unique constraints of extension development - permissions, security,
|
|
|
15
22
|
store policies. You build extensions that people install and actually
|
|
16
23
|
use daily. You know the difference between a toy and a tool.
|
|
17
24
|
|
|
25
|
+
### Expertise
|
|
26
|
+
|
|
27
|
+
- Chrome extension APIs
|
|
28
|
+
- Manifest v3
|
|
29
|
+
- Content scripts
|
|
30
|
+
- Service workers
|
|
31
|
+
- Extension UX
|
|
32
|
+
- Store publishing
|
|
33
|
+
|
|
18
34
|
## Capabilities
|
|
19
35
|
|
|
20
36
|
- Extension architecture
|
|
@@ -34,6 +50,8 @@ Structure for modern browser extensions
|
|
|
34
50
|
|
|
35
51
|
**When to use**: When starting a new extension
|
|
36
52
|
|
|
53
|
+
## Extension Architecture
|
|
54
|
+
|
|
37
55
|
### Project Structure
|
|
38
56
|
```
|
|
39
57
|
extension/
|
|
@@ -95,6 +113,8 @@ Code that runs on web pages
|
|
|
95
113
|
|
|
96
114
|
**When to use**: When modifying or reading page content
|
|
97
115
|
|
|
116
|
+
## Content Scripts
|
|
117
|
+
|
|
98
118
|
### Basic Content Script
|
|
99
119
|
```javascript
|
|
100
120
|
// content.js - Runs on every matched page
|
|
@@ -159,6 +179,8 @@ Persisting extension data
|
|
|
159
179
|
|
|
160
180
|
**When to use**: When saving user settings or data
|
|
161
181
|
|
|
182
|
+
## Storage and State
|
|
183
|
+
|
|
162
184
|
### Chrome Storage API
|
|
163
185
|
```javascript
|
|
164
186
|
// Save data
|
|
@@ -208,47 +230,152 @@ const { settings } = await getStorage(['settings']);
|
|
|
208
230
|
await setStorage({ settings: { ...settings, theme: 'dark' } });
|
|
209
231
|
```
|
|
210
232
|
|
|
211
|
-
|
|
233
|
+
### Extension Monetization
|
|
234
|
+
|
|
235
|
+
Making money from extensions
|
|
236
|
+
|
|
237
|
+
**When to use**: When planning extension revenue
|
|
238
|
+
|
|
239
|
+
## Extension Monetization
|
|
240
|
+
|
|
241
|
+
### Revenue Models
|
|
242
|
+
| Model | How It Works |
|
|
243
|
+
|-------|--------------|
|
|
244
|
+
| Freemium | Free basic, paid features |
|
|
245
|
+
| One-time | Pay once, use forever |
|
|
246
|
+
| Subscription | Monthly/yearly access |
|
|
247
|
+
| Donations | Tip jar / Buy me a coffee |
|
|
248
|
+
| Affiliate | Recommend products |
|
|
249
|
+
|
|
250
|
+
### Payment Integration
|
|
251
|
+
```javascript
|
|
252
|
+
// Use your backend for payments
|
|
253
|
+
// Extension can't directly use Stripe
|
|
254
|
+
|
|
255
|
+
// 1. User clicks "Upgrade" in popup
|
|
256
|
+
// 2. Open your website with user ID
|
|
257
|
+
chrome.tabs.create({
|
|
258
|
+
url: `https://your-site.com/upgrade?user=${userId}`
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// 3. After payment, sync status
|
|
262
|
+
async function checkPremium() {
|
|
263
|
+
const { userId } = await getStorage(['userId']);
|
|
264
|
+
const response = await fetch(
|
|
265
|
+
`https://your-api.com/premium/${userId}`
|
|
266
|
+
);
|
|
267
|
+
const { isPremium } = await response.json();
|
|
268
|
+
await setStorage({ isPremium });
|
|
269
|
+
return isPremium;
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Feature Gating
|
|
274
|
+
```javascript
|
|
275
|
+
async function usePremiumFeature() {
|
|
276
|
+
const { isPremium } = await getStorage(['isPremium']);
|
|
277
|
+
if (!isPremium) {
|
|
278
|
+
showUpgradeModal();
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
// Run premium feature
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Chrome Web Store Payments
|
|
286
|
+
- Chrome discontinued built-in payments
|
|
287
|
+
- Use your own payment system
|
|
288
|
+
- Link to external checkout page
|
|
289
|
+
|
|
290
|
+
## Validation Checks
|
|
291
|
+
|
|
292
|
+
### Using Deprecated Manifest V2
|
|
212
293
|
|
|
213
|
-
|
|
294
|
+
Severity: HIGH
|
|
214
295
|
|
|
215
|
-
|
|
216
|
-
Store may reject.
|
|
217
|
-
Security risk.
|
|
218
|
-
Bad reviews.
|
|
296
|
+
Message: Using Manifest V2 - Chrome requires V3 for new extensions.
|
|
219
297
|
|
|
220
|
-
|
|
221
|
-
Use optional permissions.
|
|
222
|
-
Explain why in description.
|
|
223
|
-
Request at time of use.
|
|
298
|
+
Fix action: Migrate to Manifest V3 with service worker
|
|
224
299
|
|
|
225
|
-
###
|
|
300
|
+
### Excessive Permissions Requested
|
|
226
301
|
|
|
227
|
-
|
|
228
|
-
Battery drain.
|
|
229
|
-
Browser slows down.
|
|
230
|
-
Users uninstall.
|
|
302
|
+
Severity: HIGH
|
|
231
303
|
|
|
232
|
-
|
|
233
|
-
Use alarms for periodic tasks.
|
|
234
|
-
Offload to content scripts.
|
|
235
|
-
Cache aggressively.
|
|
304
|
+
Message: Requesting broad permissions - may cause store rejection.
|
|
236
305
|
|
|
237
|
-
|
|
306
|
+
Fix action: Use specific host_permissions and optional_permissions
|
|
238
307
|
|
|
239
|
-
|
|
240
|
-
APIs change.
|
|
241
|
-
Angry users.
|
|
242
|
-
Bad reviews.
|
|
308
|
+
### No Error Handling in Extension
|
|
243
309
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
310
|
+
Severity: MEDIUM
|
|
311
|
+
|
|
312
|
+
Message: Not checking chrome.runtime.lastError for errors.
|
|
313
|
+
|
|
314
|
+
Fix action: Check chrome.runtime.lastError after API calls
|
|
315
|
+
|
|
316
|
+
### Hardcoded URLs in Extension
|
|
317
|
+
|
|
318
|
+
Severity: MEDIUM
|
|
319
|
+
|
|
320
|
+
Message: Hardcoded URLs may cause issues in production.
|
|
321
|
+
|
|
322
|
+
Fix action: Use chrome.storage or manifest for configuration
|
|
323
|
+
|
|
324
|
+
### Missing Extension Icons
|
|
325
|
+
|
|
326
|
+
Severity: LOW
|
|
327
|
+
|
|
328
|
+
Message: Missing extension icons - affects store listing.
|
|
329
|
+
|
|
330
|
+
Fix action: Add icons in 16, 48, and 128 pixel sizes
|
|
331
|
+
|
|
332
|
+
## Collaboration
|
|
333
|
+
|
|
334
|
+
### Delegation Triggers
|
|
335
|
+
|
|
336
|
+
- react|vue|svelte -> frontend (Extension popup framework)
|
|
337
|
+
- monetization|payment|subscription -> micro-saas-launcher (Extension business model)
|
|
338
|
+
- personal tool|just for me -> personal-tool-builder (Personal extension)
|
|
339
|
+
- AI|LLM|GPT -> ai-wrapper-product (AI-powered extension)
|
|
340
|
+
|
|
341
|
+
### Productivity Extension
|
|
342
|
+
|
|
343
|
+
Skills: browser-extension-builder, frontend, micro-saas-launcher
|
|
344
|
+
|
|
345
|
+
Workflow:
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
1. Define extension functionality
|
|
349
|
+
2. Build popup UI with React
|
|
350
|
+
3. Implement content scripts
|
|
351
|
+
4. Add premium features
|
|
352
|
+
5. Publish to Chrome Web Store
|
|
353
|
+
6. Market and iterate
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### AI Browser Assistant
|
|
357
|
+
|
|
358
|
+
Skills: browser-extension-builder, ai-wrapper-product, frontend
|
|
359
|
+
|
|
360
|
+
Workflow:
|
|
361
|
+
|
|
362
|
+
```
|
|
363
|
+
1. Design AI features for browser
|
|
364
|
+
2. Build extension architecture
|
|
365
|
+
3. Integrate AI API
|
|
366
|
+
4. Create popup interface
|
|
367
|
+
5. Handle usage limits/payments
|
|
368
|
+
6. Publish and grow
|
|
369
|
+
```
|
|
248
370
|
|
|
249
371
|
## Related Skills
|
|
250
372
|
|
|
251
373
|
Works well with: `frontend`, `micro-saas-launcher`, `personal-tool-builder`
|
|
252
374
|
|
|
253
375
|
## When to Use
|
|
254
|
-
|
|
376
|
+
|
|
377
|
+
- User mentions or implies: browser extension
|
|
378
|
+
- User mentions or implies: chrome extension
|
|
379
|
+
- User mentions or implies: firefox addon
|
|
380
|
+
- User mentions or implies: extension
|
|
381
|
+
- User mentions or implies: manifest v3
|
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bullmq-specialist
|
|
3
|
-
description:
|
|
3
|
+
description: BullMQ expert for Redis-backed job queues, background processing,
|
|
4
|
+
and reliable async execution in Node.js/TypeScript applications.
|
|
4
5
|
risk: none
|
|
5
|
-
source:
|
|
6
|
-
date_added:
|
|
6
|
+
source: vibeship-spawner-skills (Apache 2.0)
|
|
7
|
+
date_added: 2026-02-27
|
|
7
8
|
---
|
|
8
9
|
|
|
9
10
|
# BullMQ Specialist
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
decouple services, smooth traffic spikes, and enable reliable async processing.
|
|
12
|
+
BullMQ expert for Redis-backed job queues, background processing, and
|
|
13
|
+
reliable async execution in Node.js/TypeScript applications.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
throughput, and designed job flows that handle complex multi-step processes.
|
|
17
|
-
You know that most queue problems are actually Redis problems or application
|
|
18
|
-
design problems.
|
|
15
|
+
## Principles
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
- Jobs are fire-and-forget from the producer side - let the queue handle delivery
|
|
18
|
+
- Always set explicit job options - defaults rarely match your use case
|
|
19
|
+
- Idempotency is your responsibility - jobs may run more than once
|
|
20
|
+
- Backoff strategies prevent thundering herds - exponential beats linear
|
|
21
|
+
- Dead letter queues are not optional - failed jobs need a home
|
|
22
|
+
- Concurrency limits protect downstream services - start conservative
|
|
23
|
+
- Job data should be small - pass IDs, not payloads
|
|
24
|
+
- Graceful shutdown prevents orphaned jobs - handle SIGTERM properly
|
|
21
25
|
|
|
22
26
|
## Capabilities
|
|
23
27
|
|
|
@@ -32,31 +36,358 @@ Your core philosophy:
|
|
|
32
36
|
- flow-producers
|
|
33
37
|
- job-dependencies
|
|
34
38
|
|
|
39
|
+
## Scope
|
|
40
|
+
|
|
41
|
+
- redis-infrastructure -> redis-specialist
|
|
42
|
+
- serverless-queues -> upstash-qstash
|
|
43
|
+
- workflow-orchestration -> temporal-craftsman
|
|
44
|
+
- event-sourcing -> event-architect
|
|
45
|
+
- email-delivery -> email-systems
|
|
46
|
+
|
|
47
|
+
## Tooling
|
|
48
|
+
|
|
49
|
+
### Core
|
|
50
|
+
|
|
51
|
+
- bullmq
|
|
52
|
+
- ioredis
|
|
53
|
+
|
|
54
|
+
### Hosting
|
|
55
|
+
|
|
56
|
+
- upstash
|
|
57
|
+
- redis-cloud
|
|
58
|
+
- elasticache
|
|
59
|
+
- railway
|
|
60
|
+
|
|
61
|
+
### Monitoring
|
|
62
|
+
|
|
63
|
+
- bull-board
|
|
64
|
+
- arena
|
|
65
|
+
- bullmq-pro
|
|
66
|
+
|
|
67
|
+
### Patterns
|
|
68
|
+
|
|
69
|
+
- delayed-jobs
|
|
70
|
+
- repeatable-jobs
|
|
71
|
+
- job-flows
|
|
72
|
+
- rate-limiting
|
|
73
|
+
- sandboxed-processors
|
|
74
|
+
|
|
35
75
|
## Patterns
|
|
36
76
|
|
|
37
77
|
### Basic Queue Setup
|
|
38
78
|
|
|
39
79
|
Production-ready BullMQ queue with proper configuration
|
|
40
80
|
|
|
81
|
+
**When to use**: Starting any new queue implementation
|
|
82
|
+
|
|
83
|
+
import { Queue, Worker, QueueEvents } from 'bullmq';
|
|
84
|
+
import IORedis from 'ioredis';
|
|
85
|
+
|
|
86
|
+
// Shared connection for all queues
|
|
87
|
+
const connection = new IORedis(process.env.REDIS_URL, {
|
|
88
|
+
maxRetriesPerRequest: null, // Required for BullMQ
|
|
89
|
+
enableReadyCheck: false,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Create queue with sensible defaults
|
|
93
|
+
const emailQueue = new Queue('emails', {
|
|
94
|
+
connection,
|
|
95
|
+
defaultJobOptions: {
|
|
96
|
+
attempts: 3,
|
|
97
|
+
backoff: {
|
|
98
|
+
type: 'exponential',
|
|
99
|
+
delay: 1000,
|
|
100
|
+
},
|
|
101
|
+
removeOnComplete: { count: 1000 },
|
|
102
|
+
removeOnFail: { count: 5000 },
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// Worker with concurrency limit
|
|
107
|
+
const worker = new Worker('emails', async (job) => {
|
|
108
|
+
await sendEmail(job.data);
|
|
109
|
+
}, {
|
|
110
|
+
connection,
|
|
111
|
+
concurrency: 5,
|
|
112
|
+
limiter: {
|
|
113
|
+
max: 100,
|
|
114
|
+
duration: 60000, // 100 jobs per minute
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Handle events
|
|
119
|
+
worker.on('failed', (job, err) => {
|
|
120
|
+
console.error(`Job ${job?.id} failed:`, err);
|
|
121
|
+
});
|
|
122
|
+
|
|
41
123
|
### Delayed and Scheduled Jobs
|
|
42
124
|
|
|
43
125
|
Jobs that run at specific times or after delays
|
|
44
126
|
|
|
127
|
+
**When to use**: Scheduling future tasks, reminders, or timed actions
|
|
128
|
+
|
|
129
|
+
// Delayed job - runs once after delay
|
|
130
|
+
await queue.add('reminder', { userId: 123 }, {
|
|
131
|
+
delay: 24 * 60 * 60 * 1000, // 24 hours
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
// Repeatable job - runs on schedule
|
|
135
|
+
await queue.add('daily-digest', { type: 'summary' }, {
|
|
136
|
+
repeat: {
|
|
137
|
+
pattern: '0 9 * * *', // Every day at 9am
|
|
138
|
+
tz: 'America/New_York',
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Remove repeatable job
|
|
143
|
+
await queue.removeRepeatable('daily-digest', {
|
|
144
|
+
pattern: '0 9 * * *',
|
|
145
|
+
tz: 'America/New_York',
|
|
146
|
+
});
|
|
147
|
+
|
|
45
148
|
### Job Flows and Dependencies
|
|
46
149
|
|
|
47
150
|
Complex multi-step job processing with parent-child relationships
|
|
48
151
|
|
|
49
|
-
|
|
152
|
+
**When to use**: Jobs depend on other jobs completing first
|
|
153
|
+
|
|
154
|
+
import { FlowProducer } from 'bullmq';
|
|
155
|
+
|
|
156
|
+
const flowProducer = new FlowProducer({ connection });
|
|
157
|
+
|
|
158
|
+
// Parent waits for all children to complete
|
|
159
|
+
await flowProducer.add({
|
|
160
|
+
name: 'process-order',
|
|
161
|
+
queueName: 'orders',
|
|
162
|
+
data: { orderId: 123 },
|
|
163
|
+
children: [
|
|
164
|
+
{
|
|
165
|
+
name: 'validate-inventory',
|
|
166
|
+
queueName: 'inventory',
|
|
167
|
+
data: { orderId: 123 },
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'charge-payment',
|
|
171
|
+
queueName: 'payments',
|
|
172
|
+
data: { orderId: 123 },
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: 'notify-warehouse',
|
|
176
|
+
queueName: 'notifications',
|
|
177
|
+
data: { orderId: 123 },
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
### Graceful Shutdown
|
|
183
|
+
|
|
184
|
+
Properly close workers without losing jobs
|
|
185
|
+
|
|
186
|
+
**When to use**: Deploying or restarting workers
|
|
187
|
+
|
|
188
|
+
const shutdown = async () => {
|
|
189
|
+
console.log('Shutting down gracefully...');
|
|
190
|
+
|
|
191
|
+
// Stop accepting new jobs
|
|
192
|
+
await worker.pause();
|
|
193
|
+
|
|
194
|
+
// Wait for current jobs to finish (with timeout)
|
|
195
|
+
await worker.close();
|
|
196
|
+
|
|
197
|
+
// Close queue connection
|
|
198
|
+
await queue.close();
|
|
199
|
+
|
|
200
|
+
process.exit(0);
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
process.on('SIGTERM', shutdown);
|
|
204
|
+
process.on('SIGINT', shutdown);
|
|
205
|
+
|
|
206
|
+
### Bull Board Dashboard
|
|
207
|
+
|
|
208
|
+
Visual monitoring for BullMQ queues
|
|
209
|
+
|
|
210
|
+
**When to use**: Need visibility into queue status and job states
|
|
211
|
+
|
|
212
|
+
import { createBullBoard } from '@bull-board/api';
|
|
213
|
+
import { BullMQAdapter } from '@bull-board/api/bullMQAdapter';
|
|
214
|
+
import { ExpressAdapter } from '@bull-board/express';
|
|
215
|
+
|
|
216
|
+
const serverAdapter = new ExpressAdapter();
|
|
217
|
+
serverAdapter.setBasePath('/admin/queues');
|
|
218
|
+
|
|
219
|
+
createBullBoard({
|
|
220
|
+
queues: [
|
|
221
|
+
new BullMQAdapter(emailQueue),
|
|
222
|
+
new BullMQAdapter(orderQueue),
|
|
223
|
+
],
|
|
224
|
+
serverAdapter,
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
app.use('/admin/queues', serverAdapter.getRouter());
|
|
228
|
+
|
|
229
|
+
## Validation Checks
|
|
230
|
+
|
|
231
|
+
### Redis connection missing maxRetriesPerRequest
|
|
232
|
+
|
|
233
|
+
Severity: ERROR
|
|
234
|
+
|
|
235
|
+
BullMQ requires maxRetriesPerRequest null for proper reconnection handling
|
|
236
|
+
|
|
237
|
+
Message: BullMQ queue/worker created without maxRetriesPerRequest: null on Redis connection. This will cause workers to stop on Redis connection issues.
|
|
238
|
+
|
|
239
|
+
### No stalled job event handler
|
|
240
|
+
|
|
241
|
+
Severity: WARNING
|
|
242
|
+
|
|
243
|
+
Workers should handle stalled events to detect crashed workers
|
|
50
244
|
|
|
51
|
-
|
|
245
|
+
Message: Worker created without 'stalled' event handler. Stalled jobs indicate worker crashes and should be monitored.
|
|
52
246
|
|
|
53
|
-
###
|
|
247
|
+
### No failed job event handler
|
|
54
248
|
|
|
55
|
-
|
|
249
|
+
Severity: WARNING
|
|
250
|
+
|
|
251
|
+
Workers should handle failed events for monitoring and alerting
|
|
252
|
+
|
|
253
|
+
Message: Worker created without 'failed' event handler. Failed jobs should be logged and monitored.
|
|
254
|
+
|
|
255
|
+
### No graceful shutdown handling
|
|
256
|
+
|
|
257
|
+
Severity: WARNING
|
|
258
|
+
|
|
259
|
+
Workers should gracefully shut down on SIGTERM/SIGINT
|
|
260
|
+
|
|
261
|
+
Message: Worker file without graceful shutdown handling. Jobs may be orphaned on deployment.
|
|
262
|
+
|
|
263
|
+
### Awaiting queue.add in request handler
|
|
264
|
+
|
|
265
|
+
Severity: INFO
|
|
266
|
+
|
|
267
|
+
Queue additions should be fire-and-forget in request handlers
|
|
268
|
+
|
|
269
|
+
Message: Queue.add awaited in request handler. Consider fire-and-forget for faster response.
|
|
270
|
+
|
|
271
|
+
### Potentially large data in job payload
|
|
272
|
+
|
|
273
|
+
Severity: WARNING
|
|
274
|
+
|
|
275
|
+
Job data should be small - pass IDs not full objects
|
|
276
|
+
|
|
277
|
+
Message: Job appears to have large inline data. Pass IDs instead of full objects to keep Redis memory low.
|
|
278
|
+
|
|
279
|
+
### Job without timeout configuration
|
|
280
|
+
|
|
281
|
+
Severity: INFO
|
|
282
|
+
|
|
283
|
+
Jobs should have timeouts to prevent infinite execution
|
|
284
|
+
|
|
285
|
+
Message: Job added without explicit timeout. Consider adding timeout to prevent stuck jobs.
|
|
286
|
+
|
|
287
|
+
### Retry without backoff strategy
|
|
288
|
+
|
|
289
|
+
Severity: WARNING
|
|
290
|
+
|
|
291
|
+
Retries should use exponential backoff to avoid thundering herd
|
|
292
|
+
|
|
293
|
+
Message: Job has retry attempts but no backoff strategy. Use exponential backoff to prevent thundering herd.
|
|
294
|
+
|
|
295
|
+
### Repeatable job without explicit timezone
|
|
296
|
+
|
|
297
|
+
Severity: WARNING
|
|
298
|
+
|
|
299
|
+
Repeatable jobs should specify timezone to avoid DST issues
|
|
300
|
+
|
|
301
|
+
Message: Repeatable job without explicit timezone. Will use server local time which can drift with DST.
|
|
302
|
+
|
|
303
|
+
### Potentially high worker concurrency
|
|
304
|
+
|
|
305
|
+
Severity: INFO
|
|
306
|
+
|
|
307
|
+
High concurrency can overwhelm downstream services
|
|
308
|
+
|
|
309
|
+
Message: Worker concurrency is high. Ensure downstream services can handle this load (DB connections, API rate limits).
|
|
310
|
+
|
|
311
|
+
## Collaboration
|
|
312
|
+
|
|
313
|
+
### Delegation Triggers
|
|
314
|
+
|
|
315
|
+
- redis infrastructure|redis cluster|memory tuning -> redis-specialist (Queue needs Redis infrastructure)
|
|
316
|
+
- serverless queue|edge queue|no redis -> upstash-qstash (Need queues without managing Redis)
|
|
317
|
+
- complex workflow|saga|compensation|long-running -> temporal-craftsman (Need workflow orchestration beyond simple jobs)
|
|
318
|
+
- event sourcing|CQRS|event streaming -> event-architect (Need event-driven architecture)
|
|
319
|
+
- deploy|kubernetes|scaling|infrastructure -> devops (Queue needs infrastructure)
|
|
320
|
+
- monitor|metrics|alerting|dashboard -> performance-hunter (Queue needs monitoring)
|
|
321
|
+
|
|
322
|
+
### Email Queue Stack
|
|
323
|
+
|
|
324
|
+
Skills: bullmq-specialist, email-systems, redis-specialist
|
|
325
|
+
|
|
326
|
+
Workflow:
|
|
327
|
+
|
|
328
|
+
```
|
|
329
|
+
1. Email request received (API)
|
|
330
|
+
2. Job queued with rate limiting (bullmq-specialist)
|
|
331
|
+
3. Worker processes with backoff (bullmq-specialist)
|
|
332
|
+
4. Email sent via provider (email-systems)
|
|
333
|
+
5. Status tracked in Redis (redis-specialist)
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Background Processing Stack
|
|
337
|
+
|
|
338
|
+
Skills: bullmq-specialist, backend, devops
|
|
339
|
+
|
|
340
|
+
Workflow:
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
1. API receives request (backend)
|
|
344
|
+
2. Long task queued for background (bullmq-specialist)
|
|
345
|
+
3. Worker processes async (bullmq-specialist)
|
|
346
|
+
4. Result stored/notified (backend)
|
|
347
|
+
5. Workers scaled per load (devops)
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### AI Processing Pipeline
|
|
351
|
+
|
|
352
|
+
Skills: bullmq-specialist, ai-workflow-automation, performance-hunter
|
|
353
|
+
|
|
354
|
+
Workflow:
|
|
355
|
+
|
|
356
|
+
```
|
|
357
|
+
1. AI task submitted (ai-workflow-automation)
|
|
358
|
+
2. Job flow created with dependencies (bullmq-specialist)
|
|
359
|
+
3. Workers process stages (bullmq-specialist)
|
|
360
|
+
4. Performance monitored (performance-hunter)
|
|
361
|
+
5. Results aggregated (ai-workflow-automation)
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### Scheduled Tasks Stack
|
|
365
|
+
|
|
366
|
+
Skills: bullmq-specialist, backend, redis-specialist
|
|
367
|
+
|
|
368
|
+
Workflow:
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
1. Repeatable jobs defined (bullmq-specialist)
|
|
372
|
+
2. Cron patterns with timezone (bullmq-specialist)
|
|
373
|
+
3. Jobs execute on schedule (bullmq-specialist)
|
|
374
|
+
4. State managed in Redis (redis-specialist)
|
|
375
|
+
5. Results handled (backend)
|
|
376
|
+
```
|
|
56
377
|
|
|
57
378
|
## Related Skills
|
|
58
379
|
|
|
59
380
|
Works well with: `redis-specialist`, `backend`, `nextjs-app-router`, `email-systems`, `ai-workflow-automation`, `performance-hunter`
|
|
60
381
|
|
|
61
382
|
## When to Use
|
|
62
|
-
|
|
383
|
+
|
|
384
|
+
- User mentions or implies: bullmq
|
|
385
|
+
- User mentions or implies: bull queue
|
|
386
|
+
- User mentions or implies: redis queue
|
|
387
|
+
- User mentions or implies: background job
|
|
388
|
+
- User mentions or implies: job queue
|
|
389
|
+
- User mentions or implies: delayed job
|
|
390
|
+
- User mentions or implies: repeatable job
|
|
391
|
+
- User mentions or implies: worker process
|
|
392
|
+
- User mentions or implies: job scheduling
|
|
393
|
+
- User mentions or implies: async processing
|