vibes-plug 2.5.0 → 2.11.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 +32 -0
- package/.cursor/rules/vibes-plug-core.mdc +51 -0
- package/.cursorrules +42 -0
- package/AGENTS.md +37 -7
- package/BLUEPRINT.md +309 -217
- package/CHANGELOG.md +133 -1
- package/CLAUDE.md +70 -0
- package/LICENSE +1 -1
- package/README.md +641 -415
- package/index.js +19 -0
- package/package.json +44 -8
- package/plugin.json +24 -7
- package/scripts/generate_swarm_gif.py +295 -0
- package/scripts/install.js +201 -0
- package/skills/accessibility-testing-expert/SKILL.md +116 -0
- package/skills/ai-cost-token-optimizer/SKILL.md +82 -52
- package/skills/ai-evals-benchmark-expert/SKILL.md +188 -0
- package/skills/ai-llm-integration-expert/SKILL.md +185 -178
- package/skills/ai-media-generation-expert/SKILL.md +172 -0
- package/skills/ai-prompt-engineering-expert/SKILL.md +84 -0
- package/skills/angular-expert/SKILL.md +148 -0
- package/skills/api-design-expert/SKILL.md +6 -3
- package/skills/api-gateway-proxy-expert/SKILL.md +81 -0
- package/skills/app-analyzer-optimizer/SKILL.md +6 -3
- package/skills/apple-ecosystem-expert/SKILL.md +144 -141
- package/skills/{asisten_ramah → asisten-ramah}/SKILL.md +7 -1
- package/skills/astro-framework-expert/SKILL.md +200 -0
- package/skills/async-queue-temporal-expert/SKILL.md +210 -24
- package/skills/authentication-identity-expert/SKILL.md +278 -275
- package/skills/auto-doc-updater/SKILL.md +7 -1
- package/skills/autonomous-chaos-monkey/SKILL.md +63 -63
- package/skills/autonomous-red-teamer/SKILL.md +172 -28
- package/skills/autonomous-tdd-debugger/SKILL.md +70 -64
- package/skills/background-jobs-queue-expert/SKILL.md +235 -0
- package/skills/biome-linter-formatter-expert/SKILL.md +89 -0
- package/skills/blockchain-web3-expert/SKILL.md +115 -0
- package/skills/bootstrap-to-modern/SKILL.md +9 -6
- package/skills/brainstorming/SKILL.md +58 -50
- package/skills/browser-automation-expert/SKILL.md +197 -21
- package/skills/bun-runtime-expert/SKILL.md +7 -1
- package/skills/chatbot-messaging-expert/SKILL.md +114 -0
- package/skills/ci-cd-devops-architect/SKILL.md +45 -36
- package/skills/cloud-hosting-expert/SKILL.md +7 -1
- package/skills/coderabbit/SKILL.md +7 -1
- package/skills/compliance-gdpr-privacy-expert/SKILL.md +85 -0
- package/skills/cron-scheduler-expert/SKILL.md +303 -297
- package/skills/data-pipeline-etl-expert/SKILL.md +84 -0
- package/skills/data-telemetry-expert/SKILL.md +7 -1
- package/skills/data-visualization-expert/SKILL.md +154 -0
- package/skills/database-migration-versioning-expert/SKILL.md +90 -0
- package/skills/database-orm-expert/SKILL.md +13 -3
- package/skills/dependency-upgrade-migrator/SKILL.md +300 -294
- package/skills/design-system-architect/SKILL.md +278 -259
- package/skills/desktop-electron-expert/SKILL.md +128 -0
- package/skills/documentation-site-expert/SKILL.md +59 -0
- package/skills/doku-mcp-server/SKILL.md +7 -1
- package/skills/doku-payment-gateway/SKILL.md +7 -1
- package/skills/domain-driven-design-expert/SKILL.md +82 -0
- package/skills/e2e-testing-expert/SKILL.md +7 -1
- package/skills/ecommerce-expert/SKILL.md +87 -0
- package/skills/edge-serverless-db-expert/SKILL.md +98 -42
- package/skills/email-notification-expert/SKILL.md +367 -361
- package/skills/error-resilience-expert/SKILL.md +485 -479
- package/skills/event-driven-architect/SKILL.md +7 -1
- package/skills/feature-flag-analytics-expert/SKILL.md +65 -45
- package/skills/file-upload-media-expert/SKILL.md +436 -430
- package/skills/firebase-security-expert/SKILL.md +7 -1
- package/skills/form-validation-expert/SKILL.md +406 -400
- package/skills/fullstack-expert/SKILL.md +60 -1
- package/skills/gemini-agent-booster/SKILL.md +173 -135
- package/skills/geospatial-maps-expert/SKILL.md +80 -0
- package/skills/global-a11y-i18n-expert/SKILL.md +7 -1
- package/skills/glsl-shader-expert/SKILL.md +106 -100
- package/skills/go-programming-expert/SKILL.md +21 -15
- package/skills/graph-rag-knowledge-expert/SKILL.md +159 -0
- package/skills/graphql-apollo-expert/SKILL.md +113 -107
- package/skills/headless-cms-expert/SKILL.md +181 -0
- package/skills/hig/SKILL.md +7 -1
- package/skills/js-backend-expert/SKILL.md +218 -216
- package/skills/legacy-code-translator/SKILL.md +70 -64
- package/skills/local-slm-edge-ai-expert/SKILL.md +167 -0
- package/skills/logging-error-tracking-expert/SKILL.md +343 -337
- package/skills/mcp-client-orchestrator/SKILL.md +75 -69
- package/skills/mcp-server-architect/SKILL.md +294 -194
- package/skills/micro-frontend-architect/SKILL.md +111 -105
- package/skills/mobile-expo-expert/SKILL.md +8 -2
- package/skills/mobile-push-notification-expert/SKILL.md +70 -50
- package/skills/modern-css-native-expert/SKILL.md +189 -0
- package/skills/monday-design-aesthetic/SKILL.md +7 -1
- package/skills/monorepo-architect/SKILL.md +7 -1
- package/skills/mpa-orchestrator/SKILL.md +20 -1
- package/skills/multi-agent-orchestration/SKILL.md +254 -234
- package/skills/multiple-entry-points/SKILL.md +37 -1
- package/skills/mvc-expert/SKILL.md +7 -1
- package/skills/n8n-automation-expert/SKILL.md +89 -0
- package/skills/nextjs-app-router-expert/SKILL.md +148 -0
- package/skills/openapi-swagger-codegen-expert/SKILL.md +67 -0
- package/skills/payment-gateway-expert/SKILL.md +85 -1
- package/skills/pdf-document-generation-expert/SKILL.md +91 -0
- package/skills/performance-web-vitals/SKILL.md +7 -1
- package/skills/post-quantum-crypto-migrator/SKILL.md +57 -57
- package/skills/prd-architect/SKILL.md +7 -1
- package/skills/proactive-background-watcher/SKILL.md +67 -61
- package/skills/production-ready-hardener/SKILL.md +461 -455
- package/skills/project-context-mapper/SKILL.md +84 -78
- package/skills/pwa-offline-first-expert/SKILL.md +185 -0
- package/skills/python-programming-expert/SKILL.md +407 -401
- package/skills/rate-limit-abuse-prevention/SKILL.md +376 -370
- package/skills/realtime-collaboration-expert/SKILL.md +55 -1
- package/skills/rich-text-editor-expert/SKILL.md +177 -0
- package/skills/rust-programming-expert/SKILL.md +7 -1
- package/skills/saas-billing/SKILL.md +7 -1
- package/skills/saas-multi-tenant/SKILL.md +7 -1
- package/skills/saas-mvp-launcher/SKILL.md +20 -1
- package/skills/saas-transformer/SKILL.md +499 -488
- package/skills/scalability-clean-code/SKILL.md +7 -1
- package/skills/search-engine-expert/SKILL.md +89 -0
- package/skills/secure-fuzz-testing/SKILL.md +7 -1
- package/skills/self-evolving-memory-graph/SKILL.md +90 -74
- package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -57
- package/skills/senior-frontend/SKILL.md +141 -161
- package/skills/seo/SKILL.md +41 -17
- package/skills/session-context-loader/SKILL.md +82 -76
- package/skills/session-handoff-resume/SKILL.md +7 -1
- package/skills/{skill_baru → skill-baru}/SKILL.md +8 -2
- package/skills/solidjs-expert/SKILL.md +80 -0
- package/skills/spa-orchestrator/SKILL.md +20 -1
- package/skills/sse-websocket-streaming-expert/SKILL.md +93 -0
- package/skills/state-management-expert/SKILL.md +7 -1
- package/skills/supabase-migration/SKILL.md +47 -1
- package/skills/supabase-security-expert/SKILL.md +7 -1
- package/skills/svelte-sveltekit-expert/SKILL.md +91 -0
- package/skills/svg-animation-motion-expert/SKILL.md +115 -0
- package/skills/tailwind-expert/SKILL.md +88 -136
- package/skills/tanstack-query-expert/SKILL.md +7 -1
- package/skills/tauri-expert/SKILL.md +7 -1
- package/skills/token-saver/SKILL.md +1 -1
- package/skills/typescript-expert/SKILL.md +12 -6
- package/skills/ui-components-expert/SKILL.md +165 -279
- package/skills/ui-ux-pro-max/SKILL.md +23 -3
- package/skills/vector-db-rag-expert/SKILL.md +175 -19
- package/skills/vibe-code-gardener/SKILL.md +1 -1
- package/skills/visual-qa-vision-agent/SKILL.md +70 -64
- package/skills/voice-ai-realtime-agent/SKILL.md +202 -0
- package/skills/vue-frontend-expert/SKILL.md +131 -125
- package/skills/wasm-edge-computing-expert/SKILL.md +97 -0
- package/skills/web-3d-graphics-expert/SKILL.md +136 -130
- package/skills/web-game-engine-expert/SKILL.md +101 -95
- package/skills/web-scraper/SKILL.md +157 -207
- package/skills/website-design-cloner/SKILL.md +179 -173
- package/skills/webxr-ar-vr-expert/SKILL.md +122 -116
- package/skills/wordpress-headless-expert/SKILL.md +144 -0
- package/skills/zero-to-prod-orchestrator/SKILL.md +52 -27
- package/skills/zero-trust-secret-vault/SKILL.md +87 -39
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/workflows/publish.yml +0 -20
- package/CONTRIBUTING.md +0 -199
- package/SECURITY.md +0 -21
- package/banner.png +0 -0
- package/skills/autonomous-swarm-director/SKILL.md +0 -69
- package/skills/hyper-context-synthesizer/SKILL.md +0 -55
- package/skills/llm-cost-arbitrage-router/SKILL.md +0 -59
- package/skills/senior-fullstack/SKILL.md +0 -167
- package/skills/senior-fullstack/references/architecture_patterns.md +0 -160
- package/skills/senior-fullstack/references/development_workflows.md +0 -222
- package/skills/senior-fullstack/references/tech_stack_guide.md +0 -190
- package/skills/senior-fullstack/scripts/code_quality_analyzer.py +0 -114
- package/skills/senior-fullstack/scripts/fullstack_scaffolder.py +0 -114
- package/skills/senior-fullstack/scripts/project_scaffolder.py +0 -114
- package/skills/seo-aeo-landing-page-writer/SKILL.md +0 -97
- package/skills/seo-geo/SKILL.md +0 -188
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
- package/skills/ui_ux_expert/SKILL.md +0 -125
- package/vibes-swarm-demo.gif +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vector-db-rag-expert
|
|
3
|
-
description: "Expert guide for high-performance Vector Databases, RAG architectures, pgvector HNSW
|
|
3
|
+
description: "Expert guide for high-performance Vector Databases, Deep RAG architectures, pgvector 0.8+ HNSW, Reciprocal Rank Fusion (RRF), Cross-Encoder Re-ranking, and Late Chunking / Panduan ahli Vector DB, arsitektur Deep RAG, pgvector HNSW, RRF, dan Re-ranking."
|
|
4
4
|
author: "Roedy Rustam"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Vector DB & Deep RAG Expert
|
|
7
|
+
# Vector DB & Deep RAG Expert (2026 Edition)
|
|
8
8
|
|
|
9
9
|
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
10
|
|
|
@@ -14,39 +14,195 @@ author: "Roedy Rustam"
|
|
|
14
14
|
## English
|
|
15
15
|
|
|
16
16
|
### Purpose & Overview
|
|
17
|
-
Production-grade
|
|
17
|
+
Production-grade architectural guide for Vector Databases (PostgreSQL `pgvector 0.8+`, Qdrant, LanceDB, Pinecone), Deep RAG indexing strategies, HNSW iterative search, **Reciprocal Rank Fusion (RRF)** hybrid retrieval, **Cross-Encoder Re-ranking** (Cohere Rerank v3, FlashRank, BGE-Reranker-v2), and **Late Chunking** to eliminate context fragmentation.
|
|
18
18
|
|
|
19
19
|
### Key Capabilities
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
1. **pgvector 0.8+ & HNSW Indexing**: High-dimensional vector storage, cosine/inner-product/L2 distance metric tuning, and iterative HNSW index scans with metadata filtering.
|
|
21
|
+
2. **Reciprocal Rank Fusion (RRF)**: Combining sparse keyword BM25 ranks with dense semantic vector ranks using $RRF(d) = \sum \frac{1}{k + rank(d)}$, far outperforming naive linear score weighting.
|
|
22
|
+
3. **Cross-Encoder Re-ranking**: Two-stage retrieval pipeline: retrieve Top-50 candidates via fast hybrid search, then re-rank down to Top-5 using a cross-encoder model to maximize NDCG@10.
|
|
23
|
+
4. **Late Chunking & Contextual Retrieval**: Embed long-context documents in full before pooling token embeddings into individual chunks, preserving document-level semantics across boundaries.
|
|
24
|
+
5. **RAG Evaluation**: Continuous retrieval precision and hallucination scoring using automated eval harnesses (Ragas, TruLens, DeepEval).
|
|
23
25
|
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
### Production Implementation Recipes
|
|
29
|
+
|
|
30
|
+
#### Recipe 1: Reciprocal Rank Fusion (RRF) Hybrid Search with Drizzle ORM
|
|
24
31
|
```typescript
|
|
25
32
|
import { sql } from 'drizzle-orm';
|
|
33
|
+
import { db } from '@/lib/db';
|
|
34
|
+
|
|
35
|
+
export interface SearchResult {
|
|
36
|
+
id: string;
|
|
37
|
+
content: string;
|
|
38
|
+
score: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Executes Reciprocal Rank Fusion (RRF) combining BM25 keyword search and pgvector HNSW
|
|
43
|
+
* k = 60 is the industry standard constant
|
|
44
|
+
*/
|
|
45
|
+
export async function reciprocalRankFusionSearch(
|
|
46
|
+
queryVector: number[],
|
|
47
|
+
queryText: string,
|
|
48
|
+
limit = 10,
|
|
49
|
+
k = 60
|
|
50
|
+
): Promise<SearchResult[]> {
|
|
51
|
+
const formattedVector = JSON.stringify(queryVector);
|
|
26
52
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
53
|
+
const results = await db.execute(sql`
|
|
54
|
+
WITH vector_matches AS (
|
|
55
|
+
SELECT id, ROW_NUMBER() OVER (ORDER BY embedding <=> ${formattedVector}::vector) AS rank
|
|
56
|
+
FROM documents
|
|
57
|
+
WHERE status = 'published'
|
|
58
|
+
ORDER BY embedding <=> ${formattedVector}::vector
|
|
59
|
+
LIMIT 50
|
|
60
|
+
),
|
|
61
|
+
text_matches AS (
|
|
62
|
+
SELECT id, ROW_NUMBER() OVER (ORDER BY ts_rank_cd(fts, websearch_to_tsquery('english', ${queryText})) DESC) AS rank
|
|
63
|
+
FROM documents
|
|
64
|
+
WHERE fts @@ websearch_to_tsquery('english', ${queryText})
|
|
65
|
+
LIMIT 50
|
|
66
|
+
)
|
|
67
|
+
SELECT
|
|
68
|
+
d.id,
|
|
69
|
+
d.content,
|
|
70
|
+
COALESCE(1.0 / (${k} + v.rank), 0.0) +
|
|
71
|
+
COALESCE(1.0 / (${k} + t.rank), 0.0) AS rrf_score
|
|
72
|
+
FROM documents d
|
|
73
|
+
LEFT JOIN vector_matches v ON d.id = v.id
|
|
74
|
+
LEFT JOIN text_matches t ON d.id = t.id
|
|
75
|
+
WHERE v.id IS NOT NULL OR t.id IS NOT NULL
|
|
76
|
+
ORDER BY rrf_score DESC
|
|
35
77
|
LIMIT ${limit};
|
|
36
78
|
`);
|
|
37
|
-
|
|
79
|
+
|
|
80
|
+
return results.rows as unknown as SearchResult[];
|
|
38
81
|
}
|
|
39
82
|
```
|
|
40
83
|
|
|
84
|
+
#### Recipe 2: Two-Stage Re-Ranking Pipeline with FlashRank (Node.js / TypeScript)
|
|
85
|
+
```typescript
|
|
86
|
+
import { FlashRankRegistry } from 'flashrank';
|
|
87
|
+
|
|
88
|
+
const ranker = new FlashRankRegistry();
|
|
89
|
+
|
|
90
|
+
export async function rerankCandidates(query: string, candidates: { id: string; text: string }[], topN = 5) {
|
|
91
|
+
const passages = candidates.map(c => ({ id: c.id, text: c.text }));
|
|
92
|
+
|
|
93
|
+
// Ultra-fast client/server cross-encoder re-ranking
|
|
94
|
+
const reranked = await ranker.rerank({
|
|
95
|
+
query,
|
|
96
|
+
passages,
|
|
97
|
+
model: 'ms-marco-TinyBERT-L-2-v2', // Lightweight, 2ms latency
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
return reranked.slice(0, topN);
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
### Implementation Checklist
|
|
107
|
+
- [ ] Create `HNSW` index in PostgreSQL: `CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64);`
|
|
108
|
+
- [ ] Configure `hnsw.ef_search = 100` for high-recall queries during production traffic.
|
|
109
|
+
- [ ] Implement Reciprocal Rank Fusion (RRF) with constant `k = 60` instead of arbitrary linear weighting.
|
|
110
|
+
- [ ] Add a Cross-Encoder Re-ranker step before injecting retrieved chunks into the LLM system prompt.
|
|
111
|
+
- [ ] Apply Late Chunking or Contextual Chunking to retain parent document continuity.
|
|
112
|
+
|
|
113
|
+
## Orchestration & Integration
|
|
114
|
+
- Integrates with: `ai-llm-integration-expert`, `database-orm-expert`, `ai-cost-token-optimizer`, `app-analyzer-optimizer`.
|
|
115
|
+
|
|
41
116
|
---
|
|
42
117
|
|
|
43
118
|
<a name="bahasa-indonesia"></a>
|
|
44
119
|
## Bahasa Indonesia
|
|
45
120
|
|
|
46
121
|
### Deskripsi
|
|
47
|
-
Panduan tingkat produksi untuk Vector Database (pgvector
|
|
122
|
+
Panduan arsitektur tingkat produksi untuk Vector Database (PostgreSQL `pgvector 0.8+`, Qdrant, LanceDB, Pinecone), arsitektur Deep RAG modern, pencarian HNSW iteratif, **Reciprocal Rank Fusion (RRF)** hybrid retrieval, **Cross-Encoder Re-ranking** (Cohere Rerank v3, FlashRank, BGE-Reranker-v2), dan **Late Chunking** untuk mencegah fragmentasi konteks.
|
|
48
123
|
|
|
49
124
|
### Fitur Utama
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
125
|
+
1. **pgvector 0.8+ & Indeks HNSW**: Penyimpanan vektor dimensi tinggi, tuning metrik jarak (cosine/inner-product/L2), dan pemindaian HNSW iteratif dengan filter metadata.
|
|
126
|
+
2. **Reciprocal Rank Fusion (RRF)**: Menggabungkan peringkat kata kunci BM25 dengan peringkat semantik vektor menggunakan rumus $RRF(d) = \sum \frac{1}{k + rank(d)}$, jauh lebih akurat daripada pembobotan linear biasa.
|
|
127
|
+
3. **Cross-Encoder Re-ranking**: Pipeline retrieval 2 tahap: ambil 50 kandidat teratas melalui pencarian hybrid, lalu urutkan ulang menjadi 5 dokumen paling relevan menggunakan model cross-encoder.
|
|
128
|
+
4. **Late Chunking**: Melakukan embedding dokumen secara utuh dalam transformer sebelum memecahnya menjadi chunk-chunk terpisah, mempertahankan makna global dokumen.
|
|
129
|
+
5. **Evaluasi RAG**: Pengukuran presisi retrieval dan deteksi halusinasi secara otomatis (Ragas, TruLens, DeepEval).
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### Resep Implementasi Produksi
|
|
134
|
+
|
|
135
|
+
#### Resep 1: Pencarian Hybrid RRF dengan Drizzle ORM
|
|
136
|
+
```typescript
|
|
137
|
+
import { sql } from 'drizzle-orm';
|
|
138
|
+
import { db } from '@/lib/db';
|
|
139
|
+
|
|
140
|
+
export async function cariDokumenRRF(
|
|
141
|
+
queryVector: number[],
|
|
142
|
+
queryText: string,
|
|
143
|
+
limit = 10,
|
|
144
|
+
k = 60
|
|
145
|
+
) {
|
|
146
|
+
const vectorStr = JSON.stringify(queryVector);
|
|
147
|
+
|
|
148
|
+
const hasil = await db.execute(sql`
|
|
149
|
+
WITH vector_matches AS (
|
|
150
|
+
SELECT id, ROW_NUMBER() OVER (ORDER BY embedding <=> ${vectorStr}::vector) AS rank
|
|
151
|
+
FROM documents
|
|
152
|
+
WHERE status = 'published'
|
|
153
|
+
ORDER BY embedding <=> ${vectorStr}::vector
|
|
154
|
+
LIMIT 50
|
|
155
|
+
),
|
|
156
|
+
text_matches AS (
|
|
157
|
+
SELECT id, ROW_NUMBER() OVER (ORDER BY ts_rank_cd(fts, websearch_to_tsquery('english', ${queryText})) DESC) AS rank
|
|
158
|
+
FROM documents
|
|
159
|
+
WHERE fts @@ websearch_to_tsquery('english', ${queryText})
|
|
160
|
+
LIMIT 50
|
|
161
|
+
)
|
|
162
|
+
SELECT
|
|
163
|
+
d.id,
|
|
164
|
+
d.content,
|
|
165
|
+
COALESCE(1.0 / (${k} + v.rank), 0.0) +
|
|
166
|
+
COALESCE(1.0 / (${k} + t.rank), 0.0) AS skor_rrf
|
|
167
|
+
FROM documents d
|
|
168
|
+
LEFT JOIN vector_matches v ON d.id = v.id
|
|
169
|
+
LEFT JOIN text_matches t ON d.id = t.id
|
|
170
|
+
WHERE v.id IS NOT NULL OR t.id IS NOT NULL
|
|
171
|
+
ORDER BY skor_rrf DESC
|
|
172
|
+
LIMIT ${limit};
|
|
173
|
+
`);
|
|
174
|
+
|
|
175
|
+
return hasil.rows;
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
#### Resep 2: Pipeline Re-Ranking dengan FlashRank (Node.js / TypeScript)
|
|
180
|
+
```typescript
|
|
181
|
+
import { FlashRankRegistry } from 'flashrank';
|
|
182
|
+
|
|
183
|
+
const ranker = new FlashRankRegistry();
|
|
184
|
+
|
|
185
|
+
export async function susunUlangKandidat(kueri: string, kandidat: { id: string; text: string }[], topN = 5) {
|
|
186
|
+
const passages = kandidat.map(c => ({ id: c.id, text: c.text }));
|
|
187
|
+
|
|
188
|
+
const hasilRerank = await ranker.rerank({
|
|
189
|
+
query: kueri,
|
|
190
|
+
passages,
|
|
191
|
+
model: 'ms-marco-TinyBERT-L-2-v2',
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
return hasilRerank.slice(0, topN);
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
### Checklist Implementasi
|
|
201
|
+
- [ ] Buat indeks `HNSW` di PostgreSQL: `CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64);`
|
|
202
|
+
- [ ] Konfigurasikan `hnsw.ef_search = 100` untuk kueri dengan recall tinggi di lingkungan produksi.
|
|
203
|
+
- [ ] Terapkan Reciprocal Rank Fusion (RRF) dengan konstanta `k = 60` alih-alih pembobotan linear manual.
|
|
204
|
+
- [ ] Tambahkan langkah Cross-Encoder Re-ranker sebelum menyuntikkan konteks ke prompt LLM.
|
|
205
|
+
- [ ] Terapkan Late Chunking agar konteks dokumen utuh tidak hilang saat dipotong.
|
|
206
|
+
|
|
207
|
+
## Integrasi Orkestrasi
|
|
208
|
+
- Terintegrasi dengan: `ai-llm-integration-expert`, `database-orm-expert`, `ai-cost-token-optimizer`, `app-analyzer-optimizer`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe-code-gardener
|
|
3
3
|
description: "Purger of AI slop, code bloat, context drift, and architectural decay in vibe-coded projects / Pembersih AI slop, kode membengkak, konteks drift, dan pembusukan arsitektur pada proyek vibe coding."
|
|
4
|
-
author:
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Vibe Code Gardener (2026 Edition)
|
|
@@ -1,65 +1,71 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: visual-qa-vision-agent
|
|
3
|
-
description: "Equips the AI agent with visual QA capabilities using Playwright/Puppeteer and the agent's innate Vision capabilities to self-correct UI layout, CSS alignment, and visual regressions."
|
|
1
|
+
---
|
|
2
|
+
name: visual-qa-vision-agent
|
|
3
|
+
description: "Equips the AI agent with visual QA capabilities using Playwright/Puppeteer and the agent's innate Vision capabilities to self-correct UI layout, CSS alignment, and visual regressions."
|
|
4
4
|
author: "Roedy Rustam"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Visual QA & Vision Agent
|
|
8
|
-
|
|
9
|
-
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
<a name="english"></a>
|
|
14
|
-
## English
|
|
15
|
-
|
|
16
|
-
###
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
###
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- `
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
###
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Visual QA & Vision Agent
|
|
8
|
+
|
|
9
|
+
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<a name="english"></a>
|
|
14
|
+
## English
|
|
15
|
+
|
|
16
|
+
### Orchestration & Integration
|
|
17
|
+
Connects and orchestrates with relevant domain skills like `brainstorming`, `zero-to-prod-orchestrator`, and `project-context-mapper` to ensure cohesive execution.
|
|
18
|
+
|
|
19
|
+
### Description
|
|
20
|
+
This skill transforms the agent from a blind code generator into a visual designer. Instead of hoping the CSS looks correct, the agent is instructed to write a script that takes a screenshot of the newly created component, analyzes the screenshot using its own Vision AI capabilities, and iteratively tweaks the CSS until it matches the design intent perfectly.
|
|
21
|
+
|
|
22
|
+
### Trigger Conditions
|
|
23
|
+
Activate this skill when the user says:
|
|
24
|
+
- "Fix the CSS, the button is misaligned."
|
|
25
|
+
- "Make it look exactly like this mockup."
|
|
26
|
+
- "Ensure the UI is responsive on mobile screens."
|
|
27
|
+
|
|
28
|
+
### Core Concepts
|
|
29
|
+
|
|
30
|
+
#### 1. The Visual QA Loop
|
|
31
|
+
1. **Code:** The agent writes the HTML/CSS/React component.
|
|
32
|
+
2. **Serve:** The agent starts a local dev server in the background.
|
|
33
|
+
3. **Capture:** The agent runs a quick Playwright/Puppeteer script to take screenshots at various viewports (Mobile, Tablet, Desktop).
|
|
34
|
+
4. **Analyze:** The agent receives the screenshot (via the `view_file` tool on the image) and analyzes the visual hierarchy, contrast, and alignment.
|
|
35
|
+
5. **Correct:** The agent fixes margin, padding, or flexbox issues based on what it *saw*, not just what the code says.
|
|
36
|
+
|
|
37
|
+
#### 2. Agent Constraints (Mandatory Visual Verification)
|
|
38
|
+
- **NO BLIND CSS GUESSING**: You are strictly prohibited from finalizing a frontend component without verifying it visually first. You MUST use a `browser_subagent` to capture a screenshot of your work.
|
|
39
|
+
- **Pixel-Perfect Validation**: Compare the screenshot against the initial design spec or generic UI/UX best practices. Iterate on the CSS until the visual output is flawless.
|
|
40
|
+
- Always check contrast ratios visually if design tokens are overridden.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
### Integration with Other Skills (MANDATORY)
|
|
45
|
+
- `browser-automation-expert` — Provides the Playwright code needed to capture the screenshots.
|
|
46
|
+
- `tailwind-expert` — Provides the CSS utility classes used to fix the alignment issues discovered by Vision.
|
|
47
|
+
- `ui-components-expert` — Defines the correct visual standards (spacing, sizing) the agent should look for.
|
|
48
|
+
|
|
49
|
+
### Referenced By Orchestrators (MANDATORY)
|
|
50
|
+
- `brainstorming` — Add to "UI/UX & Design Systems".
|
|
51
|
+
- `zero-to-prod-orchestrator` — Phase 5 (Frontend / UI Validation).
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
<a name="bahasa-indonesia"></a>
|
|
56
|
+
## Bahasa Indonesia
|
|
57
|
+
|
|
58
|
+
### Integrasi Orkestrasi
|
|
59
|
+
Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
|
|
60
|
+
|
|
61
|
+
### Deskripsi
|
|
62
|
+
Skill ini memanfaatkan kemampuan *Vision* (penglihatan) bawaan AI untuk melakukan *Quality Assurance* (QA) visual. Agen tidak lagi sekadar menebak CSS secara buta, melainkan mengambil *screenshot* dari halaman yang dibuatnya, melihat hasilnya, dan mengkoreksi *margin/padding* secara mandiri.
|
|
63
|
+
|
|
64
|
+
### Kondisi Pemicu
|
|
65
|
+
- Saat pengguna meminta untuk merapikan UI yang berantakan.
|
|
66
|
+
- Saat melakukan *cloning* desain dari gambar *mockup*.
|
|
67
|
+
|
|
68
|
+
### Panduan Singkat
|
|
69
|
+
- **Gunakan Mata Anda (Wajib Verifikasi Visual):** Anda dilarang keras memfinalisasi atau menyelesaikan tugas frontend tanpa melihat hasilnya terlebih dahulu. Anda WAJIB mengambil *screenshot*, melihatnya menggunakan tool `view_file`, dan memverifikasi layout secara visual (*pixel-perfect*).
|
|
70
|
+
- **Siklus Visual:** Tulis Kode ➔ Ambil Screenshot ➔ Analisis dengan *Vision* ➔ Perbaiki Tailwind/CSS ➔ Selesai.
|
|
71
|
+
- **Jangan Menebak:** Terkadang `justify-center` tidak berfungsi karena ada pembungkus (*wrapper*) absolut. Jangan menebak-nebak di dalam kode; lihat hasil akhirnya secara visual!
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: voice-ai-realtime-agent
|
|
3
|
+
description: "Expert guide for Ultra-Low Latency Conversational Voice AI (<300ms), WebRTC bidirectional streaming, OpenAI Realtime API, Gemini Multimodal Live Audio, LiveKit Agents, and Semantic VAD / Panduan ahli AI suara percakapan real-time berlatensi ultra-rendah."
|
|
4
|
+
author: "Roedy Rustam"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Voice AI Realtime Agent (2026 Edition)
|
|
8
|
+
|
|
9
|
+
Expert guide for building ultra-low-latency (<300ms), bi-directional conversational voice AI applications. Covers WebRTC, full-duplex WebSocket audio streaming (PCM 24kHz), OpenAI Realtime API, Gemini Multimodal Live API, LiveKit Agents SDK, and smart interruption (barge-in) handling.
|
|
10
|
+
|
|
11
|
+
*Panduan ahli untuk membangun aplikasi AI suara percakapan dua arah berlatensi ultra-rendah (<300ms) menggunakan WebRTC, WebSocket full-duplex, OpenAI Realtime API, Gemini Multimodal Live API, LiveKit Agents SDK, dan penanganan interupsi (barge-in).*
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. Core Architecture: Full-Duplex Speech-to-Speech
|
|
16
|
+
|
|
17
|
+
Traditional voice pipelines chain STT ➔ LLM ➔ TTS with cumulative latency exceeding 1,200ms–2,500ms. Modern 2026 voice agents use **native speech-to-speech** or **streamable full-duplex WebRTC pipelines** achieving natural, human-like reaction times (~250–350ms).
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
User Mic ──► [WebRTC / WebSocket] ──► [VAD: Silero / WebRTC VAD]
|
|
21
|
+
│
|
|
22
|
+
▼
|
|
23
|
+
User Speaks <── [Audio Output] ◄── [Native Audio Stream / Cartesia] ◄── [OpenAI Realtime / Gemini Live]
|
|
24
|
+
│
|
|
25
|
+
└── User Interrupts (Barge-in) ──► Instant Buffer Flush & Cancel Audio Frame Emission
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 2. Production Recipe: LiveKit Agents + OpenAI Realtime (Python)
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
# agent.py - Production Voice Agent Worker with LiveKit & OpenAI Realtime
|
|
34
|
+
import asyncio
|
|
35
|
+
import os
|
|
36
|
+
from livekit import rtc
|
|
37
|
+
from livekit.agents import (
|
|
38
|
+
AutoSubscribe,
|
|
39
|
+
JobContext,
|
|
40
|
+
JobProcess,
|
|
41
|
+
WorkerOptions,
|
|
42
|
+
cli,
|
|
43
|
+
llm,
|
|
44
|
+
)
|
|
45
|
+
from livekit.agents.pipeline import VoicePipelineAgent
|
|
46
|
+
from livekit.plugins import deepgram, openai, silero
|
|
47
|
+
|
|
48
|
+
async def entrypoint(ctx: JobContext):
|
|
49
|
+
# Connect to room with audio only to minimize bandwidth & latency
|
|
50
|
+
await ctx.connect(auto_subscribe=AutoSubscribe.AUDIO_ONLY)
|
|
51
|
+
|
|
52
|
+
# Wait for the user participant to join
|
|
53
|
+
participant = await ctx.wait_for_participant()
|
|
54
|
+
|
|
55
|
+
# Define agent instructions and tools
|
|
56
|
+
initial_ctx = llm.ChatContext().append(
|
|
57
|
+
role="system",
|
|
58
|
+
text=(
|
|
59
|
+
"You are a helpful, concise voice assistant. "
|
|
60
|
+
"Respond naturally in 1-2 short sentences. Never output markdown, bullet points, or emojis."
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Realtime Voice Pipeline: Deepgram (STT) + OpenAI (LLM) + Cartesia/OpenAI (TTS)
|
|
65
|
+
# Or use native OpenAI Realtime Model: gpt-4o-realtime-preview
|
|
66
|
+
agent = VoicePipelineAgent(
|
|
67
|
+
vad=silero.VAD.load(
|
|
68
|
+
min_speech_duration=0.1,
|
|
69
|
+
min_silence_duration=0.3, # Snappy turn-taking
|
|
70
|
+
prefix_padding_duration=0.2,
|
|
71
|
+
),
|
|
72
|
+
stt=deepgram.STT(model="nova-2", language="id"), # Multi-language support
|
|
73
|
+
llm=openai.LLM(model="gpt-4o-mini"),
|
|
74
|
+
tts=openai.TTS(voice="alloy"),
|
|
75
|
+
chat_ctx=initial_ctx,
|
|
76
|
+
allow_interruptions=True, # Barge-in capability
|
|
77
|
+
interrupt_speech_duration=0.3, # Immediate cutoff when user talks
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
agent.start(ctx.room, participant)
|
|
81
|
+
|
|
82
|
+
# Greet user immediately
|
|
83
|
+
await agent.say("Halo! Ada yang bisa saya bantu hari ini?", now=True)
|
|
84
|
+
|
|
85
|
+
if __name__ == "__main__":
|
|
86
|
+
cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 3. Production Recipe: Gemini Multimodal Live Audio (TypeScript / Node.js)
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
// gemini-live-audio.ts - Bidirectional WebSocket PCM 24kHz
|
|
95
|
+
import WebSocket from 'ws';
|
|
96
|
+
|
|
97
|
+
interface GeminiAudioConfig {
|
|
98
|
+
apiKey: string;
|
|
99
|
+
model?: string;
|
|
100
|
+
systemInstruction?: string;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export class GeminiVoiceAgent {
|
|
104
|
+
private ws: WebSocket | null = null;
|
|
105
|
+
private isConnected = false;
|
|
106
|
+
|
|
107
|
+
constructor(private config: GeminiAudioConfig) {}
|
|
108
|
+
|
|
109
|
+
public async connect(): Promise<void> {
|
|
110
|
+
const url = `wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent?key=${this.config.apiKey}`;
|
|
111
|
+
|
|
112
|
+
this.ws = new WebSocket(url);
|
|
113
|
+
|
|
114
|
+
this.ws.on('open', () => {
|
|
115
|
+
this.isConnected = true;
|
|
116
|
+
this.sendInitialHandshake();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
this.ws.on('message', (data: WebSocket.Data) => {
|
|
120
|
+
this.handleIncomingAudio(data);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private sendInitialHandshake(): void {
|
|
125
|
+
const setupMessage = {
|
|
126
|
+
setup: {
|
|
127
|
+
model: `models/${this.config.model || 'gemini-2.0-flash-exp'}`,
|
|
128
|
+
generationConfig: {
|
|
129
|
+
responseModalities: ["AUDIO"],
|
|
130
|
+
speechConfig: {
|
|
131
|
+
voiceConfig: {
|
|
132
|
+
prebuiltVoiceConfig: { voiceName: "Puck" }
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
systemInstruction: {
|
|
137
|
+
parts: [{ text: this.config.systemInstruction || "You are a conversational voice agent. Keep answers brief." }]
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
this.ws?.send(JSON.stringify(setupMessage));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Stream raw PCM 16-bit 24kHz mono audio from mic
|
|
145
|
+
public sendAudioChunk(pcm16Chunk: Buffer): void {
|
|
146
|
+
if (!this.isConnected || !this.ws) return;
|
|
147
|
+
|
|
148
|
+
const base64Audio = pcm16Chunk.toString('base64');
|
|
149
|
+
const msg = {
|
|
150
|
+
realtimeInput: {
|
|
151
|
+
mediaChunks: [
|
|
152
|
+
{
|
|
153
|
+
mimeType: "audio/pcm;rate=24000",
|
|
154
|
+
data: base64Audio
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
this.ws.send(JSON.stringify(msg));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
private handleIncomingAudio(data: WebSocket.Data): void {
|
|
163
|
+
try {
|
|
164
|
+
const response = JSON.parse(data.toString());
|
|
165
|
+
const parts = response.serverContent?.modelTurn?.parts;
|
|
166
|
+
if (parts) {
|
|
167
|
+
for (const part of parts) {
|
|
168
|
+
if (part.inlineData?.data) {
|
|
169
|
+
const pcmBuffer = Buffer.from(part.inlineData.data, 'base64');
|
|
170
|
+
this.playAudioSpeaker(pcmBuffer);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
} catch {
|
|
175
|
+
// Binary PCM frame handler
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private playAudioSpeaker(pcmChunk: Buffer): void {
|
|
180
|
+
// Send to WebRTC audio track or audio output device
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 4. Key 2026 Performance Guardrails
|
|
188
|
+
|
|
189
|
+
1. **Barge-in Latency Budget (<150ms)**: When the user speaks while the bot is talking, cancel outgoing audio immediately. Do not wait for the LLM to finish streaming its chunk.
|
|
190
|
+
2. **Audio Sample Rates**:
|
|
191
|
+
- Mic Input: 16kHz or 24kHz 16-bit Linear PCM Mono.
|
|
192
|
+
- Bot Output: 24kHz PCM for crystal-clear natural prosody.
|
|
193
|
+
3. **Turn-Taking Jitter Prevention**: Use minimum silence thresholds between `300ms` and `450ms`. Lower thresholds cause the bot to interrupt users when they pause to think; higher thresholds make the conversation feel robotic.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Orchestration & Integration
|
|
198
|
+
|
|
199
|
+
- **`ai-llm-integration-expert`**: For base LLM prompt routing and function calling during conversation.
|
|
200
|
+
- **`realtime-collaboration-expert`**: For syncing WebRTC tracks and room states with client applications.
|
|
201
|
+
- **`gemini-agent-booster`**: Connects Gemini 3.x / 2.0 Flash thinking models to live voice agents.
|
|
202
|
+
- **`mobile-expo-expert`**: Audio streaming implementation in React Native with `expo-av` and WebRTC shim.
|