moai-adk 0.25.4__py3-none-any.whl → 0.32.8__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 (378) hide show
  1. moai_adk/__init__.py +2 -5
  2. moai_adk/__main__.py +114 -82
  3. moai_adk/cli/__init__.py +6 -1
  4. moai_adk/cli/commands/__init__.py +1 -3
  5. moai_adk/cli/commands/analyze.py +5 -16
  6. moai_adk/cli/commands/doctor.py +6 -18
  7. moai_adk/cli/commands/init.py +56 -125
  8. moai_adk/cli/commands/language.py +14 -35
  9. moai_adk/cli/commands/status.py +9 -15
  10. moai_adk/cli/commands/update.py +1555 -190
  11. moai_adk/cli/prompts/init_prompts.py +112 -56
  12. moai_adk/cli/spec_status.py +263 -0
  13. moai_adk/cli/ui/__init__.py +44 -0
  14. moai_adk/cli/ui/progress.py +422 -0
  15. moai_adk/cli/ui/prompts.py +389 -0
  16. moai_adk/cli/ui/theme.py +129 -0
  17. moai_adk/cli/worktree/__init__.py +27 -0
  18. moai_adk/cli/worktree/__main__.py +31 -0
  19. moai_adk/cli/worktree/cli.py +672 -0
  20. moai_adk/cli/worktree/exceptions.py +89 -0
  21. moai_adk/cli/worktree/manager.py +490 -0
  22. moai_adk/cli/worktree/models.py +65 -0
  23. moai_adk/cli/worktree/registry.py +128 -0
  24. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  25. moai_adk/core/analysis/session_analyzer.py +17 -56
  26. moai_adk/core/claude_integration.py +26 -54
  27. moai_adk/core/command_helpers.py +10 -10
  28. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  29. moai_adk/core/config/auto_spec_config.py +5 -11
  30. moai_adk/core/config/migration.py +19 -9
  31. moai_adk/core/config/unified.py +436 -0
  32. moai_adk/core/context_manager.py +6 -12
  33. moai_adk/core/enterprise_features.py +1404 -0
  34. moai_adk/core/error_recovery_system.py +725 -112
  35. moai_adk/core/event_driven_hook_system.py +1371 -0
  36. moai_adk/core/git/__init__.py +8 -0
  37. moai_adk/core/git/branch_manager.py +3 -11
  38. moai_adk/core/git/checkpoint.py +1 -3
  39. moai_adk/core/git/conflict_detector.py +413 -0
  40. moai_adk/core/git/manager.py +91 -1
  41. moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
  42. moai_adk/core/input_validation_middleware.py +1006 -0
  43. moai_adk/core/integration/engine.py +6 -18
  44. moai_adk/core/integration/integration_tester.py +10 -9
  45. moai_adk/core/integration/utils.py +1 -1
  46. moai_adk/core/issue_creator.py +10 -28
  47. moai_adk/core/jit_context_loader.py +956 -0
  48. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  49. moai_adk/core/language_config_resolver.py +485 -0
  50. moai_adk/core/language_validator.py +28 -41
  51. moai_adk/core/mcp/setup.py +15 -12
  52. moai_adk/core/merge/__init__.py +9 -0
  53. moai_adk/core/merge/analyzer.py +481 -0
  54. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  55. moai_adk/core/migration/backup_manager.py +78 -9
  56. moai_adk/core/migration/custom_element_scanner.py +358 -0
  57. moai_adk/core/migration/file_migrator.py +8 -17
  58. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  59. moai_adk/core/migration/selective_restorer.py +470 -0
  60. moai_adk/core/migration/template_utils.py +74 -0
  61. moai_adk/core/migration/user_selection_ui.py +338 -0
  62. moai_adk/core/migration/version_detector.py +6 -10
  63. moai_adk/core/migration/version_migrator.py +3 -3
  64. moai_adk/core/performance/cache_system.py +8 -10
  65. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  66. moai_adk/core/project/checker.py +2 -4
  67. moai_adk/core/project/detector.py +1 -3
  68. moai_adk/core/project/initializer.py +135 -23
  69. moai_adk/core/project/phase_executor.py +54 -81
  70. moai_adk/core/project/validator.py +6 -12
  71. moai_adk/core/quality/trust_checker.py +9 -27
  72. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  73. moai_adk/core/robust_json_parser.py +611 -0
  74. moai_adk/core/rollback_manager.py +73 -148
  75. moai_adk/core/session_manager.py +10 -26
  76. moai_adk/core/skill_loading_system.py +579 -0
  77. moai_adk/core/spec/confidence_scoring.py +31 -100
  78. moai_adk/core/spec/ears_template_engine.py +351 -286
  79. moai_adk/core/spec/quality_validator.py +35 -69
  80. moai_adk/core/spec_status_manager.py +64 -74
  81. moai_adk/core/template/backup.py +45 -20
  82. moai_adk/core/template/config.py +112 -39
  83. moai_adk/core/template/merger.py +11 -19
  84. moai_adk/core/template/processor.py +253 -149
  85. moai_adk/core/template_engine.py +73 -40
  86. moai_adk/core/template_variable_synchronizer.py +417 -0
  87. moai_adk/core/unified_permission_manager.py +745 -0
  88. moai_adk/core/user_behavior_analytics.py +851 -0
  89. moai_adk/core/version_sync.py +429 -0
  90. moai_adk/foundation/__init__.py +56 -0
  91. moai_adk/foundation/backend.py +1027 -0
  92. moai_adk/foundation/database.py +1115 -0
  93. moai_adk/foundation/devops.py +1585 -0
  94. moai_adk/foundation/ears.py +431 -0
  95. moai_adk/foundation/frontend.py +870 -0
  96. moai_adk/foundation/git/commit_templates.py +4 -12
  97. moai_adk/foundation/git.py +376 -0
  98. moai_adk/foundation/langs.py +484 -0
  99. moai_adk/foundation/ml_ops.py +1162 -0
  100. moai_adk/foundation/testing.py +1524 -0
  101. moai_adk/foundation/trust/trust_principles.py +23 -72
  102. moai_adk/foundation/trust/validation_checklist.py +57 -162
  103. moai_adk/project/__init__.py +0 -0
  104. moai_adk/project/configuration.py +1084 -0
  105. moai_adk/project/documentation.py +566 -0
  106. moai_adk/project/schema.py +447 -0
  107. moai_adk/statusline/alfred_detector.py +1 -3
  108. moai_adk/statusline/config.py +13 -4
  109. moai_adk/statusline/enhanced_output_style_detector.py +23 -15
  110. moai_adk/statusline/main.py +51 -15
  111. moai_adk/statusline/renderer.py +104 -48
  112. moai_adk/statusline/update_checker.py +3 -9
  113. moai_adk/statusline/version_reader.py +140 -46
  114. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
  115. moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
  116. moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
  117. moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
  118. moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
  119. moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
  120. moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
  121. moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
  122. moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
  123. moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
  124. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
  125. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
  126. moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
  127. moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
  128. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  129. moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
  130. moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
  131. moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
  132. moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
  133. moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
  134. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
  135. moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
  136. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
  137. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
  138. moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
  139. moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
  140. moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
  141. moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
  142. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  143. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  144. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  145. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  146. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  147. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  148. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  149. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  150. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  151. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  152. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  153. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  154. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  155. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  156. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  157. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  158. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  159. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  160. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
  161. moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
  162. moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
  163. moai_adk/templates/.claude/settings.json +172 -0
  164. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
  165. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  166. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  167. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  168. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  169. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  170. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
  171. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
  172. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  173. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  174. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  175. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  176. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
  177. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
  178. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  179. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  180. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  181. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
  182. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  183. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  184. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  185. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
  186. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  187. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  188. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  189. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  190. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  191. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  192. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
  193. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  194. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  195. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  196. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  197. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  198. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  199. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  200. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  201. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  202. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  203. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  204. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  205. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  206. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  207. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
  208. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
  209. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  210. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
  211. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  212. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  213. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  214. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  215. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  216. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  217. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  218. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  219. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
  220. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  221. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  222. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  223. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  224. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  225. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  226. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  227. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  228. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  229. moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
  230. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
  231. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
  232. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
  233. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
  234. moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
  235. moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
  236. moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
  237. moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
  238. moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
  239. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
  240. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  241. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  242. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  243. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  244. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
  245. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  246. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  247. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  248. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  249. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  250. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  251. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  252. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  253. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  254. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  255. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
  256. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  257. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  258. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  259. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  260. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  261. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  262. moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
  263. moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
  264. moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
  265. moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
  266. moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
  267. moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
  268. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
  269. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  270. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  271. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  272. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
  273. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  274. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  275. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  276. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  277. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  278. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
  279. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  280. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  281. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  282. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  283. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  284. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  285. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  286. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  287. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  288. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  289. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  290. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
  291. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  292. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  293. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  294. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
  295. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  296. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  297. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  298. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  299. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  300. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  301. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
  302. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  303. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  304. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  305. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  306. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
  307. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  308. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  309. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  310. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  311. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  312. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  313. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  314. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  315. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  316. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  317. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  318. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  319. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  320. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  321. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  322. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  323. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
  324. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  325. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  326. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  327. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  328. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  329. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  330. moai_adk/templates/.git-hooks/pre-commit +103 -41
  331. moai_adk/templates/.git-hooks/pre-push +116 -21
  332. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  333. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  334. moai_adk/templates/.gitignore +184 -44
  335. moai_adk/templates/.mcp.json +7 -9
  336. moai_adk/templates/.moai/cache/personalization.json +10 -0
  337. moai_adk/templates/.moai/config/config.yaml +344 -0
  338. moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
  339. moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
  340. moai_adk/templates/.moai/config/presets/team.yaml +33 -0
  341. moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
  342. moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
  343. moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
  344. moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
  345. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
  346. moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
  347. moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
  348. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  349. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  350. moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
  351. moai_adk/templates/.moai/config/sections/system.yaml +14 -0
  352. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  353. moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
  354. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  355. moai_adk/templates/CLAUDE.md +382 -501
  356. moai_adk/utils/__init__.py +24 -1
  357. moai_adk/utils/banner.py +7 -10
  358. moai_adk/utils/common.py +16 -30
  359. moai_adk/utils/link_validator.py +4 -12
  360. moai_adk/utils/safe_file_reader.py +2 -6
  361. moai_adk/utils/timeout.py +160 -0
  362. moai_adk/utils/toon_utils.py +256 -0
  363. moai_adk/version.py +22 -0
  364. moai_adk-0.32.8.dist-info/METADATA +2478 -0
  365. moai_adk-0.32.8.dist-info/RECORD +396 -0
  366. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
  367. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
  368. moai_adk/cli/commands/backup.py +0 -82
  369. moai_adk/cli/commands/improve_user_experience.py +0 -348
  370. moai_adk/cli/commands/migrate.py +0 -158
  371. moai_adk/cli/commands/validate_links.py +0 -118
  372. moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
  373. moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
  374. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
  375. moai_adk/utils/user_experience.py +0 -531
  376. moai_adk-0.25.4.dist-info/METADATA +0 -2279
  377. moai_adk-0.25.4.dist-info/RECORD +0 -112
  378. {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,447 @@
1
+ """
2
+ Tab schema v3.0.0 definition and loading
3
+
4
+ Defines the 3-tab configuration schema with:
5
+ - Tab 1: Quick Start (10 questions in 4 batches)
6
+ - Tab 2: Documentation (1-2 questions, conditional)
7
+ - Tab 3: Git Automation (0-4 questions, conditional based on mode)
8
+ """
9
+
10
+ from typing import Any, Dict
11
+
12
+
13
+ def load_tab_schema() -> Dict[str, Any]:
14
+ """Load and return the tab schema v3.0.0"""
15
+ return {
16
+ "version": "3.0.0",
17
+ "tabs": [
18
+ _create_tab1_quick_start(),
19
+ _create_tab2_documentation(),
20
+ _create_tab3_git_automation(),
21
+ ],
22
+ }
23
+
24
+
25
+ def _create_tab1_quick_start() -> Dict[str, Any]:
26
+ """
27
+ Tab 1: Quick Start
28
+ 4 batches, 10 questions total
29
+ """
30
+ return {
31
+ "id": "tab_1_quick_start",
32
+ "label": "Essential Setup",
33
+ "description": "Configure project basics",
34
+ "batches": [
35
+ # Batch 1.1: Identity & Language (3 questions)
36
+ {
37
+ "id": "batch_1_1_identity",
38
+ "header": "Identity",
39
+ "batch_number": 1,
40
+ "total_batches": 4,
41
+ "questions": [
42
+ {
43
+ "id": "user_name",
44
+ "question": "What name should Alfred use?",
45
+ "type": "text_input",
46
+ "required": True,
47
+ "smart_default": "User",
48
+ "options": [
49
+ {"label": "Enter Name", "value": "custom"},
50
+ {"label": "Use Default", "value": "default"},
51
+ ],
52
+ },
53
+ {
54
+ "id": "conversation_language",
55
+ "question": "Conversation language?",
56
+ "type": "select_single",
57
+ "required": True,
58
+ "options": [
59
+ {
60
+ "label": "Korean (ko)",
61
+ "value": "ko",
62
+ "description": "Korean language",
63
+ },
64
+ {
65
+ "label": "English (en)",
66
+ "value": "en",
67
+ "description": "English language",
68
+ },
69
+ {
70
+ "label": "Japanese (ja)",
71
+ "value": "ja",
72
+ "description": "Japanese language",
73
+ },
74
+ {
75
+ "label": "Chinese (zh)",
76
+ "value": "zh",
77
+ "description": "Chinese language",
78
+ },
79
+ ],
80
+ },
81
+ {
82
+ "id": "agent_prompt_language",
83
+ "question": "Agent prompt language?",
84
+ "type": "select_single",
85
+ "required": True,
86
+ "smart_default": "en",
87
+ "options": [
88
+ {
89
+ "label": "English",
90
+ "value": "en",
91
+ "description": "Recommended for best results",
92
+ },
93
+ {
94
+ "label": "Korean",
95
+ "value": "ko",
96
+ "description": "Korean language",
97
+ },
98
+ ],
99
+ },
100
+ ],
101
+ },
102
+ # Batch 1.2: Project Basics (3 questions)
103
+ {
104
+ "id": "batch_1_2_project_basics",
105
+ "header": "Project",
106
+ "batch_number": 2,
107
+ "total_batches": 4,
108
+ "questions": [
109
+ {
110
+ "id": "project_name",
111
+ "question": "Project Name?",
112
+ "type": "text_input",
113
+ "required": True,
114
+ "smart_default": "my-project",
115
+ "options": [
116
+ {"label": "Enter Name", "value": "custom"},
117
+ {"label": "Use Default", "value": "default"},
118
+ ],
119
+ },
120
+ {
121
+ "id": "github_profile_name",
122
+ "question": "GitHub Profile Name? (e.g., @GoosLab)",
123
+ "type": "text_input",
124
+ "required": False,
125
+ "smart_default": "",
126
+ "options": [
127
+ {"label": "Enter GitHub Profile", "value": "custom"},
128
+ {"label": "Skip (set later)", "value": "skip"},
129
+ ],
130
+ },
131
+ {
132
+ "id": "project_description",
133
+ "question": "Project Description?",
134
+ "type": "text_input",
135
+ "required": False,
136
+ "smart_default": "",
137
+ "options": [
138
+ {"label": "Enter Description", "value": "custom"},
139
+ {"label": "Skip", "value": "skip"},
140
+ ],
141
+ },
142
+ ],
143
+ },
144
+ # Batch 1.3: Development Mode (2 questions)
145
+ {
146
+ "id": "batch_1_3_development_mode",
147
+ "header": "Development",
148
+ "batch_number": 3,
149
+ "total_batches": 4,
150
+ "questions": [
151
+ {
152
+ "id": "git_strategy_mode",
153
+ "question": "Git workflow mode?",
154
+ "type": "select_single",
155
+ "required": True,
156
+ "options": [
157
+ {
158
+ "label": "Personal",
159
+ "value": "personal",
160
+ "description": "Solo development",
161
+ },
162
+ {
163
+ "label": "Team",
164
+ "value": "team",
165
+ "description": "Team collaboration",
166
+ },
167
+ {
168
+ "label": "Hybrid",
169
+ "value": "hybrid",
170
+ "description": "Solo + Team flexible",
171
+ },
172
+ ],
173
+ },
174
+ {
175
+ "id": "git_strategy_workflow",
176
+ "question": "Branching workflow type?",
177
+ "type": "select_single",
178
+ "required": True,
179
+ "conditional_mapping": {
180
+ "personal": ["github-flow", "trunk-based"],
181
+ "team": ["git-flow", "github-flow"],
182
+ "hybrid": ["github-flow", "git-flow"],
183
+ },
184
+ "smart_default_mapping": {
185
+ "personal": "github-flow",
186
+ "team": "git-flow",
187
+ "hybrid": "github-flow",
188
+ },
189
+ "options": [
190
+ {
191
+ "label": "GitHub Flow",
192
+ "value": "github-flow",
193
+ "description": "Simple flow",
194
+ },
195
+ {
196
+ "label": "Git Flow",
197
+ "value": "git-flow",
198
+ "description": "Complex flow",
199
+ },
200
+ {
201
+ "label": "Trunk-Based",
202
+ "value": "trunk-based",
203
+ "description": "Continuous delivery",
204
+ },
205
+ ],
206
+ },
207
+ ],
208
+ },
209
+ # Batch 1.4: Quality Standards (2 questions)
210
+ {
211
+ "id": "batch_1_4_quality_standards",
212
+ "header": "Quality",
213
+ "batch_number": 4,
214
+ "total_batches": 4,
215
+ "questions": [
216
+ {
217
+ "id": "test_coverage_target",
218
+ "question": "Test coverage target?",
219
+ "type": "number_input",
220
+ "required": True,
221
+ "smart_default": 90,
222
+ "min": 0,
223
+ "max": 100,
224
+ "options": [],
225
+ },
226
+ {
227
+ "id": "enforce_tdd",
228
+ "question": "Enforce TDD?",
229
+ "type": "select_single",
230
+ "required": True,
231
+ "smart_default": True,
232
+ "options": [
233
+ {
234
+ "label": "Yes",
235
+ "value": True,
236
+ "description": "Strict TDD",
237
+ },
238
+ {
239
+ "label": "No",
240
+ "value": False,
241
+ "description": "Optional TDD",
242
+ },
243
+ ],
244
+ },
245
+ ],
246
+ },
247
+ ],
248
+ }
249
+
250
+
251
+ def _create_tab2_documentation() -> Dict[str, Any]:
252
+ """
253
+ Tab 2: Documentation
254
+ 2 batches, 1 required + 1 conditional question
255
+ """
256
+ return {
257
+ "id": "tab_2_documentation",
258
+ "label": "Documentation",
259
+ "description": "Project document generation",
260
+ "batches": [
261
+ # Batch 2.1: Documentation Choice (1 question)
262
+ {
263
+ "id": "batch_2_1_documentation_choice",
264
+ "header": "Docs",
265
+ "batch_number": 1,
266
+ "total_batches": 2,
267
+ "questions": [
268
+ {
269
+ "id": "documentation_mode",
270
+ "question": "Documentation strategy?",
271
+ "type": "select_single",
272
+ "required": True,
273
+ "options": [
274
+ {
275
+ "label": "Quick Start - Skip for Now",
276
+ "value": "skip",
277
+ "description": "30 seconds - No docs now",
278
+ },
279
+ {
280
+ "label": "Full Documentation - Now",
281
+ "value": "full_now",
282
+ "description": "5-30min - Generate docs now",
283
+ },
284
+ {
285
+ "label": "Minimal - Auto-generate",
286
+ "value": "minimal",
287
+ "description": "1 min - Auto templates",
288
+ },
289
+ ],
290
+ },
291
+ ],
292
+ },
293
+ # Batch 2.2: Documentation Depth (1 conditional question)
294
+ {
295
+ "id": "batch_2_2_documentation_depth",
296
+ "header": "Depth",
297
+ "batch_number": 2,
298
+ "total_batches": 2,
299
+ "show_if": "documentation_mode == 'full_now'",
300
+ "questions": [
301
+ {
302
+ "id": "documentation_depth",
303
+ "question": "Brainstorming depth?",
304
+ "type": "select_single",
305
+ "required": True,
306
+ "show_if": "documentation_mode == 'full_now'",
307
+ "options": [
308
+ {
309
+ "label": "Quick",
310
+ "value": "quick",
311
+ "description": "5-10 min brainstorming",
312
+ },
313
+ {
314
+ "label": "Standard",
315
+ "value": "standard",
316
+ "description": "10-15 min brainstorming",
317
+ },
318
+ {
319
+ "label": "Deep",
320
+ "value": "deep",
321
+ "description": "25-30 min brainstorming",
322
+ },
323
+ ],
324
+ },
325
+ ],
326
+ },
327
+ ],
328
+ }
329
+
330
+
331
+ def _create_tab3_git_automation() -> Dict[str, Any]:
332
+ """
333
+ Tab 3: Git Automation
334
+ 2 conditional batches based on git_strategy.mode
335
+ """
336
+ return {
337
+ "id": "tab_3_git_automation",
338
+ "label": "Git",
339
+ "description": "Git automation settings",
340
+ "batches": [
341
+ # Batch 3.1: Personal Git Settings (conditional)
342
+ {
343
+ "id": "batch_3_1_personal",
344
+ "header": "Personal",
345
+ "batch_number": 1,
346
+ "total_batches": 2,
347
+ "show_if": "git_strategy_mode == 'personal' OR git_strategy_mode == 'hybrid'",
348
+ "questions": [
349
+ {
350
+ "id": "git_personal_auto_checkpoint",
351
+ "question": "Auto checkpoint?",
352
+ "type": "select_single",
353
+ "required": True,
354
+ "show_if": "git_strategy_mode == 'personal' OR git_strategy_mode == 'hybrid'",
355
+ "smart_default": "disabled",
356
+ "options": [
357
+ {
358
+ "label": "Disabled",
359
+ "value": "disabled",
360
+ "description": "No auto checkpoints",
361
+ },
362
+ {
363
+ "label": "Event-Driven",
364
+ "value": "event-driven",
365
+ "description": "Auto save on events",
366
+ },
367
+ {
368
+ "label": "Manual",
369
+ "value": "manual",
370
+ "description": "Manual saves only",
371
+ },
372
+ ],
373
+ },
374
+ {
375
+ "id": "git_personal_push_remote",
376
+ "question": "Push to remote?",
377
+ "type": "select_single",
378
+ "required": True,
379
+ "show_if": "git_strategy_mode == 'personal' OR git_strategy_mode == 'hybrid'",
380
+ "smart_default": False,
381
+ "options": [
382
+ {
383
+ "label": "Yes",
384
+ "value": True,
385
+ "description": "Auto push",
386
+ },
387
+ {
388
+ "label": "No",
389
+ "value": False,
390
+ "description": "Manual push",
391
+ },
392
+ ],
393
+ },
394
+ ],
395
+ },
396
+ # Batch 3.2: Team Git Settings (conditional)
397
+ {
398
+ "id": "batch_3_1_team",
399
+ "header": "Team",
400
+ "batch_number": 2,
401
+ "total_batches": 2,
402
+ "show_if": "git_strategy_mode == 'team'",
403
+ "questions": [
404
+ {
405
+ "id": "git_team_auto_pr",
406
+ "question": "Auto PR?",
407
+ "type": "select_single",
408
+ "required": True,
409
+ "show_if": "git_strategy_mode == 'team'",
410
+ "smart_default": False,
411
+ "options": [
412
+ {
413
+ "label": "Yes",
414
+ "value": True,
415
+ "description": "Auto create PR",
416
+ },
417
+ {
418
+ "label": "No",
419
+ "value": False,
420
+ "description": "Manual PR",
421
+ },
422
+ ],
423
+ },
424
+ {
425
+ "id": "git_team_draft_pr",
426
+ "question": "Draft PR?",
427
+ "type": "select_single",
428
+ "required": True,
429
+ "show_if": "git_strategy_mode == 'team'",
430
+ "smart_default": False,
431
+ "options": [
432
+ {
433
+ "label": "Yes",
434
+ "value": True,
435
+ "description": "Draft PR mode",
436
+ },
437
+ {
438
+ "label": "No",
439
+ "value": False,
440
+ "description": "Ready for review",
441
+ },
442
+ ],
443
+ },
444
+ ],
445
+ },
446
+ ],
447
+ }
@@ -34,9 +34,7 @@ class AlfredDetector:
34
34
  self._cache: Optional[AlfredTask] = None
35
35
  self._cache_time: Optional[datetime] = None
36
36
  self._cache_ttl = timedelta(seconds=self._CACHE_TTL_SECONDS)
37
- self._session_state_path = (
38
- Path.home() / ".moai" / "memory" / "last-session-state.json"
39
- )
37
+ self._session_state_path = Path.home() / ".moai" / "memory" / "last-session-state.json"
40
38
 
41
39
  def detect_active_task(self) -> AlfredTask:
42
40
  """
@@ -2,11 +2,13 @@
2
2
  """
3
3
  Statusline configuration loader for Claude Code
4
4
 
5
-
6
5
  Loads and manages statusline configuration from .moai/config/statusline-config.yaml
6
+
7
+ Performance: Thread-safe singleton with double-checked locking pattern
7
8
  """
8
9
 
9
10
  import logging
11
+ import threading
10
12
  from dataclasses import dataclass
11
13
  from pathlib import Path
12
14
  from typing import Any, Dict, Optional
@@ -115,19 +117,26 @@ class ErrorHandlingConfig:
115
117
 
116
118
  class StatuslineConfig:
117
119
  """
118
- Singleton configuration loader for statusline
120
+ Thread-safe singleton configuration loader for statusline
119
121
 
120
122
  Loads configuration from .moai/config/statusline-config.yaml
121
123
  Falls back to default values if file not found or parsing fails
124
+
125
+ Performance: Double-checked locking pattern for thread safety
122
126
  """
123
127
 
124
128
  _instance: Optional["StatuslineConfig"] = None
125
129
  _config: Dict[str, Any] = {}
130
+ _lock = threading.Lock() # Thread-safe singleton lock
126
131
 
127
132
  def __new__(cls):
133
+ # Double-checked locking pattern for thread-safe singleton
128
134
  if cls._instance is None:
129
- cls._instance = super().__new__(cls)
130
- cls._instance._load_config()
135
+ with cls._lock:
136
+ # Double-check after acquiring lock
137
+ if cls._instance is None:
138
+ cls._instance = super().__new__(cls)
139
+ cls._instance._load_config()
131
140
  return cls._instance
132
141
 
133
142
  def _load_config(self) -> None:
@@ -43,7 +43,6 @@ class OutputStyleDetector:
43
43
  "yoda": "🧙 Yoda Master",
44
44
  "yoda-master": "🧙 Yoda Master",
45
45
  "tutorial": "🧙 Yoda Master",
46
-
47
46
  # Display values with emojis
48
47
  "🤖 R2-D2": "R2-D2",
49
48
  "R2-D2": "R2-D2",
@@ -150,10 +149,7 @@ class OutputStyleDetector:
150
149
  yoda_files = list(moai_dir.rglob("*yoda*"))
151
150
  if yoda_files:
152
151
  # Check if any Yoda files are recently modified
153
- recent_yoda = any(
154
- f.stat().st_mtime > (time.time() - 300) # Last 5 minutes
155
- for f in yoda_files
156
- )
152
+ recent_yoda = any(f.stat().st_mtime > (time.time() - 300) for f in yoda_files) # Last 5 minutes
157
153
  if recent_yoda:
158
154
  return "🧙 Yoda Master"
159
155
 
@@ -248,11 +244,7 @@ class OutputStyleDetector:
248
244
  return None
249
245
 
250
246
  # Look for style indicators in recent responses
251
- full_text = " ".join(
252
- msg.get("content", "")
253
- for msg in messages[-3:]
254
- if msg.get("role") == "assistant"
255
- )
247
+ full_text = " ".join(msg.get("content", "") for msg in messages[-3:] if msg.get("role") == "assistant")
256
248
 
257
249
  if not full_text:
258
250
  return None
@@ -261,7 +253,13 @@ class OutputStyleDetector:
261
253
  text_lower = full_text.lower()
262
254
 
263
255
  # Yoda Master indicators
264
- yoda_indicators = ["young padawan", "the force", "master", "wisdom", "patience"]
256
+ yoda_indicators = [
257
+ "young padawan",
258
+ "the force",
259
+ "master",
260
+ "wisdom",
261
+ "patience",
262
+ ]
265
263
  yoda_count = sum(1 for indicator in yoda_indicators if indicator in text_lower)
266
264
 
267
265
  if yoda_count >= 2:
@@ -269,8 +267,14 @@ class OutputStyleDetector:
269
267
 
270
268
  # Explanatory indicators
271
269
  if len(full_text) > 2000: # Long responses
272
- explanatory_count = sum(1 for phrase in
273
- ["let me explain", "here's how", "the reason is", "to understand"]
270
+ explanatory_count = sum(
271
+ 1
272
+ for phrase in [
273
+ "let me explain",
274
+ "here's how",
275
+ "the reason is",
276
+ "to understand",
277
+ ]
274
278
  if phrase in text_lower
275
279
  )
276
280
  if explanatory_count >= 2:
@@ -308,7 +312,10 @@ class OutputStyleDetector:
308
312
 
309
313
  # Detection methods in priority order
310
314
  detection_methods = [
311
- ("Session Context", lambda: self.detect_from_session_context(session_context or {})),
315
+ (
316
+ "Session Context",
317
+ lambda: self.detect_from_session_context(session_context or {}),
318
+ ),
312
319
  ("Environment", self.detect_from_environment),
313
320
  ("Behavioral Analysis", self.detect_from_behavioral_analysis),
314
321
  ("Settings File", self.detect_from_settings),
@@ -343,7 +350,8 @@ def safe_collect_output_style() -> str:
343
350
  # Read session context from stdin if available
344
351
  session_context = {}
345
352
  try:
346
- input_data = sys.stdin.read()
353
+ # Handle Docker/non-interactive environments by checking TTY
354
+ input_data = sys.stdin.read() if not sys.stdin.isatty() else "{}"
347
355
  if input_data.strip():
348
356
  session_context = json.loads(input_data)
349
357
  except (json.JSONDecodeError, EOFError):