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,745 @@
1
+ """
2
+ Unified Permission Manager for MoAI-ADK
3
+
4
+ Production-ready permission management system that addresses agent permission validation
5
+ errors identified in Claude Code debug logs. Provides automatic correction, validation,
6
+ and monitoring of agent permissions and access control.
7
+
8
+ Author: MoAI-ADK Core Team
9
+ Version: 1.0.0
10
+ """
11
+
12
+ import json
13
+ import logging
14
+ import os
15
+ import time
16
+ from dataclasses import dataclass, field
17
+ from enum import Enum
18
+ from typing import Any, Dict, List, Optional
19
+
20
+ # Configure logging
21
+ logger = logging.getLogger(__name__)
22
+
23
+
24
+ class PermissionMode(Enum):
25
+ """Valid permission modes for agents"""
26
+
27
+ ACCEPT_EDITS = "acceptEdits"
28
+ BYPASS_PERMISSIONS = "bypassPermissions"
29
+ DEFAULT = "default"
30
+ DONT_ASK = "dontAsk"
31
+ PLAN = "plan"
32
+
33
+
34
+ class PermissionSeverity(Enum):
35
+ """Permission validation severity levels"""
36
+
37
+ LOW = "low"
38
+ MEDIUM = "medium"
39
+ HIGH = "high"
40
+ CRITICAL = "critical"
41
+
42
+
43
+ class ResourceType(Enum):
44
+ """Types of resources that can be protected"""
45
+
46
+ AGENT = "agent"
47
+ TOOL = "tool"
48
+ FILE = "file"
49
+ COMMAND = "command"
50
+ SETTING = "setting"
51
+
52
+
53
+ @dataclass
54
+ class PermissionRule:
55
+ """Individual permission rule"""
56
+
57
+ resource_type: ResourceType
58
+ resource_name: str
59
+ action: str
60
+ allowed: bool
61
+ conditions: Optional[Dict[str, Any]] = None
62
+ expires_at: Optional[float] = None
63
+
64
+
65
+ @dataclass
66
+ class ValidationResult:
67
+ """Result of permission validation"""
68
+
69
+ valid: bool
70
+ corrected_mode: Optional[str] = None
71
+ warnings: List[str] = field(default_factory=list)
72
+ errors: List[str] = field(default_factory=list)
73
+ severity: PermissionSeverity = PermissionSeverity.LOW
74
+ auto_corrected: bool = False
75
+
76
+
77
+ @dataclass
78
+ class PermissionAudit:
79
+ """Audit log entry for permission changes"""
80
+
81
+ timestamp: float
82
+ user_id: Optional[str]
83
+ resource_type: ResourceType
84
+ resource_name: str
85
+ action: str
86
+ old_permissions: Optional[Dict[str, Any]]
87
+ new_permissions: Optional[Dict[str, Any]]
88
+ reason: str
89
+ auto_corrected: bool
90
+
91
+
92
+ class UnifiedPermissionManager:
93
+ """
94
+ Production-ready permission management system that addresses Claude Code
95
+ agent permission validation errors with automatic correction and monitoring.
96
+
97
+ Key Features:
98
+ - Automatic permission mode validation and correction
99
+ - Role-based access control with inheritance
100
+ - Real-time permission monitoring and auditing
101
+ - Configuration file auto-recovery
102
+ - Security-focused fail-safe behavior
103
+ """
104
+
105
+ # Valid permission modes from Claude Code
106
+ VALID_PERMISSION_MODES = {
107
+ "acceptEdits",
108
+ "bypassPermissions",
109
+ "default",
110
+ "dontAsk",
111
+ "plan",
112
+ }
113
+
114
+ # Default permission mappings
115
+ DEFAULT_PERMISSIONS = {
116
+ "backend-expert": PermissionMode.ACCEPT_EDITS,
117
+ "frontend-expert": PermissionMode.ACCEPT_EDITS,
118
+ "security-expert": PermissionMode.ACCEPT_EDITS,
119
+ "api-designer": PermissionMode.PLAN,
120
+ "database-expert": PermissionMode.ACCEPT_EDITS,
121
+ "docs-manager": PermissionMode.ACCEPT_EDITS,
122
+ "tdd-implementer": PermissionMode.ACCEPT_EDITS,
123
+ "spec-builder": PermissionMode.ACCEPT_EDITS,
124
+ "quality-gate": PermissionMode.ACCEPT_EDITS,
125
+ "default": PermissionMode.DEFAULT,
126
+ }
127
+
128
+ def __init__(self, config_path: Optional[str] = None, enable_logging: bool = True):
129
+ self.config_path = config_path or ".claude/settings.json"
130
+ self.enable_logging = enable_logging
131
+ self.permission_cache: Dict[str, Any] = {}
132
+ self.audit_log: List[PermissionAudit] = []
133
+ self.stats = {
134
+ "validations_performed": 0,
135
+ "auto_corrections": 0,
136
+ "security_violations": 0,
137
+ "permission_denied": 0,
138
+ }
139
+
140
+ # Role hierarchy for inheritance
141
+ self.role_hierarchy = {
142
+ "admin": ["developer", "user"],
143
+ "developer": ["user"],
144
+ "user": [],
145
+ }
146
+
147
+ # Load and validate current configuration
148
+ self.config = self._load_configuration()
149
+ self._validate_all_permissions()
150
+
151
+ def _load_configuration(self) -> Dict[str, Any]:
152
+ """Load configuration from file with error handling"""
153
+ try:
154
+ if os.path.exists(self.config_path):
155
+ with open(self.config_path, "r", encoding="utf-8") as f:
156
+ config = json.load(f)
157
+
158
+ if self.enable_logging:
159
+ logger.info(f"Loaded configuration from {self.config_path}")
160
+
161
+ return config
162
+ else:
163
+ if self.enable_logging:
164
+ logger.warning(f"Configuration file not found: {self.config_path}")
165
+ return {}
166
+
167
+ except json.JSONDecodeError as e:
168
+ if self.enable_logging:
169
+ logger.error(f"Invalid JSON in configuration file: {e}")
170
+ return {}
171
+ except Exception as e:
172
+ if self.enable_logging:
173
+ logger.error(f"Error loading configuration: {e}")
174
+ return {}
175
+
176
+ def _validate_all_permissions(self) -> None:
177
+ """Validate all permissions in the current configuration"""
178
+ corrections_made = False
179
+
180
+ # Check agent permissions
181
+ agents_config = self.config.get("agents", {})
182
+ for agent_name, agent_config in agents_config.items():
183
+ result = self.validate_agent_permission(agent_name, agent_config)
184
+ if result.auto_corrected:
185
+ corrections_made = True
186
+ if self.enable_logging:
187
+ logger.info(f"Auto-corrected permissions for agent: {agent_name}")
188
+
189
+ # Check settings permissions
190
+ settings_config = self.config.get("projectSettings", {})
191
+ if "allowedTools" in settings_config:
192
+ result = self.validate_tool_permissions(settings_config["allowedTools"])
193
+ if result.auto_corrected:
194
+ corrections_made = True
195
+
196
+ # Save corrections if any were made
197
+ if corrections_made:
198
+ self._save_configuration()
199
+ if self.enable_logging:
200
+ logger.info("Saved corrected configuration")
201
+
202
+ def validate_agent_permission(self, agent_name: str, agent_config: Dict[str, Any]) -> ValidationResult:
203
+ """
204
+ Validate and auto-correct agent permission configuration.
205
+
206
+ Addresses the permissionMode validation errors from debug logs:
207
+ - Lines 50-80: Multiple agents with invalid permission modes ('ask', 'auto')
208
+ """
209
+ self.stats["validations_performed"] += 1
210
+
211
+ result = ValidationResult(valid=True)
212
+
213
+ # Extract current permission mode
214
+ current_mode = agent_config.get("permissionMode", "default")
215
+
216
+ # Validate permission mode
217
+ if current_mode not in self.VALID_PERMISSION_MODES:
218
+ # Auto-correct to appropriate default
219
+ suggested_mode = self._suggest_permission_mode(agent_name)
220
+
221
+ result.errors.append(
222
+ f"Invalid permissionMode '{current_mode}' for agent '{agent_name}'. "
223
+ f"Valid options: {sorted(self.VALID_PERMISSION_MODES)}"
224
+ )
225
+
226
+ # Auto-correction
227
+ agent_config["permissionMode"] = suggested_mode
228
+ result.corrected_mode = suggested_mode
229
+ result.auto_corrected = True
230
+ result.severity = PermissionSeverity.HIGH
231
+
232
+ self.stats["auto_corrections"] += 1
233
+ self._audit_permission_change(
234
+ resource_type=ResourceType.AGENT,
235
+ resource_name=agent_name,
236
+ action="permission_mode_correction",
237
+ old_permissions={"permissionMode": current_mode},
238
+ new_permissions={"permissionMode": suggested_mode},
239
+ reason=f"Invalid permission mode '{current_mode}' auto-corrected to '{suggested_mode}'",
240
+ auto_corrected=True,
241
+ )
242
+
243
+ if self.enable_logging:
244
+ logger.warning(
245
+ f"Auto-corrected agent '{agent_name}' permissionMode from '{current_mode}' to '{suggested_mode}'"
246
+ )
247
+
248
+ # Validate other agent configuration
249
+ if "model" in agent_config:
250
+ model = agent_config["model"]
251
+ if not isinstance(model, str) or not model.strip():
252
+ result.errors.append(f"Invalid model configuration for agent '{agent_name}'")
253
+ result.severity = PermissionSeverity.MEDIUM
254
+
255
+ # Check for required fields
256
+ required_fields = ["description", "systemPrompt"]
257
+ for req_field in required_fields:
258
+ if req_field not in agent_config or not agent_config[req_field]:
259
+ result.warnings.append(f"Missing or empty '{req_field}' for agent '{agent_name}'")
260
+
261
+ return result
262
+
263
+ def _suggest_permission_mode(self, agent_name: str) -> str:
264
+ """
265
+ Suggest appropriate permission mode based on agent name and function.
266
+
267
+ This addresses the core issue from the debug logs where agents had
268
+ invalid permission modes like 'ask' and 'auto'.
269
+ """
270
+ # Check if agent name matches known patterns
271
+ agent_lower = agent_name.lower()
272
+
273
+ # Security and compliance focused agents should be more restrictive
274
+ if any(keyword in agent_lower for keyword in ["security", "audit", "compliance"]):
275
+ return PermissionMode.PLAN.value
276
+
277
+ # Code execution and modification agents should accept edits
278
+ if any(keyword in agent_lower for keyword in ["expert", "implementer", "builder"]):
279
+ return PermissionMode.ACCEPT_EDITS.value
280
+
281
+ # Planning and analysis agents should use plan mode
282
+ if any(keyword in agent_lower for keyword in ["planner", "analyzer", "designer"]):
283
+ return PermissionMode.PLAN.value
284
+
285
+ # Management agents should have appropriate permissions
286
+ if any(keyword in agent_lower for keyword in ["manager", "coordinator"]):
287
+ return PermissionMode.ACCEPT_EDITS.value
288
+
289
+ # Check against our default mappings
290
+ if agent_name in self.DEFAULT_PERMISSIONS:
291
+ return self.DEFAULT_PERMISSIONS[agent_name].value
292
+
293
+ # Default to safe option
294
+ return PermissionMode.DEFAULT.value
295
+
296
+ def validate_tool_permissions(self, allowed_tools: List[str]) -> ValidationResult:
297
+ """Validate list of allowed tools for security compliance"""
298
+ result = ValidationResult(valid=True)
299
+
300
+ # Define dangerous tools that should require explicit approval
301
+ dangerous_tools = {
302
+ "Bash(rm -rf:*)",
303
+ "Bash(sudo:*)",
304
+ "Bash(chmod -R 777:*)",
305
+ "Bash(dd:*)",
306
+ "Bash(mkfs:*)",
307
+ "Bash(fdisk:*)",
308
+ "Bash(reboot:*)",
309
+ "Bash(shutdown:*)",
310
+ "Bash(git push --force:*)",
311
+ "Bash(git reset --hard:*)",
312
+ }
313
+
314
+ for tool in allowed_tools:
315
+ if tool in dangerous_tools:
316
+ result.warnings.append(f"Dangerous tool allowed: {tool}. Consider restricting access.")
317
+ result.severity = PermissionSeverity.HIGH
318
+ self.stats["security_violations"] += 1
319
+
320
+ return result
321
+
322
+ def check_tool_permission(self, user_role: str, tool_name: str, operation: str) -> bool:
323
+ """
324
+ Check if a user role is permitted to use a specific tool.
325
+
326
+ Implements unified permission checking with role hierarchy support.
327
+ """
328
+ self.stats["validations_performed"] += 1
329
+
330
+ # Check cache first
331
+ cache_key = f"{user_role}:{tool_name}:{operation}"
332
+ if cache_key in self.permission_cache:
333
+ return self.permission_cache[cache_key]
334
+
335
+ # Check direct permissions
336
+ permitted = self._check_direct_permission(user_role, tool_name, operation)
337
+
338
+ # If not directly permitted, check role hierarchy
339
+ if not permitted:
340
+ for subordinate_role in self.role_hierarchy.get(user_role, []):
341
+ if self._check_direct_permission(subordinate_role, tool_name, operation):
342
+ permitted = True
343
+ break
344
+
345
+ # Cache the result
346
+ self.permission_cache[cache_key] = permitted
347
+
348
+ if not permitted:
349
+ self.stats["permission_denied"] += 1
350
+ if self.enable_logging:
351
+ logger.warning(f"Permission denied: {user_role} cannot {operation} with {tool_name}")
352
+
353
+ return permitted
354
+
355
+ def _check_direct_permission(self, role: str, tool_name: str, operation: str) -> bool:
356
+ """Check direct permissions for a specific role"""
357
+ # Default permissions by role
358
+ role_permissions = {
359
+ "admin": ["*"], # All tools
360
+ "developer": ["Task", "Read", "Write", "Edit", "Bash", "AskUserQuestion"],
361
+ "user": ["Task", "Read", "AskUserQuestion"],
362
+ }
363
+
364
+ allowed_tools = role_permissions.get(role, [])
365
+
366
+ # Wildcard permission
367
+ if "*" in allowed_tools:
368
+ return True
369
+
370
+ # Exact match
371
+ if tool_name in allowed_tools:
372
+ return True
373
+
374
+ # Pattern matching for Bash commands
375
+ if tool_name.startswith("Bash(") and "Bash" in allowed_tools:
376
+ return True
377
+
378
+ return False
379
+
380
+ def validate_configuration(self, config_path: Optional[str] = None) -> ValidationResult:
381
+ """
382
+ Validate Claude Code configuration file for security and compliance.
383
+
384
+ This addresses the configuration security gaps identified in the analysis.
385
+ """
386
+ config_to_validate = config_path or self.config_path
387
+ result = ValidationResult(valid=True)
388
+
389
+ try:
390
+ with open(config_to_validate, "r", encoding="utf-8") as f:
391
+ config = json.load(f)
392
+ except FileNotFoundError:
393
+ result.errors.append(f"Configuration file not found: {config_to_validate}")
394
+ result.valid = False
395
+ result.severity = PermissionSeverity.CRITICAL
396
+ return result
397
+ except json.JSONDecodeError as e:
398
+ result.errors.append(f"Invalid JSON in configuration file: {e}")
399
+ result.valid = False
400
+ result.severity = PermissionSeverity.CRITICAL
401
+ return result
402
+ except Exception as e:
403
+ result.errors.append(f"Error reading configuration file: {e}")
404
+ result.valid = False
405
+ result.severity = PermissionSeverity.HIGH
406
+ return result
407
+
408
+ # Security validations
409
+ security_checks = [
410
+ self._validate_file_permissions,
411
+ self._validate_allowed_tools,
412
+ self._validate_sandbox_settings,
413
+ self._validate_mcp_servers,
414
+ ]
415
+
416
+ for check in security_checks:
417
+ check_result = check(config)
418
+ if not check_result:
419
+ result.valid = False
420
+ result.severity = PermissionSeverity.CRITICAL
421
+
422
+ return result
423
+
424
+ def _validate_file_permissions(self, config: Dict[str, Any]) -> bool:
425
+ """Validate file permission settings"""
426
+ permissions = config.get("permissions", {})
427
+
428
+ # Check for overly permissive settings
429
+ if "deniedTools" in permissions:
430
+ denied_tools = permissions["deniedTools"]
431
+ # Ensure dangerous operations are denied
432
+ dangerous_patterns = ["rm -rf", "sudo", "chmod 777", "format", "mkfs"]
433
+
434
+ for pattern in dangerous_patterns:
435
+ found = any(pattern in tool for tool in denied_tools)
436
+ if not found:
437
+ logger.warning(f"Dangerous operation not denied: {pattern}")
438
+ # Don't fail validation for this - just warn
439
+ # return False
440
+
441
+ return True
442
+
443
+ def _validate_allowed_tools(self, config: Dict[str, Any]) -> bool:
444
+ """Validate allowed tools configuration"""
445
+ permissions = config.get("permissions", {})
446
+ allowed_tools = permissions.get("allowedTools", [])
447
+
448
+ # Ensure essential tools are available (but don't fail validation)
449
+ essential_tools = ["Task", "Read", "AskUserQuestion"]
450
+ for tool in essential_tools:
451
+ if tool not in allowed_tools:
452
+ logger.warning(f"Essential tool not allowed: {tool}")
453
+ # Don't fail validation for this - just warn
454
+ # return False
455
+
456
+ return True
457
+
458
+ def _validate_sandbox_settings(self, config: Dict[str, Any]) -> bool:
459
+ """Validate sandbox security settings"""
460
+ sandbox = config.get("sandbox", {})
461
+
462
+ # Ensure sandbox is enabled
463
+ if not sandbox.get("allowUnsandboxedCommands", False):
464
+ return True
465
+
466
+ # If sandbox is disabled, ensure validated commands are restricted
467
+ validated_commands = sandbox.get("validatedCommands", [])
468
+ dangerous_commands = ["rm -rf", "sudo", "format", "mkfs"]
469
+
470
+ for dangerous_cmd in dangerous_commands:
471
+ if any(dangerous_cmd in validated_cmd for validated_cmd in validated_commands):
472
+ logger.warning(f"Dangerous command in validated commands: {dangerous_cmd}")
473
+ return False
474
+
475
+ return True
476
+
477
+ def _validate_mcp_servers(self, config: Dict[str, Any]) -> bool:
478
+ """Validate MCP server configuration for security"""
479
+ mcp_servers = config.get("mcpServers", {})
480
+
481
+ for server_name, server_config in mcp_servers.items():
482
+ # Ensure command doesn't use dangerous flags
483
+ if "command" in server_config:
484
+ command = server_config["command"]
485
+ dangerous_flags = ["--insecure", "--allow-all", "--disable-ssl"]
486
+
487
+ for flag in dangerous_flags:
488
+ if flag in command:
489
+ logger.warning(f"Dangerous flag in MCP server {server_name}: {flag}")
490
+ return False
491
+
492
+ return True
493
+
494
+ def auto_fix_agent_permissions(self, agent_name: str) -> ValidationResult:
495
+ """
496
+ Automatically fix agent permission configuration.
497
+
498
+ This is the main method to address the permissionMode errors
499
+ from the debug logs (Lines 50-80).
500
+ """
501
+ # Get current agent configuration
502
+ agents_config = self.config.setdefault("agents", {})
503
+ agent_config = agents_config.get(agent_name, {})
504
+
505
+ # Validate and fix
506
+ result = self.validate_agent_permission(agent_name, agent_config)
507
+
508
+ # Save configuration if corrections were made
509
+ if result.auto_corrected:
510
+ agents_config[agent_name] = agent_config
511
+ self._save_configuration()
512
+
513
+ if self.enable_logging:
514
+ logger.info(f"Fixed permissions for agent: {agent_name}")
515
+
516
+ return result
517
+
518
+ def auto_fix_all_agents(self) -> Dict[str, ValidationResult]:
519
+ """Auto-fix all agent permissions in the configuration"""
520
+ results = {}
521
+
522
+ agents_config = self.config.get("agents", {})
523
+ for agent_name in agents_config:
524
+ results[agent_name] = self.auto_fix_agent_permissions(agent_name)
525
+
526
+ # Also check for agents mentioned in the debug log that might not be in config
527
+ debug_log_agents = [
528
+ "backend-expert",
529
+ "security-expert",
530
+ "api-designer",
531
+ "monitoring-expert",
532
+ "performance-engineer",
533
+ "migration-expert",
534
+ "mcp-playwright-integrator",
535
+ "quality-gate",
536
+ "frontend-expert",
537
+ "debug-helper",
538
+ "ui-ux-expert",
539
+ "trust-checker",
540
+ "project-manager",
541
+ "mcp-context7-integrator",
542
+ "mcp-figma-integrator",
543
+ "tdd-implementer",
544
+ "format-expert",
545
+ "mcp-notion-integrator",
546
+ "devops-expert",
547
+ "docs-manager",
548
+ "implementation-planner",
549
+ "skill-factory",
550
+ "component-designer",
551
+ "database-expert",
552
+ "agent-factory",
553
+ "git-manager",
554
+ "sync-manager",
555
+ "spec-builder",
556
+ "doc-syncer",
557
+ "accessibility-expert",
558
+ "cc-manager",
559
+ ]
560
+
561
+ for agent_name in debug_log_agents:
562
+ if agent_name not in agents_config:
563
+ # Create default configuration for missing agents
564
+ agents_config[agent_name] = {
565
+ "permissionMode": self._suggest_permission_mode(agent_name),
566
+ "description": f"Auto-generated configuration for {agent_name}",
567
+ "systemPrompt": f"Default system prompt for {agent_name}",
568
+ }
569
+
570
+ results[agent_name] = ValidationResult(
571
+ valid=True,
572
+ auto_corrected=True,
573
+ warnings=[f"Created default configuration for agent: {agent_name}"],
574
+ )
575
+
576
+ if any(result.auto_corrected for result in results.values()):
577
+ self._save_configuration()
578
+
579
+ return results
580
+
581
+ def _save_configuration(self) -> None:
582
+ """Save current configuration to file"""
583
+ try:
584
+ # Create backup
585
+ if os.path.exists(self.config_path):
586
+ backup_path = f"{self.config_path}.backup.{int(time.time())}"
587
+ os.rename(self.config_path, backup_path)
588
+ if self.enable_logging:
589
+ logger.info(f"Created configuration backup: {backup_path}")
590
+
591
+ # Save updated configuration
592
+ with open(self.config_path, "w", encoding="utf-8") as f:
593
+ json.dump(self.config, f, indent=2, ensure_ascii=False)
594
+
595
+ if self.enable_logging:
596
+ logger.info(f"Saved configuration to {self.config_path}")
597
+
598
+ except Exception as e:
599
+ if self.enable_logging:
600
+ logger.error(f"Error saving configuration: {e}")
601
+
602
+ def _audit_permission_change(
603
+ self,
604
+ resource_type: ResourceType,
605
+ resource_name: str,
606
+ action: str,
607
+ old_permissions: Optional[Dict[str, Any]],
608
+ new_permissions: Optional[Dict[str, Any]],
609
+ reason: str,
610
+ auto_corrected: bool,
611
+ ) -> None:
612
+ """Log permission changes for audit trail"""
613
+ audit_entry = PermissionAudit(
614
+ timestamp=time.time(),
615
+ user_id=None, # System correction
616
+ resource_type=resource_type,
617
+ resource_name=resource_name,
618
+ action=action,
619
+ old_permissions=old_permissions,
620
+ new_permissions=new_permissions,
621
+ reason=reason,
622
+ auto_corrected=auto_corrected,
623
+ )
624
+
625
+ self.audit_log.append(audit_entry)
626
+
627
+ # Keep audit log size manageable
628
+ if len(self.audit_log) > 1000:
629
+ self.audit_log = self.audit_log[-1000:]
630
+
631
+ def get_permission_stats(self) -> Dict[str, Any]:
632
+ """Get permission management statistics"""
633
+ return {
634
+ **self.stats,
635
+ "cached_permissions": len(self.permission_cache),
636
+ "audit_log_entries": len(self.audit_log),
637
+ "configured_agents": len(self.config.get("agents", {})),
638
+ }
639
+
640
+ def get_recent_audits(self, limit: int = 50) -> List[PermissionAudit]:
641
+ """Get recent permission audit entries"""
642
+ return self.audit_log[-limit:]
643
+
644
+ def export_audit_report(self, output_path: str) -> None:
645
+ """Export audit report to file"""
646
+ report = {
647
+ "generated_at": time.time(),
648
+ "stats": self.get_permission_stats(),
649
+ "recent_audits": [
650
+ {
651
+ "timestamp": audit.timestamp,
652
+ "resource_type": audit.resource_type.value,
653
+ "resource_name": audit.resource_name,
654
+ "action": audit.action,
655
+ "reason": audit.reason,
656
+ "auto_corrected": audit.auto_corrected,
657
+ }
658
+ for audit in self.get_recent_audits()
659
+ ],
660
+ }
661
+
662
+ with open(output_path, "w", encoding="utf-8") as f:
663
+ json.dump(report, f, indent=2, ensure_ascii=False)
664
+
665
+ if self.enable_logging:
666
+ logger.info(f"Exported audit report to {output_path}")
667
+
668
+
669
+ # Global instance for easy import
670
+ permission_manager = UnifiedPermissionManager()
671
+
672
+
673
+ def validate_agent_permission(agent_name: str, agent_config: Dict[str, Any]) -> ValidationResult:
674
+ """Convenience function to validate agent permissions"""
675
+ return permission_manager.validate_agent_permission(agent_name, agent_config)
676
+
677
+
678
+ def check_tool_permission(user_role: str, tool_name: str, operation: str) -> bool:
679
+ """Convenience function to check tool permissions"""
680
+ return permission_manager.check_tool_permission(user_role, tool_name, operation)
681
+
682
+
683
+ def auto_fix_all_agent_permissions() -> Dict[str, ValidationResult]:
684
+ """Convenience function to auto-fix all agent permissions"""
685
+ return permission_manager.auto_fix_all_agents()
686
+
687
+
688
+ def get_permission_stats() -> Dict[str, Any]:
689
+ """Convenience function to get permission statistics"""
690
+ return permission_manager.get_permission_stats()
691
+
692
+
693
+ if __name__ == "__main__":
694
+ # Demo script for testing the permission manager
695
+ print("🔧 MoAI-ADK Unified Permission Manager Demo")
696
+ print("=" * 50)
697
+
698
+ # Test agent permission validation
699
+ test_agents = [
700
+ {
701
+ "name": "backend-expert",
702
+ "config": {"permissionMode": "ask", "description": "Backend expert agent"},
703
+ },
704
+ {
705
+ "name": "security-expert",
706
+ "config": {
707
+ "permissionMode": "auto",
708
+ "description": "Security expert agent",
709
+ },
710
+ },
711
+ {
712
+ "name": "api-designer",
713
+ "config": {"permissionMode": "plan", "description": "API designer agent"},
714
+ },
715
+ ]
716
+
717
+ print("Testing agent permission validation and auto-correction...")
718
+
719
+ for agent in test_agents:
720
+ print(f"\nTesting agent: {agent['name']}")
721
+ agent_config: Dict[str, Any] = agent["config"] # type: ignore[assignment]
722
+ print(f"Original permissionMode: {agent_config.get('permissionMode', 'default')}")
723
+
724
+ agent_name: str = agent["name"] # type: ignore[assignment]
725
+ result = permission_manager.validate_agent_permission(agent_name, agent_config)
726
+
727
+ print(f"Valid: {result.valid}")
728
+ print(f"Auto-corrected: {result.auto_corrected}")
729
+
730
+ if result.corrected_mode:
731
+ print(f"Corrected to: {result.corrected_mode}")
732
+
733
+ if result.errors:
734
+ print(f"Errors: {result.errors}")
735
+
736
+ if result.warnings:
737
+ print(f"Warnings: {result.warnings}")
738
+
739
+ print("\n📊 Permission Statistics:")
740
+ stats = permission_manager.get_permission_stats()
741
+ for key, value in stats.items():
742
+ print(f" {key}: {value}")
743
+
744
+ print("\n✨ Demo completed! The Unified Permission Manager addresses")
745
+ print(" the agent permission validation errors from the debug logs.")