moai-adk 0.8.0__py3-none-any.whl → 0.34.0__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.
- 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 +118 -48
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +8 -13
- moai_adk/cli/commands/update.py +1978 -149
- 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 +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -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 +148 -17
- 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 +305 -0
- 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 +572 -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 +189 -22
- moai_adk/core/project/initializer.py +218 -27
- moai_adk/core/project/phase_executor.py +416 -44
- 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 +310 -0
- 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 +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -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 +670 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +509 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1020 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1384 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -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/core → moai/lib}/checkpoint.py +10 -37
- 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 +1075 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +78 -50
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -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-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +313 -283
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +295 -95
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
- 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-database/reference.md +532 -17
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +470 -97
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -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 +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -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-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -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-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -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 +359 -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-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -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-lang-cpp/SKILL.md +618 -93
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +446 -91
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +346 -94
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +352 -91
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +344 -86
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +617 -96
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +364 -314
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +545 -89
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +650 -87
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +341 -93
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +463 -89
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +486 -112
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +333 -92
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -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 +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -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-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -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-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -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 +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -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/reference.md +275 -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 +1462 -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 +92 -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-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -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-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -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/examples.md +672 -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/reference.md +440 -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 +411 -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 +365 -0
- 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 +206 -36
- moai_adk/templates/.gitignore +194 -13
- moai_adk/templates/.mcp.json +31 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +151 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +81 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +634 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +170 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +87 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -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 +17 -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 +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +571 -244
- moai_adk/utils/__init__.py +24 -2
- moai_adk/utils/banner.py +9 -13
- 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/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.34.0.dist-info/METADATA +2999 -0
- moai_adk-0.34.0.dist-info/RECORD +463 -0
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/WHEEL +1 -1
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -80
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
- moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
- moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
- moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
- moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
- moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
- moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
- 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-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-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-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-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-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-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-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-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-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-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 -113
- 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/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
- 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-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-php/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
- 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/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
- 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-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
- moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
- moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
- moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
- moai_adk/templates/.moai/config.json +0 -96
- moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
- moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
- moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
- moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
- moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
- moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
- moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
- moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
- moai_adk/templates/.moai/memory/config-schema.md +0 -444
- moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
- moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
- moai_adk/templates/.moai/project/product.md +0 -161
- moai_adk/templates/.moai/project/structure.md +0 -156
- moai_adk/templates/.moai/project/tech.md +0 -227
- moai_adk/templates/__init__.py +0 -2
- moai_adk-0.8.0.dist-info/METADATA +0 -1722
- moai_adk-0.8.0.dist-info/RECORD +0 -282
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,879 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Phase-Optimized Hook Scheduler
|
|
3
|
+
|
|
4
|
+
Intelligent scheduling system for hooks based on development phases,
|
|
5
|
+
token budget constraints, and performance requirements.
|
|
6
|
+
|
|
7
|
+
Key Features:
|
|
8
|
+
- Phase-aware hook scheduling
|
|
9
|
+
- Token budget optimization
|
|
10
|
+
- Dynamic priority adjustment
|
|
11
|
+
- Performance-based scheduling
|
|
12
|
+
- Dependency resolution
|
|
13
|
+
- Resource management
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import asyncio
|
|
17
|
+
import threading
|
|
18
|
+
import time
|
|
19
|
+
from dataclasses import dataclass, field
|
|
20
|
+
from datetime import datetime
|
|
21
|
+
from enum import Enum
|
|
22
|
+
from typing import Any, Dict, List, Optional, Set
|
|
23
|
+
|
|
24
|
+
from .jit_enhanced_hook_manager import (
|
|
25
|
+
HookEvent,
|
|
26
|
+
HookMetadata,
|
|
27
|
+
HookPriority,
|
|
28
|
+
JITEnhancedHookManager,
|
|
29
|
+
Phase,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class SchedulingStrategy(Enum):
|
|
34
|
+
"""Hook scheduling strategies"""
|
|
35
|
+
|
|
36
|
+
PRIORITY_FIRST = "priority_first" # Execute highest priority hooks first
|
|
37
|
+
PERFORMANCE_FIRST = "performance_first" # Execute fastest hooks first
|
|
38
|
+
PHASE_OPTIMIZED = "phase_optimized" # Optimize for current phase
|
|
39
|
+
TOKEN_EFFICIENT = "token_efficient" # Minimize token usage
|
|
40
|
+
BALANCED = "balanced" # Balance all factors
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class SchedulingDecision(Enum):
|
|
44
|
+
"""Scheduling decisions for hooks"""
|
|
45
|
+
|
|
46
|
+
EXECUTE = "execute" # Execute hook now
|
|
47
|
+
DEFER = "defer" # Defer to later
|
|
48
|
+
SKIP = "skip" # Skip execution
|
|
49
|
+
PARALLEL = "parallel" # Execute in parallel group
|
|
50
|
+
SEQUENTIAL = "sequential" # Execute sequentially
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@dataclass
|
|
54
|
+
class HookSchedulingContext:
|
|
55
|
+
"""Context for hook scheduling decisions"""
|
|
56
|
+
|
|
57
|
+
event_type: HookEvent
|
|
58
|
+
current_phase: Phase
|
|
59
|
+
user_input: str
|
|
60
|
+
available_token_budget: int
|
|
61
|
+
max_execution_time_ms: float
|
|
62
|
+
current_time: datetime = field(default_factory=datetime.now)
|
|
63
|
+
system_load: float = 0.5 # 0.0 (idle) to 1.0 (busy)
|
|
64
|
+
recent_performance: Dict[str, float] = field(default_factory=dict) # hook_path -> avg_time_ms
|
|
65
|
+
active_dependencies: Set[str] = field(default_factory=set)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@dataclass
|
|
69
|
+
class ScheduledHook:
|
|
70
|
+
"""Hook scheduled for execution"""
|
|
71
|
+
|
|
72
|
+
hook_path: str
|
|
73
|
+
metadata: HookMetadata
|
|
74
|
+
priority_score: float
|
|
75
|
+
estimated_cost: int # Token cost
|
|
76
|
+
estimated_time_ms: float
|
|
77
|
+
scheduling_decision: SchedulingDecision
|
|
78
|
+
execution_group: Optional[int] = None # Group ID for parallel execution
|
|
79
|
+
dependencies: Set[str] = field(default_factory=set)
|
|
80
|
+
dependents: Set[str] = field(default_factory=set)
|
|
81
|
+
retry_count: int = 0
|
|
82
|
+
max_retries: int = 2
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@dataclass
|
|
86
|
+
class SchedulingResult:
|
|
87
|
+
"""Result of hook scheduling"""
|
|
88
|
+
|
|
89
|
+
scheduled_hooks: List[ScheduledHook]
|
|
90
|
+
execution_plan: List[List[ScheduledHook]] # Groups of hooks to execute
|
|
91
|
+
estimated_total_time_ms: float
|
|
92
|
+
estimated_total_tokens: int
|
|
93
|
+
skipped_hooks: List[ScheduledHook]
|
|
94
|
+
deferred_hooks: List[ScheduledHook]
|
|
95
|
+
scheduling_strategy: SchedulingStrategy
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@dataclass
|
|
99
|
+
class ExecutionGroup:
|
|
100
|
+
"""Group of hooks to execute together"""
|
|
101
|
+
|
|
102
|
+
group_id: int
|
|
103
|
+
execution_type: SchedulingDecision # PARALLEL or SEQUENTIAL
|
|
104
|
+
hooks: List[ScheduledHook]
|
|
105
|
+
estimated_time_ms: float
|
|
106
|
+
estimated_tokens: int
|
|
107
|
+
max_wait_time_ms: float
|
|
108
|
+
dependencies: Set[str] = field(default_factory=set)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class PhaseOptimizedHookScheduler:
|
|
112
|
+
"""
|
|
113
|
+
Intelligent scheduler for hooks with phase awareness and resource optimization
|
|
114
|
+
|
|
115
|
+
Provides optimal hook execution scheduling based on:
|
|
116
|
+
- Current development phase
|
|
117
|
+
- Token budget constraints
|
|
118
|
+
- Performance requirements
|
|
119
|
+
- Hook dependencies
|
|
120
|
+
- System load
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
def __init__(
|
|
124
|
+
self,
|
|
125
|
+
hook_manager: Optional[JITEnhancedHookManager] = None,
|
|
126
|
+
default_strategy: SchedulingStrategy = SchedulingStrategy.PHASE_OPTIMIZED,
|
|
127
|
+
max_parallel_groups: int = 3,
|
|
128
|
+
enable_adaptive_scheduling: bool = True,
|
|
129
|
+
):
|
|
130
|
+
"""Initialize Phase-Optimized Hook Scheduler
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
hook_manager: JIT-Enhanced Hook Manager instance
|
|
134
|
+
default_strategy: Default scheduling strategy
|
|
135
|
+
max_parallel_groups: Maximum parallel execution groups
|
|
136
|
+
enable_adaptive_scheduling: Enable adaptive strategy selection
|
|
137
|
+
"""
|
|
138
|
+
self.hook_manager = hook_manager or JITEnhancedHookManager()
|
|
139
|
+
self.default_strategy = default_strategy
|
|
140
|
+
self.max_parallel_groups = max_parallel_groups
|
|
141
|
+
self.enable_adaptive_scheduling = enable_adaptive_scheduling
|
|
142
|
+
|
|
143
|
+
# Performance tracking
|
|
144
|
+
self._scheduling_history: List[Dict[str, Any]] = []
|
|
145
|
+
self._performance_cache: Dict[str, Dict[str, float]] = {}
|
|
146
|
+
self._scheduling_lock = threading.Lock()
|
|
147
|
+
|
|
148
|
+
# Phase-specific optimization parameters
|
|
149
|
+
self._phase_parameters = self._initialize_phase_parameters()
|
|
150
|
+
|
|
151
|
+
# Adaptive strategy selection
|
|
152
|
+
self._strategy_performance: Dict[SchedulingStrategy, Dict[str, float]] = {
|
|
153
|
+
strategy: {"success_rate": 1.0, "avg_efficiency": 0.8, "usage_count": 0} for strategy in SchedulingStrategy
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
def _initialize_phase_parameters(self) -> Dict[Phase, Dict[str, Any]]:
|
|
157
|
+
"""Initialize phase-specific optimization parameters"""
|
|
158
|
+
return {
|
|
159
|
+
Phase.SPEC: {
|
|
160
|
+
"max_total_time_ms": 1000.0,
|
|
161
|
+
"token_budget_ratio": 0.3, # 30% of total budget
|
|
162
|
+
"priority_weights": {
|
|
163
|
+
HookPriority.CRITICAL: 1.0,
|
|
164
|
+
HookPriority.HIGH: 0.9,
|
|
165
|
+
HookPriority.NORMAL: 0.6,
|
|
166
|
+
HookPriority.LOW: 0.2,
|
|
167
|
+
},
|
|
168
|
+
"prefer_parallel": False, # Sequential for consistency
|
|
169
|
+
},
|
|
170
|
+
Phase.RED: {
|
|
171
|
+
"max_total_time_ms": 800.0,
|
|
172
|
+
"token_budget_ratio": 0.2, # 20% of total budget
|
|
173
|
+
"priority_weights": {
|
|
174
|
+
HookPriority.CRITICAL: 1.0,
|
|
175
|
+
HookPriority.HIGH: 1.0, # Testing is high priority
|
|
176
|
+
HookPriority.NORMAL: 0.8,
|
|
177
|
+
HookPriority.LOW: 0.3,
|
|
178
|
+
},
|
|
179
|
+
"prefer_parallel": True, # Parallel for faster test feedback
|
|
180
|
+
},
|
|
181
|
+
Phase.GREEN: {
|
|
182
|
+
"max_total_time_ms": 600.0,
|
|
183
|
+
"token_budget_ratio": 0.15, # 15% of total budget
|
|
184
|
+
"priority_weights": {
|
|
185
|
+
HookPriority.CRITICAL: 1.0,
|
|
186
|
+
HookPriority.HIGH: 0.8,
|
|
187
|
+
HookPriority.NORMAL: 0.7,
|
|
188
|
+
HookPriority.LOW: 0.4,
|
|
189
|
+
},
|
|
190
|
+
"prefer_parallel": True, # Parallel for faster implementation
|
|
191
|
+
},
|
|
192
|
+
Phase.REFACTOR: {
|
|
193
|
+
"max_total_time_ms": 1200.0,
|
|
194
|
+
"token_budget_ratio": 0.2, # 20% of total budget
|
|
195
|
+
"priority_weights": {
|
|
196
|
+
HookPriority.CRITICAL: 1.0,
|
|
197
|
+
HookPriority.HIGH: 0.9, # Code quality is important
|
|
198
|
+
HookPriority.NORMAL: 0.8,
|
|
199
|
+
HookPriority.LOW: 0.5,
|
|
200
|
+
},
|
|
201
|
+
"prefer_parallel": False, # Sequential for safety
|
|
202
|
+
},
|
|
203
|
+
Phase.SYNC: {
|
|
204
|
+
"max_total_time_ms": 1500.0,
|
|
205
|
+
"token_budget_ratio": 0.1, # 10% of total budget
|
|
206
|
+
"priority_weights": {
|
|
207
|
+
HookPriority.CRITICAL: 1.0,
|
|
208
|
+
HookPriority.HIGH: 0.7,
|
|
209
|
+
HookPriority.NORMAL: 0.9, # Documentation is important
|
|
210
|
+
HookPriority.LOW: 0.6,
|
|
211
|
+
},
|
|
212
|
+
"prefer_parallel": False, # Sequential for consistency
|
|
213
|
+
},
|
|
214
|
+
Phase.DEBUG: {
|
|
215
|
+
"max_total_time_ms": 500.0,
|
|
216
|
+
"token_budget_ratio": 0.05, # 5% of total budget
|
|
217
|
+
"priority_weights": {
|
|
218
|
+
HookPriority.CRITICAL: 1.0,
|
|
219
|
+
HookPriority.HIGH: 0.9, # Debug info is critical
|
|
220
|
+
HookPriority.NORMAL: 0.8,
|
|
221
|
+
HookPriority.LOW: 0.3,
|
|
222
|
+
},
|
|
223
|
+
"prefer_parallel": True, # Parallel for faster debugging
|
|
224
|
+
},
|
|
225
|
+
Phase.PLANNING: {
|
|
226
|
+
"max_total_time_ms": 800.0,
|
|
227
|
+
"token_budget_ratio": 0.25, # 25% of total budget
|
|
228
|
+
"priority_weights": {
|
|
229
|
+
HookPriority.CRITICAL: 1.0,
|
|
230
|
+
HookPriority.HIGH: 0.8,
|
|
231
|
+
HookPriority.NORMAL: 0.7,
|
|
232
|
+
HookPriority.LOW: 0.4,
|
|
233
|
+
},
|
|
234
|
+
"prefer_parallel": False, # Sequential for careful planning
|
|
235
|
+
},
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
async def schedule_hooks(
|
|
239
|
+
self,
|
|
240
|
+
event_type: HookEvent,
|
|
241
|
+
context: HookSchedulingContext,
|
|
242
|
+
strategy: Optional[SchedulingStrategy] = None,
|
|
243
|
+
) -> SchedulingResult:
|
|
244
|
+
"""Schedule hooks for execution with optimization
|
|
245
|
+
|
|
246
|
+
Args:
|
|
247
|
+
event_type: Hook event type
|
|
248
|
+
context: Scheduling context with phase and constraints
|
|
249
|
+
strategy: Scheduling strategy (uses default if None)
|
|
250
|
+
|
|
251
|
+
Returns:
|
|
252
|
+
Scheduling result with execution plan
|
|
253
|
+
"""
|
|
254
|
+
start_time = time.time()
|
|
255
|
+
|
|
256
|
+
# Select optimal strategy
|
|
257
|
+
selected_strategy = strategy or self._select_optimal_strategy(event_type, context)
|
|
258
|
+
|
|
259
|
+
# Get available hooks for event type
|
|
260
|
+
available_hooks = self.hook_manager._hooks_by_event.get(event_type, [])
|
|
261
|
+
|
|
262
|
+
# Create scheduled hooks with initial analysis
|
|
263
|
+
scheduled_hooks = await self._create_scheduled_hooks(available_hooks, context, selected_strategy)
|
|
264
|
+
|
|
265
|
+
# Filter and prioritize hooks
|
|
266
|
+
filtered_hooks = self._filter_hooks_by_constraints(scheduled_hooks, context)
|
|
267
|
+
prioritized_hooks = self._prioritize_hooks(filtered_hooks, context, selected_strategy)
|
|
268
|
+
|
|
269
|
+
# Resolve dependencies
|
|
270
|
+
dependency_resolved_hooks = self._resolve_dependencies(prioritized_hooks)
|
|
271
|
+
|
|
272
|
+
# Create execution groups
|
|
273
|
+
execution_groups = self._create_execution_groups(dependency_resolved_hooks, context, selected_strategy)
|
|
274
|
+
|
|
275
|
+
# Optimize execution order
|
|
276
|
+
optimized_groups = self._optimize_execution_order(execution_groups, context)
|
|
277
|
+
|
|
278
|
+
# Calculate estimates
|
|
279
|
+
total_time_ms = sum(group.estimated_time_ms for group in optimized_groups)
|
|
280
|
+
total_tokens = sum(group.estimated_tokens for group in optimized_groups)
|
|
281
|
+
|
|
282
|
+
# Create execution plan
|
|
283
|
+
execution_plan = [
|
|
284
|
+
[hook for hook in group.hooks if hook.scheduling_decision == SchedulingDecision.EXECUTE]
|
|
285
|
+
for group in optimized_groups
|
|
286
|
+
]
|
|
287
|
+
|
|
288
|
+
# Separate skipped and deferred hooks
|
|
289
|
+
executed_hooks = [hook for group in optimized_groups for hook in group.hooks]
|
|
290
|
+
skipped_hooks = [
|
|
291
|
+
hook
|
|
292
|
+
for hook in scheduled_hooks
|
|
293
|
+
if hook not in executed_hooks and hook.scheduling_decision == SchedulingDecision.SKIP
|
|
294
|
+
]
|
|
295
|
+
deferred_hooks = [
|
|
296
|
+
hook
|
|
297
|
+
for hook in scheduled_hooks
|
|
298
|
+
if hook not in executed_hooks and hook.scheduling_decision == SchedulingDecision.DEFER
|
|
299
|
+
]
|
|
300
|
+
|
|
301
|
+
# Create scheduling result
|
|
302
|
+
result = SchedulingResult(
|
|
303
|
+
scheduled_hooks=scheduled_hooks,
|
|
304
|
+
execution_plan=execution_plan,
|
|
305
|
+
estimated_total_time_ms=total_time_ms,
|
|
306
|
+
estimated_total_tokens=total_tokens,
|
|
307
|
+
skipped_hooks=skipped_hooks,
|
|
308
|
+
deferred_hooks=deferred_hooks,
|
|
309
|
+
scheduling_strategy=selected_strategy,
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
# Update scheduling history and performance
|
|
313
|
+
self._update_scheduling_history(result, time.time() - start_time)
|
|
314
|
+
self._update_strategy_performance(selected_strategy, result, context)
|
|
315
|
+
|
|
316
|
+
return result
|
|
317
|
+
|
|
318
|
+
def _select_optimal_strategy(self, event_type: HookEvent, context: HookSchedulingContext) -> SchedulingStrategy:
|
|
319
|
+
"""Select optimal scheduling strategy based on context"""
|
|
320
|
+
if not self.enable_adaptive_scheduling:
|
|
321
|
+
return self.default_strategy
|
|
322
|
+
|
|
323
|
+
# Strategy selection based on phase and constraints
|
|
324
|
+
if context.available_token_budget < 5000:
|
|
325
|
+
# Low token budget - prioritize token efficiency
|
|
326
|
+
return SchedulingStrategy.TOKEN_EFFICIENT
|
|
327
|
+
|
|
328
|
+
elif context.max_execution_time_ms < 500:
|
|
329
|
+
# Tight time constraint - prioritize performance
|
|
330
|
+
return SchedulingStrategy.PERFORMANCE_FIRST
|
|
331
|
+
|
|
332
|
+
elif context.system_load > 0.8:
|
|
333
|
+
# High system load - prioritize priority
|
|
334
|
+
return SchedulingStrategy.PRIORITY_FIRST
|
|
335
|
+
|
|
336
|
+
elif context.current_phase == Phase.SYNC:
|
|
337
|
+
# Documentation phase - use phase-optimized
|
|
338
|
+
return SchedulingStrategy.PHASE_OPTIMIZED
|
|
339
|
+
|
|
340
|
+
else:
|
|
341
|
+
# Use best performing strategy from history
|
|
342
|
+
best_strategy = self.default_strategy
|
|
343
|
+
best_efficiency = 0.0
|
|
344
|
+
|
|
345
|
+
for strategy, performance in self._strategy_performance.items():
|
|
346
|
+
if performance["usage_count"] > 0:
|
|
347
|
+
efficiency = performance["success_rate"] * performance["avg_efficiency"]
|
|
348
|
+
if efficiency > best_efficiency:
|
|
349
|
+
best_efficiency = efficiency
|
|
350
|
+
best_strategy = strategy
|
|
351
|
+
|
|
352
|
+
return best_strategy
|
|
353
|
+
|
|
354
|
+
async def _create_scheduled_hooks(
|
|
355
|
+
self,
|
|
356
|
+
hook_paths: List[str],
|
|
357
|
+
context: HookSchedulingContext,
|
|
358
|
+
strategy: SchedulingStrategy,
|
|
359
|
+
) -> List[ScheduledHook]:
|
|
360
|
+
"""Create scheduled hooks from hook paths with analysis"""
|
|
361
|
+
scheduled_hooks = []
|
|
362
|
+
|
|
363
|
+
for hook_path in hook_paths:
|
|
364
|
+
metadata = self.hook_manager._hook_registry.get(hook_path)
|
|
365
|
+
if not metadata:
|
|
366
|
+
continue
|
|
367
|
+
|
|
368
|
+
# Calculate priority score based on strategy
|
|
369
|
+
priority_score = self._calculate_priority_score(metadata, context, strategy)
|
|
370
|
+
|
|
371
|
+
# Estimate execution cost
|
|
372
|
+
estimated_cost = self._estimate_hook_cost(metadata, context)
|
|
373
|
+
estimated_time = self._estimate_hook_time(metadata, context)
|
|
374
|
+
|
|
375
|
+
# Make initial scheduling decision
|
|
376
|
+
scheduling_decision = self._make_initial_scheduling_decision(
|
|
377
|
+
metadata, context, estimated_cost, estimated_time
|
|
378
|
+
)
|
|
379
|
+
|
|
380
|
+
scheduled_hook = ScheduledHook(
|
|
381
|
+
hook_path=hook_path,
|
|
382
|
+
metadata=metadata,
|
|
383
|
+
priority_score=priority_score,
|
|
384
|
+
estimated_cost=estimated_cost,
|
|
385
|
+
estimated_time_ms=estimated_time,
|
|
386
|
+
scheduling_decision=scheduling_decision,
|
|
387
|
+
dependencies=metadata.dependencies.copy(),
|
|
388
|
+
dependents=set(),
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
scheduled_hooks.append(scheduled_hook)
|
|
392
|
+
|
|
393
|
+
return scheduled_hooks
|
|
394
|
+
|
|
395
|
+
def _calculate_priority_score(
|
|
396
|
+
self,
|
|
397
|
+
metadata: HookMetadata,
|
|
398
|
+
context: HookSchedulingContext,
|
|
399
|
+
strategy: SchedulingStrategy,
|
|
400
|
+
) -> float:
|
|
401
|
+
"""Calculate priority score for hook based on strategy"""
|
|
402
|
+
base_score = 0.0
|
|
403
|
+
|
|
404
|
+
if strategy == SchedulingStrategy.PRIORITY_FIRST:
|
|
405
|
+
# Priority-based scoring
|
|
406
|
+
phase_params = self._phase_parameters.get(context.current_phase, {})
|
|
407
|
+
priority_weights = phase_params.get("priority_weights", {})
|
|
408
|
+
base_score = priority_weights.get(metadata.priority, 0.5) * 100
|
|
409
|
+
|
|
410
|
+
elif strategy == SchedulingStrategy.PERFORMANCE_FIRST:
|
|
411
|
+
# Performance-based scoring (faster hooks get higher priority)
|
|
412
|
+
base_score = max(0, 100 - metadata.estimated_execution_time_ms / 10)
|
|
413
|
+
|
|
414
|
+
elif strategy == SchedulingStrategy.PHASE_OPTIMIZED:
|
|
415
|
+
# Phase relevance scoring
|
|
416
|
+
phase_relevance = metadata.phase_relevance.get(context.current_phase, 0.5)
|
|
417
|
+
base_score = phase_relevance * 100
|
|
418
|
+
|
|
419
|
+
# Add priority bonus
|
|
420
|
+
priority_bonus = (5 - metadata.priority.value) * 10
|
|
421
|
+
base_score += priority_bonus
|
|
422
|
+
|
|
423
|
+
elif strategy == SchedulingStrategy.TOKEN_EFFICIENT:
|
|
424
|
+
# Token efficiency scoring (lower token cost gets higher priority)
|
|
425
|
+
base_score = max(0, 100 - metadata.token_cost_estimate / 10)
|
|
426
|
+
|
|
427
|
+
else: # BALANCED
|
|
428
|
+
# Combine all factors
|
|
429
|
+
priority_score = (5 - metadata.priority.value) * 20
|
|
430
|
+
phase_score = metadata.phase_relevance.get(context.current_phase, 0.5) * 30
|
|
431
|
+
performance_score = max(0, 30 - metadata.estimated_execution_time_ms / 20)
|
|
432
|
+
token_score = max(0, 20 - metadata.token_cost_estimate / 50)
|
|
433
|
+
|
|
434
|
+
base_score = priority_score + phase_score + performance_score + token_score
|
|
435
|
+
|
|
436
|
+
# Apply success rate modifier
|
|
437
|
+
base_score *= metadata.success_rate
|
|
438
|
+
|
|
439
|
+
return base_score
|
|
440
|
+
|
|
441
|
+
def _estimate_hook_cost(self, metadata: HookMetadata, context: HookSchedulingContext) -> int:
|
|
442
|
+
"""Estimate token cost for hook execution"""
|
|
443
|
+
base_cost = metadata.token_cost_estimate
|
|
444
|
+
|
|
445
|
+
# Phase-based cost adjustment
|
|
446
|
+
phase_relevance = metadata.phase_relevance.get(context.current_phase, 0.5)
|
|
447
|
+
if phase_relevance < 0.3:
|
|
448
|
+
# Low relevance - increase cost to discourage execution
|
|
449
|
+
base_cost = int(base_cost * 2.0)
|
|
450
|
+
elif phase_relevance > 0.8:
|
|
451
|
+
# High relevance - reduce cost to encourage execution
|
|
452
|
+
base_cost = int(base_cost * 0.7)
|
|
453
|
+
|
|
454
|
+
# System load adjustment
|
|
455
|
+
if context.system_load > 0.8:
|
|
456
|
+
base_cost = int(base_cost * 1.3) # Increase cost under high load
|
|
457
|
+
|
|
458
|
+
return base_cost
|
|
459
|
+
|
|
460
|
+
def _estimate_hook_time(self, metadata: HookMetadata, context: HookSchedulingContext) -> float:
|
|
461
|
+
"""Estimate execution time for hook"""
|
|
462
|
+
base_time = metadata.estimated_execution_time_ms
|
|
463
|
+
|
|
464
|
+
# System load adjustment
|
|
465
|
+
load_factor = 1.0 + (context.system_load * 0.5) # Up to 1.5x slower under load
|
|
466
|
+
|
|
467
|
+
# Success rate adjustment (unreliable hooks might take longer due to retries)
|
|
468
|
+
reliability_factor = 2.0 - metadata.success_rate # 1.0 to 2.0
|
|
469
|
+
|
|
470
|
+
return base_time * load_factor * reliability_factor
|
|
471
|
+
|
|
472
|
+
def _make_initial_scheduling_decision(
|
|
473
|
+
self,
|
|
474
|
+
metadata: HookMetadata,
|
|
475
|
+
context: HookSchedulingContext,
|
|
476
|
+
estimated_cost: int,
|
|
477
|
+
estimated_time: float,
|
|
478
|
+
) -> SchedulingDecision:
|
|
479
|
+
"""Make initial scheduling decision for hook"""
|
|
480
|
+
# Critical hooks always execute
|
|
481
|
+
if metadata.priority == HookPriority.CRITICAL:
|
|
482
|
+
return SchedulingDecision.EXECUTE
|
|
483
|
+
|
|
484
|
+
# Check constraints
|
|
485
|
+
if estimated_cost > context.available_token_budget:
|
|
486
|
+
return SchedulingDecision.SKIP
|
|
487
|
+
|
|
488
|
+
if estimated_time > context.max_execution_time_ms:
|
|
489
|
+
return SchedulingDecision.DEFER
|
|
490
|
+
|
|
491
|
+
# Phase relevance check
|
|
492
|
+
phase_relevance = metadata.phase_relevance.get(context.current_phase, 0.5)
|
|
493
|
+
if phase_relevance < 0.2:
|
|
494
|
+
return SchedulingDecision.SKIP
|
|
495
|
+
|
|
496
|
+
# Success rate check
|
|
497
|
+
if metadata.success_rate < 0.3:
|
|
498
|
+
return SchedulingDecision.DEFER
|
|
499
|
+
|
|
500
|
+
# System load check
|
|
501
|
+
if context.system_load > 0.9 and metadata.priority != HookPriority.HIGH:
|
|
502
|
+
return SchedulingDecision.DEFER
|
|
503
|
+
|
|
504
|
+
# Default to execution
|
|
505
|
+
return SchedulingDecision.EXECUTE
|
|
506
|
+
|
|
507
|
+
def _filter_hooks_by_constraints(
|
|
508
|
+
self, scheduled_hooks: List[ScheduledHook], context: HookSchedulingContext
|
|
509
|
+
) -> List[ScheduledHook]:
|
|
510
|
+
"""Filter hooks based on constraints"""
|
|
511
|
+
filtered_hooks = []
|
|
512
|
+
remaining_token_budget = context.available_token_budget
|
|
513
|
+
remaining_time_budget = context.max_execution_time_ms
|
|
514
|
+
|
|
515
|
+
# Sort by priority score (highest first)
|
|
516
|
+
sorted_hooks = sorted(scheduled_hooks, key=lambda h: h.priority_score, reverse=True)
|
|
517
|
+
|
|
518
|
+
for hook in sorted_hooks:
|
|
519
|
+
if hook.scheduling_decision != SchedulingDecision.EXECUTE:
|
|
520
|
+
filtered_hooks.append(hook)
|
|
521
|
+
continue
|
|
522
|
+
|
|
523
|
+
# Check if hook fits within constraints
|
|
524
|
+
if hook.estimated_cost <= remaining_token_budget and hook.estimated_time_ms <= remaining_time_budget:
|
|
525
|
+
filtered_hooks.append(hook)
|
|
526
|
+
remaining_token_budget -= hook.estimated_cost
|
|
527
|
+
remaining_time_budget -= hook.estimated_time_ms
|
|
528
|
+
else:
|
|
529
|
+
# Can't fit - mark as deferred
|
|
530
|
+
hook.scheduling_decision = SchedulingDecision.DEFER
|
|
531
|
+
filtered_hooks.append(hook)
|
|
532
|
+
|
|
533
|
+
return filtered_hooks
|
|
534
|
+
|
|
535
|
+
def _prioritize_hooks(
|
|
536
|
+
self,
|
|
537
|
+
scheduled_hooks: List[ScheduledHook],
|
|
538
|
+
context: HookSchedulingContext,
|
|
539
|
+
strategy: SchedulingStrategy,
|
|
540
|
+
) -> List[ScheduledHook]:
|
|
541
|
+
"""Prioritize hooks for execution"""
|
|
542
|
+
# Separate by scheduling decision
|
|
543
|
+
execute_hooks = [h for h in scheduled_hooks if h.scheduling_decision == SchedulingDecision.EXECUTE]
|
|
544
|
+
other_hooks = [h for h in scheduled_hooks if h.scheduling_decision != SchedulingDecision.EXECUTE]
|
|
545
|
+
|
|
546
|
+
# Sort execute hooks by priority (descending)
|
|
547
|
+
execute_hooks.sort(key=lambda h: h.priority_score, reverse=True)
|
|
548
|
+
|
|
549
|
+
# Sort other hooks by priority (ascending - least important first for skipping)
|
|
550
|
+
other_hooks.sort(key=lambda h: h.priority_score)
|
|
551
|
+
|
|
552
|
+
return execute_hooks + other_hooks
|
|
553
|
+
|
|
554
|
+
def _resolve_dependencies(self, hooks: List[ScheduledHook]) -> List[ScheduledHook]:
|
|
555
|
+
"""Resolve hook dependencies and adjust execution order"""
|
|
556
|
+
# Build dependency graph
|
|
557
|
+
for hook in hooks:
|
|
558
|
+
for dep_path in hook.dependencies:
|
|
559
|
+
# Find dependent hook
|
|
560
|
+
for other_hook in hooks:
|
|
561
|
+
if other_hook.hook_path == dep_path:
|
|
562
|
+
other_hook.dependents.add(hook.hook_path)
|
|
563
|
+
break
|
|
564
|
+
|
|
565
|
+
# Topological sort considering dependencies
|
|
566
|
+
resolved_hooks = []
|
|
567
|
+
remaining_hooks = hooks.copy()
|
|
568
|
+
|
|
569
|
+
while remaining_hooks:
|
|
570
|
+
# Find hooks with no unresolved dependencies
|
|
571
|
+
ready_hooks = [
|
|
572
|
+
h
|
|
573
|
+
for h in remaining_hooks
|
|
574
|
+
if not any(dep in [rh.hook_path for rh in remaining_hooks] for dep in h.dependencies)
|
|
575
|
+
]
|
|
576
|
+
|
|
577
|
+
if not ready_hooks:
|
|
578
|
+
# Circular dependency - break by priority
|
|
579
|
+
ready_hooks = sorted(remaining_hooks, key=lambda h: h.priority_score, reverse=True)
|
|
580
|
+
ready_hooks = [ready_hooks[0]]
|
|
581
|
+
|
|
582
|
+
# Add highest priority ready hook
|
|
583
|
+
next_hook = max(ready_hooks, key=lambda h: h.priority_score)
|
|
584
|
+
resolved_hooks.append(next_hook)
|
|
585
|
+
remaining_hooks.remove(next_hook)
|
|
586
|
+
|
|
587
|
+
return resolved_hooks
|
|
588
|
+
|
|
589
|
+
def _create_execution_groups(
|
|
590
|
+
self,
|
|
591
|
+
hooks: List[ScheduledHook],
|
|
592
|
+
context: HookSchedulingContext,
|
|
593
|
+
strategy: SchedulingStrategy,
|
|
594
|
+
) -> List[ExecutionGroup]:
|
|
595
|
+
"""Create execution groups for optimal performance"""
|
|
596
|
+
groups = []
|
|
597
|
+
current_group = None
|
|
598
|
+
group_id = 0
|
|
599
|
+
|
|
600
|
+
# Get phase preferences
|
|
601
|
+
phase_params = self._phase_parameters.get(context.current_phase, {})
|
|
602
|
+
prefer_parallel = phase_params.get("prefer_parallel", True)
|
|
603
|
+
|
|
604
|
+
for hook in hooks:
|
|
605
|
+
if hook.scheduling_decision != SchedulingDecision.EXECUTE:
|
|
606
|
+
continue
|
|
607
|
+
|
|
608
|
+
# Determine execution type
|
|
609
|
+
execution_type = (
|
|
610
|
+
SchedulingDecision.PARALLEL
|
|
611
|
+
if (prefer_parallel and hook.metadata.parallel_safe)
|
|
612
|
+
else SchedulingDecision.SEQUENTIAL
|
|
613
|
+
)
|
|
614
|
+
|
|
615
|
+
# Create new group if needed
|
|
616
|
+
if (
|
|
617
|
+
current_group is None
|
|
618
|
+
or current_group.execution_type != execution_type
|
|
619
|
+
or len(current_group.hooks) >= self.max_parallel_groups
|
|
620
|
+
):
|
|
621
|
+
current_group = ExecutionGroup(
|
|
622
|
+
group_id=group_id,
|
|
623
|
+
execution_type=execution_type,
|
|
624
|
+
hooks=[],
|
|
625
|
+
estimated_time_ms=0.0,
|
|
626
|
+
estimated_tokens=0,
|
|
627
|
+
max_wait_time_ms=0.0,
|
|
628
|
+
dependencies=set(),
|
|
629
|
+
)
|
|
630
|
+
groups.append(current_group)
|
|
631
|
+
group_id += 1
|
|
632
|
+
|
|
633
|
+
# Add hook to current group
|
|
634
|
+
current_group.hooks.append(hook)
|
|
635
|
+
current_group.estimated_time_ms += hook.estimated_time_ms
|
|
636
|
+
current_group.estimated_tokens += hook.estimated_cost
|
|
637
|
+
current_group.dependencies.update(hook.dependencies)
|
|
638
|
+
|
|
639
|
+
# Set max wait time for parallel groups
|
|
640
|
+
for group in groups:
|
|
641
|
+
if group.execution_type == SchedulingDecision.PARALLEL:
|
|
642
|
+
# For parallel groups, wait time is determined by slowest hook
|
|
643
|
+
group.max_wait_time_ms = max(h.estimated_time_ms for h in group.hooks)
|
|
644
|
+
else:
|
|
645
|
+
# For sequential groups, sum all hook times
|
|
646
|
+
group.max_wait_time_ms = group.estimated_time_ms
|
|
647
|
+
|
|
648
|
+
return groups
|
|
649
|
+
|
|
650
|
+
def _optimize_execution_order(
|
|
651
|
+
self, groups: List[ExecutionGroup], context: HookSchedulingContext
|
|
652
|
+
) -> List[ExecutionGroup]:
|
|
653
|
+
"""Optimize execution order of groups"""
|
|
654
|
+
if len(groups) <= 1:
|
|
655
|
+
return groups
|
|
656
|
+
|
|
657
|
+
# Sort groups by priority and execution type
|
|
658
|
+
def group_score(group: ExecutionGroup) -> float:
|
|
659
|
+
# Calculate average priority of hooks in group
|
|
660
|
+
avg_priority = sum(h.priority_score for h in group.hooks) / len(group.hooks)
|
|
661
|
+
|
|
662
|
+
# Parallel groups get bonus for speed
|
|
663
|
+
parallel_bonus = 10 if group.execution_type == SchedulingDecision.PARALLEL else 0
|
|
664
|
+
|
|
665
|
+
# Smaller groups get bonus for better time management
|
|
666
|
+
size_bonus = max(0, 5 - len(group.hooks))
|
|
667
|
+
|
|
668
|
+
return avg_priority + parallel_bonus + size_bonus
|
|
669
|
+
|
|
670
|
+
# Sort by score (descending)
|
|
671
|
+
optimized_groups = sorted(groups, key=group_score, reverse=True)
|
|
672
|
+
|
|
673
|
+
return optimized_groups
|
|
674
|
+
|
|
675
|
+
def _update_scheduling_history(self, result: SchedulingResult, planning_time_ms: float) -> None:
|
|
676
|
+
"""Update scheduling history for learning"""
|
|
677
|
+
with self._scheduling_lock:
|
|
678
|
+
history_entry: Dict[str, Any] = {
|
|
679
|
+
"timestamp": datetime.now().isoformat(),
|
|
680
|
+
"strategy": result.scheduling_strategy.value,
|
|
681
|
+
"planning_time_ms": planning_time_ms,
|
|
682
|
+
"total_hooks": len(result.scheduled_hooks),
|
|
683
|
+
"executed_hooks": sum(len(group) for group in result.execution_plan),
|
|
684
|
+
"skipped_hooks": len(result.skipped_hooks),
|
|
685
|
+
"deferred_hooks": len(result.deferred_hooks),
|
|
686
|
+
"estimated_time_ms": result.estimated_total_time_ms,
|
|
687
|
+
"estimated_tokens": result.estimated_total_tokens,
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
self._scheduling_history.append(history_entry)
|
|
691
|
+
|
|
692
|
+
# Keep history manageable
|
|
693
|
+
if len(self._scheduling_history) > 1000:
|
|
694
|
+
self._scheduling_history = self._scheduling_history[-500:]
|
|
695
|
+
|
|
696
|
+
def _update_strategy_performance(
|
|
697
|
+
self,
|
|
698
|
+
strategy: SchedulingStrategy,
|
|
699
|
+
result: SchedulingResult,
|
|
700
|
+
context: HookSchedulingContext,
|
|
701
|
+
) -> None:
|
|
702
|
+
"""Update strategy performance metrics"""
|
|
703
|
+
performance = self._strategy_performance[strategy]
|
|
704
|
+
|
|
705
|
+
# Update usage count
|
|
706
|
+
performance["usage_count"] += 1
|
|
707
|
+
|
|
708
|
+
# Calculate efficiency (higher is better)
|
|
709
|
+
total_hooks = len(result.scheduled_hooks)
|
|
710
|
+
executed_hooks = sum(len(group) for group in result.execution_plan)
|
|
711
|
+
|
|
712
|
+
if total_hooks > 0:
|
|
713
|
+
execution_ratio = executed_hooks / total_hooks
|
|
714
|
+
|
|
715
|
+
# Consider resource utilization
|
|
716
|
+
time_efficiency = min(1.0, result.estimated_total_time_ms / context.max_execution_time_ms)
|
|
717
|
+
token_efficiency = min(
|
|
718
|
+
1.0,
|
|
719
|
+
result.estimated_total_tokens / max(1, context.available_token_budget),
|
|
720
|
+
)
|
|
721
|
+
|
|
722
|
+
# Overall efficiency
|
|
723
|
+
overall_efficiency = (execution_ratio * 0.5) + (time_efficiency * 0.3) + (token_efficiency * 0.2)
|
|
724
|
+
|
|
725
|
+
# Update rolling average
|
|
726
|
+
current_avg = performance["avg_efficiency"]
|
|
727
|
+
performance["avg_efficiency"] = (current_avg * 0.8) + (overall_efficiency * 0.2)
|
|
728
|
+
|
|
729
|
+
# Update success rate (assume successful if no critical errors)
|
|
730
|
+
# This would be updated with actual execution results
|
|
731
|
+
performance["success_rate"] = min(1.0, performance["success_rate"] * 0.95 + 0.05)
|
|
732
|
+
|
|
733
|
+
def get_scheduling_statistics(self) -> Dict[str, Any]:
|
|
734
|
+
"""Get scheduling statistics and performance data"""
|
|
735
|
+
with self._scheduling_lock:
|
|
736
|
+
total_schedules = len(self._scheduling_history)
|
|
737
|
+
|
|
738
|
+
if total_schedules == 0:
|
|
739
|
+
return {
|
|
740
|
+
"total_schedules": 0,
|
|
741
|
+
"strategy_performance": {},
|
|
742
|
+
"recent_performance": [],
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
# Calculate strategy statistics
|
|
746
|
+
strategy_stats = {}
|
|
747
|
+
for strategy, performance in self._strategy_performance.items():
|
|
748
|
+
if performance["usage_count"] > 0:
|
|
749
|
+
strategy_stats[strategy.value] = {
|
|
750
|
+
"usage_count": performance["usage_count"],
|
|
751
|
+
"success_rate": performance["success_rate"],
|
|
752
|
+
"avg_efficiency": performance["avg_efficiency"],
|
|
753
|
+
"recommendation_score": performance["success_rate"] * performance["avg_efficiency"],
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
# Get recent performance
|
|
757
|
+
recent_performance = self._scheduling_history[-10:] if total_schedules >= 10 else self._scheduling_history
|
|
758
|
+
|
|
759
|
+
return {
|
|
760
|
+
"total_schedules": total_schedules,
|
|
761
|
+
"strategy_performance": strategy_stats,
|
|
762
|
+
"recent_performance": recent_performance,
|
|
763
|
+
"recommended_strategy": (
|
|
764
|
+
max(
|
|
765
|
+
strategy_stats.keys(),
|
|
766
|
+
key=lambda k: strategy_stats[k]["recommendation_score"],
|
|
767
|
+
)
|
|
768
|
+
if strategy_stats
|
|
769
|
+
else None
|
|
770
|
+
),
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
def get_phase_optimization_insights(self, phase: Phase) -> Dict[str, Any]:
|
|
774
|
+
"""Get insights for phase-specific optimization"""
|
|
775
|
+
phase_params = self._phase_parameters.get(phase, {})
|
|
776
|
+
|
|
777
|
+
# Analyze historical performance for this phase
|
|
778
|
+
phase_schedules = [
|
|
779
|
+
s
|
|
780
|
+
for s in self._scheduling_history
|
|
781
|
+
if any(phase.value.lower() in s.get("context", "").lower() for phase in [phase])
|
|
782
|
+
]
|
|
783
|
+
|
|
784
|
+
insights: Dict[str, Any] = {
|
|
785
|
+
"phase": phase.value,
|
|
786
|
+
"parameters": phase_params,
|
|
787
|
+
"historical_schedules": len(phase_schedules),
|
|
788
|
+
"optimization_recommendations": [],
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
# Generate recommendations based on phase parameters
|
|
792
|
+
if phase_params.get("prefer_parallel", False):
|
|
793
|
+
recs_list = insights["optimization_recommendations"]
|
|
794
|
+
if isinstance(recs_list, list):
|
|
795
|
+
recs_list.append("This phase benefits from parallel hook execution")
|
|
796
|
+
else:
|
|
797
|
+
recs_list = insights["optimization_recommendations"]
|
|
798
|
+
if isinstance(recs_list, list):
|
|
799
|
+
recs_list.append("This phase prefers sequential hook execution for consistency")
|
|
800
|
+
|
|
801
|
+
if phase_params.get("token_budget_ratio", 0) > 0.2:
|
|
802
|
+
recs_list = insights["optimization_recommendations"]
|
|
803
|
+
if isinstance(recs_list, list):
|
|
804
|
+
recs_list.append("This phase requires significant token budget - consider token-efficient scheduling")
|
|
805
|
+
|
|
806
|
+
# Add strategy recommendations
|
|
807
|
+
strategy_stats = self.get_scheduling_statistics()["strategy_performance"]
|
|
808
|
+
best_strategy = (
|
|
809
|
+
max(strategy_stats.items(), key=lambda x: x[1]["recommendation_score"]) if strategy_stats else None
|
|
810
|
+
)
|
|
811
|
+
|
|
812
|
+
if best_strategy:
|
|
813
|
+
insights["recommended_strategy"] = best_strategy[0]
|
|
814
|
+
score = best_strategy[1]["recommendation_score"]
|
|
815
|
+
insights["strategy_rationale"] = f"Best performance with {best_strategy[0]} strategy (score: {score:.2f})"
|
|
816
|
+
|
|
817
|
+
return insights
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
# Convenience functions for common scheduling operations
|
|
821
|
+
async def schedule_session_start_hooks(
|
|
822
|
+
context: HookSchedulingContext, strategy: Optional[SchedulingStrategy] = None
|
|
823
|
+
) -> SchedulingResult:
|
|
824
|
+
"""Schedule SessionStart hooks with phase optimization"""
|
|
825
|
+
scheduler = PhaseOptimizedHookScheduler()
|
|
826
|
+
return await scheduler.schedule_hooks(HookEvent.SESSION_START, context, strategy)
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
async def schedule_pre_tool_hooks(
|
|
830
|
+
context: HookSchedulingContext, strategy: Optional[SchedulingStrategy] = None
|
|
831
|
+
) -> SchedulingResult:
|
|
832
|
+
"""Schedule PreToolUse hooks with phase optimization"""
|
|
833
|
+
scheduler = PhaseOptimizedHookScheduler()
|
|
834
|
+
return await scheduler.schedule_hooks(HookEvent.PRE_TOOL_USE, context, strategy)
|
|
835
|
+
|
|
836
|
+
|
|
837
|
+
def get_hook_scheduling_insights(phase: Phase) -> Dict[str, Any]:
|
|
838
|
+
"""Get phase-specific hook scheduling insights"""
|
|
839
|
+
scheduler = PhaseOptimizedHookScheduler()
|
|
840
|
+
return scheduler.get_phase_optimization_insights(phase)
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
if __name__ == "__main__":
|
|
844
|
+
# Example usage and testing
|
|
845
|
+
async def test_phase_optimized_scheduler():
|
|
846
|
+
scheduler = PhaseOptimizedHookScheduler()
|
|
847
|
+
|
|
848
|
+
# Create test context
|
|
849
|
+
context = HookSchedulingContext(
|
|
850
|
+
event_type=HookEvent.SESSION_START,
|
|
851
|
+
current_phase=Phase.SPEC,
|
|
852
|
+
user_input="Creating new specification for user authentication",
|
|
853
|
+
available_token_budget=10000,
|
|
854
|
+
max_execution_time_ms=1000.0,
|
|
855
|
+
)
|
|
856
|
+
|
|
857
|
+
# Schedule hooks
|
|
858
|
+
result = await scheduler.schedule_hooks(HookEvent.SESSION_START, context)
|
|
859
|
+
|
|
860
|
+
print(f"Scheduled {len(result.execution_plan)} execution groups")
|
|
861
|
+
print(f"Estimated time: {result.estimated_total_time_ms:.1f}ms")
|
|
862
|
+
print(f"Estimated tokens: {result.estimated_total_tokens}")
|
|
863
|
+
print(f"Strategy: {result.scheduling_strategy.value}")
|
|
864
|
+
|
|
865
|
+
# Show insights
|
|
866
|
+
insights = scheduler.get_phase_optimization_insights(Phase.SPEC)
|
|
867
|
+
print("\nPhase insights for SPEC:")
|
|
868
|
+
for rec in insights.get("optimization_recommendations", []):
|
|
869
|
+
print(f" - {rec}")
|
|
870
|
+
|
|
871
|
+
# Show statistics
|
|
872
|
+
stats = scheduler.get_scheduling_statistics()
|
|
873
|
+
print("\nScheduling statistics:")
|
|
874
|
+
print(f" Total schedules: {stats['total_schedules']}")
|
|
875
|
+
if stats.get("recommended_strategy"):
|
|
876
|
+
print(f" Recommended strategy: {stats['recommended_strategy']}")
|
|
877
|
+
|
|
878
|
+
# Run test
|
|
879
|
+
asyncio.run(test_phase_optimized_scheduler())
|