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,376 @@
|
|
|
1
|
+
# type: ignore
|
|
2
|
+
"""
|
|
3
|
+
Statusline configuration loader for Claude Code
|
|
4
|
+
|
|
5
|
+
Loads and manages statusline configuration from .moai/config/statusline-config.yaml
|
|
6
|
+
|
|
7
|
+
Performance: Thread-safe singleton with double-checked locking pattern
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import logging
|
|
11
|
+
import threading
|
|
12
|
+
from dataclasses import dataclass
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Any, Dict, Optional
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class CacheConfig:
|
|
21
|
+
"""Cache TTL configuration"""
|
|
22
|
+
|
|
23
|
+
git_ttl_seconds: int = 5
|
|
24
|
+
metrics_ttl_seconds: int = 10
|
|
25
|
+
alfred_ttl_seconds: int = 1
|
|
26
|
+
todo_ttl_seconds: int = 3
|
|
27
|
+
memory_ttl_seconds: int = 5
|
|
28
|
+
output_style_ttl_seconds: int = 60
|
|
29
|
+
version_ttl_seconds: int = 60
|
|
30
|
+
update_ttl_seconds: int = 300
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class ColorConfig:
|
|
35
|
+
"""Color configuration"""
|
|
36
|
+
|
|
37
|
+
enabled: bool = True
|
|
38
|
+
theme: str = "auto" # auto | light | dark | high-contrast
|
|
39
|
+
palette: Dict[str, str] = None
|
|
40
|
+
|
|
41
|
+
def __post_init__(self):
|
|
42
|
+
if self.palette is None:
|
|
43
|
+
self.palette = {
|
|
44
|
+
"model": "38;5;33", # Blue
|
|
45
|
+
"output_style": "38;5;219", # Pink/Magenta
|
|
46
|
+
"feature_branch": "38;5;226", # Yellow
|
|
47
|
+
"develop_branch": "38;5;51", # Cyan
|
|
48
|
+
"main_branch": "38;5;46", # Green
|
|
49
|
+
"staged": "38;5;46", # Green
|
|
50
|
+
"modified": "38;5;208", # Orange
|
|
51
|
+
"untracked": "38;5;196", # Red
|
|
52
|
+
"update_available": "38;5;208", # Orange
|
|
53
|
+
"memory_usage": "38;5;172", # Brown/Orange
|
|
54
|
+
"duration": "38;5;240", # Gray
|
|
55
|
+
"todo_count": "38;5;123", # Purple
|
|
56
|
+
"separator": "38;5;250", # Light Gray
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@dataclass
|
|
61
|
+
class DisplayConfig:
|
|
62
|
+
"""Information display settings - Custom ordered status bar"""
|
|
63
|
+
|
|
64
|
+
model: bool = True # 🤖 Model name (glm-4.6, claude-3.5-sonnet, etc.)
|
|
65
|
+
version: bool = True # 🗿 MoAI-ADK version (0.23.0, etc.)
|
|
66
|
+
output_style: bool = True # ✍️ Output style (Explanatory, Concise, etc.)
|
|
67
|
+
memory_usage: bool = True # 💾 Session memory usage
|
|
68
|
+
todo_count: bool = True # 📋 Active TODO items count
|
|
69
|
+
branch: bool = True # 🔀 Git branch
|
|
70
|
+
git_status: bool = True # ✅2 M1 ?10 Git changes status
|
|
71
|
+
duration: bool = True # ⏱️ Session elapsed time
|
|
72
|
+
directory: bool = True # 📁 Project name/directory
|
|
73
|
+
active_task: bool = True # 🎯 Alfred active task
|
|
74
|
+
update_indicator: bool = True # 🔄 Update notification
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@dataclass
|
|
78
|
+
class FormatConfig:
|
|
79
|
+
"""Format configuration"""
|
|
80
|
+
|
|
81
|
+
max_branch_length: int = 20
|
|
82
|
+
truncate_with: str = "..."
|
|
83
|
+
separator: str = " | "
|
|
84
|
+
|
|
85
|
+
# Icon configuration for better visual recognition
|
|
86
|
+
icons: Dict[str, str] = None
|
|
87
|
+
|
|
88
|
+
def __post_init__(self):
|
|
89
|
+
if self.icons is None:
|
|
90
|
+
self.icons = {
|
|
91
|
+
"git": "🔀", # Git branch icon (more intuitive than 📊)
|
|
92
|
+
"staged": "✅", # Staged files
|
|
93
|
+
"modified": "📝", # Modified files
|
|
94
|
+
"untracked": "❓", # Untracked files
|
|
95
|
+
"added": "➕", # Added files
|
|
96
|
+
"deleted": "➖", # Deleted files
|
|
97
|
+
"renamed": "🔄", # Renamed files
|
|
98
|
+
"conflict": "⚠️", # Conflict files
|
|
99
|
+
"model": "🤖", # AI model
|
|
100
|
+
"output_style": "✍️", # Writing style
|
|
101
|
+
"duration": "⏱️", # Time duration
|
|
102
|
+
"memory": "💾", # Memory usage
|
|
103
|
+
"todo": "📋", # TODO items
|
|
104
|
+
"update": "🔄", # Update available
|
|
105
|
+
"project": "📁", # Project directory
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@dataclass
|
|
110
|
+
class ErrorHandlingConfig:
|
|
111
|
+
"""Error handling configuration"""
|
|
112
|
+
|
|
113
|
+
graceful_degradation: bool = True
|
|
114
|
+
log_level: str = "warning" # warning | error
|
|
115
|
+
fallback_text: str = ""
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class StatuslineConfig:
|
|
119
|
+
"""
|
|
120
|
+
Thread-safe singleton configuration loader for statusline
|
|
121
|
+
|
|
122
|
+
Loads configuration from .moai/config/statusline-config.yaml
|
|
123
|
+
Falls back to default values if file not found or parsing fails
|
|
124
|
+
|
|
125
|
+
Performance: Double-checked locking pattern for thread safety
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
_instance: Optional["StatuslineConfig"] = None
|
|
129
|
+
_config: Dict[str, Any] = {}
|
|
130
|
+
_lock = threading.Lock() # Thread-safe singleton lock
|
|
131
|
+
|
|
132
|
+
def __new__(cls):
|
|
133
|
+
# Double-checked locking pattern for thread-safe singleton
|
|
134
|
+
if cls._instance is None:
|
|
135
|
+
with cls._lock:
|
|
136
|
+
# Double-check after acquiring lock
|
|
137
|
+
if cls._instance is None:
|
|
138
|
+
cls._instance = super().__new__(cls)
|
|
139
|
+
cls._instance._load_config()
|
|
140
|
+
return cls._instance
|
|
141
|
+
|
|
142
|
+
def _load_config(self) -> None:
|
|
143
|
+
"""Load configuration from YAML file"""
|
|
144
|
+
config_path = self._find_config_file()
|
|
145
|
+
|
|
146
|
+
if config_path and config_path.exists():
|
|
147
|
+
try:
|
|
148
|
+
self._config = self._parse_yaml(config_path)
|
|
149
|
+
logger.debug(f"Loaded statusline config from {config_path}")
|
|
150
|
+
except Exception as e:
|
|
151
|
+
logger.warning(f"Failed to load config from {config_path}: {e}")
|
|
152
|
+
self._config = self._get_default_config()
|
|
153
|
+
else:
|
|
154
|
+
logger.debug("Statusline config file not found, using defaults")
|
|
155
|
+
self._config = self._get_default_config()
|
|
156
|
+
|
|
157
|
+
@staticmethod
|
|
158
|
+
def _find_config_file() -> Optional[Path]:
|
|
159
|
+
"""
|
|
160
|
+
Find statusline config file starting from current directory up to project root
|
|
161
|
+
|
|
162
|
+
Returns:
|
|
163
|
+
Path to config file or None if not found
|
|
164
|
+
"""
|
|
165
|
+
# Try common locations
|
|
166
|
+
locations = [
|
|
167
|
+
Path.cwd() / ".moai" / "config" / "statusline-config.yaml",
|
|
168
|
+
Path.cwd() / ".moai" / "config" / "statusline-config.yml",
|
|
169
|
+
Path.home() / ".moai" / "config" / "statusline-config.yaml",
|
|
170
|
+
]
|
|
171
|
+
|
|
172
|
+
for path in locations:
|
|
173
|
+
if path.exists():
|
|
174
|
+
return path
|
|
175
|
+
|
|
176
|
+
return None
|
|
177
|
+
|
|
178
|
+
@staticmethod
|
|
179
|
+
def _parse_yaml(path: Path) -> Dict[str, Any]:
|
|
180
|
+
"""
|
|
181
|
+
Parse YAML file
|
|
182
|
+
|
|
183
|
+
Args:
|
|
184
|
+
path: Path to YAML file
|
|
185
|
+
|
|
186
|
+
Returns:
|
|
187
|
+
Parsed configuration dictionary
|
|
188
|
+
"""
|
|
189
|
+
try:
|
|
190
|
+
import yaml
|
|
191
|
+
|
|
192
|
+
with open(path, "r", encoding="utf-8") as f:
|
|
193
|
+
data = yaml.safe_load(f)
|
|
194
|
+
return data or {}
|
|
195
|
+
except ImportError:
|
|
196
|
+
logger.debug("PyYAML not available, attempting JSON fallback")
|
|
197
|
+
return StatuslineConfig._parse_json_fallback(path)
|
|
198
|
+
|
|
199
|
+
@staticmethod
|
|
200
|
+
def _parse_json_fallback(path: Path) -> Dict[str, Any]:
|
|
201
|
+
"""
|
|
202
|
+
Parse YAML as JSON fallback (limited support)
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
path: Path to file
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
Parsed configuration dictionary
|
|
209
|
+
"""
|
|
210
|
+
import json
|
|
211
|
+
|
|
212
|
+
try:
|
|
213
|
+
with open(path, "r", encoding="utf-8") as f:
|
|
214
|
+
return json.load(f)
|
|
215
|
+
except Exception as e:
|
|
216
|
+
logger.debug(f"JSON fallback failed: {e}")
|
|
217
|
+
return {}
|
|
218
|
+
|
|
219
|
+
@staticmethod
|
|
220
|
+
def _get_default_config() -> Dict[str, Any]:
|
|
221
|
+
"""
|
|
222
|
+
Get default configuration
|
|
223
|
+
|
|
224
|
+
Returns:
|
|
225
|
+
Default configuration dictionary
|
|
226
|
+
"""
|
|
227
|
+
return {
|
|
228
|
+
"statusline": {
|
|
229
|
+
"enabled": True,
|
|
230
|
+
"mode": "extended",
|
|
231
|
+
"refresh_interval_ms": 300,
|
|
232
|
+
"colors": {
|
|
233
|
+
"enabled": True,
|
|
234
|
+
"theme": "auto",
|
|
235
|
+
"palette": {
|
|
236
|
+
"model": "38;5;33",
|
|
237
|
+
"feature_branch": "38;5;226",
|
|
238
|
+
"develop_branch": "38;5;51",
|
|
239
|
+
"main_branch": "38;5;46",
|
|
240
|
+
"staged": "38;5;46",
|
|
241
|
+
"modified": "38;5;208",
|
|
242
|
+
"untracked": "38;5;196",
|
|
243
|
+
"update_available": "38;5;208",
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
"cache": {
|
|
247
|
+
"git_ttl_seconds": 5,
|
|
248
|
+
"metrics_ttl_seconds": 10,
|
|
249
|
+
"alfred_ttl_seconds": 1,
|
|
250
|
+
"todo_ttl_seconds": 3,
|
|
251
|
+
"memory_ttl_seconds": 5,
|
|
252
|
+
"output_style_ttl_seconds": 60,
|
|
253
|
+
"version_ttl_seconds": 60,
|
|
254
|
+
"update_ttl_seconds": 300,
|
|
255
|
+
},
|
|
256
|
+
"display": {
|
|
257
|
+
"model": True, # 🤖 Model name (glm-4.6, claude-3.5-sonnet, etc.)
|
|
258
|
+
"version": True, # 🗿 MoAI-ADK version (0.23.0, etc.)
|
|
259
|
+
"output_style": True, # ✍️ Output style (Explanatory, Concise, etc.)
|
|
260
|
+
"memory_usage": True, # 💾 Session memory usage
|
|
261
|
+
"todo_count": True, # 📋 Active TODO items count
|
|
262
|
+
"branch": True, # 🔀 Git branch
|
|
263
|
+
"git_status": True, # ✅2 M1 ?10 Git changes status
|
|
264
|
+
"duration": True, # ⏱️ Session elapsed time
|
|
265
|
+
"directory": True, # 📁 Project name/directory
|
|
266
|
+
"active_task": True, # 🎯 Alfred active task
|
|
267
|
+
"update_indicator": True, # 🔄 Update notification
|
|
268
|
+
},
|
|
269
|
+
"error_handling": {
|
|
270
|
+
"graceful_degradation": True,
|
|
271
|
+
"log_level": "warning",
|
|
272
|
+
"fallback_text": "",
|
|
273
|
+
},
|
|
274
|
+
"format": {
|
|
275
|
+
"max_branch_length": 20,
|
|
276
|
+
"truncate_with": "...",
|
|
277
|
+
"separator": " | ",
|
|
278
|
+
"icons": {
|
|
279
|
+
"git": "🔀", # Git branch icon (more intuitive than 📊)
|
|
280
|
+
"staged": "✅", # Staged files
|
|
281
|
+
"modified": "📝", # Modified files
|
|
282
|
+
"untracked": "❓", # Untracked files
|
|
283
|
+
"added": "➕", # Added files
|
|
284
|
+
"deleted": "➖", # Deleted files
|
|
285
|
+
"renamed": "🔄", # Renamed files
|
|
286
|
+
"conflict": "⚠️", # Conflict files
|
|
287
|
+
"model": "🤖", # AI model
|
|
288
|
+
"output_style": "✍️", # Writing style
|
|
289
|
+
"duration": "⏱️", # Time duration
|
|
290
|
+
"memory": "💾", # Memory usage
|
|
291
|
+
"todo": "📋", # TODO items
|
|
292
|
+
"update": "🔄", # Update available
|
|
293
|
+
"project": "📁", # Project directory
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
def get(self, key: str, default: Any = None) -> Any:
|
|
300
|
+
"""
|
|
301
|
+
Get configuration value by dot-notation key
|
|
302
|
+
|
|
303
|
+
Args:
|
|
304
|
+
key: Configuration key (e.g., "statusline.mode", "statusline.cache.git_ttl_seconds")
|
|
305
|
+
default: Default value if key not found
|
|
306
|
+
|
|
307
|
+
Returns:
|
|
308
|
+
Configuration value or default
|
|
309
|
+
"""
|
|
310
|
+
keys = key.split(".")
|
|
311
|
+
value = self._config
|
|
312
|
+
|
|
313
|
+
for k in keys:
|
|
314
|
+
if isinstance(value, dict):
|
|
315
|
+
value = value.get(k)
|
|
316
|
+
if value is None:
|
|
317
|
+
return default
|
|
318
|
+
else:
|
|
319
|
+
return default
|
|
320
|
+
|
|
321
|
+
return value if value is not None else default
|
|
322
|
+
|
|
323
|
+
def get_cache_config(self) -> CacheConfig:
|
|
324
|
+
"""Get cache configuration"""
|
|
325
|
+
cache_data = self.get("statusline.cache", {})
|
|
326
|
+
return CacheConfig(
|
|
327
|
+
git_ttl_seconds=cache_data.get("git_ttl_seconds", 5),
|
|
328
|
+
metrics_ttl_seconds=cache_data.get("metrics_ttl_seconds", 10),
|
|
329
|
+
alfred_ttl_seconds=cache_data.get("alfred_ttl_seconds", 1),
|
|
330
|
+
version_ttl_seconds=cache_data.get("version_ttl_seconds", 60),
|
|
331
|
+
update_ttl_seconds=cache_data.get("update_ttl_seconds", 300),
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
def get_color_config(self) -> ColorConfig:
|
|
335
|
+
"""Get color configuration"""
|
|
336
|
+
color_data = self.get("statusline.colors", {})
|
|
337
|
+
return ColorConfig(
|
|
338
|
+
enabled=color_data.get("enabled", True),
|
|
339
|
+
theme=color_data.get("theme", "auto"),
|
|
340
|
+
palette=color_data.get("palette", {}),
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
def get_display_config(self) -> DisplayConfig:
|
|
344
|
+
"""Get display configuration"""
|
|
345
|
+
display_data = self.get("statusline.display", {})
|
|
346
|
+
return DisplayConfig(
|
|
347
|
+
model=display_data.get("model", True),
|
|
348
|
+
version=display_data.get("version", True),
|
|
349
|
+
output_style=display_data.get("output_style", True),
|
|
350
|
+
memory_usage=display_data.get("memory_usage", True),
|
|
351
|
+
todo_count=display_data.get("todo_count", True),
|
|
352
|
+
branch=display_data.get("branch", True),
|
|
353
|
+
git_status=display_data.get("git_status", True),
|
|
354
|
+
duration=display_data.get("duration", True),
|
|
355
|
+
directory=display_data.get("directory", True),
|
|
356
|
+
active_task=display_data.get("active_task", True),
|
|
357
|
+
update_indicator=display_data.get("update_indicator", True),
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
def get_format_config(self) -> FormatConfig:
|
|
361
|
+
"""Get format configuration"""
|
|
362
|
+
format_data = self.get("statusline.format", {})
|
|
363
|
+
return FormatConfig(
|
|
364
|
+
max_branch_length=format_data.get("max_branch_length", 20),
|
|
365
|
+
truncate_with=format_data.get("truncate_with", "..."),
|
|
366
|
+
separator=format_data.get("separator", " | "),
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
def get_error_handling_config(self) -> ErrorHandlingConfig:
|
|
370
|
+
"""Get error handling configuration"""
|
|
371
|
+
error_data = self.get("statusline.error_handling", {})
|
|
372
|
+
return ErrorHandlingConfig(
|
|
373
|
+
graceful_degradation=error_data.get("graceful_degradation", True),
|
|
374
|
+
log_level=error_data.get("log_level", "warning"),
|
|
375
|
+
fallback_text=error_data.get("fallback_text", ""),
|
|
376
|
+
)
|
|
@@ -6,7 +6,7 @@ Provides centralized configuration management with fallbacks and validation.
|
|
|
6
6
|
|
|
7
7
|
import json
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import Any, Dict
|
|
9
|
+
from typing import Any, Dict
|
|
10
10
|
|
|
11
11
|
try:
|
|
12
12
|
import yaml
|
|
@@ -15,6 +15,7 @@ try:
|
|
|
15
15
|
except ImportError:
|
|
16
16
|
YAML_AVAILABLE = False
|
|
17
17
|
|
|
18
|
+
from .atomic_write import atomic_write_json
|
|
18
19
|
from .path_utils import find_project_root
|
|
19
20
|
|
|
20
21
|
# Default configuration
|
|
@@ -73,7 +74,7 @@ DEFAULT_CONFIG = {
|
|
|
73
74
|
class ConfigManager:
|
|
74
75
|
"""Configuration manager for Alfred hooks with validation and fallbacks."""
|
|
75
76
|
|
|
76
|
-
def __init__(self, config_path:
|
|
77
|
+
def __init__(self, config_path: Path | None = None):
|
|
77
78
|
"""Initialize configuration manager.
|
|
78
79
|
|
|
79
80
|
Args:
|
|
@@ -95,7 +96,7 @@ class ConfigManager:
|
|
|
95
96
|
# Default to YAML for new projects
|
|
96
97
|
self.config_path = yaml_path if YAML_AVAILABLE else json_path
|
|
97
98
|
|
|
98
|
-
self._config:
|
|
99
|
+
self._config: Dict[str, Any] | None = None
|
|
99
100
|
|
|
100
101
|
def load_config(self) -> Dict[str, Any]:
|
|
101
102
|
"""Load configuration from file with fallback to defaults.
|
|
@@ -121,14 +122,16 @@ class ConfigManager:
|
|
|
121
122
|
else:
|
|
122
123
|
file_config = json.load(f)
|
|
123
124
|
config = self._merge_configs(DEFAULT_CONFIG.copy(), file_config)
|
|
124
|
-
except (
|
|
125
|
-
json.JSONDecodeError,
|
|
126
|
-
yaml.YAMLError if YAML_AVAILABLE else Exception,
|
|
127
|
-
IOError,
|
|
128
|
-
OSError,
|
|
129
|
-
):
|
|
125
|
+
except (json.JSONDecodeError, IOError, OSError):
|
|
130
126
|
# Use defaults if file is corrupted or unreadable
|
|
131
127
|
config = DEFAULT_CONFIG.copy()
|
|
128
|
+
except Exception as e:
|
|
129
|
+
# Handle YAML errors or other parsing issues
|
|
130
|
+
if YAML_AVAILABLE and isinstance(e, yaml.YAMLError):
|
|
131
|
+
config = DEFAULT_CONFIG.copy()
|
|
132
|
+
else:
|
|
133
|
+
# Re-raise unexpected exceptions
|
|
134
|
+
raise
|
|
132
135
|
else:
|
|
133
136
|
# Use defaults if file doesn't exist
|
|
134
137
|
config = DEFAULT_CONFIG.copy()
|
|
@@ -295,7 +298,7 @@ class ConfigManager:
|
|
|
295
298
|
exit_codes = self.get("hooks.exit_codes", {})
|
|
296
299
|
return exit_codes.get(code_type, 0)
|
|
297
300
|
|
|
298
|
-
def update_config(self, updates:
|
|
301
|
+
def update_config(self, updates: dict[str, Any]) -> bool:
|
|
299
302
|
"""Update configuration and save to file.
|
|
300
303
|
|
|
301
304
|
Args:
|
|
@@ -311,12 +314,9 @@ class ConfigManager:
|
|
|
311
314
|
# Merge updates
|
|
312
315
|
updated = self._merge_configs(current, updates)
|
|
313
316
|
|
|
314
|
-
#
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
# Write updated config
|
|
318
|
-
with open(self.config_path, "w", encoding="utf-8") as f:
|
|
319
|
-
json.dump(updated, f, indent=2)
|
|
317
|
+
# Write updated config using atomic write (H3)
|
|
318
|
+
# atomic_write_json will create parent directories if needed
|
|
319
|
+
atomic_write_json(self.config_path, updated, indent=2)
|
|
320
320
|
|
|
321
321
|
# Clear cache to force reload
|
|
322
322
|
self._config = None
|
|
@@ -339,9 +339,11 @@ class ConfigManager:
|
|
|
339
339
|
|
|
340
340
|
return True
|
|
341
341
|
|
|
342
|
-
def _merge_configs(self, base:
|
|
342
|
+
def _merge_configs(self, base: dict[str, Any], override: dict[str, Any]) -> Dict[str, Any]:
|
|
343
343
|
"""Recursively merge two configuration dictionaries.
|
|
344
344
|
|
|
345
|
+
This method delegates to common.merge_configs() for consistent behavior.
|
|
346
|
+
|
|
345
347
|
Args:
|
|
346
348
|
base: Base configuration dictionary
|
|
347
349
|
override: Override configuration dictionary
|
|
@@ -349,22 +351,16 @@ class ConfigManager:
|
|
|
349
351
|
Returns:
|
|
350
352
|
Merged configuration dictionary
|
|
351
353
|
"""
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
for key, value in override.items():
|
|
355
|
-
if key in result and isinstance(result[key], dict) and isinstance(value, dict):
|
|
356
|
-
result[key] = self._merge_configs(result[key], value)
|
|
357
|
-
else:
|
|
358
|
-
result[key] = value
|
|
354
|
+
from .common import merge_configs
|
|
359
355
|
|
|
360
|
-
return
|
|
356
|
+
return merge_configs(base, override)
|
|
361
357
|
|
|
362
358
|
|
|
363
359
|
# Module-level helper functions
|
|
364
|
-
_config_manager:
|
|
360
|
+
_config_manager: ConfigManager | None = None
|
|
365
361
|
|
|
366
362
|
|
|
367
|
-
def get_config_manager(config_path:
|
|
363
|
+
def get_config_manager(config_path: Path | None = None) -> ConfigManager:
|
|
368
364
|
"""Get or create a ConfigManager instance.
|
|
369
365
|
|
|
370
366
|
Args:
|
|
@@ -379,7 +375,7 @@ def get_config_manager(config_path: Optional[Path] = None) -> ConfigManager:
|
|
|
379
375
|
return _config_manager
|
|
380
376
|
|
|
381
377
|
|
|
382
|
-
def get_config(key_path: str = "", config_path:
|
|
378
|
+
def get_config(key_path: str = "", config_path: Path | None = None) -> Any:
|
|
383
379
|
"""Get configuration value.
|
|
384
380
|
|
|
385
381
|
Args:
|
|
@@ -17,7 +17,7 @@ import logging
|
|
|
17
17
|
from dataclasses import dataclass
|
|
18
18
|
from enum import Enum
|
|
19
19
|
from pathlib import Path
|
|
20
|
-
from typing import Any, Dict, List,
|
|
20
|
+
from typing import Any, Dict, List, Tuple
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class ValidationLevel(Enum):
|
|
@@ -36,8 +36,8 @@ class ValidationIssue:
|
|
|
36
36
|
level: ValidationLevel
|
|
37
37
|
path: str
|
|
38
38
|
message: str
|
|
39
|
-
suggestion:
|
|
40
|
-
current_value:
|
|
39
|
+
suggestion: str | None = None
|
|
40
|
+
current_value: str | None = None
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
@dataclass
|
|
@@ -109,7 +109,7 @@ class ConfigurationValidator:
|
|
|
109
109
|
},
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
def validate_config(self, config:
|
|
112
|
+
def validate_config(self, config: dict[str, Any]) -> Tuple[bool, List[ValidationIssue]]:
|
|
113
113
|
"""Validate complete configuration and return issues"""
|
|
114
114
|
issues = []
|
|
115
115
|
|
|
@@ -135,7 +135,7 @@ class ConfigurationValidator:
|
|
|
135
135
|
is_valid = not any(issue.level in [ValidationLevel.ERROR, ValidationLevel.CRITICAL] for issue in issues)
|
|
136
136
|
return is_valid, issues
|
|
137
137
|
|
|
138
|
-
def _validate_structure(self, config:
|
|
138
|
+
def _validate_structure(self, config: dict[str, Any]) -> List[ValidationIssue]:
|
|
139
139
|
"""Validate top-level configuration structure"""
|
|
140
140
|
issues = []
|
|
141
141
|
|
|
@@ -159,7 +159,7 @@ class ConfigurationValidator:
|
|
|
159
159
|
|
|
160
160
|
return issues
|
|
161
161
|
|
|
162
|
-
def _validate_timeout_manager(self, timeout_config:
|
|
162
|
+
def _validate_timeout_manager(self, timeout_config: dict[str, Any]) -> List[ValidationIssue]:
|
|
163
163
|
"""Validate timeout manager configuration"""
|
|
164
164
|
issues = []
|
|
165
165
|
base_path = ".timeout_manager"
|
|
@@ -238,7 +238,7 @@ class ConfigurationValidator:
|
|
|
238
238
|
|
|
239
239
|
return issues
|
|
240
240
|
|
|
241
|
-
def _validate_hook_configs(self, hook_configs:
|
|
241
|
+
def _validate_hook_configs(self, hook_configs: dict[str, Any]) -> List[ValidationIssue]:
|
|
242
242
|
"""Validate hook-specific configurations"""
|
|
243
243
|
issues = []
|
|
244
244
|
base_path = ".hook_configs"
|
|
@@ -249,7 +249,7 @@ class ConfigurationValidator:
|
|
|
249
249
|
|
|
250
250
|
return issues
|
|
251
251
|
|
|
252
|
-
def _validate_single_hook_config(self, hook_name: str, config:
|
|
252
|
+
def _validate_single_hook_config(self, hook_name: str, config: dict[str, Any], path: str) -> List[ValidationIssue]:
|
|
253
253
|
"""Validate configuration for a single hook"""
|
|
254
254
|
issues = []
|
|
255
255
|
|
|
@@ -360,7 +360,7 @@ class ConfigurationValidator:
|
|
|
360
360
|
|
|
361
361
|
return issues
|
|
362
362
|
|
|
363
|
-
def _validate_resources(self, resource_config:
|
|
363
|
+
def _validate_resources(self, resource_config: dict[str, Any]) -> List[ValidationIssue]:
|
|
364
364
|
"""Validate resource configuration"""
|
|
365
365
|
issues = []
|
|
366
366
|
base_path = ".resources"
|
|
@@ -422,7 +422,7 @@ class ConfigurationValidator:
|
|
|
422
422
|
|
|
423
423
|
return issues
|
|
424
424
|
|
|
425
|
-
def _validate_performance(self, performance_config:
|
|
425
|
+
def _validate_performance(self, performance_config: dict[str, Any]) -> List[ValidationIssue]:
|
|
426
426
|
"""Validate performance-related configuration"""
|
|
427
427
|
issues = []
|
|
428
428
|
base_path = ".performance"
|
|
@@ -474,7 +474,7 @@ class ConfigurationValidator:
|
|
|
474
474
|
policy_timeouts = {"fast": 2000, "normal": 5000, "slow": 15000, "custom": 5000}
|
|
475
475
|
return policy_timeouts.get(policy, 5000)
|
|
476
476
|
|
|
477
|
-
def normalize_config(self, config:
|
|
477
|
+
def normalize_config(self, config: dict[str, Any]) -> Dict[str, Any]:
|
|
478
478
|
"""Normalize and apply defaults to configuration"""
|
|
479
479
|
normalized = config.copy()
|
|
480
480
|
|
|
@@ -534,7 +534,7 @@ class ConfigurationValidator:
|
|
|
534
534
|
|
|
535
535
|
return normalized
|
|
536
536
|
|
|
537
|
-
def generate_report(self, issues:
|
|
537
|
+
def generate_report(self, issues: list[ValidationIssue]) -> str:
|
|
538
538
|
"""Generate human-readable validation report"""
|
|
539
539
|
if not issues:
|
|
540
540
|
return "✅ Configuration validation passed with no issues found."
|
|
@@ -542,7 +542,7 @@ class ConfigurationValidator:
|
|
|
542
542
|
lines = ["📋 Configuration Validation Report", ""]
|
|
543
543
|
|
|
544
544
|
# Group issues by severity
|
|
545
|
-
by_level:
|
|
545
|
+
by_level: dict[ValidationLevel, List[ValidationIssue]] = {}
|
|
546
546
|
for issue in issues:
|
|
547
547
|
if issue.level not in by_level:
|
|
548
548
|
by_level[issue.level] = []
|
|
@@ -616,7 +616,7 @@ def get_config_validator() -> ConfigurationValidator:
|
|
|
616
616
|
|
|
617
617
|
# Convenience functions
|
|
618
618
|
def validate_hook_config(
|
|
619
|
-
config_path:
|
|
619
|
+
config_path: Path | None = None,
|
|
620
620
|
) -> Tuple[bool, List[ValidationIssue]]:
|
|
621
621
|
"""Validate hooks configuration"""
|
|
622
622
|
validator = get_config_validator()
|