moai-adk 0.35.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (502) hide show
  1. moai_adk/__init__.py +10 -0
  2. moai_adk/__main__.py +199 -0
  3. moai_adk/cli/__init__.py +6 -0
  4. moai_adk/cli/commands/__init__.py +17 -0
  5. moai_adk/cli/commands/analyze.py +116 -0
  6. moai_adk/cli/commands/doctor.py +272 -0
  7. moai_adk/cli/commands/init.py +372 -0
  8. moai_adk/cli/commands/language.py +248 -0
  9. moai_adk/cli/commands/status.py +104 -0
  10. moai_adk/cli/commands/update.py +2686 -0
  11. moai_adk/cli/main.py +13 -0
  12. moai_adk/cli/prompts/__init__.py +5 -0
  13. moai_adk/cli/prompts/init_prompts.py +219 -0
  14. moai_adk/cli/spec_status.py +263 -0
  15. moai_adk/cli/ui/__init__.py +44 -0
  16. moai_adk/cli/ui/progress.py +422 -0
  17. moai_adk/cli/ui/prompts.py +389 -0
  18. moai_adk/cli/ui/theme.py +129 -0
  19. moai_adk/cli/worktree/__init__.py +27 -0
  20. moai_adk/cli/worktree/__main__.py +31 -0
  21. moai_adk/cli/worktree/cli.py +683 -0
  22. moai_adk/cli/worktree/exceptions.py +89 -0
  23. moai_adk/cli/worktree/manager.py +493 -0
  24. moai_adk/cli/worktree/models.py +65 -0
  25. moai_adk/cli/worktree/registry.py +422 -0
  26. moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
  27. moai_adk/core/__init__.py +1 -0
  28. moai_adk/core/analysis/__init__.py +9 -0
  29. moai_adk/core/analysis/session_analyzer.py +400 -0
  30. moai_adk/core/claude_integration.py +393 -0
  31. moai_adk/core/command_helpers.py +270 -0
  32. moai_adk/core/comprehensive_monitoring_system.py +1183 -0
  33. moai_adk/core/config/__init__.py +19 -0
  34. moai_adk/core/config/auto_spec_config.py +340 -0
  35. moai_adk/core/config/migration.py +244 -0
  36. moai_adk/core/config/unified.py +436 -0
  37. moai_adk/core/context_manager.py +273 -0
  38. moai_adk/core/diagnostics/__init__.py +19 -0
  39. moai_adk/core/diagnostics/slash_commands.py +159 -0
  40. moai_adk/core/enterprise_features.py +1404 -0
  41. moai_adk/core/error_recovery_system.py +1902 -0
  42. moai_adk/core/event_driven_hook_system.py +1371 -0
  43. moai_adk/core/git/__init__.py +31 -0
  44. moai_adk/core/git/branch.py +25 -0
  45. moai_adk/core/git/branch_manager.py +129 -0
  46. moai_adk/core/git/checkpoint.py +134 -0
  47. moai_adk/core/git/commit.py +67 -0
  48. moai_adk/core/git/conflict_detector.py +413 -0
  49. moai_adk/core/git/event_detector.py +79 -0
  50. moai_adk/core/git/manager.py +216 -0
  51. moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
  52. moai_adk/core/input_validation_middleware.py +1006 -0
  53. moai_adk/core/integration/__init__.py +22 -0
  54. moai_adk/core/integration/engine.py +157 -0
  55. moai_adk/core/integration/integration_tester.py +226 -0
  56. moai_adk/core/integration/models.py +88 -0
  57. moai_adk/core/integration/utils.py +211 -0
  58. moai_adk/core/issue_creator.py +305 -0
  59. moai_adk/core/jit_context_loader.py +956 -0
  60. moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
  61. moai_adk/core/language_config.py +202 -0
  62. moai_adk/core/language_config_resolver.py +572 -0
  63. moai_adk/core/language_validator.py +543 -0
  64. moai_adk/core/mcp/setup.py +116 -0
  65. moai_adk/core/merge/__init__.py +9 -0
  66. moai_adk/core/merge/analyzer.py +605 -0
  67. moai_adk/core/migration/__init__.py +18 -0
  68. moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
  69. moai_adk/core/migration/backup_manager.py +277 -0
  70. moai_adk/core/migration/custom_element_scanner.py +358 -0
  71. moai_adk/core/migration/file_migrator.py +209 -0
  72. moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
  73. moai_adk/core/migration/selective_restorer.py +470 -0
  74. moai_adk/core/migration/template_utils.py +74 -0
  75. moai_adk/core/migration/user_selection_ui.py +338 -0
  76. moai_adk/core/migration/version_detector.py +139 -0
  77. moai_adk/core/migration/version_migrator.py +228 -0
  78. moai_adk/core/performance/__init__.py +6 -0
  79. moai_adk/core/performance/cache_system.py +316 -0
  80. moai_adk/core/performance/parallel_processor.py +116 -0
  81. moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
  82. moai_adk/core/project/__init__.py +1 -0
  83. moai_adk/core/project/backup_utils.py +70 -0
  84. moai_adk/core/project/checker.py +300 -0
  85. moai_adk/core/project/detector.py +293 -0
  86. moai_adk/core/project/initializer.py +387 -0
  87. moai_adk/core/project/phase_executor.py +716 -0
  88. moai_adk/core/project/validator.py +139 -0
  89. moai_adk/core/quality/__init__.py +6 -0
  90. moai_adk/core/quality/trust_checker.py +377 -0
  91. moai_adk/core/quality/validators/__init__.py +6 -0
  92. moai_adk/core/quality/validators/base_validator.py +19 -0
  93. moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
  94. moai_adk/core/robust_json_parser.py +611 -0
  95. moai_adk/core/rollback_manager.py +918 -0
  96. moai_adk/core/session_manager.py +651 -0
  97. moai_adk/core/skill_loading_system.py +579 -0
  98. moai_adk/core/spec/confidence_scoring.py +680 -0
  99. moai_adk/core/spec/ears_template_engine.py +1247 -0
  100. moai_adk/core/spec/quality_validator.py +687 -0
  101. moai_adk/core/spec_status_manager.py +478 -0
  102. moai_adk/core/template/__init__.py +7 -0
  103. moai_adk/core/template/backup.py +174 -0
  104. moai_adk/core/template/config.py +191 -0
  105. moai_adk/core/template/languages.py +43 -0
  106. moai_adk/core/template/merger.py +233 -0
  107. moai_adk/core/template/processor.py +1200 -0
  108. moai_adk/core/template_engine.py +310 -0
  109. moai_adk/core/template_variable_synchronizer.py +417 -0
  110. moai_adk/core/unified_permission_manager.py +745 -0
  111. moai_adk/core/user_behavior_analytics.py +851 -0
  112. moai_adk/core/version_sync.py +429 -0
  113. moai_adk/foundation/__init__.py +56 -0
  114. moai_adk/foundation/backend.py +1027 -0
  115. moai_adk/foundation/database.py +1115 -0
  116. moai_adk/foundation/devops.py +1585 -0
  117. moai_adk/foundation/ears.py +431 -0
  118. moai_adk/foundation/frontend.py +870 -0
  119. moai_adk/foundation/git/commit_templates.py +557 -0
  120. moai_adk/foundation/git.py +376 -0
  121. moai_adk/foundation/langs.py +484 -0
  122. moai_adk/foundation/ml_ops.py +1162 -0
  123. moai_adk/foundation/testing.py +1524 -0
  124. moai_adk/foundation/trust/trust_principles.py +676 -0
  125. moai_adk/foundation/trust/validation_checklist.py +1573 -0
  126. moai_adk/project/__init__.py +0 -0
  127. moai_adk/project/configuration.py +1084 -0
  128. moai_adk/project/documentation.py +566 -0
  129. moai_adk/project/schema.py +447 -0
  130. moai_adk/statusline/__init__.py +38 -0
  131. moai_adk/statusline/alfred_detector.py +105 -0
  132. moai_adk/statusline/config.py +376 -0
  133. moai_adk/statusline/enhanced_output_style_detector.py +372 -0
  134. moai_adk/statusline/git_collector.py +190 -0
  135. moai_adk/statusline/main.py +322 -0
  136. moai_adk/statusline/metrics_tracker.py +78 -0
  137. moai_adk/statusline/renderer.py +343 -0
  138. moai_adk/statusline/update_checker.py +129 -0
  139. moai_adk/statusline/version_reader.py +741 -0
  140. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +714 -0
  141. moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
  142. moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
  143. moai_adk/templates/.claude/agents/moai/builder-plugin.md +637 -0
  144. moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
  145. moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
  146. moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
  147. moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
  148. moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
  149. moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
  150. moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
  151. moai_adk/templates/.claude/agents/moai/expert-security.md +513 -0
  152. moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
  153. moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
  154. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
  155. moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
  156. moai_adk/templates/.claude/agents/moai/manager-git.md +1060 -0
  157. moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
  158. moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
  159. moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
  160. moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
  161. moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
  162. moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
  163. moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
  164. moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
  165. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
  166. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
  167. moai_adk/templates/.claude/commands/moai/0-project.md +1386 -0
  168. moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
  169. moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
  170. moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -0
  171. moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
  172. moai_adk/templates/.claude/hooks/__init__.py +8 -0
  173. moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
  174. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
  175. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
  176. moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
  177. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
  178. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
  179. moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
  180. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
  181. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
  182. moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
  183. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
  184. moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
  185. moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
  186. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
  187. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
  188. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
  189. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -0
  190. moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
  191. moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
  192. moai_adk/templates/.claude/settings.json +172 -0
  193. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
  194. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
  195. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
  196. moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -0
  197. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
  198. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -0
  199. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
  200. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
  201. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
  202. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
  203. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
  204. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +328 -0
  205. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +320 -0
  206. moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
  207. moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
  208. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
  209. moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
  210. moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
  211. moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
  212. moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
  213. moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
  214. moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
  215. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
  216. moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
  217. moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
  218. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -0
  219. moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
  220. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
  221. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
  222. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
  223. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
  224. moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
  225. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +492 -0
  226. moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -0
  227. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
  228. moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
  229. moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
  230. moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
  231. moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
  232. moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
  233. moai_adk/templates/.claude/skills/moai-formats-data/reference.md +585 -0
  234. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
  235. moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -0
  236. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
  237. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
  238. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
  239. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
  240. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
  241. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
  242. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
  243. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
  244. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
  245. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
  246. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
  247. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
  248. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
  249. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
  250. moai_adk/templates/.claude/skills/moai-foundation-claude/reference.md +209 -0
  251. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
  252. moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
  253. moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
  254. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
  255. moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -0
  256. moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
  257. moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +359 -0
  258. moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
  259. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
  260. moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
  261. moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
  262. moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
  263. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
  264. moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
  265. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
  266. moai_adk/templates/.claude/skills/moai-foundation-core/reference.md +478 -0
  267. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
  268. moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
  269. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
  270. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
  271. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
  272. moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
  273. moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
  274. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -0
  275. moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
  276. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
  277. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
  278. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
  279. moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
  280. moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
  281. moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
  282. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
  283. moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
  284. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +649 -0
  285. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
  286. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
  287. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
  288. moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
  289. moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
  290. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +376 -0
  291. moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
  292. moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
  293. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
  294. moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
  295. moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
  296. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
  297. moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
  298. moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
  299. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
  300. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
  301. moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
  302. moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
  303. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
  304. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
  305. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
  306. moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
  307. moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
  308. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
  309. moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
  310. moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
  311. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
  312. moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
  313. moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
  314. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
  315. moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
  316. moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
  317. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -0
  318. moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
  319. moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
  320. moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
  321. moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
  322. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +319 -0
  323. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
  324. moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -0
  325. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
  326. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
  327. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
  328. moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
  329. moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
  330. moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
  331. moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
  332. moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
  333. moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
  334. moai_adk/templates/.claude/skills/moai-library-nextra/reference.md +379 -0
  335. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -0
  336. moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
  337. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
  338. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
  339. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
  340. moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
  341. moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
  342. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +402 -0
  343. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
  344. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
  345. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
  346. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +291 -0
  347. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
  348. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
  349. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
  350. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
  351. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
  352. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
  353. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
  354. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
  355. moai_adk/templates/.claude/skills/moai-plugin-builder/SKILL.md +474 -0
  356. moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
  357. moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
  358. moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
  359. moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
  360. moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
  361. moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
  362. moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
  363. moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
  364. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
  365. moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
  366. moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
  367. moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
  368. moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
  369. moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
  370. moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
  371. moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
  372. moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
  373. moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
  374. moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
  375. moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
  376. moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
  377. moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
  378. moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
  379. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
  380. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
  381. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
  382. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
  383. moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
  384. moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
  385. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
  386. moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
  387. moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
  388. moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
  389. moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
  390. moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
  391. moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
  404. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +175 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
  409. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
  416. moai_adk/templates/.claude/skills/moai-workflow-project/reference.md +275 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1434 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +92 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
  429. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +534 -0
  430. moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
  431. moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
  432. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
  433. moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -0
  434. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
  435. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
  436. moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
  437. moai_adk/templates/.claude/skills/moai-workflow-templates/reference.md +346 -0
  438. moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
  439. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -0
  440. moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
  441. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
  442. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
  443. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
  444. moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
  445. moai_adk/templates/.claude/skills/moai-workflow-testing/examples.md +672 -0
  446. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
  447. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
  448. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
  449. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
  450. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
  451. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
  452. moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
  453. moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
  454. moai_adk/templates/.claude/skills/moai-workflow-testing/reference.md +440 -0
  455. moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
  456. moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
  457. moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
  458. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +411 -0
  459. moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
  460. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
  461. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
  462. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
  463. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
  464. moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
  465. moai_adk/templates/.git-hooks/pre-commit +128 -0
  466. moai_adk/templates/.git-hooks/pre-push +365 -0
  467. moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
  468. moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
  469. moai_adk/templates/.github/workflows/spec-issue-sync.yml +337 -0
  470. moai_adk/templates/.gitignore +222 -0
  471. moai_adk/templates/.mcp.json +13 -0
  472. moai_adk/templates/.moai/config/config.yaml +58 -0
  473. moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
  474. moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
  475. moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
  476. moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
  477. moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
  478. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
  479. moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -0
  480. moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -0
  481. moai_adk/templates/.moai/config/sections/language.yaml +11 -0
  482. moai_adk/templates/.moai/config/sections/project.yaml +13 -0
  483. moai_adk/templates/.moai/config/sections/quality.yaml +17 -0
  484. moai_adk/templates/.moai/config/sections/system.yaml +24 -0
  485. moai_adk/templates/.moai/config/sections/user.yaml +5 -0
  486. moai_adk/templates/.moai/config/statusline-config.yaml +92 -0
  487. moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
  488. moai_adk/templates/CLAUDE.md +642 -0
  489. moai_adk/utils/__init__.py +30 -0
  490. moai_adk/utils/banner.py +38 -0
  491. moai_adk/utils/common.py +294 -0
  492. moai_adk/utils/link_validator.py +241 -0
  493. moai_adk/utils/logger.py +147 -0
  494. moai_adk/utils/safe_file_reader.py +206 -0
  495. moai_adk/utils/timeout.py +160 -0
  496. moai_adk/utils/toon_utils.py +256 -0
  497. moai_adk/version.py +22 -0
  498. moai_adk-0.35.1.dist-info/METADATA +3018 -0
  499. moai_adk-0.35.1.dist-info/RECORD +502 -0
  500. moai_adk-0.35.1.dist-info/WHEEL +4 -0
  501. moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
  502. moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,443 @@
1
+ #!/usr/bin/env python3
2
+ """Test Suite for Hooks System Improvements
3
+
4
+ Comprehensive testing script to validate all the improvements made to prevent
5
+ aborted() errors and optimize timeout handling in the MoAI-ADK hooks system.
6
+
7
+ Test Coverage:
8
+ - Unified timeout manager functionality
9
+ - Git operations manager performance
10
+ - Configuration validation
11
+ - Hook-specific improvements
12
+ - Graceful degradation mechanisms
13
+ - Performance benchmarks
14
+ - Error handling scenarios
15
+ """
16
+
17
+ import json
18
+ import subprocess
19
+ import sys
20
+ import tempfile
21
+ import time
22
+ from datetime import datetime
23
+ from pathlib import Path
24
+
25
+ # Add lib directory to path
26
+ hooks_dir = Path(__file__).parent
27
+ sys.path.insert(0, str(hooks_dir))
28
+
29
+ # Import modules to test
30
+ try:
31
+ from config_validator import ( # noqa: F401 - imports used for availability check
32
+ ValidationIssue,
33
+ ValidationLevel,
34
+ get_config_validator,
35
+ )
36
+ from git_operations_manager import ( # noqa: F401 - imports used for availability check
37
+ GitCommand,
38
+ GitOperationType,
39
+ get_git_manager,
40
+ )
41
+ from unified_timeout_manager import ( # noqa: F401 - imports used for availability check
42
+ HookTimeoutConfig,
43
+ HookTimeoutError,
44
+ TimeoutPolicy,
45
+ get_timeout_manager,
46
+ )
47
+
48
+ TIMEOUT_MANAGER_AVAILABLE = True
49
+ GIT_MANAGER_AVAILABLE = True
50
+ CONFIG_VALIDATOR_AVAILABLE = True
51
+ except ImportError as e:
52
+ print(f"⚠️ Import error: {e}")
53
+ TIMEOUT_MANAGER_AVAILABLE = False
54
+ GIT_MANAGER_AVAILABLE = False
55
+ CONFIG_VALIDATOR_AVAILABLE = False
56
+
57
+
58
+ class HooksTestSuite:
59
+ """Comprehensive test suite for hooks improvements"""
60
+
61
+ def __init__(self):
62
+ self.test_results = []
63
+ self.start_time = datetime.now()
64
+ self.temp_dir = Path(tempfile.mkdtemp(prefix="hooks_test_"))
65
+
66
+ def log_test_result(self, test_name: str, passed: bool, message: str = "", duration: float = 0):
67
+ """Log a test result"""
68
+ status = "✅ PASS" if passed else "❌ FAIL"
69
+ result = {
70
+ "test_name": test_name,
71
+ "status": status,
72
+ "passed": passed,
73
+ "message": message,
74
+ "duration": duration,
75
+ "timestamp": datetime.now().isoformat(),
76
+ }
77
+ self.test_results.append(result)
78
+ print(f"{status} {test_name}{f' - {message}' if message else ''} ({duration:.3f}s)")
79
+
80
+ def test_timeout_manager_basic(self) -> None:
81
+ """Test basic timeout manager functionality"""
82
+ if not TIMEOUT_MANAGER_AVAILABLE:
83
+ self.log_test_result("Timeout Manager - Basic", False, "Module not available")
84
+ return
85
+
86
+ start = time.time()
87
+ try:
88
+ manager = get_timeout_manager()
89
+ assert manager is not None, "Timeout manager should be available"
90
+
91
+ # Test timeout configuration
92
+ config = HookTimeoutConfig(
93
+ policy=TimeoutPolicy.FAST,
94
+ custom_timeout_ms=1000,
95
+ retry_count=1,
96
+ graceful_degradation=True,
97
+ )
98
+
99
+ # Test successful execution
100
+ def quick_task():
101
+ return "success"
102
+
103
+ result = manager.execute_with_timeout("test_hook", quick_task, config=config)
104
+ assert result == "success", "Quick task should return success"
105
+
106
+ duration = time.time() - start
107
+ self.log_test_result("Timeout Manager - Basic", True, "All basic tests passed", duration)
108
+
109
+ except Exception as e:
110
+ duration = time.time() - start
111
+ self.log_test_result("Timeout Manager - Basic", False, str(e), duration)
112
+
113
+ def test_timeout_manager_timeout(self) -> None:
114
+ """Test timeout manager timeout handling"""
115
+ if not TIMEOUT_MANAGER_AVAILABLE:
116
+ self.log_test_result("Timeout Manager - Timeout", False, "Module not available")
117
+ return
118
+
119
+ start = time.time()
120
+ try:
121
+ manager = get_timeout_manager()
122
+
123
+ # Test timeout with slow task
124
+ def slow_task():
125
+ time.sleep(2) # Sleep longer than timeout
126
+ return "should not reach"
127
+
128
+ config = HookTimeoutConfig(
129
+ policy=TimeoutPolicy.FAST,
130
+ custom_timeout_ms=500, # 0.5 second timeout
131
+ retry_count=0, # No retries for timeout test
132
+ graceful_degradation=True,
133
+ )
134
+
135
+ try:
136
+ result = manager.execute_with_timeout("test_timeout", slow_task, config=config)
137
+ # If graceful degradation is enabled, should return default result
138
+ assert "graceful_degradation" in str(result), "Should return graceful degradation result"
139
+ duration = time.time() - start
140
+ self.log_test_result(
141
+ "Timeout Manager - Timeout",
142
+ True,
143
+ "Graceful degradation working",
144
+ duration,
145
+ )
146
+
147
+ except HookTimeoutError:
148
+ duration = time.time() - start
149
+ self.log_test_result(
150
+ "Timeout Manager - Timeout",
151
+ True,
152
+ "Timeout exception raised correctly",
153
+ duration,
154
+ )
155
+
156
+ except Exception as e:
157
+ duration = time.time() - start
158
+ self.log_test_result("Timeout Manager - Timeout", False, str(e), duration)
159
+
160
+ def test_git_operations_manager(self) -> None:
161
+ """Test Git operations manager functionality"""
162
+ if not GIT_MANAGER_AVAILABLE:
163
+ self.log_test_result("Git Operations Manager", False, "Module not available")
164
+ return
165
+
166
+ start = time.time()
167
+ try:
168
+ manager = get_git_manager()
169
+ assert manager is not None, "Git manager should be available"
170
+
171
+ # Test git info retrieval
172
+ project_info = manager.get_project_info(use_cache=True)
173
+ assert isinstance(project_info, dict), "Should return dictionary"
174
+ assert "branch" in project_info, "Should contain branch info"
175
+
176
+ # Test statistics
177
+ stats = manager.get_statistics()
178
+ assert isinstance(stats, dict), "Statistics should be dictionary"
179
+ assert "operations" in stats, "Should contain operations stats"
180
+
181
+ # Test cache clearing
182
+ cleared_count = manager.clear_cache()
183
+ assert isinstance(cleared_count, int), "Should return count of cleared entries"
184
+
185
+ duration = time.time() - start
186
+ self.log_test_result(
187
+ "Git Operations Manager",
188
+ True,
189
+ f"Cached {len(project_info)} fields",
190
+ duration,
191
+ )
192
+
193
+ except Exception as e:
194
+ duration = time.time() - start
195
+ self.log_test_result("Git Operations Manager", False, str(e), duration)
196
+
197
+ def test_config_validator(self) -> None:
198
+ """Test configuration validator functionality"""
199
+ if not CONFIG_VALIDATOR_AVAILABLE:
200
+ self.log_test_result("Configuration Validator", False, "Module not available")
201
+ return
202
+
203
+ start = time.time()
204
+ try:
205
+ validator = get_config_validator()
206
+ assert validator is not None, "Config validator should be available"
207
+
208
+ # Load example config
209
+ example_config_path = hooks_dir / "example_config.json"
210
+ assert example_config_path.exists(), "Example config should exist"
211
+
212
+ with open(example_config_path, "r") as f:
213
+ config = json.load(f)
214
+
215
+ # Validate configuration
216
+ is_valid, issues = validator.validate_config(config)
217
+
218
+ # Check that critical issues are not present
219
+ critical_issues = [i for i in issues if i.level == ValidationLevel.CRITICAL]
220
+ error_issues = [i for i in issues if i.level == ValidationLevel.ERROR]
221
+
222
+ success = len(critical_issues) == 0 and len(error_issues) == 0
223
+ message = f"Found {len(issues)} issues ({len(error_issues)} errors)" if issues else "No issues found"
224
+
225
+ # Test normalization
226
+ normalized = validator.normalize_config({})
227
+ assert isinstance(normalized, dict), "Normalization should return dict"
228
+
229
+ duration = time.time() - start
230
+ self.log_test_result("Configuration Validator", success, message, duration)
231
+
232
+ except Exception as e:
233
+ duration = time.time() - start
234
+ self.log_test_result("Configuration Validator", False, str(e), duration)
235
+
236
+ def test_hook_integration(self) -> None:
237
+ """Test integration with actual hooks"""
238
+ start = time.time()
239
+ try:
240
+ # Test session_start hook
241
+ session_start_hook = hooks_dir / "session_start__show_project_info.py"
242
+ assert session_start_hook.exists(), "Session start hook should exist"
243
+
244
+ # Test with empty input
245
+ result = subprocess.run(
246
+ [sys.executable, str(session_start_hook)],
247
+ input="{}",
248
+ text=True,
249
+ capture_output=True,
250
+ timeout=10,
251
+ cwd=self.temp_dir,
252
+ )
253
+
254
+ # Should not crash and should produce JSON output
255
+ try:
256
+ output = json.loads(result.stdout)
257
+ assert isinstance(output, dict), "Should return JSON object"
258
+ success = result.returncode == 0
259
+ message = "Hook executed successfully" if success else f"Exit code: {result.returncode}"
260
+ except json.JSONDecodeError:
261
+ success = False
262
+ message = "Invalid JSON output"
263
+
264
+ duration = time.time() - start
265
+ self.log_test_result("Hook Integration - Session Start", success, message, duration)
266
+
267
+ except subprocess.TimeoutExpired:
268
+ duration = time.time() - start
269
+ self.log_test_result("Hook Integration - Session Start", False, "Hook timeout", duration)
270
+ except Exception as e:
271
+ duration = time.time() - start
272
+ self.log_test_result("Hook Integration - Session Start", False, str(e), duration)
273
+
274
+ def test_performance_benchmarks(self) -> None:
275
+ """Test performance benchmarks"""
276
+ start = time.time()
277
+ try:
278
+ # Test multiple parallel operations
279
+ if GIT_MANAGER_AVAILABLE:
280
+ manager = get_git_manager()
281
+
282
+ # Benchmark git info retrieval
283
+ git_start = time.time()
284
+ for _ in range(5):
285
+ manager.get_project_info(use_cache=True)
286
+ git_duration = time.time() - git_start
287
+
288
+ avg_git_time = git_duration / 5
289
+ message = f"Avg Git info retrieval: {avg_git_time:.3f}s"
290
+ success = avg_git_time < 1.0 # Should be under 1 second with caching
291
+ else:
292
+ avg_git_time = 0
293
+ message = "Git manager not available"
294
+ success = False
295
+
296
+ duration = time.time() - start
297
+ self.log_test_result("Performance Benchmarks", success, message, duration)
298
+
299
+ except Exception as e:
300
+ duration = time.time() - start
301
+ self.log_test_result("Performance Benchmarks", False, str(e), duration)
302
+
303
+ def test_error_handling(self) -> None:
304
+ """Test error handling scenarios"""
305
+ start = time.time()
306
+ try:
307
+ errors_tested = 0
308
+ errors_passed = 0
309
+
310
+ # Test invalid configuration
311
+ if CONFIG_VALIDATOR_AVAILABLE:
312
+ validator = get_config_validator()
313
+ invalid_config = {
314
+ "timeout_manager": {
315
+ "global_timeout_ms": -1000, # Invalid negative timeout
316
+ "default_retry_count": "invalid", # Invalid type
317
+ "graceful_degradation": "maybe", # Invalid boolean
318
+ }
319
+ }
320
+
321
+ is_valid, issues = validator.validate_config(invalid_config)
322
+ errors_tested += 1
323
+ if not is_valid and len(issues) > 0:
324
+ errors_passed += 1
325
+
326
+ # Test timeout with graceful degradation
327
+ if TIMEOUT_MANAGER_AVAILABLE:
328
+ manager = get_timeout_manager()
329
+ config = HookTimeoutConfig(
330
+ policy=TimeoutPolicy.FAST,
331
+ custom_timeout_ms=100,
332
+ retry_count=0,
333
+ graceful_degradation=True,
334
+ )
335
+
336
+ def failing_task():
337
+ time.sleep(0.5)
338
+ raise Exception("Simulated failure")
339
+
340
+ try:
341
+ result = manager.execute_with_timeout("test_error", failing_task, config=config)
342
+ errors_tested += 1
343
+ # Should return graceful degradation result
344
+ if isinstance(result, dict) and "graceful_degradation" in str(result):
345
+ errors_passed += 1
346
+ except Exception:
347
+ # Exception is also acceptable
348
+ errors_passed += 1
349
+ errors_tested += 1
350
+
351
+ success = errors_passed > 0 and errors_passed == errors_tested
352
+ message = f"Error handling: {errors_passed}/{errors_tested} scenarios passed"
353
+
354
+ duration = time.time() - start
355
+ self.log_test_result("Error Handling", success, message, duration)
356
+
357
+ except Exception as e:
358
+ duration = time.time() - start
359
+ self.log_test_result("Error Handling", False, str(e), duration)
360
+
361
+ def run_all_tests(self) -> None:
362
+ """Run all tests in the suite"""
363
+ print("🚀 Starting Hooks System Improvements Test Suite")
364
+ print(f"📍 Test directory: {self.temp_dir}")
365
+ print(f"🕐 Started at: {self.start_time}")
366
+ print("=" * 60)
367
+
368
+ # Run all tests
369
+ self.test_timeout_manager_basic()
370
+ self.test_timeout_manager_timeout()
371
+ self.test_git_operations_manager()
372
+ self.test_config_validator()
373
+ self.test_hook_integration()
374
+ self.test_performance_benchmarks()
375
+ self.test_error_handling()
376
+
377
+ # Generate summary
378
+ self.generate_summary()
379
+
380
+ def generate_summary(self) -> None:
381
+ """Generate test summary report"""
382
+ total_tests = len(self.test_results)
383
+ passed_tests = sum(1 for r in self.test_results if r["passed"])
384
+ failed_tests = total_tests - passed_tests
385
+ total_duration = sum(r["duration"] for r in self.test_results)
386
+
387
+ end_time = datetime.now()
388
+ suite_duration = (end_time - self.start_time).total_seconds()
389
+
390
+ print("\n" + "=" * 60)
391
+ print("📊 TEST SUMMARY")
392
+ print("=" * 60)
393
+ print(f"Total Tests: {total_tests}")
394
+ print(f"Passed: {passed_tests} ✅")
395
+ print(f"Failed: {failed_tests} ❌")
396
+ print(f"Success Rate: {(passed_tests / total_tests * 100):.1f}%")
397
+ print(f"Total Duration: {total_duration:.3f}s")
398
+ print(f"Suite Duration: {suite_duration:.3f}s")
399
+ print(f"Completed at: {end_time}")
400
+
401
+ if failed_tests > 0:
402
+ print("\n❌ FAILED TESTS:")
403
+ for result in self.test_results:
404
+ if not result["passed"]:
405
+ print(f" • {result['test_name']}: {result['message']}")
406
+
407
+ # Module availability report
408
+ print("\n🔧 MODULE AVAILABILITY:")
409
+ print(f" Timeout Manager: {'✅ Available' if TIMEOUT_MANAGER_AVAILABLE else '❌ Not Available'}")
410
+ print(f" Git Operations Manager: {'✅ Available' if GIT_MANAGER_AVAILABLE else '❌ Not Available'}")
411
+ print(f" Config Validator: {'✅ Available' if CONFIG_VALIDATOR_AVAILABLE else '❌ Not Available'}")
412
+
413
+ # Performance summary
414
+ if GIT_MANAGER_AVAILABLE:
415
+ try:
416
+ stats = get_git_manager().get_statistics()
417
+ print("\n📈 PERFORMANCE SUMMARY:")
418
+ print(f" Git Operations: {stats['operations']['total']}")
419
+ print(f" Cache Hit Rate: {stats['operations']['cache_hit_rate']:.1%}")
420
+ print(f" Cache Size: {stats['cache']['size']}/{stats['cache']['size_limit']}")
421
+ except Exception:
422
+ pass
423
+
424
+ # Cleanup
425
+ try:
426
+ import shutil
427
+
428
+ shutil.rmtree(self.temp_dir)
429
+ print(f"\n🧹 Cleaned up test directory: {self.temp_dir}")
430
+ except Exception:
431
+ pass
432
+
433
+ print("\n" + "=" * 60)
434
+
435
+
436
+ def main():
437
+ """Main test runner"""
438
+ test_suite = HooksTestSuite()
439
+ test_suite.run_all_tests()
440
+
441
+
442
+ if __name__ == "__main__":
443
+ main()
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env python3
2
+ # # REMOVED_ORPHAN_CODE:TIMEOUT-001 | SPEC: SPEC-TIMEOUT-HANDLING-001
3
+ """Cross-Platform Timeout Handler for Windows & Unix Compatibility
4
+
5
+ Provides a unified timeout mechanism that works on both Windows (threading-based)
6
+ and Unix/POSIX systems (signal-based).
7
+
8
+ Architecture:
9
+ - Windows: threading.Timer with exception injection
10
+ - Unix/POSIX: signal.SIGALRM (traditional approach)
11
+ - Both: Context manager for clean cancellation
12
+ """
13
+
14
+ import platform
15
+ import signal
16
+ import threading
17
+ from contextlib import contextmanager
18
+ from typing import Any, Callable, Optional
19
+
20
+
21
+ class TimeoutError(Exception):
22
+ """Timeout exception raised when deadline exceeded"""
23
+
24
+ pass
25
+
26
+
27
+ class CrossPlatformTimeout:
28
+ """Cross-platform timeout handler supporting Windows and Unix.
29
+
30
+ Windows: Uses threading.Timer to schedule timeout exception
31
+ Unix: Uses signal.SIGALRM for timeout handling
32
+
33
+ Usage:
34
+ # Context manager (recommended)
35
+ with CrossPlatformTimeout(5):
36
+ long_running_operation()
37
+
38
+ # Manual control
39
+ timeout = CrossPlatformTimeout(5)
40
+ timeout.start()
41
+ try:
42
+ long_running_operation()
43
+ finally:
44
+ timeout.cancel()
45
+ """
46
+
47
+ def __init__(self, timeout_seconds: float, callback: Optional[Callable] = None):
48
+ """Initialize timeout with duration in seconds.
49
+
50
+ Args:
51
+ timeout_seconds: Timeout duration in seconds (float or int)
52
+ callback: Optional callback to execute before raising TimeoutError
53
+ """
54
+ # Convert float to int for signal.alarm()
55
+ self.timeout_seconds = timeout_seconds
56
+ self.timeout_seconds_int = max(1, int(timeout_seconds)) # signal.alarm requires >=1
57
+ self.callback = callback
58
+ self.timer: Optional[threading.Timer] = None
59
+ self._is_windows = platform.system() == "Windows"
60
+ self._old_handler: Optional[signal.Handlers | Callable[[int, Any], Any]] = None
61
+
62
+ def start(self) -> None:
63
+ """Start timeout countdown."""
64
+ # Handle zero/negative timeouts
65
+ if self.timeout_seconds <= 0:
66
+ if self.timeout_seconds == 0:
67
+ # Zero timeout: raise immediately
68
+ if self.callback:
69
+ self.callback()
70
+ raise TimeoutError("Timeout of 0 seconds exceeded immediately")
71
+ else:
72
+ # Negative timeout: don't timeout at all
73
+ return
74
+
75
+ if self._is_windows:
76
+ self._start_windows_timeout()
77
+ else:
78
+ self._start_unix_timeout()
79
+
80
+ def cancel(self) -> None:
81
+ """Cancel timeout (must call before timeout expires)."""
82
+ if self._is_windows:
83
+ self._cancel_windows_timeout()
84
+ else:
85
+ self._cancel_unix_timeout()
86
+
87
+ def _start_windows_timeout(self) -> None:
88
+ """Windows: Use threading.Timer to raise exception."""
89
+
90
+ def timeout_handler():
91
+ if self.callback:
92
+ self.callback()
93
+ raise TimeoutError(f"Operation exceeded {self.timeout_seconds}s timeout (Windows threading)")
94
+
95
+ self.timer = threading.Timer(self.timeout_seconds, timeout_handler)
96
+ self.timer.daemon = True
97
+ self.timer.start()
98
+
99
+ def _cancel_windows_timeout(self) -> None:
100
+ """Windows: Cancel timer thread."""
101
+ if self.timer:
102
+ self.timer.cancel()
103
+ self.timer = None
104
+
105
+ def _start_unix_timeout(self) -> None:
106
+ """Unix/POSIX: Use signal.SIGALRM for timeout."""
107
+
108
+ def signal_handler(signum, frame):
109
+ if self.callback:
110
+ try:
111
+ self.callback()
112
+ except Exception:
113
+ # Ignore callback exceptions, timeout error takes precedence
114
+ pass
115
+ raise TimeoutError(f"Operation exceeded {self.timeout_seconds}s timeout (Unix signal)")
116
+
117
+ # Save old handler to restore later
118
+ self._old_handler = signal.signal(signal.SIGALRM, signal_handler) # type: ignore[assignment]
119
+ # Use integer timeout_seconds_int for signal.alarm()
120
+ signal.alarm(self.timeout_seconds_int)
121
+
122
+ def _cancel_unix_timeout(self) -> None:
123
+ """Unix/POSIX: Cancel alarm and restore old handler."""
124
+ signal.alarm(0) # Cancel pending alarm
125
+ if self._old_handler is not None:
126
+ signal.signal(signal.SIGALRM, self._old_handler)
127
+ self._old_handler = None
128
+
129
+ def __enter__(self):
130
+ """Context manager entry."""
131
+ self.start()
132
+ return self
133
+
134
+ def __exit__(self, exc_type, exc_val, exc_tb):
135
+ """Context manager exit - always cancel."""
136
+ self.cancel()
137
+ return False # Don't suppress exceptions
138
+
139
+
140
+ @contextmanager
141
+ def timeout_context(timeout_seconds: float, callback: Optional[Callable] = None):
142
+ """Decorator/context manager for timeout.
143
+
144
+ Usage:
145
+ with timeout_context(5):
146
+ slow_function()
147
+
148
+ Args:
149
+ timeout_seconds: Timeout duration in seconds (float or int)
150
+ callback: Optional callback to execute before raising TimeoutError
151
+
152
+ Yields:
153
+ CrossPlatformTimeout instance
154
+ """
155
+ timeout = CrossPlatformTimeout(timeout_seconds, callback=callback)
156
+ timeout.start()
157
+ try:
158
+ yield timeout
159
+ finally:
160
+ timeout.cancel()