@trieungoctam/vibekit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/agents/debugger.md +158 -0
- package/agents/docs-manager.md +220 -0
- package/agents/planner.md +129 -0
- package/agents/researcher.md +58 -0
- package/agents/reviewer.md +152 -0
- package/agents/tester.md +126 -0
- package/bin/vibekit.js +18 -0
- package/hooks/lib/ck-config-utils.cjs +831 -0
- package/hooks/lib/colors.cjs +95 -0
- package/hooks/lib/config-counter.cjs +103 -0
- package/hooks/lib/context-builder.cjs +616 -0
- package/hooks/lib/git-info-cache.cjs +143 -0
- package/hooks/lib/hook-logger.cjs +92 -0
- package/hooks/lib/privacy-checker.cjs +297 -0
- package/hooks/lib/project-detector.cjs +474 -0
- package/hooks/lib/scout-checker.cjs +263 -0
- package/hooks/lib/transcript-parser.cjs +181 -0
- package/hooks/post-edit-simplify-reminder.cjs +156 -0
- package/hooks/privacy-block.cjs +166 -0
- package/hooks/scout-block.cjs +147 -0
- package/hooks/session-init.cjs +360 -0
- package/package.json +41 -0
- package/rules/development-rules.md +52 -0
- package/rules/documentation-management.md +121 -0
- package/rules/orchestration-protocol.md +43 -0
- package/rules/primary-workflow.md +57 -0
- package/rules/team-coordination-rules.md +90 -0
- package/skills/ai/agent-browser/SKILL.md +294 -0
- package/skills/ai/agent-browser/references/.gitkeep +0 -0
- package/skills/ai/agent-browser/references/agent-browser-vs-chrome-devtools.md +112 -0
- package/skills/ai/agent-browser/references/browserbase-cloud-setup.md +161 -0
- package/skills/ai/ai-artist/SKILL.md +122 -0
- package/skills/ai/ai-artist/data/awesome-prompts.csv +3592 -0
- package/skills/ai/ai-artist/data/lighting.csv +19 -0
- package/skills/ai/ai-artist/data/nano-banana-templates.csv +17 -0
- package/skills/ai/ai-artist/data/platforms.csv +11 -0
- package/skills/ai/ai-artist/data/styles.csv +26 -0
- package/skills/ai/ai-artist/data/techniques.csv +19 -0
- package/skills/ai/ai-artist/data/use-cases.csv +16 -0
- package/skills/ai/ai-artist/references/advanced-techniques.md +184 -0
- package/skills/ai/ai-artist/references/awesome-nano-banana-pro-prompts.md +8575 -0
- package/skills/ai/ai-artist/references/domain-code.md +66 -0
- package/skills/ai/ai-artist/references/domain-data.md +72 -0
- package/skills/ai/ai-artist/references/domain-marketing.md +66 -0
- package/skills/ai/ai-artist/references/domain-patterns.md +33 -0
- package/skills/ai/ai-artist/references/domain-writing.md +68 -0
- package/skills/ai/ai-artist/references/image-prompting.md +141 -0
- package/skills/ai/ai-artist/references/llm-prompting.md +165 -0
- package/skills/ai/ai-artist/references/nano-banana.md +136 -0
- package/skills/ai/ai-artist/references/reasoning-techniques.md +201 -0
- package/skills/ai/ai-artist/references/validation-workflow.md +117 -0
- package/skills/ai/ai-artist/scripts/core.py +197 -0
- package/skills/ai/ai-artist/scripts/extract_prompts.py +102 -0
- package/skills/ai/ai-artist/scripts/generate.py +370 -0
- package/skills/ai/ai-artist/scripts/search.py +147 -0
- package/skills/ai/ai-multimodal/.env.example +204 -0
- package/skills/ai/ai-multimodal/SKILL.md +110 -0
- package/skills/ai/ai-multimodal/references/audio-processing.md +387 -0
- package/skills/ai/ai-multimodal/references/image-generation.md +939 -0
- package/skills/ai/ai-multimodal/references/music-generation.md +311 -0
- package/skills/ai/ai-multimodal/references/video-analysis.md +515 -0
- package/skills/ai/ai-multimodal/references/video-generation.md +457 -0
- package/skills/ai/ai-multimodal/references/vision-understanding.md +492 -0
- package/skills/ai/ai-multimodal/scripts/.coverage +0 -0
- package/skills/ai/ai-multimodal/scripts/check_setup.py +315 -0
- package/skills/ai/ai-multimodal/scripts/document_converter.py +395 -0
- package/skills/ai/ai-multimodal/scripts/gemini_batch_process.py +1185 -0
- package/skills/ai/ai-multimodal/scripts/media_optimizer.py +506 -0
- package/skills/ai/ai-multimodal/scripts/requirements.txt +26 -0
- package/skills/ai/ai-multimodal/scripts/tests/.coverage +0 -0
- package/skills/ai/ai-multimodal/scripts/tests/requirements.txt +20 -0
- package/skills/ai/ai-multimodal/scripts/tests/test_document_converter.py +74 -0
- package/skills/ai/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -0
- package/skills/ai/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -0
- package/skills/ai/mcp-management/README.md +219 -0
- package/skills/ai/mcp-management/SKILL.md +210 -0
- package/skills/ai/mcp-management/assets/tools.json +3146 -0
- package/skills/ai/mcp-management/references/configuration.md +114 -0
- package/skills/ai/mcp-management/references/gemini-cli-integration.md +221 -0
- package/skills/ai/mcp-management/references/mcp-protocol.md +116 -0
- package/skills/ai/mcp-management/scripts/.env.example +10 -0
- package/skills/ai/mcp-management/scripts/cli.ts +195 -0
- package/skills/ai/mcp-management/scripts/dist/analyze-tools.js +70 -0
- package/skills/ai/mcp-management/scripts/dist/cli.js +160 -0
- package/skills/ai/mcp-management/scripts/dist/mcp-client.js +183 -0
- package/skills/ai/mcp-management/scripts/mcp-client.ts +230 -0
- package/skills/ai/mcp-management/scripts/package.json +20 -0
- package/skills/ai/mcp-management/scripts/tsconfig.json +15 -0
- package/skills/core/brainstorm/SKILL.md +164 -0
- package/skills/core/brainstorm/scripts/frame-template.html +214 -0
- package/skills/core/brainstorm/scripts/helper.js +88 -0
- package/skills/core/brainstorm/scripts/server.cjs +338 -0
- package/skills/core/brainstorm/scripts/start-server.sh +153 -0
- package/skills/core/brainstorm/scripts/stop-server.sh +55 -0
- package/skills/core/brainstorm/spec-document-reviewer-prompt.md +49 -0
- package/skills/core/brainstorm/visual-companion.md +286 -0
- package/skills/core/code-review/SKILL.md +147 -0
- package/skills/core/code-review/references/code-review-reception.md +113 -0
- package/skills/core/code-review/references/codebase-scan-workflow.md +29 -0
- package/skills/core/code-review/references/edge-case-scouting.md +119 -0
- package/skills/core/code-review/references/parallel-review-workflow.md +69 -0
- package/skills/core/code-review/references/requesting-code-review.md +116 -0
- package/skills/core/code-review/references/task-management-reviews.md +140 -0
- package/skills/core/code-review/references/verification-before-completion.md +139 -0
- package/skills/core/cook/README.md +86 -0
- package/skills/core/cook/SKILL.md +113 -0
- package/skills/core/cook/references/intent-detection.md +101 -0
- package/skills/core/cook/references/review-cycle.md +75 -0
- package/skills/core/cook/references/subagent-patterns.md +75 -0
- package/skills/core/cook/references/workflow-steps.md +172 -0
- package/skills/core/debug/SKILL.md +121 -0
- package/skills/core/debug/references/defense-in-depth.md +124 -0
- package/skills/core/debug/references/frontend-verification.md +103 -0
- package/skills/core/debug/references/investigation-methodology.md +101 -0
- package/skills/core/debug/references/log-and-ci-analysis.md +97 -0
- package/skills/core/debug/references/performance-diagnostics.md +113 -0
- package/skills/core/debug/references/reporting-standards.md +122 -0
- package/skills/core/debug/references/root-cause-tracing.md +122 -0
- package/skills/core/debug/references/systematic-debugging.md +102 -0
- package/skills/core/debug/references/task-management-debugging.md +155 -0
- package/skills/core/debug/references/verification.md +123 -0
- package/skills/core/debug/scripts/find-polluter.sh +63 -0
- package/skills/core/debug/scripts/find-polluter.test.md +102 -0
- package/skills/core/execute/SKILL.md +70 -0
- package/skills/core/fix/SKILL.md +111 -0
- package/skills/core/fix/references/complexity-assessment.md +72 -0
- package/skills/core/fix/references/mode-selection.md +46 -0
- package/skills/core/fix/references/parallel-exploration.md +100 -0
- package/skills/core/fix/references/review-cycle.md +77 -0
- package/skills/core/fix/references/skill-activation-matrix.md +78 -0
- package/skills/core/fix/references/task-orchestration.md +103 -0
- package/skills/core/fix/references/workflow-ci.md +28 -0
- package/skills/core/fix/references/workflow-deep.md +122 -0
- package/skills/core/fix/references/workflow-logs.md +72 -0
- package/skills/core/fix/references/workflow-quick.md +59 -0
- package/skills/core/fix/references/workflow-standard.md +111 -0
- package/skills/core/fix/references/workflow-test.md +75 -0
- package/skills/core/fix/references/workflow-types.md +33 -0
- package/skills/core/fix/references/workflow-ui.md +75 -0
- package/skills/core/plan/SKILL.md +145 -0
- package/skills/core/plan/plan-document-reviewer-prompt.md +49 -0
- package/skills/core/subagent-dev/SKILL.md +277 -0
- package/skills/core/subagent-dev/code-quality-reviewer-prompt.md +26 -0
- package/skills/core/subagent-dev/implementer-prompt.md +113 -0
- package/skills/core/subagent-dev/spec-reviewer-prompt.md +61 -0
- package/skills/core/tdd/SKILL.md +371 -0
- package/skills/core/tdd/testing-anti-patterns.md +299 -0
- package/skills/core/test/SKILL.md +109 -0
- package/skills/core/test/references/report-format.md +58 -0
- package/skills/core/test/references/test-execution-workflow.md +103 -0
- package/skills/core/test/references/ui-testing-workflow.md +65 -0
- package/skills/core/verify/SKILL.md +139 -0
- package/skills/dev/backend-dev/SKILL.md +96 -0
- package/skills/dev/backend-dev/references/backend-api-design.md +495 -0
- package/skills/dev/backend-dev/references/backend-architecture.md +454 -0
- package/skills/dev/backend-dev/references/backend-authentication.md +338 -0
- package/skills/dev/backend-dev/references/backend-code-quality.md +659 -0
- package/skills/dev/backend-dev/references/backend-debugging.md +904 -0
- package/skills/dev/backend-dev/references/backend-devops.md +494 -0
- package/skills/dev/backend-dev/references/backend-mindset.md +387 -0
- package/skills/dev/backend-dev/references/backend-performance.md +397 -0
- package/skills/dev/backend-dev/references/backend-security.md +290 -0
- package/skills/dev/backend-dev/references/backend-technologies.md +256 -0
- package/skills/dev/backend-dev/references/backend-testing.md +429 -0
- package/skills/dev/context-engineering/SKILL.md +108 -0
- package/skills/dev/context-engineering/references/context-compression.md +84 -0
- package/skills/dev/context-engineering/references/context-degradation.md +93 -0
- package/skills/dev/context-engineering/references/context-fundamentals.md +75 -0
- package/skills/dev/context-engineering/references/context-optimization.md +82 -0
- package/skills/dev/context-engineering/references/evaluation.md +89 -0
- package/skills/dev/context-engineering/references/memory-systems.md +88 -0
- package/skills/dev/context-engineering/references/multi-agent-patterns.md +90 -0
- package/skills/dev/context-engineering/references/project-development.md +97 -0
- package/skills/dev/context-engineering/references/runtime-awareness.md +202 -0
- package/skills/dev/context-engineering/references/tool-design.md +86 -0
- package/skills/dev/context-engineering/scripts/compression_evaluator.py +349 -0
- package/skills/dev/context-engineering/scripts/context_analyzer.py +317 -0
- package/skills/dev/context-engineering/scripts/tests/test_edge_cases.py +246 -0
- package/skills/dev/databases/SKILL.md +84 -0
- package/skills/dev/databases/analytics.md +198 -0
- package/skills/dev/databases/db-design.md +188 -0
- package/skills/dev/databases/incremental-etl.md +213 -0
- package/skills/dev/databases/references/mongodb-aggregation.md +447 -0
- package/skills/dev/databases/references/mongodb-atlas.md +465 -0
- package/skills/dev/databases/references/mongodb-crud.md +408 -0
- package/skills/dev/databases/references/mongodb-indexing.md +442 -0
- package/skills/dev/databases/references/postgresql-administration.md +594 -0
- package/skills/dev/databases/references/postgresql-performance.md +527 -0
- package/skills/dev/databases/references/postgresql-psql-cli.md +467 -0
- package/skills/dev/databases/references/postgresql-queries.md +475 -0
- package/skills/dev/databases/scripts/.coverage +0 -0
- package/skills/dev/databases/scripts/db_backup.py +502 -0
- package/skills/dev/databases/scripts/db_migrate.py +426 -0
- package/skills/dev/databases/scripts/db_performance_check.py +457 -0
- package/skills/dev/databases/scripts/requirements.txt +20 -0
- package/skills/dev/databases/scripts/tests/coverage-db.json +1 -0
- package/skills/dev/databases/scripts/tests/requirements.txt +4 -0
- package/skills/dev/databases/scripts/tests/test_db_backup.py +340 -0
- package/skills/dev/databases/scripts/tests/test_db_migrate.py +277 -0
- package/skills/dev/databases/scripts/tests/test_db_performance_check.py +370 -0
- package/skills/dev/databases/stacks/bigquery.md +231 -0
- package/skills/dev/databases/stacks/d1_cloudflare.md +137 -0
- package/skills/dev/databases/stacks/mysql.md +216 -0
- package/skills/dev/databases/stacks/postgres.md +235 -0
- package/skills/dev/databases/stacks/sqlite.md +244 -0
- package/skills/dev/databases/transactional.md +176 -0
- package/skills/dev/devops/.env.example +76 -0
- package/skills/dev/devops/SKILL.md +97 -0
- package/skills/dev/devops/references/browser-rendering.md +305 -0
- package/skills/dev/devops/references/cloudflare-d1-kv.md +123 -0
- package/skills/dev/devops/references/cloudflare-platform.md +271 -0
- package/skills/dev/devops/references/cloudflare-r2-storage.md +280 -0
- package/skills/dev/devops/references/cloudflare-workers-advanced.md +312 -0
- package/skills/dev/devops/references/cloudflare-workers-apis.md +309 -0
- package/skills/dev/devops/references/cloudflare-workers-basics.md +418 -0
- package/skills/dev/devops/references/docker-basics.md +297 -0
- package/skills/dev/devops/references/docker-compose.md +292 -0
- package/skills/dev/devops/references/gcloud-platform.md +297 -0
- package/skills/dev/devops/references/gcloud-services.md +304 -0
- package/skills/dev/devops/references/kubernetes-basics.md +99 -0
- package/skills/dev/devops/references/kubernetes-helm-advanced.md +75 -0
- package/skills/dev/devops/references/kubernetes-helm.md +81 -0
- package/skills/dev/devops/references/kubernetes-kubectl.md +74 -0
- package/skills/dev/devops/references/kubernetes-security-advanced.md +98 -0
- package/skills/dev/devops/references/kubernetes-security.md +95 -0
- package/skills/dev/devops/references/kubernetes-troubleshooting-advanced.md +74 -0
- package/skills/dev/devops/references/kubernetes-troubleshooting.md +49 -0
- package/skills/dev/devops/references/kubernetes-workflows-advanced.md +75 -0
- package/skills/dev/devops/references/kubernetes-workflows.md +78 -0
- package/skills/dev/devops/scripts/cloudflare_deploy.py +269 -0
- package/skills/dev/devops/scripts/docker_optimize.py +332 -0
- package/skills/dev/devops/scripts/requirements.txt +20 -0
- package/skills/dev/devops/scripts/tests/requirements.txt +3 -0
- package/skills/dev/devops/scripts/tests/test_cloudflare_deploy.py +285 -0
- package/skills/dev/devops/scripts/tests/test_docker_optimize.py +436 -0
- package/skills/dev/frontend-design/SKILL.md +78 -0
- package/skills/dev/frontend-design/references/ai-multimodal-overview.md +165 -0
- package/skills/dev/frontend-design/references/analysis-best-practices.md +80 -0
- package/skills/dev/frontend-design/references/analysis-prompts.md +141 -0
- package/skills/dev/frontend-design/references/analysis-techniques.md +118 -0
- package/skills/dev/frontend-design/references/animejs.md +396 -0
- package/skills/dev/frontend-design/references/asset-generation.md +337 -0
- package/skills/dev/frontend-design/references/design-extraction-overview.md +71 -0
- package/skills/dev/frontend-design/references/extraction-best-practices.md +141 -0
- package/skills/dev/frontend-design/references/extraction-output-templates.md +162 -0
- package/skills/dev/frontend-design/references/extraction-prompts.md +127 -0
- package/skills/dev/frontend-design/references/technical-accessibility.md +119 -0
- package/skills/dev/frontend-design/references/technical-best-practices.md +97 -0
- package/skills/dev/frontend-design/references/technical-optimization.md +44 -0
- package/skills/dev/frontend-design/references/technical-overview.md +90 -0
- package/skills/dev/frontend-design/references/technical-workflows.md +150 -0
- package/skills/dev/frontend-design/references/visual-analysis-overview.md +95 -0
- package/skills/dev/frontend-design/references/workflow-3d.md +102 -0
- package/skills/dev/frontend-design/references/workflow-describe.md +87 -0
- package/skills/dev/frontend-design/references/workflow-immersive.md +87 -0
- package/skills/dev/frontend-design/references/workflow-quick.md +57 -0
- package/skills/dev/frontend-design/references/workflow-screenshot.md +63 -0
- package/skills/dev/frontend-design/references/workflow-video.md +74 -0
- package/skills/dev/frontend-dev/SKILL.md +400 -0
- package/skills/dev/frontend-dev/resources/common-patterns.md +331 -0
- package/skills/dev/frontend-dev/resources/complete-examples.md +872 -0
- package/skills/dev/frontend-dev/resources/component-patterns.md +502 -0
- package/skills/dev/frontend-dev/resources/data-fetching.md +767 -0
- package/skills/dev/frontend-dev/resources/file-organization.md +502 -0
- package/skills/dev/frontend-dev/resources/loading-and-error-states.md +501 -0
- package/skills/dev/frontend-dev/resources/performance.md +406 -0
- package/skills/dev/frontend-dev/resources/routing-guide.md +364 -0
- package/skills/dev/frontend-dev/resources/styling-guide.md +428 -0
- package/skills/dev/frontend-dev/resources/typescript-standards.md +418 -0
- package/skills/dev/git/SKILL.md +114 -0
- package/skills/dev/git/references/branch-management.md +88 -0
- package/skills/dev/git/references/commit-standards.md +46 -0
- package/skills/dev/git/references/gh-cli-guide.md +109 -0
- package/skills/dev/git/references/safety-protocols.md +69 -0
- package/skills/dev/git/references/workflow-commit.md +58 -0
- package/skills/dev/git/references/workflow-merge.md +48 -0
- package/skills/dev/git/references/workflow-pr.md +58 -0
- package/skills/dev/git/references/workflow-push.md +52 -0
- package/skills/dev/git-worktree/SKILL.md +218 -0
- package/skills/utils/ask/SKILL.md +58 -0
- package/skills/utils/bootstrap/SKILL.md +101 -0
- package/skills/utils/bootstrap/references/shared-phases.md +59 -0
- package/skills/utils/bootstrap/references/workflow-auto.md +52 -0
- package/skills/utils/bootstrap/references/workflow-fast.md +50 -0
- package/skills/utils/bootstrap/references/workflow-full.md +60 -0
- package/skills/utils/bootstrap/references/workflow-parallel.md +59 -0
- package/skills/utils/ck-help/SKILL.md +102 -0
- package/skills/utils/ck-help/scripts/ck-help.py +1321 -0
- package/skills/utils/ck-help/scripts/commands_data.yaml +3 -0
- package/skills/utils/ck-help/scripts/skills_data.yaml +593 -0
- package/skills/utils/copywriting/SKILL.md +94 -0
- package/skills/utils/copywriting/references/copy-formulas.md +150 -0
- package/skills/utils/copywriting/references/cta-patterns.md +168 -0
- package/skills/utils/copywriting/references/email-copy.md +193 -0
- package/skills/utils/copywriting/references/headline-templates.md +140 -0
- package/skills/utils/copywriting/references/landing-page-copy.md +175 -0
- package/skills/utils/copywriting/references/power-words.md +189 -0
- package/skills/utils/copywriting/references/social-media-copy.md +222 -0
- package/skills/utils/copywriting/references/workflow-cro.md +83 -0
- package/skills/utils/copywriting/references/workflow-enhance.md +32 -0
- package/skills/utils/copywriting/references/workflow-fast.md +29 -0
- package/skills/utils/copywriting/references/workflow-good.md +39 -0
- package/skills/utils/copywriting/references/writing-styles.md +247 -0
- package/skills/utils/copywriting/scripts/extract-writing-styles.py +308 -0
- package/skills/utils/copywriting/templates/copy-brief.md +49 -0
- package/skills/utils/docs/SKILL.md +55 -0
- package/skills/utils/docs/references/init-workflow.md +32 -0
- package/skills/utils/docs/references/summarize-workflow.md +18 -0
- package/skills/utils/docs/references/update-workflow.md +59 -0
- package/skills/utils/journal/SKILL.md +11 -0
- package/skills/utils/kanban/SKILL.md +99 -0
- package/skills/utils/preview/SKILL.md +75 -0
- package/skills/utils/preview/references/generation-modes.md +95 -0
- package/skills/utils/preview/references/view-mode.md +42 -0
- package/skills/utils/repomix/SKILL.md +248 -0
- package/skills/utils/repomix/references/configuration.md +211 -0
- package/skills/utils/repomix/references/usage-patterns.md +232 -0
- package/skills/utils/repomix/scripts/.coverage +0 -0
- package/skills/utils/repomix/scripts/README.md +179 -0
- package/skills/utils/repomix/scripts/repomix_batch.py +455 -0
- package/skills/utils/repomix/scripts/repos.example.json +15 -0
- package/skills/utils/repomix/scripts/requirements.txt +15 -0
- package/skills/utils/repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/skills/utils/research/SKILL.md +171 -0
- package/skills/utils/scout/SKILL.md +89 -0
- package/skills/utils/scout/references/external-scouting.md +140 -0
- package/skills/utils/scout/references/internal-scouting.md +119 -0
- package/skills/utils/scout/references/task-management-scouting.md +125 -0
- package/skills/utils/sequential-thinking/.env.example +8 -0
- package/skills/utils/sequential-thinking/README.md +183 -0
- package/skills/utils/sequential-thinking/SKILL.md +95 -0
- package/skills/utils/sequential-thinking/package.json +31 -0
- package/skills/utils/sequential-thinking/references/advanced-strategies.md +79 -0
- package/skills/utils/sequential-thinking/references/advanced-techniques.md +76 -0
- package/skills/utils/sequential-thinking/references/core-patterns.md +95 -0
- package/skills/utils/sequential-thinking/references/examples-api.md +88 -0
- package/skills/utils/sequential-thinking/references/examples-architecture.md +94 -0
- package/skills/utils/sequential-thinking/references/examples-debug.md +90 -0
- package/skills/utils/sequential-thinking/scripts/format-thought.js +159 -0
- package/skills/utils/sequential-thinking/scripts/process-thought.js +236 -0
- package/skills/utils/sequential-thinking/tests/format-thought.test.js +133 -0
- package/skills/utils/sequential-thinking/tests/process-thought.test.js +215 -0
- package/skills/utils/write-skill/SKILL.md +655 -0
- package/skills/utils/write-skill/anthropic-best-practices.md +1150 -0
- package/skills/utils/write-skill/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/utils/write-skill/graphviz-conventions.dot +172 -0
- package/skills/utils/write-skill/persuasion-principles.md +187 -0
- package/skills/utils/write-skill/render-graphs.js +168 -0
- package/skills/utils/write-skill/testing-skills-with-subagents.md +384 -0
- package/src/commands/init.js +238 -0
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
# MongoDB Indexing and Performance
|
|
2
|
+
|
|
3
|
+
Index types, strategies, and performance optimization techniques for MongoDB.
|
|
4
|
+
|
|
5
|
+
## Index Fundamentals
|
|
6
|
+
|
|
7
|
+
Indexes improve query performance by allowing MongoDB to scan fewer documents. Without indexes, MongoDB performs collection scans (reads every document).
|
|
8
|
+
|
|
9
|
+
```javascript
|
|
10
|
+
// Check if query uses index
|
|
11
|
+
db.users.find({ email: "user@example.com" }).explain("executionStats")
|
|
12
|
+
|
|
13
|
+
// Key metrics:
|
|
14
|
+
// - executionTimeMillis: query duration
|
|
15
|
+
// - totalDocsExamined: documents scanned
|
|
16
|
+
// - nReturned: documents returned
|
|
17
|
+
// - stage: IXSCAN (index) vs COLLSCAN (full scan)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Index Types
|
|
21
|
+
|
|
22
|
+
### Single Field Index
|
|
23
|
+
```javascript
|
|
24
|
+
// Create index on single field
|
|
25
|
+
db.users.createIndex({ email: 1 }) // 1: ascending, -1: descending
|
|
26
|
+
|
|
27
|
+
// Use case: queries filtering by email
|
|
28
|
+
db.users.find({ email: "user@example.com" })
|
|
29
|
+
|
|
30
|
+
// Drop index
|
|
31
|
+
db.users.dropIndex({ email: 1 })
|
|
32
|
+
db.users.dropIndex("email_1") // By name
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Compound Index
|
|
36
|
+
```javascript
|
|
37
|
+
// Index on multiple fields (order matters!)
|
|
38
|
+
db.orders.createIndex({ status: 1, createdAt: -1 })
|
|
39
|
+
|
|
40
|
+
// Supports queries on:
|
|
41
|
+
// 1. { status: "..." }
|
|
42
|
+
// 2. { status: "...", createdAt: ... }
|
|
43
|
+
// Does NOT efficiently support: { createdAt: ... } alone
|
|
44
|
+
|
|
45
|
+
// Left-to-right prefix rule
|
|
46
|
+
db.orders.createIndex({ a: 1, b: 1, c: 1 })
|
|
47
|
+
// Supports: {a}, {a,b}, {a,b,c}
|
|
48
|
+
// Not: {b}, {c}, {b,c}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Text Index (Full-Text Search)
|
|
52
|
+
```javascript
|
|
53
|
+
// Create text index
|
|
54
|
+
db.articles.createIndex({ title: "text", body: "text" })
|
|
55
|
+
|
|
56
|
+
// Only one text index per collection
|
|
57
|
+
db.articles.createIndex({
|
|
58
|
+
title: "text",
|
|
59
|
+
body: "text",
|
|
60
|
+
tags: "text"
|
|
61
|
+
}, {
|
|
62
|
+
weights: {
|
|
63
|
+
title: 10, // Title matches weighted higher
|
|
64
|
+
body: 5,
|
|
65
|
+
tags: 3
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
// Search
|
|
70
|
+
db.articles.find({ $text: { $search: "mongodb database" } })
|
|
71
|
+
|
|
72
|
+
// Search with score
|
|
73
|
+
db.articles.find(
|
|
74
|
+
{ $text: { $search: "mongodb" } },
|
|
75
|
+
{ score: { $meta: "textScore" } }
|
|
76
|
+
).sort({ score: { $meta: "textScore" } })
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Geospatial Indexes
|
|
80
|
+
```javascript
|
|
81
|
+
// 2dsphere index (spherical geometry)
|
|
82
|
+
db.places.createIndex({ location: "2dsphere" })
|
|
83
|
+
|
|
84
|
+
// Document format
|
|
85
|
+
db.places.insertOne({
|
|
86
|
+
name: "Coffee Shop",
|
|
87
|
+
location: {
|
|
88
|
+
type: "Point",
|
|
89
|
+
coordinates: [-73.97, 40.77] // [longitude, latitude]
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
// Find nearby
|
|
94
|
+
db.places.find({
|
|
95
|
+
location: {
|
|
96
|
+
$near: {
|
|
97
|
+
$geometry: { type: "Point", coordinates: [-73.97, 40.77] },
|
|
98
|
+
$maxDistance: 5000 // meters
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
// Within polygon
|
|
104
|
+
db.places.find({
|
|
105
|
+
location: {
|
|
106
|
+
$geoWithin: {
|
|
107
|
+
$geometry: {
|
|
108
|
+
type: "Polygon",
|
|
109
|
+
coordinates: [[
|
|
110
|
+
[lon1, lat1], [lon2, lat2], [lon3, lat3], [lon1, lat1]
|
|
111
|
+
]]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
})
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Wildcard Index
|
|
119
|
+
```javascript
|
|
120
|
+
// Index all fields in subdocuments
|
|
121
|
+
db.products.createIndex({ "attributes.$**": 1 })
|
|
122
|
+
|
|
123
|
+
// Supports queries on any nested field
|
|
124
|
+
db.products.find({ "attributes.color": "red" })
|
|
125
|
+
db.products.find({ "attributes.size": "large" })
|
|
126
|
+
|
|
127
|
+
// Specific paths only
|
|
128
|
+
db.products.createIndex(
|
|
129
|
+
{ "$**": 1 },
|
|
130
|
+
{ wildcardProjection: { "attributes.color": 1, "attributes.size": 1 } }
|
|
131
|
+
)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Hashed Index
|
|
135
|
+
```javascript
|
|
136
|
+
// Hashed index (for even distribution in sharding)
|
|
137
|
+
db.users.createIndex({ userId: "hashed" })
|
|
138
|
+
|
|
139
|
+
// Use case: shard key
|
|
140
|
+
sh.shardCollection("mydb.users", { userId: "hashed" })
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### TTL Index (Auto-Expiration)
|
|
144
|
+
```javascript
|
|
145
|
+
// Delete documents after specified time
|
|
146
|
+
db.sessions.createIndex(
|
|
147
|
+
{ createdAt: 1 },
|
|
148
|
+
{ expireAfterSeconds: 3600 } // 1 hour
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
// Documents automatically deleted after createdAt + 3600 seconds
|
|
152
|
+
// Background task runs every 60 seconds
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Partial Index
|
|
156
|
+
```javascript
|
|
157
|
+
// Index only documents matching filter
|
|
158
|
+
db.orders.createIndex(
|
|
159
|
+
{ customerId: 1 },
|
|
160
|
+
{ partialFilterExpression: { status: "active" } }
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
// Index only used when query includes filter
|
|
164
|
+
db.orders.find({ customerId: "123", status: "active" }) // Uses index
|
|
165
|
+
db.orders.find({ customerId: "123" }) // Does not use index
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Unique Index
|
|
169
|
+
```javascript
|
|
170
|
+
// Enforce uniqueness
|
|
171
|
+
db.users.createIndex({ email: 1 }, { unique: true })
|
|
172
|
+
|
|
173
|
+
// Compound unique index
|
|
174
|
+
db.users.createIndex({ firstName: 1, lastName: 1 }, { unique: true })
|
|
175
|
+
|
|
176
|
+
// Sparse unique index (null values not indexed)
|
|
177
|
+
db.users.createIndex({ email: 1 }, { unique: true, sparse: true })
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Sparse Index
|
|
181
|
+
```javascript
|
|
182
|
+
// Index only documents with field present
|
|
183
|
+
db.users.createIndex({ phoneNumber: 1 }, { sparse: true })
|
|
184
|
+
|
|
185
|
+
// Useful for optional fields
|
|
186
|
+
// Documents without phoneNumber not in index
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Index Management
|
|
190
|
+
|
|
191
|
+
### List Indexes
|
|
192
|
+
```javascript
|
|
193
|
+
// Show all indexes
|
|
194
|
+
db.collection.getIndexes()
|
|
195
|
+
|
|
196
|
+
// Index statistics
|
|
197
|
+
db.collection.aggregate([{ $indexStats: {} }])
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Create Index Options
|
|
201
|
+
```javascript
|
|
202
|
+
// Background index (doesn't block operations)
|
|
203
|
+
db.collection.createIndex({ field: 1 }, { background: true })
|
|
204
|
+
|
|
205
|
+
// Index name
|
|
206
|
+
db.collection.createIndex({ field: 1 }, { name: "custom_index_name" })
|
|
207
|
+
|
|
208
|
+
// Case-insensitive index (collation)
|
|
209
|
+
db.collection.createIndex(
|
|
210
|
+
{ name: 1 },
|
|
211
|
+
{ collation: { locale: "en", strength: 2 } }
|
|
212
|
+
)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Hide/Unhide Index
|
|
216
|
+
```javascript
|
|
217
|
+
// Hide index (test before dropping)
|
|
218
|
+
db.collection.hideIndex("index_name")
|
|
219
|
+
|
|
220
|
+
// Check performance without index
|
|
221
|
+
// ...
|
|
222
|
+
|
|
223
|
+
// Unhide or drop
|
|
224
|
+
db.collection.unhideIndex("index_name")
|
|
225
|
+
db.collection.dropIndex("index_name")
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Rebuild Indexes
|
|
229
|
+
```javascript
|
|
230
|
+
// Rebuild all indexes (after data changes)
|
|
231
|
+
db.collection.reIndex()
|
|
232
|
+
|
|
233
|
+
// Useful after bulk deletions to reclaim space
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Query Optimization
|
|
237
|
+
|
|
238
|
+
### Covered Queries
|
|
239
|
+
```javascript
|
|
240
|
+
// Query covered by index (no document fetch)
|
|
241
|
+
db.users.createIndex({ email: 1, name: 1 })
|
|
242
|
+
|
|
243
|
+
// Covered query (all fields in index)
|
|
244
|
+
db.users.find(
|
|
245
|
+
{ email: "user@example.com" },
|
|
246
|
+
{ email: 1, name: 1, _id: 0 } // Must exclude _id
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
// Check with explain: stage should be "IXSCAN" with no "FETCH"
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Index Intersection
|
|
253
|
+
```javascript
|
|
254
|
+
// MongoDB can use multiple indexes
|
|
255
|
+
db.collection.createIndex({ a: 1 })
|
|
256
|
+
db.collection.createIndex({ b: 1 })
|
|
257
|
+
|
|
258
|
+
// Query may use both indexes
|
|
259
|
+
db.collection.find({ a: 1, b: 1 })
|
|
260
|
+
|
|
261
|
+
// Usually compound index is better
|
|
262
|
+
db.collection.createIndex({ a: 1, b: 1 })
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Index Hints
|
|
266
|
+
```javascript
|
|
267
|
+
// Force specific index
|
|
268
|
+
db.orders.find({ status: "active", city: "NYC" })
|
|
269
|
+
.hint({ status: 1, createdAt: -1 })
|
|
270
|
+
|
|
271
|
+
// Force no index (for testing)
|
|
272
|
+
db.orders.find({ status: "active" }).hint({ $natural: 1 })
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### ESR Rule (Equality, Sort, Range)
|
|
276
|
+
```javascript
|
|
277
|
+
// Optimal compound index order: Equality → Sort → Range
|
|
278
|
+
|
|
279
|
+
// Query
|
|
280
|
+
db.orders.find({
|
|
281
|
+
status: "completed", // Equality
|
|
282
|
+
category: "electronics" // Equality
|
|
283
|
+
}).sort({
|
|
284
|
+
orderDate: -1 // Sort
|
|
285
|
+
}).limit(10)
|
|
286
|
+
|
|
287
|
+
// Optimal index
|
|
288
|
+
db.orders.createIndex({
|
|
289
|
+
status: 1, // Equality first
|
|
290
|
+
category: 1, // Equality
|
|
291
|
+
orderDate: -1 // Sort last
|
|
292
|
+
})
|
|
293
|
+
|
|
294
|
+
// With range
|
|
295
|
+
db.orders.find({
|
|
296
|
+
status: "completed", // Equality
|
|
297
|
+
total: { $gte: 100 } // Range
|
|
298
|
+
}).sort({
|
|
299
|
+
orderDate: -1 // Sort
|
|
300
|
+
})
|
|
301
|
+
|
|
302
|
+
// Optimal index
|
|
303
|
+
db.orders.createIndex({
|
|
304
|
+
status: 1, // Equality
|
|
305
|
+
orderDate: -1, // Sort
|
|
306
|
+
total: 1 // Range last
|
|
307
|
+
})
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## Performance Analysis
|
|
311
|
+
|
|
312
|
+
### explain() Modes
|
|
313
|
+
```javascript
|
|
314
|
+
// Query planner (default)
|
|
315
|
+
db.collection.find({ field: value }).explain()
|
|
316
|
+
|
|
317
|
+
// Execution stats
|
|
318
|
+
db.collection.find({ field: value }).explain("executionStats")
|
|
319
|
+
|
|
320
|
+
// All execution stats
|
|
321
|
+
db.collection.find({ field: value }).explain("allPlansExecution")
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Key Metrics
|
|
325
|
+
```javascript
|
|
326
|
+
// Good performance indicators:
|
|
327
|
+
// - executionTimeMillis < 100ms
|
|
328
|
+
// - totalDocsExamined ≈ nReturned (examine only what's needed)
|
|
329
|
+
// - stage: "IXSCAN" (using index)
|
|
330
|
+
// - totalKeysExamined ≈ nReturned (index selectivity)
|
|
331
|
+
|
|
332
|
+
// Bad indicators:
|
|
333
|
+
// - stage: "COLLSCAN" (full collection scan)
|
|
334
|
+
// - totalDocsExamined >> nReturned (scanning too many docs)
|
|
335
|
+
// - executionTimeMillis > 1000ms
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Index Selectivity
|
|
339
|
+
```javascript
|
|
340
|
+
// High selectivity = good (returns few documents)
|
|
341
|
+
// Low selectivity = bad (returns many documents)
|
|
342
|
+
|
|
343
|
+
// Check selectivity
|
|
344
|
+
db.collection.aggregate([
|
|
345
|
+
{ $group: { _id: "$status", count: { $sum: 1 } } }
|
|
346
|
+
])
|
|
347
|
+
|
|
348
|
+
// Good for indexing: email, userId, orderId
|
|
349
|
+
// Bad for indexing: gender, status (few unique values)
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## Index Strategies
|
|
353
|
+
|
|
354
|
+
### Multi-Tenant Applications
|
|
355
|
+
```javascript
|
|
356
|
+
// Always filter by tenant first
|
|
357
|
+
db.data.createIndex({ tenantId: 1, createdAt: -1 })
|
|
358
|
+
|
|
359
|
+
// All queries include tenantId
|
|
360
|
+
db.data.find({ tenantId: "tenant1", createdAt: { $gte: date } })
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Time-Series Data
|
|
364
|
+
```javascript
|
|
365
|
+
// Index on timestamp descending (recent data accessed more)
|
|
366
|
+
db.events.createIndex({ timestamp: -1 })
|
|
367
|
+
|
|
368
|
+
// Compound with filter fields
|
|
369
|
+
db.events.createIndex({ userId: 1, timestamp: -1 })
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### Lookup Optimization
|
|
373
|
+
```javascript
|
|
374
|
+
// Index foreign key fields
|
|
375
|
+
db.orders.createIndex({ customerId: 1 })
|
|
376
|
+
db.customers.createIndex({ _id: 1 }) // Default _id index
|
|
377
|
+
|
|
378
|
+
// Aggregation $lookup uses these indexes
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Best Practices
|
|
382
|
+
|
|
383
|
+
1. **Create indexes for frequent queries** - Analyze slow query logs
|
|
384
|
+
2. **Limit number of indexes** - Each index adds write overhead
|
|
385
|
+
3. **Use compound indexes** - More efficient than multiple single indexes
|
|
386
|
+
4. **Follow ESR rule** - Equality, Sort, Range order
|
|
387
|
+
5. **Use covered queries** - When possible, avoid document fetches
|
|
388
|
+
6. **Monitor index usage** - Drop unused indexes
|
|
389
|
+
```javascript
|
|
390
|
+
db.collection.aggregate([{ $indexStats: {} }])
|
|
391
|
+
```
|
|
392
|
+
7. **Partial indexes for filtered queries** - Reduce index size
|
|
393
|
+
8. **Consider index size** - Should fit in RAM
|
|
394
|
+
```javascript
|
|
395
|
+
db.collection.stats().indexSizes
|
|
396
|
+
```
|
|
397
|
+
9. **Background index creation** - Don't block operations (deprecated in 4.2+)
|
|
398
|
+
10. **Test with explain** - Verify query plan before production
|
|
399
|
+
|
|
400
|
+
## Common Pitfalls
|
|
401
|
+
|
|
402
|
+
1. **Over-indexing** - Too many indexes slow writes
|
|
403
|
+
2. **Unused indexes** - Waste space and write performance
|
|
404
|
+
3. **Regex without prefix** - `/pattern/` can't use index, `/^pattern/` can
|
|
405
|
+
4. **$ne, $nin queries** - Often scan entire collection
|
|
406
|
+
5. **$or with multiple branches** - May not use indexes efficiently
|
|
407
|
+
6. **Sort without index** - In-memory sort limited to 32MB
|
|
408
|
+
7. **Compound index order** - Wrong order makes index useless
|
|
409
|
+
8. **Case-sensitive queries** - Use collation for case-insensitive
|
|
410
|
+
|
|
411
|
+
## Monitoring
|
|
412
|
+
|
|
413
|
+
```javascript
|
|
414
|
+
// Current operations
|
|
415
|
+
db.currentOp()
|
|
416
|
+
|
|
417
|
+
// Slow queries (enable profiling)
|
|
418
|
+
db.setProfilingLevel(1, { slowms: 100 })
|
|
419
|
+
db.system.profile.find().sort({ ts: -1 }).limit(10)
|
|
420
|
+
|
|
421
|
+
// Index statistics
|
|
422
|
+
db.collection.aggregate([
|
|
423
|
+
{ $indexStats: {} },
|
|
424
|
+
{ $sort: { "accesses.ops": -1 } }
|
|
425
|
+
])
|
|
426
|
+
|
|
427
|
+
// Collection statistics
|
|
428
|
+
db.collection.stats()
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
## Index Size Calculation
|
|
432
|
+
|
|
433
|
+
```javascript
|
|
434
|
+
// Check index sizes
|
|
435
|
+
db.collection.stats().indexSizes
|
|
436
|
+
|
|
437
|
+
// Total index size
|
|
438
|
+
db.collection.totalIndexSize()
|
|
439
|
+
|
|
440
|
+
// Recommend: indexes fit in RAM
|
|
441
|
+
// Monitor: db.serverStatus().mem
|
|
442
|
+
```
|