moai-adk 0.4.5__py3-none-any.whl → 0.20.1__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 (433) hide show
  1. moai_adk/__init__.py +1 -1
  2. moai_adk/__main__.py +74 -1
  3. moai_adk/cli/commands/__init__.py +1 -1
  4. moai_adk/cli/commands/analyze.py +119 -0
  5. moai_adk/cli/commands/backup.py +25 -1
  6. moai_adk/cli/commands/doctor.py +31 -5
  7. moai_adk/cli/commands/improve_user_experience.py +307 -0
  8. moai_adk/cli/commands/init.py +111 -10
  9. moai_adk/cli/commands/status.py +33 -3
  10. moai_adk/cli/commands/update.py +921 -130
  11. moai_adk/cli/commands/validate_links.py +120 -0
  12. moai_adk/cli/prompts/init_prompts.py +22 -87
  13. moai_adk/core/analysis/__init__.py +9 -0
  14. moai_adk/core/analysis/session_analyzer.py +388 -0
  15. moai_adk/core/analysis/tag_chain_analyzer.py +344 -0
  16. moai_adk/core/analysis/tag_chain_repair.py +879 -0
  17. moai_adk/core/config/__init__.py +19 -0
  18. moai_adk/core/config/migration.py +235 -0
  19. moai_adk/core/git/__init__.py +1 -1
  20. moai_adk/core/git/branch.py +1 -1
  21. moai_adk/core/git/commit.py +1 -1
  22. moai_adk/core/git/manager.py +1 -1
  23. moai_adk/core/issue_creator.py +313 -0
  24. moai_adk/core/mcp/setup.py +56 -0
  25. moai_adk/core/mcp/setup_old.py +296 -0
  26. moai_adk/core/project/backup_utils.py +1 -1
  27. moai_adk/core/project/checker.py +2 -2
  28. moai_adk/core/project/detector.py +211 -12
  29. moai_adk/core/project/initializer.py +85 -15
  30. moai_adk/core/project/phase_executor.py +76 -13
  31. moai_adk/core/project/validator.py +13 -13
  32. moai_adk/core/quality/__init__.py +1 -1
  33. moai_adk/core/quality/trust_checker.py +1 -1
  34. moai_adk/core/quality/validators/__init__.py +1 -1
  35. moai_adk/core/quality/validators/base_validator.py +1 -1
  36. moai_adk/core/tags/__init__.py +86 -0
  37. moai_adk/core/tags/auto_corrector.py +693 -0
  38. moai_adk/core/tags/ci_validator.py +463 -0
  39. moai_adk/core/tags/cli.py +283 -0
  40. moai_adk/core/tags/generator.py +109 -0
  41. moai_adk/core/tags/inserter.py +99 -0
  42. moai_adk/core/tags/mapper.py +126 -0
  43. moai_adk/core/tags/parser.py +76 -0
  44. moai_adk/core/tags/policy_validator.py +580 -0
  45. moai_adk/core/tags/pre_commit_validator.py +421 -0
  46. moai_adk/core/tags/reporter.py +956 -0
  47. moai_adk/core/tags/rollback_manager.py +525 -0
  48. moai_adk/core/tags/tags.py +149 -0
  49. moai_adk/core/tags/validator.py +897 -0
  50. moai_adk/core/template/__init__.py +1 -1
  51. moai_adk/core/template/backup.py +1 -1
  52. moai_adk/core/template/merger.py +50 -1
  53. moai_adk/core/template/processor.py +119 -13
  54. moai_adk/core/template_engine.py +268 -0
  55. moai_adk/templates/.claude/agents/alfred/backend-expert.md +348 -0
  56. moai_adk/templates/.claude/agents/alfred/cc-manager.md +209 -944
  57. moai_adk/templates/.claude/agents/alfred/database-expert.md +352 -0
  58. moai_adk/templates/.claude/agents/alfred/debug-helper.md +34 -5
  59. moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
  60. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +38 -8
  61. moai_adk/templates/.claude/agents/alfred/format-expert.md +469 -0
  62. moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
  63. moai_adk/templates/.claude/agents/alfred/git-manager.md +128 -9
  64. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +104 -6
  65. moai_adk/templates/.claude/agents/alfred/project-manager.md +88 -16
  66. moai_adk/templates/.claude/agents/alfred/quality-gate.md +36 -9
  67. moai_adk/templates/.claude/agents/alfred/security-expert.md +270 -0
  68. moai_adk/templates/.claude/agents/alfred/skill-factory.md +865 -0
  69. moai_adk/templates/.claude/agents/alfred/spec-builder.md +214 -43
  70. moai_adk/templates/.claude/agents/alfred/tag-agent.md +111 -9
  71. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +309 -160
  72. moai_adk/templates/.claude/agents/alfred/trust-checker.md +36 -7
  73. moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +605 -0
  74. moai_adk/templates/.claude/commands/alfred/0-project.md +393 -966
  75. moai_adk/templates/.claude/commands/alfred/1-plan.md +651 -367
  76. moai_adk/templates/.claude/commands/alfred/2-run.md +388 -241
  77. moai_adk/templates/.claude/commands/alfred/3-sync.md +1921 -410
  78. moai_adk/templates/.claude/commands/alfred/9-feedback.md +153 -0
  79. moai_adk/templates/.claude/commands/alfred/release-new.md +3604 -0
  80. moai_adk/templates/.claude/hooks/alfred/core/project.py +484 -20
  81. moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
  82. moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
  83. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  84. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +14 -6
  85. moai_adk/templates/.claude/hooks/alfred/post_tool__enable_streaming_ui.py +50 -0
  86. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +93 -0
  87. moai_adk/templates/.claude/hooks/alfred/post_tool__tag_auto_corrector.py +407 -0
  88. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +99 -0
  89. moai_adk/templates/.claude/hooks/alfred/pre_tool__realtime_tag_monitor.py +335 -0
  90. moai_adk/templates/.claude/hooks/alfred/pre_tool__tag_policy_validator.py +325 -0
  91. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +93 -0
  92. moai_adk/templates/.claude/hooks/alfred/session_start__auto_cleanup.py +580 -0
  93. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +298 -0
  94. moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +170 -0
  95. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +3 -3
  96. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +5 -5
  97. moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
  98. moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +230 -0
  99. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  100. moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
  101. moai_adk/templates/.claude/hooks/alfred/shared/handlers/daily_analysis.py +351 -0
  102. moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +154 -0
  103. moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +174 -0
  104. moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +87 -0
  105. moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +61 -0
  106. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +111 -0
  107. moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
  108. moai_adk/templates/.claude/hooks/alfred/utils/hook_config.py +94 -0
  109. moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +161 -0
  110. moai_adk/templates/.claude/output-styles/alfred/alfred-moai-adk-beginner.md +267 -0
  111. moai_adk/templates/.claude/output-styles/alfred/keating-personal-tutor.md +440 -0
  112. moai_adk/templates/.claude/output-styles/alfred/r2d2-agentic-coding.md +583 -0
  113. moai_adk/templates/.claude/settings.json +96 -14
  114. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +70 -0
  115. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +62 -0
  116. moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +242 -0
  117. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/SKILL.md +237 -0
  118. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/examples.md +871 -0
  119. moai_adk/templates/.claude/skills/moai-alfred-ask-user-questions/reference.md +653 -0
  120. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/README.md +162 -0
  121. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/SKILL.md +227 -0
  122. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/examples.md +354 -0
  123. moai_adk/templates/.claude/skills/moai-alfred-clone-pattern/reference.md +158 -0
  124. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/SKILL.md +179 -79
  125. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/examples.md +117 -0
  126. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/scripts/pre-review-check.sh +62 -0
  127. moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +132 -0
  128. moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +28 -0
  129. moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +444 -0
  130. moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +62 -0
  131. moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +28 -0
  132. moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +405 -0
  133. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +51 -0
  134. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +355 -0
  135. moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +239 -0
  136. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +323 -0
  137. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +286 -0
  138. moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +126 -0
  139. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +229 -0
  140. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +4 -0
  141. moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +150 -0
  142. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +87 -73
  143. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +29 -0
  144. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +28 -0
  145. moai_adk/templates/.claude/skills/moai-alfred-personas/README.md +42 -0
  146. moai_adk/templates/.claude/skills/moai-alfred-personas/SKILL.md +429 -0
  147. moai_adk/templates/.claude/skills/moai-alfred-personas/examples.md +520 -0
  148. moai_adk/templates/.claude/skills/moai-alfred-personas/reference.md +405 -0
  149. moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +89 -0
  150. moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +122 -0
  151. moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +369 -0
  152. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +508 -0
  153. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +481 -0
  154. moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +100 -0
  155. moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +77 -0
  156. moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +265 -0
  157. moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +539 -0
  158. moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +320 -0
  159. moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +4 -0
  160. moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +84 -0
  161. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +137 -0
  162. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +219 -0
  163. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +161 -0
  164. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +541 -0
  165. moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +622 -0
  166. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +19 -0
  167. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +4 -0
  168. moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +211 -0
  169. moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +288 -0
  170. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +269 -0
  171. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
  172. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +298 -0
  173. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
  174. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +307 -0
  175. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
  176. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +252 -0
  177. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
  178. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
  179. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
  180. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +199 -0
  181. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
  182. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +316 -0
  183. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
  184. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +263 -0
  185. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
  186. moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +482 -0
  187. moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +303 -0
  188. moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +524 -0
  189. moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +477 -0
  190. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
  191. moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
  192. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
  193. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +577 -0
  194. moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +273 -0
  195. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
  196. moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +583 -0
  197. moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +526 -0
  198. moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +608 -0
  199. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +328 -0
  200. moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +312 -0
  201. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +245 -0
  202. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +285 -0
  203. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +278 -0
  204. moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +303 -0
  205. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +291 -0
  206. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
  207. moai_adk/templates/.claude/skills/moai-change-logger/SKILL.md +563 -0
  208. moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +802 -0
  209. moai_adk/templates/.claude/skills/moai-design-systems/examples.md +1238 -0
  210. moai_adk/templates/.claude/skills/moai-design-systems/reference.md +673 -0
  211. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +234 -43
  212. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +1633 -0
  213. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +660 -0
  214. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +97 -69
  215. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +29 -0
  216. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +30 -0
  217. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +97 -72
  218. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +29 -0
  219. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +30 -0
  220. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +97 -74
  221. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +29 -0
  222. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +30 -0
  223. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +98 -74
  224. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +29 -0
  225. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +31 -0
  226. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +102 -73
  227. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +29 -0
  228. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +31 -0
  229. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +97 -73
  230. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +29 -0
  231. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +30 -0
  232. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +97 -67
  233. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +29 -0
  234. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +30 -0
  235. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +97 -79
  236. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +29 -0
  237. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +30 -0
  238. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +97 -71
  239. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +29 -0
  240. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +30 -0
  241. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +265 -64
  242. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +1064 -0
  243. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +1047 -0
  244. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +87 -78
  245. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +29 -0
  246. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +28 -0
  247. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +87 -70
  248. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +29 -0
  249. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +28 -0
  250. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +87 -86
  251. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +29 -0
  252. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +28 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +80 -62
  254. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +29 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +28 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +207 -50
  257. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +29 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +29 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +90 -71
  260. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +29 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +28 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +78 -58
  263. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +29 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +28 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +78 -51
  266. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +29 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +28 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-trust/.!11330!examples.md +0 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +253 -32
  270. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +1099 -0
  272. moai_adk/templates/.claude/skills/moai-jit-docs-enhanced/SKILL.md +460 -0
  273. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +98 -74
  274. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +29 -0
  275. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +31 -0
  276. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +98 -76
  277. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +29 -0
  278. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +31 -0
  279. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +2358 -70
  280. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +29 -0
  281. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +30 -0
  282. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +2962 -68
  283. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +29 -0
  284. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +30 -0
  285. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +1898 -70
  286. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +29 -0
  287. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +31 -0
  288. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +1465 -68
  289. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +29 -0
  290. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +31 -0
  291. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +2364 -66
  292. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +29 -0
  293. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +32 -0
  294. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +1630 -69
  295. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +29 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +31 -0
  297. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +89 -61
  298. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +29 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +30 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +735 -66
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +624 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +316 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +97 -73
  304. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +29 -0
  305. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +30 -0
  306. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +98 -73
  307. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +29 -0
  308. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +31 -0
  309. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +1834 -70
  310. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +29 -0
  311. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +31 -0
  312. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +99 -74
  313. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +29 -0
  314. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +30 -0
  315. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +97 -74
  316. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +29 -0
  317. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +30 -0
  318. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +98 -74
  319. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +29 -0
  320. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +31 -0
  321. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +1959 -69
  322. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +29 -0
  323. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +30 -0
  324. moai_adk/templates/.claude/skills/moai-lang-template/SKILL.md +348 -0
  325. moai_adk/templates/.claude/skills/moai-lang-template/VARIABLES.md +98 -0
  326. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +1230 -66
  327. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +29 -0
  328. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +34 -0
  329. moai_adk/templates/.claude/skills/moai-learning-optimizer/SKILL.md +575 -0
  330. moai_adk/templates/.claude/skills/moai-project-batch-questions/README.md +50 -0
  331. moai_adk/templates/.claude/skills/moai-project-batch-questions/SKILL.md +304 -0
  332. moai_adk/templates/.claude/skills/moai-project-batch-questions/examples.md +417 -0
  333. moai_adk/templates/.claude/skills/moai-project-batch-questions/reference.md +704 -0
  334. moai_adk/templates/.claude/skills/moai-project-config-manager/README.md +87 -0
  335. moai_adk/templates/.claude/skills/moai-project-config-manager/SKILL.md +552 -0
  336. moai_adk/templates/.claude/skills/moai-project-config-manager/examples.md +1109 -0
  337. moai_adk/templates/.claude/skills/moai-project-config-manager/reference.md +514 -0
  338. moai_adk/templates/.claude/skills/moai-project-config-manager/validate.py +106 -0
  339. moai_adk/templates/.claude/skills/moai-project-documentation/README.md +11 -0
  340. moai_adk/templates/.claude/skills/moai-project-documentation/SKILL.md +622 -0
  341. moai_adk/templates/.claude/skills/moai-project-documentation/examples.md +20 -0
  342. moai_adk/templates/.claude/skills/moai-project-documentation/reference.md +12 -0
  343. moai_adk/templates/.claude/skills/moai-project-language-initializer/README.md +152 -0
  344. moai_adk/templates/.claude/skills/moai-project-language-initializer/SKILL.md +285 -0
  345. moai_adk/templates/.claude/skills/moai-project-language-initializer/examples.md +333 -0
  346. moai_adk/templates/.claude/skills/moai-project-language-initializer/reference.md +386 -0
  347. moai_adk/templates/.claude/skills/moai-project-template-optimizer/README.md +49 -0
  348. moai_adk/templates/.claude/skills/moai-project-template-optimizer/SKILL.md +319 -0
  349. moai_adk/templates/.claude/skills/moai-project-template-optimizer/examples.md +58 -0
  350. moai_adk/templates/.claude/skills/moai-project-template-optimizer/reference.md +123 -0
  351. moai_adk/templates/.claude/skills/moai-session-info/SKILL.md +314 -0
  352. moai_adk/templates/.claude/skills/moai-streaming-ui/SKILL.md +552 -0
  353. moai_adk/templates/.claude/skills/moai-tag-policy-validator/SKILL.md +570 -0
  354. moai_adk/templates/.git-hooks/pre-commit +66 -0
  355. moai_adk/templates/.git-hooks/pre-push +255 -0
  356. moai_adk/templates/.github/workflows/c-tag-validation.yml +11 -0
  357. moai_adk/templates/.github/workflows/cpp-tag-validation.yml +11 -0
  358. moai_adk/templates/.github/workflows/csharp-tag-validation.yml +11 -0
  359. moai_adk/templates/.github/workflows/dart-tag-validation.yml +11 -0
  360. moai_adk/templates/.github/workflows/go-tag-validation.yml +130 -0
  361. moai_adk/templates/.github/workflows/java-tag-validation.yml +11 -0
  362. moai_adk/templates/.github/workflows/javascript-tag-validation.yml +135 -0
  363. moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +11 -0
  364. moai_adk/templates/.github/workflows/moai-gitflow.yml +166 -3
  365. moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
  366. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +188 -0
  367. moai_adk/templates/.github/workflows/php-tag-validation.yml +11 -0
  368. moai_adk/templates/.github/workflows/python-tag-validation.yml +118 -0
  369. moai_adk/templates/.github/workflows/release.yml +118 -0
  370. moai_adk/templates/.github/workflows/ruby-tag-validation.yml +11 -0
  371. moai_adk/templates/.github/workflows/rust-tag-validation.yml +11 -0
  372. moai_adk/templates/.github/workflows/shell-tag-validation.yml +11 -0
  373. moai_adk/templates/.github/workflows/spec-issue-sync.yml +338 -0
  374. moai_adk/templates/.github/workflows/swift-tag-validation.yml +11 -0
  375. moai_adk/templates/.github/workflows/tag-report.yml +269 -0
  376. moai_adk/templates/.github/workflows/tag-validation.yml +186 -0
  377. moai_adk/templates/.github/workflows/typescript-tag-validation.yml +154 -0
  378. moai_adk/templates/.mcp.json +31 -0
  379. moai_adk/templates/.moai/config.json +80 -7
  380. moai_adk/templates/CLAUDE.md +562 -546
  381. moai_adk/utils/banner.py +5 -5
  382. moai_adk/utils/common.py +294 -0
  383. moai_adk/utils/link_validator.py +235 -0
  384. moai_adk/utils/logger.py +8 -8
  385. moai_adk/utils/user_experience.py +451 -0
  386. moai_adk-0.20.1.dist-info/METADATA +233 -0
  387. moai_adk-0.20.1.dist-info/RECORD +404 -0
  388. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  389. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -156
  390. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -85
  391. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  392. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -92
  393. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -70
  394. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -41
  395. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -636
  396. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -692
  397. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -470
  398. moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/SKILL.md +0 -103
  399. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -103
  400. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -95
  401. moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/SKILL.md +0 -105
  402. moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/SKILL.md +0 -97
  403. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -97
  404. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -90
  405. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -99
  406. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/SKILL.md +0 -87
  407. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/examples.md +0 -62
  408. moai_adk/templates/.claude/skills/moai-claude-code/SKILL.md +0 -94
  409. moai_adk/templates/.claude/skills/moai-claude-code/examples.md +0 -513
  410. moai_adk/templates/.claude/skills/moai-claude-code/reference.md +0 -433
  411. moai_adk/templates/.claude/skills/moai-claude-code/templates/agent-full.md +0 -332
  412. moai_adk/templates/.claude/skills/moai-claude-code/templates/command-full.md +0 -384
  413. moai_adk/templates/.claude/skills/moai-claude-code/templates/plugin-full.json +0 -363
  414. moai_adk/templates/.claude/skills/moai-claude-code/templates/settings-full.json +0 -595
  415. moai_adk/templates/.claude/skills/moai-claude-code/templates/skill-full.md +0 -496
  416. moai_adk/templates/.claude/skills/moai-lang-clojure/SKILL.md +0 -100
  417. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +0 -99
  418. moai_adk/templates/.claude/skills/moai-lang-haskell/SKILL.md +0 -100
  419. moai_adk/templates/.claude/skills/moai-lang-julia/SKILL.md +0 -98
  420. moai_adk/templates/.claude/skills/moai-lang-lua/SKILL.md +0 -98
  421. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  422. moai_adk/templates/.moai/memory/development-guide.md +0 -344
  423. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  424. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  425. moai_adk/templates/.moai/project/product.md +0 -161
  426. moai_adk/templates/.moai/project/structure.md +0 -156
  427. moai_adk/templates/.moai/project/tech.md +0 -227
  428. moai_adk/templates/__init__.py +0 -2
  429. moai_adk-0.4.5.dist-info/METADATA +0 -369
  430. moai_adk-0.4.5.dist-info/RECORD +0 -152
  431. {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/WHEEL +0 -0
  432. {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/entry_points.txt +0 -0
  433. {moai_adk-0.4.5.dist-info → moai_adk-0.20.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,96 +1,765 @@
1
1
  ---
2
-
3
2
  name: moai-lang-python
4
- description: Python best practices with pytest, mypy, ruff, black, and uv package management. Use when writing or reviewing Python code in project workflows.
3
+ version: 2.0.0
4
+ created: 2025-11-06
5
+ updated: 2025-11-06
6
+ status: active
7
+ description: "Python best practices with modern frameworks, AI/ML integration, and performance optimization for 2025"
8
+ keywords: [python, programming, backend, ai, ml, data-science, fastapi, django, testing]
5
9
  allowed-tools:
6
10
  - Read
11
+ - Write
12
+ - Edit
7
13
  - Bash
14
+ - WebFetch
15
+ - WebSearch
8
16
  ---
9
17
 
10
- # Python Expert
18
+ # Python Development Mastery
19
+
20
+ **Modern Python Development with 2025 Best Practices**
21
+
22
+ > Comprehensive Python development guidance covering backend APIs, AI/ML integration, data science, and production-ready applications using the latest tools and frameworks.
23
+
24
+ ## What It Does
25
+
26
+ - **Backend API Development**: FastAPI, Django, Flask applications with modern async patterns
27
+ - **AI/ML Integration**: TensorFlow, PyTorch, scikit-learn with deployment strategies
28
+ - **Data Science Pipelines**: Pandas, NumPy, Polars for high-performance data processing
29
+ - **Testing & Quality**: pytest, coverage, type checking with mypy and ruff
30
+ - **Performance Optimization**: Async programming, profiling, memory optimization
31
+ - **Production Deployment**: Docker, Kubernetes, CI/CD pipelines, monitoring
32
+ - **Security Best Practices**: Input validation, authentication, dependency scanning
33
+ - **Code Quality**: Type hints, formatting, linting, pre-commit hooks
34
+
35
+ ## When to Use
36
+
37
+ ### Perfect Scenarios
38
+ - **Building REST APIs and microservices**
39
+ - **Developing AI/ML models and data pipelines**
40
+ - **Creating web applications with Django/Flask**
41
+ - **Data analysis and scientific computing**
42
+ - **Automating workflows and DevOps tasks**
43
+ - **Prototyping and rapid development**
44
+ - **Integrating with cloud services (AWS, GCP, Azure)**
45
+
46
+ ### Common Triggers
47
+ - "Create a Python API"
48
+ - "Set up Django project"
49
+ - "Optimize Python performance"
50
+ - "Test Python code"
51
+ - "Deploy Python application"
52
+ - "Python best practices"
53
+ - "AI/ML with Python"
54
+
55
+ ## Tool Version Matrix (2025-11-06)
56
+
57
+ ### Core Python
58
+ - **Python**: 3.13.0 (latest) / 3.12.x (LTS)
59
+ - **Package Managers**: uv 0.5.x (primary), pip 24.x, poetry 1.8.x
60
+ - **Virtual Environment**: venv (built-in), conda 24.x, uv venv
61
+
62
+ ### Web Frameworks
63
+ - **FastAPI**: 0.115.x - High-performance async APIs
64
+ - **Django**: 5.1.x - Full-stack web framework
65
+ - **Flask**: 3.1.x - Lightweight web framework
66
+ - **Starlette**: 0.41.x - ASGI toolkit
67
+
68
+ ### Testing Tools
69
+ - **pytest**: 8.3.x - Primary testing framework
70
+ - **pytest-asyncio**: 0.24.x - Async testing support
71
+ - **coverage**: 7.6.x - Code coverage analysis
72
+ - **tox**: 4.23.x - Multi-environment testing
73
+
74
+ ### Code Quality
75
+ - **ruff**: 0.7.x - Fast linter and formatter
76
+ - **black**: 24.x - Code formatting
77
+ - **mypy**: 1.13.x - Static type checking
78
+ - **pre-commit**: 4.0.x - Git hooks
79
+
80
+ ### AI/ML Stack
81
+ - **TensorFlow**: 2.18.x - Deep learning
82
+ - **PyTorch**: 2.5.x - Deep learning framework
83
+ - **scikit-learn**: 1.6.x - Machine learning
84
+ - **pandas**: 2.2.x - Data manipulation
85
+ - **polars**: 1.9.x - High-performance dataframes
86
+
87
+ ### Performance Tools
88
+ - **py-spy**: 0.3.x - Sampling profiler
89
+ - **memory-profiler**: 0.64.x - Memory profiling
90
+ - **line-profiler**: 4.2.x - Line-by-line profiling
91
+
92
+ ## Ecosystem Overview
93
+
94
+ ### Package Management
95
+
96
+ ```bash
97
+ # Modern Python with uv (recommended)
98
+ uv init project-name
99
+ uv add fastapi uvicorn pytest ruff mypy
100
+ uv run python main.py
101
+
102
+ # Traditional approach
103
+ python -m venv venv
104
+ source venv/bin/activate # Windows: venv\Scripts\activate
105
+ pip install -r requirements.txt
106
+ ```
107
+
108
+ ### Project Structure (2025 Best Practice)
109
+
110
+ ```
111
+ my-python-project/
112
+ ├── pyproject.toml # Modern project configuration
113
+ ├── src/
114
+ │ └── my_project/
115
+ │ ├── __init__.py
116
+ │ ├── main.py # Application entry point
117
+ │ ├── api/ # API endpoints
118
+ │ ├── models/ # Data models
119
+ │ ├── services/ # Business logic
120
+ │ └── utils/ # Utilities
121
+ ├── tests/
122
+ │ ├── unit/ # Unit tests
123
+ │ ├── integration/ # Integration tests
124
+ │ └── conftest.py # pytest configuration
125
+ ├── .github/
126
+ │ └── workflows/ # CI/CD pipelines
127
+ ├── Dockerfile
128
+ ├── README.md
129
+ └── .pre-commit-config.yaml
130
+ ```
131
+
132
+ ## Modern Development Patterns
133
+
134
+ ### Type-Driven Development with PEP 695
135
+
136
+ ```python
137
+ from typing import TypeVar, Iterable, Protocol
138
+ from collections.abc import Sequence
139
+
140
+ # New type parameter syntax (Python 3.12+)
141
+ def max[T](args: Iterable[T]) -> T: ...
142
+ type Point = tuple[float, float]
143
+
144
+ # Runtime-checkable protocols
145
+ class Drawable(Protocol):
146
+ def draw(self) -> None: ...
147
+
148
+ class Shape:
149
+ def draw(self) -> None:
150
+ print("Drawing shape")
151
+
152
+ def render(obj: Drawable) -> None:
153
+ obj.draw()
154
+ ```
155
+
156
+ ### Async Programming Patterns
157
+
158
+ ```python
159
+ import asyncio
160
+ from contextlib import asynccontextmanager
161
+ from fastapi import FastAPI
162
+ from typing import AsyncGenerator
163
+
164
+ @asynccontextmanager
165
+ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
166
+ # Startup
167
+ print("Application starting...")
168
+ yield
169
+ # Shutdown
170
+ print("Application shutting down...")
171
+
172
+ app = FastAPI(lifespan=lifespan)
173
+
174
+ # Efficient async patterns
175
+ async def process_items(items: Sequence[str]) -> list[str]:
176
+ # Process items concurrently
177
+ semaphore = asyncio.Semaphore(10) # Limit concurrency
178
+ async def process_item(item: str) -> str:
179
+ async with semaphore:
180
+ return await expensive_operation(item)
181
+
182
+ tasks = [process_item(item) for item in items]
183
+ return await asyncio.gather(*tasks)
184
+ ```
185
+
186
+ ### Data Class Patterns with Pydantic v2
187
+
188
+ ```python
189
+ from pydantic import BaseModel, Field, field_validator, computed_field
190
+ from datetime import datetime
191
+ from typing import Optional
192
+
193
+ class User(BaseModel):
194
+ id: int
195
+ username: str = Field(min_length=3, max_length=50)
196
+ email: str = Field(pattern=r"[^@]+@[^@]+\.[^@]+")
197
+ created_at: datetime
198
+ updated_at: Optional[datetime] = None
199
+
200
+ @field_validator('username')
201
+ @classmethod
202
+ def username_must_be_alpha(cls, v: str) -> str:
203
+ if not v.isalnum():
204
+ raise ValueError('Username must be alphanumeric')
205
+ return v.lower()
206
+
207
+ @computed_field
208
+ @property
209
+ def display_name(self) -> str:
210
+ return self.username.title()
211
+ ```
212
+
213
+ ## Performance Considerations
214
+
215
+ ### Algorithmic Optimization
216
+
217
+ ```python
218
+ # Use built-in functions and comprehensions
219
+ def process_data_fast(data: list[int]) -> list[int]:
220
+ # List comprehensions are optimized in Python 3.12+
221
+ return [x * 2 for x in data if x % 2 == 0]
222
+
223
+ # Use efficient data structures
224
+ from collections import deque
225
+ from typing import Deque
226
+
227
+ def sliding_window(items: list[int], window_size: int) -> list[int]:
228
+ window: Deque[int] = deque(maxlen=window_size)
229
+ results = []
230
+ for item in items:
231
+ window.append(item)
232
+ if len(window) == window_size:
233
+ results.append(sum(window))
234
+ return results
235
+ ```
236
+
237
+ ### Memory Optimization
238
+
239
+ ```python
240
+ import gc
241
+ import weakref
242
+ from dataclasses import dataclass
243
+ from typing import Optional
244
+
245
+ @dataclass(slots=True) # Memory-efficient dataclass
246
+ class Point:
247
+ x: float
248
+ y: float
249
+
250
+ # Use generators for large datasets
251
+ def process_large_file(filename: str) -> None:
252
+ with open(filename) as file:
253
+ for line in file: # Generator pattern
254
+ yield process_line(line)
255
+
256
+ # Weak references to avoid memory leaks
257
+ class Cache:
258
+ def __init__(self):
259
+ self._cache = weakref.WeakValueDictionary()
260
+
261
+ def get(self, key: str) -> Optional[object]:
262
+ return self._cache.get(key)
263
+ ```
264
+
265
+ ### Profiling and Monitoring
266
+
267
+ ```bash
268
+ # Performance profiling
269
+ py-spy top -- python my_app.py
270
+ py-spy record -o profile.svg -- python my_app.py
271
+
272
+ # Memory profiling
273
+ python -m memory_profiler my_app.py
274
+
275
+ # Line-by-line profiling
276
+ kernprof -l -v my_script.py
277
+ ```
278
+
279
+ ## Testing Strategy
280
+
281
+ ### pytest Configuration (pyproject.toml)
282
+
283
+ ```toml
284
+ [tool.pytest.ini_options]
285
+ minversion = "6.0"
286
+ addopts = [
287
+ "-ra",
288
+ "--strict-markers",
289
+ "--strict-config",
290
+ "--cov=src",
291
+ "--cov-report=term-missing",
292
+ "--cov-report=html",
293
+ "--cov-report=xml",
294
+ ]
295
+ testpaths = ["tests"]
296
+ python_files = ["test_*.py", "*_test.py"]
297
+ python_classes = ["Test*"]
298
+ python_functions = ["test_*"]
299
+ markers = [
300
+ "slow: marks tests as slow",
301
+ "integration: marks tests as integration tests",
302
+ "unit: marks tests as unit tests",
303
+ ]
304
+ ```
305
+
306
+ ### Modern Testing Patterns
307
+
308
+ ```python
309
+ import pytest
310
+ from unittest.mock import AsyncMock, patch
311
+ from httpx import AsyncClient
312
+ from typing import Generator
11
313
 
12
- ## Skill Metadata
13
- | Field | Value |
14
- | ----- | ----- |
15
- | Allowed tools | Read (read_file), Bash (terminal) |
16
- | Auto-load | On demand when language keywords are detected |
17
- | Trigger cues | Python code discussions, framework guidance, or file extensions such as .py. |
18
- | Tier | 3 |
314
+ # Fixtures with dependency injection
315
+ @pytest.fixture
316
+ async def async_client() -> AsyncGenerator[AsyncClient, None]:
317
+ from my_app.main import app
318
+ async with AsyncClient(app=app, base_url="http://test") as ac:
319
+ yield ac
19
320
 
20
- ## What it does
321
+ # Async testing
322
+ @pytest.mark.asyncio
323
+ async def test_create_user(async_client: AsyncClient) -> None:
324
+ response = await async_client.post(
325
+ "/users",
326
+ json={"username": "testuser", "email": "test@example.com"}
327
+ )
328
+ assert response.status_code == 201
329
+ assert response.json()["username"] == "testuser"
21
330
 
22
- Provides Python-specific expertise for TDD development, including pytest testing, mypy type checking, ruff linting, black formatting, and modern uv package management.
331
+ # Property-based testing with hypothesis
332
+ from hypothesis import given, strategies as st
23
333
 
24
- ## When to use
334
+ @given(st.lists(st.integers(), min_size=1))
335
+ def test_sort_preserves_length(numbers: list[int]) -> None:
336
+ sorted_numbers = sorted(numbers)
337
+ assert len(sorted_numbers) == len(numbers)
338
+ ```
339
+
340
+ ### Integration Testing
341
+
342
+ ```python
343
+ import pytest
344
+ from testcontainers.compose import DockerCompose
345
+ from testcontainers.postgres import PostgresContainer
346
+ import asyncio
25
347
 
26
- - Engages when the conversation references Python work, frameworks, or files like .py.
27
- - “Writing Python tests”, “How to use pytest”, “Python type hints”
28
- - Automatically invoked when working with Python projects
29
- - Python SPEC implementation (`/alfred:2-run`)
348
+ @pytest.fixture(scope="session")
349
+ async def postgres_container() -> AsyncGenerator[str, None]:
350
+ with PostgresContainer("postgres:16") as postgres:
351
+ yield postgres.get_connection_url()
352
+
353
+ @pytest.mark.integration
354
+ async def test_database_operations(postgres_container: str) -> None:
355
+ # Test with real database
356
+ await setup_database(postgres_container)
357
+ result = await perform_database_operation()
358
+ assert result.success
359
+ ```
30
360
 
31
- ## How it works
361
+ ## Security Best Practices
32
362
 
33
- **TDD Framework**:
34
- - **pytest**: Test discovery, fixtures, parametrize, markers
35
- - **coverage.py**: Test coverage ≥85% enforcement
36
- - **pytest-mock**: Mocking and patching
363
+ ### Input Validation and Sanitization
364
+
365
+ ```python
366
+ from pydantic import BaseModel, Field, validator
367
+ import bleach
368
+ import re
369
+
370
+ class UserInput(BaseModel):
371
+ content: str = Field(max_length=10000)
372
+
373
+ @validator('content')
374
+ def sanitize_content(cls, v: str) -> str:
375
+ # Remove HTML tags and scripts
376
+ return bleach.clean(v, tags=[], attributes={})
377
+
378
+ class SecureForm(BaseModel):
379
+ email: str = Field(regex=r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")
380
+ phone: Optional[str] = Field(regex=r"^\+?1?\d{9,15}$")
381
+
382
+ @validator('phone')
383
+ def validate_phone(cls, v: Optional[str]) -> Optional[str]:
384
+ if v and not re.match(r"^\+?1?\d{9,15}$", v):
385
+ raise ValueError("Invalid phone number format")
386
+ return v
387
+ ```
37
388
 
38
- **Type Safety**:
39
- - **mypy**: Static type checking with strict mode
40
- - Type hints for function signatures, return types
41
- - Generic types, Protocols, TypedDict
389
+ ### Authentication and Authorization
42
390
 
43
- **Code Quality**:
44
- - **ruff**: Fast Python linter (replaces flake8, isort, pylint)
45
- - **black**: Opinionated code formatter
46
- - Complexity checks (≤10), line length (≤88)
391
+ ```python
392
+ from fastapi import Depends, HTTPException, status
393
+ from fastapi.security import OAuth2PasswordBearer
394
+ from jose import JWTError, jwt
395
+ from passlib.context import CryptContext
396
+ from datetime import datetime, timedelta
47
397
 
48
- **Package Management**:
49
- - **uv**: Modern, fast package installer
50
- - `pyproject.toml` for project configuration
51
- - Virtual environment management
398
+ SECRET_KEY = "your-secret-key-here"
399
+ ALGORITHM = "HS256"
400
+ ACCESS_TOKEN_EXPIRE_MINUTES = 30
52
401
 
53
- **Best Practices**:
54
- - File ≤300 LOC, function ≤50 LOC
55
- - Meaningful variable names (no single letters except loops)
56
- - Guard clauses over nested conditions
57
- - Docstrings for public APIs
402
+ pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
403
+ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
404
+
405
+ def verify_password(plain_password: str, hashed_password: str) -> bool:
406
+ return pwd_context.verify(plain_password, hashed_password)
407
+
408
+ def get_password_hash(password: str) -> str:
409
+ return pwd_context.hash(password)
410
+
411
+ async def get_current_user(token: str = Depends(oauth2_scheme)):
412
+ credentials_exception = HTTPException(
413
+ status_code=status.HTTP_401_UNAUTHORIZED,
414
+ detail="Could not validate credentials",
415
+ headers={"WWW-Authenticate": "Bearer"},
416
+ )
417
+ try:
418
+ payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
419
+ username: str = payload.get("sub")
420
+ if username is None:
421
+ raise credentials_exception
422
+ except JWTError:
423
+ raise credentials_exception
424
+
425
+ user = get_user(username)
426
+ if user is None:
427
+ raise credentials_exception
428
+ return user
429
+ ```
430
+
431
+ ### Dependency Security Scanning
58
432
 
59
- ## Examples
60
433
  ```bash
61
- python -m pytest && ruff check . && black --check .
434
+ # Add to pyproject.toml
435
+ [tool.pip-audit]
436
+ requirements = ["pyproject.toml"]
437
+ ignore-vulns = []
438
+
439
+ # Regular security scanning
440
+ pip-audit --requirement pyproject.toml
441
+ safety check --json
442
+ bandit -r src/ -f json
443
+ ```
444
+
445
+ ## Integration Patterns
446
+
447
+ ### Database Integration
448
+
449
+ ```python
450
+ # SQLAlchemy 2.0 async patterns
451
+ from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
452
+ from sqlalchemy.orm import declarative_base, sessionmaker
453
+ from sqlalchemy import Column, Integer, String, DateTime
454
+
455
+ Base = declarative_base()
456
+
457
+ class User(Base):
458
+ __tablename__ = "users"
459
+
460
+ id = Column(Integer, primary_key=True)
461
+ username = Column(String, unique=True)
462
+ created_at = Column(DateTime, default=datetime.utcnow)
463
+
464
+ # Async database session
465
+ async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
466
+ engine = create_async_engine("postgresql+asyncpg://user:pass@localhost/db")
467
+ async_session = sessionmaker(
468
+ engine, class_=AsyncSession, expire_on_commit=False
469
+ )
470
+ async with async_session() as session:
471
+ yield session
472
+
473
+ # Usage in FastAPI
474
+ @app.get("/users/{user_id}")
475
+ async def get_user(user_id: int, db: AsyncSession = Depends(get_async_session)):
476
+ result = await db.execute(select(User).where(User.id == user_id))
477
+ user = result.scalar_one_or_none()
478
+ if user is None:
479
+ raise HTTPException(status_code=404, detail="User not found")
480
+ return user
62
481
  ```
63
482
 
64
- ## Inputs
65
- - Language-specific source directories (e.g. `src/`, `app/`).
66
- - Language-specific build/test configuration files (e.g. `package.json`, `pyproject.toml`, `go.mod`).
67
- - Relevant test suites and sample data.
483
+ ### Cloud Service Integration
484
+
485
+ ```python
486
+ # AWS S3 with boto3
487
+ import boto3
488
+ from botocore.exceptions import ClientError
489
+ import io
490
+
491
+ class S3Service:
492
+ def __init__(self, bucket_name: str):
493
+ self.s3_client = boto3.client("s3")
494
+ self.bucket_name = bucket_name
495
+
496
+ async def upload_file(self, key: str, file_data: bytes) -> bool:
497
+ try:
498
+ self.s3_client.put_object(
499
+ Bucket=self.bucket_name,
500
+ Key=key,
501
+ Body=file_data
502
+ )
503
+ return True
504
+ except ClientError:
505
+ return False
506
+
507
+ # Redis with aioredis
508
+ import aioredis
509
+ from typing import Optional
68
510
 
69
- ## Outputs
70
- - Test/lint execution plan tailored to the selected language.
71
- - List of key language idioms and review checkpoints.
511
+ class CacheService:
512
+ def __init__(self, redis_url: str):
513
+ self.redis_url = redis_url
514
+ self._redis: Optional[aioredis.Redis] = None
515
+
516
+ async def connect(self) -> None:
517
+ self._redis = await aioredis.from_url(self.redis_url)
518
+
519
+ async def get(self, key: str) -> Optional[str]:
520
+ if self._redis:
521
+ return await self._redis.get(key)
522
+ return None
523
+
524
+ async def set(self, key: str, value: str, expire: int = 3600) -> None:
525
+ if self._redis:
526
+ await self._redis.setex(key, expire, value)
527
+ ```
528
+
529
+ ### Message Queue Integration
530
+
531
+ ```python
532
+ # Celery with Redis
533
+ from celery import Celery
534
+ from celery.result import AsyncResult
535
+
536
+ celery_app = Celery(
537
+ "tasks",
538
+ broker="redis://localhost:6379/0",
539
+ backend="redis://localhost:6379/1"
540
+ )
541
+
542
+ @celery_app.task
543
+ def process_data_task(data: dict) -> dict:
544
+ # Heavy processing task
545
+ result = expensive_computation(data)
546
+ return {"result": result, "status": "completed"}
547
+
548
+ # In FastAPI
549
+ @app.post("/process")
550
+ async def start_processing(data: dict):
551
+ task = process_data_task.delay(data)
552
+ return {"task_id": task.id, "status": "processing"}
553
+
554
+ @app.get("/task/{task_id}")
555
+ async def get_task_status(task_id: str):
556
+ result = AsyncResult(task_id)
557
+ return {
558
+ "task_id": task_id,
559
+ "status": result.status,
560
+ "result": result.result if result.successful() else None
561
+ }
562
+ ```
72
563
 
73
- ## Failure Modes
74
- - When the language runtime or package manager is not installed.
75
- - When the main language cannot be determined in a multilingual project.
564
+ ## Modern Development Workflow
76
565
 
77
- ## Dependencies
78
- - Access to the project file is required using the Read/Grep tool.
79
- - When used with `Skill("moai-foundation-langs")`, it is easy to share cross-language conventions.
566
+ ### pyproject.toml Configuration
80
567
 
81
- ## References
82
- - Python Software Foundation. "Python Developer's Guide." https://docs.python.org/3/ (accessed 2025-03-29).
83
- - Pytest. "pytest Documentation." https://docs.pytest.org/en/stable/ (accessed 2025-03-29).
568
+ ```toml
569
+ [build-system]
570
+ requires = ["hatchling"]
571
+ build-backend = "hatchling.build"
84
572
 
85
- ## Changelog
86
- - 2025-03-29: Input/output/failure response/reference information for each language has been specified.
573
+ [project]
574
+ name = "my-python-project"
575
+ version = "0.1.0"
576
+ description = "Modern Python project"
577
+ dependencies = [
578
+ "fastapi>=0.115.0",
579
+ "uvicorn[standard]>=0.32.0",
580
+ "pydantic>=2.9.0",
581
+ "sqlalchemy>=2.0.0",
582
+ "alembic>=1.13.0",
583
+ ]
87
584
 
88
- ## Works well with
585
+ [project.optional-dependencies]
586
+ dev = [
587
+ "pytest>=8.3.0",
588
+ "pytest-asyncio>=0.24.0",
589
+ "pytest-cov>=5.0.0",
590
+ "ruff>=0.7.0",
591
+ "mypy>=1.13.0",
592
+ "black>=24.0.0",
593
+ "pre-commit>=4.0.0",
594
+ ]
595
+ test = [
596
+ "pytest>=8.3.0",
597
+ "pytest-asyncio>=0.24.0",
598
+ "pytest-cov>=5.0.0",
599
+ "httpx>=0.28.0",
600
+ "testcontainers>=3.7.0",
601
+ ]
602
+
603
+ [tool.ruff]
604
+ line-length = 88
605
+ target-version = "py312"
606
+ select = ["E", "F", "W", "I", "N", "B", "C90", "UP"]
607
+
608
+ [tool.mypy]
609
+ python_version = "3.12"
610
+ warn_return_any = true
611
+ warn_unused_configs = true
612
+ disallow_untyped_defs = true
613
+ ```
614
+
615
+ ### Pre-commit Configuration
616
+
617
+ ```yaml
618
+ # .pre-commit-config.yaml
619
+ repos:
620
+ - repo: https://github.com/pre-commit/pre-commit-hooks
621
+ rev: v5.0.0
622
+ hooks:
623
+ - id: trailing-whitespace
624
+ - id: end-of-file-fixer
625
+ - id: check-yaml
626
+ - id: check-added-large-files
627
+ - id: check-merge-conflict
628
+
629
+ - repo: https://github.com/astral-sh/ruff-pre-commit
630
+ rev: v0.7.0
631
+ hooks:
632
+ - id: ruff
633
+ args: [--fix]
634
+ - id: ruff-format
635
+
636
+ - repo: https://github.com/pre-commit/mirrors-mypy
637
+ rev: v1.13.0
638
+ hooks:
639
+ - id: mypy
640
+ additional_dependencies: [types-all]
641
+
642
+ - repo: https://github.com/pycqa/bandit
643
+ rev: 1.7.6
644
+ hooks:
645
+ - id: bandit
646
+ args: [-r, src/]
647
+ ```
648
+
649
+ ### Docker Best Practices
650
+
651
+ ```dockerfile
652
+ # Multi-stage build
653
+ FROM python:3.13-slim as builder
654
+
655
+ WORKDIR /app
656
+ COPY pyproject.toml .
657
+ RUN pip install --no-cache-dir uv && \
658
+ uv pip install --no-deps -r <(uv pip compile pyproject.toml)
659
+
660
+ FROM python:3.13-slim as runtime
661
+
662
+ # Security best practices
663
+ RUN adduser --disabled-password --gecos '' appuser && \
664
+ mkdir -p /app && chown -R appuser:appuser /app
665
+
666
+ WORKDIR /app
667
+ COPY --from=builder /usr/local/lib/python3.13/site-packages /usr/local/lib/python3.13/site-packages
668
+ COPY --from=builder /usr/local/bin /usr/local/bin
669
+ COPY --chown=appuser:appuser . .
670
+
671
+ USER appuser
672
+ EXPOSE 8000
673
+
674
+ CMD ["uvicorn", "my_project.main:app", "--host", "0.0.0.0", "--port", "8000"]
675
+ ```
676
+
677
+ ## AI/ML Integration
678
+
679
+ ### Model Deployment with FastAPI
680
+
681
+ ```python
682
+ import torch
683
+ import numpy as np
684
+ from fastapi import FastAPI, File, UploadFile
685
+ from PIL import Image
686
+ import io
687
+
688
+ app = FastAPI()
689
+
690
+ # Load model at startup
691
+ model = None
692
+
693
+ @app.on_event("startup")
694
+ async def load_model():
695
+ global model
696
+ model = torch.load("model.pth")
697
+ model.eval()
698
+
699
+ @app.post("/predict")
700
+ async def predict(file: UploadFile = File(...)):
701
+ # Preprocess image
702
+ image = Image.open(io.BytesIO(await file.read()))
703
+ image = preprocess_image(image)
704
+
705
+ # Make prediction
706
+ with torch.no_grad():
707
+ tensor = torch.tensor(image).unsqueeze(0)
708
+ prediction = model(tensor)
709
+
710
+ return {
711
+ "prediction": prediction.tolist(),
712
+ "confidence": torch.softmax(prediction, dim=1).max().item()
713
+ }
714
+
715
+ def preprocess_image(image: Image.Image) -> np.ndarray:
716
+ # Image preprocessing logic
717
+ image = image.resize((224, 224))
718
+ image_array = np.array(image) / 255.0
719
+ return image_array.transpose(2, 0, 1)
720
+ ```
721
+
722
+ ### Data Pipeline with Polars
723
+
724
+ ```python
725
+ import polars as pl
726
+ from typing import Optional
727
+
728
+ class DataProcessor:
729
+ def __init__(self, data_path: str):
730
+ self.data_path = data_path
731
+ self.df: Optional[pl.DataFrame] = None
732
+
733
+ def load_data(self) -> None:
734
+ """Load data using high-performance polars"""
735
+ self.df = pl.read_parquet(self.data_path)
736
+
737
+ def process_data(self) -> pl.DataFrame:
738
+ """Process data with polars lazy evaluation"""
739
+ return (
740
+ self.df.lazy()
741
+ .filter(pl.col("value") > 0)
742
+ .group_by("category")
743
+ .agg([
744
+ pl.mean("value").alias("avg_value"),
745
+ pl.std("value").alias("std_value"),
746
+ pl.len().alias("count")
747
+ ])
748
+ .sort("avg_value", descending=True)
749
+ .collect()
750
+ )
751
+
752
+ def export_results(self, output_path: str) -> None:
753
+ """Export processed data"""
754
+ processed = self.process_data()
755
+ processed.write_csv(output_path)
756
+ ```
757
+
758
+ ---
89
759
 
90
- - alfred-trust-validation (coverage verification)
91
- - alfred-code-reviewer (Python-specific review)
92
- - alfred-debugger-pro (Python debugging)
760
+ **Created by**: MoAI Language Skill Factory
761
+ **Last Updated**: 2025-11-06
762
+ **Version**: 2.0.0
763
+ **Python Target**: 3.12+ with modern async and type features
93
764
 
94
- ## Best Practices
95
- - Enable automatic validation by matching your linter with the language's official style guide.
96
- - Fix test/build pipelines with reproducible commands in CI.
765
+ This skill provides comprehensive Python development guidance with 2025 best practices, covering everything from basic project setup to advanced AI/ML integration and production deployment patterns.