aios-core 2.1.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/.aios-core/.session/current-session.json +14 -0
- package/.aios-core/cli/commands/generate/index.js +222 -0
- package/.aios-core/cli/commands/manifest/index.js +46 -0
- package/.aios-core/cli/commands/manifest/regenerate.js +96 -0
- package/.aios-core/cli/commands/manifest/validate.js +66 -0
- package/.aios-core/cli/commands/mcp/add.js +234 -0
- package/.aios-core/cli/commands/mcp/index.js +76 -0
- package/.aios-core/cli/commands/mcp/link.js +217 -0
- package/.aios-core/cli/commands/mcp/setup.js +164 -0
- package/.aios-core/cli/commands/mcp/status.js +183 -0
- package/.aios-core/cli/commands/metrics/cleanup.js +91 -0
- package/.aios-core/cli/commands/metrics/index.js +65 -0
- package/.aios-core/cli/commands/metrics/record.js +154 -0
- package/.aios-core/cli/commands/metrics/seed.js +126 -0
- package/.aios-core/cli/commands/metrics/show.js +209 -0
- package/.aios-core/cli/commands/migrate/analyze.js +353 -0
- package/.aios-core/cli/commands/migrate/backup.js +352 -0
- package/.aios-core/cli/commands/migrate/execute.js +292 -0
- package/.aios-core/cli/commands/migrate/index.js +441 -0
- package/.aios-core/cli/commands/migrate/rollback.js +323 -0
- package/.aios-core/cli/commands/migrate/update-imports.js +396 -0
- package/.aios-core/cli/commands/migrate/validate.js +452 -0
- package/.aios-core/cli/commands/qa/index.js +56 -0
- package/.aios-core/cli/commands/qa/run.js +163 -0
- package/.aios-core/cli/commands/qa/status.js +195 -0
- package/.aios-core/cli/commands/workers/formatters/info-formatter.js +274 -0
- package/.aios-core/cli/commands/workers/formatters/list-table.js +265 -0
- package/.aios-core/cli/commands/workers/formatters/list-tree.js +159 -0
- package/.aios-core/cli/commands/workers/index.js +56 -0
- package/.aios-core/cli/commands/workers/info.js +194 -0
- package/.aios-core/cli/commands/workers/list.js +214 -0
- package/.aios-core/cli/commands/workers/search-filters.js +185 -0
- package/.aios-core/cli/commands/workers/search-keyword.js +310 -0
- package/.aios-core/cli/commands/workers/search-semantic.js +293 -0
- package/.aios-core/cli/commands/workers/search.js +154 -0
- package/.aios-core/cli/commands/workers/utils/pagination.js +102 -0
- package/.aios-core/cli/index.js +128 -0
- package/.aios-core/cli/utils/output-formatter-cli.js +232 -0
- package/.aios-core/cli/utils/score-calculator.js +221 -0
- package/.aios-core/core/README.md +229 -0
- package/.aios-core/core/config/config-cache.js +233 -0
- package/.aios-core/core/config/config-loader.js +277 -0
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -0
- package/.aios-core/core/data/aios-kb.md +924 -0
- package/.aios-core/core/data/workflow-patterns.yaml +267 -0
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
- package/.aios-core/core/docs/component-creation-guide.md +458 -0
- package/.aios-core/core/docs/session-update-pattern.md +307 -0
- package/.aios-core/core/docs/template-syntax.md +267 -0
- package/.aios-core/core/docs/troubleshooting-guide.md +625 -0
- package/.aios-core/core/elicitation/agent-elicitation.js +272 -0
- package/.aios-core/core/elicitation/elicitation-engine.js +479 -0
- package/.aios-core/core/elicitation/session-manager.js +320 -0
- package/.aios-core/core/elicitation/task-elicitation.js +281 -0
- package/.aios-core/core/elicitation/workflow-elicitation.js +315 -0
- package/.aios-core/core/index.esm.js +42 -0
- package/.aios-core/core/index.js +76 -0
- package/.aios-core/core/manifest/manifest-generator.js +386 -0
- package/.aios-core/core/manifest/manifest-validator.js +429 -0
- package/.aios-core/core/mcp/config-migrator.js +340 -0
- package/.aios-core/core/mcp/global-config-manager.js +369 -0
- package/.aios-core/core/mcp/index.js +34 -0
- package/.aios-core/core/mcp/os-detector.js +188 -0
- package/.aios-core/core/mcp/symlink-manager.js +413 -0
- package/.aios-core/core/migration/migration-config.yaml +83 -0
- package/.aios-core/core/migration/module-mapping.yaml +89 -0
- package/.aios-core/core/quality-gates/base-layer.js +134 -0
- package/.aios-core/core/quality-gates/checklist-generator.js +329 -0
- package/.aios-core/core/quality-gates/focus-area-recommender.js +359 -0
- package/.aios-core/core/quality-gates/human-review-orchestrator.js +529 -0
- package/.aios-core/core/quality-gates/layer1-precommit.js +336 -0
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +324 -0
- package/.aios-core/core/quality-gates/layer3-human-review.js +348 -0
- package/.aios-core/core/quality-gates/notification-manager.js +550 -0
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -0
- package/.aios-core/core/quality-gates/quality-gate-manager.js +601 -0
- package/.aios-core/core/registry/README.md +179 -0
- package/.aios-core/core/registry/build-registry.js +452 -0
- package/.aios-core/core/registry/registry-loader.js +330 -0
- package/.aios-core/core/registry/registry-schema.json +166 -0
- package/.aios-core/core/registry/service-registry.json +6586 -0
- package/.aios-core/core/registry/validate-registry.js +340 -0
- package/.aios-core/core/session/context-detector.js +229 -0
- package/.aios-core/core/session/context-loader.js +288 -0
- package/.aios-core/core/utils/output-formatter.js +298 -0
- package/.aios-core/core/utils/security-utils.js +333 -0
- package/.aios-core/core/utils/yaml-validator.js +419 -0
- package/.aios-core/core-config.yaml +382 -0
- package/.aios-core/data/agent-config-requirements.yaml +368 -0
- package/.aios-core/data/aios-kb.md +924 -0
- package/.aios-core/data/technical-preferences.md +4 -0
- package/.aios-core/data/workflow-patterns.yaml +267 -0
- package/.aios-core/development/README.md +142 -0
- package/.aios-core/development/agent-teams/team-all.yaml +15 -0
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -0
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -0
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -0
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -0
- package/.aios-core/development/agents/aios-master.md +339 -0
- package/.aios-core/development/agents/analyst.md +195 -0
- package/.aios-core/development/agents/architect.md +359 -0
- package/.aios-core/development/agents/data-engineer.md +468 -0
- package/.aios-core/development/agents/dev.md +390 -0
- package/.aios-core/development/agents/devops.md +398 -0
- package/.aios-core/development/agents/pm.md +198 -0
- package/.aios-core/development/agents/po.md +256 -0
- package/.aios-core/development/agents/qa.md +312 -0
- package/.aios-core/development/agents/sm.md +220 -0
- package/.aios-core/development/agents/ux-design-expert.md +451 -0
- package/.aios-core/development/scripts/agent-assignment-resolver.js +231 -0
- package/.aios-core/development/scripts/agent-config-loader.js +624 -0
- package/.aios-core/development/scripts/agent-exit-hooks.js +96 -0
- package/.aios-core/development/scripts/apply-inline-greeting-all-agents.js +146 -0
- package/.aios-core/development/scripts/audit-agent-config.js +380 -0
- package/.aios-core/development/scripts/backlog-manager.js +404 -0
- package/.aios-core/development/scripts/batch-update-agents-session-context.js +95 -0
- package/.aios-core/development/scripts/decision-context.js +228 -0
- package/.aios-core/development/scripts/decision-log-generator.js +293 -0
- package/.aios-core/development/scripts/decision-log-indexer.js +284 -0
- package/.aios-core/development/scripts/decision-recorder.js +168 -0
- package/.aios-core/development/scripts/dev-context-loader.js +297 -0
- package/.aios-core/development/scripts/generate-greeting.js +160 -0
- package/.aios-core/development/scripts/greeting-builder.js +866 -0
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -0
- package/.aios-core/development/scripts/greeting-preference-manager.js +145 -0
- package/.aios-core/development/scripts/migrate-task-to-v2.js +377 -0
- package/.aios-core/development/scripts/story-index-generator.js +337 -0
- package/.aios-core/development/scripts/story-manager.js +375 -0
- package/.aios-core/development/scripts/story-update-hook.js +259 -0
- package/.aios-core/development/scripts/task-identifier-resolver.js +145 -0
- package/.aios-core/development/scripts/test-greeting-system.js +142 -0
- package/.aios-core/development/scripts/validate-task-v2.js +319 -0
- package/.aios-core/development/scripts/workflow-navigator.js +214 -0
- package/.aios-core/development/tasks/add-mcp.md +319 -0
- package/.aios-core/development/tasks/advanced-elicitation.md +319 -0
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +342 -0
- package/.aios-core/development/tasks/analyze-framework.md +697 -0
- package/.aios-core/development/tasks/analyze-performance.md +637 -0
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -0
- package/.aios-core/development/tasks/architect-analyze-impact.md +827 -0
- package/.aios-core/development/tasks/audit-codebase.md +429 -0
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -0
- package/.aios-core/development/tasks/audit-utilities.md +358 -0
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -0
- package/.aios-core/development/tasks/brownfield-create-epic.md +486 -0
- package/.aios-core/development/tasks/brownfield-create-story.md +357 -0
- package/.aios-core/development/tasks/build-component.md +478 -0
- package/.aios-core/development/tasks/calculate-roi.md +455 -0
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -0
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -0
- package/.aios-core/development/tasks/collaborative-edit.md +1109 -0
- package/.aios-core/development/tasks/compose-molecule.md +284 -0
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -0
- package/.aios-core/development/tasks/correct-course.md +280 -0
- package/.aios-core/development/tasks/create-agent.md +322 -0
- package/.aios-core/development/tasks/create-brownfield-story.md +727 -0
- package/.aios-core/development/tasks/create-deep-research-prompt.md +499 -0
- package/.aios-core/development/tasks/create-doc.md +316 -0
- package/.aios-core/development/tasks/create-next-story.md +774 -0
- package/.aios-core/development/tasks/create-suite.md +284 -0
- package/.aios-core/development/tasks/create-task.md +372 -0
- package/.aios-core/development/tasks/create-workflow.md +371 -0
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -0
- package/.aios-core/development/tasks/db-apply-migration.md +381 -0
- package/.aios-core/development/tasks/db-bootstrap.md +642 -0
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -0
- package/.aios-core/development/tasks/db-dry-run.md +293 -0
- package/.aios-core/development/tasks/db-env-check.md +260 -0
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -0
- package/.aios-core/development/tasks/db-explain.md +631 -0
- package/.aios-core/development/tasks/db-impersonate.md +495 -0
- package/.aios-core/development/tasks/db-load-csv.md +593 -0
- package/.aios-core/development/tasks/db-policy-apply.md +653 -0
- package/.aios-core/development/tasks/db-rls-audit.md +411 -0
- package/.aios-core/development/tasks/db-rollback.md +739 -0
- package/.aios-core/development/tasks/db-run-sql.md +613 -0
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -0
- package/.aios-core/development/tasks/db-seed.md +390 -0
- package/.aios-core/development/tasks/db-smoke-test.md +351 -0
- package/.aios-core/development/tasks/db-snapshot.md +569 -0
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -0
- package/.aios-core/development/tasks/db-verify-order.md +515 -0
- package/.aios-core/development/tasks/deprecate-component.md +957 -0
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -0
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -0
- package/.aios-core/development/tasks/dev-develop-story.md +846 -0
- package/.aios-core/development/tasks/dev-improve-code-quality.md +873 -0
- package/.aios-core/development/tasks/dev-optimize-performance.md +1034 -0
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +871 -0
- package/.aios-core/development/tasks/dev-validate-next-story.md +349 -0
- package/.aios-core/development/tasks/document-project.md +553 -0
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -0
- package/.aios-core/development/tasks/execute-checklist.md +301 -0
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -0
- package/.aios-core/development/tasks/extend-pattern.md +269 -0
- package/.aios-core/development/tasks/extract-tokens.md +467 -0
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -0
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +261 -0
- package/.aios-core/development/tasks/generate-documentation.md +284 -0
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -0
- package/.aios-core/development/tasks/generate-shock-report.md +501 -0
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -0
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -0
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -0
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -0
- package/.aios-core/development/tasks/improve-self.md +823 -0
- package/.aios-core/development/tasks/index-docs.md +388 -0
- package/.aios-core/development/tasks/init-project-status.md +506 -0
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -0
- package/.aios-core/development/tasks/kb-mode-interaction.md +284 -0
- package/.aios-core/development/tasks/learn-patterns.md +901 -0
- package/.aios-core/development/tasks/mcp-workflow.md +437 -0
- package/.aios-core/development/tasks/modify-agent.md +382 -0
- package/.aios-core/development/tasks/modify-task.md +425 -0
- package/.aios-core/development/tasks/modify-workflow.md +466 -0
- package/.aios-core/development/tasks/po-backlog-add.md +370 -0
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -0
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -0
- package/.aios-core/development/tasks/po-pull-story.md +316 -0
- package/.aios-core/development/tasks/po-stories-index.md +351 -0
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -0
- package/.aios-core/development/tasks/po-sync-story.md +303 -0
- package/.aios-core/development/tasks/pr-automation.md +701 -0
- package/.aios-core/development/tasks/propose-modification.md +843 -0
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -0
- package/.aios-core/development/tasks/qa-gate.md +374 -0
- package/.aios-core/development/tasks/qa-generate-tests.md +1175 -0
- package/.aios-core/development/tasks/qa-nfr-assess.md +558 -0
- package/.aios-core/development/tasks/qa-review-proposal.md +1158 -0
- package/.aios-core/development/tasks/qa-review-story.md +683 -0
- package/.aios-core/development/tasks/qa-risk-profile.md +567 -0
- package/.aios-core/development/tasks/qa-run-tests.md +277 -0
- package/.aios-core/development/tasks/qa-test-design.md +388 -0
- package/.aios-core/development/tasks/qa-trace-requirements.md +477 -0
- package/.aios-core/development/tasks/release-management.md +723 -0
- package/.aios-core/development/tasks/security-audit.md +554 -0
- package/.aios-core/development/tasks/security-scan.md +790 -0
- package/.aios-core/development/tasks/setup-database.md +741 -0
- package/.aios-core/development/tasks/setup-design-system.md +462 -0
- package/.aios-core/development/tasks/setup-github.md +874 -0
- package/.aios-core/development/tasks/setup-llm-routing.md +229 -0
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -0
- package/.aios-core/development/tasks/shard-doc.md +538 -0
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -0
- package/.aios-core/development/tasks/sync-documentation.md +865 -0
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -0
- package/.aios-core/development/tasks/test-as-user.md +621 -0
- package/.aios-core/development/tasks/test-validation-task.md +171 -0
- package/.aios-core/development/tasks/undo-last.md +347 -0
- package/.aios-core/development/tasks/update-manifest.md +410 -0
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -0
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -0
- package/.aios-core/development/tasks/ux-user-research.md +559 -0
- package/.aios-core/development/tasks/validate-next-story.md +423 -0
- package/.aios-core/development/tasks/validate-structure.md +243 -0
- package/.aios-core/development/workflows/README.md +84 -0
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -0
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -0
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -0
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -0
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -0
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -0
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -0
- package/.aios-core/docs/component-creation-guide.md +458 -0
- package/.aios-core/docs/session-update-pattern.md +307 -0
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -0
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -0
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -0
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -0
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -0
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -0
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -0
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -0
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -0
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -0
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -0
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -0
- package/.aios-core/docs/template-syntax.md +267 -0
- package/.aios-core/docs/troubleshooting-guide.md +625 -0
- package/.aios-core/elicitation/agent-elicitation.js +272 -0
- package/.aios-core/elicitation/task-elicitation.js +281 -0
- package/.aios-core/elicitation/workflow-elicitation.js +315 -0
- package/.aios-core/index.d.ts +8 -0
- package/.aios-core/index.esm.js +16 -0
- package/.aios-core/index.js +16 -0
- package/.aios-core/infrastructure/README.md +126 -0
- package/.aios-core/infrastructure/index.js +199 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/clickup-adapter.js +345 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/github-adapter.js +392 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/jira-adapter.js +448 -0
- package/.aios-core/infrastructure/integrations/pm-adapters/local-adapter.js +175 -0
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +122 -0
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +89 -0
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +780 -0
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +950 -0
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +425 -0
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +132 -0
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +381 -0
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +203 -0
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +24 -0
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +51 -0
- package/.aios-core/infrastructure/scripts/aios-validator.js +294 -0
- package/.aios-core/infrastructure/scripts/approval-workflow.js +643 -0
- package/.aios-core/infrastructure/scripts/atomic-layer-classifier.js +308 -0
- package/.aios-core/infrastructure/scripts/backup-manager.js +607 -0
- package/.aios-core/infrastructure/scripts/batch-creator.js +608 -0
- package/.aios-core/infrastructure/scripts/branch-manager.js +391 -0
- package/.aios-core/infrastructure/scripts/capability-analyzer.js +535 -0
- package/.aios-core/infrastructure/scripts/clickup-helpers.js +226 -0
- package/.aios-core/infrastructure/scripts/code-quality-improver.js +1312 -0
- package/.aios-core/infrastructure/scripts/commit-message-generator.js +850 -0
- package/.aios-core/infrastructure/scripts/component-generator.js +738 -0
- package/.aios-core/infrastructure/scripts/component-metadata.js +627 -0
- package/.aios-core/infrastructure/scripts/component-search.js +277 -0
- package/.aios-core/infrastructure/scripts/config-cache.js +322 -0
- package/.aios-core/infrastructure/scripts/config-loader.js +349 -0
- package/.aios-core/infrastructure/scripts/conflict-resolver.js +675 -0
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +882 -0
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +638 -0
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +703 -0
- package/.aios-core/infrastructure/scripts/diff-generator.js +129 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +329 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +282 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +313 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +358 -0
- package/.aios-core/infrastructure/scripts/documentation-synchronizer.js +1432 -0
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +746 -0
- package/.aios-core/infrastructure/scripts/git-config-detector.js +293 -0
- package/.aios-core/infrastructure/scripts/git-wrapper.js +443 -0
- package/.aios-core/infrastructure/scripts/improvement-engine.js +758 -0
- package/.aios-core/infrastructure/scripts/improvement-validator.js +710 -0
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +267 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free.cmd +80 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free.sh +62 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-max.cmd +26 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-max.sh +18 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +970 -0
- package/.aios-core/infrastructure/scripts/modification-validator.js +555 -0
- package/.aios-core/infrastructure/scripts/output-formatter.js +297 -0
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +758 -0
- package/.aios-core/infrastructure/scripts/performance-and-error-resolver.js +258 -0
- package/.aios-core/infrastructure/scripts/performance-optimizer.js +1902 -0
- package/.aios-core/infrastructure/scripts/performance-tracker.js +452 -0
- package/.aios-core/infrastructure/scripts/pm-adapter-factory.js +181 -0
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -0
- package/.aios-core/infrastructure/scripts/project-status-loader.js +445 -0
- package/.aios-core/infrastructure/scripts/refactoring-suggester.js +1139 -0
- package/.aios-core/infrastructure/scripts/repository-detector.js +64 -0
- package/.aios-core/infrastructure/scripts/sandbox-tester.js +618 -0
- package/.aios-core/infrastructure/scripts/security-checker.js +359 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +375 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +410 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +285 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +262 -0
- package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +468 -0
- package/.aios-core/infrastructure/scripts/spot-check-validator.js +149 -0
- package/.aios-core/infrastructure/scripts/status-mapper.js +115 -0
- package/.aios-core/infrastructure/scripts/template-engine.js +240 -0
- package/.aios-core/infrastructure/scripts/template-validator.js +279 -0
- package/.aios-core/infrastructure/scripts/test-generator.js +844 -0
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1081 -0
- package/.aios-core/infrastructure/scripts/test-utilities-fast.js +126 -0
- package/.aios-core/infrastructure/scripts/test-utilities.js +200 -0
- package/.aios-core/infrastructure/scripts/tool-resolver.js +360 -0
- package/.aios-core/infrastructure/scripts/transaction-manager.js +590 -0
- package/.aios-core/infrastructure/scripts/usage-analytics.js +634 -0
- package/.aios-core/infrastructure/scripts/validate-output-pattern.js +213 -0
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +1056 -0
- package/.aios-core/infrastructure/scripts/yaml-validator.js +397 -0
- package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +182 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -0
- package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -0
- package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -0
- package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
- package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
- package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
- package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
- package/.aios-core/infrastructure/tests/project-status-loader.test.js +394 -0
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -0
- package/.aios-core/infrastructure/tests/utilities-audit-results.json +501 -0
- package/.aios-core/infrastructure/tests/validate-module.js +97 -0
- package/.aios-core/infrastructure/tools/README.md +222 -0
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -0
- package/.aios-core/infrastructure/tools/cli/llm-routing.yaml +126 -0
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -0
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -0
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -0
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -0
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -0
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -0
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -0
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -0
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -0
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -0
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -0
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -0
- package/.aios-core/install-manifest.yaml +347 -0
- package/.aios-core/manifests/agents.csv +1 -0
- package/.aios-core/manifests/schema/manifest-schema.json +190 -0
- package/.aios-core/manifests/tasks.csv +121 -0
- package/.aios-core/manifests/workers.csv +204 -0
- package/.aios-core/package.json +103 -0
- package/.aios-core/product/README.md +56 -0
- package/.aios-core/product/checklists/architect-checklist.md +444 -0
- package/.aios-core/product/checklists/change-checklist.md +183 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -0
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -0
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -0
- package/.aios-core/product/checklists/pm-checklist.md +376 -0
- package/.aios-core/product/checklists/po-master-checklist.md +442 -0
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -0
- package/.aios-core/product/checklists/release-checklist.md +122 -0
- package/.aios-core/product/checklists/story-dod-checklist.md +102 -0
- package/.aios-core/product/checklists/story-draft-checklist.md +216 -0
- package/.aios-core/product/data/brainstorming-techniques.md +37 -0
- package/.aios-core/product/data/elicitation-methods.md +135 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -0
- package/.aios-core/product/data/test-levels-framework.md +149 -0
- package/.aios-core/product/data/test-priorities-matrix.md +175 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -0
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -0
- package/.aios-core/product/templates/activation-instructions-template.md +258 -0
- package/.aios-core/product/templates/adr.hbs +125 -0
- package/.aios-core/product/templates/agent-template.yaml +121 -0
- package/.aios-core/product/templates/architecture-tmpl.yaml +651 -0
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +156 -0
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +476 -0
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +280 -0
- package/.aios-core/product/templates/changelog-template.md +134 -0
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -0
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +293 -0
- package/.aios-core/product/templates/component-react-tmpl.tsx +98 -0
- package/.aios-core/product/templates/dbdr.hbs +241 -0
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -0
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -0
- package/.aios-core/product/templates/engine/elicitation.js +298 -0
- package/.aios-core/product/templates/engine/index.js +308 -0
- package/.aios-core/product/templates/engine/loader.js +231 -0
- package/.aios-core/product/templates/engine/renderer.js +343 -0
- package/.aios-core/product/templates/engine/schemas/adr.schema.json +102 -0
- package/.aios-core/product/templates/engine/schemas/dbdr.schema.json +205 -0
- package/.aios-core/product/templates/engine/schemas/epic.schema.json +175 -0
- package/.aios-core/product/templates/engine/schemas/pmdr.schema.json +175 -0
- package/.aios-core/product/templates/engine/schemas/prd-v2.schema.json +300 -0
- package/.aios-core/product/templates/engine/schemas/prd.schema.json +152 -0
- package/.aios-core/product/templates/engine/schemas/story.schema.json +222 -0
- package/.aios-core/product/templates/engine/schemas/task.schema.json +154 -0
- package/.aios-core/product/templates/engine/validator.js +294 -0
- package/.aios-core/product/templates/epic.hbs +212 -0
- package/.aios-core/product/templates/eslintrc-security.json +32 -0
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +206 -0
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +349 -0
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +805 -0
- package/.aios-core/product/templates/github-actions-cd.yml +212 -0
- package/.aios-core/product/templates/github-actions-ci.yml +172 -0
- package/.aios-core/product/templates/github-pr-template.md +67 -0
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -0
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -0
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -0
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -0
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -0
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -0
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -0
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -0
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -0
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -0
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -0
- package/.aios-core/product/templates/market-research-tmpl.yaml +252 -0
- package/.aios-core/product/templates/mcp-workflow.js +271 -0
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -0
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -0
- package/.aios-core/product/templates/personalized-agent-template.md +258 -0
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -0
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -0
- package/.aios-core/product/templates/personalized-task-template.md +344 -0
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -0
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -0
- package/.aios-core/product/templates/pmdr.hbs +186 -0
- package/.aios-core/product/templates/prd-tmpl.yaml +202 -0
- package/.aios-core/product/templates/prd-v2.0.hbs +216 -0
- package/.aios-core/product/templates/prd.hbs +201 -0
- package/.aios-core/product/templates/project-brief-tmpl.yaml +221 -0
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -0
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -0
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -0
- package/.aios-core/product/templates/shock-report-tmpl.html +502 -0
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -0
- package/.aios-core/product/templates/story-tmpl.yaml +332 -0
- package/.aios-core/product/templates/story.hbs +263 -0
- package/.aios-core/product/templates/task-execution-report.md +495 -0
- package/.aios-core/product/templates/task-template.md +123 -0
- package/.aios-core/product/templates/task.hbs +170 -0
- package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -0
- package/.aios-core/product/templates/tmpl-migration-script.sql +91 -0
- package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -0
- package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -0
- package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -0
- package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -0
- package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -0
- package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -0
- package/.aios-core/product/templates/tmpl-seed-data.sql +140 -0
- package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -0
- package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -0
- package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -0
- package/.aios-core/product/templates/tmpl-trigger.sql +152 -0
- package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -0
- package/.aios-core/product/templates/tmpl-view.sql +177 -0
- package/.aios-core/product/templates/token-exports-css-tmpl.css +240 -0
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -0
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -0
- package/.aios-core/product/templates/workflow-template.yaml +134 -0
- package/.aios-core/quality/metrics-collector.js +572 -0
- package/.aios-core/quality/metrics-hook.js +260 -0
- package/.aios-core/quality/schemas/quality-metrics.schema.json +233 -0
- package/.aios-core/quality/seed-metrics.js +336 -0
- package/.aios-core/scripts/README.md +354 -0
- package/.aios-core/scripts/aios-doc-template.md +325 -0
- package/.aios-core/scripts/batch-migrate-phase1.ps1 +36 -0
- package/.aios-core/scripts/batch-migrate-phase2.ps1 +88 -0
- package/.aios-core/scripts/batch-migrate-phase3.ps1 +45 -0
- package/.aios-core/scripts/command-execution-hook.js +201 -0
- package/.aios-core/scripts/context-detector.js +226 -0
- package/.aios-core/scripts/elicitation-engine.js +385 -0
- package/.aios-core/scripts/elicitation-session-manager.js +300 -0
- package/.aios-core/scripts/migrate-framework-docs.sh +300 -0
- package/.aios-core/scripts/session-context-loader.js +286 -0
- package/.aios-core/scripts/test-template-system.js +941 -0
- package/.aios-core/scripts/validate-phase1.ps1 +35 -0
- package/.aios-core/scripts/workflow-management.md +69 -0
- package/.aios-core/tasks/find-component.md.legacy +391 -0
- package/.aios-core/tasks/generate-commit-message.md.legacy +426 -0
- package/.aios-core/tasks/generate-migration.md.legacy +382 -0
- package/.aios-core/tasks/rollback-modification.md.legacy +307 -0
- package/.aios-core/tasks/update-tests.md.legacy +283 -0
- package/.aios-core/user-guide.md +1413 -0
- package/.aios-core/working-in-the-brownfield.md +361 -0
- package/.claude/CLAUDE.md +221 -0
- package/LICENSE +48 -0
- package/README.md +703 -0
- package/bin/aios-init-old.js +532 -0
- package/bin/aios-init-v4.js +390 -0
- package/bin/aios-init.backup-v1.1.4.js +352 -0
- package/bin/aios-init.js +736 -0
- package/bin/aios-minimal.js +26 -0
- package/bin/aios.js +279 -0
- package/bin/migrate-pm-config.js +219 -0
- package/bin/modules/env-config.js +436 -0
- package/bin/modules/mcp-installer.js +383 -0
- package/bin/utils/install-errors.js +339 -0
- package/bin/utils/install-transaction.js +445 -0
- package/index.d.ts +19 -0
- package/index.esm.js +21 -0
- package/index.js +94 -0
- package/package.json +161 -0
- package/packages/installer/package.json +39 -0
- package/packages/installer/src/config/configure-environment.js +312 -0
- package/packages/installer/src/config/templates/core-config-template.js +183 -0
- package/packages/installer/src/config/templates/env-template.js +127 -0
- package/packages/installer/src/config/validation/config-validator.js +243 -0
- package/packages/installer/src/detection/detect-project-type.js +81 -0
- package/packages/installer/src/wizard/wizard.js +244 -0
- package/packages/installer/tests/integration/environment-configuration.test.js +328 -0
- package/packages/installer/tests/integration/wizard-detection.test.js +349 -0
- package/packages/installer/tests/unit/config-validator.test.js +315 -0
- package/packages/installer/tests/unit/detection/detect-project-type.test.js +401 -0
- package/packages/installer/tests/unit/env-template.test.js +185 -0
- package/src/config/ide-configs.js +189 -0
- package/src/installer/aios-core-installer.js +319 -0
- package/src/installer/dependency-installer.js +335 -0
- package/src/utils/aios-colors.js +234 -0
- package/src/wizard/feedback.js +218 -0
- package/src/wizard/ide-config-generator.js +488 -0
- package/src/wizard/ide-selector.js +84 -0
- package/src/wizard/index.js +589 -0
- package/src/wizard/questions.js +249 -0
- package/src/wizard/validation/index.js +120 -0
- package/src/wizard/validation/report-generator.js +269 -0
- package/src/wizard/validation/troubleshooting-system.js +346 -0
- package/src/wizard/validation/validators/config-validator.js +362 -0
- package/src/wizard/validation/validators/dependency-validator.js +333 -0
- package/src/wizard/validation/validators/file-structure-validator.js +181 -0
- package/src/wizard/validation/validators/mcp-health-checker.js +310 -0
- package/src/wizard/validators.js +274 -0
- package/templates/squad/LICENSE +21 -0
- package/templates/squad/README.md +37 -0
- package/templates/squad/agents/example-agent.yaml +36 -0
- package/templates/squad/package.json +19 -0
- package/templates/squad/squad.yaml +25 -0
- package/templates/squad/tasks/example-task.yaml +46 -0
- package/templates/squad/templates/example-template.md +24 -0
- package/templates/squad/tests/example-agent.test.js +53 -0
- package/templates/squad/workflows/example-workflow.yaml +54 -0
- package/tools/package-builder.js +35 -0
|
@@ -0,0 +1,808 @@
|
|
|
1
|
+
tool:
|
|
2
|
+
schema_version: 2.0
|
|
3
|
+
id: supabase
|
|
4
|
+
type: mcp
|
|
5
|
+
name: Supabase Platform Management
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
description: Supabase project and database management with SQL execution, migrations, RLS policies, and real-time subscriptions
|
|
8
|
+
knowledge_strategy: executable
|
|
9
|
+
|
|
10
|
+
executable_knowledge:
|
|
11
|
+
validators:
|
|
12
|
+
# Validator for execute_sql
|
|
13
|
+
- id: validate-execute-sql
|
|
14
|
+
validates: execute_sql
|
|
15
|
+
language: javascript
|
|
16
|
+
checks:
|
|
17
|
+
- required_fields: [project_id, query]
|
|
18
|
+
- sql_injection_prevention: true
|
|
19
|
+
function: |
|
|
20
|
+
(function() {
|
|
21
|
+
const errors = [];
|
|
22
|
+
|
|
23
|
+
// 1. Required fields
|
|
24
|
+
if (!args.args.project_id) {
|
|
25
|
+
errors.push("project_id is required");
|
|
26
|
+
}
|
|
27
|
+
if (!args.args.query) {
|
|
28
|
+
errors.push("query is required");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// 2. Validate project_id format (proj_xxx)
|
|
32
|
+
if (args.args.project_id && !/^proj_[a-z0-9_]+$/i.test(args.args.project_id)) {
|
|
33
|
+
errors.push("project_id must match format: proj_[id]");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// 3. Basic SQL injection prevention
|
|
37
|
+
if (args.args.query) {
|
|
38
|
+
const query = args.args.query.toLowerCase();
|
|
39
|
+
// Check for dangerous patterns
|
|
40
|
+
if (query.includes('drop table') || query.includes('drop database')) {
|
|
41
|
+
errors.push("DROP operations not allowed via execute_sql - use apply_migration");
|
|
42
|
+
}
|
|
43
|
+
// Check for DDL operations
|
|
44
|
+
if (query.match(/\b(create|alter|drop)\s+(table|index|view|function|trigger)/)) {
|
|
45
|
+
errors.push("DDL operations not allowed in execute_sql - use apply_migration instead");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
valid: errors.length === 0,
|
|
51
|
+
errors: errors
|
|
52
|
+
};
|
|
53
|
+
})();
|
|
54
|
+
|
|
55
|
+
# Validator for apply_migration
|
|
56
|
+
- id: validate-apply-migration
|
|
57
|
+
validates: apply_migration
|
|
58
|
+
language: javascript
|
|
59
|
+
checks:
|
|
60
|
+
- required_fields: [project_id, name, query]
|
|
61
|
+
- migration_name_format: snake_case
|
|
62
|
+
function: |
|
|
63
|
+
(function() {
|
|
64
|
+
const errors = [];
|
|
65
|
+
|
|
66
|
+
// 1. Required fields
|
|
67
|
+
if (!args.args.project_id) {
|
|
68
|
+
errors.push("project_id is required");
|
|
69
|
+
}
|
|
70
|
+
if (!args.args.name) {
|
|
71
|
+
errors.push("name is required");
|
|
72
|
+
}
|
|
73
|
+
if (!args.args.query) {
|
|
74
|
+
errors.push("query is required");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// 2. Validate migration name format (snake_case)
|
|
78
|
+
if (args.args.name && !/^[a-z0-9_]+$/.test(args.args.name)) {
|
|
79
|
+
errors.push("migration name must be snake_case (lowercase letters, numbers, underscores only)");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// 3. Check for hardcoded IDs in data migrations
|
|
83
|
+
if (args.args.query && args.args.query.match(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/i)) {
|
|
84
|
+
errors.push("WARNING: Migration contains hardcoded UUID - consider using generated IDs instead");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
valid: errors.length === 0,
|
|
89
|
+
errors: errors
|
|
90
|
+
};
|
|
91
|
+
})();
|
|
92
|
+
|
|
93
|
+
# Validator for create_branch
|
|
94
|
+
- id: validate-create-branch
|
|
95
|
+
validates: create_branch
|
|
96
|
+
language: javascript
|
|
97
|
+
checks:
|
|
98
|
+
- required_fields: [project_id, confirm_cost_id]
|
|
99
|
+
- branch_name_format: true
|
|
100
|
+
function: |
|
|
101
|
+
(function() {
|
|
102
|
+
const errors = [];
|
|
103
|
+
|
|
104
|
+
// 1. Required fields
|
|
105
|
+
if (!args.args.project_id) {
|
|
106
|
+
errors.push("project_id is required");
|
|
107
|
+
}
|
|
108
|
+
if (!args.args.confirm_cost_id) {
|
|
109
|
+
errors.push("confirm_cost_id is required - call confirm_cost first");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// 2. Validate branch name if provided
|
|
113
|
+
if (args.args.name && !/^[a-z0-9-]+$/.test(args.args.name)) {
|
|
114
|
+
errors.push("branch name must be lowercase letters, numbers, and hyphens only");
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
valid: errors.length === 0,
|
|
119
|
+
errors: errors
|
|
120
|
+
};
|
|
121
|
+
})();
|
|
122
|
+
|
|
123
|
+
# Validator for deploy_edge_function
|
|
124
|
+
- id: validate-deploy-edge-function
|
|
125
|
+
validates: deploy_edge_function
|
|
126
|
+
language: javascript
|
|
127
|
+
checks:
|
|
128
|
+
- required_fields: [project_id, name, files]
|
|
129
|
+
- file_structure: true
|
|
130
|
+
function: |
|
|
131
|
+
(function() {
|
|
132
|
+
const errors = [];
|
|
133
|
+
|
|
134
|
+
// 1. Required fields
|
|
135
|
+
if (!args.args.project_id) {
|
|
136
|
+
errors.push("project_id is required");
|
|
137
|
+
}
|
|
138
|
+
if (!args.args.name) {
|
|
139
|
+
errors.push("name is required");
|
|
140
|
+
}
|
|
141
|
+
if (!args.args.files) {
|
|
142
|
+
errors.push("files array is required");
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// 2. Validate files structure
|
|
146
|
+
if (args.args.files) {
|
|
147
|
+
if (!Array.isArray(args.args.files)) {
|
|
148
|
+
errors.push("files must be an array");
|
|
149
|
+
} else {
|
|
150
|
+
args.args.files.forEach((file, index) => {
|
|
151
|
+
if (!file.name) {
|
|
152
|
+
errors.push(`files[${index}] missing required 'name' field`);
|
|
153
|
+
}
|
|
154
|
+
if (!file.content) {
|
|
155
|
+
errors.push(`files[${index}] missing required 'content' field`);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// 3. Check for entrypoint
|
|
162
|
+
if (args.args.entrypoint_path && !args.args.entrypoint_path.endsWith('.ts')) {
|
|
163
|
+
errors.push("entrypoint_path should be a TypeScript file (.ts)");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return {
|
|
167
|
+
valid: errors.length === 0,
|
|
168
|
+
errors: errors
|
|
169
|
+
};
|
|
170
|
+
})();
|
|
171
|
+
|
|
172
|
+
# Validator for create_project
|
|
173
|
+
- id: validate-create-project
|
|
174
|
+
validates: create_project
|
|
175
|
+
language: javascript
|
|
176
|
+
checks:
|
|
177
|
+
- required_fields: [name, region, organization_id, confirm_cost_id]
|
|
178
|
+
- region_validation: true
|
|
179
|
+
function: |
|
|
180
|
+
(function() {
|
|
181
|
+
const errors = [];
|
|
182
|
+
|
|
183
|
+
// 1. Required fields
|
|
184
|
+
if (!args.args.name) {
|
|
185
|
+
errors.push("name is required");
|
|
186
|
+
}
|
|
187
|
+
if (!args.args.region) {
|
|
188
|
+
errors.push("region is required");
|
|
189
|
+
}
|
|
190
|
+
if (!args.args.organization_id) {
|
|
191
|
+
errors.push("organization_id is required");
|
|
192
|
+
}
|
|
193
|
+
if (!args.args.confirm_cost_id) {
|
|
194
|
+
errors.push("confirm_cost_id is required - call confirm_cost first");
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// 2. Validate region
|
|
198
|
+
const validRegions = [
|
|
199
|
+
'us-west-1', 'us-east-1', 'us-east-2', 'ca-central-1',
|
|
200
|
+
'eu-west-1', 'eu-west-2', 'eu-west-3', 'eu-central-1', 'eu-central-2', 'eu-north-1',
|
|
201
|
+
'ap-south-1', 'ap-southeast-1', 'ap-northeast-1', 'ap-northeast-2', 'ap-southeast-2',
|
|
202
|
+
'sa-east-1'
|
|
203
|
+
];
|
|
204
|
+
|
|
205
|
+
if (args.args.region && !validRegions.includes(args.args.region)) {
|
|
206
|
+
errors.push(`region must be one of: ${validRegions.join(', ')}`);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return {
|
|
210
|
+
valid: errors.length === 0,
|
|
211
|
+
errors: errors
|
|
212
|
+
};
|
|
213
|
+
})();
|
|
214
|
+
|
|
215
|
+
helpers:
|
|
216
|
+
- id: build-select-query
|
|
217
|
+
language: javascript
|
|
218
|
+
runtime: isolated_vm
|
|
219
|
+
description: "Build SELECT query with RLS considerations"
|
|
220
|
+
function: |
|
|
221
|
+
(function() {
|
|
222
|
+
const { table, columns, where, orderBy, limit, checkRLS } = args;
|
|
223
|
+
|
|
224
|
+
if (!table) {
|
|
225
|
+
return { error: 'Table name is required' };
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
let query = 'SELECT ';
|
|
229
|
+
query += columns && columns.length > 0 ? columns.join(', ') : '*';
|
|
230
|
+
query += ` FROM ${table}`;
|
|
231
|
+
|
|
232
|
+
if (where && typeof where === 'object') {
|
|
233
|
+
const conditions = Object.entries(where)
|
|
234
|
+
.map(([key, value]) => {
|
|
235
|
+
if (typeof value === 'string') {
|
|
236
|
+
return `${key} = '${value}'`;
|
|
237
|
+
}
|
|
238
|
+
return `${key} = ${value}`;
|
|
239
|
+
})
|
|
240
|
+
.join(' AND ');
|
|
241
|
+
query += ` WHERE ${conditions}`;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (orderBy) {
|
|
245
|
+
query += ` ORDER BY ${orderBy}`;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (limit) {
|
|
249
|
+
query += ` LIMIT ${limit}`;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return {
|
|
253
|
+
query: query,
|
|
254
|
+
requiresRLS: checkRLS !== false,
|
|
255
|
+
hint: checkRLS !== false ? 'Ensure RLS policies are enabled on this table' : null
|
|
256
|
+
};
|
|
257
|
+
})();
|
|
258
|
+
|
|
259
|
+
- id: build-insert-query
|
|
260
|
+
language: javascript
|
|
261
|
+
runtime: isolated_vm
|
|
262
|
+
description: "Build INSERT query with RLS validation"
|
|
263
|
+
function: |
|
|
264
|
+
(function() {
|
|
265
|
+
const { table, data, returning } = args;
|
|
266
|
+
|
|
267
|
+
if (!table) {
|
|
268
|
+
return { error: 'Table name is required' };
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (!data || typeof data !== 'object') {
|
|
272
|
+
return { error: 'Data object is required' };
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
const columns = Object.keys(data);
|
|
276
|
+
const values = Object.values(data).map(v => {
|
|
277
|
+
if (typeof v === 'string') {
|
|
278
|
+
return `'${v}'`;
|
|
279
|
+
}
|
|
280
|
+
if (v === null) {
|
|
281
|
+
return 'NULL';
|
|
282
|
+
}
|
|
283
|
+
return v;
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
let query = `INSERT INTO ${table} (${columns.join(', ')}) VALUES (${values.join(', ')})`;
|
|
287
|
+
|
|
288
|
+
if (returning) {
|
|
289
|
+
query += ` RETURNING ${returning === true ? '*' : returning}`;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return {
|
|
293
|
+
query: query,
|
|
294
|
+
requiresRLS: true,
|
|
295
|
+
hint: 'Ensure user has INSERT permissions via RLS policy'
|
|
296
|
+
};
|
|
297
|
+
})();
|
|
298
|
+
|
|
299
|
+
- id: build-update-query
|
|
300
|
+
language: javascript
|
|
301
|
+
runtime: isolated_vm
|
|
302
|
+
description: "Build UPDATE query with RLS validation"
|
|
303
|
+
function: |
|
|
304
|
+
(function() {
|
|
305
|
+
const { table, data, where, returning } = args;
|
|
306
|
+
|
|
307
|
+
if (!table) {
|
|
308
|
+
return { error: 'Table name is required' };
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
if (!data || typeof data !== 'object') {
|
|
312
|
+
return { error: 'Data object is required' };
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
if (!where || typeof where !== 'object') {
|
|
316
|
+
return { error: 'WHERE condition is required for UPDATE' };
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const setClauses = Object.entries(data).map(([key, value]) => {
|
|
320
|
+
if (typeof value === 'string') {
|
|
321
|
+
return `${key} = '${value}'`;
|
|
322
|
+
}
|
|
323
|
+
if (value === null) {
|
|
324
|
+
return `${key} = NULL`;
|
|
325
|
+
}
|
|
326
|
+
return `${key} = ${value}`;
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
const whereClauses = Object.entries(where).map(([key, value]) => {
|
|
330
|
+
if (typeof value === 'string') {
|
|
331
|
+
return `${key} = '${value}'`;
|
|
332
|
+
}
|
|
333
|
+
return `${key} = ${value}`;
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
let query = `UPDATE ${table} SET ${setClauses.join(', ')} WHERE ${whereClauses.join(' AND ')}`;
|
|
337
|
+
|
|
338
|
+
if (returning) {
|
|
339
|
+
query += ` RETURNING ${returning === true ? '*' : returning}`;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return {
|
|
343
|
+
query: query,
|
|
344
|
+
requiresRLS: true,
|
|
345
|
+
hint: 'Ensure user has UPDATE permissions via RLS policy'
|
|
346
|
+
};
|
|
347
|
+
})();
|
|
348
|
+
|
|
349
|
+
- id: validate-rls-policy
|
|
350
|
+
language: javascript
|
|
351
|
+
runtime: isolated_vm
|
|
352
|
+
description: "Validate RLS policy syntax and structure"
|
|
353
|
+
function: |
|
|
354
|
+
(function() {
|
|
355
|
+
const { policy, table, operation } = args;
|
|
356
|
+
|
|
357
|
+
if (!policy || typeof policy !== 'object') {
|
|
358
|
+
return { valid: false, errors: ['Policy object is required'] };
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
const errors = [];
|
|
362
|
+
|
|
363
|
+
// Check required fields
|
|
364
|
+
if (!policy.name) {
|
|
365
|
+
errors.push('Policy name is required');
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (!table) {
|
|
369
|
+
errors.push('Table name is required');
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if (!operation) {
|
|
373
|
+
errors.push('Operation is required (SELECT, INSERT, UPDATE, DELETE, ALL)');
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// Validate operation
|
|
377
|
+
const validOperations = ['SELECT', 'INSERT', 'UPDATE', 'DELETE', 'ALL'];
|
|
378
|
+
if (operation && !validOperations.includes(operation.toUpperCase())) {
|
|
379
|
+
errors.push(`Operation must be one of: ${validOperations.join(', ')}`);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Check for USING clause (required for SELECT, UPDATE, DELETE, ALL)
|
|
383
|
+
if (!policy.using && ['SELECT', 'UPDATE', 'DELETE', 'ALL'].includes(operation?.toUpperCase())) {
|
|
384
|
+
errors.push('USING clause is required for this operation');
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// Check for WITH CHECK clause (required for INSERT, UPDATE)
|
|
388
|
+
if (!policy.withCheck && ['INSERT', 'UPDATE'].includes(operation?.toUpperCase())) {
|
|
389
|
+
errors.push('WITH CHECK clause recommended for this operation');
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
return {
|
|
393
|
+
valid: errors.length === 0,
|
|
394
|
+
errors: errors,
|
|
395
|
+
warnings: policy.withCheck ? [] : ['Consider adding WITH CHECK clause for additional security']
|
|
396
|
+
};
|
|
397
|
+
})();
|
|
398
|
+
|
|
399
|
+
- id: format-realtime-subscription
|
|
400
|
+
language: javascript
|
|
401
|
+
runtime: isolated_vm
|
|
402
|
+
description: "Format real-time subscription configuration"
|
|
403
|
+
function: |
|
|
404
|
+
(function() {
|
|
405
|
+
const { table, event, filter, schema } = args;
|
|
406
|
+
|
|
407
|
+
if (!table) {
|
|
408
|
+
return { error: 'Table name is required' };
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
const events = event ? (Array.isArray(event) ? event : [event]) : ['INSERT', 'UPDATE', 'DELETE'];
|
|
412
|
+
|
|
413
|
+
const config = {
|
|
414
|
+
event: events.join(','),
|
|
415
|
+
schema: schema || 'public',
|
|
416
|
+
table: table
|
|
417
|
+
};
|
|
418
|
+
|
|
419
|
+
if (filter) {
|
|
420
|
+
config.filter = filter;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
return {
|
|
424
|
+
channel: `${schema || 'public'}:${table}`,
|
|
425
|
+
config: config,
|
|
426
|
+
example: `
|
|
427
|
+
const channel = supabase
|
|
428
|
+
.channel('${schema || 'public'}:${table}')
|
|
429
|
+
.on('postgres_changes', ${JSON.stringify(config, null, 2)}, (payload) => {
|
|
430
|
+
console.log('Change received!', payload)
|
|
431
|
+
})
|
|
432
|
+
.subscribe()
|
|
433
|
+
`
|
|
434
|
+
};
|
|
435
|
+
})();
|
|
436
|
+
|
|
437
|
+
- id: validate-table-permissions
|
|
438
|
+
language: javascript
|
|
439
|
+
runtime: isolated_vm
|
|
440
|
+
description: "Validate table permissions and RLS status"
|
|
441
|
+
function: |
|
|
442
|
+
(function() {
|
|
443
|
+
const { table, hasRLS, policies } = args;
|
|
444
|
+
|
|
445
|
+
if (!table) {
|
|
446
|
+
return { error: 'Table name is required' };
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
const warnings = [];
|
|
450
|
+
const recommendations = [];
|
|
451
|
+
|
|
452
|
+
// Check if RLS is enabled
|
|
453
|
+
if (hasRLS === false) {
|
|
454
|
+
warnings.push('RLS is disabled - table data is publicly accessible');
|
|
455
|
+
recommendations.push('Enable RLS with: ALTER TABLE ' + table + ' ENABLE ROW LEVEL SECURITY');
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// Check if policies exist
|
|
459
|
+
if (hasRLS && (!policies || policies.length === 0)) {
|
|
460
|
+
warnings.push('RLS is enabled but no policies exist - table is inaccessible');
|
|
461
|
+
recommendations.push('Create at least one RLS policy to allow access');
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Check for overly permissive policies
|
|
465
|
+
if (policies && Array.isArray(policies)) {
|
|
466
|
+
policies.forEach(policy => {
|
|
467
|
+
if (policy.using === 'true' || policy.using === '(true)') {
|
|
468
|
+
warnings.push(`Policy '${policy.name}' allows access to all rows`);
|
|
469
|
+
}
|
|
470
|
+
if (policy.operation === 'ALL' && (policy.using === 'true' || !policy.using)) {
|
|
471
|
+
warnings.push(`Policy '${policy.name}' allows all operations without restrictions`);
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
return {
|
|
477
|
+
table: table,
|
|
478
|
+
rlsEnabled: hasRLS === true,
|
|
479
|
+
policyCount: policies ? policies.length : 0,
|
|
480
|
+
warnings: warnings,
|
|
481
|
+
recommendations: recommendations,
|
|
482
|
+
isSecure: hasRLS && policies && policies.length > 0
|
|
483
|
+
};
|
|
484
|
+
})();
|
|
485
|
+
|
|
486
|
+
- id: parse-postgres-error
|
|
487
|
+
language: javascript
|
|
488
|
+
runtime: isolated_vm
|
|
489
|
+
description: "Parse and format Postgres error messages"
|
|
490
|
+
function: |
|
|
491
|
+
(function() {
|
|
492
|
+
const { error, query } = args;
|
|
493
|
+
|
|
494
|
+
if (!error) {
|
|
495
|
+
return null;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
const result = {
|
|
499
|
+
message: error.message || 'Unknown error',
|
|
500
|
+
code: error.code || null,
|
|
501
|
+
hint: null,
|
|
502
|
+
context: query ? `Query: ${query.substring(0, 100)}...` : null
|
|
503
|
+
};
|
|
504
|
+
|
|
505
|
+
// Common Postgres error codes
|
|
506
|
+
const errorMap = {
|
|
507
|
+
'23505': 'Unique constraint violation',
|
|
508
|
+
'23503': 'Foreign key constraint violation',
|
|
509
|
+
'23502': 'Not null constraint violation',
|
|
510
|
+
'23514': 'Check constraint violation',
|
|
511
|
+
'42P01': 'Table does not exist',
|
|
512
|
+
'42703': 'Column does not exist',
|
|
513
|
+
'42501': 'Insufficient privilege (check RLS policies)',
|
|
514
|
+
'42883': 'Function does not exist'
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
if (error.code && errorMap[error.code]) {
|
|
518
|
+
result.hint = errorMap[error.code];
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// RLS-specific hints
|
|
522
|
+
if (error.code === '42501' || error.message?.includes('permission denied')) {
|
|
523
|
+
result.hint = 'Permission denied - check RLS policies and user authentication';
|
|
524
|
+
result.rlsHint = 'Ensure user is authenticated and RLS policy allows this operation';
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
return result;
|
|
528
|
+
})();
|
|
529
|
+
|
|
530
|
+
- id: generate-migration-name
|
|
531
|
+
language: javascript
|
|
532
|
+
runtime: isolated_vm
|
|
533
|
+
description: "Generate timestamped migration name"
|
|
534
|
+
function: |
|
|
535
|
+
(function() {
|
|
536
|
+
const { description } = args;
|
|
537
|
+
|
|
538
|
+
if (!description) {
|
|
539
|
+
return { error: 'Description is required' };
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
// Convert to snake_case
|
|
543
|
+
const snakeCase = description
|
|
544
|
+
.toLowerCase()
|
|
545
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
546
|
+
.replace(/^_|_$/g, '');
|
|
547
|
+
|
|
548
|
+
// Generate timestamp (YYYYMMDDHHMMSS format)
|
|
549
|
+
const now = new Date();
|
|
550
|
+
const timestamp = now.toISOString()
|
|
551
|
+
.replace(/[-:T.]/g, '')
|
|
552
|
+
.substring(0, 14);
|
|
553
|
+
|
|
554
|
+
const migrationName = `${timestamp}_${snakeCase}`;
|
|
555
|
+
|
|
556
|
+
return {
|
|
557
|
+
name: migrationName,
|
|
558
|
+
timestamp: timestamp,
|
|
559
|
+
description: snakeCase,
|
|
560
|
+
example: `apply_migration({ name: "${migrationName}", query: "..." })`
|
|
561
|
+
};
|
|
562
|
+
})();
|
|
563
|
+
|
|
564
|
+
api_complexity:
|
|
565
|
+
rls_policy_patterns:
|
|
566
|
+
- pattern: authenticated_user
|
|
567
|
+
description: "Allow access only to authenticated users"
|
|
568
|
+
example: |
|
|
569
|
+
USING (auth.uid() IS NOT NULL)
|
|
570
|
+
use_case: "Restrict access to logged-in users only"
|
|
571
|
+
|
|
572
|
+
- pattern: user_owned_rows
|
|
573
|
+
description: "Users can only access their own rows"
|
|
574
|
+
example: |
|
|
575
|
+
USING (auth.uid() = user_id)
|
|
576
|
+
use_case: "Private user data (profiles, settings)"
|
|
577
|
+
|
|
578
|
+
- pattern: role_based_access
|
|
579
|
+
description: "Access based on user role"
|
|
580
|
+
example: |
|
|
581
|
+
USING (
|
|
582
|
+
EXISTS (
|
|
583
|
+
SELECT 1 FROM user_roles
|
|
584
|
+
WHERE user_id = auth.uid()
|
|
585
|
+
AND role IN ('admin', 'editor')
|
|
586
|
+
)
|
|
587
|
+
)
|
|
588
|
+
use_case: "Admin panels, content management"
|
|
589
|
+
|
|
590
|
+
- pattern: team_member_access
|
|
591
|
+
description: "Access for team/organization members"
|
|
592
|
+
example: |
|
|
593
|
+
USING (
|
|
594
|
+
EXISTS (
|
|
595
|
+
SELECT 1 FROM team_members
|
|
596
|
+
WHERE team_id = projects.team_id
|
|
597
|
+
AND user_id = auth.uid()
|
|
598
|
+
)
|
|
599
|
+
)
|
|
600
|
+
use_case: "Collaborative workspaces, multi-tenant apps"
|
|
601
|
+
|
|
602
|
+
realtime_subscription_patterns:
|
|
603
|
+
- pattern: table_changes
|
|
604
|
+
description: "Subscribe to all changes on a table"
|
|
605
|
+
config: |
|
|
606
|
+
{
|
|
607
|
+
event: '*',
|
|
608
|
+
schema: 'public',
|
|
609
|
+
table: 'messages'
|
|
610
|
+
}
|
|
611
|
+
use_case: "Real-time chat, activity feeds"
|
|
612
|
+
|
|
613
|
+
- pattern: filtered_changes
|
|
614
|
+
description: "Subscribe to specific rows"
|
|
615
|
+
config: |
|
|
616
|
+
{
|
|
617
|
+
event: 'INSERT',
|
|
618
|
+
schema: 'public',
|
|
619
|
+
table: 'messages',
|
|
620
|
+
filter: 'room_id=eq.123'
|
|
621
|
+
}
|
|
622
|
+
use_case: "Room-specific updates, filtered feeds"
|
|
623
|
+
|
|
624
|
+
- pattern: user_specific_changes
|
|
625
|
+
description: "Subscribe to user's own data"
|
|
626
|
+
config: |
|
|
627
|
+
{
|
|
628
|
+
event: '*',
|
|
629
|
+
schema: 'public',
|
|
630
|
+
table: 'notifications',
|
|
631
|
+
filter: 'user_id=eq.[USER_ID]'
|
|
632
|
+
}
|
|
633
|
+
use_case: "User notifications, personal updates"
|
|
634
|
+
|
|
635
|
+
auth_integration_quirks:
|
|
636
|
+
- quirk: auth_uid_null
|
|
637
|
+
description: "auth.uid() returns NULL for unauthenticated requests"
|
|
638
|
+
impact: "RLS policies using auth.uid() will block anonymous access"
|
|
639
|
+
solution: "Use separate policies for authenticated and anonymous users"
|
|
640
|
+
|
|
641
|
+
- quirk: jwt_token_expiry
|
|
642
|
+
description: "JWT tokens expire after configured duration (default 1 hour)"
|
|
643
|
+
impact: "Long-running operations may fail mid-execution"
|
|
644
|
+
solution: "Implement token refresh logic in client applications"
|
|
645
|
+
|
|
646
|
+
- quirk: rls_bypass_service_role
|
|
647
|
+
description: "Service role key bypasses RLS policies"
|
|
648
|
+
impact: "Backend operations ignore RLS - can access all data"
|
|
649
|
+
solution: "Never expose service role key to clients - use anon/user keys only"
|
|
650
|
+
|
|
651
|
+
- quirk: policy_evaluation_order
|
|
652
|
+
description: "Multiple policies are OR'd together (any match grants access)"
|
|
653
|
+
impact: "Cannot create deny policies - all policies must grant access"
|
|
654
|
+
solution: "Design policies to be restrictive by default"
|
|
655
|
+
|
|
656
|
+
anti_patterns:
|
|
657
|
+
- pattern: missing_rls_policies
|
|
658
|
+
description: "Enabling RLS without creating policies"
|
|
659
|
+
category: security
|
|
660
|
+
severity: high
|
|
661
|
+
wrong: |
|
|
662
|
+
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
|
|
663
|
+
-- ❌ No policies created - table is now inaccessible
|
|
664
|
+
correct: |
|
|
665
|
+
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
|
|
666
|
+
|
|
667
|
+
CREATE POLICY "Users can view own profile"
|
|
668
|
+
ON users FOR SELECT
|
|
669
|
+
USING (auth.uid() = id);
|
|
670
|
+
|
|
671
|
+
CREATE POLICY "Users can update own profile"
|
|
672
|
+
ON users FOR UPDATE
|
|
673
|
+
USING (auth.uid() = id);
|
|
674
|
+
-- ✅ RLS enabled with appropriate policies
|
|
675
|
+
rationale: "RLS without policies makes tables completely inaccessible. Always create policies after enabling RLS."
|
|
676
|
+
|
|
677
|
+
- pattern: overly_permissive_policies
|
|
678
|
+
description: "Using USING (true) for all operations"
|
|
679
|
+
category: security
|
|
680
|
+
severity: critical
|
|
681
|
+
wrong: |
|
|
682
|
+
CREATE POLICY "Allow all"
|
|
683
|
+
ON sensitive_data FOR ALL
|
|
684
|
+
USING (true);
|
|
685
|
+
-- ❌ Allows anyone to do anything
|
|
686
|
+
correct: |
|
|
687
|
+
CREATE POLICY "Allow authenticated users"
|
|
688
|
+
ON sensitive_data FOR SELECT
|
|
689
|
+
USING (auth.uid() IS NOT NULL AND auth.uid() = user_id);
|
|
690
|
+
-- ✅ Restricts access to authenticated users and their own data
|
|
691
|
+
rationale: "USING (true) defeats the purpose of RLS. Always implement meaningful access controls."
|
|
692
|
+
|
|
693
|
+
- pattern: hardcoded_uuids_in_migrations
|
|
694
|
+
description: "Hardcoding UUIDs in data migrations"
|
|
695
|
+
category: migrations
|
|
696
|
+
severity: medium
|
|
697
|
+
wrong: |
|
|
698
|
+
-- ❌ Hardcoded UUID will fail if record doesn't exist
|
|
699
|
+
INSERT INTO projects (id, name, owner_id)
|
|
700
|
+
VALUES ('123e4567-e89b-12d3-a456-426614174000', 'My Project', '...');
|
|
701
|
+
correct: |
|
|
702
|
+
-- ✅ Generate UUIDs or use RETURNING clause
|
|
703
|
+
INSERT INTO projects (name, owner_id)
|
|
704
|
+
VALUES ('My Project', (SELECT id FROM users WHERE email = 'admin@example.com'))
|
|
705
|
+
RETURNING id;
|
|
706
|
+
rationale: "Hardcoded UUIDs cause migration failures across environments. Use generated IDs or lookups."
|
|
707
|
+
|
|
708
|
+
- pattern: ddl_in_execute_sql
|
|
709
|
+
description: "Running DDL operations via execute_sql"
|
|
710
|
+
category: migrations
|
|
711
|
+
severity: high
|
|
712
|
+
wrong: |
|
|
713
|
+
execute_sql({
|
|
714
|
+
query: "CREATE TABLE users (id uuid, name text)"
|
|
715
|
+
})
|
|
716
|
+
-- ❌ DDL not tracked in migrations
|
|
717
|
+
correct: |
|
|
718
|
+
apply_migration({
|
|
719
|
+
name: "create_users_table",
|
|
720
|
+
query: "CREATE TABLE users (id uuid PRIMARY KEY DEFAULT uuid_generate_v4(), name text NOT NULL)"
|
|
721
|
+
})
|
|
722
|
+
-- ✅ DDL tracked in migrations table
|
|
723
|
+
rationale: "DDL operations must be tracked via migrations for version control and rollback capability."
|
|
724
|
+
|
|
725
|
+
examples:
|
|
726
|
+
execute_sql:
|
|
727
|
+
- scenario: success
|
|
728
|
+
description: "Execute SELECT query with RLS"
|
|
729
|
+
input:
|
|
730
|
+
project_id: "proj_abc123"
|
|
731
|
+
query: "SELECT * FROM posts WHERE user_id = auth.uid()"
|
|
732
|
+
output:
|
|
733
|
+
rows: [{ id: 1, title: "My Post", user_id: "user_xyz" }]
|
|
734
|
+
count: 1
|
|
735
|
+
|
|
736
|
+
- scenario: failure_invalid_param
|
|
737
|
+
description: "Missing required project_id"
|
|
738
|
+
input:
|
|
739
|
+
query: "SELECT * FROM posts"
|
|
740
|
+
error:
|
|
741
|
+
code: VALIDATION_ERROR
|
|
742
|
+
message: "project_id is required"
|
|
743
|
+
validator: validate-execute-sql
|
|
744
|
+
|
|
745
|
+
- scenario: failure_ddl_operation
|
|
746
|
+
description: "Attempting DDL via execute_sql"
|
|
747
|
+
input:
|
|
748
|
+
project_id: "proj_abc123"
|
|
749
|
+
query: "CREATE TABLE test (id int)"
|
|
750
|
+
error:
|
|
751
|
+
code: VALIDATION_ERROR
|
|
752
|
+
message: "DDL operations not allowed in execute_sql - use apply_migration instead"
|
|
753
|
+
validator: validate-execute-sql
|
|
754
|
+
|
|
755
|
+
apply_migration:
|
|
756
|
+
- scenario: success
|
|
757
|
+
description: "Apply migration to create table"
|
|
758
|
+
input:
|
|
759
|
+
project_id: "proj_abc123"
|
|
760
|
+
name: "create_posts_table"
|
|
761
|
+
query: |
|
|
762
|
+
CREATE TABLE posts (
|
|
763
|
+
id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
764
|
+
title text NOT NULL,
|
|
765
|
+
content text,
|
|
766
|
+
user_id uuid REFERENCES auth.users(id),
|
|
767
|
+
created_at timestamptz DEFAULT now()
|
|
768
|
+
);
|
|
769
|
+
|
|
770
|
+
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
|
|
771
|
+
|
|
772
|
+
CREATE POLICY "Users can view own posts"
|
|
773
|
+
ON posts FOR SELECT
|
|
774
|
+
USING (auth.uid() = user_id);
|
|
775
|
+
output:
|
|
776
|
+
migration_id: "mig_xyz789"
|
|
777
|
+
status: "applied"
|
|
778
|
+
|
|
779
|
+
- scenario: failure_invalid_param
|
|
780
|
+
description: "Invalid migration name format"
|
|
781
|
+
input:
|
|
782
|
+
project_id: "proj_abc123"
|
|
783
|
+
name: "CreatePostsTable"
|
|
784
|
+
query: "CREATE TABLE posts (id int)"
|
|
785
|
+
error:
|
|
786
|
+
code: VALIDATION_ERROR
|
|
787
|
+
message: "migration name must be snake_case (lowercase letters, numbers, underscores only)"
|
|
788
|
+
validator: validate-apply-migration
|
|
789
|
+
|
|
790
|
+
mcp_specific:
|
|
791
|
+
server_command: "https://mcp.supabase.com/mcp"
|
|
792
|
+
transport: sse
|
|
793
|
+
auth: oauth
|
|
794
|
+
query_parameters:
|
|
795
|
+
- name: project_ref
|
|
796
|
+
required: false
|
|
797
|
+
description: "Scope server to specific project (recommended)"
|
|
798
|
+
- name: read_only
|
|
799
|
+
required: false
|
|
800
|
+
description: "Restrict to read-only operations (recommended)"
|
|
801
|
+
- name: features
|
|
802
|
+
required: false
|
|
803
|
+
description: "Specify which tool groups to enable"
|
|
804
|
+
health_check:
|
|
805
|
+
method: tool_call
|
|
806
|
+
command: list_projects
|
|
807
|
+
expected_response: "Array of projects or organization prompt"
|
|
808
|
+
timeout_ms: 10000
|