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,651 @@
1
+ """
2
+ Session Manager for MoAI-ADK Agent Orchestration
3
+
4
+ Manages sub-agent session IDs and resume logic based on official Claude Code documentation.
5
+ Provides session tracking, result storage, and resume decision making.
6
+
7
+ Official Documentation Reference:
8
+ https://code.claude.com/docs/en/sub-agents
9
+
10
+ Key Principles:
11
+ - Sub-agents operate in isolated context windows
12
+ - No direct agent-to-agent communication
13
+ - Results flow through main conversation thread (Alfred)
14
+ - Resume preserves full conversation history
15
+ - Each execution gets unique agentId
16
+ """
17
+
18
+ import json
19
+ import logging
20
+ from datetime import datetime
21
+ from pathlib import Path
22
+ from typing import Any, Dict, List, Optional
23
+
24
+ logger = logging.getLogger(__name__)
25
+
26
+
27
+ class SessionManager:
28
+ """
29
+ Manages sub-agent session IDs and resume logic.
30
+
31
+ Based on official Claude Code sub-agent pattern:
32
+ - Each agent execution gets unique agentId
33
+ - Resume parameter inherits full conversation history
34
+ - Session transcripts stored in agent-{agentId}.jsonl
35
+
36
+ Attributes:
37
+ _sessions: Mapping of agent_name to current agentId
38
+ _results: Storage of agent execution results (agentId → result data)
39
+ _chains: Workflow chains tracking (chain_name → [agentIds])
40
+ _session_file: Persistent storage location
41
+ _transcript_dir: Directory for conversation transcripts
42
+ """
43
+
44
+ def __init__(
45
+ self,
46
+ session_file: Optional[Path] = None,
47
+ transcript_dir: Optional[Path] = None,
48
+ ):
49
+ """
50
+ Initialize SessionManager.
51
+
52
+ Args:
53
+ session_file: Path to session storage JSON file
54
+ (default: .moai/memory/agent-sessions.json)
55
+ transcript_dir: Directory for agent transcripts
56
+ (default: .moai/logs/agent-transcripts/)
57
+ """
58
+ # Default paths
59
+ project_root = Path.cwd()
60
+ self._session_file = session_file or project_root / ".moai" / "memory" / "agent-sessions.json"
61
+ self._transcript_dir = transcript_dir or project_root / ".moai" / "logs" / "agent-transcripts"
62
+
63
+ # Ensure directories exist
64
+ self._session_file.parent.mkdir(parents=True, exist_ok=True)
65
+ self._transcript_dir.mkdir(parents=True, exist_ok=True)
66
+
67
+ # In-memory storage
68
+ self._sessions: Dict[str, str] = {} # agent_name → current agentId
69
+ self._results: Dict[str, Any] = {} # agentId → result data
70
+ self._chains: Dict[str, List[str]] = {} # chain_name → [agentIds]
71
+ self._metadata: Dict[str, Dict[str, Any]] = {} # agentId → metadata
72
+
73
+ # Load existing sessions
74
+ self._load_sessions()
75
+
76
+ def _load_sessions(self) -> None:
77
+ """Load session data from persistent storage."""
78
+ if self._session_file.exists():
79
+ try:
80
+ with open(self._session_file, "r", encoding="utf-8") as f:
81
+ data = json.load(f)
82
+ self._sessions = data.get("sessions", {})
83
+ self._chains = data.get("chains", {})
84
+ self._metadata = data.get("metadata", {})
85
+ logger.info(f"Loaded {len(self._sessions)} sessions from {self._session_file}")
86
+ except json.JSONDecodeError as e:
87
+ logger.warning(f"Failed to load sessions: {e}")
88
+ self._sessions = {}
89
+ self._chains = {}
90
+ self._metadata = {}
91
+
92
+ def _save_sessions(self) -> None:
93
+ """Save session data to persistent storage."""
94
+ data = {
95
+ "sessions": self._sessions,
96
+ "chains": self._chains,
97
+ "metadata": self._metadata,
98
+ "last_updated": datetime.now().isoformat(),
99
+ }
100
+
101
+ try:
102
+ with open(self._session_file, "w", encoding="utf-8") as f:
103
+ json.dump(data, f, indent=2, ensure_ascii=False)
104
+ logger.debug(f"Saved sessions to {self._session_file}")
105
+ except IOError as e:
106
+ logger.error(f"Failed to save sessions: {e}")
107
+
108
+ def register_agent_result(
109
+ self,
110
+ agent_name: str,
111
+ agent_id: str,
112
+ result: Any,
113
+ chain_id: Optional[str] = None,
114
+ ) -> None:
115
+ """
116
+ Register agent execution result in main context.
117
+
118
+ This method implements the official pattern:
119
+ "Results flow through main conversation thread"
120
+
121
+ Args:
122
+ agent_name: Name of the agent (e.g., "tdd-implementer")
123
+ agent_id: Unique agentId returned from Task() execution
124
+ result: Result data from agent execution
125
+ chain_id: Optional workflow chain identifier (e.g., "SPEC-AUTH-001-implementation")
126
+ """
127
+ # Store agent ID mapping
128
+ self._sessions[agent_name] = agent_id
129
+
130
+ # Store result data
131
+ self._results[agent_id] = {
132
+ "agent_name": agent_name,
133
+ "result": result,
134
+ "timestamp": datetime.now().isoformat(),
135
+ "chain_id": chain_id,
136
+ }
137
+
138
+ # Track in workflow chain
139
+ if chain_id:
140
+ if chain_id not in self._chains:
141
+ self._chains[chain_id] = []
142
+ self._chains[chain_id].append(agent_id)
143
+
144
+ # Store metadata
145
+ self._metadata[agent_id] = {
146
+ "agent_name": agent_name,
147
+ "created_at": datetime.now().isoformat(),
148
+ "chain_id": chain_id,
149
+ "resume_count": 0,
150
+ }
151
+
152
+ # Persist to disk
153
+ self._save_sessions()
154
+
155
+ logger.info(f"Registered agent result: {agent_name} (agentId: {agent_id[:8]}..., chain: {chain_id})")
156
+
157
+ def get_resume_id(
158
+ self,
159
+ agent_name: str,
160
+ chain_id: Optional[str] = None,
161
+ ) -> Optional[str]:
162
+ """
163
+ Get agentId to resume if continuing same work.
164
+
165
+ Official pattern:
166
+ - resume parameter preserves full conversation history
167
+ - Same agent can continue work with context
168
+
169
+ Args:
170
+ agent_name: Name of the agent to resume
171
+ chain_id: Optional workflow chain to resume
172
+
173
+ Returns:
174
+ agentId to resume, or None if should start new session
175
+ """
176
+ # Check if agent has previous session
177
+ if agent_name not in self._sessions:
178
+ logger.debug(f"No previous session for {agent_name}")
179
+ return None
180
+
181
+ agent_id = self._sessions[agent_name]
182
+
183
+ # Validate chain_id if provided
184
+ if chain_id:
185
+ metadata = self._metadata.get(agent_id, {})
186
+ if metadata.get("chain_id") != chain_id:
187
+ logger.debug(f"Chain mismatch: {agent_name} was in {metadata.get('chain_id')}, requested {chain_id}")
188
+ return None
189
+
190
+ logger.info(f"Resume ID for {agent_name}: {agent_id[:8]}...")
191
+ return agent_id
192
+
193
+ def should_resume(
194
+ self,
195
+ agent_name: str,
196
+ current_task: str,
197
+ previous_task: Optional[str] = None,
198
+ ) -> bool:
199
+ """
200
+ Determine if resume or new invocation is appropriate.
201
+
202
+ Decision logic based on official best practices:
203
+ - Resume: Same agent, continuing previous task, context continuity needed
204
+ - New: Different agent, independent task, context switch
205
+
206
+ Args:
207
+ agent_name: Name of the agent
208
+ current_task: Description of current task
209
+ previous_task: Description of previous task (if any)
210
+
211
+ Returns:
212
+ True if should resume, False if should start new session
213
+ """
214
+ # No previous session → new
215
+ if agent_name not in self._sessions:
216
+ return False
217
+
218
+ # No previous task information → new
219
+ if not previous_task:
220
+ return False
221
+
222
+ # Check resume count (prevent infinite loops)
223
+ agent_id = self._sessions[agent_name]
224
+ metadata = self._metadata.get(agent_id, {})
225
+ resume_count = metadata.get("resume_count", 0)
226
+
227
+ if resume_count >= 5: # Max resume depth from config
228
+ logger.warning(f"{agent_name} has been resumed {resume_count} times, starting new session")
229
+ return False
230
+
231
+ # Heuristic: Check if tasks are related
232
+ # (This can be enhanced with semantic similarity)
233
+ task_keywords_match = any(
234
+ keyword in current_task.lower() for keyword in previous_task.lower().split() if len(keyword) > 4
235
+ )
236
+
237
+ if task_keywords_match:
238
+ logger.info(f"Tasks appear related, resuming {agent_name}")
239
+ return True
240
+
241
+ logger.info(f"Tasks appear independent, starting new session for {agent_name}")
242
+ return False
243
+
244
+ def increment_resume_count(self, agent_id: str) -> None:
245
+ """
246
+ Increment resume count for an agent session.
247
+
248
+ Args:
249
+ agent_id: Agent session ID
250
+ """
251
+ if agent_id in self._metadata:
252
+ self._metadata[agent_id]["resume_count"] += 1
253
+ self._metadata[agent_id]["last_resumed_at"] = datetime.now().isoformat()
254
+ self._save_sessions()
255
+
256
+ def get_agent_result(self, agent_id: str) -> Optional[Any]:
257
+ """
258
+ Retrieve stored result for an agent execution.
259
+
260
+ Args:
261
+ agent_id: Agent session ID
262
+
263
+ Returns:
264
+ Stored result data, or None if not found
265
+ """
266
+ result_data = self._results.get(agent_id)
267
+ if result_data:
268
+ return result_data["result"]
269
+ return None
270
+
271
+ def get_chain_results(self, chain_id: str) -> List[Dict[str, Any]]:
272
+ """
273
+ Get all agent results in a workflow chain.
274
+
275
+ Args:
276
+ chain_id: Workflow chain identifier
277
+
278
+ Returns:
279
+ List of result dictionaries in execution order
280
+ """
281
+ if chain_id not in self._chains:
282
+ return []
283
+
284
+ agent_ids = self._chains[chain_id]
285
+ results = []
286
+
287
+ for agent_id in agent_ids:
288
+ if agent_id in self._results:
289
+ results.append(self._results[agent_id])
290
+
291
+ return results
292
+
293
+ def get_chain_summary(self, chain_id: str) -> Dict[str, Any]:
294
+ """
295
+ Get summary of a workflow chain.
296
+
297
+ Args:
298
+ chain_id: Workflow chain identifier
299
+
300
+ Returns:
301
+ Summary dictionary with agent names, timestamps, etc.
302
+ """
303
+ results = self.get_chain_results(chain_id)
304
+
305
+ if not results:
306
+ return {"chain_id": chain_id, "status": "not_found"}
307
+
308
+ return {
309
+ "chain_id": chain_id,
310
+ "agent_count": len(results),
311
+ "agents": [r["agent_name"] for r in results],
312
+ "started_at": results[0]["timestamp"] if results else None,
313
+ "completed_at": results[-1]["timestamp"] if results else None,
314
+ "status": "completed",
315
+ }
316
+
317
+ def clear_agent_session(self, agent_name: str) -> None:
318
+ """
319
+ Clear session data for a specific agent.
320
+
321
+ Use when you want to force a new session for an agent.
322
+
323
+ Args:
324
+ agent_name: Name of the agent
325
+ """
326
+ if agent_name in self._sessions:
327
+ agent_id = self._sessions[agent_name]
328
+ del self._sessions[agent_name]
329
+
330
+ if agent_id in self._results:
331
+ del self._results[agent_id]
332
+
333
+ if agent_id in self._metadata:
334
+ del self._metadata[agent_id]
335
+
336
+ self._save_sessions()
337
+ logger.info(f"Cleared session for {agent_name}")
338
+
339
+ def clear_chain(self, chain_id: str) -> None:
340
+ """
341
+ Clear all sessions in a workflow chain.
342
+
343
+ Args:
344
+ chain_id: Workflow chain identifier
345
+ """
346
+ if chain_id in self._chains:
347
+ agent_ids = self._chains[chain_id]
348
+
349
+ for agent_id in agent_ids:
350
+ if agent_id in self._results:
351
+ del self._results[agent_id]
352
+ if agent_id in self._metadata:
353
+ del self._metadata[agent_id]
354
+
355
+ del self._chains[chain_id]
356
+ self._save_sessions()
357
+ logger.info(f"Cleared chain: {chain_id}")
358
+
359
+ def get_all_sessions(self) -> Dict[str, Any]:
360
+ """
361
+ Get all active sessions.
362
+
363
+ Returns:
364
+ Dictionary with all session data
365
+ """
366
+ return {
367
+ "sessions": self._sessions,
368
+ "chains": list(self._chains.keys()),
369
+ "total_results": len(self._results),
370
+ }
371
+
372
+ def export_transcript(self, agent_id: str) -> Optional[Path]:
373
+ """
374
+ Get path to agent conversation transcript.
375
+
376
+ Official pattern:
377
+ - Transcripts stored in agent-{agentId}.jsonl
378
+ - Contains full conversation history
379
+
380
+ Args:
381
+ agent_id: Agent session ID
382
+
383
+ Returns:
384
+ Path to transcript file, or None if not found
385
+ """
386
+ transcript_file = self._transcript_dir / f"agent-{agent_id}.jsonl"
387
+
388
+ if transcript_file.exists():
389
+ return transcript_file
390
+
391
+ logger.warning(f"Transcript not found for agentId: {agent_id}")
392
+ return None
393
+
394
+ def create_chain(
395
+ self,
396
+ chain_id: str,
397
+ agent_sequence: List[str],
398
+ metadata: Optional[Dict[str, Any]] = None,
399
+ ) -> None:
400
+ """
401
+ Create a new workflow chain.
402
+
403
+ Args:
404
+ chain_id: Unique chain identifier (e.g., "SPEC-AUTH-001-implementation")
405
+ agent_sequence: Expected agent execution order
406
+ metadata: Optional metadata for the chain
407
+ """
408
+ self._chains[chain_id] = []
409
+
410
+ chain_metadata = {
411
+ "created_at": datetime.now().isoformat(),
412
+ "expected_sequence": agent_sequence,
413
+ "metadata": metadata or {},
414
+ }
415
+
416
+ # Store in a separate chains metadata file
417
+ chains_file = self._session_file.parent / "workflow-chains.json"
418
+
419
+ if chains_file.exists():
420
+ with open(chains_file, "r", encoding="utf-8") as f:
421
+ chains_data = json.load(f)
422
+ else:
423
+ chains_data = {}
424
+
425
+ chains_data[chain_id] = chain_metadata
426
+
427
+ with open(chains_file, "w", encoding="utf-8") as f:
428
+ json.dump(chains_data, f, indent=2, ensure_ascii=False)
429
+
430
+ logger.info(f"Created workflow chain: {chain_id} with {len(agent_sequence)} agents")
431
+
432
+
433
+ # Global instance (singleton pattern)
434
+ _session_manager_instance: Optional[SessionManager] = None
435
+
436
+
437
+ def get_session_manager() -> SessionManager:
438
+ """
439
+ Get global SessionManager instance (singleton).
440
+
441
+ Returns:
442
+ SessionManager instance
443
+ """
444
+ global _session_manager_instance
445
+
446
+ if _session_manager_instance is None:
447
+ _session_manager_instance = SessionManager()
448
+
449
+ return _session_manager_instance
450
+
451
+
452
+ # Convenience functions for direct use
453
+
454
+
455
+ def register_agent(
456
+ agent_name: str,
457
+ agent_id: str,
458
+ result: Any,
459
+ chain_id: Optional[str] = None,
460
+ ) -> None:
461
+ """
462
+ Convenience function to register agent result.
463
+
464
+ Args:
465
+ agent_name: Name of the agent
466
+ agent_id: Unique agentId from Task() execution
467
+ result: Result data
468
+ chain_id: Optional workflow chain identifier
469
+ """
470
+ manager = get_session_manager()
471
+ manager.register_agent_result(agent_name, agent_id, result, chain_id)
472
+
473
+
474
+ def get_resume_id(agent_name: str, chain_id: Optional[str] = None) -> Optional[str]:
475
+ """
476
+ Convenience function to get resume ID.
477
+
478
+ Args:
479
+ agent_name: Name of the agent
480
+ chain_id: Optional workflow chain
481
+
482
+ Returns:
483
+ agentId to resume, or None
484
+ """
485
+ manager = get_session_manager()
486
+ return manager.get_resume_id(agent_name, chain_id)
487
+
488
+
489
+ def should_resume(
490
+ agent_name: str,
491
+ current_task: str,
492
+ previous_task: Optional[str] = None,
493
+ ) -> bool:
494
+ """
495
+ Convenience function to check if should resume.
496
+
497
+ Args:
498
+ agent_name: Name of the agent
499
+ current_task: Description of current task
500
+ previous_task: Description of previous task
501
+
502
+ Returns:
503
+ True if should resume
504
+ """
505
+ manager = get_session_manager()
506
+ return manager.should_resume(agent_name, current_task, previous_task)
507
+
508
+
509
+ # Example usage for documentation
510
+ if __name__ == "__main__":
511
+ """
512
+ Example usage of SessionManager.
513
+
514
+ This demonstrates the official Claude Code sub-agent patterns.
515
+ """
516
+
517
+ # Initialize manager
518
+ manager = SessionManager()
519
+
520
+ # Example 1: Linear Chain (spec-builder → implementation-planner)
521
+ print("=== Example 1: Linear Chain ===")
522
+
523
+ # Create workflow chain
524
+ manager.create_chain(
525
+ chain_id="SPEC-AUTH-001-planning",
526
+ agent_sequence=["spec-builder", "implementation-planner"],
527
+ metadata={"spec_id": "SPEC-AUTH-001", "feature": "User Authentication"},
528
+ )
529
+
530
+ # Simulate spec-builder execution
531
+ spec_result = {
532
+ "spec_id": "SPEC-AUTH-001",
533
+ "files_created": [".moai/specs/SPEC-AUTH-001/spec.md"],
534
+ "status": "success",
535
+ }
536
+
537
+ manager.register_agent_result(
538
+ agent_name="spec-builder",
539
+ agent_id="spec-abc123",
540
+ result=spec_result,
541
+ chain_id="SPEC-AUTH-001-planning",
542
+ )
543
+
544
+ # Simulate implementation-planner execution
545
+ plan_result = {
546
+ "dependencies": {"fastapi": ">=0.118.3"},
547
+ "status": "success",
548
+ }
549
+
550
+ manager.register_agent_result(
551
+ agent_name="implementation-planner",
552
+ agent_id="plan-def456",
553
+ result=plan_result,
554
+ chain_id="SPEC-AUTH-001-planning",
555
+ )
556
+
557
+ # Get chain summary
558
+ summary = manager.get_chain_summary("SPEC-AUTH-001-planning")
559
+ print(f"Chain summary: {json.dumps(summary, indent=2)}")
560
+
561
+ # Example 2: Resume Pattern (tdd-implementer continues work)
562
+ print("\n=== Example 2: Resume Pattern ===")
563
+
564
+ manager.create_chain(
565
+ chain_id="SPEC-AUTH-001-implementation",
566
+ agent_sequence=["tdd-implementer"],
567
+ )
568
+
569
+ # First execution: Implementation phase 1
570
+ implementation_001_result = {
571
+ "phase": "phase_1",
572
+ "tests_created": ["tests/test_registration.py"],
573
+ "code_created": ["src/auth/registration.py"],
574
+ "status": "success",
575
+ }
576
+
577
+ manager.register_agent_result(
578
+ agent_name="tdd-implementer",
579
+ agent_id="tdd-ghi789",
580
+ result=implementation_001_result,
581
+ chain_id="SPEC-AUTH-001-implementation",
582
+ )
583
+
584
+ # Get resume ID for continuing work
585
+ resume_id = manager.get_resume_id(
586
+ agent_name="tdd-implementer",
587
+ chain_id="SPEC-AUTH-001-implementation",
588
+ )
589
+
590
+ print(f"Resume ID for tdd-implementer: {resume_id}")
591
+
592
+ # Should resume? (continuing user auth flow)
593
+ should_resume_decision = manager.should_resume(
594
+ agent_name="tdd-implementer",
595
+ current_task="Implement user login endpoint",
596
+ previous_task="Implement user registration endpoint",
597
+ )
598
+
599
+ print(f"Should resume? {should_resume_decision}")
600
+
601
+ if should_resume_decision and resume_id:
602
+ print(f"✅ Resume with agentId: {resume_id}")
603
+ manager.increment_resume_count(resume_id)
604
+ else:
605
+ print("❌ Start new session")
606
+
607
+ # Example 3: Parallel Analysis
608
+ print("\n=== Example 3: Parallel Analysis ===")
609
+
610
+ manager.create_chain(
611
+ chain_id="SPEC-AUTH-001-review",
612
+ agent_sequence=["backend-expert", "security-expert", "frontend-expert"],
613
+ metadata={"review_type": "expert_consultation"},
614
+ )
615
+
616
+ # All experts run independently (no resume)
617
+ experts_results = {
618
+ "backend-expert": {
619
+ "recommendations": ["Use JWT for auth"],
620
+ "agent_id": "backend-jkl012",
621
+ },
622
+ "security-expert": {
623
+ "vulnerabilities": ["Rate limiting needed"],
624
+ "agent_id": "security-mno345",
625
+ },
626
+ "frontend-expert": {
627
+ "ui_concerns": ["Token refresh flow"],
628
+ "agent_id": "frontend-pqr678",
629
+ },
630
+ }
631
+
632
+ for expert_name, data in experts_results.items():
633
+ agent_id_value: str = data["agent_id"] # type: ignore[assignment]
634
+ manager.register_agent_result(
635
+ agent_name=expert_name,
636
+ agent_id=agent_id_value,
637
+ result={k: v for k, v in data.items() if k != "agent_id"},
638
+ chain_id="SPEC-AUTH-001-review",
639
+ )
640
+
641
+ # Get all review results
642
+ review_results = manager.get_chain_results("SPEC-AUTH-001-review")
643
+ print(f"Expert reviews: {len(review_results)} experts")
644
+
645
+ for result in review_results:
646
+ print(f" - {result['agent_name']}: {list(result['result'].keys())}")
647
+
648
+ # Get all sessions
649
+ print("\n=== All Sessions ===")
650
+ all_sessions = manager.get_all_sessions()
651
+ print(json.dumps(all_sessions, indent=2))