moai-adk 0.35.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 (502) hide show
  1. moai_adk/__init__.py +10 -0
  2. moai_adk/__main__.py +199 -0
  3. moai_adk/cli/__init__.py +6 -0
  4. moai_adk/cli/commands/__init__.py +17 -0
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +272 -0
  7. moai_adk/cli/commands/init.py +372 -0
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +104 -0
  10. moai_adk/cli/commands/update.py +2686 -0
  11. moai_adk/cli/main.py +13 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +219 -0
  14. moai_adk/cli/spec_status.py +263 -0
  15. moai_adk/cli/ui/__init__.py +44 -0
  16. moai_adk/cli/ui/progress.py +422 -0
  17. moai_adk/cli/ui/prompts.py +389 -0
  18. moai_adk/cli/ui/theme.py +129 -0
  19. moai_adk/cli/worktree/__init__.py +27 -0
  20. moai_adk/cli/worktree/__main__.py +31 -0
  21. moai_adk/cli/worktree/cli.py +683 -0
  22. moai_adk/cli/worktree/exceptions.py +89 -0
  23. moai_adk/cli/worktree/manager.py +493 -0
  24. moai_adk/cli/worktree/models.py +65 -0
  25. moai_adk/cli/worktree/registry.py +422 -0
  26. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  27. moai_adk/core/__init__.py +1 -0
  28. moai_adk/core/analysis/__init__.py +9 -0
  29. moai_adk/core/analysis/session_analyzer.py +400 -0
  30. moai_adk/core/claude_integration.py +393 -0
  31. moai_adk/core/command_helpers.py +270 -0
  32. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  33. moai_adk/core/config/__init__.py +19 -0
  34. moai_adk/core/config/auto_spec_config.py +340 -0
  35. moai_adk/core/config/migration.py +244 -0
  36. moai_adk/core/config/unified.py +436 -0
  37. moai_adk/core/context_manager.py +273 -0
  38. moai_adk/core/diagnostics/__init__.py +19 -0
  39. moai_adk/core/diagnostics/slash_commands.py +159 -0
  40. moai_adk/core/enterprise_features.py +1404 -0
  41. moai_adk/core/error_recovery_system.py +1902 -0
  42. moai_adk/core/event_driven_hook_system.py +1371 -0
  43. moai_adk/core/git/__init__.py +31 -0
  44. moai_adk/core/git/branch.py +25 -0
  45. moai_adk/core/git/branch_manager.py +129 -0
  46. moai_adk/core/git/checkpoint.py +134 -0
  47. moai_adk/core/git/commit.py +67 -0
  48. moai_adk/core/git/conflict_detector.py +413 -0
  49. moai_adk/core/git/event_detector.py +79 -0
  50. moai_adk/core/git/manager.py +216 -0
  51. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  52. moai_adk/core/input_validation_middleware.py +1006 -0
  53. moai_adk/core/integration/__init__.py +22 -0
  54. moai_adk/core/integration/engine.py +157 -0
  55. moai_adk/core/integration/integration_tester.py +226 -0
  56. moai_adk/core/integration/models.py +88 -0
  57. moai_adk/core/integration/utils.py +211 -0
  58. moai_adk/core/issue_creator.py +305 -0
  59. moai_adk/core/jit_context_loader.py +956 -0
  60. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  61. moai_adk/core/language_config.py +202 -0
  62. moai_adk/core/language_config_resolver.py +572 -0
  63. moai_adk/core/language_validator.py +543 -0
  64. moai_adk/core/mcp/setup.py +116 -0
  65. moai_adk/core/merge/__init__.py +9 -0
  66. moai_adk/core/merge/analyzer.py +605 -0
  67. moai_adk/core/migration/__init__.py +18 -0
  68. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  69. moai_adk/core/migration/backup_manager.py +277 -0
  70. moai_adk/core/migration/custom_element_scanner.py +358 -0
  71. moai_adk/core/migration/file_migrator.py +209 -0
  72. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  73. moai_adk/core/migration/selective_restorer.py +470 -0
  74. moai_adk/core/migration/template_utils.py +74 -0
  75. moai_adk/core/migration/user_selection_ui.py +338 -0
  76. moai_adk/core/migration/version_detector.py +139 -0
  77. moai_adk/core/migration/version_migrator.py +228 -0
  78. moai_adk/core/performance/__init__.py +6 -0
  79. moai_adk/core/performance/cache_system.py +316 -0
  80. moai_adk/core/performance/parallel_processor.py +116 -0
  81. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  82. moai_adk/core/project/__init__.py +1 -0
  83. moai_adk/core/project/backup_utils.py +70 -0
  84. moai_adk/core/project/checker.py +300 -0
  85. moai_adk/core/project/detector.py +293 -0
  86. moai_adk/core/project/initializer.py +387 -0
  87. moai_adk/core/project/phase_executor.py +716 -0
  88. moai_adk/core/project/validator.py +139 -0
  89. moai_adk/core/quality/__init__.py +6 -0
  90. moai_adk/core/quality/trust_checker.py +377 -0
  91. moai_adk/core/quality/validators/__init__.py +6 -0
  92. moai_adk/core/quality/validators/base_validator.py +19 -0
  93. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  94. moai_adk/core/robust_json_parser.py +611 -0
  95. moai_adk/core/rollback_manager.py +918 -0
  96. moai_adk/core/session_manager.py +651 -0
  97. moai_adk/core/skill_loading_system.py +579 -0
  98. moai_adk/core/spec/confidence_scoring.py +680 -0
  99. moai_adk/core/spec/ears_template_engine.py +1247 -0
  100. moai_adk/core/spec/quality_validator.py +687 -0
  101. moai_adk/core/spec_status_manager.py +478 -0
  102. moai_adk/core/template/__init__.py +7 -0
  103. moai_adk/core/template/backup.py +174 -0
  104. moai_adk/core/template/config.py +191 -0
  105. moai_adk/core/template/languages.py +43 -0
  106. moai_adk/core/template/merger.py +233 -0
  107. moai_adk/core/template/processor.py +1200 -0
  108. moai_adk/core/template_engine.py +310 -0
  109. moai_adk/core/template_variable_synchronizer.py +417 -0
  110. moai_adk/core/unified_permission_manager.py +745 -0
  111. moai_adk/core/user_behavior_analytics.py +851 -0
  112. moai_adk/core/version_sync.py +429 -0
  113. moai_adk/foundation/__init__.py +56 -0
  114. moai_adk/foundation/backend.py +1027 -0
  115. moai_adk/foundation/database.py +1115 -0
  116. moai_adk/foundation/devops.py +1585 -0
  117. moai_adk/foundation/ears.py +431 -0
  118. moai_adk/foundation/frontend.py +870 -0
  119. moai_adk/foundation/git/commit_templates.py +557 -0
  120. moai_adk/foundation/git.py +376 -0
  121. moai_adk/foundation/langs.py +484 -0
  122. moai_adk/foundation/ml_ops.py +1162 -0
  123. moai_adk/foundation/testing.py +1524 -0
  124. moai_adk/foundation/trust/trust_principles.py +676 -0
  125. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  126. moai_adk/project/__init__.py +0 -0
  127. moai_adk/project/configuration.py +1084 -0
  128. moai_adk/project/documentation.py +566 -0
  129. moai_adk/project/schema.py +447 -0
  130. moai_adk/statusline/__init__.py +38 -0
  131. moai_adk/statusline/alfred_detector.py +105 -0
  132. moai_adk/statusline/config.py +376 -0
  133. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  134. moai_adk/statusline/git_collector.py +190 -0
  135. moai_adk/statusline/main.py +322 -0
  136. moai_adk/statusline/metrics_tracker.py +78 -0
  137. moai_adk/statusline/renderer.py +343 -0
  138. moai_adk/statusline/update_checker.py +129 -0
  139. moai_adk/statusline/version_reader.py +741 -0
  140. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
  141. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  142. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  143. moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
  144. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  145. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  146. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  147. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  148. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  149. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  150. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  151. moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
  152. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  153. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  154. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  155. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  156. moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
  157. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  158. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  159. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  160. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  161. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  164. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  165. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  166. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  167. moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
  168. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  169. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  170. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  171. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  172. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  173. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  185. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  186. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  187. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  188. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  189. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
  190. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  191. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  192. moai_adk/templates/.claude/settings.json +172 -0
  193. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
  194. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  195. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  196. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  200. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  201. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  202. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  203. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  204. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  205. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
  206. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  207. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  210. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  211. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  212. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  213. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  214. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  215. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
  216. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  217. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  221. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  222. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  223. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  224. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  230. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  231. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  232. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  284. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
  285. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
  286. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  287. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  288. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  289. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  290. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
  291. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  292. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  293. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
  294. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  295. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
  297. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  298. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
  304. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
  305. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
  306. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  307. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  308. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
  309. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  310. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  311. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
  312. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  313. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  314. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
  315. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  316. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  318. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  319. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  320. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  321. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  331. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  332. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  333. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  334. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  338. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  339. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  340. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  341. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  342. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  343. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  344. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  345. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  346. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
  347. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  348. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  349. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  350. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  351. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  352. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  353. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  354. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  355. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  356. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  357. moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
  358. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
  359. moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
  360. moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
  361. moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
  362. moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
  363. moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
  364. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
  365. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
  366. moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
  367. moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
  368. moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
  369. moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
  370. moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
  371. moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
  372. moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
  373. moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
  374. moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
  375. moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
  376. moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
  377. moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
  378. moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
  379. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
  380. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
  381. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
  382. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
  383. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
  384. moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
  385. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
  386. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
  387. moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
  388. moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
  389. moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
  390. moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
  391. moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  433. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  458. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  459. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  460. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  461. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  462. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  463. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  464. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  465. moai_adk/templates/.git-hooks/pre-commit +128 -0
  466. moai_adk/templates/.git-hooks/pre-push +365 -0
  467. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  468. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  469. moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
  470. moai_adk/templates/.gitignore +222 -0
  471. moai_adk/templates/.mcp.json +13 -0
  472. moai_adk/templates/.moai/config/config.yaml +58 -0
  473. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  474. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  475. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  476. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  477. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  478. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
  479. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  480. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  481. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  482. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  483. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  484. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  485. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  486. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  487. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  488. moai_adk/templates/CLAUDE.md +642 -0
  489. moai_adk/utils/__init__.py +30 -0
  490. moai_adk/utils/banner.py +38 -0
  491. moai_adk/utils/common.py +294 -0
  492. moai_adk/utils/link_validator.py +241 -0
  493. moai_adk/utils/logger.py +147 -0
  494. moai_adk/utils/safe_file_reader.py +206 -0
  495. moai_adk/utils/timeout.py +160 -0
  496. moai_adk/utils/toon_utils.py +256 -0
  497. moai_adk/version.py +22 -0
  498. moai_adk-0.35.1.dist-info/METADATA +3018 -0
  499. moai_adk-0.35.1.dist-info/RECORD +502 -0
  500. moai_adk-0.35.1.dist-info/WHEEL +4 -0
  501. moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
  502. moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,579 @@
1
+ """
2
+ MoAI-ADK Skill Loading System
3
+
4
+ Formal skill loading architecture with validation, dependency management, and caching
5
+ for MoAI-ADK's modular documentation system.
6
+ """
7
+
8
+ import logging
9
+ import os
10
+ import re
11
+ import threading
12
+ from collections import OrderedDict
13
+ from dataclasses import dataclass, field
14
+ from datetime import datetime, timedelta
15
+ from typing import Any, Dict, List, Optional
16
+
17
+ import yaml
18
+
19
+ # Configure logging
20
+ logging.basicConfig(level=logging.INFO)
21
+ logger = logging.getLogger(__name__)
22
+
23
+
24
+ class SkillLoadingError(Exception):
25
+ """Base exception for skill loading errors"""
26
+
27
+ pass
28
+
29
+
30
+ class SkillNotFoundError(SkillLoadingError):
31
+ """Raised when skill file is not found"""
32
+
33
+ pass
34
+
35
+
36
+ class SkillValidationError(SkillLoadingError):
37
+ """Raised when skill validation fails"""
38
+
39
+ pass
40
+
41
+
42
+ class DependencyError(SkillLoadingError):
43
+ """Raised when skill dependencies cannot be resolved"""
44
+
45
+ pass
46
+
47
+
48
+ @dataclass
49
+ class SkillData:
50
+ """Data structure for loaded skills with metadata and content"""
51
+
52
+ name: str
53
+ frontmatter: Dict[str, Any]
54
+ content: str
55
+ loaded_at: datetime
56
+ applied_filters: List[str] = field(default_factory=list)
57
+
58
+ def get_capability(self, capability_name: str) -> Any:
59
+ """Get specific capability from skill content"""
60
+ return self.frontmatter.get("capabilities", {}).get(capability_name)
61
+
62
+ def supports_effort(self, effort: int) -> bool:
63
+ """Check if skill supports specific effort level"""
64
+ supported_efforts = self.frontmatter.get("supported_efforts", [1, 3, 5])
65
+ return effort in supported_efforts
66
+
67
+ def apply_filter(self, filter_type: str) -> None:
68
+ """Apply content filter based on effort level"""
69
+ if filter_type not in self.applied_filters:
70
+ self.content = self._filter_content(self.content, filter_type)
71
+ self.applied_filters.append(filter_type)
72
+
73
+ def _filter_content(self, content: str, filter_type: str) -> str:
74
+ """Filter content based on effort level"""
75
+ if filter_type == "basic":
76
+ # Keep only quick reference and basic patterns
77
+ lines = content.split("\n")
78
+ filtered_lines = []
79
+ in_basic_section = False
80
+
81
+ for line in lines:
82
+ if line.startswith("## Quick Reference") or line.startswith("### Core Patterns"):
83
+ in_basic_section = True
84
+ elif line.startswith("## ") and not line.startswith("## Quick Reference"):
85
+ in_basic_section = False
86
+
87
+ if in_basic_section or line.startswith("#"):
88
+ filtered_lines.append(line)
89
+
90
+ return "\n".join(filtered_lines)
91
+
92
+ elif filter_type == "comprehensive":
93
+ # Return full content
94
+ return content
95
+
96
+ else: # standard
97
+ # Filter out advanced sections
98
+ lines = content.split("\n")
99
+ filtered_lines = []
100
+ skip_section = False
101
+
102
+ for line in lines:
103
+ if line.startswith("## Advanced") or line.startswith("## Implementation Details"):
104
+ skip_section = True
105
+ elif line.startswith("## ") and not line.startswith("## Advanced"):
106
+ skip_section = False
107
+
108
+ if not skip_section:
109
+ filtered_lines.append(line)
110
+
111
+ return "\n".join(filtered_lines)
112
+
113
+ @classmethod
114
+ def get_empty_skill(cls, skill_name: str) -> "SkillData":
115
+ """Create empty fallback skill"""
116
+ return cls(
117
+ name=skill_name,
118
+ frontmatter={"name": skill_name, "status": "fallback"},
119
+ content=f"# Fallback Skill: {skill_name}\n\nThis skill failed to load. Using fallback mode.",
120
+ loaded_at=datetime.now(),
121
+ )
122
+
123
+
124
+ class LRUCache:
125
+ """Thread-safe LRU cache with TTL support"""
126
+
127
+ def __init__(self, maxsize: int = 100, ttl: int = 3600):
128
+ self.maxsize = maxsize
129
+ self.ttl = ttl # Time to live in seconds
130
+ self.cache: OrderedDict[str, tuple[SkillData, datetime]] = OrderedDict() # key -> (data, timestamp)
131
+ self.lock = threading.Lock()
132
+
133
+ def get(self, key: str) -> Optional[SkillData]:
134
+ """Get value from cache"""
135
+ with self.lock:
136
+ if key in self.cache:
137
+ data, timestamp = self.cache[key]
138
+ if datetime.now() - timestamp < timedelta(seconds=self.ttl):
139
+ # Move to end (most recently used)
140
+ self.cache.move_to_end(key)
141
+ return data
142
+ else:
143
+ # Expired, remove it
144
+ del self.cache[key]
145
+ return None
146
+
147
+ def set(self, key: str, value: SkillData) -> None:
148
+ """Set value in cache"""
149
+ with self.lock:
150
+ self.cache[key] = (value, datetime.now())
151
+ # Move to end (most recently used)
152
+ self.cache.move_to_end(key)
153
+
154
+ # Remove oldest if over maxsize
155
+ while len(self.cache) > self.maxsize:
156
+ self.cache.popitem(last=False)
157
+
158
+ def clear(self) -> None:
159
+ """Clear all cache entries"""
160
+ with self.lock:
161
+ self.cache.clear()
162
+
163
+ def keys(self) -> List[str]:
164
+ """Get all cache keys"""
165
+ with self.lock:
166
+ return list(self.cache.keys())
167
+
168
+
169
+ class SkillValidator:
170
+ """Validates skill names, metadata, and compatibility"""
171
+
172
+ def __init__(self, registry):
173
+ self.registry = registry
174
+ self.valid_skill_patterns = [
175
+ r"^moai-[a-z]+-[a-z-]+$", # Standard MoAI skills
176
+ r"^[a-z]+-[a-z-]+$", # Generic skills
177
+ ]
178
+
179
+ def validate_skill_name(self, skill_name: str) -> bool:
180
+ """Validate skill name format and existence"""
181
+ if not skill_name:
182
+ raise SkillValidationError("Skill name cannot be empty")
183
+
184
+ # Check against valid patterns
185
+ for pattern in self.valid_skill_patterns:
186
+ if re.match(pattern, skill_name):
187
+ break
188
+ else:
189
+ raise SkillValidationError(f"Invalid skill name format: {skill_name}")
190
+
191
+ # Check if skill exists in registry
192
+ if skill_name not in self.registry.skills:
193
+ raise SkillValidationError(f"Skill not found: {skill_name}")
194
+
195
+ return True
196
+
197
+ def validate_effort_parameter(self, skill_name: str, effort: int) -> bool:
198
+ """Validate effort parameter against skill requirements"""
199
+ metadata = self.registry.get_skill_metadata(skill_name)
200
+ if not metadata:
201
+ return False
202
+
203
+ # Validate effort range
204
+ if effort not in [1, 3, 5]:
205
+ raise SkillValidationError(f"Invalid effort level: {effort}. Must be 1, 3, or 5")
206
+
207
+ # Check if skill supports the requested effort level
208
+ supported_efforts = metadata.get("supported_efforts", [1, 3, 5])
209
+ if effort not in supported_efforts:
210
+ raise SkillValidationError(
211
+ f"Effort {effort} not supported by skill {skill_name}. Supported efforts: {supported_efforts}"
212
+ )
213
+
214
+ return True
215
+
216
+ def validate_dependencies(self, skill_name: str, loaded_skills: List[str]) -> bool:
217
+ """Validate skill dependencies against currently loaded skills"""
218
+ metadata = self.registry.get_skill_metadata(skill_name)
219
+ if not metadata:
220
+ return False
221
+
222
+ required_skills = metadata.get("requires", [])
223
+ missing_skills = [skill for skill in required_skills if skill not in loaded_skills]
224
+
225
+ if missing_skills:
226
+ raise DependencyError(f"Skill {skill_name} requires missing dependencies: {missing_skills}")
227
+
228
+ return True
229
+
230
+
231
+ class SkillRegistry:
232
+ """Central registry for all available skills with metadata"""
233
+
234
+ def __init__(self):
235
+ self.skills: Dict[str, Dict[str, Any]] = {}
236
+ self.dependencies: Dict[str, List[str]] = {}
237
+ self.compatibility_matrix: Dict[str, Dict[str, bool]] = {}
238
+ self._initialized = False
239
+
240
+ def initialize_from_filesystem(self, skill_paths: List[str]) -> None:
241
+ """Initialize registry by scanning filesystem for skills"""
242
+ if self._initialized:
243
+ return
244
+
245
+ for skill_path in skill_paths:
246
+ if os.path.exists(skill_path):
247
+ self._scan_directory(skill_path)
248
+
249
+ self._initialized = True
250
+ logger.info(f"Initialized registry with {len(self.skills)} skills")
251
+
252
+ def _scan_directory(self, directory: str) -> None:
253
+ """Scan directory for skill files"""
254
+ for root, dirs, files in os.walk(directory):
255
+ for file in files:
256
+ if file == "SKILL.md":
257
+ skill_path = os.path.join(root, file)
258
+ skill_name = self._extract_skill_name(skill_path)
259
+ if skill_name:
260
+ try:
261
+ metadata = self._parse_skill_metadata(skill_path)
262
+ self.register_skill(skill_name, metadata)
263
+ except Exception as e:
264
+ logger.warning(f"Failed to parse skill {skill_path}: {e}")
265
+
266
+ def _extract_skill_name(self, skill_path: str) -> Optional[str]:
267
+ """Extract skill name from file path"""
268
+ # Extract from path like: .claude/skills/moai-foundation-claude/SKILL.md
269
+ parts = skill_path.split(os.sep)
270
+ if "skills" in parts:
271
+ skills_idx = parts.index("skills")
272
+ if skills_idx + 1 < len(parts):
273
+ return parts[skills_idx + 1]
274
+ return None
275
+
276
+ def _parse_skill_metadata(self, skill_path: str) -> Dict[str, Any]:
277
+ """Parse skill metadata from SKILL.md file"""
278
+ with open(skill_path, "r", encoding="utf-8") as f:
279
+ content = f.read()
280
+
281
+ # Parse YAML frontmatter
282
+ if content.startswith("---"):
283
+ try:
284
+ _, frontmatter, content = content.split("---", 2)
285
+ metadata = yaml.safe_load(frontmatter.strip())
286
+ return metadata or {}
287
+ except Exception as e:
288
+ logger.warning(f"Failed to parse frontmatter for {skill_path}: {e}")
289
+
290
+ return {}
291
+
292
+ def register_skill(self, skill_name: str, metadata: Dict[str, Any]) -> None:
293
+ """Register a skill with its metadata"""
294
+ self.skills[skill_name] = metadata
295
+
296
+ # Extract dependencies
297
+ self.dependencies[skill_name] = metadata.get("requires", [])
298
+
299
+ # Initialize compatibility matrix
300
+ if skill_name not in self.compatibility_matrix:
301
+ self.compatibility_matrix[skill_name] = {}
302
+
303
+ def get_skill_metadata(self, skill_name: str) -> Optional[Dict[str, Any]]:
304
+ """Get skill metadata including dependencies"""
305
+ return self.skills.get(skill_name)
306
+
307
+ def check_compatibility(self, skill_name: str, other_skills: List[str]) -> bool:
308
+ """Check if skill is compatible with currently loaded skills"""
309
+ skill_compatibility = self.compatibility_matrix.get(skill_name, {})
310
+
311
+ for other_skill in other_skills:
312
+ if not skill_compatibility.get(other_skill, True):
313
+ return False
314
+
315
+ return True
316
+
317
+
318
+ class SkillLoader:
319
+ """Main skill loading implementation with caching and error handling"""
320
+
321
+ def __init__(self, skill_paths: Optional[List[str]] = None):
322
+ self.registry = SkillRegistry()
323
+ self.validator = SkillValidator(self.registry)
324
+ self.cache = LRUCache(maxsize=100, ttl=3600) # 1 hour TTL
325
+ self.loading_stack: List[str] = [] # Track loading order to prevent circular dependencies
326
+
327
+ # Initialize registry
328
+ default_paths = [
329
+ ".claude/skills",
330
+ "src/moai_adk/.claude/skills",
331
+ os.path.expanduser("~/.claude/skills"),
332
+ ]
333
+ self.registry.initialize_from_filesystem(skill_paths or default_paths)
334
+
335
+ def load_skill(self, skill_name: str, effort: Optional[int] = None, force_reload: bool = False) -> SkillData:
336
+ """Primary skill loading function with comprehensive validation"""
337
+ try:
338
+ # Check cache first (unless force_reload)
339
+ if not force_reload:
340
+ cached_skill = self.cache.get(skill_name)
341
+ if cached_skill:
342
+ return self._validate_cached_skill(cached_skill, effort)
343
+
344
+ # Prevent circular dependencies
345
+ if skill_name in self.loading_stack:
346
+ raise SkillLoadingError(f"Circular dependency detected: {skill_name}")
347
+
348
+ self.loading_stack.append(skill_name)
349
+
350
+ try:
351
+ # Validate skill name and existence
352
+ self.validator.validate_skill_name(skill_name)
353
+
354
+ # Validate effort parameter if provided
355
+ if effort is not None:
356
+ self.validator.validate_effort_parameter(skill_name, effort)
357
+
358
+ # Check dependencies
359
+ loaded_skills = list(self.cache.keys())
360
+ self.validator.validate_dependencies(skill_name, loaded_skills)
361
+
362
+ # Load skill data from file system
363
+ skill_data = self._load_skill_from_filesystem(skill_name)
364
+
365
+ # Apply effort parameter customization
366
+ if effort is not None:
367
+ skill_data = self._apply_effort_parameter(skill_data, effort)
368
+
369
+ # Cache the loaded skill
370
+ self.cache.set(skill_name, skill_data)
371
+
372
+ logger.info(f"Successfully loaded skill: {skill_name}")
373
+ return skill_data
374
+
375
+ finally:
376
+ self.loading_stack.pop()
377
+
378
+ except SkillLoadingError as e:
379
+ logger.error(f"Failed to load skill {skill_name}: {e}")
380
+ return self._get_fallback_skill(skill_name, effort)
381
+
382
+ def _validate_cached_skill(self, cached_skill: SkillData, effort: Optional[int] = None) -> SkillData:
383
+ """Validate cached skill against current effort parameter"""
384
+ if effort is not None and not cached_skill.supports_effort(effort):
385
+ logger.warning(f"Cached skill {cached_skill.name} doesn't support effort {effort}, reloading")
386
+ return self.load_skill(cached_skill.name, effort, force_reload=True)
387
+
388
+ return cached_skill
389
+
390
+ def _load_skill_from_filesystem(self, skill_name: str) -> SkillData:
391
+ """Load skill data from the file system"""
392
+ skill_path = self._get_skill_path(skill_name)
393
+
394
+ if not os.path.exists(skill_path):
395
+ raise SkillNotFoundError(f"Skill file not found: {skill_path}")
396
+
397
+ try:
398
+ with open(skill_path, "r", encoding="utf-8") as f:
399
+ content = f.read()
400
+
401
+ # Parse frontmatter and content
402
+ frontmatter, content = self._parse_skill_file(content)
403
+
404
+ return SkillData(
405
+ name=skill_name,
406
+ frontmatter=frontmatter,
407
+ content=content,
408
+ loaded_at=datetime.now(),
409
+ )
410
+
411
+ except Exception as e:
412
+ raise SkillLoadingError(f"Failed to parse skill file {skill_path}: {e}")
413
+
414
+ def _get_skill_path(self, skill_name: str) -> str:
415
+ """Get the file system path for a skill"""
416
+ possible_paths = [
417
+ f".claude/skills/{skill_name}/SKILL.md",
418
+ f"src/moai_adk/.claude/skills/{skill_name}/SKILL.md",
419
+ f"{os.path.expanduser('~')}/.claude/skills/{skill_name}/SKILL.md",
420
+ ]
421
+
422
+ for path in possible_paths:
423
+ if os.path.exists(path):
424
+ return path
425
+
426
+ # Return the first path even if it doesn't exist (for error messages)
427
+ return possible_paths[0]
428
+
429
+ def _parse_skill_file(self, content: str) -> tuple[Dict[str, Any], str]:
430
+ """Parse skill file into frontmatter and content"""
431
+ if content.startswith("---"):
432
+ try:
433
+ _, frontmatter, content = content.split("---", 2)
434
+ frontmatter_data = yaml.safe_load(frontmatter.strip())
435
+ return frontmatter_data or {}, content.strip()
436
+ except Exception as e:
437
+ logger.warning(f"Failed to parse frontmatter: {e}")
438
+
439
+ return {}, content
440
+
441
+ def _apply_effort_parameter(self, skill_data: SkillData, effort: int) -> SkillData:
442
+ """Apply effort parameter customization to skill data"""
443
+ # Customize skill behavior based on effort level
444
+ if effort == 1:
445
+ # Minimal effort: basic functionality only
446
+ skill_data.apply_filter("basic")
447
+ elif effort == 3:
448
+ # Standard effort: full functionality with moderate depth
449
+ skill_data.apply_filter("standard")
450
+ elif effort == 5:
451
+ # Deep effort: comprehensive functionality with maximum depth
452
+ skill_data.apply_filter("comprehensive")
453
+
454
+ return skill_data
455
+
456
+ def _get_fallback_skill(self, skill_name: str, effort: Optional[int] = None) -> SkillData:
457
+ """Get fallback skill when loading fails"""
458
+ fallback_map = {
459
+ "moai-foundation-core": "moai-toolkit-essentials",
460
+ "moai-lang-unified": "moai-lang-python",
461
+ "moai-domain-backend": "expert-backend",
462
+ "moai-domain-frontend": "expert-frontend",
463
+ }
464
+
465
+ fallback_name = fallback_map.get(skill_name, "moai-toolkit-essentials")
466
+
467
+ logger.warning(f"Using fallback skill {fallback_name} for {skill_name}")
468
+
469
+ try:
470
+ return self.load_skill(fallback_name, effort, force_reload=True)
471
+ except Exception:
472
+ # Ultimate fallback
473
+ return SkillData.get_empty_skill(skill_name)
474
+
475
+ def get_cache_stats(self) -> Dict[str, Any]:
476
+ """Get cache statistics for debugging"""
477
+ return {
478
+ "cached_skills": list(self.cache.keys()),
479
+ "cache_size": len(self.cache.keys()),
480
+ "registry_skills": len(self.registry.skills),
481
+ }
482
+
483
+
484
+ # Global skill loader instance
485
+ SKILL_LOADER = SkillLoader()
486
+
487
+
488
+ def load_skill(skill_name: str, effort: Optional[int] = None, force_reload: bool = False) -> SkillData:
489
+ """Public API for loading skills"""
490
+ return SKILL_LOADER.load_skill(skill_name, effort, force_reload)
491
+
492
+
493
+ def get_skill_cache_stats() -> Dict[str, Any]:
494
+ """Get skill loading system statistics"""
495
+ return SKILL_LOADER.get_cache_stats()
496
+
497
+
498
+ def clear_skill_cache() -> None:
499
+ """Clear all cached skills"""
500
+ SKILL_LOADER.cache.clear()
501
+ logger.info("Skill cache cleared")
502
+
503
+
504
+ # Enhanced Task function with automatic skill loading
505
+ def detect_required_skills(subagent_type: str, prompt: str) -> List[str]:
506
+ """Auto-detect required skills based on task parameters"""
507
+ skill_mapping = {
508
+ "expert-backend": ["moai-lang-unified", "moai-domain-backend"],
509
+ "expert-frontend": ["moai-lang-unified", "moai-domain-frontend"],
510
+ "manager-tdd": ["moai-workflow-testing", "moai-foundation-quality"],
511
+ "manager-spec": ["moai-foundation-claude", "moai-workflow-docs"],
512
+ "security-expert": ["moai-quality-security", "moai-foundation-context"],
513
+ "expert-devops": ["moai-system-universal", "moai-platform-baas"],
514
+ "builder-agent": ["moai-foundation-claude"],
515
+ "builder-skill": ["moai-foundation-claude"],
516
+ "mcp-context7": ["moai-connector-mcp"],
517
+ "mcp-sequential-thinking": ["moai-connector-mcp"],
518
+ }
519
+
520
+ # Base skills for all tasks
521
+ base_skills = ["moai-foundation-claude"]
522
+
523
+ # Add specific skills based on subagent_type
524
+ specific_skills = skill_mapping.get(subagent_type, [])
525
+
526
+ # Add skills detected from prompt content
527
+ prompt_skills = _detect_skills_from_prompt(prompt)
528
+
529
+ # Remove duplicates and return
530
+ all_skills = list(set(base_skills + specific_skills + prompt_skills))
531
+
532
+ logger.debug(f"Detected required skills for {subagent_type}: {all_skills}")
533
+ return all_skills
534
+
535
+
536
+ def _detect_skills_from_prompt(prompt: str) -> List[str]:
537
+ """Detect skills needed based on prompt content"""
538
+ prompt_lower = prompt.lower()
539
+ detected_skills = []
540
+
541
+ # Language detection
542
+ if any(lang in prompt_lower for lang in ["python", "fastapi", "django"]):
543
+ detected_skills.append("moai-lang-unified")
544
+
545
+ if any(lang in prompt_lower for lang in ["typescript", "react", "next.js", "frontend"]):
546
+ detected_skills.append("moai-lang-unified")
547
+
548
+ # Domain detection
549
+ if any(domain in prompt_lower for domain in ["api", "backend", "server"]):
550
+ detected_skills.append("moai-domain-backend")
551
+
552
+ if any(domain in prompt_lower for domain in ["ui", "frontend", "component"]):
553
+ detected_skills.append("moai-domain-frontend")
554
+
555
+ # Security detection
556
+ if any(sec in prompt_lower for sec in ["security", "auth", "vulnerability"]):
557
+ detected_skills.append("moai-quality-security")
558
+
559
+ return detected_skills
560
+
561
+
562
+ if __name__ == "__main__":
563
+ # Test skill loading system
564
+ print("Testing MoAI-ADK Skill Loading System")
565
+ print("=" * 50)
566
+
567
+ # Load a skill
568
+ try:
569
+ skill = load_skill("moai-foundation-claude", effort=3)
570
+ print(f"Loaded skill: {skill.name}")
571
+ print(f"Loaded at: {skill.loaded_at}")
572
+ print(f"Content length: {len(skill.content)} characters")
573
+ print(f"Applied filters: {skill.applied_filters}")
574
+ except Exception as e:
575
+ print(f"Error loading skill: {e}")
576
+
577
+ # Show cache stats
578
+ stats = get_skill_cache_stats()
579
+ print(f"\nCache stats: {stats}")