moai-adk 0.25.4__py3-none-any.whl → 0.32.8__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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +2 -5
- moai_adk/__main__.py +114 -82
- moai_adk/cli/__init__.py +6 -1
- moai_adk/cli/commands/__init__.py +1 -3
- moai_adk/cli/commands/analyze.py +5 -16
- moai_adk/cli/commands/doctor.py +6 -18
- moai_adk/cli/commands/init.py +56 -125
- moai_adk/cli/commands/language.py +14 -35
- moai_adk/cli/commands/status.py +9 -15
- moai_adk/cli/commands/update.py +1555 -190
- moai_adk/cli/prompts/init_prompts.py +112 -56
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +672 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +490 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +128 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/analysis/session_analyzer.py +17 -56
- moai_adk/core/claude_integration.py +26 -54
- moai_adk/core/command_helpers.py +10 -10
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/auto_spec_config.py +5 -11
- moai_adk/core/config/migration.py +19 -9
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +6 -12
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +725 -112
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -0
- moai_adk/core/git/branch_manager.py +3 -11
- moai_adk/core/git/checkpoint.py +1 -3
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/manager.py +91 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/engine.py +6 -18
- moai_adk/core/integration/integration_tester.py +10 -9
- moai_adk/core/integration/utils.py +1 -1
- moai_adk/core/issue_creator.py +10 -28
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config_resolver.py +485 -0
- moai_adk/core/language_validator.py +28 -41
- moai_adk/core/mcp/setup.py +15 -12
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +78 -9
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +8 -17
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +6 -10
- moai_adk/core/migration/version_migrator.py +3 -3
- moai_adk/core/performance/cache_system.py +8 -10
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +1 -3
- moai_adk/core/project/initializer.py +135 -23
- moai_adk/core/project/phase_executor.py +54 -81
- moai_adk/core/project/validator.py +6 -12
- moai_adk/core/quality/trust_checker.py +9 -27
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +73 -148
- moai_adk/core/session_manager.py +10 -26
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +31 -100
- moai_adk/core/spec/ears_template_engine.py +351 -286
- moai_adk/core/spec/quality_validator.py +35 -69
- moai_adk/core/spec_status_manager.py +64 -74
- moai_adk/core/template/backup.py +45 -20
- moai_adk/core/template/config.py +112 -39
- moai_adk/core/template/merger.py +11 -19
- moai_adk/core/template/processor.py +253 -149
- moai_adk/core/template_engine.py +73 -40
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +4 -12
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +23 -72
- moai_adk/foundation/trust/validation_checklist.py +57 -162
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/alfred_detector.py +1 -3
- moai_adk/statusline/config.py +13 -4
- moai_adk/statusline/enhanced_output_style_detector.py +23 -15
- moai_adk/statusline/main.py +51 -15
- moai_adk/statusline/renderer.py +104 -48
- moai_adk/statusline/update_checker.py +3 -9
- moai_adk/statusline/version_reader.py +140 -46
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +103 -41
- moai_adk/templates/.git-hooks/pre-push +116 -21
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.gitignore +184 -44
- moai_adk/templates/.mcp.json +7 -9
- moai_adk/templates/.moai/cache/personalization.json +10 -0
- moai_adk/templates/.moai/config/config.yaml +344 -0
- moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
- moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
- moai_adk/templates/.moai/config/presets/team.yaml +33 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
- moai_adk/templates/.moai/config/sections/system.yaml +14 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +382 -501
- moai_adk/utils/__init__.py +24 -1
- moai_adk/utils/banner.py +7 -10
- moai_adk/utils/common.py +16 -30
- moai_adk/utils/link_validator.py +4 -12
- moai_adk/utils/safe_file_reader.py +2 -6
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.32.8.dist-info/METADATA +2478 -0
- moai_adk-0.32.8.dist-info/RECORD +396 -0
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -82
- moai_adk/cli/commands/improve_user_experience.py +0 -348
- moai_adk/cli/commands/migrate.py +0 -158
- moai_adk/cli/commands/validate_links.py +0 -118
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
- moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
- moai_adk/utils/user_experience.py +0 -531
- moai_adk-0.25.4.dist-info/METADATA +0 -2279
- moai_adk-0.25.4.dist-info/RECORD +0 -112
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
# type: ignore
|
|
2
1
|
"""
|
|
3
|
-
Enhanced Version reader for MoAI-ADK from config.
|
|
2
|
+
Enhanced Version reader for MoAI-ADK from config.yaml with performance optimizations
|
|
4
3
|
|
|
5
4
|
Refactored for improved performance, error handling, configurability, and caching strategies
|
|
6
5
|
"""
|
|
@@ -8,6 +7,7 @@ Refactored for improved performance, error handling, configurability, and cachin
|
|
|
8
7
|
import asyncio
|
|
9
8
|
import json
|
|
10
9
|
import logging
|
|
10
|
+
import os
|
|
11
11
|
import re
|
|
12
12
|
import time
|
|
13
13
|
from dataclasses import dataclass, field
|
|
@@ -16,6 +16,8 @@ from enum import Enum
|
|
|
16
16
|
from pathlib import Path
|
|
17
17
|
from typing import Any, Dict, List, Optional
|
|
18
18
|
|
|
19
|
+
import yaml
|
|
20
|
+
|
|
19
21
|
logger = logging.getLogger(__name__)
|
|
20
22
|
|
|
21
23
|
|
|
@@ -70,12 +72,13 @@ class VersionConfig:
|
|
|
70
72
|
track_performance_metrics: bool = True
|
|
71
73
|
|
|
72
74
|
# Version field priority configuration
|
|
75
|
+
# Order: 1) MoAI package version, 2) Project version, 3) Fallbacks
|
|
73
76
|
version_fields: List[str] = field(
|
|
74
77
|
default_factory=lambda: [
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"version",
|
|
78
|
-
"
|
|
78
|
+
"moai.version", # ← 1st priority: MoAI-ADK version
|
|
79
|
+
"project.version", # ← 2nd priority: Project version
|
|
80
|
+
"version", # ← 3rd priority: General version
|
|
81
|
+
"project.template_version", # ← 4th priority: Template version
|
|
79
82
|
"template_version",
|
|
80
83
|
]
|
|
81
84
|
)
|
|
@@ -101,27 +104,41 @@ class VersionReader:
|
|
|
101
104
|
DEFAULT_CONFIG = VersionConfig()
|
|
102
105
|
|
|
103
106
|
# Supported version fields in order of priority
|
|
107
|
+
# Order: 1) MoAI package version, 2) Project version, 3) Fallbacks
|
|
104
108
|
DEFAULT_VERSION_FIELDS = [
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"version",
|
|
108
|
-
"
|
|
109
|
+
"moai.version", # ← 1st priority: MoAI-ADK version
|
|
110
|
+
"project.version", # ← 2nd priority: Project version
|
|
111
|
+
"version", # ← 3rd priority: General version
|
|
112
|
+
"project.template_version", # ← 4th priority: Template version
|
|
109
113
|
"template_version",
|
|
110
114
|
]
|
|
111
115
|
|
|
112
|
-
def __init__(self, config: Optional[VersionConfig] = None):
|
|
116
|
+
def __init__(self, config: Optional[VersionConfig] = None, working_dir: Optional[Path] = None):
|
|
113
117
|
"""
|
|
114
118
|
Initialize version reader with enhanced configuration.
|
|
115
119
|
|
|
116
120
|
Args:
|
|
117
121
|
config: Version configuration object. If None, uses defaults.
|
|
122
|
+
working_dir: Working directory to search for config. If None, uses environment detection.
|
|
118
123
|
"""
|
|
119
124
|
self.config = config or self.DEFAULT_CONFIG
|
|
120
|
-
|
|
125
|
+
|
|
126
|
+
# Determine working directory with priority:
|
|
127
|
+
# 1. Explicit working_dir parameter
|
|
128
|
+
# 2. CLAUDE_PROJECT_DIR environment variable (set by Claude Code)
|
|
129
|
+
# 3. Current working directory
|
|
130
|
+
if working_dir:
|
|
131
|
+
base_dir = Path(working_dir)
|
|
132
|
+
elif "CLAUDE_PROJECT_DIR" in os.environ:
|
|
133
|
+
base_dir = Path(os.environ["CLAUDE_PROJECT_DIR"])
|
|
134
|
+
else:
|
|
135
|
+
base_dir = Path.cwd()
|
|
136
|
+
|
|
137
|
+
self._config_path = base_dir / ".moai" / "config" / "config.yaml"
|
|
121
138
|
|
|
122
139
|
# Enhanced caching with LRU support
|
|
123
140
|
self._cache: Dict[str, CacheEntry] = {}
|
|
124
|
-
self._cache_stats = {
|
|
141
|
+
self._cache_stats: Dict[str, Any] = {
|
|
125
142
|
"hits": 0,
|
|
126
143
|
"misses": 0,
|
|
127
144
|
"errors": 0,
|
|
@@ -133,7 +150,7 @@ class VersionReader:
|
|
|
133
150
|
}
|
|
134
151
|
|
|
135
152
|
# Performance tracking
|
|
136
|
-
self._performance_metrics = {
|
|
153
|
+
self._performance_metrics: Dict[str, List[float]] = {
|
|
137
154
|
"read_times": [],
|
|
138
155
|
"validation_times": [],
|
|
139
156
|
"cache_operation_times": [],
|
|
@@ -160,16 +177,23 @@ class VersionReader:
|
|
|
160
177
|
if self.config.debug_mode:
|
|
161
178
|
self._logger.info(f"VersionReader initialized with config: {self.config}")
|
|
162
179
|
|
|
163
|
-
def get_version(self) -> str:
|
|
180
|
+
def get_version(self, force_refresh: bool = False) -> str:
|
|
164
181
|
"""
|
|
165
182
|
Get MoAI-ADK version from config with enhanced caching.
|
|
166
183
|
|
|
184
|
+
Args:
|
|
185
|
+
force_refresh: If True, bypass cache and force fresh read
|
|
186
|
+
|
|
167
187
|
Returns:
|
|
168
188
|
Version string (e.g., "0.20.1" or "v0.20.1")
|
|
169
189
|
|
|
170
190
|
Raises:
|
|
171
191
|
VersionReadError: If version cannot be determined after fallbacks
|
|
172
192
|
"""
|
|
193
|
+
# Check if we need to force refresh
|
|
194
|
+
if force_refresh:
|
|
195
|
+
self.clear_cache()
|
|
196
|
+
|
|
173
197
|
if self.config.enable_async:
|
|
174
198
|
return asyncio.run(self.get_version_async())
|
|
175
199
|
else:
|
|
@@ -179,6 +203,8 @@ class VersionReader:
|
|
|
179
203
|
"""
|
|
180
204
|
Synchronous version getter for performance-critical paths.
|
|
181
205
|
|
|
206
|
+
Priority: installed package version > config file version > fallback
|
|
207
|
+
|
|
182
208
|
Returns:
|
|
183
209
|
Version string
|
|
184
210
|
"""
|
|
@@ -189,12 +215,17 @@ class VersionReader:
|
|
|
189
215
|
version = self._check_cache()
|
|
190
216
|
if version is not None:
|
|
191
217
|
self._cache_stats["hits"] += 1
|
|
192
|
-
self._cache_stats["cache_hits_by_source"][
|
|
193
|
-
|
|
194
|
-
|
|
218
|
+
self._cache_stats["cache_hits_by_source"][VersionSource.CACHE.value] += 1
|
|
219
|
+
return version
|
|
220
|
+
|
|
221
|
+
# Priority 1: Try installed package version first (most accurate)
|
|
222
|
+
version = self._get_package_version()
|
|
223
|
+
if version:
|
|
224
|
+
self._update_cache(version, VersionSource.CONFIG_FILE)
|
|
225
|
+
self._cache_stats["misses"] += 1
|
|
195
226
|
return version
|
|
196
227
|
|
|
197
|
-
# Read from config file
|
|
228
|
+
# Priority 2: Read from config file
|
|
198
229
|
version = self._read_version_from_config_sync()
|
|
199
230
|
if not version:
|
|
200
231
|
version = self._get_fallback_version()
|
|
@@ -213,6 +244,8 @@ class VersionReader:
|
|
|
213
244
|
"""
|
|
214
245
|
Async version getter for better performance.
|
|
215
246
|
|
|
247
|
+
Priority: installed package version > config file version > fallback
|
|
248
|
+
|
|
216
249
|
Returns:
|
|
217
250
|
Version string
|
|
218
251
|
"""
|
|
@@ -223,12 +256,17 @@ class VersionReader:
|
|
|
223
256
|
version = self._check_cache()
|
|
224
257
|
if version is not None:
|
|
225
258
|
self._cache_stats["hits"] += 1
|
|
226
|
-
self._cache_stats["cache_hits_by_source"][
|
|
227
|
-
|
|
228
|
-
|
|
259
|
+
self._cache_stats["cache_hits_by_source"][VersionSource.CACHE.value] += 1
|
|
260
|
+
return version
|
|
261
|
+
|
|
262
|
+
# Priority 1: Try installed package version first (most accurate)
|
|
263
|
+
version = self._get_package_version()
|
|
264
|
+
if version:
|
|
265
|
+
self._update_cache(version, VersionSource.CONFIG_FILE)
|
|
266
|
+
self._cache_stats["misses"] += 1
|
|
229
267
|
return version
|
|
230
268
|
|
|
231
|
-
# Read from config file asynchronously
|
|
269
|
+
# Priority 2: Read from config file asynchronously
|
|
232
270
|
version = await self._read_version_from_config_async()
|
|
233
271
|
if not version:
|
|
234
272
|
version = self._get_fallback_version()
|
|
@@ -264,14 +302,10 @@ class VersionReader:
|
|
|
264
302
|
entry.access_count += 1
|
|
265
303
|
entry.last_access = datetime.now()
|
|
266
304
|
self._cache_stats["hits"] += 1
|
|
267
|
-
self._cache_stats["cache_hits_by_source"][
|
|
268
|
-
VersionSource.CACHE.value
|
|
269
|
-
] += 1
|
|
305
|
+
self._cache_stats["cache_hits_by_source"][VersionSource.CACHE.value] += 1
|
|
270
306
|
|
|
271
307
|
if self.config.debug_mode:
|
|
272
|
-
self._logger.debug(
|
|
273
|
-
f"Cache hit: {entry.version} (source: {entry.source.value})"
|
|
274
|
-
)
|
|
308
|
+
self._logger.debug(f"Cache hit: {entry.version} (source: {entry.source.value})")
|
|
275
309
|
|
|
276
310
|
return entry.version
|
|
277
311
|
|
|
@@ -316,9 +350,7 @@ class VersionReader:
|
|
|
316
350
|
self._evict_oldest_cache_entry()
|
|
317
351
|
|
|
318
352
|
if self.config.debug_mode:
|
|
319
|
-
self._logger.debug(
|
|
320
|
-
f"Cache updated with version: {version} (source: {source.value})"
|
|
321
|
-
)
|
|
353
|
+
self._logger.debug(f"Cache updated with version: {version} (source: {source.value})")
|
|
322
354
|
|
|
323
355
|
def _evict_oldest_cache_entry(self) -> None:
|
|
324
356
|
"""
|
|
@@ -387,7 +419,7 @@ class VersionReader:
|
|
|
387
419
|
Returns:
|
|
388
420
|
Dictionary containing performance metrics
|
|
389
421
|
"""
|
|
390
|
-
metrics = {
|
|
422
|
+
metrics: Dict[str, Any] = {
|
|
391
423
|
"cache_stats": self._cache_stats.copy(),
|
|
392
424
|
"cache_size": len(self._cache),
|
|
393
425
|
"max_cache_size": self.config.cache_size,
|
|
@@ -409,7 +441,7 @@ class VersionReader:
|
|
|
409
441
|
|
|
410
442
|
def _read_version_from_config_sync(self) -> str:
|
|
411
443
|
"""
|
|
412
|
-
Synchronous version of reading from .moai/config/config.
|
|
444
|
+
Synchronous version of reading from .moai/config/config.yaml.
|
|
413
445
|
|
|
414
446
|
Returns:
|
|
415
447
|
Version string or empty string if not found
|
|
@@ -420,11 +452,11 @@ class VersionReader:
|
|
|
420
452
|
return ""
|
|
421
453
|
|
|
422
454
|
try:
|
|
423
|
-
config_data = self.
|
|
455
|
+
config_data = self._read_config_sync(self._config_path)
|
|
424
456
|
version = self._extract_version_from_config(config_data)
|
|
425
457
|
return version if version else ""
|
|
426
|
-
except json.JSONDecodeError as e:
|
|
427
|
-
logger.error(f"Invalid
|
|
458
|
+
except (json.JSONDecodeError, yaml.YAMLError) as e:
|
|
459
|
+
logger.error(f"Invalid config in {self._config_path}: {e}")
|
|
428
460
|
return ""
|
|
429
461
|
|
|
430
462
|
except Exception as e:
|
|
@@ -433,7 +465,7 @@ class VersionReader:
|
|
|
433
465
|
|
|
434
466
|
async def _read_version_from_config_async(self) -> str:
|
|
435
467
|
"""
|
|
436
|
-
Read version from .moai/config/config.
|
|
468
|
+
Read version from .moai/config/config.yaml asynchronously.
|
|
437
469
|
|
|
438
470
|
Returns:
|
|
439
471
|
Version string or empty string if not found
|
|
@@ -444,10 +476,10 @@ class VersionReader:
|
|
|
444
476
|
return ""
|
|
445
477
|
|
|
446
478
|
try:
|
|
447
|
-
config_data = await self.
|
|
479
|
+
config_data = await self._read_config_async(self._config_path)
|
|
448
480
|
return self._extract_version_from_config(config_data)
|
|
449
|
-
except json.JSONDecodeError as e:
|
|
450
|
-
logger.error(f"Invalid
|
|
481
|
+
except (json.JSONDecodeError, yaml.YAMLError) as e:
|
|
482
|
+
logger.error(f"Invalid config in {self._config_path}: {e}")
|
|
451
483
|
return ""
|
|
452
484
|
|
|
453
485
|
except Exception as e:
|
|
@@ -474,9 +506,7 @@ class VersionReader:
|
|
|
474
506
|
logger.debug("No version field found in config")
|
|
475
507
|
return ""
|
|
476
508
|
|
|
477
|
-
def _get_nested_value(
|
|
478
|
-
self, config: Dict[str, Any], field_path: str
|
|
479
|
-
) -> Optional[str]:
|
|
509
|
+
def _get_nested_value(self, config: Dict[str, Any], field_path: str) -> Optional[str]:
|
|
480
510
|
"""
|
|
481
511
|
Get nested value from config using dot notation.
|
|
482
512
|
|
|
@@ -546,10 +576,43 @@ class VersionReader:
|
|
|
546
576
|
Returns:
|
|
547
577
|
Fallback version string
|
|
548
578
|
"""
|
|
579
|
+
# Try to get version from package metadata first
|
|
580
|
+
pkg_version = self._get_package_version()
|
|
581
|
+
if pkg_version:
|
|
582
|
+
self._logger.debug(f"Using package metadata version: {pkg_version}")
|
|
583
|
+
return pkg_version
|
|
584
|
+
|
|
585
|
+
# Fall back to configured fallback version
|
|
549
586
|
fallback = self.config.fallback_version
|
|
550
|
-
self._logger.debug(f"Using fallback version: {fallback}")
|
|
587
|
+
self._logger.debug(f"Using configured fallback version: {fallback}")
|
|
551
588
|
return fallback
|
|
552
589
|
|
|
590
|
+
def _get_package_version(self) -> str:
|
|
591
|
+
"""
|
|
592
|
+
Get version from installed moai-adk package metadata.
|
|
593
|
+
|
|
594
|
+
This allows the statusline to work even when .moai/config/config.json
|
|
595
|
+
is not found, as long as the moai-adk package is installed.
|
|
596
|
+
|
|
597
|
+
Returns:
|
|
598
|
+
Version string or empty string if package not found
|
|
599
|
+
"""
|
|
600
|
+
try:
|
|
601
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
602
|
+
|
|
603
|
+
try:
|
|
604
|
+
pkg_version = version("moai-adk")
|
|
605
|
+
self._logger.debug(f"Found moai-adk package version: {pkg_version}")
|
|
606
|
+
return pkg_version
|
|
607
|
+
except PackageNotFoundError:
|
|
608
|
+
self._logger.debug("moai-adk package not found in metadata")
|
|
609
|
+
return ""
|
|
610
|
+
except ImportError:
|
|
611
|
+
self._logger.debug("importlib.metadata not available")
|
|
612
|
+
return ""
|
|
613
|
+
except Exception as e:
|
|
614
|
+
self._logger.debug(f"Error getting package version: {e}")
|
|
615
|
+
return ""
|
|
553
616
|
|
|
554
617
|
async def _file_exists_async(self, path: Path) -> bool:
|
|
555
618
|
"""Async file existence check"""
|
|
@@ -569,11 +632,37 @@ class VersionReader:
|
|
|
569
632
|
with open(path, "r", encoding="utf-8") as f:
|
|
570
633
|
return json.load(f)
|
|
571
634
|
|
|
635
|
+
async def _read_config_async(self, path: Path) -> Dict[str, Any]:
|
|
636
|
+
"""Async config file reading (supports YAML and JSON)"""
|
|
637
|
+
loop = asyncio.get_event_loop()
|
|
638
|
+
return await loop.run_in_executor(None, self._read_config_sync, path)
|
|
639
|
+
|
|
640
|
+
def _read_config_sync(self, path: Path) -> Dict[str, Any]:
|
|
641
|
+
"""Synchronous config file reading (supports YAML and JSON)"""
|
|
642
|
+
with open(path, "r", encoding="utf-8") as f:
|
|
643
|
+
if path.suffix in (".yaml", ".yml"):
|
|
644
|
+
return yaml.safe_load(f) or {}
|
|
645
|
+
else:
|
|
646
|
+
return json.load(f)
|
|
647
|
+
|
|
572
648
|
# Backwards compatibility cache methods
|
|
573
649
|
def clear_cache(self) -> None:
|
|
574
650
|
"""Clear version cache (backwards compatibility)"""
|
|
575
651
|
self._version_cache = None
|
|
576
652
|
self._cache_time = None
|
|
653
|
+
# Also clear the main cache dictionary
|
|
654
|
+
self._cache.clear()
|
|
655
|
+
# Reset cache statistics
|
|
656
|
+
self._cache_stats = {
|
|
657
|
+
"hits": 0,
|
|
658
|
+
"misses": 0,
|
|
659
|
+
"errors": 0,
|
|
660
|
+
"cache_hits_by_source": {
|
|
661
|
+
VersionSource.CONFIG_FILE.value: 0,
|
|
662
|
+
VersionSource.CACHE.value: 0,
|
|
663
|
+
VersionSource.FALLBACK.value: 0,
|
|
664
|
+
},
|
|
665
|
+
}
|
|
577
666
|
logger.debug("Version cache cleared")
|
|
578
667
|
|
|
579
668
|
def get_cache_stats(self) -> Dict[str, int]:
|
|
@@ -603,7 +692,12 @@ class VersionReader:
|
|
|
603
692
|
Returns:
|
|
604
693
|
True if cache is expired
|
|
605
694
|
"""
|
|
606
|
-
|
|
695
|
+
# Check if cache entry exists and is still valid
|
|
696
|
+
config_key = str(self._config_path)
|
|
697
|
+
if config_key not in self._cache:
|
|
698
|
+
return True
|
|
699
|
+
entry = self._cache[config_key]
|
|
700
|
+
return not self._is_cache_entry_valid(entry)
|
|
607
701
|
|
|
608
702
|
def get_config(self) -> VersionConfig:
|
|
609
703
|
"""Get current configuration"""
|