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
|
@@ -86,9 +86,7 @@ class SessionAnalyzer:
|
|
|
86
86
|
sessions.append(session)
|
|
87
87
|
except json.JSONDecodeError as e:
|
|
88
88
|
if self.verbose:
|
|
89
|
-
print(
|
|
90
|
-
f"⚠️ Error reading line {line_num} in {session_file}: {e}"
|
|
91
|
-
)
|
|
89
|
+
print(f"⚠️ Error reading line {line_num} in {session_file}: {e}")
|
|
92
90
|
|
|
93
91
|
# Analyze each session from the JSONL file
|
|
94
92
|
for session in sessions:
|
|
@@ -120,15 +118,9 @@ class SessionAnalyzer:
|
|
|
120
118
|
summary = cast(str, session.get("summary", "")).lower()
|
|
121
119
|
|
|
122
120
|
# Simple analysis of session summaries
|
|
123
|
-
if any(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
self.patterns["failed_sessions"] = (
|
|
127
|
-
cast(int, self.patterns["failed_sessions"]) + 1
|
|
128
|
-
)
|
|
129
|
-
tool_failures = cast(
|
|
130
|
-
defaultdict[str, int], self.patterns["tool_failures"]
|
|
131
|
-
)
|
|
121
|
+
if any(keyword in summary for keyword in ["error", "fail", "issue", "problem"]):
|
|
122
|
+
self.patterns["failed_sessions"] = cast(int, self.patterns["failed_sessions"]) + 1
|
|
123
|
+
tool_failures = cast(defaultdict[str, int], self.patterns["tool_failures"])
|
|
132
124
|
tool_failures["session_error_in_summary"] += 1
|
|
133
125
|
|
|
134
126
|
# Extract potential tool usage from summary
|
|
@@ -153,9 +145,7 @@ class SessionAnalyzer:
|
|
|
153
145
|
|
|
154
146
|
# Handle detailed event format (legacy session-*.json format)
|
|
155
147
|
events = cast(list[Dict[str, Any]], session.get("events", []))
|
|
156
|
-
self.patterns["total_events"] = cast(int, self.patterns["total_events"]) + len(
|
|
157
|
-
events
|
|
158
|
-
)
|
|
148
|
+
self.patterns["total_events"] = cast(int, self.patterns["total_events"]) + len(events)
|
|
159
149
|
|
|
160
150
|
has_error = False
|
|
161
151
|
|
|
@@ -171,26 +161,20 @@ class SessionAnalyzer:
|
|
|
171
161
|
# Tool error patterns
|
|
172
162
|
elif event_type == "tool_error":
|
|
173
163
|
error_msg = cast(str, event.get("error", "unknown error"))
|
|
174
|
-
tool_failures = cast(
|
|
175
|
-
defaultdict[str, int], self.patterns["tool_failures"]
|
|
176
|
-
)
|
|
164
|
+
tool_failures = cast(defaultdict[str, int], self.patterns["tool_failures"])
|
|
177
165
|
tool_failures[error_msg[:50]] += 1 # First 50 characters
|
|
178
166
|
has_error = True
|
|
179
167
|
|
|
180
168
|
# Permission requests
|
|
181
169
|
elif event_type == "permission_request":
|
|
182
170
|
perm_type = cast(str, event.get("permission_type", "unknown"))
|
|
183
|
-
perm_requests = cast(
|
|
184
|
-
defaultdict[str, int], self.patterns["permission_requests"]
|
|
185
|
-
)
|
|
171
|
+
perm_requests = cast(defaultdict[str, int], self.patterns["permission_requests"])
|
|
186
172
|
perm_requests[perm_type] += 1
|
|
187
173
|
|
|
188
174
|
# Hook failures
|
|
189
175
|
elif event_type == "hook_failure":
|
|
190
176
|
hook_name = cast(str, event.get("hook_name", "unknown"))
|
|
191
|
-
hook_failures = cast(
|
|
192
|
-
defaultdict[str, int], self.patterns["hook_failures"]
|
|
193
|
-
)
|
|
177
|
+
hook_failures = cast(defaultdict[str, int], self.patterns["hook_failures"])
|
|
194
178
|
hook_failures[hook_name] += 1
|
|
195
179
|
has_error = True
|
|
196
180
|
|
|
@@ -199,15 +183,11 @@ class SessionAnalyzer:
|
|
|
199
183
|
cmd_str = cast(str, event.get("command", "")).split()
|
|
200
184
|
if cmd_str:
|
|
201
185
|
cmd = cmd_str[0]
|
|
202
|
-
cmd_freq = cast(
|
|
203
|
-
defaultdict[str, int], self.patterns["command_frequency"]
|
|
204
|
-
)
|
|
186
|
+
cmd_freq = cast(defaultdict[str, int], self.patterns["command_frequency"])
|
|
205
187
|
cmd_freq[cmd] += 1
|
|
206
188
|
|
|
207
189
|
if has_error:
|
|
208
|
-
self.patterns["failed_sessions"] = (
|
|
209
|
-
cast(int, self.patterns["failed_sessions"]) + 1
|
|
210
|
-
)
|
|
190
|
+
self.patterns["failed_sessions"] = cast(int, self.patterns["failed_sessions"]) + 1
|
|
211
191
|
|
|
212
192
|
def generate_report(self) -> str:
|
|
213
193
|
"""
|
|
@@ -220,11 +200,7 @@ class SessionAnalyzer:
|
|
|
220
200
|
total_sessions = cast(int, self.patterns["total_sessions"])
|
|
221
201
|
failed_sessions = cast(int, self.patterns["failed_sessions"])
|
|
222
202
|
total_events = cast(int, self.patterns["total_events"])
|
|
223
|
-
success_rate = (
|
|
224
|
-
((total_sessions - failed_sessions) / total_sessions * 100)
|
|
225
|
-
if total_sessions > 0
|
|
226
|
-
else 0
|
|
227
|
-
)
|
|
203
|
+
success_rate = ((total_sessions - failed_sessions) / total_sessions * 100) if total_sessions > 0 else 0
|
|
228
204
|
|
|
229
205
|
report = f"""# MoAI-ADK Session Meta-Analysis Report
|
|
230
206
|
|
|
@@ -291,9 +267,7 @@ class SessionAnalyzer:
|
|
|
291
267
|
# Permission request analysis
|
|
292
268
|
report += "\n## Permission Request Patterns\n\n"
|
|
293
269
|
|
|
294
|
-
perm_requests = cast(
|
|
295
|
-
defaultdict[str, int], self.patterns["permission_requests"]
|
|
296
|
-
)
|
|
270
|
+
perm_requests = cast(defaultdict[str, int], self.patterns["permission_requests"])
|
|
297
271
|
if perm_requests:
|
|
298
272
|
sorted_perms = sorted(
|
|
299
273
|
perm_requests.items(),
|
|
@@ -322,9 +296,7 @@ class SessionAnalyzer:
|
|
|
322
296
|
suggestions: list[str] = []
|
|
323
297
|
|
|
324
298
|
# High permission requests - review permission settings
|
|
325
|
-
perm_requests = cast(
|
|
326
|
-
defaultdict[str, int], self.patterns["permission_requests"]
|
|
327
|
-
)
|
|
299
|
+
perm_requests = cast(defaultdict[str, int], self.patterns["permission_requests"])
|
|
328
300
|
if perm_requests:
|
|
329
301
|
top_perm = max(
|
|
330
302
|
perm_requests.items(),
|
|
@@ -369,11 +341,7 @@ class SessionAnalyzer:
|
|
|
369
341
|
# Low success rate - general diagnosis
|
|
370
342
|
total_sessions = cast(int, self.patterns["total_sessions"])
|
|
371
343
|
failed_sessions = cast(int, self.patterns["failed_sessions"])
|
|
372
|
-
success_rate = (
|
|
373
|
-
((total_sessions - failed_sessions) / total_sessions * 100)
|
|
374
|
-
if total_sessions > 0
|
|
375
|
-
else 0
|
|
376
|
-
)
|
|
344
|
+
success_rate = ((total_sessions - failed_sessions) / total_sessions * 100) if total_sessions > 0 else 0
|
|
377
345
|
|
|
378
346
|
if success_rate < 80 and total_sessions >= 5:
|
|
379
347
|
suggestions.append(
|
|
@@ -384,16 +352,11 @@ class SessionAnalyzer:
|
|
|
384
352
|
)
|
|
385
353
|
|
|
386
354
|
if not suggestions:
|
|
387
|
-
suggestions.append(
|
|
388
|
-
"✅ No major issues detected\n"
|
|
389
|
-
" - Current settings and rules are working well"
|
|
390
|
-
)
|
|
355
|
+
suggestions.append("✅ No major issues detected\n - Current settings and rules are working well")
|
|
391
356
|
|
|
392
357
|
return "\n\n".join(suggestions)
|
|
393
358
|
|
|
394
|
-
def save_report(
|
|
395
|
-
self, output_path: Optional[Path] = None, project_path: Optional[Path] = None
|
|
396
|
-
) -> Path:
|
|
359
|
+
def save_report(self, output_path: Optional[Path] = None, project_path: Optional[Path] = None) -> Path:
|
|
397
360
|
"""
|
|
398
361
|
Save report to file
|
|
399
362
|
|
|
@@ -431,9 +394,7 @@ class SessionAnalyzer:
|
|
|
431
394
|
if total_sessions > 0:
|
|
432
395
|
failed_sessions = cast(int, self.patterns["failed_sessions"])
|
|
433
396
|
total_events = cast(int, self.patterns["total_events"])
|
|
434
|
-
self.patterns["success_rate"] = (
|
|
435
|
-
(total_sessions - failed_sessions) / total_sessions * 100
|
|
436
|
-
)
|
|
397
|
+
self.patterns["success_rate"] = (total_sessions - failed_sessions) / total_sessions * 100
|
|
437
398
|
self.patterns["average_session_length"] = total_events / total_sessions
|
|
438
399
|
|
|
439
400
|
return self.patterns.copy()
|
|
@@ -35,9 +35,7 @@ class ClaudeCLIIntegration:
|
|
|
35
35
|
"""
|
|
36
36
|
self.template_engine = template_engine or TemplateEngine()
|
|
37
37
|
|
|
38
|
-
def generate_claude_settings(
|
|
39
|
-
self, variables: Dict[str, Any], output_path: Optional[Path] = None
|
|
40
|
-
) -> Path:
|
|
38
|
+
def generate_claude_settings(self, variables: Dict[str, Any], output_path: Optional[Path] = None) -> Path:
|
|
41
39
|
"""Generate Claude settings JSON file with variables.
|
|
42
40
|
|
|
43
41
|
Args:
|
|
@@ -48,9 +46,7 @@ class ClaudeCLIIntegration:
|
|
|
48
46
|
Path to generated settings file
|
|
49
47
|
"""
|
|
50
48
|
if output_path is None:
|
|
51
|
-
temp_file = tempfile.NamedTemporaryFile(
|
|
52
|
-
mode="w", suffix=".json", delete=False
|
|
53
|
-
)
|
|
49
|
+
temp_file = tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False)
|
|
54
50
|
output_path = Path(temp_file.name)
|
|
55
51
|
temp_file.close()
|
|
56
52
|
|
|
@@ -58,9 +54,7 @@ class ClaudeCLIIntegration:
|
|
|
58
54
|
"variables": variables,
|
|
59
55
|
"template_context": {
|
|
60
56
|
"conversation_language": variables.get("CONVERSATION_LANGUAGE", "en"),
|
|
61
|
-
"conversation_language_name": variables.get(
|
|
62
|
-
"CONVERSATION_LANGUAGE_NAME", "English"
|
|
63
|
-
),
|
|
57
|
+
"conversation_language_name": variables.get("CONVERSATION_LANGUAGE_NAME", "English"),
|
|
64
58
|
"project_name": variables.get("PROJECT_NAME", ""),
|
|
65
59
|
"codebase_language": variables.get("CODEBASE_LANGUAGE", "python"),
|
|
66
60
|
},
|
|
@@ -89,9 +83,7 @@ class ClaudeCLIIntegration:
|
|
|
89
83
|
"""
|
|
90
84
|
try:
|
|
91
85
|
# Process template variables
|
|
92
|
-
processed_command = self.template_engine.render_string(
|
|
93
|
-
command_template, variables
|
|
94
|
-
)
|
|
86
|
+
processed_command = self.template_engine.render_string(command_template, variables)
|
|
95
87
|
|
|
96
88
|
# Build Claude CLI command
|
|
97
89
|
cmd_parts = ["claude"]
|
|
@@ -108,14 +100,12 @@ class ClaudeCLIIntegration:
|
|
|
108
100
|
cmd_parts.append(processed_command)
|
|
109
101
|
|
|
110
102
|
# Execute Claude CLI
|
|
111
|
-
result = subprocess.run(
|
|
112
|
-
cmd_parts, capture_output=True, text=True, encoding="utf-8"
|
|
113
|
-
)
|
|
103
|
+
result = subprocess.run(cmd_parts, capture_output=True, text=True, encoding="utf-8")
|
|
114
104
|
|
|
115
105
|
# Cleanup settings file
|
|
116
106
|
try:
|
|
117
107
|
settings_file.unlink()
|
|
118
|
-
except:
|
|
108
|
+
except OSError:
|
|
119
109
|
pass # Ignore cleanup errors
|
|
120
110
|
|
|
121
111
|
return {
|
|
@@ -168,7 +158,7 @@ class ClaudeCLIIntegration:
|
|
|
168
158
|
continue
|
|
169
159
|
|
|
170
160
|
# Create language-specific description prompt
|
|
171
|
-
translation_prompt = f"""Translate the following Claude Code description to {lang_info[
|
|
161
|
+
translation_prompt = f"""Translate the following Claude Code description to {lang_info["native_name"]}.
|
|
172
162
|
Keep technical terms in English. Provide only the translation without explanation:
|
|
173
163
|
|
|
174
164
|
Original: {base_desc}
|
|
@@ -215,15 +205,11 @@ Translation:"""
|
|
|
215
205
|
target_languages = ["en", "ko", "ja", "es", "fr", "de"]
|
|
216
206
|
|
|
217
207
|
# Generate multilingual descriptions
|
|
218
|
-
descriptions = self.generate_multilingual_descriptions(
|
|
219
|
-
{agent_name: base_description}, target_languages
|
|
220
|
-
)
|
|
208
|
+
descriptions = self.generate_multilingual_descriptions({agent_name: base_description}, target_languages)
|
|
221
209
|
|
|
222
210
|
agent_config = {
|
|
223
211
|
"name": agent_name,
|
|
224
|
-
"description": descriptions[agent_name][
|
|
225
|
-
"en"
|
|
226
|
-
], # Primary English description
|
|
212
|
+
"description": descriptions[agent_name]["en"], # Primary English description
|
|
227
213
|
"tools": tools,
|
|
228
214
|
"model": model,
|
|
229
215
|
"descriptions": descriptions[agent_name], # All language versions
|
|
@@ -258,15 +244,11 @@ Translation:"""
|
|
|
258
244
|
target_languages = ["en", "ko", "ja", "es", "fr", "de"]
|
|
259
245
|
|
|
260
246
|
# Generate multilingual descriptions
|
|
261
|
-
descriptions = self.generate_multilingual_descriptions(
|
|
262
|
-
{command_name: base_description}, target_languages
|
|
263
|
-
)
|
|
247
|
+
descriptions = self.generate_multilingual_descriptions({command_name: base_description}, target_languages)
|
|
264
248
|
|
|
265
249
|
command_config = {
|
|
266
250
|
"name": command_name,
|
|
267
|
-
"description": descriptions[command_name][
|
|
268
|
-
"en"
|
|
269
|
-
], # Primary English description
|
|
251
|
+
"description": descriptions[command_name]["en"], # Primary English description
|
|
270
252
|
"argument-hint": argument_hint,
|
|
271
253
|
"tools": tools,
|
|
272
254
|
"model": model,
|
|
@@ -290,21 +272,23 @@ Translation:"""
|
|
|
290
272
|
Returns:
|
|
291
273
|
Processed input data
|
|
292
274
|
"""
|
|
275
|
+
# Convert string to dict if needed
|
|
276
|
+
processed_data: Dict[str, Any]
|
|
293
277
|
if isinstance(input_data, str):
|
|
294
278
|
try:
|
|
295
|
-
|
|
279
|
+
processed_data = json.loads(input_data)
|
|
296
280
|
except json.JSONDecodeError as e:
|
|
297
281
|
raise ValueError(f"Invalid JSON input: {e}")
|
|
282
|
+
else:
|
|
283
|
+
processed_data = input_data
|
|
298
284
|
|
|
299
285
|
if variables:
|
|
300
|
-
# Process any string values in
|
|
301
|
-
for key, value in
|
|
286
|
+
# Process any string values in processed_data with variables
|
|
287
|
+
for key, value in processed_data.items():
|
|
302
288
|
if isinstance(value, str) and "{{" in value and "}}" in value:
|
|
303
|
-
|
|
304
|
-
value, variables
|
|
305
|
-
)
|
|
289
|
+
processed_data[key] = self.template_engine.render_string(value, variables)
|
|
306
290
|
|
|
307
|
-
return
|
|
291
|
+
return processed_data
|
|
308
292
|
|
|
309
293
|
def execute_headless_command(
|
|
310
294
|
self,
|
|
@@ -328,9 +312,7 @@ Translation:"""
|
|
|
328
312
|
"""
|
|
329
313
|
try:
|
|
330
314
|
# Process prompt template
|
|
331
|
-
processed_prompt = self.template_engine.render_string(
|
|
332
|
-
prompt_template, variables
|
|
333
|
-
)
|
|
315
|
+
processed_prompt = self.template_engine.render_string(prompt_template, variables)
|
|
334
316
|
|
|
335
317
|
# Build Claude command
|
|
336
318
|
cmd_parts = ["claude", "--print"]
|
|
@@ -367,11 +349,7 @@ Translation:"""
|
|
|
367
349
|
stdout_line = process.stdout.readline()
|
|
368
350
|
stderr_line = process.stderr.readline()
|
|
369
351
|
|
|
370
|
-
if (
|
|
371
|
-
stdout_line == ""
|
|
372
|
-
and stderr_line == ""
|
|
373
|
-
and process.poll() is not None
|
|
374
|
-
):
|
|
352
|
+
if stdout_line == "" and stderr_line == "" and process.poll() is not None:
|
|
375
353
|
break
|
|
376
354
|
|
|
377
355
|
if stdout_line:
|
|
@@ -385,22 +363,16 @@ Translation:"""
|
|
|
385
363
|
|
|
386
364
|
else:
|
|
387
365
|
# Non-streaming execution
|
|
388
|
-
result = subprocess.run(
|
|
389
|
-
cmd_parts, capture_output=True, text=True, encoding="utf-8"
|
|
390
|
-
)
|
|
366
|
+
result = subprocess.run(cmd_parts, capture_output=True, text=True, encoding="utf-8")
|
|
391
367
|
|
|
392
|
-
stdout_lines = (
|
|
393
|
-
|
|
394
|
-
)
|
|
395
|
-
stderr_lines = (
|
|
396
|
-
result.stderr.strip().split("\n") if result.stderr else []
|
|
397
|
-
)
|
|
368
|
+
stdout_lines = result.stdout.strip().split("\n") if result.stdout else []
|
|
369
|
+
stderr_lines = result.stderr.strip().split("\n") if result.stderr else []
|
|
398
370
|
returncode = result.returncode
|
|
399
371
|
|
|
400
372
|
# Cleanup
|
|
401
373
|
try:
|
|
402
374
|
settings_file.unlink()
|
|
403
|
-
except:
|
|
375
|
+
except OSError:
|
|
404
376
|
pass
|
|
405
377
|
|
|
406
378
|
return {
|
moai_adk/core/command_helpers.py
CHANGED
|
@@ -10,6 +10,8 @@ import os
|
|
|
10
10
|
from datetime import datetime, timezone
|
|
11
11
|
from typing import Any, Dict, List, Optional
|
|
12
12
|
|
|
13
|
+
import yaml
|
|
14
|
+
|
|
13
15
|
# Conditional import of ContextManager
|
|
14
16
|
try:
|
|
15
17
|
from moai_adk.core.context_manager import (
|
|
@@ -25,7 +27,7 @@ except ImportError:
|
|
|
25
27
|
|
|
26
28
|
def extract_project_metadata(project_root: str) -> Dict[str, Any]:
|
|
27
29
|
"""
|
|
28
|
-
Extract project metadata from config.
|
|
30
|
+
Extract project metadata from config.yaml.
|
|
29
31
|
|
|
30
32
|
Args:
|
|
31
33
|
project_root: Root directory of the project
|
|
@@ -34,22 +36,22 @@ def extract_project_metadata(project_root: str) -> Dict[str, Any]:
|
|
|
34
36
|
Dictionary containing project metadata
|
|
35
37
|
|
|
36
38
|
Raises:
|
|
37
|
-
FileNotFoundError: If config.
|
|
38
|
-
|
|
39
|
+
FileNotFoundError: If config.yaml doesn't exist
|
|
40
|
+
yaml.YAMLError: If config.yaml is invalid
|
|
39
41
|
"""
|
|
40
|
-
config_path = os.path.join(project_root, ".moai", "config", "config.
|
|
42
|
+
config_path = os.path.join(project_root, ".moai", "config", "config.yaml")
|
|
41
43
|
|
|
42
44
|
if not os.path.exists(config_path):
|
|
43
45
|
raise FileNotFoundError(f"Config file not found: {config_path}")
|
|
44
46
|
|
|
45
|
-
with open(config_path, "r") as f:
|
|
46
|
-
config =
|
|
47
|
+
with open(config_path, "r", encoding="utf-8") as f:
|
|
48
|
+
config = yaml.safe_load(f) or {}
|
|
47
49
|
|
|
48
50
|
# Extract key metadata
|
|
49
51
|
metadata = {
|
|
50
52
|
"project_name": config.get("project", {}).get("name", "Unknown"),
|
|
51
53
|
"mode": config.get("project", {}).get("mode", "personal"),
|
|
52
|
-
"
|
|
54
|
+
"github_profile": config.get("github", {}).get("profile_name", ""),
|
|
53
55
|
"language": config.get("language", {}).get("conversation_language", "en"),
|
|
54
56
|
"tech_stack": [], # To be detected separately
|
|
55
57
|
}
|
|
@@ -238,9 +240,7 @@ def save_command_context(
|
|
|
238
240
|
try:
|
|
239
241
|
context_mgr = ContextManager(project_root)
|
|
240
242
|
absolute_paths = validate_phase_files(files_created, project_root)
|
|
241
|
-
phase_data = _prepare_phase_data(
|
|
242
|
-
phase_name, status, outputs, absolute_paths, next_phase
|
|
243
|
-
)
|
|
243
|
+
phase_data = _prepare_phase_data(phase_name, status, outputs, absolute_paths, next_phase)
|
|
244
244
|
return _validate_and_save(context_mgr, phase_data)
|
|
245
245
|
|
|
246
246
|
except Exception as e:
|