vibes-plug 2.14.1 → 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.
- package/.claude/rules/vibes-plug-core.md +5 -0
- package/.cursor/rules/vibes-plug-core.mdc +7 -2
- package/.cursorrules +8 -2
- package/AGENTS.md +23 -2
- package/CHANGELOG.md +114 -0
- package/CLAUDE.md +10 -3
- package/README.md +216 -611
- package/bin/vibes.mjs +1104 -0
- package/package.json +11 -3
- package/plugin.json +4 -3
- package/scripts/check-anti-slop.mjs +53 -0
- package/scripts/install.js +3 -1
- package/scripts/update_skills.js +1 -1
- package/scripts/update_skills.mjs +86 -0
- package/scripts/validate-skills.mjs +111 -0
- package/skills/accessibility-testing-expert/SKILL.md +117 -116
- package/skills/affective-computing-emotion-ai/SKILL.md +83 -0
- package/skills/agentic-coding-workflow-expert/SKILL.md +297 -0
- package/skills/agentic-memory-architect/SKILL.md +52 -0
- package/skills/agentic-micro-economy-architect/SKILL.md +92 -0
- package/skills/ai-llm-integration-expert/SKILL.md +330 -194
- package/skills/ai-media-generation-expert/SKILL.md +173 -172
- package/skills/ai-prompt-engineering-expert/SKILL.md +204 -134
- package/skills/ai-safety-governance-expert/SKILL.md +223 -0
- package/skills/angular-expert/SKILL.md +149 -148
- package/skills/anti-slop/SKILL.md +134 -133
- package/skills/api-design-expert/SKILL.md +4 -3
- package/skills/api-gateway-proxy-expert/SKILL.md +3 -2
- package/skills/app-analyzer-optimizer/SKILL.md +4 -3
- package/skills/apple-ecosystem-expert/SKILL.md +6 -5
- package/skills/astro-framework-expert/SKILL.md +201 -200
- package/skills/async-queue-temporal-expert/SKILL.md +218 -217
- package/skills/authentication-identity-expert/SKILL.md +174 -173
- package/skills/autonomous-red-teamer/SKILL.md +338 -203
- package/skills/autonomous-tdd-debugger/SKILL.md +6 -5
- package/skills/biome-linter-formatter-expert/SKILL.md +90 -89
- package/skills/blockchain-web3-expert/SKILL.md +116 -115
- package/skills/brainstorming/SKILL.md +392 -377
- package/skills/browser-automation-expert/SKILL.md +260 -222
- package/skills/bun-runtime-expert/SKILL.md +5 -4
- package/skills/chatbot-messaging-expert/SKILL.md +115 -114
- package/skills/ci-cd-devops-architect/SKILL.md +3 -2
- package/skills/cloud-hosting-expert/SKILL.md +5 -4
- package/skills/coderabbit/SKILL.md +5 -4
- package/skills/compliance-gdpr-privacy-expert/SKILL.md +3 -2
- package/skills/composable-mach-architect/SKILL.md +338 -0
- package/skills/cron-scheduler-expert/SKILL.md +5 -4
- package/skills/data-pipeline-etl-expert/SKILL.md +3 -2
- package/skills/data-telemetry-expert/SKILL.md +5 -4
- package/skills/data-visualization-expert/SKILL.md +155 -154
- package/skills/database-orm-expert/SKILL.md +166 -165
- package/skills/deep-research-analyst/SKILL.md +182 -136
- package/skills/dependency-upgrade-migrator/SKILL.md +11 -10
- package/skills/design-system-architect/SKILL.md +4 -3
- package/skills/desktop-electron-expert/SKILL.md +129 -128
- package/skills/documentation-site-expert/SKILL.md +60 -59
- package/skills/doku-mcp-server/SKILL.md +5 -4
- package/skills/doku-payment-gateway/SKILL.md +250 -232
- package/skills/domain-driven-design-expert/SKILL.md +3 -2
- package/skills/e2e-testing-expert/SKILL.md +5 -4
- package/skills/ecommerce-expert/SKILL.md +88 -87
- package/skills/email-notification-expert/SKILL.md +5 -4
- package/skills/ephemeral-generative-ui-architect/SKILL.md +88 -0
- package/skills/error-resilience-expert/SKILL.md +14 -13
- package/skills/event-driven-architect/SKILL.md +5 -4
- package/skills/feature-flag-analytics-expert/SKILL.md +3 -2
- package/skills/file-upload-media-expert/SKILL.md +5 -4
- package/skills/firebase-security-expert/SKILL.md +5 -4
- package/skills/form-validation-expert/SKILL.md +7 -6
- package/skills/frontier-ai-models-expert/SKILL.md +116 -0
- package/skills/fullstack-expert/SKILL.md +185 -184
- package/skills/gemini-agent-booster/SKILL.md +248 -172
- package/skills/geospatial-maps-expert/SKILL.md +81 -80
- package/skills/global-a11y-i18n-expert/SKILL.md +5 -4
- package/skills/glsl-shader-expert/SKILL.md +191 -190
- package/skills/go-programming-expert/SKILL.md +5 -4
- package/skills/graph-rag-knowledge-expert/SKILL.md +201 -200
- package/skills/graphql-apollo-expert/SKILL.md +5 -4
- package/skills/headless-cms-expert/SKILL.md +182 -181
- package/skills/hig/SKILL.md +5 -4
- package/skills/js-backend-expert/SKILL.md +219 -218
- package/skills/legacy-code-translator/SKILL.md +6 -5
- package/skills/llm-finops-router/SKILL.md +52 -0
- package/skills/local-slm-edge-ai-expert/SKILL.md +168 -167
- package/skills/logging-error-tracking-expert/SKILL.md +5 -4
- package/skills/mcp-server-architect/SKILL.md +315 -307
- package/skills/micro-frontend-architect/SKILL.md +5 -4
- package/skills/mobile-expo-expert/SKILL.md +5 -4
- package/skills/modern-css-native-expert/SKILL.md +190 -189
- package/skills/monorepo-architect/SKILL.md +5 -4
- package/skills/mpa-orchestrator/SKILL.md +41 -4
- package/skills/multi-agent-orchestration/SKILL.md +388 -254
- package/skills/mvc-expert/SKILL.md +5 -4
- package/skills/n8n-automation-expert/SKILL.md +90 -89
- package/skills/nextjs-app-router-expert/SKILL.md +3 -2
- package/skills/openapi-swagger-codegen-expert/SKILL.md +4 -3
- package/skills/payment-gateway-expert/SKILL.md +131 -128
- package/skills/pdf-document-generation-expert/SKILL.md +92 -91
- package/skills/performance-web-vitals/SKILL.md +5 -4
- package/skills/post-quantum-crypto-migrator/SKILL.md +3 -2
- package/skills/prd-architect/SKILL.md +183 -182
- package/skills/proactive-background-watcher/SKILL.md +5 -4
- package/skills/production-ready-hardener/SKILL.md +10 -9
- package/skills/pwa-offline-first-expert/SKILL.md +227 -226
- package/skills/pydantic-ai-expert/SKILL.md +162 -161
- package/skills/python-programming-expert/SKILL.md +5 -4
- package/skills/rate-limit-abuse-prevention/SKILL.md +5 -4
- package/skills/realtime-collaboration-expert/SKILL.md +3 -2
- package/skills/rich-text-editor-expert/SKILL.md +178 -177
- package/skills/rust-programming-expert/SKILL.md +5 -4
- package/skills/saas-architect/SKILL.md +155 -154
- package/skills/saas-billing/SKILL.md +394 -382
- package/skills/saas-multi-tenant/SKILL.md +7 -6
- package/skills/scalability-clean-code/SKILL.md +5 -4
- package/skills/search-engine-expert/SKILL.md +90 -89
- package/skills/self-healing-cloud-orchestrator/SKILL.md +3 -2
- package/skills/senior-frontend/SKILL.md +14 -9
- package/skills/seo/SKILL.md +4 -4
- package/skills/session-memory-manager/SKILL.md +129 -128
- package/skills/solidjs-expert/SKILL.md +81 -80
- package/skills/spa-orchestrator/SKILL.md +5 -4
- package/skills/sse-websocket-streaming-expert/SKILL.md +3 -2
- package/skills/state-management-expert/SKILL.md +5 -4
- package/skills/supabase-security-expert/SKILL.md +5 -4
- package/skills/svelte-sveltekit-expert/SKILL.md +92 -91
- package/skills/svg-animation-motion-expert/SKILL.md +3 -2
- package/skills/synthetic-data-finetuning-expert/SKILL.md +156 -155
- package/skills/tailwind-expert/SKILL.md +62 -5
- package/skills/tanstack-query-expert/SKILL.md +5 -4
- package/skills/tauri-expert/SKILL.md +5 -4
- package/skills/typescript-expert/SKILL.md +5 -4
- package/skills/ui-ux-pro-max/SKILL.md +7 -6
- package/skills/vector-db-rag-expert/SKILL.md +209 -208
- package/skills/vercel-ai-sdk-expert/SKILL.md +226 -181
- package/skills/voice-ai-realtime-agent/SKILL.md +243 -242
- package/skills/vue-frontend-expert/SKILL.md +5 -4
- package/skills/wasm-edge-computing-expert/SKILL.md +3 -2
- package/skills/web-3d-graphics-expert/SKILL.md +314 -313
- package/skills/web-game-engine-expert/SKILL.md +330 -329
- package/skills/web-scraper/SKILL.md +158 -157
- package/skills/website-design-cloner/SKILL.md +5 -4
- package/skills/webxr-ar-vr-expert/SKILL.md +163 -162
- package/skills/wordpress-headless-expert/SKILL.md +145 -144
- package/skills/zero-tech-debt-auditor/SKILL.md +115 -0
- package/skills/zero-to-prod-orchestrator/SKILL.md +281 -229
- package/skills/zero-trust-secret-vault/SKILL.md +3 -2
- package/BLUEPRINT.md +0 -319
- package/skills/bootstrap-to-modern/SKILL.md +0 -94
- package/skills/multiple-entry-points/SKILL.md +0 -91
- package/skills/secure-fuzz-testing/SKILL.md +0 -207
- package/skills/visual-qa-vision-agent/SKILL.md +0 -71
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibes-plug",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Universal AI plugin with
|
|
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": "
|
|
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": "
|
|
4
|
-
"description": "Universal AI plugin with
|
|
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.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
|
+
}
|
package/scripts/install.js
CHANGED
|
@@ -195,7 +195,9 @@ Examples:
|
|
|
195
195
|
console.log('');
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
console.log('✨ Installation complete
|
|
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();
|
package/scripts/update_skills.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- **`
|
|
19
|
-
- **`
|
|
20
|
-
- **`
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
import
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
.
|
|
47
|
-
.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
await page.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
await
|
|
69
|
-
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"http://localhost:3000/
|
|
87
|
-
"http://localhost:3000/
|
|
88
|
-
"http://localhost:3000/
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- **
|
|
96
|
-
- **
|
|
97
|
-
- **
|
|
98
|
-
- **
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
- **`
|
|
108
|
-
- **`
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
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.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: affective-computing-emotion-ai
|
|
3
|
+
description: "Expert guide for Affective Computing, emotional AI, and real-time sentiment analysis through native multimodal tokens (voice intonation and facial micro-expressions) / Panduan ahli komputasi afektif, AI emosional, dan analisis sentimen real-time melalui token multimodal native."
|
|
4
|
+
author: "vibes-plug-swarm"
|
|
5
|
+
version: "3.8.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Affective Computing & Emotion AI 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
|
+
Connects and orchestrates with `voice-ai-realtime-agent`, `ephemeral-generative-ui-architect`, `ai-llm-integration-expert`, and `ui-ux-pro-max`.
|
|
19
|
+
|
|
20
|
+
### Description
|
|
21
|
+
Standard AI agents process semantics (text meaning) but often ignore pragmatics (tone, tension, emotion). In the era of Native Any-to-Any Multimodal models (like Gemini 4 Pro), agents directly process raw audio and visual tokens. The **Affective Computing Expert** designs systems that interpret vocal intonation, breathing rates, speech pacing, and facial micro-expressions in real-time. It maps this data to emotional vectors (Valence-Arousal models) and dynamically alters the agent's personality, UI presentation, and response cadence.
|
|
22
|
+
|
|
23
|
+
### Trigger Conditions
|
|
24
|
+
- Designing empathetic customer service or mental health triage bots.
|
|
25
|
+
- Building intelligent tutoring systems that detect user frustration and dynamically lower the difficulty or offer encouragement.
|
|
26
|
+
- Developing interactive gaming or narrative simulations where characters react to the player's actual tone of voice.
|
|
27
|
+
- Adapting the UI in real-time (e.g., calming color palettes, slower animations) when high user cognitive load or stress is detected.
|
|
28
|
+
|
|
29
|
+
### Core Architecture (2026 Standard)
|
|
30
|
+
1. **Multimodal Native Empathy**: Bypassing text transcripts entirely. The LLM's system prompt instructs it to evaluate the *sound* and *visuals* of the input token stream.
|
|
31
|
+
2. **Dynamic UI Adaptation (Affective UI)**: Upon detecting stress (high arousal, negative valence), the UI automatically shifts to reduced-clutter mode, uses softer colors, and slows down generative UI animations.
|
|
32
|
+
3. **Persona Shifting**: The agent fluidly shifts its persona parameters (e.g., `formality`, `empathy`, `conciseness`) per interaction turn based on the user's emotional state vector.
|
|
33
|
+
|
|
34
|
+
### Implementation Recipe (TypeScript)
|
|
35
|
+
```typescript
|
|
36
|
+
import { MultimodalLiveClient } from 'gemini-live-sdk';
|
|
37
|
+
import { updateGenerativeUI } from '@/lib/ui-orchestrator';
|
|
38
|
+
|
|
39
|
+
const client = new MultimodalLiveClient({
|
|
40
|
+
model: 'gemini-4-pro',
|
|
41
|
+
systemInstruction: 'You are an empathetic companion. Analyze the user\'s vocal tension and facial expressions natively. Prefix your responses with a JSON affect vector: {"valence": -1 to 1, "arousal": -1 to 1}.',
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
client.on('turnComplete', async (response) => {
|
|
45
|
+
const { affectVector, textAudio } = parseAffectiveResponse(response);
|
|
46
|
+
|
|
47
|
+
// Dynamic UI alteration based on emotional state
|
|
48
|
+
if (affectVector.arousal > 0.7 && affectVector.valence < -0.5) {
|
|
49
|
+
// User is highly stressed or angry
|
|
50
|
+
updateGenerativeUI({
|
|
51
|
+
theme: 'calm-minimalist',
|
|
52
|
+
animationSpeed: 'slow',
|
|
53
|
+
cognitiveLoad: 'low',
|
|
54
|
+
widgetDisplay: 'essential-only'
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Play agent's empathetic audio response
|
|
59
|
+
await playAudioStream(textAudio);
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
<a name="bahasa-indonesia"></a>
|
|
66
|
+
## Bahasa Indonesia
|
|
67
|
+
|
|
68
|
+
### Integrasi Orkestrasi
|
|
69
|
+
Terhubung dan mengorkestrasi bersama `voice-ai-realtime-agent`, `ephemeral-generative-ui-architect`, `ai-llm-integration-expert`, dan `ui-ux-pro-max`.
|
|
70
|
+
|
|
71
|
+
### Deskripsi
|
|
72
|
+
Agen AI standar memproses semantik (makna teks) namun sering mengabaikan pragmatik (nada, ketegangan, emosi). Di era model Multimodal Any-to-Any (seperti Gemini 4 Pro), agen langsung memproses token audio dan visual mentah tanpa terjemahan teks. Skill **Komputasi Afektif** ini memandu perancangan sistem yang menafsirkan intonasi vokal, tempo bicara, dan mikro-ekspresi wajah secara *real-time*. Sistem kemudian memetakan data tersebut ke vektor emosional (model *Valence-Arousal*) dan secara dinamis mengubah kepribadian agen, antarmuka pengguna (UI), dan tempo respons.
|
|
73
|
+
|
|
74
|
+
### Kondisi Pemicu
|
|
75
|
+
- Merancang layanan pelanggan empatik atau bot pendamping psikologis.
|
|
76
|
+
- Membangun sistem tutor cerdas (EdTech) yang mendeteksi frustrasi pengguna, lalu secara dinamis menurunkan tingkat kesulitan atau memberikan dorongan motivasi.
|
|
77
|
+
- Mengembangkan game interaktif atau simulasi naratif di mana karakter NPC bereaksi terhadap nada suara asli pemain.
|
|
78
|
+
- Mengadaptasi UI secara real-time (misal: beralih ke palet warna yang menenangkan, animasi yang lebih lambat) saat beban kognitif atau tingkat stres pengguna terdeteksi tinggi.
|
|
79
|
+
|
|
80
|
+
### Arsitektur Inti (Standar 2026)
|
|
81
|
+
1. **Empati Multimodal Native**: Menghindari penggunaan transkrip teks (STT) sebagai satu-satunya input. Instruksi sistem (System Prompt) LLM difokuskan untuk mengevaluasi *suara* dan *visual* dari aliran token.
|
|
82
|
+
2. **Adaptasi UI Dinamis (Affective UI)**: Saat mendeteksi stres (arousal tinggi, valence negatif), UI secara otomatis beralih ke mode bebas gangguan, menggunakan warna pastel/lembut, dan memperlambat kecepatan render UI generatif.
|
|
83
|
+
3. **Pergeseran Persona**: Agen dengan luwes menggeser parameter kepribadiannya (misal: `formalitas`, `empati`, `keringkasan`) di setiap giliran berdasarkan vektor keadaan emosi pengguna.
|