moai-adk 0.15.0__py3-none-any.whl → 0.25.4__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 +1 -2
- moai_adk/__main__.py +85 -2
- moai_adk/cli/__init__.py +0 -1
- moai_adk/cli/commands/__init__.py +0 -1
- moai_adk/cli/commands/analyze.py +127 -0
- moai_adk/cli/commands/backup.py +5 -3
- moai_adk/cli/commands/doctor.py +35 -11
- moai_adk/cli/commands/improve_user_experience.py +348 -0
- moai_adk/cli/commands/init.py +150 -23
- moai_adk/cli/commands/language.py +269 -0
- moai_adk/cli/commands/migrate.py +158 -0
- moai_adk/cli/commands/status.py +13 -12
- moai_adk/cli/commands/update.py +364 -60
- moai_adk/cli/commands/validate_links.py +118 -0
- moai_adk/cli/main.py +3 -2
- moai_adk/cli/prompts/init_prompts.py +79 -82
- moai_adk/core/__init__.py +0 -1
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +439 -0
- moai_adk/core/claude_integration.py +421 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/config/__init__.py +6 -0
- moai_adk/core/config/auto_spec_config.py +346 -0
- moai_adk/core/config/migration.py +133 -12
- moai_adk/core/context_manager.py +279 -0
- moai_adk/core/diagnostics/slash_commands.py +0 -1
- moai_adk/core/error_recovery_system.py +1289 -0
- moai_adk/core/git/__init__.py +0 -1
- moai_adk/core/git/branch.py +0 -1
- moai_adk/core/git/branch_manager.py +4 -4
- moai_adk/core/git/checkpoint.py +1 -5
- moai_adk/core/git/commit.py +0 -1
- moai_adk/core/git/event_detector.py +3 -5
- moai_adk/core/git/manager.py +0 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +925 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +169 -0
- moai_adk/core/integration/integration_tester.py +225 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +28 -18
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_validator.py +556 -0
- moai_adk/core/mcp/setup.py +113 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/backup_manager.py +208 -0
- moai_adk/core/migration/file_migrator.py +218 -0
- moai_adk/core/migration/version_detector.py +143 -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 +318 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/project/__init__.py +0 -1
- moai_adk/core/project/backup_utils.py +2 -7
- moai_adk/core/project/checker.py +3 -3
- moai_adk/core/project/detector.py +20 -40
- moai_adk/core/project/initializer.py +42 -17
- moai_adk/core/project/phase_executor.py +415 -58
- moai_adk/core/project/validator.py +6 -25
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +64 -110
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/rollback_manager.py +993 -0
- moai_adk/core/session_manager.py +667 -0
- moai_adk/core/spec/confidence_scoring.py +749 -0
- moai_adk/core/spec/ears_template_engine.py +1182 -0
- moai_adk/core/spec/quality_validator.py +721 -0
- moai_adk/core/spec_status_manager.py +488 -0
- moai_adk/core/template/__init__.py +0 -1
- moai_adk/core/template/backup.py +41 -1
- moai_adk/core/template/config.py +11 -12
- moai_adk/core/template/languages.py +0 -1
- moai_adk/core/template/merger.py +79 -22
- moai_adk/core/template/processor.py +614 -40
- moai_adk/core/template_engine.py +36 -27
- moai_adk/foundation/git/commit_templates.py +565 -0
- moai_adk/foundation/trust/trust_principles.py +725 -0
- moai_adk/foundation/trust/validation_checklist.py +1678 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +107 -0
- moai_adk/statusline/config.py +364 -0
- moai_adk/statusline/enhanced_output_style_detector.py +364 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +228 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +327 -0
- moai_adk/statusline/update_checker.py +135 -0
- moai_adk/statusline/version_reader.py +647 -0
- moai_adk/templates/.git-hooks/pre-commit +66 -0
- moai_adk/templates/.git-hooks/pre-push +116 -4
- moai_adk/templates/.github/workflows/moai-gitflow.yml +1 -7
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
- moai_adk/templates/.gitignore +44 -0
- moai_adk/templates/.mcp.json +22 -0
- moai_adk/templates/CLAUDE.md +450 -1071
- moai_adk/utils/__init__.py +0 -1
- moai_adk/utils/banner.py +0 -1
- moai_adk/utils/common.py +308 -0
- moai_adk/utils/link_validator.py +249 -0
- moai_adk/utils/logger.py +4 -9
- moai_adk/utils/safe_file_reader.py +210 -0
- moai_adk/utils/user_experience.py +531 -0
- moai_adk-0.25.4.dist-info/METADATA +2279 -0
- moai_adk-0.25.4.dist-info/RECORD +112 -0
- 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 -392
- 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 -1525
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -802
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -709
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1009
- 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/timeout.py +0 -136
- 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/checkpoint.py +0 -271
- moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +0 -749
- 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/hooks/alfred/utils/timeout.py +0 -161
- moai_adk/templates/.claude/settings.json +0 -144
- 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/SKILL.md +0 -290
- 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/SKILL.md +0 -123
- 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/SKILL.md +0 -128
- 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/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.0.dist-info/METADATA +0 -3079
- moai_adk-0.15.0.dist-info/RECORD +0 -365
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/WHEEL +0 -0
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# type: ignore
|
|
2
|
+
"""
|
|
3
|
+
Statusline module for Claude Code status display
|
|
4
|
+
|
|
5
|
+
Provides real-time status information display in Claude Code terminal
|
|
6
|
+
|
|
7
|
+
Enhanced version includes:
|
|
8
|
+
- Improved version reader with caching and error handling
|
|
9
|
+
- Async support for better performance
|
|
10
|
+
- Configurable version reading behavior
|
|
11
|
+
- Comprehensive fallback strategies
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
__version__ = "0.1.0"
|
|
15
|
+
|
|
16
|
+
from .alfred_detector import AlfredDetector, AlfredTask
|
|
17
|
+
from .config import StatuslineConfig
|
|
18
|
+
from .git_collector import GitCollector, GitInfo
|
|
19
|
+
from .metrics_tracker import MetricsTracker
|
|
20
|
+
from .renderer import StatuslineData, StatuslineRenderer
|
|
21
|
+
from .update_checker import UpdateChecker, UpdateInfo
|
|
22
|
+
from .version_reader import VersionConfig, VersionReader, VersionReadError
|
|
23
|
+
|
|
24
|
+
__all__ = [
|
|
25
|
+
"StatuslineRenderer",
|
|
26
|
+
"StatuslineData",
|
|
27
|
+
"StatuslineConfig",
|
|
28
|
+
"GitCollector",
|
|
29
|
+
"GitInfo",
|
|
30
|
+
"MetricsTracker",
|
|
31
|
+
"AlfredDetector",
|
|
32
|
+
"AlfredTask",
|
|
33
|
+
"VersionReader",
|
|
34
|
+
"VersionConfig",
|
|
35
|
+
"VersionReadError",
|
|
36
|
+
"UpdateChecker",
|
|
37
|
+
"UpdateInfo",
|
|
38
|
+
]
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# type: ignore
|
|
2
|
+
"""
|
|
3
|
+
Alfred task detector for statusline
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import logging
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from datetime import datetime, timedelta
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import Optional
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass
|
|
18
|
+
class AlfredTask:
|
|
19
|
+
"""Alfred task information"""
|
|
20
|
+
|
|
21
|
+
command: Optional[str]
|
|
22
|
+
spec_id: Optional[str]
|
|
23
|
+
stage: Optional[str]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AlfredDetector:
|
|
27
|
+
"""Detects active Alfred tasks with 1-second caching"""
|
|
28
|
+
|
|
29
|
+
# Configuration
|
|
30
|
+
_CACHE_TTL_SECONDS = 1
|
|
31
|
+
|
|
32
|
+
def __init__(self):
|
|
33
|
+
"""Initialize Alfred detector"""
|
|
34
|
+
self._cache: Optional[AlfredTask] = None
|
|
35
|
+
self._cache_time: Optional[datetime] = None
|
|
36
|
+
self._cache_ttl = timedelta(seconds=self._CACHE_TTL_SECONDS)
|
|
37
|
+
self._session_state_path = (
|
|
38
|
+
Path.home() / ".moai" / "memory" / "last-session-state.json"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
def detect_active_task(self) -> AlfredTask:
|
|
42
|
+
"""
|
|
43
|
+
Detect currently active Alfred task
|
|
44
|
+
|
|
45
|
+
Returns:
|
|
46
|
+
AlfredTask with command and spec_id
|
|
47
|
+
"""
|
|
48
|
+
# Check cache
|
|
49
|
+
if self._is_cache_valid():
|
|
50
|
+
return self._cache
|
|
51
|
+
|
|
52
|
+
# Read and parse session state
|
|
53
|
+
task = self._read_session_state()
|
|
54
|
+
self._update_cache(task)
|
|
55
|
+
return task
|
|
56
|
+
|
|
57
|
+
def _read_session_state(self) -> AlfredTask:
|
|
58
|
+
"""
|
|
59
|
+
Read Alfred task from session state file
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
AlfredTask from file or defaults
|
|
63
|
+
"""
|
|
64
|
+
try:
|
|
65
|
+
if not self._session_state_path.exists():
|
|
66
|
+
return self._create_default_task()
|
|
67
|
+
|
|
68
|
+
with open(self._session_state_path, "r") as f:
|
|
69
|
+
data = json.load(f)
|
|
70
|
+
|
|
71
|
+
active_task = data.get("active_task")
|
|
72
|
+
if active_task is None:
|
|
73
|
+
return self._create_default_task()
|
|
74
|
+
|
|
75
|
+
# Parse command and spec_id
|
|
76
|
+
command = active_task.get("command")
|
|
77
|
+
spec_id = active_task.get("spec_id")
|
|
78
|
+
|
|
79
|
+
return AlfredTask(
|
|
80
|
+
command=command,
|
|
81
|
+
spec_id=spec_id,
|
|
82
|
+
stage=active_task.get("stage"),
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
except Exception as e:
|
|
86
|
+
logger.debug(f"Error reading Alfred task: {e}")
|
|
87
|
+
return self._create_default_task()
|
|
88
|
+
|
|
89
|
+
def _is_cache_valid(self) -> bool:
|
|
90
|
+
"""Check if task cache is still valid"""
|
|
91
|
+
if self._cache is None or self._cache_time is None:
|
|
92
|
+
return False
|
|
93
|
+
return datetime.now() - self._cache_time < self._cache_ttl
|
|
94
|
+
|
|
95
|
+
def _update_cache(self, task: AlfredTask) -> None:
|
|
96
|
+
"""Update task cache"""
|
|
97
|
+
self._cache = task
|
|
98
|
+
self._cache_time = datetime.now()
|
|
99
|
+
|
|
100
|
+
@staticmethod
|
|
101
|
+
def _create_default_task() -> AlfredTask:
|
|
102
|
+
"""Create default task (no active task)"""
|
|
103
|
+
return AlfredTask(
|
|
104
|
+
command=None,
|
|
105
|
+
spec_id=None,
|
|
106
|
+
stage=None,
|
|
107
|
+
)
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
# type: ignore
|
|
2
|
+
"""
|
|
3
|
+
Statusline configuration loader for Claude Code
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
Loads and manages statusline configuration from .moai/config/statusline-config.yaml
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
from dataclasses import dataclass
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import Any, Dict, Optional
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass
|
|
18
|
+
class CacheConfig:
|
|
19
|
+
"""Cache TTL configuration"""
|
|
20
|
+
|
|
21
|
+
git_ttl_seconds: int = 5
|
|
22
|
+
metrics_ttl_seconds: int = 10
|
|
23
|
+
alfred_ttl_seconds: int = 1
|
|
24
|
+
todo_ttl_seconds: int = 3
|
|
25
|
+
memory_ttl_seconds: int = 5
|
|
26
|
+
output_style_ttl_seconds: int = 60
|
|
27
|
+
version_ttl_seconds: int = 60
|
|
28
|
+
update_ttl_seconds: int = 300
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@dataclass
|
|
32
|
+
class ColorConfig:
|
|
33
|
+
"""Color configuration"""
|
|
34
|
+
|
|
35
|
+
enabled: bool = True
|
|
36
|
+
theme: str = "auto" # auto | light | dark | high-contrast
|
|
37
|
+
palette: Dict[str, str] = None
|
|
38
|
+
|
|
39
|
+
def __post_init__(self):
|
|
40
|
+
if self.palette is None:
|
|
41
|
+
self.palette = {
|
|
42
|
+
"model": "38;5;33", # Blue
|
|
43
|
+
"output_style": "38;5;219", # Pink/Magenta
|
|
44
|
+
"feature_branch": "38;5;226", # Yellow
|
|
45
|
+
"develop_branch": "38;5;51", # Cyan
|
|
46
|
+
"main_branch": "38;5;46", # Green
|
|
47
|
+
"staged": "38;5;46", # Green
|
|
48
|
+
"modified": "38;5;208", # Orange
|
|
49
|
+
"untracked": "38;5;196", # Red
|
|
50
|
+
"update_available": "38;5;208", # Orange
|
|
51
|
+
"memory_usage": "38;5;172", # Brown/Orange
|
|
52
|
+
"duration": "38;5;240", # Gray
|
|
53
|
+
"todo_count": "38;5;123", # Purple
|
|
54
|
+
"separator": "38;5;250", # Light Gray
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@dataclass
|
|
59
|
+
class DisplayConfig:
|
|
60
|
+
"""Information display settings - Custom ordered status bar"""
|
|
61
|
+
|
|
62
|
+
model: bool = True # 🤖 Model name (glm-4.6, claude-3.5-sonnet, etc.)
|
|
63
|
+
version: bool = True # 🗿 MoAI-ADK version (0.23.0, etc.)
|
|
64
|
+
output_style: bool = True # ✍️ Output style (Explanatory, Concise, etc.)
|
|
65
|
+
memory_usage: bool = True # 💾 Session memory usage
|
|
66
|
+
todo_count: bool = True # 📋 Active TODO items count
|
|
67
|
+
branch: bool = True # 🔀 Git branch
|
|
68
|
+
git_status: bool = True # ✅2 M1 ?10 Git changes status
|
|
69
|
+
duration: bool = True # ⏱️ Session elapsed time
|
|
70
|
+
directory: bool = True # 📁 Project name/directory
|
|
71
|
+
active_task: bool = True # 🎯 Alfred active task
|
|
72
|
+
update_indicator: bool = True # 🔄 Update notification
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@dataclass
|
|
76
|
+
class FormatConfig:
|
|
77
|
+
"""Format configuration"""
|
|
78
|
+
|
|
79
|
+
max_branch_length: int = 20
|
|
80
|
+
truncate_with: str = "..."
|
|
81
|
+
separator: str = " | "
|
|
82
|
+
|
|
83
|
+
# Icon configuration for better visual recognition
|
|
84
|
+
icons: Dict[str, str] = None
|
|
85
|
+
|
|
86
|
+
def __post_init__(self):
|
|
87
|
+
if self.icons is None:
|
|
88
|
+
self.icons = {
|
|
89
|
+
"git": "🔀", # Git branch icon (more intuitive than 📊)
|
|
90
|
+
"staged": "✅", # Staged files
|
|
91
|
+
"modified": "📝", # Modified files
|
|
92
|
+
"untracked": "❓", # Untracked files
|
|
93
|
+
"added": "➕", # Added files
|
|
94
|
+
"deleted": "➖", # Deleted files
|
|
95
|
+
"renamed": "🔄", # Renamed files
|
|
96
|
+
"conflict": "⚠️", # Conflict files
|
|
97
|
+
"model": "🤖", # AI model
|
|
98
|
+
"output_style": "✍️", # Writing style
|
|
99
|
+
"duration": "⏱️", # Time duration
|
|
100
|
+
"memory": "💾", # Memory usage
|
|
101
|
+
"todo": "📋", # TODO items
|
|
102
|
+
"update": "🔄", # Update available
|
|
103
|
+
"project": "📁", # Project directory
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@dataclass
|
|
108
|
+
class ErrorHandlingConfig:
|
|
109
|
+
"""Error handling configuration"""
|
|
110
|
+
|
|
111
|
+
graceful_degradation: bool = True
|
|
112
|
+
log_level: str = "warning" # warning | error
|
|
113
|
+
fallback_text: str = ""
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class StatuslineConfig:
|
|
117
|
+
"""
|
|
118
|
+
Singleton configuration loader for statusline
|
|
119
|
+
|
|
120
|
+
Loads configuration from .moai/config/statusline-config.yaml
|
|
121
|
+
Falls back to default values if file not found or parsing fails
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
_instance: Optional["StatuslineConfig"] = None
|
|
125
|
+
_config: Dict[str, Any] = {}
|
|
126
|
+
|
|
127
|
+
def __new__(cls):
|
|
128
|
+
if cls._instance is None:
|
|
129
|
+
cls._instance = super().__new__(cls)
|
|
130
|
+
cls._instance._load_config()
|
|
131
|
+
return cls._instance
|
|
132
|
+
|
|
133
|
+
def _load_config(self) -> None:
|
|
134
|
+
"""Load configuration from YAML file"""
|
|
135
|
+
config_path = self._find_config_file()
|
|
136
|
+
|
|
137
|
+
if config_path and config_path.exists():
|
|
138
|
+
try:
|
|
139
|
+
self._config = self._parse_yaml(config_path)
|
|
140
|
+
logger.debug(f"Loaded statusline config from {config_path}")
|
|
141
|
+
except Exception as e:
|
|
142
|
+
logger.warning(f"Failed to load config from {config_path}: {e}")
|
|
143
|
+
self._config = self._get_default_config()
|
|
144
|
+
else:
|
|
145
|
+
logger.debug("Statusline config file not found, using defaults")
|
|
146
|
+
self._config = self._get_default_config()
|
|
147
|
+
|
|
148
|
+
@staticmethod
|
|
149
|
+
def _find_config_file() -> Optional[Path]:
|
|
150
|
+
"""
|
|
151
|
+
Find statusline config file starting from current directory up to project root
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
Path to config file or None if not found
|
|
155
|
+
"""
|
|
156
|
+
# Try common locations
|
|
157
|
+
locations = [
|
|
158
|
+
Path.cwd() / ".moai" / "config" / "statusline-config.yaml",
|
|
159
|
+
Path.cwd() / ".moai" / "config" / "statusline-config.yml",
|
|
160
|
+
Path.home() / ".moai" / "config" / "statusline-config.yaml",
|
|
161
|
+
]
|
|
162
|
+
|
|
163
|
+
for path in locations:
|
|
164
|
+
if path.exists():
|
|
165
|
+
return path
|
|
166
|
+
|
|
167
|
+
return None
|
|
168
|
+
|
|
169
|
+
@staticmethod
|
|
170
|
+
def _parse_yaml(path: Path) -> Dict[str, Any]:
|
|
171
|
+
"""
|
|
172
|
+
Parse YAML file
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
path: Path to YAML file
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Parsed configuration dictionary
|
|
179
|
+
"""
|
|
180
|
+
try:
|
|
181
|
+
import yaml
|
|
182
|
+
|
|
183
|
+
with open(path, "r", encoding="utf-8") as f:
|
|
184
|
+
data = yaml.safe_load(f)
|
|
185
|
+
return data or {}
|
|
186
|
+
except ImportError:
|
|
187
|
+
logger.debug("PyYAML not available, attempting JSON fallback")
|
|
188
|
+
return StatuslineConfig._parse_json_fallback(path)
|
|
189
|
+
|
|
190
|
+
@staticmethod
|
|
191
|
+
def _parse_json_fallback(path: Path) -> Dict[str, Any]:
|
|
192
|
+
"""
|
|
193
|
+
Parse YAML as JSON fallback (limited support)
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
path: Path to file
|
|
197
|
+
|
|
198
|
+
Returns:
|
|
199
|
+
Parsed configuration dictionary
|
|
200
|
+
"""
|
|
201
|
+
import json
|
|
202
|
+
|
|
203
|
+
try:
|
|
204
|
+
with open(path, "r", encoding="utf-8") as f:
|
|
205
|
+
return json.load(f)
|
|
206
|
+
except Exception as e:
|
|
207
|
+
logger.debug(f"JSON fallback failed: {e}")
|
|
208
|
+
return {}
|
|
209
|
+
|
|
210
|
+
@staticmethod
|
|
211
|
+
def _get_default_config() -> Dict[str, Any]:
|
|
212
|
+
"""
|
|
213
|
+
Get default configuration
|
|
214
|
+
|
|
215
|
+
Returns:
|
|
216
|
+
Default configuration dictionary
|
|
217
|
+
"""
|
|
218
|
+
return {
|
|
219
|
+
"statusline": {
|
|
220
|
+
"enabled": True,
|
|
221
|
+
"mode": "extended",
|
|
222
|
+
"refresh_interval_ms": 300,
|
|
223
|
+
"colors": {
|
|
224
|
+
"enabled": True,
|
|
225
|
+
"theme": "auto",
|
|
226
|
+
"palette": {
|
|
227
|
+
"model": "38;5;33",
|
|
228
|
+
"feature_branch": "38;5;226",
|
|
229
|
+
"develop_branch": "38;5;51",
|
|
230
|
+
"main_branch": "38;5;46",
|
|
231
|
+
"staged": "38;5;46",
|
|
232
|
+
"modified": "38;5;208",
|
|
233
|
+
"untracked": "38;5;196",
|
|
234
|
+
"update_available": "38;5;208",
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
"cache": {
|
|
238
|
+
"git_ttl_seconds": 5,
|
|
239
|
+
"metrics_ttl_seconds": 10,
|
|
240
|
+
"alfred_ttl_seconds": 1,
|
|
241
|
+
"todo_ttl_seconds": 3,
|
|
242
|
+
"memory_ttl_seconds": 5,
|
|
243
|
+
"output_style_ttl_seconds": 60,
|
|
244
|
+
"version_ttl_seconds": 60,
|
|
245
|
+
"update_ttl_seconds": 300,
|
|
246
|
+
},
|
|
247
|
+
"display": {
|
|
248
|
+
"model": True, # 🤖 Model name (glm-4.6, claude-3.5-sonnet, etc.)
|
|
249
|
+
"version": True, # 🗿 MoAI-ADK version (0.23.0, etc.)
|
|
250
|
+
"output_style": True, # ✍️ Output style (Explanatory, Concise, etc.)
|
|
251
|
+
"memory_usage": True, # 💾 Session memory usage
|
|
252
|
+
"todo_count": True, # 📋 Active TODO items count
|
|
253
|
+
"branch": True, # 🔀 Git branch
|
|
254
|
+
"git_status": True, # ✅2 M1 ?10 Git changes status
|
|
255
|
+
"duration": True, # ⏱️ Session elapsed time
|
|
256
|
+
"directory": True, # 📁 Project name/directory
|
|
257
|
+
"active_task": True, # 🎯 Alfred active task
|
|
258
|
+
"update_indicator": True, # 🔄 Update notification
|
|
259
|
+
},
|
|
260
|
+
"error_handling": {
|
|
261
|
+
"graceful_degradation": True,
|
|
262
|
+
"log_level": "warning",
|
|
263
|
+
"fallback_text": "",
|
|
264
|
+
},
|
|
265
|
+
"format": {
|
|
266
|
+
"max_branch_length": 20,
|
|
267
|
+
"truncate_with": "...",
|
|
268
|
+
"separator": " | ",
|
|
269
|
+
"icons": {
|
|
270
|
+
"git": "🔀", # Git branch icon (more intuitive than 📊)
|
|
271
|
+
"staged": "✅", # Staged files
|
|
272
|
+
"modified": "📝", # Modified files
|
|
273
|
+
"untracked": "❓", # Untracked files
|
|
274
|
+
"added": "➕", # Added files
|
|
275
|
+
"deleted": "➖", # Deleted files
|
|
276
|
+
"renamed": "🔄", # Renamed files
|
|
277
|
+
"conflict": "⚠️", # Conflict files
|
|
278
|
+
"model": "🤖", # AI model
|
|
279
|
+
"output_style": "✍️", # Writing style
|
|
280
|
+
"duration": "⏱️", # Time duration
|
|
281
|
+
"memory": "💾", # Memory usage
|
|
282
|
+
"todo": "📋", # TODO items
|
|
283
|
+
"update": "🔄", # Update available
|
|
284
|
+
"project": "📁", # Project directory
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
def get(self, key: str, default: Any = None) -> Any:
|
|
291
|
+
"""
|
|
292
|
+
Get configuration value by dot-notation key
|
|
293
|
+
|
|
294
|
+
Args:
|
|
295
|
+
key: Configuration key (e.g., "statusline.mode", "statusline.cache.git_ttl_seconds")
|
|
296
|
+
default: Default value if key not found
|
|
297
|
+
|
|
298
|
+
Returns:
|
|
299
|
+
Configuration value or default
|
|
300
|
+
"""
|
|
301
|
+
keys = key.split(".")
|
|
302
|
+
value = self._config
|
|
303
|
+
|
|
304
|
+
for k in keys:
|
|
305
|
+
if isinstance(value, dict):
|
|
306
|
+
value = value.get(k)
|
|
307
|
+
if value is None:
|
|
308
|
+
return default
|
|
309
|
+
else:
|
|
310
|
+
return default
|
|
311
|
+
|
|
312
|
+
return value if value is not None else default
|
|
313
|
+
|
|
314
|
+
def get_cache_config(self) -> CacheConfig:
|
|
315
|
+
"""Get cache configuration"""
|
|
316
|
+
cache_data = self.get("statusline.cache", {})
|
|
317
|
+
return CacheConfig(
|
|
318
|
+
git_ttl_seconds=cache_data.get("git_ttl_seconds", 5),
|
|
319
|
+
metrics_ttl_seconds=cache_data.get("metrics_ttl_seconds", 10),
|
|
320
|
+
alfred_ttl_seconds=cache_data.get("alfred_ttl_seconds", 1),
|
|
321
|
+
version_ttl_seconds=cache_data.get("version_ttl_seconds", 60),
|
|
322
|
+
update_ttl_seconds=cache_data.get("update_ttl_seconds", 300),
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
def get_color_config(self) -> ColorConfig:
|
|
326
|
+
"""Get color configuration"""
|
|
327
|
+
color_data = self.get("statusline.colors", {})
|
|
328
|
+
return ColorConfig(
|
|
329
|
+
enabled=color_data.get("enabled", True),
|
|
330
|
+
theme=color_data.get("theme", "auto"),
|
|
331
|
+
palette=color_data.get("palette", {}),
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
def get_display_config(self) -> DisplayConfig:
|
|
335
|
+
"""Get display configuration"""
|
|
336
|
+
display_data = self.get("statusline.display", {})
|
|
337
|
+
return DisplayConfig(
|
|
338
|
+
model=display_data.get("model", True),
|
|
339
|
+
duration=display_data.get("duration", True),
|
|
340
|
+
directory=display_data.get("directory", True),
|
|
341
|
+
version=display_data.get("version", True),
|
|
342
|
+
branch=display_data.get("branch", True),
|
|
343
|
+
git_status=display_data.get("git_status", True),
|
|
344
|
+
active_task=display_data.get("active_task", True),
|
|
345
|
+
update_indicator=display_data.get("update_indicator", True),
|
|
346
|
+
)
|
|
347
|
+
|
|
348
|
+
def get_format_config(self) -> FormatConfig:
|
|
349
|
+
"""Get format configuration"""
|
|
350
|
+
format_data = self.get("statusline.format", {})
|
|
351
|
+
return FormatConfig(
|
|
352
|
+
max_branch_length=format_data.get("max_branch_length", 20),
|
|
353
|
+
truncate_with=format_data.get("truncate_with", "..."),
|
|
354
|
+
separator=format_data.get("separator", " | "),
|
|
355
|
+
)
|
|
356
|
+
|
|
357
|
+
def get_error_handling_config(self) -> ErrorHandlingConfig:
|
|
358
|
+
"""Get error handling configuration"""
|
|
359
|
+
error_data = self.get("statusline.error_handling", {})
|
|
360
|
+
return ErrorHandlingConfig(
|
|
361
|
+
graceful_degradation=error_data.get("graceful_degradation", True),
|
|
362
|
+
log_level=error_data.get("log_level", "warning"),
|
|
363
|
+
fallback_text=error_data.get("fallback_text", ""),
|
|
364
|
+
)
|