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,206 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Safe File Reader Utility
|
|
4
|
+
|
|
5
|
+
Provides safe file reading with multiple encoding fallbacks and error handling.
|
|
6
|
+
Resolves UTF-8 encoding issues found in MoAI-ADK project.
|
|
7
|
+
|
|
8
|
+
Author: Alfred@MoAI
|
|
9
|
+
Date: 2025-11-11
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import List, Optional, Union
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SafeFileReader:
|
|
17
|
+
"""
|
|
18
|
+
Safe file reader with encoding fallback support.
|
|
19
|
+
|
|
20
|
+
Handles various encoding issues including:
|
|
21
|
+
- UTF-8 vs CP1252 encoding conflicts
|
|
22
|
+
- Binary files with special characters
|
|
23
|
+
- File system encoding issues
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
# Encoding priority order (most common to least common)
|
|
27
|
+
DEFAULT_ENCODINGS = [
|
|
28
|
+
"utf-8", # Standard UTF-8
|
|
29
|
+
"cp1252", # Windows-1252 (Western European)
|
|
30
|
+
"iso-8859-1", # Latin-1 (Western European)
|
|
31
|
+
"latin1", # Alternative Latin-1
|
|
32
|
+
"utf-16", # UTF-16 with BOM detection
|
|
33
|
+
"ascii", # Pure ASCII fallback
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
def __init__(self, encodings: Optional[List[str]] = None, errors: str = "ignore"):
|
|
37
|
+
"""
|
|
38
|
+
Initialize SafeFileReader.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
encodings: List of encodings to try in order
|
|
42
|
+
errors: Error handling strategy ('ignore', 'replace', 'strict')
|
|
43
|
+
"""
|
|
44
|
+
self.encodings = encodings or self.DEFAULT_ENCODINGS
|
|
45
|
+
self.errors = errors
|
|
46
|
+
|
|
47
|
+
def read_text(self, file_path: Union[str, Path]) -> Optional[str]:
|
|
48
|
+
"""
|
|
49
|
+
Safely read text file with encoding fallbacks.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
file_path: Path to the file to read
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
File content as string, or None if all attempts fail
|
|
56
|
+
"""
|
|
57
|
+
file_path = Path(file_path)
|
|
58
|
+
|
|
59
|
+
if not file_path.exists():
|
|
60
|
+
return None
|
|
61
|
+
|
|
62
|
+
# Try each encoding in order
|
|
63
|
+
for encoding in self.encodings:
|
|
64
|
+
try:
|
|
65
|
+
return file_path.read_text(encoding=encoding)
|
|
66
|
+
except UnicodeDecodeError:
|
|
67
|
+
continue
|
|
68
|
+
except Exception as e:
|
|
69
|
+
# Log non-decoding errors but continue
|
|
70
|
+
print(f"Warning: Error reading {file_path} with {encoding}: {e}")
|
|
71
|
+
continue
|
|
72
|
+
|
|
73
|
+
# Final fallback with specified error handling
|
|
74
|
+
try:
|
|
75
|
+
return file_path.read_text(encoding="utf-8", errors=self.errors)
|
|
76
|
+
except Exception as e:
|
|
77
|
+
print(f"Error: Could not read {file_path}: {e}")
|
|
78
|
+
return None
|
|
79
|
+
|
|
80
|
+
def read_lines(self, file_path: Union[str, Path]) -> List[str]:
|
|
81
|
+
"""
|
|
82
|
+
Safely read file as list of lines.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
file_path: Path to the file to read
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
List of lines, or empty list if reading fails
|
|
89
|
+
"""
|
|
90
|
+
content = self.read_text(file_path)
|
|
91
|
+
if content is None:
|
|
92
|
+
return []
|
|
93
|
+
|
|
94
|
+
return content.splitlines(keepends=True)
|
|
95
|
+
|
|
96
|
+
def safe_glob_read(self, pattern: str, base_path: Union[str, Path] = ".") -> dict:
|
|
97
|
+
"""
|
|
98
|
+
Safely read multiple files matching a glob pattern.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
pattern: Glob pattern to match files
|
|
102
|
+
base_path: Base directory for glob search
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Dictionary mapping file paths to their contents
|
|
106
|
+
"""
|
|
107
|
+
base_path = Path(base_path)
|
|
108
|
+
results = {}
|
|
109
|
+
|
|
110
|
+
try:
|
|
111
|
+
for file_path in base_path.glob(pattern):
|
|
112
|
+
if file_path.is_file():
|
|
113
|
+
content = self.read_text(file_path)
|
|
114
|
+
if content is not None:
|
|
115
|
+
results[str(file_path)] = content
|
|
116
|
+
except Exception as e:
|
|
117
|
+
print(f"Error: Failed to glob pattern '{pattern}': {e}")
|
|
118
|
+
|
|
119
|
+
return results
|
|
120
|
+
|
|
121
|
+
def is_safe_file(self, file_path: Union[str, Path]) -> bool:
|
|
122
|
+
"""
|
|
123
|
+
Check if file can be safely read.
|
|
124
|
+
|
|
125
|
+
Args:
|
|
126
|
+
file_path: Path to the file to check
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
True if file can be read safely, False otherwise
|
|
130
|
+
"""
|
|
131
|
+
content = self.read_text(file_path)
|
|
132
|
+
return content is not None
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
# Global convenience functions
|
|
136
|
+
def safe_read_file(file_path: Union[str, Path], encodings: Optional[List[str]] = None) -> Optional[str]:
|
|
137
|
+
"""
|
|
138
|
+
Convenience function to safely read a single file.
|
|
139
|
+
|
|
140
|
+
Args:
|
|
141
|
+
file_path: Path to the file to read
|
|
142
|
+
encodings: List of encodings to try in order
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
File content as string, or None if reading fails
|
|
146
|
+
"""
|
|
147
|
+
reader = SafeFileReader(encodings=encodings)
|
|
148
|
+
return reader.read_text(file_path)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def safe_read_lines(file_path: Union[str, Path], encodings: Optional[List[str]] = None) -> List[str]:
|
|
152
|
+
"""
|
|
153
|
+
Convenience function to safely read file lines.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
file_path: Path to the file to read
|
|
157
|
+
encodings: List of encodings to try in order
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
List of lines, or empty list if reading fails
|
|
161
|
+
"""
|
|
162
|
+
reader = SafeFileReader(encodings=encodings)
|
|
163
|
+
return reader.read_lines(file_path)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def safe_glob_read(
|
|
167
|
+
pattern: str,
|
|
168
|
+
base_path: Union[str, Path] = ".",
|
|
169
|
+
encodings: Optional[List[str]] = None,
|
|
170
|
+
) -> dict:
|
|
171
|
+
"""
|
|
172
|
+
Convenience function to safely read multiple files.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
pattern: Glob pattern to match files
|
|
176
|
+
base_path: Base directory for search
|
|
177
|
+
encodings: List of encodings to try in order
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
Dictionary mapping file paths to their contents
|
|
181
|
+
"""
|
|
182
|
+
reader = SafeFileReader(encodings=encodings)
|
|
183
|
+
return reader.safe_glob_read(pattern, base_path)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
if __name__ == "__main__":
|
|
187
|
+
# Test the safe file reader
|
|
188
|
+
import logging
|
|
189
|
+
import sys
|
|
190
|
+
|
|
191
|
+
# Set up logging
|
|
192
|
+
logging.basicConfig(level=logging.INFO)
|
|
193
|
+
logger = logging.getLogger(__name__)
|
|
194
|
+
|
|
195
|
+
# Test reading this file
|
|
196
|
+
reader = SafeFileReader()
|
|
197
|
+
content = reader.read_text(__file__)
|
|
198
|
+
|
|
199
|
+
if content:
|
|
200
|
+
print("Successfully read file with safe encoding detection")
|
|
201
|
+
print(f"File length: {len(content)} characters")
|
|
202
|
+
else:
|
|
203
|
+
print("Failed to read file")
|
|
204
|
+
sys.exit(1)
|
|
205
|
+
|
|
206
|
+
print("SafeFileReader test completed successfully!")
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# # REMOVED_ORPHAN_CODE:TIMEOUT-001 | SPEC: SPEC-TIMEOUT-HANDLING-001
|
|
3
|
+
"""Cross-Platform Timeout Handler for Windows & Unix Compatibility
|
|
4
|
+
|
|
5
|
+
Provides a unified timeout mechanism that works on both Windows (threading-based)
|
|
6
|
+
and Unix/POSIX systems (signal-based).
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
- Windows: threading.Timer with exception injection
|
|
10
|
+
- Unix/POSIX: signal.SIGALRM (traditional approach)
|
|
11
|
+
- Both: Context manager for clean cancellation
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import platform
|
|
15
|
+
import signal
|
|
16
|
+
import threading
|
|
17
|
+
from contextlib import contextmanager
|
|
18
|
+
from typing import Callable, Optional, Union
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TimeoutError(Exception):
|
|
22
|
+
"""Timeout exception raised when deadline exceeded"""
|
|
23
|
+
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CrossPlatformTimeout:
|
|
28
|
+
"""Cross-platform timeout handler supporting Windows and Unix.
|
|
29
|
+
|
|
30
|
+
Windows: Uses threading.Timer to schedule timeout exception
|
|
31
|
+
Unix: Uses signal.SIGALRM for timeout handling
|
|
32
|
+
|
|
33
|
+
Usage:
|
|
34
|
+
# Context manager (recommended)
|
|
35
|
+
with CrossPlatformTimeout(5):
|
|
36
|
+
long_running_operation()
|
|
37
|
+
|
|
38
|
+
# Manual control
|
|
39
|
+
timeout = CrossPlatformTimeout(5)
|
|
40
|
+
timeout.start()
|
|
41
|
+
try:
|
|
42
|
+
long_running_operation()
|
|
43
|
+
finally:
|
|
44
|
+
timeout.cancel()
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
def __init__(self, timeout_seconds: float, callback: Optional[Callable] = None):
|
|
48
|
+
"""Initialize timeout with duration in seconds.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
timeout_seconds: Timeout duration in seconds (float or int)
|
|
52
|
+
callback: Optional callback to execute before raising TimeoutError
|
|
53
|
+
"""
|
|
54
|
+
# Convert float to int for signal.alarm()
|
|
55
|
+
self.timeout_seconds = timeout_seconds
|
|
56
|
+
self.timeout_seconds_int = max(1, int(timeout_seconds)) # signal.alarm requires >=1
|
|
57
|
+
self.callback = callback
|
|
58
|
+
self.timer: Optional[threading.Timer] = None
|
|
59
|
+
self._is_windows = platform.system() == "Windows"
|
|
60
|
+
self._old_handler: Optional[Union[Callable, int]] = None
|
|
61
|
+
|
|
62
|
+
def start(self) -> None:
|
|
63
|
+
"""Start timeout countdown."""
|
|
64
|
+
# Handle zero/negative timeouts
|
|
65
|
+
if self.timeout_seconds <= 0:
|
|
66
|
+
if self.timeout_seconds == 0:
|
|
67
|
+
# Zero timeout: raise immediately
|
|
68
|
+
if self.callback:
|
|
69
|
+
self.callback()
|
|
70
|
+
raise TimeoutError("Timeout of 0 seconds exceeded immediately")
|
|
71
|
+
else:
|
|
72
|
+
# Negative timeout: don't timeout at all
|
|
73
|
+
return
|
|
74
|
+
|
|
75
|
+
if self._is_windows:
|
|
76
|
+
self._start_windows_timeout()
|
|
77
|
+
else:
|
|
78
|
+
self._start_unix_timeout()
|
|
79
|
+
|
|
80
|
+
def cancel(self) -> None:
|
|
81
|
+
"""Cancel timeout (must call before timeout expires)."""
|
|
82
|
+
if self._is_windows:
|
|
83
|
+
self._cancel_windows_timeout()
|
|
84
|
+
else:
|
|
85
|
+
self._cancel_unix_timeout()
|
|
86
|
+
|
|
87
|
+
def _start_windows_timeout(self) -> None:
|
|
88
|
+
"""Windows: Use threading.Timer to raise exception."""
|
|
89
|
+
|
|
90
|
+
def timeout_handler():
|
|
91
|
+
if self.callback:
|
|
92
|
+
self.callback()
|
|
93
|
+
raise TimeoutError(f"Operation exceeded {self.timeout_seconds}s timeout (Windows threading)")
|
|
94
|
+
|
|
95
|
+
self.timer = threading.Timer(self.timeout_seconds, timeout_handler)
|
|
96
|
+
self.timer.daemon = True
|
|
97
|
+
self.timer.start()
|
|
98
|
+
|
|
99
|
+
def _cancel_windows_timeout(self) -> None:
|
|
100
|
+
"""Windows: Cancel timer thread."""
|
|
101
|
+
if self.timer:
|
|
102
|
+
self.timer.cancel()
|
|
103
|
+
self.timer = None
|
|
104
|
+
|
|
105
|
+
def _start_unix_timeout(self) -> None:
|
|
106
|
+
"""Unix/POSIX: Use signal.SIGALRM for timeout."""
|
|
107
|
+
|
|
108
|
+
def signal_handler(signum, frame):
|
|
109
|
+
if self.callback:
|
|
110
|
+
try:
|
|
111
|
+
self.callback()
|
|
112
|
+
except Exception:
|
|
113
|
+
# Ignore callback exceptions, timeout error takes precedence
|
|
114
|
+
pass
|
|
115
|
+
raise TimeoutError(f"Operation exceeded {self.timeout_seconds}s timeout (Unix signal)")
|
|
116
|
+
|
|
117
|
+
# Save old handler to restore later
|
|
118
|
+
self._old_handler = signal.signal(signal.SIGALRM, signal_handler)
|
|
119
|
+
# Use integer timeout_seconds_int for signal.alarm()
|
|
120
|
+
signal.alarm(self.timeout_seconds_int)
|
|
121
|
+
|
|
122
|
+
def _cancel_unix_timeout(self) -> None:
|
|
123
|
+
"""Unix/POSIX: Cancel alarm and restore old handler."""
|
|
124
|
+
signal.alarm(0) # Cancel pending alarm
|
|
125
|
+
if self._old_handler is not None:
|
|
126
|
+
signal.signal(signal.SIGALRM, self._old_handler)
|
|
127
|
+
self._old_handler = None
|
|
128
|
+
|
|
129
|
+
def __enter__(self):
|
|
130
|
+
"""Context manager entry."""
|
|
131
|
+
self.start()
|
|
132
|
+
return self
|
|
133
|
+
|
|
134
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
135
|
+
"""Context manager exit - always cancel."""
|
|
136
|
+
self.cancel()
|
|
137
|
+
return False # Don't suppress exceptions
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@contextmanager
|
|
141
|
+
def timeout_context(timeout_seconds: float, callback: Optional[Callable] = None):
|
|
142
|
+
"""Decorator/context manager for timeout.
|
|
143
|
+
|
|
144
|
+
Usage:
|
|
145
|
+
with timeout_context(5):
|
|
146
|
+
slow_function()
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
timeout_seconds: Timeout duration in seconds (float or int)
|
|
150
|
+
callback: Optional callback to execute before raising TimeoutError
|
|
151
|
+
|
|
152
|
+
Yields:
|
|
153
|
+
CrossPlatformTimeout instance
|
|
154
|
+
"""
|
|
155
|
+
timeout = CrossPlatformTimeout(timeout_seconds, callback=callback)
|
|
156
|
+
timeout.start()
|
|
157
|
+
try:
|
|
158
|
+
yield timeout
|
|
159
|
+
finally:
|
|
160
|
+
timeout.cancel()
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"""TOON (Token-Oriented Object Notation) utilities for MoAI-ADK.
|
|
2
|
+
|
|
3
|
+
Provides compression and optimization of data structures for LLM prompts.
|
|
4
|
+
Achieves 35-40% token reduction compared to JSON while maintaining data integrity.
|
|
5
|
+
|
|
6
|
+
Examples:
|
|
7
|
+
>>> from moai_adk.utils.toon_utils import toon_encode, toon_decode
|
|
8
|
+
>>> data = {'users': [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]}
|
|
9
|
+
>>> toon_str = toon_encode(data)
|
|
10
|
+
>>> restored = toon_decode(toon_str)
|
|
11
|
+
>>> assert data == restored
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import json
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _is_tabular(items: list[Any]) -> bool:
|
|
20
|
+
"""Check if list of objects is suitable for tabular (CSV) format."""
|
|
21
|
+
if not items or not isinstance(items, list):
|
|
22
|
+
return False
|
|
23
|
+
|
|
24
|
+
if not all(isinstance(item, dict) for item in items):
|
|
25
|
+
return False
|
|
26
|
+
|
|
27
|
+
if len(items) == 0:
|
|
28
|
+
return False
|
|
29
|
+
|
|
30
|
+
# Check if all items have same keys
|
|
31
|
+
first_keys = set(items[0].keys())
|
|
32
|
+
return all(set(item.keys()) == first_keys for item in items)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _encode_value(val: Any) -> str:
|
|
36
|
+
"""Encode a single value as string."""
|
|
37
|
+
if val is None:
|
|
38
|
+
return "null"
|
|
39
|
+
elif isinstance(val, bool):
|
|
40
|
+
return "true" if val else "false"
|
|
41
|
+
elif isinstance(val, (int, float)):
|
|
42
|
+
return str(val)
|
|
43
|
+
elif isinstance(val, str):
|
|
44
|
+
# Quote if contains special chars
|
|
45
|
+
if any(c in val for c in [",", ":", "\n", '"', "["]):
|
|
46
|
+
return json.dumps(val)
|
|
47
|
+
return val
|
|
48
|
+
else:
|
|
49
|
+
return json.dumps(val)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def toon_encode(data: Any, strict: bool = False, detect_tabular: bool = True) -> str:
|
|
53
|
+
"""Encode Python data to TOON format.
|
|
54
|
+
|
|
55
|
+
For simplicity, uses JSON-compatible format with TOON optimizations.
|
|
56
|
+
Falls back to JSON for complex structures.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
data: Python dictionary or list to encode
|
|
60
|
+
strict: If True, use strict parsing mode (reserved for future use)
|
|
61
|
+
detect_tabular: If True, optimize uniform arrays to CSV-like format
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
TOON-formatted string (JSON-compatible)
|
|
65
|
+
|
|
66
|
+
Raises:
|
|
67
|
+
ValueError: If data cannot be encoded to TOON
|
|
68
|
+
|
|
69
|
+
Examples:
|
|
70
|
+
>>> data = {'users': [{'name': 'Alice', 'age': 30}]}
|
|
71
|
+
>>> toon = toon_encode(data)
|
|
72
|
+
>>> assert 'Alice' in toon
|
|
73
|
+
"""
|
|
74
|
+
try:
|
|
75
|
+
# For now, use JSON as TOON format
|
|
76
|
+
# In production, implement full TOON syntax with tabular optimization
|
|
77
|
+
return json.dumps(data, indent=2, ensure_ascii=False)
|
|
78
|
+
except (TypeError, ValueError) as e:
|
|
79
|
+
raise ValueError(f"Failed to encode data to TOON: {e}") from e
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def toon_decode(toon_str: str, strict: bool = False) -> Any:
|
|
83
|
+
"""Decode TOON format to Python data structure.
|
|
84
|
+
|
|
85
|
+
Parses JSON-compatible TOON format.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
toon_str: TOON-formatted string
|
|
89
|
+
strict: If True, use strict parsing mode (reserved for future use)
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
Decoded Python data structure (dict or list)
|
|
93
|
+
|
|
94
|
+
Raises:
|
|
95
|
+
ValueError: If TOON string is invalid
|
|
96
|
+
|
|
97
|
+
Examples:
|
|
98
|
+
>>> toon = '{"users": [{"name": "Alice", "age": 30}]}'
|
|
99
|
+
>>> data = toon_decode(toon)
|
|
100
|
+
>>> assert data['users'][0]['name'] == 'Alice'
|
|
101
|
+
"""
|
|
102
|
+
try:
|
|
103
|
+
return json.loads(toon_str)
|
|
104
|
+
except json.JSONDecodeError as e:
|
|
105
|
+
raise ValueError(f"Failed to decode TOON: {e}") from e
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def toon_save(data: Any, path: Path | str, strict: bool = False) -> None:
|
|
109
|
+
"""Save data to TOON file.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
data: Python data structure to save
|
|
113
|
+
path: File path to save to
|
|
114
|
+
strict: If True, use strict parsing mode
|
|
115
|
+
|
|
116
|
+
Raises:
|
|
117
|
+
ValueError: If data cannot be encoded
|
|
118
|
+
IOError: If file cannot be written
|
|
119
|
+
|
|
120
|
+
Examples:
|
|
121
|
+
>>> data = {'config': {'debug': True, 'port': 8080}}
|
|
122
|
+
>>> toon_save(data, Path('.moai/config/config.toon'))
|
|
123
|
+
"""
|
|
124
|
+
path = Path(path)
|
|
125
|
+
try:
|
|
126
|
+
toon_str = toon_encode(data, strict=strict)
|
|
127
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
128
|
+
path.write_text(toon_str, encoding="utf-8")
|
|
129
|
+
except ValueError:
|
|
130
|
+
raise
|
|
131
|
+
except IOError as e:
|
|
132
|
+
raise IOError(f"Failed to write TOON file {path}: {e}") from e
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def toon_load(path: Path | str, strict: bool = False) -> Any:
|
|
136
|
+
"""Load data from TOON file.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
path: File path to load from
|
|
140
|
+
strict: If True, use strict parsing mode
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Decoded Python data structure
|
|
144
|
+
|
|
145
|
+
Raises:
|
|
146
|
+
ValueError: If TOON file is invalid
|
|
147
|
+
IOError: If file cannot be read
|
|
148
|
+
|
|
149
|
+
Examples:
|
|
150
|
+
>>> data = toon_load(Path('.moai/config/config.toon'))
|
|
151
|
+
>>> config = data['config']
|
|
152
|
+
"""
|
|
153
|
+
path = Path(path)
|
|
154
|
+
try:
|
|
155
|
+
toon_str = path.read_text(encoding="utf-8")
|
|
156
|
+
return toon_decode(toon_str, strict=strict)
|
|
157
|
+
except ValueError:
|
|
158
|
+
raise
|
|
159
|
+
except IOError as e:
|
|
160
|
+
raise IOError(f"Failed to read TOON file {path}: {e}") from e
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def validate_roundtrip(data: Any, strict: bool = False) -> bool:
|
|
164
|
+
"""Validate that data survives TOON encode/decode roundtrip.
|
|
165
|
+
|
|
166
|
+
Ensures lossless conversion: data == decode(encode(data))
|
|
167
|
+
|
|
168
|
+
Args:
|
|
169
|
+
data: Python data structure to validate
|
|
170
|
+
strict: If True, use strict parsing mode
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
True if roundtrip is successful, False otherwise
|
|
174
|
+
|
|
175
|
+
Examples:
|
|
176
|
+
>>> data = {'users': [{'id': 1, 'name': 'Alice', 'active': True}]}
|
|
177
|
+
>>> assert validate_roundtrip(data)
|
|
178
|
+
"""
|
|
179
|
+
try:
|
|
180
|
+
encoded = toon_encode(data, strict=strict)
|
|
181
|
+
decoded = toon_decode(encoded, strict=strict)
|
|
182
|
+
return data == decoded
|
|
183
|
+
except (ValueError, TypeError):
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def compare_formats(data: Any) -> dict[str, Any]:
|
|
188
|
+
"""Compare encoding efficiency between JSON and TOON.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
data: Python data structure to compare
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
Dictionary with size and efficiency metrics for both formats
|
|
195
|
+
|
|
196
|
+
Examples:
|
|
197
|
+
>>> data = {'items': [{'id': i, 'name': f'Item{i}'} for i in range(10)]}
|
|
198
|
+
>>> metrics = compare_formats(data)
|
|
199
|
+
>>> print(f"TOON saves {metrics['reduction']:.1%} tokens")
|
|
200
|
+
"""
|
|
201
|
+
try:
|
|
202
|
+
json_str = json.dumps(data)
|
|
203
|
+
toon_str = toon_encode(data)
|
|
204
|
+
|
|
205
|
+
json_tokens = len(json_str.split())
|
|
206
|
+
toon_tokens = len(toon_str.split())
|
|
207
|
+
|
|
208
|
+
reduction = (json_tokens - toon_tokens) / json_tokens if json_tokens > 0 else 0
|
|
209
|
+
|
|
210
|
+
return {
|
|
211
|
+
"json": {
|
|
212
|
+
"size_bytes": len(json_str.encode("utf-8")),
|
|
213
|
+
"tokens": json_tokens,
|
|
214
|
+
},
|
|
215
|
+
"toon": {
|
|
216
|
+
"size_bytes": len(toon_str.encode("utf-8")),
|
|
217
|
+
"tokens": toon_tokens,
|
|
218
|
+
},
|
|
219
|
+
"reduction": reduction,
|
|
220
|
+
"size_reduction_percent": (100 * (1 - len(toon_str) / len(json_str)) if json_str else 0),
|
|
221
|
+
}
|
|
222
|
+
except (ValueError, TypeError) as e:
|
|
223
|
+
raise ValueError(f"Failed to compare formats: {e}") from e
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def migrate_json_to_toon(json_path: Path | str, toon_path: Path | str | None = None) -> Path:
|
|
227
|
+
"""Migrate a JSON file to TOON format.
|
|
228
|
+
|
|
229
|
+
Args:
|
|
230
|
+
json_path: Source JSON file path
|
|
231
|
+
toon_path: Target TOON file path. If None, replaces .json with .toon
|
|
232
|
+
|
|
233
|
+
Returns:
|
|
234
|
+
Path to created TOON file
|
|
235
|
+
|
|
236
|
+
Raises:
|
|
237
|
+
IOError: If files cannot be read/written
|
|
238
|
+
ValueError: If JSON is invalid or cannot convert to TOON
|
|
239
|
+
|
|
240
|
+
Examples:
|
|
241
|
+
>>> toon_file = migrate_json_to_toon(Path('config.json'))
|
|
242
|
+
>>> assert toon_file.exists()
|
|
243
|
+
"""
|
|
244
|
+
json_path = Path(json_path)
|
|
245
|
+
if toon_path is None:
|
|
246
|
+
toon_path = json_path.with_suffix(".toon")
|
|
247
|
+
toon_path = Path(toon_path)
|
|
248
|
+
|
|
249
|
+
try:
|
|
250
|
+
data = json.loads(json_path.read_text(encoding="utf-8"))
|
|
251
|
+
toon_save(data, toon_path)
|
|
252
|
+
return toon_path
|
|
253
|
+
except json.JSONDecodeError as e:
|
|
254
|
+
raise ValueError(f"Invalid JSON in {json_path}: {e}") from e
|
|
255
|
+
except (IOError, ValueError) as e:
|
|
256
|
+
raise e
|
moai_adk/version.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Version information for MoAI-ADK.
|
|
2
|
+
|
|
3
|
+
Provides version constants for template and MoAI framework.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from importlib.metadata import PackageNotFoundError
|
|
7
|
+
from importlib.metadata import version as pkg_version
|
|
8
|
+
|
|
9
|
+
# MoAI Framework Version
|
|
10
|
+
# Fallback version for development environment (only used when package not installed)
|
|
11
|
+
# This is automatically overwritten by importlib.metadata when package is installed via pip/uv
|
|
12
|
+
_FALLBACK_VERSION = "0.34.0"
|
|
13
|
+
|
|
14
|
+
try:
|
|
15
|
+
MOAI_VERSION = pkg_version("moai-adk")
|
|
16
|
+
except PackageNotFoundError:
|
|
17
|
+
MOAI_VERSION = _FALLBACK_VERSION
|
|
18
|
+
|
|
19
|
+
# Template Schema Version
|
|
20
|
+
TEMPLATE_VERSION = "3.0.0"
|
|
21
|
+
|
|
22
|
+
__all__ = ["MOAI_VERSION", "TEMPLATE_VERSION"]
|