moai-adk 0.15.1__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 -6
- moai_adk/__main__.py +136 -21
- moai_adk/cli/__init__.py +6 -2
- moai_adk/cli/commands/__init__.py +1 -4
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +17 -5
- moai_adk/cli/commands/init.py +105 -47
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +8 -13
- moai_adk/cli/commands/update.py +1734 -65
- moai_adk/cli/main.py +3 -2
- moai_adk/cli/prompts/init_prompts.py +144 -91
- 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/__init__.py +0 -1
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +6 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +147 -16
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/slash_commands.py +0 -1
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -1
- moai_adk/core/git/branch.py +0 -1
- moai_adk/core/git/branch_manager.py +2 -10
- moai_adk/core/git/checkpoint.py +1 -7
- moai_adk/core/git/commit.py +0 -1
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +3 -5
- moai_adk/core/git/manager.py +91 -2
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +20 -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.py +202 -0
- moai_adk/core/language_config_resolver.py +485 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- 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 +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +0 -1
- moai_adk/core/project/backup_utils.py +2 -7
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +17 -39
- moai_adk/core/project/initializer.py +170 -33
- moai_adk/core/project/phase_executor.py +398 -68
- moai_adk/core/project/validator.py +7 -32
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +37 -101
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +0 -1
- moai_adk/core/template/backup.py +82 -17
- moai_adk/core/template/config.py +112 -40
- moai_adk/core/template/languages.py +0 -1
- moai_adk/core/template/merger.py +75 -26
- moai_adk/core/template/processor.py +750 -72
- moai_adk/core/template_engine.py +90 -48
- 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 +557 -0
- 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 +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- 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/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +373 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +264 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +383 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- 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/{alfred/shared/core → moai/lib}/checkpoint.py +9 -36
- 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/{alfred/shared/core → moai/lib}/project.py +63 -44
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/timeout.py +40 -16
- 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 +78 -50
- 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 +312 -283
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +291 -94
- 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 +469 -101
- 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 +128 -0
- moai_adk/templates/.git-hooks/pre-push +220 -13
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
- moai_adk/templates/.gitignore +197 -13
- moai_adk/templates/.mcp.json +20 -0
- 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 +310 -1050
- moai_adk/utils/__init__.py +24 -2
- moai_adk/utils/banner.py +7 -11
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +4 -9
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/{templates/.claude/hooks/alfred/utils → utils}/timeout.py +8 -9
- 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.15.1.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
- {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -80
- moai_adk/core/tags/__init__.py +0 -86
- moai_adk/core/tags/ci_validator.py +0 -463
- moai_adk/core/tags/cli.py +0 -283
- moai_adk/core/tags/generator.py +0 -109
- moai_adk/core/tags/inserter.py +0 -99
- moai_adk/core/tags/mapper.py +0 -126
- moai_adk/core/tags/parser.py +0 -76
- moai_adk/core/tags/pre_commit_validator.py +0 -393
- moai_adk/core/tags/reporter.py +0 -956
- moai_adk/core/tags/tags.py +0 -149
- moai_adk/core/tags/validator.py +0 -897
- moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
- moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
- moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -426
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
- moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1854
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -880
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -793
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1084
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
- moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
- moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
- moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
- moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
- moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
- moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
- moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
- moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
- moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
- moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +0 -288
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
- moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
- moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
- moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
- moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
- moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
- moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
- moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -419
- moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
- moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
- moai_adk/templates/.github/workflows/release.yml +0 -118
- moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/tag-report.yml +0 -269
- moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
- moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
- moai_adk/templates/.moai/config.json +0 -115
- moai_adk/templates/workflows/go-tag-validation.yml +0 -30
- moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
- moai_adk/templates/workflows/python-tag-validation.yml +0 -42
- moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
- moai_adk-0.15.1.dist-info/METADATA +0 -3094
- moai_adk-0.15.1.dist-info/RECORD +0 -365
- {moai_adk-0.15.1.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# @CODE:VERSION-CACHE-001
|
|
3
|
-
"""Version information cache with TTL support
|
|
4
|
-
|
|
5
|
-
TTL-based caching system for version check results to minimize network calls
|
|
6
|
-
during SessionStart hook execution.
|
|
7
|
-
|
|
8
|
-
SPEC: SPEC-UPDATE-ENHANCE-001 - SessionStart 버전 체크 시스템 강화
|
|
9
|
-
Phase 1: Cache System Implementation
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
import json
|
|
13
|
-
from datetime import datetime, timezone
|
|
14
|
-
from pathlib import Path
|
|
15
|
-
from typing import Any
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class VersionCache:
|
|
19
|
-
"""TTL-based version information cache
|
|
20
|
-
|
|
21
|
-
Caches version check results with configurable Time-To-Live (TTL)
|
|
22
|
-
to avoid excessive network calls to PyPI during SessionStart events.
|
|
23
|
-
|
|
24
|
-
Attributes:
|
|
25
|
-
cache_dir: Directory to store cache file
|
|
26
|
-
ttl_hours: Time-to-live in hours (default 24)
|
|
27
|
-
cache_file: Path to the cache JSON file
|
|
28
|
-
|
|
29
|
-
Examples:
|
|
30
|
-
>>> cache = VersionCache(Path(".moai/cache"), ttl_hours=24)
|
|
31
|
-
>>> cache.save({"current_version": "0.8.1", "latest_version": "0.9.0"})
|
|
32
|
-
True
|
|
33
|
-
>>> cache.is_valid()
|
|
34
|
-
True
|
|
35
|
-
>>> data = cache.load()
|
|
36
|
-
>>> data["current_version"]
|
|
37
|
-
'0.8.1'
|
|
38
|
-
"""
|
|
39
|
-
|
|
40
|
-
def __init__(self, cache_dir: Path, ttl_hours: int = 4):
|
|
41
|
-
"""Initialize cache with TTL in hours
|
|
42
|
-
|
|
43
|
-
Args:
|
|
44
|
-
cache_dir: Directory where cache file will be stored
|
|
45
|
-
ttl_hours: Time-to-live in hours (default 4)
|
|
46
|
-
"""
|
|
47
|
-
self.cache_dir = Path(cache_dir)
|
|
48
|
-
self.ttl_hours = ttl_hours
|
|
49
|
-
self.cache_file = self.cache_dir / "version-check.json"
|
|
50
|
-
|
|
51
|
-
def _calculate_age_hours(self, last_check_iso: str) -> float:
|
|
52
|
-
"""Calculate age in hours from ISO timestamp (internal helper)
|
|
53
|
-
|
|
54
|
-
Normalizes timezone-aware and naive datetimes for consistent comparison.
|
|
55
|
-
|
|
56
|
-
Args:
|
|
57
|
-
last_check_iso: ISO format timestamp string
|
|
58
|
-
|
|
59
|
-
Returns:
|
|
60
|
-
Age in hours
|
|
61
|
-
|
|
62
|
-
Raises:
|
|
63
|
-
ValueError: If timestamp parsing fails
|
|
64
|
-
"""
|
|
65
|
-
last_check = datetime.fromisoformat(last_check_iso)
|
|
66
|
-
|
|
67
|
-
# Normalize to naive datetime (remove timezone for comparison)
|
|
68
|
-
if last_check.tzinfo is not None:
|
|
69
|
-
last_check = last_check.replace(tzinfo=None)
|
|
70
|
-
|
|
71
|
-
now = datetime.now()
|
|
72
|
-
return (now - last_check).total_seconds() / 3600
|
|
73
|
-
|
|
74
|
-
def is_valid(self) -> bool:
|
|
75
|
-
"""Check if cache exists and is not expired
|
|
76
|
-
|
|
77
|
-
Returns:
|
|
78
|
-
True if cache file exists and is within TTL, False otherwise
|
|
79
|
-
|
|
80
|
-
Examples:
|
|
81
|
-
>>> cache = VersionCache(Path(".moai/cache"))
|
|
82
|
-
>>> cache.is_valid()
|
|
83
|
-
False # No cache file exists yet
|
|
84
|
-
"""
|
|
85
|
-
if not self.cache_file.exists():
|
|
86
|
-
return False
|
|
87
|
-
|
|
88
|
-
try:
|
|
89
|
-
with open(self.cache_file, "r") as f:
|
|
90
|
-
data = json.load(f)
|
|
91
|
-
|
|
92
|
-
age_hours = self._calculate_age_hours(data["last_check"])
|
|
93
|
-
return age_hours < self.ttl_hours
|
|
94
|
-
|
|
95
|
-
except (json.JSONDecodeError, KeyError, ValueError, OSError):
|
|
96
|
-
# Corrupted or invalid cache file
|
|
97
|
-
return False
|
|
98
|
-
|
|
99
|
-
def load(self) -> dict[str, Any] | None:
|
|
100
|
-
"""Load cached version info if valid
|
|
101
|
-
|
|
102
|
-
Returns:
|
|
103
|
-
Cached version info dictionary if valid, None otherwise
|
|
104
|
-
|
|
105
|
-
Examples:
|
|
106
|
-
>>> cache = VersionCache(Path(".moai/cache"))
|
|
107
|
-
>>> data = cache.load()
|
|
108
|
-
>>> data is None
|
|
109
|
-
True # No valid cache exists
|
|
110
|
-
"""
|
|
111
|
-
if not self.is_valid():
|
|
112
|
-
return None
|
|
113
|
-
|
|
114
|
-
try:
|
|
115
|
-
with open(self.cache_file, "r") as f:
|
|
116
|
-
return json.load(f)
|
|
117
|
-
except (json.JSONDecodeError, OSError):
|
|
118
|
-
# Graceful degradation on read errors
|
|
119
|
-
return None
|
|
120
|
-
|
|
121
|
-
def save(self, version_info: dict[str, Any]) -> bool:
|
|
122
|
-
"""Save version info to cache file
|
|
123
|
-
|
|
124
|
-
Creates cache directory if it doesn't exist.
|
|
125
|
-
Updates last_check timestamp to current time if not provided.
|
|
126
|
-
|
|
127
|
-
Args:
|
|
128
|
-
version_info: Version information dictionary to cache
|
|
129
|
-
|
|
130
|
-
Returns:
|
|
131
|
-
True on successful save, False on error
|
|
132
|
-
|
|
133
|
-
Examples:
|
|
134
|
-
>>> cache = VersionCache(Path(".moai/cache"))
|
|
135
|
-
>>> cache.save({"current_version": "0.8.1"})
|
|
136
|
-
True
|
|
137
|
-
"""
|
|
138
|
-
try:
|
|
139
|
-
# Create cache directory if it doesn't exist
|
|
140
|
-
self.cache_dir.mkdir(parents=True, exist_ok=True)
|
|
141
|
-
|
|
142
|
-
# Update last_check timestamp only if not provided (for testing)
|
|
143
|
-
if "last_check" not in version_info:
|
|
144
|
-
version_info["last_check"] = datetime.now(timezone.utc).isoformat()
|
|
145
|
-
|
|
146
|
-
# Write to cache file
|
|
147
|
-
with open(self.cache_file, "w") as f:
|
|
148
|
-
json.dump(version_info, f, indent=2)
|
|
149
|
-
|
|
150
|
-
return True
|
|
151
|
-
|
|
152
|
-
except (OSError, TypeError):
|
|
153
|
-
# Graceful degradation on write errors
|
|
154
|
-
return False
|
|
155
|
-
|
|
156
|
-
def clear(self) -> bool:
|
|
157
|
-
"""Clear/remove cache file
|
|
158
|
-
|
|
159
|
-
Returns:
|
|
160
|
-
True if cache file was removed or didn't exist, False on error
|
|
161
|
-
|
|
162
|
-
Examples:
|
|
163
|
-
>>> cache = VersionCache(Path(".moai/cache"))
|
|
164
|
-
>>> cache.clear()
|
|
165
|
-
True
|
|
166
|
-
"""
|
|
167
|
-
try:
|
|
168
|
-
if self.cache_file.exists():
|
|
169
|
-
self.cache_file.unlink()
|
|
170
|
-
return True
|
|
171
|
-
except OSError:
|
|
172
|
-
return False
|
|
173
|
-
|
|
174
|
-
def get_age_hours(self) -> float:
|
|
175
|
-
"""Get age of cache in hours
|
|
176
|
-
|
|
177
|
-
Returns:
|
|
178
|
-
Age in hours, or 0.0 if cache doesn't exist or is invalid
|
|
179
|
-
|
|
180
|
-
Examples:
|
|
181
|
-
>>> cache = VersionCache(Path(".moai/cache"))
|
|
182
|
-
>>> cache.get_age_hours()
|
|
183
|
-
0.0 # No cache exists
|
|
184
|
-
"""
|
|
185
|
-
if not self.cache_file.exists():
|
|
186
|
-
return 0.0
|
|
187
|
-
|
|
188
|
-
try:
|
|
189
|
-
with open(self.cache_file, "r") as f:
|
|
190
|
-
data = json.load(f)
|
|
191
|
-
|
|
192
|
-
return self._calculate_age_hours(data["last_check"])
|
|
193
|
-
|
|
194
|
-
except (json.JSONDecodeError, KeyError, ValueError, OSError):
|
|
195
|
-
return 0.0
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
__all__ = ["VersionCache"]
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Event handlers for Alfred Hooks
|
|
3
|
-
|
|
4
|
-
Claude Code Event Handlers
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from .notification import handle_notification, handle_stop, handle_subagent_stop
|
|
8
|
-
from .session import handle_session_end, handle_session_start
|
|
9
|
-
from .tool import handle_post_tool_use, handle_pre_tool_use
|
|
10
|
-
from .user import handle_user_prompt_submit
|
|
11
|
-
|
|
12
|
-
__all__ = [
|
|
13
|
-
"handle_session_start",
|
|
14
|
-
"handle_session_end",
|
|
15
|
-
"handle_user_prompt_submit",
|
|
16
|
-
"handle_pre_tool_use",
|
|
17
|
-
"handle_post_tool_use",
|
|
18
|
-
"handle_notification",
|
|
19
|
-
"handle_stop",
|
|
20
|
-
"handle_subagent_stop",
|
|
21
|
-
]
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Notification and control handlers
|
|
3
|
-
|
|
4
|
-
Notification, Stop, SubagentStop event handling
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import json
|
|
8
|
-
from datetime import datetime
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
|
|
11
|
-
from core import HookPayload, HookResult
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def _get_command_state_file(cwd: str) -> Path:
|
|
15
|
-
"""Get the path to command state tracking file"""
|
|
16
|
-
state_dir = Path(cwd) / ".moai" / "memory"
|
|
17
|
-
state_dir.mkdir(parents=True, exist_ok=True)
|
|
18
|
-
return state_dir / "command-execution-state.json"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def _load_command_state(cwd: str) -> dict:
|
|
22
|
-
"""Load current command execution state"""
|
|
23
|
-
try:
|
|
24
|
-
state_file = _get_command_state_file(cwd)
|
|
25
|
-
if state_file.exists():
|
|
26
|
-
with open(state_file, "r", encoding="utf-8") as f:
|
|
27
|
-
return json.load(f)
|
|
28
|
-
except Exception:
|
|
29
|
-
pass
|
|
30
|
-
return {"last_command": None, "last_timestamp": None, "is_running": False}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def _save_command_state(cwd: str, state: dict) -> None:
|
|
34
|
-
"""Save command execution state"""
|
|
35
|
-
try:
|
|
36
|
-
state_file = _get_command_state_file(cwd)
|
|
37
|
-
with open(state_file, "w", encoding="utf-8") as f:
|
|
38
|
-
json.dump(state, f, indent=2)
|
|
39
|
-
except Exception:
|
|
40
|
-
pass
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def _is_duplicate_command(current_cmd: str, last_cmd: str, last_timestamp: str) -> bool:
|
|
44
|
-
"""Check if current command is a duplicate of the last one within 3 seconds"""
|
|
45
|
-
if not last_cmd or not last_timestamp or current_cmd != last_cmd:
|
|
46
|
-
return False
|
|
47
|
-
|
|
48
|
-
try:
|
|
49
|
-
last_time = datetime.fromisoformat(last_timestamp)
|
|
50
|
-
current_time = datetime.now()
|
|
51
|
-
time_diff = (current_time - last_time).total_seconds()
|
|
52
|
-
# Consider it a duplicate if same command within 3 seconds
|
|
53
|
-
return time_diff < 3
|
|
54
|
-
except Exception:
|
|
55
|
-
return False
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def handle_notification(payload: HookPayload) -> HookResult:
|
|
59
|
-
"""Notification event handler
|
|
60
|
-
|
|
61
|
-
Detects and warns about duplicate command executions
|
|
62
|
-
(When the same /alfred: command is triggered multiple times within 3 seconds)
|
|
63
|
-
"""
|
|
64
|
-
cwd = payload.get("cwd", ".")
|
|
65
|
-
notification = payload.get("notification", {})
|
|
66
|
-
|
|
67
|
-
# Extract command information from notification
|
|
68
|
-
current_cmd = None
|
|
69
|
-
if isinstance(notification, dict):
|
|
70
|
-
# Check if notification contains command information
|
|
71
|
-
text = notification.get("text", "") or str(notification)
|
|
72
|
-
if "/alfred:" in text:
|
|
73
|
-
# Extract /alfred: command
|
|
74
|
-
import re
|
|
75
|
-
|
|
76
|
-
match = re.search(r"/alfred:\S+", text)
|
|
77
|
-
if match:
|
|
78
|
-
current_cmd = match.group()
|
|
79
|
-
|
|
80
|
-
if not current_cmd:
|
|
81
|
-
return HookResult()
|
|
82
|
-
|
|
83
|
-
# Load current state
|
|
84
|
-
state = _load_command_state(cwd)
|
|
85
|
-
last_cmd = state.get("last_command")
|
|
86
|
-
last_timestamp = state.get("last_timestamp")
|
|
87
|
-
|
|
88
|
-
# Check for duplicate
|
|
89
|
-
if _is_duplicate_command(current_cmd, last_cmd, last_timestamp):
|
|
90
|
-
warning_msg = (
|
|
91
|
-
f"⚠️ Duplicate command detected: '{current_cmd}' "
|
|
92
|
-
f"is running multiple times within 3 seconds.\n"
|
|
93
|
-
f"This may indicate a system issue. Check logs in `.moai/logs/command-invocations.log`"
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
# Update state - mark as duplicate detected
|
|
97
|
-
state["duplicate_detected"] = True
|
|
98
|
-
state["duplicate_command"] = current_cmd
|
|
99
|
-
state["duplicate_timestamp"] = datetime.now().isoformat()
|
|
100
|
-
_save_command_state(cwd, state)
|
|
101
|
-
|
|
102
|
-
return HookResult(system_message=warning_msg, continue_execution=True)
|
|
103
|
-
|
|
104
|
-
# Update state with current command
|
|
105
|
-
state["last_command"] = current_cmd
|
|
106
|
-
state["last_timestamp"] = datetime.now().isoformat()
|
|
107
|
-
state["is_running"] = True
|
|
108
|
-
state["duplicate_detected"] = False
|
|
109
|
-
_save_command_state(cwd, state)
|
|
110
|
-
|
|
111
|
-
return HookResult()
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
def handle_stop(payload: HookPayload) -> HookResult:
|
|
115
|
-
"""Stop event handler
|
|
116
|
-
|
|
117
|
-
Marks command execution as complete
|
|
118
|
-
"""
|
|
119
|
-
cwd = payload.get("cwd", ".")
|
|
120
|
-
state = _load_command_state(cwd)
|
|
121
|
-
state["is_running"] = False
|
|
122
|
-
state["last_timestamp"] = datetime.now().isoformat()
|
|
123
|
-
_save_command_state(cwd, state)
|
|
124
|
-
|
|
125
|
-
return HookResult()
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def handle_subagent_stop(payload: HookPayload) -> HookResult:
|
|
129
|
-
"""SubagentStop event handler
|
|
130
|
-
|
|
131
|
-
Records when a sub-agent finishes execution
|
|
132
|
-
"""
|
|
133
|
-
cwd = payload.get("cwd", ".")
|
|
134
|
-
|
|
135
|
-
# Extract subagent name if available
|
|
136
|
-
subagent_name = (
|
|
137
|
-
payload.get("subagent", {}).get("name")
|
|
138
|
-
if isinstance(payload.get("subagent"), dict)
|
|
139
|
-
else None
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
try:
|
|
143
|
-
state_file = _get_command_state_file(cwd).parent / "subagent-execution.log"
|
|
144
|
-
timestamp = datetime.now().isoformat()
|
|
145
|
-
|
|
146
|
-
with open(state_file, "a", encoding="utf-8") as f:
|
|
147
|
-
f.write(f"{timestamp} | Subagent Stop | {subagent_name}\n")
|
|
148
|
-
except Exception:
|
|
149
|
-
pass
|
|
150
|
-
|
|
151
|
-
return HookResult()
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
__all__ = ["handle_notification", "handle_stop", "handle_subagent_stop"]
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Session event handlers
|
|
3
|
-
|
|
4
|
-
SessionStart, SessionEnd event handling
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from core import HookPayload, HookResult
|
|
8
|
-
from core.checkpoint import list_checkpoints
|
|
9
|
-
from core.project import count_specs, get_git_info, get_package_version_info
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def handle_session_start(payload: HookPayload) -> HookResult:
|
|
13
|
-
"""SessionStart event handler with GRACEFUL DEGRADATION
|
|
14
|
-
|
|
15
|
-
When Claude Code Session starts, it displays a summary of project status.
|
|
16
|
-
You can check the language, Git status, SPEC progress, and checkpoint list at a glance.
|
|
17
|
-
All optional operations are wrapped in try-except to ensure hook completes quickly even if
|
|
18
|
-
Git commands, file I/O, or other operations timeout or fail.
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
payload: Claude Code event payload (cwd key required)
|
|
22
|
-
|
|
23
|
-
Returns:
|
|
24
|
-
HookResult(system_message=project status summary message)
|
|
25
|
-
|
|
26
|
-
Message Format:
|
|
27
|
-
🚀 MoAI-ADK Session Started
|
|
28
|
-
[Version: {version}] - optional if version check fails
|
|
29
|
-
[Branch: {branch} ({commit hash})] - optional if git fails
|
|
30
|
-
[Changes: {Number of Changed Files}] - optional if git fails
|
|
31
|
-
[SPEC Progress: {Complete}/{Total} ({percent}%)] - optional if specs fail
|
|
32
|
-
[Checkpoints: {number} available] - optional if checkpoint list fails
|
|
33
|
-
|
|
34
|
-
Graceful Degradation Strategy:
|
|
35
|
-
- OPTIONAL: Version info (skip if timeout/failure)
|
|
36
|
-
- OPTIONAL: Git info (skip if timeout/failure)
|
|
37
|
-
- OPTIONAL: SPEC progress (skip if timeout/failure)
|
|
38
|
-
- OPTIONAL: Checkpoint list (skip if timeout/failure)
|
|
39
|
-
- Always display SOMETHING to user, never return empty message
|
|
40
|
-
|
|
41
|
-
Note:
|
|
42
|
-
- Claude Code processes SessionStart in several stages (clear → compact)
|
|
43
|
-
- Display message only at "compact" stage to prevent duplicate output
|
|
44
|
-
- "clear" step returns minimal result (empty hookSpecificOutput)
|
|
45
|
-
- CRITICAL: All optional operations must complete within 2-3 seconds total
|
|
46
|
-
|
|
47
|
-
TDD History:
|
|
48
|
-
- RED: Session startup message format test
|
|
49
|
-
- GREEN: Generate status message by combining helper functions
|
|
50
|
-
- REFACTOR: Improved message format, improved readability, added checkpoint list
|
|
51
|
-
- FIX: Prevent duplicate output of clear step (only compact step is displayed)
|
|
52
|
-
- UPDATE: Migrated to Claude Code standard Hook schema
|
|
53
|
-
- HOTFIX: Add graceful degradation for timeout scenarios (Issue #66)
|
|
54
|
-
- Phase 3: Add major version warning and release notes display (@TEST:MAJOR-UPDATE-001-07/08)
|
|
55
|
-
|
|
56
|
-
@TAG:CHECKPOINT-EVENT-001
|
|
57
|
-
@TAG:HOOKS-TIMEOUT-001
|
|
58
|
-
@CODE:MAJOR-UPDATE-WARN-001
|
|
59
|
-
"""
|
|
60
|
-
# Claude Code SessionStart runs in several stages (clear, compact, etc.)
|
|
61
|
-
# Ignore the "clear" stage and output messages only at the "compact" stage
|
|
62
|
-
event_phase = payload.get("phase", "")
|
|
63
|
-
if event_phase == "clear":
|
|
64
|
-
# Return minimal valid Hook result for clear phase
|
|
65
|
-
return HookResult(continue_execution=True)
|
|
66
|
-
|
|
67
|
-
cwd = payload.get("cwd", ".")
|
|
68
|
-
|
|
69
|
-
# OPTIONAL: Git info - skip if timeout/failure
|
|
70
|
-
git_info = {}
|
|
71
|
-
try:
|
|
72
|
-
git_info = get_git_info(cwd)
|
|
73
|
-
except Exception:
|
|
74
|
-
# Graceful degradation - continue without git info
|
|
75
|
-
pass
|
|
76
|
-
|
|
77
|
-
# OPTIONAL: SPEC progress - skip if timeout/failure
|
|
78
|
-
specs = {"completed": 0, "total": 0, "percentage": 0}
|
|
79
|
-
try:
|
|
80
|
-
specs = count_specs(cwd)
|
|
81
|
-
except Exception:
|
|
82
|
-
# Graceful degradation - continue without spec info
|
|
83
|
-
pass
|
|
84
|
-
|
|
85
|
-
# OPTIONAL: Checkpoint list - skip if timeout/failure
|
|
86
|
-
checkpoints = []
|
|
87
|
-
try:
|
|
88
|
-
checkpoints = list_checkpoints(cwd, max_count=10)
|
|
89
|
-
except Exception:
|
|
90
|
-
# Graceful degradation - continue without checkpoints
|
|
91
|
-
pass
|
|
92
|
-
|
|
93
|
-
# OPTIONAL: Package version info - skip if timeout/failure
|
|
94
|
-
version_info = {}
|
|
95
|
-
try:
|
|
96
|
-
version_info = get_package_version_info()
|
|
97
|
-
except Exception:
|
|
98
|
-
# Graceful degradation - continue without version info
|
|
99
|
-
pass
|
|
100
|
-
|
|
101
|
-
# Build message with available information
|
|
102
|
-
branch = git_info.get("branch", "N/A") if git_info else "N/A"
|
|
103
|
-
commit = git_info.get("commit", "N/A")[:7] if git_info else "N/A"
|
|
104
|
-
changes = git_info.get("changes", 0) if git_info else 0
|
|
105
|
-
spec_progress = f"{specs['completed']}/{specs['total']}" if specs["total"] > 0 else "0/0"
|
|
106
|
-
|
|
107
|
-
# system_message: displayed directly to the user
|
|
108
|
-
lines = [
|
|
109
|
-
"🚀 MoAI-ADK Session Started",
|
|
110
|
-
"", # Blank line after title
|
|
111
|
-
]
|
|
112
|
-
|
|
113
|
-
# Add version info first (at the top, right after title)
|
|
114
|
-
if version_info and version_info.get("current") != "unknown":
|
|
115
|
-
if version_info.get("update_available"):
|
|
116
|
-
# Check if this is a major version update
|
|
117
|
-
if version_info.get("is_major_update"):
|
|
118
|
-
# Major version warning
|
|
119
|
-
lines.append(
|
|
120
|
-
f" ⚠️ Major version update available: {version_info['current']} → {version_info['latest']}"
|
|
121
|
-
)
|
|
122
|
-
lines.append(" Breaking changes detected. Review release notes:")
|
|
123
|
-
if version_info.get("release_notes_url"):
|
|
124
|
-
lines.append(f" 📝 {version_info['release_notes_url']}")
|
|
125
|
-
else:
|
|
126
|
-
# Regular update
|
|
127
|
-
lines.append(
|
|
128
|
-
f" 🗿 MoAI-ADK Ver: {version_info['current']} → {version_info['latest']} available ✨"
|
|
129
|
-
)
|
|
130
|
-
if version_info.get("release_notes_url"):
|
|
131
|
-
lines.append(f" 📝 Release Notes: {version_info['release_notes_url']}")
|
|
132
|
-
|
|
133
|
-
# Add upgrade recommendation
|
|
134
|
-
if version_info.get("upgrade_command"):
|
|
135
|
-
lines.append(f" ⬆️ Upgrade: {version_info['upgrade_command']}")
|
|
136
|
-
else:
|
|
137
|
-
# No update available - show current version only
|
|
138
|
-
lines.append(f" 🗿 MoAI-ADK Ver: {version_info['current']}")
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
# Add Git info only if available (not degraded)
|
|
142
|
-
if git_info:
|
|
143
|
-
lines.append(f" 🌿 Branch: {branch} ({commit})")
|
|
144
|
-
lines.append(f" 📝 Changes: {changes}")
|
|
145
|
-
|
|
146
|
-
# Add last commit message if available
|
|
147
|
-
last_commit = git_info.get("last_commit", "")
|
|
148
|
-
if last_commit:
|
|
149
|
-
lines.append(f" 🔨 Last: {last_commit}")
|
|
150
|
-
|
|
151
|
-
# Add Checkpoint list (show only the latest 3 items)
|
|
152
|
-
if checkpoints:
|
|
153
|
-
lines.append(f" 🗂️ Checkpoints: {len(checkpoints)} available")
|
|
154
|
-
for cp in reversed(checkpoints[-3:]): # Latest 3 items
|
|
155
|
-
branch_short = cp["branch"].replace("before-", "")
|
|
156
|
-
lines.append(f" 📌 {branch_short}")
|
|
157
|
-
lines.append("") # Blank line before restore command
|
|
158
|
-
lines.append(" ↩️ Restore: /alfred:0-project restore")
|
|
159
|
-
|
|
160
|
-
# Add SPEC progress only if available (not degraded) - at the bottom
|
|
161
|
-
if specs["total"] > 0:
|
|
162
|
-
lines.append(f" 📋 SPEC Progress: {spec_progress} ({specs['percentage']}%)")
|
|
163
|
-
|
|
164
|
-
system_message = "\n".join(lines)
|
|
165
|
-
|
|
166
|
-
return HookResult(system_message=system_message)
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
def handle_session_end(payload: HookPayload) -> HookResult:
|
|
170
|
-
"""SessionEnd event handler (default implementation)"""
|
|
171
|
-
return HookResult()
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
__all__ = ["handle_session_start", "handle_session_end"]
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# @CODE:HOOK-TOOL-001 | SPEC: TBD | TEST: tests/hooks/test_handlers.py
|
|
3
|
-
"""Tool usage handlers
|
|
4
|
-
|
|
5
|
-
PreToolUse, PostToolUse event handling
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from core import HookPayload, HookResult
|
|
9
|
-
from core.checkpoint import create_checkpoint, detect_risky_operation
|
|
10
|
-
from core.tags import scan_recent_changes_for_missing_tags
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def handle_pre_tool_use(payload: HookPayload) -> HookResult:
|
|
14
|
-
"""PreToolUse event handler (Event-Driven Checkpoint integration)
|
|
15
|
-
|
|
16
|
-
Automatically creates checkpoints before dangerous operations.
|
|
17
|
-
Called before using the Claude Code tool, it notifies the user when danger is detected.
|
|
18
|
-
|
|
19
|
-
Args:
|
|
20
|
-
payload: Claude Code event payload
|
|
21
|
-
(includes tool, arguments, cwd keys)
|
|
22
|
-
|
|
23
|
-
Returns:
|
|
24
|
-
HookResult(
|
|
25
|
-
system_message=checkpoint creation notification (when danger is detected);
|
|
26
|
-
continue_execution=True (always continue operation)
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
Checkpoint Triggers:
|
|
30
|
-
- Bash: rm -rf, git merge, git reset --hard
|
|
31
|
-
- Edit/Write: CLAUDE.md, config.json
|
|
32
|
-
- MultiEdit: ≥10 files
|
|
33
|
-
|
|
34
|
-
Examples:
|
|
35
|
-
Bash tool (rm -rf) detection:
|
|
36
|
-
→ "🛡️ Checkpoint created: before-delete-20251015-143000"
|
|
37
|
-
|
|
38
|
-
Notes:
|
|
39
|
-
- Return continue_execution=True even after detection of danger (continue operation)
|
|
40
|
-
- Work continues even when checkpoint fails (ignores)
|
|
41
|
-
- Transparent background operation
|
|
42
|
-
|
|
43
|
-
@TAG:CHECKPOINT-EVENT-001
|
|
44
|
-
"""
|
|
45
|
-
tool_name = payload.get("tool", "")
|
|
46
|
-
tool_args = payload.get("arguments", {})
|
|
47
|
-
cwd = payload.get("cwd", ".")
|
|
48
|
-
|
|
49
|
-
# Dangerous operation detection (best-effort)
|
|
50
|
-
try:
|
|
51
|
-
is_risky, operation_type = detect_risky_operation(tool_name, tool_args, cwd)
|
|
52
|
-
# Create checkpoint when danger is detected
|
|
53
|
-
if is_risky:
|
|
54
|
-
checkpoint_branch = create_checkpoint(cwd, operation_type)
|
|
55
|
-
if checkpoint_branch != "checkpoint-failed":
|
|
56
|
-
system_message = (
|
|
57
|
-
f"🛡️ Checkpoint created: {checkpoint_branch}\n Operation: {operation_type}"
|
|
58
|
-
)
|
|
59
|
-
return HookResult(system_message=system_message, continue_execution=True)
|
|
60
|
-
except Exception:
|
|
61
|
-
# Do not fail the hook if risk detection errors out
|
|
62
|
-
pass
|
|
63
|
-
|
|
64
|
-
# TAG Guard (gentle): warn when recent changes miss @TAG
|
|
65
|
-
issues = scan_recent_changes_for_missing_tags(cwd)
|
|
66
|
-
if issues:
|
|
67
|
-
# Summarize first few issues for display
|
|
68
|
-
preview = "\n".join(f" - {i.path} → 기대 태그: {i.expected}" for i in issues[:5])
|
|
69
|
-
more = "" if len(issues) <= 5 else f"\n (외 {len(issues) - 5}건 더 존재)"
|
|
70
|
-
msg = (
|
|
71
|
-
"⚠️ TAG 누락 감지: 생성/수정한 파일 중 @TAG가 없는 항목이 있습니다.\n"
|
|
72
|
-
f"{preview}{more}\n"
|
|
73
|
-
"권장 조치:\n"
|
|
74
|
-
" 1) SPEC/TEST/CODE/DOC 유형에 맞는 @TAG를 파일 상단 주석이나 헤더에 추가\n"
|
|
75
|
-
" 2) rg로 확인: rg '@(SPEC|TEST|CODE|DOC):' -n <경로>\n"
|
|
76
|
-
)
|
|
77
|
-
return HookResult(system_message=msg, continue_execution=True)
|
|
78
|
-
|
|
79
|
-
return HookResult(continue_execution=True)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
def handle_post_tool_use(payload: HookPayload) -> HookResult:
|
|
83
|
-
"""PostToolUse event handler (default implementation)"""
|
|
84
|
-
return HookResult()
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
__all__ = ["handle_pre_tool_use", "handle_post_tool_use"]
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""User interaction handlers
|
|
3
|
-
|
|
4
|
-
Handling the UserPromptSubmit event
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from datetime import datetime
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
from core import HookPayload, HookResult
|
|
11
|
-
from core.context import get_jit_context
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def handle_user_prompt_submit(payload: HookPayload) -> HookResult:
|
|
15
|
-
"""UserPromptSubmit event handler
|
|
16
|
-
|
|
17
|
-
Analyze user prompts and automatically add relevant documents into context.
|
|
18
|
-
Follow the just-in-time (JIT) retrieval principle to load only the documents you need.
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
payload: Claude Code event payload
|
|
22
|
-
(includes userPrompt, cwd keys)
|
|
23
|
-
|
|
24
|
-
Returns:
|
|
25
|
-
HookResult(
|
|
26
|
-
system_message=Number of Files loaded (or None),
|
|
27
|
-
context_files=Recommended document path list
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
TDD History:
|
|
31
|
-
- RED: JIT document loading scenario testing
|
|
32
|
-
- GREEN: Recommend documents by calling get_jit_context()
|
|
33
|
-
- REFACTOR: Message conditional display (only when there is a file)
|
|
34
|
-
- UPDATE: Migrated to Claude Code standard Hook schema with snake_case fields
|
|
35
|
-
- FEATURE: Command execution logging for tracking double-run debugging
|
|
36
|
-
"""
|
|
37
|
-
user_prompt = payload.get("userPrompt", "")
|
|
38
|
-
cwd = payload.get("cwd", ".")
|
|
39
|
-
context_files = get_jit_context(user_prompt, cwd)
|
|
40
|
-
|
|
41
|
-
# Command execution logging (DEBUG feature for tracking invocations)
|
|
42
|
-
if user_prompt.startswith("/alfred:"):
|
|
43
|
-
try:
|
|
44
|
-
log_dir = Path(cwd) / ".moai" / "logs"
|
|
45
|
-
log_dir.mkdir(parents=True, exist_ok=True)
|
|
46
|
-
|
|
47
|
-
log_file = log_dir / "command-invocations.log"
|
|
48
|
-
timestamp = datetime.now().isoformat()
|
|
49
|
-
|
|
50
|
-
with open(log_file, "a", encoding="utf-8") as f:
|
|
51
|
-
f.write(f"{timestamp} | {user_prompt}\n")
|
|
52
|
-
except Exception:
|
|
53
|
-
# Silently fail if logging fails (don't interrupt main flow)
|
|
54
|
-
pass
|
|
55
|
-
|
|
56
|
-
system_message = f"📎 Loaded {len(context_files)} context file(s)" if context_files else None
|
|
57
|
-
|
|
58
|
-
return HookResult(system_message=system_message, context_files=context_files)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
__all__ = ["handle_user_prompt_submit"]
|