moai-adk 0.8.0__py3-none-any.whl → 0.34.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. moai_adk/__init__.py +2 -6
  2. moai_adk/__main__.py +136 -21
  3. moai_adk/cli/__init__.py +6 -2
  4. moai_adk/cli/commands/__init__.py +1 -4
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +17 -5
  7. moai_adk/cli/commands/init.py +118 -48
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +8 -13
  10. moai_adk/cli/commands/update.py +1978 -149
  11. moai_adk/cli/main.py +3 -2
  12. moai_adk/cli/prompts/init_prompts.py +144 -91
  13. moai_adk/cli/spec_status.py +263 -0
  14. moai_adk/cli/ui/__init__.py +44 -0
  15. moai_adk/cli/ui/progress.py +422 -0
  16. moai_adk/cli/ui/prompts.py +389 -0
  17. moai_adk/cli/ui/theme.py +129 -0
  18. moai_adk/cli/worktree/__init__.py +27 -0
  19. moai_adk/cli/worktree/__main__.py +31 -0
  20. moai_adk/cli/worktree/cli.py +683 -0
  21. moai_adk/cli/worktree/exceptions.py +89 -0
  22. moai_adk/cli/worktree/manager.py +493 -0
  23. moai_adk/cli/worktree/models.py +65 -0
  24. moai_adk/cli/worktree/registry.py +422 -0
  25. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  26. moai_adk/core/__init__.py +0 -1
  27. moai_adk/core/analysis/__init__.py +9 -0
  28. moai_adk/core/analysis/session_analyzer.py +400 -0
  29. moai_adk/core/claude_integration.py +393 -0
  30. moai_adk/core/command_helpers.py +270 -0
  31. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  32. moai_adk/core/config/__init__.py +6 -0
  33. moai_adk/core/config/auto_spec_config.py +340 -0
  34. moai_adk/core/config/migration.py +148 -17
  35. moai_adk/core/config/unified.py +436 -0
  36. moai_adk/core/context_manager.py +273 -0
  37. moai_adk/core/diagnostics/slash_commands.py +0 -1
  38. moai_adk/core/enterprise_features.py +1404 -0
  39. moai_adk/core/error_recovery_system.py +1902 -0
  40. moai_adk/core/event_driven_hook_system.py +1371 -0
  41. moai_adk/core/git/__init__.py +8 -1
  42. moai_adk/core/git/branch.py +0 -1
  43. moai_adk/core/git/branch_manager.py +2 -10
  44. moai_adk/core/git/checkpoint.py +1 -7
  45. moai_adk/core/git/commit.py +0 -1
  46. moai_adk/core/git/conflict_detector.py +413 -0
  47. moai_adk/core/git/event_detector.py +3 -5
  48. moai_adk/core/git/manager.py +91 -2
  49. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  50. moai_adk/core/input_validation_middleware.py +1006 -0
  51. moai_adk/core/integration/__init__.py +22 -0
  52. moai_adk/core/integration/engine.py +157 -0
  53. moai_adk/core/integration/integration_tester.py +226 -0
  54. moai_adk/core/integration/models.py +88 -0
  55. moai_adk/core/integration/utils.py +211 -0
  56. moai_adk/core/issue_creator.py +305 -0
  57. moai_adk/core/jit_context_loader.py +956 -0
  58. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  59. moai_adk/core/language_config.py +202 -0
  60. moai_adk/core/language_config_resolver.py +572 -0
  61. moai_adk/core/language_validator.py +543 -0
  62. moai_adk/core/mcp/setup.py +116 -0
  63. moai_adk/core/merge/__init__.py +9 -0
  64. moai_adk/core/merge/analyzer.py +481 -0
  65. moai_adk/core/migration/__init__.py +18 -0
  66. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  67. moai_adk/core/migration/backup_manager.py +277 -0
  68. moai_adk/core/migration/custom_element_scanner.py +358 -0
  69. moai_adk/core/migration/file_migrator.py +209 -0
  70. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  71. moai_adk/core/migration/selective_restorer.py +470 -0
  72. moai_adk/core/migration/template_utils.py +74 -0
  73. moai_adk/core/migration/user_selection_ui.py +338 -0
  74. moai_adk/core/migration/version_detector.py +139 -0
  75. moai_adk/core/migration/version_migrator.py +228 -0
  76. moai_adk/core/performance/__init__.py +6 -0
  77. moai_adk/core/performance/cache_system.py +316 -0
  78. moai_adk/core/performance/parallel_processor.py +116 -0
  79. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  80. moai_adk/core/project/__init__.py +0 -1
  81. moai_adk/core/project/backup_utils.py +2 -7
  82. moai_adk/core/project/checker.py +2 -4
  83. moai_adk/core/project/detector.py +189 -22
  84. moai_adk/core/project/initializer.py +218 -27
  85. moai_adk/core/project/phase_executor.py +416 -44
  86. moai_adk/core/project/validator.py +7 -32
  87. moai_adk/core/quality/__init__.py +1 -1
  88. moai_adk/core/quality/trust_checker.py +37 -101
  89. moai_adk/core/quality/validators/__init__.py +1 -1
  90. moai_adk/core/quality/validators/base_validator.py +1 -1
  91. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  92. moai_adk/core/robust_json_parser.py +611 -0
  93. moai_adk/core/rollback_manager.py +918 -0
  94. moai_adk/core/session_manager.py +651 -0
  95. moai_adk/core/skill_loading_system.py +579 -0
  96. moai_adk/core/spec/confidence_scoring.py +680 -0
  97. moai_adk/core/spec/ears_template_engine.py +1247 -0
  98. moai_adk/core/spec/quality_validator.py +687 -0
  99. moai_adk/core/spec_status_manager.py +478 -0
  100. moai_adk/core/template/__init__.py +0 -1
  101. moai_adk/core/template/backup.py +82 -17
  102. moai_adk/core/template/config.py +112 -40
  103. moai_adk/core/template/languages.py +0 -1
  104. moai_adk/core/template/merger.py +75 -26
  105. moai_adk/core/template/processor.py +750 -72
  106. moai_adk/core/template_engine.py +310 -0
  107. moai_adk/core/template_variable_synchronizer.py +417 -0
  108. moai_adk/core/unified_permission_manager.py +745 -0
  109. moai_adk/core/user_behavior_analytics.py +851 -0
  110. moai_adk/core/version_sync.py +429 -0
  111. moai_adk/foundation/__init__.py +56 -0
  112. moai_adk/foundation/backend.py +1027 -0
  113. moai_adk/foundation/database.py +1115 -0
  114. moai_adk/foundation/devops.py +1585 -0
  115. moai_adk/foundation/ears.py +431 -0
  116. moai_adk/foundation/frontend.py +870 -0
  117. moai_adk/foundation/git/commit_templates.py +557 -0
  118. moai_adk/foundation/git.py +376 -0
  119. moai_adk/foundation/langs.py +484 -0
  120. moai_adk/foundation/ml_ops.py +1162 -0
  121. moai_adk/foundation/testing.py +1524 -0
  122. moai_adk/foundation/trust/trust_principles.py +676 -0
  123. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  124. moai_adk/project/__init__.py +0 -0
  125. moai_adk/project/configuration.py +1084 -0
  126. moai_adk/project/documentation.py +566 -0
  127. moai_adk/project/schema.py +447 -0
  128. moai_adk/statusline/__init__.py +38 -0
  129. moai_adk/statusline/alfred_detector.py +105 -0
  130. moai_adk/statusline/config.py +376 -0
  131. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  132. moai_adk/statusline/git_collector.py +190 -0
  133. moai_adk/statusline/main.py +322 -0
  134. moai_adk/statusline/metrics_tracker.py +78 -0
  135. moai_adk/statusline/renderer.py +343 -0
  136. moai_adk/statusline/update_checker.py +129 -0
  137. moai_adk/statusline/version_reader.py +741 -0
  138. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +670 -0
  139. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  140. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  141. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  142. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  143. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  144. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  145. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  146. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  147. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  148. moai_adk/templates/.claude/agents/moai/expert-security.md +509 -0
  149. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  150. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  151. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  152. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  153. moai_adk/templates/.claude/agents/moai/manager-git.md +1020 -0
  154. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  155. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  156. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  157. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  158. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  159. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  160. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  161. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  164. moai_adk/templates/.claude/commands/moai/0-project.md +1384 -0
  165. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  166. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  167. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  168. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  169. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  170. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  171. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  172. moai_adk/templates/.claude/hooks/{alfred/core → moai/lib}/checkpoint.py +10 -37
  173. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  185. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  186. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1075 -0
  187. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  188. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  189. moai_adk/templates/.claude/settings.json +78 -50
  190. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +438 -0
  191. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  192. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  193. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  194. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  195. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  196. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  200. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +313 -283
  201. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
  202. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
  203. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +295 -95
  204. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
  205. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  206. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  207. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +532 -17
  210. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +470 -97
  211. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
  212. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
  213. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  214. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  215. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  216. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  217. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  221. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  222. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  223. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  224. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  230. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  231. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  232. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  233. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  280. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +618 -93
  281. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +446 -91
  282. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  283. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  284. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  285. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  286. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +346 -94
  287. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
  288. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
  289. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +352 -91
  290. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
  291. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
  292. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +344 -86
  293. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
  294. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
  295. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +617 -96
  296. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +364 -314
  297. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
  298. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
  299. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +545 -89
  300. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +650 -87
  301. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +341 -93
  302. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
  303. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
  304. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +463 -89
  305. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
  306. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
  307. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +486 -112
  308. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
  309. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
  310. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +333 -92
  311. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
  312. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
  313. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  314. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  315. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  316. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  318. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  319. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  320. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  321. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  331. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  332. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  333. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  334. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  338. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  339. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  340. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  341. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  342. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +290 -0
  343. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  344. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  345. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  346. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  347. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  348. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  349. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  350. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  351. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  352. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  353. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  354. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  355. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  356. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  357. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  358. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  359. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  360. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  361. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  362. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  363. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  364. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  365. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  366. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  367. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  368. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  369. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  370. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  371. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  372. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  373. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  374. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  375. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  376. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  377. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1462 -0
  378. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  379. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  380. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  381. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  382. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  383. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  384. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  385. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  386. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  387. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  388. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  389. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  390. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  391. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  417. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  418. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  419. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  420. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  421. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  422. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  423. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  424. moai_adk/templates/.git-hooks/pre-commit +128 -0
  425. moai_adk/templates/.git-hooks/pre-push +365 -0
  426. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  427. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  428. moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
  429. moai_adk/templates/.gitignore +194 -13
  430. moai_adk/templates/.mcp.json +31 -0
  431. moai_adk/templates/.moai/config/config.yaml +58 -0
  432. moai_adk/templates/.moai/config/questions/_schema.yaml +151 -0
  433. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  434. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  435. moai_adk/templates/.moai/config/questions/tab2-project.yaml +81 -0
  436. moai_adk/templates/.moai/config/questions/tab3-git.yaml +634 -0
  437. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +170 -0
  438. moai_adk/templates/.moai/config/questions/tab5-system.yaml +87 -0
  439. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  440. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  441. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  442. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  443. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  444. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  445. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  446. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  447. moai_adk/templates/CLAUDE.md +571 -244
  448. moai_adk/utils/__init__.py +24 -2
  449. moai_adk/utils/banner.py +9 -13
  450. moai_adk/utils/common.py +294 -0
  451. moai_adk/utils/link_validator.py +241 -0
  452. moai_adk/utils/logger.py +4 -9
  453. moai_adk/utils/safe_file_reader.py +206 -0
  454. moai_adk/utils/timeout.py +160 -0
  455. moai_adk/utils/toon_utils.py +256 -0
  456. moai_adk/version.py +22 -0
  457. moai_adk-0.34.0.dist-info/METADATA +2999 -0
  458. moai_adk-0.34.0.dist-info/RECORD +463 -0
  459. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/WHEEL +1 -1
  460. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/entry_points.txt +1 -0
  461. moai_adk/cli/commands/backup.py +0 -80
  462. moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
  463. moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
  464. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
  465. moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
  466. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
  467. moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
  468. moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
  469. moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
  470. moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
  471. moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
  472. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
  473. moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
  474. moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
  475. moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
  476. moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
  477. moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
  478. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  479. moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
  480. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
  481. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
  482. moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
  483. moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
  484. moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
  485. moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
  486. moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
  487. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
  488. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
  489. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
  490. moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
  491. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
  492. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
  493. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
  494. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
  495. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
  496. moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
  497. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
  498. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
  499. moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
  500. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
  501. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
  502. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
  503. moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
  504. moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
  505. moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
  506. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
  507. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
  508. moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
  509. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
  510. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
  511. moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
  512. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
  513. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
  514. moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
  515. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
  516. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
  517. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
  518. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
  519. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
  520. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
  521. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
  522. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
  523. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
  524. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
  525. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
  526. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
  527. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
  528. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
  529. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
  530. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
  531. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
  532. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
  533. moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
  534. moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
  535. moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
  536. moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
  537. moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
  538. moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
  539. moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
  540. moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
  541. moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
  542. moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
  543. moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
  544. moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
  545. moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
  546. moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
  547. moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
  548. moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
  549. moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
  550. moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
  551. moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
  552. moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
  553. moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
  554. moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
  555. moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
  556. moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
  557. moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
  558. moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
  559. moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
  560. moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
  561. moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
  562. moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
  563. moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
  564. moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
  565. moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
  566. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
  567. moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
  568. moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
  569. moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
  570. moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
  571. moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
  572. moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
  573. moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
  574. moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
  575. moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
  576. moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
  577. moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
  578. moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
  579. moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
  580. moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
  581. moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
  582. moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
  583. moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
  584. moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
  585. moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
  586. moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
  587. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
  588. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
  589. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
  590. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
  591. moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
  592. moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
  593. moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
  594. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
  595. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
  596. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
  597. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
  598. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
  599. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
  600. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
  601. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
  602. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
  603. moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
  604. moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
  605. moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
  606. moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
  607. moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
  608. moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
  609. moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
  610. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
  611. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
  612. moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
  613. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
  614. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
  615. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
  616. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
  617. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
  618. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
  619. moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
  620. moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
  621. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
  622. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
  623. moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
  624. moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
  625. moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
  626. moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
  627. moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
  628. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
  629. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
  630. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
  631. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
  632. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
  633. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
  634. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
  635. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
  636. moai_adk/templates/.moai/config.json +0 -96
  637. moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
  638. moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
  639. moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
  640. moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
  641. moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
  642. moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
  643. moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
  644. moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
  645. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  646. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  647. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  648. moai_adk/templates/.moai/project/product.md +0 -161
  649. moai_adk/templates/.moai/project/structure.md +0 -156
  650. moai_adk/templates/.moai/project/tech.md +0 -227
  651. moai_adk/templates/__init__.py +0 -2
  652. moai_adk-0.8.0.dist-info/METADATA +0 -1722
  653. moai_adk-0.8.0.dist-info/RECORD +0 -282
  654. {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,683 @@
1
+ """CLI commands for Git worktree management."""
2
+
3
+ from datetime import datetime
4
+ from pathlib import Path
5
+
6
+ import click
7
+ from rich.console import Console
8
+ from rich.table import Table
9
+
10
+ from moai_adk.cli.worktree.exceptions import (
11
+ GitOperationError,
12
+ MergeConflictError,
13
+ UncommittedChangesError,
14
+ WorktreeExistsError,
15
+ WorktreeNotFoundError,
16
+ )
17
+ from moai_adk.cli.worktree.manager import WorktreeManager
18
+
19
+ try:
20
+ from git import Repo
21
+ except ImportError:
22
+ Repo = None # type: ignore[misc,assignment]
23
+
24
+ # Initialize Rich console for formatted output
25
+ console = Console()
26
+
27
+
28
+ def get_manager(
29
+ repo_path: Path | None = None, worktree_root: Path | None = None, project_name: str | None = None
30
+ ) -> WorktreeManager: # noqa: E501
31
+ """Get or create a WorktreeManager instance.
32
+
33
+ Args:
34
+ repo_path: Path to Git repository. Defaults to current directory.
35
+ worktree_root: Root directory for worktrees. Auto-detects optimal location.
36
+ project_name: Project name for namespace organization. Auto-detected from repo if not provided.
37
+
38
+ Returns:
39
+ WorktreeManager instance.
40
+ """
41
+ # 1. Find Git repository if not specified
42
+ if repo_path is None:
43
+ current_path = Path.cwd()
44
+ # Walk up to find .git directory
45
+ while current_path != current_path.parent:
46
+ if (current_path / ".git").exists():
47
+ repo_path = current_path
48
+ break
49
+ current_path = current_path.parent
50
+
51
+ # Fallback to current directory if no .git found
52
+ if repo_path is None:
53
+ repo_path = Path.cwd()
54
+
55
+ # 2. Auto-detect worktree root if not specified
56
+ if worktree_root is None:
57
+ worktree_root = _detect_worktree_root(repo_path)
58
+
59
+ # 3. Auto-detect project_name if not specified
60
+ if project_name is None:
61
+ project_name = repo_path.name
62
+
63
+ return WorktreeManager(repo_path=repo_path, worktree_root=worktree_root, project_name=project_name)
64
+
65
+
66
+ def _detect_worktree_root(repo_path: Path) -> Path:
67
+ """Auto-detect the most appropriate worktree root directory.
68
+
69
+ Args:
70
+ repo_path: Path to the Git repository.
71
+
72
+ Returns:
73
+ Detected worktree root path.
74
+ """
75
+ # Special handling: if we're in a worktree, find the main repo
76
+ main_repo_path = _find_main_repository(repo_path)
77
+
78
+ # Strategy 1: Look for existing registry files in common locations
79
+ potential_roots = [
80
+ Path.home() / "moai" / "worktrees", # MoAI worktrees directory (highest priority)
81
+ Path.home() / "worktrees", # User's worktrees directory
82
+ Path.home() / "moai" / "worktrees" / main_repo_path.name, # MoAI project-specific
83
+ main_repo_path.parent / "worktrees", # Project-level worktrees
84
+ Path("/Users") / Path.home().name / "worktrees", # macOS user worktrees
85
+ Path.home() / "worktrees" / main_repo_path.name, # Alternative organization
86
+ ]
87
+
88
+ for root in potential_roots:
89
+ registry_path = root / ".moai-worktree-registry.json"
90
+ if registry_path.exists():
91
+ try:
92
+ with open(registry_path, "r") as f:
93
+ content = f.read().strip()
94
+ if content and content != "{}":
95
+ return root
96
+ except Exception:
97
+ pass
98
+
99
+ # Strategy 2: Check if there are actual worktrees in standard locations
100
+ for root in potential_roots:
101
+ if root.exists() and any(root.iterdir()):
102
+ # Look for directories that might be worktrees
103
+ for item in root.iterdir():
104
+ if item.is_dir() and (item / ".git").exists():
105
+ return root
106
+
107
+ # Strategy 3: Create a sensible default based on user's system
108
+ # Prefer ~/moai/worktrees for MoAI projects
109
+ default_root = Path.home() / "moai" / "worktrees"
110
+ if default_root.exists() or default_root.parent.exists():
111
+ return default_root
112
+
113
+ # Fallback to user worktrees
114
+ return Path.home() / "worktrees"
115
+
116
+
117
+ def _find_main_repository(start_path: Path) -> Path:
118
+ """Find the main Git repository (not a worktree).
119
+
120
+ Args:
121
+ start_path: Starting path to search from.
122
+
123
+ Returns:
124
+ Path to the main repository.
125
+ """
126
+ current_path = start_path
127
+
128
+ # Walk up to find the main repository (non-worktree)
129
+ while current_path != current_path.parent:
130
+ git_path = current_path / ".git"
131
+ if git_path.exists():
132
+ # Check if this is a worktree or main repo
133
+ if git_path.is_file():
134
+ # This is a worktree - read the main repo path
135
+ try:
136
+ with open(git_path, "r") as f:
137
+ for line in f:
138
+ if line.startswith("gitdir:"):
139
+ gitdir_path = line[8:].strip()
140
+ main_git_path = Path(current_path / gitdir_path).parent.parent
141
+ return main_git_path.resolve()
142
+ except Exception:
143
+ pass
144
+ elif (git_path / "objects").exists():
145
+ # This is the main repository
146
+ return current_path.resolve()
147
+
148
+ current_path = current_path.parent
149
+
150
+ # Fallback to the original path
151
+ return start_path.resolve()
152
+
153
+
154
+ @click.group()
155
+ def worktree() -> None:
156
+ """Manage Git worktrees for parallel SPEC development."""
157
+ pass
158
+
159
+
160
+ @worktree.command(name="new")
161
+ @click.argument("spec_id")
162
+ @click.option("--branch", "-b", default=None, help="Custom branch name")
163
+ @click.option("--base", default="main", help="Base branch to create from")
164
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
165
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
166
+ @click.option("--force", "-f", is_flag=True, help="Force creation even if worktree exists")
167
+ def new_worktree(
168
+ spec_id: str,
169
+ branch: str | None,
170
+ base: str,
171
+ repo: str | None,
172
+ worktree_root: str | None,
173
+ force: bool,
174
+ ) -> None:
175
+ """Create a new worktree for a SPEC.
176
+
177
+ Args:
178
+ spec_id: SPEC ID (e.g., SPEC-AUTH-001)
179
+ branch: Custom branch name (optional)
180
+ base: Base branch to create from (default: main)
181
+ repo: Repository path (optional)
182
+ worktree_root: Worktree root directory (optional)
183
+ """
184
+ try:
185
+ repo_path = Path(repo) if repo else Path.cwd()
186
+ wt_root = Path(worktree_root) if worktree_root else None
187
+
188
+ manager = get_manager(repo_path, wt_root)
189
+ info = manager.create(
190
+ spec_id=spec_id,
191
+ branch_name=branch,
192
+ base_branch=base,
193
+ force=force,
194
+ )
195
+
196
+ console.print("[green]✓[/green] Worktree created successfully")
197
+ console.print(f" SPEC ID: {info.spec_id}")
198
+ console.print(f" Path: {info.path}")
199
+ console.print(f" Branch: {info.branch}")
200
+ console.print(f" Status: {info.status}")
201
+ console.print()
202
+ console.print("[yellow]Next steps:[/yellow]")
203
+ console.print(f" moai-worktree go {spec_id} # Go to this worktree")
204
+
205
+ except WorktreeExistsError as e:
206
+ console.print(f"[red]✗[/red] {e}")
207
+ raise click.Abort()
208
+ except GitOperationError as e:
209
+ console.print(f"[red]✗[/red] {e}")
210
+ raise click.Abort()
211
+
212
+
213
+ @worktree.command(name="list")
214
+ @click.option(
215
+ "--format",
216
+ type=click.Choice(["table", "json"]),
217
+ default="table",
218
+ help="Output format",
219
+ )
220
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
221
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
222
+ def list_worktrees(format: str, repo: str | None, worktree_root: str | None) -> None:
223
+ """List all active worktrees.
224
+
225
+ Args:
226
+ format: Output format (table or json)
227
+ repo: Repository path (optional)
228
+ worktree_root: Worktree root directory (optional)
229
+ """
230
+ try:
231
+ repo_path = Path(repo) if repo else Path.cwd()
232
+ wt_root = Path(worktree_root) if worktree_root else None
233
+
234
+ manager = get_manager(repo_path, wt_root)
235
+ worktrees = manager.list()
236
+
237
+ if not worktrees:
238
+ console.print("[yellow]No worktrees found[/yellow]")
239
+ return
240
+
241
+ if format == "json":
242
+ data = [w.to_dict() for w in worktrees]
243
+ console.print_json(data=data)
244
+ else: # table
245
+ table = Table(title="Git Worktrees")
246
+ table.add_column("SPEC ID", style="cyan")
247
+ table.add_column("Branch", style="magenta")
248
+ table.add_column("Path", style="green")
249
+ table.add_column("Status", style="yellow")
250
+ table.add_column("Created", style="blue")
251
+
252
+ for info in worktrees:
253
+ created = datetime.fromisoformat(info.created_at.replace("Z", "+00:00"))
254
+ table.add_row(
255
+ info.spec_id,
256
+ info.branch,
257
+ str(info.path),
258
+ info.status,
259
+ created.strftime("%Y-%m-%d %H:%M:%S"),
260
+ )
261
+
262
+ console.print(table)
263
+
264
+ except Exception as e:
265
+ console.print(f"[red]✗[/red] Error listing worktrees: {e}")
266
+ raise click.Abort()
267
+
268
+
269
+ @worktree.command(name="go")
270
+ @click.argument("spec_id")
271
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
272
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
273
+ def go_worktree(spec_id: str, repo: str | None, worktree_root: str | None) -> None:
274
+ """Go to a worktree (opens new shell).
275
+
276
+ Args:
277
+ spec_id: SPEC ID to go to
278
+ repo: Repository path (optional)
279
+ worktree_root: Worktree root directory (optional)
280
+ """
281
+ try:
282
+ repo_path = Path(repo) if repo else Path.cwd()
283
+ wt_root = Path(worktree_root) if worktree_root else None
284
+
285
+ manager = get_manager(repo_path, wt_root)
286
+ info = manager.registry.get(spec_id, project_name=manager.project_name)
287
+
288
+ if not info:
289
+ console.print(f"[red]✗[/red] Worktree not found: {spec_id}")
290
+ raise click.Abort()
291
+
292
+ import os
293
+ import subprocess
294
+
295
+ shell = os.environ.get("SHELL", "/bin/bash")
296
+ console.print(f"[green]→[/green] Opening new shell in {info.path}")
297
+ subprocess.call([shell], cwd=str(info.path))
298
+
299
+ except Exception as e:
300
+ console.print(f"[red]✗[/red] Error: {e}")
301
+ raise click.Abort()
302
+
303
+
304
+ @worktree.command(name="remove")
305
+ @click.argument("spec_id")
306
+ @click.option("--force", "-f", is_flag=True, help="Force remove with uncommitted changes")
307
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
308
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
309
+ def remove_worktree(spec_id: str, force: bool, repo: str | None, worktree_root: str | None) -> None:
310
+ """Remove a worktree.
311
+
312
+ Args:
313
+ spec_id: SPEC ID to remove
314
+ force: Force removal even with uncommitted changes
315
+ repo: Repository path (optional)
316
+ worktree_root: Worktree root directory (optional)
317
+ """
318
+ try:
319
+ repo_path = Path(repo) if repo else Path.cwd()
320
+ wt_root = Path(worktree_root) if worktree_root else None
321
+
322
+ manager = get_manager(repo_path, wt_root)
323
+ manager.remove(spec_id=spec_id, force=force)
324
+
325
+ console.print(f"[green]✓[/green] Worktree removed: {spec_id}")
326
+
327
+ except WorktreeNotFoundError as e:
328
+ console.print(f"[red]✗[/red] {e}")
329
+ raise click.Abort()
330
+ except UncommittedChangesError as e:
331
+ console.print(f"[red]✗[/red] {e}")
332
+ raise click.Abort()
333
+ except GitOperationError as e:
334
+ console.print(f"[red]✗[/red] {e}")
335
+ raise click.Abort()
336
+
337
+
338
+ @worktree.command(name="status")
339
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
340
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
341
+ def status_worktrees(repo: str | None, worktree_root: str | None) -> None:
342
+ """Show worktree status and sync registry.
343
+
344
+ Args:
345
+ repo: Repository path (optional)
346
+ worktree_root: Worktree root directory (optional)
347
+ """
348
+ try:
349
+ repo_path = Path(repo) if repo else Path.cwd()
350
+ wt_root = Path(worktree_root) if worktree_root else None
351
+
352
+ manager = get_manager(repo_path, wt_root)
353
+
354
+ # Sync registry with Git
355
+ manager.registry.sync_with_git(manager.repo)
356
+
357
+ worktrees = manager.list()
358
+
359
+ if not worktrees:
360
+ console.print("[yellow]No worktrees found[/yellow]")
361
+ return
362
+
363
+ console.print(f"[cyan]Total worktrees: {len(worktrees)}[/cyan]")
364
+ console.print()
365
+
366
+ for info in worktrees:
367
+ status_color = "green" if info.status == "active" else "yellow"
368
+ console.print(f"[{status_color}]{info.spec_id}[/{status_color}]")
369
+ console.print(f" Branch: {info.branch}")
370
+ console.print(f" Path: {info.path}")
371
+ console.print(f" Status: {info.status}")
372
+ console.print()
373
+
374
+ except Exception as e:
375
+ console.print(f"[red]✗[/red] Error getting status: {e}")
376
+ raise click.Abort()
377
+
378
+
379
+ @worktree.command(name="sync")
380
+ @click.argument("spec_id", required=False)
381
+ @click.option("--base", default="main", help="Base branch to sync from")
382
+ @click.option("--rebase", is_flag=True, help="Use rebase instead of merge")
383
+ @click.option("--ff-only", is_flag=True, help="Only sync if fast-forward is possible")
384
+ @click.option("--all", "sync_all", is_flag=True, help="Sync all worktrees")
385
+ @click.option("--auto-resolve", is_flag=True, help="Automatically resolve conflicts")
386
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
387
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
388
+ def sync_worktree(
389
+ spec_id: str | None,
390
+ base: str,
391
+ rebase: bool,
392
+ ff_only: bool,
393
+ sync_all: bool,
394
+ auto_resolve: bool,
395
+ repo: str | None,
396
+ worktree_root: str | None,
397
+ ) -> None:
398
+ """Sync worktree with base branch.
399
+
400
+ Args:
401
+ spec_id: SPEC ID to sync (optional with --all)
402
+ base: Base branch to sync from (default: main)
403
+ rebase: Use rebase instead of merge
404
+ ff_only: Only sync if fast-forward is possible
405
+ sync_all: Sync all worktrees
406
+ auto_resolve: Automatically resolve conflicts
407
+ repo: Repository path (optional)
408
+ worktree_root: Worktree root directory (optional)
409
+ """
410
+ if not spec_id and not sync_all:
411
+ console.print("[red]✗[/red] Either SPEC_ID or --all option is required")
412
+ raise click.Abort()
413
+
414
+ if spec_id and sync_all:
415
+ console.print("[red]✗[/red] Cannot use both SPEC_ID and --all option")
416
+ raise click.Abort()
417
+
418
+ try:
419
+ repo_path = Path(repo) if repo else Path.cwd()
420
+ wt_root = Path(worktree_root) if worktree_root else None
421
+
422
+ manager = get_manager(repo_path, wt_root)
423
+
424
+ if sync_all:
425
+ # Sync all worktrees
426
+ worktrees = manager.list()
427
+ if not worktrees:
428
+ console.print("[yellow]No worktrees found to sync[/yellow]")
429
+ return
430
+
431
+ console.print(f"[cyan]Syncing {len(worktrees)} worktrees...[/cyan]")
432
+ success_count = 0
433
+ conflict_count = 0
434
+
435
+ for info in worktrees:
436
+ try:
437
+ manager.sync(
438
+ spec_id=info.spec_id,
439
+ base_branch=base,
440
+ rebase=rebase,
441
+ ff_only=ff_only,
442
+ auto_resolve=auto_resolve,
443
+ )
444
+ sync_method = "rebase" if rebase else ("fast-forward" if ff_only else "merge")
445
+ console.print(f"[green]✓[/green] {info.spec_id} ({sync_method})")
446
+ success_count += 1
447
+ except MergeConflictError:
448
+ if auto_resolve:
449
+ # Try to auto-resolve conflicts
450
+ try:
451
+ worktree_repo = Repo(info.path)
452
+ conflicted_files = [info.spec_id] # This will be handled by the method
453
+ manager.auto_resolve_conflicts(worktree_repo, info.spec_id, conflicted_files)
454
+ console.print(f"[yellow]![/yellow] {info.spec_id} (auto-resolved)")
455
+ success_count += 1
456
+ except Exception as e:
457
+ console.print(f"[red]✗[/red] {info.spec_id} (auto-resolve failed: {e})")
458
+ conflict_count += 1
459
+ else:
460
+ console.print(f"[red]✗[/red] {info.spec_id} (conflicts)")
461
+ conflict_count += 1
462
+ except Exception as e:
463
+ console.print(f"[red]✗[/red] {info.spec_id} (failed: {e})")
464
+ conflict_count += 1
465
+
466
+ console.print()
467
+ console.print(f"[green]Summary:[/green] {success_count} synced, {conflict_count} failed")
468
+ else:
469
+ # Sync single worktree
470
+ manager.sync(
471
+ spec_id=spec_id,
472
+ base_branch=base,
473
+ rebase=rebase,
474
+ ff_only=ff_only,
475
+ auto_resolve=auto_resolve,
476
+ )
477
+ sync_method = "rebase" if rebase else ("fast-forward" if ff_only else "merge")
478
+ console.print(f"[green]✓[/green] Worktree synced: {spec_id} ({sync_method})")
479
+
480
+ except WorktreeNotFoundError as e:
481
+ console.print(f"[red]✗[/red] {e}")
482
+ raise click.Abort()
483
+ except GitOperationError as e:
484
+ console.print(f"[red]✗[/red] {e}")
485
+ raise click.Abort()
486
+
487
+
488
+ @worktree.command(name="clean")
489
+ @click.option("--merged-only", is_flag=True, help="Only remove merged branch worktrees")
490
+ @click.option("--interactive", is_flag=True, help="Interactive cleanup with confirmation prompts")
491
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
492
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
493
+ def clean_worktrees(merged_only: bool, interactive: bool, repo: str | None, worktree_root: str | None) -> None:
494
+ """Remove worktrees for merged branches.
495
+
496
+ Args:
497
+ merged_only: Only remove worktrees for merged branches
498
+ interactive: Interactive cleanup with confirmation prompts
499
+ repo: Repository path (optional)
500
+ worktree_root: Worktree root directory (optional)
501
+ """
502
+ try:
503
+ repo_path = Path(repo) if repo else Path.cwd()
504
+ wt_root = Path(worktree_root) if worktree_root else None
505
+
506
+ manager = get_manager(repo_path, wt_root)
507
+
508
+ if merged_only:
509
+ # Only clean merged branches (default behavior)
510
+ cleaned = manager.clean_merged()
511
+ elif interactive:
512
+ # Interactive cleanup
513
+ worktrees = manager.list()
514
+ if not worktrees:
515
+ console.print("[yellow]No worktrees found to clean[/yellow]")
516
+ return
517
+
518
+ console.print(f"[cyan]Found {len(worktrees)} worktrees:[/cyan]")
519
+ for i, info in enumerate(worktrees, 1):
520
+ console.print(f" {i}. [cyan]{info.spec_id}[/cyan] ({info.branch}) - {info.status}")
521
+
522
+ console.print()
523
+ console.print("[yellow]Select worktrees to remove (comma-separated numbers, or 'all'):[/yellow]")
524
+
525
+ try:
526
+ selection = input("> ").strip()
527
+ if selection.lower() == "all":
528
+ cleaned = [info.spec_id for info in worktrees]
529
+ else:
530
+ indices = [int(x.strip()) for x in selection.split(",") if x.strip().isdigit()]
531
+ for idx in indices:
532
+ if 1 <= idx <= len(worktrees):
533
+ cleaned.append(worktrees[idx - 1].spec_id)
534
+ else:
535
+ console.print(f"[red]✗[/red] Invalid index: {idx}")
536
+ raise click.Abort()
537
+
538
+ if not cleaned:
539
+ console.print("[yellow]No worktrees selected for cleanup[/yellow]")
540
+ return
541
+
542
+ # Final confirmation
543
+ console.print(f"[yellow]About to remove {len(cleaned)} worktrees: {', '.join(cleaned)}[/yellow]")
544
+ if input("Continue? [y/N]: ").strip().lower() in ["y", "yes"]:
545
+ for spec_id in cleaned:
546
+ try:
547
+ manager.remove(spec_id, force=True)
548
+ except Exception as e:
549
+ console.print(f"[red]✗[/red] Failed to remove {spec_id}: {e}")
550
+
551
+ console.print("[green]✓[/green] Interactive cleanup completed")
552
+
553
+ except (ValueError, KeyboardInterrupt):
554
+ console.print("[yellow]Interactive cleanup cancelled[/yellow]")
555
+ raise click.Abort()
556
+ else:
557
+ # Default: clean all (legacy behavior)
558
+ worktrees = manager.list()
559
+ if not worktrees:
560
+ console.print("[yellow]No worktrees found to clean[/yellow]")
561
+ return
562
+
563
+ cleaned = [info.spec_id for info in worktrees]
564
+ console.print(
565
+ "[yellow]Removing all worktrees. "
566
+ "Use --merged-only for merged branches only "
567
+ "or --interactive for selective cleanup.[/yellow]"
568
+ )
569
+
570
+ for spec_id in cleaned:
571
+ try:
572
+ manager.remove(spec_id, force=True)
573
+ except Exception as e:
574
+ console.print(f"[red]✗[/red] Failed to remove {spec_id}: {e}")
575
+ cleaned.remove(spec_id)
576
+
577
+ if cleaned:
578
+ console.print(f"[green]✓[/green] Cleaned {len(cleaned)} worktree(s)")
579
+ for spec_id in cleaned:
580
+ console.print(f" - {spec_id}")
581
+ else:
582
+ console.print("[yellow]No worktrees were cleaned[/yellow]")
583
+
584
+ except Exception as e:
585
+ console.print(f"[red]✗[/red] Error cleaning worktrees: {e}")
586
+ raise click.Abort()
587
+
588
+
589
+ @worktree.command(name="recover")
590
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
591
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
592
+ def recover_worktrees(repo: str | None, worktree_root: str | None) -> None:
593
+ """Recover worktree registry from existing directories.
594
+
595
+ Scans the worktree root directory for existing worktrees and
596
+ re-registers them in the registry file.
597
+
598
+ Args:
599
+ repo: Repository path (optional)
600
+ worktree_root: Worktree root directory (optional)
601
+ """
602
+ try:
603
+ repo_path = Path(repo) if repo else Path.cwd()
604
+ wt_root = Path(worktree_root) if worktree_root else None
605
+
606
+ manager = get_manager(repo_path, wt_root)
607
+
608
+ console.print(f"[cyan]Scanning {manager.worktree_root} for worktrees...[/cyan]")
609
+ recovered = manager.registry.recover_from_disk()
610
+
611
+ if recovered > 0:
612
+ console.print(f"[green]✓[/green] Recovered {recovered} worktree(s)")
613
+
614
+ # Show recovered worktrees
615
+ worktrees = manager.list()
616
+ for info in worktrees:
617
+ if info.status == "recovered":
618
+ console.print(f" - {info.spec_id} ({info.branch})")
619
+ else:
620
+ console.print("[yellow]No new worktrees found to recover[/yellow]")
621
+
622
+ except Exception as e:
623
+ console.print(f"[red]✗[/red] Error recovering worktrees: {e}")
624
+ raise click.Abort()
625
+
626
+
627
+ @worktree.command(name="config")
628
+ @click.argument("key", required=False)
629
+ @click.argument("value", required=False)
630
+ @click.option("--repo", type=click.Path(), default=None, help="Repository path")
631
+ @click.option("--worktree-root", type=click.Path(), default=None, help="Worktree root directory")
632
+ def config_worktree(key: str | None, value: str | None, repo: str | None, worktree_root: str | None) -> None:
633
+ """Get or set worktree configuration.
634
+
635
+ Supported configuration keys:
636
+ - root: Worktree root directory
637
+ - auto-sync: Enable automatic sync on worktree creation
638
+
639
+ Args:
640
+ key: Configuration key
641
+ value: Configuration value (optional for get)
642
+ repo: Repository path (optional)
643
+ worktree_root: Worktree root directory (optional)
644
+ """
645
+ try:
646
+ repo_path = Path(repo) if repo else Path.cwd()
647
+ wt_root = Path(worktree_root) if worktree_root else None
648
+
649
+ manager = get_manager(repo_path, wt_root)
650
+
651
+ if key is None:
652
+ # No arguments - show all configuration
653
+ console.print("[cyan]Configuration:[/cyan]")
654
+ console.print(f" root: {manager.worktree_root}")
655
+ console.print(f" registry: {manager.registry.registry_path}")
656
+ console.print()
657
+ console.print("[yellow]Available commands:[/yellow]")
658
+ console.print(" moai-worktree config all # Show all config")
659
+ console.print(" moai-worktree config root # Show worktree root")
660
+ console.print(" moai-worktree config registry # Show registry path")
661
+ elif value is None:
662
+ # Get configuration
663
+ if key == "root":
664
+ console.print(f"[cyan]Worktree root:[/cyan] {manager.worktree_root}")
665
+ elif key == "registry":
666
+ console.print(f"[cyan]Registry path:[/cyan] {manager.registry.registry_path}")
667
+ elif key == "all":
668
+ console.print("[cyan]Configuration:[/cyan]")
669
+ console.print(f" root: {manager.worktree_root}")
670
+ console.print(f" registry: {manager.registry.registry_path}")
671
+ else:
672
+ console.print(f"[yellow]Unknown config key: {key}[/yellow]")
673
+ console.print("[yellow]Available keys: root, registry, all[/yellow]")
674
+ else:
675
+ # Set configuration (limited support)
676
+ if key == "root":
677
+ console.print("[yellow]Use --worktree-root option to change root directory[/yellow]")
678
+ else:
679
+ console.print(f"[yellow]Cannot set configuration key: {key}[/yellow]")
680
+
681
+ except Exception as e:
682
+ console.print(f"[red]✗[/red] Error: {e}")
683
+ raise click.Abort()