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,513 @@
|
|
|
1
|
+
name: Continuous Integration
|
|
2
|
+
|
|
3
|
+
# Universal CI/CD pipeline for MoAI-ADK projects
|
|
4
|
+
# Auto-detects: Python, Node.js, Go, Rust, Java, Ruby
|
|
5
|
+
# Triggers: Pull requests and pushes to main/develop branches
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
pull_request:
|
|
9
|
+
branches: [main, develop]
|
|
10
|
+
push:
|
|
11
|
+
branches: [develop, main]
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
checks: write
|
|
16
|
+
pull-requests: write
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: ci-${{ github.ref }}
|
|
20
|
+
cancel-in-progress: true
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
detect-language:
|
|
24
|
+
name: 🔍 Detect Project Language
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
outputs:
|
|
27
|
+
python: ${{ steps.detect.outputs.python }}
|
|
28
|
+
node: ${{ steps.detect.outputs.node }}
|
|
29
|
+
go: ${{ steps.detect.outputs.go }}
|
|
30
|
+
rust: ${{ steps.detect.outputs.rust }}
|
|
31
|
+
java: ${{ steps.detect.outputs.java }}
|
|
32
|
+
ruby: ${{ steps.detect.outputs.ruby }}
|
|
33
|
+
primary_language: ${{ steps.detect.outputs.primary_language }}
|
|
34
|
+
|
|
35
|
+
steps:
|
|
36
|
+
- name: 📥 Checkout code
|
|
37
|
+
uses: actions/checkout@v4
|
|
38
|
+
|
|
39
|
+
- name: 🔎 Auto-detect language
|
|
40
|
+
id: detect
|
|
41
|
+
run: |
|
|
42
|
+
echo "🔍 Auto-detecting project language..."
|
|
43
|
+
echo ""
|
|
44
|
+
|
|
45
|
+
# Python detection
|
|
46
|
+
if [ -f "pyproject.toml" ] || [ -f "setup.py" ] || [ -f "requirements.txt" ]; then
|
|
47
|
+
echo "✅ Python project detected"
|
|
48
|
+
echo "python=true" >> $GITHUB_OUTPUT
|
|
49
|
+
PRIMARY="python"
|
|
50
|
+
else
|
|
51
|
+
echo "python=false" >> $GITHUB_OUTPUT
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# Node.js detection
|
|
55
|
+
if [ -f "package.json" ]; then
|
|
56
|
+
echo "✅ Node.js project detected"
|
|
57
|
+
echo "node=true" >> $GITHUB_OUTPUT
|
|
58
|
+
[ -z "$PRIMARY" ] && PRIMARY="node"
|
|
59
|
+
else
|
|
60
|
+
echo "node=false" >> $GITHUB_OUTPUT
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
# Go detection
|
|
64
|
+
if [ -f "go.mod" ]; then
|
|
65
|
+
echo "✅ Go project detected"
|
|
66
|
+
echo "go=true" >> $GITHUB_OUTPUT
|
|
67
|
+
[ -z "$PRIMARY" ] && PRIMARY="go"
|
|
68
|
+
else
|
|
69
|
+
echo "go=false" >> $GITHUB_OUTPUT
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Rust detection
|
|
73
|
+
if [ -f "Cargo.toml" ]; then
|
|
74
|
+
echo "✅ Rust project detected"
|
|
75
|
+
echo "rust=true" >> $GITHUB_OUTPUT
|
|
76
|
+
[ -z "$PRIMARY" ] && PRIMARY="rust"
|
|
77
|
+
else
|
|
78
|
+
echo "rust=false" >> $GITHUB_OUTPUT
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Java detection
|
|
82
|
+
if [ -f "pom.xml" ] || [ -f "build.gradle" ] || [ -f "build.gradle.kts" ]; then
|
|
83
|
+
echo "✅ Java project detected"
|
|
84
|
+
echo "java=true" >> $GITHUB_OUTPUT
|
|
85
|
+
[ -z "$PRIMARY" ] && PRIMARY="java"
|
|
86
|
+
else
|
|
87
|
+
echo "java=false" >> $GITHUB_OUTPUT
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
# Ruby detection
|
|
91
|
+
if [ -f "Gemfile" ]; then
|
|
92
|
+
echo "✅ Ruby project detected"
|
|
93
|
+
echo "ruby=true" >> $GITHUB_OUTPUT
|
|
94
|
+
[ -z "$PRIMARY" ] && PRIMARY="ruby"
|
|
95
|
+
else
|
|
96
|
+
echo "ruby=false" >> $GITHUB_OUTPUT
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
# Set primary language
|
|
100
|
+
if [ -z "$PRIMARY" ]; then
|
|
101
|
+
echo "⚠️ No language detected, defaulting to generic checks"
|
|
102
|
+
PRIMARY="generic"
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
echo ""
|
|
106
|
+
echo "✅ Primary language: $PRIMARY"
|
|
107
|
+
echo "primary_language=$PRIMARY" >> $GITHUB_OUTPUT
|
|
108
|
+
|
|
109
|
+
code-quality-python:
|
|
110
|
+
name: 🐍 Python Code Quality
|
|
111
|
+
runs-on: ubuntu-latest
|
|
112
|
+
needs: detect-language
|
|
113
|
+
if: needs.detect-language.outputs.python == 'true'
|
|
114
|
+
|
|
115
|
+
steps:
|
|
116
|
+
- name: 📥 Checkout code
|
|
117
|
+
uses: actions/checkout@v4
|
|
118
|
+
|
|
119
|
+
- name: 🐍 Setup Python
|
|
120
|
+
uses: actions/setup-python@v5
|
|
121
|
+
with:
|
|
122
|
+
python-version: "3.11"
|
|
123
|
+
|
|
124
|
+
- name: 📦 Install dependencies
|
|
125
|
+
run: |
|
|
126
|
+
echo "📦 Installing Python dependencies..."
|
|
127
|
+
|
|
128
|
+
# Try pip install with pyproject.toml, setup.py, or requirements.txt
|
|
129
|
+
if [ -f "pyproject.toml" ]; then
|
|
130
|
+
pip install -e .[dev] || pip install -e . || true
|
|
131
|
+
elif [ -f "setup.py" ]; then
|
|
132
|
+
pip install -e . || true
|
|
133
|
+
elif [ -f "requirements.txt" ]; then
|
|
134
|
+
pip install -r requirements.txt || true
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
# Install common linters (best-effort)
|
|
138
|
+
pip install black ruff mypy bandit || true
|
|
139
|
+
|
|
140
|
+
- name: 🎨 Check code formatting (black)
|
|
141
|
+
run: |
|
|
142
|
+
echo "🎨 Checking Python code formatting..."
|
|
143
|
+
black --check . --line-length=120 || echo "⚠️ Formatting issues found (non-blocking)"
|
|
144
|
+
|
|
145
|
+
- name: 🔧 Lint code (ruff)
|
|
146
|
+
run: |
|
|
147
|
+
echo "🔧 Linting Python code..."
|
|
148
|
+
ruff check . || echo "⚠️ Linting issues found (non-blocking)"
|
|
149
|
+
|
|
150
|
+
- name: 📝 Type checking (mypy)
|
|
151
|
+
run: |
|
|
152
|
+
echo "📝 Type checking Python code..."
|
|
153
|
+
mypy . --ignore-missing-imports || echo "⚠️ Type issues found (non-blocking)"
|
|
154
|
+
|
|
155
|
+
- name: 🔐 Security check (bandit)
|
|
156
|
+
run: |
|
|
157
|
+
echo "🔐 Security scanning Python code..."
|
|
158
|
+
bandit -r . -ll || echo "⚠️ Security issues found (non-blocking)"
|
|
159
|
+
|
|
160
|
+
code-quality-node:
|
|
161
|
+
name: 🟢 Node.js Code Quality
|
|
162
|
+
runs-on: ubuntu-latest
|
|
163
|
+
needs: detect-language
|
|
164
|
+
if: needs.detect-language.outputs.node == 'true'
|
|
165
|
+
|
|
166
|
+
steps:
|
|
167
|
+
- name: 📥 Checkout code
|
|
168
|
+
uses: actions/checkout@v4
|
|
169
|
+
|
|
170
|
+
- name: 🟢 Setup Node.js
|
|
171
|
+
uses: actions/setup-node@v4
|
|
172
|
+
with:
|
|
173
|
+
node-version: '20'
|
|
174
|
+
cache: 'npm'
|
|
175
|
+
|
|
176
|
+
- name: 📦 Install dependencies
|
|
177
|
+
run: |
|
|
178
|
+
echo "📦 Installing Node.js dependencies..."
|
|
179
|
+
npm ci || npm install || true
|
|
180
|
+
|
|
181
|
+
- name: 🔧 Lint code (ESLint)
|
|
182
|
+
run: |
|
|
183
|
+
echo "🔧 Linting JavaScript/TypeScript code..."
|
|
184
|
+
npm run lint || npx eslint . || echo "⚠️ Linting issues found (non-blocking)"
|
|
185
|
+
|
|
186
|
+
- name: 🎨 Check formatting (Prettier)
|
|
187
|
+
run: |
|
|
188
|
+
echo "🎨 Checking code formatting..."
|
|
189
|
+
npm run format:check || npx prettier --check . || echo "⚠️ Formatting issues found (non-blocking)"
|
|
190
|
+
|
|
191
|
+
- name: 📝 Type checking (TypeScript)
|
|
192
|
+
run: |
|
|
193
|
+
echo "📝 Type checking TypeScript..."
|
|
194
|
+
npm run type-check || npx tsc --noEmit || echo "⚠️ Type issues found (non-blocking)"
|
|
195
|
+
|
|
196
|
+
code-quality-go:
|
|
197
|
+
name: 🐹 Go Code Quality
|
|
198
|
+
runs-on: ubuntu-latest
|
|
199
|
+
needs: detect-language
|
|
200
|
+
if: needs.detect-language.outputs.go == 'true'
|
|
201
|
+
|
|
202
|
+
steps:
|
|
203
|
+
- name: 📥 Checkout code
|
|
204
|
+
uses: actions/checkout@v4
|
|
205
|
+
|
|
206
|
+
- name: 🐹 Setup Go
|
|
207
|
+
uses: actions/setup-go@v5
|
|
208
|
+
with:
|
|
209
|
+
go-version: '1.21'
|
|
210
|
+
|
|
211
|
+
- name: 🔧 Format check (gofmt)
|
|
212
|
+
run: |
|
|
213
|
+
echo "🔧 Checking Go code formatting..."
|
|
214
|
+
gofmt -l . | grep . && echo "⚠️ Formatting issues found" || echo "✅ Format check passed"
|
|
215
|
+
|
|
216
|
+
- name: 📝 Lint code (golangci-lint)
|
|
217
|
+
run: |
|
|
218
|
+
echo "📝 Linting Go code..."
|
|
219
|
+
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
220
|
+
golangci-lint run || echo "⚠️ Linting issues found (non-blocking)"
|
|
221
|
+
|
|
222
|
+
- name: 🔍 Vet code
|
|
223
|
+
run: |
|
|
224
|
+
echo "🔍 Running go vet..."
|
|
225
|
+
go vet ./... || echo "⚠️ Vet issues found (non-blocking)"
|
|
226
|
+
|
|
227
|
+
code-quality-rust:
|
|
228
|
+
name: 🦀 Rust Code Quality
|
|
229
|
+
runs-on: ubuntu-latest
|
|
230
|
+
needs: detect-language
|
|
231
|
+
if: needs.detect-language.outputs.rust == 'true'
|
|
232
|
+
|
|
233
|
+
steps:
|
|
234
|
+
- name: 📥 Checkout code
|
|
235
|
+
uses: actions/checkout@v4
|
|
236
|
+
|
|
237
|
+
- name: 🦀 Setup Rust
|
|
238
|
+
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
239
|
+
|
|
240
|
+
- name: 🔧 Format check (rustfmt)
|
|
241
|
+
run: |
|
|
242
|
+
echo "🔧 Checking Rust code formatting..."
|
|
243
|
+
cargo fmt --check || echo "⚠️ Formatting issues found (non-blocking)"
|
|
244
|
+
|
|
245
|
+
- name: 📝 Lint code (clippy)
|
|
246
|
+
run: |
|
|
247
|
+
echo "📝 Linting Rust code..."
|
|
248
|
+
cargo clippy -- -D warnings || echo "⚠️ Clippy warnings found (non-blocking)"
|
|
249
|
+
|
|
250
|
+
test-python:
|
|
251
|
+
name: 🧪 Python Tests
|
|
252
|
+
runs-on: ubuntu-latest
|
|
253
|
+
needs: [detect-language, code-quality-python]
|
|
254
|
+
if: needs.detect-language.outputs.python == 'true'
|
|
255
|
+
|
|
256
|
+
strategy:
|
|
257
|
+
matrix:
|
|
258
|
+
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
259
|
+
|
|
260
|
+
steps:
|
|
261
|
+
- name: 📥 Checkout code
|
|
262
|
+
uses: actions/checkout@v4
|
|
263
|
+
|
|
264
|
+
- name: 🐍 Setup Python ${{ matrix.python-version }}
|
|
265
|
+
uses: actions/setup-python@v5
|
|
266
|
+
with:
|
|
267
|
+
python-version: ${{ matrix.python-version }}
|
|
268
|
+
|
|
269
|
+
- name: 📦 Install dependencies
|
|
270
|
+
run: |
|
|
271
|
+
echo "📦 Installing dependencies for Python ${{ matrix.python-version }}..."
|
|
272
|
+
|
|
273
|
+
if [ -f "pyproject.toml" ]; then
|
|
274
|
+
pip install -e .[dev] || pip install -e . || true
|
|
275
|
+
elif [ -f "setup.py" ]; then
|
|
276
|
+
pip install -e . || true
|
|
277
|
+
elif [ -f "requirements.txt" ]; then
|
|
278
|
+
pip install -r requirements.txt || true
|
|
279
|
+
fi
|
|
280
|
+
|
|
281
|
+
pip install pytest pytest-cov || true
|
|
282
|
+
|
|
283
|
+
- name: 🧪 Run tests with coverage
|
|
284
|
+
run: |
|
|
285
|
+
echo "🧪 Running Python tests..."
|
|
286
|
+
pytest tests/ --cov --cov-report=xml --cov-report=term -v || echo "⚠️ Tests failed or not found"
|
|
287
|
+
|
|
288
|
+
- name: 📊 Upload coverage to Codecov
|
|
289
|
+
uses: codecov/codecov-action@v4
|
|
290
|
+
with:
|
|
291
|
+
files: ./coverage.xml
|
|
292
|
+
flags: unittests
|
|
293
|
+
name: codecov-py${{ matrix.python-version }}
|
|
294
|
+
fail_ci_if_error: false
|
|
295
|
+
env:
|
|
296
|
+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
297
|
+
|
|
298
|
+
test-node:
|
|
299
|
+
name: 🧪 Node.js Tests
|
|
300
|
+
runs-on: ubuntu-latest
|
|
301
|
+
needs: [detect-language, code-quality-node]
|
|
302
|
+
if: needs.detect-language.outputs.node == 'true'
|
|
303
|
+
|
|
304
|
+
steps:
|
|
305
|
+
- name: 📥 Checkout code
|
|
306
|
+
uses: actions/checkout@v4
|
|
307
|
+
|
|
308
|
+
- name: 🟢 Setup Node.js
|
|
309
|
+
uses: actions/setup-node@v4
|
|
310
|
+
with:
|
|
311
|
+
node-version: '20'
|
|
312
|
+
cache: 'npm'
|
|
313
|
+
|
|
314
|
+
- name: 📦 Install dependencies
|
|
315
|
+
run: npm ci || npm install
|
|
316
|
+
|
|
317
|
+
- name: 🧪 Run tests
|
|
318
|
+
run: |
|
|
319
|
+
echo "🧪 Running Node.js tests..."
|
|
320
|
+
npm test || echo "⚠️ Tests failed or not found"
|
|
321
|
+
|
|
322
|
+
test-go:
|
|
323
|
+
name: 🧪 Go Tests
|
|
324
|
+
runs-on: ubuntu-latest
|
|
325
|
+
needs: [detect-language, code-quality-go]
|
|
326
|
+
if: needs.detect-language.outputs.go == 'true'
|
|
327
|
+
|
|
328
|
+
steps:
|
|
329
|
+
- name: 📥 Checkout code
|
|
330
|
+
uses: actions/checkout@v4
|
|
331
|
+
|
|
332
|
+
- name: 🐹 Setup Go
|
|
333
|
+
uses: actions/setup-go@v5
|
|
334
|
+
with:
|
|
335
|
+
go-version: '1.21'
|
|
336
|
+
|
|
337
|
+
- name: 🧪 Run tests
|
|
338
|
+
run: |
|
|
339
|
+
echo "🧪 Running Go tests..."
|
|
340
|
+
go test -v ./... -coverprofile=coverage.out || echo "⚠️ Tests failed or not found"
|
|
341
|
+
|
|
342
|
+
- name: 📊 Upload coverage
|
|
343
|
+
uses: codecov/codecov-action@v4
|
|
344
|
+
with:
|
|
345
|
+
files: ./coverage.out
|
|
346
|
+
flags: unittests
|
|
347
|
+
fail_ci_if_error: false
|
|
348
|
+
env:
|
|
349
|
+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
350
|
+
|
|
351
|
+
test-rust:
|
|
352
|
+
name: 🧪 Rust Tests
|
|
353
|
+
runs-on: ubuntu-latest
|
|
354
|
+
needs: [detect-language, code-quality-rust]
|
|
355
|
+
if: needs.detect-language.outputs.rust == 'true'
|
|
356
|
+
|
|
357
|
+
steps:
|
|
358
|
+
- name: 📥 Checkout code
|
|
359
|
+
uses: actions/checkout@v4
|
|
360
|
+
|
|
361
|
+
- name: 🦀 Setup Rust
|
|
362
|
+
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
363
|
+
|
|
364
|
+
- name: 🧪 Run tests
|
|
365
|
+
run: |
|
|
366
|
+
echo "🧪 Running Rust tests..."
|
|
367
|
+
cargo test || echo "⚠️ Tests failed or not found"
|
|
368
|
+
|
|
369
|
+
build-python:
|
|
370
|
+
name: 🏗️ Build Python Package
|
|
371
|
+
runs-on: ubuntu-latest
|
|
372
|
+
needs: [detect-language, test-python]
|
|
373
|
+
if: needs.detect-language.outputs.python == 'true'
|
|
374
|
+
|
|
375
|
+
steps:
|
|
376
|
+
- name: 📥 Checkout code
|
|
377
|
+
uses: actions/checkout@v4
|
|
378
|
+
|
|
379
|
+
- name: 🐍 Setup Python
|
|
380
|
+
uses: actions/setup-python@v5
|
|
381
|
+
with:
|
|
382
|
+
python-version: "3.11"
|
|
383
|
+
|
|
384
|
+
- name: 📦 Install build tools
|
|
385
|
+
run: |
|
|
386
|
+
pip install build || true
|
|
387
|
+
|
|
388
|
+
- name: 🔨 Build package
|
|
389
|
+
run: |
|
|
390
|
+
echo "🔨 Building Python package..."
|
|
391
|
+
python -m build || echo "⚠️ Build failed (non-blocking)"
|
|
392
|
+
|
|
393
|
+
if [ -d "dist/" ]; then
|
|
394
|
+
echo "✅ Package built successfully"
|
|
395
|
+
ls -lh dist/
|
|
396
|
+
fi
|
|
397
|
+
|
|
398
|
+
- name: 📤 Upload build artifacts
|
|
399
|
+
if: success()
|
|
400
|
+
uses: actions/upload-artifact@v4
|
|
401
|
+
with:
|
|
402
|
+
name: python-dist
|
|
403
|
+
path: dist/
|
|
404
|
+
retention-days: 7
|
|
405
|
+
|
|
406
|
+
build-node:
|
|
407
|
+
name: 🏗️ Build Node.js Package
|
|
408
|
+
runs-on: ubuntu-latest
|
|
409
|
+
needs: [detect-language, test-node]
|
|
410
|
+
if: needs.detect-language.outputs.node == 'true'
|
|
411
|
+
|
|
412
|
+
steps:
|
|
413
|
+
- name: 📥 Checkout code
|
|
414
|
+
uses: actions/checkout@v4
|
|
415
|
+
|
|
416
|
+
- name: 🟢 Setup Node.js
|
|
417
|
+
uses: actions/setup-node@v4
|
|
418
|
+
with:
|
|
419
|
+
node-version: '20'
|
|
420
|
+
cache: 'npm'
|
|
421
|
+
|
|
422
|
+
- name: 📦 Install dependencies
|
|
423
|
+
run: npm ci || npm install
|
|
424
|
+
|
|
425
|
+
- name: 🔨 Build package
|
|
426
|
+
run: |
|
|
427
|
+
echo "🔨 Building Node.js package..."
|
|
428
|
+
npm run build || echo "⚠️ Build script not found (non-blocking)"
|
|
429
|
+
|
|
430
|
+
build-go:
|
|
431
|
+
name: 🏗️ Build Go Binary
|
|
432
|
+
runs-on: ubuntu-latest
|
|
433
|
+
needs: [detect-language, test-go]
|
|
434
|
+
if: needs.detect-language.outputs.go == 'true'
|
|
435
|
+
|
|
436
|
+
steps:
|
|
437
|
+
- name: 📥 Checkout code
|
|
438
|
+
uses: actions/checkout@v4
|
|
439
|
+
|
|
440
|
+
- name: 🐹 Setup Go
|
|
441
|
+
uses: actions/setup-go@v5
|
|
442
|
+
with:
|
|
443
|
+
go-version: '1.21'
|
|
444
|
+
|
|
445
|
+
- name: 🔨 Build binary
|
|
446
|
+
run: |
|
|
447
|
+
echo "🔨 Building Go binary..."
|
|
448
|
+
go build -v ./... || echo "⚠️ Build failed (non-blocking)"
|
|
449
|
+
|
|
450
|
+
build-rust:
|
|
451
|
+
name: 🏗️ Build Rust Binary
|
|
452
|
+
runs-on: ubuntu-latest
|
|
453
|
+
needs: [detect-language, test-rust]
|
|
454
|
+
if: needs.detect-language.outputs.rust == 'true'
|
|
455
|
+
|
|
456
|
+
steps:
|
|
457
|
+
- name: 📥 Checkout code
|
|
458
|
+
uses: actions/checkout@v4
|
|
459
|
+
|
|
460
|
+
- name: 🦀 Setup Rust
|
|
461
|
+
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
462
|
+
|
|
463
|
+
- name: 🔨 Build binary
|
|
464
|
+
run: |
|
|
465
|
+
echo "🔨 Building Rust binary..."
|
|
466
|
+
cargo build --release || echo "⚠️ Build failed (non-blocking)"
|
|
467
|
+
|
|
468
|
+
quality-gate:
|
|
469
|
+
name: ✅ Quality Gate
|
|
470
|
+
runs-on: ubuntu-latest
|
|
471
|
+
needs: [detect-language]
|
|
472
|
+
if: always()
|
|
473
|
+
|
|
474
|
+
steps:
|
|
475
|
+
- name: 📊 Check results
|
|
476
|
+
run: |
|
|
477
|
+
echo "📊 Quality Gate Results:"
|
|
478
|
+
echo ""
|
|
479
|
+
echo "Primary Language: ${{ needs.detect-language.outputs.primary_language }}"
|
|
480
|
+
echo ""
|
|
481
|
+
echo "✅ CI Pipeline completed"
|
|
482
|
+
echo ""
|
|
483
|
+
echo "Note: This is a universal CI pipeline that adapts to your project."
|
|
484
|
+
echo "Failures in optional steps (linting, formatting) are non-blocking."
|
|
485
|
+
|
|
486
|
+
- name: 📝 Summary
|
|
487
|
+
if: always()
|
|
488
|
+
run: |
|
|
489
|
+
cat >> $GITHUB_STEP_SUMMARY << 'SUMMARY'
|
|
490
|
+
## ✅ Universal CI Pipeline Summary
|
|
491
|
+
|
|
492
|
+
| Check | Status |
|
|
493
|
+
|-------|--------|
|
|
494
|
+
| Language Detection | ✅ Passed |
|
|
495
|
+
| Code Quality | See individual jobs |
|
|
496
|
+
| Tests | See individual jobs |
|
|
497
|
+
| Build | See individual jobs |
|
|
498
|
+
|
|
499
|
+
### Detected Languages
|
|
500
|
+
- **Python**: ${{ needs.detect-language.outputs.python }}
|
|
501
|
+
- **Node.js**: ${{ needs.detect-language.outputs.node }}
|
|
502
|
+
- **Go**: ${{ needs.detect-language.outputs.go }}
|
|
503
|
+
- **Rust**: ${{ needs.detect-language.outputs.rust }}
|
|
504
|
+
- **Java**: ${{ needs.detect-language.outputs.java }}
|
|
505
|
+
- **Ruby**: ${{ needs.detect-language.outputs.ruby }}
|
|
506
|
+
|
|
507
|
+
### Primary Language
|
|
508
|
+
**${{ needs.detect-language.outputs.primary_language }}**
|
|
509
|
+
|
|
510
|
+
---
|
|
511
|
+
|
|
512
|
+
*This is a universal CI pipeline provided by MoAI-ADK*
|
|
513
|
+
SUMMARY
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
name: 🔒 Security Secrets Detection
|
|
2
|
+
|
|
3
|
+
# Trigger on every push and PR to catch secrets early
|
|
4
|
+
on:
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [main, develop]
|
|
7
|
+
push:
|
|
8
|
+
branches: [main, develop]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
security-events: write
|
|
13
|
+
pull-requests: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
secrets-detection:
|
|
17
|
+
name: 🔐 Detect API Keys & Secrets
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: 📥 Checkout code
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
fetch-depth: 0 # Full history for secret scanning
|
|
25
|
+
|
|
26
|
+
- name: 🔑 Run TruffleHog Secret Scanner
|
|
27
|
+
uses: trufflesecurity/trufflehog@main
|
|
28
|
+
with:
|
|
29
|
+
path: ./
|
|
30
|
+
base: ${{ github.event.repository.default_branch }}
|
|
31
|
+
head: HEAD
|
|
32
|
+
extra_args: --debug --only-verified
|
|
33
|
+
|
|
34
|
+
- name: 🔍 Custom Pattern Detection
|
|
35
|
+
run: |
|
|
36
|
+
echo "🔍 Running custom secret pattern detection..."
|
|
37
|
+
|
|
38
|
+
# Define patterns to search for
|
|
39
|
+
PATTERNS=(
|
|
40
|
+
"AIzaSy[A-Za-z0-9_-]{35}" # Google APIs
|
|
41
|
+
"sk-[A-Za-z0-9]{20,}" # OpenAI
|
|
42
|
+
"sk_[A-Za-z0-9]{20,}" # OpenAI variant
|
|
43
|
+
"sk-ant-[A-Za-z0-9]{20,}" # Anthropic
|
|
44
|
+
"AKIA[0-9A-Z]{16}" # AWS Access Keys
|
|
45
|
+
"aws_secret_access_key.*=.*[A-Za-z0-9/+]{40}"
|
|
46
|
+
"access[_-]?token.*=.*[A-Za-z0-9._-]{20,}"
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
# Excluded directories
|
|
50
|
+
EXCLUDE_DIRS="node_modules|venv|.venv|.git|.next|dist|build"
|
|
51
|
+
|
|
52
|
+
FOUND_SECRETS=false
|
|
53
|
+
|
|
54
|
+
for PATTERN in "${PATTERNS[@]}"; do
|
|
55
|
+
echo "Checking pattern: $PATTERN"
|
|
56
|
+
|
|
57
|
+
MATCHES=$(find . \
|
|
58
|
+
-type f \
|
|
59
|
+
-not -path "*/.*" \
|
|
60
|
+
-not -path "*/$EXCLUDE_DIRS/*" \
|
|
61
|
+
-exec grep -l "$PATTERN" {} \; 2>/dev/null || true)
|
|
62
|
+
|
|
63
|
+
if [ ! -z "$MATCHES" ]; then
|
|
64
|
+
echo "❌ Found potential secrets in:"
|
|
65
|
+
echo "$MATCHES"
|
|
66
|
+
FOUND_SECRETS=true
|
|
67
|
+
fi
|
|
68
|
+
done
|
|
69
|
+
|
|
70
|
+
if [ "$FOUND_SECRETS" = true ]; then
|
|
71
|
+
echo ""
|
|
72
|
+
echo "⚠️ Potential secrets detected! Please review before committing."
|
|
73
|
+
exit 1
|
|
74
|
+
else
|
|
75
|
+
echo "✅ No obvious secrets detected"
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
- name: 📋 Check .env and secrets/ directories
|
|
79
|
+
run: |
|
|
80
|
+
echo "📋 Checking for .env files in staging area..."
|
|
81
|
+
|
|
82
|
+
# Get list of files that would be committed
|
|
83
|
+
FILES=$(git diff --cached --name-only 2>/dev/null || true)
|
|
84
|
+
|
|
85
|
+
# Check for .env files and secrets directory
|
|
86
|
+
if echo "$FILES" | grep -q -E '\.env|secrets/|\.key|\.pem'; then
|
|
87
|
+
echo "❌ ERROR: Attempting to commit sensitive files!"
|
|
88
|
+
echo ""
|
|
89
|
+
echo "Files detected:"
|
|
90
|
+
echo "$FILES" | grep -E '\.env|secrets/|\.key|\.pem'
|
|
91
|
+
echo ""
|
|
92
|
+
echo "These files should NOT be committed:"
|
|
93
|
+
echo " - .env files (API keys, tokens)"
|
|
94
|
+
echo " - secrets/ directory (credentials)"
|
|
95
|
+
echo " - .key, .pem files (certificates)"
|
|
96
|
+
echo ""
|
|
97
|
+
echo "Add them to .gitignore instead:"
|
|
98
|
+
echo " echo '.env' >> .gitignore"
|
|
99
|
+
exit 1
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
echo "✅ No sensitive files detected in commit"
|
|
103
|
+
|
|
104
|
+
- name: 🛡️ Validate .gitignore completeness
|
|
105
|
+
run: |
|
|
106
|
+
echo "🛡️ Verifying .gitignore has all sensitive patterns..."
|
|
107
|
+
|
|
108
|
+
REQUIRED_PATTERNS=(
|
|
109
|
+
".env"
|
|
110
|
+
"*.key"
|
|
111
|
+
"*.pem"
|
|
112
|
+
"secrets/"
|
|
113
|
+
"credentials/"
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
GITIGNORE_FILE=".gitignore"
|
|
117
|
+
|
|
118
|
+
if [ ! -f "$GITIGNORE_FILE" ]; then
|
|
119
|
+
echo "❌ .gitignore file not found!"
|
|
120
|
+
exit 1
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
MISSING_PATTERNS=()
|
|
124
|
+
|
|
125
|
+
for PATTERN in "${REQUIRED_PATTERNS[@]}"; do
|
|
126
|
+
if ! grep -q "$PATTERN" "$GITIGNORE_FILE"; then
|
|
127
|
+
MISSING_PATTERNS+=("$PATTERN")
|
|
128
|
+
fi
|
|
129
|
+
done
|
|
130
|
+
|
|
131
|
+
if [ ${#MISSING_PATTERNS[@]} -gt 0 ]; then
|
|
132
|
+
echo "⚠️ Missing patterns in .gitignore:"
|
|
133
|
+
for PATTERN in "${MISSING_PATTERNS[@]}"; do
|
|
134
|
+
echo " - $PATTERN"
|
|
135
|
+
done
|
|
136
|
+
echo ""
|
|
137
|
+
echo "Please add these patterns to .gitignore"
|
|
138
|
+
exit 1
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
echo "✅ .gitignore is properly configured"
|
|
142
|
+
|
|
143
|
+
- name: 📝 Comment on PR if secrets found
|
|
144
|
+
if: failure() && github.event_name == 'pull_request'
|
|
145
|
+
uses: actions/github-script@v7
|
|
146
|
+
with:
|
|
147
|
+
script: |
|
|
148
|
+
github.rest.issues.createComment({
|
|
149
|
+
issue_number: context.issue.number,
|
|
150
|
+
owner: context.repo.owner,
|
|
151
|
+
repo: context.repo.repo,
|
|
152
|
+
body: `❌ **Security Check Failed: Potential Secrets Detected**
|
|
153
|
+
|
|
154
|
+
This PR contains patterns that match known API keys, tokens, or credentials.
|
|
155
|
+
|
|
156
|
+
🔒 **Security Requirements:**
|
|
157
|
+
- Never commit API keys, tokens, or passwords
|
|
158
|
+
- Use \`.env\` files (git-ignored) for local configuration
|
|
159
|
+
- Use GitHub Secrets for CI/CD sensitive data
|
|
160
|
+
- Use environment variables in production deployments
|
|
161
|
+
|
|
162
|
+
✅ **How to fix:**
|
|
163
|
+
1. Remove real secrets from files
|
|
164
|
+
2. Replace with placeholders like: \`your_actual_key_here\`
|
|
165
|
+
3. Store real values in \`.env\` (add to .gitignore)
|
|
166
|
+
4. Force push corrected commits: \`git push --force-with-lease\`
|
|
167
|
+
|
|
168
|
+
📚 **Reference:** https://github.com/modu-ai/moai-adk/security
|
|
169
|
+
`
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
- name: ✅ Summary
|
|
173
|
+
if: success()
|
|
174
|
+
run: |
|
|
175
|
+
echo "🎉 All security checks passed!"
|
|
176
|
+
echo ""
|
|
177
|
+
echo "✅ Secrets detection complete"
|
|
178
|
+
echo "✅ .env files are properly ignored"
|
|
179
|
+
echo "✅ .gitignore is properly configured"
|