claude-mpm 4.16.0__py3-none-any.whl → 4.25.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +272 -23
  4. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +1821 -32
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/agent_loader.py +4 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/api_qa.json +5 -2
  11. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  12. claude_mpm/agents/templates/documentation.json +33 -6
  13. claude_mpm/agents/templates/engineer.json +5 -1
  14. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  15. claude_mpm/agents/templates/php-engineer.json +10 -4
  16. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  17. claude_mpm/agents/templates/project_organizer.json +7 -3
  18. claude_mpm/agents/templates/python_engineer.json +8 -3
  19. claude_mpm/agents/templates/qa.json +2 -1
  20. claude_mpm/agents/templates/react_engineer.json +1 -0
  21. claude_mpm/agents/templates/research.json +82 -12
  22. claude_mpm/agents/templates/rust_engineer.json +12 -7
  23. claude_mpm/agents/templates/security.json +4 -4
  24. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  25. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  26. claude_mpm/agents/templates/ticketing.json +10 -6
  27. claude_mpm/agents/templates/version_control.json +4 -2
  28. claude_mpm/agents/templates/web_qa.json +2 -1
  29. claude_mpm/cli/README.md +253 -0
  30. claude_mpm/cli/__init__.py +11 -1
  31. claude_mpm/cli/commands/__init__.py +2 -0
  32. claude_mpm/cli/commands/aggregate.py +1 -1
  33. claude_mpm/cli/commands/analyze.py +3 -3
  34. claude_mpm/cli/commands/cleanup.py +1 -1
  35. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  36. claude_mpm/cli/commands/debug.py +12 -12
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  39. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  40. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  41. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  42. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  43. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  44. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  45. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  46. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  47. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  48. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  49. claude_mpm/cli/commands/run.py +124 -128
  50. claude_mpm/cli/commands/skills.py +922 -0
  51. claude_mpm/cli/executor.py +58 -0
  52. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  53. claude_mpm/cli/parsers/base_parser.py +35 -0
  54. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  55. claude_mpm/cli/parsers/skills_parser.py +275 -0
  56. claude_mpm/cli/startup.py +168 -8
  57. claude_mpm/cli/startup_display.py +480 -0
  58. claude_mpm/cli/utils.py +1 -1
  59. claude_mpm/cli_module/commands.py +1 -1
  60. claude_mpm/cli_module/refactoring_guide.md +253 -0
  61. claude_mpm/commands/mpm-auto-configure.md +52 -0
  62. claude_mpm/commands/mpm-help.md +6 -0
  63. claude_mpm/commands/mpm-init.md +130 -8
  64. claude_mpm/commands/mpm-resume.md +372 -0
  65. claude_mpm/commands/mpm-tickets.md +56 -7
  66. claude_mpm/commands/mpm-version.md +113 -0
  67. claude_mpm/commands/mpm.md +2 -0
  68. claude_mpm/config/agent_capabilities.yaml +658 -0
  69. claude_mpm/config/agent_config.py +2 -2
  70. claude_mpm/config/async_logging_config.yaml +145 -0
  71. claude_mpm/constants.py +24 -0
  72. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  73. claude_mpm/core/api_validator.py +1 -1
  74. claude_mpm/core/claude_runner.py +14 -1
  75. claude_mpm/core/config.py +50 -0
  76. claude_mpm/core/constants.py +1 -1
  77. claude_mpm/core/factories.py +1 -1
  78. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  79. claude_mpm/core/hook_error_memory.py +381 -0
  80. claude_mpm/core/hook_manager.py +41 -2
  81. claude_mpm/core/interactive_session.py +48 -3
  82. claude_mpm/core/interfaces.py +56 -1
  83. claude_mpm/core/logger.py +3 -1
  84. claude_mpm/core/oneshot_session.py +39 -0
  85. claude_mpm/core/optimized_agent_loader.py +3 -3
  86. claude_mpm/d2/.gitignore +22 -0
  87. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  88. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  89. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  90. claude_mpm/d2/QUICKSTART.md +186 -0
  91. claude_mpm/d2/README.md +232 -0
  92. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  93. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  94. claude_mpm/d2/TESTING.md +288 -0
  95. claude_mpm/d2/index.html +118 -0
  96. claude_mpm/d2/package.json +19 -0
  97. claude_mpm/d2/src/App.svelte +110 -0
  98. claude_mpm/d2/src/components/Header.svelte +153 -0
  99. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  100. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  101. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  102. claude_mpm/d2/src/lib/socketio.js +144 -0
  103. claude_mpm/d2/src/main.js +7 -0
  104. claude_mpm/d2/src/stores/events.js +114 -0
  105. claude_mpm/d2/src/stores/socket.js +108 -0
  106. claude_mpm/d2/src/stores/theme.js +65 -0
  107. claude_mpm/d2/svelte.config.js +12 -0
  108. claude_mpm/d2/vite.config.js +15 -0
  109. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  110. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  111. claude_mpm/dashboard/README.md +121 -0
  112. claude_mpm/dashboard/VERSION +1 -0
  113. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  114. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  115. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  116. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  117. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  118. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  119. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  120. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  121. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  122. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  123. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  124. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  125. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  127. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  128. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  129. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  130. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  131. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  132. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  135. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  136. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  140. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  141. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  142. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  143. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  144. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  145. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  146. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  147. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  148. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  149. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  150. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  151. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  152. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  153. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  154. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  155. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  156. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  157. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  158. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  159. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  160. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  161. claude_mpm/dashboard/static/css/activity.css +69 -69
  162. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  163. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  164. claude_mpm/dashboard/static/index.html +22 -22
  165. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  166. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  167. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  168. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  169. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  170. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  171. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  172. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  173. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  174. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  175. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  176. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  177. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  178. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  179. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  180. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  181. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  182. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  183. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  184. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  185. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  186. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  187. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  188. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  189. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  190. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  191. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  192. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  193. claude_mpm/dashboard/static/production/main.html +21 -21
  194. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  195. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  196. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  197. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  198. claude_mpm/dashboard/templates/code_simple.html +23 -23
  199. claude_mpm/dashboard/templates/index.html +18 -18
  200. claude_mpm/hooks/README.md +143 -0
  201. claude_mpm/hooks/__init__.py +8 -0
  202. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  203. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  204. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  205. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  206. claude_mpm/hooks/session_resume_hook.py +121 -0
  207. claude_mpm/hooks/templates/README.md +180 -0
  208. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  209. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  210. claude_mpm/hooks/templates/settings.json.example +147 -0
  211. claude_mpm/models/resume_log.py +340 -0
  212. claude_mpm/schemas/agent_schema.json +596 -0
  213. claude_mpm/schemas/frontmatter_schema.json +165 -0
  214. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  215. claude_mpm/scripts/start_activity_logging.py +3 -1
  216. claude_mpm/services/agents/auto_config_manager.py +1 -1
  217. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  218. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  219. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  220. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  221. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  222. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  223. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  224. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  225. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  226. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  227. claude_mpm/services/agents/local_template_manager.py +4 -2
  228. claude_mpm/services/agents/recommender.py +47 -0
  229. claude_mpm/services/cli/resume_service.py +617 -0
  230. claude_mpm/services/cli/session_manager.py +87 -0
  231. claude_mpm/services/cli/session_pause_manager.py +504 -0
  232. claude_mpm/services/cli/session_resume_helper.py +372 -0
  233. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  234. claude_mpm/services/core/base.py +26 -11
  235. claude_mpm/services/core/interfaces.py +56 -1
  236. claude_mpm/services/core/models/agent_config.py +3 -0
  237. claude_mpm/services/core/models/process.py +4 -0
  238. claude_mpm/services/core/path_resolver.py +1 -1
  239. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  240. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  241. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  242. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  243. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  244. claude_mpm/services/diagnostics/models.py +21 -0
  245. claude_mpm/services/event_bus/README.md +244 -0
  246. claude_mpm/services/event_bus/direct_relay.py +3 -3
  247. claude_mpm/services/event_bus/event_bus.py +36 -3
  248. claude_mpm/services/event_bus/relay.py +23 -7
  249. claude_mpm/services/events/README.md +303 -0
  250. claude_mpm/services/events/consumers/logging.py +1 -2
  251. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  252. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  253. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  254. claude_mpm/services/local_ops/__init__.py +2 -0
  255. claude_mpm/services/local_ops/process_manager.py +1 -1
  256. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  257. claude_mpm/services/mcp_config_manager.py +7 -131
  258. claude_mpm/services/mcp_gateway/README.md +185 -0
  259. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  260. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  261. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  262. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  263. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  264. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  265. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  266. claude_mpm/services/memory/failure_tracker.py +19 -4
  267. claude_mpm/services/memory/optimizer.py +1 -1
  268. claude_mpm/services/model/model_router.py +8 -9
  269. claude_mpm/services/monitor/daemon.py +1 -1
  270. claude_mpm/services/monitor/server.py +2 -2
  271. claude_mpm/services/native_agent_converter.py +356 -0
  272. claude_mpm/services/port_manager.py +1 -1
  273. claude_mpm/services/project/documentation_manager.py +2 -1
  274. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  275. claude_mpm/services/runner_configuration_service.py +1 -0
  276. claude_mpm/services/self_upgrade_service.py +165 -7
  277. claude_mpm/services/session_manager.py +205 -1
  278. claude_mpm/services/skills_config.py +547 -0
  279. claude_mpm/services/skills_deployer.py +955 -0
  280. claude_mpm/services/socketio/handlers/connection.py +1 -1
  281. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  282. claude_mpm/services/socketio/handlers/git.py +2 -2
  283. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  284. claude_mpm/services/static/.gitkeep +2 -0
  285. claude_mpm/services/system_instructions_service.py +1 -3
  286. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  287. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  288. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  289. claude_mpm/services/unified/deployment_strategies/local.py +1 -1
  290. claude_mpm/services/version_control/VERSION +1 -0
  291. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  292. claude_mpm/services/version_service.py +104 -1
  293. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  294. claude_mpm/skills/__init__.py +21 -0
  295. claude_mpm/skills/agent_skills_injector.py +324 -0
  296. claude_mpm/skills/bundled/.gitkeep +2 -0
  297. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  298. claude_mpm/skills/bundled/api-documentation.md +393 -0
  299. claude_mpm/skills/bundled/async-testing.md +571 -0
  300. claude_mpm/skills/bundled/code-review.md +143 -0
  301. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  302. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  303. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  304. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  305. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  306. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  307. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  308. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  309. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  310. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  311. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  312. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  313. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  314. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  315. claude_mpm/skills/bundled/database-migration.md +199 -0
  316. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  317. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  318. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  319. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  320. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  321. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  322. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  323. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  324. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  325. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  326. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  327. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  328. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  329. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  330. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  331. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  332. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  333. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  334. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  335. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  336. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  337. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  338. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  339. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  340. claude_mpm/skills/bundled/git-workflow.md +414 -0
  341. claude_mpm/skills/bundled/imagemagick.md +204 -0
  342. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  343. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  344. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  345. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  346. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  347. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  348. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  349. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  350. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  351. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  352. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  353. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  354. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  355. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  356. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  357. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  358. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  359. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  360. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  361. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  362. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  363. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  364. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  365. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  366. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  367. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  368. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  369. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  370. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  371. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  372. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  373. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  374. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  375. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  376. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  377. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  378. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  379. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  380. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  381. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  382. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  383. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  384. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  385. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  386. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  387. claude_mpm/skills/bundled/pdf.md +141 -0
  388. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  389. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  390. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  391. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  392. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  393. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  394. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  395. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  396. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  397. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  398. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  399. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  400. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  401. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  402. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  403. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  404. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  405. claude_mpm/skills/bundled/security-scanning.md +327 -0
  406. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  407. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  408. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  409. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  410. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  411. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  412. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  413. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  414. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  415. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  416. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  417. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  418. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  419. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  420. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  421. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  422. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  423. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  424. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  425. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  426. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  427. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  428. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  429. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  430. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  431. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  432. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  433. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  434. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  435. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  436. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  437. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  438. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  439. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  440. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  441. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  442. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  443. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  444. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  445. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  446. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  447. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  448. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  449. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  450. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  451. claude_mpm/skills/bundled/xlsx.md +157 -0
  452. claude_mpm/skills/registry.py +97 -9
  453. claude_mpm/skills/skills_registry.py +347 -0
  454. claude_mpm/skills/skills_service.py +739 -0
  455. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  456. claude_mpm/templates/questions/__init__.py +43 -0
  457. claude_mpm/templates/questions/base.py +193 -0
  458. claude_mpm/templates/questions/pr_strategy.py +314 -0
  459. claude_mpm/templates/questions/project_init.py +388 -0
  460. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  461. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  462. claude_mpm/tools/__main__.py +8 -8
  463. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  464. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  465. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  466. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  467. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  468. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  469. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  470. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  471. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  472. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  473. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  474. claude_mpm/utils/agent_dependency_loader.py +5 -5
  475. claude_mpm/utils/dependency_cache.py +3 -1
  476. claude_mpm/utils/gitignore.py +241 -0
  477. claude_mpm/utils/log_cleanup.py +3 -3
  478. claude_mpm/utils/robust_installer.py +3 -5
  479. claude_mpm/utils/structured_questions.py +619 -0
  480. claude_mpm-4.25.10.dist-info/METADATA +789 -0
  481. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +485 -240
  482. claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
  483. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  484. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  485. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  486. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  487. claude_mpm/cli/commands/mpm_init.py +0 -2008
  488. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  489. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  490. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  491. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  492. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  493. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  494. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  495. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  496. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  497. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  498. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  499. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  500. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  501. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  502. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  503. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  504. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  505. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  506. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  507. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  508. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  509. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  510. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  511. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  512. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  513. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  514. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  515. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  516. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  517. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  518. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  519. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  520. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  521. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  522. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  523. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  524. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  525. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  526. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  527. claude_mpm-4.16.0.dist-info/METADATA +0 -453
  528. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  529. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  530. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  531. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,119 @@
1
+ # Framework CLAUDE.md Generator
2
+
3
+ This directory contains the refactored framework CLAUDE.md generator service, originally a single 1,267-line file.
4
+
5
+ ## Structure
6
+
7
+ ### Core Modules
8
+
9
+ - **`__init__.py`** (~250 lines) - Main facade class that coordinates all functionality
10
+ - **`version_manager.py`** (~100 lines) - Handles version parsing, incrementing, and comparison
11
+ - **`content_assembler.py`** (~120 lines) - Assembles sections and applies template variables
12
+ - **`content_validator.py`** (~80 lines) - Validates generated content structure and completeness
13
+ - **`deployment_manager.py`** (~80 lines) - Handles deployment to parent directories
14
+ - **`section_manager.py`** (~60 lines) - Manages section registration, ordering, and updates
15
+
16
+ ### Section Generators
17
+
18
+ The `section_generators/` subdirectory contains individual generators for each section:
19
+
20
+ - **`__init__.py`** - Base classes and registry
21
+ - **`header.py`** - Header with version metadata
22
+ - **`role_designation.py`** - AI Assistant role designation
23
+ - **`agents.py`** (~570 lines) - Comprehensive agents documentation (largest section)
24
+ - **`todo_task_tools.py`** - Todo and Task Tools integration
25
+ - **`claude_pm_init.py`** - Claude-PM initialization procedures
26
+ - **`orchestration_principles.py`** - Core orchestration principles
27
+ - **`subprocess_validation.py`** - Subprocess validation protocol
28
+ - **`delegation_constraints.py`** - Critical delegation constraints
29
+ - **`environment_config.py`** - Environment configuration
30
+ - **`troubleshooting.py`** - Troubleshooting guide
31
+ - **`core_responsibilities.py`** - Core responsibilities list
32
+ - **`footer.py`** - Footer with metadata
33
+
34
+ ## Usage
35
+
36
+ The API remains unchanged from the original implementation:
37
+
38
+ ```python
39
+ from claude_pm.services.framework_claude_md_generator import FrameworkClaudeMdGenerator
40
+
41
+ # Create generator instance (default: INSTRUCTIONS.md)
42
+ generator = FrameworkClaudeMdGenerator()
43
+
44
+ # Or specify a custom target filename (e.g., for legacy compatibility)
45
+ generator = FrameworkClaudeMdGenerator(target_filename="CLAUDE.md")
46
+
47
+ # Generate content
48
+ content = generator.generate(
49
+ current_content=existing_content, # Optional: for version auto-increment
50
+ template_variables={'PLATFORM': 'darwin', 'PYTHON_CMD': 'python3'}
51
+ )
52
+
53
+ # Deploy to parent directory
54
+ success, message = generator.deploy_to_parent(Path('/parent/dir'))
55
+
56
+ # Update a section
57
+ generator.update_section('agents', 'Custom agents content')
58
+
59
+ # Add custom section
60
+ generator.add_custom_section('custom', 'Custom content', after='agents')
61
+ ```
62
+
63
+ ## Configuration Options
64
+
65
+ ### Target Filename
66
+
67
+ The generator supports configurable target filenames for deployment:
68
+
69
+ - **Default**: `"INSTRUCTIONS.md"` - The standard filename for framework instructions
70
+ - **Legacy**: `"CLAUDE.md"` - For backward compatibility with older projects
71
+ - **Custom**: Any filename can be specified for special use cases
72
+
73
+ This configuration affects:
74
+ - Deployment target filename
75
+ - Backup file naming
76
+ - Deployment check logic
77
+
78
+ Example:
79
+ ```python
80
+ # Use legacy filename for older projects
81
+ generator = FrameworkClaudeMdGenerator(target_filename="CLAUDE.md")
82
+
83
+ # Use custom filename for special environments
84
+ generator = FrameworkClaudeMdGenerator(target_filename="PROJECT_INSTRUCTIONS.md")
85
+ ```
86
+
87
+ ## Design Benefits
88
+
89
+ 1. **Modularity**: Each concern is separated into its own module
90
+ 2. **Maintainability**: Smaller, focused modules are easier to understand and modify
91
+ 3. **Testability**: Individual components can be tested in isolation
92
+ 4. **Extensibility**: New section generators can be added easily
93
+ 5. **Performance**: Section generators are loaded on demand
94
+ 6. **Backward Compatibility**: Original API preserved through facade pattern
95
+
96
+ ## Section Generator Pattern
97
+
98
+ To add a new section generator:
99
+
100
+ 1. Create a new file in `section_generators/`
101
+ 2. Inherit from `BaseSectionGenerator`
102
+ 3. Implement the `generate()` method
103
+ 4. Register in `section_generators/__init__.py`
104
+
105
+ Example:
106
+ ```python
107
+ from . import BaseSectionGenerator
108
+
109
+ class CustomSectionGenerator(BaseSectionGenerator):
110
+ def generate(self, data: Dict[str, Any]) -> str:
111
+ return "## Custom Section\n\nContent here..."
112
+ ```
113
+
114
+ ## Refactoring Summary
115
+
116
+ - **Original**: 1,267 lines in a single file
117
+ - **Refactored**: ~250 lines in main module + well-organized submodules
118
+ - **Total line reduction**: Main module reduced by 80%
119
+ - **Improved organization**: 13 focused modules instead of 1 large file
@@ -177,7 +177,7 @@ class ResourceMonitorService(BaseMonitoringService):
177
177
  # Load average (Unix only)
178
178
  try:
179
179
  if hasattr(psutil, "getloadavg"):
180
- load1, load5, load15 = psutil.getloadavg()
180
+ load1, load5, _load15 = psutil.getloadavg()
181
181
  cpu_count = psutil.cpu_count()
182
182
 
183
183
  # Load is concerning if > cpu_count
@@ -0,0 +1,439 @@
1
+ """Resume Log Generator Service.
2
+
3
+ Automatically generates session resume logs when approaching or hitting token limits.
4
+ Integrates with session management and response tracking infrastructure.
5
+
6
+ Triggers:
7
+ - model_context_window_exceeded (stop_reason)
8
+ - Manual pause command
9
+ - 95% token threshold reached
10
+ - Session end with high token usage (>85%)
11
+
12
+ Design Principles:
13
+ - Atomic file operations (via state_storage)
14
+ - Non-blocking generation
15
+ - Graceful degradation if generation fails
16
+ - Integration with existing session state
17
+ """
18
+
19
+ from datetime import datetime, timezone
20
+ from pathlib import Path
21
+ from typing import Any, Dict, List, Optional
22
+
23
+ from claude_mpm.core.logging_utils import get_logger
24
+ from claude_mpm.models.resume_log import ContextMetrics, ResumeLog
25
+ from claude_mpm.storage.state_storage import StateStorage
26
+
27
+ logger = get_logger(__name__)
28
+
29
+
30
+ class ResumeLogGenerator:
31
+ """Service for generating session resume logs."""
32
+
33
+ def __init__(
34
+ self,
35
+ storage_dir: Optional[Path] = None,
36
+ config: Optional[Dict[str, Any]] = None,
37
+ ):
38
+ """Initialize resume log generator.
39
+
40
+ Args:
41
+ storage_dir: Directory for resume logs (default: .claude-mpm/resume-logs)
42
+ config: Configuration dictionary
43
+ """
44
+ self.storage_dir = storage_dir or Path.home() / ".claude-mpm" / "resume-logs"
45
+ self.storage_dir.mkdir(parents=True, exist_ok=True)
46
+
47
+ # State storage for atomic writes
48
+ self.state_storage = StateStorage(
49
+ storage_dir=self.storage_dir.parent / "storage"
50
+ )
51
+
52
+ # Configuration
53
+ self.config = config or {}
54
+ self.enabled = (
55
+ self.config.get("context_management", {})
56
+ .get("resume_logs", {})
57
+ .get("enabled", True)
58
+ )
59
+ self.auto_generate = (
60
+ self.config.get("context_management", {})
61
+ .get("resume_logs", {})
62
+ .get("auto_generate", True)
63
+ )
64
+ self.max_tokens = (
65
+ self.config.get("context_management", {})
66
+ .get("resume_logs", {})
67
+ .get("max_tokens", 10000)
68
+ )
69
+
70
+ # Trigger thresholds
71
+ thresholds = self.config.get("context_management", {}).get("thresholds", {})
72
+ self.threshold_caution = thresholds.get("caution", 0.70)
73
+ self.threshold_warning = thresholds.get("warning", 0.85)
74
+ self.threshold_critical = thresholds.get("critical", 0.95)
75
+
76
+ logger.info(
77
+ f"ResumeLogGenerator initialized (enabled={self.enabled}, auto_generate={self.auto_generate})"
78
+ )
79
+
80
+ def should_generate(
81
+ self,
82
+ stop_reason: Optional[str] = None,
83
+ token_usage_pct: Optional[float] = None,
84
+ manual_trigger: bool = False,
85
+ ) -> bool:
86
+ """Determine if resume log should be generated.
87
+
88
+ Args:
89
+ stop_reason: Claude API stop_reason
90
+ token_usage_pct: Current token usage percentage (0.0-1.0)
91
+ manual_trigger: Manual pause/stop command
92
+
93
+ Returns:
94
+ True if resume log should be generated
95
+ """
96
+ if not self.enabled or not self.auto_generate:
97
+ return manual_trigger # Only generate on manual trigger if auto is disabled
98
+
99
+ # Trigger conditions
100
+ triggers = [
101
+ stop_reason == "max_tokens",
102
+ stop_reason == "model_context_window_exceeded",
103
+ manual_trigger,
104
+ token_usage_pct and token_usage_pct >= self.threshold_critical,
105
+ token_usage_pct
106
+ and token_usage_pct >= self.threshold_warning, # Generate at 85% too
107
+ ]
108
+
109
+ should_gen = any(triggers)
110
+
111
+ if should_gen:
112
+ reason = "unknown"
113
+ if stop_reason:
114
+ reason = f"stop_reason={stop_reason}"
115
+ elif manual_trigger:
116
+ reason = "manual_trigger"
117
+ elif token_usage_pct:
118
+ reason = f"token_usage={token_usage_pct:.1%}"
119
+
120
+ logger.info(f"Resume log generation triggered: {reason}")
121
+
122
+ return should_gen
123
+
124
+ def generate_from_session_state(
125
+ self,
126
+ session_id: str,
127
+ session_state: Dict[str, Any],
128
+ stop_reason: Optional[str] = None,
129
+ ) -> Optional[ResumeLog]:
130
+ """Generate resume log from session state data.
131
+
132
+ Args:
133
+ session_id: Current session ID
134
+ session_state: Session state dictionary
135
+ stop_reason: Claude API stop_reason
136
+
137
+ Returns:
138
+ Generated ResumeLog or None if generation failed
139
+ """
140
+ try:
141
+ # Extract context metrics
142
+ context_data = session_state.get("context_metrics", {})
143
+ context_metrics = ContextMetrics(
144
+ total_budget=context_data.get("total_budget", 200000),
145
+ used_tokens=context_data.get("used_tokens", 0),
146
+ remaining_tokens=context_data.get("remaining_tokens", 0),
147
+ percentage_used=context_data.get("percentage_used", 0.0),
148
+ stop_reason=stop_reason or context_data.get("stop_reason"),
149
+ model=context_data.get("model", "claude-sonnet-4.5"),
150
+ session_id=session_id,
151
+ )
152
+
153
+ # Extract content from session state
154
+ mission_summary = session_state.get("mission_summary", "")
155
+ accomplishments = session_state.get("accomplishments", [])
156
+ key_findings = session_state.get("key_findings", [])
157
+ decisions_made = session_state.get("decisions_made", [])
158
+ next_steps = session_state.get("next_steps", [])
159
+ critical_context = session_state.get("critical_context", {})
160
+
161
+ # Extract metadata
162
+ files_modified = session_state.get("files_modified", [])
163
+ agents_used = session_state.get("agents_used", {})
164
+ errors_encountered = session_state.get("errors_encountered", [])
165
+ warnings = session_state.get("warnings", [])
166
+
167
+ # Create resume log
168
+ resume_log = ResumeLog(
169
+ session_id=session_id,
170
+ previous_session_id=session_state.get("previous_session_id"),
171
+ context_metrics=context_metrics,
172
+ mission_summary=mission_summary,
173
+ accomplishments=accomplishments,
174
+ key_findings=key_findings,
175
+ decisions_made=decisions_made,
176
+ next_steps=next_steps,
177
+ critical_context=critical_context,
178
+ files_modified=files_modified,
179
+ agents_used=agents_used,
180
+ errors_encountered=errors_encountered,
181
+ warnings=warnings,
182
+ )
183
+
184
+ logger.info(f"Generated resume log for session {session_id}")
185
+ return resume_log
186
+
187
+ except Exception as e:
188
+ logger.error(
189
+ f"Failed to generate resume log from session state: {e}", exc_info=True
190
+ )
191
+ return None
192
+
193
+ def generate_from_todo_list(
194
+ self,
195
+ session_id: str,
196
+ todos: List[Dict[str, Any]],
197
+ context_metrics: Optional[ContextMetrics] = None,
198
+ ) -> Optional[ResumeLog]:
199
+ """Generate resume log from TODO list.
200
+
201
+ Useful when session state is minimal but TODO list has rich information.
202
+
203
+ Args:
204
+ session_id: Current session ID
205
+ todos: TODO list items
206
+ context_metrics: Context metrics (optional)
207
+
208
+ Returns:
209
+ Generated ResumeLog or None if generation failed
210
+ """
211
+ try:
212
+ # Categorize todos
213
+ completed = [t for t in todos if t.get("status") == "completed"]
214
+ in_progress = [t for t in todos if t.get("status") == "in_progress"]
215
+ pending = [t for t in todos if t.get("status") == "pending"]
216
+
217
+ # Build accomplishments from completed tasks
218
+ accomplishments = [f"✓ {task['content']}" for task in completed]
219
+
220
+ # Build next steps from in-progress and pending
221
+ next_steps = []
222
+ for task in in_progress:
223
+ next_steps.append(f"[IN PROGRESS] {task['content']}")
224
+ for task in pending:
225
+ next_steps.append(f"[PENDING] {task['content']}")
226
+
227
+ # Create mission summary
228
+ mission_summary = f"Working on {len(todos)} tasks: {len(completed)} completed, {len(in_progress)} in progress, {len(pending)} pending."
229
+
230
+ # Use provided context metrics or create default
231
+ if context_metrics is None:
232
+ context_metrics = ContextMetrics(session_id=session_id)
233
+
234
+ # Create resume log
235
+ resume_log = ResumeLog(
236
+ session_id=session_id,
237
+ context_metrics=context_metrics,
238
+ mission_summary=mission_summary,
239
+ accomplishments=accomplishments,
240
+ next_steps=next_steps,
241
+ critical_context={
242
+ "total_tasks": len(todos),
243
+ "completed_tasks": len(completed),
244
+ "in_progress_tasks": len(in_progress),
245
+ "pending_tasks": len(pending),
246
+ },
247
+ )
248
+
249
+ logger.info(f"Generated resume log from TODO list for session {session_id}")
250
+ return resume_log
251
+
252
+ except Exception as e:
253
+ logger.error(
254
+ f"Failed to generate resume log from TODO list: {e}", exc_info=True
255
+ )
256
+ return None
257
+
258
+ def save_resume_log(self, resume_log: ResumeLog) -> Optional[Path]:
259
+ """Save resume log to storage.
260
+
261
+ Args:
262
+ resume_log: ResumeLog instance to save
263
+
264
+ Returns:
265
+ Path to saved file or None if save failed
266
+ """
267
+ try:
268
+ # Save as markdown (primary format)
269
+ md_path = resume_log.save(storage_dir=self.storage_dir)
270
+
271
+ # Also save as JSON for programmatic access
272
+ json_path = self.storage_dir / f"session-{resume_log.session_id}.json"
273
+ self.state_storage.write_json(
274
+ data=resume_log.to_dict(),
275
+ file_path=json_path,
276
+ atomic=True,
277
+ )
278
+
279
+ logger.info(f"Resume log saved: {md_path}")
280
+ return md_path
281
+
282
+ except Exception as e:
283
+ logger.error(f"Failed to save resume log: {e}", exc_info=True)
284
+ return None
285
+
286
+ def load_resume_log(self, session_id: str) -> Optional[str]:
287
+ """Load resume log markdown content.
288
+
289
+ Args:
290
+ session_id: Session ID to load
291
+
292
+ Returns:
293
+ Markdown content or None if not found
294
+ """
295
+ try:
296
+ md_path = self.storage_dir / f"session-{session_id}.md"
297
+
298
+ if not md_path.exists():
299
+ logger.debug(f"Resume log not found for session {session_id}")
300
+ return None
301
+
302
+ content = md_path.read_text(encoding="utf-8")
303
+ logger.info(f"Loaded resume log for session {session_id}")
304
+ return content
305
+
306
+ except Exception as e:
307
+ logger.error(f"Failed to load resume log: {e}", exc_info=True)
308
+ return None
309
+
310
+ def list_resume_logs(self) -> List[Dict[str, Any]]:
311
+ """List all available resume logs.
312
+
313
+ Returns:
314
+ List of resume log metadata
315
+ """
316
+ try:
317
+ logs = []
318
+
319
+ for md_file in self.storage_dir.glob("session-*.md"):
320
+ # Extract session ID from filename
321
+ session_id = md_file.stem.replace("session-", "")
322
+
323
+ # Check if JSON metadata exists
324
+ json_file = md_file.with_suffix(".json")
325
+ metadata = {}
326
+ if json_file.exists():
327
+ json_data = self.state_storage.read_json(json_file)
328
+ if json_data:
329
+ metadata = {
330
+ "session_id": session_id,
331
+ "created_at": json_data.get("created_at"),
332
+ "previous_session_id": json_data.get("previous_session_id"),
333
+ "context_metrics": json_data.get("context_metrics", {}),
334
+ "file_path": str(md_file),
335
+ }
336
+
337
+ if metadata:
338
+ logs.append(metadata)
339
+ else:
340
+ # Fallback to file metadata
341
+ logs.append(
342
+ {
343
+ "session_id": session_id,
344
+ "file_path": str(md_file),
345
+ "modified_at": datetime.fromtimestamp(
346
+ md_file.stat().st_mtime, tz=timezone.utc
347
+ ).isoformat(),
348
+ }
349
+ )
350
+
351
+ # Sort by creation time (newest first)
352
+ logs.sort(
353
+ key=lambda x: x.get("created_at", x.get("modified_at", "")),
354
+ reverse=True,
355
+ )
356
+
357
+ logger.debug(f"Found {len(logs)} resume logs")
358
+ return logs
359
+
360
+ except Exception as e:
361
+ logger.error(f"Failed to list resume logs: {e}", exc_info=True)
362
+ return []
363
+
364
+ def cleanup_old_logs(self, keep_count: int = 10) -> int:
365
+ """Clean up old resume logs, keeping only the most recent.
366
+
367
+ Args:
368
+ keep_count: Number of logs to keep
369
+
370
+ Returns:
371
+ Number of logs deleted
372
+ """
373
+ try:
374
+ logs = self.list_resume_logs()
375
+
376
+ if len(logs) <= keep_count:
377
+ logger.debug(
378
+ f"No cleanup needed ({len(logs)} logs <= {keep_count} keep)"
379
+ )
380
+ return 0
381
+
382
+ # Delete old logs
383
+ deleted = 0
384
+ for log in logs[keep_count:]:
385
+ try:
386
+ md_path = Path(log["file_path"])
387
+ json_path = md_path.with_suffix(".json")
388
+
389
+ if md_path.exists():
390
+ md_path.unlink()
391
+ deleted += 1
392
+
393
+ if json_path.exists():
394
+ json_path.unlink()
395
+
396
+ except Exception as e:
397
+ logger.warning(f"Failed to delete log {log['session_id']}: {e}")
398
+
399
+ logger.info(f"Cleaned up {deleted} old resume logs (kept {keep_count})")
400
+ return deleted
401
+
402
+ except Exception as e:
403
+ logger.error(f"Failed to cleanup old logs: {e}", exc_info=True)
404
+ return 0
405
+
406
+ def get_stats(self) -> Dict[str, Any]:
407
+ """Get resume log statistics.
408
+
409
+ Returns:
410
+ Dictionary with statistics
411
+ """
412
+ try:
413
+ logs = self.list_resume_logs()
414
+
415
+ total_size = 0
416
+ for log in logs:
417
+ path = Path(log["file_path"])
418
+ if path.exists():
419
+ total_size += path.stat().st_size
420
+
421
+ return {
422
+ "enabled": self.enabled,
423
+ "auto_generate": self.auto_generate,
424
+ "total_logs": len(logs),
425
+ "storage_dir": str(self.storage_dir),
426
+ "total_size_kb": round(total_size / 1024, 2),
427
+ "thresholds": {
428
+ "caution": f"{self.threshold_caution:.0%}",
429
+ "warning": f"{self.threshold_warning:.0%}",
430
+ "critical": f"{self.threshold_critical:.0%}",
431
+ },
432
+ }
433
+
434
+ except Exception as e:
435
+ logger.error(f"Failed to get stats: {e}", exc_info=True)
436
+ return {
437
+ "enabled": self.enabled,
438
+ "error": str(e),
439
+ }
@@ -86,6 +86,7 @@ from claude_mpm.services.core.models.process import (
86
86
  PROTECTED_PORT_RANGES,
87
87
  DeploymentState,
88
88
  ProcessInfo,
89
+ ProcessStatus,
89
90
  StartConfig,
90
91
  is_port_protected,
91
92
  )
@@ -147,6 +148,7 @@ __all__ = [
147
148
  "PortConflictError",
148
149
  "ProcessInfo",
149
150
  "ProcessSpawnError",
151
+ "ProcessStatus",
150
152
  # Data models - Process
151
153
  "ResourceMonitor",
152
154
  "ResourceUsage",
@@ -187,7 +187,7 @@ class LocalProcessManager(SyncBaseService, ILocalProcessManager):
187
187
  # Check if process is still running
188
188
  if process.poll() is not None:
189
189
  # Process died immediately
190
- stdout, stderr = process.communicate()
190
+ _stdout, stderr = process.communicate()
191
191
  error_msg = stderr.decode("utf-8", errors="replace") if stderr else ""
192
192
  raise ProcessSpawnError(
193
193
  f"Process died immediately. Exit code: {process.returncode}. "
@@ -102,7 +102,7 @@ class ResourceMonitor(SyncBaseService, IResourceMonitor):
102
102
  self._initialized = True
103
103
  self.log_info(
104
104
  f"Resource monitor initialized "
105
- f"(fd_threshold={self.fd_threshold_percent*100:.0f}%, "
105
+ f"(fd_threshold={self.fd_threshold_percent * 100:.0f}%, "
106
106
  f"thread_threshold={self.thread_threshold}, "
107
107
  f"connection_threshold={self.connection_threshold}, "
108
108
  f"disk_threshold={self.disk_threshold_mb}MB)"
@@ -304,7 +304,7 @@ class ResourceMonitor(SyncBaseService, IResourceMonitor):
304
304
  return 0
305
305
 
306
306
  try:
307
- soft_limit, hard_limit = resource_module.getrlimit(
307
+ soft_limit, _hard_limit = resource_module.getrlimit(
308
308
  resource_module.RLIMIT_NOFILE
309
309
  )
310
310
  return soft_limit