@rune-kit/rune 2.10.0 → 2.12.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/LICENSE +21 -21
- package/README.md +65 -6
- package/commands/rune.md +168 -168
- package/compiler/__tests__/detect-invariants.test.js +136 -0
- package/compiler/__tests__/doctor-mesh.test.js +229 -0
- package/compiler/__tests__/hook-dispatch.test.js +91 -0
- package/compiler/__tests__/hooks-antigravity.test.js +118 -0
- package/compiler/__tests__/hooks-cursor.test.js +139 -0
- package/compiler/__tests__/hooks-install.test.js +305 -0
- package/compiler/__tests__/hooks-merge.test.js +204 -0
- package/compiler/__tests__/hooks-tiers.test.js +519 -0
- package/compiler/__tests__/hooks-windsurf.test.js +115 -0
- package/compiler/__tests__/inject-claude-md.test.js +152 -0
- package/compiler/__tests__/load-invariants.test.js +408 -0
- package/compiler/__tests__/onboard-invariants.test.js +240 -0
- package/compiler/adapters/hooks/antigravity.js +140 -0
- package/compiler/adapters/hooks/claude.js +166 -0
- package/compiler/adapters/hooks/cursor.js +191 -0
- package/compiler/adapters/hooks/index.js +82 -0
- package/compiler/adapters/hooks/tier-emitter.js +182 -0
- package/compiler/adapters/hooks/windsurf.js +202 -0
- package/compiler/bin/rune.js +196 -6
- package/compiler/commands/hook-dispatch.js +87 -0
- package/compiler/commands/hooks/install.js +120 -0
- package/compiler/commands/hooks/merge.js +211 -0
- package/compiler/commands/hooks/presets.js +116 -0
- package/compiler/commands/hooks/status.js +112 -0
- package/compiler/commands/hooks/tiers.js +221 -0
- package/compiler/commands/hooks/uninstall.js +94 -0
- package/compiler/doctor.js +236 -0
- package/contexts/dev.md +34 -34
- package/contexts/research.md +43 -43
- package/contexts/review.md +55 -55
- package/extensions/ai-ml/PACK.md +88 -88
- package/extensions/ai-ml/skills/ai-agents.md +172 -172
- package/extensions/ai-ml/skills/code-sandbox.md +187 -187
- package/extensions/ai-ml/skills/deep-research.md +146 -146
- package/extensions/ai-ml/skills/embedding-search.md +66 -66
- package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
- package/extensions/ai-ml/skills/llm-architect.md +125 -125
- package/extensions/ai-ml/skills/llm-integration.md +64 -64
- package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
- package/extensions/ai-ml/skills/rag-patterns.md +66 -66
- package/extensions/ai-ml/skills/web-extraction.md +114 -114
- package/extensions/analytics/PACK.md +92 -92
- package/extensions/analytics/skills/ab-testing.md +72 -72
- package/extensions/analytics/skills/dashboard-patterns.md +83 -83
- package/extensions/analytics/skills/data-validation.md +68 -68
- package/extensions/analytics/skills/funnel-analysis.md +81 -81
- package/extensions/analytics/skills/sql-patterns.md +57 -57
- package/extensions/analytics/skills/statistical-analysis.md +79 -79
- package/extensions/analytics/skills/tracking-setup.md +71 -71
- package/extensions/backend/PACK.md +104 -104
- package/extensions/backend/skills/api-patterns.md +84 -84
- package/extensions/backend/skills/async-pipeline.md +193 -193
- package/extensions/backend/skills/auth-patterns.md +97 -97
- package/extensions/backend/skills/background-jobs.md +133 -133
- package/extensions/backend/skills/caching-patterns.md +108 -108
- package/extensions/backend/skills/cli-generation.md +133 -133
- package/extensions/backend/skills/database-patterns.md +87 -87
- package/extensions/backend/skills/middleware-patterns.md +104 -104
- package/extensions/chrome-ext/PACK.md +93 -93
- package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
- package/extensions/chrome-ext/skills/cws-publish.md +104 -104
- package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
- package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
- package/extensions/chrome-ext/skills/ext-storage.md +133 -133
- package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
- package/extensions/content/PACK.md +96 -96
- package/extensions/content/skills/blog-patterns.md +88 -88
- package/extensions/content/skills/cms-integration.md +131 -131
- package/extensions/content/skills/content-scoring.md +107 -107
- package/extensions/content/skills/i18n.md +83 -83
- package/extensions/content/skills/mdx-authoring.md +137 -137
- package/extensions/content/skills/reference.md +1014 -1014
- package/extensions/content/skills/seo-patterns.md +67 -67
- package/extensions/content/skills/video-repurpose.md +153 -153
- package/extensions/devops/PACK.md +101 -101
- package/extensions/devops/skills/chaos-testing.md +67 -67
- package/extensions/devops/skills/ci-cd.md +75 -75
- package/extensions/devops/skills/docker.md +58 -58
- package/extensions/devops/skills/edge-serverless.md +163 -163
- package/extensions/devops/skills/infra-as-code.md +158 -158
- package/extensions/devops/skills/kubernetes.md +110 -110
- package/extensions/devops/skills/monitoring.md +57 -57
- package/extensions/devops/skills/server-setup.md +64 -64
- package/extensions/devops/skills/ssl-domain.md +42 -42
- package/extensions/ecommerce/PACK.md +116 -116
- package/extensions/ecommerce/skills/cart-system.md +79 -79
- package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
- package/extensions/ecommerce/skills/order-management.md +126 -126
- package/extensions/ecommerce/skills/payment-integration.md +472 -472
- package/extensions/ecommerce/skills/shopify-dev.md +69 -69
- package/extensions/ecommerce/skills/subscription-billing.md +93 -93
- package/extensions/ecommerce/skills/tax-compliance.md +117 -117
- package/extensions/gamedev/PACK.md +142 -142
- package/extensions/gamedev/skills/asset-pipeline.md +74 -74
- package/extensions/gamedev/skills/audio-system.md +129 -129
- package/extensions/gamedev/skills/camera-system.md +87 -87
- package/extensions/gamedev/skills/ecs.md +98 -98
- package/extensions/gamedev/skills/game-loops.md +72 -72
- package/extensions/gamedev/skills/input-system.md +199 -199
- package/extensions/gamedev/skills/multiplayer.md +180 -180
- package/extensions/gamedev/skills/particles.md +105 -105
- package/extensions/gamedev/skills/physics-engine.md +89 -89
- package/extensions/gamedev/skills/scene-management.md +146 -146
- package/extensions/gamedev/skills/threejs-patterns.md +90 -90
- package/extensions/gamedev/skills/webgl.md +71 -71
- package/extensions/mobile/PACK.md +106 -106
- package/extensions/mobile/skills/app-store-connect.md +152 -152
- package/extensions/mobile/skills/app-store-prep.md +66 -66
- package/extensions/mobile/skills/deep-linking.md +109 -109
- package/extensions/mobile/skills/flutter.md +60 -60
- package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
- package/extensions/mobile/skills/native-bridge.md +66 -66
- package/extensions/mobile/skills/ota-updates.md +97 -97
- package/extensions/mobile/skills/push-notifications.md +111 -111
- package/extensions/mobile/skills/react-native.md +82 -82
- package/extensions/saas/PACK.md +116 -116
- package/extensions/saas/skills/billing-integration.md +200 -200
- package/extensions/saas/skills/feature-flags.md +130 -130
- package/extensions/saas/skills/multi-tenant.md +103 -103
- package/extensions/saas/skills/onboarding-flow.md +139 -139
- package/extensions/saas/skills/subscription-flow.md +95 -95
- package/extensions/saas/skills/team-management.md +144 -144
- package/extensions/security/PACK.md +99 -99
- package/extensions/security/skills/api-security.md +140 -140
- package/extensions/security/skills/compliance.md +68 -68
- package/extensions/security/skills/owasp-audit.md +64 -64
- package/extensions/security/skills/pentest-patterns.md +77 -77
- package/extensions/security/skills/secret-mgmt.md +65 -65
- package/extensions/security/skills/supply-chain.md +65 -65
- package/extensions/trading/PACK.md +80 -80
- package/extensions/trading/skills/chart-components.md +55 -55
- package/extensions/trading/skills/experiment-loop.md +125 -125
- package/extensions/trading/skills/fintech-patterns.md +47 -47
- package/extensions/trading/skills/indicator-library.md +58 -58
- package/extensions/trading/skills/quant-analysis.md +111 -111
- package/extensions/trading/skills/realtime-data.md +58 -58
- package/extensions/trading/skills/trade-logic.md +104 -104
- package/extensions/ui/PACK.md +130 -130
- package/extensions/ui/skills/a11y-audit.md +91 -91
- package/extensions/ui/skills/animation-patterns.md +127 -127
- package/extensions/ui/skills/component-patterns.md +100 -100
- package/extensions/ui/skills/design-decision.md +108 -108
- package/extensions/ui/skills/design-system.md +68 -68
- package/extensions/ui/skills/landing-patterns.md +155 -155
- package/extensions/ui/skills/palette-picker.md +173 -173
- package/extensions/ui/skills/react-health.md +90 -90
- package/extensions/ui/skills/type-system.md +125 -125
- package/extensions/ui/skills/web-vitals.md +153 -153
- package/extensions/zalo/PACK.md +145 -145
- package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
- package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
- package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
- package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
- package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
- package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
- package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
- package/hooks/auto-format/index.cjs +48 -48
- package/hooks/hooks.json +111 -111
- package/hooks/post-session-reflect/index.cjs +189 -189
- package/hooks/pre-compact/index.cjs +95 -95
- package/hooks/run-hook.cmd +1 -1
- package/hooks/secrets-scan/index.cjs +100 -100
- package/hooks/session-start/index.cjs +71 -71
- package/hooks/typecheck/index.cjs +65 -65
- package/package.json +63 -63
- package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
- package/references/ui-pro-max-data/charts.csv +26 -26
- package/references/ui-pro-max-data/colors.csv +161 -161
- package/references/ui-pro-max-data/styles.csv +68 -68
- package/references/ui-pro-max-data/typography.csv +74 -74
- package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
- package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
- package/skills/adversary/SKILL.md +283 -283
- package/skills/asset-creator/SKILL.md +157 -157
- package/skills/audit/SKILL.md +147 -2
- package/skills/autopsy/SKILL.md +335 -335
- package/skills/ba/SKILL.md +85 -1
- package/skills/brainstorm/SKILL.md +380 -342
- package/skills/browser-pilot/SKILL.md +169 -168
- package/skills/constraint-check/SKILL.md +165 -165
- package/skills/context-engine/SKILL.md +408 -404
- package/skills/cook/SKILL.md +917 -863
- package/skills/db/SKILL.md +273 -273
- package/skills/debug/SKILL.md +465 -465
- package/skills/dependency-doctor/SKILL.md +265 -235
- package/skills/deploy/SKILL.md +274 -231
- package/skills/design/DESIGN-REFERENCE.md +365 -365
- package/skills/design/SKILL.md +590 -589
- package/skills/doc-processor/SKILL.md +254 -254
- package/skills/docs/SKILL.md +374 -374
- package/skills/docs-seeker/SKILL.md +178 -177
- package/skills/fix/SKILL.md +332 -330
- package/skills/git/SKILL.md +339 -339
- package/skills/hallucination-guard/SKILL.md +220 -219
- package/skills/incident/SKILL.md +254 -253
- package/skills/integrity-check/SKILL.md +169 -169
- package/skills/journal/SKILL.md +241 -240
- package/skills/launch/SKILL.md +344 -344
- package/skills/logic-guardian/SKILL.md +269 -251
- package/skills/marketing/SKILL.md +351 -289
- package/skills/mcp-builder/SKILL.md +425 -425
- package/skills/neural-memory/SKILL.md +359 -362
- package/skills/onboard/SKILL.md +432 -403
- package/skills/onboard/references/invariants-template.md +76 -0
- package/skills/onboard/scripts/detect-invariants.js +439 -0
- package/skills/onboard/scripts/inject-claude-md.js +150 -0
- package/skills/onboard/scripts/onboard-invariants.js +194 -0
- package/skills/perf/SKILL.md +347 -346
- package/skills/plan/SKILL.md +435 -428
- package/skills/preflight/SKILL.md +415 -415
- package/skills/problem-solver/SKILL.md +380 -284
- package/skills/rescue/SKILL.md +474 -474
- package/skills/research/SKILL.md +4 -0
- package/skills/retro/SKILL.md +3 -1
- package/skills/review/SKILL.md +614 -588
- package/skills/review-intake/SKILL.md +249 -249
- package/skills/safeguard/SKILL.md +200 -200
- package/skills/sast/SKILL.md +190 -190
- package/skills/scaffold/SKILL.md +328 -287
- package/skills/scope-guard/SKILL.md +183 -180
- package/skills/scout/SKILL.md +269 -263
- package/skills/sentinel/SKILL.md +384 -381
- package/skills/sentinel-env/SKILL.md +254 -254
- package/skills/sequential-thinking/SKILL.md +234 -234
- package/skills/session-bridge/SKILL.md +595 -543
- package/skills/session-bridge/scripts/load-invariants.js +397 -0
- package/skills/skill-forge/SKILL.md +581 -581
- package/skills/skill-router/SKILL.md +3 -0
- package/skills/slides/SKILL.md +19 -0
- package/skills/surgeon/SKILL.md +215 -215
- package/skills/team/SKILL.md +557 -537
- package/skills/test/SKILL.md +620 -614
- package/skills/trend-scout/SKILL.md +145 -145
- package/skills/verification/SKILL.md +334 -326
- package/skills/video-creator/SKILL.md +201 -201
- package/skills/watchdog/SKILL.md +168 -168
- package/skills/worktree/SKILL.md +140 -140
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "@rune/backend"
|
|
3
|
-
description: Backend patterns — API design, authentication, database patterns, middleware architecture, caching strategies, background job processing, CLI generation, and async processing pipelines.
|
|
4
|
-
metadata:
|
|
5
|
-
author: runedev
|
|
6
|
-
version: "0.3.0"
|
|
7
|
-
layer: L4
|
|
8
|
-
price: "free"
|
|
9
|
-
target: Backend developers
|
|
10
|
-
format: split
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# @rune/backend
|
|
14
|
-
|
|
15
|
-
## Purpose
|
|
16
|
-
|
|
17
|
-
Backend codebases accumulate structural debt across six areas: inconsistent API contracts (mixed naming, missing pagination, vague errors), insecure auth flows (token mismanagement, missing refresh rotation, weak RBAC), database anti-patterns (N+1 queries, missing indexes, unsafe migrations), ad-hoc middleware (duplicated validation, no request tracing, inconsistent error format), missing or naive caching (no invalidation strategy, cache stampede risk, unbounded memory growth), and synchronous processing of inherently async work (blocking request threads on email, PDF, image tasks). This pack addresses each systematically — detect the anti-pattern, emit the fix, verify the result. Skills are independent but compound: clean APIs need solid auth, solid auth needs safe queries, safe queries need proper middleware, and high-traffic APIs need caching and background jobs to stay responsive.
|
|
18
|
-
|
|
19
|
-
## Triggers
|
|
20
|
-
|
|
21
|
-
- Auto-trigger: when `routes/`, `controllers/`, `middleware/`, `*.resolver.ts`, `*.service.ts`, `queues/`, `workers/`, or server framework config detected
|
|
22
|
-
- `/rune api-patterns` — audit and fix API design
|
|
23
|
-
- `/rune auth-patterns` — audit and fix authentication flows
|
|
24
|
-
- `/rune database-patterns` — audit and fix database queries and schema
|
|
25
|
-
- `/rune middleware-patterns` — audit and fix middleware stack
|
|
26
|
-
- `/rune caching-patterns` — audit and implement caching strategy
|
|
27
|
-
- `/rune background-jobs` — identify async operations and implement job queues
|
|
28
|
-
- `/rune cli-generation` — generate production CLI for existing backend services
|
|
29
|
-
- `/rune async-pipeline` — build multi-stage async processing pipelines with waterfall fallback
|
|
30
|
-
- Called by `cook` (L1) when backend task is detected
|
|
31
|
-
- Called by `review` (L2) when API/backend code is under review
|
|
32
|
-
|
|
33
|
-
## Skills Included
|
|
34
|
-
|
|
35
|
-
| Skill | Model | Description |
|
|
36
|
-
|-------|-------|-------------|
|
|
37
|
-
| [api-patterns](skills/api-patterns.md) | sonnet | RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation. |
|
|
38
|
-
| [auth-patterns](skills/auth-patterns.md) | sonnet | Authentication and authorization patterns — JWT, OAuth 2.0 / OIDC, passkeys/WebAuthn, session management, RBAC, API key management, MFA flows. |
|
|
39
|
-
| [database-patterns](skills/database-patterns.md) | sonnet | Database design and query patterns — schema design, migrations, indexing strategies, N+1 prevention, soft deletes, read replicas, connection pooling, seeding. |
|
|
40
|
-
| [middleware-patterns](skills/middleware-patterns.md) | sonnet | Middleware architecture — request validation, error handling, logging, CORS, compression, graceful shutdown, health checks, request ID tracking. |
|
|
41
|
-
| [caching-patterns](skills/caching-patterns.md) | sonnet | Caching strategies — in-memory LRU, Redis distributed cache, CDN/edge cache, browser cache headers, invalidation, and stampede prevention. |
|
|
42
|
-
| [background-jobs](skills/background-jobs.md) | sonnet | Queue-based async processing — BullMQ (Node.js), job patterns, retry strategies, idempotency, dead letter queues, monitoring. |
|
|
43
|
-
| [cli-generation](skills/cli-generation.md) | sonnet | Generate production-grade CLI wrappers — command groups, dual output mode (human + JSON), stateful REPL, session management with undo/redo, installable packaging. |
|
|
44
|
-
| [async-pipeline](skills/async-pipeline.md) | sonnet | Multi-stage async processing pipelines with waterfall engine selection, progress streaming via SSE, concurrency control, and credit-based billing. |
|
|
45
|
-
|
|
46
|
-
## Tech Stack Support
|
|
47
|
-
|
|
48
|
-
| Framework | ORM | Auth Library | Queue | Cache |
|
|
49
|
-
|-----------|-----|-------------|-------|-------|
|
|
50
|
-
| Express 5 | Prisma | Passport / custom JWT | BullMQ | ioredis |
|
|
51
|
-
| Fastify 5 | Drizzle | @fastify/jwt | BullMQ | ioredis |
|
|
52
|
-
| Next.js 16 (Route Handlers) | Prisma | NextAuth v5 / Lucia | BullMQ | ioredis / Upstash |
|
|
53
|
-
| NestJS 11 | TypeORM / Prisma | @nestjs/passport | @nestjs/bull | @nestjs/cache-manager |
|
|
54
|
-
| FastAPI | SQLAlchemy | python-jose / authlib | Celery | redis-py |
|
|
55
|
-
| Django 5 | Django ORM | django-rest-framework | Celery | django-redis |
|
|
56
|
-
|
|
57
|
-
## Connections
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
Calls → docs-seeker (L3): lookup API documentation and framework guides
|
|
61
|
-
Calls → sentinel (L2): security audit on auth implementations
|
|
62
|
-
Calls → watchdog (L3): monitor queue depth and cache hit ratios
|
|
63
|
-
Calls → @rune/devops (L4): container and serverless deployment config for backend services
|
|
64
|
-
Called By ← cook (L1): when backend task detected
|
|
65
|
-
Called By ← review (L2): when API/backend code is being reviewed
|
|
66
|
-
Called By ← audit (L2): backend health dimension
|
|
67
|
-
Called By ← deploy (L2): pre-deploy readiness checks (health endpoints, graceful shutdown)
|
|
68
|
-
Called By ← @rune/saas (L4): SaaS services use backend API, auth, and caching patterns
|
|
69
|
-
Called By ← @rune/security (L4): security audits reference auth flows and middleware patterns
|
|
70
|
-
Called By ← @rune/mobile (L4): mobile backend integration patterns (auth, push server)
|
|
71
|
-
Inter-skill: cli-generation → api-patterns (CLI wraps existing API surface)
|
|
72
|
-
Inter-skill: async-pipeline → background-jobs (pipeline stages use job queue for execution)
|
|
73
|
-
Inter-skill: async-pipeline → caching-patterns (pipeline results cached by content hash)
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## Sharp Edges
|
|
77
|
-
|
|
78
|
-
- **Auth**: Never emit JWT without expiry; hard-cap access tokens at 15min, refresh at 7d.
|
|
79
|
-
- **Cache stampede**: Always emit Redis `SET NX` mutex lock on cache miss for hot keys.
|
|
80
|
-
- **Job idempotency**: Never use random UUID as job ID — use deterministic domain key (e.g., `email:welcome:${userId}`).
|
|
81
|
-
- **N+1**: Check ORM `lazy: true` defaults (Sequelize, TypeORM) — not caught by loop scan alone.
|
|
82
|
-
- **Migrations**: Every migration MUST include both `up()` and `down()` — flag any missing rollback.
|
|
83
|
-
- **LRU**: Always set `max` entries AND `ttl` — unbounded LRU grows to OOM.
|
|
84
|
-
- **CORS**: Flag `origin: '*'` in production configs; check `NODE_ENV` before emitting.
|
|
85
|
-
- **SSE**: Send heartbeat comment every 30s (`:\n\n`) to prevent proxy/LB 60s timeout drops.
|
|
86
|
-
- **Dead letters**: Emit alert on DLQ depth > 0 for critical queues; never silently drop failed jobs.
|
|
87
|
-
- **Credit math**: Always `Math.ceil()` final cost; use integer cents internally to avoid float drift.
|
|
88
|
-
|
|
89
|
-
## Done When
|
|
90
|
-
|
|
91
|
-
- API audit report emitted with naming violations, missing pagination, versioning strategy, and fix diffs
|
|
92
|
-
- Auth flow hardened: short-lived access tokens, httpOnly refresh cookies, proper hashing, OAuth/OIDC integration ready
|
|
93
|
-
- N+1 queries detected and replaced with eager loading; soft delete pattern applied; missing indexes migrated
|
|
94
|
-
- Middleware stack has: request ID, structured logging, global error handler, input validation, compression, graceful shutdown, health endpoints
|
|
95
|
-
- Caching strategy implemented: cacheable endpoints identified, cache layer selected, invalidation logic emitted alongside every write
|
|
96
|
-
- Async operations moved to background jobs: idempotency keys assigned, retry strategy configured, dead letter queue wired
|
|
97
|
-
- All emitted code uses project's existing framework and ORM (detected from package.json)
|
|
98
|
-
- CLI generated with dual output (human + JSON), REPL mode, session undo/redo, and installable package
|
|
99
|
-
- Async pipeline has waterfall engine selection, progress streaming via SSE, concurrency control, and credit billing
|
|
100
|
-
- Structured report emitted for each skill invoked
|
|
101
|
-
|
|
102
|
-
## Cost Profile
|
|
103
|
-
|
|
104
|
-
~14,000–28,000 tokens per full pack run (all 8 skills). Individual skill: ~2,000–5,000 tokens. Sonnet default for code generation and security audit. Use haiku for detection scans (Step 1 of each skill). Escalate to opus for architecture decisions on caching topology, pipeline design, or queue system selection in high-traffic systems.
|
|
1
|
+
---
|
|
2
|
+
name: "@rune/backend"
|
|
3
|
+
description: Backend patterns — API design, authentication, database patterns, middleware architecture, caching strategies, background job processing, CLI generation, and async processing pipelines.
|
|
4
|
+
metadata:
|
|
5
|
+
author: runedev
|
|
6
|
+
version: "0.3.0"
|
|
7
|
+
layer: L4
|
|
8
|
+
price: "free"
|
|
9
|
+
target: Backend developers
|
|
10
|
+
format: split
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# @rune/backend
|
|
14
|
+
|
|
15
|
+
## Purpose
|
|
16
|
+
|
|
17
|
+
Backend codebases accumulate structural debt across six areas: inconsistent API contracts (mixed naming, missing pagination, vague errors), insecure auth flows (token mismanagement, missing refresh rotation, weak RBAC), database anti-patterns (N+1 queries, missing indexes, unsafe migrations), ad-hoc middleware (duplicated validation, no request tracing, inconsistent error format), missing or naive caching (no invalidation strategy, cache stampede risk, unbounded memory growth), and synchronous processing of inherently async work (blocking request threads on email, PDF, image tasks). This pack addresses each systematically — detect the anti-pattern, emit the fix, verify the result. Skills are independent but compound: clean APIs need solid auth, solid auth needs safe queries, safe queries need proper middleware, and high-traffic APIs need caching and background jobs to stay responsive.
|
|
18
|
+
|
|
19
|
+
## Triggers
|
|
20
|
+
|
|
21
|
+
- Auto-trigger: when `routes/`, `controllers/`, `middleware/`, `*.resolver.ts`, `*.service.ts`, `queues/`, `workers/`, or server framework config detected
|
|
22
|
+
- `/rune api-patterns` — audit and fix API design
|
|
23
|
+
- `/rune auth-patterns` — audit and fix authentication flows
|
|
24
|
+
- `/rune database-patterns` — audit and fix database queries and schema
|
|
25
|
+
- `/rune middleware-patterns` — audit and fix middleware stack
|
|
26
|
+
- `/rune caching-patterns` — audit and implement caching strategy
|
|
27
|
+
- `/rune background-jobs` — identify async operations and implement job queues
|
|
28
|
+
- `/rune cli-generation` — generate production CLI for existing backend services
|
|
29
|
+
- `/rune async-pipeline` — build multi-stage async processing pipelines with waterfall fallback
|
|
30
|
+
- Called by `cook` (L1) when backend task is detected
|
|
31
|
+
- Called by `review` (L2) when API/backend code is under review
|
|
32
|
+
|
|
33
|
+
## Skills Included
|
|
34
|
+
|
|
35
|
+
| Skill | Model | Description |
|
|
36
|
+
|-------|-------|-------------|
|
|
37
|
+
| [api-patterns](skills/api-patterns.md) | sonnet | RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation. |
|
|
38
|
+
| [auth-patterns](skills/auth-patterns.md) | sonnet | Authentication and authorization patterns — JWT, OAuth 2.0 / OIDC, passkeys/WebAuthn, session management, RBAC, API key management, MFA flows. |
|
|
39
|
+
| [database-patterns](skills/database-patterns.md) | sonnet | Database design and query patterns — schema design, migrations, indexing strategies, N+1 prevention, soft deletes, read replicas, connection pooling, seeding. |
|
|
40
|
+
| [middleware-patterns](skills/middleware-patterns.md) | sonnet | Middleware architecture — request validation, error handling, logging, CORS, compression, graceful shutdown, health checks, request ID tracking. |
|
|
41
|
+
| [caching-patterns](skills/caching-patterns.md) | sonnet | Caching strategies — in-memory LRU, Redis distributed cache, CDN/edge cache, browser cache headers, invalidation, and stampede prevention. |
|
|
42
|
+
| [background-jobs](skills/background-jobs.md) | sonnet | Queue-based async processing — BullMQ (Node.js), job patterns, retry strategies, idempotency, dead letter queues, monitoring. |
|
|
43
|
+
| [cli-generation](skills/cli-generation.md) | sonnet | Generate production-grade CLI wrappers — command groups, dual output mode (human + JSON), stateful REPL, session management with undo/redo, installable packaging. |
|
|
44
|
+
| [async-pipeline](skills/async-pipeline.md) | sonnet | Multi-stage async processing pipelines with waterfall engine selection, progress streaming via SSE, concurrency control, and credit-based billing. |
|
|
45
|
+
|
|
46
|
+
## Tech Stack Support
|
|
47
|
+
|
|
48
|
+
| Framework | ORM | Auth Library | Queue | Cache |
|
|
49
|
+
|-----------|-----|-------------|-------|-------|
|
|
50
|
+
| Express 5 | Prisma | Passport / custom JWT | BullMQ | ioredis |
|
|
51
|
+
| Fastify 5 | Drizzle | @fastify/jwt | BullMQ | ioredis |
|
|
52
|
+
| Next.js 16 (Route Handlers) | Prisma | NextAuth v5 / Lucia | BullMQ | ioredis / Upstash |
|
|
53
|
+
| NestJS 11 | TypeORM / Prisma | @nestjs/passport | @nestjs/bull | @nestjs/cache-manager |
|
|
54
|
+
| FastAPI | SQLAlchemy | python-jose / authlib | Celery | redis-py |
|
|
55
|
+
| Django 5 | Django ORM | django-rest-framework | Celery | django-redis |
|
|
56
|
+
|
|
57
|
+
## Connections
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Calls → docs-seeker (L3): lookup API documentation and framework guides
|
|
61
|
+
Calls → sentinel (L2): security audit on auth implementations
|
|
62
|
+
Calls → watchdog (L3): monitor queue depth and cache hit ratios
|
|
63
|
+
Calls → @rune/devops (L4): container and serverless deployment config for backend services
|
|
64
|
+
Called By ← cook (L1): when backend task detected
|
|
65
|
+
Called By ← review (L2): when API/backend code is being reviewed
|
|
66
|
+
Called By ← audit (L2): backend health dimension
|
|
67
|
+
Called By ← deploy (L2): pre-deploy readiness checks (health endpoints, graceful shutdown)
|
|
68
|
+
Called By ← @rune/saas (L4): SaaS services use backend API, auth, and caching patterns
|
|
69
|
+
Called By ← @rune/security (L4): security audits reference auth flows and middleware patterns
|
|
70
|
+
Called By ← @rune/mobile (L4): mobile backend integration patterns (auth, push server)
|
|
71
|
+
Inter-skill: cli-generation → api-patterns (CLI wraps existing API surface)
|
|
72
|
+
Inter-skill: async-pipeline → background-jobs (pipeline stages use job queue for execution)
|
|
73
|
+
Inter-skill: async-pipeline → caching-patterns (pipeline results cached by content hash)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Sharp Edges
|
|
77
|
+
|
|
78
|
+
- **Auth**: Never emit JWT without expiry; hard-cap access tokens at 15min, refresh at 7d.
|
|
79
|
+
- **Cache stampede**: Always emit Redis `SET NX` mutex lock on cache miss for hot keys.
|
|
80
|
+
- **Job idempotency**: Never use random UUID as job ID — use deterministic domain key (e.g., `email:welcome:${userId}`).
|
|
81
|
+
- **N+1**: Check ORM `lazy: true` defaults (Sequelize, TypeORM) — not caught by loop scan alone.
|
|
82
|
+
- **Migrations**: Every migration MUST include both `up()` and `down()` — flag any missing rollback.
|
|
83
|
+
- **LRU**: Always set `max` entries AND `ttl` — unbounded LRU grows to OOM.
|
|
84
|
+
- **CORS**: Flag `origin: '*'` in production configs; check `NODE_ENV` before emitting.
|
|
85
|
+
- **SSE**: Send heartbeat comment every 30s (`:\n\n`) to prevent proxy/LB 60s timeout drops.
|
|
86
|
+
- **Dead letters**: Emit alert on DLQ depth > 0 for critical queues; never silently drop failed jobs.
|
|
87
|
+
- **Credit math**: Always `Math.ceil()` final cost; use integer cents internally to avoid float drift.
|
|
88
|
+
|
|
89
|
+
## Done When
|
|
90
|
+
|
|
91
|
+
- API audit report emitted with naming violations, missing pagination, versioning strategy, and fix diffs
|
|
92
|
+
- Auth flow hardened: short-lived access tokens, httpOnly refresh cookies, proper hashing, OAuth/OIDC integration ready
|
|
93
|
+
- N+1 queries detected and replaced with eager loading; soft delete pattern applied; missing indexes migrated
|
|
94
|
+
- Middleware stack has: request ID, structured logging, global error handler, input validation, compression, graceful shutdown, health endpoints
|
|
95
|
+
- Caching strategy implemented: cacheable endpoints identified, cache layer selected, invalidation logic emitted alongside every write
|
|
96
|
+
- Async operations moved to background jobs: idempotency keys assigned, retry strategy configured, dead letter queue wired
|
|
97
|
+
- All emitted code uses project's existing framework and ORM (detected from package.json)
|
|
98
|
+
- CLI generated with dual output (human + JSON), REPL mode, session undo/redo, and installable package
|
|
99
|
+
- Async pipeline has waterfall engine selection, progress streaming via SSE, concurrency control, and credit billing
|
|
100
|
+
- Structured report emitted for each skill invoked
|
|
101
|
+
|
|
102
|
+
## Cost Profile
|
|
103
|
+
|
|
104
|
+
~14,000–28,000 tokens per full pack run (all 8 skills). Individual skill: ~2,000–5,000 tokens. Sonnet default for code generation and security audit. Use haiku for detection scans (Step 1 of each skill). Escalate to opus for architecture decisions on caching topology, pipeline design, or queue system selection in high-traffic systems.
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "api-patterns"
|
|
3
|
-
pack: "@rune/backend"
|
|
4
|
-
description: "RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation."
|
|
5
|
-
model: sonnet
|
|
6
|
-
tools: [Read, Edit, Write, Grep, Glob, Bash]
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# api-patterns
|
|
10
|
-
|
|
11
|
-
RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation.
|
|
12
|
-
|
|
13
|
-
#### Workflow
|
|
14
|
-
|
|
15
|
-
**Step 1 — Detect API surface**
|
|
16
|
-
Use Grep to find route definitions (`app.get`, `app.post`, `router.`, `@Get()`, `@Post()`, `@Query`, `@Mutation`). Read each route file to inventory: endpoint paths, HTTP methods, response shapes, error handling approach.
|
|
17
|
-
|
|
18
|
-
**Step 2 — Audit naming and structure**
|
|
19
|
-
Check each endpoint against REST conventions: plural nouns for collections (`/users` not `/getUsers`), nested resources for relationships (`/users/:id/posts`), query params for filtering (`?status=active`), consistent error envelope. Flag violations with specific fix for each.
|
|
20
|
-
|
|
21
|
-
**Step 3 — Add missing pagination and filtering**
|
|
22
|
-
For list endpoints returning unbounded arrays, emit cursor-based or offset pagination. For endpoints with no filtering, add query param parsing with Zod/Joi validation. Emit the middleware or decorator that enforces the pattern.
|
|
23
|
-
|
|
24
|
-
**Step 4 — API versioning strategy**
|
|
25
|
-
Choose versioning approach based on project context: URL path (`/v2/users`) for public APIs with long deprecation windows; `Accept-Version: 2` header for internal APIs needing cleaner URLs; query param (`?version=2`) for simple cases. Emit version routing middleware and a deprecation warning header (`Deprecation: true, Sunset: <date>`) on v1 routes. Document migration path in the route file as a comment.
|
|
26
|
-
|
|
27
|
-
**Step 5 — OpenAPI/Swagger and GraphQL patterns**
|
|
28
|
-
For REST: emit OpenAPI 3.1 schema from route definitions using tsoa decorators (TypeScript), Fastify's built-in JSON Schema (`schema: { body, querystring, response }`), or NestJS `@ApiProperty`. For GraphQL: if schema-first, validate resolvers match schema types; if code-first (NestJS), check `@ObjectType` / `@Field` decorators. Add DataLoader to any resolver with a per-request DB call to prevent N+1 at the GraphQL layer. Emit subscription pattern (WebSocket transport) for real-time fields.
|
|
29
|
-
|
|
30
|
-
#### Example
|
|
31
|
-
|
|
32
|
-
```typescript
|
|
33
|
-
// BEFORE: inconsistent naming, no pagination, bare error
|
|
34
|
-
app.get('/getUsers', async (req, res) => {
|
|
35
|
-
const users = await db.query('SELECT * FROM users');
|
|
36
|
-
res.json(users);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
// AFTER: REST naming, cursor pagination, error envelope, Zod validation
|
|
40
|
-
const paginationSchema = z.object({
|
|
41
|
-
query: z.object({
|
|
42
|
-
cursor: z.string().optional(),
|
|
43
|
-
limit: z.coerce.number().int().min(1).max(100).default(20),
|
|
44
|
-
status: z.enum(['active', 'inactive']).optional(),
|
|
45
|
-
}),
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
app.get('/users', validate(paginationSchema), async (req, res) => {
|
|
49
|
-
const { cursor, limit, status } = req.query;
|
|
50
|
-
const users = await userRepo.findMany({ cursor, limit: limit + 1, status });
|
|
51
|
-
const hasNext = users.length > limit;
|
|
52
|
-
res.json({
|
|
53
|
-
data: users.slice(0, limit),
|
|
54
|
-
pagination: { next_cursor: hasNext ? users[limit - 1].id : null, has_more: hasNext },
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
// Rate limiting: sliding window with Redis (atomic, no race condition)
|
|
59
|
-
const rateLimitMiddleware = async (req, res, next) => {
|
|
60
|
-
const key = `rl:${req.ip}:${Math.floor(Date.now() / 60_000)}`; // 1-minute window
|
|
61
|
-
const multi = redis.multi();
|
|
62
|
-
multi.incr(key);
|
|
63
|
-
multi.expire(key, 60);
|
|
64
|
-
const [count] = await multi.exec();
|
|
65
|
-
if (count > 100) return res.status(429).json({ error: { code: 'RATE_LIMITED', message: 'Too many requests' } });
|
|
66
|
-
res.setHeader('X-RateLimit-Remaining', 100 - count);
|
|
67
|
-
next();
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
// Fastify: built-in schema validation + OpenAPI generation
|
|
71
|
-
fastify.get('/users/:id', {
|
|
72
|
-
schema: {
|
|
73
|
-
params: { type: 'object', properties: { id: { type: 'string', format: 'uuid' } }, required: ['id'] },
|
|
74
|
-
response: { 200: UserSchema, 404: ErrorSchema },
|
|
75
|
-
},
|
|
76
|
-
}, async (req, reply) => { /* handler */ });
|
|
77
|
-
|
|
78
|
-
// GraphQL: DataLoader prevents N+1 in resolvers
|
|
79
|
-
const userLoader = new DataLoader(async (userIds: string[]) => {
|
|
80
|
-
const users = await prisma.user.findMany({ where: { id: { in: userIds } } });
|
|
81
|
-
return userIds.map(id => users.find(u => u.id === id) ?? new Error(`User ${id} not found`));
|
|
82
|
-
});
|
|
83
|
-
// In resolver: return userLoader.load(post.authorId) — batches all loads per request
|
|
84
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: "api-patterns"
|
|
3
|
+
pack: "@rune/backend"
|
|
4
|
+
description: "RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation."
|
|
5
|
+
model: sonnet
|
|
6
|
+
tools: [Read, Edit, Write, Grep, Glob, Bash]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# api-patterns
|
|
10
|
+
|
|
11
|
+
RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation.
|
|
12
|
+
|
|
13
|
+
#### Workflow
|
|
14
|
+
|
|
15
|
+
**Step 1 — Detect API surface**
|
|
16
|
+
Use Grep to find route definitions (`app.get`, `app.post`, `router.`, `@Get()`, `@Post()`, `@Query`, `@Mutation`). Read each route file to inventory: endpoint paths, HTTP methods, response shapes, error handling approach.
|
|
17
|
+
|
|
18
|
+
**Step 2 — Audit naming and structure**
|
|
19
|
+
Check each endpoint against REST conventions: plural nouns for collections (`/users` not `/getUsers`), nested resources for relationships (`/users/:id/posts`), query params for filtering (`?status=active`), consistent error envelope. Flag violations with specific fix for each.
|
|
20
|
+
|
|
21
|
+
**Step 3 — Add missing pagination and filtering**
|
|
22
|
+
For list endpoints returning unbounded arrays, emit cursor-based or offset pagination. For endpoints with no filtering, add query param parsing with Zod/Joi validation. Emit the middleware or decorator that enforces the pattern.
|
|
23
|
+
|
|
24
|
+
**Step 4 — API versioning strategy**
|
|
25
|
+
Choose versioning approach based on project context: URL path (`/v2/users`) for public APIs with long deprecation windows; `Accept-Version: 2` header for internal APIs needing cleaner URLs; query param (`?version=2`) for simple cases. Emit version routing middleware and a deprecation warning header (`Deprecation: true, Sunset: <date>`) on v1 routes. Document migration path in the route file as a comment.
|
|
26
|
+
|
|
27
|
+
**Step 5 — OpenAPI/Swagger and GraphQL patterns**
|
|
28
|
+
For REST: emit OpenAPI 3.1 schema from route definitions using tsoa decorators (TypeScript), Fastify's built-in JSON Schema (`schema: { body, querystring, response }`), or NestJS `@ApiProperty`. For GraphQL: if schema-first, validate resolvers match schema types; if code-first (NestJS), check `@ObjectType` / `@Field` decorators. Add DataLoader to any resolver with a per-request DB call to prevent N+1 at the GraphQL layer. Emit subscription pattern (WebSocket transport) for real-time fields.
|
|
29
|
+
|
|
30
|
+
#### Example
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
// BEFORE: inconsistent naming, no pagination, bare error
|
|
34
|
+
app.get('/getUsers', async (req, res) => {
|
|
35
|
+
const users = await db.query('SELECT * FROM users');
|
|
36
|
+
res.json(users);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// AFTER: REST naming, cursor pagination, error envelope, Zod validation
|
|
40
|
+
const paginationSchema = z.object({
|
|
41
|
+
query: z.object({
|
|
42
|
+
cursor: z.string().optional(),
|
|
43
|
+
limit: z.coerce.number().int().min(1).max(100).default(20),
|
|
44
|
+
status: z.enum(['active', 'inactive']).optional(),
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
app.get('/users', validate(paginationSchema), async (req, res) => {
|
|
49
|
+
const { cursor, limit, status } = req.query;
|
|
50
|
+
const users = await userRepo.findMany({ cursor, limit: limit + 1, status });
|
|
51
|
+
const hasNext = users.length > limit;
|
|
52
|
+
res.json({
|
|
53
|
+
data: users.slice(0, limit),
|
|
54
|
+
pagination: { next_cursor: hasNext ? users[limit - 1].id : null, has_more: hasNext },
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Rate limiting: sliding window with Redis (atomic, no race condition)
|
|
59
|
+
const rateLimitMiddleware = async (req, res, next) => {
|
|
60
|
+
const key = `rl:${req.ip}:${Math.floor(Date.now() / 60_000)}`; // 1-minute window
|
|
61
|
+
const multi = redis.multi();
|
|
62
|
+
multi.incr(key);
|
|
63
|
+
multi.expire(key, 60);
|
|
64
|
+
const [count] = await multi.exec();
|
|
65
|
+
if (count > 100) return res.status(429).json({ error: { code: 'RATE_LIMITED', message: 'Too many requests' } });
|
|
66
|
+
res.setHeader('X-RateLimit-Remaining', 100 - count);
|
|
67
|
+
next();
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Fastify: built-in schema validation + OpenAPI generation
|
|
71
|
+
fastify.get('/users/:id', {
|
|
72
|
+
schema: {
|
|
73
|
+
params: { type: 'object', properties: { id: { type: 'string', format: 'uuid' } }, required: ['id'] },
|
|
74
|
+
response: { 200: UserSchema, 404: ErrorSchema },
|
|
75
|
+
},
|
|
76
|
+
}, async (req, reply) => { /* handler */ });
|
|
77
|
+
|
|
78
|
+
// GraphQL: DataLoader prevents N+1 in resolvers
|
|
79
|
+
const userLoader = new DataLoader(async (userIds: string[]) => {
|
|
80
|
+
const users = await prisma.user.findMany({ where: { id: { in: userIds } } });
|
|
81
|
+
return userIds.map(id => users.find(u => u.id === id) ?? new Error(`User ${id} not found`));
|
|
82
|
+
});
|
|
83
|
+
// In resolver: return userLoader.load(post.authorId) — batches all loads per request
|
|
84
|
+
```
|