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,687 +0,0 @@
1
- # Reconnaissance-Then-Action Pattern
2
-
3
- Complete guide to the reconnaissance-before-action philosophy for webapp testing.
4
-
5
- ## Table of Contents
6
-
7
- - [The Philosophy](#the-philosophy)
8
- - [Why Reconnaissance First](#why-reconnaissance-first)
9
- - [The Reconnaissance Process](#the-reconnaissance-process)
10
- - [Server Status Checks](#server-status-checks)
11
- - [Network Diagnostics](#network-diagnostics)
12
- - [DOM Inspection](#dom-inspection)
13
- - [Log Analysis](#log-analysis)
14
- - [Performance Reconnaissance](#performance-reconnaissance)
15
- - [Security Reconnaissance](#security-reconnaissance)
16
- - [Reconnaissance Checklist](#reconnaissance-checklist)
17
- - [Common Failures](#common-failures)
18
-
19
- ## The Philosophy
20
-
21
- **Reconnaissance-Then-Action** is the core principle of webapp testing:
22
-
23
- 1. **Observe** the current state before acting
24
- 2. **Understand** what you're working with
25
- 3. **Plan** your actions based on reconnaissance
26
- 4. **Execute** with confidence
27
- 5. **Verify** the results completely
28
-
29
- **The Iron Law:**
30
- > Never test a webapp without first verifying the server state and waiting for the page to be fully loaded.
31
-
32
- **Why this matters:**
33
- - Tests fail mysteriously when servers aren't ready
34
- - Actions fail when pages haven't finished loading
35
- - Selectors break when DOM is still being built
36
- - Network requests fail when services aren't available
37
- - Time is wasted debugging problems that don't exist
38
-
39
- ## Why Reconnaissance First
40
-
41
- ### The Cost of Skipping Reconnaissance
42
-
43
- **Without reconnaissance:**
44
- ```python
45
- # ❌ BAD: Jump straight to testing
46
- page.goto('http://localhost:3000')
47
- page.click('button.submit') # Fails - element not ready
48
- # Error: Timeout 30000ms exceeded
49
- ```
50
-
51
- **With reconnaissance:**
52
- ```python
53
- # ✅ GOOD: Check state first
54
- page.goto('http://localhost:3000')
55
- page.wait_for_load_state('networkidle') # Wait for page ready
56
- page.screenshot(path='/tmp/before.png') # Verify what we see
57
- page.click('button.submit') # Succeeds - page is ready
58
- ```
59
-
60
- ### Real-World Benefits
61
-
62
- **Time saved:**
63
- - 5 seconds of reconnaissance saves 30 minutes of debugging
64
- - One screenshot reveals problems that take hours to diagnose
65
- - Server check prevents entire test suite failures
66
-
67
- **Confidence gained:**
68
- - Know exactly what state the system is in
69
- - Understand why tests pass or fail
70
- - Debug issues 10x faster with visual evidence
71
-
72
- **Reliability improved:**
73
- - Tests pass consistently
74
- - Fewer false negatives
75
- - Clear failure messages when problems occur
76
-
77
- ## The Reconnaissance Process
78
-
79
- ### Step 1: Verify Server State
80
-
81
- **Check if server is running:**
82
- ```bash
83
- # Using lsof (most reliable)
84
- lsof -i :3000 -sTCP:LISTEN
85
-
86
- # Using curl (checks HTTP response)
87
- curl -f http://localhost:3000/health
88
- ```
89
-
90
- **What to look for:**
91
- - Is the port listening?
92
- - Is the process alive?
93
- - Does it respond to HTTP requests?
94
- - What's the response time?
95
-
96
- **Example output analysis:**
97
- ```bash
98
- $ lsof -i :3000 -sTCP:LISTEN
99
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
100
- node 12345 user 20u IPv4 0x1234 0t0 TCP *:3000 (LISTEN)
101
-
102
- # Good signs:
103
- # ✅ Process is running (PID 12345)
104
- # ✅ Listening on correct port (3000)
105
- # ✅ Protocol is TCP
106
- # ✅ State is LISTEN
107
- ```
108
-
109
- ### Step 2: Navigate and Wait
110
-
111
- **Always wait for network idle on dynamic apps:**
112
- ```python
113
- page.goto('http://localhost:3000')
114
- page.wait_for_load_state('networkidle') # CRITICAL
115
- ```
116
-
117
- **Why networkidle is essential:**
118
- - JavaScript frameworks need time to initialize
119
- - API calls must complete before DOM is ready
120
- - Components may render multiple times
121
- - Dynamic content loads asynchronously
122
-
123
- **Wait hierarchy:**
124
- 1. `domcontentloaded` - HTML parsed (too early for most apps)
125
- 2. `load` - Resources loaded (images, CSS)
126
- 3. `networkidle` - Network requests finished (best for testing)
127
-
128
- ### Step 3: Visual Reconnaissance
129
-
130
- **Take screenshots before acting:**
131
- ```python
132
- # Full page screenshot
133
- page.screenshot(path='/tmp/reconnaissance.png', full_page=True)
134
-
135
- # Element-specific screenshot
136
- page.locator('.modal').screenshot(path='/tmp/modal.png')
137
-
138
- # Custom viewport
139
- page.set_viewport_size({'width': 1920, 'height': 1080})
140
- page.screenshot(path='/tmp/desktop.png')
141
- ```
142
-
143
- **What screenshots reveal:**
144
- - Is the page actually loaded?
145
- - Are elements visible where expected?
146
- - Is layout correct?
147
- - Are there error messages?
148
- - Is content what you expect?
149
-
150
- ### Step 4: DOM Inspection
151
-
152
- **Discover what's actually on the page:**
153
- ```python
154
- # Get full HTML
155
- content = page.content()
156
- print(content[:500]) # First 500 chars
157
-
158
- # Find all buttons
159
- buttons = page.locator('button').all()
160
- print(f"Found {len(buttons)} buttons:")
161
- for i, btn in enumerate(buttons):
162
- text = btn.inner_text() if btn.is_visible() else "[hidden]"
163
- print(f" [{i}] {text}")
164
-
165
- # Find all links
166
- links = page.locator('a[href]').all()
167
- for link in links[:5]:
168
- print(f" - {link.inner_text()} -> {link.get_attribute('href')}")
169
-
170
- # Find all inputs
171
- inputs = page.locator('input, textarea, select').all()
172
- for inp in inputs:
173
- name = inp.get_attribute('name') or inp.get_attribute('id') or "[unnamed]"
174
- print(f" - {name}")
175
- ```
176
-
177
- **Example reconnaissance script:**
178
- ```python
179
- from playwright.sync_api import sync_playwright
180
-
181
- def reconnaissance(url):
182
- with sync_playwright() as p:
183
- browser = p.chromium.launch(headless=True)
184
- page = browser.new_page()
185
-
186
- # Navigate and wait
187
- page.goto(url)
188
- page.wait_for_load_state('networkidle')
189
-
190
- # Visual reconnaissance
191
- page.screenshot(path='/tmp/recon.png', full_page=True)
192
- print("Screenshot saved: /tmp/recon.png")
193
-
194
- # Element reconnaissance
195
- print("\nButtons:")
196
- for i, btn in enumerate(page.locator('button').all()):
197
- print(f" [{i}] {btn.inner_text()}")
198
-
199
- print("\nLinks:")
200
- for link in page.locator('a[href]').all()[:10]:
201
- print(f" - {link.inner_text()}")
202
-
203
- print("\nInputs:")
204
- for inp in page.locator('input').all():
205
- name = inp.get_attribute('name') or '[unnamed]'
206
- print(f" - {name}")
207
-
208
- browser.close()
209
-
210
- reconnaissance('http://localhost:3000')
211
- ```
212
-
213
- ### Step 5: Console Log Reconnaissance
214
-
215
- **Capture console output:**
216
- ```python
217
- console_logs = []
218
-
219
- def handle_console(msg):
220
- console_logs.append(f"[{msg.type}] {msg.text}")
221
- print(f"Console: [{msg.type}] {msg.text}")
222
-
223
- page.on("console", handle_console)
224
- page.goto('http://localhost:3000')
225
- page.wait_for_load_state('networkidle')
226
-
227
- # Save logs
228
- with open('/tmp/console.log', 'w') as f:
229
- f.write('\n'.join(console_logs))
230
- ```
231
-
232
- **What console logs reveal:**
233
- - JavaScript errors
234
- - API failures
235
- - Warning messages
236
- - Debug output
237
- - Performance timing
238
-
239
- ## Server Status Checks
240
-
241
- ### Using lsof (macOS/Linux)
242
-
243
- **Basic check:**
244
- ```bash
245
- lsof -i :3000
246
- ```
247
-
248
- **Check if listening:**
249
- ```bash
250
- lsof -i :3000 -sTCP:LISTEN
251
- ```
252
-
253
- **Get just PID:**
254
- ```bash
255
- lsof -t -i :3000
256
- ```
257
-
258
- **Detailed output:**
259
- ```bash
260
- lsof -i :3000 -P -n
261
- # -P: Don't resolve port names
262
- # -n: Don't resolve hostnames
263
- ```
264
-
265
- ### Using ps (Process Status)
266
-
267
- **Check if process is running:**
268
- ```bash
269
- ps aux | grep node
270
- ps aux | grep python
271
- ps aux | grep "npm.*start"
272
- ```
273
-
274
- **Check CPU and memory:**
275
- ```bash
276
- ps aux | grep 12345 # PID from lsof
277
- ```
278
-
279
- ### Using curl (HTTP Check)
280
-
281
- **Basic health check:**
282
- ```bash
283
- curl http://localhost:3000
284
- ```
285
-
286
- **Check specific endpoint:**
287
- ```bash
288
- curl http://localhost:3000/health
289
- ```
290
-
291
- **Check with timeout:**
292
- ```bash
293
- curl --max-time 5 http://localhost:3000
294
- ```
295
-
296
- **Check and show response time:**
297
- ```bash
298
- curl -w "\nTime: %{time_total}s\n" http://localhost:3000
299
- ```
300
-
301
- **Silent success check:**
302
- ```bash
303
- if curl -f -s http://localhost:3000/health > /dev/null; then
304
- echo "Server is healthy"
305
- else
306
- echo "Server is not responding"
307
- fi
308
- ```
309
-
310
- ### Using netstat
311
-
312
- **Check listening ports:**
313
- ```bash
314
- netstat -an | grep LISTEN | grep 3000
315
- ```
316
-
317
- **Show all TCP connections:**
318
- ```bash
319
- netstat -an | grep tcp
320
- ```
321
-
322
- ## Network Diagnostics
323
-
324
- ### Using curl for Diagnostics
325
-
326
- **Verbose output:**
327
- ```bash
328
- curl -v http://localhost:3000
329
- ```
330
-
331
- **Show response headers:**
332
- ```bash
333
- curl -I http://localhost:3000
334
- ```
335
-
336
- **Follow redirects:**
337
- ```bash
338
- curl -L http://localhost:3000
339
- ```
340
-
341
- **Save response:**
342
- ```bash
343
- curl -o response.html http://localhost:3000
344
- ```
345
-
346
- **Test POST request:**
347
- ```bash
348
- curl -X POST -H "Content-Type: application/json" \
349
- -d '{"test":"data"}' \
350
- http://localhost:3000/api/endpoint
351
- ```
352
-
353
- ### Network Timing
354
-
355
- **Measure response time:**
356
- ```bash
357
- curl -w "@curl-format.txt" -o /dev/null -s http://localhost:3000
358
- ```
359
-
360
- **curl-format.txt:**
361
- ```
362
- time_namelookup: %{time_namelookup}s\n
363
- time_connect: %{time_connect}s\n
364
- time_appconnect: %{time_appconnect}s\n
365
- time_pretransfer: %{time_pretransfer}s\n
366
- time_redirect: %{time_redirect}s\n
367
- time_starttransfer: %{time_starttransfer}s\n
368
- ----------\n
369
- time_total: %{time_total}s\n
370
- ```
371
-
372
- ### Using tcpdump (Advanced)
373
-
374
- **Capture HTTP traffic:**
375
- ```bash
376
- sudo tcpdump -i lo0 -A -s 0 'tcp port 3000'
377
- ```
378
-
379
- **Save to file:**
380
- ```bash
381
- sudo tcpdump -i lo0 -w capture.pcap 'tcp port 3000'
382
- ```
383
-
384
- ## DOM Inspection
385
-
386
- ### Element Discovery Pattern
387
-
388
- **Find interactive elements:**
389
- ```python
390
- # Buttons
391
- buttons = page.locator('button, input[type="button"], input[type="submit"]').all()
392
-
393
- # Links
394
- links = page.locator('a[href]').all()
395
-
396
- # Form inputs
397
- inputs = page.locator('input, textarea, select').all()
398
-
399
- # Clickable elements
400
- clickable = page.locator('[onclick], [role="button"]').all()
401
- ```
402
-
403
- ### Check Element State
404
-
405
- **Visibility:**
406
- ```python
407
- element = page.locator('button.submit')
408
- print(f"Visible: {element.is_visible()}")
409
- print(f"Enabled: {element.is_enabled()}")
410
- print(f"Editable: {element.is_editable()}")
411
- ```
412
-
413
- **Attributes:**
414
- ```python
415
- print(f"Text: {element.inner_text()}")
416
- print(f"HTML: {element.inner_html()}")
417
- print(f"Class: {element.get_attribute('class')}")
418
- print(f"ID: {element.get_attribute('id')}")
419
- ```
420
-
421
- ### Find Selectors
422
-
423
- **Test different selector strategies:**
424
- ```python
425
- # Try text selector
426
- try:
427
- page.locator('text=Submit').is_visible()
428
- print("✅ Text selector works: 'text=Submit'")
429
- except:
430
- print("❌ Text selector failed")
431
-
432
- # Try role selector
433
- try:
434
- page.locator('role=button[name="Submit"]').is_visible()
435
- print("✅ Role selector works: 'role=button[name=\"Submit\"]'")
436
- except:
437
- print("❌ Role selector failed")
438
-
439
- # Try CSS selector
440
- try:
441
- page.locator('button.submit').is_visible()
442
- print("✅ CSS selector works: 'button.submit'")
443
- except:
444
- print("❌ CSS selector failed")
445
- ```
446
-
447
- ## Log Analysis
448
-
449
- ### Server Logs
450
-
451
- **Node.js console output:**
452
- ```bash
453
- npm start > server.log 2>&1 &
454
- tail -f server.log
455
- ```
456
-
457
- **Look for:**
458
- - Startup messages
459
- - Port binding confirmation
460
- - Error messages
461
- - Warning messages
462
- - Request logs
463
-
464
- ### Application Logs
465
-
466
- **Grep for errors:**
467
- ```bash
468
- grep -i error server.log
469
- grep -i warning server.log
470
- grep -i exception server.log
471
- ```
472
-
473
- **Filter by timestamp:**
474
- ```bash
475
- grep "2024-01-15 14:" server.log
476
- ```
477
-
478
- **Count errors:**
479
- ```bash
480
- grep -c "ERROR" server.log
481
- ```
482
-
483
- ## Performance Reconnaissance
484
-
485
- ### Response Time Checks
486
-
487
- **Measure with curl:**
488
- ```bash
489
- curl -w "Time: %{time_total}s\n" -o /dev/null -s http://localhost:3000
490
- ```
491
-
492
- **Measure with Playwright:**
493
- ```python
494
- import time
495
-
496
- start = time.time()
497
- page.goto('http://localhost:3000')
498
- page.wait_for_load_state('networkidle')
499
- elapsed = time.time() - start
500
-
501
- print(f"Page load time: {elapsed:.2f}s")
502
- ```
503
-
504
- ### Resource Usage
505
-
506
- **Check CPU and memory:**
507
- ```bash
508
- pid=$(lsof -t -i :3000)
509
- ps -p $pid -o %cpu,%mem,rss,vsz
510
- ```
511
-
512
- **Monitor continuously:**
513
- ```bash
514
- watch -n 1 'ps -p $(lsof -t -i :3000) -o %cpu,%mem,rss'
515
- ```
516
-
517
- ## Security Reconnaissance
518
-
519
- ### Port Scanning
520
-
521
- **Check open ports:**
522
- ```bash
523
- nmap localhost
524
- ```
525
-
526
- **Specific port:**
527
- ```bash
528
- nmap -p 3000 localhost
529
- ```
530
-
531
- ### SSL/TLS Check
532
-
533
- **Test HTTPS:**
534
- ```bash
535
- curl -k https://localhost:3000
536
- ```
537
-
538
- **Check certificate:**
539
- ```bash
540
- openssl s_client -connect localhost:3000
541
- ```
542
-
543
- ### Header Analysis
544
-
545
- **Check security headers:**
546
- ```bash
547
- curl -I http://localhost:3000 | grep -i "security\|cors\|content-security"
548
- ```
549
-
550
- ## Reconnaissance Checklist
551
-
552
- ### Pre-Test Checklist
553
-
554
- - [ ] Server is running (lsof check)
555
- - [ ] Port is accessible (curl check)
556
- - [ ] Server responds to health check
557
- - [ ] Response time is reasonable (< 2s)
558
- - [ ] No errors in server logs
559
- - [ ] Environment variables are set
560
- - [ ] Dependencies are installed
561
-
562
- ### During-Test Checklist
563
-
564
- - [ ] Page navigation successful
565
- - [ ] Waited for networkidle
566
- - [ ] Screenshot captured
567
- - [ ] Console logs captured
568
- - [ ] Expected elements are visible
569
- - [ ] No JavaScript errors
570
- - [ ] Form fields are editable
571
- - [ ] Buttons are clickable
572
-
573
- ### Post-Action Checklist
574
-
575
- - [ ] Action completed without errors
576
- - [ ] Expected state change occurred
577
- - [ ] No new console errors
578
- - [ ] Screenshot shows expected result
579
- - [ ] Server still responding
580
- - [ ] No memory leaks (check server resources)
581
-
582
- ## Common Failures
583
-
584
- ### Failure: Server Not Running
585
-
586
- **Symptoms:**
587
- - Connection refused errors
588
- - Timeout errors
589
- - lsof returns no results
590
-
591
- **Reconnaissance steps:**
592
- ```bash
593
- # Check if server is running
594
- lsof -i :3000
595
-
596
- # Check if process exists
597
- ps aux | grep node
598
-
599
- # Check server logs
600
- cat server.log | tail -20
601
- ```
602
-
603
- **Solution:**
604
- - Start server manually
605
- - Use with_server.py script
606
- - Check for port conflicts
607
- - Review startup errors
608
-
609
- ### Failure: Page Not Fully Loaded
610
-
611
- **Symptoms:**
612
- - Element not found errors
613
- - Stale element errors
614
- - Timeout waiting for selector
615
-
616
- **Reconnaissance steps:**
617
- ```python
618
- # Take screenshot to see what's actually loaded
619
- page.screenshot(path='/tmp/debug.png', full_page=True)
620
-
621
- # Check network state
622
- page.wait_for_load_state('networkidle')
623
-
624
- # Check for loading indicators
625
- loading = page.locator('.loading, .spinner').is_visible()
626
- print(f"Still loading: {loading}")
627
- ```
628
-
629
- **Solution:**
630
- - Always wait for networkidle
631
- - Wait for specific elements
632
- - Check for loading indicators
633
- - Increase timeouts if needed
634
-
635
- ### Failure: Wrong Element Selected
636
-
637
- **Symptoms:**
638
- - Action has no effect
639
- - Wrong element is clicked
640
- - Unexpected behavior
641
-
642
- **Reconnaissance steps:**
643
- ```python
644
- # Find all matching elements
645
- elements = page.locator('button').all()
646
- print(f"Found {len(elements)} buttons")
647
- for i, el in enumerate(elements):
648
- print(f"[{i}] {el.inner_text()}")
649
-
650
- # Highlight element before clicking
651
- page.locator('button.submit').evaluate('el => el.style.border = "3px solid red"')
652
- page.screenshot(path='/tmp/highlighted.png')
653
- ```
654
-
655
- **Solution:**
656
- - Use more specific selectors
657
- - Use data-testid attributes
658
- - Verify element before clicking
659
- - Check element count
660
-
661
- ### Failure: Network Request Failed
662
-
663
- **Symptoms:**
664
- - API errors in console
665
- - Empty data
666
- - Timeout errors
667
-
668
- **Reconnaissance steps:**
669
- ```python
670
- # Monitor network requests
671
- def handle_response(response):
672
- print(f"Response: {response.url} - {response.status}")
673
-
674
- page.on("response", handle_response)
675
-
676
- # Wait for specific API call
677
- with page.expect_response('**/api/data') as response_info:
678
- page.click('button.load')
679
- response = response_info.value
680
- print(f"Status: {response.status}")
681
- ```
682
-
683
- **Solution:**
684
- - Check API server is running
685
- - Verify CORS configuration
686
- - Check network timeouts
687
- - Mock API responses if needed