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
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: moai:9-feedback
|
|
3
|
+
description: "Submit feedback or report issues"
|
|
4
|
+
argument-hint: "[issue|suggestion|question]"
|
|
5
|
+
allowed-tools: Read, Write, Edit, Grep, Glob, WebFetch, WebSearch, Bash, TodoWrite, AskUserQuestion, Task, Skill
|
|
6
|
+
model: haiku
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Pre-execution Context
|
|
10
|
+
|
|
11
|
+
!git status --porcelain
|
|
12
|
+
!git branch --show-current
|
|
13
|
+
!git log --oneline -1
|
|
14
|
+
|
|
15
|
+
## Essential Files
|
|
16
|
+
|
|
17
|
+
@.moai/config/config.yaml
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# MoAI-ADK Step 9: Feedback Loop
|
|
22
|
+
|
|
23
|
+
> Architecture: Commands → Agents → Skills. This command orchestrates ONLY through `Task()` tool.
|
|
24
|
+
> Delegation Model: Feedback collection delegated to `manager-quality` agent.
|
|
25
|
+
|
|
26
|
+
Workflow Integration: This command implements the feedback loop of the MoAI workflow, allowing users to report issues or suggestions directly from the CLI.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Command Purpose
|
|
31
|
+
|
|
32
|
+
Collect user feedback, bug reports, or feature suggestions and create GitHub issues automatically.
|
|
33
|
+
|
|
34
|
+
Run on: `$ARGUMENTS` (Feedback type)
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Execution Philosophy
|
|
39
|
+
|
|
40
|
+
`/moai:9-feedback` performs feedback collection through agent delegation:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
User Command: /moai:9-feedback [type]
|
|
44
|
+
↓
|
|
45
|
+
Phase 1: Task(subagent_type="manager-quality")
|
|
46
|
+
→ Analyze feedback type
|
|
47
|
+
→ Collect details via AskUserQuestion
|
|
48
|
+
→ Create GitHub Issue via Skill
|
|
49
|
+
↓
|
|
50
|
+
Output: Issue created with link
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Key Principle: Full Delegation Pattern
|
|
54
|
+
|
|
55
|
+
This command exclusively uses these tools:
|
|
56
|
+
|
|
57
|
+
- [HARD] Task() for agent delegation
|
|
58
|
+
WHY: Task orchestration ensures feedback collection responsibility lies with specialized agents
|
|
59
|
+
IMPACT: Direct tool usage bypasses quality assurance and agent expertise
|
|
60
|
+
|
|
61
|
+
- [HARD] AskUserQuestion() for user interaction AT COMMAND LEVEL ONLY
|
|
62
|
+
WHY: Subagents via Task() are stateless and cannot interact with users directly
|
|
63
|
+
IMPACT: Expecting agents to use AskUserQuestion causes workflow failures
|
|
64
|
+
CORRECT: Command collects feedback type and details, passes to agent as parameters
|
|
65
|
+
|
|
66
|
+
- [HARD] Delegate all Bash operations to manager-quality agent
|
|
67
|
+
WHY: Agent context ensures proper error handling and feedback capture
|
|
68
|
+
IMPACT: Direct Bash execution loses feedback traceability and error context
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Associated Agents & Skills
|
|
73
|
+
|
|
74
|
+
| Agent/Skill | Purpose |
|
|
75
|
+
| --------------- | --------------------------------------------- |
|
|
76
|
+
| manager-quality | Feedback collection and GitHub issue creation |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Agent Invocation Patterns (CLAUDE.md Compliance)
|
|
81
|
+
|
|
82
|
+
This command uses agent execution patterns defined in CLAUDE.md (lines 96-120).
|
|
83
|
+
|
|
84
|
+
### Sequential Phase-Based Chaining ✅
|
|
85
|
+
|
|
86
|
+
Command implements simple sequential execution through 2 phases:
|
|
87
|
+
|
|
88
|
+
Phase Flow:
|
|
89
|
+
- Phase 1: Feedback Collection (manager-quality analyzes type and collects details)
|
|
90
|
+
- Phase 2: GitHub Issue Creation (manager-quality creates issue with collected information)
|
|
91
|
+
|
|
92
|
+
Each phase receives outputs from previous phase as context.
|
|
93
|
+
|
|
94
|
+
WHY: Sequential execution ensures complete feedback capture before submission
|
|
95
|
+
- Phase 2 requires validated feedback details from Phase 1
|
|
96
|
+
- Issue creation requires all user input to be collected
|
|
97
|
+
|
|
98
|
+
IMPACT: Skipping Phase 1 would create incomplete GitHub issues
|
|
99
|
+
|
|
100
|
+
### Parallel Execution ❌
|
|
101
|
+
|
|
102
|
+
Not applicable - simple linear workflow
|
|
103
|
+
|
|
104
|
+
WHY: Feedback workflow has minimal complexity
|
|
105
|
+
- Only one agent (manager-quality) handles entire process
|
|
106
|
+
- Single feedback submission at a time
|
|
107
|
+
- No independent operations to parallelize
|
|
108
|
+
|
|
109
|
+
IMPACT: Parallel execution unnecessary for single-agent linear workflow
|
|
110
|
+
|
|
111
|
+
### Resumable Agent Support ❌
|
|
112
|
+
|
|
113
|
+
Not applicable - command completes in single execution
|
|
114
|
+
|
|
115
|
+
WHY: Feedback submission is fast atomic operation
|
|
116
|
+
- Typical execution completes in under 30 seconds
|
|
117
|
+
- GitHub API calls are atomic and fast
|
|
118
|
+
- No long-running processes requiring checkpoints
|
|
119
|
+
|
|
120
|
+
IMPACT: Resume pattern unnecessary for simple feedback workflows
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
Refer to CLAUDE.md "Agent Chaining Patterns" (lines 96-120) for complete pattern architecture.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Execution Process
|
|
129
|
+
|
|
130
|
+
### Step 1: Delegate to Quality Gate Agent
|
|
131
|
+
|
|
132
|
+
Use the manager-quality subagent to collect and submit user feedback:
|
|
133
|
+
|
|
134
|
+
Task: Collect user feedback and create a GitHub issue.
|
|
135
|
+
|
|
136
|
+
Context:
|
|
137
|
+
|
|
138
|
+
- Feedback Type: $ARGUMENTS (default to 'issue' if empty)
|
|
139
|
+
- Conversation Language: {{CONVERSATION_LANGUAGE}}
|
|
140
|
+
|
|
141
|
+
Instructions:
|
|
142
|
+
|
|
143
|
+
1. Determine Feedback Type:
|
|
144
|
+
|
|
145
|
+
[HARD] Resolve feedback type from $ARGUMENTS if provided
|
|
146
|
+
WHY: Pre-specified type accelerates feedback collection
|
|
147
|
+
IMPACT: Skipping argument check forces unnecessary user interaction
|
|
148
|
+
|
|
149
|
+
[HARD] Prompt user to select type when $ARGUMENTS is empty
|
|
150
|
+
WHY: Interactive selection ensures proper categorization
|
|
151
|
+
IMPACT: Assuming default type may misclassify feedback
|
|
152
|
+
|
|
153
|
+
Supported Feedback Types:
|
|
154
|
+
- Bug Report: Technical issues or errors
|
|
155
|
+
- Feature Request: Suggestions for improvements
|
|
156
|
+
- Question/Other: Clarifications or general feedback
|
|
157
|
+
|
|
158
|
+
2. Collect Details:
|
|
159
|
+
|
|
160
|
+
[HARD] Solicit feedback title from user
|
|
161
|
+
WHY: Title establishes feedback summary for issue search and triage
|
|
162
|
+
IMPACT: Missing title reduces issue discoverability
|
|
163
|
+
|
|
164
|
+
[HARD] Solicit detailed description from user
|
|
165
|
+
WHY: Description provides context for developers to understand and respond
|
|
166
|
+
IMPACT: Vague descriptions create follow-up communication overhead
|
|
167
|
+
|
|
168
|
+
[SOFT] Solicit priority level from user (Low/Medium/High)
|
|
169
|
+
WHY: Priority directs team resource allocation
|
|
170
|
+
IMPACT: Missing priority defaults to normal urgency
|
|
171
|
+
|
|
172
|
+
3. Create GitHub Issue:
|
|
173
|
+
|
|
174
|
+
[HARD] Execute GitHub CLI (gh issue create) command with collected feedback
|
|
175
|
+
WHY: GitHub integration ensures feedback enters official issue tracking system
|
|
176
|
+
IMPACT: Untracked feedback is lost to follow-up and implementation
|
|
177
|
+
|
|
178
|
+
[HARD] Apply appropriate labels based on feedback type
|
|
179
|
+
WHY: Labels enable automated triage and dashboard organization
|
|
180
|
+
IMPACT: Untagged issues are invisible to responsible team members
|
|
181
|
+
|
|
182
|
+
[SOFT] Format issue body using consistent template
|
|
183
|
+
WHY: Standardized templates improve issue clarity and consistency
|
|
184
|
+
IMPACT: Inconsistent formatting wastes developer time parsing issues
|
|
185
|
+
|
|
186
|
+
4. Report Result:
|
|
187
|
+
[HARD] Provide user with created issue URL
|
|
188
|
+
WHY: Direct issue link enables immediate user access and tracking
|
|
189
|
+
IMPACT: Missing link requires users to manually search for their feedback
|
|
190
|
+
|
|
191
|
+
[HARD] Confirm successful feedback submission to user
|
|
192
|
+
WHY: Confirmation provides closure and acknowledgment of user contribution
|
|
193
|
+
IMPACT: Silent completion leaves user uncertain about feedback status
|
|
194
|
+
|
|
195
|
+
Language and Accessibility:
|
|
196
|
+
|
|
197
|
+
- [HARD] Use conversation_language for all user-facing interactions
|
|
198
|
+
WHY: User language ensures comprehension and accessibility
|
|
199
|
+
IMPACT: Wrong language creates friction and reduces usability
|
|
200
|
+
|
|
201
|
+
- [HARD] Provide text-based options in AskUserQuestion (exclude emojis)
|
|
202
|
+
WHY: Text options ensure consistency across all platforms and locales
|
|
203
|
+
IMPACT: Emoji options are platform-dependent and may not display correctly
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Summary: Execution Verification Checklist
|
|
208
|
+
|
|
209
|
+
Before considering command execution complete, verify all requirements:
|
|
210
|
+
|
|
211
|
+
- [HARD] Agent Invoked: manager-quality agent executed with feedback details
|
|
212
|
+
Verification: Confirm agent Task() call with feedback context
|
|
213
|
+
Acceptance Criteria: Agent response confirms feedback reception
|
|
214
|
+
|
|
215
|
+
- [HARD] Feedback Collected: User provided title, description, and type
|
|
216
|
+
Verification: Confirm all required fields captured
|
|
217
|
+
Acceptance Criteria: No empty or null feedback fields
|
|
218
|
+
|
|
219
|
+
- [HARD] Issue Created: GitHub issue successfully submitted to repository
|
|
220
|
+
Verification: Confirm gh issue create command executed successfully
|
|
221
|
+
Acceptance Criteria: GitHub API response contains issue ID and URL
|
|
222
|
+
|
|
223
|
+
- [HARD] Link Provided: User received direct URL to created issue
|
|
224
|
+
Verification: Confirm issue URL displayed in user response
|
|
225
|
+
Acceptance Criteria: User can click URL and access their feedback immediately
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Quick Reference
|
|
230
|
+
|
|
231
|
+
| Scenario | Entry Point | Expected Outcome |
|
|
232
|
+
| ---------------- | ----------------------------- | ------------------------------------------- |
|
|
233
|
+
| Report bug | `/moai:9-feedback issue` | GitHub issue created with bug label |
|
|
234
|
+
| Request feature | `/moai:9-feedback suggestion` | GitHub issue created with enhancement label |
|
|
235
|
+
| Ask question | `/moai:9-feedback question` | GitHub issue created with question label |
|
|
236
|
+
| General feedback | `/moai:9-feedback` | Interactive feedback collection |
|
|
237
|
+
|
|
238
|
+
Associated Agent:
|
|
239
|
+
|
|
240
|
+
- `manager-quality` - Feedback manager and GitHub issue creator
|
|
241
|
+
|
|
242
|
+
Feedback Types:
|
|
243
|
+
|
|
244
|
+
- Bug Report: Technical issues or errors
|
|
245
|
+
- Feature Request: Suggestions for improvements
|
|
246
|
+
- Question: Clarifications or help needed
|
|
247
|
+
- Other: General feedback
|
|
248
|
+
|
|
249
|
+
Version: 1.0.0 (Agent-Delegated Pattern)
|
|
250
|
+
Last Updated: 2025-11-25
|
|
251
|
+
Architecture: Commands → Agents → Skills (Complete delegation)
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Output Format
|
|
256
|
+
|
|
257
|
+
Structure agent responses with semantic sections for clarity and consistency:
|
|
258
|
+
|
|
259
|
+
Response Structure:
|
|
260
|
+
|
|
261
|
+
The agent response must include these sections:
|
|
262
|
+
|
|
263
|
+
Feedback Summary:
|
|
264
|
+
Concise recap of feedback type, title, and key points submitted
|
|
265
|
+
|
|
266
|
+
GitHub Integration:
|
|
267
|
+
Confirmation that feedback was submitted to GitHub with issue URL and ID
|
|
268
|
+
|
|
269
|
+
User Language:
|
|
270
|
+
Response provided in user's conversation_language configuration
|
|
271
|
+
|
|
272
|
+
Next Actions:
|
|
273
|
+
Clear options for user to continue workflow or submit additional feedback
|
|
274
|
+
|
|
275
|
+
WHY: Semantic structure ensures consistent response quality and user experience
|
|
276
|
+
IMPACT: Unstructured responses create ambiguity and require user clarification
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Post-Submission User Direction
|
|
281
|
+
|
|
282
|
+
After successful feedback submission, present user with next action options:
|
|
283
|
+
|
|
284
|
+
[HARD] Display post-submission summary to user
|
|
285
|
+
WHY: Summary confirms successful completion and provides issue reference
|
|
286
|
+
IMPACT: Missing summary leaves user uncertain about submission status
|
|
287
|
+
|
|
288
|
+
[SOFT] Offer user next step choices via AskUserQuestion
|
|
289
|
+
WHY: Guided choices help users continue productive workflows
|
|
290
|
+
IMPACT: Abrupt completion requires user to determine next actions
|
|
291
|
+
|
|
292
|
+
Next Step Options:
|
|
293
|
+
- Continue Development: Return to current development workflow
|
|
294
|
+
- Submit Additional Feedback: Report another issue or suggestion
|
|
295
|
+
- View Issue: Open created GitHub issue in browser
|
|
296
|
+
|
|
297
|
+
Requirements:
|
|
298
|
+
|
|
299
|
+
- [HARD] Use conversation_language for all post-submission messaging
|
|
300
|
+
WHY: Consistent language maintains user context
|
|
301
|
+
IMPACT: Language switching disorients users
|
|
302
|
+
|
|
303
|
+
- [HARD] Express all options as text labels without emoji characters
|
|
304
|
+
WHY: Text-only labels ensure universal platform compatibility
|
|
305
|
+
IMPACT: Emojis may fail to display across different systems
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## EXECUTION DIRECTIVE
|
|
310
|
+
|
|
311
|
+
You must NOW execute the command following the "Execution Process" described above.
|
|
312
|
+
|
|
313
|
+
1. Use the manager-quality subagent.
|
|
314
|
+
2. Do NOT just describe what you will do. DO IT.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Hook utilities library - Optimized and consolidated
|
|
3
|
+
|
|
4
|
+
This module provides centralized access to all hook-related utilities:
|
|
5
|
+
- Configuration management (ConfigManager)
|
|
6
|
+
- Core utilities (timeout, common utilities)
|
|
7
|
+
- Data models (HookPayload, HookResult)
|
|
8
|
+
- Project utilities (language detection, git info, SPEC counting)
|
|
9
|
+
- Checkpoint utilities (risky operation detection, checkpoint creation)
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
# Import core components
|
|
14
|
+
# Import checkpoint utilities
|
|
15
|
+
from lib.checkpoint import (
|
|
16
|
+
create_checkpoint,
|
|
17
|
+
detect_risky_operation,
|
|
18
|
+
list_checkpoints,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
# Import utilities
|
|
22
|
+
from lib.common import (
|
|
23
|
+
format_duration,
|
|
24
|
+
get_file_pattern_category,
|
|
25
|
+
get_summary_stats,
|
|
26
|
+
is_root_whitelisted,
|
|
27
|
+
suggest_moai_location,
|
|
28
|
+
)
|
|
29
|
+
from lib.config_manager import (
|
|
30
|
+
ConfigManager,
|
|
31
|
+
get_config,
|
|
32
|
+
get_config_manager,
|
|
33
|
+
get_exit_code,
|
|
34
|
+
get_graceful_degradation,
|
|
35
|
+
get_timeout_seconds,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Import models
|
|
39
|
+
from lib.models import HookPayload, HookResult
|
|
40
|
+
|
|
41
|
+
# Import project utilities
|
|
42
|
+
from lib.project import (
|
|
43
|
+
count_specs,
|
|
44
|
+
find_project_root,
|
|
45
|
+
get_git_info,
|
|
46
|
+
)
|
|
47
|
+
from lib.timeout import CrossPlatformTimeout, TimeoutError, timeout_context
|
|
48
|
+
|
|
49
|
+
__all__ = [
|
|
50
|
+
# Core - Timeout
|
|
51
|
+
"CrossPlatformTimeout",
|
|
52
|
+
"TimeoutError",
|
|
53
|
+
"timeout_context",
|
|
54
|
+
# Core - Configuration
|
|
55
|
+
"ConfigManager",
|
|
56
|
+
"get_config_manager",
|
|
57
|
+
"get_config",
|
|
58
|
+
"get_timeout_seconds",
|
|
59
|
+
"get_graceful_degradation",
|
|
60
|
+
"get_exit_code",
|
|
61
|
+
# Common utilities
|
|
62
|
+
"format_duration",
|
|
63
|
+
"get_summary_stats",
|
|
64
|
+
"is_root_whitelisted",
|
|
65
|
+
"get_file_pattern_category",
|
|
66
|
+
"suggest_moai_location",
|
|
67
|
+
# Models
|
|
68
|
+
"HookPayload",
|
|
69
|
+
"HookResult",
|
|
70
|
+
# Checkpoint
|
|
71
|
+
"create_checkpoint",
|
|
72
|
+
"detect_risky_operation",
|
|
73
|
+
"list_checkpoints",
|
|
74
|
+
# Project
|
|
75
|
+
"find_project_root",
|
|
76
|
+
"get_git_info",
|
|
77
|
+
"count_specs",
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
except ImportError:
|
|
81
|
+
# Fallback if not all imports are available
|
|
82
|
+
__all__ = []
|
|
83
|
+
|
|
84
|
+
__version__ = "1.0.0"
|
|
85
|
+
__author__ = "MoAI-ADK Team"
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Event-Driven Checkpoint system
|
|
3
|
+
|
|
4
|
+
Detect risky tasks and create automatic checkpoints
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import subprocess
|
|
9
|
+
from datetime import datetime
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def detect_risky_operation(tool_name: str, tool_args: dict[str, Any], cwd: str) -> tuple[bool, str]:
|
|
15
|
+
"""Risk task detection (for Event-Driven Checkpoint)
|
|
16
|
+
|
|
17
|
+
Claude Code tool automatically detects dangerous tasks before use.
|
|
18
|
+
When a risk is detected, a checkpoint is automatically created to enable rollback.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
tool_name: Name of the Claude Code tool (Bash, Edit, Write, MultiEdit)
|
|
22
|
+
tool_args: Tool argument dictionary
|
|
23
|
+
cwd: Project root directory path
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
(is_risky, operation_type) tuple
|
|
27
|
+
- is_risky: Whether the operation is dangerous (bool)
|
|
28
|
+
- operation_type: operation type (str: delete, merge, script, critical-file, refactor)
|
|
29
|
+
|
|
30
|
+
Risky Operations:
|
|
31
|
+
- Bash tool: rm -rf, git merge, git reset --hard, git rebase, script execution
|
|
32
|
+
- Edit/Write tool: CLAUDE.md, config.json, .claude/skills/*.md
|
|
33
|
+
- MultiEdit tool: Edit ≥10 items File simultaneously
|
|
34
|
+
- Script execution: Python, Node, Java, Go, Rust, Dart, Swift, Kotlin, Shell scripts
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
>>> detect_risky_operation("Bash", {"command": "rm -rf src/"}, ".")
|
|
38
|
+
(True, 'delete')
|
|
39
|
+
>>> detect_risky_operation("Edit", {"file_path": "CLAUDE.md"}, ".")
|
|
40
|
+
(True, 'critical-file')
|
|
41
|
+
>>> detect_risky_operation("Read", {"file_path": "test.py"}, ".")
|
|
42
|
+
(False, '')
|
|
43
|
+
|
|
44
|
+
Notes:
|
|
45
|
+
- Minimize false positives: ignore safe operations
|
|
46
|
+
- Performance: lightweight string matching (< 1ms)
|
|
47
|
+
- Extensibility: Easily added to the patterns dictionary
|
|
48
|
+
|
|
49
|
+
"""
|
|
50
|
+
# Bash tool: Detect dangerous commands
|
|
51
|
+
if tool_name == "Bash":
|
|
52
|
+
command = tool_args.get("command", "")
|
|
53
|
+
|
|
54
|
+
# Mass Delete
|
|
55
|
+
if any(pattern in command for pattern in ["rm -rf", "git rm"]):
|
|
56
|
+
return (True, "delete")
|
|
57
|
+
|
|
58
|
+
# Git merge/reset/rebase
|
|
59
|
+
if any(pattern in command for pattern in ["git merge", "git reset --hard", "git rebase"]):
|
|
60
|
+
return (True, "merge")
|
|
61
|
+
|
|
62
|
+
# Execute external script (potentially destructive)
|
|
63
|
+
if any(command.startswith(prefix) for prefix in ["python ", "node ", "bash ", "sh "]):
|
|
64
|
+
return (True, "script")
|
|
65
|
+
|
|
66
|
+
# Edit/Write tool: Detect important files
|
|
67
|
+
if tool_name in ("Edit", "Write"):
|
|
68
|
+
file_path = tool_args.get("file_path", "")
|
|
69
|
+
|
|
70
|
+
critical_files = [
|
|
71
|
+
"CLAUDE.md",
|
|
72
|
+
"config.json",
|
|
73
|
+
".claude/skills/moai-core-dev-guide/reference.md",
|
|
74
|
+
".claude/skills/moai-core-spec-metadata-extended/reference.md",
|
|
75
|
+
".moai/config/config.json",
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
if any(cf in file_path for cf in critical_files):
|
|
79
|
+
return (True, "critical-file")
|
|
80
|
+
|
|
81
|
+
# MultiEdit tool: Detect large edits
|
|
82
|
+
if tool_name == "MultiEdit":
|
|
83
|
+
edits = tool_args.get("edits", [])
|
|
84
|
+
if len(edits) >= 10:
|
|
85
|
+
return (True, "refactor")
|
|
86
|
+
|
|
87
|
+
return (False, "")
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def create_checkpoint(cwd: str, operation_type: str) -> str:
|
|
91
|
+
"""Create checkpoint (Git local branch)
|
|
92
|
+
|
|
93
|
+
Automatically creates checkpoints before dangerous operations.
|
|
94
|
+
Prevent remote repository contamination by creating a Git local branch.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
cwd: Project root directory path
|
|
98
|
+
operation_type: operation type (delete, merge, script, etc.)
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
checkpoint_branch: Created branch name
|
|
102
|
+
Returns "checkpoint-failed" on failure
|
|
103
|
+
|
|
104
|
+
Branch Naming:
|
|
105
|
+
before-{operation}-{YYYYMMDD-HHMMSS}
|
|
106
|
+
Example: before-delete-20251015-143000
|
|
107
|
+
|
|
108
|
+
Examples:
|
|
109
|
+
>>> create_checkpoint(".", "delete")
|
|
110
|
+
'before-delete-20251015-143000'
|
|
111
|
+
|
|
112
|
+
Notes:
|
|
113
|
+
- Create only local branch (no remote push)
|
|
114
|
+
- Fallback in case of Git error (ignore and continue)
|
|
115
|
+
- Do not check dirty working directory (allow uncommitted changes)
|
|
116
|
+
- Automatically record checkpoint logs (.moai/checkpoints.log)
|
|
117
|
+
|
|
118
|
+
"""
|
|
119
|
+
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
|
|
120
|
+
branch_name = f"before-{operation_type}-{timestamp}"
|
|
121
|
+
|
|
122
|
+
try:
|
|
123
|
+
# Create a new local branch from the current branch (without checking out)
|
|
124
|
+
subprocess.run(
|
|
125
|
+
["git", "branch", branch_name],
|
|
126
|
+
cwd=cwd,
|
|
127
|
+
check=True,
|
|
128
|
+
capture_output=True,
|
|
129
|
+
text=True,
|
|
130
|
+
timeout=2,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
# Checkpoint log records
|
|
134
|
+
log_checkpoint(cwd, branch_name, operation_type)
|
|
135
|
+
|
|
136
|
+
return branch_name
|
|
137
|
+
|
|
138
|
+
except (
|
|
139
|
+
subprocess.CalledProcessError,
|
|
140
|
+
subprocess.TimeoutExpired,
|
|
141
|
+
FileNotFoundError,
|
|
142
|
+
):
|
|
143
|
+
# Fallback (ignore) in case of Git error
|
|
144
|
+
return "checkpoint-failed"
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def log_checkpoint(cwd: str, branch_name: str, operation_type: str) -> None:
|
|
148
|
+
"""Checkpoint log records (.moai/checkpoints.log)
|
|
149
|
+
|
|
150
|
+
Checkpoint creation history is recorded in JSON Lines format.
|
|
151
|
+
SessionStart reads this log to display a list of checkpoints.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
cwd: Project root directory path
|
|
155
|
+
branch_name: Created checkpoint branch name
|
|
156
|
+
operation_type: operation type
|
|
157
|
+
|
|
158
|
+
Log Format (JSON Lines):
|
|
159
|
+
{"timestamp": "2025-10-15T14:30:00", "branch": "before-delete-...", "operation": "delete"}
|
|
160
|
+
|
|
161
|
+
Examples:
|
|
162
|
+
>>> log_checkpoint(".", "before-delete-20251015-143000", "delete")
|
|
163
|
+
# Add 1 line to .moai/checkpoints.log
|
|
164
|
+
|
|
165
|
+
Notes:
|
|
166
|
+
- If the file does not exist, it is automatically created.
|
|
167
|
+
- Record in append mode (preserve existing logs)
|
|
168
|
+
- Ignored in case of failure (not critical)
|
|
169
|
+
|
|
170
|
+
"""
|
|
171
|
+
log_file = Path(cwd) / ".moai" / "checkpoints.log"
|
|
172
|
+
|
|
173
|
+
try:
|
|
174
|
+
log_file.parent.mkdir(parents=True, exist_ok=True)
|
|
175
|
+
|
|
176
|
+
log_entry = {
|
|
177
|
+
"timestamp": datetime.now().isoformat(),
|
|
178
|
+
"branch": branch_name,
|
|
179
|
+
"operation": operation_type,
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
with log_file.open("a") as f:
|
|
183
|
+
f.write(json.dumps(log_entry) + "\n")
|
|
184
|
+
|
|
185
|
+
except (OSError, PermissionError):
|
|
186
|
+
# Ignore log failures (not critical)
|
|
187
|
+
pass
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def list_checkpoints(cwd: str, max_count: int = 10) -> list[dict[str, str]]:
|
|
191
|
+
"""Checkpoint list (parsing .moai/checkpoints.log)
|
|
192
|
+
|
|
193
|
+
Returns a list of recently created checkpoints.
|
|
194
|
+
Used in the SessionStart, /moai:0-project restore command.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
cwd: Project root directory path
|
|
198
|
+
max_count: Maximum number to return (default 10 items)
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
Checkpoint list (most recent)
|
|
202
|
+
[{"timestamp": "...", "branch": "...", "operation": "..."}, ...]
|
|
203
|
+
|
|
204
|
+
Examples:
|
|
205
|
+
>>> list_checkpoints(".")
|
|
206
|
+
[
|
|
207
|
+
{"timestamp": "2025-10-15T14:30:00", "branch": "before-delete-...", "operation": "delete"},
|
|
208
|
+
{"timestamp": "2025-10-15T14:25:00", "branch": "before-merge-...", "operation": "merge"},
|
|
209
|
+
]
|
|
210
|
+
|
|
211
|
+
Notes:
|
|
212
|
+
- If there is no log file, an empty list is returned.
|
|
213
|
+
- Ignore lines where JSON parsing fails
|
|
214
|
+
- Return only the latest max_count
|
|
215
|
+
|
|
216
|
+
"""
|
|
217
|
+
log_file = Path(cwd) / ".moai" / "checkpoints.log"
|
|
218
|
+
|
|
219
|
+
if not log_file.exists():
|
|
220
|
+
return []
|
|
221
|
+
|
|
222
|
+
checkpoints = []
|
|
223
|
+
|
|
224
|
+
try:
|
|
225
|
+
with log_file.open("r") as f:
|
|
226
|
+
for line in f:
|
|
227
|
+
try:
|
|
228
|
+
checkpoints.append(json.loads(line.strip()))
|
|
229
|
+
except json.JSONDecodeError:
|
|
230
|
+
# Ignore lines where parsing failed
|
|
231
|
+
pass
|
|
232
|
+
except (OSError, PermissionError):
|
|
233
|
+
return []
|
|
234
|
+
|
|
235
|
+
# Return only the most recent max_count items (in order of latest)
|
|
236
|
+
return checkpoints[-max_count:]
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
__all__ = [
|
|
240
|
+
"detect_risky_operation",
|
|
241
|
+
"create_checkpoint",
|
|
242
|
+
"log_checkpoint",
|
|
243
|
+
"list_checkpoints",
|
|
244
|
+
]
|