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,1414 @@
|
|
|
1
|
+
# Ralph Engine Complete Reference
|
|
2
|
+
|
|
3
|
+
## Configuration Reference
|
|
4
|
+
|
|
5
|
+
### Complete ralph.yaml Options
|
|
6
|
+
|
|
7
|
+
| Option | Type | Default | Description |
|
|
8
|
+
| --------------------------------------------------- | ------- | ------------------------------------------------------ | --------------------------------------------------------- |
|
|
9
|
+
| `ralph.enabled` | boolean | `true` | Enable/disable Ralph Engine globally |
|
|
10
|
+
| `ralph.lsp.auto_start` | boolean | `true` | Auto-start LSP servers when needed |
|
|
11
|
+
| `ralph.lsp.timeout_seconds` | integer | `30` | Timeout for LSP operations (seconds) |
|
|
12
|
+
| `ralph.lsp.poll_interval_ms` | integer | `500` | Polling interval for diagnostics (milliseconds) |
|
|
13
|
+
| `ralph.lsp.graceful_degradation` | boolean | `true` | Continue if LSP unavailable (fallback to linters) |
|
|
14
|
+
| `ralph.ast_grep.enabled` | boolean | `true` | Enable AST-grep security scanning |
|
|
15
|
+
| `ralph.ast_grep.config_path` | string | `.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml` | Path to AST-grep configuration |
|
|
16
|
+
| `ralph.ast_grep.security_scan` | boolean | `true` | Enable security vulnerability scanning |
|
|
17
|
+
| `ralph.ast_grep.quality_scan` | boolean | `true` | Enable code quality pattern scanning |
|
|
18
|
+
| `ralph.ast_grep.auto_fix` | boolean | `false` | Auto-fix without confirmation (dangerous) |
|
|
19
|
+
| `ralph.loop.max_iterations` | integer | `10` | Maximum feedback loop iterations |
|
|
20
|
+
| `ralph.loop.auto_fix` | boolean | `false` | Require confirmation before auto-fixing |
|
|
21
|
+
| `ralph.loop.require_confirmation` | boolean | `true` | Ask user before applying fixes |
|
|
22
|
+
| `ralph.loop.cooldown_seconds` | integer | `2` | Minimum time between loop iterations |
|
|
23
|
+
| `ralph.loop.completion.zero_errors` | boolean | `true` | Require zero LSP errors to complete |
|
|
24
|
+
| `ralph.loop.completion.zero_warnings` | boolean | `false` | Require zero LSP warnings to complete |
|
|
25
|
+
| `ralph.loop.completion.tests_pass` | boolean | `true` | Require all tests to pass |
|
|
26
|
+
| `ralph.loop.completion.coverage_threshold` | integer | `85` | Minimum test coverage percentage (0 to disable) |
|
|
27
|
+
| `ralph.git.auto_branch` | boolean | `false` | Auto-create git branches (use git-strategy.yaml instead) |
|
|
28
|
+
| `ralph.git.auto_pr` | boolean | `false` | Auto-create pull requests (use git-strategy.yaml instead) |
|
|
29
|
+
| `ralph.hooks.post_tool_lsp.enabled` | boolean | `true` | Enable LSP diagnostic hook |
|
|
30
|
+
| `ralph.hooks.post_tool_lsp.trigger_on` | list | `["Write", "Edit"]` | Tools that trigger LSP diagnostics |
|
|
31
|
+
| `ralph.hooks.post_tool_lsp.severity_threshold` | string | `"error"` | Minimum severity to report: error, warning, info |
|
|
32
|
+
| `ralph.hooks.stop_loop_controller.enabled` | boolean | `true` | Enable loop controller hook |
|
|
33
|
+
| `ralph.hooks.stop_loop_controller.check_completion` | boolean | `true` | Check completion conditions on each response |
|
|
34
|
+
|
|
35
|
+
### Example Configuration
|
|
36
|
+
|
|
37
|
+
```yaml
|
|
38
|
+
ralph:
|
|
39
|
+
enabled: true
|
|
40
|
+
|
|
41
|
+
lsp:
|
|
42
|
+
auto_start: true
|
|
43
|
+
timeout_seconds: 30
|
|
44
|
+
poll_interval_ms: 500
|
|
45
|
+
graceful_degradation: true
|
|
46
|
+
|
|
47
|
+
ast_grep:
|
|
48
|
+
enabled: true
|
|
49
|
+
security_scan: true
|
|
50
|
+
quality_scan: true
|
|
51
|
+
auto_fix: false
|
|
52
|
+
|
|
53
|
+
loop:
|
|
54
|
+
max_iterations: 10
|
|
55
|
+
auto_fix: false
|
|
56
|
+
require_confirmation: true
|
|
57
|
+
cooldown_seconds: 2
|
|
58
|
+
|
|
59
|
+
completion:
|
|
60
|
+
zero_errors: true
|
|
61
|
+
zero_warnings: false
|
|
62
|
+
tests_pass: true
|
|
63
|
+
coverage_threshold: 85
|
|
64
|
+
|
|
65
|
+
hooks:
|
|
66
|
+
post_tool_lsp:
|
|
67
|
+
enabled: true
|
|
68
|
+
trigger_on: ["Write", "Edit"]
|
|
69
|
+
severity_threshold: "error"
|
|
70
|
+
|
|
71
|
+
stop_loop_controller:
|
|
72
|
+
enabled: true
|
|
73
|
+
check_completion: true
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Environment Variables Reference
|
|
79
|
+
|
|
80
|
+
| Variable | Type | Description | Example |
|
|
81
|
+
| ------------------------------ | ------- | -------------------------------------- | -------------------------------- |
|
|
82
|
+
| `MOAI_DISABLE_LSP_DIAGNOSTIC` | boolean | Disable LSP diagnostic hook | `MOAI_DISABLE_LSP_DIAGNOSTIC=1` |
|
|
83
|
+
| `MOAI_DISABLE_LOOP_CONTROLLER` | boolean | Disable loop controller hook | `MOAI_DISABLE_LOOP_CONTROLLER=1` |
|
|
84
|
+
| `MOAI_LOOP_ACTIVE` | boolean | Loop active flag (set by commands) | `MOAI_LOOP_ACTIVE=1` |
|
|
85
|
+
| `MOAI_LOOP_ITERATION` | integer | Current iteration number | `MOAI_LOOP_ITERATION=3` |
|
|
86
|
+
| `CLAUDE_PROJECT_DIR` | string | Project root path (set by Claude Code) | `/path/to/project` |
|
|
87
|
+
|
|
88
|
+
### Environment Variable Usage
|
|
89
|
+
|
|
90
|
+
Enable/Disable Hooks:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Disable LSP diagnostics temporarily
|
|
94
|
+
export MOAI_DISABLE_LSP_DIAGNOSTIC=1
|
|
95
|
+
claude -p "Make changes"
|
|
96
|
+
|
|
97
|
+
# Disable loop controller
|
|
98
|
+
export MOAI_DISABLE_LOOP_CONTROLLER=1
|
|
99
|
+
claude -p "Single run only"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Set Loop State (for CI/CD):
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Start loop with iteration count
|
|
106
|
+
export MOAI_LOOP_ACTIVE=1
|
|
107
|
+
export MOAI_LOOP_ITERATION=0
|
|
108
|
+
claude -p "/moai:loop --max-iterations 5"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## API Reference
|
|
114
|
+
|
|
115
|
+
### MoAILSPClient
|
|
116
|
+
|
|
117
|
+
High-level LSP client interface for getting diagnostics, finding references, renaming symbols, and other LSP operations.
|
|
118
|
+
|
|
119
|
+
#### Constructor
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
MoAILSPClient(project_root: str | Path)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Initialize the LSP client.
|
|
126
|
+
|
|
127
|
+
**Parameters:**
|
|
128
|
+
|
|
129
|
+
- `project_root`: Path to the project root directory
|
|
130
|
+
|
|
131
|
+
**Raises:**
|
|
132
|
+
|
|
133
|
+
- `LSPClientError`: If initialization fails
|
|
134
|
+
|
|
135
|
+
**Example:**
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
from moai_adk.lsp.client import MoAILSPClient
|
|
139
|
+
|
|
140
|
+
client = MoAILSPClient(project_root="/path/to/project")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### Methods
|
|
144
|
+
|
|
145
|
+
##### get_diagnostics
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
async def get_diagnostics(file_path: str) -> list[Diagnostic]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Get diagnostics for a file.
|
|
152
|
+
|
|
153
|
+
**Parameters:**
|
|
154
|
+
|
|
155
|
+
- `file_path`: Path to the file (relative or absolute)
|
|
156
|
+
|
|
157
|
+
**Returns:**
|
|
158
|
+
|
|
159
|
+
- List of `Diagnostic` objects
|
|
160
|
+
|
|
161
|
+
**Example:**
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
diagnostics = await client.get_diagnostics("src/auth.py")
|
|
165
|
+
|
|
166
|
+
for diag in diagnostics:
|
|
167
|
+
if diag.is_error():
|
|
168
|
+
print(f"Error at line {diag.range.start.line}: {diag.message}")
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
##### find_references
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
async def find_references(file_path: str, position: Position) -> list[Location]
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Find all references to the symbol at position.
|
|
178
|
+
|
|
179
|
+
**Parameters:**
|
|
180
|
+
|
|
181
|
+
- `file_path`: Path to the file
|
|
182
|
+
- `position`: Position of the symbol (`Position(line, character)`)
|
|
183
|
+
|
|
184
|
+
**Returns:**
|
|
185
|
+
|
|
186
|
+
- List of `Location` objects
|
|
187
|
+
|
|
188
|
+
**Example:**
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
from moai_adk.lsp.models import Position
|
|
192
|
+
|
|
193
|
+
position = Position(line=45, character=10)
|
|
194
|
+
references = await client.find_references("src/user.py", position)
|
|
195
|
+
|
|
196
|
+
for ref in references:
|
|
197
|
+
print(f"Found in {ref.uri} at line {ref.range.start.line}")
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
##### rename_symbol
|
|
201
|
+
|
|
202
|
+
```python
|
|
203
|
+
async def rename_symbol(file_path: str, position: Position, new_name: str) -> WorkspaceEdit
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Rename the symbol at position across the project.
|
|
207
|
+
|
|
208
|
+
**Parameters:**
|
|
209
|
+
|
|
210
|
+
- `file_path`: Path to the file
|
|
211
|
+
- `position`: Position of the symbol
|
|
212
|
+
- `new_name`: New name for the symbol
|
|
213
|
+
|
|
214
|
+
**Returns:**
|
|
215
|
+
|
|
216
|
+
- `WorkspaceEdit` with all changes
|
|
217
|
+
|
|
218
|
+
**Example:**
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
position = Position(line=10, character=5)
|
|
222
|
+
edit = await client.rename_symbol("src/user.py", position, "new_name")
|
|
223
|
+
|
|
224
|
+
print(f"Will modify {edit.file_count()} file(s)")
|
|
225
|
+
for uri, text_edits in edit.changes.items():
|
|
226
|
+
print(f" {uri}: {len(text_edits)} edit(s)")
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
##### get_hover_info
|
|
230
|
+
|
|
231
|
+
```python
|
|
232
|
+
async def get_hover_info(file_path: str, position: Position) -> HoverInfo | None
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Get hover information for position.
|
|
236
|
+
|
|
237
|
+
**Parameters:**
|
|
238
|
+
|
|
239
|
+
- `file_path`: Path to the file
|
|
240
|
+
- `position`: Position to get hover info for
|
|
241
|
+
|
|
242
|
+
**Returns:**
|
|
243
|
+
|
|
244
|
+
- `HoverInfo` or `None` if not available
|
|
245
|
+
|
|
246
|
+
**Example:**
|
|
247
|
+
|
|
248
|
+
```python
|
|
249
|
+
position = Position(line=20, character=15)
|
|
250
|
+
hover = await client.get_hover_info("src/utils.py", position)
|
|
251
|
+
|
|
252
|
+
if hover:
|
|
253
|
+
print(f"Documentation: {hover.contents}")
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
##### get_language_for_file
|
|
257
|
+
|
|
258
|
+
```python
|
|
259
|
+
def get_language_for_file(file_path: str) -> str | None
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Get the language identifier for a file.
|
|
263
|
+
|
|
264
|
+
**Parameters:**
|
|
265
|
+
|
|
266
|
+
- `file_path`: Path to the file
|
|
267
|
+
|
|
268
|
+
**Returns:**
|
|
269
|
+
|
|
270
|
+
- Language identifier (e.g., "python", "typescript") or `None`
|
|
271
|
+
|
|
272
|
+
**Example:**
|
|
273
|
+
|
|
274
|
+
```python
|
|
275
|
+
language = client.get_language_for_file("src/app.py")
|
|
276
|
+
# Returns: "python"
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
##### ensure_server_running
|
|
280
|
+
|
|
281
|
+
```python
|
|
282
|
+
async def ensure_server_running(language: str) -> None
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Ensure an LSP server is running for a language.
|
|
286
|
+
|
|
287
|
+
**Parameters:**
|
|
288
|
+
|
|
289
|
+
- `language`: Language identifier (e.g., "python", "typescript")
|
|
290
|
+
|
|
291
|
+
**Example:**
|
|
292
|
+
|
|
293
|
+
```python
|
|
294
|
+
await client.ensure_server_running("python")
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
##### cleanup
|
|
298
|
+
|
|
299
|
+
```python
|
|
300
|
+
async def cleanup() -> None
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Clean up by stopping all LSP servers.
|
|
304
|
+
|
|
305
|
+
**Example:**
|
|
306
|
+
|
|
307
|
+
```python
|
|
308
|
+
await client.cleanup()
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
### Diagnostic Models
|
|
314
|
+
|
|
315
|
+
#### DiagnosticSeverity
|
|
316
|
+
|
|
317
|
+
Enum for diagnostic severity levels (LSP 3.17 specification).
|
|
318
|
+
|
|
319
|
+
| Value | Integer | Description |
|
|
320
|
+
| ------------- | ------- | ---------------------- |
|
|
321
|
+
| `ERROR` | 1 | Reports an error |
|
|
322
|
+
| `WARNING` | 2 | Reports a warning |
|
|
323
|
+
| `INFORMATION` | 3 | Reports an information |
|
|
324
|
+
| `HINT` | 4 | Reports a hint |
|
|
325
|
+
|
|
326
|
+
**Example:**
|
|
327
|
+
|
|
328
|
+
```python
|
|
329
|
+
from moai_adk.lsp.models import DiagnosticSeverity
|
|
330
|
+
|
|
331
|
+
if diagnostic.severity == DiagnosticSeverity.ERROR:
|
|
332
|
+
print("Critical error found")
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
#### Position
|
|
336
|
+
|
|
337
|
+
Zero-based line and character position in a text document.
|
|
338
|
+
|
|
339
|
+
**Attributes:**
|
|
340
|
+
|
|
341
|
+
- `line`: Line position (zero-based)
|
|
342
|
+
- `character`: Character offset on a line (zero-based)
|
|
343
|
+
|
|
344
|
+
**Example:**
|
|
345
|
+
|
|
346
|
+
```python
|
|
347
|
+
from moai_adk.lsp.models import Position
|
|
348
|
+
|
|
349
|
+
# Line 45, character 10 (like an editor cursor)
|
|
350
|
+
pos = Position(line=44, character=10)
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
#### Range
|
|
354
|
+
|
|
355
|
+
Range in a text document expressed as start and end positions.
|
|
356
|
+
|
|
357
|
+
**Attributes:**
|
|
358
|
+
|
|
359
|
+
- `start`: Range's start position (inclusive)
|
|
360
|
+
- `end`: Range's end position (exclusive)
|
|
361
|
+
|
|
362
|
+
**Methods:**
|
|
363
|
+
|
|
364
|
+
- `contains(position: Position) -> bool`: Check if position is within range
|
|
365
|
+
- `is_single_line() -> bool`: Check if range spans only one line
|
|
366
|
+
|
|
367
|
+
**Example:**
|
|
368
|
+
|
|
369
|
+
```python
|
|
370
|
+
from moai_adk.lsp.models import Range, Position
|
|
371
|
+
|
|
372
|
+
range = Range(
|
|
373
|
+
start=Position(line=10, character=0),
|
|
374
|
+
end=Position(line=10, character=20)
|
|
375
|
+
)
|
|
376
|
+
|
|
377
|
+
if range.contains(Position(line=10, character=5)):
|
|
378
|
+
print("Position is in range")
|
|
379
|
+
|
|
380
|
+
if range.is_single_line():
|
|
381
|
+
print("Single-line range")
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
#### Diagnostic
|
|
385
|
+
|
|
386
|
+
Represents a diagnostic issue (error, warning, etc.) in source code.
|
|
387
|
+
|
|
388
|
+
**Attributes:**
|
|
389
|
+
|
|
390
|
+
- `range`: Range where the message applies
|
|
391
|
+
- `severity`: Diagnostic severity (`DiagnosticSeverity`)
|
|
392
|
+
- `code`: Diagnostic code (string, int, or None)
|
|
393
|
+
- `source`: Diagnostic source (e.g., "pyright", "mypy")
|
|
394
|
+
- `message`: Diagnostic message
|
|
395
|
+
|
|
396
|
+
**Methods:**
|
|
397
|
+
|
|
398
|
+
- `is_error() -> bool`: Check if severity is ERROR
|
|
399
|
+
|
|
400
|
+
**Example:**
|
|
401
|
+
|
|
402
|
+
```python
|
|
403
|
+
from moai_adk.lsp.models import Diagnostic, DiagnosticSeverity, Range, Position
|
|
404
|
+
|
|
405
|
+
diagnostic = Diagnostic(
|
|
406
|
+
range=Range(Position(45, 0), Position(45, 10)),
|
|
407
|
+
severity=DiagnosticSeverity.ERROR,
|
|
408
|
+
code="E0602",
|
|
409
|
+
source="pyright",
|
|
410
|
+
message="Undefined name 'x'"
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
if diagnostic.is_error():
|
|
414
|
+
print(f"Error: {diagnostic.message}")
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
#### Location
|
|
418
|
+
|
|
419
|
+
Location inside a resource (file path + range).
|
|
420
|
+
|
|
421
|
+
**Attributes:**
|
|
422
|
+
|
|
423
|
+
- `uri`: Resource URI (e.g., "file:///path/to/file.py")
|
|
424
|
+
- `range`: Range within the resource
|
|
425
|
+
|
|
426
|
+
**Example:**
|
|
427
|
+
|
|
428
|
+
```python
|
|
429
|
+
from moai_adk.lsp.models import Location, Range, Position
|
|
430
|
+
|
|
431
|
+
location = Location(
|
|
432
|
+
uri="file:///home/user/project/src/main.py",
|
|
433
|
+
range=Range(Position(10, 0), Position(10, 20))
|
|
434
|
+
)
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
#### TextEdit
|
|
438
|
+
|
|
439
|
+
Text edit applicable to a text document.
|
|
440
|
+
|
|
441
|
+
**Attributes:**
|
|
442
|
+
|
|
443
|
+
- `range`: Range to be manipulated
|
|
444
|
+
- `new_text`: String to be inserted (empty for delete)
|
|
445
|
+
|
|
446
|
+
**Methods:**
|
|
447
|
+
|
|
448
|
+
- `is_delete() -> bool`: Check if edit is a deletion
|
|
449
|
+
- `is_insert() -> bool`: Check if edit is an insertion
|
|
450
|
+
|
|
451
|
+
**Example:**
|
|
452
|
+
|
|
453
|
+
```python
|
|
454
|
+
from moai_adk.lsp.models import TextEdit, Range, Position
|
|
455
|
+
|
|
456
|
+
# Replace text
|
|
457
|
+
edit = TextEdit(
|
|
458
|
+
range=Range(Position(5, 0), Position(5, 10)),
|
|
459
|
+
new_text="new_value"
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
# Delete text
|
|
463
|
+
delete_edit = TextEdit(
|
|
464
|
+
range=Range(Position(10, 0), Position(11, 0)),
|
|
465
|
+
new_text=""
|
|
466
|
+
)
|
|
467
|
+
|
|
468
|
+
if delete_edit.is_delete():
|
|
469
|
+
print("This is a deletion")
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
#### WorkspaceEdit
|
|
473
|
+
|
|
474
|
+
Workspace edit represents changes to many resources.
|
|
475
|
+
|
|
476
|
+
**Attributes:**
|
|
477
|
+
|
|
478
|
+
- `changes`: Dict mapping URI to list of `TextEdit` objects
|
|
479
|
+
|
|
480
|
+
**Methods:**
|
|
481
|
+
|
|
482
|
+
- `file_count() -> int`: Get number of files affected
|
|
483
|
+
|
|
484
|
+
**Example:**
|
|
485
|
+
|
|
486
|
+
```python
|
|
487
|
+
from moai_adk.lsp.models import WorkspaceEdit, TextEdit, Range, Position
|
|
488
|
+
|
|
489
|
+
edit = WorkspaceEdit(changes={
|
|
490
|
+
"file:///path/to/file1.py": [
|
|
491
|
+
TextEdit(Range(Position(10, 0), Position(10, 5)), "new_name")
|
|
492
|
+
],
|
|
493
|
+
"file:///path/to/file2.py": [
|
|
494
|
+
TextEdit(Range(Position(20, 0), Position(20, 5)), "new_name")
|
|
495
|
+
]
|
|
496
|
+
})
|
|
497
|
+
|
|
498
|
+
print(f"Editing {edit.file_count()} file(s)")
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
#### HoverInfo
|
|
502
|
+
|
|
503
|
+
Hover information for a symbol.
|
|
504
|
+
|
|
505
|
+
**Attributes:**
|
|
506
|
+
|
|
507
|
+
- `contents`: Hover content (can be markdown)
|
|
508
|
+
- `range`: Optional range for the symbol
|
|
509
|
+
|
|
510
|
+
**Example:**
|
|
511
|
+
|
|
512
|
+
```python
|
|
513
|
+
from moai_adk.lsp.models import HoverInfo, Range, Position
|
|
514
|
+
|
|
515
|
+
hover = HoverInfo(
|
|
516
|
+
contents="**my_function**\n\nCalculates the sum of two numbers.",
|
|
517
|
+
range=Range(Position(10, 0), Position(10, 11))
|
|
518
|
+
)
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
## Hook Specifications
|
|
524
|
+
|
|
525
|
+
### PostToolUse Hook (post_tool\_\_lsp_diagnostic.py)
|
|
526
|
+
|
|
527
|
+
Triggered after Write/Edit operations to check for LSP diagnostics.
|
|
528
|
+
|
|
529
|
+
#### Input Format
|
|
530
|
+
|
|
531
|
+
```json
|
|
532
|
+
{
|
|
533
|
+
"tool_name": "Write",
|
|
534
|
+
"tool_input": {
|
|
535
|
+
"file_path": "/path/to/file.py",
|
|
536
|
+
"content": "..."
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
#### Output Format
|
|
542
|
+
|
|
543
|
+
```json
|
|
544
|
+
{
|
|
545
|
+
"hookSpecificOutput": {
|
|
546
|
+
"hookEventName": "PostToolUse",
|
|
547
|
+
"additionalContext": "LSP: 2 error(s), 3 warning(s) in file.py\n - [ERROR] Line 45: undefined name 'x'\n - [ERROR] Line 52: type mismatch\n - [WARNING] Line 30: unused variable"
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
#### Exit Codes
|
|
553
|
+
|
|
554
|
+
| Code | Meaning | Effect |
|
|
555
|
+
| ---- | ------------------------------- | -------------------------------------- |
|
|
556
|
+
| 0 | No action needed | Hook completes normally |
|
|
557
|
+
| 2 | Attention needed (errors found) | Claude Code displays diagnostic output |
|
|
558
|
+
|
|
559
|
+
#### Configuration
|
|
560
|
+
|
|
561
|
+
Controlled by `ralph.hooks.post_tool_lsp` in ralph.yaml:
|
|
562
|
+
|
|
563
|
+
```yaml
|
|
564
|
+
hooks:
|
|
565
|
+
post_tool_lsp:
|
|
566
|
+
enabled: true
|
|
567
|
+
trigger_on: ["Write", "Edit"]
|
|
568
|
+
severity_threshold: "error" # error, warning, info
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
#### Disable Hook
|
|
572
|
+
|
|
573
|
+
```bash
|
|
574
|
+
export MOAI_DISABLE_LSP_DIAGNOSTIC=1
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
### Stop Hook (stop\_\_loop_controller.py)
|
|
580
|
+
|
|
581
|
+
Triggered after each Claude response to control feedback loop.
|
|
582
|
+
|
|
583
|
+
#### Input Format
|
|
584
|
+
|
|
585
|
+
```json
|
|
586
|
+
{
|
|
587
|
+
"conversation_context": {
|
|
588
|
+
"messages": [...],
|
|
589
|
+
"current_task": "..."
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
Note: Input is consumed but not currently used. Reserved for future enhancements.
|
|
595
|
+
|
|
596
|
+
#### Output Format
|
|
597
|
+
|
|
598
|
+
```json
|
|
599
|
+
{
|
|
600
|
+
"hookSpecificOutput": {
|
|
601
|
+
"hookEventName": "Stop",
|
|
602
|
+
"additionalContext": "Ralph Loop: CONTINUE | Iteration: 3/10 | Errors: 2 | Warnings: 5 | Tests: FAIL | Coverage: 78.5%\nNext actions: Fix 2 error(s), Fix failing tests, Increase coverage from 78.5% to 85%"
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
#### Exit Codes
|
|
608
|
+
|
|
609
|
+
| Code | Meaning | Effect |
|
|
610
|
+
| ---- | -------------------------------- | ----------------------------------------- |
|
|
611
|
+
| 0 | Loop complete or inactive | Claude Code stops processing |
|
|
612
|
+
| 1 | Continue loop (more work needed) | Claude Code continues with next iteration |
|
|
613
|
+
|
|
614
|
+
#### Configuration
|
|
615
|
+
|
|
616
|
+
Controlled by `ralph.hooks.stop_loop_controller` in ralph.yaml:
|
|
617
|
+
|
|
618
|
+
```yaml
|
|
619
|
+
hooks:
|
|
620
|
+
stop_loop_controller:
|
|
621
|
+
enabled: true
|
|
622
|
+
check_completion: true
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
#### Disable Hook
|
|
626
|
+
|
|
627
|
+
```bash
|
|
628
|
+
export MOAI_DISABLE_LOOP_CONTROLLER=1
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
## State File Format
|
|
634
|
+
|
|
635
|
+
### Loop State File (.moai_loop_state.json)
|
|
636
|
+
|
|
637
|
+
Location: `.moai/cache/.moai_loop_state.json`
|
|
638
|
+
|
|
639
|
+
#### Schema
|
|
640
|
+
|
|
641
|
+
```json
|
|
642
|
+
{
|
|
643
|
+
"active": true,
|
|
644
|
+
"iteration": 3,
|
|
645
|
+
"max_iterations": 10,
|
|
646
|
+
"last_error_count": 2,
|
|
647
|
+
"last_warning_count": 5,
|
|
648
|
+
"files_modified": ["src/auth.py", "src/user.py"],
|
|
649
|
+
"start_time": 1704380400.0,
|
|
650
|
+
"completion_reason": null
|
|
651
|
+
}
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
#### Field Descriptions
|
|
655
|
+
|
|
656
|
+
| Field | Type | Description |
|
|
657
|
+
| -------------------- | -------------- | ------------------------------------------------------------------------------- |
|
|
658
|
+
| `active` | boolean | Whether the loop is currently active |
|
|
659
|
+
| `iteration` | integer | Current iteration number (1-based) |
|
|
660
|
+
| `max_iterations` | integer | Maximum allowed iterations |
|
|
661
|
+
| `last_error_count` | integer | Number of errors from last check |
|
|
662
|
+
| `last_warning_count` | integer | Number of warnings from last check |
|
|
663
|
+
| `files_modified` | array | List of files modified during loop |
|
|
664
|
+
| `start_time` | float | Unix timestamp when loop started |
|
|
665
|
+
| `completion_reason` | string or null | Reason for completion ("All conditions met", "Max iterations reached", or null) |
|
|
666
|
+
|
|
667
|
+
#### State Transitions
|
|
668
|
+
|
|
669
|
+
```
|
|
670
|
+
Initial State:
|
|
671
|
+
{
|
|
672
|
+
"active": false,
|
|
673
|
+
"iteration": 0,
|
|
674
|
+
...
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
After /moai:loop:
|
|
678
|
+
{
|
|
679
|
+
"active": true,
|
|
680
|
+
"iteration": 1,
|
|
681
|
+
"start_time": <current_timestamp>,
|
|
682
|
+
...
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
During Loop (errors found):
|
|
686
|
+
{
|
|
687
|
+
"active": true,
|
|
688
|
+
"iteration": 2,
|
|
689
|
+
"last_error_count": 3,
|
|
690
|
+
...
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
Completion (success):
|
|
694
|
+
{
|
|
695
|
+
"active": false,
|
|
696
|
+
"completion_reason": "All conditions met"
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
Completion (max iterations):
|
|
700
|
+
{
|
|
701
|
+
"active": false,
|
|
702
|
+
"iteration": 10,
|
|
703
|
+
"completion_reason": "Max iterations reached"
|
|
704
|
+
}
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
---
|
|
708
|
+
|
|
709
|
+
## LSP Configuration
|
|
710
|
+
|
|
711
|
+
### .lsp.json Format
|
|
712
|
+
|
|
713
|
+
Location: `.lsp.json` (project root)
|
|
714
|
+
|
|
715
|
+
#### Schema
|
|
716
|
+
|
|
717
|
+
```json
|
|
718
|
+
{
|
|
719
|
+
"servers": {
|
|
720
|
+
"python": {
|
|
721
|
+
"command": "pyright-langserver",
|
|
722
|
+
"args": ["--stdio"],
|
|
723
|
+
"file_extensions": [".py"],
|
|
724
|
+
"initialization_options": {}
|
|
725
|
+
},
|
|
726
|
+
"typescript": {
|
|
727
|
+
"command": "typescript-language-server",
|
|
728
|
+
"args": ["--stdio"],
|
|
729
|
+
"file_extensions": [".ts", ".tsx", ".js", ".jsx"]
|
|
730
|
+
},
|
|
731
|
+
"go": {
|
|
732
|
+
"command": "gopls",
|
|
733
|
+
"args": ["serve"],
|
|
734
|
+
"file_extensions": [".go"]
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
"global_settings": {
|
|
738
|
+
"timeout_seconds": 30,
|
|
739
|
+
"retry_attempts": 3
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
#### Field Descriptions
|
|
745
|
+
|
|
746
|
+
**Server Configuration:**
|
|
747
|
+
|
|
748
|
+
- `command`: LSP server command (must be in PATH)
|
|
749
|
+
- `args`: Command-line arguments
|
|
750
|
+
- `file_extensions`: File extensions this server handles
|
|
751
|
+
- `initialization_options`: Server-specific initialization options (optional)
|
|
752
|
+
|
|
753
|
+
**Global Settings:**
|
|
754
|
+
|
|
755
|
+
- `timeout_seconds`: Default timeout for LSP operations
|
|
756
|
+
- `retry_attempts`: Number of retry attempts on failure
|
|
757
|
+
|
|
758
|
+
#### Supported Language Servers
|
|
759
|
+
|
|
760
|
+
| Language | Server | Command | Installation |
|
|
761
|
+
| --------------------- | ------------- | ------------------------------------ | -------------------------------------------- |
|
|
762
|
+
| Python | Pyright | `pyright-langserver --stdio` | `npm install -g pyright` |
|
|
763
|
+
| Python | pylsp | `pylsp` | `pip install python-lsp-server` |
|
|
764
|
+
| TypeScript/JavaScript | tsserver | `typescript-language-server --stdio` | `npm install -g typescript-language-server` |
|
|
765
|
+
| Go | gopls | `gopls serve` | `go install golang.org/x/tools/gopls@latest` |
|
|
766
|
+
| Rust | rust-analyzer | `rust-analyzer` | Via rustup |
|
|
767
|
+
| Java | jdtls | `jdtls` | Via Eclipse JDT LS |
|
|
768
|
+
| C/C++ | clangd | `clangd` | Via LLVM |
|
|
769
|
+
|
|
770
|
+
---
|
|
771
|
+
|
|
772
|
+
## AST-grep Configuration
|
|
773
|
+
|
|
774
|
+
### sgconfig.yml Format
|
|
775
|
+
|
|
776
|
+
Location: `.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml`
|
|
777
|
+
|
|
778
|
+
#### Schema
|
|
779
|
+
|
|
780
|
+
```yaml
|
|
781
|
+
ruleDirs:
|
|
782
|
+
- rules/security
|
|
783
|
+
- rules/quality
|
|
784
|
+
|
|
785
|
+
rules:
|
|
786
|
+
- id: sql-injection
|
|
787
|
+
language: python
|
|
788
|
+
message: Potential SQL injection vulnerability
|
|
789
|
+
severity: error
|
|
790
|
+
pattern: execute($SQL)
|
|
791
|
+
constraints:
|
|
792
|
+
SQL:
|
|
793
|
+
kind: string
|
|
794
|
+
not:
|
|
795
|
+
has:
|
|
796
|
+
kind: identifier
|
|
797
|
+
|
|
798
|
+
- id: xss-vulnerability
|
|
799
|
+
language: typescript
|
|
800
|
+
message: Potential XSS vulnerability
|
|
801
|
+
severity: error
|
|
802
|
+
pattern: innerHTML = $VAR
|
|
803
|
+
constraints:
|
|
804
|
+
VAR:
|
|
805
|
+
not:
|
|
806
|
+
matches: sanitize.*
|
|
807
|
+
|
|
808
|
+
- id: unused-import
|
|
809
|
+
language: python
|
|
810
|
+
message: Unused import statement
|
|
811
|
+
severity: warning
|
|
812
|
+
pattern: import $MODULE
|
|
813
|
+
fix: ""
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
#### Field Descriptions
|
|
817
|
+
|
|
818
|
+
**Top-Level:**
|
|
819
|
+
|
|
820
|
+
- `ruleDirs`: Directories containing additional rule files
|
|
821
|
+
- `rules`: List of rule definitions
|
|
822
|
+
|
|
823
|
+
**Rule Definition:**
|
|
824
|
+
|
|
825
|
+
- `id`: Unique rule identifier
|
|
826
|
+
- `language`: Target language (python, typescript, go, rust, etc.)
|
|
827
|
+
- `message`: Diagnostic message
|
|
828
|
+
- `severity`: Severity level (error, warning, info)
|
|
829
|
+
- `pattern`: AST-grep search pattern
|
|
830
|
+
- `constraints`: Pattern constraints (optional)
|
|
831
|
+
- `fix`: Auto-fix template (optional)
|
|
832
|
+
|
|
833
|
+
#### Pattern Syntax
|
|
834
|
+
|
|
835
|
+
Metavariables:
|
|
836
|
+
|
|
837
|
+
- `$VAR`: Matches any expression
|
|
838
|
+
- `$STMT`: Matches any statement
|
|
839
|
+
- `$FUNC`: Matches function names
|
|
840
|
+
|
|
841
|
+
Constraints:
|
|
842
|
+
|
|
843
|
+
```yaml
|
|
844
|
+
constraints:
|
|
845
|
+
VAR:
|
|
846
|
+
kind: identifier # Match specific AST node type
|
|
847
|
+
matches: ^[A-Z].* # Regex pattern
|
|
848
|
+
has: # Contains pattern
|
|
849
|
+
kind: string
|
|
850
|
+
not: # Negation
|
|
851
|
+
matches: sanitize.*
|
|
852
|
+
```
|
|
853
|
+
|
|
854
|
+
---
|
|
855
|
+
|
|
856
|
+
## Troubleshooting
|
|
857
|
+
|
|
858
|
+
### Common Issues and Solutions
|
|
859
|
+
|
|
860
|
+
#### Loop Not Starting
|
|
861
|
+
|
|
862
|
+
**Symptoms:**
|
|
863
|
+
|
|
864
|
+
- `/moai:loop` command does nothing
|
|
865
|
+
- No loop state file created
|
|
866
|
+
|
|
867
|
+
**Solutions:**
|
|
868
|
+
|
|
869
|
+
1. Check if Ralph is enabled:
|
|
870
|
+
|
|
871
|
+
```yaml
|
|
872
|
+
# .moai/config/sections/ralph.yaml
|
|
873
|
+
ralph:
|
|
874
|
+
enabled: true
|
|
875
|
+
```
|
|
876
|
+
|
|
877
|
+
2. Verify loop controller hook is enabled:
|
|
878
|
+
|
|
879
|
+
```yaml
|
|
880
|
+
ralph:
|
|
881
|
+
hooks:
|
|
882
|
+
stop_loop_controller:
|
|
883
|
+
enabled: true
|
|
884
|
+
```
|
|
885
|
+
|
|
886
|
+
3. Check environment variable:
|
|
887
|
+
|
|
888
|
+
```bash
|
|
889
|
+
unset MOAI_DISABLE_LOOP_CONTROLLER
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
4. Verify state file is writable:
|
|
893
|
+
```bash
|
|
894
|
+
mkdir -p .moai/cache
|
|
895
|
+
chmod 755 .moai/cache
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
---
|
|
899
|
+
|
|
900
|
+
#### LSP Diagnostics Missing
|
|
901
|
+
|
|
902
|
+
**Symptoms:**
|
|
903
|
+
|
|
904
|
+
- No diagnostics after Write/Edit
|
|
905
|
+
- Hook exits with code 0 immediately
|
|
906
|
+
|
|
907
|
+
**Solutions:**
|
|
908
|
+
|
|
909
|
+
1. Check if LSP hook is enabled:
|
|
910
|
+
|
|
911
|
+
```yaml
|
|
912
|
+
ralph:
|
|
913
|
+
hooks:
|
|
914
|
+
post_tool_lsp:
|
|
915
|
+
enabled: true
|
|
916
|
+
```
|
|
917
|
+
|
|
918
|
+
2. Verify language server is installed:
|
|
919
|
+
|
|
920
|
+
```bash
|
|
921
|
+
# Python
|
|
922
|
+
which pyright-langserver
|
|
923
|
+
pip install pyright
|
|
924
|
+
|
|
925
|
+
# TypeScript
|
|
926
|
+
which typescript-language-server
|
|
927
|
+
npm install -g typescript-language-server
|
|
928
|
+
```
|
|
929
|
+
|
|
930
|
+
3. Check .lsp.json configuration:
|
|
931
|
+
|
|
932
|
+
```json
|
|
933
|
+
{
|
|
934
|
+
"servers": {
|
|
935
|
+
"python": {
|
|
936
|
+
"command": "pyright-langserver",
|
|
937
|
+
"args": ["--stdio"]
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
```
|
|
942
|
+
|
|
943
|
+
4. Check environment variable:
|
|
944
|
+
|
|
945
|
+
```bash
|
|
946
|
+
unset MOAI_DISABLE_LSP_DIAGNOSTIC
|
|
947
|
+
```
|
|
948
|
+
|
|
949
|
+
5. Enable graceful degradation to use fallback linters:
|
|
950
|
+
```yaml
|
|
951
|
+
ralph:
|
|
952
|
+
lsp:
|
|
953
|
+
graceful_degradation: true
|
|
954
|
+
```
|
|
955
|
+
|
|
956
|
+
---
|
|
957
|
+
|
|
958
|
+
#### Loop Stuck/Infinite Loop
|
|
959
|
+
|
|
960
|
+
**Symptoms:**
|
|
961
|
+
|
|
962
|
+
- Loop continues past max_iterations
|
|
963
|
+
- Never reaches completion
|
|
964
|
+
|
|
965
|
+
**Solutions:**
|
|
966
|
+
|
|
967
|
+
1. Check max_iterations setting:
|
|
968
|
+
|
|
969
|
+
```yaml
|
|
970
|
+
ralph:
|
|
971
|
+
loop:
|
|
972
|
+
max_iterations: 10 # Increase if needed
|
|
973
|
+
```
|
|
974
|
+
|
|
975
|
+
2. Review completion conditions:
|
|
976
|
+
|
|
977
|
+
```yaml
|
|
978
|
+
ralph:
|
|
979
|
+
loop:
|
|
980
|
+
completion:
|
|
981
|
+
zero_errors: true
|
|
982
|
+
zero_warnings: false # Set to false to allow warnings
|
|
983
|
+
tests_pass: true
|
|
984
|
+
coverage_threshold: 85 # Set to 0 to disable
|
|
985
|
+
```
|
|
986
|
+
|
|
987
|
+
3. Manually cancel loop:
|
|
988
|
+
|
|
989
|
+
```bash
|
|
990
|
+
/moai:cancel-loop
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
4. Delete state file:
|
|
994
|
+
```bash
|
|
995
|
+
rm .moai/cache/.moai_loop_state.json
|
|
996
|
+
```
|
|
997
|
+
|
|
998
|
+
---
|
|
999
|
+
|
|
1000
|
+
#### Tests Not Detected
|
|
1001
|
+
|
|
1002
|
+
**Symptoms:**
|
|
1003
|
+
|
|
1004
|
+
- "No test framework detected" message
|
|
1005
|
+
- tests_pass always true
|
|
1006
|
+
|
|
1007
|
+
**Solutions:**
|
|
1008
|
+
|
|
1009
|
+
1. Ensure test framework is installed:
|
|
1010
|
+
|
|
1011
|
+
```bash
|
|
1012
|
+
# Python
|
|
1013
|
+
pip install pytest
|
|
1014
|
+
|
|
1015
|
+
# JavaScript/TypeScript
|
|
1016
|
+
npm install --save-dev jest
|
|
1017
|
+
```
|
|
1018
|
+
|
|
1019
|
+
2. Verify test configuration exists:
|
|
1020
|
+
|
|
1021
|
+
```bash
|
|
1022
|
+
# Python
|
|
1023
|
+
ls pyproject.toml pytest.ini
|
|
1024
|
+
|
|
1025
|
+
# JavaScript
|
|
1026
|
+
ls package.json
|
|
1027
|
+
```
|
|
1028
|
+
|
|
1029
|
+
3. Check if tests can run manually:
|
|
1030
|
+
|
|
1031
|
+
```bash
|
|
1032
|
+
# Python
|
|
1033
|
+
pytest
|
|
1034
|
+
|
|
1035
|
+
# JavaScript
|
|
1036
|
+
npm test
|
|
1037
|
+
```
|
|
1038
|
+
|
|
1039
|
+
---
|
|
1040
|
+
|
|
1041
|
+
#### Coverage Not Reported
|
|
1042
|
+
|
|
1043
|
+
**Symptoms:**
|
|
1044
|
+
|
|
1045
|
+
- Coverage shows -1.0 or missing
|
|
1046
|
+
- coverage_met always true
|
|
1047
|
+
|
|
1048
|
+
**Solutions:**
|
|
1049
|
+
|
|
1050
|
+
1. Install coverage tool:
|
|
1051
|
+
|
|
1052
|
+
```bash
|
|
1053
|
+
# Python
|
|
1054
|
+
pip install pytest-cov
|
|
1055
|
+
|
|
1056
|
+
# JavaScript
|
|
1057
|
+
npm install --save-dev @coverage/jest
|
|
1058
|
+
```
|
|
1059
|
+
|
|
1060
|
+
2. Generate coverage report:
|
|
1061
|
+
|
|
1062
|
+
```bash
|
|
1063
|
+
# Python
|
|
1064
|
+
pytest --cov --cov-report=json
|
|
1065
|
+
|
|
1066
|
+
# JavaScript
|
|
1067
|
+
npm test -- --coverage --coverageReporters=json
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
3. Verify coverage file exists:
|
|
1071
|
+
|
|
1072
|
+
```bash
|
|
1073
|
+
ls coverage.json coverage.xml
|
|
1074
|
+
```
|
|
1075
|
+
|
|
1076
|
+
4. Disable coverage requirement:
|
|
1077
|
+
```yaml
|
|
1078
|
+
ralph:
|
|
1079
|
+
loop:
|
|
1080
|
+
completion:
|
|
1081
|
+
coverage_threshold: 0
|
|
1082
|
+
```
|
|
1083
|
+
|
|
1084
|
+
---
|
|
1085
|
+
|
|
1086
|
+
#### AST-grep Not Running
|
|
1087
|
+
|
|
1088
|
+
**Symptoms:**
|
|
1089
|
+
|
|
1090
|
+
- No security/quality warnings
|
|
1091
|
+
- ast_grep diagnostics missing
|
|
1092
|
+
|
|
1093
|
+
**Solutions:**
|
|
1094
|
+
|
|
1095
|
+
1. Check if AST-grep is enabled:
|
|
1096
|
+
|
|
1097
|
+
```yaml
|
|
1098
|
+
ralph:
|
|
1099
|
+
ast_grep:
|
|
1100
|
+
enabled: true
|
|
1101
|
+
```
|
|
1102
|
+
|
|
1103
|
+
2. Verify ast-grep is installed:
|
|
1104
|
+
|
|
1105
|
+
```bash
|
|
1106
|
+
which sg
|
|
1107
|
+
cargo install ast-grep
|
|
1108
|
+
```
|
|
1109
|
+
|
|
1110
|
+
3. Check configuration file exists:
|
|
1111
|
+
|
|
1112
|
+
```bash
|
|
1113
|
+
ls .claude/skills/moai-tool-ast-grep/rules/sgconfig.yml
|
|
1114
|
+
```
|
|
1115
|
+
|
|
1116
|
+
4. Test ast-grep manually:
|
|
1117
|
+
```bash
|
|
1118
|
+
sg scan --config sgconfig.yml
|
|
1119
|
+
```
|
|
1120
|
+
|
|
1121
|
+
---
|
|
1122
|
+
|
|
1123
|
+
#### Graceful Degradation Not Working
|
|
1124
|
+
|
|
1125
|
+
**Symptoms:**
|
|
1126
|
+
|
|
1127
|
+
- Hook fails when LSP unavailable
|
|
1128
|
+
- No fallback to linters
|
|
1129
|
+
|
|
1130
|
+
**Solutions:**
|
|
1131
|
+
|
|
1132
|
+
1. Enable graceful degradation:
|
|
1133
|
+
|
|
1134
|
+
```yaml
|
|
1135
|
+
ralph:
|
|
1136
|
+
lsp:
|
|
1137
|
+
graceful_degradation: true
|
|
1138
|
+
```
|
|
1139
|
+
|
|
1140
|
+
2. Ensure fallback linters are installed:
|
|
1141
|
+
|
|
1142
|
+
```bash
|
|
1143
|
+
# Python
|
|
1144
|
+
pip install ruff
|
|
1145
|
+
|
|
1146
|
+
# JavaScript
|
|
1147
|
+
npm install -g eslint
|
|
1148
|
+
|
|
1149
|
+
# Go
|
|
1150
|
+
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
1151
|
+
```
|
|
1152
|
+
|
|
1153
|
+
3. Check linter configuration:
|
|
1154
|
+
|
|
1155
|
+
```bash
|
|
1156
|
+
# Python
|
|
1157
|
+
ls ruff.toml pyproject.toml
|
|
1158
|
+
|
|
1159
|
+
# JavaScript
|
|
1160
|
+
ls .eslintrc.js .eslintrc.json
|
|
1161
|
+
```
|
|
1162
|
+
|
|
1163
|
+
---
|
|
1164
|
+
|
|
1165
|
+
### Performance Optimization
|
|
1166
|
+
|
|
1167
|
+
#### Reduce LSP Timeout
|
|
1168
|
+
|
|
1169
|
+
For faster feedback in CI/CD:
|
|
1170
|
+
|
|
1171
|
+
```yaml
|
|
1172
|
+
ralph:
|
|
1173
|
+
lsp:
|
|
1174
|
+
timeout_seconds: 15
|
|
1175
|
+
poll_interval_ms: 250
|
|
1176
|
+
```
|
|
1177
|
+
|
|
1178
|
+
#### Disable Expensive Checks
|
|
1179
|
+
|
|
1180
|
+
For rapid iteration:
|
|
1181
|
+
|
|
1182
|
+
```yaml
|
|
1183
|
+
ralph:
|
|
1184
|
+
loop:
|
|
1185
|
+
completion:
|
|
1186
|
+
zero_errors: true
|
|
1187
|
+
zero_warnings: false
|
|
1188
|
+
tests_pass: false # Disable for faster loops
|
|
1189
|
+
coverage_threshold: 0 # Disable coverage check
|
|
1190
|
+
```
|
|
1191
|
+
|
|
1192
|
+
#### Use Specific Severity Threshold
|
|
1193
|
+
|
|
1194
|
+
Only report errors, not warnings:
|
|
1195
|
+
|
|
1196
|
+
```yaml
|
|
1197
|
+
ralph:
|
|
1198
|
+
hooks:
|
|
1199
|
+
post_tool_lsp:
|
|
1200
|
+
severity_threshold: "error"
|
|
1201
|
+
```
|
|
1202
|
+
|
|
1203
|
+
---
|
|
1204
|
+
|
|
1205
|
+
## Advanced Configuration Examples
|
|
1206
|
+
|
|
1207
|
+
### CI/CD Integration
|
|
1208
|
+
|
|
1209
|
+
GitHub Actions workflow with Ralph:
|
|
1210
|
+
|
|
1211
|
+
```yaml
|
|
1212
|
+
name: Ralph Auto-Fix
|
|
1213
|
+
|
|
1214
|
+
on:
|
|
1215
|
+
pull_request:
|
|
1216
|
+
types: [opened, synchronize]
|
|
1217
|
+
|
|
1218
|
+
jobs:
|
|
1219
|
+
ralph-fix:
|
|
1220
|
+
runs-on: ubuntu-latest
|
|
1221
|
+
steps:
|
|
1222
|
+
- uses: actions/checkout@v4
|
|
1223
|
+
|
|
1224
|
+
- name: Setup Python
|
|
1225
|
+
uses: actions/setup-python@v4
|
|
1226
|
+
with:
|
|
1227
|
+
python-version: "3.13"
|
|
1228
|
+
|
|
1229
|
+
- name: Install dependencies
|
|
1230
|
+
run: |
|
|
1231
|
+
pip install -r requirements.txt
|
|
1232
|
+
npm install -g pyright
|
|
1233
|
+
|
|
1234
|
+
- name: Run Ralph Loop
|
|
1235
|
+
run: |
|
|
1236
|
+
export MOAI_LOOP_ACTIVE=1
|
|
1237
|
+
export MOAI_LOOP_ITERATION=0
|
|
1238
|
+
claude -p "/moai:loop --max-iterations 5" \
|
|
1239
|
+
--allowedTools "Read,Write,Edit,Bash,Grep,Glob"
|
|
1240
|
+
|
|
1241
|
+
- name: Commit fixes
|
|
1242
|
+
if: success()
|
|
1243
|
+
run: |
|
|
1244
|
+
git config user.name "Ralph Bot"
|
|
1245
|
+
git config user.email "ralph@moai-adk.dev"
|
|
1246
|
+
git add .
|
|
1247
|
+
git commit -m "fix: Auto-fixes from Ralph Engine" || true
|
|
1248
|
+
git push
|
|
1249
|
+
```
|
|
1250
|
+
|
|
1251
|
+
---
|
|
1252
|
+
|
|
1253
|
+
### Multi-Language Project
|
|
1254
|
+
|
|
1255
|
+
Configuration for projects with multiple languages:
|
|
1256
|
+
|
|
1257
|
+
```json
|
|
1258
|
+
{
|
|
1259
|
+
"servers": {
|
|
1260
|
+
"python": {
|
|
1261
|
+
"command": "pyright-langserver",
|
|
1262
|
+
"args": ["--stdio"],
|
|
1263
|
+
"file_extensions": [".py"]
|
|
1264
|
+
},
|
|
1265
|
+
"typescript": {
|
|
1266
|
+
"command": "typescript-language-server",
|
|
1267
|
+
"args": ["--stdio"],
|
|
1268
|
+
"file_extensions": [".ts", ".tsx", ".js", ".jsx"]
|
|
1269
|
+
},
|
|
1270
|
+
"go": {
|
|
1271
|
+
"command": "gopls",
|
|
1272
|
+
"args": ["serve"],
|
|
1273
|
+
"file_extensions": [".go"]
|
|
1274
|
+
},
|
|
1275
|
+
"rust": {
|
|
1276
|
+
"command": "rust-analyzer",
|
|
1277
|
+
"args": [],
|
|
1278
|
+
"file_extensions": [".rs"]
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
```
|
|
1283
|
+
|
|
1284
|
+
---
|
|
1285
|
+
|
|
1286
|
+
### Custom Completion Conditions
|
|
1287
|
+
|
|
1288
|
+
Extend the loop controller for project-specific checks:
|
|
1289
|
+
|
|
1290
|
+
```python
|
|
1291
|
+
# .claude/hooks/moai/custom_completion_check.py
|
|
1292
|
+
def check_custom_conditions() -> bool:
|
|
1293
|
+
"""Add project-specific completion checks."""
|
|
1294
|
+
# Example 1: Check for TODO comments
|
|
1295
|
+
todos = count_todo_comments()
|
|
1296
|
+
if todos > 0:
|
|
1297
|
+
return False
|
|
1298
|
+
|
|
1299
|
+
# Example 2: Check for print statements in production code
|
|
1300
|
+
prints = find_debug_prints()
|
|
1301
|
+
if prints:
|
|
1302
|
+
return False
|
|
1303
|
+
|
|
1304
|
+
# Example 3: Verify API schema validity
|
|
1305
|
+
if not validate_openapi_schema():
|
|
1306
|
+
return False
|
|
1307
|
+
|
|
1308
|
+
return True
|
|
1309
|
+
```
|
|
1310
|
+
|
|
1311
|
+
Register in ralph.yaml:
|
|
1312
|
+
|
|
1313
|
+
```yaml
|
|
1314
|
+
ralph:
|
|
1315
|
+
loop:
|
|
1316
|
+
completion:
|
|
1317
|
+
custom_checks:
|
|
1318
|
+
- .claude/hooks/moai/custom_completion_check.py
|
|
1319
|
+
```
|
|
1320
|
+
|
|
1321
|
+
---
|
|
1322
|
+
|
|
1323
|
+
### Language-Specific AST-grep Rules
|
|
1324
|
+
|
|
1325
|
+
Python security rules:
|
|
1326
|
+
|
|
1327
|
+
```yaml
|
|
1328
|
+
# rules/python-security.yml
|
|
1329
|
+
rules:
|
|
1330
|
+
- id: eval-usage
|
|
1331
|
+
language: python
|
|
1332
|
+
message: Use of eval() is dangerous
|
|
1333
|
+
severity: error
|
|
1334
|
+
pattern: eval($EXPR)
|
|
1335
|
+
fix: "ast.literal_eval($EXPR)"
|
|
1336
|
+
|
|
1337
|
+
- id: pickle-load
|
|
1338
|
+
language: python
|
|
1339
|
+
message: Pickle deserialization vulnerability
|
|
1340
|
+
severity: error
|
|
1341
|
+
pattern: pickle.load($FILE)
|
|
1342
|
+
note: "Use safer serialization formats like JSON"
|
|
1343
|
+
|
|
1344
|
+
- id: hardcoded-password
|
|
1345
|
+
language: python
|
|
1346
|
+
message: Hardcoded password detected
|
|
1347
|
+
severity: error
|
|
1348
|
+
pattern: password = $VALUE
|
|
1349
|
+
constraints:
|
|
1350
|
+
VALUE:
|
|
1351
|
+
kind: string
|
|
1352
|
+
matches: ".{8,}"
|
|
1353
|
+
```
|
|
1354
|
+
|
|
1355
|
+
TypeScript security rules:
|
|
1356
|
+
|
|
1357
|
+
```yaml
|
|
1358
|
+
# rules/typescript-security.yml
|
|
1359
|
+
rules:
|
|
1360
|
+
- id: dangerous-html
|
|
1361
|
+
language: typescript
|
|
1362
|
+
message: Dangerous innerHTML assignment
|
|
1363
|
+
severity: error
|
|
1364
|
+
pattern: $EL.innerHTML = $VAR
|
|
1365
|
+
constraints:
|
|
1366
|
+
VAR:
|
|
1367
|
+
not:
|
|
1368
|
+
matches: sanitize.*
|
|
1369
|
+
|
|
1370
|
+
- id: eval-usage
|
|
1371
|
+
language: typescript
|
|
1372
|
+
message: Use of eval() is dangerous
|
|
1373
|
+
severity: error
|
|
1374
|
+
pattern: eval($CODE)
|
|
1375
|
+
|
|
1376
|
+
- id: weak-crypto
|
|
1377
|
+
language: typescript
|
|
1378
|
+
message: Weak cryptographic algorithm
|
|
1379
|
+
severity: warning
|
|
1380
|
+
pattern: crypto.createHash($ALG)
|
|
1381
|
+
constraints:
|
|
1382
|
+
ALG:
|
|
1383
|
+
kind: string
|
|
1384
|
+
matches: (md5|sha1)
|
|
1385
|
+
```
|
|
1386
|
+
|
|
1387
|
+
---
|
|
1388
|
+
|
|
1389
|
+
## Performance Metrics
|
|
1390
|
+
|
|
1391
|
+
### Typical Operation Times
|
|
1392
|
+
|
|
1393
|
+
| Operation | Average Time | Notes |
|
|
1394
|
+
| ----------------------------- | ------------ | ------------------------------- |
|
|
1395
|
+
| LSP diagnostics (single file) | 100-500ms | Depends on file size and server |
|
|
1396
|
+
| AST-grep scan (project) | 500ms-2s | Depends on project size |
|
|
1397
|
+
| Test execution | 2-30s | Depends on test count |
|
|
1398
|
+
| Coverage generation | 3-15s | Depends on project size |
|
|
1399
|
+
| Loop iteration (complete) | 5-60s | Sum of all checks |
|
|
1400
|
+
|
|
1401
|
+
### Resource Usage
|
|
1402
|
+
|
|
1403
|
+
| Component | Memory | CPU | Disk |
|
|
1404
|
+
| -------------------- | ---------- | ------ | ------------------ |
|
|
1405
|
+
| LSP Client | ~50MB | Low | None |
|
|
1406
|
+
| LSP Server (pyright) | ~100-300MB | Medium | None |
|
|
1407
|
+
| AST-grep | ~20-50MB | Medium | None |
|
|
1408
|
+
| Loop Controller | ~10MB | Low | < 1KB (state file) |
|
|
1409
|
+
|
|
1410
|
+
---
|
|
1411
|
+
|
|
1412
|
+
Last Updated: 2026-01-10
|
|
1413
|
+
Version: 1.0.0
|
|
1414
|
+
Specification: LSP 3.17, AST-grep 0.20+
|