moai-adk 0.15.1__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.

Files changed (417) hide show
  1. moai_adk/__init__.py +1 -2
  2. moai_adk/__main__.py +85 -2
  3. moai_adk/cli/__init__.py +0 -1
  4. moai_adk/cli/commands/__init__.py +0 -1
  5. moai_adk/cli/commands/analyze.py +127 -0
  6. moai_adk/cli/commands/backup.py +5 -3
  7. moai_adk/cli/commands/doctor.py +35 -11
  8. moai_adk/cli/commands/improve_user_experience.py +348 -0
  9. moai_adk/cli/commands/init.py +150 -23
  10. moai_adk/cli/commands/language.py +269 -0
  11. moai_adk/cli/commands/migrate.py +158 -0
  12. moai_adk/cli/commands/status.py +13 -12
  13. moai_adk/cli/commands/update.py +364 -60
  14. moai_adk/cli/commands/validate_links.py +118 -0
  15. moai_adk/cli/main.py +3 -2
  16. moai_adk/cli/prompts/init_prompts.py +79 -82
  17. moai_adk/core/__init__.py +0 -1
  18. moai_adk/core/analysis/__init__.py +9 -0
  19. moai_adk/core/analysis/session_analyzer.py +439 -0
  20. moai_adk/core/claude_integration.py +421 -0
  21. moai_adk/core/command_helpers.py +270 -0
  22. moai_adk/core/config/__init__.py +6 -0
  23. moai_adk/core/config/auto_spec_config.py +346 -0
  24. moai_adk/core/config/migration.py +133 -12
  25. moai_adk/core/context_manager.py +279 -0
  26. moai_adk/core/diagnostics/slash_commands.py +0 -1
  27. moai_adk/core/error_recovery_system.py +1289 -0
  28. moai_adk/core/git/__init__.py +0 -1
  29. moai_adk/core/git/branch.py +0 -1
  30. moai_adk/core/git/branch_manager.py +4 -4
  31. moai_adk/core/git/checkpoint.py +1 -5
  32. moai_adk/core/git/commit.py +0 -1
  33. moai_adk/core/git/event_detector.py +3 -5
  34. moai_adk/core/git/manager.py +0 -1
  35. moai_adk/core/hooks/post_tool_auto_spec_completion.py +925 -0
  36. moai_adk/core/integration/__init__.py +22 -0
  37. moai_adk/core/integration/engine.py +169 -0
  38. moai_adk/core/integration/integration_tester.py +225 -0
  39. moai_adk/core/integration/models.py +88 -0
  40. moai_adk/core/integration/utils.py +211 -0
  41. moai_adk/core/issue_creator.py +28 -18
  42. moai_adk/core/language_config.py +202 -0
  43. moai_adk/core/language_validator.py +556 -0
  44. moai_adk/core/mcp/setup.py +113 -0
  45. moai_adk/core/migration/__init__.py +18 -0
  46. moai_adk/core/migration/backup_manager.py +208 -0
  47. moai_adk/core/migration/file_migrator.py +218 -0
  48. moai_adk/core/migration/version_detector.py +143 -0
  49. moai_adk/core/migration/version_migrator.py +228 -0
  50. moai_adk/core/performance/__init__.py +6 -0
  51. moai_adk/core/performance/cache_system.py +318 -0
  52. moai_adk/core/performance/parallel_processor.py +116 -0
  53. moai_adk/core/project/__init__.py +0 -1
  54. moai_adk/core/project/backup_utils.py +2 -7
  55. moai_adk/core/project/checker.py +3 -3
  56. moai_adk/core/project/detector.py +20 -40
  57. moai_adk/core/project/initializer.py +42 -17
  58. moai_adk/core/project/phase_executor.py +415 -58
  59. moai_adk/core/project/validator.py +6 -25
  60. moai_adk/core/quality/__init__.py +1 -1
  61. moai_adk/core/quality/trust_checker.py +64 -110
  62. moai_adk/core/quality/validators/__init__.py +1 -1
  63. moai_adk/core/quality/validators/base_validator.py +1 -1
  64. moai_adk/core/rollback_manager.py +993 -0
  65. moai_adk/core/session_manager.py +667 -0
  66. moai_adk/core/spec/confidence_scoring.py +749 -0
  67. moai_adk/core/spec/ears_template_engine.py +1182 -0
  68. moai_adk/core/spec/quality_validator.py +721 -0
  69. moai_adk/core/spec_status_manager.py +488 -0
  70. moai_adk/core/template/__init__.py +0 -1
  71. moai_adk/core/template/backup.py +41 -1
  72. moai_adk/core/template/config.py +11 -12
  73. moai_adk/core/template/languages.py +0 -1
  74. moai_adk/core/template/merger.py +79 -22
  75. moai_adk/core/template/processor.py +614 -40
  76. moai_adk/core/template_engine.py +36 -27
  77. moai_adk/foundation/git/commit_templates.py +565 -0
  78. moai_adk/foundation/trust/trust_principles.py +725 -0
  79. moai_adk/foundation/trust/validation_checklist.py +1678 -0
  80. moai_adk/statusline/__init__.py +38 -0
  81. moai_adk/statusline/alfred_detector.py +107 -0
  82. moai_adk/statusline/config.py +364 -0
  83. moai_adk/statusline/enhanced_output_style_detector.py +364 -0
  84. moai_adk/statusline/git_collector.py +190 -0
  85. moai_adk/statusline/main.py +228 -0
  86. moai_adk/statusline/metrics_tracker.py +78 -0
  87. moai_adk/statusline/renderer.py +327 -0
  88. moai_adk/statusline/update_checker.py +135 -0
  89. moai_adk/statusline/version_reader.py +647 -0
  90. moai_adk/templates/.git-hooks/pre-commit +66 -0
  91. moai_adk/templates/.git-hooks/pre-push +116 -4
  92. moai_adk/templates/.github/workflows/moai-gitflow.yml +1 -7
  93. moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
  94. moai_adk/templates/.gitignore +44 -0
  95. moai_adk/templates/.mcp.json +22 -0
  96. moai_adk/templates/CLAUDE.md +450 -1071
  97. moai_adk/utils/__init__.py +0 -1
  98. moai_adk/utils/banner.py +0 -1
  99. moai_adk/utils/common.py +308 -0
  100. moai_adk/utils/link_validator.py +249 -0
  101. moai_adk/utils/logger.py +4 -9
  102. moai_adk/utils/safe_file_reader.py +210 -0
  103. moai_adk/utils/user_experience.py +531 -0
  104. moai_adk-0.25.4.dist-info/METADATA +2279 -0
  105. moai_adk-0.25.4.dist-info/RECORD +112 -0
  106. moai_adk/core/tags/__init__.py +0 -86
  107. moai_adk/core/tags/ci_validator.py +0 -463
  108. moai_adk/core/tags/cli.py +0 -283
  109. moai_adk/core/tags/generator.py +0 -109
  110. moai_adk/core/tags/inserter.py +0 -99
  111. moai_adk/core/tags/mapper.py +0 -126
  112. moai_adk/core/tags/parser.py +0 -76
  113. moai_adk/core/tags/pre_commit_validator.py +0 -393
  114. moai_adk/core/tags/reporter.py +0 -956
  115. moai_adk/core/tags/tags.py +0 -149
  116. moai_adk/core/tags/validator.py +0 -897
  117. moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
  118. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
  119. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
  120. moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
  121. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
  122. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
  123. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
  124. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
  125. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
  126. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
  127. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
  128. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -426
  129. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
  130. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
  131. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
  132. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
  133. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1854
  134. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -880
  135. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -793
  136. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1084
  137. moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
  138. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
  139. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +0 -136
  140. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
  141. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
  142. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
  143. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
  144. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
  145. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
  146. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
  147. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
  148. moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +0 -271
  149. moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
  150. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +0 -749
  151. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
  152. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
  153. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
  154. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
  155. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
  156. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
  157. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
  158. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
  159. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
  160. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +0 -161
  161. moai_adk/templates/.claude/settings.json +0 -144
  162. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
  163. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
  164. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
  165. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
  166. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
  167. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
  168. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
  169. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
  170. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
  171. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
  172. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
  173. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
  174. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  175. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  176. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  177. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
  178. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
  179. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
  180. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  181. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  182. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  183. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
  184. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
  185. moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
  186. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  187. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  188. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  189. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
  190. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
  191. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
  192. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  193. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  194. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  195. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
  196. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
  197. moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
  198. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
  199. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
  200. moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
  201. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
  202. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
  203. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
  204. moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
  205. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
  206. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
  207. moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
  208. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
  209. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
  210. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
  211. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
  212. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
  213. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
  214. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
  215. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
  216. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
  217. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
  218. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
  219. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  220. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  221. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  222. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  223. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  224. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  225. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
  226. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
  227. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
  228. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  229. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  230. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  231. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +0 -288
  232. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  233. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  234. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  235. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  236. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  237. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  238. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  239. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  240. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  241. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  242. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  243. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  244. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  245. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  246. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  247. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  248. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
  249. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
  250. moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
  251. moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
  252. moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
  253. moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  254. moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
  255. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  256. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  257. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  258. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  259. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
  260. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  261. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
  262. moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
  263. moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
  264. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
  265. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
  266. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  267. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
  268. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
  269. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
  270. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  271. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  272. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
  273. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
  274. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
  275. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +0 -290
  276. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
  277. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
  278. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  279. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  280. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  281. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  282. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  283. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  284. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +0 -123
  285. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
  286. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
  287. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  288. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  289. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  290. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +0 -128
  291. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
  292. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
  293. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  294. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  295. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  296. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  297. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  298. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  299. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  300. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  301. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  302. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  303. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  304. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  305. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  306. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  307. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  308. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  309. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  310. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  311. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  312. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  313. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  314. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  315. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  316. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  317. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
  318. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  319. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  320. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  321. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  322. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  323. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  324. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  325. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  326. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  327. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  328. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  329. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  330. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  331. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  332. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  333. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  334. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  335. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  336. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  337. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  338. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
  339. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  340. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  341. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
  342. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  343. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  344. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  345. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  346. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  347. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
  348. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
  349. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
  350. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
  351. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
  352. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
  353. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  354. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  355. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  356. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
  357. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
  358. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
  359. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
  360. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  361. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  362. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
  363. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
  364. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
  365. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
  366. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  367. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  368. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
  369. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  370. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  371. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
  372. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
  373. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
  374. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
  375. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
  376. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
  377. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  378. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  379. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  380. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  381. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  382. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  383. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
  384. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
  385. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
  386. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
  387. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
  388. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
  389. moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
  390. moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
  391. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
  392. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
  393. moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
  394. moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
  395. moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
  396. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
  397. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
  398. moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
  399. moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
  400. moai_adk/templates/.github/workflows/release.yml +0 -118
  401. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
  402. moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
  403. moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
  404. moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
  405. moai_adk/templates/.github/workflows/tag-report.yml +0 -269
  406. moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
  407. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
  408. moai_adk/templates/.moai/config.json +0 -115
  409. moai_adk/templates/workflows/go-tag-validation.yml +0 -30
  410. moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
  411. moai_adk/templates/workflows/python-tag-validation.yml +0 -42
  412. moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
  413. moai_adk-0.15.1.dist-info/METADATA +0 -3094
  414. moai_adk-0.15.1.dist-info/RECORD +0 -365
  415. {moai_adk-0.15.1.dist-info → moai_adk-0.25.4.dist-info}/WHEEL +0 -0
  416. {moai_adk-0.15.1.dist-info → moai_adk-0.25.4.dist-info}/entry_points.txt +0 -0
  417. {moai_adk-0.15.1.dist-info → moai_adk-0.25.4.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,211 @@
1
+ """
2
+ Integration testing utilities and helper functions.
3
+
4
+ This module contains utility functions for component discovery,
5
+ dependency resolution, and test result analysis.
6
+ """
7
+
8
+ import shutil
9
+ import tempfile
10
+ from pathlib import Path
11
+ from typing import Any, Dict, List, Optional
12
+
13
+ from .models import IntegrationTestResult, TestComponent
14
+
15
+
16
+ class ComponentDiscovery:
17
+ """
18
+ Component discovery utilities for integration testing.
19
+ """
20
+
21
+ @staticmethod
22
+ def discover_components(base_path: str) -> List[TestComponent]:
23
+ """
24
+ Discover testable components in the given path.
25
+
26
+ Args:
27
+ base_path: Base path to search for components
28
+
29
+ Returns:
30
+ List of discovered components
31
+ """
32
+ components = []
33
+ base_dir = Path(base_path)
34
+
35
+ if not base_dir.exists():
36
+ return components
37
+
38
+ # Look for Python modules
39
+ for py_file in base_dir.rglob("*.py"):
40
+ if py_file.name.startswith("__"):
41
+ continue
42
+
43
+ relative_path = py_file.relative_to(base_dir)
44
+ module_name = str(relative_path.with_suffix("")).replace("/", ".")
45
+
46
+ component = TestComponent(
47
+ name=module_name,
48
+ component_type="python_module",
49
+ version="1.0.0", # Default version
50
+ )
51
+ components.append(component)
52
+
53
+ return components
54
+
55
+ @staticmethod
56
+ def resolve_dependencies(components: List[TestComponent]) -> Dict[str, List[str]]:
57
+ """
58
+ Resolve dependencies between components.
59
+
60
+ Args:
61
+ components: List of components to analyze
62
+
63
+ Returns:
64
+ Dictionary mapping component names to their dependencies
65
+ """
66
+ dependency_map = {}
67
+
68
+ for component in components:
69
+ try:
70
+ # Try to import and analyze dependencies
71
+ dependencies = ComponentDiscovery._analyze_imports(component)
72
+ dependency_map[component.name] = dependencies
73
+ except Exception:
74
+ dependency_map[component.name] = component.dependencies
75
+
76
+ return dependency_map
77
+
78
+ @staticmethod
79
+ def _analyze_imports(component: TestComponent) -> List[str]:
80
+ """
81
+ Analyze imports for a component to determine dependencies.
82
+
83
+ Args:
84
+ component: Component to analyze
85
+
86
+ Returns:
87
+ List of dependency names
88
+ """
89
+ # This is a simplified implementation
90
+ # In a real scenario, you would parse the source code
91
+ return component.dependencies
92
+
93
+
94
+ class TestResultAnalyzer:
95
+ """
96
+ Test result analysis utilities.
97
+ """
98
+
99
+ @staticmethod
100
+ def calculate_success_rate(results: List[IntegrationTestResult]) -> float:
101
+ """
102
+ Calculate the success rate of test results.
103
+
104
+ Args:
105
+ results: List of test results
106
+
107
+ Returns:
108
+ Success rate as percentage (0-100)
109
+ """
110
+ if not results:
111
+ return 0.0
112
+
113
+ passed = sum(1 for result in results if result.passed)
114
+ return (passed / len(results)) * 100
115
+
116
+ @staticmethod
117
+ def get_failed_tests(
118
+ results: List[IntegrationTestResult],
119
+ ) -> List[IntegrationTestResult]:
120
+ """
121
+ Get list of failed tests.
122
+
123
+ Args:
124
+ results: List of test results
125
+
126
+ Returns:
127
+ List of failed test results
128
+ """
129
+ return [result for result in results if not result.passed]
130
+
131
+ @staticmethod
132
+ def get_execution_stats(results: List[IntegrationTestResult]) -> Dict[str, Any]:
133
+ """
134
+ Get execution statistics for test results.
135
+
136
+ Args:
137
+ results: List of test results
138
+
139
+ Returns:
140
+ Dictionary with execution statistics
141
+ """
142
+ if not results:
143
+ return {
144
+ "total": 0,
145
+ "passed": 0,
146
+ "failed": 0,
147
+ "success_rate": 0.0,
148
+ "total_time": 0.0,
149
+ "avg_time": 0.0,
150
+ }
151
+
152
+ passed = sum(1 for result in results if result.passed)
153
+ failed = len(results) - passed
154
+ total_time = sum(result.execution_time for result in results)
155
+
156
+ return {
157
+ "total": len(results),
158
+ "passed": passed,
159
+ "failed": failed,
160
+ "success_rate": TestResultAnalyzer.calculate_success_rate(results),
161
+ "total_time": total_time,
162
+ "avg_time": total_time / len(results),
163
+ }
164
+
165
+
166
+ class TestEnvironment:
167
+ """
168
+ Test environment management utilities.
169
+ """
170
+
171
+ def __init__(self, temp_dir: Optional[str] = None):
172
+ """
173
+ Initialize test environment.
174
+
175
+ Args:
176
+ temp_dir: Optional temporary directory path
177
+ """
178
+ self.temp_dir = temp_dir
179
+ self.created_temp = False
180
+
181
+ if self.temp_dir is None:
182
+ self.temp_dir = tempfile.mkdtemp(prefix="moai_integration_test_")
183
+ self.created_temp = True
184
+
185
+ def cleanup(self):
186
+ """Clean up test environment."""
187
+ if self.created_temp and self.temp_dir:
188
+ try:
189
+ shutil.rmtree(self.temp_dir)
190
+ except Exception:
191
+ pass # Ignore cleanup errors
192
+
193
+ def get_temp_path(self, name: str) -> str:
194
+ """
195
+ Get a temporary file path.
196
+
197
+ Args:
198
+ name: File name
199
+
200
+ Returns:
201
+ Full path to temporary file
202
+ """
203
+ return str(Path(self.temp_dir) / name)
204
+
205
+ def __enter__(self):
206
+ """Context manager entry."""
207
+ return self
208
+
209
+ def __exit__(self, exc_type, exc_val, exc_tb):
210
+ """Context manager exit."""
211
+ self.cleanup()
@@ -4,8 +4,6 @@ GitHub Issue Creator for MoAI-ADK quick issue reporting.
4
4
  Enables users to quickly create GitHub Issues with standardized templates
5
5
  using `/alfred:9-feedback` interactive dialog.
6
6
 
7
- @TAG:ISSUE-CREATOR-001 - GitHub issue creation system
8
- @TAG:QUICK-REPORTING-001 - Quick issue reporting functionality
9
7
  """
10
8
 
11
9
  import subprocess
@@ -16,6 +14,7 @@ from typing import Any, Dict, List, Optional
16
14
 
17
15
  class IssueType(Enum):
18
16
  """Supported GitHub issue types."""
17
+
19
18
  BUG = "bug"
20
19
  FEATURE = "feature"
21
20
  IMPROVEMENT = "improvement"
@@ -24,6 +23,7 @@ class IssueType(Enum):
24
23
 
25
24
  class IssuePriority(Enum):
26
25
  """Issue priority levels."""
26
+
27
27
  CRITICAL = "critical"
28
28
  HIGH = "high"
29
29
  MEDIUM = "medium"
@@ -33,6 +33,7 @@ class IssuePriority(Enum):
33
33
  @dataclass
34
34
  class IssueConfig:
35
35
  """Configuration for issue creation."""
36
+
36
37
  issue_type: IssueType
37
38
  title: str
38
39
  description: str
@@ -59,7 +60,10 @@ class GitHubIssueCreator:
59
60
  IssueType.BUG: ["bug", "reported"],
60
61
  IssueType.FEATURE: ["feature-request", "enhancement"],
61
62
  IssueType.IMPROVEMENT: ["improvement", "enhancement"],
62
- IssueType.QUESTION: ["question", "help wanted"], # Fixed: "help-wanted" → "help wanted" (GitHub standard)
63
+ IssueType.QUESTION: [
64
+ "question",
65
+ "help wanted",
66
+ ], # Fixed: "help-wanted" → "help wanted" (GitHub standard)
63
67
  }
64
68
 
65
69
  # Priority emoji
@@ -97,10 +101,7 @@ class GitHubIssueCreator:
97
101
  """
98
102
  try:
99
103
  result = subprocess.run(
100
- ["gh", "auth", "status"],
101
- capture_output=True,
102
- text=True,
103
- timeout=5
104
+ ["gh", "auth", "status"], capture_output=True, text=True, timeout=5
104
105
  )
105
106
  if result.returncode != 0:
106
107
  raise RuntimeError(
@@ -145,7 +146,9 @@ class GitHubIssueCreator:
145
146
  # Collect labels
146
147
  labels = self.LABEL_MAP.get(config.issue_type, []).copy()
147
148
  if config.priority:
148
- labels.append(config.priority.value) # Fixed: removed "priority-" prefix (use direct label names)
149
+ labels.append(
150
+ config.priority.value
151
+ ) # Fixed: removed "priority-" prefix (use direct label names)
149
152
  if config.category:
150
153
  labels.append(f"category-{config.category.lower().replace(' ', '-')}")
151
154
  if config.custom_labels:
@@ -153,9 +156,13 @@ class GitHubIssueCreator:
153
156
 
154
157
  # Build gh command
155
158
  gh_command = [
156
- "gh", "issue", "create",
157
- "--title", full_title,
158
- "--body", body,
159
+ "gh",
160
+ "issue",
161
+ "create",
162
+ "--title",
163
+ full_title,
164
+ "--body",
165
+ body,
159
166
  ]
160
167
 
161
168
  # Add labels
@@ -168,10 +175,7 @@ class GitHubIssueCreator:
168
175
 
169
176
  try:
170
177
  result = subprocess.run(
171
- gh_command,
172
- capture_output=True,
173
- text=True,
174
- timeout=30
178
+ gh_command, capture_output=True, text=True, timeout=30
175
179
  )
176
180
 
177
181
  if result.returncode != 0:
@@ -256,7 +260,9 @@ class GitHubIssueCreator:
256
260
  output += f"🏷️ Labels: {', '.join(result['labels'])}\n"
257
261
  return output
258
262
  else:
259
- return f"❌ Failed to create issue: {result.get('message', 'Unknown error')}"
263
+ return (
264
+ f"❌ Failed to create issue: {result.get('message', 'Unknown error')}"
265
+ )
260
266
 
261
267
 
262
268
  class IssueCreatorFactory:
@@ -265,7 +271,9 @@ class IssueCreatorFactory:
265
271
  """
266
272
 
267
273
  @staticmethod
268
- def create_bug_issue(title: str, description: str, priority: IssuePriority = IssuePriority.HIGH) -> IssueConfig:
274
+ def create_bug_issue(
275
+ title: str, description: str, priority: IssuePriority = IssuePriority.HIGH
276
+ ) -> IssueConfig:
269
277
  """Create a bug report issue configuration."""
270
278
  return IssueConfig(
271
279
  issue_type=IssueType.BUG,
@@ -302,7 +310,9 @@ class IssueCreatorFactory:
302
310
  )
303
311
 
304
312
  @staticmethod
305
- def create_question_issue(title: str, description: str, priority: IssuePriority = IssuePriority.LOW) -> IssueConfig:
313
+ def create_question_issue(
314
+ title: str, description: str, priority: IssuePriority = IssuePriority.LOW
315
+ ) -> IssueConfig:
306
316
  """Create a question/discussion issue configuration."""
307
317
  return IssueConfig(
308
318
  issue_type=IssueType.QUESTION,
@@ -0,0 +1,202 @@
1
+ """
2
+ Enhanced language configuration for MoAI-ADK.
3
+
4
+ Supports extended language list with native names and automatic translation capabilities.
5
+ """
6
+
7
+ from typing import Dict, Optional
8
+
9
+ # Enhanced language configuration with native names
10
+ LANGUAGE_CONFIG: Dict[str, Dict[str, str]] = {
11
+ "en": {
12
+ "name": "English",
13
+ "native_name": "English",
14
+ "code": "en",
15
+ "family": "indo-european",
16
+ },
17
+ "ko": {
18
+ "name": "Korean",
19
+ "native_name": "한국어",
20
+ "code": "ko",
21
+ "family": "koreanic",
22
+ },
23
+ "ja": {
24
+ "name": "Japanese",
25
+ "native_name": "日本語",
26
+ "code": "ja",
27
+ "family": "japonic",
28
+ },
29
+ "es": {
30
+ "name": "Spanish",
31
+ "native_name": "Español", # Spanish native representation
32
+ "code": "es",
33
+ "family": "indo-european",
34
+ },
35
+ "fr": {
36
+ "name": "French",
37
+ "native_name": "Français",
38
+ "code": "fr",
39
+ "family": "indo-european",
40
+ },
41
+ "de": {
42
+ "name": "German",
43
+ "native_name": "Deutsch",
44
+ "code": "de",
45
+ "family": "indo-european",
46
+ },
47
+ "zh": {
48
+ "name": "Chinese",
49
+ "native_name": "中文",
50
+ "code": "zh",
51
+ "family": "sino-tibetan",
52
+ },
53
+ "pt": {
54
+ "name": "Portuguese",
55
+ "native_name": "Português",
56
+ "code": "pt",
57
+ "family": "indo-european",
58
+ },
59
+ "ru": {
60
+ "name": "Russian",
61
+ "native_name": "Русский",
62
+ "code": "ru",
63
+ "family": "indo-european",
64
+ },
65
+ "it": {
66
+ "name": "Italian",
67
+ "native_name": "Italiano",
68
+ "code": "it",
69
+ "family": "indo-european",
70
+ },
71
+ "ar": {
72
+ "name": "Arabic",
73
+ "native_name": "العربية",
74
+ "code": "ar",
75
+ "family": "afro-asiatic",
76
+ },
77
+ "hi": {
78
+ "name": "Hindi",
79
+ "native_name": "हिन्दी",
80
+ "code": "hi",
81
+ "family": "indo-european",
82
+ },
83
+ }
84
+
85
+
86
+ def get_language_info(language_code: str) -> Optional[Dict[str, str]]:
87
+ """Get language information by code.
88
+
89
+ Args:
90
+ language_code: ISO language code (e.g., 'ko', 'en')
91
+
92
+ Returns:
93
+ Language information dictionary or None if not found
94
+ """
95
+ return LANGUAGE_CONFIG.get(language_code.lower())
96
+
97
+
98
+ def get_native_name(language_code: str) -> str:
99
+ """Get native language name.
100
+
101
+ Args:
102
+ language_code: ISO language code
103
+
104
+ Returns:
105
+ Native language name or English fallback
106
+ """
107
+ lang_info = get_language_info(language_code)
108
+ return lang_info["native_name"] if lang_info else "English"
109
+
110
+
111
+ def get_english_name(language_code: str) -> str:
112
+ """Get English language name.
113
+
114
+ Args:
115
+ language_code: ISO language code
116
+
117
+ Returns:
118
+ English language name or fallback
119
+ """
120
+ lang_info = get_language_info(language_code)
121
+ return lang_info["name"] if lang_info else "English"
122
+
123
+
124
+ def get_all_supported_codes() -> list[str]:
125
+ """Get list of all supported language codes."""
126
+ return list(LANGUAGE_CONFIG.keys())
127
+
128
+
129
+ def get_language_family(language_code: str) -> Optional[str]:
130
+ """Get language family for linguistic analysis.
131
+
132
+ Args:
133
+ language_code: ISO language code
134
+
135
+ Returns:
136
+ Language family string or None
137
+ """
138
+ lang_info = get_language_info(language_code)
139
+ return lang_info.get("family") if lang_info else None
140
+
141
+
142
+ # Language to Claude model mapping for optimal performance
143
+ LANGUAGE_MODEL_PREFERENCE: Dict[str, str] = {
144
+ "en": "claude-sonnet-4-5-20250929", # Best for English
145
+ "ko": "claude-sonnet-4-5-20250929", # Strong Korean support
146
+ "ja": "claude-sonnet-4-5-20250929", # Strong Japanese support
147
+ "es": "claude-sonnet-4-5-20250929", # Strong Spanish support
148
+ "fr": "claude-sonnet-4-5-20250929", # Strong French support
149
+ "de": "claude-sonnet-4-5-20250929", # Strong German support
150
+ "zh": "claude-sonnet-4-5-20250929", # Strong Chinese support
151
+ "pt": "claude-sonnet-4-5-20250929", # Portuguese support
152
+ "ru": "claude-sonnet-4-5-20250929", # Russian support
153
+ "it": "claude-sonnet-4-5-20250929", # Italian support
154
+ "ar": "claude-sonnet-4-5-20250929", # Arabic support
155
+ "hi": "claude-sonnet-4-5-20250929", # Hindi support
156
+ }
157
+
158
+
159
+ def get_optimal_model(language_code: str) -> str:
160
+ """Get optimal Claude model for specific language.
161
+
162
+ Args:
163
+ language_code: ISO language code
164
+
165
+ Returns:
166
+ Recommended Claude model identifier
167
+ """
168
+ return LANGUAGE_MODEL_PREFERENCE.get(language_code, "claude-sonnet-4-5-20250929")
169
+
170
+
171
+ # RTL (Right-to-Left) language detection
172
+ RTL_LANGUAGES = {"ar", "he", "fa", "ur"}
173
+
174
+
175
+ def is_rtl_language(language_code: str) -> bool:
176
+ """Check if language uses right-to-left script.
177
+
178
+ Args:
179
+ language_code: ISO language code
180
+
181
+ Returns:
182
+ True if RTL language, False otherwise
183
+ """
184
+ return language_code.lower() in RTL_LANGUAGES
185
+
186
+
187
+ # Translation priorities for descriptions
188
+ TRANSLATION_PRIORITY = [
189
+ "en", # English base
190
+ "ko", # Korean
191
+ "ja", # Japanese
192
+ "es", # Spanish
193
+ "fr", # French
194
+ "de", # German
195
+ "zh", # Chinese
196
+ "pt", # Portuguese
197
+ ]
198
+
199
+
200
+ def get_translation_priority() -> list[str]:
201
+ """Get language translation priority order."""
202
+ return TRANSLATION_PRIORITY.copy()