aios-core 2.1.6 → 2.2.1
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/core/README.md +229 -229
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/core/data/aios-kb.md +923 -923
- package/.aios-core/core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/core/docs/component-creation-guide.md +457 -457
- package/.aios-core/core/docs/session-update-pattern.md +307 -307
- package/.aios-core/core/docs/template-syntax.md +266 -266
- package/.aios-core/core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/core/elicitation/elicitation-engine.js +1 -1
- package/.aios-core/core/index.esm.js +42 -42
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/migration/migration-config.yaml +83 -83
- package/.aios-core/core/migration/module-mapping.yaml +89 -89
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +1 -1
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -86
- package/.aios-core/core/registry/README.md +179 -179
- package/.aios-core/core/utils/security-utils.js +1 -1
- package/.aios-core/core-config.yaml +391 -382
- package/.aios-core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/data/aios-kb.md +923 -923
- package/.aios-core/data/technical-preferences.md +3 -3
- package/.aios-core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/development/README.md +142 -142
- package/.aios-core/development/agent-teams/team-all.yaml +15 -15
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -18
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -10
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -13
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -155
- package/.aios-core/development/agents/aios-master.md +339 -339
- package/.aios-core/development/agents/analyst.md +195 -195
- package/.aios-core/development/agents/architect.md +359 -359
- package/.aios-core/development/agents/data-engineer.md +468 -468
- package/.aios-core/development/agents/dev.md +390 -390
- package/.aios-core/development/agents/devops.md +398 -398
- package/.aios-core/development/agents/pm.md +198 -198
- package/.aios-core/development/agents/po.md +256 -256
- package/.aios-core/development/agents/qa.md +312 -312
- package/.aios-core/development/agents/sm.md +220 -220
- package/.aios-core/development/agents/ux-design-expert.md +451 -451
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -85
- package/.aios-core/development/tasks/add-mcp.md +319 -319
- package/.aios-core/development/tasks/advanced-elicitation.md +318 -318
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +341 -341
- package/.aios-core/development/tasks/analyze-framework.md +696 -696
- package/.aios-core/development/tasks/analyze-performance.md +637 -637
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -340
- package/.aios-core/development/tasks/architect-analyze-impact.md +826 -826
- package/.aios-core/development/tasks/audit-codebase.md +429 -429
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -270
- package/.aios-core/development/tasks/audit-utilities.md +358 -358
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -286
- package/.aios-core/development/tasks/brownfield-create-epic.md +485 -485
- package/.aios-core/development/tasks/brownfield-create-story.md +356 -356
- package/.aios-core/development/tasks/build-component.md +478 -478
- package/.aios-core/development/tasks/calculate-roi.md +455 -455
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -764
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -670
- package/.aios-core/development/tasks/collaborative-edit.md +1108 -1108
- package/.aios-core/development/tasks/compose-molecule.md +284 -284
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -414
- package/.aios-core/development/tasks/correct-course.md +279 -279
- package/.aios-core/development/tasks/create-agent.md +321 -321
- package/.aios-core/development/tasks/create-brownfield-story.md +726 -726
- package/.aios-core/development/tasks/create-deep-research-prompt.md +498 -498
- package/.aios-core/development/tasks/create-doc.md +316 -316
- package/.aios-core/development/tasks/create-next-story.md +774 -774
- package/.aios-core/development/tasks/create-suite.md +283 -283
- package/.aios-core/development/tasks/create-task.md +371 -371
- package/.aios-core/development/tasks/create-workflow.md +370 -370
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -572
- package/.aios-core/development/tasks/db-apply-migration.md +381 -381
- package/.aios-core/development/tasks/db-bootstrap.md +642 -642
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -693
- package/.aios-core/development/tasks/db-dry-run.md +293 -293
- package/.aios-core/development/tasks/db-env-check.md +260 -260
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -663
- package/.aios-core/development/tasks/db-explain.md +631 -631
- package/.aios-core/development/tasks/db-impersonate.md +495 -495
- package/.aios-core/development/tasks/db-load-csv.md +593 -593
- package/.aios-core/development/tasks/db-policy-apply.md +653 -653
- package/.aios-core/development/tasks/db-rls-audit.md +411 -411
- package/.aios-core/development/tasks/db-rollback.md +739 -739
- package/.aios-core/development/tasks/db-run-sql.md +613 -613
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -1011
- package/.aios-core/development/tasks/db-seed.md +390 -390
- package/.aios-core/development/tasks/db-smoke-test.md +351 -351
- package/.aios-core/development/tasks/db-snapshot.md +569 -569
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -712
- package/.aios-core/development/tasks/db-verify-order.md +515 -515
- package/.aios-core/development/tasks/deprecate-component.md +956 -956
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -318
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -469
- package/.aios-core/development/tasks/dev-develop-story.md +846 -846
- package/.aios-core/development/tasks/dev-improve-code-quality.md +872 -872
- package/.aios-core/development/tasks/dev-optimize-performance.md +1033 -1033
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +870 -870
- package/.aios-core/development/tasks/dev-validate-next-story.md +348 -348
- package/.aios-core/development/tasks/document-project.md +552 -552
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -1311
- package/.aios-core/development/tasks/execute-checklist.md +301 -301
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -274
- package/.aios-core/development/tasks/extend-pattern.md +269 -269
- package/.aios-core/development/tasks/extract-tokens.md +467 -467
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -518
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +260 -260
- package/.aios-core/development/tasks/generate-documentation.md +284 -284
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -522
- package/.aios-core/development/tasks/generate-shock-report.md +501 -501
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -427
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -733
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -374
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -483
- package/.aios-core/development/tasks/improve-self.md +822 -822
- package/.aios-core/development/tasks/index-docs.md +387 -387
- package/.aios-core/development/tasks/init-project-status.md +506 -506
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -314
- package/.aios-core/development/tasks/kb-mode-interaction.md +283 -283
- package/.aios-core/development/tasks/learn-patterns.md +900 -900
- package/.aios-core/development/tasks/mcp-workflow.md +437 -437
- package/.aios-core/development/tasks/modify-agent.md +381 -381
- package/.aios-core/development/tasks/modify-task.md +424 -424
- package/.aios-core/development/tasks/modify-workflow.md +465 -465
- package/.aios-core/development/tasks/po-backlog-add.md +370 -370
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -523
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -540
- package/.aios-core/development/tasks/po-pull-story.md +316 -316
- package/.aios-core/development/tasks/po-stories-index.md +351 -351
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -457
- package/.aios-core/development/tasks/po-sync-story.md +303 -303
- package/.aios-core/development/tasks/pr-automation.md +701 -701
- package/.aios-core/development/tasks/propose-modification.md +842 -842
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -425
- package/.aios-core/development/tasks/qa-gate.md +373 -373
- package/.aios-core/development/tasks/qa-generate-tests.md +1174 -1174
- package/.aios-core/development/tasks/qa-nfr-assess.md +557 -557
- package/.aios-core/development/tasks/qa-review-proposal.md +1157 -1157
- package/.aios-core/development/tasks/qa-review-story.md +682 -682
- package/.aios-core/development/tasks/qa-risk-profile.md +566 -566
- package/.aios-core/development/tasks/qa-run-tests.md +277 -277
- package/.aios-core/development/tasks/qa-test-design.md +387 -387
- package/.aios-core/development/tasks/qa-trace-requirements.md +476 -476
- package/.aios-core/development/tasks/release-management.md +723 -723
- package/.aios-core/development/tasks/security-audit.md +554 -554
- package/.aios-core/development/tasks/security-scan.md +790 -790
- package/.aios-core/development/tasks/setup-database.md +741 -741
- package/.aios-core/development/tasks/setup-design-system.md +462 -462
- package/.aios-core/development/tasks/setup-github.md +874 -874
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -584
- package/.aios-core/development/tasks/setup-project-docs.md +1 -1
- package/.aios-core/development/tasks/shard-doc.md +537 -537
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -480
- package/.aios-core/development/tasks/sync-documentation.md +864 -864
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -294
- package/.aios-core/development/tasks/test-as-user.md +621 -621
- package/.aios-core/development/tasks/test-validation-task.md +171 -171
- package/.aios-core/development/tasks/undo-last.md +346 -346
- package/.aios-core/development/tasks/update-manifest.md +409 -409
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -617
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -672
- package/.aios-core/development/tasks/ux-user-research.md +559 -559
- package/.aios-core/development/tasks/validate-next-story.md +422 -422
- package/.aios-core/development/workflows/README.md +83 -83
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -297
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -187
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -197
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -333
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -206
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -235
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/docs/component-creation-guide.md +457 -457
- package/.aios-core/docs/session-update-pattern.md +307 -307
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -572
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -185
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -354
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -821
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -1339
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -5398
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -697
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -511
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -556
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -210
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -550
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -1414
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -523
- package/.aios-core/docs/template-syntax.md +266 -266
- package/.aios-core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/index.esm.js +15 -15
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/README.md +126 -126
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -59
- package/.aios-core/infrastructure/scripts/approval-workflow.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +3 -3
- package/.aios-core/infrastructure/scripts/component-metadata.js +1 -1
- package/.aios-core/infrastructure/scripts/component-search.js +1 -1
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/improvement-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +26 -13
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
- package/.aios-core/infrastructure/scripts/llm-routing/usage-tracker/index.js +549 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -134
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/scripts/template-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/template-validator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-generator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/transaction-manager.js +1 -1
- package/.aios-core/infrastructure/scripts/usage-analytics.js +1 -1
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +2 -2
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -109
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -621
- package/.aios-core/infrastructure/tools/README.md +222 -222
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -200
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -260
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -224
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -261
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -127
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -534
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -78
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -180
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -930
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -551
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -808
- package/.aios-core/install-manifest.yaml +347 -347
- package/.aios-core/product/README.md +56 -56
- package/.aios-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/.aios-core/product/checklists/architect-checklist.md +443 -443
- package/.aios-core/product/checklists/change-checklist.md +182 -182
- package/.aios-core/product/checklists/component-quality-checklist.md +74 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -119
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -97
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -99
- package/.aios-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/.aios-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/.aios-core/product/checklists/pm-checklist.md +375 -375
- package/.aios-core/product/checklists/po-master-checklist.md +441 -441
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -108
- package/.aios-core/product/checklists/release-checklist.md +122 -122
- package/.aios-core/product/checklists/story-dod-checklist.md +101 -101
- package/.aios-core/product/checklists/story-draft-checklist.md +215 -215
- package/.aios-core/product/data/atomic-design-principles.md +108 -0
- package/.aios-core/product/data/brainstorming-techniques.md +36 -36
- package/.aios-core/product/data/consolidation-algorithms.md +142 -0
- package/.aios-core/product/data/database-best-practices.md +182 -0
- package/.aios-core/product/data/design-token-best-practices.md +107 -0
- package/.aios-core/product/data/elicitation-methods.md +134 -134
- package/.aios-core/product/data/integration-patterns.md +207 -0
- package/.aios-core/product/data/migration-safety-guide.md +329 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -471
- package/.aios-core/product/data/postgres-tuning-guide.md +300 -0
- package/.aios-core/product/data/rls-security-patterns.md +333 -0
- package/.aios-core/product/data/roi-calculation-guide.md +142 -0
- package/.aios-core/product/data/supabase-patterns.md +330 -0
- package/.aios-core/product/data/test-levels-framework.md +148 -148
- package/.aios-core/product/data/test-priorities-matrix.md +174 -174
- package/.aios-core/product/data/wcag-compliance-guide.md +267 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -225
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -63
- package/.aios-core/product/templates/activation-instructions-template.md +258 -258
- package/.aios-core/product/templates/agent-template.yaml +120 -120
- package/.aios-core/product/templates/architecture-tmpl.yaml +650 -650
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +155 -155
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +475 -475
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +279 -279
- package/.aios-core/product/templates/changelog-template.md +134 -134
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -152
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +292 -292
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -587
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -70
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +205 -205
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +348 -348
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +804 -804
- package/.aios-core/product/templates/github-pr-template.md +67 -67
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -140
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -221
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -84
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -92
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -85
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -86
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -104
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -80
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -53
- package/.aios-core/product/templates/market-research-tmpl.yaml +251 -251
- package/.aios-core/product/templates/mcp-workflow.js +271 -271
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -1022
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -524
- package/.aios-core/product/templates/personalized-agent-template.md +258 -258
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -340
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -905
- package/.aios-core/product/templates/personalized-task-template.md +344 -344
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -322
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -460
- package/.aios-core/product/templates/prd-tmpl.yaml +201 -201
- package/.aios-core/product/templates/project-brief-tmpl.yaml +220 -220
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -240
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -1203
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -428
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -219
- package/.aios-core/product/templates/story-tmpl.yaml +331 -331
- package/.aios-core/product/templates/task-execution-report.md +495 -495
- package/.aios-core/product/templates/task-template.md +122 -122
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -395
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -305
- package/.aios-core/product/templates/workflow-template.yaml +133 -133
- package/.aios-core/scripts/README.md +354 -354
- package/.aios-core/scripts/aios-doc-template.md +325 -325
- package/.aios-core/scripts/elicitation-engine.js +1 -1
- package/.aios-core/scripts/test-template-system.js +1 -1
- package/.aios-core/scripts/workflow-management.md +69 -69
- package/.aios-core/user-guide.md +1413 -1413
- package/.aios-core/working-in-the-brownfield.md +361 -361
- package/LICENSE +1 -1
- package/README.md +704 -703
- package/bin/aios-init-old.js +3 -3
- package/bin/aios-init-v4.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +1 -1
- package/bin/aios-init.js +3 -3
- package/bin/aios.js +279 -279
- package/bin/utils/install-errors.js +339 -339
- package/bin/utils/install-transaction.js +445 -445
- package/index.d.ts +18 -18
- package/index.esm.js +20 -20
- package/index.js +6 -6
- package/package.json +8 -11
- package/packages/installer/src/config/templates/env-template.js +27 -4
- package/packages/installer/src/detection/detect-project-type.js +81 -81
- package/packages/installer/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +8 -8
- package/src/config/ide-configs.js +1 -1
- package/src/wizard/feedback.js +2 -2
- package/src/wizard/index.js +1 -1
- package/src/wizard/validation/report-generator.js +1 -1
- package/src/wizard/validation/troubleshooting-system.js +13 -13
- package/tools/diagnose-installation.js +266 -0
- package/tools/diagnose-npx-issue.ps1 +96 -0
- package/tools/quick-diagnose.cmd +85 -0
- package/tools/quick-diagnose.ps1 +117 -0
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +0 -122
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +0 -89
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +0 -780
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +0 -950
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +0 -425
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +0 -132
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +0 -381
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +0 -203
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +0 -24
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +0 -51
- package/.aios-core/tasks/find-component.md.legacy +0 -391
- package/.aios-core/tasks/generate-commit-message.md.legacy +0 -426
- package/.aios-core/tasks/generate-migration.md.legacy +0 -382
- package/.aios-core/tasks/rollback-modification.md.legacy +0 -307
- package/.aios-core/tasks/update-tests.md.legacy +0 -283
|
@@ -1,572 +1,572 @@
|
|
|
1
|
-
# Task: Analyze Hot Query Paths
|
|
2
|
-
|
|
3
|
-
**Purpose**: Run EXPLAIN ANALYZE on common/critical queries to identify performance issues
|
|
4
|
-
|
|
5
|
-
**Elicit**: true
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Execution Modes
|
|
10
|
-
|
|
11
|
-
**Choose your execution mode:**
|
|
12
|
-
|
|
13
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
14
|
-
- Autonomous decision making with logging
|
|
15
|
-
- Minimal user interaction
|
|
16
|
-
- **Best for:** Simple, deterministic tasks
|
|
17
|
-
|
|
18
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
19
|
-
- Explicit decision checkpoints
|
|
20
|
-
- Educational explanations
|
|
21
|
-
- **Best for:** Learning, complex decisions
|
|
22
|
-
|
|
23
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
24
|
-
- Task analysis phase (identify all ambiguities)
|
|
25
|
-
- Zero ambiguity execution
|
|
26
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
27
|
-
|
|
28
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
33
|
-
|
|
34
|
-
```yaml
|
|
35
|
-
task: dbAnalyzeHotpaths()
|
|
36
|
-
responsável: Dara (Sage)
|
|
37
|
-
responsavel_type: Agente
|
|
38
|
-
atomic_layer: Strategy
|
|
39
|
-
|
|
40
|
-
**Entrada:**
|
|
41
|
-
- campo: query
|
|
42
|
-
tipo: string
|
|
43
|
-
origem: User Input
|
|
44
|
-
obrigatório: true
|
|
45
|
-
validação: Valid SQL query
|
|
46
|
-
|
|
47
|
-
- campo: params
|
|
48
|
-
tipo: object
|
|
49
|
-
origem: User Input
|
|
50
|
-
obrigatório: false
|
|
51
|
-
validação: Query parameters
|
|
52
|
-
|
|
53
|
-
- campo: connection
|
|
54
|
-
tipo: object
|
|
55
|
-
origem: config
|
|
56
|
-
obrigatório: true
|
|
57
|
-
validação: Valid PostgreSQL connection via Supabase
|
|
58
|
-
|
|
59
|
-
**Saída:**
|
|
60
|
-
- campo: query_result
|
|
61
|
-
tipo: array
|
|
62
|
-
destino: Memory
|
|
63
|
-
persistido: false
|
|
64
|
-
|
|
65
|
-
- campo: records_affected
|
|
66
|
-
tipo: number
|
|
67
|
-
destino: Return value
|
|
68
|
-
persistido: false
|
|
69
|
-
|
|
70
|
-
- campo: execution_time
|
|
71
|
-
tipo: number
|
|
72
|
-
destino: Memory
|
|
73
|
-
persistido: false
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Pre-Conditions
|
|
79
|
-
|
|
80
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
81
|
-
|
|
82
|
-
**Checklist:**
|
|
83
|
-
|
|
84
|
-
```yaml
|
|
85
|
-
pre-conditions:
|
|
86
|
-
- [ ] Database connection established; query syntax valid
|
|
87
|
-
tipo: pre-condition
|
|
88
|
-
blocker: true
|
|
89
|
-
validação: |
|
|
90
|
-
Check database connection established; query syntax valid
|
|
91
|
-
error_message: "Pre-condition failed: Database connection established; query syntax valid"
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Post-Conditions
|
|
97
|
-
|
|
98
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
99
|
-
|
|
100
|
-
**Checklist:**
|
|
101
|
-
|
|
102
|
-
```yaml
|
|
103
|
-
post-conditions:
|
|
104
|
-
- [ ] Query executed; results returned; transaction committed
|
|
105
|
-
tipo: post-condition
|
|
106
|
-
blocker: true
|
|
107
|
-
validação: |
|
|
108
|
-
Verify query executed; results returned; transaction committed
|
|
109
|
-
error_message: "Post-condition failed: Query executed; results returned; transaction committed"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Acceptance Criteria
|
|
115
|
-
|
|
116
|
-
**Purpose:** Definitive pass/fail criteria for task completion
|
|
117
|
-
|
|
118
|
-
**Checklist:**
|
|
119
|
-
|
|
120
|
-
```yaml
|
|
121
|
-
acceptance-criteria:
|
|
122
|
-
- [ ] Data persisted correctly; constraints respected; no orphaned data
|
|
123
|
-
tipo: acceptance-criterion
|
|
124
|
-
blocker: true
|
|
125
|
-
validação: |
|
|
126
|
-
Assert data persisted correctly; constraints respected; no orphaned data
|
|
127
|
-
error_message: "Acceptance criterion not met: Data persisted correctly; constraints respected; no orphaned data"
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## Tools
|
|
133
|
-
|
|
134
|
-
**External/shared resources used by this task:**
|
|
135
|
-
|
|
136
|
-
- **Tool:** neo4j-driver
|
|
137
|
-
- **Purpose:** Neo4j database connection and query execution
|
|
138
|
-
- **Source:** npm: neo4j-driver
|
|
139
|
-
|
|
140
|
-
- **Tool:** query-validator
|
|
141
|
-
- **Purpose:** Cypher query syntax validation
|
|
142
|
-
- **Source:** .aios-core/utils/db-query-validator.js
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Scripts
|
|
147
|
-
|
|
148
|
-
**Agent-specific code for this task:**
|
|
149
|
-
|
|
150
|
-
- **Script:** db-query.js
|
|
151
|
-
- **Purpose:** Execute Neo4j queries with error handling
|
|
152
|
-
- **Language:** JavaScript
|
|
153
|
-
- **Location:** .aios-core/scripts/db-query.js
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Error Handling
|
|
158
|
-
|
|
159
|
-
**Strategy:** fallback
|
|
160
|
-
|
|
161
|
-
**Common Errors:**
|
|
162
|
-
|
|
163
|
-
1. **Error:** Connection Failed
|
|
164
|
-
- **Cause:** Unable to connect to Neo4j database
|
|
165
|
-
- **Resolution:** Check connection string, credentials, network
|
|
166
|
-
- **Recovery:** Retry with exponential backoff (max 3 attempts)
|
|
167
|
-
|
|
168
|
-
2. **Error:** Query Syntax Error
|
|
169
|
-
- **Cause:** Invalid Cypher query syntax
|
|
170
|
-
- **Resolution:** Validate query syntax before execution
|
|
171
|
-
- **Recovery:** Return detailed syntax error, suggest fix
|
|
172
|
-
|
|
173
|
-
3. **Error:** Transaction Rollback
|
|
174
|
-
- **Cause:** Query violates constraints or timeout
|
|
175
|
-
- **Resolution:** Review query logic and constraints
|
|
176
|
-
- **Recovery:** Automatic rollback, preserve data integrity
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Performance
|
|
181
|
-
|
|
182
|
-
**Expected Metrics:**
|
|
183
|
-
|
|
184
|
-
```yaml
|
|
185
|
-
duration_expected: 5-20 min (estimated)
|
|
186
|
-
cost_estimated: $0.003-0.015
|
|
187
|
-
token_usage: ~2,000-8,000 tokens
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
**Optimization Notes:**
|
|
191
|
-
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
## Metadata
|
|
196
|
-
|
|
197
|
-
```yaml
|
|
198
|
-
story: N/A
|
|
199
|
-
version: 1.0.0
|
|
200
|
-
dependencies:
|
|
201
|
-
- N/A
|
|
202
|
-
tags:
|
|
203
|
-
- database
|
|
204
|
-
- infrastructure
|
|
205
|
-
updated_at: 2025-11-17
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
## Inputs
|
|
212
|
-
|
|
213
|
-
- `queries_file` (optional): Path to file with labeled queries to analyze
|
|
214
|
-
- If not provided, analyze common patterns from pg_stat_statements
|
|
215
|
-
|
|
216
|
-
---
|
|
217
|
-
|
|
218
|
-
## Process
|
|
219
|
-
|
|
220
|
-
### 1. Enable Required Extensions
|
|
221
|
-
|
|
222
|
-
Ensure performance monitoring is available:
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
echo "Enabling performance extensions..."
|
|
226
|
-
|
|
227
|
-
psql "$SUPABASE_DB_URL" << 'EOF'
|
|
228
|
-
-- Enable pg_stat_statements (should already be enabled in Supabase)
|
|
229
|
-
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
230
|
-
|
|
231
|
-
-- Optionally enable index_advisor (Supabase extension)
|
|
232
|
-
CREATE EXTENSION IF NOT EXISTS index_advisor;
|
|
233
|
-
|
|
234
|
-
SELECT 'Extensions ready' AS status;
|
|
235
|
-
EOF
|
|
236
|
-
|
|
237
|
-
echo "✓ Extensions enabled"
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
### 2. Identify Hot Queries
|
|
241
|
-
|
|
242
|
-
If no queries_file provided, find slowest queries from pg_stat_statements:
|
|
243
|
-
|
|
244
|
-
```bash
|
|
245
|
-
echo "Finding slow queries from pg_stat_statements..."
|
|
246
|
-
|
|
247
|
-
psql "$SUPABASE_DB_URL" << 'EOF'
|
|
248
|
-
SELECT
|
|
249
|
-
query,
|
|
250
|
-
calls,
|
|
251
|
-
ROUND(total_exec_time::numeric, 2) AS total_time_ms,
|
|
252
|
-
ROUND(mean_exec_time::numeric, 2) AS mean_time_ms,
|
|
253
|
-
ROUND(max_exec_time::numeric, 2) AS max_time_ms,
|
|
254
|
-
ROUND((100 * total_exec_time / SUM(total_exec_time) OVER ())::numeric, 2) AS pct_total_time
|
|
255
|
-
FROM pg_stat_statements
|
|
256
|
-
WHERE query NOT LIKE '%pg_stat_statements%'
|
|
257
|
-
AND query NOT LIKE '%pg_catalog%'
|
|
258
|
-
ORDER BY mean_exec_time DESC
|
|
259
|
-
LIMIT 20;
|
|
260
|
-
EOF
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
Ask user:
|
|
264
|
-
```
|
|
265
|
-
Top 20 slow queries found.
|
|
266
|
-
Select query numbers to analyze (comma-separated, e.g., 1,3,5):
|
|
267
|
-
Or type 'all' to analyze all:
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
### 3. Run EXPLAIN ANALYZE with BUFFERS
|
|
271
|
-
|
|
272
|
-
For each selected query, run comprehensive analysis:
|
|
273
|
-
|
|
274
|
-
```bash
|
|
275
|
-
echo "Analyzing query performance..."
|
|
276
|
-
|
|
277
|
-
# CRITICAL: Always use ANALYZE, BUFFERS for complete picture
|
|
278
|
-
psql "$SUPABASE_DB_URL" << 'EOF'
|
|
279
|
-
-- Query being analyzed
|
|
280
|
-
\echo '=========================================='
|
|
281
|
-
\echo 'QUERY: {query_label}'
|
|
282
|
-
\echo '=========================================='
|
|
283
|
-
|
|
284
|
-
-- Option 1: EXPLAIN ANALYZE with BUFFERS (recommended)
|
|
285
|
-
EXPLAIN (
|
|
286
|
-
ANALYZE true,
|
|
287
|
-
BUFFERS true,
|
|
288
|
-
VERBOSE true,
|
|
289
|
-
COSTS true,
|
|
290
|
-
TIMING true
|
|
291
|
-
)
|
|
292
|
-
{actual_query};
|
|
293
|
-
|
|
294
|
-
\echo ''
|
|
295
|
-
\echo 'BUFFERS LEGEND:'
|
|
296
|
-
\echo ' - shared hit = blocks found in buffer cache (good)'
|
|
297
|
-
\echo ' - shared read = blocks read from disk (bad if high)'
|
|
298
|
-
\echo ' - temp read/written = temporary files (bad if present)'
|
|
299
|
-
\echo ''
|
|
300
|
-
|
|
301
|
-
EOF
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
### 4. Generate Index Recommendations
|
|
305
|
-
|
|
306
|
-
Use index_advisor extension (Supabase-specific):
|
|
307
|
-
|
|
308
|
-
```bash
|
|
309
|
-
echo "Generating index recommendations..."
|
|
310
|
-
|
|
311
|
-
psql "$SUPABASE_DB_URL" << 'EOF'
|
|
312
|
-
-- Use index_advisor to get suggestions
|
|
313
|
-
SELECT *
|
|
314
|
-
FROM index_advisor('{actual_query}');
|
|
315
|
-
|
|
316
|
-
-- Alternative: Supabase Studio has Index Advisor UI
|
|
317
|
-
-- Navigate to: Query Performance Report → Select query → "indexes" tab
|
|
318
|
-
EOF
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
### 5. Analyze Results
|
|
322
|
-
|
|
323
|
-
Identify common performance issues:
|
|
324
|
-
|
|
325
|
-
```bash
|
|
326
|
-
echo "Performance Issue Checklist:"
|
|
327
|
-
echo ""
|
|
328
|
-
echo "🔍 Sequential Scans:"
|
|
329
|
-
echo " - Look for: 'Seq Scan on table_name'"
|
|
330
|
-
echo " - Problem if: Large tables (>1000 rows) + filter removes many rows"
|
|
331
|
-
echo " - Fix: Add index on filter columns"
|
|
332
|
-
echo ""
|
|
333
|
-
echo "🔍 Row Count Mismatches:"
|
|
334
|
-
echo " - Compare: rows=XXXX (estimated) vs actual rows=YYYY"
|
|
335
|
-
echo " - Problem if: Estimate differs by >10x from actual"
|
|
336
|
-
echo " - Fix: ANALYZE table_name; (update statistics)"
|
|
337
|
-
echo ""
|
|
338
|
-
echo "🔍 Buffer Cache Misses:"
|
|
339
|
-
echo " - Look for: 'shared read' in BUFFERS output"
|
|
340
|
-
echo " - Problem if: High compared to 'shared hit'"
|
|
341
|
-
echo " - Fix: Increase shared_buffers, optimize query, add indexes"
|
|
342
|
-
echo ""
|
|
343
|
-
echo "🔍 Temporary Files:"
|
|
344
|
-
echo " - Look for: 'temp read' or 'temp written' in BUFFERS"
|
|
345
|
-
echo " - Problem: Query using disk for sorting/hashing (work_mem too small)"
|
|
346
|
-
echo " - Fix: Increase work_mem, optimize query, add indexes"
|
|
347
|
-
echo ""
|
|
348
|
-
echo "🔍 Nested Loops:"
|
|
349
|
-
echo " - Look for: 'Nested Loop' with high row counts"
|
|
350
|
-
echo " - Problem if: Loops=10000+ iterations"
|
|
351
|
-
echo " - Fix: Add indexes on join columns, consider Hash Join"
|
|
352
|
-
echo ""
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
### 6. Create Analysis Report
|
|
356
|
-
|
|
357
|
-
Generate markdown report with findings:
|
|
358
|
-
|
|
359
|
-
```bash
|
|
360
|
-
REPORT_FILE="supabase/docs/performance-analysis-$(date +%Y%m%d%H%M%S).md"
|
|
361
|
-
mkdir -p supabase/docs
|
|
362
|
-
|
|
363
|
-
cat > "$REPORT_FILE" << 'MDEOF'
|
|
364
|
-
# Query Performance Analysis
|
|
365
|
-
|
|
366
|
-
**Date**: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
|
|
367
|
-
**Database**: [redacted]
|
|
368
|
-
**Tool**: DB Sage db-analyze-hotpaths
|
|
369
|
-
|
|
370
|
-
---
|
|
371
|
-
|
|
372
|
-
## Executive Summary
|
|
373
|
-
|
|
374
|
-
- Queries analyzed: {count}
|
|
375
|
-
- Avg execution time: {avg_time}ms
|
|
376
|
-
- Indexes recommended: {index_count}
|
|
377
|
-
|
|
378
|
-
---
|
|
379
|
-
|
|
380
|
-
## Detailed Findings
|
|
381
|
-
|
|
382
|
-
### Query 1: {query_label}
|
|
383
|
-
|
|
384
|
-
**Current Performance:**
|
|
385
|
-
- Mean execution time: {mean_time}ms
|
|
386
|
-
- Calls: {calls}
|
|
387
|
-
- % of total time: {pct_time}%
|
|
388
|
-
|
|
389
|
-
**EXPLAIN ANALYZE Output:**
|
|
390
|
-
```
|
|
391
|
-
{explain_output}
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
**Issues Identified:**
|
|
395
|
-
1. {issue_1}
|
|
396
|
-
2. {issue_2}
|
|
397
|
-
|
|
398
|
-
**Recommended Indexes:**
|
|
399
|
-
```sql
|
|
400
|
-
{recommended_indexes}
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
**Expected Improvement:** {estimated_improvement}
|
|
404
|
-
|
|
405
|
-
---
|
|
406
|
-
|
|
407
|
-
[Repeat for each query...]
|
|
408
|
-
|
|
409
|
-
---
|
|
410
|
-
|
|
411
|
-
## Action Items
|
|
412
|
-
|
|
413
|
-
- [ ] Create migration for recommended indexes
|
|
414
|
-
- [ ] Update statistics: ANALYZE {tables}
|
|
415
|
-
- [ ] Re-run analysis after changes
|
|
416
|
-
- [ ] Monitor with pg_stat_statements
|
|
417
|
-
|
|
418
|
-
MDEOF
|
|
419
|
-
|
|
420
|
-
echo "✓ Report: $REPORT_FILE"
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
---
|
|
424
|
-
|
|
425
|
-
## Output
|
|
426
|
-
|
|
427
|
-
Display summary and next steps:
|
|
428
|
-
|
|
429
|
-
```
|
|
430
|
-
✅ HOT PATH ANALYSIS COMPLETE
|
|
431
|
-
|
|
432
|
-
Queries analyzed: {count}
|
|
433
|
-
Report: supabase/docs/performance-analysis-{timestamp}.md
|
|
434
|
-
|
|
435
|
-
Key Findings:
|
|
436
|
-
- {finding_1}
|
|
437
|
-
- {finding_2}
|
|
438
|
-
- {finding_3}
|
|
439
|
-
|
|
440
|
-
Recommended Actions:
|
|
441
|
-
1. Review report: cat {report_file}
|
|
442
|
-
2. Create index migration for recommended indexes
|
|
443
|
-
3. Update statistics: ANALYZE {affected_tables}
|
|
444
|
-
4. Re-run analysis: *analyze-hotpaths
|
|
445
|
-
|
|
446
|
-
Index Recommendations:
|
|
447
|
-
{list of CREATE INDEX statements}
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
---
|
|
451
|
-
|
|
452
|
-
## Common Query Patterns to Check
|
|
453
|
-
|
|
454
|
-
### Pattern 1: User-Specific Data
|
|
455
|
-
```sql
|
|
456
|
-
-- Hot path: Get user's posts
|
|
457
|
-
SELECT * FROM posts WHERE user_id = 'xxx';
|
|
458
|
-
|
|
459
|
-
-- Check: Index on user_id exists?
|
|
460
|
-
-- Verify: USING (auth.uid() = user_id) is wrapped in SELECT for RLS performance
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
### Pattern 2: Joins
|
|
464
|
-
```sql
|
|
465
|
-
-- Hot path: Posts with author info
|
|
466
|
-
SELECT p.*, u.name
|
|
467
|
-
FROM posts p
|
|
468
|
-
JOIN users u ON p.user_id = u.id;
|
|
469
|
-
|
|
470
|
-
-- Check: Index on posts(user_id)? Index on users(id) should exist (PK)
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
### Pattern 3: Filters + Sorts
|
|
474
|
-
```sql
|
|
475
|
-
-- Hot path: Recent published posts
|
|
476
|
-
SELECT * FROM posts
|
|
477
|
-
WHERE status = 'published'
|
|
478
|
-
ORDER BY created_at DESC
|
|
479
|
-
LIMIT 10;
|
|
480
|
-
|
|
481
|
-
-- Check: Index on (status, created_at DESC)?
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
### Pattern 4: Aggregations
|
|
485
|
-
```sql
|
|
486
|
-
-- Hot path: User post count
|
|
487
|
-
SELECT user_id, COUNT(*)
|
|
488
|
-
FROM posts
|
|
489
|
-
GROUP BY user_id;
|
|
490
|
-
|
|
491
|
-
-- Check: Index on user_id? Or denormalize count?
|
|
492
|
-
```
|
|
493
|
-
|
|
494
|
-
---
|
|
495
|
-
|
|
496
|
-
## BUFFERS Output Interpretation
|
|
497
|
-
|
|
498
|
-
**Good (Cached):**
|
|
499
|
-
```
|
|
500
|
-
Buffers: shared hit=100
|
|
501
|
-
```
|
|
502
|
-
= 100 blocks found in cache (no disk I/O)
|
|
503
|
-
|
|
504
|
-
**Bad (Disk Reads):**
|
|
505
|
-
```
|
|
506
|
-
Buffers: shared hit=10 read=990
|
|
507
|
-
```
|
|
508
|
-
= Only 10 blocks cached, 990 read from disk
|
|
509
|
-
|
|
510
|
-
**Very Bad (Temp Files):**
|
|
511
|
-
```
|
|
512
|
-
Buffers: temp read=5000 written=5000
|
|
513
|
-
```
|
|
514
|
-
= Query spilled to disk (work_mem too small)
|
|
515
|
-
|
|
516
|
-
**Target:** Maximize "shared hit", minimize "shared read", zero "temp"
|
|
517
|
-
|
|
518
|
-
---
|
|
519
|
-
|
|
520
|
-
## Supabase-Specific Notes
|
|
521
|
-
|
|
522
|
-
### Using with Supabase Client (PostgREST)
|
|
523
|
-
|
|
524
|
-
Enable explain in SQL editor first (dev only):
|
|
525
|
-
```sql
|
|
526
|
-
-- Run once in Dashboard SQL Editor
|
|
527
|
-
ALTER DATABASE postgres SET app.settings.explain TO 'on';
|
|
528
|
-
```
|
|
529
|
-
|
|
530
|
-
Then use in code:
|
|
531
|
-
```javascript
|
|
532
|
-
const { data, error } = await supabase
|
|
533
|
-
.from('posts')
|
|
534
|
-
.select('*')
|
|
535
|
-
.eq('status', 'published')
|
|
536
|
-
.explain({ analyze: true, buffers: true })
|
|
537
|
-
```
|
|
538
|
-
|
|
539
|
-
### Supabase Studio Integration
|
|
540
|
-
|
|
541
|
-
- Navigate to: **Query Performance Report**
|
|
542
|
-
- Select slow query
|
|
543
|
-
- Click **"indexes" tab** for index_advisor recommendations
|
|
544
|
-
- One-click to create migration
|
|
545
|
-
|
|
546
|
-
---
|
|
547
|
-
|
|
548
|
-
## Prerequisites
|
|
549
|
-
|
|
550
|
-
- pg_stat_statements extension enabled (default in Supabase)
|
|
551
|
-
- Sufficient database activity to populate statistics
|
|
552
|
-
- For index_advisor: index_advisor extension (Supabase Pro+)
|
|
553
|
-
|
|
554
|
-
---
|
|
555
|
-
|
|
556
|
-
## Best Practices
|
|
557
|
-
|
|
558
|
-
1. **Always use BUFFERS**: `EXPLAIN (ANALYZE, BUFFERS)`
|
|
559
|
-
2. **Look for patterns**: One slow query often indicates a systemic issue
|
|
560
|
-
3. **Update statistics**: Run `ANALYZE` after significant data changes
|
|
561
|
-
4. **Test indexes**: Create indexes CONCURRENTLY in production
|
|
562
|
-
5. **Re-measure**: After optimizations, re-run this analysis
|
|
563
|
-
6. **RLS Performance**: Wrap auth functions in SELECT for 19x speedup
|
|
564
|
-
|
|
565
|
-
---
|
|
566
|
-
|
|
567
|
-
## References
|
|
568
|
-
|
|
569
|
-
- [PostgreSQL EXPLAIN Documentation](https://www.postgresql.org/docs/current/sql-explain.html)
|
|
570
|
-
- [Supabase Query Optimization](https://supabase.com/docs/guides/database/query-optimization)
|
|
571
|
-
- [Supabase RLS Performance](https://supabase.com/docs/guides/troubleshooting/rls-performance-and-best-practices-Z5Jjwv)
|
|
572
|
-
- [index_advisor Extension](https://supabase.com/docs/guides/database/extensions/index_advisor)
|
|
1
|
+
# Task: Analyze Hot Query Paths
|
|
2
|
+
|
|
3
|
+
**Purpose**: Run EXPLAIN ANALYZE on common/critical queries to identify performance issues
|
|
4
|
+
|
|
5
|
+
**Elicit**: true
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Execution Modes
|
|
10
|
+
|
|
11
|
+
**Choose your execution mode:**
|
|
12
|
+
|
|
13
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
14
|
+
- Autonomous decision making with logging
|
|
15
|
+
- Minimal user interaction
|
|
16
|
+
- **Best for:** Simple, deterministic tasks
|
|
17
|
+
|
|
18
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
19
|
+
- Explicit decision checkpoints
|
|
20
|
+
- Educational explanations
|
|
21
|
+
- **Best for:** Learning, complex decisions
|
|
22
|
+
|
|
23
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
24
|
+
- Task analysis phase (identify all ambiguities)
|
|
25
|
+
- Zero ambiguity execution
|
|
26
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
27
|
+
|
|
28
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
task: dbAnalyzeHotpaths()
|
|
36
|
+
responsável: Dara (Sage)
|
|
37
|
+
responsavel_type: Agente
|
|
38
|
+
atomic_layer: Strategy
|
|
39
|
+
|
|
40
|
+
**Entrada:**
|
|
41
|
+
- campo: query
|
|
42
|
+
tipo: string
|
|
43
|
+
origem: User Input
|
|
44
|
+
obrigatório: true
|
|
45
|
+
validação: Valid SQL query
|
|
46
|
+
|
|
47
|
+
- campo: params
|
|
48
|
+
tipo: object
|
|
49
|
+
origem: User Input
|
|
50
|
+
obrigatório: false
|
|
51
|
+
validação: Query parameters
|
|
52
|
+
|
|
53
|
+
- campo: connection
|
|
54
|
+
tipo: object
|
|
55
|
+
origem: config
|
|
56
|
+
obrigatório: true
|
|
57
|
+
validação: Valid PostgreSQL connection via Supabase
|
|
58
|
+
|
|
59
|
+
**Saída:**
|
|
60
|
+
- campo: query_result
|
|
61
|
+
tipo: array
|
|
62
|
+
destino: Memory
|
|
63
|
+
persistido: false
|
|
64
|
+
|
|
65
|
+
- campo: records_affected
|
|
66
|
+
tipo: number
|
|
67
|
+
destino: Return value
|
|
68
|
+
persistido: false
|
|
69
|
+
|
|
70
|
+
- campo: execution_time
|
|
71
|
+
tipo: number
|
|
72
|
+
destino: Memory
|
|
73
|
+
persistido: false
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Pre-Conditions
|
|
79
|
+
|
|
80
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
81
|
+
|
|
82
|
+
**Checklist:**
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
pre-conditions:
|
|
86
|
+
- [ ] Database connection established; query syntax valid
|
|
87
|
+
tipo: pre-condition
|
|
88
|
+
blocker: true
|
|
89
|
+
validação: |
|
|
90
|
+
Check database connection established; query syntax valid
|
|
91
|
+
error_message: "Pre-condition failed: Database connection established; query syntax valid"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Post-Conditions
|
|
97
|
+
|
|
98
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
99
|
+
|
|
100
|
+
**Checklist:**
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
post-conditions:
|
|
104
|
+
- [ ] Query executed; results returned; transaction committed
|
|
105
|
+
tipo: post-condition
|
|
106
|
+
blocker: true
|
|
107
|
+
validação: |
|
|
108
|
+
Verify query executed; results returned; transaction committed
|
|
109
|
+
error_message: "Post-condition failed: Query executed; results returned; transaction committed"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Acceptance Criteria
|
|
115
|
+
|
|
116
|
+
**Purpose:** Definitive pass/fail criteria for task completion
|
|
117
|
+
|
|
118
|
+
**Checklist:**
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
acceptance-criteria:
|
|
122
|
+
- [ ] Data persisted correctly; constraints respected; no orphaned data
|
|
123
|
+
tipo: acceptance-criterion
|
|
124
|
+
blocker: true
|
|
125
|
+
validação: |
|
|
126
|
+
Assert data persisted correctly; constraints respected; no orphaned data
|
|
127
|
+
error_message: "Acceptance criterion not met: Data persisted correctly; constraints respected; no orphaned data"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Tools
|
|
133
|
+
|
|
134
|
+
**External/shared resources used by this task:**
|
|
135
|
+
|
|
136
|
+
- **Tool:** neo4j-driver
|
|
137
|
+
- **Purpose:** Neo4j database connection and query execution
|
|
138
|
+
- **Source:** npm: neo4j-driver
|
|
139
|
+
|
|
140
|
+
- **Tool:** query-validator
|
|
141
|
+
- **Purpose:** Cypher query syntax validation
|
|
142
|
+
- **Source:** .aios-core/utils/db-query-validator.js
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Scripts
|
|
147
|
+
|
|
148
|
+
**Agent-specific code for this task:**
|
|
149
|
+
|
|
150
|
+
- **Script:** db-query.js
|
|
151
|
+
- **Purpose:** Execute Neo4j queries with error handling
|
|
152
|
+
- **Language:** JavaScript
|
|
153
|
+
- **Location:** .aios-core/scripts/db-query.js
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Error Handling
|
|
158
|
+
|
|
159
|
+
**Strategy:** fallback
|
|
160
|
+
|
|
161
|
+
**Common Errors:**
|
|
162
|
+
|
|
163
|
+
1. **Error:** Connection Failed
|
|
164
|
+
- **Cause:** Unable to connect to Neo4j database
|
|
165
|
+
- **Resolution:** Check connection string, credentials, network
|
|
166
|
+
- **Recovery:** Retry with exponential backoff (max 3 attempts)
|
|
167
|
+
|
|
168
|
+
2. **Error:** Query Syntax Error
|
|
169
|
+
- **Cause:** Invalid Cypher query syntax
|
|
170
|
+
- **Resolution:** Validate query syntax before execution
|
|
171
|
+
- **Recovery:** Return detailed syntax error, suggest fix
|
|
172
|
+
|
|
173
|
+
3. **Error:** Transaction Rollback
|
|
174
|
+
- **Cause:** Query violates constraints or timeout
|
|
175
|
+
- **Resolution:** Review query logic and constraints
|
|
176
|
+
- **Recovery:** Automatic rollback, preserve data integrity
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Performance
|
|
181
|
+
|
|
182
|
+
**Expected Metrics:**
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
duration_expected: 5-20 min (estimated)
|
|
186
|
+
cost_estimated: $0.003-0.015
|
|
187
|
+
token_usage: ~2,000-8,000 tokens
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Optimization Notes:**
|
|
191
|
+
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Metadata
|
|
196
|
+
|
|
197
|
+
```yaml
|
|
198
|
+
story: N/A
|
|
199
|
+
version: 1.0.0
|
|
200
|
+
dependencies:
|
|
201
|
+
- N/A
|
|
202
|
+
tags:
|
|
203
|
+
- database
|
|
204
|
+
- infrastructure
|
|
205
|
+
updated_at: 2025-11-17
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
## Inputs
|
|
212
|
+
|
|
213
|
+
- `queries_file` (optional): Path to file with labeled queries to analyze
|
|
214
|
+
- If not provided, analyze common patterns from pg_stat_statements
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Process
|
|
219
|
+
|
|
220
|
+
### 1. Enable Required Extensions
|
|
221
|
+
|
|
222
|
+
Ensure performance monitoring is available:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
echo "Enabling performance extensions..."
|
|
226
|
+
|
|
227
|
+
psql "$SUPABASE_DB_URL" << 'EOF'
|
|
228
|
+
-- Enable pg_stat_statements (should already be enabled in Supabase)
|
|
229
|
+
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
230
|
+
|
|
231
|
+
-- Optionally enable index_advisor (Supabase extension)
|
|
232
|
+
CREATE EXTENSION IF NOT EXISTS index_advisor;
|
|
233
|
+
|
|
234
|
+
SELECT 'Extensions ready' AS status;
|
|
235
|
+
EOF
|
|
236
|
+
|
|
237
|
+
echo "✓ Extensions enabled"
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 2. Identify Hot Queries
|
|
241
|
+
|
|
242
|
+
If no queries_file provided, find slowest queries from pg_stat_statements:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
echo "Finding slow queries from pg_stat_statements..."
|
|
246
|
+
|
|
247
|
+
psql "$SUPABASE_DB_URL" << 'EOF'
|
|
248
|
+
SELECT
|
|
249
|
+
query,
|
|
250
|
+
calls,
|
|
251
|
+
ROUND(total_exec_time::numeric, 2) AS total_time_ms,
|
|
252
|
+
ROUND(mean_exec_time::numeric, 2) AS mean_time_ms,
|
|
253
|
+
ROUND(max_exec_time::numeric, 2) AS max_time_ms,
|
|
254
|
+
ROUND((100 * total_exec_time / SUM(total_exec_time) OVER ())::numeric, 2) AS pct_total_time
|
|
255
|
+
FROM pg_stat_statements
|
|
256
|
+
WHERE query NOT LIKE '%pg_stat_statements%'
|
|
257
|
+
AND query NOT LIKE '%pg_catalog%'
|
|
258
|
+
ORDER BY mean_exec_time DESC
|
|
259
|
+
LIMIT 20;
|
|
260
|
+
EOF
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Ask user:
|
|
264
|
+
```
|
|
265
|
+
Top 20 slow queries found.
|
|
266
|
+
Select query numbers to analyze (comma-separated, e.g., 1,3,5):
|
|
267
|
+
Or type 'all' to analyze all:
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 3. Run EXPLAIN ANALYZE with BUFFERS
|
|
271
|
+
|
|
272
|
+
For each selected query, run comprehensive analysis:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
echo "Analyzing query performance..."
|
|
276
|
+
|
|
277
|
+
# CRITICAL: Always use ANALYZE, BUFFERS for complete picture
|
|
278
|
+
psql "$SUPABASE_DB_URL" << 'EOF'
|
|
279
|
+
-- Query being analyzed
|
|
280
|
+
\echo '=========================================='
|
|
281
|
+
\echo 'QUERY: {query_label}'
|
|
282
|
+
\echo '=========================================='
|
|
283
|
+
|
|
284
|
+
-- Option 1: EXPLAIN ANALYZE with BUFFERS (recommended)
|
|
285
|
+
EXPLAIN (
|
|
286
|
+
ANALYZE true,
|
|
287
|
+
BUFFERS true,
|
|
288
|
+
VERBOSE true,
|
|
289
|
+
COSTS true,
|
|
290
|
+
TIMING true
|
|
291
|
+
)
|
|
292
|
+
{actual_query};
|
|
293
|
+
|
|
294
|
+
\echo ''
|
|
295
|
+
\echo 'BUFFERS LEGEND:'
|
|
296
|
+
\echo ' - shared hit = blocks found in buffer cache (good)'
|
|
297
|
+
\echo ' - shared read = blocks read from disk (bad if high)'
|
|
298
|
+
\echo ' - temp read/written = temporary files (bad if present)'
|
|
299
|
+
\echo ''
|
|
300
|
+
|
|
301
|
+
EOF
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### 4. Generate Index Recommendations
|
|
305
|
+
|
|
306
|
+
Use index_advisor extension (Supabase-specific):
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
echo "Generating index recommendations..."
|
|
310
|
+
|
|
311
|
+
psql "$SUPABASE_DB_URL" << 'EOF'
|
|
312
|
+
-- Use index_advisor to get suggestions
|
|
313
|
+
SELECT *
|
|
314
|
+
FROM index_advisor('{actual_query}');
|
|
315
|
+
|
|
316
|
+
-- Alternative: Supabase Studio has Index Advisor UI
|
|
317
|
+
-- Navigate to: Query Performance Report → Select query → "indexes" tab
|
|
318
|
+
EOF
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### 5. Analyze Results
|
|
322
|
+
|
|
323
|
+
Identify common performance issues:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
echo "Performance Issue Checklist:"
|
|
327
|
+
echo ""
|
|
328
|
+
echo "🔍 Sequential Scans:"
|
|
329
|
+
echo " - Look for: 'Seq Scan on table_name'"
|
|
330
|
+
echo " - Problem if: Large tables (>1000 rows) + filter removes many rows"
|
|
331
|
+
echo " - Fix: Add index on filter columns"
|
|
332
|
+
echo ""
|
|
333
|
+
echo "🔍 Row Count Mismatches:"
|
|
334
|
+
echo " - Compare: rows=XXXX (estimated) vs actual rows=YYYY"
|
|
335
|
+
echo " - Problem if: Estimate differs by >10x from actual"
|
|
336
|
+
echo " - Fix: ANALYZE table_name; (update statistics)"
|
|
337
|
+
echo ""
|
|
338
|
+
echo "🔍 Buffer Cache Misses:"
|
|
339
|
+
echo " - Look for: 'shared read' in BUFFERS output"
|
|
340
|
+
echo " - Problem if: High compared to 'shared hit'"
|
|
341
|
+
echo " - Fix: Increase shared_buffers, optimize query, add indexes"
|
|
342
|
+
echo ""
|
|
343
|
+
echo "🔍 Temporary Files:"
|
|
344
|
+
echo " - Look for: 'temp read' or 'temp written' in BUFFERS"
|
|
345
|
+
echo " - Problem: Query using disk for sorting/hashing (work_mem too small)"
|
|
346
|
+
echo " - Fix: Increase work_mem, optimize query, add indexes"
|
|
347
|
+
echo ""
|
|
348
|
+
echo "🔍 Nested Loops:"
|
|
349
|
+
echo " - Look for: 'Nested Loop' with high row counts"
|
|
350
|
+
echo " - Problem if: Loops=10000+ iterations"
|
|
351
|
+
echo " - Fix: Add indexes on join columns, consider Hash Join"
|
|
352
|
+
echo ""
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### 6. Create Analysis Report
|
|
356
|
+
|
|
357
|
+
Generate markdown report with findings:
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
REPORT_FILE="supabase/docs/performance-analysis-$(date +%Y%m%d%H%M%S).md"
|
|
361
|
+
mkdir -p supabase/docs
|
|
362
|
+
|
|
363
|
+
cat > "$REPORT_FILE" << 'MDEOF'
|
|
364
|
+
# Query Performance Analysis
|
|
365
|
+
|
|
366
|
+
**Date**: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
|
|
367
|
+
**Database**: [redacted]
|
|
368
|
+
**Tool**: DB Sage db-analyze-hotpaths
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## Executive Summary
|
|
373
|
+
|
|
374
|
+
- Queries analyzed: {count}
|
|
375
|
+
- Avg execution time: {avg_time}ms
|
|
376
|
+
- Indexes recommended: {index_count}
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Detailed Findings
|
|
381
|
+
|
|
382
|
+
### Query 1: {query_label}
|
|
383
|
+
|
|
384
|
+
**Current Performance:**
|
|
385
|
+
- Mean execution time: {mean_time}ms
|
|
386
|
+
- Calls: {calls}
|
|
387
|
+
- % of total time: {pct_time}%
|
|
388
|
+
|
|
389
|
+
**EXPLAIN ANALYZE Output:**
|
|
390
|
+
```
|
|
391
|
+
{explain_output}
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
**Issues Identified:**
|
|
395
|
+
1. {issue_1}
|
|
396
|
+
2. {issue_2}
|
|
397
|
+
|
|
398
|
+
**Recommended Indexes:**
|
|
399
|
+
```sql
|
|
400
|
+
{recommended_indexes}
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Expected Improvement:** {estimated_improvement}
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
[Repeat for each query...]
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## Action Items
|
|
412
|
+
|
|
413
|
+
- [ ] Create migration for recommended indexes
|
|
414
|
+
- [ ] Update statistics: ANALYZE {tables}
|
|
415
|
+
- [ ] Re-run analysis after changes
|
|
416
|
+
- [ ] Monitor with pg_stat_statements
|
|
417
|
+
|
|
418
|
+
MDEOF
|
|
419
|
+
|
|
420
|
+
echo "✓ Report: $REPORT_FILE"
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## Output
|
|
426
|
+
|
|
427
|
+
Display summary and next steps:
|
|
428
|
+
|
|
429
|
+
```
|
|
430
|
+
✅ HOT PATH ANALYSIS COMPLETE
|
|
431
|
+
|
|
432
|
+
Queries analyzed: {count}
|
|
433
|
+
Report: supabase/docs/performance-analysis-{timestamp}.md
|
|
434
|
+
|
|
435
|
+
Key Findings:
|
|
436
|
+
- {finding_1}
|
|
437
|
+
- {finding_2}
|
|
438
|
+
- {finding_3}
|
|
439
|
+
|
|
440
|
+
Recommended Actions:
|
|
441
|
+
1. Review report: cat {report_file}
|
|
442
|
+
2. Create index migration for recommended indexes
|
|
443
|
+
3. Update statistics: ANALYZE {affected_tables}
|
|
444
|
+
4. Re-run analysis: *analyze-hotpaths
|
|
445
|
+
|
|
446
|
+
Index Recommendations:
|
|
447
|
+
{list of CREATE INDEX statements}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Common Query Patterns to Check
|
|
453
|
+
|
|
454
|
+
### Pattern 1: User-Specific Data
|
|
455
|
+
```sql
|
|
456
|
+
-- Hot path: Get user's posts
|
|
457
|
+
SELECT * FROM posts WHERE user_id = 'xxx';
|
|
458
|
+
|
|
459
|
+
-- Check: Index on user_id exists?
|
|
460
|
+
-- Verify: USING (auth.uid() = user_id) is wrapped in SELECT for RLS performance
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### Pattern 2: Joins
|
|
464
|
+
```sql
|
|
465
|
+
-- Hot path: Posts with author info
|
|
466
|
+
SELECT p.*, u.name
|
|
467
|
+
FROM posts p
|
|
468
|
+
JOIN users u ON p.user_id = u.id;
|
|
469
|
+
|
|
470
|
+
-- Check: Index on posts(user_id)? Index on users(id) should exist (PK)
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Pattern 3: Filters + Sorts
|
|
474
|
+
```sql
|
|
475
|
+
-- Hot path: Recent published posts
|
|
476
|
+
SELECT * FROM posts
|
|
477
|
+
WHERE status = 'published'
|
|
478
|
+
ORDER BY created_at DESC
|
|
479
|
+
LIMIT 10;
|
|
480
|
+
|
|
481
|
+
-- Check: Index on (status, created_at DESC)?
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Pattern 4: Aggregations
|
|
485
|
+
```sql
|
|
486
|
+
-- Hot path: User post count
|
|
487
|
+
SELECT user_id, COUNT(*)
|
|
488
|
+
FROM posts
|
|
489
|
+
GROUP BY user_id;
|
|
490
|
+
|
|
491
|
+
-- Check: Index on user_id? Or denormalize count?
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
## BUFFERS Output Interpretation
|
|
497
|
+
|
|
498
|
+
**Good (Cached):**
|
|
499
|
+
```
|
|
500
|
+
Buffers: shared hit=100
|
|
501
|
+
```
|
|
502
|
+
= 100 blocks found in cache (no disk I/O)
|
|
503
|
+
|
|
504
|
+
**Bad (Disk Reads):**
|
|
505
|
+
```
|
|
506
|
+
Buffers: shared hit=10 read=990
|
|
507
|
+
```
|
|
508
|
+
= Only 10 blocks cached, 990 read from disk
|
|
509
|
+
|
|
510
|
+
**Very Bad (Temp Files):**
|
|
511
|
+
```
|
|
512
|
+
Buffers: temp read=5000 written=5000
|
|
513
|
+
```
|
|
514
|
+
= Query spilled to disk (work_mem too small)
|
|
515
|
+
|
|
516
|
+
**Target:** Maximize "shared hit", minimize "shared read", zero "temp"
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## Supabase-Specific Notes
|
|
521
|
+
|
|
522
|
+
### Using with Supabase Client (PostgREST)
|
|
523
|
+
|
|
524
|
+
Enable explain in SQL editor first (dev only):
|
|
525
|
+
```sql
|
|
526
|
+
-- Run once in Dashboard SQL Editor
|
|
527
|
+
ALTER DATABASE postgres SET app.settings.explain TO 'on';
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
Then use in code:
|
|
531
|
+
```javascript
|
|
532
|
+
const { data, error } = await supabase
|
|
533
|
+
.from('posts')
|
|
534
|
+
.select('*')
|
|
535
|
+
.eq('status', 'published')
|
|
536
|
+
.explain({ analyze: true, buffers: true })
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
### Supabase Studio Integration
|
|
540
|
+
|
|
541
|
+
- Navigate to: **Query Performance Report**
|
|
542
|
+
- Select slow query
|
|
543
|
+
- Click **"indexes" tab** for index_advisor recommendations
|
|
544
|
+
- One-click to create migration
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
548
|
+
## Prerequisites
|
|
549
|
+
|
|
550
|
+
- pg_stat_statements extension enabled (default in Supabase)
|
|
551
|
+
- Sufficient database activity to populate statistics
|
|
552
|
+
- For index_advisor: index_advisor extension (Supabase Pro+)
|
|
553
|
+
|
|
554
|
+
---
|
|
555
|
+
|
|
556
|
+
## Best Practices
|
|
557
|
+
|
|
558
|
+
1. **Always use BUFFERS**: `EXPLAIN (ANALYZE, BUFFERS)`
|
|
559
|
+
2. **Look for patterns**: One slow query often indicates a systemic issue
|
|
560
|
+
3. **Update statistics**: Run `ANALYZE` after significant data changes
|
|
561
|
+
4. **Test indexes**: Create indexes CONCURRENTLY in production
|
|
562
|
+
5. **Re-measure**: After optimizations, re-run this analysis
|
|
563
|
+
6. **RLS Performance**: Wrap auth functions in SELECT for 19x speedup
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
567
|
+
## References
|
|
568
|
+
|
|
569
|
+
- [PostgreSQL EXPLAIN Documentation](https://www.postgresql.org/docs/current/sql-explain.html)
|
|
570
|
+
- [Supabase Query Optimization](https://supabase.com/docs/guides/database/query-optimization)
|
|
571
|
+
- [Supabase RLS Performance](https://supabase.com/docs/guides/troubleshooting/rls-performance-and-best-practices-Z5Jjwv)
|
|
572
|
+
- [index_advisor Extension](https://supabase.com/docs/guides/database/extensions/index_advisor)
|