moai-adk 0.34.0__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- moai_adk/__main__.py +136 -5
- moai_adk/astgrep/__init__.py +37 -0
- moai_adk/astgrep/analyzer.py +522 -0
- moai_adk/astgrep/models.py +124 -0
- moai_adk/astgrep/rules.py +179 -0
- moai_adk/cli/commands/analyze.py +11 -2
- moai_adk/cli/commands/doctor.py +7 -1
- moai_adk/cli/commands/init.py +321 -11
- moai_adk/cli/commands/language.py +7 -1
- moai_adk/cli/commands/rank.py +449 -0
- moai_adk/cli/commands/status.py +7 -1
- moai_adk/cli/commands/switch.py +325 -0
- moai_adk/cli/commands/update.py +296 -23
- moai_adk/cli/prompts/init_prompts.py +362 -66
- moai_adk/cli/prompts/translations/__init__.py +573 -0
- moai_adk/cli/ui/prompts.py +61 -2
- moai_adk/cli/worktree/cli.py +106 -1
- moai_adk/cli/worktree/manager.py +155 -0
- moai_adk/core/config/unified.py +244 -63
- moai_adk/core/credentials.py +264 -0
- moai_adk/core/error_recovery_system.py +22 -4
- moai_adk/core/git/conflict_detector.py +10 -1
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/integration/engine.py +2 -2
- moai_adk/core/integration/integration_tester.py +5 -5
- moai_adk/core/language_config_resolver.py +9 -3
- moai_adk/core/merge/analyzer.py +509 -324
- moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
- moai_adk/core/migration/backup_manager.py +54 -4
- moai_adk/core/migration/file_migrator.py +174 -2
- moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
- moai_adk/core/migration/version_detector.py +123 -19
- moai_adk/core/migration/version_migrator.py +44 -9
- moai_adk/core/model_allocator.py +241 -0
- moai_adk/core/project/backup_utils.py +12 -2
- moai_adk/core/project/initializer.py +44 -87
- moai_adk/core/project/phase_executor.py +95 -33
- moai_adk/core/project/validator.py +16 -1
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/rollback_manager.py +60 -25
- moai_adk/core/template/backup.py +88 -6
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +334 -11
- moai_adk/core/template_engine.py +10 -1
- moai_adk/core/template_variable_synchronizer.py +16 -2
- moai_adk/core/version_sync.py +54 -6
- moai_adk/foundation/__init__.py +1 -20
- moai_adk/foundation/testing.py +1 -1
- moai_adk/loop/__init__.py +54 -0
- moai_adk/loop/controller.py +305 -0
- moai_adk/loop/feedback.py +230 -0
- moai_adk/loop/state.py +209 -0
- moai_adk/loop/storage.py +220 -0
- moai_adk/lsp/__init__.py +70 -0
- moai_adk/lsp/client.py +320 -0
- moai_adk/lsp/models.py +261 -0
- moai_adk/lsp/protocol.py +404 -0
- moai_adk/lsp/server_manager.py +248 -0
- moai_adk/project/configuration.py +8 -1
- moai_adk/py.typed +0 -0
- moai_adk/ralph/__init__.py +37 -0
- moai_adk/ralph/engine.py +307 -0
- moai_adk/rank/__init__.py +21 -0
- moai_adk/rank/auth.py +425 -0
- moai_adk/rank/client.py +557 -0
- moai_adk/rank/config.py +147 -0
- moai_adk/rank/hook.py +1503 -0
- moai_adk/rank/py.typed +0 -0
- moai_adk/statusline/__init__.py +3 -0
- moai_adk/statusline/enhanced_output_style_detector.py +5 -5
- moai_adk/statusline/main.py +20 -1
- moai_adk/statusline/memory_collector.py +268 -0
- moai_adk/statusline/renderer.py +54 -38
- moai_adk/tag_system/__init__.py +48 -0
- moai_adk/tag_system/atomic_ops.py +117 -0
- moai_adk/tag_system/linkage.py +335 -0
- moai_adk/tag_system/parser.py +176 -0
- moai_adk/tag_system/validator.py +200 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
- moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
- moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
- moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
- moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
- moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
- moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
- moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
- moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
- moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
- moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
- moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
- moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
- moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
- moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
- moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
- moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
- moai_adk/templates/.claude/commands/moai/fix.md +264 -0
- moai_adk/templates/.claude/commands/moai/loop.md +363 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
- moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
- moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
- moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
- moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
- moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
- moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
- moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
- moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
- moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
- moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
- moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
- moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
- moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
- moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
- moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
- moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
- moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
- moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
- moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
- moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
- moai_adk/templates/.claude/settings.json +154 -77
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +118 -339
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +32 -22
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +14 -18
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
- moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1136 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +65 -542
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +42 -279
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1323 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1087 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1024 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -457
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +75 -283
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +75 -330
- moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +100 -340
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +113 -326
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +71 -302
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +101 -412
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +96 -327
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +103 -428
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +96 -446
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +225 -423
- moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
- moai_adk/templates/.git-hooks/pre-push +162 -59
- moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
- moai_adk/templates/.gitignore +65 -107
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +2 -20
- moai_adk/templates/.moai/announcements/en.json +18 -0
- moai_adk/templates/.moai/announcements/ja.json +18 -0
- moai_adk/templates/.moai/announcements/ko.json +18 -0
- moai_adk/templates/.moai/announcements/zh.json +18 -0
- moai_adk/templates/.moai/config/config.yaml +8 -2
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/sections/language.yaml +2 -2
- moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
- moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
- moai_adk/templates/.moai/config/sections/project.yaml +2 -2
- moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
- moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
- moai_adk/templates/.moai/config/sections/system.yaml +46 -1
- moai_adk/templates/.moai/config/sections/user.yaml +1 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
- moai_adk/templates/.moai/llm-configs/glm.json +22 -0
- moai_adk/templates/CLAUDE.ja.md +343 -0
- moai_adk/templates/CLAUDE.ko.md +343 -0
- moai_adk/templates/CLAUDE.md +200 -499
- moai_adk/templates/CLAUDE.zh.md +343 -0
- moai_adk/utils/common.py +37 -0
- moai_adk/version.py +1 -1
- moai_adk-1.1.0.dist-info/METADATA +2443 -0
- moai_adk-1.1.0.dist-info/RECORD +701 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
- moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
- moai_adk/core/config/auto_spec_config.py +0 -340
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
- moai_adk/core/spec/confidence_scoring.py +0 -680
- moai_adk/core/spec/ears_template_engine.py +0 -1247
- moai_adk/core/spec/quality_validator.py +0 -687
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
- moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
- moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
- moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
- moai_adk-0.34.0.dist-info/METADATA +0 -2999
- moai_adk-0.34.0.dist-info/RECORD +0 -463
- moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
- /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
# Point-in-Time Recovery and Backups
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Neon provides automatic Point-in-Time Recovery (PITR) with up to 30 days of retention, enabling instant database restoration to any timestamp without manual backup management.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## PITR Fundamentals
|
|
10
|
+
|
|
11
|
+
### How PITR Works
|
|
12
|
+
|
|
13
|
+
Write-Ahead Logging: All database changes recorded to WAL
|
|
14
|
+
Continuous Backup: WAL continuously streamed to Neon storage
|
|
15
|
+
Instant Restore: Branch creation from any point in retention window
|
|
16
|
+
Copy-on-Write: Restore creates new branch without affecting original
|
|
17
|
+
|
|
18
|
+
### Retention Periods
|
|
19
|
+
|
|
20
|
+
Free Tier: 7 days of PITR history
|
|
21
|
+
Pro Tier: 7-30 days configurable
|
|
22
|
+
Enterprise: Custom retention periods
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Restore Operations
|
|
27
|
+
|
|
28
|
+
### Restore to Specific Timestamp
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
async function restoreToPoint(timestamp: Date, branchName?: string) {
|
|
32
|
+
const name = branchName || `restore-${timestamp.toISOString().replace(/[:.]/g, '-')}`
|
|
33
|
+
|
|
34
|
+
const response = await fetch(
|
|
35
|
+
`https://console.neon.tech/api/v2/projects/${process.env.NEON_PROJECT_ID}/branches`,
|
|
36
|
+
{
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: {
|
|
39
|
+
'Authorization': `Bearer ${process.env.NEON_API_KEY}`,
|
|
40
|
+
'Content-Type': 'application/json'
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify({
|
|
43
|
+
branch: {
|
|
44
|
+
name,
|
|
45
|
+
parent_id: 'main',
|
|
46
|
+
parent_timestamp: timestamp.toISOString()
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
throw new Error(`PITR restore failed: ${response.statusText}`)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return response.json()
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Common Restore Scenarios
|
|
61
|
+
|
|
62
|
+
Restore to 1 Hour Ago:
|
|
63
|
+
```typescript
|
|
64
|
+
const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000)
|
|
65
|
+
const restored = await restoreToPoint(oneHourAgo, 'restore-1-hour')
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Restore to Yesterday:
|
|
69
|
+
```typescript
|
|
70
|
+
const yesterday = new Date()
|
|
71
|
+
yesterday.setDate(yesterday.getDate() - 1)
|
|
72
|
+
yesterday.setHours(0, 0, 0, 0)
|
|
73
|
+
const restored = await restoreToPoint(yesterday, 'restore-yesterday')
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Restore to Specific Datetime:
|
|
77
|
+
```typescript
|
|
78
|
+
const specificTime = new Date('2024-01-15T14:30:00Z')
|
|
79
|
+
const restored = await restoreToPoint(specificTime, 'restore-jan15-1430')
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Restore Workflow
|
|
85
|
+
|
|
86
|
+
### Complete Restore Process
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
interface RestoreResult {
|
|
90
|
+
branchId: string
|
|
91
|
+
branchName: string
|
|
92
|
+
connectionString: string
|
|
93
|
+
restoredTo: string
|
|
94
|
+
createdAt: string
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async function performRestore(
|
|
98
|
+
targetTimestamp: Date,
|
|
99
|
+
options: {
|
|
100
|
+
branchName?: string
|
|
101
|
+
sourceBranch?: string
|
|
102
|
+
validateFirst?: boolean
|
|
103
|
+
} = {}
|
|
104
|
+
): Promise<RestoreResult> {
|
|
105
|
+
const {
|
|
106
|
+
branchName = `restore-${Date.now()}`,
|
|
107
|
+
sourceBranch = 'main',
|
|
108
|
+
validateFirst = true
|
|
109
|
+
} = options
|
|
110
|
+
|
|
111
|
+
// Validate timestamp is within retention period
|
|
112
|
+
if (validateFirst) {
|
|
113
|
+
const retentionDays = 30
|
|
114
|
+
const oldestAllowed = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000)
|
|
115
|
+
|
|
116
|
+
if (targetTimestamp < oldestAllowed) {
|
|
117
|
+
throw new Error(`Timestamp ${targetTimestamp.toISOString()} is outside ${retentionDays}-day retention period`)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (targetTimestamp > new Date()) {
|
|
121
|
+
throw new Error('Cannot restore to future timestamp')
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Create restore branch
|
|
126
|
+
const response = await fetch(
|
|
127
|
+
`https://console.neon.tech/api/v2/projects/${process.env.NEON_PROJECT_ID}/branches`,
|
|
128
|
+
{
|
|
129
|
+
method: 'POST',
|
|
130
|
+
headers: {
|
|
131
|
+
'Authorization': `Bearer ${process.env.NEON_API_KEY}`,
|
|
132
|
+
'Content-Type': 'application/json'
|
|
133
|
+
},
|
|
134
|
+
body: JSON.stringify({
|
|
135
|
+
branch: {
|
|
136
|
+
name: branchName,
|
|
137
|
+
parent_id: sourceBranch,
|
|
138
|
+
parent_timestamp: targetTimestamp.toISOString()
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
const error = await response.text()
|
|
146
|
+
throw new Error(`Restore failed: ${error}`)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const data = await response.json()
|
|
150
|
+
|
|
151
|
+
// Get connection string for restored branch
|
|
152
|
+
const endpointsResponse = await fetch(
|
|
153
|
+
`https://console.neon.tech/api/v2/projects/${process.env.NEON_PROJECT_ID}/branches/${data.branch.id}/endpoints`,
|
|
154
|
+
{
|
|
155
|
+
headers: {
|
|
156
|
+
'Authorization': `Bearer ${process.env.NEON_API_KEY}`
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
const endpointsData = await endpointsResponse.json()
|
|
162
|
+
|
|
163
|
+
return {
|
|
164
|
+
branchId: data.branch.id,
|
|
165
|
+
branchName: data.branch.name,
|
|
166
|
+
connectionString: endpointsData.endpoints[0]?.connection_uri,
|
|
167
|
+
restoredTo: targetTimestamp.toISOString(),
|
|
168
|
+
createdAt: new Date().toISOString()
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Data Validation After Restore
|
|
176
|
+
|
|
177
|
+
### Verify Restored Data
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
import { neon } from '@neondatabase/serverless'
|
|
181
|
+
|
|
182
|
+
async function validateRestore(
|
|
183
|
+
originalConnectionString: string,
|
|
184
|
+
restoredConnectionString: string,
|
|
185
|
+
tableName: string
|
|
186
|
+
): Promise<boolean> {
|
|
187
|
+
const originalDb = neon(originalConnectionString)
|
|
188
|
+
const restoredDb = neon(restoredConnectionString)
|
|
189
|
+
|
|
190
|
+
// Compare row counts
|
|
191
|
+
const [originalCount] = await originalDb`SELECT COUNT(*) as count FROM ${tableName}`
|
|
192
|
+
const [restoredCount] = await restoredDb`SELECT COUNT(*) as count FROM ${tableName}`
|
|
193
|
+
|
|
194
|
+
console.log(`Original count: ${originalCount.count}, Restored count: ${restoredCount.count}`)
|
|
195
|
+
|
|
196
|
+
// Compare checksums for critical tables
|
|
197
|
+
const [originalChecksum] = await originalDb`
|
|
198
|
+
SELECT md5(string_agg(id::text, '')) as checksum
|
|
199
|
+
FROM ${tableName}
|
|
200
|
+
ORDER BY id
|
|
201
|
+
`
|
|
202
|
+
const [restoredChecksum] = await restoredDb`
|
|
203
|
+
SELECT md5(string_agg(id::text, '')) as checksum
|
|
204
|
+
FROM ${tableName}
|
|
205
|
+
ORDER BY id
|
|
206
|
+
`
|
|
207
|
+
|
|
208
|
+
const isValid = originalChecksum.checksum === restoredChecksum.checksum
|
|
209
|
+
|
|
210
|
+
console.log(`Checksum validation: ${isValid ? 'PASS' : 'FAIL'}`)
|
|
211
|
+
|
|
212
|
+
return isValid
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Restore Verification Checklist
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
interface VerificationResult {
|
|
220
|
+
tableChecks: Map<string, boolean>
|
|
221
|
+
rowCounts: Map<string, number>
|
|
222
|
+
overallStatus: 'success' | 'warning' | 'failure'
|
|
223
|
+
issues: string[]
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
async function verifyRestore(connectionString: string): Promise<VerificationResult> {
|
|
227
|
+
const sql = neon(connectionString)
|
|
228
|
+
|
|
229
|
+
const criticalTables = ['users', 'orders', 'payments', 'products']
|
|
230
|
+
const tableChecks = new Map<string, boolean>()
|
|
231
|
+
const rowCounts = new Map<string, number>()
|
|
232
|
+
const issues: string[] = []
|
|
233
|
+
|
|
234
|
+
for (const table of criticalTables) {
|
|
235
|
+
try {
|
|
236
|
+
const [result] = await sql`
|
|
237
|
+
SELECT COUNT(*) as count FROM ${sql(table)}
|
|
238
|
+
`
|
|
239
|
+
rowCounts.set(table, parseInt(result.count))
|
|
240
|
+
tableChecks.set(table, true)
|
|
241
|
+
} catch (error) {
|
|
242
|
+
tableChecks.set(table, false)
|
|
243
|
+
issues.push(`Table ${table}: ${error}`)
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const failedChecks = [...tableChecks.values()].filter(v => !v).length
|
|
248
|
+
|
|
249
|
+
return {
|
|
250
|
+
tableChecks,
|
|
251
|
+
rowCounts,
|
|
252
|
+
overallStatus: failedChecks === 0 ? 'success' : failedChecks < criticalTables.length / 2 ? 'warning' : 'failure',
|
|
253
|
+
issues
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Automated Backup Verification
|
|
261
|
+
|
|
262
|
+
### Scheduled PITR Testing
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
interface BackupTestResult {
|
|
266
|
+
testId: string
|
|
267
|
+
timestamp: Date
|
|
268
|
+
restoreSuccess: boolean
|
|
269
|
+
validationSuccess: boolean
|
|
270
|
+
duration: number
|
|
271
|
+
cleanedUp: boolean
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
async function testPITRCapability(): Promise<BackupTestResult> {
|
|
275
|
+
const testId = `pitr-test-${Date.now()}`
|
|
276
|
+
const startTime = Date.now()
|
|
277
|
+
let restoreSuccess = false
|
|
278
|
+
let validationSuccess = false
|
|
279
|
+
let cleanedUp = false
|
|
280
|
+
|
|
281
|
+
try {
|
|
282
|
+
// Test restore from 1 hour ago
|
|
283
|
+
const testTimestamp = new Date(Date.now() - 60 * 60 * 1000)
|
|
284
|
+
|
|
285
|
+
const restore = await performRestore(testTimestamp, {
|
|
286
|
+
branchName: testId,
|
|
287
|
+
validateFirst: true
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
restoreSuccess = true
|
|
291
|
+
|
|
292
|
+
// Validate restored data
|
|
293
|
+
const verification = await verifyRestore(restore.connectionString)
|
|
294
|
+
validationSuccess = verification.overallStatus === 'success'
|
|
295
|
+
|
|
296
|
+
// Cleanup test branch
|
|
297
|
+
await fetch(
|
|
298
|
+
`https://console.neon.tech/api/v2/projects/${process.env.NEON_PROJECT_ID}/branches/${restore.branchId}`,
|
|
299
|
+
{
|
|
300
|
+
method: 'DELETE',
|
|
301
|
+
headers: {
|
|
302
|
+
'Authorization': `Bearer ${process.env.NEON_API_KEY}`
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
)
|
|
306
|
+
cleanedUp = true
|
|
307
|
+
|
|
308
|
+
} catch (error) {
|
|
309
|
+
console.error('PITR test failed:', error)
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return {
|
|
313
|
+
testId,
|
|
314
|
+
timestamp: new Date(),
|
|
315
|
+
restoreSuccess,
|
|
316
|
+
validationSuccess,
|
|
317
|
+
duration: Date.now() - startTime,
|
|
318
|
+
cleanedUp
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### GitHub Actions PITR Test
|
|
324
|
+
|
|
325
|
+
```yaml
|
|
326
|
+
name: PITR Verification
|
|
327
|
+
|
|
328
|
+
on:
|
|
329
|
+
schedule:
|
|
330
|
+
- cron: '0 2 * * *' # Daily at 2 AM UTC
|
|
331
|
+
workflow_dispatch:
|
|
332
|
+
|
|
333
|
+
jobs:
|
|
334
|
+
test-pitr:
|
|
335
|
+
runs-on: ubuntu-latest
|
|
336
|
+
steps:
|
|
337
|
+
- uses: actions/checkout@v4
|
|
338
|
+
|
|
339
|
+
- name: Setup Node.js
|
|
340
|
+
uses: actions/setup-node@v4
|
|
341
|
+
with:
|
|
342
|
+
node-version: '20'
|
|
343
|
+
|
|
344
|
+
- name: Install dependencies
|
|
345
|
+
run: npm ci
|
|
346
|
+
|
|
347
|
+
- name: Run PITR Test
|
|
348
|
+
env:
|
|
349
|
+
NEON_API_KEY: ${{ secrets.NEON_API_KEY }}
|
|
350
|
+
NEON_PROJECT_ID: ${{ secrets.NEON_PROJECT_ID }}
|
|
351
|
+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
|
|
352
|
+
run: npm run test:pitr
|
|
353
|
+
|
|
354
|
+
- name: Report Results
|
|
355
|
+
if: failure()
|
|
356
|
+
uses: actions/github-script@v7
|
|
357
|
+
with:
|
|
358
|
+
script: |
|
|
359
|
+
github.rest.issues.create({
|
|
360
|
+
owner: context.repo.owner,
|
|
361
|
+
repo: context.repo.repo,
|
|
362
|
+
title: 'PITR Verification Failed',
|
|
363
|
+
body: 'Daily PITR verification test failed. Please investigate immediately.',
|
|
364
|
+
labels: ['critical', 'infrastructure']
|
|
365
|
+
})
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## Disaster Recovery Procedures
|
|
371
|
+
|
|
372
|
+
### Emergency Restore Procedure
|
|
373
|
+
|
|
374
|
+
Step 1: Identify Recovery Point
|
|
375
|
+
- Determine exact timestamp before incident
|
|
376
|
+
- Account for timezone differences (use UTC)
|
|
377
|
+
- Consider data propagation delays
|
|
378
|
+
|
|
379
|
+
Step 2: Create Restore Branch
|
|
380
|
+
```typescript
|
|
381
|
+
const incidentTime = new Date('2024-01-15T14:30:00Z')
|
|
382
|
+
const safeTime = new Date(incidentTime.getTime() - 5 * 60 * 1000) // 5 minutes before
|
|
383
|
+
const restored = await performRestore(safeTime, { branchName: 'emergency-restore' })
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
Step 3: Validate Restored Data
|
|
387
|
+
- Check critical table row counts
|
|
388
|
+
- Verify recent transactions
|
|
389
|
+
- Confirm data integrity
|
|
390
|
+
|
|
391
|
+
Step 4: Switch Production
|
|
392
|
+
- Update connection strings to restored branch
|
|
393
|
+
- Monitor for errors
|
|
394
|
+
- Keep original branch for investigation
|
|
395
|
+
|
|
396
|
+
Step 5: Post-Incident Cleanup
|
|
397
|
+
- Document timeline and decisions
|
|
398
|
+
- Archive investigation branch
|
|
399
|
+
- Update runbooks as needed
|
|
400
|
+
|
|
401
|
+
### Production Cutover
|
|
402
|
+
|
|
403
|
+
```typescript
|
|
404
|
+
async function cutoverToRestored(restoredBranchId: string) {
|
|
405
|
+
// Get connection details for restored branch
|
|
406
|
+
const endpoints = await fetch(
|
|
407
|
+
`https://console.neon.tech/api/v2/projects/${process.env.NEON_PROJECT_ID}/branches/${restoredBranchId}/endpoints`,
|
|
408
|
+
{
|
|
409
|
+
headers: { 'Authorization': `Bearer ${process.env.NEON_API_KEY}` }
|
|
410
|
+
}
|
|
411
|
+
).then(r => r.json())
|
|
412
|
+
|
|
413
|
+
const newConnectionString = endpoints.endpoints[0]?.connection_uri
|
|
414
|
+
|
|
415
|
+
// Update environment configuration
|
|
416
|
+
// This varies by platform (Vercel, Railway, etc.)
|
|
417
|
+
console.log('New connection string:', newConnectionString)
|
|
418
|
+
console.log('Update DATABASE_URL_POOLED in your platform')
|
|
419
|
+
|
|
420
|
+
return {
|
|
421
|
+
newConnectionString,
|
|
422
|
+
cutoverTime: new Date().toISOString(),
|
|
423
|
+
instructions: [
|
|
424
|
+
'1. Update DATABASE_URL_POOLED environment variable',
|
|
425
|
+
'2. Trigger application redeployment',
|
|
426
|
+
'3. Monitor for connection errors',
|
|
427
|
+
'4. Verify data integrity in production'
|
|
428
|
+
]
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Best Practices
|
|
436
|
+
|
|
437
|
+
### Retention Configuration
|
|
438
|
+
|
|
439
|
+
Align Retention with Compliance: Match retention period to regulatory requirements
|
|
440
|
+
Consider Recovery Objectives: Longer retention for lower RPO requirements
|
|
441
|
+
Balance Cost: Longer retention increases storage costs
|
|
442
|
+
|
|
443
|
+
### Testing Strategy
|
|
444
|
+
|
|
445
|
+
Regular PITR Tests: Weekly or daily automated restore tests
|
|
446
|
+
Full Recovery Drills: Quarterly complete disaster recovery exercises
|
|
447
|
+
Document Procedures: Maintain up-to-date runbooks
|
|
448
|
+
|
|
449
|
+
### Monitoring
|
|
450
|
+
|
|
451
|
+
Track PITR Health: Monitor WAL streaming status
|
|
452
|
+
Alert on Issues: Immediate notification of backup failures
|
|
453
|
+
Retention Warnings: Alert before data exits retention window
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
Version: 2.0.0
|
|
458
|
+
Last Updated: 2026-01-06
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# Neon Platform Reference Guide
|
|
2
|
+
|
|
3
|
+
## API Reference
|
|
4
|
+
|
|
5
|
+
### Neon Management API
|
|
6
|
+
|
|
7
|
+
Base URL: https://console.neon.tech/api/v2
|
|
8
|
+
|
|
9
|
+
Authentication: Bearer token via NEON_API_KEY header
|
|
10
|
+
|
|
11
|
+
### Common Endpoints
|
|
12
|
+
|
|
13
|
+
Project Endpoints:
|
|
14
|
+
- GET /projects - List all projects
|
|
15
|
+
- GET /projects/{project_id} - Get project details
|
|
16
|
+
- PATCH /projects/{project_id} - Update project settings
|
|
17
|
+
|
|
18
|
+
Branch Endpoints:
|
|
19
|
+
- GET /projects/{project_id}/branches - List branches
|
|
20
|
+
- POST /projects/{project_id}/branches - Create branch
|
|
21
|
+
- DELETE /projects/{project_id}/branches/{branch_id} - Delete branch
|
|
22
|
+
- GET /projects/{project_id}/branches/{branch_id}/endpoints - Get branch endpoints
|
|
23
|
+
|
|
24
|
+
Endpoint Endpoints:
|
|
25
|
+
- GET /projects/{project_id}/endpoints - List compute endpoints
|
|
26
|
+
- PATCH /projects/{project_id}/endpoints/{endpoint_id} - Update endpoint settings
|
|
27
|
+
|
|
28
|
+
### API Response Formats
|
|
29
|
+
|
|
30
|
+
Branch Creation Response:
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"branch": {
|
|
34
|
+
"id": "br-xxx",
|
|
35
|
+
"name": "feature-branch",
|
|
36
|
+
"project_id": "project-xxx",
|
|
37
|
+
"parent_id": "br-main",
|
|
38
|
+
"created_at": "2024-01-01T00:00:00Z",
|
|
39
|
+
"current_state": "ready"
|
|
40
|
+
},
|
|
41
|
+
"endpoints": [
|
|
42
|
+
{
|
|
43
|
+
"id": "ep-xxx",
|
|
44
|
+
"branch_id": "br-xxx",
|
|
45
|
+
"host": "ep-xxx.region.neon.tech",
|
|
46
|
+
"connection_uri": "postgresql://..."
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Endpoint Configuration Response:
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"endpoint": {
|
|
56
|
+
"id": "ep-xxx",
|
|
57
|
+
"autoscaling_limit_min_cu": 0.25,
|
|
58
|
+
"autoscaling_limit_max_cu": 4,
|
|
59
|
+
"suspend_timeout_seconds": 300,
|
|
60
|
+
"current_state": "active"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Environment Configuration
|
|
68
|
+
|
|
69
|
+
### Connection String Formats
|
|
70
|
+
|
|
71
|
+
Direct Connection (for migrations and admin tasks):
|
|
72
|
+
```
|
|
73
|
+
postgresql://user:password@ep-xxx.region.neon.tech/dbname?sslmode=require
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Pooled Connection (for serverless and edge):
|
|
77
|
+
```
|
|
78
|
+
postgresql://user:password@ep-xxx-pooler.region.neon.tech/dbname?sslmode=require
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Environment Variables
|
|
82
|
+
|
|
83
|
+
Required Variables:
|
|
84
|
+
- DATABASE_URL: Primary connection string for migrations
|
|
85
|
+
- DATABASE_URL_POOLED: Pooled connection for application use
|
|
86
|
+
- NEON_API_KEY: API key for branch management
|
|
87
|
+
- NEON_PROJECT_ID: Project identifier for API calls
|
|
88
|
+
|
|
89
|
+
Optional Variables:
|
|
90
|
+
- NEON_BRANCH_ID: Specific branch identifier
|
|
91
|
+
- NEON_ENDPOINT_ID: Specific endpoint identifier
|
|
92
|
+
|
|
93
|
+
### Connection String Parameters
|
|
94
|
+
|
|
95
|
+
SSL Mode Options:
|
|
96
|
+
- sslmode=require: Require SSL (recommended)
|
|
97
|
+
- sslmode=verify-full: Verify SSL certificate
|
|
98
|
+
|
|
99
|
+
Connection Pool Options:
|
|
100
|
+
- connection_limit: Maximum connections (pooled only)
|
|
101
|
+
- pool_timeout: Connection timeout in seconds
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Compute Unit Reference
|
|
106
|
+
|
|
107
|
+
### Compute Unit (CU) Specifications
|
|
108
|
+
|
|
109
|
+
0.25 CU: 0.25 vCPU, 1 GB RAM - Development and testing
|
|
110
|
+
0.5 CU: 0.5 vCPU, 2 GB RAM - Light production workloads
|
|
111
|
+
1 CU: 1 vCPU, 4 GB RAM - Standard production
|
|
112
|
+
2 CU: 2 vCPU, 8 GB RAM - Medium workloads
|
|
113
|
+
4 CU: 4 vCPU, 16 GB RAM - Heavy workloads
|
|
114
|
+
8 CU: 8 vCPU, 32 GB RAM - High-performance requirements
|
|
115
|
+
|
|
116
|
+
### Auto-Scaling Configuration
|
|
117
|
+
|
|
118
|
+
Minimum CU: Lowest compute level (0.25 for scale-to-zero)
|
|
119
|
+
Maximum CU: Highest compute level for peak load
|
|
120
|
+
Suspend Timeout: Seconds of inactivity before scaling to zero
|
|
121
|
+
|
|
122
|
+
Recommended Settings by Use Case:
|
|
123
|
+
|
|
124
|
+
Development: min 0.25, max 0.5, timeout 300
|
|
125
|
+
Staging: min 0.25, max 1, timeout 600
|
|
126
|
+
Production: min 0.5, max 4, timeout 3600
|
|
127
|
+
High-Traffic: min 1, max 8, timeout 0 (never suspend)
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## PostgreSQL Extensions
|
|
132
|
+
|
|
133
|
+
### Supported Extensions
|
|
134
|
+
|
|
135
|
+
Core Extensions:
|
|
136
|
+
- pg_stat_statements: Query performance statistics
|
|
137
|
+
- pg_trgm: Trigram text similarity
|
|
138
|
+
- uuid-ossp: UUID generation
|
|
139
|
+
- hstore: Key-value storage
|
|
140
|
+
- pgcrypto: Cryptographic functions
|
|
141
|
+
|
|
142
|
+
Spatial Extensions:
|
|
143
|
+
- postgis: Spatial and geographic objects
|
|
144
|
+
- postgis_topology: Topology support
|
|
145
|
+
|
|
146
|
+
Full-Text Search:
|
|
147
|
+
- pg_search: Full-text search improvements
|
|
148
|
+
- unaccent: Remove accents from text
|
|
149
|
+
|
|
150
|
+
JSON Processing:
|
|
151
|
+
- jsonb_plperl: Perl JSON functions
|
|
152
|
+
- jsonb_plpython3u: Python JSON functions
|
|
153
|
+
|
|
154
|
+
### Extension Installation
|
|
155
|
+
|
|
156
|
+
Enable Extension:
|
|
157
|
+
```sql
|
|
158
|
+
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
159
|
+
CREATE EXTENSION IF NOT EXISTS uuid-ossp;
|
|
160
|
+
CREATE EXTENSION IF NOT EXISTS postgis;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Provider Comparison Matrix
|
|
166
|
+
|
|
167
|
+
### Feature Comparison
|
|
168
|
+
|
|
169
|
+
Serverless Compute:
|
|
170
|
+
- Neon: Full auto-scaling with scale-to-zero
|
|
171
|
+
- Supabase: Fixed compute tiers
|
|
172
|
+
- PlanetScale: MySQL-based serverless
|
|
173
|
+
|
|
174
|
+
Database Branching:
|
|
175
|
+
- Neon: Instant copy-on-write branches
|
|
176
|
+
- Supabase: Manual database cloning
|
|
177
|
+
- PlanetScale: Schema-only branching
|
|
178
|
+
|
|
179
|
+
Point-in-Time Recovery:
|
|
180
|
+
- Neon: 30-day PITR with instant restore
|
|
181
|
+
- Supabase: 7-day backups (Pro tier)
|
|
182
|
+
- PlanetScale: Continuous backups
|
|
183
|
+
|
|
184
|
+
Connection Pooling:
|
|
185
|
+
- Neon: Built-in HTTP and WebSocket pooler
|
|
186
|
+
- Supabase: PgBouncer integration
|
|
187
|
+
- PlanetScale: Native connection handling
|
|
188
|
+
|
|
189
|
+
Edge Compatibility:
|
|
190
|
+
- Neon: Full edge runtime support
|
|
191
|
+
- Supabase: Edge functions with pooler
|
|
192
|
+
- PlanetScale: Edge-compatible driver
|
|
193
|
+
|
|
194
|
+
### Pricing Comparison
|
|
195
|
+
|
|
196
|
+
Free Tier Storage:
|
|
197
|
+
- Neon: 3 GB
|
|
198
|
+
- Supabase: 500 MB
|
|
199
|
+
- PlanetScale: 5 GB
|
|
200
|
+
|
|
201
|
+
Free Tier Compute:
|
|
202
|
+
- Neon: 100 compute hours
|
|
203
|
+
- Supabase: Fixed 500 MB RAM
|
|
204
|
+
- PlanetScale: 1 billion row reads
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Error Codes and Troubleshooting
|
|
209
|
+
|
|
210
|
+
### Common Error Codes
|
|
211
|
+
|
|
212
|
+
Connection Errors:
|
|
213
|
+
- ECONNREFUSED: Endpoint suspended, will wake on next request
|
|
214
|
+
- SSL_CERTIFICATE_REQUIRED: Missing sslmode=require parameter
|
|
215
|
+
- TOO_MANY_CONNECTIONS: Pool exhausted, use pooled connection
|
|
216
|
+
|
|
217
|
+
Branch Errors:
|
|
218
|
+
- BRANCH_NOT_FOUND: Invalid branch ID
|
|
219
|
+
- BRANCH_LIMIT_EXCEEDED: Project branch limit reached
|
|
220
|
+
- PARENT_BRANCH_NOT_FOUND: Invalid parent for branching
|
|
221
|
+
|
|
222
|
+
API Errors:
|
|
223
|
+
- 401 Unauthorized: Invalid or expired API key
|
|
224
|
+
- 403 Forbidden: Insufficient permissions
|
|
225
|
+
- 429 Too Many Requests: Rate limit exceeded
|
|
226
|
+
|
|
227
|
+
### Troubleshooting Guide
|
|
228
|
+
|
|
229
|
+
Slow Cold Starts:
|
|
230
|
+
- Increase minimum compute units
|
|
231
|
+
- Reduce suspend timeout
|
|
232
|
+
- Use connection pooling
|
|
233
|
+
|
|
234
|
+
Connection Timeouts:
|
|
235
|
+
- Switch to pooled connection string
|
|
236
|
+
- Verify network connectivity
|
|
237
|
+
- Check endpoint status via API
|
|
238
|
+
|
|
239
|
+
Branch Creation Failures:
|
|
240
|
+
- Verify parent branch exists
|
|
241
|
+
- Check project branch limits
|
|
242
|
+
- Ensure API key has write permissions
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Security Best Practices
|
|
247
|
+
|
|
248
|
+
### Connection Security
|
|
249
|
+
|
|
250
|
+
Always Use SSL: Set sslmode=require in connection strings
|
|
251
|
+
Rotate Credentials: Regularly rotate database passwords and API keys
|
|
252
|
+
Use Environment Variables: Never hardcode credentials in source code
|
|
253
|
+
Restrict IP Access: Configure IP allow lists for production
|
|
254
|
+
|
|
255
|
+
### API Key Management
|
|
256
|
+
|
|
257
|
+
Scoped Keys: Create keys with minimal required permissions
|
|
258
|
+
Key Rotation: Rotate API keys on regular schedule
|
|
259
|
+
Audit Access: Monitor API key usage via Neon console
|
|
260
|
+
Revoke Unused: Remove keys no longer in use
|
|
261
|
+
|
|
262
|
+
### Database Security
|
|
263
|
+
|
|
264
|
+
Row-Level Security: Implement RLS for multi-tenant applications
|
|
265
|
+
Prepared Statements: Always use parameterized queries
|
|
266
|
+
Audit Logging: Enable pg_stat_statements for query monitoring
|
|
267
|
+
Backup Verification: Regularly test PITR restoration
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
Version: 2.0.0
|
|
272
|
+
Last Updated: 2026-01-06
|