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,104 @@
1
+ {
2
+ "hooks": {
3
+ "timeout_manager": {
4
+ "global_timeout_ms": 5000,
5
+ "default_retry_count": 1,
6
+ "default_retry_delay_ms": 200,
7
+ "graceful_degradation": true
8
+ },
9
+ "hook_configs": {
10
+ "session_start": {
11
+ "policy": "normal",
12
+ "timeout_ms": 5000,
13
+ "retry_count": 1,
14
+ "retry_delay_ms": 200,
15
+ "graceful_degradation": true,
16
+ "memory_limit_mb": 100
17
+ },
18
+ "session_end": {
19
+ "policy": "normal",
20
+ "timeout_ms": 5000,
21
+ "retry_count": 1,
22
+ "retry_delay_ms": 500,
23
+ "graceful_degradation": true,
24
+ "memory_limit_mb": 150
25
+ },
26
+ "pre_tool": {
27
+ "policy": "fast",
28
+ "timeout_ms": 2000,
29
+ "retry_count": 1,
30
+ "retry_delay_ms": 100,
31
+ "graceful_degradation": true,
32
+ "memory_limit_mb": 50
33
+ }
34
+ },
35
+ "resources": {
36
+ "memory_limits": {
37
+ "default_mb": 100,
38
+ "max_mb": 1000
39
+ },
40
+ "workers": {
41
+ "default_max_workers": 4,
42
+ "max_max_workers": 8
43
+ }
44
+ },
45
+ "performance": {
46
+ "cache": {
47
+ "size_limit": 100,
48
+ "ttl_seconds": 300
49
+ },
50
+ "monitoring": {
51
+ "enabled": true,
52
+ "log_performance": false
53
+ }
54
+ }
55
+ },
56
+ "document_management": {
57
+ "enabled": true,
58
+ "validation": {
59
+ "block_violations": false
60
+ },
61
+ "root_whitelist": [
62
+ "README.md",
63
+ "LICENSE",
64
+ ".gitignore",
65
+ ".claude",
66
+ ".moai",
67
+ "pyproject.toml",
68
+ "src"
69
+ ],
70
+ "directories": {
71
+ "temp": {
72
+ "base": ".moai/temp/"
73
+ },
74
+ "scripts": {
75
+ "base": ".moai/scripts/"
76
+ },
77
+ "work": {
78
+ "base": ".moai/temp/work/"
79
+ },
80
+ "dev": {
81
+ "base": ".moai/scripts/dev/"
82
+ }
83
+ },
84
+ "file_patterns": {
85
+ "temp": {
86
+ "work": ["*.tmp", "*.temp", "*.bak", "*.log"],
87
+ "cache": ["*.cache", "*.cache.*"]
88
+ },
89
+ "scripts": {
90
+ "dev": ["*.sh", "*.py", "*.js", "*.ts"],
91
+ "utils": ["*.py", "*.sh"]
92
+ },
93
+ "work": {
94
+ "drafts": ["*.md", "*.txt"],
95
+ "notes": ["*.md", "*.txt", "*.rst"]
96
+ }
97
+ }
98
+ },
99
+ "auto_cleanup": {
100
+ "enabled": true,
101
+ "cleanup_days": 7,
102
+ "max_cache_size_mb": 100
103
+ }
104
+ }
@@ -0,0 +1,590 @@
1
+ #!/usr/bin/env python3
2
+ """Optimized Git Operations Manager
3
+
4
+ Provides efficient, thread-safe Git operations with connection pooling,
5
+ caching, and error handling to prevent performance bottlenecks and race conditions.
6
+
7
+ Features:
8
+ - Connection pooling for Git commands
9
+ - Intelligent caching with TTL
10
+ - Parallel execution with semaphore control
11
+ - Retry mechanisms for transient failures
12
+ - Comprehensive error handling and logging
13
+ - Cross-platform compatibility
14
+ """
15
+
16
+ import hashlib
17
+ import logging
18
+ import subprocess
19
+ import threading
20
+ import time
21
+ from concurrent.futures import Future, ThreadPoolExecutor
22
+ from contextlib import contextmanager
23
+ from dataclasses import dataclass, field
24
+ from datetime import datetime, timedelta
25
+ from enum import Enum
26
+ from pathlib import Path
27
+ from queue import Empty, Queue
28
+ from typing import Any, Callable, Dict, List, Optional, Union
29
+
30
+
31
+ class GitOperationType(Enum):
32
+ """Types of Git operations for caching and optimization"""
33
+
34
+ BRANCH = "branch"
35
+ COMMIT = "commit"
36
+ STATUS = "status"
37
+ LOG = "log"
38
+ DIFF = "diff"
39
+ REMOTE = "remote"
40
+ CONFIG = "config"
41
+
42
+
43
+ @dataclass
44
+ class GitCommand:
45
+ """Git command specification"""
46
+
47
+ operation_type: GitOperationType
48
+ args: List[str]
49
+ cache_ttl_seconds: int = 60
50
+ retry_count: int = 2
51
+ timeout_seconds: int = 10
52
+
53
+
54
+ @dataclass
55
+ class GitResult:
56
+ """Result of Git operation with metadata"""
57
+
58
+ success: bool
59
+ stdout: str = ""
60
+ stderr: str = ""
61
+ return_code: int = -1
62
+ execution_time: float = 0.0
63
+ cached: bool = False
64
+ cache_hit: bool = False
65
+ operation_type: Optional[GitOperationType] = None
66
+ command: List[str] = field(default_factory=list)
67
+
68
+
69
+ @dataclass
70
+ class CacheEntry:
71
+ """Cache entry for Git results"""
72
+
73
+ result: GitResult
74
+ timestamp: datetime
75
+ ttl: timedelta
76
+ hit_count: int = 0
77
+
78
+
79
+ class GitOperationError(Exception):
80
+ """Enhanced Git operation error with context"""
81
+
82
+ def __init__(
83
+ self,
84
+ message: str,
85
+ command: List[str] = None,
86
+ return_code: int = -1,
87
+ stderr: str = "",
88
+ execution_time: float = 0.0,
89
+ ):
90
+ super().__init__(message)
91
+ self.command = command or []
92
+ self.return_code = return_code
93
+ self.stderr = stderr
94
+ self.execution_time = execution_time
95
+
96
+
97
+ class GitOperationsManager:
98
+ """Optimized Git operations manager with connection pooling and caching
99
+
100
+ Features:
101
+ - Thread-safe execution with semaphore control
102
+ - Intelligent caching based on operation type
103
+ - Connection pooling to prevent resource contention
104
+ - Retry mechanisms for transient failures
105
+ - Performance monitoring and logging
106
+ """
107
+
108
+ def __init__(self, max_workers: int = 4, cache_size_limit: int = 100):
109
+ self._logger = logging.getLogger(__name__)
110
+
111
+ # Thread pool for parallel Git operations
112
+ self._executor = ThreadPoolExecutor(max_workers=max_workers, thread_name_prefix="git_ops")
113
+ self._semaphore = threading.Semaphore(max_workers) # Limit concurrent Git operations
114
+
115
+ # Cache management
116
+ self._cache: Dict[str, CacheEntry] = {}
117
+ self._cache_lock = threading.RLock()
118
+ self._cache_size_limit = cache_size_limit
119
+
120
+ # Performance tracking
121
+ self._operation_stats = {
122
+ "total_operations": 0,
123
+ "cache_hits": 0,
124
+ "cache_misses": 0,
125
+ "errors": 0,
126
+ "total_time": 0.0,
127
+ }
128
+ self._stats_lock = threading.Lock()
129
+
130
+ # Git command queue for sequential operations when needed
131
+ self._command_queue: "Queue[Any]" = Queue()
132
+ self._queue_processor_thread: Optional[threading.Thread] = None
133
+ self._queue_active = True
134
+
135
+ # Start queue processor thread
136
+ self._start_queue_processor()
137
+
138
+ self._logger.info(f"GitOperationsManager initialized with max_workers={max_workers}")
139
+
140
+ def _start_queue_processor(self) -> None:
141
+ """Start background thread to process queued commands"""
142
+
143
+ def process_queue():
144
+ while self._queue_active:
145
+ try:
146
+ # Wait for command with timeout
147
+ future: Future = self._command_queue.get(timeout=1.0)
148
+ try:
149
+ # Execute the command
150
+ command, callback = future
151
+ result = self._execute_git_command_unsafe(command)
152
+ if callback:
153
+ callback(result)
154
+ except Exception as e:
155
+ self._logger.error(f"Error processing queued command: {e}")
156
+ finally:
157
+ self._command_queue.task_done()
158
+ except Empty:
159
+ continue
160
+ except Exception as e:
161
+ self._logger.error(f"Queue processor error: {e}")
162
+
163
+ self._queue_processor_thread = threading.Thread(target=process_queue, daemon=True)
164
+ self._queue_processor_thread.start()
165
+
166
+ def _generate_cache_key(self, operation_type: GitOperationType, args: List[str]) -> str:
167
+ """Generate cache key for Git operation"""
168
+ # Include current working directory and branch for context-aware caching
169
+ try:
170
+ cwd = str(Path.cwd())
171
+ # Simple branch detection for cache key
172
+ branch_info = ""
173
+ if operation_type in [GitOperationType.STATUS, GitOperationType.DIFF]:
174
+ try:
175
+ result = subprocess.run(
176
+ ["git", "rev-parse", "--abbrev-ref", "HEAD"],
177
+ capture_output=True,
178
+ text=True,
179
+ timeout=2,
180
+ )
181
+ if result.returncode == 0:
182
+ branch_info = result.stdout.strip()
183
+ except Exception:
184
+ pass
185
+
186
+ key_data = f"{operation_type.value}:{args}:{cwd}:{branch_info}"
187
+ except Exception:
188
+ # Fallback to simple key
189
+ key_data = f"{operation_type.value}:{args}"
190
+
191
+ return hashlib.md5(key_data.encode()).hexdigest()
192
+
193
+ def _is_cache_valid(self, entry: CacheEntry) -> bool:
194
+ """Check if cache entry is still valid"""
195
+ return datetime.now() - entry.timestamp < entry.ttl
196
+
197
+ def _cleanup_cache(self) -> int:
198
+ """Clean up expired cache entries and enforce size limit"""
199
+ with self._cache_lock:
200
+ # Remove expired entries
201
+ expired_keys = [key for key, entry in self._cache.items() if not self._is_cache_valid(entry)]
202
+ for key in expired_keys:
203
+ del self._cache[key]
204
+
205
+ # Enforce size limit (remove least recently used)
206
+ if len(self._cache) > self._cache_size_limit:
207
+ # Sort by last access time (hit count as proxy)
208
+ sorted_items = sorted(self._cache.items(), key=lambda x: (x[1].hit_count, x[1].timestamp))
209
+ items_to_remove = len(self._cache) - self._cache_size_limit
210
+ for key, _ in sorted_items[:items_to_remove]:
211
+ del self._cache[key]
212
+
213
+ return len(expired_keys)
214
+
215
+ def _get_from_cache(self, cache_key: str) -> Optional[GitResult]:
216
+ """Get result from cache if valid"""
217
+ with self._cache_lock:
218
+ if cache_key in self._cache:
219
+ entry = self._cache[cache_key]
220
+ if self._is_cache_valid(entry):
221
+ entry.hit_count += 1
222
+ # Return a copy of the result
223
+ result = GitResult(
224
+ success=entry.result.success,
225
+ stdout=entry.result.stdout,
226
+ stderr=entry.result.stderr,
227
+ return_code=entry.result.return_code,
228
+ execution_time=entry.result.execution_time,
229
+ cached=True,
230
+ cache_hit=True,
231
+ operation_type=entry.result.operation_type,
232
+ command=entry.result.command.copy(),
233
+ )
234
+ return result
235
+ else:
236
+ # Remove expired entry
237
+ del self._cache[cache_key]
238
+
239
+ return None
240
+
241
+ def _store_in_cache(self, cache_key: str, result: GitResult, ttl: int) -> None:
242
+ """Store result in cache with TTL"""
243
+ with self._cache_lock:
244
+ self._cache[cache_key] = CacheEntry(result=result, timestamp=datetime.now(), ttl=timedelta(seconds=ttl))
245
+
246
+ # Cleanup if cache is getting large
247
+ if len(self._cache) > self._cache_size_limit * 0.8:
248
+ self._cleanup_cache()
249
+
250
+ def _execute_git_command_unsafe(self, command: GitCommand) -> GitResult:
251
+ """Execute Git command without semaphore control (internal use)"""
252
+ start_time = time.time()
253
+ full_command = ["git"] + command.args
254
+
255
+ try:
256
+ # Execute Git command
257
+ result = subprocess.run(
258
+ full_command,
259
+ capture_output=True,
260
+ text=True,
261
+ timeout=command.timeout_seconds,
262
+ cwd=Path.cwd(),
263
+ )
264
+
265
+ execution_time = time.time() - start_time
266
+
267
+ git_result = GitResult(
268
+ success=result.returncode == 0,
269
+ stdout=result.stdout.strip(),
270
+ stderr=result.stderr.strip(),
271
+ return_code=result.returncode,
272
+ execution_time=execution_time,
273
+ cached=False,
274
+ cache_hit=False,
275
+ operation_type=command.operation_type,
276
+ command=full_command.copy(),
277
+ )
278
+
279
+ # Update statistics
280
+ with self._stats_lock:
281
+ self._operation_stats["total_operations"] += 1
282
+ self._operation_stats["total_time"] += execution_time
283
+
284
+ if result.returncode != 0:
285
+ self._operation_stats["errors"] += 1
286
+
287
+ return git_result
288
+
289
+ except subprocess.TimeoutExpired:
290
+ execution_time = time.time() - start_time
291
+ error_msg = f"Git command timed out after {command.timeout_seconds}s: {' '.join(full_command)}"
292
+ self._logger.error(error_msg)
293
+
294
+ with self._stats_lock:
295
+ self._operation_stats["total_operations"] += 1
296
+ self._operation_stats["errors"] += 1
297
+
298
+ return GitResult(
299
+ success=False,
300
+ stderr=error_msg,
301
+ execution_time=execution_time,
302
+ operation_type=command.operation_type,
303
+ command=full_command.copy(),
304
+ )
305
+
306
+ except Exception as e:
307
+ execution_time = time.time() - start_time
308
+ error_msg = f"Git command failed: {e}"
309
+ self._logger.error(error_msg)
310
+
311
+ with self._stats_lock:
312
+ self._operation_stats["total_operations"] += 1
313
+ self._operation_stats["errors"] += 1
314
+
315
+ return GitResult(
316
+ success=False,
317
+ stderr=error_msg,
318
+ execution_time=execution_time,
319
+ operation_type=command.operation_type,
320
+ command=full_command.copy(),
321
+ )
322
+
323
+ def execute_git_command(self, command: Union[GitCommand, str], *args) -> GitResult:
324
+ """Execute Git command with caching and retry logic"""
325
+ # Convert string command to GitCommand
326
+ if isinstance(command, str):
327
+ command = GitCommand(
328
+ operation_type=GitOperationType.CONFIG, # Default
329
+ args=[command] + list(args),
330
+ )
331
+
332
+ # Check cache first
333
+ cache_key = self._generate_cache_key(command.operation_type, command.args)
334
+ cached_result = self._get_from_cache(cache_key)
335
+ if cached_result:
336
+ with self._stats_lock:
337
+ self._operation_stats["cache_hits"] += 1
338
+ return cached_result
339
+
340
+ with self._stats_lock:
341
+ self._operation_stats["cache_misses"] += 1
342
+
343
+ # Execute with retry logic
344
+ last_result = None
345
+ for attempt in range(command.retry_count + 1):
346
+ try:
347
+ with self._semaphore: # Limit concurrent Git operations
348
+ result = self._execute_git_command_unsafe(command)
349
+
350
+ if result.success:
351
+ # Cache successful result
352
+ self._store_in_cache(cache_key, result, command.cache_ttl_seconds)
353
+ return result
354
+ else:
355
+ last_result = result
356
+ if attempt < command.retry_count:
357
+ self._logger.warning(
358
+ f"Git command failed, retrying ({attempt + 1}/{command.retry_count}): {result.stderr}"
359
+ )
360
+ time.sleep(0.1 * (attempt + 1)) # Exponential backoff
361
+ else:
362
+ self._logger.error(f"Git command failed after retries: {result.stderr}")
363
+
364
+ except Exception as e:
365
+ self._logger.error(f"Git command exception (attempt {attempt + 1}): {e}")
366
+ if attempt == command.retry_count:
367
+ return GitResult(
368
+ success=False,
369
+ stderr=str(e),
370
+ operation_type=command.operation_type,
371
+ command=["git"] + command.args,
372
+ )
373
+ time.sleep(0.1 * (attempt + 1))
374
+
375
+ return last_result or GitResult(success=False, stderr="Unknown error")
376
+
377
+ def execute_parallel(self, commands: List[GitCommand]) -> List[GitResult]:
378
+ """Execute multiple Git commands in parallel with controlled concurrency"""
379
+ futures = []
380
+ results = []
381
+
382
+ # Submit all commands
383
+ for command in commands:
384
+ future = self._executor.submit(self.execute_git_command, command)
385
+ futures.append((future, command))
386
+
387
+ # Collect results as they complete
388
+ for future, command in futures:
389
+ try:
390
+ result = future.result(timeout=command.timeout_seconds + 5) # Extra buffer
391
+ results.append(result)
392
+ except Exception as e:
393
+ self._logger.error(f"Parallel Git command failed: {e}")
394
+ results.append(
395
+ GitResult(
396
+ success=False,
397
+ stderr=str(e),
398
+ operation_type=command.operation_type,
399
+ command=["git"] + command.args,
400
+ )
401
+ )
402
+
403
+ return results
404
+
405
+ def get_project_info(self, use_cache: bool = True) -> Dict[str, Any]:
406
+ """Get comprehensive project information efficiently"""
407
+ commands = [
408
+ GitCommand(
409
+ operation_type=GitOperationType.BRANCH,
410
+ args=["branch", "--show-current"],
411
+ cache_ttl_seconds=30,
412
+ timeout_seconds=5,
413
+ ),
414
+ GitCommand(
415
+ operation_type=GitOperationType.LOG,
416
+ args=["log", "--pretty=format:%h %s", "-1"],
417
+ cache_ttl_seconds=10,
418
+ timeout_seconds=5,
419
+ ),
420
+ GitCommand(
421
+ operation_type=GitOperationType.LOG,
422
+ args=["log", "--pretty=format:%ar", "-1"],
423
+ cache_ttl_seconds=10,
424
+ timeout_seconds=5,
425
+ ),
426
+ GitCommand(
427
+ operation_type=GitOperationType.STATUS,
428
+ args=["status", "--porcelain"],
429
+ cache_ttl_seconds=5, # Short TTL for status
430
+ timeout_seconds=5,
431
+ ),
432
+ ]
433
+
434
+ # If cache disabled, clear relevant entries
435
+ if not use_cache:
436
+ with self._cache_lock:
437
+ for command in commands:
438
+ cache_key = self._generate_cache_key(command.operation_type, command.args)
439
+ self._cache.pop(cache_key, None)
440
+
441
+ # Execute commands in parallel
442
+ results = self.execute_parallel(commands)
443
+
444
+ # Process results
445
+ project_info = {
446
+ "branch": "unknown",
447
+ "last_commit": "unknown",
448
+ "commit_time": "unknown",
449
+ "changes": 0,
450
+ "fetch_time": datetime.now().isoformat(),
451
+ }
452
+
453
+ if len(results) >= 4:
454
+ if results[0].success:
455
+ project_info["branch"] = results[0].stdout or "unknown"
456
+ if results[1].success:
457
+ project_info["last_commit"] = results[1].stdout or "unknown"
458
+ if results[2].success:
459
+ project_info["commit_time"] = results[2].stdout or "unknown"
460
+ if results[3].success:
461
+ changes_text = results[3].stdout.strip()
462
+ project_info["changes"] = len(changes_text.splitlines()) if changes_text else 0
463
+
464
+ return project_info
465
+
466
+ def queue_command(
467
+ self,
468
+ command: GitCommand,
469
+ callback: Optional[Callable[[GitResult], None]] = None,
470
+ ) -> None:
471
+ """Queue a Git command for background execution"""
472
+ try:
473
+ future = (command, callback)
474
+ self._command_queue.put(future, timeout=1.0)
475
+ except Exception as e:
476
+ self._logger.error(f"Failed to queue Git command: {e}")
477
+
478
+ def get_statistics(self) -> Dict[str, Any]:
479
+ """Get performance and cache statistics"""
480
+ with self._stats_lock, self._cache_lock:
481
+ return {
482
+ "operations": {
483
+ "total": self._operation_stats["total_operations"],
484
+ "cache_hits": self._operation_stats["cache_hits"],
485
+ "cache_misses": self._operation_stats["cache_misses"],
486
+ "cache_hit_rate": (
487
+ self._operation_stats["cache_hits"]
488
+ / (self._operation_stats["cache_hits"] + self._operation_stats["cache_misses"])
489
+ if (self._operation_stats["cache_hits"] + self._operation_stats["cache_misses"]) > 0
490
+ else 0
491
+ ),
492
+ "errors": self._operation_stats["errors"],
493
+ "average_execution_time": (
494
+ self._operation_stats["total_time"] / self._operation_stats["total_operations"]
495
+ if self._operation_stats["total_operations"] > 0
496
+ else 0
497
+ ),
498
+ },
499
+ "cache": {
500
+ "size": len(self._cache),
501
+ "size_limit": self._cache_size_limit,
502
+ "utilization": len(self._cache) / self._cache_size_limit,
503
+ },
504
+ "queue": {"pending": self._command_queue.qsize()},
505
+ }
506
+
507
+ def clear_cache(self, operation_type: Optional[GitOperationType] = None) -> int:
508
+ """Clear cache entries, optionally filtered by operation type"""
509
+ with self._cache_lock:
510
+ if operation_type is None:
511
+ # Clear all cache
512
+ count = len(self._cache)
513
+ self._cache.clear()
514
+ else:
515
+ # Clear specific operation type
516
+ keys_to_remove = [
517
+ key for key, entry in self._cache.items() if entry.result.operation_type == operation_type
518
+ ]
519
+ for key in keys_to_remove:
520
+ del self._cache[key]
521
+ count = len(keys_to_remove)
522
+
523
+ return count
524
+
525
+ def shutdown(self) -> None:
526
+ """Shutdown the Git operations manager"""
527
+ self._logger.info("Shutting down GitOperationsManager")
528
+
529
+ # Stop queue processor
530
+ self._queue_active = False
531
+ if self._queue_processor_thread and self._queue_processor_thread.is_alive():
532
+ self._queue_processor_thread.join(timeout=2.0)
533
+
534
+ # Shutdown thread pool
535
+ self._executor.shutdown(wait=True)
536
+
537
+ # Clear cache
538
+ with self._cache_lock:
539
+ self._cache.clear()
540
+
541
+ self._logger.info("GitOperationsManager shutdown complete")
542
+
543
+
544
+ # Global instance
545
+ _git_manager = None
546
+ _git_manager_lock = threading.Lock()
547
+
548
+
549
+ def get_git_manager() -> GitOperationsManager:
550
+ """Get the global Git operations manager instance"""
551
+ global _git_manager
552
+ if _git_manager is None:
553
+ with _git_manager_lock:
554
+ if _git_manager is None:
555
+ _git_manager = GitOperationsManager()
556
+ return _git_manager
557
+
558
+
559
+ @contextmanager
560
+ def git_operation_context(max_workers: int = 4):
561
+ """Context manager for Git operations with temporary manager"""
562
+ manager = GitOperationsManager(max_workers=max_workers)
563
+ try:
564
+ yield manager
565
+ finally:
566
+ manager.shutdown()
567
+
568
+
569
+ # Convenience functions for common operations
570
+ def get_git_info(use_cache: bool = True) -> Dict[str, Any]:
571
+ """Convenience function to get Git project information"""
572
+ manager = get_git_manager()
573
+ return manager.get_project_info(use_cache=use_cache)
574
+
575
+
576
+ def run_git_command(
577
+ operation_type: GitOperationType,
578
+ args: List[str],
579
+ cache_ttl: int = 60,
580
+ timeout: int = 10,
581
+ ) -> GitResult:
582
+ """Convenience function to run a single Git command"""
583
+ command = GitCommand(
584
+ operation_type=operation_type,
585
+ args=args,
586
+ cache_ttl_seconds=cache_ttl,
587
+ timeout_seconds=timeout,
588
+ )
589
+ manager = get_git_manager()
590
+ return manager.execute_git_command(command)