claude-mpm 4.21.0__py3-none-any.whl → 5.0.2__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 (497) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +632 -334
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  11. claude_mpm/agents/templates/context-management-examples.md +544 -0
  12. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  13. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  14. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  15. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  16. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  17. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  18. claude_mpm/cli/__init__.py +38 -2
  19. claude_mpm/cli/commands/agent_source.py +774 -0
  20. claude_mpm/cli/commands/agent_state_manager.py +125 -20
  21. claude_mpm/cli/commands/agents.py +684 -13
  22. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  23. claude_mpm/cli/commands/agents_discover.py +338 -0
  24. claude_mpm/cli/commands/aggregate.py +1 -1
  25. claude_mpm/cli/commands/analyze.py +3 -3
  26. claude_mpm/cli/commands/auto_configure.py +2 -6
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/config.py +7 -4
  29. claude_mpm/cli/commands/configure.py +478 -44
  30. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  31. claude_mpm/cli/commands/configure_navigation.py +63 -46
  32. claude_mpm/cli/commands/debug.py +12 -12
  33. claude_mpm/cli/commands/doctor.py +10 -2
  34. claude_mpm/cli/commands/hook_errors.py +277 -0
  35. claude_mpm/cli/commands/local_deploy.py +1 -4
  36. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  37. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  38. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  39. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  40. claude_mpm/cli/commands/run.py +124 -128
  41. claude_mpm/cli/commands/skill_source.py +694 -0
  42. claude_mpm/cli/commands/skills.py +435 -1
  43. claude_mpm/cli/executor.py +78 -3
  44. claude_mpm/cli/interactive/agent_wizard.py +919 -41
  45. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  46. claude_mpm/cli/parsers/agents_parser.py +173 -4
  47. claude_mpm/cli/parsers/base_parser.py +49 -0
  48. claude_mpm/cli/parsers/config_parser.py +96 -43
  49. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  50. claude_mpm/cli/parsers/skills_parser.py +138 -0
  51. claude_mpm/cli/parsers/source_parser.py +138 -0
  52. claude_mpm/cli/startup.py +499 -84
  53. claude_mpm/cli/startup_display.py +480 -0
  54. claude_mpm/cli/utils.py +1 -1
  55. claude_mpm/cli_module/commands.py +1 -1
  56. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  57. claude_mpm/commands/mpm-agents-detect.md +9 -0
  58. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  59. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  60. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  61. claude_mpm/commands/mpm-doctor.md +9 -0
  62. claude_mpm/commands/mpm-help.md +14 -2
  63. claude_mpm/commands/mpm-init.md +27 -2
  64. claude_mpm/commands/mpm-monitor.md +9 -0
  65. claude_mpm/commands/mpm-session-resume.md +381 -0
  66. claude_mpm/commands/mpm-status.md +9 -0
  67. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  68. claude_mpm/commands/mpm-ticket-view.md +552 -0
  69. claude_mpm/commands/mpm-version.md +9 -0
  70. claude_mpm/commands/mpm.md +11 -0
  71. claude_mpm/config/agent_presets.py +258 -0
  72. claude_mpm/config/agent_sources.py +325 -0
  73. claude_mpm/config/skill_sources.py +590 -0
  74. claude_mpm/constants.py +12 -0
  75. claude_mpm/core/api_validator.py +1 -1
  76. claude_mpm/core/claude_runner.py +17 -10
  77. claude_mpm/core/config.py +24 -0
  78. claude_mpm/core/constants.py +1 -1
  79. claude_mpm/core/framework/__init__.py +3 -16
  80. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  81. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  82. claude_mpm/core/hook_error_memory.py +381 -0
  83. claude_mpm/core/hook_manager.py +41 -2
  84. claude_mpm/core/interactive_session.py +112 -5
  85. claude_mpm/core/logger.py +3 -1
  86. claude_mpm/core/oneshot_session.py +94 -4
  87. claude_mpm/dashboard/static/css/activity.css +69 -69
  88. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  89. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  90. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  91. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  92. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  93. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  94. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  95. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  96. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  97. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  98. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  99. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  100. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  101. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  102. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  103. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  104. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  105. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  106. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  107. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  108. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  109. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  110. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  111. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  112. claude_mpm/dashboard/templates/code_simple.html +23 -23
  113. claude_mpm/dashboard/templates/index.html +18 -18
  114. claude_mpm/experimental/cli_enhancements.py +1 -5
  115. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  116. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  117. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  118. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  119. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  120. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  121. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  122. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  123. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  124. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  125. claude_mpm/models/git_repository.py +198 -0
  126. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  127. claude_mpm/scripts/start_activity_logging.py +3 -1
  128. claude_mpm/services/agents/agent_builder.py +45 -9
  129. claude_mpm/services/agents/agent_preset_service.py +238 -0
  130. claude_mpm/services/agents/agent_selection_service.py +484 -0
  131. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  132. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  133. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  134. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  135. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  136. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  137. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  138. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  139. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  140. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  141. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  142. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  143. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  144. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  145. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  146. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  147. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  148. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  149. claude_mpm/services/agents/git_source_manager.py +629 -0
  150. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  151. claude_mpm/services/agents/local_template_manager.py +50 -10
  152. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  153. claude_mpm/services/agents/sources/__init__.py +13 -0
  154. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  155. claude_mpm/services/agents/sources/git_source_sync_service.py +1055 -0
  156. claude_mpm/services/agents/startup_sync.py +239 -0
  157. claude_mpm/services/agents/toolchain_detector.py +474 -0
  158. claude_mpm/services/cli/session_pause_manager.py +1 -1
  159. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  160. claude_mpm/services/command_deployment_service.py +92 -1
  161. claude_mpm/services/core/base.py +26 -11
  162. claude_mpm/services/core/interfaces/__init__.py +1 -3
  163. claude_mpm/services/core/interfaces/health.py +1 -4
  164. claude_mpm/services/core/models/__init__.py +2 -11
  165. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  166. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  167. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  168. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  169. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  170. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  171. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  172. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  173. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  174. claude_mpm/services/event_bus/direct_relay.py +3 -3
  175. claude_mpm/services/event_bus/event_bus.py +36 -3
  176. claude_mpm/services/event_bus/relay.py +23 -7
  177. claude_mpm/services/events/consumers/logging.py +1 -2
  178. claude_mpm/services/git/__init__.py +21 -0
  179. claude_mpm/services/git/git_operations_service.py +494 -0
  180. claude_mpm/services/github/__init__.py +21 -0
  181. claude_mpm/services/github/github_cli_service.py +397 -0
  182. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  183. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  184. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  185. claude_mpm/services/instructions/__init__.py +9 -0
  186. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  187. claude_mpm/services/local_ops/__init__.py +3 -13
  188. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  189. claude_mpm/services/local_ops/health_manager.py +1 -4
  190. claude_mpm/services/local_ops/process_manager.py +1 -1
  191. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  192. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  193. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  194. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  195. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  196. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  197. claude_mpm/services/memory/failure_tracker.py +19 -4
  198. claude_mpm/services/memory/optimizer.py +1 -1
  199. claude_mpm/services/model/model_router.py +8 -9
  200. claude_mpm/services/monitor/daemon.py +1 -1
  201. claude_mpm/services/monitor/server.py +2 -2
  202. claude_mpm/services/native_agent_converter.py +356 -0
  203. claude_mpm/services/port_manager.py +1 -1
  204. claude_mpm/services/pr/__init__.py +14 -0
  205. claude_mpm/services/pr/pr_template_service.py +329 -0
  206. claude_mpm/services/project/documentation_manager.py +2 -1
  207. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  208. claude_mpm/services/runner_configuration_service.py +1 -0
  209. claude_mpm/services/self_upgrade_service.py +165 -7
  210. claude_mpm/services/skills/__init__.py +18 -0
  211. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  212. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  213. claude_mpm/services/skills_config.py +547 -0
  214. claude_mpm/services/skills_deployer.py +955 -0
  215. claude_mpm/services/socketio/handlers/connection.py +1 -1
  216. claude_mpm/services/socketio/handlers/git.py +2 -2
  217. claude_mpm/services/socketio/server/core.py +1 -4
  218. claude_mpm/services/socketio/server/main.py +1 -3
  219. claude_mpm/services/system_instructions_service.py +1 -3
  220. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  221. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  222. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  223. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  224. claude_mpm/services/unified/unified_deployment.py +1 -5
  225. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  226. claude_mpm/services/visualization/__init__.py +1 -5
  227. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  228. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  229. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  230. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  231. claude_mpm/skills/skills_registry.py +0 -1
  232. claude_mpm/templates/questions/__init__.py +38 -0
  233. claude_mpm/templates/questions/base.py +193 -0
  234. claude_mpm/templates/questions/pr_strategy.py +311 -0
  235. claude_mpm/templates/questions/project_init.py +385 -0
  236. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  237. claude_mpm/tools/__main__.py +8 -8
  238. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  239. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  240. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  241. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  242. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  243. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  244. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  245. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  246. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  247. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  248. claude_mpm/utils/agent_dependency_loader.py +80 -13
  249. claude_mpm/utils/dependency_cache.py +3 -1
  250. claude_mpm/utils/gitignore.py +241 -0
  251. claude_mpm/utils/log_cleanup.py +3 -3
  252. claude_mpm/utils/progress.py +383 -0
  253. claude_mpm/utils/robust_installer.py +3 -5
  254. claude_mpm/utils/structured_questions.py +619 -0
  255. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/METADATA +429 -59
  256. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/RECORD +264 -427
  257. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  258. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  259. claude_mpm/agents/templates/agent-manager.json +0 -273
  260. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  261. claude_mpm/agents/templates/api_qa.json +0 -180
  262. claude_mpm/agents/templates/clerk-ops.json +0 -235
  263. claude_mpm/agents/templates/code_analyzer.json +0 -101
  264. claude_mpm/agents/templates/content-agent.json +0 -358
  265. claude_mpm/agents/templates/dart_engineer.json +0 -307
  266. claude_mpm/agents/templates/data_engineer.json +0 -225
  267. claude_mpm/agents/templates/documentation.json +0 -211
  268. claude_mpm/agents/templates/engineer.json +0 -210
  269. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  270. claude_mpm/agents/templates/golang_engineer.json +0 -270
  271. claude_mpm/agents/templates/imagemagick.json +0 -264
  272. claude_mpm/agents/templates/java_engineer.json +0 -346
  273. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  274. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  275. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  276. claude_mpm/agents/templates/memory_manager.json +0 -158
  277. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  278. claude_mpm/agents/templates/ops.json +0 -185
  279. claude_mpm/agents/templates/php-engineer.json +0 -287
  280. claude_mpm/agents/templates/product_owner.json +0 -338
  281. claude_mpm/agents/templates/project_organizer.json +0 -140
  282. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  283. claude_mpm/agents/templates/python_engineer.json +0 -387
  284. claude_mpm/agents/templates/qa.json +0 -242
  285. claude_mpm/agents/templates/react_engineer.json +0 -238
  286. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  287. claude_mpm/agents/templates/research.json +0 -188
  288. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  289. claude_mpm/agents/templates/rust_engineer.json +0 -275
  290. claude_mpm/agents/templates/security.json +0 -202
  291. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  292. claude_mpm/agents/templates/ticketing.json +0 -177
  293. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  294. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  295. claude_mpm/agents/templates/version_control.json +0 -157
  296. claude_mpm/agents/templates/web_qa.json +0 -399
  297. claude_mpm/agents/templates/web_ui.json +0 -189
  298. claude_mpm/commands/mpm-tickets.md +0 -102
  299. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  300. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  301. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  302. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  303. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  304. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  305. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  306. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  307. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  308. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  309. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  310. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  311. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  312. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  313. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  314. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  315. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  316. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  317. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  318. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  319. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  320. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  321. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  322. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  323. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  324. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  325. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  326. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  327. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  328. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  329. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  330. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  331. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  332. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  333. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  334. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  335. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  336. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  337. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  338. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  339. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  340. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  341. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  342. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  343. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  344. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  345. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  346. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  347. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  348. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  349. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  350. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  351. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  352. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  353. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  354. claude_mpm/dashboard/static/built/react/events.js +0 -30
  355. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  356. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  357. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  358. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  359. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  360. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  361. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  362. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  363. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  364. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  365. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  366. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  367. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  368. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  369. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  370. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  371. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  372. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  373. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  374. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  375. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  376. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  377. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  378. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  379. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  380. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  381. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  382. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  383. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  384. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  385. claude_mpm/dashboard/static/events.html +0 -607
  386. claude_mpm/dashboard/static/index.html +0 -635
  387. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  388. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  389. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  390. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  391. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  392. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  393. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  394. claude_mpm/dashboard/static/legacy/files.html +0 -747
  395. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  396. claude_mpm/dashboard/static/monitors.html +0 -431
  397. claude_mpm/dashboard/static/production/events.html +0 -659
  398. claude_mpm/dashboard/static/production/main.html +0 -698
  399. claude_mpm/dashboard/static/production/monitors.html +0 -483
  400. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  401. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  402. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  403. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  404. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  405. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  406. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  407. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  408. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  409. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  410. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  411. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  412. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  413. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  414. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  415. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  416. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  417. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  418. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  419. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  420. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  421. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  422. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  423. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  424. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  425. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  426. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  427. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  428. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  429. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  430. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  431. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  432. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  433. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  434. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  435. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  436. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  437. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  438. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  439. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  440. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  441. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  442. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  443. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  444. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  445. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  446. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  447. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  448. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  449. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  450. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  451. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  452. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  453. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  454. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  455. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  456. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  457. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  458. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  459. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  460. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  461. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  462. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  463. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  464. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  465. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  466. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  467. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  468. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  469. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  470. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  472. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  473. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  478. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  479. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  480. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  481. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  482. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  483. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  484. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  485. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  486. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  487. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  488. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  489. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  490. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  491. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  492. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  493. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  494. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/WHEEL +0 -0
  495. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/entry_points.txt +0 -0
  496. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/licenses/LICENSE +0 -0
  497. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/top_level.txt +0 -0
@@ -1,758 +0,0 @@
1
- # Server Management Reference
2
-
3
- Complete guide to server lifecycle management, port management, and process control for webapp testing.
4
-
5
- ## Table of Contents
6
-
7
- - [Server Lifecycle](#server-lifecycle)
8
- - [Port Management](#port-management)
9
- - [Process Management](#process-management)
10
- - [Environment Configuration](#environment-configuration)
11
- - [Health Checks](#health-checks)
12
- - [Graceful Shutdown](#graceful-shutdown)
13
- - [Multi-Server Configurations](#multi-server-configurations)
14
- - [Troubleshooting](#troubleshooting)
15
-
16
- ## Server Lifecycle
17
-
18
- ### Using with_server.py Helper Script
19
-
20
- The `with_server.py` script manages the complete server lifecycle:
21
- - Starts server(s)
22
- - Waits for server(s) to be ready
23
- - Runs your automation script
24
- - Cleans up server(s) automatically
25
-
26
- **Always run with `--help` first:**
27
- ```bash
28
- python scripts/with_server.py --help
29
- ```
30
-
31
- ### Single Server Management
32
-
33
- **Basic usage:**
34
- ```bash
35
- python scripts/with_server.py --server "npm run dev" --port 5173 -- python automation.py
36
- ```
37
-
38
- **With custom timeout:**
39
- ```bash
40
- python scripts/with_server.py --server "npm start" --port 3000 --timeout 60 -- python test.py
41
- ```
42
-
43
- **Django example:**
44
- ```bash
45
- python scripts/with_server.py --server "python manage.py runserver 8000" --port 8000 -- python test.py
46
- ```
47
-
48
- **Flask example:**
49
- ```bash
50
- python scripts/with_server.py --server "flask run --port 5000" --port 5000 -- python test.py
51
- ```
52
-
53
- **Node.js Express example:**
54
- ```bash
55
- python scripts/with_server.py --server "node server.js" --port 3000 -- python test.py
56
- ```
57
-
58
- ### Multiple Server Management
59
-
60
- **Frontend + Backend:**
61
- ```bash
62
- python scripts/with_server.py \
63
- --server "cd backend && python server.py" --port 3000 \
64
- --server "cd frontend && npm run dev" --port 5173 \
65
- -- python test.py
66
- ```
67
-
68
- **Microservices:**
69
- ```bash
70
- python scripts/with_server.py \
71
- --server "cd auth-service && npm start" --port 3001 \
72
- --server "cd api-service && npm start" --port 3002 \
73
- --server "cd frontend && npm start" --port 3000 \
74
- -- python test.py
75
- ```
76
-
77
- **Database + API + Frontend:**
78
- ```bash
79
- python scripts/with_server.py \
80
- --server "docker-compose up db" --port 5432 \
81
- --server "cd api && npm start" --port 4000 \
82
- --server "cd web && npm start" --port 3000 \
83
- -- python test.py
84
- ```
85
-
86
- ### Manual Server Management
87
-
88
- When you need more control than `with_server.py` provides:
89
-
90
- **Start server in background:**
91
- ```bash
92
- # Node.js
93
- npm run dev > /tmp/server.log 2>&1 &
94
- echo $! > /tmp/server.pid
95
-
96
- # Python
97
- python manage.py runserver > /tmp/server.log 2>&1 &
98
- echo $! > /tmp/server.pid
99
-
100
- # Flask
101
- FLASK_APP=app.py flask run > /tmp/server.log 2>&1 &
102
- echo $! > /tmp/server.pid
103
- ```
104
-
105
- **Check if server is ready:**
106
- ```bash
107
- # Using curl
108
- curl -f http://localhost:3000/health
109
- if [ $? -eq 0 ]; then echo "Server ready"; fi
110
-
111
- # Using lsof
112
- lsof -i :3000 -sTCP:LISTEN
113
- ```
114
-
115
- **Stop server:**
116
- ```bash
117
- # Using saved PID
118
- kill $(cat /tmp/server.pid)
119
-
120
- # Using port
121
- lsof -t -i :3000 | xargs kill
122
-
123
- # Force kill if not responding
124
- lsof -t -i :3000 | xargs kill -9
125
- ```
126
-
127
- ## Port Management
128
-
129
- ### Check Port Availability
130
-
131
- **Using lsof (macOS/Linux):**
132
- ```bash
133
- # Check if port is in use
134
- lsof -i :3000
135
-
136
- # Check specific protocol
137
- lsof -i TCP:3000
138
- lsof -i UDP:3000
139
-
140
- # List all listening ports
141
- lsof -i -sTCP:LISTEN
142
- ```
143
-
144
- **Using netstat (cross-platform):**
145
- ```bash
146
- # Check specific port
147
- netstat -an | grep :3000
148
-
149
- # List all listening TCP ports
150
- netstat -an | grep LISTEN
151
- ```
152
-
153
- **Using nc (netcat):**
154
- ```bash
155
- # Check if port is open
156
- nc -zv localhost 3000
157
-
158
- # Check range of ports
159
- nc -zv localhost 3000-3010
160
- ```
161
-
162
- **Python check:**
163
- ```python
164
- import socket
165
-
166
- def is_port_available(port):
167
- try:
168
- with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
169
- s.bind(('localhost', port))
170
- return True
171
- except OSError:
172
- return False
173
-
174
- print(f"Port 3000 available: {is_port_available(3000)}")
175
- ```
176
-
177
- ### Find Process Using Port
178
-
179
- ```bash
180
- # Get PID of process using port
181
- lsof -t -i :3000
182
-
183
- # Get detailed info
184
- lsof -i :3000
185
-
186
- # Output example:
187
- # COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
188
- # node 12345 user 20u IPv4 0x1234 0t0 TCP *:3000 (LISTEN)
189
- ```
190
-
191
- ### Kill Process on Port
192
-
193
- ```bash
194
- # Kill process (graceful)
195
- lsof -t -i :3000 | xargs kill
196
-
197
- # Force kill if not responding
198
- lsof -t -i :3000 | xargs kill -9
199
-
200
- # Alternative using port number
201
- kill $(lsof -t -i :3000)
202
- ```
203
-
204
- ### Choose Alternative Port
205
-
206
- **Check multiple ports:**
207
- ```bash
208
- for port in 3000 3001 3002 3003; do
209
- if ! lsof -i :$port > /dev/null; then
210
- echo "Port $port is available"
211
- break
212
- fi
213
- done
214
- ```
215
-
216
- **Python find available port:**
217
- ```python
218
- import socket
219
-
220
- def find_available_port(start=3000, end=3100):
221
- for port in range(start, end):
222
- try:
223
- with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
224
- s.bind(('localhost', port))
225
- return port
226
- except OSError:
227
- continue
228
- return None
229
-
230
- port = find_available_port()
231
- print(f"Available port: {port}")
232
- ```
233
-
234
- ## Process Management
235
-
236
- ### pm2 (Node.js Process Manager)
237
-
238
- **Install pm2:**
239
- ```bash
240
- npm install -g pm2
241
- ```
242
-
243
- **Basic commands:**
244
- ```bash
245
- # Start server
246
- pm2 start npm --name "my-app" -- start
247
-
248
- # Start with environment
249
- pm2 start npm --name "my-app" -- start --update-env
250
-
251
- # List running processes
252
- pm2 list
253
-
254
- # Monitor processes
255
- pm2 monit
256
-
257
- # Show logs
258
- pm2 logs my-app
259
-
260
- # Stop process
261
- pm2 stop my-app
262
-
263
- # Restart process
264
- pm2 restart my-app
265
-
266
- # Delete process
267
- pm2 delete my-app
268
-
269
- # Stop all
270
- pm2 stop all
271
- ```
272
-
273
- **Ecosystem file (pm2.config.js):**
274
- ```javascript
275
- module.exports = {
276
- apps: [{
277
- name: 'frontend',
278
- script: 'npm',
279
- args: 'start',
280
- cwd: './frontend',
281
- env: {
282
- PORT: 3000,
283
- NODE_ENV: 'development'
284
- }
285
- }, {
286
- name: 'backend',
287
- script: 'npm',
288
- args: 'start',
289
- cwd: './backend',
290
- env: {
291
- PORT: 4000,
292
- NODE_ENV: 'development'
293
- }
294
- }]
295
- }
296
- ```
297
-
298
- **Start from ecosystem:**
299
- ```bash
300
- pm2 start pm2.config.js
301
- ```
302
-
303
- ### systemd (Linux System Service)
304
-
305
- **Create service file (/etc/systemd/system/myapp.service):**
306
- ```ini
307
- [Unit]
308
- Description=My Web Application
309
- After=network.target
310
-
311
- [Service]
312
- Type=simple
313
- User=www-data
314
- WorkingDirectory=/var/www/myapp
315
- ExecStart=/usr/bin/node server.js
316
- Restart=on-failure
317
- Environment=NODE_ENV=production
318
- Environment=PORT=3000
319
-
320
- [Install]
321
- WantedBy=multi-user.target
322
- ```
323
-
324
- **Service commands:**
325
- ```bash
326
- # Reload systemd
327
- sudo systemctl daemon-reload
328
-
329
- # Start service
330
- sudo systemctl start myapp
331
-
332
- # Stop service
333
- sudo systemctl stop myapp
334
-
335
- # Restart service
336
- sudo systemctl restart myapp
337
-
338
- # Enable on boot
339
- sudo systemctl enable myapp
340
-
341
- # Check status
342
- sudo systemctl status myapp
343
-
344
- # View logs
345
- sudo journalctl -u myapp -f
346
- ```
347
-
348
- ### Docker Container Management
349
-
350
- **Run server in container:**
351
- ```bash
352
- # Start container
353
- docker run -d -p 3000:3000 --name myapp myapp:latest
354
-
355
- # Check if container is running
356
- docker ps | grep myapp
357
-
358
- # Stop container
359
- docker stop myapp
360
-
361
- # Remove container
362
- docker rm myapp
363
-
364
- # View logs
365
- docker logs -f myapp
366
- ```
367
-
368
- **Docker Compose:**
369
- ```yaml
370
- # docker-compose.yml
371
- version: '3'
372
- services:
373
- frontend:
374
- build: ./frontend
375
- ports:
376
- - "3000:3000"
377
- environment:
378
- - NODE_ENV=development
379
-
380
- backend:
381
- build: ./backend
382
- ports:
383
- - "4000:4000"
384
- environment:
385
- - NODE_ENV=development
386
- ```
387
-
388
- **Compose commands:**
389
- ```bash
390
- # Start all services
391
- docker-compose up -d
392
-
393
- # Stop all services
394
- docker-compose down
395
-
396
- # View logs
397
- docker-compose logs -f
398
-
399
- # Restart service
400
- docker-compose restart frontend
401
- ```
402
-
403
- ## Environment Configuration
404
-
405
- ### Environment Variables
406
-
407
- **Setting environment variables:**
408
- ```bash
409
- # Linux/macOS
410
- export PORT=3000
411
- export NODE_ENV=development
412
-
413
- # Windows (cmd)
414
- set PORT=3000
415
- set NODE_ENV=development
416
-
417
- # Windows (PowerShell)
418
- $env:PORT=3000
419
- $env:NODE_ENV="development"
420
- ```
421
-
422
- **Using .env file:**
423
- ```bash
424
- # .env
425
- PORT=3000
426
- NODE_ENV=development
427
- DATABASE_URL=postgresql://localhost/mydb
428
- API_KEY=secret123
429
- ```
430
-
431
- **Load .env in Python:**
432
- ```python
433
- from dotenv import load_dotenv
434
- import os
435
-
436
- load_dotenv()
437
- port = os.getenv('PORT', 3000)
438
- ```
439
-
440
- **Load .env in Node.js:**
441
- ```javascript
442
- require('dotenv').config();
443
- const port = process.env.PORT || 3000;
444
- ```
445
-
446
- ### Configuration Files
447
-
448
- **Package.json scripts:**
449
- ```json
450
- {
451
- "scripts": {
452
- "start": "node server.js",
453
- "dev": "nodemon server.js",
454
- "test": "NODE_ENV=test jest",
455
- "start:prod": "NODE_ENV=production node server.js"
456
- }
457
- }
458
- ```
459
-
460
- **Python settings.py:**
461
- ```python
462
- import os
463
-
464
- PORT = int(os.getenv('PORT', 8000))
465
- DEBUG = os.getenv('DEBUG', 'False') == 'True'
466
- DATABASE_URL = os.getenv('DATABASE_URL', 'sqlite:///db.sqlite3')
467
- ```
468
-
469
- ## Health Checks
470
-
471
- ### Implementing Health Check Endpoint
472
-
473
- **Express.js:**
474
- ```javascript
475
- app.get('/health', (req, res) => {
476
- res.status(200).json({
477
- status: 'ok',
478
- timestamp: new Date().toISOString(),
479
- uptime: process.uptime()
480
- });
481
- });
482
- ```
483
-
484
- **Flask:**
485
- ```python
486
- @app.route('/health')
487
- def health():
488
- return jsonify({
489
- 'status': 'ok',
490
- 'timestamp': datetime.now().isoformat()
491
- })
492
- ```
493
-
494
- **Django:**
495
- ```python
496
- from django.http import JsonResponse
497
- from datetime import datetime
498
-
499
- def health_check(request):
500
- return JsonResponse({
501
- 'status': 'ok',
502
- 'timestamp': datetime.now().isoformat()
503
- })
504
- ```
505
-
506
- ### Checking Health from Tests
507
-
508
- **Using curl:**
509
- ```bash
510
- curl -f http://localhost:3000/health
511
- ```
512
-
513
- **Using Python requests:**
514
- ```python
515
- import requests
516
-
517
- def wait_for_server(url, timeout=30):
518
- start = time.time()
519
- while time.time() - start < timeout:
520
- try:
521
- response = requests.get(f"{url}/health", timeout=1)
522
- if response.status_code == 200:
523
- return True
524
- except requests.RequestException:
525
- time.sleep(0.5)
526
- return False
527
-
528
- if wait_for_server('http://localhost:3000'):
529
- print("Server is ready")
530
- ```
531
-
532
- **Using Playwright:**
533
- ```python
534
- def wait_for_server_ready(page, url, timeout=30000):
535
- page.goto(f"{url}/health", timeout=timeout)
536
- response = page.wait_for_response(f"{url}/health")
537
- return response.status == 200
538
- ```
539
-
540
- ## Graceful Shutdown
541
-
542
- ### Signal Handling
543
-
544
- **Node.js graceful shutdown:**
545
- ```javascript
546
- const server = app.listen(3000);
547
-
548
- process.on('SIGTERM', () => {
549
- console.log('SIGTERM received, closing server...');
550
- server.close(() => {
551
- console.log('Server closed');
552
- process.exit(0);
553
- });
554
- });
555
-
556
- process.on('SIGINT', () => {
557
- console.log('SIGINT received, closing server...');
558
- server.close(() => {
559
- console.log('Server closed');
560
- process.exit(0);
561
- });
562
- });
563
- ```
564
-
565
- **Python graceful shutdown:**
566
- ```python
567
- import signal
568
- import sys
569
-
570
- def signal_handler(sig, frame):
571
- print('Shutting down gracefully...')
572
- # Clean up resources
573
- sys.exit(0)
574
-
575
- signal.signal(signal.SIGTERM, signal_handler)
576
- signal.signal(signal.SIGINT, signal_handler)
577
- ```
578
-
579
- ### Cleanup Tasks
580
-
581
- **Close database connections:**
582
- ```javascript
583
- process.on('SIGTERM', async () => {
584
- await db.close();
585
- await cache.disconnect();
586
- server.close(() => process.exit(0));
587
- });
588
- ```
589
-
590
- **Finish in-flight requests:**
591
- ```javascript
592
- server.close(() => {
593
- console.log('All requests finished');
594
- process.exit(0);
595
- });
596
-
597
- // Force exit after timeout
598
- setTimeout(() => {
599
- console.error('Forcing shutdown');
600
- process.exit(1);
601
- }, 10000);
602
- ```
603
-
604
- ## Multi-Server Configurations
605
-
606
- ### Development Stack
607
-
608
- **Full-stack development:**
609
- ```bash
610
- # Terminal 1: Database
611
- docker run -d -p 5432:5432 postgres
612
-
613
- # Terminal 2: Backend API
614
- cd backend && npm run dev
615
-
616
- # Terminal 3: Frontend
617
- cd frontend && npm start
618
-
619
- # Or use with_server.py for all at once
620
- python scripts/with_server.py \
621
- --server "docker run -p 5432:5432 postgres" --port 5432 \
622
- --server "cd backend && npm run dev" --port 4000 \
623
- --server "cd frontend && npm start" --port 3000 \
624
- -- python test.py
625
- ```
626
-
627
- ### Microservices Testing
628
-
629
- **Multiple independent services:**
630
- ```bash
631
- python scripts/with_server.py \
632
- --server "cd auth-service && npm start" --port 3001 \
633
- --server "cd user-service && npm start" --port 3002 \
634
- --server "cd payment-service && npm start" --port 3003 \
635
- --server "cd gateway && npm start" --port 3000 \
636
- -- python integration_test.py
637
- ```
638
-
639
- ### Reverse Proxy Setup
640
-
641
- **Nginx configuration:**
642
- ```nginx
643
- server {
644
- listen 80;
645
-
646
- location /api {
647
- proxy_pass http://localhost:4000;
648
- }
649
-
650
- location / {
651
- proxy_pass http://localhost:3000;
652
- }
653
- }
654
- ```
655
-
656
- ## Troubleshooting
657
-
658
- ### Server Won't Start
659
-
660
- **Port already in use:**
661
- ```bash
662
- # Find what's using the port
663
- lsof -i :3000
664
-
665
- # Kill the process
666
- lsof -t -i :3000 | xargs kill
667
- ```
668
-
669
- **Permission denied:**
670
- ```bash
671
- # Ports < 1024 require root (avoid if possible)
672
- sudo node server.js # NOT RECOMMENDED
673
-
674
- # Use port >= 1024 instead
675
- PORT=3000 node server.js
676
- ```
677
-
678
- **Missing dependencies:**
679
- ```bash
680
- # Node.js
681
- npm install
682
-
683
- # Python
684
- pip install -r requirements.txt
685
-
686
- # Check for errors
687
- npm start 2>&1 | tee server.log
688
- ```
689
-
690
- ### Server Crashes During Test
691
-
692
- **Check logs:**
693
- ```bash
694
- # If using with_server.py, check stderr
695
- python scripts/with_server.py --server "npm start" --port 3000 -- python test.py 2>&1
696
-
697
- # Check application logs
698
- tail -f server.log
699
-
700
- # Docker logs
701
- docker logs -f container_name
702
- ```
703
-
704
- **Memory issues:**
705
- ```bash
706
- # Increase Node.js memory
707
- NODE_OPTIONS="--max-old-space-size=4096" npm start
708
-
709
- # Monitor memory
710
- top -pid $(lsof -t -i :3000)
711
- ```
712
-
713
- ### Server Not Responding
714
-
715
- **Check if process is alive:**
716
- ```bash
717
- ps aux | grep node
718
- ps aux | grep python
719
- ```
720
-
721
- **Check network connectivity:**
722
- ```bash
723
- # Test localhost
724
- curl http://localhost:3000
725
-
726
- # Test network interface
727
- curl http://127.0.0.1:3000
728
-
729
- # Check if listening on correct interface
730
- lsof -i -sTCP:LISTEN | grep 3000
731
- ```
732
-
733
- **Firewall issues:**
734
- ```bash
735
- # macOS
736
- sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
737
-
738
- # Linux
739
- sudo ufw status
740
- ```
741
-
742
- ### Timeout Issues
743
-
744
- **Increase timeout in with_server.py:**
745
- ```bash
746
- python scripts/with_server.py --server "npm start" --port 3000 --timeout 60 -- python test.py
747
- ```
748
-
749
- **Check server startup time:**
750
- ```bash
751
- time npm start
752
- ```
753
-
754
- **Optimize startup:**
755
- - Reduce initial data loading
756
- - Use lazy initialization
757
- - Optimize dependency loading
758
- - Use production builds for testing