claude-mpm 4.21.3__py3-none-any.whl → 5.1.9__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 claude-mpm might be problematic. Click here for more details.

Files changed (517) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +3 -48
  4. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +1239 -674
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +69 -1
  12. claude_mpm/agents/templates/circuit-breakers.md +1254 -0
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +37 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +1128 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +537 -239
  30. claude_mpm/cli/commands/cleanup.py +1 -1
  31. claude_mpm/cli/commands/config.py +7 -4
  32. claude_mpm/cli/commands/configure.py +935 -45
  33. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  34. claude_mpm/cli/commands/configure_navigation.py +63 -46
  35. claude_mpm/cli/commands/debug.py +12 -12
  36. claude_mpm/cli/commands/doctor.py +10 -2
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/local_deploy.py +1 -4
  39. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  40. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  41. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  42. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  43. claude_mpm/cli/commands/postmortem.py +401 -0
  44. claude_mpm/cli/commands/run.py +125 -167
  45. claude_mpm/cli/commands/skill_source.py +694 -0
  46. claude_mpm/cli/commands/skills.py +757 -20
  47. claude_mpm/cli/executor.py +78 -3
  48. claude_mpm/cli/interactive/agent_wizard.py +1032 -47
  49. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  50. claude_mpm/cli/parsers/agents_parser.py +310 -4
  51. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  52. claude_mpm/cli/parsers/base_parser.py +53 -0
  53. claude_mpm/cli/parsers/config_parser.py +96 -43
  54. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  55. claude_mpm/cli/parsers/skills_parser.py +145 -0
  56. claude_mpm/cli/parsers/source_parser.py +138 -0
  57. claude_mpm/cli/startup.py +564 -108
  58. claude_mpm/cli/startup_display.py +480 -0
  59. claude_mpm/cli/utils.py +1 -1
  60. claude_mpm/cli_module/commands.py +1 -1
  61. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  62. claude_mpm/commands/mpm-agents-detect.md +9 -0
  63. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  64. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  65. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  66. claude_mpm/commands/mpm-doctor.md +9 -0
  67. claude_mpm/commands/mpm-help.md +14 -2
  68. claude_mpm/commands/mpm-init.md +27 -2
  69. claude_mpm/commands/mpm-monitor.md +9 -0
  70. claude_mpm/commands/mpm-postmortem.md +123 -0
  71. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  72. claude_mpm/commands/mpm-status.md +9 -0
  73. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  74. claude_mpm/commands/mpm-ticket-view.md +552 -0
  75. claude_mpm/commands/mpm-version.md +9 -0
  76. claude_mpm/commands/mpm.md +10 -0
  77. claude_mpm/config/agent_presets.py +488 -0
  78. claude_mpm/config/agent_sources.py +325 -0
  79. claude_mpm/config/skill_presets.py +392 -0
  80. claude_mpm/config/skill_sources.py +590 -0
  81. claude_mpm/constants.py +13 -0
  82. claude_mpm/core/api_validator.py +1 -1
  83. claude_mpm/core/claude_runner.py +19 -35
  84. claude_mpm/core/config.py +24 -0
  85. claude_mpm/core/constants.py +1 -1
  86. claude_mpm/core/framework/__init__.py +3 -16
  87. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  88. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  89. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  90. claude_mpm/core/hook_error_memory.py +381 -0
  91. claude_mpm/core/hook_manager.py +41 -2
  92. claude_mpm/core/interactive_session.py +131 -10
  93. claude_mpm/core/logger.py +3 -1
  94. claude_mpm/core/oneshot_session.py +110 -8
  95. claude_mpm/core/output_style_manager.py +173 -43
  96. claude_mpm/core/protocols/__init__.py +23 -0
  97. claude_mpm/core/protocols/runner_protocol.py +103 -0
  98. claude_mpm/core/protocols/session_protocol.py +131 -0
  99. claude_mpm/core/shared/singleton_manager.py +11 -4
  100. claude_mpm/core/system_context.py +38 -0
  101. claude_mpm/core/unified_agent_registry.py +129 -1
  102. claude_mpm/core/unified_config.py +22 -0
  103. claude_mpm/dashboard/static/css/activity.css +69 -69
  104. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  105. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  106. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  107. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  108. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  109. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  110. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  111. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  112. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  113. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  114. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  115. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  116. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  117. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  118. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  119. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  120. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  121. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  122. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  123. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  124. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  125. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  126. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  127. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  128. claude_mpm/dashboard/templates/code_simple.html +23 -23
  129. claude_mpm/dashboard/templates/index.html +18 -18
  130. claude_mpm/experimental/cli_enhancements.py +1 -5
  131. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  132. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  133. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  134. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  135. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  136. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  137. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  138. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  139. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  140. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  141. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  142. claude_mpm/models/agent_definition.py +7 -0
  143. claude_mpm/models/git_repository.py +198 -0
  144. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  145. claude_mpm/scripts/start_activity_logging.py +3 -1
  146. claude_mpm/services/agents/agent_builder.py +45 -9
  147. claude_mpm/services/agents/agent_preset_service.py +238 -0
  148. claude_mpm/services/agents/agent_selection_service.py +484 -0
  149. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  150. claude_mpm/services/agents/cache_git_manager.py +621 -0
  151. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  152. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  153. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  154. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  155. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  156. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  157. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  158. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  159. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  160. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  161. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +225 -18
  162. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  163. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  164. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +557 -0
  165. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  166. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  167. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  168. claude_mpm/services/agents/git_source_manager.py +629 -0
  169. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  170. claude_mpm/services/agents/local_template_manager.py +50 -10
  171. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  172. claude_mpm/services/agents/sources/__init__.py +13 -0
  173. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  174. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  175. claude_mpm/services/agents/startup_sync.py +239 -0
  176. claude_mpm/services/agents/toolchain_detector.py +474 -0
  177. claude_mpm/services/analysis/__init__.py +25 -0
  178. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  179. claude_mpm/services/analysis/postmortem_service.py +765 -0
  180. claude_mpm/services/cli/session_pause_manager.py +1 -1
  181. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  182. claude_mpm/services/command_deployment_service.py +200 -6
  183. claude_mpm/services/core/base.py +7 -2
  184. claude_mpm/services/core/interfaces/__init__.py +1 -3
  185. claude_mpm/services/core/interfaces/health.py +1 -4
  186. claude_mpm/services/core/models/__init__.py +2 -11
  187. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  188. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  189. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  190. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  191. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  192. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  193. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  194. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  195. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  196. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  197. claude_mpm/services/event_bus/direct_relay.py +3 -3
  198. claude_mpm/services/event_bus/event_bus.py +36 -3
  199. claude_mpm/services/events/consumers/logging.py +1 -2
  200. claude_mpm/services/git/__init__.py +21 -0
  201. claude_mpm/services/git/git_operations_service.py +494 -0
  202. claude_mpm/services/github/__init__.py +21 -0
  203. claude_mpm/services/github/github_cli_service.py +397 -0
  204. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  205. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  206. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  207. claude_mpm/services/instructions/__init__.py +9 -0
  208. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  209. claude_mpm/services/local_ops/__init__.py +3 -13
  210. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  211. claude_mpm/services/local_ops/health_manager.py +1 -4
  212. claude_mpm/services/local_ops/process_manager.py +1 -1
  213. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  214. claude_mpm/services/mcp_config_manager.py +75 -145
  215. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  216. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  217. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  218. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  219. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  220. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  221. claude_mpm/services/mcp_service_verifier.py +6 -3
  222. claude_mpm/services/memory/optimizer.py +1 -1
  223. claude_mpm/services/model/model_router.py +8 -9
  224. claude_mpm/services/monitor/daemon.py +29 -9
  225. claude_mpm/services/monitor/daemon_manager.py +96 -19
  226. claude_mpm/services/monitor/server.py +2 -2
  227. claude_mpm/services/native_agent_converter.py +356 -0
  228. claude_mpm/services/port_manager.py +1 -1
  229. claude_mpm/services/pr/__init__.py +14 -0
  230. claude_mpm/services/pr/pr_template_service.py +329 -0
  231. claude_mpm/services/project/documentation_manager.py +2 -1
  232. claude_mpm/services/project/project_organizer.py +4 -0
  233. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  234. claude_mpm/services/runner_configuration_service.py +17 -3
  235. claude_mpm/services/self_upgrade_service.py +165 -7
  236. claude_mpm/services/session_management_service.py +16 -4
  237. claude_mpm/services/skills/__init__.py +18 -0
  238. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  239. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  240. claude_mpm/services/skills_config.py +547 -0
  241. claude_mpm/services/skills_deployer.py +955 -0
  242. claude_mpm/services/socketio/handlers/connection.py +1 -1
  243. claude_mpm/services/socketio/handlers/git.py +2 -2
  244. claude_mpm/services/socketio/server/core.py +1 -4
  245. claude_mpm/services/socketio/server/main.py +1 -3
  246. claude_mpm/services/system_instructions_service.py +1 -3
  247. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  248. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  249. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  250. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  251. claude_mpm/services/unified/unified_deployment.py +1 -5
  252. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  253. claude_mpm/services/visualization/__init__.py +1 -5
  254. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  255. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  256. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  257. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  258. claude_mpm/skills/skills_registry.py +0 -1
  259. claude_mpm/templates/questions/__init__.py +38 -0
  260. claude_mpm/templates/questions/base.py +193 -0
  261. claude_mpm/templates/questions/pr_strategy.py +311 -0
  262. claude_mpm/templates/questions/project_init.py +385 -0
  263. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  264. claude_mpm/tools/__main__.py +8 -8
  265. claude_mpm/tools/code_tree_analyzer/analysis.py +1 -1
  266. claude_mpm/utils/agent_dependency_loader.py +80 -13
  267. claude_mpm/utils/agent_filters.py +288 -0
  268. claude_mpm/utils/dependency_cache.py +3 -1
  269. claude_mpm/utils/gitignore.py +244 -0
  270. claude_mpm/utils/log_cleanup.py +3 -3
  271. claude_mpm/utils/migration.py +372 -0
  272. claude_mpm/utils/progress.py +387 -0
  273. claude_mpm/utils/robust_installer.py +3 -5
  274. claude_mpm/utils/structured_questions.py +619 -0
  275. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/METADATA +496 -65
  276. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/RECORD +284 -443
  277. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  278. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  279. claude_mpm/agents/templates/agent-manager.json +0 -273
  280. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  281. claude_mpm/agents/templates/api_qa.json +0 -180
  282. claude_mpm/agents/templates/circuit_breakers.md +0 -638
  283. claude_mpm/agents/templates/clerk-ops.json +0 -235
  284. claude_mpm/agents/templates/code_analyzer.json +0 -101
  285. claude_mpm/agents/templates/content-agent.json +0 -358
  286. claude_mpm/agents/templates/dart_engineer.json +0 -307
  287. claude_mpm/agents/templates/data_engineer.json +0 -225
  288. claude_mpm/agents/templates/documentation.json +0 -211
  289. claude_mpm/agents/templates/engineer.json +0 -210
  290. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  291. claude_mpm/agents/templates/golang_engineer.json +0 -270
  292. claude_mpm/agents/templates/imagemagick.json +0 -264
  293. claude_mpm/agents/templates/java_engineer.json +0 -346
  294. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  295. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  296. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  297. claude_mpm/agents/templates/memory_manager.json +0 -158
  298. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  299. claude_mpm/agents/templates/ops.json +0 -185
  300. claude_mpm/agents/templates/php-engineer.json +0 -287
  301. claude_mpm/agents/templates/product_owner.json +0 -338
  302. claude_mpm/agents/templates/project_organizer.json +0 -140
  303. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  304. claude_mpm/agents/templates/python_engineer.json +0 -387
  305. claude_mpm/agents/templates/qa.json +0 -242
  306. claude_mpm/agents/templates/react_engineer.json +0 -238
  307. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  308. claude_mpm/agents/templates/research.json +0 -188
  309. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  310. claude_mpm/agents/templates/rust_engineer.json +0 -275
  311. claude_mpm/agents/templates/security.json +0 -202
  312. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  313. claude_mpm/agents/templates/ticketing.json +0 -177
  314. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  315. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  316. claude_mpm/agents/templates/version_control.json +0 -157
  317. claude_mpm/agents/templates/web_qa.json +0 -399
  318. claude_mpm/agents/templates/web_ui.json +0 -189
  319. claude_mpm/commands/mpm-tickets.md +0 -102
  320. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  321. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  322. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  323. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  324. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  325. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  326. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  327. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  328. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  329. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  330. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  331. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  332. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  333. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  334. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  335. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  336. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  337. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  338. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  339. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  340. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  341. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  342. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  343. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  344. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  345. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  346. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  347. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  348. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  349. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  350. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  351. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  352. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  353. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  354. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  355. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  356. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  357. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  358. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  359. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  360. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  361. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  362. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  363. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  364. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  365. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  366. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  367. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  368. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  369. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  370. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  371. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  372. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  373. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  374. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  375. claude_mpm/dashboard/static/built/react/events.js +0 -30
  376. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  377. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  378. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  379. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  380. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  381. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  382. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  383. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  384. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  385. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  386. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  387. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  388. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  389. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  390. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  391. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  392. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  393. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  394. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  395. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  396. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  397. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  398. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  399. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  400. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  401. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  402. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  403. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  404. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  405. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  406. claude_mpm/dashboard/static/events.html +0 -607
  407. claude_mpm/dashboard/static/index.html +0 -635
  408. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  409. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  410. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  411. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  412. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  413. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  414. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  415. claude_mpm/dashboard/static/legacy/files.html +0 -747
  416. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  417. claude_mpm/dashboard/static/monitors.html +0 -431
  418. claude_mpm/dashboard/static/production/events.html +0 -659
  419. claude_mpm/dashboard/static/production/main.html +0 -698
  420. claude_mpm/dashboard/static/production/monitors.html +0 -483
  421. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  422. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  423. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  424. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  425. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  426. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  427. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  428. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  429. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  430. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  431. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  432. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  433. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  434. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  435. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  436. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  437. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  438. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  439. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  440. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  441. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  442. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  443. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  444. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  445. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  446. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  447. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  448. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  449. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  450. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  451. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  452. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  453. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  454. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  455. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  456. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  457. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  458. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  459. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  460. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  461. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  462. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  463. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  464. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  465. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  466. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  467. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  468. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  469. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  470. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  471. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  472. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  473. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  474. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  475. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  476. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  477. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  478. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  479. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  480. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  481. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  482. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  483. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  484. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  485. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  486. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  487. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  488. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  489. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  490. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  491. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  492. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  493. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  494. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  495. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  496. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  497. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  498. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  499. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  500. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  501. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  502. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  503. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  504. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  505. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  506. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  507. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  508. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  509. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  510. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  511. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  512. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  513. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  514. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/WHEEL +0 -0
  515. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/entry_points.txt +0 -0
  516. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/licenses/LICENSE +0 -0
  517. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,394 @@
1
+ """Ticket management question templates.
2
+
3
+ This module provides templates for gathering user preferences about ticket
4
+ prioritization, scope, and management during sprint planning and execution.
5
+
6
+ Templates:
7
+ - TicketPrioritizationTemplate: How to order/prioritize tickets
8
+ - TicketScopeTemplate: Testing and documentation requirements per ticket
9
+ - TicketDependencyTemplate: How to handle ticket dependencies
10
+
11
+ These templates help PM make informed decisions about ticket execution order
12
+ and completeness criteria.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from typing import TYPE_CHECKING
18
+
19
+ from claude_mpm.templates.questions.base import ConditionalTemplate
20
+ from claude_mpm.utils.structured_questions import QuestionBuilder, QuestionSet
21
+
22
+ if TYPE_CHECKING:
23
+ from claude_mpm.utils.structured_questions import StructuredQuestion
24
+
25
+
26
+ class TicketPrioritizationTemplate(ConditionalTemplate):
27
+ """Template for ticket prioritization decisions.
28
+
29
+ Asks about:
30
+ - How to order tickets (priority-based, dependency-based, etc.)
31
+ - Whether to work serially or in parallel
32
+ - How to handle blockers
33
+
34
+ Context Parameters:
35
+ num_tickets (int): Number of tickets to prioritize
36
+ has_dependencies (bool): Whether tickets have interdependencies
37
+ team_size (int): Number of engineers available
38
+
39
+ Example:
40
+ >>> template = TicketPrioritizationTemplate(
41
+ ... num_tickets=5,
42
+ ... has_dependencies=True,
43
+ ... team_size=1
44
+ ... )
45
+ >>> question_set = template.build()
46
+ """
47
+
48
+ def __init__(
49
+ self,
50
+ num_tickets: int = 1,
51
+ has_dependencies: bool = False,
52
+ team_size: int = 1,
53
+ **context,
54
+ ):
55
+ """Initialize ticket prioritization template.
56
+
57
+ Args:
58
+ num_tickets: Number of tickets to manage
59
+ has_dependencies: Whether tickets depend on each other
60
+ team_size: Number of engineers available
61
+ **context: Additional context values
62
+ """
63
+ super().__init__(
64
+ num_tickets=num_tickets,
65
+ has_dependencies=has_dependencies,
66
+ team_size=team_size,
67
+ **context,
68
+ )
69
+
70
+ def build(self) -> QuestionSet:
71
+ """Build ticket prioritization questions.
72
+
73
+ Returns:
74
+ QuestionSet with prioritization questions
75
+ """
76
+ num_tickets = self.get_context("num_tickets", 1)
77
+ has_dependencies = self.get_context("has_dependencies", False)
78
+ team_size = self.get_context("team_size", 1)
79
+
80
+ questions: list[StructuredQuestion] = []
81
+
82
+ # Question 1: Prioritization strategy (only if multiple tickets)
83
+ if num_tickets > 1:
84
+ if has_dependencies:
85
+ priority_question = (
86
+ QuestionBuilder()
87
+ .ask("How should we handle ticket dependencies?")
88
+ .header("Dependencies")
89
+ .add_option(
90
+ "Sequential execution",
91
+ "Complete tickets in dependency order (foundational work first)",
92
+ )
93
+ .add_option(
94
+ "Parallel where possible",
95
+ "Work on independent tickets in parallel, sequential for dependent ones",
96
+ )
97
+ .build()
98
+ )
99
+ else:
100
+ priority_question = (
101
+ QuestionBuilder()
102
+ .ask("How should we prioritize the tickets?")
103
+ .header("Priority")
104
+ .add_option(
105
+ "User-visible first",
106
+ "Prioritize features that directly impact users",
107
+ )
108
+ .add_option(
109
+ "Infrastructure first",
110
+ "Build foundational components before user-facing features",
111
+ )
112
+ .add_option(
113
+ "Quick wins first",
114
+ "Start with easiest tickets to build momentum",
115
+ )
116
+ .add_option(
117
+ "High risk first",
118
+ "Tackle uncertain/risky tickets early to derisk project",
119
+ )
120
+ .build()
121
+ )
122
+ questions.append(priority_question)
123
+
124
+ # Question 2: Execution strategy (only if multiple tickets and team)
125
+ if num_tickets > 1 and team_size >= 1:
126
+ execution_question = (
127
+ QuestionBuilder()
128
+ .ask("How should tickets be executed?")
129
+ .header("Execution")
130
+ .add_option(
131
+ "One at a time",
132
+ "Complete each ticket fully before starting the next",
133
+ )
134
+ .add_option(
135
+ "Parallel execution",
136
+ "Work on multiple tickets simultaneously when possible",
137
+ )
138
+ .build()
139
+ )
140
+ questions.append(execution_question)
141
+
142
+ # Fallback for single ticket or default case
143
+ if not questions:
144
+ scope_question = (
145
+ QuestionBuilder()
146
+ .ask("What should be the ticket completion criteria?")
147
+ .header("Criteria")
148
+ .add_option(
149
+ "Implementation only",
150
+ "Code implementation complete, basic functionality working",
151
+ )
152
+ .add_option(
153
+ "Implementation + tests",
154
+ "Code complete with passing unit tests",
155
+ )
156
+ .build()
157
+ )
158
+ questions.append(scope_question)
159
+
160
+ return QuestionSet(questions)
161
+
162
+
163
+ class TicketScopeTemplate(ConditionalTemplate):
164
+ """Template for ticket scope and completeness requirements.
165
+
166
+ Asks about:
167
+ - Testing requirements (unit, integration, e2e)
168
+ - Documentation requirements
169
+ - Code review requirements
170
+ - Definition of done
171
+
172
+ Context Parameters:
173
+ ticket_type (str): Type of ticket (feature, bug, refactor)
174
+ is_user_facing (bool): Whether ticket affects end users
175
+ project_maturity (str): Project stage (prototype, beta, production)
176
+
177
+ Example:
178
+ >>> template = TicketScopeTemplate(
179
+ ... ticket_type="feature",
180
+ ... is_user_facing=True,
181
+ ... project_maturity="production"
182
+ ... )
183
+ >>> question_set = template.build()
184
+ """
185
+
186
+ def __init__(
187
+ self,
188
+ ticket_type: str | None = "feature",
189
+ is_user_facing: bool = False,
190
+ project_maturity: str = "development",
191
+ **context,
192
+ ):
193
+ """Initialize ticket scope template.
194
+
195
+ Args:
196
+ ticket_type: Type of ticket (feature, bug, refactor, etc.)
197
+ is_user_facing: Whether changes affect end users
198
+ project_maturity: Stage of project (prototype, development, production)
199
+ **context: Additional context values
200
+ """
201
+ super().__init__(
202
+ ticket_type=ticket_type,
203
+ is_user_facing=is_user_facing,
204
+ project_maturity=project_maturity,
205
+ **context,
206
+ )
207
+
208
+ def build(self) -> QuestionSet:
209
+ """Build ticket scope questions.
210
+
211
+ Returns:
212
+ QuestionSet with scope questions
213
+ """
214
+ ticket_type = self.get_context("ticket_type", "feature")
215
+ is_user_facing = self.get_context("is_user_facing", False)
216
+ project_maturity = self.get_context("project_maturity", "development")
217
+
218
+ questions: list[StructuredQuestion] = []
219
+
220
+ # Question 1: Testing requirements
221
+ if project_maturity == "production" or is_user_facing:
222
+ testing_question = (
223
+ QuestionBuilder()
224
+ .ask("What testing is required for this ticket?")
225
+ .header("Testing")
226
+ .add_option(
227
+ "Comprehensive",
228
+ "Unit tests, integration tests, and e2e tests required",
229
+ )
230
+ .add_option(
231
+ "Standard",
232
+ "Unit tests and integration tests for critical paths",
233
+ )
234
+ .add_option(
235
+ "Basic",
236
+ "Unit tests for core functionality only",
237
+ )
238
+ .build()
239
+ )
240
+ else:
241
+ testing_question = (
242
+ QuestionBuilder()
243
+ .ask("What testing is required for this ticket?")
244
+ .header("Testing")
245
+ .add_option(
246
+ "Unit tests",
247
+ "Unit tests covering core functionality",
248
+ )
249
+ .add_option(
250
+ "Integration tests",
251
+ "Integration tests for component interactions",
252
+ )
253
+ .add_option(
254
+ "Manual testing",
255
+ "Manual verification sufficient for now",
256
+ )
257
+ .build()
258
+ )
259
+ questions.append(testing_question)
260
+
261
+ # Question 2: Documentation requirements
262
+ if is_user_facing or ticket_type == "feature":
263
+ docs_question = (
264
+ QuestionBuilder()
265
+ .ask("What documentation is needed?")
266
+ .header("Docs")
267
+ .add_option(
268
+ "Full documentation",
269
+ "API docs, user guide, and code comments",
270
+ )
271
+ .add_option(
272
+ "API docs only",
273
+ "Document public interfaces and usage examples",
274
+ )
275
+ .add_option(
276
+ "Code comments",
277
+ "Inline comments for complex logic only",
278
+ )
279
+ .add_option(
280
+ "None",
281
+ "Code is self-documenting, no additional docs needed",
282
+ )
283
+ .build()
284
+ )
285
+ questions.append(docs_question)
286
+
287
+ return QuestionSet(questions)
288
+
289
+
290
+ class TicketDependencyTemplate(ConditionalTemplate):
291
+ """Template for handling ticket dependencies and blocking issues.
292
+
293
+ Asks about:
294
+ - How to handle blocked tickets
295
+ - Whether to wait or work around dependencies
296
+ - Parallel work strategies
297
+
298
+ Context Parameters:
299
+ blocked_tickets (int): Number of tickets currently blocked
300
+ blocking_type (str): Type of blocker (technical, external, approval)
301
+
302
+ Example:
303
+ >>> template = TicketDependencyTemplate(
304
+ ... blocked_tickets=2,
305
+ ... blocking_type="external"
306
+ ... )
307
+ >>> question_set = template.build()
308
+ """
309
+
310
+ def __init__(
311
+ self,
312
+ blocked_tickets: int = 0,
313
+ blocking_type: str | None = None,
314
+ **context,
315
+ ):
316
+ """Initialize ticket dependency template.
317
+
318
+ Args:
319
+ blocked_tickets: Number of blocked tickets
320
+ blocking_type: Type of blocker (technical, external, approval, etc.)
321
+ **context: Additional context values
322
+ """
323
+ super().__init__(
324
+ blocked_tickets=blocked_tickets, blocking_type=blocking_type, **context
325
+ )
326
+
327
+ def build(self) -> QuestionSet:
328
+ """Build dependency handling questions.
329
+
330
+ Returns:
331
+ QuestionSet with dependency questions
332
+ """
333
+ blocked_tickets = self.get_context("blocked_tickets", 0)
334
+ blocking_type = self.get_context("blocking_type")
335
+
336
+ questions: list[StructuredQuestion] = []
337
+
338
+ # Question about handling blockers
339
+ if blocked_tickets > 0:
340
+ if blocking_type == "external":
341
+ blocker_question = (
342
+ QuestionBuilder()
343
+ .ask("How should we handle external dependencies?")
344
+ .header("Blockers")
345
+ .add_option(
346
+ "Wait for unblock",
347
+ "Pause blocked tickets until external dependency resolves",
348
+ )
349
+ .add_option(
350
+ "Mock and continue",
351
+ "Create mocks/stubs to continue development",
352
+ )
353
+ .add_option(
354
+ "Work around",
355
+ "Find alternative implementation to avoid dependency",
356
+ )
357
+ .build()
358
+ )
359
+ else:
360
+ blocker_question = (
361
+ QuestionBuilder()
362
+ .ask("How should we handle blocked tickets?")
363
+ .header("Blockers")
364
+ .add_option(
365
+ "Resolve blockers first",
366
+ "Prioritize unblocking tickets before continuing",
367
+ )
368
+ .add_option(
369
+ "Parallel work",
370
+ "Work on unblocked tickets while resolving blockers",
371
+ )
372
+ .build()
373
+ )
374
+ questions.append(blocker_question)
375
+
376
+ # Default question if no specific blockers
377
+ if not questions:
378
+ dependency_question = (
379
+ QuestionBuilder()
380
+ .ask("How should we manage ticket dependencies?")
381
+ .header("Dependencies")
382
+ .add_option(
383
+ "Strict ordering",
384
+ "Maintain strict dependency order, wait for prerequisites",
385
+ )
386
+ .add_option(
387
+ "Flexible approach",
388
+ "Start dependent work in parallel with preparation work",
389
+ )
390
+ .build()
391
+ )
392
+ questions.append(dependency_question)
393
+
394
+ return QuestionSet(questions)
@@ -173,14 +173,14 @@ def main():
173
173
  Code Analysis Summary
174
174
  =====================
175
175
  Path: {path}
176
- Files processed: {stats.get('files_processed', 0)}
177
- Total nodes: {stats.get('total_nodes', 0)}
178
- Classes: {stats.get('classes', 0)}
179
- Functions: {stats.get('functions', 0)}
180
- Imports: {stats.get('imports', 0)}
181
- Languages: {', '.join(stats.get('languages', []))}
182
- Average complexity: {stats.get('avg_complexity', 0):.2f}
183
- Duration: {stats.get('duration', 0):.2f}s
176
+ Files processed: {stats.get("files_processed", 0)}
177
+ Total nodes: {stats.get("total_nodes", 0)}
178
+ Classes: {stats.get("classes", 0)}
179
+ Functions: {stats.get("functions", 0)}
180
+ Imports: {stats.get("imports", 0)}
181
+ Languages: {", ".join(stats.get("languages", []))}
182
+ Average complexity: {stats.get("avg_complexity", 0):.2f}
183
+ Duration: {stats.get("duration", 0):.2f}s
184
184
  """
185
185
  if output_file:
186
186
  output_file.write(summary)
@@ -68,7 +68,7 @@ class FileAnalyzer:
68
68
  self.event_manager.emit_cache_hit(path)
69
69
  filtered_nodes = self._filter_nodes(cached_nodes)
70
70
  else:
71
- nodes, filtered_nodes, duration = self._analyze_and_cache_file(
71
+ _nodes, filtered_nodes, duration = self._analyze_and_cache_file(
72
72
  path, language, cache_key
73
73
  )
74
74
  self.event_manager.emit_analysis_complete(path, filtered_nodes, duration)
@@ -16,6 +16,7 @@ import sys
16
16
  import time
17
17
  from typing import Any, Dict, List, Optional, Set, Tuple
18
18
 
19
+ import yaml
19
20
  from packaging.requirements import InvalidRequirement, Requirement
20
21
 
21
22
  from ..core.logger import get_logger
@@ -89,10 +90,48 @@ class AgentDependencyLoader:
89
90
  self.deployed_agents = deployed_agents
90
91
  return deployed_agents
91
92
 
93
+ def _extract_yaml_frontmatter(self, content: str) -> Optional[Dict[str, Any]]:
94
+ """
95
+ Extract and parse YAML frontmatter from markdown.
96
+
97
+ Frontmatter must be at the start of the file, delimited by '---'.
98
+ Example:
99
+ ---
100
+ name: agent_name
101
+ dependencies:
102
+ python:
103
+ - package>=1.0.0
104
+ ---
105
+ # Agent content...
106
+
107
+ Args:
108
+ content: File content to parse
109
+
110
+ Returns:
111
+ Parsed YAML frontmatter as dict, or None if not found/invalid
112
+ """
113
+ if not content.strip().startswith("---"):
114
+ return None
115
+
116
+ # Split on --- delimiters
117
+ parts = content.split("---", 2)
118
+ if len(parts) < 3:
119
+ return None
120
+
121
+ try:
122
+ return yaml.safe_load(parts[1])
123
+ except yaml.YAMLError as e:
124
+ logger.warning(f"Failed to parse YAML frontmatter: {e}")
125
+ return None
126
+
92
127
  def load_agent_dependencies(self) -> Dict[str, Dict]:
93
128
  """
94
129
  Load dependency information for deployed agents from their source configs.
95
130
 
131
+ Searches for agent configuration in both markdown (.md) and JSON (.json) formats.
132
+ Markdown files with YAML frontmatter are searched first for better maintainability.
133
+ Falls back to JSON format for backward compatibility.
134
+
96
135
  Returns:
97
136
  Dictionary mapping agent IDs to their dependency requirements
98
137
  """
@@ -106,19 +145,47 @@ class AgentDependencyLoader:
106
145
  ]
107
146
 
108
147
  for agent_id in self.deployed_agents:
109
- # Try to find the agent's JSON config
148
+ found = False
149
+
150
+ # Try to find the agent's config (markdown first, then JSON)
110
151
  for config_dir in config_paths:
111
- config_file = config_dir / f"{agent_id}.json"
112
- if config_file.exists():
152
+ if found:
153
+ break
154
+
155
+ # Try markdown first (current format with YAML frontmatter)
156
+ md_file = config_dir / f"{agent_id}.md"
157
+ if md_file.exists():
113
158
  try:
114
- with config_file.open() as f:
115
- config = json.load(f)
116
- if "dependencies" in config:
117
- agent_dependencies[agent_id] = config["dependencies"]
118
- logger.debug(f"Loaded dependencies for {agent_id}")
119
- break
159
+ content = md_file.read_text(encoding="utf-8")
160
+ frontmatter = self._extract_yaml_frontmatter(content)
161
+ if frontmatter and "dependencies" in frontmatter:
162
+ agent_dependencies[agent_id] = frontmatter["dependencies"]
163
+ logger.debug(
164
+ f"Loaded dependencies for {agent_id} from markdown"
165
+ )
166
+ found = True
167
+ break
120
168
  except Exception as e:
121
- logger.warning(f"Failed to load config for {agent_id}: {e}")
169
+ logger.warning(f"Failed to load markdown for {agent_id}: {e}")
170
+
171
+ # Fall back to JSON for backward compatibility
172
+ if not found:
173
+ json_file = config_dir / f"{agent_id}.json"
174
+ if json_file.exists():
175
+ try:
176
+ with json_file.open() as f:
177
+ config = json.load(f)
178
+ if "dependencies" in config:
179
+ agent_dependencies[agent_id] = config[
180
+ "dependencies"
181
+ ]
182
+ logger.debug(
183
+ f"Loaded dependencies for {agent_id} from JSON"
184
+ )
185
+ found = True
186
+ break
187
+ except Exception as e:
188
+ logger.warning(f"Failed to load JSON for {agent_id}: {e}")
122
189
 
123
190
  self.agent_dependencies = agent_dependencies
124
191
  logger.debug(f"Loaded dependencies for {len(agent_dependencies)} agents")
@@ -678,7 +745,7 @@ class AgentDependencyLoader:
678
745
  logger.info(
679
746
  f"Auto-installing {len(results['summary']['missing_python'])} missing dependencies..."
680
747
  )
681
- success, error = self.install_missing_dependencies(
748
+ success, _error = self.install_missing_dependencies(
682
749
  results["summary"]["missing_python"]
683
750
  )
684
751
  if success:
@@ -777,7 +844,7 @@ class AgentDependencyLoader:
777
844
  import sys
778
845
 
779
846
  if sys.version_info >= (3, 13):
780
- compatible, incompatible = self.check_python_compatibility(
847
+ _compatible, incompatible = self.check_python_compatibility(
781
848
  summary["missing_python"]
782
849
  )
783
850
  if incompatible:
@@ -949,7 +1016,7 @@ class AgentDependencyLoader:
949
1016
  Returns:
950
1017
  Cached results or None if not available/valid.
951
1018
  """
952
- has_changed, current_hash = self.has_agents_changed()
1019
+ has_changed, _current_hash = self.has_agents_changed()
953
1020
 
954
1021
  if not has_changed:
955
1022
  state = self.load_deployment_state()