moai-adk 0.32.8__py3-none-any.whl → 0.41.2__py3-none-any.whl
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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/cli/commands/init.py +4 -1
- moai_adk/cli/commands/update.py +31 -26
- moai_adk/cli/worktree/cli.py +54 -43
- moai_adk/cli/worktree/manager.py +17 -14
- moai_adk/cli/worktree/registry.py +313 -19
- moai_adk/core/config/unified.py +237 -63
- moai_adk/core/error_recovery_system.py +22 -4
- moai_adk/core/git/conflict_detector.py +10 -1
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/language_config_resolver.py +96 -3
- moai_adk/core/merge/analyzer.py +509 -324
- moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
- moai_adk/core/migration/backup_manager.py +54 -4
- moai_adk/core/migration/file_migrator.py +174 -2
- moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
- moai_adk/core/migration/version_detector.py +123 -19
- moai_adk/core/migration/version_migrator.py +44 -9
- moai_adk/core/project/backup_utils.py +9 -1
- moai_adk/core/project/initializer.py +33 -96
- moai_adk/core/project/phase_executor.py +79 -33
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/realtime_monitoring_dashboard.py +3 -3
- moai_adk/core/rollback_manager.py +46 -19
- moai_adk/core/template/backup.py +4 -3
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +144 -9
- moai_adk/core/template_engine.py +10 -1
- moai_adk/core/template_variable_synchronizer.py +16 -2
- moai_adk/core/version_sync.py +54 -6
- moai_adk/project/configuration.py +1 -1
- moai_adk/statusline/config.py +5 -2
- moai_adk/statusline/main.py +58 -0
- moai_adk/statusline/renderer.py +56 -84
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +218 -51
- moai_adk/templates/.claude/agents/moai/builder-agent.md +46 -11
- moai_adk/templates/.claude/agents/moai/builder-command.md +88 -26
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +753 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +79 -8
- moai_adk/templates/.claude/agents/moai/expert-backend.md +100 -28
- moai_adk/templates/.claude/agents/moai/expert-database.md +20 -12
- moai_adk/templates/.claude/agents/moai/expert-debug.md +19 -8
- moai_adk/templates/.claude/agents/moai/expert-devops.md +36 -25
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +99 -38
- moai_adk/templates/.claude/agents/moai/expert-performance.md +661 -0
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +218 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +55 -4
- moai_adk/templates/.claude/agents/moai/expert-testing.md +737 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +20 -11
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +13 -4
- moai_adk/templates/.claude/agents/moai/manager-docs.md +15 -7
- moai_adk/templates/.claude/agents/moai/manager-git.md +192 -37
- moai_adk/templates/.claude/agents/moai/manager-project.md +13 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +48 -6
- moai_adk/templates/.claude/agents/moai/manager-spec.md +110 -8
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +203 -17
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +217 -23
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +102 -7
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +107 -86
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +50 -4
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +52 -4
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +49 -5
- moai_adk/templates/.claude/commands/moai/0-project.md +503 -307
- moai_adk/templates/.claude/commands/moai/1-plan.md +255 -323
- moai_adk/templates/.claude/commands/moai/2-run.md +257 -315
- moai_adk/templates/.claude/commands/moai/3-sync.md +421 -56
- moai_adk/templates/.claude/commands/moai/9-feedback.md +40 -34
- moai_adk/templates/.claude/hooks/moai/__init__.py +0 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +19 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
- moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +12 -14
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +1 -1
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +104 -14
- moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
- moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
- moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +804 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +14 -2
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +256 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +253 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +307 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +231 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +40 -24
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +248 -32
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +265 -2
- moai_adk/templates/.claude/output-styles/moai/yoda.md +23 -2
- moai_adk/templates/.claude/settings.json +44 -6
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +303 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/reference.md +139 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -196
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +252 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +234 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +19 -13
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +21 -14
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +124 -425
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +17 -15
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +105 -315
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +6 -6
- moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +197 -154
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +2 -2
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +12 -1
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +33 -134
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +31 -18
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +30 -30
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +311 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +17 -16
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +431 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +194 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +395 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +473 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +378 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +387 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +419 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +384 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +505 -0
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +490 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +433 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +17 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +378 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +212 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +192 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +365 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +94 -227
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +26 -6
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
- moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +17 -13
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +1 -1
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +426 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +229 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +250 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +206 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +207 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/modules/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/modules/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/SKILL.md +215 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/examples.md +697 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/index.md +96 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/acp.md +115 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/agents.md +241 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/commands.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/custom-tools.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/formatters.md +164 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/keybinds.md +150 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/lsp-servers.md +156 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/mcp-servers.md +214 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/models.md +197 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/permissions.md +162 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/rules.md +129 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/skills.md +192 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/themes.md +200 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/configure/tools.md +169 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/config.md +211 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/enterprise.md +68 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/intro.md +127 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/migration-1.0.md +82 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/network.md +72 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/providers.md +310 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/core/troubleshooting.md +124 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/ecosystem.md +75 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/plugins.md +218 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/sdk.md +266 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/develop/server.md +207 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/cli.md +159 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/github.md +181 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/gitlab.md +122 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/ide.md +74 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/share.md +106 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/tui.md +129 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/modules/usage/zen.md +118 -0
- moai_adk/templates/.claude/skills/moai-tool-opencode/reference.md +790 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +190 -424
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +188 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +284 -212
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +2 -2
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +1 -1
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +22 -1
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +337 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +13 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +222 -367
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
- moai_adk/templates/.git-hooks/pre-push +168 -50
- moai_adk/templates/.gitignore +0 -3
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +5 -12
- moai_adk/templates/.moai/config/config.yaml +20 -306
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +105 -10
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +259 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +4 -5
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +12 -55
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +111 -21
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +34 -18
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +19 -75
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +83 -7
- moai_adk/templates/.moai/config/sections/language.yaml +7 -7
- moai_adk/templates/.moai/config/sections/project.yaml +1 -1
- moai_adk/templates/.moai/config/sections/quality.yaml +7 -4
- moai_adk/templates/.moai/config/sections/system.yaml +11 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +19 -13
- moai_adk/templates/.moai/scripts/setup-glm.py +4 -4
- moai_adk/templates/CLAUDE.md +578 -154
- moai_adk/utils/common.py +33 -0
- moai_adk/version.py +1 -1
- {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/METADATA +905 -109
- moai_adk-0.41.2.dist-info/RECORD +683 -0
- moai_adk/core/config/auto_spec_config.py +0 -340
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
- moai_adk/core/spec/confidence_scoring.py +0 -680
- moai_adk/core/spec/ears_template_engine.py +0 -1247
- moai_adk/core/spec/quality_validator.py +0 -687
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +0 -352
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +0 -52
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +0 -334
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +0 -310
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +0 -256
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +0 -253
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +0 -133
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +0 -296
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +0 -1269
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +0 -331
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-platform-baas/README.md +0 -186
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +0 -290
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +0 -1225
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +0 -567
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +0 -323
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +0 -204
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -135
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -410
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
- moai_adk/templates/.moai/cache/personalization.json +0 -10
- moai_adk/templates/.moai/config/presets/manual.yaml +0 -28
- moai_adk/templates/.moai/config/presets/personal.yaml +0 -30
- moai_adk/templates/.moai/config/presets/team.yaml +0 -33
- moai_adk-0.32.8.dist-info/RECORD +0 -396
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
- {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/WHEEL +0 -0
- {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.32.8.dist-info → moai_adk-0.41.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: edge-functions
|
|
3
|
+
description: Serverless Deno functions at the edge with authentication and rate limiting
|
|
4
|
+
parent-skill: moai-platform-supabase
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
updated: 2026-01-06
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Edge Functions Module
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Supabase Edge Functions are serverless functions running on the Deno runtime at the edge, providing low-latency responses globally.
|
|
14
|
+
|
|
15
|
+
## Basic Edge Function
|
|
16
|
+
|
|
17
|
+
### Function Structure
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// supabase/functions/api/index.ts
|
|
21
|
+
import { serve } from 'https://deno.land/std@0.168.0/http/server.ts'
|
|
22
|
+
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2'
|
|
23
|
+
|
|
24
|
+
const corsHeaders = {
|
|
25
|
+
'Access-Control-Allow-Origin': '*',
|
|
26
|
+
'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type'
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
serve(async (req) => {
|
|
30
|
+
// Handle CORS preflight
|
|
31
|
+
if (req.method === 'OPTIONS') {
|
|
32
|
+
return new Response('ok', { headers: corsHeaders })
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const supabase = createClient(
|
|
37
|
+
Deno.env.get('SUPABASE_URL')!,
|
|
38
|
+
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
// Process request
|
|
42
|
+
const body = await req.json()
|
|
43
|
+
|
|
44
|
+
return new Response(
|
|
45
|
+
JSON.stringify({ success: true, data: body }),
|
|
46
|
+
{ headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
|
47
|
+
)
|
|
48
|
+
} catch (error) {
|
|
49
|
+
return new Response(
|
|
50
|
+
JSON.stringify({ error: error.message }),
|
|
51
|
+
{ status: 500, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Authentication
|
|
58
|
+
|
|
59
|
+
### JWT Token Verification
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
serve(async (req) => {
|
|
63
|
+
if (req.method === 'OPTIONS') {
|
|
64
|
+
return new Response('ok', { headers: corsHeaders })
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const supabase = createClient(
|
|
68
|
+
Deno.env.get('SUPABASE_URL')!,
|
|
69
|
+
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
// Verify JWT token
|
|
73
|
+
const authHeader = req.headers.get('authorization')
|
|
74
|
+
if (!authHeader) {
|
|
75
|
+
return new Response(
|
|
76
|
+
JSON.stringify({ error: 'Unauthorized' }),
|
|
77
|
+
{ status: 401, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const { data: { user }, error } = await supabase.auth.getUser(
|
|
82
|
+
authHeader.replace('Bearer ', '')
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
if (error || !user) {
|
|
86
|
+
return new Response(
|
|
87
|
+
JSON.stringify({ error: 'Invalid token' }),
|
|
88
|
+
{ status: 401, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// User is authenticated, proceed with request
|
|
93
|
+
return new Response(
|
|
94
|
+
JSON.stringify({ success: true, user_id: user.id }),
|
|
95
|
+
{ headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
|
96
|
+
)
|
|
97
|
+
})
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Using User Context Client
|
|
101
|
+
|
|
102
|
+
Create a client that inherits user permissions:
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
serve(async (req) => {
|
|
106
|
+
const authHeader = req.headers.get('authorization')!
|
|
107
|
+
|
|
108
|
+
// Client with user's permissions (respects RLS)
|
|
109
|
+
const supabaseUser = createClient(
|
|
110
|
+
Deno.env.get('SUPABASE_URL')!,
|
|
111
|
+
Deno.env.get('SUPABASE_ANON_KEY')!,
|
|
112
|
+
{ global: { headers: { Authorization: authHeader } } }
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
// This query respects RLS policies
|
|
116
|
+
const { data, error } = await supabaseUser
|
|
117
|
+
.from('projects')
|
|
118
|
+
.select('*')
|
|
119
|
+
|
|
120
|
+
return new Response(JSON.stringify({ data }))
|
|
121
|
+
})
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Rate Limiting
|
|
125
|
+
|
|
126
|
+
### Database-Based Rate Limiting
|
|
127
|
+
|
|
128
|
+
```sql
|
|
129
|
+
-- Rate limits table
|
|
130
|
+
CREATE TABLE rate_limits (
|
|
131
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
132
|
+
identifier TEXT NOT NULL,
|
|
133
|
+
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
CREATE INDEX idx_rate_limits_lookup ON rate_limits(identifier, created_at);
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Rate Limit Function
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
async function checkRateLimit(
|
|
143
|
+
supabase: SupabaseClient,
|
|
144
|
+
identifier: string,
|
|
145
|
+
limit: number,
|
|
146
|
+
windowSeconds: number
|
|
147
|
+
): Promise<boolean> {
|
|
148
|
+
const windowStart = new Date(Date.now() - windowSeconds * 1000).toISOString()
|
|
149
|
+
|
|
150
|
+
const { count } = await supabase
|
|
151
|
+
.from('rate_limits')
|
|
152
|
+
.select('*', { count: 'exact', head: true })
|
|
153
|
+
.eq('identifier', identifier)
|
|
154
|
+
.gte('created_at', windowStart)
|
|
155
|
+
|
|
156
|
+
if (count && count >= limit) {
|
|
157
|
+
return false
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
await supabase.from('rate_limits').insert({ identifier })
|
|
161
|
+
return true
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Usage in Edge Function
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
serve(async (req) => {
|
|
169
|
+
const supabase = createClient(
|
|
170
|
+
Deno.env.get('SUPABASE_URL')!,
|
|
171
|
+
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
// Get client identifier (IP or user ID)
|
|
175
|
+
const identifier = req.headers.get('x-forwarded-for') || 'anonymous'
|
|
176
|
+
|
|
177
|
+
// 100 requests per minute
|
|
178
|
+
const allowed = await checkRateLimit(supabase, identifier, 100, 60)
|
|
179
|
+
|
|
180
|
+
if (!allowed) {
|
|
181
|
+
return new Response(
|
|
182
|
+
JSON.stringify({ error: 'Rate limit exceeded' }),
|
|
183
|
+
{ status: 429, headers: corsHeaders }
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Process request...
|
|
188
|
+
})
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## External API Integration
|
|
192
|
+
|
|
193
|
+
### Webhook Handler
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
serve(async (req) => {
|
|
197
|
+
const supabase = createClient(
|
|
198
|
+
Deno.env.get('SUPABASE_URL')!,
|
|
199
|
+
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
// Verify webhook signature
|
|
203
|
+
const signature = req.headers.get('x-webhook-signature')
|
|
204
|
+
const body = await req.text()
|
|
205
|
+
|
|
206
|
+
const expectedSignature = await crypto.subtle.digest(
|
|
207
|
+
'SHA-256',
|
|
208
|
+
new TextEncoder().encode(body + Deno.env.get('WEBHOOK_SECRET'))
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
if (!verifySignature(signature, expectedSignature)) {
|
|
212
|
+
return new Response('Invalid signature', { status: 401 })
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const payload = JSON.parse(body)
|
|
216
|
+
|
|
217
|
+
// Process webhook
|
|
218
|
+
await supabase.from('webhook_events').insert({
|
|
219
|
+
type: payload.type,
|
|
220
|
+
data: payload.data,
|
|
221
|
+
processed: false
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
return new Response('OK', { status: 200 })
|
|
225
|
+
})
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### External API Call
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
serve(async (req) => {
|
|
232
|
+
const { query } = await req.json()
|
|
233
|
+
|
|
234
|
+
// Call external API
|
|
235
|
+
const response = await fetch('https://api.openai.com/v1/embeddings', {
|
|
236
|
+
method: 'POST',
|
|
237
|
+
headers: {
|
|
238
|
+
'Authorization': `Bearer ${Deno.env.get('OPENAI_API_KEY')}`,
|
|
239
|
+
'Content-Type': 'application/json'
|
|
240
|
+
},
|
|
241
|
+
body: JSON.stringify({
|
|
242
|
+
model: 'text-embedding-ada-002',
|
|
243
|
+
input: query
|
|
244
|
+
})
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
const data = await response.json()
|
|
248
|
+
|
|
249
|
+
return new Response(
|
|
250
|
+
JSON.stringify({ embedding: data.data[0].embedding }),
|
|
251
|
+
{ headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
|
252
|
+
)
|
|
253
|
+
})
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Error Handling
|
|
257
|
+
|
|
258
|
+
### Structured Error Response
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
interface ErrorResponse {
|
|
262
|
+
error: string
|
|
263
|
+
code: string
|
|
264
|
+
details?: unknown
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
function errorResponse(
|
|
268
|
+
message: string,
|
|
269
|
+
code: string,
|
|
270
|
+
status: number,
|
|
271
|
+
details?: unknown
|
|
272
|
+
): Response {
|
|
273
|
+
const body: ErrorResponse = { error: message, code, details }
|
|
274
|
+
return new Response(
|
|
275
|
+
JSON.stringify(body),
|
|
276
|
+
{ status, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
|
277
|
+
)
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
serve(async (req) => {
|
|
281
|
+
try {
|
|
282
|
+
// ... processing
|
|
283
|
+
} catch (error) {
|
|
284
|
+
if (error instanceof AuthError) {
|
|
285
|
+
return errorResponse('Authentication failed', 'AUTH_ERROR', 401)
|
|
286
|
+
}
|
|
287
|
+
if (error instanceof ValidationError) {
|
|
288
|
+
return errorResponse('Invalid input', 'VALIDATION_ERROR', 400, error.details)
|
|
289
|
+
}
|
|
290
|
+
console.error('Unexpected error:', error)
|
|
291
|
+
return errorResponse('Internal server error', 'INTERNAL_ERROR', 500)
|
|
292
|
+
}
|
|
293
|
+
})
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## Deployment
|
|
297
|
+
|
|
298
|
+
### Local Development
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
supabase functions serve api --env-file .env.local
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Deploy Function
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
supabase functions deploy api
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Set Secrets
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
supabase secrets set OPENAI_API_KEY=sk-xxx
|
|
314
|
+
supabase secrets set WEBHOOK_SECRET=whsec-xxx
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### List Functions
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
supabase functions list
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## Best Practices
|
|
324
|
+
|
|
325
|
+
### Cold Start Optimization
|
|
326
|
+
|
|
327
|
+
Keep imports minimal at the top level:
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
// Good: Import only what's needed
|
|
331
|
+
import { serve } from 'https://deno.land/std@0.168.0/http/server.ts'
|
|
332
|
+
|
|
333
|
+
// Bad: Heavy imports at top level increase cold start
|
|
334
|
+
// import { everything } from 'large-library'
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Response Streaming
|
|
338
|
+
|
|
339
|
+
Stream large responses:
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
serve(async (req) => {
|
|
343
|
+
const stream = new ReadableStream({
|
|
344
|
+
async start(controller) {
|
|
345
|
+
for (let i = 0; i < 10; i++) {
|
|
346
|
+
await new Promise(r => setTimeout(r, 100))
|
|
347
|
+
controller.enqueue(new TextEncoder().encode(`data: ${i}\n\n`))
|
|
348
|
+
}
|
|
349
|
+
controller.close()
|
|
350
|
+
}
|
|
351
|
+
})
|
|
352
|
+
|
|
353
|
+
return new Response(stream, {
|
|
354
|
+
headers: { 'Content-Type': 'text/event-stream' }
|
|
355
|
+
})
|
|
356
|
+
})
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
## Context7 Query Examples
|
|
360
|
+
|
|
361
|
+
For latest Edge Functions documentation:
|
|
362
|
+
|
|
363
|
+
Topic: "edge functions deno runtime"
|
|
364
|
+
Topic: "supabase functions deploy secrets"
|
|
365
|
+
Topic: "edge functions cors authentication"
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
Related Modules:
|
|
370
|
+
- auth-integration.md - Authentication patterns
|
|
371
|
+
- typescript-patterns.md - Client invocation
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: postgresql-pgvector
|
|
3
|
+
description: PostgreSQL 16 with pgvector extension for AI embeddings and semantic search
|
|
4
|
+
parent-skill: moai-platform-supabase
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
updated: 2026-01-06
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# PostgreSQL 16 + pgvector Module
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
PostgreSQL 16 with pgvector extension enables AI-powered semantic search through vector embeddings storage and similarity search operations.
|
|
14
|
+
|
|
15
|
+
## Extension Setup
|
|
16
|
+
|
|
17
|
+
Enable required extensions for vector operations:
|
|
18
|
+
|
|
19
|
+
```sql
|
|
20
|
+
-- Enable required extensions
|
|
21
|
+
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
22
|
+
CREATE EXTENSION IF NOT EXISTS vector;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Embeddings Table Schema
|
|
26
|
+
|
|
27
|
+
Create a table optimized for storing AI embeddings:
|
|
28
|
+
|
|
29
|
+
```sql
|
|
30
|
+
CREATE TABLE documents (
|
|
31
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
32
|
+
content TEXT NOT NULL,
|
|
33
|
+
embedding vector(1536), -- OpenAI ada-002 dimensions
|
|
34
|
+
metadata JSONB DEFAULT '{}',
|
|
35
|
+
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
36
|
+
);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Common Embedding Dimensions
|
|
40
|
+
|
|
41
|
+
- OpenAI ada-002: 1536 dimensions
|
|
42
|
+
- OpenAI text-embedding-3-small: 1536 dimensions
|
|
43
|
+
- OpenAI text-embedding-3-large: 3072 dimensions
|
|
44
|
+
- Cohere embed-english-v3.0: 1024 dimensions
|
|
45
|
+
- Google PaLM: 768 dimensions
|
|
46
|
+
|
|
47
|
+
## Index Strategies
|
|
48
|
+
|
|
49
|
+
### HNSW Index (Recommended)
|
|
50
|
+
|
|
51
|
+
HNSW (Hierarchical Navigable Small World) provides fast approximate nearest neighbor search:
|
|
52
|
+
|
|
53
|
+
```sql
|
|
54
|
+
CREATE INDEX idx_documents_embedding ON documents
|
|
55
|
+
USING hnsw (embedding vector_cosine_ops)
|
|
56
|
+
WITH (m = 16, ef_construction = 64);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Parameters:
|
|
60
|
+
- m: Maximum number of connections per layer (default 16, higher = more accurate but slower)
|
|
61
|
+
- ef_construction: Size of dynamic candidate list during construction (default 64)
|
|
62
|
+
|
|
63
|
+
### IVFFlat Index (Large Datasets)
|
|
64
|
+
|
|
65
|
+
IVFFlat is better for datasets with millions of rows:
|
|
66
|
+
|
|
67
|
+
```sql
|
|
68
|
+
CREATE INDEX idx_documents_ivf ON documents
|
|
69
|
+
USING ivfflat (embedding vector_cosine_ops)
|
|
70
|
+
WITH (lists = 100);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Guidelines for lists parameter:
|
|
74
|
+
- Less than 1M rows: lists = rows / 1000
|
|
75
|
+
- More than 1M rows: lists = sqrt(rows)
|
|
76
|
+
|
|
77
|
+
## Distance Operations
|
|
78
|
+
|
|
79
|
+
Available distance operators:
|
|
80
|
+
|
|
81
|
+
- `<->` - Euclidean distance (L2)
|
|
82
|
+
- `<#>` - Negative inner product
|
|
83
|
+
- `<=>` - Cosine distance
|
|
84
|
+
|
|
85
|
+
For normalized embeddings, cosine distance is recommended.
|
|
86
|
+
|
|
87
|
+
## Semantic Search Function
|
|
88
|
+
|
|
89
|
+
Basic semantic search with threshold and limit:
|
|
90
|
+
|
|
91
|
+
```sql
|
|
92
|
+
CREATE OR REPLACE FUNCTION search_documents(
|
|
93
|
+
query_embedding vector(1536),
|
|
94
|
+
match_threshold FLOAT DEFAULT 0.8,
|
|
95
|
+
match_count INT DEFAULT 10
|
|
96
|
+
) RETURNS TABLE (id UUID, content TEXT, similarity FLOAT)
|
|
97
|
+
LANGUAGE plpgsql AS $$
|
|
98
|
+
BEGIN
|
|
99
|
+
RETURN QUERY SELECT d.id, d.content,
|
|
100
|
+
1 - (d.embedding <=> query_embedding) AS similarity
|
|
101
|
+
FROM documents d
|
|
102
|
+
WHERE 1 - (d.embedding <=> query_embedding) > match_threshold
|
|
103
|
+
ORDER BY d.embedding <=> query_embedding
|
|
104
|
+
LIMIT match_count;
|
|
105
|
+
END; $$;
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Usage Example
|
|
109
|
+
|
|
110
|
+
```sql
|
|
111
|
+
SELECT * FROM search_documents(
|
|
112
|
+
'[0.1, 0.2, ...]'::vector(1536),
|
|
113
|
+
0.75,
|
|
114
|
+
20
|
|
115
|
+
);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Hybrid Search
|
|
119
|
+
|
|
120
|
+
Combine vector similarity with full-text search for better results:
|
|
121
|
+
|
|
122
|
+
```sql
|
|
123
|
+
CREATE OR REPLACE FUNCTION hybrid_search(
|
|
124
|
+
query_text TEXT,
|
|
125
|
+
query_embedding vector(1536),
|
|
126
|
+
match_count INT DEFAULT 10,
|
|
127
|
+
full_text_weight FLOAT DEFAULT 0.3,
|
|
128
|
+
semantic_weight FLOAT DEFAULT 0.7
|
|
129
|
+
) RETURNS TABLE (id UUID, content TEXT, score FLOAT) AS $$
|
|
130
|
+
BEGIN
|
|
131
|
+
RETURN QUERY
|
|
132
|
+
WITH semantic AS (
|
|
133
|
+
SELECT e.id, e.content, 1 - (e.embedding <=> query_embedding) AS similarity
|
|
134
|
+
FROM documents e ORDER BY e.embedding <=> query_embedding LIMIT match_count * 2
|
|
135
|
+
),
|
|
136
|
+
full_text AS (
|
|
137
|
+
SELECT e.id, e.content,
|
|
138
|
+
ts_rank(to_tsvector('english', e.content), plainto_tsquery('english', query_text)) AS rank
|
|
139
|
+
FROM documents e
|
|
140
|
+
WHERE to_tsvector('english', e.content) @@ plainto_tsquery('english', query_text)
|
|
141
|
+
LIMIT match_count * 2
|
|
142
|
+
)
|
|
143
|
+
SELECT COALESCE(s.id, f.id), COALESCE(s.content, f.content),
|
|
144
|
+
(COALESCE(s.similarity, 0) * semantic_weight + COALESCE(f.rank, 0) * full_text_weight)
|
|
145
|
+
FROM semantic s FULL OUTER JOIN full_text f ON s.id = f.id
|
|
146
|
+
ORDER BY 3 DESC LIMIT match_count;
|
|
147
|
+
END; $$ LANGUAGE plpgsql;
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Full-Text Search Index
|
|
151
|
+
|
|
152
|
+
Add GIN index for efficient full-text search:
|
|
153
|
+
|
|
154
|
+
```sql
|
|
155
|
+
CREATE INDEX idx_documents_content_fts ON documents
|
|
156
|
+
USING gin(to_tsvector('english', content));
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Performance Optimization
|
|
160
|
+
|
|
161
|
+
### Query Performance
|
|
162
|
+
|
|
163
|
+
Set appropriate ef_search for HNSW queries:
|
|
164
|
+
|
|
165
|
+
```sql
|
|
166
|
+
SET hnsw.ef_search = 100; -- Higher = more accurate, slower
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Batch Insertions
|
|
170
|
+
|
|
171
|
+
Use COPY or multi-row INSERT for bulk embeddings:
|
|
172
|
+
|
|
173
|
+
```sql
|
|
174
|
+
INSERT INTO documents (content, embedding, metadata)
|
|
175
|
+
VALUES
|
|
176
|
+
('Content 1', '[...]'::vector(1536), '{"source": "doc1"}'),
|
|
177
|
+
('Content 2', '[...]'::vector(1536), '{"source": "doc2"}'),
|
|
178
|
+
('Content 3', '[...]'::vector(1536), '{"source": "doc3"}');
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Index Maintenance
|
|
182
|
+
|
|
183
|
+
Reindex after large bulk insertions:
|
|
184
|
+
|
|
185
|
+
```sql
|
|
186
|
+
REINDEX INDEX CONCURRENTLY idx_documents_embedding;
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Metadata Filtering
|
|
190
|
+
|
|
191
|
+
Combine vector search with JSONB metadata filters:
|
|
192
|
+
|
|
193
|
+
```sql
|
|
194
|
+
CREATE OR REPLACE FUNCTION search_with_filters(
|
|
195
|
+
query_embedding vector(1536),
|
|
196
|
+
filter_metadata JSONB,
|
|
197
|
+
match_count INT DEFAULT 10
|
|
198
|
+
) RETURNS TABLE (id UUID, content TEXT, similarity FLOAT) AS $$
|
|
199
|
+
BEGIN
|
|
200
|
+
RETURN QUERY SELECT d.id, d.content,
|
|
201
|
+
1 - (d.embedding <=> query_embedding) AS similarity
|
|
202
|
+
FROM documents d
|
|
203
|
+
WHERE d.metadata @> filter_metadata
|
|
204
|
+
ORDER BY d.embedding <=> query_embedding
|
|
205
|
+
LIMIT match_count;
|
|
206
|
+
END; $$;
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Usage with Filters
|
|
210
|
+
|
|
211
|
+
```sql
|
|
212
|
+
SELECT * FROM search_with_filters(
|
|
213
|
+
'[0.1, 0.2, ...]'::vector(1536),
|
|
214
|
+
'{"category": "technical", "language": "en"}'::jsonb,
|
|
215
|
+
10
|
|
216
|
+
);
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Context7 Query Examples
|
|
220
|
+
|
|
221
|
+
For latest pgvector documentation:
|
|
222
|
+
|
|
223
|
+
Topic: "pgvector extension indexes hnsw ivfflat"
|
|
224
|
+
Topic: "vector similarity search operators"
|
|
225
|
+
Topic: "postgresql full-text search tsvector"
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
Related Modules:
|
|
230
|
+
- row-level-security.md - Secure vector data access
|
|
231
|
+
- typescript-patterns.md - Client-side search implementation
|