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,12 +1,11 @@
|
|
|
1
1
|
"""Project initialization prompts
|
|
2
2
|
|
|
3
|
-
Collect interactive project settings
|
|
3
|
+
Collect interactive project settings with modern UI.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import TypedDict
|
|
8
8
|
|
|
9
|
-
import questionary
|
|
10
9
|
from rich.console import Console
|
|
11
10
|
|
|
12
11
|
console = Console()
|
|
@@ -18,9 +17,8 @@ class ProjectSetupAnswers(TypedDict):
|
|
|
18
17
|
project_name: str
|
|
19
18
|
mode: str # personal | team (default from init)
|
|
20
19
|
locale: str # ko | en | ja | zh | other (default from init)
|
|
21
|
-
language: str | None # Will be set in /
|
|
22
|
-
author: str # Will be set in /
|
|
23
|
-
mcp_servers: list[str] # Selected MCP servers to install
|
|
20
|
+
language: str | None # Will be set in /moai:0-project
|
|
21
|
+
author: str # Will be set in /moai:0-project
|
|
24
22
|
custom_language: str | None # User input for "other" language option
|
|
25
23
|
|
|
26
24
|
|
|
@@ -30,7 +28,7 @@ def prompt_project_setup(
|
|
|
30
28
|
project_path: Path | None = None,
|
|
31
29
|
initial_locale: str | None = None,
|
|
32
30
|
) -> ProjectSetupAnswers:
|
|
33
|
-
"""Project setup prompt
|
|
31
|
+
"""Project setup prompt with modern UI.
|
|
34
32
|
|
|
35
33
|
Args:
|
|
36
34
|
project_name: Project name (asks when None)
|
|
@@ -46,29 +44,29 @@ def prompt_project_setup(
|
|
|
46
44
|
"""
|
|
47
45
|
answers: ProjectSetupAnswers = {
|
|
48
46
|
"project_name": "",
|
|
49
|
-
"mode": "personal", # Default: will be configurable in /
|
|
50
|
-
"locale": "en", # Default: will be configurable in /
|
|
51
|
-
"language": None, # Will be detected in /
|
|
52
|
-
"author": "", # Will be set in /
|
|
53
|
-
"mcp_servers": [], # Selected MCP servers
|
|
47
|
+
"mode": "personal", # Default: will be configurable in /moai:0-project
|
|
48
|
+
"locale": "en", # Default: will be configurable in /moai:0-project
|
|
49
|
+
"language": None, # Will be detected in /moai:0-project
|
|
50
|
+
"author": "", # Will be set in /moai:0-project
|
|
54
51
|
"custom_language": None, # User input for other language
|
|
55
52
|
}
|
|
56
53
|
|
|
57
54
|
try:
|
|
58
55
|
# SIMPLIFIED: Only ask for project name
|
|
59
|
-
# All other settings (mode, locale, language, author) are now configured in /
|
|
56
|
+
# All other settings (mode, locale, language, author) are now configured in /moai:0-project
|
|
60
57
|
|
|
61
58
|
# 1. Project name (only when not using the current directory)
|
|
62
59
|
if not is_current_dir:
|
|
63
60
|
if project_name:
|
|
64
61
|
answers["project_name"] = project_name
|
|
65
|
-
console.print(f"[
|
|
62
|
+
console.print(f"[#DA7756]📦 Project Name:[/#DA7756] {project_name}")
|
|
66
63
|
else:
|
|
67
|
-
|
|
64
|
+
# Try new UI, fallback to questionary
|
|
65
|
+
result = _prompt_text(
|
|
68
66
|
"📦 Project Name:",
|
|
69
67
|
default="my-moai-project",
|
|
70
|
-
|
|
71
|
-
)
|
|
68
|
+
required=True,
|
|
69
|
+
)
|
|
72
70
|
if result is None:
|
|
73
71
|
raise KeyboardInterrupt
|
|
74
72
|
answers["project_name"] = result
|
|
@@ -81,7 +79,7 @@ def prompt_project_setup(
|
|
|
81
79
|
else:
|
|
82
80
|
answers["project_name"] = Path.cwd().name # fallback
|
|
83
81
|
console.print(
|
|
84
|
-
f"[
|
|
82
|
+
f"[#DA7756]📦 Project Name:[/#DA7756] {answers['project_name']} [dim](current directory)[/dim]"
|
|
85
83
|
)
|
|
86
84
|
|
|
87
85
|
# 2. Language selection - Korean, English, Japanese, Chinese, Other
|
|
@@ -89,75 +87,133 @@ def prompt_project_setup(
|
|
|
89
87
|
|
|
90
88
|
# Build choices list
|
|
91
89
|
language_choices = [
|
|
92
|
-
"
|
|
93
|
-
"English",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"Other - Manual input",
|
|
90
|
+
{"name": "Korean (한국어)", "value": "ko"},
|
|
91
|
+
{"name": "English", "value": "en"},
|
|
92
|
+
{"name": "Japanese (日本語)", "value": "ja"},
|
|
93
|
+
{"name": "Chinese (中文)", "value": "zh"},
|
|
94
|
+
{"name": "Other - Manual input", "value": "other"},
|
|
97
95
|
]
|
|
98
96
|
|
|
99
|
-
# Determine default
|
|
97
|
+
# Determine default
|
|
100
98
|
language_values = ["ko", "en", "ja", "zh", "other"]
|
|
101
99
|
default_locale = initial_locale or "en"
|
|
102
|
-
|
|
100
|
+
default_value = default_locale if default_locale in language_values else "en"
|
|
103
101
|
|
|
104
|
-
|
|
102
|
+
language_choice = _prompt_select(
|
|
105
103
|
"Select your conversation language:",
|
|
106
104
|
choices=language_choices,
|
|
107
|
-
default=
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
# Map choice name back to value
|
|
111
|
-
choice_mapping = {
|
|
112
|
-
"한국어 (Korean)": "ko",
|
|
113
|
-
"English": "en",
|
|
114
|
-
"日本語 (Japanese)": "ja",
|
|
115
|
-
"中文 (Chinese)": "zh",
|
|
116
|
-
"Other - Manual input": "other",
|
|
117
|
-
}
|
|
118
|
-
language_choice = choice_mapping.get(language_choice_name)
|
|
105
|
+
default=default_value,
|
|
106
|
+
)
|
|
119
107
|
|
|
120
108
|
if language_choice is None:
|
|
121
109
|
raise KeyboardInterrupt
|
|
122
110
|
|
|
123
111
|
if language_choice == "other":
|
|
124
112
|
# Prompt for manual input
|
|
125
|
-
custom_lang =
|
|
113
|
+
custom_lang = _prompt_text(
|
|
126
114
|
"Enter your language:",
|
|
127
|
-
|
|
128
|
-
)
|
|
115
|
+
required=True,
|
|
116
|
+
)
|
|
129
117
|
|
|
130
118
|
if custom_lang is None:
|
|
131
119
|
raise KeyboardInterrupt
|
|
132
120
|
|
|
133
121
|
answers["custom_language"] = custom_lang
|
|
134
122
|
answers["locale"] = "other" # When ISO code is not available
|
|
135
|
-
console.print(f"[
|
|
123
|
+
console.print(f"[#DA7756]🌐 Selected Language:[/#DA7756] {custom_lang}")
|
|
136
124
|
else:
|
|
137
125
|
answers["locale"] = language_choice
|
|
138
126
|
language_names = {
|
|
139
|
-
"ko": "
|
|
127
|
+
"ko": "Korean (한국어)",
|
|
140
128
|
"en": "English",
|
|
141
|
-
"ja": "
|
|
142
|
-
"zh": "
|
|
129
|
+
"ja": "Japanese (日本語)",
|
|
130
|
+
"zh": "Chinese (中文)",
|
|
143
131
|
}
|
|
144
132
|
console.print(
|
|
145
|
-
f"[
|
|
133
|
+
f"[#DA7756]🌐 Selected Language:[/#DA7756] {language_names.get(language_choice, language_choice)}"
|
|
146
134
|
)
|
|
147
135
|
|
|
148
|
-
# Auto-install MCP servers
|
|
149
|
-
mcp_servers = ["context7", "playwright", "sequential-thinking"]
|
|
150
|
-
answers["mcp_servers"] = mcp_servers
|
|
151
|
-
console.print("\n[blue]🔧 MCP (Model Context Protocol) Configuration[/blue]")
|
|
152
|
-
console.print(
|
|
153
|
-
"[dim]Enhance AI capabilities with MCP servers (auto-installing recommended servers)[/dim]\n"
|
|
154
|
-
)
|
|
155
|
-
console.print(
|
|
156
|
-
f"[green]✅ MCP servers auto-installed: {', '.join(mcp_servers)}[/green]"
|
|
157
|
-
)
|
|
158
|
-
|
|
159
136
|
return answers
|
|
160
137
|
|
|
161
138
|
except KeyboardInterrupt:
|
|
162
139
|
console.print("\n[yellow]Setup cancelled by user[/yellow]")
|
|
163
140
|
raise
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _prompt_text(
|
|
144
|
+
message: str,
|
|
145
|
+
default: str = "",
|
|
146
|
+
required: bool = False,
|
|
147
|
+
) -> str | None:
|
|
148
|
+
"""Display text input prompt with modern UI fallback.
|
|
149
|
+
|
|
150
|
+
Args:
|
|
151
|
+
message: Prompt message
|
|
152
|
+
default: Default value
|
|
153
|
+
required: Whether input is required
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
User input or None if cancelled
|
|
157
|
+
"""
|
|
158
|
+
try:
|
|
159
|
+
from moai_adk.cli.ui.prompts import styled_input
|
|
160
|
+
|
|
161
|
+
return styled_input(message, default=default, required=required)
|
|
162
|
+
except ImportError:
|
|
163
|
+
import questionary
|
|
164
|
+
|
|
165
|
+
if required:
|
|
166
|
+
result = questionary.text(
|
|
167
|
+
message,
|
|
168
|
+
default=default,
|
|
169
|
+
validate=lambda text: len(text) > 0 or "This field is required",
|
|
170
|
+
).ask()
|
|
171
|
+
else:
|
|
172
|
+
result = questionary.text(message, default=default).ask()
|
|
173
|
+
return result
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _prompt_select(
|
|
177
|
+
message: str,
|
|
178
|
+
choices: list[dict[str, str]],
|
|
179
|
+
default: str | None = None,
|
|
180
|
+
) -> str | None:
|
|
181
|
+
"""Display select prompt with modern UI fallback.
|
|
182
|
+
|
|
183
|
+
Args:
|
|
184
|
+
message: Prompt message
|
|
185
|
+
choices: List of choices with name and value
|
|
186
|
+
default: Default value
|
|
187
|
+
|
|
188
|
+
Returns:
|
|
189
|
+
Selected value or None if cancelled
|
|
190
|
+
"""
|
|
191
|
+
try:
|
|
192
|
+
from moai_adk.cli.ui.prompts import styled_select
|
|
193
|
+
|
|
194
|
+
return styled_select(message, choices=choices, default=default)
|
|
195
|
+
except ImportError:
|
|
196
|
+
import questionary
|
|
197
|
+
|
|
198
|
+
# Map choices for questionary format
|
|
199
|
+
choice_names = [c["name"] for c in choices]
|
|
200
|
+
value_map = {c["name"]: c["value"] for c in choices}
|
|
201
|
+
|
|
202
|
+
# Find default name
|
|
203
|
+
default_name = None
|
|
204
|
+
if default:
|
|
205
|
+
for c in choices:
|
|
206
|
+
if c["value"] == default:
|
|
207
|
+
default_name = c["name"]
|
|
208
|
+
break
|
|
209
|
+
|
|
210
|
+
result_name = questionary.select(
|
|
211
|
+
message,
|
|
212
|
+
choices=choice_names,
|
|
213
|
+
default=default_name,
|
|
214
|
+
).ask()
|
|
215
|
+
|
|
216
|
+
if result_name is None:
|
|
217
|
+
return None
|
|
218
|
+
|
|
219
|
+
return value_map.get(result_name)
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Spec Status Manager CLI Tool
|
|
3
|
+
|
|
4
|
+
Provides command-line interface for managing SPEC status tracking.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
python3 -m moai_adk.cli.spec_status <command> <spec_id> [options]
|
|
8
|
+
moai-spec <command> <spec_id> [options]
|
|
9
|
+
|
|
10
|
+
Commands:
|
|
11
|
+
- status_update: Update SPEC status
|
|
12
|
+
- validate_completion: Validate if SPEC is ready for completion
|
|
13
|
+
- batch_update: Update all completed SPECs
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import argparse
|
|
17
|
+
import json
|
|
18
|
+
import sys
|
|
19
|
+
from datetime import datetime
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
from typing import Any, Dict
|
|
22
|
+
|
|
23
|
+
try:
|
|
24
|
+
from moai_adk.core.spec_status_manager import SpecStatusManager
|
|
25
|
+
except ImportError:
|
|
26
|
+
# Fallback: look in current directory
|
|
27
|
+
import sys
|
|
28
|
+
from pathlib import Path
|
|
29
|
+
|
|
30
|
+
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
31
|
+
try:
|
|
32
|
+
from core.spec_status_manager import SpecStatusManager # type: ignore[no-redef]
|
|
33
|
+
except ImportError:
|
|
34
|
+
raise ImportError("SpecStatusManager not found")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def update_spec_status(spec_id: str, new_status: str, reason: str = "") -> Dict[str, Any]:
|
|
38
|
+
"""Update SPEC status with validation and logging
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
spec_id: The SPEC identifier
|
|
42
|
+
new_status: New status value
|
|
43
|
+
reason: Reason for status change
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
Update result dictionary
|
|
47
|
+
"""
|
|
48
|
+
try:
|
|
49
|
+
# Initialize manager
|
|
50
|
+
project_root = Path.cwd()
|
|
51
|
+
manager = SpecStatusManager(project_root)
|
|
52
|
+
|
|
53
|
+
# Validate new status
|
|
54
|
+
valid_statuses = ["draft", "in-progress", "completed", "archived"]
|
|
55
|
+
if new_status not in valid_statuses:
|
|
56
|
+
return {
|
|
57
|
+
"success": False,
|
|
58
|
+
"error": f"Invalid status: {new_status}. Valid statuses: {valid_statuses}",
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# Check if SPEC exists
|
|
62
|
+
spec_file = project_root / ".moai" / "specs" / spec_id / "spec.md"
|
|
63
|
+
if not spec_file.exists():
|
|
64
|
+
return {"success": False, "error": f"SPEC file not found: {spec_file}"}
|
|
65
|
+
|
|
66
|
+
# Update status
|
|
67
|
+
success = manager.update_spec_status(spec_id, new_status)
|
|
68
|
+
|
|
69
|
+
if success:
|
|
70
|
+
# Log the status change
|
|
71
|
+
log_entry = {
|
|
72
|
+
"timestamp": datetime.now().isoformat(),
|
|
73
|
+
"spec_id": spec_id,
|
|
74
|
+
"old_status": "unknown", # Could be extracted from file before update
|
|
75
|
+
"new_status": new_status,
|
|
76
|
+
"reason": reason,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
# Create status change log
|
|
80
|
+
log_dir = project_root / ".moai" / "logs"
|
|
81
|
+
log_dir.mkdir(parents=True, exist_ok=True)
|
|
82
|
+
log_file = log_dir / "spec_status_changes.jsonl"
|
|
83
|
+
|
|
84
|
+
with open(log_file, "a", encoding="utf-8") as f:
|
|
85
|
+
f.write(json.dumps(log_entry, ensure_ascii=False) + "\n")
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
"success": True,
|
|
89
|
+
"spec_id": spec_id,
|
|
90
|
+
"new_status": new_status,
|
|
91
|
+
"reason": reason,
|
|
92
|
+
"timestamp": log_entry["timestamp"],
|
|
93
|
+
}
|
|
94
|
+
else:
|
|
95
|
+
return {
|
|
96
|
+
"success": False,
|
|
97
|
+
"error": f"Failed to update SPEC {spec_id} status",
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
except Exception as e:
|
|
101
|
+
return {"success": False, "error": f"Error updating SPEC status: {str(e)}"}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def validate_spec_completion(spec_id: str) -> Dict[str, Any]:
|
|
105
|
+
"""Validate if SPEC is ready for completion
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
spec_id: The SPEC identifier
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
Validation result dictionary
|
|
112
|
+
"""
|
|
113
|
+
try:
|
|
114
|
+
project_root = Path.cwd()
|
|
115
|
+
manager = SpecStatusManager(project_root)
|
|
116
|
+
|
|
117
|
+
# Run validation
|
|
118
|
+
validation = manager.validate_spec_for_completion(spec_id)
|
|
119
|
+
|
|
120
|
+
return {"success": True, "spec_id": spec_id, "validation": validation}
|
|
121
|
+
|
|
122
|
+
except Exception as e:
|
|
123
|
+
return {
|
|
124
|
+
"success": False,
|
|
125
|
+
"error": f"Error validating SPEC completion: {str(e)}",
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def batch_update_completed_specs() -> Dict[str, Any]:
|
|
130
|
+
"""Batch update all draft SPECs that have completed implementations
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
Batch update result dictionary
|
|
134
|
+
"""
|
|
135
|
+
try:
|
|
136
|
+
project_root = Path.cwd()
|
|
137
|
+
manager = SpecStatusManager(project_root)
|
|
138
|
+
|
|
139
|
+
# Run batch update
|
|
140
|
+
results = manager.batch_update_completed_specs()
|
|
141
|
+
|
|
142
|
+
# Log the batch update
|
|
143
|
+
log_entry = {
|
|
144
|
+
"timestamp": datetime.now().isoformat(),
|
|
145
|
+
"operation": "batch_update_completed",
|
|
146
|
+
"results": results,
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
log_dir = project_root / ".moai" / "logs"
|
|
150
|
+
log_dir.mkdir(parents=True, exist_ok=True)
|
|
151
|
+
log_file = log_dir / "spec_status_changes.jsonl"
|
|
152
|
+
|
|
153
|
+
with open(log_file, "a", encoding="utf-8") as f:
|
|
154
|
+
f.write(json.dumps(log_entry, ensure_ascii=False) + "\n")
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
"success": True,
|
|
158
|
+
"results": results,
|
|
159
|
+
"timestamp": log_entry["timestamp"],
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
except Exception as e:
|
|
163
|
+
return {"success": False, "error": f"Error in batch update: {str(e)}"}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def detect_draft_specs() -> Dict[str, Any]:
|
|
167
|
+
"""Detect all draft SPECs in the project
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
List of draft SPEC IDs
|
|
171
|
+
"""
|
|
172
|
+
try:
|
|
173
|
+
project_root = Path.cwd()
|
|
174
|
+
manager = SpecStatusManager(project_root)
|
|
175
|
+
|
|
176
|
+
draft_specs = manager.detect_draft_specs()
|
|
177
|
+
|
|
178
|
+
return {
|
|
179
|
+
"success": True,
|
|
180
|
+
"draft_specs": list(draft_specs),
|
|
181
|
+
"count": len(draft_specs),
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
except Exception as e:
|
|
185
|
+
return {"success": False, "error": f"Error detecting draft SPECs: {str(e)}"}
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def main():
|
|
189
|
+
"""Main function"""
|
|
190
|
+
parser = argparse.ArgumentParser(description="Spec Status Manager Hooks")
|
|
191
|
+
parser.add_argument(
|
|
192
|
+
"command",
|
|
193
|
+
choices=[
|
|
194
|
+
"status_update",
|
|
195
|
+
"validate_completion",
|
|
196
|
+
"batch_update",
|
|
197
|
+
"detect_drafts",
|
|
198
|
+
],
|
|
199
|
+
help="Command to execute",
|
|
200
|
+
)
|
|
201
|
+
parser.add_argument("spec_id", nargs="?", help="SPEC ID (for specific commands)")
|
|
202
|
+
parser.add_argument("--status", help="New status value")
|
|
203
|
+
parser.add_argument("--reason", default="", help="Reason for status change")
|
|
204
|
+
|
|
205
|
+
args = parser.parse_args()
|
|
206
|
+
|
|
207
|
+
try:
|
|
208
|
+
result = {}
|
|
209
|
+
|
|
210
|
+
if args.command == "status_update":
|
|
211
|
+
if not args.spec_id or not args.status:
|
|
212
|
+
print(
|
|
213
|
+
json.dumps(
|
|
214
|
+
{
|
|
215
|
+
"success": False,
|
|
216
|
+
"error": "status_update requires spec_id and --status",
|
|
217
|
+
}
|
|
218
|
+
)
|
|
219
|
+
)
|
|
220
|
+
sys.exit(1)
|
|
221
|
+
|
|
222
|
+
result = update_spec_status(args.spec_id, args.status, args.reason)
|
|
223
|
+
|
|
224
|
+
elif args.command == "validate_completion":
|
|
225
|
+
if not args.spec_id:
|
|
226
|
+
print(
|
|
227
|
+
json.dumps(
|
|
228
|
+
{
|
|
229
|
+
"success": False,
|
|
230
|
+
"error": "validate_completion requires spec_id",
|
|
231
|
+
}
|
|
232
|
+
)
|
|
233
|
+
)
|
|
234
|
+
sys.exit(1)
|
|
235
|
+
|
|
236
|
+
result = validate_spec_completion(args.spec_id)
|
|
237
|
+
|
|
238
|
+
elif args.command == "batch_update":
|
|
239
|
+
result = batch_update_completed_specs()
|
|
240
|
+
|
|
241
|
+
elif args.command == "detect_drafts":
|
|
242
|
+
result = detect_draft_specs()
|
|
243
|
+
|
|
244
|
+
# Add command info
|
|
245
|
+
result["command"] = args.command
|
|
246
|
+
result["execution_time"] = datetime.now().isoformat()
|
|
247
|
+
|
|
248
|
+
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
249
|
+
|
|
250
|
+
except Exception as e:
|
|
251
|
+
error_result = {
|
|
252
|
+
"success": False,
|
|
253
|
+
"command": args.command if "args" in locals() else "unknown",
|
|
254
|
+
"error": str(e),
|
|
255
|
+
"execution_time": datetime.now().isoformat(),
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
print(json.dumps(error_result, ensure_ascii=False, indent=2))
|
|
259
|
+
sys.exit(1)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
if __name__ == "__main__":
|
|
263
|
+
main()
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""MoAI-ADK CLI UI Components
|
|
2
|
+
|
|
3
|
+
Modern, user-friendly CLI interface components using InquirerPy and Rich.
|
|
4
|
+
|
|
5
|
+
Provides:
|
|
6
|
+
- Fuzzy search checkbox prompts
|
|
7
|
+
- Progress indicators (bars, spinners)
|
|
8
|
+
- Styled text input and selection prompts
|
|
9
|
+
- Consistent theming across all CLI commands
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from .progress import (
|
|
13
|
+
ProgressContext,
|
|
14
|
+
SpinnerContext,
|
|
15
|
+
create_progress_bar,
|
|
16
|
+
create_spinner,
|
|
17
|
+
)
|
|
18
|
+
from .prompts import (
|
|
19
|
+
fuzzy_checkbox,
|
|
20
|
+
fuzzy_select,
|
|
21
|
+
styled_checkbox,
|
|
22
|
+
styled_confirm,
|
|
23
|
+
styled_input,
|
|
24
|
+
styled_select,
|
|
25
|
+
)
|
|
26
|
+
from .theme import MOAI_THEME, get_styled_choice
|
|
27
|
+
|
|
28
|
+
__all__ = [
|
|
29
|
+
# Prompts
|
|
30
|
+
"fuzzy_checkbox",
|
|
31
|
+
"fuzzy_select",
|
|
32
|
+
"styled_checkbox",
|
|
33
|
+
"styled_confirm",
|
|
34
|
+
"styled_input",
|
|
35
|
+
"styled_select",
|
|
36
|
+
# Progress
|
|
37
|
+
"ProgressContext",
|
|
38
|
+
"SpinnerContext",
|
|
39
|
+
"create_progress_bar",
|
|
40
|
+
"create_spinner",
|
|
41
|
+
# Theme
|
|
42
|
+
"MOAI_THEME",
|
|
43
|
+
"get_styled_choice",
|
|
44
|
+
]
|