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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. moai_adk/__main__.py +136 -5
  2. moai_adk/astgrep/__init__.py +37 -0
  3. moai_adk/astgrep/analyzer.py +522 -0
  4. moai_adk/astgrep/models.py +124 -0
  5. moai_adk/astgrep/rules.py +179 -0
  6. moai_adk/cli/commands/analyze.py +11 -2
  7. moai_adk/cli/commands/doctor.py +7 -1
  8. moai_adk/cli/commands/init.py +321 -11
  9. moai_adk/cli/commands/language.py +7 -1
  10. moai_adk/cli/commands/rank.py +449 -0
  11. moai_adk/cli/commands/status.py +7 -1
  12. moai_adk/cli/commands/switch.py +325 -0
  13. moai_adk/cli/commands/update.py +296 -23
  14. moai_adk/cli/prompts/init_prompts.py +362 -66
  15. moai_adk/cli/prompts/translations/__init__.py +573 -0
  16. moai_adk/cli/ui/prompts.py +61 -2
  17. moai_adk/cli/worktree/cli.py +106 -1
  18. moai_adk/cli/worktree/manager.py +155 -0
  19. moai_adk/core/config/unified.py +244 -63
  20. moai_adk/core/credentials.py +264 -0
  21. moai_adk/core/error_recovery_system.py +22 -4
  22. moai_adk/core/git/conflict_detector.py +10 -1
  23. moai_adk/core/git/event_detector.py +16 -5
  24. moai_adk/core/integration/engine.py +2 -2
  25. moai_adk/core/integration/integration_tester.py +5 -5
  26. moai_adk/core/language_config_resolver.py +9 -3
  27. moai_adk/core/merge/analyzer.py +509 -324
  28. moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
  29. moai_adk/core/migration/backup_manager.py +54 -4
  30. moai_adk/core/migration/file_migrator.py +174 -2
  31. moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
  32. moai_adk/core/migration/version_detector.py +123 -19
  33. moai_adk/core/migration/version_migrator.py +44 -9
  34. moai_adk/core/model_allocator.py +241 -0
  35. moai_adk/core/project/backup_utils.py +12 -2
  36. moai_adk/core/project/initializer.py +44 -87
  37. moai_adk/core/project/phase_executor.py +95 -33
  38. moai_adk/core/project/validator.py +16 -1
  39. moai_adk/core/quality/trust_checker.py +30 -10
  40. moai_adk/core/rollback_manager.py +60 -25
  41. moai_adk/core/template/backup.py +88 -6
  42. moai_adk/core/template/config.py +33 -9
  43. moai_adk/core/template/merger.py +34 -8
  44. moai_adk/core/template/processor.py +334 -11
  45. moai_adk/core/template_engine.py +10 -1
  46. moai_adk/core/template_variable_synchronizer.py +16 -2
  47. moai_adk/core/version_sync.py +54 -6
  48. moai_adk/foundation/__init__.py +1 -20
  49. moai_adk/foundation/testing.py +1 -1
  50. moai_adk/loop/__init__.py +54 -0
  51. moai_adk/loop/controller.py +305 -0
  52. moai_adk/loop/feedback.py +230 -0
  53. moai_adk/loop/state.py +209 -0
  54. moai_adk/loop/storage.py +220 -0
  55. moai_adk/lsp/__init__.py +70 -0
  56. moai_adk/lsp/client.py +320 -0
  57. moai_adk/lsp/models.py +261 -0
  58. moai_adk/lsp/protocol.py +404 -0
  59. moai_adk/lsp/server_manager.py +248 -0
  60. moai_adk/project/configuration.py +8 -1
  61. moai_adk/py.typed +0 -0
  62. moai_adk/ralph/__init__.py +37 -0
  63. moai_adk/ralph/engine.py +307 -0
  64. moai_adk/rank/__init__.py +21 -0
  65. moai_adk/rank/auth.py +425 -0
  66. moai_adk/rank/client.py +557 -0
  67. moai_adk/rank/config.py +147 -0
  68. moai_adk/rank/hook.py +1503 -0
  69. moai_adk/rank/py.typed +0 -0
  70. moai_adk/statusline/__init__.py +3 -0
  71. moai_adk/statusline/enhanced_output_style_detector.py +5 -5
  72. moai_adk/statusline/main.py +20 -1
  73. moai_adk/statusline/memory_collector.py +268 -0
  74. moai_adk/statusline/renderer.py +54 -38
  75. moai_adk/tag_system/__init__.py +48 -0
  76. moai_adk/tag_system/atomic_ops.py +117 -0
  77. moai_adk/tag_system/linkage.py +335 -0
  78. moai_adk/tag_system/parser.py +176 -0
  79. moai_adk/tag_system/validator.py +200 -0
  80. moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
  81. moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
  82. moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
  83. moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
  84. moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
  85. moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
  86. moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
  87. moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
  88. moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
  89. moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
  90. moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
  91. moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
  92. moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
  93. moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
  94. moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
  95. moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
  96. moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
  97. moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
  98. moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
  99. moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
  100. moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
  101. moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
  102. moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
  103. moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
  104. moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
  105. moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
  106. moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
  107. moai_adk/templates/.claude/commands/moai/fix.md +264 -0
  108. moai_adk/templates/.claude/commands/moai/loop.md +363 -0
  109. moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
  110. moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
  111. moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
  112. moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
  113. moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
  114. moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
  115. moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
  116. moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
  117. moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
  118. moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
  119. moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
  120. moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
  121. moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
  122. moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
  123. moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
  124. moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
  125. moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
  126. moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
  127. moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
  128. moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
  129. moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
  130. moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
  131. moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
  132. moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
  133. moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
  134. moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
  135. moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
  136. moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
  137. moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
  138. moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
  139. moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
  140. moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
  141. moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
  142. moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
  143. moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
  144. moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
  145. moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
  146. moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
  147. moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
  148. moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
  149. moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
  150. moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
  151. moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
  152. moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
  153. moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
  154. moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
  155. moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
  156. moai_adk/templates/.claude/settings.json +154 -77
  157. moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
  158. moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
  159. moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
  160. moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
  161. moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
  162. moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
  163. moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
  164. moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
  165. moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
  166. moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
  167. moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
  168. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
  169. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
  170. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
  171. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
  172. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
  173. moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
  174. moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +118 -339
  175. moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
  176. moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
  177. moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
  178. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
  179. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
  180. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +32 -22
  181. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
  182. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
  183. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
  184. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
  185. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
  186. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
  187. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
  188. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
  189. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
  190. moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
  191. moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
  192. moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
  193. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
  194. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
  195. moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
  196. moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
  197. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
  198. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
  199. moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
  200. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
  201. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
  202. moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
  203. moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +14 -18
  204. moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
  205. moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
  206. moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
  207. moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
  208. moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
  209. moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -0
  210. moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
  211. moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1136 -0
  212. moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
  213. moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
  214. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
  215. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
  216. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
  217. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
  218. moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
  219. moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
  220. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +65 -542
  221. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
  222. moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
  223. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
  224. moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
  225. moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
  226. moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
  227. moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -0
  228. moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
  229. moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
  230. moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +42 -279
  231. moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
  232. moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -0
  233. moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
  234. moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1323 -0
  235. moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
  236. moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
  237. moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -0
  238. moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
  239. moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1087 -0
  240. moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
  241. moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -0
  242. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
  243. moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
  244. moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1024 -0
  245. moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
  246. moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
  247. moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
  248. moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
  249. moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
  250. moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
  251. moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
  252. moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -457
  253. moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
  254. moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
  255. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
  256. moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
  257. moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +75 -283
  258. moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
  259. moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
  260. moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
  261. moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
  262. moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
  263. moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
  264. moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
  265. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
  266. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
  267. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
  268. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
  269. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
  270. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
  271. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
  272. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
  273. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
  274. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
  275. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
  276. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
  277. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
  278. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
  279. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
  280. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
  281. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
  282. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
  283. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
  284. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
  285. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
  286. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
  287. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
  288. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
  289. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
  290. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
  291. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
  292. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
  293. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
  294. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
  295. moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
  296. moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
  297. moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +75 -330
  298. moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
  299. moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
  300. moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
  301. moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +100 -340
  302. moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
  303. moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
  304. moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
  305. moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
  306. moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
  307. moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
  308. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +113 -326
  309. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
  310. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
  311. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
  312. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
  313. moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
  314. moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +71 -302
  315. moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
  316. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
  317. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
  318. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
  319. moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
  320. moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
  321. moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +101 -412
  322. moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
  323. moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
  324. moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
  325. moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
  326. moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
  327. moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
  328. moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +96 -327
  329. moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
  330. moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
  331. moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
  332. moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
  333. moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
  334. moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
  335. moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +103 -428
  336. moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
  337. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
  338. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
  339. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
  340. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
  341. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
  342. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
  343. moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
  344. moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
  345. moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +96 -446
  346. moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
  347. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
  348. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
  349. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
  350. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
  351. moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
  352. moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
  353. moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
  354. moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
  355. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
  356. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
  357. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
  358. moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
  359. moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
  360. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
  361. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
  362. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
  363. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
  364. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
  365. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
  366. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
  367. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
  368. moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
  369. moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +225 -423
  370. moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
  371. moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
  372. moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
  373. moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
  374. moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
  375. moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
  376. moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
  377. moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
  378. moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
  379. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
  380. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
  381. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
  382. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
  383. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
  384. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
  385. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
  386. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
  387. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
  388. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
  389. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
  390. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
  391. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
  392. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
  393. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
  394. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
  395. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
  396. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
  397. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
  398. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
  399. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
  400. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
  401. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
  402. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
  403. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
  404. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
  405. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
  406. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
  407. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
  408. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
  409. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
  410. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
  411. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
  412. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
  413. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
  414. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
  415. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
  416. moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
  417. moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
  418. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
  419. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
  420. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
  421. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
  422. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
  423. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
  424. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
  425. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
  426. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
  427. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
  428. moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
  429. moai_adk/templates/.git-hooks/pre-push +162 -59
  430. moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
  431. moai_adk/templates/.gitignore +65 -107
  432. moai_adk/templates/.lsp.json +152 -0
  433. moai_adk/templates/.mcp.json +2 -20
  434. moai_adk/templates/.moai/announcements/en.json +18 -0
  435. moai_adk/templates/.moai/announcements/ja.json +18 -0
  436. moai_adk/templates/.moai/announcements/ko.json +18 -0
  437. moai_adk/templates/.moai/announcements/zh.json +18 -0
  438. moai_adk/templates/.moai/config/config.yaml +8 -2
  439. moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
  440. moai_adk/templates/.moai/config/sections/language.yaml +2 -2
  441. moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
  442. moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
  443. moai_adk/templates/.moai/config/sections/project.yaml +2 -2
  444. moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
  445. moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
  446. moai_adk/templates/.moai/config/sections/system.yaml +46 -1
  447. moai_adk/templates/.moai/config/sections/user.yaml +1 -1
  448. moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
  449. moai_adk/templates/.moai/llm-configs/glm.json +22 -0
  450. moai_adk/templates/CLAUDE.ja.md +343 -0
  451. moai_adk/templates/CLAUDE.ko.md +343 -0
  452. moai_adk/templates/CLAUDE.md +200 -499
  453. moai_adk/templates/CLAUDE.zh.md +343 -0
  454. moai_adk/utils/common.py +37 -0
  455. moai_adk/version.py +1 -1
  456. moai_adk-1.1.0.dist-info/METADATA +2443 -0
  457. moai_adk-1.1.0.dist-info/RECORD +701 -0
  458. {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
  459. moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
  460. moai_adk/core/config/auto_spec_config.py +0 -340
  461. moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
  462. moai_adk/core/spec/confidence_scoring.py +0 -680
  463. moai_adk/core/spec/ears_template_engine.py +0 -1247
  464. moai_adk/core/spec/quality_validator.py +0 -687
  465. moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
  466. moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
  467. moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
  468. moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
  469. moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
  470. moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
  471. moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
  472. moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
  473. moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
  474. moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
  475. moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
  476. moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
  477. moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
  478. moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
  479. moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
  480. moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
  481. moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
  482. moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
  483. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
  484. moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
  485. moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
  486. moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
  487. moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
  488. moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
  489. moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
  490. moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
  491. moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
  492. moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
  493. moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
  494. moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
  495. moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
  496. moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
  497. moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
  498. moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
  499. moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
  500. moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
  501. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
  502. moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
  503. moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
  504. moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
  505. moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
  506. moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
  507. moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
  508. moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
  509. moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
  510. moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
  511. moai_adk-0.34.0.dist-info/METADATA +0 -2999
  512. moai_adk-0.34.0.dist-info/RECORD +0 -463
  513. moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
  514. /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
  515. /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  516. /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
  517. /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
  518. /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  519. /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
  520. /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
  521. /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
  522. /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
  523. /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
  524. {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,268 @@
1
+ """
2
+ Memory collector for MoAI-ADK statusline
3
+
4
+ Collects memory usage information for display in the status bar.
5
+ Uses psutil for cross-platform memory monitoring.
6
+ """
7
+
8
+ import logging
9
+ import os
10
+ from dataclasses import dataclass
11
+ from datetime import datetime, timedelta
12
+ from typing import Optional
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ @dataclass
18
+ class MemoryInfo:
19
+ """Memory usage information"""
20
+
21
+ # Process memory (current Python process)
22
+ process_rss_mb: float # Resident Set Size
23
+ process_vms_mb: float # Virtual Memory Size
24
+
25
+ # System memory
26
+ system_total_mb: float
27
+ system_available_mb: float
28
+ system_percent: float
29
+
30
+ # Formatted strings for display
31
+ display_process: str # e.g., "128MB"
32
+ display_system: str # e.g., "8.2GB/16GB"
33
+ display_percent: str # e.g., "51%"
34
+
35
+ timestamp: datetime
36
+
37
+
38
+ class MemoryCollector:
39
+ """
40
+ Memory collector for statusline display.
41
+
42
+ Features:
43
+ - Process memory monitoring (current Python process)
44
+ - System memory monitoring
45
+ - Caching with configurable TTL
46
+ - Graceful degradation on errors
47
+ - Multiple display format options
48
+ """
49
+
50
+ # Cache configuration
51
+ DEFAULT_CACHE_TTL_SECONDS = 10 # Memory doesn't change rapidly
52
+
53
+ def __init__(self, cache_ttl_seconds: Optional[int] = None):
54
+ """
55
+ Initialize memory collector.
56
+
57
+ Args:
58
+ cache_ttl_seconds: Cache TTL in seconds. If None, uses default.
59
+ """
60
+ self._cache_ttl = timedelta(seconds=cache_ttl_seconds or self.DEFAULT_CACHE_TTL_SECONDS)
61
+ self._cache: Optional[MemoryInfo] = None
62
+ self._cache_time: Optional[datetime] = None
63
+ self._logger = logging.getLogger(__name__)
64
+
65
+ # Check if psutil is available
66
+ self._psutil_available = self._check_psutil()
67
+
68
+ def _check_psutil(self) -> bool:
69
+ """Check if psutil is available."""
70
+ try:
71
+ import psutil # noqa: F401
72
+
73
+ return True
74
+ except ImportError:
75
+ self._logger.warning("psutil not available, memory monitoring disabled")
76
+ return False
77
+
78
+ def get_memory_info(self, force_refresh: bool = False) -> Optional[MemoryInfo]:
79
+ """
80
+ Get memory usage information.
81
+
82
+ Args:
83
+ force_refresh: If True, bypass cache and force fresh collection
84
+
85
+ Returns:
86
+ MemoryInfo object or None if collection fails
87
+ """
88
+ if not self._psutil_available:
89
+ return None
90
+
91
+ # Check cache
92
+ if not force_refresh and self._is_cache_valid():
93
+ return self._cache
94
+
95
+ try:
96
+ memory_info = self._collect_memory_info()
97
+ self._update_cache(memory_info)
98
+ return memory_info
99
+ except Exception as e:
100
+ self._logger.error(f"Error collecting memory info: {e}")
101
+ return self._cache # Return stale cache on error
102
+
103
+ def get_display_string(self, mode: str = "process", force_refresh: bool = False) -> str:
104
+ """
105
+ Get formatted memory string for statusline display.
106
+
107
+ Args:
108
+ mode: Display mode
109
+ - "process": Process memory (e.g., "128MB")
110
+ - "system": System memory usage (e.g., "8.2GB/16GB")
111
+ - "percent": System memory percentage (e.g., "51%")
112
+ - "compact": Process memory compact (e.g., "128M")
113
+ force_refresh: If True, bypass cache
114
+
115
+ Returns:
116
+ Formatted memory string, or "N/A" on error
117
+ """
118
+ memory_info = self.get_memory_info(force_refresh)
119
+
120
+ if memory_info is None:
121
+ return "N/A"
122
+
123
+ if mode == "process":
124
+ return memory_info.display_process
125
+ elif mode == "system":
126
+ return memory_info.display_system
127
+ elif mode == "percent":
128
+ return memory_info.display_percent
129
+ elif mode == "compact":
130
+ # Compact format without "MB" suffix
131
+ return self._format_compact(memory_info.process_rss_mb)
132
+ else:
133
+ return memory_info.display_process
134
+
135
+ def _collect_memory_info(self) -> MemoryInfo:
136
+ """
137
+ Collect memory information using psutil.
138
+
139
+ Returns:
140
+ MemoryInfo object with current memory usage
141
+ """
142
+ import psutil
143
+
144
+ # Get current process info
145
+ process = psutil.Process(os.getpid())
146
+ process_memory = process.memory_info()
147
+
148
+ # Convert to MB
149
+ process_rss_mb = process_memory.rss / (1024 * 1024)
150
+ process_vms_mb = process_memory.vms / (1024 * 1024)
151
+
152
+ # Get system memory info
153
+ system_memory = psutil.virtual_memory()
154
+ system_total_mb = system_memory.total / (1024 * 1024)
155
+ system_available_mb = system_memory.available / (1024 * 1024)
156
+ system_percent = system_memory.percent
157
+
158
+ # Format display strings
159
+ display_process = self._format_size(process_rss_mb)
160
+ display_system = (
161
+ f"{self._format_size(system_total_mb - system_available_mb)}/{self._format_size(system_total_mb)}"
162
+ )
163
+ display_percent = f"{system_percent:.0f}%"
164
+
165
+ return MemoryInfo(
166
+ process_rss_mb=process_rss_mb,
167
+ process_vms_mb=process_vms_mb,
168
+ system_total_mb=system_total_mb,
169
+ system_available_mb=system_available_mb,
170
+ system_percent=system_percent,
171
+ display_process=display_process,
172
+ display_system=display_system,
173
+ display_percent=display_percent,
174
+ timestamp=datetime.now(),
175
+ )
176
+
177
+ def _format_size(self, size_mb: float) -> str:
178
+ """
179
+ Format size in MB to human-readable string.
180
+
181
+ Args:
182
+ size_mb: Size in megabytes
183
+
184
+ Returns:
185
+ Formatted string (e.g., "128MB", "1.2GB")
186
+ """
187
+ if size_mb >= 1024:
188
+ return f"{size_mb / 1024:.1f}GB"
189
+ elif size_mb >= 100:
190
+ return f"{size_mb:.0f}MB"
191
+ elif size_mb >= 10:
192
+ return f"{size_mb:.1f}MB"
193
+ else:
194
+ return f"{size_mb:.2f}MB"
195
+
196
+ def _format_compact(self, size_mb: float) -> str:
197
+ """
198
+ Format size in compact format for tight spaces.
199
+
200
+ Args:
201
+ size_mb: Size in megabytes
202
+
203
+ Returns:
204
+ Compact formatted string (e.g., "128M", "1.2G")
205
+ """
206
+ if size_mb >= 1024:
207
+ return f"{size_mb / 1024:.1f}G"
208
+ else:
209
+ return f"{size_mb:.0f}M"
210
+
211
+ def _is_cache_valid(self) -> bool:
212
+ """Check if cache is still valid."""
213
+ if self._cache is None or self._cache_time is None:
214
+ return False
215
+
216
+ age = datetime.now() - self._cache_time
217
+ return age < self._cache_ttl
218
+
219
+ def _update_cache(self, memory_info: MemoryInfo) -> None:
220
+ """Update cache with new memory info."""
221
+ self._cache = memory_info
222
+ self._cache_time = datetime.now()
223
+
224
+ def clear_cache(self) -> None:
225
+ """Clear the memory cache."""
226
+ self._cache = None
227
+ self._cache_time = None
228
+
229
+ def get_cache_age_seconds(self) -> Optional[float]:
230
+ """
231
+ Get cache age in seconds.
232
+
233
+ Returns:
234
+ Cache age in seconds, or None if no cache
235
+ """
236
+ if self._cache_time is None:
237
+ return None
238
+ return (datetime.now() - self._cache_time).total_seconds()
239
+
240
+
241
+ # Singleton instance for convenience
242
+ _default_collector: Optional[MemoryCollector] = None
243
+
244
+
245
+ def get_memory_collector() -> MemoryCollector:
246
+ """
247
+ Get the default memory collector instance.
248
+
249
+ Returns:
250
+ MemoryCollector singleton instance
251
+ """
252
+ global _default_collector
253
+ if _default_collector is None:
254
+ _default_collector = MemoryCollector()
255
+ return _default_collector
256
+
257
+
258
+ def get_memory_display(mode: str = "process") -> str:
259
+ """
260
+ Convenience function to get memory display string.
261
+
262
+ Args:
263
+ mode: Display mode ("process", "system", "percent", "compact")
264
+
265
+ Returns:
266
+ Formatted memory string
267
+ """
268
+ return get_memory_collector().get_display_string(mode)
@@ -0,0 +1,78 @@
1
+ # type: ignore
2
+ """
3
+ Session metrics tracker for statusline
4
+
5
+ """
6
+
7
+ import logging
8
+ from datetime import datetime, timedelta
9
+ from typing import Optional
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ class MetricsTracker:
15
+ """Tracks session duration with 10-second caching"""
16
+
17
+ # Configuration
18
+ _CACHE_TTL_SECONDS = 10
19
+
20
+ def __init__(self):
21
+ """Initialize metrics tracker"""
22
+ self._session_start: datetime = datetime.now()
23
+ self._duration_cache: Optional[str] = None
24
+ self._cache_time: Optional[datetime] = None
25
+ self._cache_ttl = timedelta(seconds=self._CACHE_TTL_SECONDS)
26
+
27
+ def get_duration(self) -> str:
28
+ """
29
+ Get formatted session duration
30
+
31
+ Returns:
32
+ Formatted duration string (e.g., "5m", "1h 30m")
33
+ """
34
+ # Check cache validity
35
+ if self._is_cache_valid():
36
+ return self._duration_cache
37
+
38
+ # Calculate and format duration
39
+ duration = self._calculate_and_format_duration()
40
+ self._update_cache(duration)
41
+ return duration
42
+
43
+ def _calculate_and_format_duration(self) -> str:
44
+ """
45
+ Calculate session duration and format it
46
+
47
+ Returns:
48
+ Formatted duration string
49
+ """
50
+ elapsed = datetime.now() - self._session_start
51
+ total_seconds = int(elapsed.total_seconds())
52
+
53
+ # Format based on duration range
54
+ if total_seconds < 60:
55
+ return f"{total_seconds}s"
56
+ elif total_seconds < 3600:
57
+ minutes = total_seconds // 60
58
+ seconds = total_seconds % 60
59
+ if seconds > 0:
60
+ return f"{minutes}m {seconds}s"
61
+ return f"{minutes}m"
62
+ else:
63
+ hours = total_seconds // 3600
64
+ minutes = (total_seconds % 3600) // 60
65
+ if minutes > 0:
66
+ return f"{hours}h {minutes}m"
67
+ return f"{hours}h"
68
+
69
+ def _is_cache_valid(self) -> bool:
70
+ """Check if duration cache is still valid"""
71
+ if self._duration_cache is None or self._cache_time is None:
72
+ return False
73
+ return datetime.now() - self._cache_time < self._cache_ttl
74
+
75
+ def _update_cache(self, duration: str) -> None:
76
+ """Update duration cache"""
77
+ self._duration_cache = duration
78
+ self._cache_time = datetime.now()
@@ -5,8 +5,10 @@ Provides HookPayload and HookResult classes used by hook handlers
5
5
  to process events and return execution results to Claude Code.
6
6
  """
7
7
 
8
+ from __future__ import annotations
9
+
8
10
  from dataclasses import asdict, dataclass
9
- from typing import Any, Dict, List, Optional
11
+ from typing import Any
10
12
 
11
13
 
12
14
  class HookPayload(dict):
@@ -27,7 +29,7 @@ class HookPayload(dict):
27
29
  working_dir = payload.get("cwd", ".")
28
30
  """
29
31
 
30
- def __init__(self, data: Optional[Dict[str, Any]] = None):
32
+ def __init__(self, data: dict[str, Any] | None = None):
31
33
  """Initialize HookPayload with optional data dictionary."""
32
34
  super().__init__(data or {})
33
35
 
@@ -39,7 +41,7 @@ class HookPayload(dict):
39
41
  """Set value in payload."""
40
42
  super().__setitem__(key, value)
41
43
 
42
- def update(self, other: Dict[str, Any]) -> None: # type: ignore[override]
44
+ def update(self, other: dict[str, Any]) -> None: # type: ignore[override]
43
45
  """Update payload with another dictionary."""
44
46
  super().update(other)
45
47
 
@@ -77,10 +79,10 @@ class HookResult:
77
79
  )
78
80
  """
79
81
 
80
- system_message: Optional[str] = None
82
+ system_message: str | None = None
81
83
  continue_execution: bool = True
82
- context_files: List[str] = None
83
- hook_specific_output: Optional[Dict[str, Any]] = None
84
+ context_files: list[str] = None # type: ignore[assignment]
85
+ hook_specific_output: dict[str, Any] | None = None
84
86
  block_execution: bool = False
85
87
 
86
88
  def __post_init__(self):
@@ -90,7 +92,7 @@ class HookResult:
90
92
  if self.hook_specific_output is None:
91
93
  self.hook_specific_output = {}
92
94
 
93
- def to_dict(self) -> Dict[str, Any]:
95
+ def to_dict(self) -> dict[str, Any]:
94
96
  """
95
97
  Convert HookResult to a dictionary for JSON serialization.
96
98
 
@@ -1,28 +1,219 @@
1
- """Path utility functions for MoAI-ADK hooks"""
1
+ """Path utility functions for MoAI-ADK hooks
2
2
 
3
+ Provides safe project root detection and .moai directory management.
4
+ Prevents .moai directory creation outside of project root.
5
+
6
+ Environment Variables:
7
+ - MOAI_PROJECT_ROOT: Override project root detection (absolute path)
8
+ - CLAUDE_PROJECT_DIR: Claude Code project directory (fallback)
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import os
3
14
  from pathlib import Path
15
+ from typing import Optional
16
+
17
+ # Project root markers (files/dirs that indicate project root)
18
+ PROJECT_ROOT_MARKERS = [
19
+ ".moai/config/config.yaml", # Primary: MoAI config
20
+ ".moai/config/sections", # Section-based config
21
+ "CLAUDE.md", # Claude Code project marker
22
+ ".claude", # Claude directory
23
+ ".git", # Git repository root
24
+ "pyproject.toml", # Python project
25
+ "package.json", # Node.js project
26
+ "Cargo.toml", # Rust project
27
+ "go.mod", # Go project
28
+ ]
4
29
 
30
+ # Cache for project root to avoid repeated filesystem traversals
31
+ _project_root_cache: Path | None = None
5
32
 
6
- def find_project_root() -> Path:
33
+
34
+ def get_project_root_from_env() -> Optional[Path]:
35
+ """Get project root from environment variables.
36
+
37
+ Checks in order:
38
+ 1. MOAI_PROJECT_ROOT - explicit override
39
+ 2. CLAUDE_PROJECT_DIR - Claude Code's project directory
40
+
41
+ Returns:
42
+ Path if valid directory found, None otherwise
7
43
  """
8
- Find project root by locating .moai directory.
44
+ # Check MOAI_PROJECT_ROOT first (explicit override)
45
+ moai_root = os.environ.get("MOAI_PROJECT_ROOT")
46
+ if moai_root:
47
+ root_path = Path(moai_root).resolve()
48
+ if root_path.is_dir():
49
+ return root_path
9
50
 
10
- Starts from current file location and traverses upward
11
- until .moai directory is found.
51
+ # Check CLAUDE_PROJECT_DIR (Claude Code sets this)
52
+ claude_dir = os.environ.get("CLAUDE_PROJECT_DIR")
53
+ if claude_dir:
54
+ root_path = Path(claude_dir).resolve()
55
+ if root_path.is_dir():
56
+ return root_path
57
+
58
+ return None
59
+
60
+
61
+ def find_project_root(start_path: Path | None = None) -> Path:
62
+ """Find project root by locating project markers.
63
+
64
+ Search order:
65
+ 1. Environment variables (MOAI_PROJECT_ROOT, CLAUDE_PROJECT_DIR)
66
+ 2. Traverse upward from start_path looking for project markers
67
+ 3. Fallback to current working directory
68
+
69
+ Args:
70
+ start_path: Starting directory for search (defaults to current file location)
12
71
 
13
72
  Returns:
14
- Path: Project root directory containing .moai/
73
+ Path: Project root directory
15
74
 
16
- Fallback:
17
- Returns Path.cwd() if .moai not found
75
+ Note:
76
+ Results are cached for performance. Use clear_project_root_cache()
77
+ to force re-detection.
18
78
  """
19
- current = Path(__file__).resolve().parent
79
+ global _project_root_cache
80
+
81
+ # Return cached result if available
82
+ if _project_root_cache is not None:
83
+ return _project_root_cache
84
+
85
+ # Check environment variables first
86
+ env_root = get_project_root_from_env()
87
+ if env_root:
88
+ _project_root_cache = env_root
89
+ return env_root
20
90
 
21
- # Traverse upward to find .moai directory
91
+ # Determine starting point
92
+ if start_path is None:
93
+ start_path = Path(__file__).resolve().parent
94
+ else:
95
+ start_path = Path(start_path).resolve()
96
+
97
+ # Traverse upward to find project markers
98
+ current = start_path
22
99
  while current != current.parent:
23
- if (current / ".moai").is_dir():
24
- return current
100
+ for marker in PROJECT_ROOT_MARKERS:
101
+ marker_path = current / marker
102
+ if marker_path.exists():
103
+ _project_root_cache = current
104
+ return current
25
105
  current = current.parent
26
106
 
27
107
  # Fallback to current working directory
28
- return Path.cwd()
108
+ cwd = Path.cwd()
109
+ _project_root_cache = cwd
110
+ return cwd
111
+
112
+
113
+ def clear_project_root_cache() -> None:
114
+ """Clear the cached project root.
115
+
116
+ Use when project root may have changed (e.g., after directory change).
117
+ """
118
+ global _project_root_cache
119
+ _project_root_cache = None
120
+
121
+
122
+ def get_moai_dir() -> Path:
123
+ """Get the .moai directory path in project root.
124
+
125
+ Returns:
126
+ Path: Absolute path to .moai directory
127
+
128
+ Note:
129
+ Does NOT create the directory. Use ensure_moai_dir() for that.
130
+ """
131
+ return find_project_root() / ".moai"
132
+
133
+
134
+ def ensure_moai_dir(subpath: str = "") -> Path:
135
+ """Ensure .moai subdirectory exists in project root.
136
+
137
+ Creates the directory structure if it doesn't exist.
138
+ ONLY creates within project root to prevent pollution.
139
+
140
+ Args:
141
+ subpath: Subdirectory path within .moai (e.g., "cache", "logs/sessions")
142
+
143
+ Returns:
144
+ Path: Absolute path to the directory
145
+
146
+ Raises:
147
+ ValueError: If attempting to create outside project root
148
+ """
149
+ project_root = find_project_root()
150
+ moai_dir = project_root / ".moai"
151
+
152
+ if subpath:
153
+ target_dir = moai_dir / subpath
154
+ else:
155
+ target_dir = moai_dir
156
+
157
+ # Safety check: ensure target is within project root
158
+ try:
159
+ target_dir.resolve().relative_to(project_root.resolve())
160
+ except ValueError:
161
+ raise ValueError(f"Cannot create .moai directory outside project root: {target_dir}")
162
+
163
+ # Create directory if it doesn't exist
164
+ target_dir.mkdir(parents=True, exist_ok=True)
165
+ return target_dir
166
+
167
+
168
+ def is_within_project_root(path: Path) -> bool:
169
+ """Check if a path is within the project root.
170
+
171
+ Args:
172
+ path: Path to check
173
+
174
+ Returns:
175
+ True if path is within project root, False otherwise
176
+ """
177
+ project_root = find_project_root()
178
+ try:
179
+ Path(path).resolve().relative_to(project_root.resolve())
180
+ return True
181
+ except ValueError:
182
+ return False
183
+
184
+
185
+ def get_safe_moai_path(relative_path: str) -> Path:
186
+ """Get absolute path within .moai directory safely.
187
+
188
+ This is the recommended way to get paths within .moai.
189
+ Always returns absolute path based on project root.
190
+
191
+ Args:
192
+ relative_path: Path relative to .moai (e.g., "cache/version.json")
193
+
194
+ Returns:
195
+ Path: Absolute path within project root's .moai directory
196
+
197
+ Example:
198
+ >>> get_safe_moai_path("logs/sessions")
199
+ PosixPath('/path/to/project/.moai/logs/sessions')
200
+
201
+ >>> get_safe_moai_path("memory/last-session-state.json")
202
+ PosixPath('/path/to/project/.moai/memory/last-session-state.json')
203
+ """
204
+ return find_project_root() / ".moai" / relative_path
205
+
206
+
207
+ def validate_cwd_is_project_root() -> bool:
208
+ """Validate that current working directory is the project root.
209
+
210
+ Returns:
211
+ True if CWD is project root, False otherwise
212
+
213
+ Use Case:
214
+ Hooks should check this before creating .moai directories
215
+ to prevent creating them in wrong locations.
216
+ """
217
+ cwd = Path.cwd().resolve()
218
+ project_root = find_project_root().resolve()
219
+ return cwd == project_root
@@ -25,16 +25,27 @@ except ImportError:
25
25
  pass
26
26
 
27
27
 
28
+ # Import find_project_root from path_utils (canonical implementation)
29
+ # This consolidates project root detection to a single source of truth
30
+ try:
31
+ from lib.path_utils import find_project_root as _canonical_find_project_root
32
+ except ImportError:
33
+ # Fallback if path_utils not available
34
+ _canonical_find_project_root = None # type: ignore
35
+
36
+
28
37
  # Cache directory for version check results
29
38
  CACHE_DIR_NAME = ".moai/cache"
30
39
 
31
40
 
32
41
  def find_project_root(start_path: str | Path = ".") -> Path:
33
- """Find MoAI-ADK project root by searching upward for .moai/config/config.yaml
42
+ """Find MoAI-ADK project root by searching upward for project markers.
34
43
 
35
- Traverses up the directory tree until it finds .moai/config/config.yaml or CLAUDE.md,
36
- which indicates the project root. This ensures cache and other files are
37
- always created in the correct location, regardless of where hooks execute.
44
+ This is a wrapper around path_utils.find_project_root() for backward compatibility.
45
+ The canonical implementation in path_utils provides:
46
+ - Environment variable support (MOAI_PROJECT_ROOT, CLAUDE_PROJECT_DIR)
47
+ - Caching for performance
48
+ - Multiple project marker detection
38
49
 
39
50
  Args:
40
51
  start_path: Starting directory (default: current directory)
@@ -48,17 +59,15 @@ def find_project_root(start_path: str | Path = ".") -> Path:
48
59
  >>> find_project_root(".claude/hooks/alfred")
49
60
  Path("/Users/user/my-project") # Found root 3 levels up
50
61
 
51
- Notes:
52
- - Searches for .moai/config/config.yaml first (most reliable)
53
- - Falls back to CLAUDE.md if config.yaml not found
54
- - Max depth: 10 levels up (prevent infinite loop)
55
- - Returns absolute path for consistency
56
-
57
- TDD History:
58
- - RED: 4 test scenarios (root, nested, not found, symlinks)
59
- - GREEN: Minimal upward search with .moai/config/config.yaml detection
60
- - REFACTOR: Add CLAUDE.md fallback, max depth limit, absolute path return
62
+ Note:
63
+ For new code, prefer using path_utils.find_project_root() directly.
61
64
  """
65
+ # Use canonical implementation if available
66
+ if _canonical_find_project_root is not None:
67
+ path = Path(start_path).resolve() if start_path != "." else None
68
+ return _canonical_find_project_root(path)
69
+
70
+ # Fallback implementation if path_utils not available
62
71
  current = Path(start_path).resolve()
63
72
  max_depth = 10 # Prevent infinite loop
64
73