vibes-plug 1.0.0 → 2.5.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/.github/workflows/publish.yml +20 -0
- package/AGENTS.md +66 -0
- package/BLUEPRINT.md +152 -60
- package/CHANGELOG.md +50 -0
- package/README.md +346 -194
- package/package.json +25 -25
- package/plugin.json +1 -1
- package/skills/ai-cost-token-optimizer/SKILL.md +52 -0
- package/skills/ai-llm-integration-expert/SKILL.md +180 -162
- package/skills/api-design-expert/SKILL.md +314 -310
- package/skills/app-analyzer-optimizer/SKILL.md +193 -189
- package/skills/apple-ecosystem-expert/SKILL.md +142 -0
- package/skills/async-queue-temporal-expert/SKILL.md +54 -0
- package/skills/authentication-identity-expert/SKILL.md +251 -20
- package/skills/auto-doc-updater/SKILL.md +214 -204
- package/skills/autonomous-chaos-monkey/SKILL.md +63 -0
- package/skills/autonomous-red-teamer/SKILL.md +59 -0
- package/skills/autonomous-swarm-director/SKILL.md +69 -0
- package/skills/autonomous-tdd-debugger/SKILL.md +65 -0
- package/skills/bootstrap-to-modern/SKILL.md +90 -86
- package/skills/brainstorming/SKILL.md +373 -353
- package/skills/browser-automation-expert/SKILL.md +46 -0
- package/skills/ci-cd-devops-architect/SKILL.md +72 -45
- package/skills/cloud-hosting-expert/SKILL.md +244 -244
- package/skills/coderabbit/SKILL.md +192 -192
- package/skills/cron-scheduler-expert/SKILL.md +298 -0
- package/skills/data-telemetry-expert/SKILL.md +213 -213
- package/skills/database-orm-expert/SKILL.md +294 -294
- package/skills/dependency-upgrade-migrator/SKILL.md +295 -0
- package/skills/design-system-architect/SKILL.md +27 -10
- package/skills/doku-mcp-server/SKILL.md +251 -0
- package/skills/doku-payment-gateway/SKILL.md +227 -0
- package/skills/e2e-testing-expert/SKILL.md +315 -315
- package/skills/edge-serverless-db-expert/SKILL.md +43 -0
- package/skills/email-notification-expert/SKILL.md +362 -0
- package/skills/error-resilience-expert/SKILL.md +480 -0
- package/skills/event-driven-architect/SKILL.md +81 -81
- package/skills/feature-flag-analytics-expert/SKILL.md +46 -0
- package/skills/file-upload-media-expert/SKILL.md +431 -0
- package/skills/form-validation-expert/SKILL.md +401 -0
- package/skills/fullstack-expert/SKILL.md +202 -202
- package/skills/fullstack-expert/references/api_design_guide.md +466 -466
- package/skills/fullstack-expert/references/multi_language_backend.md +528 -528
- package/skills/fullstack-expert/scripts/api_contract_validator.py +253 -253
- package/skills/fullstack-expert/scripts/architecture_analyzer.py +326 -326
- package/skills/gemini-agent-booster/SKILL.md +135 -135
- package/skills/global-a11y-i18n-expert/SKILL.md +81 -81
- package/skills/glsl-shader-expert/SKILL.md +101 -0
- package/skills/go-programming-expert/SKILL.md +295 -295
- package/skills/graphql-apollo-expert/SKILL.md +108 -0
- package/skills/hig/SKILL.md +188 -188
- package/skills/hyper-context-synthesizer/SKILL.md +55 -0
- package/skills/js-backend-expert/SKILL.md +34 -9
- package/skills/legacy-code-translator/SKILL.md +65 -0
- package/skills/llm-cost-arbitrage-router/SKILL.md +59 -0
- package/skills/logging-error-tracking-expert/SKILL.md +338 -0
- package/skills/mcp-client-orchestrator/SKILL.md +70 -0
- package/skills/mcp-server-architect/SKILL.md +194 -194
- package/skills/micro-frontend-architect/SKILL.md +106 -0
- package/skills/mobile-expo-expert/SKILL.md +186 -186
- package/skills/mobile-push-notification-expert/SKILL.md +51 -0
- package/skills/monday-design-aesthetic/SKILL.md +67 -67
- package/skills/monorepo-architect/SKILL.md +227 -227
- package/skills/mpa-orchestrator/SKILL.md +101 -101
- package/skills/multi-agent-orchestration/SKILL.md +234 -234
- package/skills/multiple-entry-points/SKILL.md +55 -55
- package/skills/mvc-expert/SKILL.md +231 -231
- package/skills/payment-gateway-expert/SKILL.md +45 -45
- package/skills/performance-web-vitals/SKILL.md +332 -332
- package/skills/post-quantum-crypto-migrator/SKILL.md +57 -0
- package/skills/prd-architect/SKILL.md +201 -191
- package/skills/proactive-background-watcher/SKILL.md +62 -0
- package/skills/production-ready-hardener/PRODUCTION_READINESS_REPORT.md +67 -0
- package/skills/production-ready-hardener/SKILL.md +173 -186
- package/skills/production-ready-hardener/references/production_checklist.md +161 -161
- package/skills/production-ready-hardener/scripts/production_readiness_scanner.py +881 -875
- package/skills/project-context-mapper/SKILL.md +79 -0
- package/skills/python-programming-expert/SKILL.md +263 -132
- package/skills/rate-limit-abuse-prevention/SKILL.md +371 -0
- package/skills/realtime-collaboration-expert/SKILL.md +45 -45
- package/skills/rust-programming-expert/SKILL.md +235 -235
- package/skills/saas-billing/SKILL.md +377 -377
- package/skills/saas-multi-tenant/SKILL.md +251 -237
- package/skills/saas-mvp-launcher/SKILL.md +10 -0
- package/skills/saas-transformer/SKILL.md +187 -144
- package/skills/saas-transformer/references/billing_integration_guide.md +401 -401
- package/skills/saas-transformer/references/feature_gating_patterns.md +137 -137
- package/skills/saas-transformer/references/saas_transformation_checklist.md +121 -121
- package/skills/saas-transformer/scripts/saas_transformation_scanner.py +39 -29
- package/skills/scalability-clean-code/SKILL.md +229 -229
- package/skills/self-evolving-memory-graph/SKILL.md +75 -0
- package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -0
- package/skills/senior-frontend/SKILL.md +161 -161
- package/skills/senior-fullstack/SKILL.md +167 -167
- package/skills/seo/SKILL.md +235 -225
- package/skills/seo-geo/SKILL.md +188 -188
- package/skills/session-context-loader/SKILL.md +77 -0
- package/skills/session-handoff-resume/SKILL.md +158 -158
- package/skills/skill_baru/SKILL.md +172 -147
- package/skills/spa-orchestrator/SKILL.md +288 -288
- package/skills/state-management-expert/SKILL.md +272 -272
- package/skills/supabase-security-expert/SKILL.md +243 -243
- package/skills/tailwind-expert/SKILL.md +188 -188
- package/skills/tanstack-query-expert/SKILL.md +199 -199
- package/skills/token-saver/SKILL.md +119 -111
- package/skills/typescript-expert/SKILL.md +324 -279
- package/skills/ui-components-expert/SKILL.md +263 -46
- package/skills/ui-ux-pro-max/SKILL.md +202 -201
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
- package/skills/ui_ux_expert/SKILL.md +17 -6
- package/skills/vector-db-rag-expert/SKILL.md +52 -0
- package/skills/vibe-code-gardener/SKILL.md +181 -173
- package/skills/visual-qa-vision-agent/SKILL.md +65 -0
- package/skills/vue-frontend-expert/SKILL.md +126 -0
- package/skills/web-3d-graphics-expert/SKILL.md +131 -0
- package/skills/web-game-engine-expert/SKILL.md +96 -0
- package/skills/web-scraper/SKILL.md +207 -205
- package/skills/website-design-cloner/SKILL.md +174 -0
- package/skills/webxr-ar-vr-expert/SKILL.md +117 -0
- package/skills/zero-to-prod-orchestrator/SKILL.md +206 -180
- package/skills/zero-trust-secret-vault/SKILL.md +40 -0
- package/vibes-swarm-demo.gif +0 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dependency-upgrade-migrator
|
|
3
|
+
description: "Expert guide for dependency upgrades, breaking change migrations, codemod automation, and package audit remediation / Panduan ahli untuk upgrade dependensi, migrasi breaking change, otomasi codemod, dan remediasi audit paket."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dependency Upgrade Migrator (2026 Edition)
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
Production-grade guide for safely upgrading dependencies, migrating through breaking changes, and maintaining healthy dependency trees. Covers **automated upgrade tooling** (`npm-check-updates`, `taze`, Renovate Bot), **major framework migration guides** (React 18→19, Next.js 14→15, Tailwind v3→v4), **codemod automation** (jscodeshift, ts-morph), **vulnerability remediation** (`npm audit`, `pnpm audit`), **lockfile hygiene**, **monorepo alignment** (pnpm catalogs), and **breaking change detection workflows**.
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
Activate this skill when:
|
|
21
|
+
- Upgrading major versions of frameworks (React, Next.js, Tailwind, etc.).
|
|
22
|
+
- Running security audits and remediating vulnerabilities.
|
|
23
|
+
- Setting up automated dependency update bots (Renovate, Dependabot).
|
|
24
|
+
- Writing or running codemods for API migration.
|
|
25
|
+
- Cleaning up dependency trees and removing unused packages.
|
|
26
|
+
- Aligning dependency versions across monorepo packages.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
### 1. Upgrade Strategy Matrix
|
|
31
|
+
|
|
32
|
+
| Upgrade Type | Risk Level | Strategy | Tools |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
| **Patch** (1.0.x) | 🟢 Low | Auto-merge after tests pass | Renovate, Dependabot |
|
|
35
|
+
| **Minor** (1.x.0) | 🟡 Medium | Auto-merge with manual review | Renovate + test suite |
|
|
36
|
+
| **Major** (x.0.0) | 🔴 High | Manual review, migration guide, branch | Manual + codemods |
|
|
37
|
+
| **Security** (any) | 🔴 Critical | Immediate upgrade, hotfix | `npm audit fix`, manual |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### 2. Pre-Upgrade Checklist
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
- [ ] Run `pnpm audit` / `npm audit` to identify vulnerabilities
|
|
45
|
+
- [ ] Check changelog/migration guide for the target version
|
|
46
|
+
- [ ] Ensure test suite is passing on current version (baseline)
|
|
47
|
+
- [ ] Create a dedicated branch for the upgrade
|
|
48
|
+
- [ ] Check peer dependency compatibility
|
|
49
|
+
- [ ] Review breaking changes list
|
|
50
|
+
- [ ] Identify files that need codemod transformation
|
|
51
|
+
- [ ] Back up lockfile before changes
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### 3. Automated Upgrade Tooling
|
|
57
|
+
|
|
58
|
+
#### Checking for Updates
|
|
59
|
+
```bash
|
|
60
|
+
# Using taze (recommended — supports monorepos)
|
|
61
|
+
npx taze major # Show available major upgrades
|
|
62
|
+
npx taze minor -w # Auto-write minor updates to package.json
|
|
63
|
+
npx taze -r # Recursive (monorepo)
|
|
64
|
+
|
|
65
|
+
# Using npm-check-updates
|
|
66
|
+
npx ncu # Show available updates
|
|
67
|
+
npx ncu -u # Auto-write updates to package.json
|
|
68
|
+
npx ncu --target minor # Only show minor updates
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### Renovate Bot Configuration
|
|
72
|
+
```json
|
|
73
|
+
// renovate.json
|
|
74
|
+
{
|
|
75
|
+
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
76
|
+
"extends": ["config:best-practices"],
|
|
77
|
+
"labels": ["dependencies"],
|
|
78
|
+
"schedule": ["after 10pm and before 5am every weekday"],
|
|
79
|
+
"packageRules": [
|
|
80
|
+
{
|
|
81
|
+
"matchUpdateTypes": ["patch"],
|
|
82
|
+
"automerge": true,
|
|
83
|
+
"automergeType": "pr"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"matchUpdateTypes": ["minor"],
|
|
87
|
+
"automerge": true,
|
|
88
|
+
"automergeType": "pr",
|
|
89
|
+
"requiredStatusChecks": ["ci/test", "ci/build"]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"matchUpdateTypes": ["major"],
|
|
93
|
+
"automerge": false,
|
|
94
|
+
"labels": ["major-upgrade", "manual-review"]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"matchPackageNames": ["typescript", "react", "next"],
|
|
98
|
+
"automerge": false,
|
|
99
|
+
"labels": ["core-dependency"]
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### 4. Major Framework Migration Guides
|
|
108
|
+
|
|
109
|
+
#### React 18 → 19
|
|
110
|
+
```typescript
|
|
111
|
+
// Key breaking changes:
|
|
112
|
+
// 1. forwardRef no longer needed (ref is a regular prop)
|
|
113
|
+
// ❌ Before (React 18)
|
|
114
|
+
const Input = forwardRef<HTMLInputElement, Props>((props, ref) => (
|
|
115
|
+
<input ref={ref} {...props} />
|
|
116
|
+
));
|
|
117
|
+
|
|
118
|
+
// ✅ After (React 19)
|
|
119
|
+
function Input({ ref, ...props }: Props & { ref?: React.Ref<HTMLInputElement> }) {
|
|
120
|
+
return <input ref={ref} {...props} />;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// 2. useActionState replaces useFormState
|
|
124
|
+
// ❌ Before: import { useFormState } from 'react-dom'
|
|
125
|
+
// ✅ After: import { useActionState } from 'react'
|
|
126
|
+
|
|
127
|
+
// 3. use() hook for promises and context
|
|
128
|
+
// ✅ New: const data = use(fetchPromise);
|
|
129
|
+
// ✅ New: const theme = use(ThemeContext);
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
#### Next.js 14 → 15
|
|
133
|
+
```typescript
|
|
134
|
+
// Key changes:
|
|
135
|
+
// 1. params/searchParams are now async in page/layout/route
|
|
136
|
+
// ❌ Before: export default function Page({ params }: { params: { id: string } })
|
|
137
|
+
// ✅ After: export default async function Page({ params }: { params: Promise<{ id: string }> }) {
|
|
138
|
+
// const { id } = await params;
|
|
139
|
+
|
|
140
|
+
// 2. Caching: fetch() no longer cached by default
|
|
141
|
+
// ❌ Before: fetch() was cached by default
|
|
142
|
+
// ✅ After: fetch(url, { cache: 'force-cache' }) for explicit caching
|
|
143
|
+
|
|
144
|
+
// 3. Route handlers: GET is no longer cached by default
|
|
145
|
+
// Add: export const dynamic = 'force-static' if you want caching
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Tailwind CSS v3 → v4
|
|
149
|
+
```css
|
|
150
|
+
/* Key changes: */
|
|
151
|
+
/* 1. Configuration moves from JS to CSS */
|
|
152
|
+
/* ❌ Before: tailwind.config.js with theme.extend */
|
|
153
|
+
/* ✅ After: @theme directive in CSS */
|
|
154
|
+
|
|
155
|
+
@import 'tailwindcss';
|
|
156
|
+
|
|
157
|
+
@theme {
|
|
158
|
+
--color-primary: oklch(0.6 0.2 260);
|
|
159
|
+
--font-sans: 'Inter', sans-serif;
|
|
160
|
+
--breakpoint-sm: 40rem;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* 2. No more @tailwind directives */
|
|
164
|
+
/* ❌ Before: @tailwind base; @tailwind components; @tailwind utilities; */
|
|
165
|
+
/* ✅ After: @import 'tailwindcss'; */
|
|
166
|
+
|
|
167
|
+
/* 3. Renamed utilities */
|
|
168
|
+
/* ❌ Before: bg-opacity-50 */
|
|
169
|
+
/* ✅ After: bg-black/50 */
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### 5. Codemod Automation (jscodeshift)
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
// codemods/remove-forward-ref.ts
|
|
178
|
+
import type { API, FileInfo } from 'jscodeshift';
|
|
179
|
+
|
|
180
|
+
export default function removeForwardRef(fileInfo: FileInfo, api: API) {
|
|
181
|
+
const j = api.jscodeshift;
|
|
182
|
+
const root = j(fileInfo.source);
|
|
183
|
+
|
|
184
|
+
// Find all forwardRef calls and transform them
|
|
185
|
+
root.find(j.CallExpression, {
|
|
186
|
+
callee: { name: 'forwardRef' },
|
|
187
|
+
}).forEach((path) => {
|
|
188
|
+
// Extract the inner component function
|
|
189
|
+
const args = path.node.arguments;
|
|
190
|
+
if (args.length > 0 && (args[0].type === 'ArrowFunctionExpression' || args[0].type === 'FunctionExpression')) {
|
|
191
|
+
// Replace forwardRef(...) with the inner function
|
|
192
|
+
j(path).replaceWith(args[0]);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// Remove forwardRef import
|
|
197
|
+
root.find(j.ImportSpecifier, { imported: { name: 'forwardRef' } }).remove();
|
|
198
|
+
|
|
199
|
+
return root.toSource({ quote: 'single' });
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Run: npx jscodeshift -t codemods/remove-forward-ref.ts src/ --extensions=tsx,ts
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### 6. Vulnerability Remediation
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Audit current state
|
|
211
|
+
pnpm audit # Show vulnerabilities
|
|
212
|
+
pnpm audit --fix # Auto-fix where possible
|
|
213
|
+
|
|
214
|
+
# For stubborn transitive dependencies
|
|
215
|
+
pnpm patch <package>@<version> # Create a local patch
|
|
216
|
+
# or
|
|
217
|
+
pnpm overrides # Force specific version in package.json
|
|
218
|
+
|
|
219
|
+
# package.json — Force resolution
|
|
220
|
+
{
|
|
221
|
+
"pnpm": {
|
|
222
|
+
"overrides": {
|
|
223
|
+
"vulnerable-package": ">=2.0.0"
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
### 7. Dependency Cleanup
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
# Find unused dependencies
|
|
235
|
+
npx depcheck # Detect unused deps
|
|
236
|
+
npx depcheck --ignores="@types/*" # Ignore type packages
|
|
237
|
+
|
|
238
|
+
# Find duplicate packages
|
|
239
|
+
pnpm dedupe # Deduplicate lockfile
|
|
240
|
+
pnpm why <package> # See why a package is installed
|
|
241
|
+
|
|
242
|
+
# Monorepo: Align versions with pnpm catalogs
|
|
243
|
+
# pnpm-workspace.yaml
|
|
244
|
+
catalog:
|
|
245
|
+
react: "^19.0.0"
|
|
246
|
+
typescript: "^5.7.0"
|
|
247
|
+
"@tanstack/react-query": "^5.60.0"
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
### Common Pitfalls to Avoid
|
|
253
|
+
|
|
254
|
+
| Anti-Pattern | Problem | Correct Approach |
|
|
255
|
+
|---|---|---|
|
|
256
|
+
| Upgrading all deps at once | Hard to identify breaking changes | Upgrade one major dep at a time |
|
|
257
|
+
| Ignoring peer dependency warnings | Runtime errors, subtle bugs | Resolve all peer dep conflicts |
|
|
258
|
+
| No test suite before upgrading | Can't verify nothing broke | Ensure tests pass before AND after |
|
|
259
|
+
| `npm audit fix --force` blindly | Can introduce breaking changes | Review each fix manually for major bumps |
|
|
260
|
+
| Skipping changelogs | Missing breaking changes | Always read CHANGELOG/migration guide |
|
|
261
|
+
| No lockfile in version control | Non-reproducible builds | Always commit `pnpm-lock.yaml` |
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
### Integration with Other Skills
|
|
266
|
+
|
|
267
|
+
- `monorepo-architect` — pnpm catalogs, workspace dependency alignment
|
|
268
|
+
- `vibe-code-gardener` — Post-upgrade cleanup, dead code removal
|
|
269
|
+
- `production-ready-hardener` — Security audit phase
|
|
270
|
+
- `ci-cd-devops-architect` — Renovate Bot CI/CD integration
|
|
271
|
+
- `e2e-testing-expert` — Regression testing after major upgrades
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
<a name="bahasa-indonesia"></a>
|
|
276
|
+
## Bahasa Indonesia
|
|
277
|
+
|
|
278
|
+
### Deskripsi
|
|
279
|
+
Panduan tingkat produksi untuk upgrade dependensi yang aman, migrasi melalui breaking change, dan pemeliharaan dependency tree yang sehat. Mencakup **tooling upgrade otomatis** (`taze`, Renovate Bot), **panduan migrasi framework utama** (React 18→19, Next.js 14→15, Tailwind v3→v4), **otomasi codemod** (jscodeshift, ts-morph), **remediasi kerentanan** (`pnpm audit`), **kebersihan lockfile**, dan **penyelarasan dependensi monorepo** (pnpm catalogs).
|
|
280
|
+
|
|
281
|
+
### Kondisi Pemicu
|
|
282
|
+
Aktifkan skill ini ketika:
|
|
283
|
+
- Mengupgrade versi mayor framework (React, Next.js, Tailwind, dll).
|
|
284
|
+
- Menjalankan audit keamanan dan memperbaiki kerentanan.
|
|
285
|
+
- Menyiapkan bot update dependensi otomatis (Renovate, Dependabot).
|
|
286
|
+
- Menulis atau menjalankan codemod untuk migrasi API.
|
|
287
|
+
- Membersihkan dependency tree dan menghapus paket yang tidak digunakan.
|
|
288
|
+
|
|
289
|
+
### Integrasi dengan Skill Lain
|
|
290
|
+
|
|
291
|
+
- `monorepo-architect` — pnpm catalogs, penyelarasan dependensi workspace
|
|
292
|
+
- `vibe-code-gardener` — Pembersihan pasca-upgrade, penghapusan dead code
|
|
293
|
+
- `production-ready-hardener` — Fase audit keamanan
|
|
294
|
+
- `ci-cd-devops-architect` — Integrasi Renovate Bot CI/CD
|
|
295
|
+
- `e2e-testing-expert` — Pengujian regresi setelah upgrade mayor
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-system-architect
|
|
3
3
|
description: "Expert guide for designing, building, and maintaining scalable UI design systems with design tokens, headless primitives (Radix/Base UI), Tailwind v4 @theme, and WCAG 2.2 accessibility in English and Indonesian."
|
|
4
|
-
author:
|
|
4
|
+
author: vibes-plug-swarm
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Design System Architect (2026 Edition — shadcn/ui Registry)
|
|
@@ -48,17 +48,17 @@ Expert guide for building and maintaining scalable UI design systems. Covers des
|
|
|
48
48
|
--color-text-muted: oklch(50% 0.015 250);
|
|
49
49
|
--color-destructive: oklch(55% 0.22 25); /* Red */
|
|
50
50
|
|
|
51
|
-
/* --- Typography --- */
|
|
51
|
+
/* --- Fluid Typography (clamp) --- */
|
|
52
52
|
--font-sans: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif;
|
|
53
53
|
--font-mono: "JetBrains Mono", "Fira Code", ui-monospace, monospace;
|
|
54
|
-
--font-size-xs: 0.75rem;
|
|
55
|
-
--font-size-sm: 0.875rem;
|
|
56
|
-
--font-size-base: 1rem;
|
|
57
|
-
--font-size-lg: 1.125rem;
|
|
58
|
-
--font-size-xl: 1.25rem;
|
|
59
|
-
--font-size-2xl: 1.5rem;
|
|
60
|
-
--font-size-3xl: 1.875rem;
|
|
61
|
-
--font-size-4xl: 2.25rem;
|
|
54
|
+
--font-size-xs: clamp(0.7rem, 0.17vi + 0.66rem, 0.75rem);
|
|
55
|
+
--font-size-sm: clamp(0.8rem, 0.17vi + 0.76rem, 0.875rem);
|
|
56
|
+
--font-size-base: clamp(0.9rem, 0.17vi + 0.86rem, 1rem);
|
|
57
|
+
--font-size-lg: clamp(1rem, 0.17vi + 0.96rem, 1.125rem);
|
|
58
|
+
--font-size-xl: clamp(1.1rem, 0.34vi + 1.02rem, 1.25rem);
|
|
59
|
+
--font-size-2xl: clamp(1.2rem, 0.69vi + 1.03rem, 1.5rem);
|
|
60
|
+
--font-size-3xl: clamp(1.5rem, 0.86vi + 1.29rem, 1.875rem);
|
|
61
|
+
--font-size-4xl: clamp(1.8rem, 1.03vi + 1.54rem, 2.25rem);
|
|
62
62
|
|
|
63
63
|
/* --- Spacing & Radius --- */
|
|
64
64
|
--radius-sm: 0.25rem;
|
|
@@ -139,6 +139,17 @@ Button.displayName = 'Button';
|
|
|
139
139
|
export { Button, buttonVariants };
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
+
### Component Layout (Container Queries over Media Queries)
|
|
143
|
+
Avoid `@media` queries for internal component styling. Use **CSS Container Queries (`@container`)** so components respond to their wrapper, not the viewport. This makes components truly reusable anywhere.
|
|
144
|
+
```tsx
|
|
145
|
+
// Example of a container-aware component using Tailwind v4
|
|
146
|
+
<div className="@container">
|
|
147
|
+
<div className="flex flex-col @md:flex-row gap-4">
|
|
148
|
+
<div className="p-4 bg-surface rounded-xl">Fluid Card</div>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
```
|
|
152
|
+
|
|
142
153
|
### shadcn/ui Registry — Distributable Components (2026)
|
|
143
154
|
|
|
144
155
|
shadcn/ui v2 introduces a **registry** system — distribute your components as a shareable library that others can `npx shadcn add` into their projects:
|
|
@@ -228,6 +239,8 @@ Definisikan semua token di CSS menggunakan direktif `@theme`. Gunakan warna OKLC
|
|
|
228
239
|
### Arsitektur Komponen
|
|
229
240
|
Gunakan pola Headless + Styled: primitif headless (Base UI/Radix) untuk aksesibilitas, gaya melalui Tailwind + CVA (class-variance-authority) untuk varian type-safe.
|
|
230
241
|
|
|
242
|
+
**Container Queries (`@container`)**: DILARANG keras menggunakan `@media` query (misal `md:`, `lg:`) untuk layout di dalam sebuah komponen. Gunakan **Container Queries (`@md:`, `@lg:`)** agar komponen dapat menyesuaikan diri dengan lebar pembungkusnya, bukan lebar layar secara keseluruhan. Ini membuat komponen Anda 100% *reusable*.
|
|
243
|
+
|
|
231
244
|
### Registry shadcn/ui — Komponen yang Dapat Didistribusikan (2026)
|
|
232
245
|
shadcn/ui v2 memperkenalkan sistem registry — distribusikan komponen Anda sebagai library yang dapat dibagikan sehingga orang lain dapat menginstalnya dengan `npx shadcn add [url] [komponen]`.
|
|
233
246
|
|
|
@@ -241,3 +254,7 @@ Base UI (dari tim MUI) adalah alternatif Radix UI untuk 2026 dengan dukungan nat
|
|
|
241
254
|
- Navigasi keyboard berfungsi untuk semua interaksi.
|
|
242
255
|
- Modal menjebak fokus dan memulihkannya saat ditutup.
|
|
243
256
|
- Target sentuh ≥ 24×24px (persyaratan baru WCAG 2.2).
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
## Orchestration & Integration
|
|
260
|
+
- Integrates with frontend orchestrators, Tailwind v4, Base UI, and shadcn/ui.
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: doku-mcp-server
|
|
3
|
+
description: "Expert guide for DOKU Model Context Protocol (MCP) Server integration. Enables AI Agentic Commerce with tools for payment links, Virtual Accounts, QRIS, transaction status checks, and client configuration (Claude Desktop, Cursor, AGY) / Panduan ahli DOKU MCP Server untuk AI Agentic Commerce."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# DOKU MCP Server / Server Model Context Protocol DOKU
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Description
|
|
17
|
+
Expert guide for integrating and building Model Context Protocol (MCP) servers with DOKU Payment Gateway based on [DOKU Developers Documentation](https://developers.doku.com/). Enables AI Agents (Claude Desktop, Antigravity, Cursor, n8n, LangChain) to execute payment tasks autonomously using Agentic Commerce capabilities (generating payment links, issuing Virtual Account numbers, generating QRIS codes, querying transaction statuses).
|
|
18
|
+
|
|
19
|
+
### Trigger Conditions
|
|
20
|
+
Activate this skill when the user is:
|
|
21
|
+
- Setting up or configuring DOKU MCP server for Claude Desktop, Antigravity (AGY), Cursor, or LLM agents.
|
|
22
|
+
- Implementing AI Agentic Commerce or autonomous AI-driven checkout workflows using DOKU.
|
|
23
|
+
- Building a custom TypeScript or Python MCP server wrapping DOKU Jokul API.
|
|
24
|
+
- Defining MCP tools and resources for payment generation and status verification.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
### Key Capabilities & Tools
|
|
29
|
+
|
|
30
|
+
| MCP Tool Name | Description | Key Input Parameters |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| `create_checkout_payment` | Generates a DOKU Checkout URL / Payment Link for host-managed payment page | `amount`, `invoice_number`, `customer_name`, `customer_email` |
|
|
33
|
+
| `create_virtual_account` | Generates a specific bank Virtual Account number (BCA, Mandiri, BRI, BNI, Permata, DOKU) | `bank_code`, `amount`, `invoice_number`, `customer_name` |
|
|
34
|
+
| `create_qris_payment` | Generates a dynamic QRIS string/image for instant wallet payments | `amount`, `invoice_number`, `store_name` |
|
|
35
|
+
| `check_transaction_status` | Queries real-time transaction payment status | `invoice_number` or `transaction_id` |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### Client Configuration
|
|
40
|
+
|
|
41
|
+
#### 1. Antigravity & Gemini Configuration (`mcp.json`)
|
|
42
|
+
|
|
43
|
+
**Location:**
|
|
44
|
+
- **Global:** `~/.gemini/config/mcp.json` (Windows: `%USERPROFILE%\.gemini\config\mcp.json`)
|
|
45
|
+
- **Workspace:** `.agents/mcp.json` (in your project root)
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"mcpServers": {
|
|
50
|
+
"doku-payment": {
|
|
51
|
+
"command": "node",
|
|
52
|
+
"args": ["/path/to/doku-mcp-server/dist/index.js"],
|
|
53
|
+
"env": {
|
|
54
|
+
"DOKU_CLIENT_ID": "YOUR_SANDBOX_OR_PROD_CLIENT_ID",
|
|
55
|
+
"DOKU_SECRET_KEY": "YOUR_SANDBOX_OR_PROD_SECRET_KEY",
|
|
56
|
+
"DOKU_IS_PRODUCTION": "false"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### 2. Claude Desktop Configuration (`claude_desktop_config.json`)
|
|
64
|
+
|
|
65
|
+
**Location:**
|
|
66
|
+
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
67
|
+
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"mcpServers": {
|
|
72
|
+
"doku-payment": {
|
|
73
|
+
"command": "node",
|
|
74
|
+
"args": ["/path/to/doku-mcp-server/dist/index.js"],
|
|
75
|
+
"env": {
|
|
76
|
+
"DOKU_CLIENT_ID": "YOUR_SANDBOX_OR_PROD_CLIENT_ID",
|
|
77
|
+
"DOKU_SECRET_KEY": "YOUR_SANDBOX_OR_PROD_SECRET_KEY",
|
|
78
|
+
"DOKU_IS_PRODUCTION": "false"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
#### 3. Environment Variables & Authentication
|
|
86
|
+
DOKU API authentication requires API Key credentials. When using standard HTTP header authentication:
|
|
87
|
+
- API Keys are configured in your environment or encoded as Base64 for the MCP `Authorization` header.
|
|
88
|
+
- Use Sandbox (`https://api-sandbox.doku.com`) during development and testing.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### Building a Custom TypeScript MCP Server for DOKU
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
96
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
97
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
98
|
+
import crypto from 'crypto';
|
|
99
|
+
|
|
100
|
+
const CLIENT_ID = process.env.DOKU_CLIENT_ID || '';
|
|
101
|
+
const SECRET_KEY = process.env.DOKU_SECRET_KEY || '';
|
|
102
|
+
const BASE_URL = process.env.DOKU_IS_PRODUCTION === 'true'
|
|
103
|
+
? 'https://api.doku.com'
|
|
104
|
+
: 'https://api-sandbox.doku.com';
|
|
105
|
+
|
|
106
|
+
function generateHeaders(targetPath: string, payload: object) {
|
|
107
|
+
const requestId = crypto.randomUUID();
|
|
108
|
+
const timestamp = new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
109
|
+
const jsonBody = JSON.stringify(payload);
|
|
110
|
+
const digest = crypto.createHash('sha256').update(jsonBody, 'utf8').digest('base64');
|
|
111
|
+
|
|
112
|
+
const component = `Client-Id:${CLIENT_ID}\nRequest-Id:${requestId}\nRequest-Timestamp:${timestamp}\nRequest-Target:${targetPath}\nDigest:${digest}`;
|
|
113
|
+
const signature = 'HMACSHA256=' + crypto.createHmac('sha256', SECRET_KEY).update(component).digest('base64');
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
'Content-Type': 'application/json',
|
|
117
|
+
'Client-Id': CLIENT_ID,
|
|
118
|
+
'Request-Id': requestId,
|
|
119
|
+
'Request-Timestamp': timestamp,
|
|
120
|
+
'Request-Target': targetPath,
|
|
121
|
+
'Digest': digest,
|
|
122
|
+
'Signature': signature
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const server = new Server(
|
|
127
|
+
{ name: 'doku-mcp-server', version: '1.0.0' },
|
|
128
|
+
{ capabilities: { tools: {} } }
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
132
|
+
tools: [
|
|
133
|
+
{
|
|
134
|
+
name: 'create_checkout_payment',
|
|
135
|
+
description: 'Generate a DOKU payment checkout URL for customer order',
|
|
136
|
+
inputSchema: {
|
|
137
|
+
type: 'object',
|
|
138
|
+
properties: {
|
|
139
|
+
amount: { type: 'number', description: 'Total payment amount in IDR' },
|
|
140
|
+
invoice_number: { type: 'string', description: 'Unique order invoice number' },
|
|
141
|
+
customer_name: { type: 'string', description: 'Customer full name' },
|
|
142
|
+
customer_email: { type: 'string', description: 'Customer email address' }
|
|
143
|
+
},
|
|
144
|
+
required: ['amount', 'invoice_number', 'customer_name', 'customer_email']
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: 'check_transaction_status',
|
|
149
|
+
description: 'Check payment status of a transaction',
|
|
150
|
+
inputSchema: {
|
|
151
|
+
type: 'object',
|
|
152
|
+
properties: {
|
|
153
|
+
invoice_number: { type: 'string', description: 'Invoice number to query' }
|
|
154
|
+
},
|
|
155
|
+
required: ['invoice_number']
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}));
|
|
160
|
+
|
|
161
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
162
|
+
const { name, arguments: args } = request.params;
|
|
163
|
+
|
|
164
|
+
if (name === 'create_checkout_payment') {
|
|
165
|
+
const targetPath = '/checkout/v1/payment';
|
|
166
|
+
const body = {
|
|
167
|
+
order: { amount: args?.amount, invoice_number: args?.invoice_number },
|
|
168
|
+
customer: { name: args?.customer_name, email: args?.customer_email }
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const response = await fetch(`${BASE_URL}${targetPath}`, {
|
|
172
|
+
method: 'POST',
|
|
173
|
+
headers: generateHeaders(targetPath, body),
|
|
174
|
+
body: JSON.stringify(body)
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
const data = await response.json();
|
|
178
|
+
return {
|
|
179
|
+
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }]
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
throw new Error(`Tool not found: ${name}`);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
async function main() {
|
|
187
|
+
const transport = new StdioServerTransport();
|
|
188
|
+
await server.connect(transport);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
main().catch(console.error);
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### Common Pitfalls to Avoid
|
|
197
|
+
|
|
198
|
+
| Anti-Pattern | Issue | Solution |
|
|
199
|
+
|---|---|---|
|
|
200
|
+
| Hardcoding Merchant Secrets | Security vulnerability | Always load `DOKU_CLIENT_ID` and `DOKU_SECRET_KEY` from environment variables. |
|
|
201
|
+
| Incomplete Tool Schema Descriptions | AI Agent misinterprets tool usage | Provide clear parameter descriptions and strict `required` fields in JSON schema. |
|
|
202
|
+
| Returning Raw Errors | Unfriendly LLM agent experience | Catch API errors and return structured error JSON response in MCP tool text output. |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
<a name="bahasa-indonesia"></a>
|
|
207
|
+
## Bahasa Indonesia
|
|
208
|
+
|
|
209
|
+
### Deskripsi
|
|
210
|
+
Panduan ahli untuk mengintegrasikan dan membuat server Model Context Protocol (MCP) dengan DOKU Payment Gateway berdasarkan dokumentasi resmi [DOKU Developers Documentation](https://developers.doku.com/). Memungkinkan Agen AI (Claude Desktop, Antigravity, Cursor, n8n, LangChain) menjalankan transaksi pembayaran secara otonom dalam alur Agentic Commerce (membuat link pembayaran, membuat nomor Virtual Account, membuat kode QRIS, dan memeriksa status transaksi).
|
|
211
|
+
|
|
212
|
+
### Kondisi Pemicu
|
|
213
|
+
Aktifkan skill ini ketika pengguna sedang:
|
|
214
|
+
- Mengatur atau mengonfigurasi server DOKU MCP untuk Claude Desktop, Antigravity (AGY), Cursor, atau agen LLM.
|
|
215
|
+
- Mengimplementasikan alur kerja checkout otonom berbasis AI (AI Agentic Commerce) menggunakan DOKU.
|
|
216
|
+
- Membangun server MCP TypeScript atau Python kustom yang membungkus DOKU Jokul API.
|
|
217
|
+
- Mendefinisikan tool dan resource MCP untuk pembuatan dan verifikasi status pembayaran.
|
|
218
|
+
|
|
219
|
+
### Konfigurasi Client untuk Antigravity & Gemini
|
|
220
|
+
|
|
221
|
+
**Lokasi File Konfigurasi (`mcp.json`):**
|
|
222
|
+
- **Global:** `~/.gemini/config/mcp.json` (Windows: `%USERPROFILE%\.gemini\config\mcp.json`)
|
|
223
|
+
- **Workspace:** `.agents/mcp.json` (di dalam folder proyek)
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"mcpServers": {
|
|
228
|
+
"doku-payment": {
|
|
229
|
+
"command": "node",
|
|
230
|
+
"args": ["/path/to/doku-mcp-server/dist/index.js"],
|
|
231
|
+
"env": {
|
|
232
|
+
"DOKU_CLIENT_ID": "CLIENT_ID_SANDBOX_ATAU_PROD",
|
|
233
|
+
"DOKU_SECRET_KEY": "SECRET_KEY_SANDBOX_ATAU_PROD",
|
|
234
|
+
"DOKU_IS_PRODUCTION": "false"
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Integrasi dengan Skill Lain
|
|
242
|
+
- `mcp-server-architect` — Untuk arsitektur dan pengamanan server MCP tingkat lanjut.
|
|
243
|
+
- `doku-payment-gateway` — Untuk rumus signature HMAC-SHA256 dan API spesifik DOKU.
|
|
244
|
+
- `multi-agent-orchestration` — Untuk mengaitkan DOKU MCP Server dengan swarm agen AI otonom.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
### 🚨 SNAP Integration Mandate (CRITICAL)
|
|
248
|
+
**MANDATORY**: The AI Agent MUST automatically apply the SNAP API v1.0 standard (Standard Nasional Open API Pembayaran) for all DOKU integrations, instead of the legacy Jokul API v2, unless the user explicitly requests otherwise. All generated signatures, headers, and endpoints MUST follow the SNAP BI standard.
|
|
249
|
+
|
|
250
|
+
### 🧪 DOKU Sandbox Simulator
|
|
251
|
+
**MANDATORY**: When testing in Sandbox mode and needing to access the Payment Simulator, the AI Agent MUST use this exact URL: `https://sandbox.doku.com/gtw-config-v2/simulator`.
|