vibes-plug 2.11.0 → 3.9.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.
Files changed (181) hide show
  1. package/.claude/rules/vibes-plug-core.md +5 -0
  2. package/.cursor/rules/vibes-plug-core.mdc +8 -3
  3. package/.cursorrules +9 -3
  4. package/AGENTS.md +25 -4
  5. package/CHANGELOG.md +151 -0
  6. package/CLAUDE.md +15 -8
  7. package/README.md +216 -641
  8. package/bin/vibes.mjs +1104 -0
  9. package/index.js +1 -1
  10. package/package.json +11 -3
  11. package/plugin.json +4 -3
  12. package/scripts/check-anti-slop.js +53 -0
  13. package/scripts/check-anti-slop.mjs +53 -0
  14. package/scripts/generate_swarm_gif.py +2 -2
  15. package/scripts/install.js +3 -1
  16. package/scripts/update_skills.js +1 -1
  17. package/scripts/update_skills.mjs +86 -0
  18. package/scripts/validate-skills.mjs +111 -0
  19. package/skills/accessibility-testing-expert/SKILL.md +117 -116
  20. package/skills/affective-computing-emotion-ai/SKILL.md +83 -0
  21. package/skills/agentic-coding-workflow-expert/SKILL.md +297 -0
  22. package/skills/agentic-memory-architect/SKILL.md +52 -0
  23. package/skills/agentic-micro-economy-architect/SKILL.md +92 -0
  24. package/skills/ai-llm-integration-expert/SKILL.md +330 -187
  25. package/skills/ai-media-generation-expert/SKILL.md +173 -172
  26. package/skills/ai-prompt-engineering-expert/SKILL.md +170 -50
  27. package/skills/ai-safety-governance-expert/SKILL.md +223 -0
  28. package/skills/angular-expert/SKILL.md +149 -148
  29. package/skills/anti-slop/SKILL.md +134 -0
  30. package/skills/api-design-expert/SKILL.md +4 -3
  31. package/skills/api-gateway-proxy-expert/SKILL.md +3 -2
  32. package/skills/app-analyzer-optimizer/SKILL.md +4 -3
  33. package/skills/apple-ecosystem-expert/SKILL.md +6 -5
  34. package/skills/astro-framework-expert/SKILL.md +201 -200
  35. package/skills/async-queue-temporal-expert/SKILL.md +218 -240
  36. package/skills/authentication-identity-expert/SKILL.md +79 -184
  37. package/skills/autonomous-red-teamer/SKILL.md +338 -203
  38. package/skills/autonomous-tdd-debugger/SKILL.md +6 -5
  39. package/skills/biome-linter-formatter-expert/SKILL.md +90 -89
  40. package/skills/blockchain-web3-expert/SKILL.md +116 -115
  41. package/skills/brainstorming/SKILL.md +392 -377
  42. package/skills/browser-automation-expert/SKILL.md +260 -222
  43. package/skills/bun-runtime-expert/SKILL.md +5 -4
  44. package/skills/chatbot-messaging-expert/SKILL.md +115 -114
  45. package/skills/ci-cd-devops-architect/SKILL.md +3 -2
  46. package/skills/cloud-hosting-expert/SKILL.md +5 -4
  47. package/skills/coderabbit/SKILL.md +5 -4
  48. package/skills/compliance-gdpr-privacy-expert/SKILL.md +3 -2
  49. package/skills/composable-mach-architect/SKILL.md +338 -0
  50. package/skills/cron-scheduler-expert/SKILL.md +5 -4
  51. package/skills/data-pipeline-etl-expert/SKILL.md +3 -2
  52. package/skills/data-telemetry-expert/SKILL.md +5 -4
  53. package/skills/data-visualization-expert/SKILL.md +155 -154
  54. package/skills/database-orm-expert/SKILL.md +102 -240
  55. package/skills/deep-research-analyst/SKILL.md +182 -0
  56. package/skills/dependency-upgrade-migrator/SKILL.md +11 -10
  57. package/skills/design-system-architect/SKILL.md +34 -3
  58. package/skills/desktop-electron-expert/SKILL.md +129 -128
  59. package/skills/documentation-site-expert/SKILL.md +60 -59
  60. package/skills/doku-mcp-server/SKILL.md +5 -4
  61. package/skills/doku-payment-gateway/SKILL.md +250 -232
  62. package/skills/domain-driven-design-expert/SKILL.md +3 -2
  63. package/skills/e2e-testing-expert/SKILL.md +5 -4
  64. package/skills/ecommerce-expert/SKILL.md +88 -87
  65. package/skills/email-notification-expert/SKILL.md +35 -7
  66. package/skills/ephemeral-generative-ui-architect/SKILL.md +88 -0
  67. package/skills/error-resilience-expert/SKILL.md +26 -4
  68. package/skills/event-driven-architect/SKILL.md +5 -4
  69. package/skills/feature-flag-analytics-expert/SKILL.md +3 -2
  70. package/skills/file-upload-media-expert/SKILL.md +5 -4
  71. package/skills/firebase-security-expert/SKILL.md +5 -4
  72. package/skills/form-validation-expert/SKILL.md +7 -6
  73. package/skills/frontier-ai-models-expert/SKILL.md +116 -0
  74. package/skills/fullstack-expert/SKILL.md +68 -144
  75. package/skills/gemini-agent-booster/SKILL.md +248 -172
  76. package/skills/geospatial-maps-expert/SKILL.md +81 -80
  77. package/skills/global-a11y-i18n-expert/SKILL.md +5 -4
  78. package/skills/glsl-shader-expert/SKILL.md +155 -71
  79. package/skills/go-programming-expert/SKILL.md +5 -4
  80. package/skills/graph-rag-knowledge-expert/SKILL.md +201 -159
  81. package/skills/graphql-apollo-expert/SKILL.md +5 -4
  82. package/skills/headless-cms-expert/SKILL.md +182 -181
  83. package/skills/hig/SKILL.md +5 -4
  84. package/skills/js-backend-expert/SKILL.md +219 -218
  85. package/skills/legacy-code-translator/SKILL.md +6 -5
  86. package/skills/llm-finops-router/SKILL.md +52 -0
  87. package/skills/local-slm-edge-ai-expert/SKILL.md +168 -167
  88. package/skills/logging-error-tracking-expert/SKILL.md +5 -4
  89. package/skills/mcp-server-architect/SKILL.md +316 -294
  90. package/skills/micro-frontend-architect/SKILL.md +5 -4
  91. package/skills/mobile-expo-expert/SKILL.md +5 -4
  92. package/skills/modern-css-native-expert/SKILL.md +190 -189
  93. package/skills/monorepo-architect/SKILL.md +5 -4
  94. package/skills/mpa-orchestrator/SKILL.md +41 -4
  95. package/skills/multi-agent-orchestration/SKILL.md +388 -254
  96. package/skills/mvc-expert/SKILL.md +5 -4
  97. package/skills/n8n-automation-expert/SKILL.md +90 -89
  98. package/skills/nextjs-app-router-expert/SKILL.md +3 -2
  99. package/skills/openapi-swagger-codegen-expert/SKILL.md +4 -3
  100. package/skills/payment-gateway-expert/SKILL.md +131 -128
  101. package/skills/pdf-document-generation-expert/SKILL.md +92 -91
  102. package/skills/performance-web-vitals/SKILL.md +5 -4
  103. package/skills/post-quantum-crypto-migrator/SKILL.md +3 -2
  104. package/skills/prd-architect/SKILL.md +85 -109
  105. package/skills/proactive-background-watcher/SKILL.md +5 -4
  106. package/skills/production-ready-hardener/SKILL.md +25 -27
  107. package/skills/pwa-offline-first-expert/SKILL.md +227 -185
  108. package/skills/pydantic-ai-expert/SKILL.md +162 -0
  109. package/skills/python-programming-expert/SKILL.md +5 -4
  110. package/skills/rate-limit-abuse-prevention/SKILL.md +5 -4
  111. package/skills/realtime-collaboration-expert/SKILL.md +3 -2
  112. package/skills/rich-text-editor-expert/SKILL.md +178 -177
  113. package/skills/rust-programming-expert/SKILL.md +5 -4
  114. package/skills/saas-architect/SKILL.md +155 -0
  115. package/skills/saas-billing/SKILL.md +394 -382
  116. package/skills/saas-multi-tenant/SKILL.md +7 -6
  117. package/skills/scalability-clean-code/SKILL.md +5 -4
  118. package/skills/search-engine-expert/SKILL.md +90 -89
  119. package/skills/self-healing-cloud-orchestrator/SKILL.md +3 -2
  120. package/skills/senior-frontend/SKILL.md +21 -18
  121. package/skills/senior-frontend/scripts/frontend_scaffolder.py +1 -1
  122. package/skills/seo/SKILL.md +4 -4
  123. package/skills/session-memory-manager/SKILL.md +129 -0
  124. package/skills/solidjs-expert/SKILL.md +81 -80
  125. package/skills/spa-orchestrator/SKILL.md +5 -4
  126. package/skills/sse-websocket-streaming-expert/SKILL.md +3 -2
  127. package/skills/state-management-expert/SKILL.md +5 -4
  128. package/skills/supabase-security-expert/SKILL.md +5 -4
  129. package/skills/svelte-sveltekit-expert/SKILL.md +92 -91
  130. package/skills/svg-animation-motion-expert/SKILL.md +3 -2
  131. package/skills/synthetic-data-finetuning-expert/SKILL.md +156 -0
  132. package/skills/tailwind-expert/SKILL.md +62 -5
  133. package/skills/tanstack-query-expert/SKILL.md +5 -4
  134. package/skills/tauri-expert/SKILL.md +5 -4
  135. package/skills/typescript-expert/SKILL.md +5 -4
  136. package/skills/ui-ux-pro-max/SKILL.md +7 -4
  137. package/skills/vector-db-rag-expert/SKILL.md +209 -208
  138. package/skills/vercel-ai-sdk-expert/SKILL.md +226 -0
  139. package/skills/voice-ai-realtime-agent/SKILL.md +243 -202
  140. package/skills/vue-frontend-expert/SKILL.md +5 -4
  141. package/skills/wasm-edge-computing-expert/SKILL.md +3 -2
  142. package/skills/web-3d-graphics-expert/SKILL.md +259 -82
  143. package/skills/web-game-engine-expert/SKILL.md +278 -50
  144. package/skills/web-scraper/SKILL.md +158 -157
  145. package/skills/website-design-cloner/SKILL.md +5 -4
  146. package/skills/webxr-ar-vr-expert/SKILL.md +105 -65
  147. package/skills/wordpress-headless-expert/SKILL.md +145 -144
  148. package/skills/zero-tech-debt-auditor/SKILL.md +115 -0
  149. package/skills/zero-to-prod-orchestrator/SKILL.md +281 -227
  150. package/skills/zero-trust-secret-vault/SKILL.md +3 -2
  151. package/BLUEPRINT.md +0 -309
  152. package/skills/ai-cost-token-optimizer/SKILL.md +0 -82
  153. package/skills/ai-evals-benchmark-expert/SKILL.md +0 -188
  154. package/skills/asisten-ramah/SKILL.md +0 -47
  155. package/skills/auto-doc-updater/SKILL.md +0 -220
  156. package/skills/autonomous-chaos-monkey/SKILL.md +0 -63
  157. package/skills/background-jobs-queue-expert/SKILL.md +0 -235
  158. package/skills/bootstrap-to-modern/SKILL.md +0 -94
  159. package/skills/database-migration-versioning-expert/SKILL.md +0 -90
  160. package/skills/edge-serverless-db-expert/SKILL.md +0 -99
  161. package/skills/mcp-client-orchestrator/SKILL.md +0 -76
  162. package/skills/mobile-push-notification-expert/SKILL.md +0 -71
  163. package/skills/monday-design-aesthetic/SKILL.md +0 -73
  164. package/skills/multiple-entry-points/SKILL.md +0 -91
  165. package/skills/project-context-mapper/SKILL.md +0 -85
  166. package/skills/saas-mvp-launcher/SKILL.md +0 -260
  167. package/skills/saas-transformer/SKILL.md +0 -500
  168. package/skills/saas-transformer/references/billing_integration_guide.md +0 -401
  169. package/skills/secure-fuzz-testing/SKILL.md +0 -207
  170. package/skills/self-evolving-memory-graph/SKILL.md +0 -91
  171. package/skills/session-context-loader/SKILL.md +0 -83
  172. package/skills/session-handoff-resume/SKILL.md +0 -164
  173. package/skills/skill-baru/SKILL.md +0 -178
  174. package/skills/supabase-migration/SKILL.md +0 -91
  175. package/skills/token-saver/SKILL.md +0 -119
  176. package/skills/ui-components-expert/SKILL.md +0 -166
  177. package/skills/vibe-code-gardener/SKILL.md +0 -181
  178. package/skills/visual-qa-vision-agent/SKILL.md +0 -71
  179. /package/skills/{saas-transformer → saas-architect}/references/feature_gating_patterns.md +0 -0
  180. /package/skills/{saas-transformer → saas-architect}/references/saas_transformation_checklist.md +0 -0
  181. /package/skills/{saas-transformer → saas-architect}/scripts/saas_transformation_scanner.py +0 -0
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Vibes Plug - Universal AI Plugin with 140+ Specialized Skills
2
+ * Vibes Plug - Universal AI Plugin with 145+ Specialized Skills
3
3
  * Platform support: Antigravity (AGY), Claude Code, and Cursor IDE
4
4
  */
5
5
 
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "vibes-plug",
3
- "version": "2.11.0",
4
- "description": "Universal AI plugin with 140+ specialized skills for Antigravity, Claude, and Cursor. Updated for the modern 2026 tech stack (React 19, Tailwind v4, Bun, Hono, Supabase Auth v3). Designed to support software development, UI/UX design, SEO optimization, and SaaS business strategies",
3
+ "version": "3.9.0",
4
+ "description": "Universal AI plugin with 131 specialized skills for Antigravity, Claude, and Cursor. Updated for the modern 2026 tech stack (React 19, Tailwind v4, Bun, Hono, AI Safety, CUA). Designed to support software development, UI/UX design, SEO optimization, and SaaS business strategies",
5
5
  "main": "index.js",
6
6
  "bin": {
7
- "vibes-plug": "./scripts/install.js"
7
+ "vibes-plug": "scripts/install.js",
8
+ "vibes": "bin/vibes.mjs"
8
9
  },
9
10
  "files": [
10
11
  "index.js",
@@ -27,10 +28,15 @@
27
28
  "scripts": {
28
29
  "test": "echo \"Error: no test specified\" && exit 1",
29
30
  "generate:gif": "python scripts/generate_swarm_gif.py",
31
+ "update-skills": "node scripts/update_skills.mjs",
32
+ "audit": "node scripts/check-anti-slop.mjs",
30
33
  "install-all": "node scripts/install.js --all",
31
34
  "install-claude": "node scripts/install.js --claude",
32
35
  "install-cursor": "node scripts/install.js --cursor"
33
36
  },
37
+ "dependencies": {
38
+ "@inquirer/prompts": "^7.0.0"
39
+ },
34
40
  "repository": {
35
41
  "type": "git",
36
42
  "url": "git+https://github.com/roedyrustam/vibes-plug.git"
@@ -59,3 +65,5 @@
59
65
  },
60
66
  "homepage": "https://github.com/roedyrustam/vibes-plug#readme"
61
67
  }
68
+
69
+
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vibes-plug",
3
- "version": "2.11.0",
4
- "description": "Universal AI plugin with 140+ specialized skills for Antigravity, Claude, and Cursor.",
3
+ "version": "3.9.0",
4
+ "description": "Universal AI plugin with 131 specialized skills for Antigravity, Claude, and Cursor.",
5
5
  "author": "Roedy Rustam",
6
6
  "license": "MIT",
7
7
  "repository": "https://github.com/roedyrustam/vibes-plug.git",
@@ -22,4 +22,5 @@
22
22
  "skillsDir": "skills/"
23
23
  }
24
24
  }
25
- }
25
+ }
26
+
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * scripts/check-anti-slop.js
4
+ * Automated Anti-AI Slop Validator for vibes-plug & user codebases.
5
+ */
6
+
7
+ const fs = require('fs');
8
+ const path = require('path');
9
+
10
+ const SLOP_PATTERNS = [
11
+ { name: 'Lazy Truncation Placeholder', regex: /\/\/\s*\.\.\.\s*(rest|code|implement|logic)/i },
12
+ { name: 'Unfinished TODO Stub', regex: /\/\/\s*TODO:\s*(implement|add logic|fill in|later)/i },
13
+ { name: 'Mock Data in Production', regex: /\/\/\s*mock data for now/i },
14
+ { name: 'Syntax Narration Comment', regex: /\/\/\s*(increment\s+\w+|return\s+(the\s+)?\w+|import\s+\w+\s+from)/i },
15
+ ];
16
+
17
+ const IGNORE_DIRS = ['node_modules', '.git', '.next', 'dist', 'build', 'artifacts', '.gemini'];
18
+
19
+ let slopCount = 0;
20
+
21
+ function scanDir(dir) {
22
+ if (!fs.existsSync(dir)) return;
23
+ const files = fs.readdirSync(dir);
24
+ for (const file of files) {
25
+ if (IGNORE_DIRS.includes(file)) continue;
26
+ const fullPath = path.join(dir, file);
27
+ const stat = fs.statSync(fullPath);
28
+ if (stat.isDirectory()) {
29
+ scanDir(fullPath);
30
+ } else if (/\.(ts|tsx|js|jsx|py|go|rs)$/.test(file) && !file.includes('check-anti-slop')) {
31
+ const content = fs.readFileSync(fullPath, 'utf8');
32
+ const lines = content.split('\n');
33
+ lines.forEach((line, index) => {
34
+ SLOP_PATTERNS.forEach(({ name, regex }) => {
35
+ if (regex.test(line)) {
36
+ console.error(`🚨 [AI SLOP DETECTED] ${fullPath}:${index + 1} (${name}) -> ${line.trim()}`);
37
+ slopCount++;
38
+ }
39
+ });
40
+ });
41
+ }
42
+ }
43
+ }
44
+
45
+ console.log('🔍 Scanning repository for AI slop and placeholder code...');
46
+ scanDir(process.cwd());
47
+
48
+ if (slopCount > 0) {
49
+ console.error(`\n❌ Failed: ${slopCount} AI slop violations detected. Purge placeholders before commit.`);
50
+ process.exit(1);
51
+ } else {
52
+ console.log('✅ Anti-Slop Audit Passed: Clean code, zero AI slop detected.');
53
+ }
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * scripts/check-anti-slop.mjs
4
+ * Automated Anti-AI Slop Validator for vibes-plug & user codebases.
5
+ */
6
+
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+
10
+ const SLOP_PATTERNS = [
11
+ { name: 'Lazy Truncation Placeholder', regex: /\/\/\s*\.\.\.\s*(rest|code|implement|logic)/i },
12
+ { name: 'Unfinished TODO Stub', regex: /\/\/\s*TODO:\s*(implement|add logic|fill in|later)/i },
13
+ { name: 'Mock Data in Production', regex: /\/\/\s*mock data for now/i },
14
+ { name: 'Syntax Narration Comment', regex: /\/\/\s*(increment\s+\w+|return\s+(the\s+)?\w+|import\s+\w+\s+from)/i },
15
+ ];
16
+
17
+ const IGNORE_DIRS = ['node_modules', '.git', '.next', 'dist', 'build', 'artifacts', '.gemini'];
18
+
19
+ let slopCount = 0;
20
+
21
+ function scanDir(dir) {
22
+ if (!fs.existsSync(dir)) return;
23
+ const files = fs.readdirSync(dir);
24
+ for (const file of files) {
25
+ if (IGNORE_DIRS.includes(file)) continue;
26
+ const fullPath = path.join(dir, file);
27
+ const stat = fs.statSync(fullPath);
28
+ if (stat.isDirectory()) {
29
+ scanDir(fullPath);
30
+ } else if (/\.(ts|tsx|js|jsx|mjs|py|go|rs)$/.test(file) && !file.includes('check-anti-slop')) {
31
+ const content = fs.readFileSync(fullPath, 'utf8');
32
+ const lines = content.split('\n');
33
+ lines.forEach((line, index) => {
34
+ SLOP_PATTERNS.forEach(({ name, regex }) => {
35
+ if (regex.test(line)) {
36
+ console.error(`🚨 [AI SLOP DETECTED] ${fullPath}:${index + 1} (${name}) -> ${line.trim()}`);
37
+ slopCount++;
38
+ }
39
+ });
40
+ });
41
+ }
42
+ }
43
+ }
44
+
45
+ console.log('🔍 Scanning repository for AI slop and placeholder code...');
46
+ scanDir(process.cwd());
47
+
48
+ if (slopCount > 0) {
49
+ console.error(`\n❌ Failed: ${slopCount} AI slop violations detected. Purge placeholders before commit.`);
50
+ process.exit(1);
51
+ } else {
52
+ console.log('✅ Anti-Slop Audit Passed: Clean code, zero AI slop detected.');
53
+ }
@@ -121,8 +121,8 @@ for frame_idx in range(NUM_FRAMES):
121
121
  draw.text((START_X + 20, 18), 'VIBES PLUG', fill='#38bdf8', font=font_title)
122
122
  draw.text((START_X + 135, 21), '— Universal Agentic Swarm Workflow (2026 Edition)', fill='#94a3b8', font=font_subtitle)
123
123
 
124
- # 140+ Skills Badge (Pill)
125
- badge_text = '140+ SKILLS ACTIVE'
124
+ # 145+ Skills Badge (Pill)
125
+ badge_text = '145+ SKILLS ACTIVE'
126
126
  badge_w, badge_h = 138, 24
127
127
  badge_x = START_X + TOTAL_CARDS_W - badge_w
128
128
  badge_y = 17
@@ -195,7 +195,9 @@ Examples:
195
195
  console.log('');
196
196
  }
197
197
 
198
- console.log('✨ Installation complete!\n');
198
+ console.log('✨ Installation complete!');
199
+ console.log('⚡ Vibes-Plug is now configured as the PRIMARY TRIGGER (Pemicu Utama).');
200
+ console.log('🔗 All 127+ skills are automatically synchronized across Antigravity, Claude, and Cursor!\n');
199
201
  }
200
202
 
201
203
  main();
@@ -62,7 +62,7 @@ function updateSkills() {
62
62
  content = content.replace(/Tailwind CSS(?: |\\u0026nbsp;| )v3/g, (match) => match.replace('v3', 'v4'));
63
63
  content = content.replace(/Tailwind(?: |\\u0026nbsp;| )v3/g, (match) => match.replace('v3', 'v4'));
64
64
  content = content.replace(/TanStack Query(?: |\\u0026nbsp;| )v4/g, (match) => match.replace('v4', 'v5'));
65
- content = content.replace(/Bun(?: |\\u0026nbsp;| )v1\.0/g, (match) => match.replace('v1.0', 'v1.1+'));
65
+ content = content.replace(/Bun(?: |\\u0026nbsp;| )v1\.0/g, (match) => match.replace('v1.0', 'v1.2+'));
66
66
 
67
67
  if (content !== originalContent) {
68
68
  fs.writeFileSync(filePath, content, 'utf-8');
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * scripts/update_skills.mjs
4
+ * Batch update skill files: fix encoding, standardize headers, bump tech versions.
5
+ */
6
+
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+ import { fileURLToPath } from 'url';
10
+
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+ const skillsDir = path.join(__dirname, '../skills');
14
+
15
+ function walk(dir) {
16
+ let results = [];
17
+ const list = fs.readdirSync(dir);
18
+ list.forEach(file => {
19
+ const fullPath = path.join(dir, file);
20
+ const stat = fs.statSync(fullPath);
21
+ if (stat && stat.isDirectory()) {
22
+ results = results.concat(walk(fullPath));
23
+ } else {
24
+ results.push(fullPath);
25
+ }
26
+ });
27
+ return results;
28
+ }
29
+
30
+ function updateSkills() {
31
+ const files = walk(skillsDir);
32
+
33
+ files.forEach(filePath => {
34
+ const ext = path.extname(filePath);
35
+ if (ext === '.md' || ext === '.csv' || ext === '.py') {
36
+ let content = fs.readFileSync(filePath, 'utf-8');
37
+ const originalContent = content;
38
+
39
+ if (ext === '.md') {
40
+ // Only clean frontmatter if it exists at the top of the file
41
+ if (content.startsWith('---')) {
42
+ const parts = content.split('---');
43
+ if (parts.length >= 3) {
44
+ let frontmatter = parts[1];
45
+ frontmatter = frontmatter.replace(/github:.*?\n/g, '');
46
+ frontmatter = frontmatter.replace(/risk:.*?\n/g, '');
47
+ frontmatter = frontmatter.replace(/source:.*?\n/g, '');
48
+ frontmatter = frontmatter.replace(/date_added:.*?\n/g, '');
49
+ parts[1] = frontmatter;
50
+ content = parts.join('---');
51
+ }
52
+ }
53
+
54
+ // Standardize headers
55
+ content = content.replace(/^## When to Use$/gm, '## Kondisi Pemicu / Trigger Conditions');
56
+
57
+ // Fix encoding issues from ui_ux_expert
58
+ content = content.replace(/🎯/g, '🎯');
59
+ content = content.replace(/🧠/g, '🧠');
60
+ content = content.replace(/🎨/g, '🎨');
61
+ content = content.replace(/ðŸ"±/g, '📱');
62
+ content = content.replace(/🧩/g, '🧩');
63
+ content = content.replace(/âš™ï¸ /g, '⚙️');
64
+ content = content.replace(/🚀/g, '🚀');
65
+ content = content.replace(/â Œ/g, '❌');
66
+ }
67
+
68
+ // Update technologies to keep them current
69
+ content = content.replace(/React(?: |\\u0026nbsp;| )18/g, m => m.replace('18', '19'));
70
+ content = content.replace(/Next\.js(?: |\\u0026nbsp;| )14/g, m => m.replace('14', '15'));
71
+ content = content.replace(/Tailwind CSS(?: |\\u0026nbsp;| )v3/g, m => m.replace('v3', 'v4'));
72
+ content = content.replace(/Tailwind(?: |\\u0026nbsp;| )v3/g, m => m.replace('v3', 'v4'));
73
+ content = content.replace(/TanStack Query(?: |\\u0026nbsp;| )v4/g, m => m.replace('v4', 'v5'));
74
+ content = content.replace(/Bun(?: |\\u0026nbsp;| )v1\.0/g, m => m.replace('v1.0', 'v1.2+'));
75
+
76
+ if (content !== originalContent) {
77
+ fs.writeFileSync(filePath, content, 'utf-8');
78
+ console.log(`✅ Updated: ${path.relative(skillsDir, filePath)}`);
79
+ }
80
+ }
81
+ });
82
+
83
+ console.log('\n🎉 Skills update complete.');
84
+ }
85
+
86
+ updateSkills();
@@ -0,0 +1,111 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+
4
+ const SKILLS_DIR = path.join(process.cwd(), 'skills');
5
+
6
+ const DEPRECATED_REFS = [
7
+ 'project-context-mapper',
8
+ 'ui-components-expert',
9
+ 'database-migration-versioning-expert',
10
+ 'supabase-migration',
11
+ 'auto-doc-updater',
12
+ 'session-handoff-resume',
13
+ 'session-context-loader'
14
+ ];
15
+
16
+ async function validateSkills() {
17
+ console.log('🔍 Starting Vibes-Plug Ecosystem Validation...\n');
18
+
19
+ try {
20
+ const entries = await fs.readdir(SKILLS_DIR, { withFileTypes: true });
21
+ const skillDirs = entries.filter(e => e.isDirectory());
22
+
23
+ let totalSkills = 0;
24
+ let passedSkills = 0;
25
+ let failedSkills = 0;
26
+ const errors = [];
27
+
28
+ for (const dir of skillDirs) {
29
+ totalSkills++;
30
+ const skillName = dir.name;
31
+ const skillPath = path.join(SKILLS_DIR, skillName, 'SKILL.md');
32
+
33
+ try {
34
+ const content = await fs.readFile(skillPath, 'utf8');
35
+ const skillErrors = [];
36
+
37
+ // 1. Check Frontmatter existence (ignore BOM)
38
+ const frontmatterMatch = content.match(/---\r?\n([\s\S]*?)\r?\n---/);
39
+ if (!frontmatterMatch) {
40
+ skillErrors.push('Missing YAML frontmatter');
41
+ } else {
42
+ const fm = frontmatterMatch[1];
43
+ if (!fm.includes('name:')) skillErrors.push('Missing "name" in frontmatter');
44
+ if (!fm.includes('description:')) skillErrors.push('Missing "description" in frontmatter');
45
+
46
+ const versionMatch = fm.match(/version:\s*"([^"]+)"/);
47
+ if (!versionMatch) {
48
+ skillErrors.push('Missing "version" tag (Rule: All skills must be 3.0.0+)');
49
+ } else {
50
+ const version = versionMatch[1];
51
+ const major = parseInt(version.split('.')[0], 10);
52
+ if (isNaN(major) || major < 3) {
53
+ skillErrors.push(`Version outdated: ${version} (expected >= 3.0.0)`);
54
+ }
55
+ }
56
+ }
57
+
58
+ // 2. Check for deprecated references
59
+ for (const ref of DEPRECATED_REFS) {
60
+ if (content.includes(ref)) {
61
+ skillErrors.push(`Contains deprecated reference: ${ref}`);
62
+ }
63
+ }
64
+
65
+ // 3. Check for Bilingual structure
66
+ const lowerContent = content.toLowerCase();
67
+ const hasEnglish = lowerContent.includes('english') || lowerContent.includes('inggris');
68
+ const hasIndo = lowerContent.includes('bahasa indonesia') || lowerContent.includes('indonesia');
69
+
70
+ if (!hasEnglish || !hasIndo) {
71
+ skillErrors.push('Missing bilingual sections (English & Bahasa Indonesia)');
72
+ }
73
+
74
+ if (skillErrors.length > 0) {
75
+ failedSkills++;
76
+ errors.push(`❌ ${skillName}:\n - ${skillErrors.join('\n - ')}`);
77
+ } else {
78
+ passedSkills++;
79
+ }
80
+
81
+ } catch (err) {
82
+ failedSkills++;
83
+ errors.push(`❌ ${skillName}:\n - Missing SKILL.md file`);
84
+ }
85
+ }
86
+
87
+ console.log(`📊 Validation Summary:`);
88
+ console.log(`----------------------`);
89
+ console.log(`Total Skills : ${totalSkills}`);
90
+ console.log(`✅ Passed : ${passedSkills}`);
91
+ console.log(`❌ Failed : ${failedSkills}\n`);
92
+
93
+ if (errors.length > 0) {
94
+ console.log('🚨 Issues Found:');
95
+ // Just print first 5 errors to avoid terminal spam
96
+ errors.slice(0, 10).forEach(e => console.log(e));
97
+ if(errors.length > 10) console.log(`... and ${errors.length - 10} more skills failed.`);
98
+ console.log('\n❌ CI Pipeline Failed! Please fix the errors above.');
99
+ process.exit(1);
100
+ } else {
101
+ console.log(`🎉 All ${totalSkills} skills passed strict validation! Ecosystem is perfectly healthy.`);
102
+ process.exit(0);
103
+ }
104
+
105
+ } catch (error) {
106
+ console.error('Failed to read skills directory:', error);
107
+ process.exit(1);
108
+ }
109
+ }
110
+
111
+ validateSkills();
@@ -1,116 +1,117 @@
1
- ---
2
- name: accessibility-testing-expert
3
- description: "Expert guide for automated and manual Web Accessibility (a11y) testing — axe-core, Pa11y, Playwright a11y, screen reader testing, and WCAG 2.2 Level AA/AAA compliance / Panduan ahli pengujian aksesibilitas web."
4
- author: "Roedy Rustam"
5
- ---
6
-
7
- # Accessibility Testing Expert (2026 Edition)
8
-
9
- [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
-
11
- ---
12
-
13
- <a name="english"></a>
14
- ## English
15
-
16
- ### Orchestration & Integration
17
- - **`global-a11y-i18n-expert`**: Core WCAG rules, ARIA patterns, and internationalization standards.
18
- - **`e2e-testing-expert`**: Integrating automated accessibility assertions into Playwright/Vitest CI suites.
19
- - **`ui-components-expert`**: Accessible component primitives (Radix UI, Base UI, ARIA patterns).
20
- - **`visual-qa-vision-agent`**: Visual audits for focus rings, contrast ratios, and layout flow.
21
-
22
- ### Description
23
- Production guide for automated, semi-automated, and manual web accessibility (a11y) testing. Covers WCAG 2.2 Level AA/AAA compliance validation using `@axe-core/playwright`, Pa11y, Google Lighthouse CI, screen reader verification (NVDA, VoiceOver), keyboard navigation audits, focus management, and color contrast compliance.
24
-
25
- ### Trigger Conditions
26
- - Running automated accessibility test suites in CI/CD pipelines.
27
- - Auditing web apps for WCAG 2.1 / 2.2 Level AA compliance and legal accessibility requirements (ADA, EAA).
28
- - Debugging keyboard traps, missing ARIA labels, or broken screen reader navigation.
29
- - Writing test cases for focus trapping in modals and custom dialogs.
30
-
31
- ---
32
-
33
- ### Core Testing Workflows
34
-
35
- #### 1. Automated A11y Testing with Playwright & Axe-Core
36
- ```typescript
37
- import { test, expect } from '@playwright/test';
38
- import AxeBuilder from '@axe-core/playwright';
39
-
40
- test.describe('Accessibility Automated Audits', () => {
41
- test('homepage should have zero critical or serious a11y violations', async ({ page }) => {
42
- await page.goto('/');
43
-
44
- const accessibilityScanResults = await new AxeBuilder({ page })
45
- .withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
46
- .disableRules(['color-contrast']) // If tested separately
47
- .analyze();
48
-
49
- expect(accessibilityScanResults.violations).toEqual([]);
50
- });
51
-
52
- test('modal dialog should trap focus and pass a11y audit', async ({ page }) => {
53
- await page.goto('/dashboard');
54
- await page.click('button#open-modal');
55
-
56
- // Verify modal is open and focused
57
- const modal = page.locator('[role="dialog"]');
58
- await expect(modal).toBeVisible();
59
-
60
- const modalAudit = await new AxeBuilder({ page })
61
- .include('[role="dialog"]')
62
- .analyze();
63
-
64
- expect(modalAudit.violations).toEqual([]);
65
-
66
- // Verify keyboard escape closes modal
67
- await page.keyboard.press('Escape');
68
- await expect(modal).toBeHidden();
69
- });
70
- });
71
- ```
72
-
73
- #### 2. Automated Pa11y CI Configuration (`.pa11yci.json`)
74
- ```json
75
- {
76
- "defaults": {
77
- "standard": "WCAG2AA",
78
- "timeout": 15000,
79
- "runners": ["axe", "htmlcs"],
80
- "ignore": [
81
- "WCAG2AA.Principle1.Guideline1_4.1_4_3.G18.Abs"
82
- ]
83
- },
84
- "urls": [
85
- "http://localhost:3000/",
86
- "http://localhost:3000/login",
87
- "http://localhost:3000/pricing",
88
- "http://localhost:3000/docs"
89
- ]
90
- }
91
- ```
92
-
93
- #### 3. Keyboard & Screen Reader Verification Checklist
94
- - **Tab Navigation**: All interactive elements (`<button>`, `<a>`, `<input>`) can receive focus in logical reading order.
95
- - **Focus Indicators**: Visible, high-contrast focus rings (`outline: 2px solid var(--focus-color)` with `outline-offset`).
96
- - **No Keyboard Traps**: Focus can enter and leave components using only `Tab`, `Shift+Tab`, and `Esc`.
97
- - **Landmarks**: Proper semantic tags (`<header>`, `<nav>`, `<main>`, `<footer>`, `<aside>`).
98
- - **ARIA Attributes**: `aria-expanded`, `aria-controls`, `aria-haspopup`, and `aria-live` updated dynamically.
99
-
100
- ---
101
-
102
- <a name="bahasa-indonesia"></a>
103
- ## Bahasa Indonesia
104
-
105
- ### Integrasi Orkestrasi
106
- - **`global-a11y-i18n-expert`**: Pedoman standar WCAG, pola ARIA, dan aksesibilitas internasional.
107
- - **`e2e-testing-expert`**: Integrasi pengujian aksesibilitas otomatis ke pipeline Playwright CI.
108
- - **`ui-components-expert`**: Validasi aksesibilitas komponen headless dan desain UI.
109
-
110
- ### Deskripsi
111
- Panduan produksi untuk pengujian aksesibilitas web (a11y) otomatis dan manual. Memastikan kepatuhan terhadap standar WCAG 2.2 Level AA/AAA menggunakan `@axe-core/playwright`, Pa11y, Lighthouse CI, pengujian screen reader, navigasi keyboard, dan kontras warna.
112
-
113
- ### Kondisi Pemicu
114
- - Menjalankan audit aksesibilitas otomatis di pipeline CI/CD.
115
- - Memverifikasi kepatuhan hukum aksesibilitas (WCAG 2.2, ADA, EAA).
116
- - Menguji alur keyboard dan pembaca layar (screen reader) pada komponen kompleks seperti modal dan dropdown.
1
+ ---
2
+ name: accessibility-testing-expert
3
+ description: "Expert guide for automated and manual Web Accessibility (a11y) testing — axe-core, Pa11y, Playwright a11y, screen reader testing, and WCAG 2.2 Level AA/AAA compliance / Panduan ahli pengujian aksesibilitas web."
4
+ author: "Roedy Rustam"
5
+ version: "3.0.0"
6
+ ---
7
+
8
+ # Accessibility Testing Expert (2026 Edition)
9
+
10
+ [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
11
+
12
+ ---
13
+
14
+ <a name="english"></a>
15
+ ## English
16
+
17
+ ### Orchestration & Integration
18
+ - **`global-a11y-i18n-expert`**: Core WCAG rules, ARIA patterns, and internationalization standards.
19
+ - **`e2e-testing-expert`**: Integrating automated accessibility assertions into Playwright/Vitest CI suites.
20
+ - **`design-system-architect, senior-frontend`**: Accessible component primitives (Radix UI, Base UI, ARIA patterns).
21
+ - **`visual-qa-vision-agent`**: Visual audits for focus rings, contrast ratios, and layout flow.
22
+
23
+ ### Description
24
+ Production guide for automated, semi-automated, and manual web accessibility (a11y) testing. Covers WCAG 2.2 Level AA/AAA compliance validation using `@axe-core/playwright`, Pa11y, Google Lighthouse CI, screen reader verification (NVDA, VoiceOver), keyboard navigation audits, focus management, and color contrast compliance.
25
+
26
+ ### Trigger Conditions
27
+ - Running automated accessibility test suites in CI/CD pipelines.
28
+ - Auditing web apps for WCAG 2.1 / 2.2 Level AA compliance and legal accessibility requirements (ADA, EAA).
29
+ - Debugging keyboard traps, missing ARIA labels, or broken screen reader navigation.
30
+ - Writing test cases for focus trapping in modals and custom dialogs.
31
+
32
+ ---
33
+
34
+ ### Core Testing Workflows
35
+
36
+ #### 1. Automated A11y Testing with Playwright & Axe-Core
37
+ ```typescript
38
+ import { test, expect } from '@playwright/test';
39
+ import AxeBuilder from '@axe-core/playwright';
40
+
41
+ test.describe('Accessibility Automated Audits', () => {
42
+ test('homepage should have zero critical or serious a11y violations', async ({ page }) => {
43
+ await page.goto('/');
44
+
45
+ const accessibilityScanResults = await new AxeBuilder({ page })
46
+ .withTags(['wcag2a', 'wcag2aa', 'wcag22aa'])
47
+ .disableRules(['color-contrast']) // If tested separately
48
+ .analyze();
49
+
50
+ expect(accessibilityScanResults.violations).toEqual([]);
51
+ });
52
+
53
+ test('modal dialog should trap focus and pass a11y audit', async ({ page }) => {
54
+ await page.goto('/dashboard');
55
+ await page.click('button#open-modal');
56
+
57
+ // Verify modal is open and focused
58
+ const modal = page.locator('[role="dialog"]');
59
+ await expect(modal).toBeVisible();
60
+
61
+ const modalAudit = await new AxeBuilder({ page })
62
+ .include('[role="dialog"]')
63
+ .analyze();
64
+
65
+ expect(modalAudit.violations).toEqual([]);
66
+
67
+ // Verify keyboard escape closes modal
68
+ await page.keyboard.press('Escape');
69
+ await expect(modal).toBeHidden();
70
+ });
71
+ });
72
+ ```
73
+
74
+ #### 2. Automated Pa11y CI Configuration (`.pa11yci.json`)
75
+ ```json
76
+ {
77
+ "defaults": {
78
+ "standard": "WCAG2AA",
79
+ "timeout": 15000,
80
+ "runners": ["axe", "htmlcs"],
81
+ "ignore": [
82
+ "WCAG2AA.Principle1.Guideline1_4.1_4_3.G18.Abs"
83
+ ]
84
+ },
85
+ "urls": [
86
+ "http://localhost:3000/",
87
+ "http://localhost:3000/login",
88
+ "http://localhost:3000/pricing",
89
+ "http://localhost:3000/docs"
90
+ ]
91
+ }
92
+ ```
93
+
94
+ #### 3. Keyboard & Screen Reader Verification Checklist
95
+ - **Tab Navigation**: All interactive elements (`<button>`, `<a>`, `<input>`) can receive focus in logical reading order.
96
+ - **Focus Indicators**: Visible, high-contrast focus rings (`outline: 2px solid var(--focus-color)` with `outline-offset`).
97
+ - **No Keyboard Traps**: Focus can enter and leave components using only `Tab`, `Shift+Tab`, and `Esc`.
98
+ - **Landmarks**: Proper semantic tags (`<header>`, `<nav>`, `<main>`, `<footer>`, `<aside>`).
99
+ - **ARIA Attributes**: `aria-expanded`, `aria-controls`, `aria-haspopup`, and `aria-live` updated dynamically.
100
+
101
+ ---
102
+
103
+ <a name="bahasa-indonesia"></a>
104
+ ## Bahasa Indonesia
105
+
106
+ ### Integrasi Orkestrasi
107
+ - **`global-a11y-i18n-expert`**: Pedoman standar WCAG, pola ARIA, dan aksesibilitas internasional.
108
+ - **`e2e-testing-expert`**: Integrasi pengujian aksesibilitas otomatis ke pipeline Playwright CI.
109
+ - **`design-system-architect, senior-frontend`**: Validasi aksesibilitas komponen headless dan desain UI.
110
+
111
+ ### Deskripsi
112
+ Panduan produksi untuk pengujian aksesibilitas web (a11y) otomatis dan manual. Memastikan kepatuhan terhadap standar WCAG 2.2 Level AA/AAA menggunakan `@axe-core/playwright`, Pa11y, Lighthouse CI, pengujian screen reader, navigasi keyboard, dan kontras warna.
113
+
114
+ ### Kondisi Pemicu
115
+ - Menjalankan audit aksesibilitas otomatis di pipeline CI/CD.
116
+ - Memverifikasi kepatuhan hukum aksesibilitas (WCAG 2.2, ADA, EAA).
117
+ - Menguji alur keyboard dan pembaca layar (screen reader) pada komponen kompleks seperti modal dan dropdown.